<?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>150941</bug_id>
          
          <creation_ts>2015-11-05 13:13:41 -0800</creation_ts>
          <short_desc>[WinCairo][Video][MediaFoundation] Video should be rendered in provided graphics context.</short_desc>
          <delta_ts>2022-01-11 16:06:19 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=198523</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=235088</see_also>
          <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>peavo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1139719</commentid>
    <comment_count>0</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-11-05 13:13:41 -0800</bug_when>
    <thetext>On WinCairo, we currently render video in a child window of the main browser window. This makes it difficult to render things on top of the video, like video controls and context menus. We should render the video in the graphics context provided by the paint method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139726</commentid>
    <comment_count>1</comment_count>
      <attachid>264880</attachid>
    <who name="">peavo</who>
    <bug_when>2015-11-05 13:25:33 -0800</bug_when>
    <thetext>Created attachment 264880
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139730</commentid>
    <comment_count>2</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-11-05 13:28:20 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created attachment 264880 [details]
&gt; Patch

This patch is based on the EVR custom presenter example on MSDN.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139736</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-05 13:37:46 -0800</bug_when>
    <thetext>This is exciting! I&apos;ll try this out and review it, but I probably won&apos;t get to it for a few days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139737</commentid>
    <comment_count>4</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-11-05 13:39:10 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; This is exciting! I&apos;ll try this out and review it, but I probably won&apos;t get
&gt; to it for a few days.

Thanks, no rush ;)

I&apos;ve tested this patch on easyhtml5video.com. I&apos;ve also been testing YouTube; there are some repaint issues there, since the invalidation of the frame view does not lead to a repaint of the video for some reason. I will look into that soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139738</commentid>
    <comment_count>5</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-11-05 13:41:29 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; This is exciting! I&apos;ll try this out and review it, but I probably won&apos;t get
&gt; to it for a few days.

Also, I haven&apos;t tested it in debug mode, so there might be some failing asserts in debug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139886</commentid>
    <comment_count>6</comment_count>
      <attachid>264880</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-05 22:06:09 -0800</bug_when>
    <thetext>Comment on attachment 264880
Patch

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

http://www.w3.org/2010/05/video/mediaevents.html didn&apos;t draw in my debug build.  I&apos;m sure this is very close to good, but r- because it needs a little more polishing.

&gt; Source/WebCore/platform/graphics/win/MediaFoundationUtils.h:28
&gt; +const MFTIME oneSecond = 10000000; // One second in hns
&gt; +const LONG oneMsec = 1000; // One msec in hns 

I assume hns means hundred nanoseconds, in which case oneMsec should be 10000 hns, not 1000.  I also think these should have better names.

&gt; Source/WebCore/platform/graphics/win/MediaFoundationUtils.h:1013
&gt; +//////////////////////////////////////////////////////////////////////////

Probably not necessary.  This isn&apos;t done elsewhere in WebKit.

&gt; Source/WebCore/platform/graphics/win/MediaFoundationUtils.h:1021
&gt; +    offset.fract = WORD(65536 * (v-offset.value));

Give 65536 a name.  std::numeric_limits&lt;WORD&gt;::max() + 1
Here and in MFOffsetToFloat, which should probably be right next to this.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:86
&gt; +static const GUID MFSamplePresenterSampleCounter =
&gt; +{ 0xb0bb83cc, 0xf10f, 0x4e2e, { 0xaa, 0x2b, 0x29, 0xea, 0x5e, 0x92, 0xef, 0x85 } };

Where did these come from?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:790
&gt; +    : m_refCount(0)

Use m_refCount { 0 }; etc. in the header instead of having the default values here.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:1861
&gt; +    if ((srcPAR.Numerator != destPAR.Numerator) || (srcPAR.Denominator != destPAR.Denominator)) {

Is the greatest common factor of Numerator and Denominator always 1?  I think a better way to determine if two fractions are equal is to cross multiply.  That way 1/2 would be equal to 2/4

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:2155
&gt; +    ASSERT(MFGetAttributeUINT32(pSample, MFSamplePresenter_SampleCounter, (UINT32)-1) == m_TokenCounter);

pSample -&gt; pSample.get()
MFSamplePresenter_SampleCounter -&gt; MFSamplePresenterSampleCounter
There are two other places where you have underscores in comments that don&apos;t exist in the variable names.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:3437
&gt; +        ctxt-&gt;drawSurfaceToContext(image, rect, rect, context);

This is where the magic happens!  Cool!

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:3454
&gt; +//-----------------------------------------------------------------------------
&gt; +// InitializeD3D
&gt; +// 
&gt; +// Initializes Direct3D and the Direct3D device manager.
&gt; +//-----------------------------------------------------------------------------

Again, I don&apos;t think comments like this are necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139892</commentid>
    <comment_count>7</comment_count>
      <attachid>264880</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-05 23:02:47 -0800</bug_when>
    <thetext>Comment on attachment 264880
Patch

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

&gt; Source/WebCore/platform/graphics/win/MediaFoundationUtils.h:9
&gt; +#define CheckPointer(x, hr) if (x == nullptr) { return hr; }

WebKit style: if (!x)
Also, I think this macro isn&apos;t good.  Just have lots of early returns.  That&apos;ll make it more clear and consistent with the rest of WebKit.

&gt; Source/WebCore/platform/graphics/win/MediaFoundationUtils.h:82
&gt; +        return m_pType != nullptr;

Again, no comparing with nullptr.  !!m_pType

&gt; Source/WebCore/platform/graphics/win/MediaFoundationUtils.h:87
&gt; +        assert(IsValid());

ASSERT here and elsewhere.

&gt; Source/WebCore/platform/graphics/win/MediaFoundationUtils.h:100
&gt; +        : m_pType(nullptr)
&gt; +    {
&gt; +        if (pType) {
&gt; +            m_pType = pType;
&gt; +            m_pType-&gt;AddRef();  
&gt; +        }

This is strange.  I&apos;d prefer this:
    : m_pType(pType)
{
    if (m_pType)
        m_pType-&gt;AddRef();
}

&gt; Source/WebCore/platform/graphics/win/MediaFoundationUtils.h:104
&gt; +    // Copy ctor
&gt; +    MediaType(const MediaType&amp;  mt)

Comments like this not needed.

&gt; Source/WebCore/platform/graphics/win/MediaFoundationUtils.h:1133
&gt; +template&lt;class T&gt;
&gt; +class AsyncCallback : public IMFAsyncCallback {

This is cool, but it&apos;s only used once.  Is it always called on the main thread, or do we need Locks when using this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140026</commentid>
    <comment_count>8</comment_count>
      <attachid>264947</attachid>
    <who name="">peavo</who>
    <bug_when>2015-11-06 12:08:48 -0800</bug_when>
    <thetext>Created attachment 264947
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140030</commentid>
    <comment_count>9</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-11-06 12:18:41 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 264880 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264880&amp;action=review

Thanks for the swift review :)

&gt; 
&gt; http://www.w3.org/2010/05/video/mediaevents.html didn&apos;t draw in my debug
&gt; build.  I&apos;m sure this is very close to good, but r- because it needs a
&gt; little more polishing.
&gt; 

I&apos;ll have a look at this testcase.

&gt; &gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:86
&gt; &gt; +static const GUID MFSamplePresenterSampleCounter =
&gt; &gt; +{ 0xb0bb83cc, 0xf10f, 0x4e2e, { 0xaa, 0x2b, 0x29, 0xea, 0x5e, 0x92, 0xef, 0x85 } };
&gt; 
&gt; Where did these come from?
&gt; 

These are GUIDs generated by Visual Studio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140032</commentid>
    <comment_count>10</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-11-06 12:21:30 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 264880 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264880&amp;action=review
&gt; 
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/win/MediaFoundationUtils.h:1133
&gt; &gt; +template&lt;class T&gt;
&gt; &gt; +class AsyncCallback : public IMFAsyncCallback {
&gt; 
&gt; This is cool, but it&apos;s only used once.  Is it always called on the main
&gt; thread, or do we need Locks when using this?

I removed this template, since the same thing can be accomplished by letting CustomVideoPresenter inherit from IMFAsyncCallback and implement the required methods :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140344</commentid>
    <comment_count>11</comment_count>
      <attachid>265044</attachid>
    <who name="">peavo</who>
    <bug_when>2015-11-09 06:29:54 -0800</bug_when>
    <thetext>Created attachment 265044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140360</commentid>
    <comment_count>12</comment_count>
      <attachid>265048</attachid>
    <who name="">peavo</who>
    <bug_when>2015-11-09 07:25:45 -0800</bug_when>
    <thetext>Created attachment 265048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140378</commentid>
    <comment_count>13</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-11-09 08:57:37 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created attachment 265048 [details]
&gt; Patch

I will upload yet another patch soon :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140433</commentid>
    <comment_count>14</comment_count>
      <attachid>265074</attachid>
    <who name="">peavo</who>
    <bug_when>2015-11-09 11:07:19 -0800</bug_when>
    <thetext>Created attachment 265074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140434</commentid>
    <comment_count>15</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-11-09 11:10:09 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created attachment 265074 [details]
&gt; Patch

Fixed style issues, removed unneeded methods, and in general tightened the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140445</commentid>
    <comment_count>16</comment_count>
      <attachid>265074</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-11-09 11:45:42 -0800</bug_when>
    <thetext>Comment on attachment 265074
Patch

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

This looks great! I have a few suggestions before landing, but I think it looks good.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:834
&gt; +ULONG STDMETHODCALLTYPE MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::AddRef()

Please remove the STDMETHODCALLTYPE stuff from the *.cpp file.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:840
&gt; +ULONG STDMETHODCALLTYPE MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::Release()

Ditto.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:1081
&gt; +        *ppv = static_cast&lt;IMFVideoPresenter*&gt;(this);

We should be checking for null ppv before dereferencing it.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:1678
&gt; +static HRESULT GetVideoDisplayArea(IMFMediaType *type, MFVideoArea *area)

Do we need type and area null checks? Maybe we know that all uses have been null checked. The spacing looks wrong, since this isn&apos;t Objective C (i.e., &quot;IMFMediaType *type&quot; -&gt; &quot;IMFMediaType* type&quot;, &quot;MFVideoArea *area&quot; -&gt; &quot;MFVideoArea* area&quot;.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:1684
&gt; +    bPanScan = MFGetAttributeUINT32(type, MF_MT_PAN_SCAN_ENABLED, FALSE);

I prefer &quot;BOOL bPanScan = ...&quot; since nothing happens between declaring the BOOL and initializing it.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:1779
&gt; +    if (!sample)

So we do check nulls in some of these functions. I feel like this should be consistent, unless we are in an especially tight loop that can&apos;t afford the test.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:1880
&gt; +    hr = m_mixer-&gt;ProcessOutput(0, 1, &amp;dataBuffer, &amp;status);

Are there conditions where m_mixer can be null? If not, maybe we should access it through a reference instead.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:1957
&gt; +    HRESULT hr = sample-&gt;QueryInterface(__uuidof(IMFTrackedSample), (void**)&amp;tracked);

Do we ever have SUCCEEDED(hr) with a null &quot;tracked&quot;?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:1979
&gt; +HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::onSampleFree(IMFAsyncResult* result)

Can &apos;result&apos; ever be null?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:2043
&gt; +    m_videoSampleQueue.append(sample);

Is it OK to append null samples?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:2749
&gt; +        &amp;device

This should really be reduced to a few lines. We don&apos;t typically use these vertically-extended MS-style formats.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140511</commentid>
    <comment_count>17</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-11-09 13:52:27 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Comment on attachment 265074 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265074&amp;action=review
&gt; 
&gt; This looks great! I have a few suggestions before landing, but I think it
&gt; looks good.
&gt; 

Thanks for reviewing!

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:1880
&gt; &gt; +    hr = m_mixer-&gt;ProcessOutput(0, 1, &amp;dataBuffer, &amp;status);
&gt; 
&gt; Are there conditions where m_mixer can be null? If not, maybe we should
&gt; access it through a reference instead.
&gt; 

Yes, it can be null during shutdown :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140514</commentid>
    <comment_count>18</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-11-09 13:55:17 -0800</bug_when>
    <thetext>Committed r192176: &lt;http://trac.webkit.org/changeset/192176&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264880</attachid>
            <date>2015-11-05 13:25:33 -0800</date>
            <delta_ts>2015-11-06 12:08:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150941-20151105222434.patch</filename>
            <type>text/plain</type>
            <size>186037</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MjA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxMCBAQAorMjAxNS0xMS0wNSAgUGVyIEFy
bmUgVm9sbGFuICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXVtWaWRl
b11bTWVkaWFGb3VuZGF0aW9uXSBWaWRlbyBzaG91bGQgYmUgcmVuZGVyZWQgaW4gcHJvdmlkZWQg
Z3JhcGhpY3MgY29udGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDk0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE9uIFdpbkNhaXJvLCB3ZSBjdXJyZW50bHkgcmVuZGVyIHZpZGVvIGluIGEgY2hp
bGQgd2luZG93IG9mIHRoZSBtYWluIGJyb3dzZXIgd2luZG93LgorICAgICAgICBUaGlzIG1ha2Vz
IGl0IGRpZmZpY3VsdCB0byByZW5kZXIgdGhpbmdzIG9uIHRvcCBvZiB0aGUgdmlkZW8sIGxpa2Ug
dmlkZW8gY29udHJvbHMgYW5kCisgICAgICAgIGNvbnRleHQgbWVudXMuIFdlIHNob3VsZCByZW5k
ZXIgdGhlIHZpZGVvIGluIHRoZSBncmFwaGljcyBjb250ZXh0IHByb3ZpZGVkIGJ5IHRoZSBwYWlu
dAorICAgICAgICBtZXRob2QuIFRoaXMgaXMgZG9uZSBieSBpbXBsZW1lbnRpbmcgYSBjdXN0b20g
RVZSIChFbmhhbmNlZCBWaWRlbyBSZW5kZXJlcikgcHJlc2VudGVyCisgICAgICAgIGZvciBNZWRp
YSBGb3VuZGF0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhRm91
bmRhdGlvblV0aWxzLmg6IEFkZGVkLgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1G
VGltZVRvTXNlYyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXJlQ29tT2JqZWN0
c0VxdWFsKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6OklzVmFs
aWQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6R2V0TWVkaWFU
eXBlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6Ok1lZGlhVHlw
ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjp+TWVkaWFUeXBl
KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6Om9wZXJhdG9yPSk6
CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpvcGVyYXRvciYpOgor
ICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6b3BlcmF0b3IgSU1GTWVk
aWFUeXBlKik6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpDcmVh
dGVFbXB0eVR5cGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6
RGV0YWNoKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6OkdldE1h
am9yVHlwZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpJc0Nv
bXByZXNzZWRGb3JtYXQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlw
ZTo6SXNFcXVhbCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpH
ZXRSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFU
eXBlOjpGcmVlUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6
Ok1lZGlhVHlwZTo6Q29weUZyb20pOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1l
ZGlhVHlwZTo6U2V0TWFqb3JUeXBlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpN
ZWRpYVR5cGU6OkdldFN1YlR5cGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1l
ZGlhVHlwZTo6U2V0U3ViVHlwZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVk
aWFUeXBlOjpHZXRGb3VyQ0MpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlh
VHlwZTo6R2V0QWxsU2FtcGxlc0luZGVwZW5kZW50KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlv
blV0aWxzOjpNZWRpYVR5cGU6OlNldEFsbFNhbXBsZXNJbmRlcGVuZGVudCk6CisgICAgICAgIChN
ZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpHZXRGaXhlZFNpemVTYW1wbGVzKToKKyAg
ICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6OlNldEZpeGVkU2l6ZVNhbXBs
ZXMpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6R2V0U2FtcGxl
U2l6ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpTZXRTYW1w
bGVTaXplKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6OlVud3Jh
cCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpBbGxTYW1wbGVz
SW5kZXBlbmRlbnQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6
Rml4ZWRTaXplU2FtcGxlcyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFU
eXBlOjpTYW1wbGVTaXplKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5
cGU6OlZpZGVvVHlwZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBl
OjpDcmVhdGVFbXB0eVR5cGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVv
VHlwZTo6R2V0SW50ZXJsYWNlTW9kZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6
VmlkZW9UeXBlOjpTZXRJbnRlcmxhY2VNb2RlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0
aWxzOjpWaWRlb1R5cGU6OkdldERlZmF1bHRTdHJpZGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0
aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0RGVmYXVsdFN0cmlkZSk6CisgICAgICAgIChNZWRpYUZv
dW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRGcmFtZURpbWVuc2lvbnMpOgorICAgICAgICAo
TWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0RnJhbWVEaW1lbnNpb25zKToKKyAg
ICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldERhdGFCaXRFcnJvclJh
dGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0RGF0YUJp
dEVycm9yUmF0ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpH
ZXRBdmVyYWdlQml0UmF0ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9U
eXBlOjpTZXRBdmdlcmFnZUJpdFJhdGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6
OlZpZGVvVHlwZTo6R2V0Q3VzdG9tVmlkZW9QcmltYXJpZXMpOgorICAgICAgICAoTWVkaWFGb3Vu
ZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0Q3VzdG9tVmlkZW9QcmltYXJpZXMpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0RnJhbWVSYXRlKToKKyAgICAg
ICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OlNldEZyYW1lUmF0ZSk6CisgICAg
ICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRHZW9tZXRyaWNBcGVydHVy
ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRHZW9tZXRy
aWNBcGVydHVyZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpH
ZXRNYXhLZXlmcmFtZVNwYWNpbmcpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZp
ZGVvVHlwZTo6U2V0TWF4S2V5ZnJhbWVTcGFjaW5nKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlv
blV0aWxzOjpWaWRlb1R5cGU6OkdldE1pbkRpc3BsYXlBcGVydHVyZSk6CisgICAgICAgIChNZWRp
YUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRNaW5EaXNwbGF5QXBlcnR1cmUpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0UGFkQ29udHJvbEZsYWdz
KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OlNldFBhZENvbnRy
b2xGbGFncyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRQ
YWxldHRlRW50cmllcyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBl
OjpTZXRQYWxldHRlRW50cmllcyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6Vmlk
ZW9UeXBlOjpHZXROdW1QYWxldHRlRW50cmllcyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25V
dGlsczo6VmlkZW9UeXBlOjpHZXRQYW5TY2FuQXBlcnR1cmUpOgorICAgICAgICAoTWVkaWFGb3Vu
ZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0UGFuU2NhbkFwZXJ0dXJlKToKKyAgICAgICAgKE1l
ZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OklzUGFuU2NhbkVuYWJsZWQpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0UGFuU2NhbkVuYWJsZWQpOgor
ICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0UGl4ZWxBc3BlY3RS
YXRpbyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRQaXhl
bEFzcGVjdFJhdGlvKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6
OkdldFNvdXJjZUNvbnRlbnRIaW50KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpW
aWRlb1R5cGU6OlNldFNvdXJjZUNvbnRlbnRIaW50KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlv
blV0aWxzOjpWaWRlb1R5cGU6OkdldFRyYW5zZmVyRnVuY3Rpb24pOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0VHJhbnNmZXJGdW5jdGlvbik6CisgICAgICAg
IChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRDaHJvbWFTaXRpbmcpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0Q2hyb21hU2l0aW5nKToK
KyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldFZpZGVvTGlnaHRp
bmcpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0VmlkZW9M
aWdodGluZyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRW
aWRlb05vbWluYWxSYW5nZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9U
eXBlOjpTZXRWaWRlb05vbWluYWxSYW5nZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6VmlkZW9UeXBlOjpHZXRWaWRlb1ByaW1hcmllcyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRp
b25VdGlsczo6VmlkZW9UeXBlOjpTZXRWaWRlb1ByaW1hcmllcyk6CisgICAgICAgIChNZWRpYUZv
dW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRZVVZNYXRyaXgpOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0WVVWTWF0cml4KToKKyAgICAgICAgKE1lZGlh
Rm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldFZpZGVvRGlzcGxheUFyZWEpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6QXVkaW9UeXBlKToKKyAgICAgICAg
KE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OkNyZWF0ZUVtcHR5VHlwZSk6CisgICAg
ICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXVkaW9UeXBlOjpHZXRBdmdlcmFnZUJ5dGVzUGVy
U2Vjb25kKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OlNldEF2
Z2VyYWdlQnl0ZXNQZXJTZWNvbmQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1
ZGlvVHlwZTo6R2V0Qml0c1BlclNhbXBsZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6QXVkaW9UeXBlOjpTZXRCaXRzUGVyU2FtcGxlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlv
blV0aWxzOjpBdWRpb1R5cGU6OkdldEJsb2NrQWxpZ25tZW50KToKKyAgICAgICAgKE1lZGlhRm91
bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OlNldEJsb2NrQWxpZ25tZW50KToKKyAgICAgICAgKE1l
ZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OkdldENoYW5uZWxNYXNrKToKKyAgICAgICAg
KE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OlNldENoYW5uZWxNYXNrKToKKyAgICAg
ICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OkdldEZsb2F0U2FtcGxlc1BlclNl
Y29uZCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXVkaW9UeXBlOjpTZXRGbG9h
dFNhbXBsZXNQZXJTZWNvbmQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlv
VHlwZTo6R2V0TnVtQ2hhbm5lbHMpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1
ZGlvVHlwZTo6U2V0TnVtQ2hhbm5lbHMpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6
OkF1ZGlvVHlwZTo6R2V0U2FtcGxlc1BlckJsb2NrKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlv
blV0aWxzOjpBdWRpb1R5cGU6OlNldFNhbXBsZXNQZXJCbG9jayk6CisgICAgICAgIChNZWRpYUZv
dW5kYXRpb25VdGlsczo6QXVkaW9UeXBlOjpHZXRTYW1wbGVzUGVyU2Vjb25kKToKKyAgICAgICAg
KE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OlNldFNhbXBsZXNQZXJTZWNvbmQpOgor
ICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6R2V0VmFsaWRCaXRzUGVy
U2FtcGxlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OlNldFZh
bGlkQml0c1BlclNhbXBsZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXVkaW9U
eXBlOjpBdmdlcmFnZUJ5dGVzUGVyU2Vjb25kKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0
aWxzOjpBdWRpb1R5cGU6OkJpdHNQZXJTYW1wbGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9u
VXRpbHM6OkF1ZGlvVHlwZTo6RmxvYXRTYW1wbGVzUGVyU2Vjb25kKToKKyAgICAgICAgKE1lZGlh
Rm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6Ok51bUNoYW5uZWxzKToKKyAgICAgICAgKE1lZGlh
Rm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OlNhbXBsZXNQZXJTZWNvbmQpOgorICAgICAgICAo
TWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6Ok1QRUdWaWRlb1R5cGUpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6OkdldE1wZWdTZXFIZWFk
ZXIpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6OlNldE1w
ZWdTZXFIZWFkZXIpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5
cGU6OkdldE1wZWdTZXFIZWFkZXJTaXplKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxz
OjpNUEVHVmlkZW9UeXBlOjpHZXRTdGFydFRpbWVDb2RlKToKKyAgICAgICAgKE1lZGlhRm91bmRh
dGlvblV0aWxzOjpNUEVHVmlkZW9UeXBlOjpTZXRTdGFydFRpbWVDb2RlKToKKyAgICAgICAgKE1l
ZGlhRm91bmRhdGlvblV0aWxzOjpNUEVHVmlkZW9UeXBlOjpHZXRNUEVHMkZsYWdzKToKKyAgICAg
ICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNUEVHVmlkZW9UeXBlOjpTZXRNUEVHMkZsYWdzKToK
KyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNUEVHVmlkZW9UeXBlOjpHZXRNUEVHMkxl
dmVsKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNUEVHVmlkZW9UeXBlOjpTZXRN
UEVHMkxldmVsKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNUEVHVmlkZW9UeXBl
OjpHZXRNUEVHMlByb2ZpbGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdW
aWRlb1R5cGU6OlNldE1QRUcyUHJvZmlsZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6TWFrZU9mZnNldCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWFrZUFyZWEp
OgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkdldEZyYW1lUmF0ZSk6CisgICAgICAg
IChNZWRpYUZvdW5kYXRpb25VdGlsczo6R2V0VmlkZW9EaXNwbGF5QXJlYSk6CisgICAgICAgIChN
ZWRpYUZvdW5kYXRpb25VdGlsczo6R2V0RGVmYXVsdFN0cmlkZSk6CisgICAgICAgIChNZWRpYUZv
dW5kYXRpb25VdGlsczo6QXN5bmNDYWxsYmFjazo6QXN5bmNDYWxsYmFjayk6CisgICAgICAgIChN
ZWRpYUZvdW5kYXRpb25VdGlsczo6QXN5bmNDYWxsYmFjazo6UXVlcnlJbnRlcmZhY2UpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkFzeW5jQ2FsbGJhY2s6OkFkZFJlZik6CisgICAg
ICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXN5bmNDYWxsYmFjazo6UmVsZWFzZSk6CisgICAg
ICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXN5bmNDYWxsYmFjazo6R2V0UGFyYW1ldGVycyk6
CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXN5bmNDYWxsYmFjazo6SW52b2tlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uLmNwcDoKKyAgICAgICAgKE1GQ3JlYXRlTWVkaWFUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmlzQXZhaWxhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0U2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Y3JlYXRlU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OmVuZEdldEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3JlYXRlVmlkZW9XaW5kb3cpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpkZXN0cm95VmlkZW9X
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjppbnZhbGlkYXRlRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6YWRkTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVPdXRwdXROb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6b25Ub3Bv
bG9neVNldCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OkFzeW5jQ2FsbGJhY2s6Om9uTWVkaWFQbGF5ZXJEZWxldGVkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OkN1c3RvbVZpZGVvUHJlc2VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6On5DdXN0b21W
aWRlb1ByZXNlbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpRdWVyeUludGVyZmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZp
ZGVvUHJlc2VudGVyOjpBZGRSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6UmVsZWFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZp
ZGVvUHJlc2VudGVyOjpPbkNsb2NrU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1N0
b3ApOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1BhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6
Ok9uQ2xvY2tSZXN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9uQ2xvY2tTZXRSYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9t
VmlkZW9QcmVzZW50ZXI6OlByb2Nlc3NNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEN1
cnJlbnRNZWRpYVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0RGV2aWNlSUQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6SW5pdFNlcnZpY2VQb2ludGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpSZWxl
YXNlU2VydmljZVBvaW50ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFNlcnZpY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21W
aWRlb1ByZXNlbnRlcjo6QWN0aXZhdGVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6RGV0YWNo
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNodXRkb3duT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OlNldFZpZGVvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFZpZGVvV2luZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OlNldE1peGVyU291cmNlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjpTZXRWaWRlb1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFZpZGVvUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6UmVwYWludFZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6
OnBhaW50Q3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Om9uTWVkaWFQbGF5ZXJEZWxl
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OklzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNv
bmZpZ3VyZU1peGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkZsdXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkFyZU1lZGlhVHlwZXNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTZXRNZWRpYVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpD
dXN0b21WaWRlb1ByZXNlbnRlcjo6Q2hlY2tTaHV0ZG93bik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpS
ZW5lZ290aWF0ZU1lZGlhVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpQcm9jZXNzSW5wdXROb3Rp
ZnkpOgorICAgICAgICAoV2ViQ29yZTo6TUZPZmZzZXRUb0Zsb2F0KToKKyAgICAgICAgKFdlYkNv
cmU6OlZhbGlkYXRlVmlkZW9BcmVhKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkJlZ2luU3RyZWFtaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkVuZFN0cmVhbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpD
aGVja0VuZE9mU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OklzTWVkaWFUeXBlU3VwcG9ydGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNyZWF0ZU9wdGltYWxWaWRlb1R5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29ycmVjdEFzcGVjdFJhdGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNhbGN1bGF0
ZU91dHB1dFJlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpQcmVwYXJlRnJhbWVTdGVwKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OlN0YXJ0RnJhbWVTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNv
bXBsZXRlRnJhbWVTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNhbmNlbEZyYW1lU3RlcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3Rv
bVZpZGVvUHJlc2VudGVyOjpQcm9jZXNzT3V0cHV0TG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZXREZXNpcmVkU2FtcGxlVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGVhckRlc2lyZWRTYW1w
bGVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlByb2Nlc3NPdXRwdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNl
bnRlcjo6RGVsaXZlclNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpJc1NhbXBsZVRpbWVQYXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6RGVsaXZlckZyYW1lU3RlcFNhbXBsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpUcmFja1NhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpSZWxlYXNlUmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9uU2FtcGxlRnJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpOb3RpZnlFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OlNhbXBsZVBvb2w6OlNhbXBsZVBvb2wpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTYW1wbGVQb29sOjp+U2FtcGxlUG9v
bCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OlNhbXBsZVBvb2w6OmdldFNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OlNhbXBsZVBvb2w6OnJldHVyblNhbXBsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlNhbXBsZVBvb2w6
OmFyZVNhbXBsZXNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6U2FtcGxlUG9vbDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlNhbXBsZVBvb2w6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
U2NoZWR1bGVyOjpTY2hlZHVsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVsZXI6On5TY2hlZHVsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVsZXI6OlNldEZy
YW1lUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OlNjaGVkdWxlcjo6U3RhcnRTY2hlZHVsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVsZXI6OlN0b3BTY2hlZHVsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpT
Y2hlZHVsZXI6OkZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpTY2hlZHVsZVNhbXBsZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlNjaGVkdWxlcjo6UHJvY2Vz
c1NhbXBsZXNJblF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpQcm9jZXNzU2FtcGxlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpTY2hlZHVs
ZXJUaHJlYWRQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6U2NoZWR1bGVyOjpTY2hlZHVsZXJUaHJlYWRQcm9jUHJpdmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQzRFByZXNl
bnRFbmdpbmU6OkQzRFByZXNlbnRFbmdpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjp+RDNEUHJlc2VudEVu
Z2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkQzRFByZXNlbnRFbmdpbmU6OkdldFNlcnZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpDaGVja0Zv
cm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkQzRFByZXNlbnRFbmdpbmU6OlNldFZpZGVvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6U2V0
RGVzdGluYXRpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6Q3JlYXRlVmlkZW9TYW1wbGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJl
c2VudEVuZ2luZTo6UmVsZWFzZVJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQzRFByZXNlbnRFbmdpbmU6OkNoZWNrRGV2aWNl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpEM0RQcmVzZW50RW5naW5lOjpQcmVzZW50U2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6UGFp
bnRDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpJbml0aWFsaXplRDNEKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVu
Z2luZTo6Q3JlYXRlRDNERGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6Q3JlYXRlRDNEU2FtcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNE
UHJlc2VudEVuZ2luZTo6UHJlc2VudFN3YXBDaGFpbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQzRFByZXNlbnRFbmdpbmU6OlBhaW50RnJh
bWVXaXRoR0RJKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6R2V0U3dhcENoYWluUHJlc2VudFBhcmFtZXRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpE
M0RQcmVzZW50RW5naW5lOjpVcGRhdGVEZXN0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaW5k
QWRhcHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVsZXI6OlNldENhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpTZXRD
bG9ja1JhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpTY2hlZHVsZXI6Okxhc3RTYW1wbGVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpGcmFtZUR1cmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
RDNEUHJlc2VudEVuZ2luZTo6R2V0VmlkZW9XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpHZXREZXN0
aW5hdGlvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpSZWZyZXNoUmF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQzRFByZXNlbnRFbmdpbmU6
Ok9uQ3JlYXRlVmlkZW9TYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6T25SZWxlYXNlUmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0SXRl
bVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Q29tcGFyZUl0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRl
cjo6Q29tcGFyZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRVSU5UMzIpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNl
bnRlcjo6R2V0VUlOVDY0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldERvdWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpHZXRHVUlEKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFN0cmluZ0xlbmd0aCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1
c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0QWxs
b2NhdGVkU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEJsb2JTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OkdldEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0QWxsb2NhdGVkQmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1
c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRVbmtub3duKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldEl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6RGVsZXRlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpE
ZWxldGVBbGxJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTZXRVSU5UMzIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1By
ZXNlbnRlcjo6U2V0VUlOVDY0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldERvdWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZp
ZGVvUHJlc2VudGVyOjpTZXRHVUlEKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3Rv
bVZpZGVvUHJlc2VudGVyOjpTZXRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldFVua25vd24p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpD
dXN0b21WaWRlb1ByZXNlbnRlcjo6TG9ja1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlVubG9j
a1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6
OkdldEl0ZW1CeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNvcHlBbGxJdGVtcyk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZp
ZGVvUHJlc2VudGVyOjpHZXROYXRpdmVWaWRlb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0
SWRlYWxWaWRlb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0QXNwZWN0UmF0aW9Nb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OkdldEFzcGVjdFJhdGlvTW9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpHZXRDdXJyZW50SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0Qm9yZGVyQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6R2V0Qm9yZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0
UmVuZGVyaW5nUHJlZnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0UmVuZGVyaW5nUHJlZnMpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6U2V0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRG
dWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkZyYW1lU3RlcDo6RnJhbWVTdGVwKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9t
VmlkZW9QcmVzZW50ZXI6OklzU2NydWJiaW5nKToKKwogMjAxNS0xMS0wNSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuIElEQjogSW1wbGVtZW50IElE
QkluZGV4IGdldC9nZXRLZXkvY291bnQgcmVxdWVzdHMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFGb3VuZGF0aW9uVXRpbHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFGb3VuZGF0aW9uVXRp
bHMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFGb3VuZGF0aW9uVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExODgg
QEAKKyNpZm5kZWYgTWVkaWFGb3VuZGF0aW9uVXRpbHNfaAorI2RlZmluZSBNZWRpYUZvdW5kYXRp
b25VdGlsc19oCisKKyNpbmNsdWRlIDxNZmFwaS5oPgorI2luY2x1ZGUgPE1mZXJyb3IuaD4KKyNp
bmNsdWRlIDxNZmlkbC5oPgorCisjaWZuZGVmIENoZWNrUG9pbnRlcgorI2RlZmluZSBDaGVja1Bv
aW50ZXIoeCwgaHIpIGlmICh4ID09IG51bGxwdHIpIHsgcmV0dXJuIGhyOyB9CisjZW5kaWYKKwor
bmFtZXNwYWNlIE1lZGlhRm91bmRhdGlvblV0aWxzIHsKKworY2xhc3MgTWVkaWFUeXBlOworY2xh
c3MgQXVkaW9UeXBlOworY2xhc3MgVmlkZW9UeXBlOworY2xhc3MgTVBFR1ZpZGVvVHlwZTsKKwor
TUZPZmZzZXQgTWFrZU9mZnNldChmbG9hdCB2KTsKK01GVmlkZW9BcmVhIE1ha2VBcmVhKGZsb2F0
IHgsIGZsb2F0IHksIERXT1JEIHdpZHRoLCBEV09SRCBoZWlnaHQpOworCisvLyBGbGF0IGZ1bmN0
aW9ucworSFJFU1VMVCBHZXRGcmFtZVJhdGUoSU1GTWVkaWFUeXBlICpwVHlwZSwgTUZSYXRpbyAq
cFJhdGlvKTsKK0hSRVNVTFQgR2V0VmlkZW9EaXNwbGF5QXJlYShJTUZNZWRpYVR5cGUgKnBUeXBl
LCBNRlZpZGVvQXJlYSAqcEFyZWEpOworSFJFU1VMVCBHZXREZWZhdWx0U3RyaWRlKElNRk1lZGlh
VHlwZSAqcFR5cGUsIExPTkcgKnBsU3RyaWRlKTsKKworY29uc3QgTUZUSU1FIG9uZVNlY29uZCA9
IDEwMDAwMDAwOyAvLyBPbmUgc2Vjb25kIGluIGhucworY29uc3QgTE9ORyBvbmVNc2VjID0gMTAw
MDsgLy8gT25lIG1zZWMgaW4gaG5zIAorCisvLyBNRlRpbWVUb01zZWM6IENvbnZlcnQgMTAwLW5z
IHRpbWUgdG8gc2Vjb25kcy4KK2lubGluZSBMT05HIE1GVGltZVRvTXNlYyhjb25zdCBMT05HTE9O
RyYgdGltZSkKK3sKKyAgICByZXR1cm4gKExPTkcpKHRpbWUgLyAob25lU2Vjb25kIC8gb25lTXNl
YykpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTmFtZTogQXJlQ09NT2JqZWN0c0VxdWFsIFt0
ZW1wbGF0ZV0KKy8vIERlc2M6IFRlc3RzIHR3byBDT00gcG9pbnRlcnMgZm9yIGVxdWFsaXR5Lgor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKwordGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KK2Jvb2wgQXJl
Q29tT2JqZWN0c0VxdWFsKFQxICpwMSwgVDIgKnAyKQoreworICAgIGJvb2wgYlJlc3VsdCA9IGZh
bHNlOworICAgIGlmICghcDEgJiYgIXAyKSB7CisgICAgICAgIC8vIEJvdGggYXJlIG51bGxwdHIK
KyAgICAgICAgYlJlc3VsdCA9IHRydWU7CisgICAgfSBlbHNlIGlmICghcDEgfHwgIXAyKSB7Cisg
ICAgICAgIC8vIE9uZSBpcyBudWxscHRyIGFuZCBvbmUgaXMgbm90CisgICAgICAgIGJSZXN1bHQg
PSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBCb3RoIGFyZSBub3QgbnVsbHB0ci4g
Q29tcGFyZSBJVW5rbm93bnMuCisgICAgICAgIElVbmtub3duICpwVW5rMSA9IG51bGxwdHI7Cisg
ICAgICAgIElVbmtub3duICpwVW5rMiA9IG51bGxwdHI7CisgICAgICAgIGlmIChTVUNDRUVERUQo
cDEtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JVW5rbm93biwgKHZvaWQqKikmcFVuazEpKSkgeworICAg
ICAgICAgICAgaWYgKFNVQ0NFRURFRChwMi0+UXVlcnlJbnRlcmZhY2UoSUlEX0lVbmtub3duLCAo
dm9pZCoqKSZwVW5rMikpKSB7CisgICAgICAgICAgICAgICAgYlJlc3VsdCA9IChwVW5rMSA9PSBw
VW5rMik7CisgICAgICAgICAgICAgICAgcFVuazItPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHBVbmsxLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIGJSZXN1bHQ7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNZWRpYVR5cGUgaXMgYSB3
cmFwcGVyIGFyb3VuZCBhbiBJTUZNZWRpYVR5cGUuIEl0IGNhbiBiZSB1c2VkIAorLy8gdG8gcmVh
ZCAoYW5kIG1vZGlmeSkgYW4gZXhpc3RpbmcgdHlwZSBvciBjcmVhdGUgYSBuZXcgdHlwZS4gVGhp
cyBjbGFzcworLy8gZG9lcyBub3QgaW1wbGVtZW50IHRoZSBJTUZNZWRpYVR5cGUgaW50ZXJmYWNl
LgorLy8KKy8vIFRoZSBBdWRpb1R5cGUsIFZpZGVvVHlwZSwgYW5kIE1QRUdWaWRlb1R5cGUKKy8v
IGNsYXNzZXMgYXJlIHNwZWNpYWxpemVkIGZvciB0aG9zZSBmb3JtYXRzLgorLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworY2xhc3MgTWVkaWFUeXBlIHsKK3Byb3RlY3RlZDoKKyAgICBJTUZNZWRpYVR5cGUq
IG1fcFR5cGU7CisKK3Byb3RlY3RlZDoKKyAgICBCT09MIElzVmFsaWQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fcFR5cGUgIT0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBJTUZNZWRpYVR5cGUq
IEdldE1lZGlhVHlwZSgpCisgICAgeworICAgICAgICBhc3NlcnQoSXNWYWxpZCgpKTsKKyAgICAg
ICAgcmV0dXJuIG1fcFR5cGU7CisgICAgfQorCitwdWJsaWM6CisKKyAgICAvLyBDb25zdHJ1Y3Qg
ZnJvbSBhbiBleGlzdGluZyBtZWRpYSB0eXBlLgorICAgIE1lZGlhVHlwZShJTUZNZWRpYVR5cGUq
IHBUeXBlID0gbnVsbHB0cikKKyAgICAgICAgOiBtX3BUeXBlKG51bGxwdHIpCisgICAgeworICAg
ICAgICBpZiAocFR5cGUpIHsKKyAgICAgICAgICAgIG1fcFR5cGUgPSBwVHlwZTsKKyAgICAgICAg
ICAgIG1fcFR5cGUtPkFkZFJlZigpOyAgCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb3B5
IGN0b3IKKyAgICBNZWRpYVR5cGUoY29uc3QgTWVkaWFUeXBlJiAgbXQpCisgICAgeworICAgICAg
ICBtX3BUeXBlID0gbXQubV9wVHlwZTsKKyAgICAgICAgaWYgKG1fcFR5cGUpCisgICAgICAgICAg
ICBtX3BUeXBlLT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5NZWRpYVR5cGUoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fcFR5cGUpCisgICAgICAgICAgICBtX3BUeXBlLT5SZWxlYXNl
KCk7CisgICAgfQorCisKKyAgICAvLyBBc3NpZ25tZW50CisgICAgTWVkaWFUeXBlJiBvcGVyYXRv
cj0oY29uc3QgTWVkaWFUeXBlJiBtdCkKKyAgICB7CisgICAgICAgIC8vIElmIHdlIGFyZSBhc3Np
Z25lZCB0byBvdXJzZWx2ZXMsIGRvIG5vdGhpbmcuCisgICAgICAgIGlmICghQXJlQ29tT2JqZWN0
c0VxdWFsKG1fcFR5cGUsIG10Lm1fcFR5cGUpKSB7CisgICAgICAgICAgICBpZiAobV9wVHlwZSkK
KyAgICAgICAgICAgICAgICBtX3BUeXBlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgIG1fcFR5
cGUgPSBtdC5tX3BUeXBlOworCisgICAgICAgICAgICBpZiAobV9wVHlwZSkKKyAgICAgICAgICAg
ICAgICBtX3BUeXBlLT5BZGRSZWYoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorCisgICAgLy8gYWRkcmVzcy1vZiBvcGVyYXRvcgorICAgIElNRk1lZGlhVHlwZSoq
IG9wZXJhdG9yJigpCisgICAgeworICAgICAgICByZXR1cm4gJm1fcFR5cGU7CisgICAgfQorCisg
ICAgLy8gY29lcmNlIHRvIHVuZGVybHlpbmcgcG9pbnRlciB0eXBlLgorICAgIG9wZXJhdG9yIElN
Rk1lZGlhVHlwZSooKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFR5cGU7CisgICAgfQorCisg
ICAgdmlydHVhbCBIUkVTVUxUIENyZWF0ZUVtcHR5VHlwZSgpCisgICAgeworICAgICAgICBpZiAo
bV9wVHlwZSkKKyAgICAgICAgICAgIG1fcFR5cGUtPlJlbGVhc2UoKTsKKworICAgICAgICBIUkVT
VUxUIGhyID0gU19PSzsKKworICAgICAgICBociA9IE1GQ3JlYXRlTWVkaWFUeXBlKCZtX3BUeXBl
KTsKKworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgLy8gRGV0YWNoIHRoZSBpbnRl
cmZhY2UgKGRvZXMgbm90IFJlbGVhc2UpCisgICAgSU1GTWVkaWFUeXBlKiBEZXRhY2goKQorICAg
IHsKKyAgICAgICAgSU1GTWVkaWFUeXBlKiBwID0gbV9wVHlwZTsKKyAgICAgICAgbV9wVHlwZSA9
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBwOworICAgIH0KKworICAgIC8vIERpcmVjdCB3cmFw
cGVycyBvZiBJTUZNZWRpYVR5cGUgbWV0aG9kcy4KKyAgICAvLyAoRm9yIHRoZXNlIG1ldGhvZHMs
IHdlIGxlYXZlIHBhcmFtZXRlciB2YWxpZGF0aW9uIHRvIHRoZSBJTUZNZWRpYVR5cGUgaW1wbGVt
ZW50YXRpb24uKQorCisgICAgLy8gUmV0cmlldmVzIHRoZSBtYWpvciB0eXBlIEdVSUQuCisgICAg
SFJFU1VMVCBHZXRNYWpvclR5cGUoR1VJRCAqcEd1aWQpCisgICAgeworICAgICAgICByZXR1cm4g
R2V0TWVkaWFUeXBlKCktPkdldE1ham9yVHlwZShwR3VpZCk7CisgICAgfQorCisgICAgLy8gU3Bl
Y2lmaWVzIHdoZXRoZXIgdGhlIG1lZGlhIGRhdGEgaXMgY29tcHJlc3NlZAorICAgIEhSRVNVTFQg
SXNDb21wcmVzc2VkRm9ybWF0KEJPT0wgKnBiQ29tcHJlc3NlZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBHZXRNZWRpYVR5cGUoKS0+SXNDb21wcmVzc2VkRm9ybWF0KHBiQ29tcHJlc3NlZCk7Cisg
ICAgfQorCisgICAgLy8gQ29tcGFyZXMgdHdvIG1lZGlhIHR5cGVzIGFuZCBkZXRlcm1pbmVzIHdo
ZXRoZXIgdGhleSBhcmUgaWRlbnRpY2FsLgorICAgIEhSRVNVTFQgSXNFcXVhbChJTUZNZWRpYVR5
cGUgKnBUeXBlLCBEV09SRCAqcGR3RmxhZ3MpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVk
aWFUeXBlKCktPklzRXF1YWwocFR5cGUsIHBkd0ZsYWdzKTsKKyAgICB9CisKKyAgICAvLyBSZXRy
aWV2ZXMgYW4gYWx0ZXJuYXRpdmUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lZGlhIHR5cGUuCisg
ICAgSFJFU1VMVCBHZXRSZXByZXNlbnRhdGlvbihHVUlEIGd1aWRSZXByZXNlbnRhdGlvbiwgTFBW
T0lEICpwcHZSZXByZXNlbnRhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5
cGUoKS0+R2V0UmVwcmVzZW50YXRpb24oZ3VpZFJlcHJlc2VudGF0aW9uLCBwcHZSZXByZXNlbnRh
dGlvbik7CisgICAgfQorCisgICAgLy8gRnJlZXMgbWVtb3J5IHRoYXQgd2FzIGFsbG9jYXRlZCBi
eSB0aGUgR2V0UmVwcmVzZW50YXRpb24gbWV0aG9kLgorICAgIEhSRVNVTFQgRnJlZVJlcHJlc2Vu
dGF0aW9uKEdVSUQgZ3VpZFJlcHJlc2VudGF0aW9uLCBMUFZPSUQgcHZSZXByZXNlbnRhdGlvbikK
KyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+RnJlZVJlcHJlc2VudGF0aW9u
KGd1aWRSZXByZXNlbnRhdGlvbiwgcHZSZXByZXNlbnRhdGlvbik7CisgICAgfQorCisKKyAgICAv
LyBIZWxwZXIgbWV0aG9kcworCisgICAgLy8gQ29weUZyb206IENvcHkgYWxsIG9mIHRoZSBhdHRy
aWJ1dGVzIGZyb20gYW5vdGhlciBtZWRpYSB0eXBlIGludG8gdGhpcyB0eXBlLgorICAgIEhSRVNV
TFQgQ29weUZyb20oTWVkaWFUeXBlICpwVHlwZSkKKyAgICB7CisgICAgICAgIGlmICghcFR5cGUt
PklzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBFX1VORVhQRUNURUQ7CisgICAgICAgIGlm
ICghcFR5cGUpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgICAgIHJldHVy
biBDb3B5RnJvbShwVHlwZS0+bV9wVHlwZSk7CisgICAgfQorCisgICAgSFJFU1VMVCBDb3B5RnJv
bShJTUZNZWRpYVR5cGUgKnBUeXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFwVHlwZSkKKyAgICAg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICAgICAgcmV0dXJuIHBUeXBlLT5Db3B5QWxs
SXRlbXMobV9wVHlwZSk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0aGUgdW5kZXJseWluZyBJ
TUZNZWRpYVR5cGUgcG9pbnRlci4gCisgICAgSFJFU1VMVCBHZXRNZWRpYVR5cGUoSU1GTWVkaWFU
eXBlKiogcHBUeXBlKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KElzVmFsaWQoKSk7CisgICAgICAg
IENoZWNrUG9pbnRlcihwcFR5cGUsIEVfUE9JTlRFUik7CisgICAgICAgICpwcFR5cGUgPSBtX3BU
eXBlOworICAgICAgICAoKnBwVHlwZSktPkFkZFJlZigpOworICAgICAgICByZXR1cm4gU19PSzsK
KyAgICB9CisKKyAgICAvLyBTZXRzIHRoZSBtYWpvciB0eXBlIEdVSUQuCisgICAgSFJFU1VMVCBT
ZXRNYWpvclR5cGUoR1VJRCBndWlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlw
ZSgpLT5TZXRHVUlEKE1GX01UX01BSk9SX1RZUEUsIGd1aWQpOworICAgIH0KKworICAgIC8vIFJl
dHJpZXZlcyB0aGUgc3VidHlwZSBHVUlELgorICAgIEhSRVNVTFQgR2V0U3ViVHlwZShHVUlEKiBw
R3VpZCkKKyAgICB7CisgICAgICAgIENoZWNrUG9pbnRlcihwR3VpZCwgRV9QT0lOVEVSKTsKKyAg
ICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRHVUlEKE1GX01UX1NVQlRZUEUsIHBHdWlk
KTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoZSBzdWJ0eXBlIEdVSUQuCisgICAgSFJFU1VMVCBT
ZXRTdWJUeXBlKEdVSUQgZ3VpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUo
KS0+U2V0R1VJRChNRl9NVF9TVUJUWVBFLCBndWlkKTsKKyAgICB9CisKKyAgICAvLyBFeHRyYWN0
cyB0aGUgRk9VUkNDIGNvZGUgZnJvbSB0aGUgc3VidHlwZS4KKyAgICAvLyBOb3QgYWxsIHN1YnR5
cGVzIGZvbGxvdyB0aGlzIHBhdHRlcm4uCisgICAgSFJFU1VMVCBHZXRGb3VyQ0MoRFdPUkQgKnBG
b3VyQ0MpCisgICAgeworICAgICAgICBhc3NlcnQoSXNWYWxpZCgpKTsKKyAgICAgICAgQ2hlY2tQ
b2ludGVyKHBGb3VyQ0MsIEVfUE9JTlRFUik7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOwor
ICAgICAgICBHVUlEIGd1aWRTdWJUeXBlID0gR1VJRF9OVUxMOworCisgICAgICAgIGlmIChTVUND
RUVERUQoaHIpKQorICAgICAgICAgICAgaHIgPSBHZXRTdWJUeXBlKCZndWlkU3ViVHlwZSk7CisK
KyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICAqcEZvdXJDQyA9IGd1aWRT
dWJUeXBlLkRhdGExOworCisgICAgICAgIHJldHVybiBocjsKKyAgICB9ICAgICAgIAorCisgICAg
Ly8gIFF1ZXJpZXMgd2hldGhlciBlYWNoIHNhbXBsZSBpcyBpbmRlcGVuZGVudCBvZiB0aGUgb3Ro
ZXIgc2FtcGxlcyBpbiB0aGUgc3RyZWFtLgorICAgIEhSRVNVTFQgR2V0QWxsU2FtcGxlc0luZGVw
ZW5kZW50KEJPT0wqIHBiSW5kZXBlbmRlbnQpCisgICAgeworICAgICAgICBDaGVja1BvaW50ZXIo
cGJJbmRlcGVuZGVudCwgRV9QT0lOVEVSKTsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgp
LT5HZXRVSU5UMzIoTUZfTVRfQUxMX1NBTVBMRVNfSU5ERVBFTkRFTlQsIChVSU5UMzIqKXBiSW5k
ZXBlbmRlbnQpOworICAgIH0KKworICAgIC8vICBTcGVjaWZpZXMgd2hldGhlciBlYWNoIHNhbXBs
ZSBpcyBpbmRlcGVuZGVudCBvZiB0aGUgb3RoZXIgc2FtcGxlcyBpbiB0aGUgc3RyZWFtLgorICAg
IEhSRVNVTFQgU2V0QWxsU2FtcGxlc0luZGVwZW5kZW50KEJPT0wgYkluZGVwZW5kZW50KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfQUxMX1NB
TVBMRVNfSU5ERVBFTkRFTlQsIChVSU5UMzIpYkluZGVwZW5kZW50KTsKKyAgICB9CisKKyAgICAv
LyBRdWVyaWVzIHdoZXRoZXIgdGhlIHNhbXBsZXMgaGF2ZSBhIGZpeGVkIHNpemUuCisgICAgSFJF
U1VMVCBHZXRGaXhlZFNpemVTYW1wbGVzKEJPT0wgKnBiRml4ZWQpCisgICAgeworICAgICAgICBD
aGVja1BvaW50ZXIocGJGaXhlZCwgRV9QT0lOVEVSKTsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlh
VHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfRklYRURfU0laRV9TQU1QTEVTLCAoVUlOVDMyKilwYkZp
eGVkKTsKKyAgICB9CisKKyAgICAvLyBTcGVjaWZpZXMgd2hldGhlciB0aGUgc2FtcGxlcyBoYXZl
IGEgZml4ZWQgc2l6ZS4KKyAgICBIUkVTVUxUIFNldEZpeGVkU2l6ZVNhbXBsZXMoQk9PTCBiRml4
ZWQpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNldFVJTlQzMihNRl9N
VF9GSVhFRF9TSVpFX1NBTVBMRVMsIChVSU5UMzIpYkZpeGVkKTsKKyAgICB9CisKKyAgICAvLyBS
ZXRyaWV2ZXMgdGhlIHNpemUgb2YgZWFjaCBzYW1wbGUsIGluIGJ5dGVzLiAKKyAgICBIUkVTVUxU
IEdldFNhbXBsZVNpemUoVUlOVDMyICpwblNpemUpCisgICAgeyAgIAorICAgICAgICBDaGVja1Bv
aW50ZXIocG5TaXplLCBFX1BPSU5URVIpOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCkt
PkdldFVJTlQzMihNRl9NVF9TQU1QTEVfU0laRSwgcG5TaXplKTsKKyAgICB9CisKKyAgICAvLyBT
ZXRzIHRoZSBzaXplIG9mIGVhY2ggc2FtcGxlLCBpbiBieXRlcy4gCisgICAgSFJFU1VMVCBTZXRT
YW1wbGVTaXplKFVJTlQzMiBuU2l6ZSkKKyAgICB7ICAgCisgICAgICAgIHJldHVybiBHZXRNZWRp
YVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX1NBTVBMRV9TSVpFLCBuU2l6ZSk7CisgICAgfQorCisg
ICAgLy8gUmV0cmlldmVzIGEgbWVkaWEgdHlwZSB0aGF0IHdhcyB3cmFwcGVkIGJ5IHRoZSBNRldy
YXBNZWRpYVR5cGUgZnVuY3Rpb24uCisgICAgSFJFU1VMVCBVbndyYXAoSU1GTWVkaWFUeXBlICoq
cHBPcmlnaW5hbCkKKyAgICB7CisgICAgICAgIENoZWNrUG9pbnRlcihwcE9yaWdpbmFsLCBFX1BP
SU5URVIpOworICAgICAgICByZXR1cm4gOjpNRlVud3JhcE1lZGlhVHlwZShHZXRNZWRpYVR5cGUo
KSwgcHBPcmlnaW5hbCk7CisgICAgfQorCisgICAgLy8gVGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBy
ZXR1cm4gcmVhc29uYWJsZSBkZWZhdWx0cyBpZiB0aGUgcmVsZXZhbnQgYXR0cmlidXRlIGlzIG5v
dCBwcmVzZW50ICh6ZXJvL0ZBTFNFKS4KKyAgICAvLyBUaGlzIGlzIHVzZWZ1bCBmb3IgbWFraW5n
IHF1aWNrIGNvbXBhcmlzb25zIGJldHdlZWVuIG1lZGlhIHR5cGVzLiAKKworICAgIEJPT0wgQWxs
U2FtcGxlc0luZGVwZW5kZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiAoQk9PTClNRkdldEF0
dHJpYnV0ZVVJTlQzMihHZXRNZWRpYVR5cGUoKSwgTUZfTVRfQUxMX1NBTVBMRVNfSU5ERVBFTkRF
TlQsIEZBTFNFKTsKKyAgICB9CisKKyAgICBCT09MIEZpeGVkU2l6ZVNhbXBsZXMoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIChCT09MKU1GR2V0QXR0cmlidXRlVUlOVDMyKEdldE1lZGlhVHlwZSgp
LCBNRl9NVF9GSVhFRF9TSVpFX1NBTVBMRVMsIEZBTFNFKTsKKyAgICB9CisKKyAgICBVSU5UMzIg
U2FtcGxlU2l6ZSgpCisgICAgeyAgIAorICAgICAgICByZXR1cm4gTUZHZXRBdHRyaWJ1dGVVSU5U
MzIoR2V0TWVkaWFUeXBlKCksIE1GX01UX1NBTVBMRV9TSVpFLCAwKTsKKyAgICB9Cit9OworCisg
ICAgCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFZpZGVvVHlwZSBwcm92aWRlcyBhY2Nlc3Mg
dG8gdmlkZW8tc3BlY2lmaWMgYXR0cmlidXRlcy4KKy8vCisvLyBOb3RlOiBNUEVHLXNwZWNpZmlj
IGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUgZnJvbSBNUEVHVmlkZW9UeXBlLgorLy8KKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisKK2NsYXNzIFZpZGVvVHlwZSA6IHB1YmxpYyBNZWRpYVR5cGUgeworICAg
IGZyaWVuZCBjbGFzcyBNZWRpYVR5cGU7IAorCitwdWJsaWM6CisgICAgVmlkZW9UeXBlKElNRk1l
ZGlhVHlwZSogcFR5cGUgPSBudWxscHRyKQorICAgICAgICA6IE1lZGlhVHlwZShwVHlwZSkKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCBIUkVTVUxUIENyZWF0ZUVtcHR5VHlwZSgpCisgICAg
eworICAgICAgICBpZiAobV9wVHlwZSkKKyAgICAgICAgICAgIG1fcFR5cGUtPlJlbGVhc2UoKTsK
KworICAgICAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgICAgICBociA9IE1lZGlhVHlwZTo6
Q3JlYXRlRW1wdHlUeXBlKCk7CisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAg
ICAgaHIgPSBTZXRNYWpvclR5cGUoTUZNZWRpYVR5cGVfVmlkZW8pOworCisgICAgICAgIHJldHVy
biBocjsKKyAgICB9CisKKworICAgIC8vIFJldHJpZXZlcyBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0
aGUgZnJhbWVzIGFyZSBpbnRlcmxhY2VkLgorICAgIEhSRVNVTFQgR2V0SW50ZXJsYWNlTW9kZShN
RlZpZGVvSW50ZXJsYWNlTW9kZSAqcG1vZGUpCisgICAgeworICAgICAgICBDaGVja1BvaW50ZXIo
cG1vZGUsIEVfUE9JTlRFUik7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlO
VDMyKE1GX01UX0lOVEVSTEFDRV9NT0RFLCAoVUlOVDMyKilwbW9kZSk7CisgICAgfQorCisgICAg
Ly8gU2V0cyBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGUgZnJhbWVzIGFyZSBpbnRlcmxhY2VkLgor
ICAgIEhSRVNVTFQgU2V0SW50ZXJsYWNlTW9kZShNRlZpZGVvSW50ZXJsYWNlTW9kZSBtb2RlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfSU5U
RVJMQUNFX01PREUsIChVSU5UMzIpbW9kZSk7CisgICAgfQorCisgICAgLy8gVGhpcyByZXR1cm5z
IHRoZSBkZWZhdWx0IG9yIGF0dGVtcHRzIHRvIGNvbXB1dGUgaXQsIGluIGl0cyBhYnNlbmNlLgor
ICAgIEhSRVNVTFQgR2V0RGVmYXVsdFN0cmlkZShMT05HICpwbFN0cmlkZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBNZWRpYUZvdW5kYXRpb25VdGlsczo6R2V0RGVmYXVsdFN0cmlkZSggR2V0TWVk
aWFUeXBlKCksIHBsU3RyaWRlICk7CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUgZGVmYXVsdCBz
dHJpZGUuIE9ubHkgYXBwcm9wcmlhdGUgZm9yIHVuY29tcHJlc3NlZCBkYXRhIGZvcm1hdHMuCisg
ICAgSFJFU1VMVCBTZXREZWZhdWx0U3RyaWRlKExPTkcgblN0cmlkZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0RFRkFVTFRfU1RSSURFLCAo
VUlOVDMyKW5TdHJpZGUpOworICAgIH0KKworICAgIC8vIFJldHJpZXZlcyB0aGUgd2lkdGggYW5k
IGhlaWdodCBvZiB0aGUgdmlkZW8gZnJhbWUuCisgICAgSFJFU1VMVCBHZXRGcmFtZURpbWVuc2lv
bnMoVUlOVDMyICpwZHdXaWR0aEluUGl4ZWxzLCBVSU5UMzIgKnBkd0hlaWdodEluUGl4ZWxzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE1GR2V0QXR0cmlidXRlU2l6ZShHZXRNZWRpYVR5cGUoKSwg
TUZfTVRfRlJBTUVfU0laRSwgcGR3V2lkdGhJblBpeGVscywgcGR3SGVpZ2h0SW5QaXhlbHMpOwor
ICAgIH0KKworICAgIC8vIFNldHMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHZpZGVvIGZy
YW1lLgorICAgIEhSRVNVTFQgU2V0RnJhbWVEaW1lbnNpb25zKFVJTlQzMiBkd1dpZHRoSW5QaXhl
bHMsIFVJTlQzMiBkd0hlaWdodEluUGl4ZWxzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1GU2V0
QXR0cmlidXRlU2l6ZShHZXRNZWRpYVR5cGUoKSwgTUZfTVRfRlJBTUVfU0laRSwgZHdXaWR0aElu
UGl4ZWxzLCBkd0hlaWdodEluUGl4ZWxzKTsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhl
IGRhdGEgZXJyb3IgcmF0ZSBpbiBiaXQgZXJyb3JzIHBlciBzZWNvbmQKKyAgICBIUkVTVUxUIEdl
dERhdGFCaXRFcnJvclJhdGUoVUlOVDMyICpwUmF0ZSkKKyAgICB7CisgICAgICAgIENoZWNrUG9p
bnRlcihwUmF0ZSwgRV9QT0lOVEVSKTsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5H
ZXRVSU5UMzIoTUZfTVRfQVZHX0JJVF9FUlJPUl9SQVRFLCBwUmF0ZSk7CisgICAgfQorCisgICAg
Ly8gU2V0cyB0aGUgZGF0YSBlcnJvciByYXRlIGluIGJpdCBlcnJvcnMgcGVyIHNlY29uZAorICAg
IEhSRVNVTFQgU2V0RGF0YUJpdEVycm9yUmF0ZShVSU5UMzIgcmF0ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0FWR19CSVRfRVJST1JfUkFU
RSwgcmF0ZSk7CisgICAgfQorCisgICAgLy8gUmV0cmlldmVzIHRoZSBhcHByb3hpbWF0ZSBkYXRh
IHJhdGUgb2YgdGhlIHZpZGVvIHN0cmVhbS4KKyAgICBIUkVTVUxUIEdldEF2ZXJhZ2VCaXRSYXRl
KFVJTlQzMiAqcFJhdGUpCisgICAgeworICAgICAgICBDaGVja1BvaW50ZXIocFJhdGUsIEVfUE9J
TlRFUik7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX0FW
R19CSVRSQVRFLCBwUmF0ZSk7CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUgYXBwcm94aW1hdGUg
ZGF0YSByYXRlIG9mIHRoZSB2aWRlbyBzdHJlYW0uCisgICAgSFJFU1VMVCBTZXRBdmdlcmFnZUJp
dFJhdGUoVUlOVDMyIHJhdGUpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCkt
PlNldFVJTlQzMihNRl9NVF9BVkdfQklUUkFURSwgcmF0ZSk7CisgICAgfQorCisgICAgLy8gUmV0
cmlldmVzIGN1c3RvbSBjb2xvciBwcmltYXJpZXMuCisgICAgSFJFU1VMVCBHZXRDdXN0b21WaWRl
b1ByaW1hcmllcyhNVF9DVVNUT01fVklERU9fUFJJTUFSSUVTICpwUHJpbWFyaWVzKQorICAgIHsK
KyAgICAgICAgQ2hlY2tQb2ludGVyKHBQcmltYXJpZXMsIEVfUE9JTlRFUik7CisgICAgICAgIHJl
dHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0QmxvYihNRl9NVF9DVVNUT01fVklERU9fUFJJTUFSSUVT
LCAoVUlOVDgqKXBQcmltYXJpZXMsIHNpemVvZihNVF9DVVNUT01fVklERU9fUFJJTUFSSUVTKSwg
bnVsbHB0cik7CisgICAgfQorCisgICAgLy8gU2V0cyBjdXN0b20gY29sb3IgcHJpbWFyaWVzLgor
ICAgIEhSRVNVTFQgU2V0Q3VzdG9tVmlkZW9QcmltYXJpZXMoY29uc3QgTVRfQ1VTVE9NX1ZJREVP
X1BSSU1BUklFUyYgcHJpbWFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUo
KS0+U2V0QmxvYihNRl9NVF9DVVNUT01fVklERU9fUFJJTUFSSUVTLCAoY29uc3QgVUlOVDgqKSZw
cmltYXJ5LCBzaXplb2YoTVRfQ1VTVE9NX1ZJREVPX1BSSU1BUklFUykpOworICAgIH0KKworICAg
IC8vIEdldHMgdGhlIG51bWJlciBvZiBmcmFtZXMgcGVyIHNlY29uZC4KKyAgICBIUkVTVUxUIEdl
dEZyYW1lUmF0ZShVSU5UMzIgKnBuTnVtZXJhdG9yLCBVSU5UMzIgKnBuRGVub21pbmF0b3IpCisg
ICAgeworICAgICAgICBDaGVja1BvaW50ZXIocG5OdW1lcmF0b3IsIEVfUE9JTlRFUik7CisgICAg
ICAgIENoZWNrUG9pbnRlcihwbkRlbm9taW5hdG9yLCBFX1BPSU5URVIpOworICAgICAgICByZXR1
cm4gTUZHZXRBdHRyaWJ1dGVSYXRpbyhHZXRNZWRpYVR5cGUoKSwgTUZfTVRfRlJBTUVfUkFURSwg
cG5OdW1lcmF0b3IsIHBuRGVub21pbmF0b3IpOworICAgIH0KKworICAgIC8vIEdldHMgdGhlIGZy
YW1lcyBwZXIgc2Vjb25kIGFzIGEgcmF0aW8uCisgICAgSFJFU1VMVCBHZXRGcmFtZVJhdGUoTUZS
YXRpbyAqcFJhdGlvKQorICAgIHsKKyAgICAgICAgQ2hlY2tQb2ludGVyKHBSYXRpbywgRV9QT0lO
VEVSKTsKKyAgICAgICAgcmV0dXJuIEdldEZyYW1lUmF0ZSgoVUlOVDMyKikmcFJhdGlvLT5OdW1l
cmF0b3IsIChVSU5UMzIqKSZwUmF0aW8tPkRlbm9taW5hdG9yKTsKKyAgICB9CisgICAgICAgIAor
ICAgIC8vIFNldHMgdGhlIG51bWJlciBvZiBmcmFtZXMgcGVyIHNlY29uZC4KKyAgICBIUkVTVUxU
IFNldEZyYW1lUmF0ZShVSU5UMzIgbk51bWVyYXRvciwgVUlOVDMyIG5EZW5vbWluYXRvcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBNRlNldEF0dHJpYnV0ZVJhdGlvKEdldE1lZGlhVHlwZSgpLCBN
Rl9NVF9GUkFNRV9SQVRFLCBuTnVtZXJhdG9yLCBuRGVub21pbmF0b3IpOworICAgIH0KKworICAg
IC8vIFNldHMgdGhlIG51bWJlciBvZiBmcmFtZXMgcGVyIHNlY29uZCwgYXMgYSByYXRpby4KKyAg
ICBIUkVTVUxUIFNldEZyYW1lUmF0ZShjb25zdCBNRlJhdGlvJiByYXRpbykKKyAgICB7CisgICAg
ICAgIHJldHVybiBNRlNldEF0dHJpYnV0ZVJhdGlvKEdldE1lZGlhVHlwZSgpLCBNRl9NVF9GUkFN
RV9SQVRFLCByYXRpby5OdW1lcmF0b3IsIHJhdGlvLkRlbm9taW5hdG9yKTsKKyAgICB9CisKKyAg
ICAvLyBRdWVyaWVzIHRoZSBnZW9tZXRyaWMgYXBlcnR1cmUuCisgICAgSFJFU1VMVCBHZXRHZW9t
ZXRyaWNBcGVydHVyZShNRlZpZGVvQXJlYSAqcEFyZWEpCisgICAgeworICAgICAgICBDaGVja1Bv
aW50ZXIocEFyZWEsIEVfUE9JTlRFUik7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+
R2V0QmxvYihNRl9NVF9HRU9NRVRSSUNfQVBFUlRVUkUsIChVSU5UOCopcEFyZWEsIHNpemVvZihN
RlZpZGVvQXJlYSksIG51bGxwdHIpOworICAgIH0KKyAgICAgICAgCisgICAgLy8gU2V0cyB0aGUg
Z2VvbWV0cmljIGFwZXJ0dXJlLgorICAgIEhSRVNVTFQgU2V0R2VvbWV0cmljQXBlcnR1cmUoY29u
c3QgTUZWaWRlb0FyZWEmIGFyZWEpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBl
KCktPlNldEJsb2IoTUZfTVRfR0VPTUVUUklDX0FQRVJUVVJFLCAoVUlOVDgqKSZhcmVhLCBzaXpl
b2YoTUZWaWRlb0FyZWEpKTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFJldHJpZXZlcyB0aGUg
bWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIGZyb20gb25lIGtleSBmcmFtZSB0byB0aGUgbmV4dC4K
KyAgICBIUkVTVUxUIEdldE1heEtleWZyYW1lU3BhY2luZyhVSU5UMzIgKnBuU3BhY2luZykKKyAg
ICB7CisgICAgICAgIENoZWNrUG9pbnRlcihwblNwYWNpbmcsIEVfUE9JTlRFUik7CisgICAgICAg
IHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX01BWF9LRVlGUkFNRV9TUEFD
SU5HLCBwblNwYWNpbmcpOworICAgIH0KKworICAgIC8vIFNldHMgdGhlIG1heGltdW0gbnVtYmVy
IG9mIGZyYW1lcyBmcm9tIG9uZSBrZXkgZnJhbWUgdG8gdGhlIG5leHQuCisgICAgSFJFU1VMVCBT
ZXRNYXhLZXlmcmFtZVNwYWNpbmcoVUlOVDMyIG5TcGFjaW5nKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfTUFYX0tFWUZSQU1FX1NQQUNJTkcs
IG5TcGFjaW5nKTsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIHJlZ2lvbiB0aGF0IGNv
bnRhaW5zIHRoZSB2YWxpZCBwb3J0aW9uIG9mIHRoZSBzaWduYWwuCisgICAgSFJFU1VMVCBHZXRN
aW5EaXNwbGF5QXBlcnR1cmUoTUZWaWRlb0FyZWEgKnBBcmVhKQorICAgIHsKKyAgICAgICAgQ2hl
Y2tQb2ludGVyKHBBcmVhLCBFX1BPSU5URVIpOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBl
KCktPkdldEJsb2IoTUZfTVRfTUlOSU1VTV9ESVNQTEFZX0FQRVJUVVJFLCAoVUlOVDgqKXBBcmVh
LCBzaXplb2YoTUZWaWRlb0FyZWEpLCBudWxscHRyKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRo
ZSB0aGUgcmVnaW9uIHRoYXQgY29udGFpbnMgdGhlIHZhbGlkIHBvcnRpb24gb2YgdGhlIHNpZ25h
bC4KKyAgICBIUkVTVUxUIFNldE1pbkRpc3BsYXlBcGVydHVyZShjb25zdCBNRlZpZGVvQXJlYSYg
YXJlYSkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0QmxvYihNRl9N
VF9NSU5JTVVNX0RJU1BMQVlfQVBFUlRVUkUsIChVSU5UOCopJmFyZWEsIHNpemVvZihNRlZpZGVv
QXJlYSkpOworICAgIH0KKworICAgIC8vIFJldHJpZXZlcyB0aGUgYXNwZWN0IHJhdGlvIG9mIHRo
ZSBvdXRwdXQgcmVjdGFuZ2xlIGZvciBhIHZpZGVvIG1lZGlhIHR5cGUuIAorICAgIEhSRVNVTFQg
R2V0UGFkQ29udHJvbEZsYWdzKE1GVmlkZW9QYWRGbGFncyAqcEZsYWdzKQorICAgIHsKKyAgICAg
ICAgQ2hlY2tQb2ludGVyKHBGbGFncywgRV9QT0lOVEVSKTsKKyAgICAgICAgcmV0dXJuIEdldE1l
ZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfUEFEX0NPTlRST0xfRkxBR1MsIChVSU5UMzIqKXBG
bGFncyk7CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSBvdXRw
dXQgcmVjdGFuZ2xlIGZvciBhIHZpZGVvIG1lZGlhIHR5cGUuIAorICAgIEhSRVNVTFQgU2V0UGFk
Q29udHJvbEZsYWdzKE1GVmlkZW9QYWRGbGFncyBmbGFncykKKyAgICB7CisgICAgICAgIHJldHVy
biBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX1BBRF9DT05UUk9MX0ZMQUdTLCBmbGFn
cyk7CisgICAgfQorCisgICAgLy8gUmV0cmlldmVzIGFuIGFycmF5IG9mIHBhbGV0dGUgZW50cmll
cyBmb3IgYSB2aWRlbyBtZWRpYSB0eXBlLiAKKyAgICBIUkVTVUxUIEdldFBhbGV0dGVFbnRyaWVz
KE1GUGFsZXR0ZUVudHJ5ICpwYUVudHJpZXMsIFVJTlQzMiBuRW50cmllcykKKyAgICB7CisgICAg
ICAgIENoZWNrUG9pbnRlcihwYUVudHJpZXMsIEVfUE9JTlRFUik7CisgICAgICAgIHJldHVybiBH
ZXRNZWRpYVR5cGUoKS0+R2V0QmxvYihNRl9NVF9QQUxFVFRFLCAoVUlOVDgqKXBhRW50cmllcywg
c2l6ZW9mKE1GUGFsZXR0ZUVudHJ5KSAqIG5FbnRyaWVzLCBudWxscHRyKTsKKyAgICB9CisKKyAg
ICAvLyBTZXRzIGFuIGFycmF5IG9mIHBhbGV0dGUgZW50cmllcyBmb3IgYSB2aWRlbyBtZWRpYSB0
eXBlLiAKKyAgICBIUkVTVUxUIFNldFBhbGV0dGVFbnRyaWVzKE1GUGFsZXR0ZUVudHJ5ICpwYUVu
dHJpZXMsIFVJTlQzMiBuRW50cmllcykKKyAgICB7CisgICAgICAgIENoZWNrUG9pbnRlcihwYUVu
dHJpZXMsIEVfUE9JTlRFUik7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0Qmxv
YihNRl9NVF9QQUxFVFRFLCAoVUlOVDgqKXBhRW50cmllcywgc2l6ZW9mKE1GUGFsZXR0ZUVudHJ5
KSAqIG5FbnRyaWVzKTsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBw
YWxldHRlIGVudHJpZXMuCisgICAgSFJFU1VMVCBHZXROdW1QYWxldHRlRW50cmllcyhVSU5UMzIg
KnBuRW50cmllcykKKyAgICB7CisgICAgICAgIENoZWNrUG9pbnRlcihwbkVudHJpZXMsIEVfUE9J
TlRFUik7CisgICAgICAgIFVJTlQzMiBuQnl0ZXMgPSAwOworICAgICAgICBIUkVTVUxUIGhyID0g
U19PSzsKKyAgICAgICAgaHIgPSBHZXRNZWRpYVR5cGUoKS0+R2V0QmxvYlNpemUoTUZfTVRfUEFM
RVRURSwgJm5CeXRlcyk7CisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAgICAgICAg
ICBpZiAobkJ5dGVzICUgc2l6ZW9mKE1GUGFsZXR0ZUVudHJ5KSkKKyAgICAgICAgICAgICAgICBo
ciA9IEVfVU5FWFBFQ1RFRDsKKyAgICAgICAgfQorICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgICAgICpwbkVudHJpZXMgPSBuQnl0ZXMgLyBzaXplb2YoTUZQYWxldHRlRW50cnkp
OworCisgICAgICAgIHJldHVybiBocjsKKyAgICB9CisKKyAgICAvLyBRdWVyaWVzIHRoZSA0eDMg
cmVnaW9uIG9mIHZpZGVvIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBwYW4vc2NhbiBtb2Rl
LgorICAgIEhSRVNVTFQgR2V0UGFuU2NhbkFwZXJ0dXJlKE1GVmlkZW9BcmVhICpwQXJlYSkKKyAg
ICB7CisgICAgICAgIENoZWNrUG9pbnRlcihwQXJlYSwgRV9QT0lOVEVSKTsKKyAgICAgICAgcmV0
dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRCbG9iKE1GX01UX1BBTl9TQ0FOX0FQRVJUVVJFLCAoVUlO
VDgqKXBBcmVhLCBzaXplb2YoTUZWaWRlb0FyZWEpLCBudWxscHRyKTsKKyAgICB9CisgICAgICAg
IAorICAgIC8vIFNldHMgdGhlIDR4MyByZWdpb24gb2YgdmlkZW8gdGhhdCBzaG91bGQgYmUgZGlz
cGxheWVkIGluIHBhbi9zY2FuIG1vZGUuCisgICAgSFJFU1VMVCBTZXRQYW5TY2FuQXBlcnR1cmUo
Y29uc3QgTUZWaWRlb0FyZWEmIGFyZWEpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFU
eXBlKCktPlNldEJsb2IoTUZfTVRfUEFOX1NDQU5fQVBFUlRVUkUsIChVSU5UOCopJmFyZWEsIHNp
emVvZihNRlZpZGVvQXJlYSkpOworICAgIH0KKyAgICAgICAgCisgICAgLy8gUXVlcmllcyB3aGV0
aGVyIHBhbi9zY2FuIG1vZGUgaXMgZW5hYmxlZC4KKyAgICBIUkVTVUxUIElzUGFuU2NhbkVuYWJs
ZWQoQk9PTCAqcEJvb2wpCisgICAgeworICAgICAgICBDaGVja1BvaW50ZXIocEJvb2wsIEVfUE9J
TlRFUik7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX1BB
Tl9TQ0FOX0VOQUJMRUQsIChVSU5UMzIqKXBCb29sKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHdo
ZXRoZXIgcGFuL3NjYW4gbW9kZSBpcyBlbmFibGVkLgorICAgIEhSRVNVTFQgU2V0UGFuU2NhbkVu
YWJsZWQoQk9PTCBiRW5hYmxlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUo
KS0+U2V0VUlOVDMyKE1GX01UX1BBTl9TQ0FOX0VOQUJMRUQsIChVSU5UMzIpYkVuYWJsZWQpOwor
ICAgIH0KKworICAgIC8vIFF1ZXJpZXMgdGhlIHBpeGVsIGFzcGVjdCByYXRpbworICAgIEhSRVNV
TFQgR2V0UGl4ZWxBc3BlY3RSYXRpbyhVSU5UMzIgKnBuTnVtZXJhdG9yLCBVSU5UMzIgKnBuRGVu
b21pbmF0b3IpCisgICAgeworICAgICAgICBDaGVja1BvaW50ZXIocG5OdW1lcmF0b3IsIEVfUE9J
TlRFUik7CisgICAgICAgIENoZWNrUG9pbnRlcihwbkRlbm9taW5hdG9yLCBFX1BPSU5URVIpOwor
ICAgICAgICByZXR1cm4gTUZHZXRBdHRyaWJ1dGVSYXRpbyhHZXRNZWRpYVR5cGUoKSwgTUZfTVRf
UElYRUxfQVNQRUNUX1JBVElPLCBwbk51bWVyYXRvciwgcG5EZW5vbWluYXRvcik7CisgICAgfSAg
ICAgICAKKworICAgIC8vIFNldHMgdGhlIHBpeGVsIGFzcGVjdCByYXRpbworICAgIEhSRVNVTFQg
U2V0UGl4ZWxBc3BlY3RSYXRpbyhVSU5UMzIgbk51bWVyYXRvciwgVUlOVDMyIG5EZW5vbWluYXRv
cikKKyAgICB7CisgICAgICAgIHJldHVybiBNRlNldEF0dHJpYnV0ZVJhdGlvKEdldE1lZGlhVHlw
ZSgpLCBNRl9NVF9QSVhFTF9BU1BFQ1RfUkFUSU8sIG5OdW1lcmF0b3IsIG5EZW5vbWluYXRvcik7
CisgICAgfQorCisgICAgSFJFU1VMVCBTZXRQaXhlbEFzcGVjdFJhdGlvKGNvbnN0IE1GUmF0aW8m
IHJhdGlvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1GU2V0QXR0cmlidXRlUmF0aW8oR2V0TWVk
aWFUeXBlKCksIE1GX01UX1BJWEVMX0FTUEVDVF9SQVRJTywgcmF0aW8uTnVtZXJhdG9yLCByYXRp
by5EZW5vbWluYXRvcik7CisgICAgfQorCisgICAgLy8gUXVlcmllcyB0aGUgaW50ZW5kZWQgYXNw
ZWN0IHJhdGlvLgorICAgIEhSRVNVTFQgR2V0U291cmNlQ29udGVudEhpbnQoTUZWaWRlb1NyY0Nv
bnRlbnRIaW50RmxhZ3MgKnBGbGFncykKKyAgICB7CisgICAgICAgIENoZWNrUG9pbnRlcihwRmxh
Z3MsIEVfUE9JTlRFUik7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMy
KE1GX01UX1NPVVJDRV9DT05URU5UX0hJTlQsIChVSU5UMzIqKXBGbGFncyk7CisgICAgfQorCisg
ICAgLy8gU2V0cyB0aGUgaW50ZW5kZWQgYXNwZWN0IHJhdGlvLgorICAgIEhSRVNVTFQgU2V0U291
cmNlQ29udGVudEhpbnQoTUZWaWRlb1NyY0NvbnRlbnRIaW50RmxhZ3MgbkZsYWdzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfU09VUkNFX0NP
TlRFTlRfSElOVCwgKFVJTlQzMiluRmxhZ3MpOworICAgIH0KKworICAgIC8vIFF1ZXJpZXMgYW4g
ZW51bWVyYXRpb24gd2hpY2ggcmVwcmVzZW50cyB0aGUgY29udmVyc2lvbiBmdW5jdGlvbiBmcm9t
IFJHQiB0byBSJ0cnQicuCisgICAgSFJFU1VMVCBHZXRUcmFuc2ZlckZ1bmN0aW9uKE1GVmlkZW9U
cmFuc2ZlckZ1bmN0aW9uICpwbkZ4bikKKyAgICB7CisgICAgICAgIENoZWNrUG9pbnRlcihwbkZ4
biwgRV9QT0lOVEVSKTsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIo
TUZfTVRfVFJBTlNGRVJfRlVOQ1RJT04sIChVSU5UMzIqKXBuRnhuKTsKKyAgICB9CisKKyAgICAv
LyBTZXQgYW4gZW51bWVyYXRpb24gd2hpY2ggcmVwcmVzZW50cyB0aGUgY29udmVyc2lvbiBmdW5j
dGlvbiBmcm9tIFJHQiB0byBSJ0cnQicuCisgICAgSFJFU1VMVCBTZXRUcmFuc2ZlckZ1bmN0aW9u
KE1GVmlkZW9UcmFuc2ZlckZ1bmN0aW9uIG5GeG4pCisgICAgeworICAgICAgICByZXR1cm4gR2V0
TWVkaWFUeXBlKCktPlNldFVJTlQzMihNRl9NVF9UUkFOU0ZFUl9GVU5DVElPTiwgKFVJTlQzMilu
RnhuKTsKKyAgICB9CisKKyAgICAvLyBRdWVyaWVzIGhvdyBjaHJvbWEgd2FzIHNhbXBsZWQgZm9y
IGEgWSdDYidDcicgdmlkZW8gbWVkaWEgdHlwZS4KKyAgICBIUkVTVUxUIEdldENocm9tYVNpdGlu
ZyhNRlZpZGVvQ2hyb21hU3Vic2FtcGxpbmcgKnBTYW1wbGluZykKKyAgICB7CisgICAgICAgIENo
ZWNrUG9pbnRlcihwU2FtcGxpbmcsIEVfUE9JTlRFUik7CisgICAgICAgIHJldHVybiBHZXRNZWRp
YVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX1ZJREVPX0NIUk9NQV9TSVRJTkcsIChVSU5UMzIqKXBT
YW1wbGluZyk7CisgICAgfQorICAgICAgICAKKyAgICAvLyBTZXRzIGhvdyBjaHJvbWEgd2FzIHNh
bXBsZWQgZm9yIGEgWSdDYidDcicgdmlkZW8gbWVkaWEgdHlwZS4KKyAgICBIUkVTVUxUIFNldENo
cm9tYVNpdGluZyhNRlZpZGVvQ2hyb21hU3Vic2FtcGxpbmcgblNhbXBsaW5nKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfVklERU9fQ0hST01B
X1NJVElORywgKFVJTlQzMiluU2FtcGxpbmcpOworICAgIH0KKyAgICAgICAgCisgICAgLy8gUXVl
cmllcyB0aGUgb3B0aW1hbCBsaWdodGluZyBjb25kaXRpb25zIGZvciB2aWV3aW5nLgorICAgIEhS
RVNVTFQgR2V0VmlkZW9MaWdodGluZyhNRlZpZGVvTGlnaHRpbmcgKnBMaWdodGluZykKKyAgICB7
CisgICAgICAgIENoZWNrUG9pbnRlcihwTGlnaHRpbmcsIEVfUE9JTlRFUik7CisgICAgICAgIHJl
dHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX1ZJREVPX0xJR0hUSU5HLCAoVUlO
VDMyKilwTGlnaHRpbmcpOworICAgIH0KKyAgICAgICAgCisgICAgLy8gU2V0cyB0aGUgb3B0aW1h
bCBsaWdodGluZyBjb25kaXRpb25zIGZvciB2aWV3aW5nLgorICAgIEhSRVNVTFQgU2V0VmlkZW9M
aWdodGluZyhNRlZpZGVvTGlnaHRpbmcgbkxpZ2h0aW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfVklERU9fTElHSFRJTkcsIChVSU5UMzIp
bkxpZ2h0aW5nKTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFF1ZXJpZXMgdGhlIG5vbWluYWwg
cmFuZ2Ugb2YgdGhlIGNvbG9yIGluZm9ybWF0aW9uIGluIGEgdmlkZW8gbWVkaWEgdHlwZS4gCisg
ICAgSFJFU1VMVCBHZXRWaWRlb05vbWluYWxSYW5nZShNRk5vbWluYWxSYW5nZSAqcFJhbmdlKQor
ICAgIHsKKyAgICAgICAgQ2hlY2tQb2ludGVyKHBSYW5nZSwgRV9QT0lOVEVSKTsKKyAgICAgICAg
cmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfVklERU9fTk9NSU5BTF9SQU5H
RSwgKFVJTlQzMiopcFJhbmdlKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoZSBub21pbmFsIHJh
bmdlIG9mIHRoZSBjb2xvciBpbmZvcm1hdGlvbiBpbiBhIHZpZGVvIG1lZGlhIHR5cGUuIAorICAg
IEhSRVNVTFQgU2V0VmlkZW9Ob21pbmFsUmFuZ2UoTUZOb21pbmFsUmFuZ2UgblJhbmdlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfVklERU9f
Tk9NSU5BTF9SQU5HRSwgKFVJTlQzMiluUmFuZ2UpOworICAgIH0KKworICAgIC8vIFF1ZXJpZXMg
dGhlIGNvbG9yIHByaW1hcmllcyBmb3IgYSB2aWRlbyBtZWRpYSB0eXBlLgorICAgIEhSRVNVTFQg
R2V0VmlkZW9QcmltYXJpZXMoTUZWaWRlb1ByaW1hcmllcyAqcFByaW1hcmllcykKKyAgICB7Cisg
ICAgICAgIENoZWNrUG9pbnRlcihwUHJpbWFyaWVzLCBFX1BPSU5URVIpOworICAgICAgICByZXR1
cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9WSURFT19QUklNQVJJRVMsIChVSU5U
MzIqKXBQcmltYXJpZXMpOworICAgIH0KKworICAgIC8vIFNldHMgdGhlIGNvbG9yIHByaW1hcmll
cyBmb3IgYSB2aWRlbyBtZWRpYSB0eXBlLgorICAgIEhSRVNVTFQgU2V0VmlkZW9QcmltYXJpZXMo
TUZWaWRlb1ByaW1hcmllcyBuUHJpbWFyaWVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1l
ZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfVklERU9fUFJJTUFSSUVTLCAoVUlOVDMyKW5Qcmlt
YXJpZXMpOworICAgIH0KKworICAgIC8vIEdldHMgYSBlbnVtZXJhdGlvbiByZXByZXNlbnRpbmcg
dGhlIGNvbnZlcnNpb24gbWF0cml4IGZyb20gdGhlIAorICAgIC8vIFknQ2InQ3InIGNvbG9yIHNw
YWNlIHRvIHRoZSBSJ0cnQicgY29sb3Igc3BhY2UuCisgICAgSFJFU1VMVCBHZXRZVVZNYXRyaXgo
TUZWaWRlb1RyYW5zZmVyTWF0cml4ICpwTWF0cml4KQorICAgIHsKKyAgICAgICAgQ2hlY2tQb2lu
dGVyKHBNYXRyaXgsIEVfUE9JTlRFUik7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+
R2V0VUlOVDMyKE1GX01UX1lVVl9NQVRSSVgsIChVSU5UMzIqKXBNYXRyaXgpOworICAgIH0gCisK
KyAgICAvLyBTZXRzIGFuIGVudW1lcmF0aW9uIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiBt
YXRyaXggZnJvbSB0aGUgCisgICAgLy8gWSdDYidDcicgY29sb3Igc3BhY2UgdG8gdGhlIFInRydC
JyBjb2xvciBzcGFjZS4KKyAgICBIUkVTVUxUIFNldFlVVk1hdHJpeChNRlZpZGVvVHJhbnNmZXJN
YXRyaXggbk1hdHJpeCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0
VUlOVDMyKE1GX01UX1lVVl9NQVRSSVgsIChVSU5UMzIpbk1hdHJpeCk7CisgICAgfSAKKworICAg
IC8vIAorICAgIC8vIFRoZSBmb2xsb3dpbmcgdmVyc2lvbnMgcmV0dXJuIHJlYXNvbmFibGUgZGVm
YXVsdHMgaWYgdGhlIHJlbGV2YW50IGF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudCAoemVyby9GQUxT
RSkuCisgICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIG1ha2luZyBxdWljayBjb21wYXJpc29ucyBi
ZXR3ZWVlbiBtZWRpYSB0eXBlcy4gCisgICAgLy8KKworICAgIE1GUmF0aW8gR2V0UGl4ZWxBc3Bl
Y3RSYXRpbygpIC8vIERlZmF1bHRzIHRvIDE6MSAoc3F1YXJlIHBpeGVscykKKyAgICB7CisgICAg
ICAgIE1GUmF0aW8gUEFSID0geyAwLCAwIH07CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOwor
CisgICAgICAgIGhyID0gTUZHZXRBdHRyaWJ1dGVSYXRpbyhHZXRNZWRpYVR5cGUoKSwgTUZfTVRf
UElYRUxfQVNQRUNUX1JBVElPLCAoVUlOVDMyKikmUEFSLk51bWVyYXRvciwgKFVJTlQzMiopJlBB
Ui5EZW5vbWluYXRvcik7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICBQ
QVIuTnVtZXJhdG9yID0gMTsKKyAgICAgICAgICAgIFBBUi5EZW5vbWluYXRvciA9IDE7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIFBBUjsKKyAgICB9ICAgICAgIAorCisgICAgQk9PTCBJc1Bh
blNjYW5FbmFibGVkKCkgLy8gRGVmYXVsdHMgdG8gRkFMU0UKKyAgICB7CisgICAgICAgIHJldHVy
biAoQk9PTClNRkdldEF0dHJpYnV0ZVVJTlQzMihHZXRNZWRpYVR5cGUoKSwgTUZfTVRfUEFOX1ND
QU5fRU5BQkxFRCwgRkFMU0UpOworICAgIH0KKworICAgIC8vIFJldHVybnMgKGluIHRoaXMgb3Jk
ZXIpIAorICAgIC8vIDEuIFRoZSBwYW4vc2NhbiByZWdpb24sIG9ubHkgaWYgcGFuL3NjYW4gbW9k
ZSBpcyBlbmFibGVkLgorICAgIC8vIDIuIFRoZSBnZW9tZXRyaWMgYXBlcnR1cmUuCisgICAgLy8g
My4gVGhlIGVudGlyZSB2aWRlbyBhcmVhLgorICAgIEhSRVNVTFQgR2V0VmlkZW9EaXNwbGF5QXJl
YShNRlZpZGVvQXJlYSAqcEFyZWEpCisgICAgeworICAgICAgICBDaGVja1BvaW50ZXIocEFyZWEs
IEVfUE9JTlRFUik7CisKKyAgICAgICAgcmV0dXJuIE1lZGlhRm91bmRhdGlvblV0aWxzOjpHZXRW
aWRlb0Rpc3BsYXlBcmVhKEdldE1lZGlhVHlwZSgpLCBwQXJlYSk7CisgICAgfQorfTsgIAorCisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gQXVkaW9UeXBlV3JhcHBlciBwcm92aWRlcyBhY2Nl
c3MgdG8gYXVkaW8tc3BlY2lmaWMgYXR0cmlidXRlcy4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
CitjbGFzcyBBdWRpb1R5cGUgOiBwdWJsaWMgTWVkaWFUeXBlIHsKKyAgICBmcmllbmQgY2xhc3Mg
TWVkaWFUeXBlOyAKKworcHVibGljOgorICAgIEF1ZGlvVHlwZShJTUZNZWRpYVR5cGUqIHBUeXBl
ID0gbnVsbHB0cikKKyAgICAgICAgOiBNZWRpYVR5cGUocFR5cGUpCisgICAgeworICAgIH0KKyAg
ICAgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIENyZWF0ZUVtcHR5VHlwZSgpCisgICAgeworICAg
ICAgICBpZiAobV9wVHlwZSkKKyAgICAgICAgICAgIG1fcFR5cGUtPlJlbGVhc2UoKTsKKworICAg
ICAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgICAgICBociA9IE1lZGlhVHlwZTo6Q3JlYXRl
RW1wdHlUeXBlKCk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICBo
ciA9IFNldE1ham9yVHlwZShNRk1lZGlhVHlwZV9BdWRpbyk7CisKKyAgICAgICAgcmV0dXJuIGhy
OworICAgIH0KKyAgICAgICAgCisgICAgLy8gUXVlcnkgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGJ5
dGVzIHBlciBzZWNvbmQuCisgICAgSFJFU1VMVCBHZXRBdmdlcmFnZUJ5dGVzUGVyU2Vjb25kKFVJ
TlQzMiAqcEJ5dGVzKQorICAgIHsKKyAgICAgICAgQ2hlY2tQb2ludGVyKHBCeXRlcywgRV9QT0lO
VEVSKTsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfQVVE
SU9fQVZHX0JZVEVTX1BFUl9TRUNPTkQsIHBCeXRlcyk7CisgICAgfQorCisgICAgLy8gU2V0cyB0
aGUgYXZlcmFnZSBudW1iZXIgb2YgYnl0ZXMgcGVyIHNlY29uZC4KKyAgICBIUkVTVUxUIFNldEF2
Z2VyYWdlQnl0ZXNQZXJTZWNvbmQoVUlOVDMyIG5CeXRlcykKKyAgICB7CisgICAgICAgIHJldHVy
biBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0FVRElPX0FWR19CWVRFU19QRVJfU0VD
T05ELCBuQnl0ZXMpOworICAgIH0KKworICAgIC8vIFF1ZXJ5IHRoZSBiaXRzIHBlciBhdWRpbyBz
YW1wbGUKKyAgICBIUkVTVUxUIEdldEJpdHNQZXJTYW1wbGUoVUlOVDMyICpwQml0cykKKyAgICB7
CisgICAgICAgIENoZWNrUG9pbnRlcihwQml0cywgRV9QT0lOVEVSKTsKKyAgICAgICAgcmV0dXJu
IEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfQVVESU9fQklUU19QRVJfU0FNUExFLCBw
Qml0cyk7CisgICAgfQorICAgICAgICAKKyAgICAvLyBTZXRzIHRoZSBiaXRzIHBlciBhdWRpbyBz
YW1wbGUKKyAgICBIUkVTVUxUIFNldEJpdHNQZXJTYW1wbGUoVUlOVDMyIG5CaXRzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfQVVESU9fQklU
U19QRVJfU0FNUExFLCBuQml0cyk7CisgICAgfQorICAgICAgICAKKyAgICAvLyBRdWVyeSB0aGUg
YmxvY2sgYWlnbm1lbnQgaW4gYnl0ZXMKKyAgICBIUkVTVUxUIEdldEJsb2NrQWxpZ25tZW50KFVJ
TlQzMiAqcEJ5dGVzKQorICAgIHsKKyAgICAgICAgQ2hlY2tQb2ludGVyKHBCeXRlcywgRV9QT0lO
VEVSKTsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfQVVE
SU9fQkxPQ0tfQUxJR05NRU5ULCBwQnl0ZXMpOworICAgIH0KKyAgICAgICAgCisgICAgLy8gU2V0
cyB0aGUgYmxvY2sgYWlnbm1lbnQgaW4gYnl0ZXMKKyAgICBIUkVTVUxUIFNldEJsb2NrQWxpZ25t
ZW50KFVJTlQzMiBuQnl0ZXMpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCkt
PlNldFVJTlQzMihNRl9NVF9BVURJT19CTE9DS19BTElHTk1FTlQsIG5CeXRlcyk7CisgICAgfQor
ICAgICAgICAKKyAgICAvLyBRdWVyeSB0aGUgYXNzaWdubWVudCBvZiBhdWRpbyBjaGFubmVscyB0
byBzcGVha2VyIHBvc2l0aW9ucy4KKyAgICBIUkVTVUxUIEdldENoYW5uZWxNYXNrKFVJTlQzMiAq
cE1hc2spCisgICAgeworICAgICAgICBDaGVja1BvaW50ZXIocE1hc2ssIEVfUE9JTlRFUik7Cisg
ICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX0FVRElPX0NIQU5O
RUxfTUFTSywgcE1hc2spOworICAgIH0KKyAgICAgICAgCisgICAgLy8gU2V0cyB0aGUgYXNzaWdu
bWVudCBvZiBhdWRpbyBjaGFubmVscyB0byBzcGVha2VyIHBvc2l0aW9ucy4KKyAgICBIUkVTVUxU
IFNldENoYW5uZWxNYXNrKFVJTlQzMiBuTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRN
ZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0FVRElPX0NIQU5ORUxfTUFTSywgbk1hc2spOwor
ICAgIH0KKyAgICAgICAgCisgICAgLy8gUXVlcnkgdGhlIG51bWJlciBvZiBhdWRpbyBzYW1wbGVz
IHBlciBzZWNvbmQgKGZsb2F0aW5nLXBvaW50IHZhbHVlKS4KKyAgICBIUkVTVUxUIEdldEZsb2F0
U2FtcGxlc1BlclNlY29uZChkb3VibGUgKnBmU2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAgIENo
ZWNrUG9pbnRlcihwZlNhbXBsZVJhdGUsIEVfUE9JTlRFUik7CisgICAgICAgIHJldHVybiBHZXRN
ZWRpYVR5cGUoKS0+R2V0RG91YmxlKE1GX01UX0FVRElPX0ZMT0FUX1NBTVBMRVNfUEVSX1NFQ09O
RCwgcGZTYW1wbGVSYXRlKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoZSBudW1iZXIgb2YgYXVk
aW8gc2FtcGxlcyBwZXIgc2Vjb25kIChmbG9hdGluZy1wb2ludCB2YWx1ZSkuCisgICAgSFJFU1VM
VCBTZXRGbG9hdFNhbXBsZXNQZXJTZWNvbmQoZG91YmxlIGZTYW1wbGVSYXRlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXREb3VibGUoTUZfTVRfQVVESU9fRkxPQVRf
U0FNUExFU19QRVJfU0VDT05ELCBmU2FtcGxlUmF0ZSk7CisgICAgfQorCisgICAgLy8gUXVlcmll
cyB0aGUgbnVtYmVyIG9mIGF1ZGlvIGNoYW5uZWxzCisgICAgSFJFU1VMVCBHZXROdW1DaGFubmVs
cyhVSU5UMzIgKnBuQ2hhbm5lbHMpCisgICAgeworICAgICAgICBDaGVja1BvaW50ZXIocG5DaGFu
bmVscywgRV9QT0lOVEVSKTsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5U
MzIoTUZfTVRfQVVESU9fTlVNX0NIQU5ORUxTLCBwbkNoYW5uZWxzKTsKKyAgICB9CisKKyAgICAv
LyBTZXRzIHRoZSBudW1iZXIgb2YgYXVkaW8gY2hhbm5lbHMKKyAgICBIUkVTVUxUIFNldE51bUNo
YW5uZWxzKFVJTlQzMiBuQ2hhbm5lbHMpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFU
eXBlKCktPlNldFVJTlQzMihNRl9NVF9BVURJT19OVU1fQ0hBTk5FTFMsIG5DaGFubmVscyk7Cisg
ICAgfQorCisgICAgLy8gUXVlcnkgdGhlIG51bWJlciBvZiBhdWRpbyBzYW1wbGVzIGNvbnRhaW5l
ZCBpbiBvbmUgY29tcHJlc3NlZCBibG9jayBvZiBhdWRpbyBkYXRhLgorICAgIEhSRVNVTFQgR2V0
U2FtcGxlc1BlckJsb2NrKFVJTlQzMiAqcG5TYW1wbGVzKQorICAgIHsKKyAgICAgICAgQ2hlY2tQ
b2ludGVyKHBuU2FtcGxlcywgRV9QT0lOVEVSKTsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlw
ZSgpLT5HZXRVSU5UMzIoTUZfTVRfQVVESU9fU0FNUExFU19QRVJfQkxPQ0ssIHBuU2FtcGxlcyk7
CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUgbnVtYmVyIG9mIGF1ZGlvIHNhbXBsZXMgY29udGFp
bmVkIGluIG9uZSBjb21wcmVzc2VkIGJsb2NrIG9mIGF1ZGlvIGRhdGEuCisgICAgSFJFU1VMVCBT
ZXRTYW1wbGVzUGVyQmxvY2soVUlOVDMyIG5TYW1wbGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfQVVESU9fU0FNUExFU19QRVJfQkxPQ0ss
IG5TYW1wbGVzKTsKKyAgICB9CisKKyAgICAvLyBRdWVyeSB0aGUgbnVtYmVyIG9mIGF1ZGlvIHNh
bXBsZXMgcGVyIHNlY29uZCBhcyBhbiBpbnRlZ2VyIHZhbHVlLgorICAgIEhSRVNVTFQgR2V0U2Ft
cGxlc1BlclNlY29uZChVSU5UMzIgKnBuU2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAgIENoZWNr
UG9pbnRlcihwblNhbXBsZVJhdGUsIEVfUE9JTlRFUik7CisgICAgICAgIHJldHVybiBHZXRNZWRp
YVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX0FVRElPX1NBTVBMRVNfUEVSX1NFQ09ORCwgcG5TYW1w
bGVSYXRlKTsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIG51bWJlciBvZiBhdWRpbyBzYW1wbGVz
IHBlciBzZWNvbmQgYXMgYW4gaW50ZWdlciB2YWx1ZS4KKyAgICBIUkVTVUxUIFNldFNhbXBsZXNQ
ZXJTZWNvbmQoVUlOVDMyIG5TYW1wbGVSYXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1l
ZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfQVVESU9fU0FNUExFU19QRVJfU0VDT05ELCBuU2Ft
cGxlUmF0ZSk7CisgICAgfQorCisgICAgLy8gUXVlcnkgbnVtYmVyIG9mIHZhbGlkIGJpdHMgb2Yg
YXVkaW8gZGF0YSBpbiBlYWNoIHNhbXBsZS4KKyAgICBIUkVTVUxUIEdldFZhbGlkQml0c1BlclNh
bXBsZShVSU5UMzIgKnBuQml0cykKKyAgICB7CisgICAgICAgIENoZWNrUG9pbnRlcihwbkJpdHMs
IEVfUE9JTlRFUik7CisgICAgICAgIEhSRVNVTFQgaHIgPSBHZXRNZWRpYVR5cGUoKS0+R2V0VUlO
VDMyKE1GX01UX0FVRElPX1ZBTElEX0JJVFNfUEVSX1NBTVBMRSwgcG5CaXRzKTsKKyAgICAgICAg
aWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgaHIgPSBHZXRCaXRzUGVyU2FtcGxlKHBu
Qml0cyk7CisgICAgICAgIHJldHVybiBocjsKKyAgICB9IAorICAgICAgICAKKyAgICAvLyBTZXQg
dGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIG9mIGF1ZGlvIGRhdGEgaW4gZWFjaCBzYW1wbGUuCisg
ICAgSFJFU1VMVCBTZXRWYWxpZEJpdHNQZXJTYW1wbGUoVUlOVDMyIG5CaXRzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfQVVESU9fVkFMSURf
QklUU19QRVJfU0FNUExFLCBuQml0cyk7CisgICAgfSAKKworCisgICAgLy8gVGhlIGZvbGxvd2lu
ZyB2ZXJzaW9ucyByZXR1cm4gemVybyBpZiB0aGUgcmVsZXZhbnQgYXR0cmlidXRlIGlzIG5vdCBw
cmVzZW50LiAKKyAgICAvLyBUaGlzIGlzIHVzZWZ1bCBmb3IgbWFraW5nIHF1aWNrIGNvbXBhcmlz
b25zIGJldHdlZWVuIG1lZGlhIHR5cGVzLiAKKworICAgIFVJTlQzMiBBdmdlcmFnZUJ5dGVzUGVy
U2Vjb25kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBNRkdldEF0dHJpYnV0ZVVJTlQzMihHZXRN
ZWRpYVR5cGUoKSwgTUZfTVRfQVVESU9fQVZHX0JZVEVTX1BFUl9TRUNPTkQsIDApOworICAgIH0K
KworICAgIFVJTlQzMiBCaXRzUGVyU2FtcGxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBNRkdl
dEF0dHJpYnV0ZVVJTlQzMihHZXRNZWRpYVR5cGUoKSwgTUZfTVRfQVVESU9fQklUU19QRVJfU0FN
UExFLCAwKTsKKyAgICB9CisgICAgICAgIAorICAgIFVJTlQzMiBHZXRCbG9ja0FsaWdubWVudCgp
CisgICAgeworICAgICAgICByZXR1cm4gTUZHZXRBdHRyaWJ1dGVVSU5UMzIoR2V0TWVkaWFUeXBl
KCksIE1GX01UX0FVRElPX0JMT0NLX0FMSUdOTUVOVCwgMCk7CisgICAgfQorICAgICAgICAKKyAg
ICBkb3VibGUgRmxvYXRTYW1wbGVzUGVyU2Vjb25kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBN
RkdldEF0dHJpYnV0ZURvdWJsZShHZXRNZWRpYVR5cGUoKSwgTUZfTVRfQVVESU9fRkxPQVRfU0FN
UExFU19QRVJfU0VDT05ELCAwLjApOworICAgIH0KKworICAgIFVJTlQzMiBOdW1DaGFubmVscygp
CisgICAgeworICAgICAgICByZXR1cm4gTUZHZXRBdHRyaWJ1dGVVSU5UMzIoR2V0TWVkaWFUeXBl
KCksIE1GX01UX0FVRElPX05VTV9DSEFOTkVMUywgMCk7CisgICAgfQorCisgICAgVUlOVDMyIFNh
bXBsZXNQZXJTZWNvbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1GR2V0QXR0cmlidXRlVUlO
VDMyKEdldE1lZGlhVHlwZSgpLCBNRl9NVF9BVURJT19TQU1QTEVTX1BFUl9TRUNPTkQsIDApOwor
ICAgIH0KKworfTsgIAorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTVBFR1ZpZGVvVHlw
ZSBwcm92aWRlcyBhY2Nlc3MgdG8gTVBFRy0xIGFuZCBNUEVHLTIgdmlkZW8gCisvLyBhdHRyaWJ1
dGVzLCBwbHVzIHRoZSBnZW5lcmFsIHZpZGVvIGF0dHJpYnV0ZXMuCisvLworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworY2xhc3MgTVBFR1ZpZGVvVHlwZSA6IHB1YmxpYyBWaWRlb1R5cGUgeworICAgIGZy
aWVuZCBjbGFzcyBNZWRpYVR5cGU7IAorCitwdWJsaWM6CisKKyAgICBNUEVHVmlkZW9UeXBlKElN
Rk1lZGlhVHlwZSogcFR5cGUgPSBudWxscHRyKQorICAgICAgICA6IFZpZGVvVHlwZShwVHlwZSkK
KyAgICB7CisgICAgfQorCisgICAgLy8gUmV0cmlldmVzIHRoZSBNUEVHIHNlcXVlbmNlIGhlYWRl
ciBmb3IgYSB2aWRlbyBtZWRpYSB0eXBlLgorICAgIEhSRVNVTFQgR2V0TXBlZ1NlcUhlYWRlcihC
WVRFICpwRGF0YSwgVUlOVDMyIGNiU2l6ZSkKKyAgICB7CisgICAgICAgIENoZWNrUG9pbnRlcihw
RGF0YSwgRV9QT0lOVEVSKTsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRCbG9i
KE1GX01UX01QRUdfU0VRVUVOQ0VfSEVBREVSLCBwRGF0YSwgY2JTaXplLCBudWxscHRyKTsKKyAg
ICB9CisKKyAgICAvLyBTZXRzIHRoZSBNUEVHIHNlcXVlbmNlIGhlYWRlciBmb3IgYSB2aWRlbyBt
ZWRpYSB0eXBlLgorICAgIEhSRVNVTFQgU2V0TXBlZ1NlcUhlYWRlcihjb25zdCBCWVRFICpwRGF0
YSwgVUlOVDMyIGNiU2l6ZSkKKyAgICB7CisgICAgICAgIENoZWNrUG9pbnRlcihwRGF0YSwgRV9Q
T0lOVEVSKTsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRCbG9iKE1GX01UX01Q
RUdfU0VRVUVOQ0VfSEVBREVSLCBwRGF0YSwgY2JTaXplKTsKKyAgICB9CisKKyAgICAvLyBSZXRy
aWV2ZXMgdGhlIHNpemUgb2YgdGhlIE1QRUcgc2VxdWVuY2UgaGVhZGVyLgorICAgIEhSRVNVTFQg
R2V0TXBlZ1NlcUhlYWRlclNpemUoVUlOVDMyICpwY2JTaXplKQorICAgIHsKKyAgICAgICAgQ2hl
Y2tQb2ludGVyKHBjYlNpemUsIEVfUE9JTlRFUik7CisKKyAgICAgICAgKnBjYlNpemUgPSAwOwor
CisgICAgICAgIEhSRVNVTFQgaHIgPSBHZXRNZWRpYVR5cGUoKS0+R2V0QmxvYlNpemUoTUZfTVRf
TVBFR19TRVFVRU5DRV9IRUFERVIsIHBjYlNpemUpOworCisgICAgICAgIGlmIChociA9PSBNRl9F
X0FUVFJJQlVURU5PVEZPVU5EKQorICAgICAgICAgICAgaHIgPSBTX09LOworICAgICAgICByZXR1
cm4gaHI7CisgICAgfQorICAgICAgICAKKyAgICAvLyBSZXRyaWV2ZSB0aGUgZ3JvdXAtb2YtcGlj
dHVyZXMgKEdPUCkgc3RhcnQgdGltZSBjb2RlLCBmb3IgYW4gTVBFRy0xIG9yIE1QRUctMiB2aWRl
byBtZWRpYSB0eXBlLgorICAgIEhSRVNVTFQgR2V0U3RhcnRUaW1lQ29kZShVSU5UMzIgKnBuVGlt
ZSkKKyAgICB7CisgICAgICAgIENoZWNrUG9pbnRlcihwblRpbWUsIEVfUE9JTlRFUik7CisgICAg
ICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX01QRUdfU1RBUlRfVElN
RV9DT0RFLCBwblRpbWUpOworICAgIH0KKworICAgIC8vIFNldHMgdGhlIGdyb3VwLW9mLXBpY3R1
cmVzIChHT1ApIHN0YXJ0IHRpbWUgY29kZSwgZm9yIGFuIE1QRUctMSBvciBNUEVHLTIgdmlkZW8g
bWVkaWEgdHlwZS4KKyAgICBIUkVTVUxUIFNldFN0YXJ0VGltZUNvZGUoVUlOVDMyIG5UaW1lKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfTVBF
R19TVEFSVF9USU1FX0NPREUsIG5UaW1lKTsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgYXNz
b3J0ZWQgZmxhZ3MgZm9yIE1QRUctMiB2aWRlbyBtZWRpYSB0eXBlCisgICAgSFJFU1VMVCBHZXRN
UEVHMkZsYWdzKFVJTlQzMiAqcG5GbGFncykKKyAgICB7CisgICAgICAgIENoZWNrUG9pbnRlcihw
bkZsYWdzLCBFX1BPSU5URVIpOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJ
TlQzMihNRl9NVF9NUEVHMl9GTEFHUywgcG5GbGFncyk7CisgICAgfQorCisgICAgLy8gU2V0cyBh
c3NvcnRlZCBmbGFncyBmb3IgTVBFRy0yIHZpZGVvIG1lZGlhIHR5cGUKKyAgICBIUkVTVUxUIFNl
dE1QRUcyRmxhZ3MoVUlOVDMyIG5GbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRp
YVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX01QRUcyX0ZMQUdTLCBuRmxhZ3MpOworICAgIH0KKwor
ICAgIC8vIFJldHJpZXZlcyB0aGUgTVBFRy0yIGxldmVsIGluIGEgdmlkZW8gbWVkaWEgdHlwZS4K
KyAgICBIUkVTVUxUIEdldE1QRUcyTGV2ZWwoVUlOVDMyICpwTGV2ZWwpCisgICAgeworICAgICAg
ICBDaGVja1BvaW50ZXIocExldmVsLCBFX1BPSU5URVIpOworICAgICAgICByZXR1cm4gR2V0TWVk
aWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9NUEVHMl9MRVZFTCwgcExldmVsKTsKKyAgICB9CisK
KyAgICAvLyBTZXRzIHRoZSBNUEVHLTIgbGV2ZWwgaW4gYSB2aWRlbyBtZWRpYSB0eXBlLgorICAg
IEhSRVNVTFQgU2V0TVBFRzJMZXZlbChVSU5UMzIgbkxldmVsKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfTVBFRzJfTEVWRUwsIG5MZXZlbCk7
CisgICAgfQorCisgICAgLy8gUmV0cmlldmVzIHRoZSBNUEVHLTIgcHJvZmlsZSBpbiBhIHZpZGVv
IG1lZGlhIHR5cGUKKyAgICBIUkVTVUxUIEdldE1QRUcyUHJvZmlsZShVSU5UMzIgKnBQcm9maWxl
KQorICAgIHsKKyAgICAgICAgQ2hlY2tQb2ludGVyKHBQcm9maWxlLCBFX1BPSU5URVIpOworICAg
ICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9NUEVHMl9QUk9GSUxF
LCBwUHJvZmlsZSk7CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUgTVBFRy0yIHByb2ZpbGUgaW4g
YSB2aWRlbyBtZWRpYSB0eXBlCisgICAgSFJFU1VMVCBTZXRNUEVHMlByb2ZpbGUoVUlOVDMyIG5Q
cm9maWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIo
TUZfTVRfTVBFRzJfUFJPRklMRSwgblByb2ZpbGUpOworICAgIH0KKworfTsKKworCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCisvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgbWVkaWEg
dHlwZXMuCisKK2lubGluZSBNRk9mZnNldCBNYWtlT2Zmc2V0KGZsb2F0IHYpCit7CisgICAgTUZP
ZmZzZXQgb2Zmc2V0OworICAgIG9mZnNldC52YWx1ZSA9IHNob3J0KHYpOworICAgIG9mZnNldC5m
cmFjdCA9IFdPUkQoNjU1MzYgKiAodi1vZmZzZXQudmFsdWUpKTsKKyAgICByZXR1cm4gb2Zmc2V0
OworfQorCitpbmxpbmUgTUZWaWRlb0FyZWEgTWFrZUFyZWEoZmxvYXQgeCwgZmxvYXQgeSwgRFdP
UkQgd2lkdGgsIERXT1JEIGhlaWdodCkKK3sKKyAgICBNRlZpZGVvQXJlYSBhcmVhOworICAgIGFy
ZWEuT2Zmc2V0WCA9IE1ha2VPZmZzZXQoeCk7CisgICAgYXJlYS5PZmZzZXRZID0gTWFrZU9mZnNl
dCh5KTsKKyAgICBhcmVhLkFyZWEuY3ggPSB3aWR0aDsKKyAgICBhcmVhLkFyZWEuY3kgPSBoZWln
aHQ7CisgICAgcmV0dXJuIGFyZWE7Cit9CisKKy8vIEdldCB0aGUgZnJhbWUgcmF0ZSBmcm9tIGEg
dmlkZW8gbWVkaWEgdHlwZS4KK2lubGluZSBIUkVTVUxUIEdldEZyYW1lUmF0ZShJTUZNZWRpYVR5
cGUgKnBUeXBlLCBNRlJhdGlvICpwUmF0aW8pCit7CisgICAgcmV0dXJuIE1GR2V0QXR0cmlidXRl
UmF0aW8ocFR5cGUsIE1GX01UX0ZSQU1FX1JBVEUsIChVSU5UMzIqKSZwUmF0aW8tPk51bWVyYXRv
ciwgKFVJTlQzMiopJnBSYXRpby0+RGVub21pbmF0b3IpOworfQorCisvLyBHZXQgdGhlIGNvcnJl
Y3QgZGlzcGxheSBhcmVhIGZyb20gYSB2aWRlbyBtZWRpYSB0eXBlLgoraW5saW5lIEhSRVNVTFQg
R2V0VmlkZW9EaXNwbGF5QXJlYShJTUZNZWRpYVR5cGUgKnBUeXBlLCBNRlZpZGVvQXJlYSAqcEFy
ZWEpCit7CisgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgQk9PTCBiUGFuU2NhbiA9IEZBTFNF
OworICAgIFVJTlQzMiB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisKKyAgICBiUGFuU2NhbiA9IE1G
R2V0QXR0cmlidXRlVUlOVDMyKHBUeXBlLCBNRl9NVF9QQU5fU0NBTl9FTkFCTEVELCBGQUxTRSk7
CisKKyAgICAvLyBJbiBwYW4vc2NhbiBtb2RlLCB0cnkgdG8gZ2V0IHRoZSBwYW4vc2NhbiByZWdp
b24uCisgICAgaWYgKGJQYW5TY2FuKQorICAgICAgICBociA9IHBUeXBlLT5HZXRCbG9iKE1GX01U
X1BBTl9TQ0FOX0FQRVJUVVJFLCAoVUlOVDgqKXBBcmVhLCBzaXplb2YoTUZWaWRlb0FyZWEpLCBu
dWxscHRyKTsKKworICAgIC8vIElmIG5vdCBpbiBwYW4vc2NhbiBtb2RlLCBvciB0aGUgcGFuL3Nj
YW4gcmVnaW9uIGlzIG5vdCBzZXQsIGdldCB0aGUgbWluaW1pbXVtIGRpc3BsYXkgYXBlcnR1cmUu
CisKKyAgICBpZiAoIWJQYW5TY2FuIHx8IGhyID09IE1GX0VfQVRUUklCVVRFTk9URk9VTkQpIHsK
KyAgICAgICAgaHIgPSBwVHlwZS0+R2V0QmxvYihNRl9NVF9NSU5JTVVNX0RJU1BMQVlfQVBFUlRV
UkUsIChVSU5UOCopcEFyZWEsIHNpemVvZihNRlZpZGVvQXJlYSksIG51bGxwdHIpOworCisgICAg
ICAgIGlmIChociA9PSBNRl9FX0FUVFJJQlVURU5PVEZPVU5EKSB7CisgICAgICAgICAgICAvLyBN
aW5pbXVtIGRpc3BsYXkgYXBlcnR1cmUgaXMgbm90IHNldC4KKworICAgICAgICAgICAgLy8gRm9y
IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIGNvbXBvbmVudHMsIGNoZWNrIGZvciBh
IGdlb21ldHJpYyBhcGVydHVyZS4gCisgICAgICAgICAgICBociA9IHBUeXBlLT5HZXRCbG9iKE1G
X01UX0dFT01FVFJJQ19BUEVSVFVSRSwgKFVJTlQ4KilwQXJlYSwgc2l6ZW9mKE1GVmlkZW9BcmVh
KSwgbnVsbHB0cik7CisgICAgICAgIH0KKworICAgICAgICAvLyBEZWZhdWx0OiBVc2UgdGhlIGVu
dGlyZSB2aWRlbyBhcmVhLgorCisgICAgICAgIGlmIChociA9PSBNRl9FX0FUVFJJQlVURU5PVEZP
VU5EKSB7CisgICAgICAgICAgICBociA9IE1GR2V0QXR0cmlidXRlU2l6ZShwVHlwZSwgTUZfTVRf
RlJBTUVfU0laRSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQo
aHIpKQorICAgICAgICAgICAgICAgICpwQXJlYSA9IE1ha2VBcmVhKDAuMCwgMC4wLCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworCitpbmxp
bmUgSFJFU1VMVCBHZXREZWZhdWx0U3RyaWRlKElNRk1lZGlhVHlwZSAqcFR5cGUsIExPTkcgKnBs
U3RyaWRlKQoreworICAgIExPTkcgbFN0cmlkZSA9IDA7CisKKyAgICAvLyBUcnkgdG8gZ2V0IHRo
ZSBkZWZhdWx0IHN0cmlkZSBmcm9tIHRoZSBtZWRpYSB0eXBlLgorICAgIEhSRVNVTFQgaHIgPSBw
VHlwZS0+R2V0VUlOVDMyKE1GX01UX0RFRkFVTFRfU1RSSURFLCAoVUlOVDMyKikmbFN0cmlkZSk7
CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgLy8gQXR0cmlidXRlIG5vdCBzZXQuIFRy
eSB0byBjYWxjdWxhdGUgdGhlIGRlZmF1bHQgc3RyaWRlLgorICAgICAgICBHVUlEIHN1YnR5cGUg
PSBHVUlEX05VTEw7CisKKyAgICAgICAgVUlOVDMyIHdpZHRoID0gMDsKKyAgICAgICAgVUlOVDMy
IGhlaWdodCA9IDA7CisKKyAgICAgICAgLy8gR2V0IHRoZSBzdWJ0eXBlIGFuZCB0aGUgaW1hZ2Ug
c2l6ZS4KKyAgICAgICAgaHIgPSBwVHlwZS0+R2V0R1VJRChNRl9NVF9TVUJUWVBFLCAmc3VidHlw
ZSk7CisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgaHIgPSBNRkdldEF0
dHJpYnV0ZVNpemUocFR5cGUsIE1GX01UX0ZSQU1FX1NJWkUsICZ3aWR0aCwgJmhlaWdodCk7Cisg
ICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgaHIgPSBNRkdldFN0cmlkZUZv
ckJpdG1hcEluZm9IZWFkZXIoc3VidHlwZS5EYXRhMSwgd2lkdGgsICZsU3RyaWRlKTsKKworICAg
ICAgICAvLyBTZXQgdGhlIGF0dHJpYnV0ZSBmb3IgbGF0ZXIgcmVmZXJlbmNlLgorICAgICAgICBp
ZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgIHBUeXBlLT5TZXRVSU5UMzIoTUZfTVRfREVG
QVVMVF9TVFJJREUsIFVJTlQzMihsU3RyaWRlKSk7CisgICAgfQorCisgICAgaWYgKFNVQ0NFRURF
RChocikpCisgICAgICAgICpwbFN0cmlkZSA9IGxTdHJpZGU7CisKKyAgICByZXR1cm4gaHI7Cit9
CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICBBc3luY0NhbGxiYWNrIFt0ZW1wbGF0ZV0KKy8v
CisvLyAgRGVzY3JpcHRpb246IAorLy8gIEhlbHBlciBjbGFzcyB0aGF0IHJvdXRlcyBJTUZBc3lu
Y0NhbGxiYWNrOjpJbnZva2UgY2FsbHMgdG8gYSBjbGFzcworLy8gIG1ldGhvZCBvbiB0aGUgcGFy
ZW50IGNsYXNzLgorLy8KKy8vICBVc2FnZToKKy8vICBBZGQgdGhpcyBjbGFzcyBhcyBhIG1lbWJl
ciB2YXJpYWJsZS4gSW4gdGhlIHBhcmVudCBjbGFzcyBjb25zdHJ1Y3RvciwKKy8vICBpbml0aWFs
aXplIHRoZSBBc3luY0NhbGxiYWNrIGNsYXNzIGxpa2UgdGhpczoKKy8vICAgICAgbV9jYih0aGlz
LCAmQ1lvdXJDbGFzczo6T25JbnZva2UpCisvLyAgd2hlcmUKKy8vICAgICAgbV9jYiAgICAgICA9
IEFzeW5jQ2FsbGJhY2sgb2JqZWN0CisvLyAgICAgIENZb3VyQ2xhc3MgPSBwYXJlbnQgY2xhc3MK
Ky8vICAgICAgT25JbnZva2UgICA9IE1ldGhvZCBpbiB0aGUgcGFyZW50IGNsYXNzIHRvIHJlY2Vp
dmUgSW52b2tlIGNhbGxzLgorLy8KKy8vICBUaGUgcGFyZW50J3MgT25JbnZva2UgbWV0aG9kICh5
b3UgY2FuIG5hbWUgaXQgYW55dGhpbmcgeW91IGxpa2UpIG11c3QKKy8vICBoYXZlIGEgc2lnbmF0
dXJlIHRoYXQgbWF0Y2hlcyB0aGUgSW52b2tlRm4gdHlwZWRlZiBiZWxvdy4KKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKKy8vIFQ6IFR5cGUgb2YgdGhlIHBhcmVudCBvYmplY3QKK3RlbXBsYXRlPGNsYXNz
IFQ+CitjbGFzcyBBc3luY0NhbGxiYWNrIDogcHVibGljIElNRkFzeW5jQ2FsbGJhY2sgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSFJFU1VMVChUOjoqSW52b2tlRm4pKElNRkFzeW5jUmVzdWx0ICpw
QXN5bmNSZXN1bHQpOworCisgICAgQXN5bmNDYWxsYmFjayhUICpwUGFyZW50LCBJbnZva2VGbiBm
bikKKyAgICAgICAgOiBtX3BQYXJlbnQocFBhcmVudCkKKyAgICAgICAgLCBtX3BJbnZva2VGbihm
bikKKyAgICB7CisgICAgfQorCisgICAgLy8gSVVua25vd24KKyAgICBTVERNRVRIT0RJTVAgUXVl
cnlJbnRlcmZhY2UoUkVGSUlEIGlpZCwgdm9pZCoqIHBwdikKKyAgICB7CisgICAgICAgIGlmICgh
cHB2KQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgICAgICBpZiAoaWlkID09
IF9fdXVpZG9mKElVbmtub3duKSkKKyAgICAgICAgICAgICpwcHYgPSBzdGF0aWNfY2FzdDxJVW5r
bm93bio+KHN0YXRpY19jYXN0PElNRkFzeW5jQ2FsbGJhY2sqPih0aGlzKSk7CisgICAgICAgIGVs
c2UgaWYgKGlpZCA9PSBfX3V1aWRvZihJTUZBc3luY0NhbGxiYWNrKSkKKyAgICAgICAgICAgICpw
cHYgPSBzdGF0aWNfY2FzdDxJTUZBc3luY0NhbGxiYWNrKj4odGhpcyk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgKnBwdiA9IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gRV9OT0lO
VEVSRkFDRTsKKyAgICAgICAgfQorICAgICAgICBBZGRSZWYoKTsKKyAgICAgICAgcmV0dXJuIFNf
T0s7CisgICAgfQorICAgIFNURE1FVEhPRElNUF8oVUxPTkcpIEFkZFJlZigpIHsKKyAgICAgICAg
Ly8gRGVsZWdhdGUgdG8gcGFyZW50IGNsYXNzLgorICAgICAgICByZXR1cm4gbV9wUGFyZW50LT5B
ZGRSZWYoKTsKKyAgICB9CisgICAgU1RETUVUSE9ESU1QXyhVTE9ORykgUmVsZWFzZSgpIHsKKyAg
ICAgICAgLy8gRGVsZWdhdGUgdG8gcGFyZW50IGNsYXNzLgorICAgICAgICByZXR1cm4gbV9wUGFy
ZW50LT5SZWxlYXNlKCk7CisgICAgfQorCisKKyAgICAvLyBJTUZBc3luY0NhbGxiYWNrIG1ldGhv
ZHMKKyAgICBTVERNRVRIT0RJTVAgR2V0UGFyYW1ldGVycyhEV09SRCosIERXT1JEKikKKyAgICB7
CisgICAgICAgIC8vIEltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIGlzIG9wdGlvbmFsLgor
ICAgICAgICByZXR1cm4gRV9OT1RJTVBMOworICAgIH0KKworICAgIFNURE1FVEhPRElNUCBJbnZv
a2UoSU1GQXN5bmNSZXN1bHQqIHBBc3luY1Jlc3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiAo
bV9wUGFyZW50LT4qbV9wSW52b2tlRm4pKHBBc3luY1Jlc3VsdCk7CisgICAgfQorCisgICAgVCAq
bV9wUGFyZW50OworICAgIEludm9rZUZuIG1fcEludm9rZUZuOworfTsKKworfQorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3Bw
CShyZXZpc2lvbiAxOTE4ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsMTQgKzMwLDIwIEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJIV25kREMuaCIKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKKyNlbmRpZgogI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCiAKICNpZiBVU0UoTUVESUFf
Rk9VTkRBVElPTikKIAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKKyNkZWZpbmUgQ0hF
Q0tfSFIoaHIpIElGX0ZBSUxFRF9HT1RPKGhyLCBkb25lKQorCiBTT0ZUX0xJTktfTElCUkFSWShN
Zik7CiBTT0ZUX0xJTktfT1BUSU9OQUwoTWYsIE1GQ3JlYXRlU291cmNlUmVzb2x2ZXIsIEhSRVNV
TFQsIFNUREFQSUNBTExUWVBFLCAoSU1GU291cmNlUmVzb2x2ZXIqKikpOwogU09GVF9MSU5LX09Q
VElPTkFMKE1mLCBNRkNyZWF0ZU1lZGlhU2Vzc2lvbiwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUs
IChJTUZBdHRyaWJ1dGVzKiwgSU1GTWVkaWFTZXNzaW9uKiopKTsKQEAgLTQ2LDEwICs1Miw1MCBA
QCBTT0ZUX0xJTktfT1BUSU9OQUwoTWYsIE1GQ3JlYXRlVG9wb2xvZ3lOCiBTT0ZUX0xJTktfT1BU
SU9OQUwoTWYsIE1GR2V0U2VydmljZSwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUsIChJVW5rbm93
biosIFJFRkdVSUQsIFJFRklJRCwgTFBWT0lEKikpOwogU09GVF9MSU5LX09QVElPTkFMKE1mLCBN
RkNyZWF0ZUF1ZGlvUmVuZGVyZXJBY3RpdmF0ZSwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUsIChJ
TUZBY3RpdmF0ZSoqKSk7CiBTT0ZUX0xJTktfT1BUSU9OQUwoTWYsIE1GQ3JlYXRlVmlkZW9SZW5k
ZXJlckFjdGl2YXRlLCBIUkVTVUxULCBTVERBUElDQUxMVFlQRSwgKEhXTkQsIElNRkFjdGl2YXRl
KiopKTsKK1NPRlRfTElOS19PUFRJT05BTChNZiwgTUZDcmVhdGVTYW1wbGVHcmFiYmVyU2lua0Fj
dGl2YXRlLCBIUkVTVUxULCBTVERBUElDQUxMVFlQRSwgKElNRk1lZGlhVHlwZSosIElNRlNhbXBs
ZUdyYWJiZXJTaW5rQ2FsbGJhY2sqLCBJTUZBY3RpdmF0ZSoqKSk7CiAKIFNPRlRfTElOS19MSUJS
QVJZKE1mcGxhdCk7CiBTT0ZUX0xJTktfT1BUSU9OQUwoTWZwbGF0LCBNRlN0YXJ0dXAsIEhSRVNV
TFQsIFNUREFQSUNBTExUWVBFLCAoVUxPTkcsIERXT1JEKSk7CiBTT0ZUX0xJTktfT1BUSU9OQUwo
TWZwbGF0LCBNRlNodXRkb3duLCBIUkVTVUxULCBTVERBUElDQUxMVFlQRSwgKCkpOworU09GVF9M
SU5LX09QVElPTkFMKE1mcGxhdCwgTUZDcmVhdGVNZW1vcnlCdWZmZXIsIEhSRVNVTFQsIFNUREFQ
SUNBTExUWVBFLCAoRFdPUkQsIElNRk1lZGlhQnVmZmVyKiopKTsKK1NPRlRfTElOS19PUFRJT05B
TChNZnBsYXQsIE1GQ3JlYXRlU2FtcGxlLCBIUkVTVUxULCBTVERBUElDQUxMVFlQRSwgKElNRlNh
bXBsZSoqKSk7CitTT0ZUX0xJTktfT1BUSU9OQUwoTWZwbGF0LCBNRkNyZWF0ZU1lZGlhVHlwZSwg
SFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUsIChJTUZNZWRpYVR5cGUqKikpOworU09GVF9MSU5LX09Q
VElPTkFMKE1mcGxhdCwgTUZGcmFtZVJhdGVUb0F2ZXJhZ2VUaW1lUGVyRnJhbWUsIEhSRVNVTFQs
IFNUREFQSUNBTExUWVBFLCAoVUlOVDMyLCBVSU5UMzIsIFVJTlQ2NCopKTsKKworU1REQVBJIE1G
Q3JlYXRlTWVkaWFUeXBlKF9PdXRwdHJfIElNRk1lZGlhVHlwZSoqICBwcE1GVHlwZSkKK3sKKyAg
ICByZXR1cm4gTUZDcmVhdGVNZWRpYVR5cGVQdHIoKShwcE1GVHlwZSk7Cit9CisKK1NPRlRfTElO
S19MSUJSQVJZKGV2cik7CitTT0ZUX0xJTktfT1BUSU9OQUwoZXZyLCBNRkNyZWF0ZVZpZGVvU2Ft
cGxlRnJvbVN1cmZhY2UsIEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoSVVua25vd24qLCBJTUZT
YW1wbGUqKikpOworCitTT0ZUX0xJTktfTElCUkFSWShEeHZhMik7CitTT0ZUX0xJTktfT1BUSU9O
QUwoRHh2YTIsIERYVkEyQ3JlYXRlRGlyZWN0M0REZXZpY2VNYW5hZ2VyOSwgSFJFU1VMVCwgU1RE
QVBJQ0FMTFRZUEUsIChVSU5UKiwgSURpcmVjdDNERGV2aWNlTWFuYWdlcjkqKikpOworCitTT0ZU
X0xJTktfTElCUkFSWShEM2Q5KTsKK1NPRlRfTElOS19PUFRJT05BTChEM2Q5LCBEaXJlY3QzRENy
ZWF0ZTlFeCwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUsIChVSU5ULCBJRGlyZWN0M0Q5RXgqKikp
OworCisvLyBNRlNhbXBsZVByZXNlbnRlcl9TYW1wbGVDb3VudGVyCisvLyBEYXRhIHR5cGU6IFVJ
TlQzMgorLy8KKy8vIFZlcnNpb24gbnVtYmVyIGZvciB0aGUgdmlkZW8gc2FtcGxlcy4gV2hlbiB0
aGUgcHJlc2VudGVyIGluY3JlbWVudHMgdGhlIHZlcnNpb24KKy8vIG51bWJlciwgYWxsIHNhbXBs
ZXMgd2l0aCB0aGUgcHJldmlvdXMgdmVyc2lvbiBudW1iZXIgYXJlIHN0YWxlIGFuZCBzaG91bGQg
YmUKKy8vIGRpc2NhcmRlZC4KK3N0YXRpYyBjb25zdCBHVUlEIE1GU2FtcGxlUHJlc2VudGVyU2Ft
cGxlQ291bnRlciA9Cit7IDB4YjBiYjgzY2MsIDB4ZjEwZiwgMHg0ZTJlLCB7IDB4YWEsIDB4MmIs
IDB4MjksIDB4ZWEsIDB4NWUsIDB4OTIsIDB4ZWYsIDB4ODUgfSB9OworCisvLyBNRlNhbXBsZVBy
ZXNlbnRlcl9TYW1wbGVTd2FwQ2hhaW4KKy8vIERhdGEgdHlwZTogSVVOS05PV04KKy8vIAorLy8g
UG9pbnRlciB0byBhIERpcmVjdDNEIHN3YXAgY2hhaW4uCitzdGF0aWMgY29uc3QgR1VJRCBNRlNh
bXBsZVByZXNlbnRlclNhbXBsZVN3YXBDaGFpbiA9Cit7IDB4YWQ4ODViZDEsIDB4N2RlZiwgMHg0
MTRhLCB7IDB4YjUsIDB4YjAsIDB4ZDMsIDB4ZDIsIDB4NjMsIDB4ZDYsIDB4ZTksIDB4NmQgfSB9
OworCisvLyBEZWZhdWx0IGZyYW1lIHJhdGUuCitzdGF0aWMgY29uc3QgTUZSYXRpbyBnRGVmYXVs
dEZyYW1lUmF0ZSA9IHsgMzAsIDEgfTsKKwordXNpbmcgbmFtZXNwYWNlIE1lZGlhRm91bmRhdGlv
blV0aWxzOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc3LDkgKzEyMywxMCBAQCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246On5NZWRpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVn
aXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICBpZiAoaXNBdmFpbGFibGUoKSkKKyAgICBpZiAoaXNB
dmFpbGFibGUoKSkgewogICAgICAgICByZWdpc3RyYXIoW10oTWVkaWFQbGF5ZXIqIHBsYXllcikg
eyByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b24+KHBsYXllcik7IH0sCiAgICAgICAgICAgICBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNU
eXBlLCAwLCAwLCAwLCAwKTsKKyAgICB9CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjppc0F2YWlsYWJsZSgpIApAQCAtMjUyLDcgKzI5OSw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjoKICAgICBpbnQgdyA9IG1fc2l6ZS53aWR0
aCgpICogZGV2aWNlU2NhbGVGYWN0b3I7CiAgICAgaW50IGggPSBtX3NpemUuaGVpZ2h0KCkgKiBk
ZXZpY2VTY2FsZUZhY3RvcjsKIAotICAgIGlmIChtX2h3bmRWaWRlbyAmJiAhbV9sYXN0UGFpbnRS
ZWN0LmlzRW1wdHkoKSkKKyAgICBpZiAobV9od25kVmlkZW8pCiAgICAgICAgIDo6TW92ZVdpbmRv
dyhtX2h3bmRWaWRlbywgeCwgeSwgdywgaCwgRkFMU0UpOwogCiAgICAgUkVDVCByYyA9IHsgMCwg
MCwgdywgaCB9OwpAQCAtMjYxLDE2ICszMDgsMTMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpCi0gICAgICAgIHx8ICFtX3Bs
YXllci0+dmlzaWJsZSgpKQorICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSB8fCAh
bV9wbGF5ZXItPnZpc2libGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9sYXN0UGFpbnRS
ZWN0ID0gcmVjdDsKIAotICAgIC8vIFdlIGN1cnJlbnRseSBsZXQgTWVkaWEgRm91bmRhdGlvbiBo
YW5kbGUgdGhlIGRyYXdpbmcsIGJ5IHByb3ZpZGluZyBhIGhhbmRsZSB0byB0aGUgd2luZG93IHRv
IGRyYXcgaW4uCi0gICAgLy8gV2Ugc2hvdWxkIGluc3RlYWQgcmVhZCBpbmRpdmlkdWFsIGZyYW1l
cyBmcm9tIHRoZSBzdHJlYW0sIGFuZCBwYWludCB0aGVtIGludG8gdGhlIGdyYXBoaWNzIGNvbnRl
eHQgaGVyZS4KLQotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKG1fcHJlc2VudGVyKQor
ICAgICAgICBtX3ByZXNlbnRlci0+cGFpbnRDdXJyZW50RnJhbWUoY29udGV4dCwgcmVjdCk7CiB9
CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVTZXNzaW9u
KCkKQEAgLTM4NCw2ICs0MjgsOSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6CiAKICAgICBjYXNlIE1FU2Vzc2lvbkNsb3NlZDoKICAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIE1FTWVkaWFTYW1wbGU6CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmICht
ZWRpYUV2ZW50VHlwZSAhPSBNRVNlc3Npb25DbG9zZWQpIHsKQEAgLTUxMCw3ICs1NTcsNyBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAgICAgICAgIHJldHVybjsK
ICAgICBoV25kUGFyZW50ID0gdmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQo
KTsKIAotICAgIG1faHduZFZpZGVvID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9BQ1RJVkFURSB8
IFdTX0VYX1RSQU5TUEFSRU5ULCByZWdpc3RlclZpZGVvV2luZG93Q2xhc3MoKSwgMCwgV1NfQ0hJ
TEQgfCBXU19WSVNJQkxFIHwgV1NfQ0xJUFNJQkxJTkdTIHwgV1NfQ0xJUENISUxEUkVOLAorICAg
IG1faHduZFZpZGVvID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9BQ1RJVkFURSB8IFdTX0VYX1RS
QU5TUEFSRU5ULCByZWdpc3RlclZpZGVvV2luZG93Q2xhc3MoKSwgMCwgV1NfQ0hJTEQgfCBXU19D
TElQU0lCTElOR1MgfCBXU19DTElQQ0hJTERSRU4sCiAgICAgICAgIDAsIDAsIDAsIDAsIGhXbmRQ
YXJlbnQsIDAsIDAsIDApOwogfQogCkBAIC01MjIsNiArNTY5LDE4IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjoKICAgICB9CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjppbnZhbGlkYXRlRnJhbWVWaWV3KCkKK3sKKyAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBudWxscHRyOworICAgIGlmICghbV9wbGF5ZXIgfHwgIW1fcGxheWVyLT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpIHx8ICFtX3BsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIo
KS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZpZXcgPSBtX3BsYXllci0+Y2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIGlmICghdmlldykK
KyAgICAgICAgcmV0dXJuOworCisgICAgdmlldy0+aW52YWxpZGF0ZSgpOworfQorCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6YWRkTGlzdGVuZXIoTWVkaWFQbGF5ZXJM
aXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleExpc3Rl
bmVycyk7CkBAIC01NzksNyArNjM4LDEyIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjoKICAgICAgICAgbV9oYXNBdWRpbyA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChN
Rk1lZGlhVHlwZV9WaWRlbyA9PSBndWlkTWFqb3JUeXBlKSB7CiAgICAgICAgIC8vIENyZWF0ZSB0
aGUgdmlkZW8gcmVuZGVyZXIuCi0gICAgICAgIGlmIChGQUlMRUQoTUZDcmVhdGVWaWRlb1JlbmRl
cmVyQWN0aXZhdGVQdHIoKShtX2h3bmRWaWRlbywgJnJlbmRlcmVyQWN0aXZhdGUpKSkKKyAgICAg
ICAgaWYgKEZBSUxFRChNRkNyZWF0ZVZpZGVvUmVuZGVyZXJBY3RpdmF0ZVB0cigpKG51bGxwdHIs
ICZyZW5kZXJlckFjdGl2YXRlKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgbV9wcmVzZW50ZXIgPSBuZXcgQ3VzdG9tVmlkZW9QcmVzZW50ZXIodGhpcyk7CisgICAgICAg
IG1fcHJlc2VudGVyLT5TZXRWaWRlb1dpbmRvdyhtX2h3bmRWaWRlbyk7CisgICAgICAgIGlmIChG
QUlMRUQocmVuZGVyZXJBY3RpdmF0ZS0+U2V0VW5rbm93bihNRl9BQ1RJVkFURV9DVVNUT01fVklE
RU9fUFJFU0VOVEVSX0FDVElWQVRFLCBzdGF0aWNfY2FzdDxJTUZBY3RpdmF0ZSo+KG1fcHJlc2Vu
dGVyLmdldCgpKSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtX2hhc1Zp
ZGVvID0gdHJ1ZTsKICAgICB9IGVsc2UKQEAgLTYzOCwxMyArNzAyLDExIEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjoKICAgICBpZiAoIU1GR2V0U2VydmljZVB0cigp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoRkFJTEVEKE1GR2V0U2VydmljZVB0cigpKG1f
bWVkaWFTZXNzaW9uLmdldCgpLCBNUl9WSURFT19SRU5ERVJfU0VSVklDRSwgSUlEX1BQVl9BUkdT
KCZtX3ZpZGVvRGlzcGxheSkpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fdmlk
ZW9EaXNwbGF5KTsKLQotICAgIFJFQ1QgcmMgPSB7IDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkgfTsKLSAgICBtX3ZpZGVvRGlzcGxheS0+U2V0VmlkZW9Qb3NpdGlvbihudWxs
cHRyLCAmcmMpOworICAgIGlmIChTVUNDRUVERUQoTUZHZXRTZXJ2aWNlUHRyKCkobV9tZWRpYVNl
c3Npb24uZ2V0KCksIE1SX1ZJREVPX1JFTkRFUl9TRVJWSUNFLCBJSURfUFBWX0FSR1MoJm1fdmlk
ZW9EaXNwbGF5KSkpKSB7CisgICAgICAgIEFTU0VSVChtX3ZpZGVvRGlzcGxheSk7CisgICAgICAg
IFJFQ1QgcmMgPSB7IDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkgfTsKKyAg
ICAgICAgbV92aWRlb0Rpc3BsYXktPlNldFZpZGVvUG9zaXRpb24obnVsbHB0ciwgJnJjKTsKKyAg
ICB9CiAKICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CiAK
QEAgLTcyNCw2ICs3ODYsMjk4NCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6CiAgICAgbV9tZWRpYVBsYXllciA9IG51bGxwdHI7CiB9CiAKK01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkN1c3RvbVZpZGVvUHJl
c2VudGVyKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbiogbWVkaWFQbGF5ZXIpCisg
ICAgOiBtX3JlZkNvdW50KDApCisgICAgLCBtX21lZGlhUGxheWVyKG1lZGlhUGxheWVyKQorICAg
ICwgbV9SZW5kZXJTdGF0ZShSRU5ERVJfU1RBVEVfU0hVVERPV04pCisgICAgLCBtX3BEM0RQcmVz
ZW50RW5naW5lKG51bGxwdHIpCisgICAgLCBtX2JTYW1wbGVOb3RpZnkoZmFsc2UpCisgICAgLCBt
X2JQcmVyb2xsZWQoZmFsc2UpCisgICAgLCBtX2JSZXBhaW50KGZhbHNlKQorICAgICwgbV9iRW5k
U3RyZWFtaW5nKGZhbHNlKQorICAgICwgbV9Ub2tlbkNvdW50ZXIoMCkKKyAgICAsIG1fZlJhdGUo
MS4wZikKKyAgICAsIG1fU2FtcGxlRnJlZUNCKHRoaXMsICZDdXN0b21WaWRlb1ByZXNlbnRlcjo6
T25TYW1wbGVGcmVlKQoreworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgaWYgKG1fbWVk
aWFQbGF5ZXIpCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPmFkZExpc3RlbmVyKHRoaXMpOworCisg
ICAgLy8gSW5pdGlhbCBzb3VyY2UgcmVjdGFuZ2xlID0gKDAsMCwxLDEpCisgICAgbV9ucmNTb3Vy
Y2UudG9wID0gMDsKKyAgICBtX25yY1NvdXJjZS5sZWZ0ID0gMDsKKyAgICBtX25yY1NvdXJjZS5i
b3R0b20gPSAxOworICAgIG1fbnJjU291cmNlLnJpZ2h0ID0gMTsKKworICAgIG1fcEQzRFByZXNl
bnRFbmdpbmUgPSBuZXcgRDNEUHJlc2VudEVuZ2luZShocik7CisgICAgaWYgKCFtX3BEM0RQcmVz
ZW50RW5naW5lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NjaGVkdWxlci5TZXRDYWxsYmFj
ayhtX3BEM0RQcmVzZW50RW5naW5lKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6fkN1c3RvbVZpZGVvUHJlc2VudGVyKCkKK3sK
KyAgICBpZiAobV9tZWRpYVBsYXllcikKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cmVtb3ZlTGlz
dGVuZXIodGhpcyk7CisgICAgZGVsZXRlIG1fcEQzRFByZXNlbnRFbmdpbmU7Cit9CisKK0hSRVNV
TFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRl
cjo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIF9fUlBDX19kZXJlZl9vdXQgdm9pZCBfX1JQ
Q19GQVIgKl9fUlBDX0ZBUiAqcHB2T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSBudWxscHRy
OworICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSU1GR2V0U2VydmljZSkpCisgICAgICAg
ICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJTUZHZXRTZXJ2aWNlKj4odGhpcyk7CisgICAgZWxz
ZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lNRkFjdGl2YXRlKSkKKyAgICAgICAgKnBwdk9i
amVjdCA9IHN0YXRpY19jYXN0PElNRkFjdGl2YXRlKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNF
cXVhbEdVSUQocmlpZCwgSUlEX0lNRlZpZGVvRGlzcGxheUNvbnRyb2wpKQorICAgICAgICAqcHB2
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SU1GVmlkZW9EaXNwbGF5Q29udHJvbCo+KHRoaXMpOworICAg
IGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JTUZWaWRlb1ByZXNlbnRlcikpCisgICAg
ICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJTUZWaWRlb1ByZXNlbnRlcio+KHRoaXMpOwor
ICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JTUZDbG9ja1N0YXRlU2luaykpCisg
ICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJTUZDbG9ja1N0YXRlU2luayo+KHRoaXMp
OworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JTUZWaWRlb0RldmljZUlEKSkK
KyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElNRlZpZGVvRGV2aWNlSUQqPih0aGlz
KTsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSU1GVG9wb2xvZ3lTZXJ2aWNl
TG9va3VwQ2xpZW50KSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElNRlRvcG9s
b2d5U2VydmljZUxvb2t1cENsaWVudCo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlE
KHJpaWQsIElJRF9JVW5rbm93bikpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJ
TUZWaWRlb1ByZXNlbnRlcio+KHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEVfTk9J
TlRFUkZBQ0U7CisKKyAgICBBZGRSZWYoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworVUxPTkcg
U1RETUVUSE9EQ0FMTFRZUEUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6QWRkUmVmKCkKK3sKKyAgICBtX3JlZkNvdW50Kys7CisgICAgcmV0
dXJuIG1fcmVmQ291bnQ7Cit9CisKK1VMT05HIFNURE1FVEhPRENBTExUWVBFIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlJlbGVhc2UoKQor
eworICAgIG1fcmVmQ291bnQtLTsKKyAgICBVTE9ORyByZWZDb3VudCA9IG1fcmVmQ291bnQ7Cisg
ICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNv
dW50OworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6Ok9uQ2xvY2tTdGFydChNRlRJTUUgaG5zU3lzdGVtVGltZSwgTE9O
R0xPTkcgbGxDbG9ja1N0YXJ0T2Zmc2V0KQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fb2Jq
ZWN0TG9jayk7CisKKyAgICAvLyBXZSBjYW5ub3Qgc3RhcnQgYWZ0ZXIgc2h1dGRvd24uCisgICAg
SFJFU1VMVCBociA9IENoZWNrU2h1dGRvd24oKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIGhyOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIGNsb2NrIGlzIGFscmVhZHkgYWN0
aXZlIChub3Qgc3RvcHBlZCkuIAorICAgIGlmIChJc0FjdGl2ZSgpKSB7CisgICAgICAgIG1fUmVu
ZGVyU3RhdGUgPSBSRU5ERVJfU1RBVEVfU1RBUlRFRDsKKworICAgICAgICAvLyBJZiB0aGUgY2xv
Y2sgcG9zaXRpb24gY2hhbmdlcyB3aGlsZSB0aGUgY2xvY2sgaXMgYWN0aXZlLCBpdCAKKyAgICAg
ICAgLy8gaXMgYSBzZWVrIHJlcXVlc3QuIFdlIG5lZWQgdG8gZmx1c2ggYWxsIHBlbmRpbmcgc2Ft
cGxlcy4KKyAgICAgICAgaWYgKGxsQ2xvY2tTdGFydE9mZnNldCAhPSBQUkVTRU5UQVRJT05fQ1VS
UkVOVF9QT1NJVElPTikKKyAgICAgICAgICAgIEZsdXNoKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV9SZW5kZXJTdGF0ZSA9IFJFTkRFUl9TVEFURV9TVEFSVEVEOworCisgICAgICAgIC8vIFRo
ZSBjbG9jayBoYXMgc3RhcnRlZCBmcm9tIHRoZSBzdG9wcGVkIHN0YXRlLiAKKworICAgICAgICAv
LyBQb3NzaWJseSB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBmcmFtZS1zdGVwcGluZyBPUiBoYXZl
IHNhbXBsZXMgd2FpdGluZyAKKyAgICAgICAgLy8gaW4gdGhlIGZyYW1lLXN0ZXAgcXVldWUuIERl
YWwgd2l0aCB0aGVzZSB0d28gY2FzZXMgZmlyc3Q6CisgICAgICAgIGhyID0gU3RhcnRGcmFtZVN0
ZXAoKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7Cisg
ICAgfQorCisgICAgLy8gTm93IHRyeSB0byBnZXQgbmV3IG91dHB1dCBzYW1wbGVzIGZyb20gdGhl
IG1peGVyLgorICAgIFByb2Nlc3NPdXRwdXRMb29wKCk7CisKKyAgICByZXR1cm4gU19PSzsKK30K
KworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpPbkNsb2NrU3RvcChNRlRJTUUgaG5zU3lzdGVtVGltZSkKK3sKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX29iamVjdExvY2spOworCisgICAgSFJFU1VMVCBociA9IENoZWNrU2h1
dGRvd24oKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAg
aWYgKG1fUmVuZGVyU3RhdGUgIT0gUkVOREVSX1NUQVRFX1NUT1BQRUQpIHsKKyAgICAgICAgbV9S
ZW5kZXJTdGF0ZSA9IFJFTkRFUl9TVEFURV9TVE9QUEVEOworICAgICAgICBGbHVzaCgpOworCisg
ICAgICAgIC8vIElmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGZyYW1lLXN0ZXBwaW5nLCBjYW5j
ZWwgaXQgbm93LgorICAgICAgICBpZiAobV9GcmFtZVN0ZXAuc3RhdGUgIT0gRlJBTUVTVEVQX05P
TkUpCisgICAgICAgICAgICBDYW5jZWxGcmFtZVN0ZXAoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
U19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1
c3RvbVZpZGVvUHJlc2VudGVyOjpPbkNsb2NrUGF1c2UoTUZUSU1FIGhuc1N5c3RlbVRpbWUpCit7
CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9vYmplY3RMb2NrKTsKKworICAgIC8vIFdlIGNhbm5v
dCBwYXVzZSB0aGUgY2xvY2sgYWZ0ZXIgc2h1dGRvd24uCisgICAgSFJFU1VMVCBociA9IENoZWNr
U2h1dGRvd24oKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisg
ICAgLy8gU2V0IHRoZSBzdGF0ZS4gKE5vIG90aGVyIGFjdGlvbnMgYXJlIG5lY2Vzc2FyeS4pCisg
ICAgbV9SZW5kZXJTdGF0ZSA9IFJFTkRFUl9TVEFURV9QQVVTRUQ7CisKKyAgICByZXR1cm4gU19P
SzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3Rv
bVZpZGVvUHJlc2VudGVyOjpPbkNsb2NrUmVzdGFydChNRlRJTUUgaG5zU3lzdGVtVGltZSkKK3sK
KyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX29iamVjdExvY2spOworCisgICAgSFJFU1VMVCBociA9
IENoZWNrU2h1dGRvd24oKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhy
OworCisgICAgLy8gVGhlIEVWUiBjYWxscyBPbkNsb2NrUmVzdGFydCBvbmx5IHdoaWxlIHBhdXNl
ZC4KKyAgICBBU1NFUlQobV9SZW5kZXJTdGF0ZSA9PSBSRU5ERVJfU1RBVEVfUEFVU0VEKTsKKwor
ICAgIG1fUmVuZGVyU3RhdGUgPSBSRU5ERVJfU1RBVEVfU1RBUlRFRDsKKworICAgIC8vIFBvc3Np
Ymx5IHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGZyYW1lLXN0ZXBwaW5nIE9SIHdlIGhhdmUgc2Ft
cGxlcyB3YWl0aW5nIAorICAgIC8vIGluIHRoZSBmcmFtZS1zdGVwIHF1ZXVlLiBEZWFsIHdpdGgg
dGhlc2UgdHdvIGNhc2VzIGZpcnN0OgorICAgIGhyID0gU3RhcnRGcmFtZVN0ZXAoKTsKKyAgICBp
ZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gTm93IHJlc3VtZSB0
aGUgcHJlc2VudGF0aW9uIGxvb3AuCisgICAgUHJvY2Vzc091dHB1dExvb3AoKTsKKworICAgIHJl
dHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9uQ2xvY2tTZXRSYXRlKE1GVElNRSBobnNTeXN0ZW1U
aW1lLCBmbG9hdCBmUmF0ZSkKK3sKKyAgICAvLyBOb3RlOiAKKyAgICAvLyBUaGUgcHJlc2VudGVy
IHJlcG9ydHMgaXRzIG1heGltdW0gcmF0ZSB0aHJvdWdoIHRoZSBJTUZSYXRlU3VwcG9ydCBpbnRl
cmZhY2UuCisgICAgLy8gSGVyZSwgd2UgYXNzdW1lIHRoYXQgdGhlIEVWUiBob25vcnMgdGhlIG1h
eGltdW0gcmF0ZS4KKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fb2JqZWN0TG9jayk7CisKKyAg
ICBIUkVTVUxUIGhyID0gQ2hlY2tTaHV0ZG93bigpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAg
ICAgICByZXR1cm4gaHI7CisKKyAgICAvLyBJZiB0aGUgcmF0ZSBpcyBjaGFuZ2luZyBmcm9tIHpl
cm8gKHNjcnViYmluZykgdG8gbm9uLXplcm8sIGNhbmNlbCB0aGUgCisgICAgLy8gZnJhbWUtc3Rl
cCBvcGVyYXRpb24uCisgICAgaWYgKChtX2ZSYXRlID09IDAuMGYpICYmIChmUmF0ZSAhPSAwLjBm
KSkgeworICAgICAgICBDYW5jZWxGcmFtZVN0ZXAoKTsKKyAgICAgICAgbV9GcmFtZVN0ZXAuc2Ft
cGxlcy5jbGVhcigpOworICAgIH0KKworICAgIG1fZlJhdGUgPSBmUmF0ZTsKKworICAgIC8vIFRl
bGwgdGhlIHNjaGVkdWxlciBhYm91dCB0aGUgbmV3IHJhdGUuCisgICAgbV9zY2hlZHVsZXIuU2V0
Q2xvY2tSYXRlKGZSYXRlKTsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlByb2Nl
c3NNZXNzYWdlKE1GVlBfTUVTU0FHRV9UWVBFIGVNZXNzYWdlLCBVTE9OR19QVFIgdWxQYXJhbSkK
K3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX29iamVjdExvY2spOworCisgICAgSFJFU1VMVCBo
ciA9IENoZWNrU2h1dGRvd24oKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJu
IGhyOworCisgICAgc3dpdGNoIChlTWVzc2FnZSkgeworICAgICAgICAvLyBGbHVzaCBhbGwgcGVu
ZGluZyBzYW1wbGVzLgorICAgIGNhc2UgTUZWUF9NRVNTQUdFX0ZMVVNIOgorICAgICAgICBociA9
IEZsdXNoKCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFJlbmVnb3RpYXRlIHRoZSBt
ZWRpYSB0eXBlIHdpdGggdGhlIG1peGVyLgorICAgIGNhc2UgTUZWUF9NRVNTQUdFX0lOVkFMSURB
VEVNRURJQVRZUEU6CisgICAgICAgIGhyID0gUmVuZWdvdGlhdGVNZWRpYVR5cGUoKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgLy8gVGhlIG1peGVyIHJlY2VpdmVkIGEgbmV3IGlucHV0IHNh
bXBsZS4gCisgICAgY2FzZSBNRlZQX01FU1NBR0VfUFJPQ0VTU0lOUFVUTk9USUZZOgorICAgICAg
ICBociA9IFByb2Nlc3NJbnB1dE5vdGlmeSgpOworICAgICAgICBicmVhazsKKworICAgICAgICAv
LyBTdHJlYW1pbmcgaXMgYWJvdXQgdG8gc3RhcnQuCisgICAgY2FzZSBNRlZQX01FU1NBR0VfQkVH
SU5TVFJFQU1JTkc6CisgICAgICAgIGhyID0gQmVnaW5TdHJlYW1pbmcoKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgLy8gU3RyZWFtaW5nIGhhcyBlbmRlZC4gKFRoZSBFVlIgaGFzIHN0b3Bw
ZWQuKQorICAgIGNhc2UgTUZWUF9NRVNTQUdFX0VORFNUUkVBTUlORzoKKyAgICAgICAgaHIgPSBF
bmRTdHJlYW1pbmcoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gQWxsIGlucHV0IHN0
cmVhbXMgaGF2ZSBlbmRlZC4KKyAgICBjYXNlIE1GVlBfTUVTU0FHRV9FTkRPRlNUUkVBTToKKyAg
ICAgICAgLy8gU2V0IHRoZSBFT1MgZmxhZy4gCisgICAgICAgIG1fYkVuZFN0cmVhbWluZyA9IFRS
VUU7CisgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgdGltZSB0byBzZW5kIHRoZSBFQ19DT01QTEVU
RSBldmVudCB0byB0aGUgRVZSLgorICAgICAgICBociA9IENoZWNrRW5kT2ZTdHJlYW0oKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gRnJhbWUtc3RlcHBpbmcgaXMgc3RhcnRpbmcuCisg
ICAgY2FzZSBNRlZQX01FU1NBR0VfU1RFUDoKKyAgICAgICAgaHIgPSBQcmVwYXJlRnJhbWVTdGVw
KHVsUGFyYW0pOworICAgICAgICBicmVhazsKKworICAgICAgICAvLyBDYW5jZWxzIGZyYW1lLXN0
ZXBwaW5nLgorICAgIGNhc2UgTUZWUF9NRVNTQUdFX0NBTkNFTFNURVA6CisgICAgICAgIGhyID0g
Q2FuY2VsRnJhbWVTdGVwKCk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgaHIgPSBFX0lOVkFMSURBUkc7IC8vIFVua25vd24gbWVzc2FnZS4gKFRoaXMgY2FzZSBzaG91
bGQgbmV2ZXIgb2NjdXIuKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gaHI7
Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21W
aWRlb1ByZXNlbnRlcjo6R2V0Q3VycmVudE1lZGlhVHlwZShfT3V0cHRyXyAgSU1GVmlkZW9NZWRp
YVR5cGUgKipwcE1lZGlhVHlwZSkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX29iamVjdExv
Y2spOworCisgICAgaWYgKCFwcE1lZGlhVHlwZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsK
KworICAgIEhSRVNVTFQgaHIgPSBDaGVja1NodXRkb3duKCk7CisgICAgaWYgKEZBSUxFRChocikp
CisgICAgICAgIHJldHVybiBocjsKKworICAgIGlmICghbV9wTWVkaWFUeXBlKQorICAgICAgICBy
ZXR1cm4gTUZfRV9OT1RfSU5JVElBTElaRUQ7CisKKyAgICAvLyBUaGUgZnVuY3Rpb24gcmV0dXJu
cyBhbiBJTUZWaWRlb01lZGlhVHlwZSBwb2ludGVyLCBhbmQgd2Ugc3RvcmUgb3VyIG1lZGlhCisg
ICAgLy8gdHlwZSBhcyBhbiBJTUZNZWRpYVR5cGUgcG9pbnRlciwgc28gd2UgbmVlZCB0byBRSS4K
KworICAgIHJldHVybiBtX3BNZWRpYVR5cGUtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElNRlZp
ZGVvTWVkaWFUeXBlKSwgKHZvaWQqKikmcHBNZWRpYVR5cGUpOworfQorCitIUkVTVUxUIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldERl
dmljZUlEKElJRCogcERldmljZUlEKQoreworICAgIGlmICghcERldmljZUlEKQorICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworCisgICAgKnBEZXZpY2VJRCA9IF9fdXVpZG9mKElEaXJlY3QzRERl
dmljZTkpOworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkluaXRTZXJ2aWNlUG9pbnRl
cnMoSU1GVG9wb2xvZ3lTZXJ2aWNlTG9va3VwICpwTG9va3VwKQoreworICAgIGlmICghcExvb2t1
cCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIEhSRVNVTFQgaHIgPSBTX09LOwor
CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9vYmplY3RMb2NrKTsKKworICAgIC8vIERvIG5vdCBh
bGxvdyBpbml0aWFsaXppbmcgd2hlbiBwbGF5aW5nIG9yIHBhdXNlZC4KKyAgICBpZiAoSXNBY3Rp
dmUoKSkKKyAgICAgICAgcmV0dXJuIE1GX0VfSU5WQUxJRFJFUVVFU1Q7CisKKyAgICBtX3BDbG9j
ayA9IG51bGxwdHI7CisgICAgbV9wTWl4ZXIgPSBudWxscHRyOworICAgIG1fcE1lZGlhRXZlbnRT
aW5rID0gbnVsbHB0cjsKKworICAgIC8vIEFzayBmb3IgdGhlIGNsb2NrLiBPcHRpb25hbCwgYmVj
YXVzZSB0aGUgRVZSIG1pZ2h0IG5vdCBoYXZlIGEgY2xvY2suCisgICAgRFdPUkQgZHdPYmplY3RD
b3VudCA9IDE7CisKKyAgICBwTG9va3VwLT5Mb29rdXBTZXJ2aWNlKAorICAgICAgICBNRl9TRVJW
SUNFX0xPT0tVUF9HTE9CQUwsIC8vIE5vdCB1c2VkLgorICAgICAgICAwLCAvLyBSZXNlcnZlZC4K
KyAgICAgICAgTVJfVklERU9fUkVOREVSX1NFUlZJQ0UsIC8vIFNlcnZpY2UgdG8gbG9vayB1cC4K
KyAgICAgICAgSUlEX1BQVl9BUkdTKCZtX3BDbG9jayksIC8vIEludGVyZmFjZSB0byByZXRyaWV2
ZS4KKyAgICAgICAgJmR3T2JqZWN0Q291bnQgLy8gTnVtYmVyIG9mIGVsZW1lbnRzIHJldHJpZXZl
ZC4KKyAgICAgICAgKTsKKworICAgIC8vIEFzayBmb3IgdGhlIG1peGVyLiAoUmVxdWlyZWQuKQor
ICAgIGR3T2JqZWN0Q291bnQgPSAxOworCisgICAgaHIgPSBwTG9va3VwLT5Mb29rdXBTZXJ2aWNl
KAorICAgICAgICBNRl9TRVJWSUNFX0xPT0tVUF9HTE9CQUwsIDAsCisgICAgICAgIE1SX1ZJREVP
X01JWEVSX1NFUlZJQ0UsIElJRF9QUFZfQVJHUygmbV9wTWl4ZXIpLCAmZHdPYmplY3RDb3VudAor
ICAgICAgICApOworCisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKwor
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGNhbiB3b3JrIHdpdGggdGhpcyBtaXhlci4KKyAgICBo
ciA9IENvbmZpZ3VyZU1peGVyKG1fcE1peGVyLmdldCgpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gQXNrIGZvciB0aGUgRVZSJ3MgZXZlbnQtc2lu
ayBpbnRlcmZhY2UuIChSZXF1aXJlZC4pCisgICAgZHdPYmplY3RDb3VudCA9IDE7CisKKyAgICBo
ciA9IHBMb29rdXAtPkxvb2t1cFNlcnZpY2UoCisgICAgICAgIE1GX1NFUlZJQ0VfTE9PS1VQX0dM
T0JBTCwgMCwKKyAgICAgICAgTVJfVklERU9fUkVOREVSX1NFUlZJQ0UsIElJRF9QUFZfQVJHUygm
bV9wTWVkaWFFdmVudFNpbmspLAorICAgICAgICAmZHdPYmplY3RDb3VudAorICAgICAgICApOwor
CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIC8vIFN1Y2Nl
c3NmdWxseSBpbml0aWFsaXplZC4gU2V0IHRoZSBzdGF0ZSB0byAic3RvcHBlZC4iCisgICAgbV9S
ZW5kZXJTdGF0ZSA9IFJFTkRFUl9TVEFURV9TVE9QUEVEOworCisgICAgcmV0dXJuIFNfT0s7Cit9
CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6UmVsZWFzZVNlcnZpY2VQb2ludGVycygpCit7CisgICAgLy8gRW50ZXIgdGhl
IHNodXQtZG93biBzdGF0ZS4KKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fb2Jq
ZWN0TG9jayk7CisgICAgICAgIG1fUmVuZGVyU3RhdGUgPSBSRU5ERVJfU1RBVEVfU0hVVERPV047
CisgICAgfQorCisgICAgLy8gRmx1c2ggYW55IHNhbXBsZXMgdGhhdCB3ZXJlIHNjaGVkdWxlZC4K
KyAgICBGbHVzaCgpOworCisgICAgLy8gQ2xlYXIgdGhlIG1lZGlhIHR5cGUgYW5kIHJlbGVhc2Ug
cmVsYXRlZCByZXNvdXJjZXMuCisgICAgU2V0TWVkaWFUeXBlKG51bGxwdHIpOworCisgICAgLy8g
UmVsZWFzZSBhbGwgc2VydmljZXMgdGhhdCB3ZXJlIGFjcXVpcmVkIGZyb20gSW5pdFNlcnZpY2VQ
b2ludGVycy4KKyAgICBtX3BDbG9jayA9IG51bGxwdHI7CisgICAgbV9wTWl4ZXIgPSBudWxscHRy
OworICAgIG1fcE1lZGlhRXZlbnRTaW5rID0gbnVsbHB0cjsKKworICAgIHJldHVybiBTX09LOwor
fQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gSU1GR2V0U2VydmljZSBtZXRob2Rz
CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFNlcnZpY2UoUkVGR1VJ
RCBndWlkU2VydmljZSwgUkVGSUlEIHJpaWQsIExQVk9JRCAqcHB2T2JqZWN0KQoreworICAgIENo
ZWNrUG9pbnRlcihwcHZPYmplY3QsIEVfUE9JTlRFUik7CisKKyAgICAvLyBUaGUgb25seSBzZXJ2
aWNlIEdVSUQgdGhhdCB3ZSBzdXBwb3J0IGlzIE1SX1ZJREVPX1JFTkRFUl9TRVJWSUNFLgorICAg
IGlmIChndWlkU2VydmljZSAhPSBNUl9WSURFT19SRU5ERVJfU0VSVklDRSkKKyAgICAgICAgcmV0
dXJuIE1GX0VfVU5TVVBQT1JURURfU0VSVklDRTsKKworICAgIC8vIEZpcnN0IHRyeSB0byBnZXQg
dGhlIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gdGhlIEQzRFByZXNlbnRFbmdpbmUgb2JqZWN0Lgor
ICAgIEhSRVNVTFQgaHIgPSBtX3BEM0RQcmVzZW50RW5naW5lLT5HZXRTZXJ2aWNlKGd1aWRTZXJ2
aWNlLCByaWlkLCBwcHZPYmplY3QpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIC8v
IE5leHQsIFFJIHRvIGNoZWNrIGlmIHRoaXMgb2JqZWN0IHN1cHBvcnRzIHRoZSBpbnRlcmZhY2Uu
CisgICAgICAgIGhyID0gUXVlcnlJbnRlcmZhY2UocmlpZCwgcHB2T2JqZWN0KTsKKyAgICB9CisK
KyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6QWN0aXZhdGVPYmplY3QoUkVGSUlEIHJpaWQs
IHZvaWQgKipwcHYpCit7CisgICAgaWYgKHJpaWQgPT0gSUlEX0lNRlZpZGVvUHJlc2VudGVyKSB7
CisgICAgICAgICpwcHYgPSBzdGF0aWNfY2FzdDxJTUZWaWRlb1ByZXNlbnRlcio+KHRoaXMpOwor
ICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisgICAgcmV0dXJuIEVfRkFJTDsKK30KKworSFJF
U1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjpEZXRhY2hPYmplY3QoKQoreworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNo
dXRkb3duT2JqZWN0KCkKK3sKKyAgICByZXR1cm4gU19PSzsKK30KKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gU2V0VmlkZW9XaW5kb3cKKy8vCisvLyBTZXRzIHRoZSB3aW5kb3cgd2hlcmUg
dGhlIHByZXNlbnRlciB3aWxsIGRyYXcgdmlkZW8gZnJhbWVzLgorLy8gTm90ZTogRG9lcyBub3Qg
ZmFpbCBhZnRlciBzaHV0ZG93bi4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpT
ZXRWaWRlb1dpbmRvdyhIV05EIGh3bmRWaWRlbykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlciht
X29iamVjdExvY2spOworCisgICAgaWYgKCFJc1dpbmRvdyhod25kVmlkZW8pKQorICAgICAgICBy
ZXR1cm4gRV9JTlZBTElEQVJHOworCisgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgSFdORCBv
bGRId25kID0gbV9wRDNEUHJlc2VudEVuZ2luZS0+R2V0VmlkZW9XaW5kb3coKTsKKworICAgIC8v
IElmIHRoZSB3aW5kb3cgaGFzIGNoYW5nZWQsIG5vdGlmeSB0aGUgRDNEUHJlc2VudEVuZ2luZSBv
YmplY3QuCisgICAgLy8gVGhpcyB3aWxsIGNhdXNlIGEgbmV3IERpcmVjdDNEIGRldmljZSB0byBi
ZSBjcmVhdGVkLgorICAgIGlmIChvbGRId25kICE9IGh3bmRWaWRlbykgeworICAgICAgICBociA9
IG1fcEQzRFByZXNlbnRFbmdpbmUtPlNldFZpZGVvV2luZG93KGh3bmRWaWRlbyk7CisKKyAgICAg
ICAgLy8gVGVsbCB0aGUgRVZSIHRoYXQgdGhlIGRldmljZSBoYXMgY2hhbmdlZC4KKyAgICAgICAg
Tm90aWZ5RXZlbnQoRUNfRElTUExBWV9DSEFOR0VELCAwLCAwKTsKKyAgICB9CisKKyAgICByZXR1
cm4gaHI7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdldFZpZGVvV2luZG93Cisv
LworLy8gUmV0dXJucyBhIGhhbmRsZSB0byB0aGUgdmlkZW8gd2luZG93LiAKKy8vIE5vdGU6IERv
ZXMgbm90IGZhaWwgYWZ0ZXIgc2h1dGRvd24uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hS
RVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNl
bnRlcjo6R2V0VmlkZW9XaW5kb3coSFdORCogcGh3bmRWaWRlbykKK3sKKyAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX29iamVjdExvY2spOworCisgICAgaWYgKCFwaHduZFZpZGVvKQorICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworCisgICAgLy8gVGhlIEQzRFByZXNlbnRFbmdpbmUgb2JqZWN0IHN0
b3JlcyB0aGUgaGFuZGxlLgorICAgICpwaHduZFZpZGVvID0gbV9wRDNEUHJlc2VudEVuZ2luZS0+
R2V0VmlkZW9XaW5kb3coKTsKKworICAgIHJldHVybiBTX09LOworfQorCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBTZXRNaXhlclNvdXJjZVJlY3QKKy8vCisvLyBTZXRzIHRoZSBaT09NIHJl
Y3RhbmdsZSBvbiB0aGUgbWl4ZXIuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQg
U2V0TWl4ZXJTb3VyY2VSZWN0KElNRlRyYW5zZm9ybSAqcE1peGVyLCBjb25zdCBNRlZpZGVvTm9y
bWFsaXplZFJlY3QmIG5yY1NvdXJjZSkKK3sKKyAgICBpZiAoIXBNaXhlcikKKyAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKKworICAgIENPTVB0cjxJTUZBdHRyaWJ1dGVzPiBwQXR0cmlidXRlczsK
KworICAgIEhSRVNVTFQgaHIgPSBwTWl4ZXItPkdldEF0dHJpYnV0ZXMoJnBBdHRyaWJ1dGVzKTsK
KyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgcmV0dXJuIHBB
dHRyaWJ1dGVzLT5TZXRCbG9iKFZJREVPX1pPT01fUkVDVCwgKGNvbnN0IFVJTlQ4KikmbnJjU291
cmNlLCBzaXplb2YobnJjU291cmNlKSk7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFNldFZpZGVvUG9zaXRpb24KKy8vCisvLyBTZXRzIHRoZSBzb3VyY2UgYW5kIHRhcmdldCByZWN0
YW5nbGVzIGZvciB0aGUgdmlkZW8gd2luZG93LgorLy8gTm90ZTogRG9lcyBub3QgZmFpbCBhZnRl
ciBzaHV0ZG93bi4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTZXRWaWRlb1Bv
c2l0aW9uKGNvbnN0IE1GVmlkZW9Ob3JtYWxpemVkUmVjdCogcG5yY1NvdXJjZSwgY29uc3QgTFBS
RUNUIHByY0Rlc3QpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9vYmplY3RMb2NrKTsKKwor
ICAgIC8vIFZhbGlkYXRlIHBhcmFtZXRlcnMuCisKKyAgICAvLyBPbmUgcGFyYW1ldGVyIGNhbiBi
ZSBudWxscHRyLCBidXQgbm90IGJvdGguCisgICAgaWYgKCFwbnJjU291cmNlICYmICFwcmNEZXN0
KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgLy8gVmFsaWRhdGUgdGhlIHJlY3Rh
bmdsZXMuCisgICAgaWYgKHBucmNTb3VyY2UpIHsKKyAgICAgICAgLy8gVGhlIHNvdXJjZSByZWN0
YW5nbGUgY2Fubm90IGJlIGZsaXBwZWQuCisgICAgICAgIGlmICgocG5yY1NvdXJjZS0+bGVmdCA+
IHBucmNTb3VyY2UtPnJpZ2h0KSB8fCAocG5yY1NvdXJjZS0+dG9wID4gcG5yY1NvdXJjZS0+Ym90
dG9tKSkKKyAgICAgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisKKyAgICAgICAgLy8gVGhl
IHNvdXJjZSByZWN0YW5nbGUgaGFzIHJhbmdlICgwLi4xKQorICAgICAgICBpZiAoKHBucmNTb3Vy
Y2UtPmxlZnQgPCAwKSB8fCAocG5yY1NvdXJjZS0+cmlnaHQgPiAxKSB8fCAocG5yY1NvdXJjZS0+
dG9wIDwgMCkgfHwgKHBucmNTb3VyY2UtPmJvdHRvbSA+IDEpKQorICAgICAgICAgICAgcmV0dXJu
IEVfSU5WQUxJREFSRzsKKyAgICB9CisKKyAgICBpZiAocHJjRGVzdCkgeworICAgICAgICAvLyBU
aGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIGNhbm5vdCBiZSBmbGlwcGVkLgorICAgICAgICBpZiAo
KHByY0Rlc3QtPmxlZnQgPiBwcmNEZXN0LT5yaWdodCkgfHwgKHByY0Rlc3QtPnRvcCA+IHByY0Rl
c3QtPmJvdHRvbSkpCisgICAgICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworICAgIH0KKwor
ICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgLy8gVXBkYXRlIHRoZSBzb3VyY2UgcmVjdGFu
Z2xlLiBTb3VyY2UgY2xpcHBpbmcgaXMgcGVyZm9ybWVkIGJ5IHRoZSBtaXhlci4KKyAgICBpZiAo
cG5yY1NvdXJjZSkgeworICAgICAgICBtX25yY1NvdXJjZSA9ICpwbnJjU291cmNlOworCisgICAg
ICAgIGlmIChtX3BNaXhlcikgeworICAgICAgICAgICAgaHIgPSBTZXRNaXhlclNvdXJjZVJlY3Qo
bV9wTWl4ZXIuZ2V0KCksIG1fbnJjU291cmNlKTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQoaHIp
KQorICAgICAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IFVwZGF0ZSB0aGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlLgorICAgIGlmIChwcmNEZXN0KSB7Cisg
ICAgICAgIFJFQ1QgcmNPbGREZXN0ID0gbV9wRDNEUHJlc2VudEVuZ2luZS0+R2V0RGVzdGluYXRp
b25SZWN0KCk7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRlc3RpbmF0aW9uIHJlY3Rhbmds
ZSBjaGFuZ2VkLgorICAgICAgICBpZiAoIUVxdWFsUmVjdCgmcmNPbGREZXN0LCBwcmNEZXN0KSkg
eworICAgICAgICAgICAgaHIgPSBtX3BEM0RQcmVzZW50RW5naW5lLT5TZXREZXN0aW5hdGlvblJl
Y3QoKnByY0Rlc3QpOworICAgICAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGhyOworICAgICAgICAgICAgLy8gU2V0IGEgbmV3IG1lZGlhIHR5cGUgb24gdGhl
IG1peGVyLgorICAgICAgICAgICAgaWYgKG1fcE1peGVyKSB7CisgICAgICAgICAgICAgICAgaHIg
PSBSZW5lZ290aWF0ZU1lZGlhVHlwZSgpOworICAgICAgICAgICAgICAgIGlmIChociA9PSBNRl9F
X1RSQU5TRk9STV9UWVBFX05PVF9TRVQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBl
cnJvciBtZWFucyB0aGF0IHRoZSBtaXhlciBpcyBub3QgcmVhZHkgZm9yIHRoZSBtZWRpYSB0eXBl
LgorICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYSBmYWlsdXJlIGNhc2UgLS0gdGhlIEVWUiB3
aWxsIG5vdGlmeSB1cyB3aGVuIHdlIG5lZWQgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSB0eXBlIG9uIHRoZSBtaXhlci4KKyAgICAgICAgICAgICAgICAgICAgaHIgPSBTX09LOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChGQUlMRUQo
aHIpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhyOworCisgICAgICAgICAgICAg
ICAgICAgIC8vIFRoZSBtZWRpYSB0eXBlIGNoYW5nZWQuIFJlcXVlc3QgYSByZXBhaW50IG9mIHRo
ZSBjdXJyZW50IGZyYW1lLgorICAgICAgICAgICAgICAgICAgICBtX2JSZXBhaW50ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc091dHB1dCgpOyAvLyBJZ25vcmUgZXJyb3JzLCB0
aGUgbWl4ZXIgbWlnaHQgbm90IGhhdmUgYSB2aWRlbyBmcmFtZS4KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30K
KworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHZXRWaWRlb1Bvc2l0aW9uCisvLworLy8g
R2V0cyB0aGUgY3VycmVudCBzb3VyY2UgYW5kIHRhcmdldCByZWN0YW5nbGVzLgorLy8gTm90ZTog
RG9lcyBub3QgZmFpbCBhZnRlciBzaHV0ZG93bi4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
SFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpHZXRWaWRlb1Bvc2l0aW9uKE1GVmlkZW9Ob3JtYWxpemVkUmVjdCogcG5yY1NvdXJj
ZSwgTFBSRUNUIHByY0Rlc3QpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9vYmplY3RMb2Nr
KTsKKworICAgIGlmICghcG5yY1NvdXJjZSB8fCAhcHJjRGVzdCkKKyAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKKworICAgICpwbnJjU291cmNlID0gbV9ucmNTb3VyY2U7CisgICAgKnByY0Rlc3Qg
PSBtX3BEM0RQcmVzZW50RW5naW5lLT5HZXREZXN0aW5hdGlvblJlY3QoKTsKKworICAgIHJldHVy
biBTX09LOwogfQogCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlcGFpbnRWaWRlbwor
Ly8gUmVwYWludHMgdGhlIG1vc3QgcmVjZW50IHZpZGVvIGZyYW1lLgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OlJlcGFpbnRWaWRlbygpCit7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9vYmplY3RMb2NrKTsKKworICAgIEhSRVNVTFQgaHIgPSBDaGVja1NodXRkb3duKCk7Cisg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIC8vIElnbm9yZSB0
aGUgcmVxdWVzdCBpZiB3ZSBoYXZlIG5vdCBwcmVzZW50ZWQgYW55IHNhbXBsZXMgeWV0LgorICAg
IGlmIChtX2JQcmVyb2xsZWQpIHsKKyAgICAgICAgbV9iUmVwYWludCA9IHRydWU7CisgICAgICAg
IFByb2Nlc3NPdXRwdXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpw
YWludEN1cnJlbnRGcmFtZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgcikKK3sKKyAgICBpZiAobV9wRDNEUHJlc2VudEVuZ2luZSkKKyAgICAgICAgbV9wRDNEUHJl
c2VudEVuZ2luZS0+UGFpbnRDdXJyZW50RnJhbWUoY29udGV4dCwgcik7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6b25N
ZWRpYVBsYXllckRlbGV0ZWQoKQoreworICAgIG1fbWVkaWFQbGF5ZXIgPSBudWxscHRyOworfQor
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OklzQWN0aXZlKCkKK3sKKyAgICByZXR1cm4gKChtX1JlbmRlclN0YXRlID09IFJFTkRF
Ul9TVEFURV9TVEFSVEVEKSB8fCAobV9SZW5kZXJTdGF0ZSA9PSBSRU5ERVJfU1RBVEVfUEFVU0VE
KSk7Cit9CisKKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1
c3RvbVZpZGVvUHJlc2VudGVyOjpDb25maWd1cmVNaXhlcihJTUZUcmFuc2Zvcm0gKnBNaXhlcikK
K3sKKyAgICBJSUQgZGV2aWNlSUQgPSBHVUlEX05VTEw7CisKKyAgICBDT01QdHI8SU1GVmlkZW9E
ZXZpY2VJRD4gcERldmljZUlEOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIG1peGVyIGhh
cyB0aGUgc2FtZSBkZXZpY2UgSUQgYXMgb3Vyc2VsdmVzLgorICAgIEhSRVNVTFQgaHIgPSBwTWl4
ZXItPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElNRlZpZGVvRGV2aWNlSUQpLCAodm9pZCoqKSZw
RGV2aWNlSUQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAg
ICBociA9IHBEZXZpY2VJRC0+R2V0RGV2aWNlSUQoJmRldmljZUlEKTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaWYgKCFJc0VxdWFsR1VJRChkZXZpY2VJ
RCwgX191dWlkb2YoSURpcmVjdDNERGV2aWNlOSkpKQorICAgICAgICByZXR1cm4gTUZfRV9JTlZB
TElEUkVRVUVTVDsKKworICAgIC8vIFNldCB0aGUgem9vbSByZWN0YW5nbGUgKGllLCB0aGUgc291
cmNlIGNsaXBwaW5nIHJlY3RhbmdsZSkuCisgICAgU2V0TWl4ZXJTb3VyY2VSZWN0KHBNaXhlciwg
bV9ucmNTb3VyY2UpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Rmx1c2goKQor
eworICAgIG1fYlByZXJvbGxlZCA9IGZhbHNlOworCisgICAgLy8gVGhlIHNjaGVkdWxlciBtaWdo
dCBoYXZlIHNhbXBsZXMgdGhhdCBhcmUgd2FpdGluZyBmb3IKKyAgICAvLyB0aGVpciBwcmVzZW50
YXRpb24gdGltZS4gVGVsbCB0aGUgc2NoZWR1bGVyIHRvIGZsdXNoLgorCisgICAgLy8gVGhpcyBj
YWxsIGJsb2NrcyB1bnRpbCB0aGUgc2NoZWR1bGVyIHRocmVhZHMgZGlzY2FyZHMgYWxsIHNjaGVk
dWxlZCBzYW1wbGVzLgorICAgIG1fc2NoZWR1bGVyLkZsdXNoKCk7CisKKyAgICAvLyBGbHVzaCB0
aGUgZnJhbWUtc3RlcCBxdWV1ZS4KKyAgICBtX0ZyYW1lU3RlcC5zYW1wbGVzLmNsZWFyKCk7CisK
KyAgICBpZiAobV9SZW5kZXJTdGF0ZSA9PSBSRU5ERVJfU1RBVEVfU1RPUFBFRCkgeworICAgICAg
ICAvLyBSZXBhaW50IHdpdGggYmxhY2suCisgICAgICAgIG1fcEQzRFByZXNlbnRFbmdpbmUtPlBy
ZXNlbnRTYW1wbGUobnVsbHB0ciwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFyZU1lZGlhVHlwZXNFcXVhbAorLy8KKy8vIFRl
c3RzIHdoZXRoZXIgdHdvIElNRk1lZGlhVHlwZSdzIGFyZSBlcXVhbC4gRWl0aGVyIHBvaW50ZXIg
Y2FuIGJlIG51bGxwdHIuCisvLyAoSWYgYm90aCBwb2ludGVycyBhcmUgbnVsbHB0ciwgcmV0dXJu
cyBUUlVFKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitib29sIEFyZU1lZGlhVHlwZXNFcXVh
bChJTUZNZWRpYVR5cGUgKnBUeXBlMSwgSU1GTWVkaWFUeXBlICpwVHlwZTIpCit7CisgICAgaWYg
KCFwVHlwZTEgJiYgIXBUeXBlMikKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIEJvdGggYXJlIG51
bGxwdHIuCisgICAgaWYgKCFwVHlwZTEgfHwgIXBUeXBlMikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBPbmUgaXMgbnVsbHB0ci4KKworICAgIERXT1JEIGR3RmxhZ3MgPSAwOworICAgIHJldHVy
biBTX09LID09IHBUeXBlMS0+SXNFcXVhbChwVHlwZTIsICZkd0ZsYWdzKTsKK30KKworCitIUkVT
VUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50
ZXI6OlNldE1lZGlhVHlwZShJTUZNZWRpYVR5cGUqIHBNZWRpYVR5cGUpCit7CisgICAgLy8gTm90
ZTogcE1lZGlhVHlwZSBjYW4gYmUgbnVsbHB0ciAodG8gY2xlYXIgdGhlIHR5cGUpCisKKyAgICAv
LyBDbGVhcmluZyB0aGUgbWVkaWEgdHlwZSBpcyBhbGxvd2VkIGluIGFueSBzdGF0ZSAoaW5jbHVk
aW5nIHNodXRkb3duKS4KKyAgICBpZiAoIXBNZWRpYVR5cGUpIHsKKyAgICAgICAgbV9wTWVkaWFU
eXBlID0gbnVsbHB0cjsKKyAgICAgICAgUmVsZWFzZVJlc291cmNlcygpOworICAgICAgICByZXR1
cm4gU19PSzsKKyAgICB9CisKKyAgICBNRlJhdGlvIGZwcyA9IHsgMCwgMCB9OworICAgIFZpZGVv
U2FtcGxlTGlzdCBzYW1wbGVRdWV1ZTsKKworICAgIC8vIENhbm5vdCBzZXQgdGhlIG1lZGlhIHR5
cGUgYWZ0ZXIgc2h1dGRvd24uCisgICAgSFJFU1VMVCBociA9IENoZWNrU2h1dGRvd24oKTsKKyAg
ICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBSZWxlYXNlUmVzb3VyY2VzKCk7CisgICAgICAg
IHJldHVybiBocjsKKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiB0aGUgbmV3IHR5cGUgaXMgYWN0
dWFsbHkgZGlmZmVyZW50LgorICAgIC8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gc2FmZWx5IGhhbmRs
ZXMgbnVsbHB0ciBpbnB1dCBwYXJhbWV0ZXJzLgorICAgIGlmIChBcmVNZWRpYVR5cGVzRXF1YWwo
bV9wTWVkaWFUeXBlLmdldCgpLCBwTWVkaWFUeXBlKSkKKyAgICAgICAgcmV0dXJuIFNfT0s7IC8v
IE5vdGhpbmcgbW9yZSB0byBkby4KKworICAgIC8vIFdlJ3JlIHJlYWxseSBjaGFuZ2luZyB0aGUg
dHlwZS4gRmlyc3QgZ2V0IHJpZCBvZiB0aGUgb2xkIHR5cGUuCisgICAgbV9wTWVkaWFUeXBlID0g
bnVsbHB0cjsKKyAgICBSZWxlYXNlUmVzb3VyY2VzKCk7CisKKyAgICAvLyBJbml0aWFsaXplIHRo
ZSBwcmVzZW50ZXIgZW5naW5lIHdpdGggdGhlIG5ldyBtZWRpYSB0eXBlLgorICAgIC8vIFRoZSBw
cmVzZW50ZXIgZW5naW5lIGFsbG9jYXRlcyB0aGUgc2FtcGxlcy4gCisKKyAgICBociA9IG1fcEQz
RFByZXNlbnRFbmdpbmUtPkNyZWF0ZVZpZGVvU2FtcGxlcyhwTWVkaWFUeXBlLCBzYW1wbGVRdWV1
ZSk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgUmVsZWFzZVJlc291cmNlcygpOwor
ICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgLy8gTWFyayBlYWNoIHNhbXBsZSB3aXRo
IG91ciB0b2tlbiBjb3VudGVyLiBJZiB0aGlzIGJhdGNoIG9mIHNhbXBsZXMgYmVjb21lcworICAg
IC8vIGludmFsaWQsIHdlIGluY3JlbWVudCB0aGUgY291bnRlciwgc28gdGhhdCB3ZSBrbm93IHRo
ZXkgc2hvdWxkIGJlIGRpc2NhcmRlZC4gCisgICAgZm9yIChhdXRvIHNhbXBsZSA6IHNhbXBsZVF1
ZXVlKSB7CisgICAgICAgIGhyID0gc2FtcGxlLT5TZXRVSU5UMzIoTUZTYW1wbGVQcmVzZW50ZXJT
YW1wbGVDb3VudGVyLCBtX1Rva2VuQ291bnRlcik7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7
CisgICAgICAgICAgICBSZWxlYXNlUmVzb3VyY2VzKCk7CisgICAgICAgICAgICByZXR1cm4gaHI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBZGQgdGhlIHNhbXBsZXMgdG8gdGhlIHNhbXBs
ZSBwb29sLgorICAgIGhyID0gbV9TYW1wbGVQb29sLmluaXRpYWxpemUoc2FtcGxlUXVldWUpOwor
ICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIFJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAg
ICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIC8vIFNldCB0aGUgZnJhbWUgcmF0ZSBvbiB0aGUg
c2NoZWR1bGVyLiAKKyAgICBpZiAoU1VDQ0VFREVEKEdldEZyYW1lUmF0ZShwTWVkaWFUeXBlLCAm
ZnBzKSkgJiYgZnBzLk51bWVyYXRvciAmJiBmcHMuRGVub21pbmF0b3IpCisgICAgICAgIG1fc2No
ZWR1bGVyLlNldEZyYW1lUmF0ZShmcHMpOworICAgIGVsc2UgeworICAgICAgICAvLyBOT1RFOiBU
aGUgbWl4ZXIncyBwcm9wb3NlZCB0eXBlIG1pZ2h0IG5vdCBoYXZlIGEgZnJhbWUgcmF0ZSwgaW4g
d2hpY2ggY2FzZSAKKyAgICAgICAgLy8gd2UnbGwgdXNlIGFuIGFyYml0YXJ5IGRlZmF1bHQuIChB
bHRob3VnaCBpdCdzIHVubGlrZWx5IHRoZSB2aWRlbyBzb3VyY2UKKyAgICAgICAgLy8gZG9lcyBu
b3QgaGF2ZSBhIGZyYW1lIHJhdGUuKQorICAgICAgICBtX3NjaGVkdWxlci5TZXRGcmFtZVJhdGUo
Z0RlZmF1bHRGcmFtZVJhdGUpOworICAgIH0KKworICAgIC8vIFN0b3JlIHRoZSBtZWRpYSB0eXBl
LgorICAgIEFTU0VSVChwTWVkaWFUeXBlKTsKKyAgICBtX3BNZWRpYVR5cGUgPSBwTWVkaWFUeXBl
OworICAgIG1fcE1lZGlhVHlwZS0+QWRkUmVmKCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKwor
SFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpDaGVja1NodXRkb3duKCkgY29uc3QKK3sKKyAgICBpZiAobV9SZW5kZXJTdGF0ZSA9
PSBSRU5ERVJfU1RBVEVfU0hVVERPV04pCisgICAgICAgIHJldHVybiBNRl9FX1NIVVRET1dOOwor
ICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlJlbmVnb3RpYXRlTWVkaWFUeXBlKCkKK3sK
KyAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICBib29sIGJGb3VuZE1lZGlhVHlwZSA9IGZhbHNl
OworCisgICAgQ09NUHRyPElNRk1lZGlhVHlwZT4gcE1peGVyVHlwZTsKKyAgICBDT01QdHI8SU1G
TWVkaWFUeXBlPiBwT3B0aW1hbFR5cGU7CisgICAgQ09NUHRyPElNRlZpZGVvTWVkaWFUeXBlPiBw
VmlkZW9UeXBlOworCisgICAgaWYgKCFtX3BNaXhlcikKKyAgICAgICAgcmV0dXJuIE1GX0VfSU5W
QUxJRFJFUVVFU1Q7CisKKyAgICAvLyBMb29wIHRocm91Z2ggYWxsIG9mIHRoZSBtaXhlcidzIHBy
b3Bvc2VkIG91dHB1dCB0eXBlcy4KKyAgICBEV09SRCBpVHlwZUluZGV4ID0gMDsKKyAgICB3aGls
ZSAoIWJGb3VuZE1lZGlhVHlwZSAmJiAoaHIgIT0gTUZfRV9OT19NT1JFX1RZUEVTKSkgeworICAg
ICAgICBwTWl4ZXJUeXBlID0gbnVsbHB0cjsKKyAgICAgICAgcE9wdGltYWxUeXBlID0gbnVsbHB0
cjsKKworICAgICAgICAvLyBTdGVwIDEuIEdldCB0aGUgbmV4dCBtZWRpYSB0eXBlIHN1cHBvcnRl
ZCBieSBtaXhlci4KKyAgICAgICAgaHIgPSBtX3BNaXhlci0+R2V0T3V0cHV0QXZhaWxhYmxlVHlw
ZSgwLCBpVHlwZUluZGV4KyssICZwTWl4ZXJUeXBlKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikp
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBGcm9tIG5vdyBvbiwgaWYgYW55dGhp
bmcgaW4gdGhpcyBsb29wIGZhaWxzLCB0cnkgdGhlIG5leHQgdHlwZSwKKyAgICAgICAgLy8gdW50
aWwgd2Ugc3VjY2VlZCBvciB0aGUgbWl4ZXIgcnVucyBvdXQgb2YgdHlwZXMuCisKKyAgICAgICAg
Ly8gU3RlcCAyLiBDaGVjayBpZiB3ZSBzdXBwb3J0IHRoaXMgbWVkaWEgdHlwZS4gCisgICAgICAg
IC8vIE5vdGU6IE5vbmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMgdGhhdCB3ZSBtYWtlIGxhdGVyIGlu
IENyZWF0ZU9wdGltYWxWaWRlb1R5cGUKKyAgICAgICAgLy8gd2lsbCBhZmZlY3QgdGhlIHN1aXRh
YmlsaXR5IG9mIHRoZSB0eXBlLCBhdCBsZWFzdCBmb3IgdXMuIChQb3NzaWJseSBmb3IgdGhlIG1p
eGVyLikKKyAgICAgICAgaHIgPSBJc01lZGlhVHlwZVN1cHBvcnRlZChwTWl4ZXJUeXBlLmdldCgp
KTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAvLyBTdGVwIDMuIEFkanVzdCB0aGUgbWl4ZXIncyB0eXBlIHRvIG1hdGNoIG91ciByZXF1aXJl
bWVudHMuCisgICAgICAgIGhyID0gQ3JlYXRlT3B0aW1hbFZpZGVvVHlwZShwTWl4ZXJUeXBlLmdl
dCgpLCAmcE9wdGltYWxUeXBlKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAvLyBTdGVwIDQuIENoZWNrIGlmIHRoZSBtaXhlciB3aWxsIGFj
Y2VwdCB0aGlzIG1lZGlhIHR5cGUuCisgICAgICAgIGhyID0gbV9wTWl4ZXItPlNldE91dHB1dFR5
cGUoMCwgcE9wdGltYWxUeXBlLmdldCgpLCBNRlRfU0VUX1RZUEVfVEVTVF9PTkxZKTsKKyAgICAg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBTdGVw
IDUuIFRyeSB0byBzZXQgdGhlIG1lZGlhIHR5cGUgb24gb3Vyc2VsdmVzLgorICAgICAgICBociA9
IFNldE1lZGlhVHlwZShwT3B0aW1hbFR5cGUuZ2V0KCkpOworICAgICAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFN0ZXAgNi4gU2V0IG91dHB1dCBt
ZWRpYSB0eXBlIG9uIG1peGVyLgorICAgICAgICBociA9IG1fcE1peGVyLT5TZXRPdXRwdXRUeXBl
KDAsIHBPcHRpbWFsVHlwZS5nZXQoKSwgMCk7CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOyAvLyBUaGlzIHNob3VsZCBzdWNjZWVkIHVubGVzcyB0aGUgTUZUIGxpZWQgaW4gdGhlIHBy
ZXZpb3VzIGNhbGwuCisKKyAgICAgICAgLy8gSWYgc29tZXRoaW5nIHdlbnQgd3JvbmcsIGNsZWFy
IHRoZSBtZWRpYSB0eXBlLgorICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIFNl
dE1lZGlhVHlwZShudWxscHRyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYkZvdW5kTWVk
aWFUeXBlID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6UHJv
Y2Vzc0lucHV0Tm90aWZ5KCkKK3sKKyAgICAvLyBTZXQgdGhlIGZsYWcgdGhhdCBzYXlzIHRoZSBt
aXhlciBoYXMgYSBuZXcgc2FtcGxlLgorICAgIG1fYlNhbXBsZU5vdGlmeSA9IHRydWU7CisKKyAg
ICBpZiAoIW1fcE1lZGlhVHlwZSkgeworICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgdmFsaWQg
bWVkaWEgdHlwZSB5ZXQuCisgICAgICAgIHJldHVybiBNRl9FX1RSQU5TRk9STV9UWVBFX05PVF9T
RVQ7CisgICAgfSAKKyAgICAKKyAgICBpZiAobV9tZWRpYVBsYXllcikgeworICAgICAgICBhdXRv
IHdlYWtQdHIgPSBtX21lZGlhUGxheWVyLT5tX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIo
KTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbd2Vha1B0cl0geworICAgICAgICAgICAgaWYg
KHdlYWtQdHIpCisgICAgICAgICAgICAgICAgd2Vha1B0ci0+aW52YWxpZGF0ZUZyYW1lVmlldygp
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBUcnkgdG8gcHJvY2VzcyBhbiBvdXRwdXQg
c2FtcGxlLgorICAgIFByb2Nlc3NPdXRwdXRMb29wKCk7CisKKyAgICByZXR1cm4gU19PSzsKK30K
KworCisvLyBNRk9mZnNldFRvRmxvYXQ6IENvbnZlcnQgYSBmaXhlZC1wb2ludCB0byBhIGZsb2F0
Lgorc3RhdGljIGlubGluZSBmbG9hdCBNRk9mZnNldFRvRmxvYXQoY29uc3QgTUZPZmZzZXQmIG9m
ZnNldCkKK3sKKyAgICByZXR1cm4gb2Zmc2V0LnZhbHVlICsgKGZsb2F0KG9mZnNldC5mcmFjdCkg
LyA2NTUzNik7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFZhbGlkYXRlVmlkZW9B
cmVhOgorLy8KKy8vIFJldHVybnMgU19PSyBpZiBhbiBhcmVhIGlzIHNtYWxsZXIgdGhhbiB3aWR0
aCB4IGhlaWdodC4gCisvLyBPdGhlcndpc2UsIHJldHVybnMgTUZfRV9JTlZBTElETUVESUFUWVBF
LgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgSFJFU1VMVCBWYWxpZGF0ZVZpZGVv
QXJlYShjb25zdCBNRlZpZGVvQXJlYSYgYXJlYSwgVUlOVDMyIHdpZHRoLCBVSU5UMzIgaGVpZ2h0
KQoreworICAgIGZsb2F0IGZPZmZzZXRYID0gTUZPZmZzZXRUb0Zsb2F0KGFyZWEuT2Zmc2V0WCk7
CisgICAgZmxvYXQgZk9mZnNldFkgPSBNRk9mZnNldFRvRmxvYXQoYXJlYS5PZmZzZXRZKTsKKwor
ICAgIGlmICgoKExPTkcpZk9mZnNldFggKyBhcmVhLkFyZWEuY3ggPiAoTE9ORyl3aWR0aCkgfHwg
KChMT05HKWZPZmZzZXRZICsgYXJlYS5BcmVhLmN5ID4gKExPTkcpaGVpZ2h0KSkKKyAgICAgICAg
cmV0dXJuIE1GX0VfSU5WQUxJRE1FRElBVFlQRTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJF
U1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjpCZWdpblN0cmVhbWluZygpCit7CisgICAgLy8gU3RhcnQgdGhlIHNjaGVkdWxlciB0aHJl
YWQuIAorICAgIHJldHVybiBtX3NjaGVkdWxlci5TdGFydFNjaGVkdWxlcihtX3BDbG9jay5nZXQo
KSk7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6RW5kU3RyZWFtaW5nKCkKK3sKKyAgICAvLyBTdG9wIHRoZSBzY2hl
ZHVsZXIgdGhyZWFkLgorICAgIHJldHVybiBtX3NjaGVkdWxlci5TdG9wU2NoZWR1bGVyKCk7Cit9
CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6Q2hlY2tFbmRPZlN0cmVhbSgpCit7CisgICAgaWYgKCFtX2JFbmRTdHJlYW1p
bmcpIHsKKyAgICAgICAgLy8gVGhlIEVWUiBkaWQgbm90IHNlbmQgdGhlIE1GVlBfTUVTU0FHRV9F
TkRPRlNUUkVBTSBtZXNzYWdlLgorICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICBp
ZiAobV9iU2FtcGxlTm90aWZ5KSB7CisgICAgICAgIC8vIFRoZSBtaXhlciBzdGlsbCBoYXMgaW5w
dXQuIAorICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICBpZiAobV9TYW1wbGVQb29s
LmFyZVNhbXBsZXNQZW5kaW5nKCkpIHsKKyAgICAgICAgLy8gU2FtcGxlcyBhcmUgc3RpbGwgc2No
ZWR1bGVkIGZvciByZW5kZXJpbmcuCisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAg
IC8vIEV2ZXJ5dGhpbmcgaXMgY29tcGxldGUuIE5vdyB3ZSBjYW4gdGVsbCB0aGUgRVZSIHRoYXQg
d2UgYXJlIGRvbmUuCisgICAgTm90aWZ5RXZlbnQoRUNfQ09NUExFVEUsIChMT05HX1BUUilTX09L
LCAwKTsKKyAgICBtX2JFbmRTdHJlYW1pbmcgPSBmYWxzZTsKKyAgICByZXR1cm4gU19PSzsKK30K
KworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpJc01lZGlhVHlwZVN1cHBvcnRlZChJTUZNZWRpYVR5cGUqIHBNZWRpYVR5cGUp
Cit7CisgICAgRDNERk9STUFUIGQzZEZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworICAgIEJPT0wg
YkNvbXByZXNzZWQgPSBGQUxTRTsKKyAgICBNRlZpZGVvSW50ZXJsYWNlTW9kZSBJbnRlcmxhY2VN
b2RlID0gTUZWaWRlb0ludGVybGFjZV9Vbmtub3duOworICAgIE1GVmlkZW9BcmVhIFZpZGVvQ3Jv
cEFyZWE7CisgICAgVUlOVDMyIHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKKworICAgIC8vIEhlbHBl
ciBvYmplY3QgZm9yIHJlYWRpbmcgdGhlIHByb3Bvc2VkIHR5cGUuCisgICAgVmlkZW9UeXBlIG10
UHJvcG9zZWQocE1lZGlhVHlwZSk7CisKKyAgICAvLyBSZWplY3QgY29tcHJlc3NlZCBtZWRpYSB0
eXBlcy4KKyAgICBIUkVTVUxUIGhyID0gbXRQcm9wb3NlZC5Jc0NvbXByZXNzZWRGb3JtYXQoJmJD
b21wcmVzc2VkKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworICAg
IGlmIChiQ29tcHJlc3NlZCkKKyAgICAgICAgcmV0dXJuIE1GX0VfSU5WQUxJRE1FRElBVFlQRTsK
KworICAgIC8vIFZhbGlkYXRlIHRoZSBmb3JtYXQuCisgICAgaHIgPSBtdFByb3Bvc2VkLkdldEZv
dXJDQygoRFdPUkQqKSZkM2RGb3JtYXQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBy
ZXR1cm4gaHI7CisKKyAgICAvLyBUaGUgRDNEUHJlc2VudEVuZ2luZSBjaGVja3Mgd2hldGhlciB0
aGUgZm9ybWF0IGNhbiBiZSB1c2VkIGFzCisgICAgLy8gdGhlIGJhY2stYnVmZmVyIGZvcm1hdCBm
b3IgdGhlIHN3YXAgY2hhaW5zLgorICAgIGhyID0gbV9wRDNEUHJlc2VudEVuZ2luZS0+Q2hlY2tG
b3JtYXQoZDNkRm9ybWF0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhy
OworCisgICAgLy8gUmVqZWN0IGludGVybGFjZWQgZm9ybWF0cy4KKyAgICBociA9IG10UHJvcG9z
ZWQuR2V0SW50ZXJsYWNlTW9kZSgmSW50ZXJsYWNlTW9kZSk7CisgICAgaWYgKEZBSUxFRChocikp
CisgICAgICAgIHJldHVybiBocjsKKworICAgIGlmIChJbnRlcmxhY2VNb2RlICE9IE1GVmlkZW9J
bnRlcmxhY2VfUHJvZ3Jlc3NpdmUpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURNRURJQVRZ
UEU7CisKKyAgICBociA9IG10UHJvcG9zZWQuR2V0RnJhbWVEaW1lbnNpb25zKCZ3aWR0aCwgJmhl
aWdodCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIC8v
IFZhbGlkYXRlIHRoZSB2YXJpb3VzIGFwZXJ0dXJlcyAoY3JvcHBpbmcgcmVnaW9ucykgYWdhaW5z
dCB0aGUgZnJhbWUgc2l6ZS4KKyAgICAvLyBBbnkgb2YgdGhlc2UgYXBlcnR1cmVzIG1heSBiZSB1
bnNwZWNpZmllZCBpbiB0aGUgbWVkaWEgdHlwZSwgaW4gd2hpY2ggY2FzZSAKKyAgICAvLyB3ZSBp
Z25vcmUgaXQuIFdlIGp1c3Qgd2FudCB0byByZWplY3QgaW52YWxpZCBhcGVydHVyZXMuCisgICAg
aWYgKFNVQ0NFRURFRChtdFByb3Bvc2VkLkdldFBhblNjYW5BcGVydHVyZSgmVmlkZW9Dcm9wQXJl
YSkpKQorICAgICAgICBWYWxpZGF0ZVZpZGVvQXJlYShWaWRlb0Nyb3BBcmVhLCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICBpZiAoU1VDQ0VFREVEKG10UHJvcG9zZWQuR2V0R2VvbWV0cmljQXBlcnR1cmUo
JlZpZGVvQ3JvcEFyZWEpKSkKKyAgICAgICAgVmFsaWRhdGVWaWRlb0FyZWEoVmlkZW9Dcm9wQXJl
YSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKFNVQ0NFRURFRChtdFByb3Bvc2VkLkdldE1pbkRp
c3BsYXlBcGVydHVyZSgmVmlkZW9Dcm9wQXJlYSkpKQorICAgICAgICBWYWxpZGF0ZVZpZGVvQXJl
YShWaWRlb0Nyb3BBcmVhLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHJldHVybiBTX09LOworfQor
CitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OkNyZWF0ZU9wdGltYWxWaWRlb1R5cGUoSU1GTWVkaWFUeXBlKiBwUHJvcG9zZWRU
eXBlLCBJTUZNZWRpYVR5cGUgKipwcE9wdGltYWxUeXBlKQoreworICAgIFJFQ1QgcmNPdXRwdXQ7
CisgICAgWmVyb01lbW9yeSgmcmNPdXRwdXQsIHNpemVvZihyY091dHB1dCkpOworCisgICAgTUZW
aWRlb0FyZWEgZGlzcGxheUFyZWE7CisgICAgWmVyb01lbW9yeSgmZGlzcGxheUFyZWEsIHNpemVv
ZihkaXNwbGF5QXJlYSkpOworCisgICAgLy8gSGVscGVyIG9iamVjdCB0byBtYW5pcHVsYXRlIHRo
ZSBvcHRpbWFsIHR5cGUuCisgICAgVmlkZW9UeXBlIG10T3B0aW1hbDsKKyAgICBtdE9wdGltYWwu
Q3JlYXRlRW1wdHlUeXBlKCk7CisKKyAgICAvLyBDbG9uZSB0aGUgcHJvcG9zZWQgdHlwZS4KKyAg
ICBIUkVTVUxUIGhyID0gbXRPcHRpbWFsLkNvcHlGcm9tKHBQcm9wb3NlZFR5cGUpOworICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICAvLyBNb2RpZnkgdGhlIG5l
dyB0eXBlLgorCisgICAgLy8gRm9yIHB1cnBvc2VzIG9mIHRoaXMgU0RLIHNhbXBsZSwgd2UgYXNz
dW1lIAorICAgIC8vIDEpIFRoZSBtb25pdG9yJ3MgcGl4ZWxzIGFyZSBzcXVhcmUuCisgICAgLy8g
MikgVGhlIHByZXNlbnRlciBhbHdheXMgcHJlc2VydmVzIHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8u
CisKKyAgICAvLyBTZXQgdGhlIHBpeGVsIGFzcGVjdCByYXRpbyAoUEFSKSB0byAxOjEgKHNlZSBh
c3N1bXB0aW9uICMxLCBhYm92ZSkKKyAgICBociA9IG10T3B0aW1hbC5TZXRQaXhlbEFzcGVjdFJh
dGlvKDEsIDEpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAg
ICAvLyBHZXQgdGhlIG91dHB1dCByZWN0YW5nbGUuCisgICAgcmNPdXRwdXQgPSBtX3BEM0RQcmVz
ZW50RW5naW5lLT5HZXREZXN0aW5hdGlvblJlY3QoKTsKKyAgICBpZiAoSXNSZWN0RW1wdHkoJnJj
T3V0cHV0KSkgeworICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG91dHB1dCByZWN0YW5nbGUgYmFz
ZWQgb24gdGhlIG1lZGlhIHR5cGUuCisgICAgICAgIGhyID0gQ2FsY3VsYXRlT3V0cHV0UmVjdGFu
Z2xlKHBQcm9wb3NlZFR5cGUsICZyY091dHB1dCk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIC8vIFNldCB0aGUgZXh0ZW5kZWQg
Y29sb3IgaW5mb3JtYXRpb246IFVzZSBCVC43MDkgCisgICAgaHIgPSBtdE9wdGltYWwuU2V0WVVW
TWF0cml4KE1GVmlkZW9UcmFuc2Zlck1hdHJpeF9CVDcwOSk7CisgICAgaWYgKEZBSUxFRChocikp
CisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gbXRPcHRpbWFsLlNldFRyYW5zZmVyRnVu
Y3Rpb24oTUZWaWRlb1RyYW5zRnVuY183MDkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAg
ICByZXR1cm4gaHI7CisKKyAgICBociA9IG10T3B0aW1hbC5TZXRWaWRlb1ByaW1hcmllcyhNRlZp
ZGVvUHJpbWFyaWVzX0JUNzA5KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJu
IGhyOworCisgICAgaHIgPSBtdE9wdGltYWwuU2V0VmlkZW9Ob21pbmFsUmFuZ2UoTUZOb21pbmFs
UmFuZ2VfMTZfMjM1KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOwor
CisgICAgaHIgPSBtdE9wdGltYWwuU2V0VmlkZW9MaWdodGluZyhNRlZpZGVvTGlnaHRpbmdfZGlt
KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gU2V0
IHRoZSB0YXJnZXQgcmVjdCBkaW1lbnNpb25zLiAKKyAgICBociA9IG10T3B0aW1hbC5TZXRGcmFt
ZURpbWVuc2lvbnMocmNPdXRwdXQucmlnaHQsIHJjT3V0cHV0LmJvdHRvbSk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIC8vIFNldCB0aGUgZ2VvbWV0cmlj
IGFwZXJ0dXJlLCBhbmQgZGlzYWJsZSBwYW4vc2Nhbi4KKyAgICBkaXNwbGF5QXJlYSA9IE1ha2VB
cmVhKDAsIDAsIHJjT3V0cHV0LnJpZ2h0LCByY091dHB1dC5ib3R0b20pOworCisgICAgaHIgPSBt
dE9wdGltYWwuU2V0UGFuU2NhbkVuYWJsZWQoRkFMU0UpOworICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IG10T3B0aW1hbC5TZXRHZW9tZXRyaWNBcGVy
dHVyZShkaXNwbGF5QXJlYSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBo
cjsKKworICAgIC8vIFNldCB0aGUgcGFuL3NjYW4gYXBlcnR1cmUgYW5kIHRoZSBtaW5pbXVtIGRp
c3BsYXkgYXBlcnR1cmUuIFdlIGRvbid0IGNhcmUKKyAgICAvLyBhYm91dCB0aGVtIHBlciBzZSwg
YnV0IHRoZSBtaXhlciB3aWxsIHJlamVjdCB0aGUgdHlwZSBpZiB0aGVzZSBleGNlZWQgdGhlIAor
ICAgIC8vIGZyYW1lIGRpbWVudGlvbnMuCisgICAgaHIgPSBtdE9wdGltYWwuU2V0UGFuU2NhbkFw
ZXJ0dXJlKGRpc3BsYXlBcmVhKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJu
IGhyOworCisgICAgaHIgPSBtdE9wdGltYWwuU2V0TWluRGlzcGxheUFwZXJ0dXJlKGRpc3BsYXlB
cmVhKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8g
UmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBjYWxsZXIuCisgICAgKnBwT3B0aW1hbFR5cGUgPSBt
dE9wdGltYWwuRGV0YWNoKCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworc3RhdGljIFJFQ1Qg
Q29ycmVjdEFzcGVjdFJhdGlvKGNvbnN0IFJFQ1QmIHNyYywgY29uc3QgTUZSYXRpbyYgc3JjUEFS
LCBjb25zdCBNRlJhdGlvJiBkZXN0UEFSKQoreworICAgIC8vIFN0YXJ0IHdpdGggYSByZWN0YW5n
bGUgdGhlIHNhbWUgc2l6ZSBhcyBzcmMsIGJ1dCBvZmZzZXQgdG8gdGhlIG9yaWdpbiAoMCwwKS4K
KyAgICBSRUNUIHJjID0geyAwLCAwLCBzcmMucmlnaHQgLSBzcmMubGVmdCwgc3JjLmJvdHRvbSAt
IHNyYy50b3AgfTsKKworICAgIC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGhhdmUg
dGhlIHNhbWUgUEFSLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLgorICAgIC8vIE90aGVyd2lzZSwg
YWRqdXN0IHRoZSBpbWFnZSBzaXplLCBpbiB0d28gc3RlcHM6CisgICAgLy8gIDEuIFRyYW5zZm9y
bSBmcm9tIHNvdXJjZSBQQVIgdG8gMToxCisgICAgLy8gIDIuIFRyYW5zZm9ybSBmcm9tIDE6MSB0
byBkZXN0aW5hdGlvbiBQQVIuCisKKyAgICBpZiAoKHNyY1BBUi5OdW1lcmF0b3IgIT0gZGVzdFBB
Ui5OdW1lcmF0b3IpIHx8IChzcmNQQVIuRGVub21pbmF0b3IgIT0gZGVzdFBBUi5EZW5vbWluYXRv
cikpIHsKKyAgICAgICAgLy8gQ29ycmVjdCBmb3IgdGhlIHNvdXJjZSdzIFBBUi4KKworICAgICAg
ICBpZiAoc3JjUEFSLk51bWVyYXRvciA+IHNyY1BBUi5EZW5vbWluYXRvcikgeworICAgICAgICAg
ICAgLy8gVGhlIHNvdXJjZSBoYXMgIndpZGUiIHBpeGVscywgc28gc3RyZXRjaCB0aGUgd2lkdGgu
CisgICAgICAgICAgICByYy5yaWdodCA9IE11bERpdihyYy5yaWdodCwgc3JjUEFSLk51bWVyYXRv
ciwgc3JjUEFSLkRlbm9taW5hdG9yKTsKKyAgICAgICAgfSBlbHNlIGlmIChzcmNQQVIuTnVtZXJh
dG9yIDwgc3JjUEFSLkRlbm9taW5hdG9yKSB7CisgICAgICAgICAgICAvLyBUaGUgc291cmNlIGhh
cyAidGFsbCIgcGl4ZWxzLCBzbyBzdHJldGNoIHRoZSBoZWlnaHQuCisgICAgICAgICAgICByYy5i
b3R0b20gPSBNdWxEaXYocmMuYm90dG9tLCBzcmNQQVIuRGVub21pbmF0b3IsIHNyY1BBUi5OdW1l
cmF0b3IpOworICAgICAgICB9CisgICAgICAgIC8vIGVsc2U6IFBBUiBpcyAxOjEsIHdoaWNoIGlz
IGEgbm8tb3AuCisKKyAgICAgICAgLy8gTmV4dCwgY29ycmVjdCBmb3IgdGhlIHRhcmdldCdzIFBB
Ui4gVGhpcyBpcyB0aGUgaW52ZXJzZSBvcGVyYXRpb24gb2YgdGhlIHByZXZpb3VzLgorICAgICAg
ICBpZiAoZGVzdFBBUi5OdW1lcmF0b3IgPiBkZXN0UEFSLkRlbm9taW5hdG9yKSB7CisgICAgICAg
ICAgICAvLyBUaGUgZGVzdGluYXRpb24gaGFzICJ3aWRlIiBwaXhlbHMsIHNvIHN0cmV0Y2ggdGhl
IGhlaWdodC4KKyAgICAgICAgICAgIHJjLmJvdHRvbSA9IE11bERpdihyYy5ib3R0b20sIGRlc3RQ
QVIuTnVtZXJhdG9yLCBkZXN0UEFSLkRlbm9taW5hdG9yKTsKKyAgICAgICAgfSBlbHNlIGlmIChk
ZXN0UEFSLk51bWVyYXRvciA8IGRlc3RQQVIuRGVub21pbmF0b3IpIHsKKyAgICAgICAgICAgIC8v
IFRoZSBkZXN0aW5hdGlvbiBoYXMgInRhbGwiIHBpeGVscywgc28gc3RyZXRjaCB0aGUgd2lkdGgu
CisgICAgICAgICAgICByYy5yaWdodCA9IE11bERpdihyYy5yaWdodCwgZGVzdFBBUi5EZW5vbWlu
YXRvciwgZGVzdFBBUi5OdW1lcmF0b3IpOworICAgICAgICB9CisgICAgICAgIC8vIGVsc2U6IFBB
UiBpcyAxOjEsIHdoaWNoIGlzIGEgbm8tb3AuCisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQor
CitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OkNhbGN1bGF0ZU91dHB1dFJlY3RhbmdsZShJTUZNZWRpYVR5cGUgKnBQcm9wb3Nl
ZFR5cGUsIFJFQ1QgKnByY091dHB1dCkKK3sKKyAgICBVSU5UMzIgc3JjV2lkdGggPSAwLCBzcmNI
ZWlnaHQgPSAwOworCisgICAgTUZSYXRpbyBpbnB1dFBBUiA9IHsgMCwgMCB9OworICAgIE1GUmF0
aW8gb3V0cHV0UEFSID0geyAwLCAwIH07CisgICAgUkVDVCByY091dHB1dCA9IHsgMCwgMCwgMCwg
MCB9OworCisgICAgTUZWaWRlb0FyZWEgZGlzcGxheUFyZWE7CisgICAgWmVyb01lbW9yeSgmZGlz
cGxheUFyZWEsIHNpemVvZihkaXNwbGF5QXJlYSkpOworCisgICAgLy8gSGVscGVyIG9iamVjdCB0
byByZWFkIHRoZSBtZWRpYSB0eXBlLgorICAgIFZpZGVvVHlwZSBtdFByb3Bvc2VkKHBQcm9wb3Nl
ZFR5cGUpOworCisgICAgLy8gR2V0IHRoZSBzb3VyY2UncyBmcmFtZSBkaW1lbnNpb25zLgorICAg
IEhSRVNVTFQgaHIgPSBtdFByb3Bvc2VkLkdldEZyYW1lRGltZW5zaW9ucygmc3JjV2lkdGgsICZz
cmNIZWlnaHQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAg
ICAvLyBHZXQgdGhlIHNvdXJjZSdzIGRpc3BsYXkgYXJlYS4gCisgICAgaHIgPSBtdFByb3Bvc2Vk
LkdldFZpZGVvRGlzcGxheUFyZWEoJmRpc3BsYXlBcmVhKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSB4LHkgb2Zmc2V0cyBv
ZiB0aGUgZGlzcGxheSBhcmVhLgorICAgIExPTkcgb2Zmc2V0WCA9IChMT05HKU1GT2Zmc2V0VG9G
bG9hdChkaXNwbGF5QXJlYS5PZmZzZXRYKTsKKyAgICBMT05HIG9mZnNldFkgPSAoTE9ORylNRk9m
ZnNldFRvRmxvYXQoZGlzcGxheUFyZWEuT2Zmc2V0WSk7CisKKyAgICAvLyBVc2UgdGhlIGRpc3Bs
YXkgYXJlYSBpZiB2YWxpZC4gT3RoZXJ3aXNlLCB1c2UgdGhlIGVudGlyZSBmcmFtZS4KKyAgICBp
ZiAoZGlzcGxheUFyZWEuQXJlYS5jeCAhPSAwCisgICAgICAgICYmIGRpc3BsYXlBcmVhLkFyZWEu
Y3kgIT0gMAorICAgICAgICAmJiBvZmZzZXRYICsgZGlzcGxheUFyZWEuQXJlYS5jeCA8PSAoTE9O
Rykoc3JjV2lkdGgpCisgICAgICAgICYmIG9mZnNldFkgKyBkaXNwbGF5QXJlYS5BcmVhLmN5IDw9
IChMT05HKShzcmNIZWlnaHQpKSB7CisgICAgICAgIHJjT3V0cHV0LmxlZnQgPSBvZmZzZXRYOwor
ICAgICAgICByY091dHB1dC5yaWdodCA9IG9mZnNldFggKyBkaXNwbGF5QXJlYS5BcmVhLmN4Owor
ICAgICAgICByY091dHB1dC50b3AgPSBvZmZzZXRZOworICAgICAgICByY091dHB1dC5ib3R0b20g
PSBvZmZzZXRZICsgZGlzcGxheUFyZWEuQXJlYS5jeTsKKyAgICB9IGVsc2UgeworICAgICAgICBy
Y091dHB1dC5sZWZ0ID0gMDsKKyAgICAgICAgcmNPdXRwdXQudG9wID0gMDsKKyAgICAgICAgcmNP
dXRwdXQucmlnaHQgPSBzcmNXaWR0aDsKKyAgICAgICAgcmNPdXRwdXQuYm90dG9tID0gc3JjSGVp
Z2h0OworICAgIH0KKworICAgIC8vIHJjT3V0cHV0IGlzIG5vdyBlaXRoZXIgYSBzdWItcmVjdGFu
Z2xlIG9mIHRoZSB2aWRlbyBmcmFtZSwgb3IgdGhlIGVudGlyZSBmcmFtZS4KKworICAgIC8vIElm
IHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8gb2YgdGhlIHByb3Bvc2VkIG1lZGlhIHR5cGUgaXMgZGlm
ZmVyZW50IGZyb20gdGhlIG1vbml0b3IncywgCisgICAgLy8gbGV0dGVyYm94IHRoZSB2aWRlby4g
V2Ugc3RyZXRjaCB0aGUgaW1hZ2UgcmF0aGVyIHRoYW4gc2hyaW5rIGl0LgorCisgICAgaW5wdXRQ
QVIgPSBtdFByb3Bvc2VkLkdldFBpeGVsQXNwZWN0UmF0aW8oKTsgLy8gRGVmYXVsdHMgdG8gMTox
CisKKyAgICBvdXRwdXRQQVIuRGVub21pbmF0b3IgPSBvdXRwdXRQQVIuTnVtZXJhdG9yID0gMTsg
Ly8gVGhpcyBpcyBhbiBhc3N1bXB0aW9uIG9mIHRoZSBzYW1wbGUuCisKKyAgICAvLyBBZGp1c3Qg
dG8gZ2V0IHRoZSBjb3JyZWN0IHBpY3R1cmUgYXNwZWN0IHJhdGlvLgorICAgICpwcmNPdXRwdXQg
PSBDb3JyZWN0QXNwZWN0UmF0aW8ocmNPdXRwdXQsIGlucHV0UEFSLCBvdXRwdXRQQVIpOworCisg
ICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6UHJlcGFyZUZyYW1lU3RlcChEV09SRCBjU3Rl
cHMpCit7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTdGFydEZyYW1lU3Rl
cCgpCit7CisgICAgQVNTRVJUKG1fUmVuZGVyU3RhdGUgPT0gUkVOREVSX1NUQVRFX1NUQVJURUQp
OworCisgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgQ09NUHRyPElNRlNhbXBsZT4gcFNhbXBs
ZTsKKworICAgIGlmIChtX0ZyYW1lU3RlcC5zdGF0ZSA9PSBGUkFNRVNURVBfV0FJVElOR19TVEFS
VCkgeworICAgICAgICAvLyBXZSBoYXZlIGEgZnJhbWUtc3RlcCByZXF1ZXN0LCBhbmQgYXJlIHdh
aXRpbmcgZm9yIHRoZSBjbG9jayB0byBzdGFydC4KKyAgICAgICAgLy8gU2V0IHRoZSBzdGF0ZSB0
byAicGVuZGluZywiIHdoaWNoIG1lYW5zIHdlIGFyZSB3YWl0aW5nIGZvciBzYW1wbGVzLgorICAg
ICAgICBtX0ZyYW1lU3RlcC5zdGF0ZSA9IEZSQU1FU1RFUF9QRU5ESU5HOworCisgICAgICAgIC8v
IElmIHRoZSBmcmFtZS1zdGVwIHF1ZXVlIGFscmVhZHkgaGFzIHNhbXBsZXMsIHByb2Nlc3MgdGhl
bSBub3cuCisgICAgICAgIHdoaWxlICghbV9GcmFtZVN0ZXAuc2FtcGxlcy5pc0VtcHR5KCkgJiYg
KG1fRnJhbWVTdGVwLnN0YXRlID09IEZSQU1FU1RFUF9QRU5ESU5HKSkgeworICAgICAgICAgICAg
cFNhbXBsZSA9IG1fRnJhbWVTdGVwLnNhbXBsZXMudGFrZUZpcnN0KCk7CisgICAgICAgICAgICBo
ciA9IERlbGl2ZXJGcmFtZVN0ZXBTYW1wbGUocFNhbXBsZS5nZXQoKSk7CisgICAgICAgICAgICBp
ZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAgICAgICBw
U2FtcGxlID0gbnVsbHB0cjsKKworICAgICAgICAgICAgLy8gV2UgYnJlYWsgZnJvbSB0aGlzIGxv
b3Agd2hlbjoKKyAgICAgICAgICAgIC8vICAgKGEpIHRoZSBmcmFtZS1zdGVwIHF1ZXVlIGlzIGVt
cHR5LCBvcgorICAgICAgICAgICAgLy8gICAoYikgdGhlIGZyYW1lLXN0ZXAgb3BlcmF0aW9uIGlz
IGNvbXBsZXRlLgorICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX0ZyYW1lU3RlcC5zdGF0ZSA9
PSBGUkFNRVNURVBfTk9ORSkgeworICAgICAgICAvLyBXZSBhcmUgbm90IGZyYW1lIHN0ZXBwaW5n
LiBUaGVyZWZvcmUsIGlmIHRoZSBmcmFtZS1zdGVwIHF1ZXVlIGhhcyBzYW1wbGVzLCAKKyAgICAg
ICAgLy8gd2UgbmVlZCB0byBwcm9jZXNzIHRoZW0gbm9ybWFsbHkuCisgICAgICAgIHdoaWxlICgh
bV9GcmFtZVN0ZXAuc2FtcGxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHBTYW1wbGUgPSBt
X0ZyYW1lU3RlcC5zYW1wbGVzLnRha2VGaXJzdCgpOworICAgICAgICAgICAgaHIgPSBEZWxpdmVy
U2FtcGxlKHBTYW1wbGUuZ2V0KCksIEZBTFNFKTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQoaHIp
KQorICAgICAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgICAgIHBTYW1wbGUgPSBudWxs
cHRyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6
Q29tcGxldGVGcmFtZVN0ZXAoSU1GU2FtcGxlKiBwU2FtcGxlKQoreworICAgIHJldHVybiBFX05P
VElNUEw7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpD
dXN0b21WaWRlb1ByZXNlbnRlcjo6Q2FuY2VsRnJhbWVTdGVwKCkKK3sKKyAgICByZXR1cm4gRV9O
T1RJTVBMOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQcm9jZXNzT3V0cHV0TG9v
cAorLy8KKy8vIEdldCB2aWRlbyBmcmFtZXMgZnJvbSB0aGUgbWl4ZXIgYW5kIHNjaGVkdWxlIHRo
ZW0gZm9yIHByZXNlbnRhdGlvbi4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpQcm9j
ZXNzT3V0cHV0TG9vcCgpCit7CisgICAgSFJFU1VMVCBociA9IFNfT0s7CisKKyAgICAvLyBQcm9j
ZXNzIGFzIG1hbnkgc2FtcGxlcyBhcyBwb3NzaWJsZS4KKyAgICB3aGlsZSAoaHIgPT0gU19PSykg
eworICAgICAgICAvLyBJZiB0aGUgbWl4ZXIgZG9lc24ndCBoYXZlIGEgbmV3IGlucHV0IHNhbXBs
ZSwgYnJlYWsgZnJvbSB0aGUgbG9vcC4KKyAgICAgICAgaWYgKCFtX2JTYW1wbGVOb3RpZnkpIHsK
KyAgICAgICAgICAgIGhyID0gTUZfRV9UUkFOU0ZPUk1fTkVFRF9NT1JFX0lOUFVUOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBUcnkgdG8gcHJvY2VzcyBhIHNh
bXBsZS4KKyAgICAgICAgaHIgPSBQcm9jZXNzT3V0cHV0KCk7CisKKyAgICAgICAgLy8gTk9URTog
UHJvY2Vzc091dHB1dCBjYW4gcmV0dXJuIFNfRkFMU0UgdG8gaW5kaWNhdGUgaXQgZGlkIG5vdCBw
cm9jZXNzIGEgc2FtcGxlLgorICAgICAgICAvLyBJZiBzbywgd2UgYnJlYWsgb3V0IG9mIHRoZSBs
b29wLgorICAgIH0KKworICAgIGlmIChociA9PSBNRl9FX1RSQU5TRk9STV9ORUVEX01PUkVfSU5Q
VVQpIHsKKyAgICAgICAgLy8gVGhlIG1peGVyIGhhcyBydW4gb3V0IG9mIGlucHV0IGRhdGEuIENo
ZWNrIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4KKyAgICAgICAgQ2hlY2tFbmRP
ZlN0cmVhbSgpOworICAgIH0KK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2V0RGVz
aXJlZFNhbXBsZVRpbWUKKy8vCisvLyBTZXRzIHRoZSAiZGVzaXJlZCIgc2FtcGxlIHRpbWUgb24g
YSBzYW1wbGUuIFRoaXMgdGVsbHMgdGhlIG1peGVyIHRvIG91dHB1dCAKKy8vIGFuIGVhcmxpZXIg
ZnJhbWUsIG5vdCB0aGUgbmV4dCBmcmFtZS4gKFVzZWQgd2hlbiByZXBhaW50aW5nIGEgZnJhbWUu
KQorLy8KKy8vIFRoaXMgbWV0aG9kIHVzZXMgdGhlIHNhbXBsZSdzIElNRkRlc2lyZWRTYW1wbGUg
aW50ZXJmYWNlLgorLy8KKy8vIGhuc1NhbXBsZVRpbWU6IFRpbWUgc3RhbXAgb2YgdGhlIGZyYW1l
IHRoYXQgdGhlIG1peGVyIHNob3VsZCBvdXRwdXQuCisvLyBobnNEdXJhdGlvbjogRHVyYXRpb24g
b2YgdGhlIGZyYW1lLgorLy8KKy8vIE5vdGU6IEJlZm9yZSByZS11c2luZyB0aGUgc2FtcGxlLCBj
YWxsIENsZWFyRGVzaXJlZFNhbXBsZVRpbWUgdG8gY2xlYXIKKy8vIHRoZSBkZXNpcmVkIHRpbWUu
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQgU2V0RGVzaXJlZFNhbXBsZVRpbWUo
SU1GU2FtcGxlKiBwU2FtcGxlLCBjb25zdCBMT05HTE9ORyYgaG5zU2FtcGxlVGltZSwgY29uc3Qg
TE9OR0xPTkcmIGhuc0R1cmF0aW9uKQoreworICAgIGlmICghcFNhbXBsZSkKKyAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKKworICAgIENPTVB0cjxJTUZEZXNpcmVkU2FtcGxlPiBwRGVzaXJlZDsK
KworICAgIEhSRVNVTFQgaHIgPSBwU2FtcGxlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJTUZE
ZXNpcmVkU2FtcGxlKSwgKHZvaWQqKikmcERlc2lyZWQpOworICAgIGlmIChTVUNDRUVERUQoaHIp
KSB7CisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGhhcyBubyByZXR1cm4gdmFsdWUuCisgICAgICAg
IHBEZXNpcmVkLT5TZXREZXNpcmVkU2FtcGxlVGltZUFuZER1cmF0aW9uKGhuc1NhbXBsZVRpbWUs
IGhuc0R1cmF0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIENsZWFyRGVzaXJlZFNhbXBsZVRpbWUKKy8vCisvLyBDbGVhcnMgdGhl
IGRlc2lyZWQgc2FtcGxlIHRpbWUuIFNlZSBTZXREZXNpcmVkU2FtcGxlVGltZS4KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBDbGVhckRlc2lyZWRTYW1wbGVUaW1lKElNRlNhbXBs
ZSogcFNhbXBsZSkKK3sKKyAgICBpZiAoIXBTYW1wbGUpCisgICAgICAgIHJldHVybiBFX1BPSU5U
RVI7CisKKyAgICBDT01QdHI8SU1GRGVzaXJlZFNhbXBsZT4gcERlc2lyZWQ7CisgICAgQ09NUHRy
PElVbmtub3duPiBwVW5rU3dhcENoYWluOworCisgICAgLy8gV2Ugc3RvcmUgc29tZSBjdXN0b20g
YXR0cmlidXRlcyBvbiB0aGUgc2FtcGxlLCBzbyB3ZSBuZWVkIHRvIGNhY2hlIHRoZW0KKyAgICAv
LyBhbmQgcmVzZXQgdGhlbS4KKyAgICAvLworICAgIC8vIFRoaXMgd29ya3MgYXJvdW5kIHRoZSBm
YWN0IHRoYXQgSU1GRGVzaXJlZFNhbXBsZTo6Q2xlYXIoKSByZW1vdmVzIGFsbCBvZiB0aGUKKyAg
ICAvLyBhdHRyaWJ1dGVzIGZyb20gdGhlIHNhbXBsZS4gCisKKyAgICBVSU5UMzIgY291bnRlciA9
IE1GR2V0QXR0cmlidXRlVUlOVDMyKHBTYW1wbGUsIE1GU2FtcGxlUHJlc2VudGVyU2FtcGxlQ291
bnRlciwgKFVJTlQzMiktMSk7CisKKyAgICBwU2FtcGxlLT5HZXRVbmtub3duKE1GU2FtcGxlUHJl
c2VudGVyU2FtcGxlU3dhcENoYWluLCBJSURfSVVua25vd24sICh2b2lkKiopJnBVbmtTd2FwQ2hh
aW4pOworCisgICAgSFJFU1VMVCBociA9IHBTYW1wbGUtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9m
KElNRkRlc2lyZWRTYW1wbGUpLCAodm9pZCoqKSZwRGVzaXJlZCk7CisgICAgaWYgKFNVQ0NFRURF
RChocikpIHsKKyAgICAgICAgLy8gVGhpcyBtZXRob2QgaGFzIG5vIHJldHVybiB2YWx1ZS4KKyAg
ICAgICAgcERlc2lyZWQtPkNsZWFyKCk7CisKKyAgICAgICAgaHIgPSBwU2FtcGxlLT5TZXRVSU5U
MzIoTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVDb3VudGVyLCBjb3VudGVyKTsKKyAgICAgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7CisKKyAgICAgICAgaWYgKHBVbmtT
d2FwQ2hhaW4pIHsKKyAgICAgICAgICAgIGhyID0gcFNhbXBsZS0+U2V0VW5rbm93bihNRlNhbXBs
ZVByZXNlbnRlclNhbXBsZVN3YXBDaGFpbiwgcFVua1N3YXBDaGFpbi5nZXQoKSk7CisgICAgICAg
ICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFByb2Nlc3NPdXRwdXQKKy8vCisvLyBBdHRlbXB0cyB0byBnZXQgYSBuZXcgb3V0cHV0IHNh
bXBsZSBmcm9tIHRoZSBtaXhlci4KKy8vCisvLyBDYWxsZWQgaW4gdHdvIHNpdHVhdGlvbnM6IAor
Ly8gKDEpIFByb2Nlc3NPdXRwdXRMb29wLCBpZiB0aGUgbWl4ZXIgaGFzIGEgbmV3IGlucHV0IHNh
bXBsZS4gKG1fYlNhbXBsZU5vdGlmeSkKKy8vICgyKSBSZXBhaW50aW5nIHRoZSBsYXN0IGZyYW1l
LiAobV9iUmVwYWludCkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpQcm9jZXNz
T3V0cHV0KCkKK3sKKyAgICBBU1NFUlQobV9iU2FtcGxlTm90aWZ5IHx8IG1fYlJlcGFpbnQpOyAv
LyBTZWUgbm90ZSBhYm92ZS4KKworICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgIERXT1JEIGR3
U3RhdHVzID0gMDsKKyAgICBMT05HTE9ORyBtaXhlclN0YXJ0VGltZSA9IDAsIG1peGVyRW5kVGlt
ZSA9IDA7CisgICAgTUZUSU1FIHN5c3RlbVRpbWUgPSAwOworICAgIEJPT0wgYlJlcGFpbnQgPSBt
X2JSZXBhaW50OyAvLyBUZW1wb3JhcmlseSBzdG9yZSB0aGlzIHN0YXRlIGZsYWcuICAKKworICAg
IE1GVF9PVVRQVVRfREFUQV9CVUZGRVIgZGF0YUJ1ZmZlcjsKKyAgICBaZXJvTWVtb3J5KCZkYXRh
QnVmZmVyLCBzaXplb2YoZGF0YUJ1ZmZlcikpOworCisgICAgQ09NUHRyPElNRlNhbXBsZT4gcFNh
bXBsZTsKKworICAgIC8vIElmIHRoZSBjbG9jayBpcyBub3QgcnVubmluZywgd2UgcHJlc2VudCB0
aGUgZmlyc3Qgc2FtcGxlLAorICAgIC8vIGFuZCB0aGVuIGRvbid0IHByZXNlbnQgYW55IG1vcmUg
dW50aWwgdGhlIGNsb2NrIHN0YXJ0cy4gCisKKyAgICBpZiAoKG1fUmVuZGVyU3RhdGUgIT0gUkVO
REVSX1NUQVRFX1NUQVJURUQpIC8vIE5vdCBydW5uaW5nLgorICAgICAgICAmJiAhbV9iUmVwYWlu
dCAvLyBOb3QgYSByZXBhaW50IHJlcXVlc3QuCisgICAgICAgICYmIG1fYlByZXJvbGxlZCkgLy8g
QXQgbGVhc3Qgb25lIHNhbXBsZSBoYXMgYmVlbiBwcmVzZW50ZWQuCisgICAgICAgIHJldHVybiBT
X0ZBTFNFOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBwb2ludGVyIHRvIHRoZSBtaXhl
ci4KKyAgICBpZiAoIW1fcE1peGVyKQorICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElEUkVRVUVT
VDsKKworICAgIC8vIFRyeSB0byBnZXQgYSBmcmVlIHNhbXBsZSBmcm9tIHRoZSB2aWRlbyBzYW1w
bGUgcG9vbC4KKyAgICBociA9IG1fU2FtcGxlUG9vbC5nZXRTYW1wbGUoJnBTYW1wbGUpOworICAg
IGlmIChociA9PSBNRl9FX1NBTVBMRUFMTE9DQVRPUl9FTVBUWSkKKyAgICAgICAgcmV0dXJuIFNf
RkFMU0U7IC8vIE5vIGZyZWUgc2FtcGxlcy4gV2UnbGwgdHJ5IGFnYWluIHdoZW4gYSBzYW1wbGUg
aXMgcmVsZWFzZWQuCisKKyAgICBpZiAoRkFJTEVEKGhyKSkgLy8gRmFpbCBvbiBhbnkgb3RoZXIg
ZXJyb3IgY29kZS4KKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gRnJvbSBub3cgb24sIHdl
IGhhdmUgYSB2YWxpZCB2aWRlbyBzYW1wbGUgcG9pbnRlciwgd2hlcmUgdGhlIG1peGVyIHdpbGwK
KyAgICAvLyB3cml0ZSB0aGUgdmlkZW8gZGF0YS4KKyAgICBBU1NFUlQocFNhbXBsZSk7CisKKyAg
ICAvLyAoSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmlyZXMsIGl0IG1lYW5zIHdlIGFyZSBu
b3QgbWFuYWdpbmcgdGhlIHNhbXBsZSBwb29sIGNvcnJlY3RseS4pCisgICAgQVNTRVJUKE1GR2V0
QXR0cmlidXRlVUlOVDMyKHBTYW1wbGUsIE1GU2FtcGxlUHJlc2VudGVyX1NhbXBsZUNvdW50ZXIs
IChVSU5UMzIpLTEpID09IG1fVG9rZW5Db3VudGVyKTsKKworICAgIGlmIChtX2JSZXBhaW50KSB7
CisgICAgICAgIC8vIFJlcGFpbnQgcmVxdWVzdC4gQXNrIHRoZSBtaXhlciBmb3IgdGhlIG1vc3Qg
cmVjZW50IHNhbXBsZS4KKyAgICAgICAgU2V0RGVzaXJlZFNhbXBsZVRpbWUocFNhbXBsZS5nZXQo
KSwgbV9zY2hlZHVsZXIuTGFzdFNhbXBsZVRpbWUoKSwgbV9zY2hlZHVsZXIuRnJhbWVEdXJhdGlv
bigpKTsKKyAgICAgICAgbV9iUmVwYWludCA9IEZBTFNFOyAvLyBPSyB0byBjbGVhciB0aGlzIGZs
YWcgbm93LgorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vdCBhIHJlcGFpbnQgcmVxdWVzdC4g
Q2xlYXIgdGhlIGRlc2lyZWQgc2FtcGxlIHRpbWU7IHRoZSBtaXhlciB3aWxsCisgICAgICAgIC8v
IGdpdmUgdXMgdGhlIG5leHQgZnJhbWUgaW4gdGhlIHN0cmVhbS4KKyAgICAgICAgQ2xlYXJEZXNp
cmVkU2FtcGxlVGltZShwU2FtcGxlLmdldCgpKTsKKworICAgICAgICBpZiAobV9wQ2xvY2spIHsK
KyAgICAgICAgICAgIC8vIExhdGVuY3k6IFJlY29yZCB0aGUgc3RhcnRpbmcgdGltZSBmb3IgdGhl
IFByb2Nlc3NPdXRwdXQgb3BlcmF0aW9uLiAKKyAgICAgICAgICAgIG1fcENsb2NrLT5HZXRDb3Jy
ZWxhdGVkVGltZSgwLCAmbWl4ZXJTdGFydFRpbWUsICZzeXN0ZW1UaW1lKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIE5vdyB3ZSBhcmUgcmVhZHkgdG8gZ2V0IGFuIG91dHB1dCBzYW1wbGUg
ZnJvbSB0aGUgbWl4ZXIuIAorICAgIGRhdGFCdWZmZXIuZHdTdHJlYW1JRCA9IDA7CisgICAgZGF0
YUJ1ZmZlci5wU2FtcGxlID0gcFNhbXBsZS5nZXQoKTsKKyAgICBkYXRhQnVmZmVyLmR3U3RhdHVz
ID0gMDsKKworICAgIGhyID0gbV9wTWl4ZXItPlByb2Nlc3NPdXRwdXQoMCwgMSwgJmRhdGFCdWZm
ZXIsICZkd1N0YXR1cyk7CisKKyAgICAvLyBSZWxlYXNlIGFueSBldmVudHMgdGhhdCB3ZXJlIHJl
dHVybmVkIGZyb20gdGhlIFByb2Nlc3NPdXRwdXQgbWV0aG9kLiAKKyAgICAvLyAoV2UgZG9uJ3Qg
ZXhwZWN0IGFueSBldmVudHMgZnJvbSB0aGUgbWl4ZXIsIGJ1dCB0aGlzIGlzIGEgZ29vZCBwcmFj
dGljZS4pCisgICAgaWYgKGRhdGFCdWZmZXIucEV2ZW50cykKKyAgICAgICAgZGF0YUJ1ZmZlci5w
RXZlbnRzLT5SZWxlYXNlKCk7CisKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAvLyBS
ZXR1cm4gdGhlIHNhbXBsZSB0byB0aGUgcG9vbC4KKyAgICAgICAgSFJFU1VMVCBocjIgPSBtX1Nh
bXBsZVBvb2wucmV0dXJuU2FtcGxlKHBTYW1wbGUuZ2V0KCkpOworICAgICAgICBpZiAoRkFJTEVE
KGhyMikpCisgICAgICAgICAgICByZXR1cm4gaHIyOworCisgICAgICAgIC8vIEhhbmRsZSBzb21l
IGtub3duIGVycm9yIGNvZGVzIGZyb20gUHJvY2Vzc091dHB1dC4KKyAgICAgICAgaWYgKGhyID09
IE1GX0VfVFJBTlNGT1JNX1RZUEVfTk9UX1NFVCkgeworICAgICAgICAgICAgLy8gVGhlIG1peGVy
J3MgZm9ybWF0IGlzIG5vdCBzZXQuIE5lZ290aWF0ZSBhIG5ldyBmb3JtYXQuCisgICAgICAgICAg
ICBociA9IFJlbmVnb3RpYXRlTWVkaWFUeXBlKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaHIgPT0g
TUZfRV9UUkFOU0ZPUk1fU1RSRUFNX0NIQU5HRSkgeworICAgICAgICAgICAgLy8gVGhlcmUgd2Fz
IGEgZHluYW1pYyBtZWRpYSB0eXBlIGNoYW5nZS4gQ2xlYXIgb3VyIG1lZGlhIHR5cGUuCisgICAg
ICAgICAgICBTZXRNZWRpYVR5cGUobnVsbHB0cik7CisgICAgICAgIH0gZWxzZSBpZiAoaHIgPT0g
TUZfRV9UUkFOU0ZPUk1fTkVFRF9NT1JFX0lOUFVUKSB7CisgICAgICAgICAgICAvLyBUaGUgbWl4
ZXIgbmVlZHMgbW9yZSBpbnB1dC4gCisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHdhaXQgZm9y
IHRoZSBtaXhlciB0byBnZXQgbW9yZSBpbnB1dC4KKyAgICAgICAgICAgIG1fYlNhbXBsZU5vdGlm
eSA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UgZ290IGFu
IG91dHB1dCBzYW1wbGUgZnJvbSB0aGUgbWl4ZXIuCisKKyAgICAgICAgaWYgKG1fcENsb2NrICYm
ICFiUmVwYWludCkgeworICAgICAgICAgICAgLy8gTGF0ZW5jeTogUmVjb3JkIHRoZSBlbmRpbmcg
dGltZSBmb3IgdGhlIFByb2Nlc3NPdXRwdXQgb3BlcmF0aW9uLAorICAgICAgICAgICAgLy8gYW5k
IG5vdGlmeSB0aGUgRVZSIG9mIHRoZSBsYXRlbmN5LiAKKworICAgICAgICAgICAgbV9wQ2xvY2st
PkdldENvcnJlbGF0ZWRUaW1lKDAsICZtaXhlckVuZFRpbWUsICZzeXN0ZW1UaW1lKTsKKworICAg
ICAgICAgICAgTE9OR0xPTkcgbGF0ZW5jeVRpbWUgPSBtaXhlckVuZFRpbWUgLSBtaXhlclN0YXJ0
VGltZTsKKyAgICAgICAgICAgIE5vdGlmeUV2ZW50KEVDX1BST0NFU1NJTkdfTEFURU5DWSwgKExP
TkdfUFRSKSZsYXRlbmN5VGltZSwgMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXQgdXAg
bm90aWZpY2F0aW9uIGZvciB3aGVuIHRoZSBzYW1wbGUgaXMgcmVsZWFzZWQuCisgICAgICAgIGhy
ID0gVHJhY2tTYW1wbGUocFNhbXBsZS5nZXQoKSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICAgICAgcmV0dXJuIGhyOworCisgICAgICAgIC8vIFNjaGVkdWxlIHRoZSBzYW1wbGUu
CisgICAgICAgIGlmICgobV9GcmFtZVN0ZXAuc3RhdGUgPT0gRlJBTUVTVEVQX05PTkUpIHx8IGJS
ZXBhaW50KSB7CisgICAgICAgICAgICBociA9IERlbGl2ZXJTYW1wbGUocFNhbXBsZS5nZXQoKSwg
YlJlcGFpbnQpOworICAgICAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGhyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UgYXJlIGZyYW1l
LXN0ZXBwaW5nIChhbmQgdGhpcyBpcyBub3QgYSByZXBhaW50IHJlcXVlc3QpLgorICAgICAgICAg
ICAgaHIgPSBEZWxpdmVyRnJhbWVTdGVwU2FtcGxlKHBTYW1wbGUuZ2V0KCkpOworICAgICAgICAg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhyOworICAgICAgICB9
CisgICAgICAgIG1fYlByZXJvbGxlZCA9IHRydWU7IC8vIFdlIGhhdmUgcHJlc2VudGVkIGF0IGxl
YXN0IG9uZSBzYW1wbGUgbm93LgorICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gRGVsaXZlclNhbXBsZQorLy8KKy8vIFNjaGVkdWxlIGEgdmlk
ZW8gc2FtcGxlIGZvciBwcmVzZW50YXRpb24uCisvLworLy8gQ2FsbGVkIGZyb206CisvLyAtIFBy
b2Nlc3NPdXRwdXQKKy8vIC0gRGVsaXZlckZyYW1lU3RlcFNhbXBsZQorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OkRlbGl2ZXJTYW1wbGUoSU1GU2FtcGxlKiBwU2FtcGxlLCBCT09M
IGJSZXBhaW50KQoreworICAgIEFTU0VSVChwU2FtcGxlKTsKKworICAgIEQzRFByZXNlbnRFbmdp
bmU6OkRldmljZVN0YXRlIHN0YXRlID0gRDNEUHJlc2VudEVuZ2luZTo6RGV2aWNlT0s7CisKKyAg
ICAvLyBJZiB3ZSBhcmUgbm90IGFjdGl2ZWx5IHBsYXlpbmcsIE9SIHdlIGFyZSBzY3J1YmJpbmcg
KHJhdGUgPSAwKSBPUiB0aGlzIGlzIGEgCisgICAgLy8gcmVwYWludCByZXF1ZXN0LCB0aGVuIHdl
IG5lZWQgdG8gcHJlc2VudCB0aGUgc2FtcGxlIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UsIAorICAg
IC8vIHNjaGVkdWxlIGl0IG5vcm1hbGx5LgorCisgICAgYm9vbCBiUHJlc2VudE5vdyA9ICgobV9S
ZW5kZXJTdGF0ZSAhPSBSRU5ERVJfU1RBVEVfU1RBUlRFRCkgfHwgSXNTY3J1YmJpbmcoKSB8fCBi
UmVwYWludCk7CisKKyAgICAvLyBDaGVjayB0aGUgRDNEIGRldmljZSBzdGF0ZS4KKyAgICBIUkVT
VUxUIGhyID0gbV9wRDNEUHJlc2VudEVuZ2luZS0+Q2hlY2tEZXZpY2VTdGF0ZSgmc3RhdGUpOwor
CisgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgIGhyID0gbV9zY2hlZHVsZXIuU2NoZWR1
bGVTYW1wbGUocFNhbXBsZSwgYlByZXNlbnROb3cpOworCisgICAgaWYgKEZBSUxFRChocikpIHsK
KyAgICAgICAgLy8gTm90aWZ5IHRoZSBFVlIgdGhhdCB3ZSBoYXZlIGZhaWxlZCBkdXJpbmcgc3Ry
ZWFtaW5nLiBUaGUgRVZSIHdpbGwgbm90aWZ5IHRoZSAKKyAgICAgICAgLy8gcGlwZWxpbmUgKGll
LCBpdCB3aWxsIG5vdGlmeSB0aGUgRmlsdGVyIEdyYXBoIE1hbmFnZXIgaW4gRGlyZWN0U2hvdyBv
ciB0aGUgCisgICAgICAgIC8vIE1lZGlhIFNlc3Npb24gaW4gTWVkaWEgRm91bmRhdGlvbikuCisK
KyAgICAgICAgTm90aWZ5RXZlbnQoRUNfRVJST1JBQk9SVCwgaHIsIDApOworICAgIH0gZWxzZSBp
ZiAoc3RhdGUgPT0gRDNEUHJlc2VudEVuZ2luZTo6RGV2aWNlUmVzZXQpIHsKKyAgICAgICAgLy8g
VGhlIERpcmVjdDNEIGRldmljZSB3YXMgcmUtc2V0LiBOb3RpZnkgdGhlIEVWUi4KKyAgICAgICAg
Tm90aWZ5RXZlbnQoRUNfRElTUExBWV9DSEFOR0VELCBTX09LLCAwKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gaHI7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIElzU2FtcGxlVGltZVBh
c3NlZAorLy8KKy8vIFJldHVybnMgVFJVRSBpZiB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHBTYW1w
bGUgaXMgaW4gdGhlIHBhc3QuCisvLworLy8gUmV0dXJucyBGQUxTRSBpZiBhbGwgb3IgcGFydCBv
ZiB0aGUgc2FtcGxlIGR1cmF0aW9uIGlzIGluIHRoZSBmdXR1cmUsIG9yIGlmCisvLyB0aGUgZnVu
Y3Rpb24gY2Fubm90IGRldGVybWluZWQgKGUuZy4sIGlmIHRoZSBzYW1wbGUgbGFja3MgYSB0aW1l
IHN0YW1wKS4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQk9PTCBJc1NhbXBsZVRpbWVQYXNz
ZWQoSU1GQ2xvY2sqIHBDbG9jaywgSU1GU2FtcGxlKiBwU2FtcGxlKQoreworICAgIEFTU0VSVChw
Q2xvY2spOworICAgIEFTU0VSVChwU2FtcGxlKTsKKworICAgIGlmICghcFNhbXBsZSB8fCAhcENs
b2NrKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgTUZUSU1FIGhuc1RpbWVOb3cg
PSAwOworICAgIE1GVElNRSBobnNTeXN0ZW1UaW1lID0gMDsKKyAgICBNRlRJTUUgaG5zU2FtcGxl
U3RhcnQgPSAwOworICAgIE1GVElNRSBobnNTYW1wbGVEdXJhdGlvbiA9IDA7CisKKyAgICAvLyBU
aGUgc2FtcGxlIG1pZ2h0IGxhY2sgYSB0aW1lLXN0YW1wIG9yIGEgZHVyYXRpb24sIGFuZCB0aGUK
KyAgICAvLyBjbG9jayBtaWdodCBub3QgcmVwb3J0IGEgdGltZS4KKworICAgIEhSRVNVTFQgaHIg
PSBwQ2xvY2stPkdldENvcnJlbGF0ZWRUaW1lKDAsICZobnNUaW1lTm93LCAmaG5zU3lzdGVtVGlt
ZSk7CisKKyAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgaHIgPSBwU2FtcGxlLT5HZXRT
YW1wbGVUaW1lKCZobnNTYW1wbGVTdGFydCk7CisgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAg
ICAgIGhyID0gcFNhbXBsZS0+R2V0U2FtcGxlRHVyYXRpb24oJmhuc1NhbXBsZUR1cmF0aW9uKTsK
KworICAgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAgICAgIGlmIChobnNTYW1wbGVTdGFydCAr
IGhuc1NhbXBsZUR1cmF0aW9uIDwgaG5zVGltZU5vdykKKyAgICAgICAgICAgIHJldHVybiBUUlVF
OworICAgIH0KKworICAgIHJldHVybiBGQUxTRTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gRGVsaXZlckZyYW1lU3RlcFNhbXBsZQorLy8KKy8vIFByb2Nlc3MgYSB2aWRlbyBzYW1w
bGUgZm9yIGZyYW1lLXN0ZXBwaW5nLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIUkVTVUxU
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6
OkRlbGl2ZXJGcmFtZVN0ZXBTYW1wbGUoSU1GU2FtcGxlKiBwU2FtcGxlKQoreworICAgIEhSRVNV
TFQgaHIgPSBTX09LOworICAgIENPTVB0cjxJVW5rbm93bj4gcFVuazsKKworICAgIC8vIEZvciBy
YXRlIDAsIGRpc2NhcmQgYW55IHNhbXBsZSB0aGF0IGVuZHMgZWFybGllciB0aGFuIHRoZSBjbG9j
ayB0aW1lLgorICAgIGlmIChJc1NjcnViYmluZygpICYmIG1fcENsb2NrICYmIElzU2FtcGxlVGlt
ZVBhc3NlZChtX3BDbG9jay5nZXQoKSwgcFNhbXBsZSkpIHsKKyAgICAgICAgLy8gRGlzY2FyZCB0
aGlzIHNhbXBsZS4KKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgaWYgKG1fRnJh
bWVTdGVwLnN0YXRlID49IEZSQU1FU1RFUF9TQ0hFRFVMRUQpIHsKKyAgICAgICAgLy8gQSBmcmFt
ZSB3YXMgYWxyZWFkeSBzdWJtaXR0ZWQuIFB1dCB0aGlzIHNhbXBsZSBvbiB0aGUgZnJhbWUtc3Rl
cCBxdWV1ZSwgCisgICAgICAgIC8vIGluIGNhc2Ugd2UgYXJlIGFza2VkIHRvIHN0ZXAgdG8gdGhl
IG5leHQgZnJhbWUuIElmIGZyYW1lLXN0ZXBwaW5nIGlzCisgICAgICAgIC8vIGNhbmNlbGxlZCwg
dGhpcyBzYW1wbGUgd2lsbCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuCisgICAgICAgIG1fRnJhbWVT
dGVwLnNhbXBsZXMuYXBwZW5kKHBTYW1wbGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdl
J3JlIHJlYWR5IHRvIGZyYW1lLXN0ZXAuCisKKyAgICAgICAgLy8gRGVjcmVtZW50IHRoZSBudW1i
ZXIgb2Ygc3RlcHMuCisgICAgICAgIGlmIChtX0ZyYW1lU3RlcC5zdGVwcyA+IDApCisgICAgICAg
ICAgICBtX0ZyYW1lU3RlcC5zdGVwcy0tOworCisgICAgICAgIGlmIChtX0ZyYW1lU3RlcC5zdGVw
cyA+IDApIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBsYXN0IHN0ZXAuIERpc2Nh
cmQgdGhpcyBzYW1wbGUuCisgICAgICAgICAgICByZXR1cm4gU19PSzsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtX0ZyYW1lU3RlcC5zdGF0ZSA9PSBGUkFNRVNURVBfV0FJVElOR19TVEFSVCkg
eworICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmlnaHQgZnJhbWUsIGJ1dCB0aGUgY2xvY2sg
aGFzbid0IHN0YXJ0ZWQgeWV0LiBQdXQgdGhlCisgICAgICAgICAgICAvLyBzYW1wbGUgb24gdGhl
IGZyYW1lLXN0ZXAgcXVldWUuIFdoZW4gdGhlIGNsb2NrIHN0YXJ0cywgdGhlIHNhbXBsZQorICAg
ICAgICAgICAgLy8gd2lsbCBiZSBwcm9jZXNzZWQuCisgICAgICAgICAgICBtX0ZyYW1lU3RlcC5z
YW1wbGVzLmFwcGVuZChwU2FtcGxlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgdGhlIHJpZ2h0IGZyYW1lICphbmQqIHRoZSBjbG9jayBoYXMgc3RhcnRlZC4gRGVs
aXZlciB0aGlzIHNhbXBsZS4KKyAgICAgICAgICAgIGhyID0gRGVsaXZlclNhbXBsZShwU2FtcGxl
LCBGQUxTRSk7CisgICAgICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaHI7CisKKyAgICAgICAgICAgIC8vIFFJIGZvciBJVW5rbm93biBzbyB0aGF0IHdlIGNh
biBpZGVudGlmeSB0aGUgc2FtcGxlIGxhdGVyLgorICAgICAgICAgICAgLy8gKFBlciBDT00gcnVs
ZXMsIGFuIG9iamVjdCBhbHdheXNzIHJldHVybiB0aGUgc2FtZSBwb2ludGVyIHdoZW4gUUknZWQg
Zm9yIElVbmtub3duLikKKyAgICAgICAgICAgIGhyID0gcFNhbXBsZS0+UXVlcnlJbnRlcmZhY2Uo
X191dWlkb2YoSVVua25vd24pLCAodm9pZCoqKSZwVW5rKTsKKyAgICAgICAgICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBocjsKKworICAgICAgICAgICAgLy8gU2F2
ZSB0aGlzIHZhbHVlLgorICAgICAgICAgICAgbV9GcmFtZVN0ZXAucFNhbXBsZU5vUmVmID0gKERX
T1JEX1BUUilwVW5rLmdldCgpOyAvLyBObyBhZGQtcmVmLiAKKworICAgICAgICAgICAgLy8gTk9U
RTogV2UgZG8gbm90IEFkZFJlZiB0aGUgSVVua25vd24gcG9pbnRlciwgYmVjYXVzZSB0aGF0IHdv
dWxkIHByZXZlbnQgdGhlIAorICAgICAgICAgICAgLy8gc2FtcGxlIGZyb20gaW52b2tpbmcgdGhl
IE9uU2FtcGxlRnJlZSBjYWxsYmFjayBhZnRlciB0aGUgc2FtcGxlIGlzIHByZXNlbnRlZC4gCisg
ICAgICAgICAgICAvLyBXZSB1c2UgdGhpcyBJVW5rbm93biBwb2ludGVyIHB1cmVseSB0byBpZGVu
dGlmeSB0aGUgc2FtcGxlIGxhdGVyOyB3ZSBuZXZlcgorICAgICAgICAgICAgLy8gYXR0ZW1wdCB0
byBkZXJlZmVyZW5jZSB0aGUgcG9pbnRlci4KKworICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBz
dGF0ZS4KKyAgICAgICAgICAgIG1fRnJhbWVTdGVwLnN0YXRlID0gRlJBTUVTVEVQX1NDSEVEVUxF
RDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBUcmFja1NhbXBsZQorLy8KKy8vIEdpdmVuIGEgdmlkZW8gc2FtcGxl
LCBzZXRzIGEgY2FsbGJhY2sgdGhhdCBpcyBpbnZva2VkIHdoZW4gdGhlIHNhbXBsZSBpcyBubyAK
Ky8vIGxvbmdlciBpbiB1c2UuIAorLy8KKy8vIE5vdGU6IFRoZSBjYWxsYmFjayBtZXRob2QgcmV0
dXJucyB0aGUgc2FtcGxlIHRvIHRoZSBwb29sIG9mIGZyZWUgc2FtcGxlczsgZm9yCisvLyBtb3Jl
IGluZm9ybWF0aW9uLCBzZWUgRVZSQ3VzdG9tUHJlc2VudGVyOjpPblNhbXBsZUZyZWUoKS4gCisv
LworLy8gVGhpcyBtZXRob2QgdXNlcyB0aGUgSU1GVHJhY2tlZFNhbXBsZSBpbnRlcmZhY2Ugb24g
dGhlIHZpZGVvIHNhbXBsZS4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpUcmFj
a1NhbXBsZShJTUZTYW1wbGUqIHBTYW1wbGUpCit7CisgICAgQ09NUHRyPElNRlRyYWNrZWRTYW1w
bGU+IHBUcmFja2VkOworCisgICAgSFJFU1VMVCBociA9IHBTYW1wbGUtPlF1ZXJ5SW50ZXJmYWNl
KF9fdXVpZG9mKElNRlRyYWNrZWRTYW1wbGUpLCAodm9pZCoqKSZwVHJhY2tlZCk7CisgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKyAgICByZXR1cm4gcFRyYWNrZWQtPlNl
dEFsbG9jYXRvcigmbV9TYW1wbGVGcmVlQ0IsIG51bGxwdHIpOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlJlbGVhc2VS
ZXNvdXJjZXMoKQoreworICAgIC8vIEluY3JlbWVudCB0aGUgdG9rZW4gY291bnRlciB0byBpbmRp
Y2F0ZSB0aGF0IGFsbCBleGlzdGluZyB2aWRlbyBzYW1wbGVzCisgICAgLy8gYXJlICJzdGFsZS4i
IEFzIHRoZXNlIHNhbXBsZXMgZ2V0IHJlbGVhc2VkLCB3ZSdsbCBkaXNwb3NlIG9mIHRoZW0uIAor
ICAgIC8vCisgICAgLy8gTm90ZTogVGhlIHRva2VuIGNvdW50ZXIgaXMgcmVxdWlyZWQgYmVjYXVz
ZSB0aGUgc2FtcGxlcyBhcmUgc2hhcmVkCisgICAgLy8gYmV0d2VlbiBtb3JlIHRoYW4gb25lIHRo
cmVhZCwgYW5kIHRoZXkgYXJlIHJldHVybmVkIHRvIHRoZSBwcmVzZW50ZXIgCisgICAgLy8gdGhy
b3VnaCBhbiBhc3luY2hyb25vdXMgY2FsbGJhY2sgKE9uU2FtcGxlRnJlZSkuIFdpdGhvdXQgdGhl
IHRva2VuLCB3ZQorICAgIC8vIG1pZ2h0IGFjY2lkZW50YWxseSByZS11c2UgYSBzdGFsZSBzYW1w
bGUgYWZ0ZXIgdGhlIFJlbGVhc2VSZXNvdXJjZXMKKyAgICAvLyBtZXRob2QgcmV0dXJucy4KKwor
ICAgIG1fVG9rZW5Db3VudGVyKys7CisKKyAgICBGbHVzaCgpOworCisgICAgbV9TYW1wbGVQb29s
LmNsZWFyKCk7CisKKyAgICBpZiAobV9wRDNEUHJlc2VudEVuZ2luZSkKKyAgICAgICAgbV9wRDNE
UHJlc2VudEVuZ2luZS0+UmVsZWFzZVJlc291cmNlcygpOworfQorCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyBPblNhbXBsZUZyZWUKKy8vCisvLyBDYWxsYmFjayB0aGF0IGlzIGludm9rZWQg
d2hlbiBhIHNhbXBsZSBpcyByZWxlYXNlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sCisvLyBzZWUg
RVZSQ3VzdG9tUHJlc2VudGVyVHJhY2tTYW1wbGUoKS4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpPblNhbXBsZUZyZWUoSU1GQXN5bmNSZXN1bHQqIHBSZXN1bHQpCit7CisgICAg
Q09NUHRyPElVbmtub3duPiBwT2JqZWN0OworICAgIENPTVB0cjxJTUZTYW1wbGU+IHBTYW1wbGU7
CisgICAgQ09NUHRyPElVbmtub3duPiBwVW5rOworCisgICAgLy8gR2V0IHRoZSBzYW1wbGUgZnJv
bSB0aGUgYXN5bmMgcmVzdWx0IG9iamVjdC4KKyAgICBIUkVTVUxUIGhyID0gcFJlc3VsdC0+R2V0
T2JqZWN0KCZwT2JqZWN0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBOb3RpZnlF
dmVudChFQ19FUlJPUkFCT1JULCBociwgMCk7CisgICAgICAgIHJldHVybiBocjsKKyAgICB9Cisg
ICAgaHIgPSBwT2JqZWN0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJTUZTYW1wbGUpLCAodm9p
ZCoqKSZwU2FtcGxlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBOb3RpZnlFdmVu
dChFQ19FUlJPUkFCT1JULCBociwgMCk7CisgICAgICAgIHJldHVybiBocjsKKyAgICB9CisKKyAg
ICAvLyBJZiB0aGlzIHNhbXBsZSB3YXMgc3VibWl0dGVkIGZvciBhIGZyYW1lLXN0ZXAsIHRoZW4g
dGhlIGZyYW1lIHN0ZXAgaXMgY29tcGxldGUuCisgICAgaWYgKG1fRnJhbWVTdGVwLnN0YXRlID09
IEZSQU1FU1RFUF9TQ0hFRFVMRUQpIHsKKyAgICAgICAgLy8gUUkgdGhlIHNhbXBsZSBmb3IgSVVu
a25vd24gYW5kIGNvbXBhcmUgaXQgdG8gb3VyIGNhY2hlZCB2YWx1ZS4KKyAgICAgICAgaHIgPSBw
U2FtcGxlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJTUZTYW1wbGUpLCAodm9pZCoqKSZwVW5r
KTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAgIE5vdGlmeUV2ZW50KEVD
X0VSUk9SQUJPUlQsIGhyLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtX0ZyYW1lU3RlcC5wU2FtcGxlTm9SZWYgPT0gKERXT1JEX1BUUilwVW5r
LmdldCgpKSB7CisgICAgICAgICAgICAvLyBOb3RpZnkgdGhlIEVWUi4gCisgICAgICAgICAgICBo
ciA9IENvbXBsZXRlRnJhbWVTdGVwKHBTYW1wbGUuZ2V0KCkpOworICAgICAgICAgICAgaWYgKEZB
SUxFRChocikpIHsKKyAgICAgICAgICAgICAgICBOb3RpZnlFdmVudChFQ19FUlJPUkFCT1JULCBo
ciwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGhyOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gTm90ZTogQWx0aG91Z2ggcE9iamVjdCBpcyBhbHNvIGFuIElVbmtu
b3duIHBvaW50ZXIsIGl0J3Mgbm90IGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYmUgdGhlIGV4
YWN0IHBvaW50ZXIgdmFsdWUgcmV0dXJuZWQgdmlhIFF1ZXJ5SW50ZXJmYWNlLCBoZW5jZSB0aGUg
CisgICAgICAgIC8vIG5lZWQgZm9yIHRoZSBzZWNvbmQgUUkuCisgICAgfQorCisgICAgbV9vYmpl
Y3RMb2NrLmxvY2soKTsKKworICAgIGlmIChNRkdldEF0dHJpYnV0ZVVJTlQzMihwU2FtcGxlLmdl
dCgpLCBNRlNhbXBsZVByZXNlbnRlclNhbXBsZUNvdW50ZXIsIChVSU5UMzIpLTEpID09IG1fVG9r
ZW5Db3VudGVyKSB7CisgICAgICAgIC8vIFJldHVybiB0aGUgc2FtcGxlIHRvIHRoZSBzYW1wbGUg
cG9vbC4KKyAgICAgICAgaHIgPSBtX1NhbXBsZVBvb2wucmV0dXJuU2FtcGxlKHBTYW1wbGUuZ2V0
KCkpOworCisgICAgICAgIC8vIE5vdyB0aGF0IGEgZnJlZSBzYW1wbGUgaXMgYXZhaWxhYmxlLCBw
cm9jZXNzIG1vcmUgZGF0YSBpZiBwb3NzaWJsZS4KKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikp
CisgICAgICAgICAgICBQcm9jZXNzT3V0cHV0TG9vcCgpOworICAgIH0KKworICAgIG1fb2JqZWN0
TG9jay51bmxvY2soKTsKKworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBOb3RpZnlFdmVu
dChFQ19FUlJPUkFCT1JULCBociwgMCk7CisKKyAgICByZXR1cm4gaHI7Cit9CisKKy8vIE5vdGlm
eUV2ZW50OiBTZW5kIGFuIGV2ZW50IHRvIHRoZSBFVlIgdGhyb3VnaCBpdHMgSU1lZGlhRXZlbnRT
aW5rIGludGVyZmFjZS4KK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpD
dXN0b21WaWRlb1ByZXNlbnRlcjo6Tm90aWZ5RXZlbnQobG9uZyBFdmVudENvZGUsIExPTkdfUFRS
IFBhcmFtMSwgTE9OR19QVFIgUGFyYW0yKQoreworICAgIGlmIChtX3BNZWRpYUV2ZW50U2luaykK
KyAgICAgICAgbV9wTWVkaWFFdmVudFNpbmstPk5vdGlmeShFdmVudENvZGUsIFBhcmFtMSwgUGFy
YW0yKTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2FtcGxlUG9vbCBjbGFzcwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OlNhbXBsZVBvb2w6OlNhbXBsZVBvb2woKQorICAgIDogbV9pbml0aWFsaXplZChmYWxzZSkK
KyAgICAsIG1fcGVuZGluZygwKQoreworfQorCitNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OlNhbXBsZVBvb2w6On5TYW1wbGVQb29sKCkKK3sKK30KKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gR2V0U2FtcGxlCisvLworLy8gR2V0cyBhIHNhbXBsZSBmcm9tIHRoZSBwb29s
LiBJZiBubyBzYW1wbGVzIGFyZSBhdmFpbGFibGUsIHRoZSBtZXRob2QKKy8vIHJldHVybnMgTUZf
RV9TQU1QTEVBTExPQ0FUT1JfRU1QVFkuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNV
TFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTYW1wbGVQb29sOjpnZXRTYW1w
bGUoSU1GU2FtcGxlKiogcHBTYW1wbGUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKKworICAgIGlmICghbV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIE1GX0VfTk9UX0lO
SVRJQUxJWkVEOworCisgICAgaWYgKG1fdmlkZW9TYW1wbGVRdWV1ZS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBNRl9FX1NBTVBMRUFMTE9DQVRPUl9FTVBUWTsKKworICAgIENPTVB0cjxJTUZT
YW1wbGU+IHBTYW1wbGU7CisKKyAgICAvLyBHZXQgYSBzYW1wbGUgZnJvbSB0aGUgYWxsb2NhdGVk
IHF1ZXVlLgorCisgICAgLy8gSXQgZG9lc24ndCBtYXR0ZXIgaWYgd2UgcHVsbCB0aGVtIGZyb20g
dGhlIGhlYWQgb3IgdGFpbCBvZiB0aGUgbGlzdCwKKyAgICAvLyBidXQgd2hlbiB3ZSBnZXQgaXQg
YmFjaywgd2Ugd2FudCB0byByZS1pbnNlcnQgaXQgb250byB0aGUgb3Bwb3NpdGUgZW5kLgorICAg
IC8vIChzZWUgUmV0dXJuU2FtcGxlKQorCisgICAgcFNhbXBsZSA9IG1fdmlkZW9TYW1wbGVRdWV1
ZS50YWtlRmlyc3QoKTsKKworICAgIG1fcGVuZGluZysrOworCisgICAgLy8gR2l2ZSB0aGUgc2Ft
cGxlIHRvIHRoZSBjYWxsZXIuCisgICAgKnBwU2FtcGxlID0gcFNhbXBsZS5nZXQoKTsKKyAgICAo
KnBwU2FtcGxlKS0+QWRkUmVmKCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUmV0dXJuU2FtcGxlCisvLworLy8gUmV0dXJucyBhIHNhbXBsZSB0
byB0aGUgcG9vbC4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OlNhbXBsZVBvb2w6OnJldHVyblNhbXBsZShJTUZTYW1w
bGUqIHBTYW1wbGUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIGlm
ICghbV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIE1GX0VfTk9UX0lOSVRJQUxJWkVEOwor
CisgICAgbV92aWRlb1NhbXBsZVF1ZXVlLmFwcGVuZChwU2FtcGxlKTsKKyAgICBtX3BlbmRpbmct
LTsKKyAgICByZXR1cm4gU19PSzsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gYXJl
U2FtcGxlc1BlbmRpbmcKKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgYW55IHNhbXBsZXMgYXJlIGlu
IHVzZS4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OlNhbXBsZVBvb2w6OmFyZVNhbXBsZXNQZW5kaW5nKCkKK3sKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgaWYgKCFtX2luaXRpYWxpemVkKQorICAg
ICAgICByZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4gKG1fcGVuZGluZyA+IDApOworfQorCisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIGluaXRpYWxpemUKKy8vCisvLyBJbml0aWFsaXpl
cyB0aGUgcG9vbCB3aXRoIGEgbGlzdCBvZiBzYW1wbGVzLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2FtcGxlUG9v
bDo6aW5pdGlhbGl6ZShWaWRlb1NhbXBsZUxpc3QmIHNhbXBsZXMpCit7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9sb2NrKTsKKworICAgIGlmIChtX2luaXRpYWxpemVkKQorICAgICAgICByZXR1
cm4gTUZfRV9JTlZBTElEUkVRVUVTVDsKKworICAgIC8vIE1vdmUgdGhlc2Ugc2FtcGxlcyBpbnRv
IG91ciBhbGxvY2F0ZWQgcXVldWUuCisgICAgZm9yIChhdXRvIHNhbXBsZSA6IHNhbXBsZXMpCisg
ICAgICAgIG1fdmlkZW9TYW1wbGVRdWV1ZS5hcHBlbmQoc2FtcGxlKTsKKworICAgIG1faW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgIHNhbXBsZXMuY2xlYXIoKTsKKworICAgIHJldHVybiBTX09LOwor
fQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIGNsZWFyCisvLworLy8gUmVsZWFzZXMg
YWxsIHNhbXBsZXMuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTYW1wbGVQb29sOjpjbGVhcigpCit7CisgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIG1fdmlkZW9TYW1wbGVRdWV1ZS5jbGVhcigp
OworICAgIG1faW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBtX3BlbmRpbmcgPSAwOworICAgIHJl
dHVybiBTX09LOworfQorCisKKy8vIFNjaGVkdWxlRXZlbnQKKy8vIE1lc3NhZ2VzIGZvciB0aGUg
c2NoZWR1bGVyIHRocmVhZC4KK2VudW0gU2NoZWR1bGVFdmVudCB7CisgICAgRXZlbnRUZXJtaW5h
dGUgPSBXTV9VU0VSLAorICAgIEV2ZW50U2NoZWR1bGUgPSBXTV9VU0VSICsgMSwKKyAgICBFdmVu
dEZsdXNoID0gV01fVVNFUiArIDIKK307CisKK2NvbnN0IGludCBzY2hlZHVsZXJUaW1lb3V0ID0g
NTAwMDsKKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVsZXI6OlNj
aGVkdWxlcigpCisgICAgOiBtX3BDQihudWxscHRyKQorICAgICwgbV9wQ2xvY2sobnVsbHB0cikK
KyAgICAsIG1fZHdUaHJlYWRJRCgwKQorICAgICwgbV9oU2NoZWR1bGVyVGhyZWFkKG51bGxwdHIp
CisgICAgLCBtX2hUaHJlYWRSZWFkeUV2ZW50KG51bGxwdHIpCisgICAgLCBtX2hGbHVzaEV2ZW50
KG51bGxwdHIpCisgICAgLCBtX2ZSYXRlKDEuMGYpCisgICAgLCBtX0xhc3RTYW1wbGVUaW1lKDAp
CisgICAgLCBtX1BlckZyYW1lSW50ZXJ2YWwoMCkKKyAgICAsIG1fUGVyRnJhbWVPbmVRdWFydGVy
KDApCit7Cit9CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGVzdHJ1Y3RvcgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OlNjaGVkdWxlcjo6flNjaGVkdWxlcigpCit7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFNldEZyYW1lUmF0ZQorLy8gU3BlY2lmaWVzIHRoZSBmcmFtZSByYXRlIG9mIHRoZSB2aWRl
bywgaW4gZnJhbWVzIHBlciBzZWNvbmQuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVsZXI6OlNldEZyYW1lUmF0
ZShjb25zdCBNRlJhdGlvJiBmcHMpCit7CisgICAgVUlOVDY0IEF2Z1RpbWVQZXJGcmFtZSA9IDA7
CisKKyAgICAvLyBDb252ZXJ0IHRvIGEgZHVyYXRpb24uCisgICAgTUZGcmFtZVJhdGVUb0F2ZXJh
Z2VUaW1lUGVyRnJhbWVQdHIoKShmcHMuTnVtZXJhdG9yLCBmcHMuRGVub21pbmF0b3IsICZBdmdU
aW1lUGVyRnJhbWUpOworCisgICAgbV9QZXJGcmFtZUludGVydmFsID0gKE1GVElNRSlBdmdUaW1l
UGVyRnJhbWU7CisKKyAgICAvLyBDYWxjdWxhdGUgMS80dGggb2YgdGhpcyB2YWx1ZSwgYmVjYXVz
ZSB3ZSB1c2UgaXQgZnJlcXVlbnRseS4KKyAgICBtX1BlckZyYW1lT25lUXVhcnRlciA9IG1fUGVy
RnJhbWVJbnRlcnZhbCAvIDQ7Cit9CisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBT
dGFydFNjaGVkdWxlcgorLy8gU3RhcnRzIHRoZSBzY2hlZHVsZXIncyB3b3JrZXIgdGhyZWFkLgor
Ly8KKy8vIElNRkNsb2NrOiBQb2ludGVyIHRvIHRoZSBFVlIncyBwcmVzZW50YXRpb24gY2xvY2su
IENhbiBiZSBudWxscHRyLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIUkVTVUxUIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpTdGFydFNjaGVkdWxlcihJ
TUZDbG9jayogcENsb2NrKQoreworICAgIGlmIChtX2hTY2hlZHVsZXJUaHJlYWQuZ2V0KCkpCisg
ICAgICAgIHJldHVybiBFX1VORVhQRUNURUQ7CisKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAg
ICBEV09SRCBkd0lEID0gMDsKKworICAgIG1fcENsb2NrID0gcENsb2NrOworCisgICAgLy8gU2V0
IGEgaGlnaCB0aGUgdGltZXIgcmVzb2x1dGlvbiAoaWUsIHNob3J0IHRpbWVyIHBlcmlvZCkuCisg
ICAgdGltZUJlZ2luUGVyaW9kKDEpOworCisgICAgLy8gQ3JlYXRlIGFuIGV2ZW50IHRvIHdhaXQg
Zm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQuCisgICAgbV9oVGhyZWFkUmVhZHlFdmVudCA9IENyZWF0
ZUV2ZW50KG51bGxwdHIsIEZBTFNFLCBGQUxTRSwgbnVsbHB0cik7CisgICAgaWYgKCFtX2hUaHJl
YWRSZWFkeUV2ZW50LmdldCgpKQorICAgICAgICByZXR1cm4gSFJFU1VMVF9GUk9NX1dJTjMyKEdl
dExhc3RFcnJvcigpKTsKKworICAgIC8vIENyZWF0ZSBhbiBldmVudCB0byB3YWl0IGZvciBmbHVz
aCBjb21tYW5kcyB0byBjb21wbGV0ZS4KKyAgICBtX2hGbHVzaEV2ZW50ID0gQ3JlYXRlRXZlbnQo
bnVsbHB0ciwgRkFMU0UsIEZBTFNFLCBudWxscHRyKTsKKyAgICBpZiAoIW1faEZsdXNoRXZlbnQu
Z2V0KCkpCisgICAgICAgIHJldHVybiBIUkVTVUxUX0ZST01fV0lOMzIoR2V0TGFzdEVycm9yKCkp
OworCisgICAgLy8gQ3JlYXRlIHRoZSBzY2hlZHVsZXIgdGhyZWFkLgorICAgIG1faFNjaGVkdWxl
clRocmVhZCA9IENyZWF0ZVRocmVhZChudWxscHRyLCAwLCBTY2hlZHVsZXJUaHJlYWRQcm9jLCAo
TFBWT0lEKXRoaXMsIDAsICZkd0lEKTsKKyAgICBpZiAoIW1faFNjaGVkdWxlclRocmVhZC5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIEhSRVNVTFRfRlJPTV9XSU4zMihHZXRMYXN0RXJyb3IoKSk7CisK
KyAgICBIQU5ETEUgaE9iamVjdHNbXSA9IHsgbV9oVGhyZWFkUmVhZHlFdmVudC5nZXQoKSwgbV9o
U2NoZWR1bGVyVGhyZWFkLmdldCgpIH07CisKKyAgICAvLyBXYWl0IGZvciB0aGUgdGhyZWFkIHRv
IHNpZ25hbCB0aGUgInRocmVhZCByZWFkeSIgZXZlbnQuCisgICAgRFdPUkQgZHdXYWl0ID0gV2Fp
dEZvck11bHRpcGxlT2JqZWN0cygyLCBoT2JqZWN0cywgRkFMU0UsIElORklOSVRFKTsgLy8gV2Fp
dCBmb3IgRUlUSEVSIG9mIHRoZXNlIGhhbmRsZXMuCisgICAgaWYgKFdBSVRfT0JKRUNUXzAgIT0g
ZHdXYWl0KSB7CisgICAgICAgIC8vIFRoZSB0aHJlYWQgdGVybWluYXRlZCBlYXJseSBmb3Igc29t
ZSByZWFzb24uIFRoaXMgaXMgYW4gZXJyb3IgY29uZGl0aW9uLgorICAgICAgICBtX2hTY2hlZHVs
ZXJUaHJlYWQgPSBudWxscHRyOworICAgICAgICByZXR1cm4gRV9VTkVYUEVDVEVEOworICAgIH0K
KworICAgIG1fZHdUaHJlYWRJRCA9IGR3SUQ7CisKKyAgICByZXR1cm4gaHI7Cit9CisKKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU3RvcFNjaGVkdWxlcgorLy8KKy8vIFN0b3BzIHRoZSBz
Y2hlZHVsZXIncyB3b3JrZXIgdGhyZWFkLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIUkVT
VUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpTdG9wU2No
ZWR1bGVyKCkKK3sKKyAgICBpZiAoIW1faFNjaGVkdWxlclRocmVhZC5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIFNfT0s7CisKKyAgICAvLyBBc2sgdGhlIHNjaGVkdWxlciB0aHJlYWQgdG8gZXhpdC4K
KyAgICBQb3N0VGhyZWFkTWVzc2FnZShtX2R3VGhyZWFkSUQsIEV2ZW50VGVybWluYXRlLCAwLCAw
KTsKKworICAgIC8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gZXhpdC4KKyAgICBXYWl0Rm9yU2lu
Z2xlT2JqZWN0KG1faFNjaGVkdWxlclRocmVhZC5nZXQoKSwgSU5GSU5JVEUpOworCisgICAgLy8g
Q2xvc2UgaGFuZGxlcy4KKyAgICBtX2hTY2hlZHVsZXJUaHJlYWQgPSBudWxscHRyOworICAgIG1f
aEZsdXNoRXZlbnQgPSBudWxscHRyOworCisgICAgLy8gRGlzY2FyZCBzYW1wbGVzLgorICAgIHsK
KyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgbV9TY2hlZHVsZWRT
YW1wbGVzLmNsZWFyKCk7CisgICAgfQorCisgICAgLy8gUmVzdG9yZSB0aGUgdGltZXIgcmVzb2x1
dGlvbi4KKyAgICB0aW1lRW5kUGVyaW9kKDEpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRmx1c2gKKy8vCisvLyBGbHVzaGVzIGFsbCBzYW1w
bGVzIHRoYXQgYXJlIHF1ZXVlZCBmb3IgcHJlc2VudGF0aW9uLgorLy8KKy8vIE5vdGU6IFRoaXMg
bWV0aG9kIGlzIHN5bmNocm9ub3VzOyBpZS4sIGl0IHdhaXRzIGZvciB0aGUgZmx1c2ggb3BlcmF0
aW9uIHRvIAorLy8gY29tcGxldGUgb24gdGhlIHdvcmtlciB0aHJlYWQuCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpT
Y2hlZHVsZXI6OkZsdXNoKCkKK3sKKyAgICBpZiAobV9oU2NoZWR1bGVyVGhyZWFkLmdldCgpKSB7
CisgICAgICAgIC8vIEFzayB0aGUgc2NoZWR1bGVyIHRocmVhZCB0byBmbHVzaC4KKyAgICAgICAg
UG9zdFRocmVhZE1lc3NhZ2UobV9kd1RocmVhZElELCBFdmVudEZsdXNoLCAwLCAwKTsKKworICAg
ICAgICAvLyBXYWl0IGZvciB0aGUgc2NoZWR1bGVyIHRocmVhZCB0byBzaWduYWwgdGhlIGZsdXNo
IGV2ZW50LAorICAgICAgICAvLyBPUiBmb3IgdGhlIHRocmVhZCB0byB0ZXJtaW5hdGUuCisgICAg
ICAgIEhBTkRMRSBvYmplY3RzW10gPSB7IG1faEZsdXNoRXZlbnQuZ2V0KCksIG1faFNjaGVkdWxl
clRocmVhZC5nZXQoKSB9OworCisgICAgICAgIFdhaXRGb3JNdWx0aXBsZU9iamVjdHMoc2l6ZW9m
KG9iamVjdHMpIC8gc2l6ZW9mKG9iamVjdHNbMF0pLCBvYmplY3RzLCBGQUxTRSwgc2NoZWR1bGVy
VGltZW91dCk7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gU2NoZWR1bGVTYW1wbGUKKy8vCisvLyBTY2hlZHVsZXMgYSBuZXcgc2Ft
cGxlIGZvciBwcmVzZW50YXRpb24uCisvLworLy8gcFNhbXBsZTogUG9pbnRlciB0byB0aGUgc2Ft
cGxlLgorLy8gYlByZXNlbnROb3c6IElmIFRSVUUsIHRoZSBzYW1wbGUgaXMgcHJlc2VudGVkIGlt
bWVkaWF0ZWx5LiBPdGhlcndpc2UsIHRoZQorLy8gICAgICAgICAgICAgIHNhbXBsZSdzIHRpbWUg
c3RhbXAgaXMgdXNlZCB0byBzY2hlZHVsZSB0aGUgc2FtcGxlLgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1
bGVyOjpTY2hlZHVsZVNhbXBsZShJTUZTYW1wbGUgKnBTYW1wbGUsIEJPT0wgYlByZXNlbnROb3cp
Cit7CisgICAgaWYgKCFtX3BDQikKKyAgICAgICAgcmV0dXJuIE1GX0VfTk9UX0lOSVRJQUxJWkVE
OworCisgICAgaWYgKCFtX2hTY2hlZHVsZXJUaHJlYWQuZ2V0KCkpCisgICAgICAgIHJldHVybiBN
Rl9FX05PVF9JTklUSUFMSVpFRDsKKworICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgIERXT1JE
IGR3RXhpdENvZGUgPSAwOworCisgICAgR2V0RXhpdENvZGVUaHJlYWQobV9oU2NoZWR1bGVyVGhy
ZWFkLmdldCgpLCAmZHdFeGl0Q29kZSk7CisgICAgaWYgKGR3RXhpdENvZGUgIT0gU1RJTExfQUNU
SVZFKQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgaWYgKGJQcmVzZW50Tm93IHx8ICFt
X3BDbG9jaykgeworICAgICAgICAvLyBQcmVzZW50IHRoZSBzYW1wbGUgaW1tZWRpYXRlbHkuCisg
ICAgICAgIG1fcENCLT5QcmVzZW50U2FtcGxlKHBTYW1wbGUsIDApOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIFF1ZXVlIHRoZSBzYW1wbGUgYW5kIGFzayB0aGUgc2NoZWR1bGVyIHRocmVhZCB0
byB3YWtlIHVwLgorICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICBt
X1NjaGVkdWxlZFNhbXBsZXMuYXBwZW5kKHBTYW1wbGUpOworCisgICAgICAgIGlmIChTVUNDRUVE
RUQoaHIpKQorICAgICAgICAgICAgUG9zdFRocmVhZE1lc3NhZ2UobV9kd1RocmVhZElELCBFdmVu
dFNjaGVkdWxlLCAwLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFByb2Nlc3NTYW1wbGVzSW5RdWV1ZQorLy8KKy8vIFByb2Nlc3Nl
cyBhbGwgdGhlIHNhbXBsZXMgaW4gdGhlIHF1ZXVlLgorLy8KKy8vIHBsTmV4dFNsZWVwOiBSZWNl
aXZlcyB0aGUgbGVuZ3RoIG9mIHRpbWUgdGhlIHNjaGVkdWxlciB0aHJlYWQgc2hvdWxkIHNsZWVw
CisvLyAgICAgICAgICAgICAgYmVmb3JlIGl0IGNhbGxzIFByb2Nlc3NTYW1wbGVzSW5RdWV1ZSBh
Z2Fpbi4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OlNjaGVkdWxlcjo6UHJvY2Vzc1NhbXBsZXNJblF1ZXVlKExPTkcq
IHBsTmV4dFNsZWVwKQoreworICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgIExPTkcgbFdhaXQg
PSAwOworICAgIENPTVB0cjxJTUZTYW1wbGU+IHBTYW1wbGU7CisKKyAgICAvLyBQcm9jZXNzIHNh
bXBsZXMgdW50aWwgdGhlIHF1ZXVlIGlzIGVtcHR5IG9yIHVudGlsIHRoZSB3YWl0IHRpbWUgPiAw
LgorCisgICAgLy8gTm90ZTogRGVxdWV1ZSByZXR1cm5zIFNfRkFMU0Ugd2hlbiB0aGUgcXVldWUg
aXMgZW1wdHkuCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgICAgICBpZiAobV9TY2hl
ZHVsZWRTYW1wbGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIHBTYW1wbGUgPSBtX1NjaGVkdWxlZFNhbXBsZXMudGFrZUZpcnN0KCk7CisgICAgICAgIH0K
KyAgICAgICAgLy8gUHJvY2VzcyB0aGUgbmV4dCBzYW1wbGUgaW4gdGhlIHF1ZXVlLiBJZiB0aGUg
c2FtcGxlIGlzIG5vdCByZWFkeQorICAgICAgICAvLyBmb3IgcHJlc2VudGF0aW9uLiB0aGUgdmFs
dWUgcmV0dXJuZWQgaW4gbFdhaXQgaXMgPiAwLCB3aGljaAorICAgICAgICAvLyBtZWFucyB0aGUg
c2NoZWR1bGVyIHNob3VsZCBzbGVlcCBmb3IgdGhhdCBhbW91bnQgb2YgdGltZS4KKworICAgICAg
ICBociA9IFByb2Nlc3NTYW1wbGUocFNhbXBsZS5nZXQoKSwgJmxXYWl0KTsKKworICAgICAgICBp
ZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChsV2FpdCA+
IDApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgd2FpdCB0aW1l
IGlzIHplcm8sIGl0IG1lYW5zIHdlIHN0b3BwZWQgYmVjYXVzZSB0aGUgcXVldWUgaXMKKyAgICAv
LyBlbXB0eSAob3IgYW4gZXJyb3Igb2NjdXJyZWQpLiBTZXQgdGhlIHdhaXQgdGltZSB0byBpbmZp
bml0ZTsgdGhpcyB3aWxsCisgICAgLy8gbWFrZSB0aGUgc2NoZWR1bGVyIHRocmVhZCBzbGVlcCB1
bnRpbCBpdCBnZXRzIGFub3RoZXIgdGhyZWFkIG1lc3NhZ2UuCisgICAgaWYgKCFsV2FpdCkKKyAg
ICAgICAgbFdhaXQgPSBJTkZJTklURTsKKworICAgICpwbE5leHRTbGVlcCA9IGxXYWl0OworICAg
IHJldHVybiBocjsKK30KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQcm9jZXNzU2Ft
cGxlCisvLworLy8gUHJvY2Vzc2VzIGEgc2FtcGxlLgorLy8KKy8vIHBsTmV4dFNsZWVwOiBSZWNl
aXZlcyB0aGUgbGVuZ3RoIG9mIHRpbWUgdGhlIHNjaGVkdWxlciB0aHJlYWQgc2hvdWxkIHNsZWVw
LgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVsZXI6OlByb2Nlc3NTYW1wbGUoSU1GU2FtcGxlKiBwU2Ft
cGxlLCBMT05HKiBwbE5leHRTbGVlcCkKK3sKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAg
IExPTkdMT05HIGhuc1ByZXNlbnRhdGlvblRpbWUgPSAwOworICAgIExPTkdMT05HIGhuc1RpbWVO
b3cgPSAwOworICAgIE1GVElNRSBobnNTeXN0ZW1UaW1lID0gMDsKKworICAgIEJPT0wgYlByZXNl
bnROb3cgPSBUUlVFOworICAgIExPTkcgbE5leHRTbGVlcCA9IDA7CisKKyAgICBpZiAobV9wQ2xv
Y2spIHsKKyAgICAgICAgLy8gR2V0IHRoZSBzYW1wbGUncyB0aW1lIHN0YW1wLiBJdCBpcyB2YWxp
ZCBmb3IgYSBzYW1wbGUgdG8KKyAgICAgICAgLy8gaGF2ZSBubyB0aW1lIHN0YW1wLgorICAgICAg
ICBociA9IHBTYW1wbGUtPkdldFNhbXBsZVRpbWUoJmhuc1ByZXNlbnRhdGlvblRpbWUpOworCisg
ICAgICAgIC8vIEdldCB0aGUgY2xvY2sgdGltZS4gKEJ1dCBpZiB0aGUgc2FtcGxlIGRvZXMgbm90
IGhhdmUgYSB0aW1lIHN0YW1wLCAKKyAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0aGUgY2xvY2sg
dGltZS4pCisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgaHIgPSBtX3BD
bG9jay0+R2V0Q29ycmVsYXRlZFRpbWUoMCwgJmhuc1RpbWVOb3csICZobnNTeXN0ZW1UaW1lKTsK
KworICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHRpbWUgdW50aWwgdGhlIHNhbXBsZSdzIHByZXNl
bnRhdGlvbiB0aW1lLiAKKyAgICAgICAgLy8gQSBuZWdhdGl2ZSB2YWx1ZSBtZWFucyB0aGUgc2Ft
cGxlIGlzIGxhdGUuCisgICAgICAgIExPTkdMT05HIGhuc0RlbHRhID0gaG5zUHJlc2VudGF0aW9u
VGltZSAtIGhuc1RpbWVOb3c7CisgICAgICAgIGlmIChtX2ZSYXRlIDwgMCkgeworICAgICAgICAg
ICAgLy8gRm9yIHJldmVyc2UgcGxheWJhY2ssIHRoZSBjbG9jayBydW5zIGJhY2t3YXJkLiBUaGVy
ZWZvcmUgdGhlIGRlbHRhIGlzIHJldmVyc2VkLgorICAgICAgICAgICAgaG5zRGVsdGEgPSAtaG5z
RGVsdGE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaG5zRGVsdGEgPCAtbV9QZXJGcmFtZU9u
ZVF1YXJ0ZXIpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgc2FtcGxlIGlzIGxhdGUuIAorICAgICAg
ICAgICAgYlByZXNlbnROb3cgPSBUUlVFOworICAgICAgICB9IGVsc2UgaWYgKGhuc0RlbHRhID4o
MyAqIG1fUGVyRnJhbWVPbmVRdWFydGVyKSkgeworICAgICAgICAgICAgLy8gVGhpcyBzYW1wbGUg
aXMgc3RpbGwgdG9vIGVhcmx5LiBHbyB0byBzbGVlcC4KKyAgICAgICAgICAgIGxOZXh0U2xlZXAg
PSBNRlRpbWVUb01zZWMoaG5zRGVsdGEgLSAoMyAqIG1fUGVyRnJhbWVPbmVRdWFydGVyKSk7CisK
KyAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgc2xlZXAgdGltZSBmb3IgdGhlIGNsb2NrIHJhdGUu
IChUaGUgcHJlc2VudGF0aW9uIGNsb2NrIHJ1bnMKKyAgICAgICAgICAgIC8vIGF0IG1fZlJhdGUs
IGJ1dCBzbGVlcGluZyB1c2VzIHRoZSBzeXN0ZW0gY2xvY2suKQorICAgICAgICAgICAgbE5leHRT
bGVlcCA9IChMT05HKShsTmV4dFNsZWVwIC8gZmFic2YobV9mUmF0ZSkpOworCisgICAgICAgICAg
ICAvLyBEb24ndCBwcmVzZW50IHlldC4KKyAgICAgICAgICAgIGJQcmVzZW50Tm93ID0gRkFMU0U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYlByZXNlbnROb3cpCisgICAgICAgIGhyID0g
bV9wQ0ItPlByZXNlbnRTYW1wbGUocFNhbXBsZSwgaG5zUHJlc2VudGF0aW9uVGltZSk7CisgICAg
ZWxzZSB7CisgICAgICAgIC8vIFRoZSBzYW1wbGUgaXMgbm90IHJlYWR5IHlldC4gUmV0dXJuIGl0
IHRvIHRoZSBxdWV1ZS4KKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAg
ICAgbV9TY2hlZHVsZWRTYW1wbGVzLnByZXBlbmQocFNhbXBsZSk7CisgICAgfQorCisgICAgKnBs
TmV4dFNsZWVwID0gbE5leHRTbGVlcDsKKworICAgIHJldHVybiBocjsKK30KKworCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBTY2hlZHVsZXJUaHJlYWRQcm9jIChzdGF0aWMgbWV0aG9kKQor
Ly8gCisvLyBUaHJlYWRQcm9jIGZvciB0aGUgc2NoZWR1bGVyIHRocmVhZC4KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworRFdPUkQgV0lOQVBJIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6U2NoZWR1bGVyOjpTY2hlZHVsZXJUaHJlYWRQcm9jKExQVk9JRCBscFBhcmFtZXRlcikK
K3sKKyAgICBTY2hlZHVsZXIqIHBTY2hlZHVsZXIgPSByZWludGVycHJldF9jYXN0PFNjaGVkdWxl
cio+KGxwUGFyYW1ldGVyKTsKKyAgICBpZiAoIXBTY2hlZHVsZXIpCisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxEV09SRD4oLTEpOworICAgIHJldHVybiBwU2NoZWR1bGVyLT5TY2hlZHVsZXJU
aHJlYWRQcm9jUHJpdmF0ZSgpOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTY2hl
ZHVsZXJUaHJlYWRQcm9jUHJpdmF0ZQorLy8gCisvLyBOb24tc3RhdGljIHZlcnNpb24gb2YgdGhl
IFRocmVhZFByb2MuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RXT1JEIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpTY2hlZHVsZXJUaHJlYWRQcm9jUHJp
dmF0ZSgpCit7CisgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgTVNHIG1zZzsKKyAgICBMT05H
IGxXYWl0ID0gSU5GSU5JVEU7CisgICAgQk9PTCBiRXhpdFRocmVhZCA9IEZBTFNFOworCisgICAg
Ly8gRm9yY2UgdGhlIHN5c3RlbSB0byBjcmVhdGUgYSBtZXNzYWdlIHF1ZXVlIGZvciB0aGlzIHRo
cmVhZC4KKyAgICAvLyAoU2VlIE1TRE4gZG9jdW1lbnRhdGlvbiBmb3IgUG9zdFRocmVhZE1lc3Nh
Z2UuKQorICAgIFBlZWtNZXNzYWdlKCZtc2csIG51bGxwdHIsIFdNX1VTRVIsIFdNX1VTRVIsIFBN
X05PUkVNT1ZFKTsKKworICAgIC8vIFNpZ25hbCB0byB0aGUgc2NoZWR1bGVyIHRoYXQgdGhlIHRo
cmVhZCBpcyByZWFkeS4KKyAgICBTZXRFdmVudChtX2hUaHJlYWRSZWFkeUV2ZW50LmdldCgpKTsK
KworICAgIHdoaWxlICghYkV4aXRUaHJlYWQpIHsKKyAgICAgICAgLy8gV2FpdCBmb3IgYSB0aHJl
YWQgbWVzc2FnZSBPUiB1bnRpbCB0aGUgd2FpdCB0aW1lIGV4cGlyZXMuCisgICAgICAgIERXT1JE
IGR3UmVzdWx0ID0gTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0cygwLCBudWxscHRyLCBGQUxTRSwg
bFdhaXQsIFFTX1BPU1RNRVNTQUdFKTsKKworICAgICAgICBpZiAoZHdSZXN1bHQgPT0gV0FJVF9U
SU1FT1VUKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSB0aW1lZCBvdXQsIHRoZW4gcHJvY2VzcyB0
aGUgc2FtcGxlcyBpbiB0aGUgcXVldWUKKyAgICAgICAgICAgIGhyID0gUHJvY2Vzc1NhbXBsZXNJ
blF1ZXVlKCZsV2FpdCk7CisgICAgICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAg
ICAgICBiRXhpdFRocmVhZCA9IFRSVUU7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoUGVl
a01lc3NhZ2UoJm1zZywgbnVsbHB0ciwgMCwgMCwgUE1fUkVNT1ZFKSkgeworICAgICAgICAgICAg
Qk9PTCBiUHJvY2Vzc1NhbXBsZXMgPSBUUlVFOworCisgICAgICAgICAgICBzd2l0Y2ggKG1zZy5t
ZXNzYWdlKSB7CisgICAgICAgICAgICBjYXNlIEV2ZW50VGVybWluYXRlOgorICAgICAgICAgICAg
ICAgIGJFeGl0VGhyZWFkID0gVFJVRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgY2FzZSBFdmVudEZsdXNoOgorICAgICAgICAgICAgICAgIC8vIEZsdXNoaW5nOiBDbGVh
ciB0aGUgc2FtcGxlIHF1ZXVlIGFuZCBzZXQgdGhlIGV2ZW50LgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fbG9jayk7CisgICAgICAgICAg
ICAgICAgICAgIG1fU2NoZWR1bGVkU2FtcGxlcy5jbGVhcigpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBsV2FpdCA9IElORklOSVRFOworICAgICAgICAgICAgICAgIFNldEV2
ZW50KG1faEZsdXNoRXZlbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBjYXNlIEV2ZW50U2NoZWR1bGU6CisgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBh
cyBtYW55IHNhbXBsZXMgYXMgd2UgY2FuLgorICAgICAgICAgICAgICAgIGlmIChiUHJvY2Vzc1Nh
bXBsZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgaHIgPSBQcm9jZXNzU2FtcGxlc0luUXVldWUo
JmxXYWl0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAg
ICAgICAgICAgICAgICBiRXhpdFRocmVhZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIGJQ
cm9jZXNzU2FtcGxlcyA9IChsV2FpdCAhPSBJTkZJTklURSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAvLyBzd2l0Y2ggIAorCisgICAg
ICAgIH0gLy8gd2hpbGUgUGVla01lc3NhZ2UKKworICAgIH0gLy8gd2hpbGUgKCFiRXhpdFRocmVh
ZCkKKworICAgIHJldHVybiAoU1VDQ0VFREVEKGhyKSA/IDAgOiAxKTsKK30KKworY29uc3QgaW50
IHByZXNlbnRlckJ1ZmZlckNvdW50ID0gMzsKKworc3RhdGljIEhSRVNVTFQgRmluZEFkYXB0ZXIo
SURpcmVjdDNEOSAqcEQzRDksIEhNT05JVE9SIGhNb25pdG9yLCBVSU5UICpwdUFkYXB0ZXJJRCk7
CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29uc3RydWN0b3IKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVz
ZW50RW5naW5lOjpEM0RQcmVzZW50RW5naW5lKEhSRVNVTFQmIGhyKQorICAgIDogbV9od25kKG51
bGxwdHIpCisgICAgLCBtX0RldmljZVJlc2V0VG9rZW4oMCkKKyAgICAsIG1fcEQzRDkobnVsbHB0
cikKKyAgICAsIG1fcERldmljZShudWxscHRyKQorICAgICwgbV9wRGV2aWNlTWFuYWdlcihudWxs
cHRyKQorICAgICwgbV9wU3VyZmFjZVJlcGFpbnQobnVsbHB0cikKKyAgICAsIG1fd2lkdGgoMCkK
KyAgICAsIG1faGVpZ2h0KDApCit7CisgICAgU2V0UmVjdEVtcHR5KCZtX3JjRGVzdFJlY3QpOwor
CisgICAgWmVyb01lbW9yeSgmbV9EaXNwbGF5TW9kZSwgc2l6ZW9mKG1fRGlzcGxheU1vZGUpKTsK
KworICAgIGhyID0gSW5pdGlhbGl6ZUQzRCgpOworCisgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgIHJldHVybjsKKworICAgIGhyID0gQ3JlYXRlRDNERGV2aWNlKCk7Cit9CisKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gRGVzdHJ1Y3RvcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CitNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQzRFByZXNlbnRFbmdpbmU6On5E
M0RQcmVzZW50RW5naW5lKCkKK3sKK30KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBH
ZXRTZXJ2aWNlCisvLworLy8gUmV0dXJucyBhIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gdGhlIHBy
ZXNlbnRlciBlbmdpbmUuCisvLyBUaGUgcHJlc2VudGVyIGNhbGxzIHRoaXMgbWV0aG9kIGZyb20g
aW5zaWRlIGl0J3MgaW1wbGVtZW50YXRpb24gb2YgCisvLyBJTUZHZXRTZXJ2aWNlOjpHZXRTZXJ2
aWNlLgorLy8KKy8vIENsYXNzZXMgdGhhdCBkZXJpdmUgZnJvbSBEM0RQcmVzZW50RW5naW5lIGNh
biBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byByZXR1cm4gCisvLyBvdGhlciBpbnRlcmZhY2VzLiBJ
ZiB5b3Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QsIGNhbGwgdGhlIGJhc2UgbWV0aG9kIGZyb20gdGhl
IAorLy8gZGVyaXZlZCBjbGFzcy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQzRFByZXNlbnRFbmdpbmU6OkdldFNl
cnZpY2UoUkVGR1VJRCBndWlkU2VydmljZSwgUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHYpCit7Cisg
ICAgQVNTRVJUKHBwdik7CisKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgIGlmIChyaWlk
ID09IF9fdXVpZG9mKElEaXJlY3QzRERldmljZU1hbmFnZXI5KSkgeworICAgICAgICBpZiAoIW1f
cERldmljZU1hbmFnZXIpCisgICAgICAgICAgICBociA9IE1GX0VfVU5TVVBQT1JURURfU0VSVklD
RTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAqcHB2ID0gbV9wRGV2aWNlTWFuYWdlci5n
ZXQoKTsKKyAgICAgICAgICAgIG1fcERldmljZU1hbmFnZXItPkFkZFJlZigpOworICAgICAgICB9
CisgICAgfSBlbHNlCisgICAgICAgIGhyID0gTUZfRV9VTlNVUFBPUlRFRF9TRVJWSUNFOworCisg
ICAgcmV0dXJuIGhyOworfQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENoZWNrRm9y
bWF0CisvLworLy8gUXVlcmllcyB3aGV0aGVyIHRoZSBEM0RQcmVzZW50RW5naW5lIGNhbiB1c2Ug
YSBzcGVjaWZpZWQgRGlyZWN0M0QgZm9ybWF0LgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitI
UkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2lu
ZTo6Q2hlY2tGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKK3sKKyAgICBIUkVTVUxUIGhyID0gU19P
SzsKKworICAgIFVJTlQgdUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7CisgICAgRDNEREVW
VFlQRSB0eXBlID0gRDNEREVWVFlQRV9IQUw7CisKKyAgICBEM0RESVNQTEFZTU9ERSBtb2RlOwor
ICAgIEQzRERFVklDRV9DUkVBVElPTl9QQVJBTUVURVJTIHBhcmFtczsKKworICAgIGlmIChtX3BE
ZXZpY2UpIHsKKyAgICAgICAgaHIgPSBtX3BEZXZpY2UtPkdldENyZWF0aW9uUGFyYW1ldGVycygm
cGFyYW1zKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7
CisKKyAgICAgICAgdUFkYXB0ZXIgPSBwYXJhbXMuQWRhcHRlck9yZGluYWw7CisgICAgICAgIHR5
cGUgPSBwYXJhbXMuRGV2aWNlVHlwZTsKKyAgICB9CisKKyAgICBociA9IG1fcEQzRDktPkdldEFk
YXB0ZXJEaXNwbGF5TW9kZSh1QWRhcHRlciwgJm1vZGUpOworICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICByZXR1cm4gaHI7CisKKyAgICByZXR1cm4gbV9wRDNEOS0+Q2hlY2tEZXZpY2VUeXBl
KHVBZGFwdGVyLCB0eXBlLCBtb2RlLkZvcm1hdCwgZm9ybWF0LCBUUlVFKTsKK30KKworCisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNldFZpZGVvV2luZG93CisvLyAKKy8vIFNldHMgdGhl
IHdpbmRvdyB3aGVyZSB0aGUgdmlkZW8gaXMgZHJhd24uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50
RW5naW5lOjpTZXRWaWRlb1dpbmRvdyhIV05EIGh3bmQpCit7CisgICAgLy8gQXNzZXJ0aW9uczog
RVZSQ3VzdG9tUHJlc2VudGVyIGNoZWNrcyB0aGVzZSBjYXNlcy4KKyAgICBBU1NFUlQoSXNXaW5k
b3coaHduZCkpOworICAgIEFTU0VSVChod25kICE9IG1faHduZCk7CisKKyAgICB7CisgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fT2JqZWN0TG9jayk7CisgICAgICAgIG1faHduZCA9IGh3bmQ7
CisgICAgICAgIFVwZGF0ZURlc3RSZWN0KCk7CisgICAgfQorCisgICAgLy8gUmVjcmVhdGUgdGhl
IGRldmljZS4KKyAgICByZXR1cm4gQ3JlYXRlRDNERGV2aWNlKCk7Cit9CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFNldERlc3RpbmF0aW9uUmVjdAorLy8gCisvLyBTZXRzIHRoZSByZWdp
b24gd2l0aGluIHRoZSB2aWRlbyB3aW5kb3cgd2hlcmUgdGhlIHZpZGVvIGlzIGRyYXduLgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6U2V0RGVzdGluYXRpb25SZWN0KGNvbnN0IFJFQ1Qm
IHJjRGVzdCkKK3sKKyAgICBpZiAoRXF1YWxSZWN0KCZyY0Rlc3QsICZtX3JjRGVzdFJlY3QpKQor
ICAgICAgICByZXR1cm4gU19PSzsgLy8gTm8gY2hhbmdlLgorCisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9PYmplY3RMb2NrKTsKKworICAgIG1fcmNEZXN0UmVjdCA9IHJjRGVzdDsKKyAgICBVcGRh
dGVEZXN0UmVjdCgpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKKworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBDcmVhdGVWaWRlb1NhbXBsZXMKKy8vIAorLy8gQ3JlYXRlcyB2aWRlbyBz
YW1wbGVzIGJhc2VkIG9uIGEgc3BlY2lmaWVkIG1lZGlhIHR5cGUuCisvLyAKKy8vIHBGb3JtYXQ6
IE1lZGlhIHR5cGUgdGhhdCBkZXNjcmliZXMgdGhlIHZpZGVvIGZvcm1hdC4KKy8vIHZpZGVvU2Ft
cGxlUXVldWU6IExpc3QgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHZpZGVvIHNhbXBsZXMuCisvLwor
Ly8gTm90ZTogRm9yIGVhY2ggdmlkZW8gc2FtcGxlLCB0aGUgbWV0aG9kIGNyZWF0ZXMgYSBzd2Fw
IGNoYWluIHdpdGggYQorLy8gc2luZ2xlIGJhY2sgYnVmZmVyLiBUaGUgdmlkZW8gc2FtcGxlIG9i
amVjdCBob2xkcyBhIHBvaW50ZXIgdG8gdGhlIHN3YXAKKy8vIGNoYWluJ3MgYmFjayBidWZmZXIg
c3VyZmFjZS4gVGhlIG1peGVyIHJlbmRlcnMgdG8gdGhpcyBzdXJmYWNlLCBhbmQgdGhlCisvLyBE
M0RQcmVzZW50RW5naW5lIHJlbmRlcnMgdGhlIHZpZGVvIGZyYW1lIGJ5IHByZXNlbnRpbmcgdGhl
IHN3YXAgY2hhaW4uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpDcmVhdGVWaWRlb1Nh
bXBsZXMoSU1GTWVkaWFUeXBlKiBwRm9ybWF0LCBWaWRlb1NhbXBsZUxpc3QmIHZpZGVvU2FtcGxl
UXVldWUpCit7CisgICAgaWYgKCFtX2h3bmQpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURS
RVFVRVNUOworCisgICAgaWYgKCFwRm9ybWF0KQorICAgICAgICByZXR1cm4gTUZfRV9VTkVYUEVD
VEVEOworCisgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJT
IHBwOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9PYmplY3RMb2NrKTsKKworICAgIFJlbGVh
c2VSZXNvdXJjZXMoKTsKKworICAgIC8vIEdldCB0aGUgc3dhcCBjaGFpbiBwYXJhbWV0ZXJzIGZy
b20gdGhlIG1lZGlhIHR5cGUuCisgICAgaHIgPSBHZXRTd2FwQ2hhaW5QcmVzZW50UGFyYW1ldGVy
cyhwRm9ybWF0LCAmcHApOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIFJlbGVhc2VS
ZXNvdXJjZXMoKTsKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIFVwZGF0ZURlc3RS
ZWN0KCk7CisKKyAgICAvLyBDcmVhdGUgdGhlIHZpZGVvIHNhbXBsZXMuCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBwcmVzZW50ZXJCdWZmZXJDb3VudDsgaSsrKSB7CisgICAgICAgIENPTVB0cjxJ
RGlyZWN0M0RTd2FwQ2hhaW45PiBwU3dhcENoYWluOyAvLyBTd2FwIGNoYWluCisgICAgICAgIENP
TVB0cjxJTUZTYW1wbGU+IHBWaWRlb1NhbXBsZTsgLy8gU2FtcGxlCisKKyAgICAgICAgLy8gQ3Jl
YXRlIGEgbmV3IHN3YXAgY2hhaW4uCisgICAgICAgIGhyID0gbV9wRGV2aWNlLT5DcmVhdGVBZGRp
dGlvbmFsU3dhcENoYWluKCZwcCwgJnBTd2FwQ2hhaW4pOworICAgICAgICBpZiAoRkFJTEVEKGhy
KSkgeworICAgICAgICAgICAgUmVsZWFzZVJlc291cmNlcygpOworICAgICAgICAgICAgcmV0dXJu
IGhyOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSB2aWRlbyBzYW1wbGUgZnJv
bSB0aGUgc3dhcCBjaGFpbi4KKyAgICAgICAgaHIgPSBDcmVhdGVEM0RTYW1wbGUocFN3YXBDaGFp
bi5nZXQoKSwgJnBWaWRlb1NhbXBsZSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAg
ICAgICAgICBSZWxlYXNlUmVzb3VyY2VzKCk7CisgICAgICAgICAgICByZXR1cm4gaHI7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBBZGQgaXQgdG8gdGhlIGxpc3QuCisgICAgICAgIHZpZGVvU2Ft
cGxlUXVldWUuYXBwZW5kKHBWaWRlb1NhbXBsZSk7CisKKyAgICAgICAgLy8gU2V0IHRoZSBzd2Fw
IGNoYWluIHBvaW50ZXIgYXMgYSBjdXN0b20gYXR0cmlidXRlIG9uIHRoZSBzYW1wbGUuIFRoaXMg
a2VlcHMKKyAgICAgICAgLy8gYSByZWZlcmVuY2UgY291bnQgb24gdGhlIHN3YXAgY2hhaW4sIHNv
IHRoYXQgdGhlIHN3YXAgY2hhaW4gaXMga2VwdCBhbGl2ZQorICAgICAgICAvLyBmb3IgdGhlIGR1
cmF0aW9uIG9mIHRoZSBzYW1wbGUncyBsaWZldGltZS4KKyAgICAgICAgaHIgPSBwVmlkZW9TYW1w
bGUtPlNldFVua25vd24oTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVTd2FwQ2hhaW4sIHBTd2FwQ2hh
aW4uZ2V0KCkpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAgICAgUmVsZWFz
ZVJlc291cmNlcygpOworICAgICAgICAgICAgcmV0dXJuIGhyOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gTGV0IHRoZSBkZXJpdmVkIGNsYXNzIGNyZWF0ZSBhbnkgYWRkaXRpb25hbCBEM0Qg
cmVzb3VyY2VzIHRoYXQgaXQgbmVlZHMuCisgICAgaHIgPSBPbkNyZWF0ZVZpZGVvU2FtcGxlcyhw
cCk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgUmVsZWFzZVJlc291cmNlcygpOwor
ICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgcmV0dXJuIGhyOworfQorCisKKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVsZWFzZVJlc291cmNlcworLy8gCisvLyBSZWxlYXNl
ZCBEaXJlY3QzRCByZXNvdXJjZXMgdXNlZCBieSB0aGlzIG9iamVjdC4gCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQ
cmVzZW50RW5naW5lOjpSZWxlYXNlUmVzb3VyY2VzKCkKK3sKKyAgICAvLyBMZXQgdGhlIGRlcml2
ZWQgY2xhc3MgcmVsZWFzZSBhbnkgcmVzb3VyY2VzIGl0IGNyZWF0ZWQuCisgICAgT25SZWxlYXNl
UmVzb3VyY2VzKCk7CisKKyAgICBtX3BTdXJmYWNlUmVwYWludCA9IG51bGxwdHI7Cit9CisKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ2hlY2tEZXZpY2VTdGF0ZQorLy8gCisvLyBUZXN0
cyB0aGUgRGlyZWN0M0QgZGV2aWNlIHN0YXRlLgorLy8KKy8vIHBTdGF0ZTogUmVjZWl2ZXMgdGhl
IHN0YXRlIG9mIHRoZSBkZXZpY2UgKE9LLCByZXNldCwgcmVtb3ZlZCkKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQz
RFByZXNlbnRFbmdpbmU6OkNoZWNrRGV2aWNlU3RhdGUoRGV2aWNlU3RhdGUqIHBTdGF0ZSkKK3sK
KyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX09iamVjdExvY2spOworCisgICAgLy8gQ2hlY2sgdGhl
IGRldmljZSBzdGF0ZS4gTm90IGV2ZXJ5IGZhaWx1cmUgY29kZSBpcyBhIGNyaXRpY2FsIGZhaWx1
cmUuCisgICAgSFJFU1VMVCBociA9IG1fcERldmljZS0+Q2hlY2tEZXZpY2VTdGF0ZShtX2h3bmQp
OworCisgICAgKnBTdGF0ZSA9IERldmljZU9LOworCisgICAgc3dpdGNoIChocikgeworICAgIGNh
c2UgU19PSzoKKyAgICBjYXNlIFNfUFJFU0VOVF9PQ0NMVURFRDoKKyAgICBjYXNlIFNfUFJFU0VO
VF9NT0RFX0NIQU5HRUQ6CisgICAgICAgIC8vIHN0YXRlIGlzIERldmljZU9LCisgICAgICAgIGhy
ID0gU19PSzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEQzREVSUl9ERVZJQ0VMT1NUOgor
ICAgIGNhc2UgRDNERVJSX0RFVklDRUhVTkc6CisgICAgICAgIC8vIExvc3QvaHVuZyBkZXZpY2Uu
IERlc3Ryb3kgdGhlIGRldmljZSBhbmQgY3JlYXRlIGEgbmV3IG9uZS4KKyAgICAgICAgaHIgPSBD
cmVhdGVEM0REZXZpY2UoKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICBy
ZXR1cm4gaHI7CisgICAgICAgICpwU3RhdGUgPSBEZXZpY2VSZXNldDsKKyAgICAgICAgaHIgPSBT
X09LOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRDNERVJSX0RFVklDRVJFTU9WRUQ6Cisg
ICAgICAgIC8vIFRoaXMgaXMgYSBmYXRhbCBlcnJvci4KKyAgICAgICAgKnBTdGF0ZSA9IERldmlj
ZVJlbW92ZWQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFX0lOVkFMSURBUkc6CisgICAg
ICAgIC8vIENoZWNrRGV2aWNlU3RhdGUgY2FuIHJldHVybiBFX0lOVkFMSURBUkcgaWYgdGhlIHdp
bmRvdyBpcyBub3QgdmFsaWQKKyAgICAgICAgLy8gV2UnbGwgYXNzdW1lIHRoYXQgdGhlIHdpbmRv
dyB3YXMgZGVzdHJveWVkOyB3ZSdsbCByZWNyZWF0ZSB0aGUgZGV2aWNlIAorICAgICAgICAvLyBp
ZiB0aGUgYXBwbGljYXRpb24gc2V0cyBhIG5ldyB3aW5kb3cuCisgICAgICAgIGhyID0gU19PSzsK
KyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFByZXNlbnRTYW1wbGUKKy8vCisvLyBQcmVzZW50cyBhIHZpZGVvIGZyYW1lLgorLy8KKy8vIHBT
YW1wbGU6IFBvaW50ZXIgdG8gdGhlIHNhbXBsZSB0aGF0IGNvbnRhaW5zIHRoZSBzdXJmYWNlIHRv
IHByZXNlbnQuIElmIAorLy8gICAgICAgICAgdGhpcyBwYXJhbWV0ZXIgaXMgbnVsbHB0ciwgdGhl
IG1ldGhvZCBwYWludHMgYSBibGFjayByZWN0YW5nbGUuCisvLyBsbFRhcmdldDogVGFyZ2V0IHBy
ZXNlbnRhdGlvbiB0aW1lLgorLy8KKy8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgc2No
ZWR1bGVyIGFuZC9vciB0aGUgcHJlc2VudGVyLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitI
UkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2lu
ZTo6UHJlc2VudFNhbXBsZShJTUZTYW1wbGUqIHBTYW1wbGUsIExPTkdMT05HIGxsVGFyZ2V0KQor
eworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9PYmpl
Y3RMb2NrKTsKKworICAgIENPTVB0cjxJTUZNZWRpYUJ1ZmZlcj4gcEJ1ZmZlcjsKKyAgICBDT01Q
dHI8SURpcmVjdDNEU3VyZmFjZTk+IHBTdXJmYWNlOworICAgIENPTVB0cjxJRGlyZWN0M0RTd2Fw
Q2hhaW45PiBwU3dhcENoYWluOworCisgICAgaWYgKHBTYW1wbGUpIHsKKyAgICAgICAgLy8gR2V0
IHRoZSBidWZmZXIgZnJvbSB0aGUgc2FtcGxlLgorICAgICAgICBociA9IHBTYW1wbGUtPkdldEJ1
ZmZlckJ5SW5kZXgoMCwgJnBCdWZmZXIpOworCisgICAgICAgIC8vIEdldCB0aGUgc3VyZmFjZSBm
cm9tIHRoZSBidWZmZXIuCisgICAgICAgIGhyID0gTUZHZXRTZXJ2aWNlUHRyKCkocEJ1ZmZlci5n
ZXQoKSwgTVJfQlVGRkVSX1NFUlZJQ0UsIF9fdXVpZG9mKElEaXJlY3QzRFN1cmZhY2U5KSwgKHZv
aWQqKikmcFN1cmZhY2UpOworICAgIH0gZWxzZSBpZiAobV9wU3VyZmFjZVJlcGFpbnQpIHsKKyAg
ICAgICAgLy8gUmVkcmF3IGZyb20gdGhlIGxhc3Qgc3VyZmFjZS4KKyAgICAgICAgcFN1cmZhY2Ug
PSBtX3BTdXJmYWNlUmVwYWludC5nZXQoKTsKKyAgICAgICAgcFN1cmZhY2UtPkFkZFJlZigpOwor
ICAgIH0KKworICAgIGlmIChwU3VyZmFjZSkgeworICAgICAgICBVSU5UIHdpZHRoID0gbV9yY0Rl
c3RSZWN0LnJpZ2h0IC0gbV9yY0Rlc3RSZWN0LmxlZnQ7CisgICAgICAgIFVJTlQgaGVpZ2h0ID0g
bV9yY0Rlc3RSZWN0LmJvdHRvbSAtIG1fcmNEZXN0UmVjdC50b3A7CisKKyAgICAgICAgaWYgKHdp
ZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7CisgICAgICAgICAgICBpZiAoIW1fcE1lbVN1cmZhY2Ug
fHwgbV93aWR0aCAhPSB3aWR0aCB8fCBtX2hlaWdodCAhPSBoZWlnaHQpIHsKKyAgICAgICAgICAg
ICAgICBociA9IG1fcERldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKHdpZHRoLCBo
ZWlnaHQsIEQzREZNVF9BOFI4RzhCOCwgRDNEUE9PTF9TWVNURU1NRU0sICZtX3BNZW1TdXJmYWNl
LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBtX3dpZHRoID0gd2lkdGg7CisgICAgICAgICAg
ICAgICAgbV9oZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBociA9
IG1fcERldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShwU3VyZmFjZS5nZXQoKSwgbV9wTWVtU3Vy
ZmFjZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAgICAg
ICAgIG1fcE1lbVN1cmZhY2UgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGhyID0gU19PSzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFNpbmNlIHdlIHdhbnQgdG8g
ZHJhdyB0byB0aGUgR3JhcGhpY3NDb250ZXh0IHByb3ZpZGVkIGluIHRoZSBwYWludCBtZXRob2Qs
CisgICAgICAgIC8vIGFuZCBub3QgZHJhdyBkaXJlY3RseSB0byB0aGUgd2luZG93LCB3ZSBza2lw
IHByZXNlbnRpbmcgdGhlIHN3YXAgY2hhaW46CisKKyAgICAgICAgLy8gR2V0IHRoZSBzd2FwIGNo
YWluIGZyb20gdGhlIHN1cmZhY2UuCisgICAgICAgIC8vIENIRUNLX0hSKGhyID0gcFN1cmZhY2Ut
PkdldENvbnRhaW5lcihfX3V1aWRvZihJRGlyZWN0M0RTd2FwQ2hhaW45KSwgKExQVk9JRCopJnBT
d2FwQ2hhaW4pKTsKKworICAgICAgICAvLyBQcmVzZW50IHRoZSBzd2FwIGNoYWluLgorICAgICAg
ICAvLyBDSEVDS19IUihociA9IFByZXNlbnRTd2FwQ2hhaW4ocFN3YXBDaGFpbiwgcFN1cmZhY2Up
KTsKKworICAgICAgICAvLyBTdG9yZSB0aGlzIHBvaW50ZXIgaW4gY2FzZSB3ZSBuZWVkIHRvIHJl
cGFpbnQgdGhlIHN1cmZhY2UuCisgICAgICAgIG1fcFN1cmZhY2VSZXBhaW50ID0gcFN1cmZhY2U7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm8gc3VyZmFjZS4gQWxsIHdlIGNhbiBkbyBpcyBw
YWludCBhIGJsYWNrIHJlY3RhbmdsZS4KKyAgICAgICAgUGFpbnRGcmFtZVdpdGhHREkoKTsKKyAg
ICB9CisKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBpZiAoaHIgPT0gRDNERVJSX0RF
VklDRUxPU1QgfHwgaHIgPT0gRDNERVJSX0RFVklDRU5PVFJFU0VUIHx8IGhyID09IEQzREVSUl9E
RVZJQ0VIVU5HKSB7CisgICAgICAgICAgICAvLyBXZSBmYWlsZWQgYmVjYXVzZSB0aGUgZGV2aWNl
IHdhcyBsb3N0LiBGaWxsIHRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUuCisgICAgICAgICAgICBQ
YWludEZyYW1lV2l0aEdESSgpOworCisgICAgICAgICAgICAvLyBJZ25vcmUuIFdlIG5lZWQgdG8g
cmVzZXQgb3IgcmUtY3JlYXRlIHRoZSBkZXZpY2UsIGJ1dCB0aGlzIG1ldGhvZAorICAgICAgICAg
ICAgLy8gaXMgcHJvYmFibHkgYmVpbmcgY2FsbGVkIGZyb20gdGhlIHNjaGVkdWxlciB0aHJlYWQs
IHdoaWNoIGlzIG5vdCB0aGUKKyAgICAgICAgICAgIC8vIHNhbWUgdGhyZWFkIHRoYXQgY3JlYXRl
ZCB0aGUgZGV2aWNlLiBUaGUgUmVzZXQoRXgpIG1ldGhvZCBtdXN0IGJlCisgICAgICAgICAgICAv
LyBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgZGV2aWNlLgorCisgICAg
ICAgICAgICAvLyBUaGUgcHJlc2VudGVyIHdpbGwgZGV0ZWN0IHRoZSBzdGF0ZSB3aGVuIGl0IGNh
bGxzIENoZWNrRGV2aWNlU3RhdGUoKSAKKyAgICAgICAgICAgIC8vIG9uIHRoZSBuZXh0IHNhbXBs
ZS4KKyAgICAgICAgICAgIGhyID0gU19PSzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
aHI7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVz
ZW50RW5naW5lOjpQYWludEN1cnJlbnRGcmFtZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcikKK3sKKyAgICBVSU5UIHdpZHRoID0g
bV9yY0Rlc3RSZWN0LnJpZ2h0IC0gbV9yY0Rlc3RSZWN0LmxlZnQ7CisgICAgVUlOVCBoZWlnaHQg
PSBtX3JjRGVzdFJlY3QuYm90dG9tIC0gbV9yY0Rlc3RSZWN0LnRvcDsKKworICAgIGlmICghd2lk
dGggfHwgIWhlaWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9PYmplY3RMb2NrKTsKKworICAgIGlmICghbV9wTWVtU3VyZmFjZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkUmVjdDsKKyAgICBpZiAoU1VDQ0VFREVEKG1f
cE1lbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrZWRSZWN0LCBudWxscHRyLCBEM0RMT0NLX1JFQURP
TkxZKSkpIHsKKyAgICAgICAgdm9pZCogZGF0YSA9IGxvY2tlZFJlY3QucEJpdHM7CisgICAgICAg
IGludCBwaXRjaCA9IGxvY2tlZFJlY3QuUGl0Y2g7CisKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZv
cm1Db250ZXh0Q2Fpcm8qIGN0eHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgICAg
ICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9y
X2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpLCBDQUlST19GT1JNQVRfQVJH
QjMyLCB3aWR0aCwgaGVpZ2h0LCBwaXRjaCk7CisgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBj
bGlwKDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVj
dCA9IHI7CisgICAgICAgIHJlY3QuaW50ZXJzZWN0KGNsaXApOworICAgICAgICBjdHh0LT5kcmF3
U3VyZmFjZVRvQ29udGV4dChpbWFnZSwgcmVjdCwgcmVjdCwgY29udGV4dCk7CisgICAgICAgIGNh
aXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CisKKyAgICAgICAgbV9wTWVtU3VyZmFjZS0+VW5s
b2NrUmVjdCgpOworICAgIH0KK30KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBwcml2
YXRlL3Byb3RlY3RlZCBtZXRob2RzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gSW5pdGlhbGl6ZUQzRAorLy8gCisvLyBJbml0aWFsaXplcyBE
aXJlY3QzRCBhbmQgdGhlIERpcmVjdDNEIGRldmljZSBtYW5hZ2VyLgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNE
UHJlc2VudEVuZ2luZTo6SW5pdGlhbGl6ZUQzRCgpCit7CisgICAgSFJFU1VMVCBociA9IFNfT0s7
CisKKyAgICBBU1NFUlQoIW1fcEQzRDkpOworICAgIEFTU0VSVCghbV9wRGV2aWNlTWFuYWdlcik7
CisKKyAgICAvLyBDcmVhdGUgRGlyZWN0M0QKKyAgICBociA9IERpcmVjdDNEQ3JlYXRlOUV4UHRy
KCkoRDNEX1NES19WRVJTSU9OLCAmbV9wRDNEOSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgIHJldHVybiBocjsKKworICAgIC8vIENyZWF0ZSB0aGUgZGV2aWNlIG1hbmFnZXIKKyAgICBy
ZXR1cm4gRFhWQTJDcmVhdGVEaXJlY3QzRERldmljZU1hbmFnZXI5UHRyKCkoJm1fRGV2aWNlUmVz
ZXRUb2tlbiwgJm1fcERldmljZU1hbmFnZXIpOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBDcmVhdGVEM0REZXZpY2UKKy8vIAorLy8gQ3JlYXRlcyB0aGUgRGlyZWN0M0QgZGV2aWNl
LgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6Q3JlYXRlRDNERGV2aWNlKCkKK3sKKyAg
ICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICBVSU5UIHVBZGFwdGVySUQgPSBEM0RBREFQVEVSX0RF
RkFVTFQ7CisgICAgRFdPUkQgdnAgPSAwOworCisgICAgRDNEQ0FQUzkgZGRDYXBzOworICAgIFpl
cm9NZW1vcnkoJmRkQ2Fwcywgc2l6ZW9mKGRkQ2FwcykpOworCisgICAgQ09NUHRyPElEaXJlY3Qz
RERldmljZTlFeD4gcERldmljZTsKKworICAgIC8vIEhvbGQgdGhlIGxvY2sgYmVjYXVzZSB3ZSBt
aWdodCBiZSBkaXNjYXJkaW5nIGFuIGV4aXNpdGluZyBkZXZpY2UuCisgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9PYmplY3RMb2NrKTsKKworICAgIGlmICghbV9wRDNEOSB8fCAhbV9wRGV2aWNlTWFu
YWdlcikKKyAgICAgICAgcmV0dXJuIE1GX0VfTk9UX0lOSVRJQUxJWkVEOworCisgICAgSFdORCBo
d25kID0gR2V0RGVza3RvcFdpbmRvdygpOworCisgICAgLy8gTm90ZTogVGhlIHByZXNlbnRlciBj
cmVhdGVzIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgdG8gcHJlc2VudCB0aGUKKyAgICAvLyB2aWRl
byBmcmFtZXMuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgdXNlIHRoZSBkZXZpY2UncyBpbXBsaWNp
dCAKKyAgICAvLyBzd2FwIGNoYWluLCBzbyB0aGUgc2l6ZSBvZiB0aGUgYmFjayBidWZmZXIgaGVy
ZSBpcyAxIHggMS4KKworICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcDsKKyAgICBaZXJvTWVt
b3J5KCZwcCwgc2l6ZW9mKHBwKSk7CisKKyAgICBwcC5CYWNrQnVmZmVyV2lkdGggPSAxOworICAg
IHBwLkJhY2tCdWZmZXJIZWlnaHQgPSAxOworICAgIHBwLldpbmRvd2VkID0gVFJVRTsKKyAgICBw
cC5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9DT1BZOworICAgIHBwLkJhY2tCdWZmZXJGb3Jt
YXQgPSBEM0RGTVRfVU5LTk9XTjsKKyAgICBwcC5oRGV2aWNlV2luZG93ID0gaHduZDsKKyAgICBw
cC5GbGFncyA9IEQzRFBSRVNFTlRGTEFHX1ZJREVPOworICAgIHBwLlByZXNlbnRhdGlvbkludGVy
dmFsID0gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOworCisgICAgLy8gRmluZCB0aGUgbW9u
aXRvciBmb3IgdGhpcyB3aW5kb3cuCisgICAgaWYgKG1faHduZCkgeworICAgICAgICBITU9OSVRP
UiBoTW9uaXRvciA9IE1vbml0b3JGcm9tV2luZG93KG1faHduZCwgTU9OSVRPUl9ERUZBVUxUVE9O
RUFSRVNUKTsKKworICAgICAgICAvLyBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIGFkYXB0ZXIuCisg
ICAgICAgIGhyID0gRmluZEFkYXB0ZXIobV9wRDNEOS5nZXQoKSwgaE1vbml0b3IsICZ1QWRhcHRl
cklEKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7Cisg
ICAgfQorCisgICAgLy8gR2V0IHRoZSBkZXZpY2UgY2FwcyBmb3IgdGhpcyBhZGFwdGVyLgorICAg
IGhyID0gbV9wRDNEOS0+R2V0RGV2aWNlQ2Fwcyh1QWRhcHRlcklELCBEM0RERVZUWVBFX0hBTCwg
JmRkQ2Fwcyk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAg
IGlmIChkZENhcHMuRGV2Q2FwcyAmIEQzRERFVkNBUFNfSFdUUkFOU0ZPUk1BTkRMSUdIVCkKKyAg
ICAgICAgdnAgPSBEM0RDUkVBVEVfSEFSRFdBUkVfVkVSVEVYUFJPQ0VTU0lORzsKKyAgICBlbHNl
CisgICAgICAgIHZwID0gRDNEQ1JFQVRFX1NPRlRXQVJFX1ZFUlRFWFBST0NFU1NJTkc7CisKKyAg
ICAvLyBDcmVhdGUgdGhlIGRldmljZS4KKyAgICBociA9IG1fcEQzRDktPkNyZWF0ZURldmljZUV4
KAorICAgICAgICB1QWRhcHRlcklELAorICAgICAgICBEM0RERVZUWVBFX0hBTCwKKyAgICAgICAg
cHAuaERldmljZVdpbmRvdywKKyAgICAgICAgdnAgfCBEM0RDUkVBVEVfTk9XSU5ET1dDSEFOR0VT
IHwgRDNEQ1JFQVRFX01VTFRJVEhSRUFERUQgfCBEM0RDUkVBVEVfRlBVX1BSRVNFUlZFLAorICAg
ICAgICAmcHAsCisgICAgICAgIG51bGxwdHIsCisgICAgICAgICZwRGV2aWNlCisgICAgICAgICk7
CisKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gR2V0
IHRoZSBhZGFwdGVyIGRpc3BsYXkgbW9kZS4KKyAgICBociA9IG1fcEQzRDktPkdldEFkYXB0ZXJE
aXNwbGF5TW9kZSh1QWRhcHRlcklELCAmbV9EaXNwbGF5TW9kZSk7CisgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIC8vIFJlc2V0IHRoZSBEM0REZXZpY2VNYW5h
Z2VyIHdpdGggdGhlIG5ldyBkZXZpY2UgCisgICAgaHIgPSBtX3BEZXZpY2VNYW5hZ2VyLT5SZXNl
dERldmljZShwRGV2aWNlLmdldCgpLCBtX0RldmljZVJlc2V0VG9rZW4pOworICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBtX3BEZXZpY2UgPSBwRGV2aWNlOwor
ICAgIG1fcERldmljZS0+QWRkUmVmKCk7CisKKyAgICByZXR1cm4gaHI7Cit9CisKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gQ3JlYXRlRDNEU2FtcGxlCisvLworLy8gQ3JlYXRlcyBhbiBz
YW1wbGUgb2JqZWN0IChJTUZTYW1wbGUpIHRvIGhvbGQgYSBEaXJlY3QzRCBzd2FwIGNoYWluLgor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6Q3JlYXRlRDNEU2FtcGxlKElEaXJlY3QzRFN3
YXBDaGFpbjkqIHBTd2FwQ2hhaW4sIElNRlNhbXBsZSoqIHBwVmlkZW9TYW1wbGUpCit7CisgICAg
Ly8gQ2FsbGVyIGhvbGRzIHRoZSBvYmplY3QgbG9jay4KKworICAgIEhSRVNVTFQgaHIgPSBTX09L
OworICAgIEQzRENPTE9SIGNsckJsYWNrID0gRDNEQ09MT1JfQVJHQigweEZGLCAweDAwLCAweDAw
LCAweDAwKTsKKworICAgIENPTVB0cjxJRGlyZWN0M0RTdXJmYWNlOT4gcFN1cmZhY2U7CisgICAg
Q09NUHRyPElNRlNhbXBsZT4gcFNhbXBsZTsKKworICAgIC8vIEdldCB0aGUgYmFjayBidWZmZXIg
c3VyZmFjZS4KKyAgICBociA9IHBTd2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JV
RkZFUl9UWVBFX01PTk8sICZwU3VyZmFjZSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
IHJldHVybiBocjsKKworICAgIC8vIEZpbGwgaXQgd2l0aCBibGFjay4KKyAgICBociA9IG1fcERl
dmljZS0+Q29sb3JGaWxsKHBTdXJmYWNlLmdldCgpLCBudWxscHRyLCBjbHJCbGFjayk7CisgICAg
aWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIC8vIENyZWF0ZSB0aGUg
c2FtcGxlLgorICAgIGhyID0gTUZDcmVhdGVWaWRlb1NhbXBsZUZyb21TdXJmYWNlUHRyKCkocFN1
cmZhY2UuZ2V0KCksICZwU2FtcGxlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIGhyOworCisgICAgLy8gUmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBjYWxsZXIuCisgICAg
KnBwVmlkZW9TYW1wbGUgPSBwU2FtcGxlLmdldCgpOworICAgICgqcHBWaWRlb1NhbXBsZSktPkFk
ZFJlZigpOworCisgICAgcmV0dXJuIGhyOworfQorCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUHJlc2VudFN3YXBDaGFpbgorLy8KKy8vIFByZXNlbnRzIGEgc3dhcCBjaGFpbiB0aGF0
IGNvbnRhaW5zIGEgdmlkZW8gZnJhbWUuCisvLworLy8gcFN3YXBDaGFpbjogUG9pbnRlciB0byB0
aGUgc3dhcCBjaGFpbi4KKy8vIHBTdXJmYWNlOiBQb2ludGVyIHRvIHRoZSBzd2FwIGNoYWluJ3Mg
YmFjayBidWZmZXIgc3VyZmFjZS4KKworLy8KKy8vIE5vdGU6IFRoaXMgbWV0aG9kIHNpbXBseSBj
YWxscyBJRGlyZWN0M0RTd2FwQ2hhaW45OjpQcmVzZW50LCBidXQgYSBkZXJpdmVkIAorLy8gY2xh
c3MgY291bGQgZG8gc29tZXRoaW5nIGZhbmNpZXIuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5n
aW5lOjpQcmVzZW50U3dhcENoYWluKElEaXJlY3QzRFN3YXBDaGFpbjkqIHBTd2FwQ2hhaW4sIElE
aXJlY3QzRFN1cmZhY2U5KiBwU3VyZmFjZSkKK3sKKyAgICBpZiAoIW1faHduZCkKKyAgICAgICAg
cmV0dXJuIE1GX0VfSU5WQUxJRFJFUVVFU1Q7CisKKyAgICByZXR1cm4gcFN3YXBDaGFpbi0+UHJl
c2VudChudWxscHRyLCAmbV9yY0Rlc3RSZWN0LCBtX2h3bmQsIG51bGxwdHIsIDApOworfQorCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQYWludEZyYW1lV2l0aEdESQorLy8gCisvLyBGaWxs
cyB0aGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpdGggYmxhY2suCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVz
ZW50RW5naW5lOjpQYWludEZyYW1lV2l0aEdESSgpCit7CisgICAgSFduZERDIGhkYyhtX2h3bmQp
OworCisgICAgaWYgKGhkYykgeworICAgICAgICBIQlJVU0ggaEJydXNoID0gQ3JlYXRlU29saWRC
cnVzaChSR0IoMCwgMCwgMCkpOworCisgICAgICAgIGlmIChoQnJ1c2gpIHsKKyAgICAgICAgICAg
IEZpbGxSZWN0KGhkYywgJm1fcmNEZXN0UmVjdCwgaEJydXNoKTsKKyAgICAgICAgICAgIERlbGV0
ZU9iamVjdChoQnJ1c2gpOworICAgICAgICB9CisgICAgfQorfQorCisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIEdldFN3YXBDaGFpblByZXNlbnRQYXJhbWV0ZXJzCisvLworLy8gR2l2ZW4g
YSBtZWRpYSB0eXBlIHRoYXQgZGVzY3JpYmVzIHRoZSB2aWRlbyBmb3JtYXQsIGZpbGxzIGluIHRo
ZQorLy8gRDNEUFJFU0VOVF9QQVJBTUVURVJTIGZvciBjcmVhdGluZyBhIHN3YXAgY2hhaW4uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpHZXRTd2FwQ2hhaW5QcmVzZW50UGFyYW1ldGVy
cyhJTUZNZWRpYVR5cGUqIHBUeXBlLCBEM0RQUkVTRU5UX1BBUkFNRVRFUlMqIHBQUCkKK3sKKyAg
ICAvLyBDYWxsZXIgaG9sZHMgdGhlIG9iamVjdCBsb2NrLgorCisgICAgSFJFU1VMVCBociA9IFNf
T0s7CisKKyAgICBVSU5UMzIgd2lkdGggPSAwLCBoZWlnaHQgPSAwOworICAgIERXT1JEIGQzZEZv
cm1hdCA9IDA7CisKKyAgICAvLyBIZWxwZXIgb2JqZWN0IGZvciByZWFkaW5nIHRoZSBwcm9wb3Nl
ZCB0eXBlLgorICAgIFZpZGVvVHlwZSB2aWRlb1R5cGUocFR5cGUpOworCisgICAgaWYgKCFtX2h3
bmQpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURSRVFVRVNUOworCisgICAgWmVyb01lbW9y
eShwUFAsIHNpemVvZihEM0RQUkVTRU5UX1BBUkFNRVRFUlMpKTsKKworICAgIC8vIEdldCBzb21l
IGluZm9ybWF0aW9uIGFib3V0IHRoZSB2aWRlbyBmb3JtYXQuCisgICAgaHIgPSB2aWRlb1R5cGUu
R2V0RnJhbWVEaW1lbnNpb25zKCZ3aWR0aCwgJmhlaWdodCk7CisgICAgaWYgKEZBSUxFRChocikp
CisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gdmlkZW9UeXBlLkdldEZvdXJDQygmZDNk
Rm9ybWF0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAg
WmVyb01lbW9yeShwUFAsIHNpemVvZihEM0RQUkVTRU5UX1BBUkFNRVRFUlMpKTsKKyAgICBwUFAt
PkJhY2tCdWZmZXJXaWR0aCA9IHdpZHRoOworICAgIHBQUC0+QmFja0J1ZmZlckhlaWdodCA9IGhl
aWdodDsKKyAgICBwUFAtPldpbmRvd2VkID0gVFJVRTsKKyAgICBwUFAtPlN3YXBFZmZlY3QgPSBE
M0RTV0FQRUZGRUNUX0NPUFk7CisgICAgcFBQLT5CYWNrQnVmZmVyRm9ybWF0ID0gKEQzREZPUk1B
VClkM2RGb3JtYXQ7CisgICAgcFBQLT5oRGV2aWNlV2luZG93ID0gbV9od25kOworICAgIHBQUC0+
RmxhZ3MgPSBEM0RQUkVTRU5URkxBR19WSURFTzsKKyAgICBwUFAtPlByZXNlbnRhdGlvbkludGVy
dmFsID0gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOworCisgICAgRDNEREVWSUNFX0NSRUFU
SU9OX1BBUkFNRVRFUlMgcGFyYW1zOworICAgIGhyID0gbV9wRGV2aWNlLT5HZXRDcmVhdGlvblBh
cmFtZXRlcnMoJnBhcmFtcyk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBo
cjsKKworICAgIGlmIChwYXJhbXMuRGV2aWNlVHlwZSAhPSBEM0RERVZUWVBFX0hBTCkKKyAgICAg
ICAgcFBQLT5GbGFncyB8PSBEM0RQUkVTRU5URkxBR19MT0NLQUJMRV9CQUNLQlVGRkVSOworCisg
ICAgcmV0dXJuIFNfT0s7Cit9CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVXBkYXRl
RGVzdFJlY3QKKy8vCisvLyBVcGRhdGVzIHRoZSB0YXJnZXQgcmVjdGFuZ2xlIGJ5IGNsaXBwaW5n
IGl0IHRvIHRoZSB2aWRlbyB3aW5kb3cncyBjbGllbnQKKy8vIGFyZWEuCisvLworLy8gQ2FsbGVk
IHdoZW5ldmVyIHRoZSBhcHBsaWNhdGlvbiBzZXRzIHRoZSB2aWRlbyB3aW5kb3cgb3IgdGhlIGRl
c3RpbmF0aW9uCisvLyByZWN0YW5nbGUuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNV
TFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpV
cGRhdGVEZXN0UmVjdCgpCit7CisgICAgaWYgKCFtX2h3bmQpCisgICAgICAgIHJldHVybiBTX0ZB
TFNFOworCisgICAgUkVDVCByY1ZpZXc7CisgICAgR2V0Q2xpZW50UmVjdChtX2h3bmQsICZyY1Zp
ZXcpOworCisgICAgLy8gQ2xpcCB0aGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHRvIHRoZSB3aW5k
b3cncyBjbGllbnQgYXJlYS4KKyAgICBpZiAobV9yY0Rlc3RSZWN0LnJpZ2h0ID4gcmNWaWV3LnJp
Z2h0KQorICAgICAgICBtX3JjRGVzdFJlY3QucmlnaHQgPSByY1ZpZXcucmlnaHQ7CisKKyAgICBp
ZiAobV9yY0Rlc3RSZWN0LmJvdHRvbSA+IHJjVmlldy5ib3R0b20pCisgICAgICAgIG1fcmNEZXN0
UmVjdC5ib3R0b20gPSByY1ZpZXcuYm90dG9tOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFN0YXRpYyBmdW5jdGlvbnMKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRmluZEFkYXB0ZXIKKy8vCisv
LyBHaXZlbiBhIGhhbmRsZSB0byBhIG1vbml0b3IsIHJldHVybnMgdGhlIG9yZGluYWwgbnVtYmVy
IHRoYXQgRDNEIHVzZXMgdG8gCisvLyBpZGVudGlmeSB0aGUgYWRhcHRlci4KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworc3RhdGljIEhSRVNVTFQgRmluZEFkYXB0ZXIoSURpcmVjdDNEOSogcEQz
RDksIEhNT05JVE9SIGhNb25pdG9yLCBVSU5UKiBwdUFkYXB0ZXJJRCkKK3sKKyAgICBIUkVTVUxU
IGhyID0gRV9GQUlMOworICAgIFVJTlQgY0FkYXB0ZXJzID0gMDsKKyAgICBVSU5UIHVBZGFwdGVy
SUQgPSAoVUlOVCktMTsKKworICAgIGNBZGFwdGVycyA9IHBEM0Q5LT5HZXRBZGFwdGVyQ291bnQo
KTsKKyAgICBmb3IgKFVJTlQgaSA9IDA7IGkgPCBjQWRhcHRlcnM7IGkrKykgeworICAgICAgICBI
TU9OSVRPUiBoTW9uaXRvclRtcCA9IHBEM0Q5LT5HZXRBZGFwdGVyTW9uaXRvcihpKTsKKworICAg
ICAgICBpZiAoIWhNb25pdG9yVG1wKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYg
KGhNb25pdG9yVG1wID09IGhNb25pdG9yKSB7CisgICAgICAgICAgICB1QWRhcHRlcklEID0gaTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHVBZGFwdGVy
SUQgIT0gKFVJTlQpLTEpIHsKKyAgICAgICAgKnB1QWRhcHRlcklEID0gdUFkYXB0ZXJJRDsKKyAg
ICAgICAgaHIgPSBTX09LOworICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uLmgJKHJldmlzaW9uIDE5MTg4NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTcgKzI0LDMwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uX2gKKyNkZWZpbmUg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uX2gKKwogI2luY2x1ZGUgIkNPTVB0ci5o
IgorI2luY2x1ZGUgIk1lZGlhRm91bmRhdGlvblV0aWxzLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiV2luMzJIYW5kbGUuaCIKKworI2luY2x1ZGUgPEQzRDku
aD4KKyNpbmNsdWRlIDxEeHZhMmFwaS5oPgogCiAjaW5jbHVkZSA8TWZhcGkuaD4KKyNpbmNsdWRl
IDxNZmVycm9yLmg+CiAjaW5jbHVkZSA8TWZpZGwuaD4KKyNpbmNsdWRlIDxldmNvZGUuaD4KICNp
bmNsdWRlIDxldnIuaD4KIAorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KICNpbmNsdWRlIDx3
dGYvV2Vha1B0ci5oPgogCit0eXBlZGVmIERlcXVlPENPTVB0cjxJTUZTYW1wbGU+PiBWaWRlb1Nh
bXBsZUxpc3Q7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7
CkBAIC0xMTgsNiArMTMxLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVZpZGVvV2luZG93
KCk7CiAgICAgdm9pZCBkZXN0cm95VmlkZW9XaW5kb3coKTsKIAorICAgIHZvaWQgaW52YWxpZGF0
ZUZyYW1lVmlldygpOworCiAgICAgdm9pZCBhZGRMaXN0ZW5lcihNZWRpYVBsYXllckxpc3RlbmVy
Kik7CiAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihNZWRpYVBsYXllckxpc3RlbmVyKik7CiAgICAg
dm9pZCBub3RpZnlEZWxldGVkKCk7CkBAIC0xNTMsNiArMTY4LDM4NiBAQCBwcml2YXRlOgogICAg
ICAgICBMb2NrIG1fbXV0ZXg7CiAgICAgfTsKIAorICAgIGNsYXNzIFNhbXBsZVBvb2wgeworICAg
IHB1YmxpYzoKKyAgICAgICAgU2FtcGxlUG9vbCgpOworICAgICAgICB2aXJ0dWFsIH5TYW1wbGVQ
b29sKCk7CisKKyAgICAgICAgSFJFU1VMVCBpbml0aWFsaXplKFZpZGVvU2FtcGxlTGlzdCYgc2Ft
cGxlcyk7CisgICAgICAgIEhSRVNVTFQgY2xlYXIoKTsKKworICAgICAgICBIUkVTVUxUIGdldFNh
bXBsZShJTUZTYW1wbGUqKiBwcFNhbXBsZSk7IC8vIERvZXMgbm90IGJsb2NrLgorICAgICAgICBI
UkVTVUxUIHJldHVyblNhbXBsZShJTUZTYW1wbGUqIHBTYW1wbGUpOworICAgICAgICBib29sIGFy
ZVNhbXBsZXNQZW5kaW5nKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBMb2NrIG1fbG9jazsK
KyAgICAgICAgVmlkZW9TYW1wbGVMaXN0IG1fdmlkZW9TYW1wbGVRdWV1ZTsgLy8gQXZhaWxhYmxl
IHF1ZXVlCisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKyAgICAgICAgdW5zaWduZWQgbV9w
ZW5kaW5nOworICAgIH07CisKKyAgICBzdHJ1Y3QgU2NoZWR1bGVyQ2FsbGJhY2s7CisKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU2NoZWR1bGVyIGNsYXNzCisgICAgLy8KKyAg
ICAvLyBTY2hlZHVsZXMgd2hlbiBhIHNhbXBsZSBzaG91bGQgYmUgZGlzcGxheWVkLgorICAgIC8v
CisgICAgLy8gTm90ZTogUHJlc2VudGF0aW9uIG9mIGVhY2ggc2FtcGxlIGlzIHBlcmZvcm1lZCBi
eSBhbm90aGVyIG9iamVjdCB3aGljaAorICAgIC8vIG11c3QgaW1wbGVtZW50IFNjaGVkdWxlckNh
bGxiYWNrOjpQcmVzZW50U2FtcGxlLgorICAgIC8vCisgICAgLy8gR2VuZXJhbCBkZXNpZ246Cisg
ICAgLy8gVGhlIHNjaGVkdWxlciBnZW5lcmFsbHkgcmVjZWl2ZXMgc2FtcGxlcyBiZWZvcmUgdGhl
aXIgcHJlc2VudGF0aW9uIHRpbWUuIEl0CisgICAgLy8gcHV0cyB0aGUgc2FtcGxlcyBvbiBhIHF1
ZXVlIGFuZCBwcmVzZW50cyB0aGVtIGluIEZJRk8gb3JkZXIgb24gYSB3b3JrZXIgCisgICAgLy8g
dGhyZWFkLiBUaGUgc2NoZWR1bGVyIGNvbW11bmljYXRlcyB3aXRoIHRoZSB3b3JrZXIgdGhyZWFk
IGJ5IHBvc3RpbmcgdGhyZWFkCisgICAgLy8gbWVzc2FnZXMuCisgICAgLy8KKyAgICAvLyBUaGUg
Y2FsbGVyIGhhcyB0aGUgb3B0aW9uIG9mIHByZXNlbnRpbmcgc2FtcGxlcyBpbW1lZGlhdGVseSAo
Zm9yIGV4YW1wbGUsCisgICAgLy8gZm9yIHJlcGFpbnRzKS4gCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgY2xhc3MgU2NoZWR1bGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNj
aGVkdWxlcigpOworICAgICAgICB2aXJ0dWFsIH5TY2hlZHVsZXIoKTsKKworICAgICAgICB2b2lk
IFNldENhbGxiYWNrKFNjaGVkdWxlckNhbGxiYWNrICpwQ0IpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fcENCID0gcENCOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBTZXRGcmFtZVJhdGUo
Y29uc3QgTUZSYXRpbyYgZnBzKTsKKyAgICAgICAgdm9pZCBTZXRDbG9ja1JhdGUoZmxvYXQgZlJh
dGUpIHsgbV9mUmF0ZSA9IGZSYXRlOyB9CisKKyAgICAgICAgY29uc3QgTE9OR0xPTkcmIExhc3RT
YW1wbGVUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9MYXN0U2FtcGxlVGltZTsgfQorICAgICAgICBj
b25zdCBMT05HTE9ORyYgRnJhbWVEdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fUGVyRnJhbWVJ
bnRlcnZhbDsgfQorCisgICAgICAgIEhSRVNVTFQgU3RhcnRTY2hlZHVsZXIoSU1GQ2xvY2sgKnBD
bG9jayk7CisgICAgICAgIEhSRVNVTFQgU3RvcFNjaGVkdWxlcigpOworCisgICAgICAgIEhSRVNV
TFQgU2NoZWR1bGVTYW1wbGUoSU1GU2FtcGxlICpwU2FtcGxlLCBCT09MIGJQcmVzZW50Tm93KTsK
KyAgICAgICAgSFJFU1VMVCBQcm9jZXNzU2FtcGxlc0luUXVldWUoTE9ORyAqcGxOZXh0U2xlZXAp
OworICAgICAgICBIUkVTVUxUIFByb2Nlc3NTYW1wbGUoSU1GU2FtcGxlICpwU2FtcGxlLCBMT05H
ICpwbE5leHRTbGVlcCk7CisgICAgICAgIEhSRVNVTFQgRmx1c2goKTsKKworICAgICAgICAvLyBU
aHJlYWRQcm9jIGZvciB0aGUgc2NoZWR1bGVyIHRocmVhZC4KKyAgICAgICAgc3RhdGljIERXT1JE
IFdJTkFQSSBTY2hlZHVsZXJUaHJlYWRQcm9jKExQVk9JRCBscFBhcmFtZXRlcik7CisKKyAgICBw
cml2YXRlOgorICAgICAgICAvLyBub24tc3RhdGljIHZlcnNpb24gb2YgU2NoZWR1bGVyVGhyZWFk
UHJvYy4KKyAgICAgICAgRFdPUkQgU2NoZWR1bGVyVGhyZWFkUHJvY1ByaXZhdGUoKTsKKworICAg
ICAgICBEZXF1ZTxDT01QdHI8SU1GU2FtcGxlPj4gbV9TY2hlZHVsZWRTYW1wbGVzOyAvLyBTYW1w
bGVzIHdhaXRpbmcgdG8gYmUgcHJlc2VudGVkLgorICAgICAgICBMb2NrIG1fbG9jazsKKworICAg
ICAgICBDT01QdHI8SU1GQ2xvY2s+IG1fcENsb2NrOyAvLyBQcmVzZW50YXRpb24gY2xvY2suIENh
biBiZSBudWxscHRyLgorICAgICAgICBTY2hlZHVsZXJDYWxsYmFjayogbV9wQ0I7IC8vIFdlYWsg
cmVmZXJlbmNlOyBkbyBub3QgZGVsZXRlLgorCisgICAgICAgIERXT1JEIG1fZHdUaHJlYWRJRDsK
KyAgICAgICAgV2luMzJIYW5kbGUgbV9oU2NoZWR1bGVyVGhyZWFkOworICAgICAgICBXaW4zMkhh
bmRsZSBtX2hUaHJlYWRSZWFkeUV2ZW50OworICAgICAgICBXaW4zMkhhbmRsZSBtX2hGbHVzaEV2
ZW50OworCisgICAgICAgIGZsb2F0IG1fZlJhdGU7IC8vIFBsYXliYWNrIHJhdGUuCisgICAgICAg
IE1GVElNRSBtX1BlckZyYW1lSW50ZXJ2YWw7IC8vIER1cmF0aW9uIG9mIGVhY2ggZnJhbWUuCisg
ICAgICAgIExPTkdMT05HIG1fUGVyRnJhbWVPbmVRdWFydGVyOyAvLyAxLzR0aCBvZiB0aGUgZnJh
bWUgZHVyYXRpb24uCisgICAgICAgIE1GVElNRSBtX0xhc3RTYW1wbGVUaW1lOyAvLyBNb3N0IHJl
Y2VudCBzYW1wbGUgdGltZS4KKyAgICB9OworCisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gU2NoZWR1bGVyQ2FsbGJhY2sKKyAgICAvLworICAgIC8vIERlZmluZXMgdGhlIGNh
bGxiYWNrIG1ldGhvZCB0byBwcmVzZW50IHNhbXBsZXMuIAorICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAgIHN0cnVjdCBTY2hlZHVsZXJDYWxsYmFjayB7CisgICAgICAgIHZpcnR1YWwg
SFJFU1VMVCBQcmVzZW50U2FtcGxlKElNRlNhbXBsZSAqcFNhbXBsZSwgTE9OR0xPTkcgbGxUYXJn
ZXQpID0gMDsKKyAgICB9OworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEQz
RFByZXNlbnRFbmdpbmUgY2xhc3MKKyAgICAvLworICAgIC8vIFRoaXMgY2xhc3MgY3JlYXRlcyB0
aGUgRGlyZWN0M0QgZGV2aWNlLCBhbGxvY2F0ZXMgRGlyZWN0M0Qgc3VyZmFjZXMgZm9yCisgICAg
Ly8gcmVuZGVyaW5nLCBhbmQgcHJlc2VudHMgdGhlIHN1cmZhY2VzLiBUaGlzIGNsYXNzIGFsc28g
b3ducyB0aGUgRGlyZWN0M0QKKyAgICAvLyBkZXZpY2UgbWFuYWdlciBhbmQgcHJvdmlkZXMgdGhl
IElEaXJlY3QzRERldmljZU1hbmFnZXI5IGludGVyZmFjZSB2aWEKKyAgICAvLyBHZXRTZXJ2aWNl
LgorICAgIC8vCisgICAgLy8gVGhlIGdvYWwgb2YgdGhpcyBjbGFzcyBpcyB0byBpc29sYXRlIHRo
ZSBFVlJDdXN0b21QcmVzZW50ZXIgY2xhc3MgZnJvbQorICAgIC8vIHRoZSBkZXRhaWxzIG9mIERp
cmVjdDNEIGFzIG11Y2ggYXMgcG9zc2libGUuCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisgICAgY2xhc3MgRDNEUHJlc2VudEVuZ2luZSA6IHB1YmxpYyBTY2hlZHVsZXJDYWxsYmFjayB7
CisgICAgcHVibGljOgorCisgICAgICAgIC8vIFN0YXRlIG9mIHRoZSBEaXJlY3QzRCBkZXZpY2Uu
CisgICAgICAgIGVudW0gRGV2aWNlU3RhdGUgeworICAgICAgICAgICAgRGV2aWNlT0ssCisgICAg
ICAgICAgICBEZXZpY2VSZXNldCwgLy8gVGhlIGRldmljZSB3YXMgcmVzZXQgT1IgcmUtY3JlYXRl
ZC4KKyAgICAgICAgICAgIERldmljZVJlbW92ZWQsIC8vIFRoZSBkZXZpY2Ugd2FzIHJlbW92ZWQu
CisgICAgICAgIH07CisKKyAgICAgICAgRDNEUHJlc2VudEVuZ2luZShIUkVTVUxUJik7CisgICAg
ICAgIHZpcnR1YWwgfkQzRFByZXNlbnRFbmdpbmUoKTsKKworICAgICAgICAvLyBHZXRTZXJ2aWNl
OiBSZXR1cm5zIHRoZSBJRGlyZWN0M0REZXZpY2VNYW5hZ2VyOSBpbnRlcmZhY2UuCisgICAgICAg
IC8vIChUaGUgc2lnbmF0dXJlIGlzIGlkZW50aWNhbCB0byBJTUZHZXRTZXJ2aWNlOjpHZXRTZXJ2
aWNlIGJ1dCAKKyAgICAgICAgLy8gdGhpcyBvYmplY3QgZG9lcyBub3QgZGVyaXZlIGZyb20gSVVu
a25vd24uKQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgR2V0U2VydmljZShSRUZHVUlEIGd1aWRT
ZXJ2aWNlLCBSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdik7CisgICAgICAgIHZpcnR1YWwgSFJFU1VM
VCBDaGVja0Zvcm1hdChEM0RGT1JNQVQpOworCisgICAgICAgIC8vIFZpZGVvIHdpbmRvdyAvIGRl
c3RpbmF0aW9uIHJlY3RhbmdsZToKKyAgICAgICAgLy8gVGhpcyBvYmplY3QgaW1wbGVtZW50cyBh
IHN1Yi1zZXQgb2YgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGJ5IHRoZSAKKyAgICAgICAgLy8gSU1G
VmlkZW9EaXNwbGF5Q29udHJvbCBpbnRlcmZhY2UuIEhvd2V2ZXIsIHNvbWUgb2YgdGhlIG1ldGhv
ZCBzaWduYXR1cmVzIAorICAgICAgICAvLyBhcmUgZGlmZmVyZW50LiBUaGUgcHJlc2VudGVyJ3Mg
aW1wbGVtZW50YXRpb24gb2YgSU1GVmlkZW9EaXNwbGF5Q29udHJvbCAKKyAgICAgICAgLy8gY2Fs
bHMgdGhlc2UgbWV0aG9kcy4KKyAgICAgICAgSFJFU1VMVCBTZXRWaWRlb1dpbmRvdyhIV05EKTsK
KyAgICAgICAgSFdORCBHZXRWaWRlb1dpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1faHduZDsgfQor
ICAgICAgICBIUkVTVUxUIFNldERlc3RpbmF0aW9uUmVjdChjb25zdCBSRUNUJiByY0Rlc3QpOwor
ICAgICAgICBSRUNUIEdldERlc3RpbmF0aW9uUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmNEZXN0
UmVjdDsgfTsKKworICAgICAgICBIUkVTVUxUIENyZWF0ZVZpZGVvU2FtcGxlcyhJTUZNZWRpYVR5
cGUgKnBGb3JtYXQsIFZpZGVvU2FtcGxlTGlzdCYgdmlkZW9TYW1wbGVRdWV1ZSk7CisgICAgICAg
IHZvaWQgUmVsZWFzZVJlc291cmNlcygpOworCisgICAgICAgIEhSRVNVTFQgQ2hlY2tEZXZpY2VT
dGF0ZShEZXZpY2VTdGF0ZSAqcFN0YXRlKTsKKyAgICAgICAgSFJFU1VMVCBQcmVzZW50U2FtcGxl
KElNRlNhbXBsZSogcFNhbXBsZSwgTE9OR0xPTkcgbGxUYXJnZXQpOworCisgICAgICAgIFVJTlQg
UmVmcmVzaFJhdGUoKSBjb25zdCB7IHJldHVybiBtX0Rpc3BsYXlNb2RlLlJlZnJlc2hSYXRlOyB9
CisKKyAgICAgICAgdm9pZCBQYWludEN1cnJlbnRGcmFtZShHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgSFJFU1VMVCBJbml0aWFs
aXplRDNEKCk7CisgICAgICAgIEhSRVNVTFQgR2V0U3dhcENoYWluUHJlc2VudFBhcmFtZXRlcnMo
SU1GTWVkaWFUeXBlICpwVHlwZSwgRDNEUFJFU0VOVF9QQVJBTUVURVJTKiBwUFApOworICAgICAg
ICBIUkVTVUxUIENyZWF0ZUQzRERldmljZSgpOworICAgICAgICBIUkVTVUxUIENyZWF0ZUQzRFNh
bXBsZShJRGlyZWN0M0RTd2FwQ2hhaW45ICpwU3dhcENoYWluLCBJTUZTYW1wbGUgKipwcFZpZGVv
U2FtcGxlKTsKKyAgICAgICAgSFJFU1VMVCBVcGRhdGVEZXN0UmVjdCgpOworCisgICAgICAgIC8v
IEEgZGVyaXZlZCBjbGFzcyBjYW4gb3ZlcnJpZGUgdGhlc2UgaGFuZGxlcnMgdG8gYWxsb2NhdGUg
YW55IGFkZGl0aW9uYWwgRDNEIHJlc291cmNlcy4KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIE9u
Q3JlYXRlVmlkZW9TYW1wbGVzKEQzRFBSRVNFTlRfUEFSQU1FVEVSUyYgcHApIHsgcmV0dXJuIFNf
T0s7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIE9uUmVsZWFzZVJlc291cmNlcygpIHsgfQorCisg
ICAgICAgIHZpcnR1YWwgSFJFU1VMVCBQcmVzZW50U3dhcENoYWluKElEaXJlY3QzRFN3YXBDaGFp
bjkqIHBTd2FwQ2hhaW4sIElEaXJlY3QzRFN1cmZhY2U5KiBwU3VyZmFjZSk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBQYWludEZyYW1lV2l0aEdESSgpOworCisgICAgcHJvdGVjdGVkOgorICAgICAg
ICBVSU5UIG1fRGV2aWNlUmVzZXRUb2tlbjsgLy8gUmVzZXQgdG9rZW4gZm9yIHRoZSBEM0QgZGV2
aWNlIG1hbmFnZXIuCisgICAgICAgIEhXTkQgbV9od25kOyAvLyBBcHBsaWNhdGlvbi1wcm92aWRl
ZCBkZXN0aW5hdGlvbiB3aW5kb3cuCisgICAgICAgIFJFQ1QgbV9yY0Rlc3RSZWN0OyAvLyBEZXN0
aW5hdGlvbiByZWN0YW5nbGUuCisgICAgICAgIEQzRERJU1BMQVlNT0RFIG1fRGlzcGxheU1vZGU7
IC8vIEFkYXB0ZXIncyBkaXNwbGF5IG1vZGUuCisKKyAgICAgICAgTG9jayBtX09iamVjdExvY2s7
IC8vIFRocmVhZCBsb2NrIGZvciB0aGUgRDNEIGRldmljZS4KKyAgICAgICAgCisgICAgICAgIC8v
IENPTSBpbnRlcmZhY2VzCisgICAgICAgIENPTVB0cjxJRGlyZWN0M0Q5RXg+IG1fcEQzRDk7Cisg
ICAgICAgIENPTVB0cjxJRGlyZWN0M0REZXZpY2U5RXg+IG1fcERldmljZTsKKyAgICAgICAgQ09N
UHRyPElEaXJlY3QzRERldmljZU1hbmFnZXI5PiBtX3BEZXZpY2VNYW5hZ2VyOyAvLyBEaXJlY3Qz
RCBkZXZpY2UgbWFuYWdlci4KKyAgICAgICAgQ09NUHRyPElEaXJlY3QzRFN1cmZhY2U5PiBtX3BT
dXJmYWNlUmVwYWludDsgLy8gU3VyZmFjZSBmb3IgcmVwYWludCByZXF1ZXN0cy4KKworICAgICAg
ICBDT01QdHI8SURpcmVjdDNEU3VyZmFjZTk+IG1fcE1lbVN1cmZhY2U7CisgICAgICAgIGludCBt
X3dpZHRoOworICAgICAgICBpbnQgbV9oZWlnaHQ7CisgICAgfTsKKworICAgIGNsYXNzIEN1c3Rv
bVZpZGVvUHJlc2VudGVyCisgICAgICAgIDogcHVibGljIElNRlZpZGVvUHJlc2VudGVyCisgICAg
ICAgICwgcHVibGljIElNRlZpZGVvRGV2aWNlSUQKKyAgICAgICAgLCBwdWJsaWMgSU1GVG9wb2xv
Z3lTZXJ2aWNlTG9va3VwQ2xpZW50CisgICAgICAgICwgcHVibGljIElNRkdldFNlcnZpY2UKKyAg
ICAgICAgLCBwdWJsaWMgSU1GQWN0aXZhdGUKKyAgICAgICAgLCBwdWJsaWMgSU1GVmlkZW9EaXNw
bGF5Q29udHJvbAorICAgICAgICAsIHB1YmxpYyBNZWRpYVBsYXllckxpc3RlbmVyIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIEN1c3RvbVZpZGVvUHJlc2VudGVyKE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbiopOworICAgICAgICB+Q3VzdG9tVmlkZW9QcmVzZW50ZXIoKTsKKworICAg
ICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVG
SUlEIHJpaWQsIF9fUlBDX19kZXJlZl9vdXQgdm9pZCBfX1JQQ19GQVIgKl9fUlBDX0ZBUiAqcHB2
T2JqZWN0KSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQ
RSBBZGRSZWYoKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxM
VFlQRSBSZWxlYXNlKCkgb3ZlcnJpZGU7CisKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIE9uQ2xvY2tTdGFydChNRlRJTUUgaG5zU3lzdGVtVGltZSwgTE9OR0xPTkcg
bGxDbG9ja1N0YXJ0T2Zmc2V0KSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIE9uQ2xvY2tTdG9wKE1GVElNRSBobnNTeXN0ZW1UaW1lKSBvdmVycmlk
ZTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIE9uQ2xvY2tQYXVz
ZShNRlRJTUUgaG5zU3lzdGVtVGltZSkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBPbkNsb2NrUmVzdGFydChNRlRJTUUgaG5zU3lzdGVtVGltZSkg
b3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBPbkNs
b2NrU2V0UmF0ZShNRlRJTUUgaG5zU3lzdGVtVGltZSwgZmxvYXQgZmxSYXRlKSBvdmVycmlkZTsK
KworICAgICAgICAvLyBJTUZWaWRlb1ByZXNlbnRlcgorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgUHJvY2Vzc01lc3NhZ2UoTUZWUF9NRVNTQUdFX1RZUEUgZU1lc3Nh
Z2UsIFVMT05HX1BUUiB1bFBhcmFtKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIEdldEN1cnJlbnRNZWRpYVR5cGUoX091dHB0cl8gIElNRlZpZGVv
TWVkaWFUeXBlICoqcHBNZWRpYVR5cGUpIG92ZXJyaWRlOworCisgICAgICAgIC8vIElNRlZpZGVv
RGV2aWNlSUQKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldERl
dmljZUlEKElJRCogcERldmljZUlEKSBvdmVycmlkZTsKKworICAgICAgICAvLyBJTUZUb3BvbG9n
eVNlcnZpY2VMb29rdXBDbGllbnQKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIEluaXRTZXJ2aWNlUG9pbnRlcnMoX0luXyAgSU1GVG9wb2xvZ3lTZXJ2aWNlTG9va3Vw
ICpwTG9va3VwKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFJlbGVhc2VTZXJ2aWNlUG9pbnRlcnModm9pZCkgb3ZlcnJpZGU7CisKKyAgICAgICAg
Ly8gSU1GR2V0U2VydmljZQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgR2V0U2VydmljZShSRUZHVUlEIGd1aWRTZXJ2aWNlLCBSRUZJSUQgcmlpZCwgTFBWT0lEICpw
cHZPYmplY3QpOworCisgICAgICAgIC8vIElNRkFjdGl2YXRlCisgICAgICAgIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgQWN0aXZhdGVPYmplY3QoUkVGSUlEIHJpaWQsIHZvaWQgKipwcHYpOwor
ICAgICAgICBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERldGFjaE9iamVjdCgpOworICAgICAg
ICBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNodXRkb3duT2JqZWN0KCk7CisKKyAgICAgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldEl0ZW0oX19SUENfX2luIFJFRkdV
SUQgZ3VpZEtleSwgX19SUENfX2lub3V0X29wdCBQUk9QVkFSSUFOVCAqcFZhbHVlKSB7IHJldHVy
biBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEdldEl0ZW1UeXBlKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19vdXQgTUZfQVRU
UklCVVRFX1RZUEUgKnBUeXBlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENvbXBhcmVJdGVtKF9fUlBDX19pbiBSRUZHVUlE
IGd1aWRLZXksIF9fUlBDX19pbiBSRUZQUk9QVkFSSUFOVCBWYWx1ZSwgX19SUENfX291dCBCT09M
ICpwYlJlc3VsdCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBDb21wYXJlKF9fUlBDX19pbl9vcHQgSU1GQXR0cmlidXRlcyAq
cFRoZWlycywgTUZfQVRUUklCVVRFU19NQVRDSF9UWVBFIE1hdGNoVHlwZSwgX19SUENfX291dCBC
T09MICpwYlJlc3VsdCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRVSU5UMzIoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtl
eSwgX19SUENfX291dCBVSU5UMzIgKnB1blZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAg
ICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFVJTlQ2NChfX1JQQ19f
aW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19fb3V0IFVJTlQ2NCAqcHVuVmFsdWUpIHsgcmV0dXJu
IEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
R2V0RG91YmxlKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19vdXQgZG91YmxlICpw
ZlZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEdldEdVSUQoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENf
X291dCBHVUlEICpwZ3VpZFZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFN0cmluZ0xlbmd0aChfX1JQQ19faW4g
UkVGR1VJRCBndWlkS2V5LCBfX1JQQ19fb3V0IFVJTlQzMiAqcGNjaExlbmd0aCkgeyByZXR1cm4g
RV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBH
ZXRTdHJpbmcoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX291dF9lY291bnRfZnVs
bChjY2hCdWZTaXplKSBMUFdTVFIgcHdzelZhbHVlLCBVSU5UMzIgY2NoQnVmU2l6ZSwgX19SUENf
X2lub3V0X29wdCBVSU5UMzIgKnBjY2hMZW5ndGgpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAg
ICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0QWxsb2NhdGVkU3RyaW5n
KF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19kZXJlZl9vdXRfZWNvdW50X2Z1bGxf
b3B0KCgqcGNjaExlbmd0aCArIDEpKSBMUFdTVFIgKnBwd3N6VmFsdWUsIF9fUlBDX19vdXQgVUlO
VDMyICpwY2NoTGVuZ3RoKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldEJsb2JTaXplKF9fUlBDX19pbiBSRUZHVUlEIGd1
aWRLZXksIF9fUlBDX19vdXQgVUlOVDMyICpwY2JCbG9iU2l6ZSkgeyByZXR1cm4gRV9OT1RJTVBM
OyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRCbG9iKF9f
UlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19vdXRfZWNvdW50X2Z1bGwoY2JCdWZTaXpl
KSBVSU5UOCAqcEJ1ZiwgVUlOVDMyIGNiQnVmU2l6ZSwgX19SUENfX2lub3V0X29wdCBVSU5UMzIg
KnBjYkJsb2JTaXplKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIEdldEFsbG9jYXRlZEJsb2IoX19SUENfX2luIFJFRkdVSUQg
Z3VpZEtleSwgX19SUENfX2RlcmVmX291dF9lY291bnRfZnVsbF9vcHQoKnBjYlNpemUpIFVJTlQ4
ICoqcHBCdWYsIF9fUlBDX19vdXQgVUlOVDMyICpwY2JTaXplKSB7IHJldHVybiBFX05PVElNUEw7
IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFVua25vd24o
X19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX2luIFJFRklJRCByaWlkLCBfX1JQQ19f
ZGVyZWZfb3V0X29wdCBMUFZPSUQgKnBwdikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRJdGVtKF9fUlBDX19pbiBSRUZH
VUlEIGd1aWRLZXksIF9fUlBDX19pbiBSRUZQUk9QVkFSSUFOVCBWYWx1ZSkgeyByZXR1cm4gRV9O
T1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEZWxl
dGVJdGVtKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXkpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQor
ICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRGVsZXRlQWxsSXRlbXMo
dm9pZCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBTZXRVSU5UMzIoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgVUlOVDMy
IHVuVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgU2V0VUlOVDY0KF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIFVJ
TlQ2NCB1blZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFNldERvdWJsZShfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5
LCBkb3VibGUgZlZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldEdVSUQoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtl
eSwgX19SUENfX2luIFJFRkdVSUQgZ3VpZFZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAg
ICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldFN0cmluZyhfX1JQQ19f
aW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19faW5fc3RyaW5nIExQQ1dTVFIgd3N6VmFsdWUpIHsg
cmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgU2V0QmxvYihfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19faW5fZWNvdW50
X2Z1bGwoY2JCdWZTaXplKSBjb25zdCBVSU5UOCAqcEJ1ZiwgVUlOVDMyIGNiQnVmU2l6ZSkgeyBy
ZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBTZXRVbmtub3duKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19pbl9vcHQg
SVVua25vd24gKnBVbmtub3duKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIExvY2tTdG9yZSh2b2lkKSB7IHJldHVybiBFX05P
VElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVubG9j
a1N0b3JlKHZvaWQpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0Q291bnQoX19SUENfX291dCBVSU5UMzIgKnBjSXRlbXMp
IHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgR2V0SXRlbUJ5SW5kZXgoVUlOVDMyIHVuSW5kZXgsIF9fUlBDX19vdXQgR1VJRCAq
cGd1aWRLZXksIF9fUlBDX19pbm91dF9vcHQgUFJPUFZBUklBTlQgKnBWYWx1ZSkgeyByZXR1cm4g
RV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBD
b3B5QWxsSXRlbXMoX19SUENfX2luX29wdCBJTUZBdHRyaWJ1dGVzICpwRGVzdCkgeyByZXR1cm4g
RV9OT1RJTVBMOyB9CisKKyAgICAgICAgLy8gSU1GVmlkZW9EaXNwbGF5Q29udHJvbAorICAgICAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0TmF0aXZlVmlkZW9TaXplKFNJ
WkUqIHBzelZpZGVvLCBTSVpFKiBwc3pBUlZpZGVvKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAg
ICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldElkZWFsVmlkZW9TaXpl
KFNJWkUqIHBzek1pbiwgU0laRSogcHN6TWF4KSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldFZpZGVvUG9zaXRpb24oY29u
c3QgTUZWaWRlb05vcm1hbGl6ZWRSZWN0KiBwbnJjU291cmNlLCBjb25zdCBMUFJFQ1QgcHJjRGVz
dCk7CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRWaWRlb1Bv
c2l0aW9uKE1GVmlkZW9Ob3JtYWxpemVkUmVjdCogcG5yY1NvdXJjZSwgTFBSRUNUIHByY0Rlc3Qp
OworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0QXNwZWN0UmF0
aW9Nb2RlKERXT1JEIGR3QXNwZWN0UmF0aW9Nb2RlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAg
ICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldEFzcGVjdFJhdGlvTW9k
ZShEV09SRCogcGR3QXNwZWN0UmF0aW9Nb2RlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldFZpZGVvV2luZG93KEhXTkQg
aHduZFZpZGVvKTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdl
dFZpZGVvV2luZG93KEhXTkQqIHBod25kVmlkZW8pOworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgUmVwYWludFZpZGVvKCk7CisgICAgICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBHZXRDdXJyZW50SW1hZ2UoQklUTUFQSU5GT0hFQURFUiogcEJp
aCwgQllURSoqIHBEaWIsIERXT1JEKiBwY2JEaWIsIExPTkdMT05HKiBwVGltZVN0YW1wKSB7IHJl
dHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFNldEJvcmRlckNvbG9yKENPTE9SUkVGIENscikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Cisg
ICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRCb3JkZXJDb2xvcihD
T0xPUlJFRiogcENscikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRSZW5kZXJpbmdQcmVmcyhEV09SRCBkd1JlbmRlckZs
YWdzKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIEdldFJlbmRlcmluZ1ByZWZzKERXT1JEKiBwZHdSZW5kZXJGbGFncykgeyBy
ZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBTZXRGdWxsc2NyZWVuKEJPT0wgYkZ1bGxzY3JlZW4pIHsgcmV0dXJuIEVfTk9USU1QTDsg
fQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0RnVsbHNjcmVl
bihCT09MKiBwYkZ1bGxzY3JlZW4pIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorCisgICAgICAgIHZp
cnR1YWwgdm9pZCBvbk1lZGlhUGxheWVyRGVsZXRlZCgpIG92ZXJyaWRlOworCisgICAgICAgIHZv
aWQgcGFpbnRDdXJyZW50RnJhbWUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jik7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBVTE9ORyBtX3JlZkNvdW50OworICAgICAgICBMb2Nr
IG1fb2JqZWN0TG9jazsKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
KiBtX21lZGlhUGxheWVyOworCisgICAgICAgIGVudW0gUkVOREVSX1NUQVRFIHsKKyAgICAgICAg
ICAgIFJFTkRFUl9TVEFURV9TVEFSVEVEID0gMSwKKyAgICAgICAgICAgIFJFTkRFUl9TVEFURV9T
VE9QUEVELAorICAgICAgICAgICAgUkVOREVSX1NUQVRFX1BBVVNFRCwKKyAgICAgICAgICAgIFJF
TkRFUl9TVEFURV9TSFVURE9XTiwgLy8gSW5pdGlhbCBzdGF0ZS4KKyAgICAgICAgfTsKKworICAg
ICAgICAvLyBGUkFNRVNURVBfU1RBVEU6IERlZmluZXMgdGhlIHByZXNlbnRlcidzIHN0YXRlIHdp
dGggcmVzcGVjdCB0byBmcmFtZS1zdGVwcGluZy4KKyAgICAgICAgZW51bSBGUkFNRVNURVBfU1RB
VEUgeworICAgICAgICAgICAgRlJBTUVTVEVQX05PTkUsIC8vIE5vdCBmcmFtZSBzdGVwcGluZy4K
KyAgICAgICAgICAgIEZSQU1FU1RFUF9XQUlUSU5HX1NUQVJULCAvLyBGcmFtZSBzdGVwcGluZywg
YnV0IHRoZSBjbG9jayBpcyBub3Qgc3RhcnRlZC4KKyAgICAgICAgICAgIEZSQU1FU1RFUF9QRU5E
SU5HLCAvLyBDbG9jayBpcyBzdGFydGVkLiBXYWl0aW5nIGZvciBzYW1wbGVzLgorICAgICAgICAg
ICAgRlJBTUVTVEVQX1NDSEVEVUxFRCwgLy8gU3VibWl0dGVkIGEgc2FtcGxlIGZvciByZW5kZXJp
bmcuCisgICAgICAgICAgICBGUkFNRVNURVBfQ09NUExFVEUgLy8gU2FtcGxlIHdhcyByZW5kZXJl
ZC4gCisKKyAgICAgICAgICAgIC8vIFN0YXRlIHRyYW5zaXRpb25zOgorCisgICAgICAgICAgICAv
LyBNRlZQX01FU1NBR0VfU1RFUCAgICAgICAgICAgICAgICAtPiBXQUlUSU5HX1NUQVJUCisgICAg
ICAgICAgICAvLyBPbkNsb2NrU3RhcnQvT25DbG9ja1Jlc3RhcnQgICAgICAtPiBQRU5ESU5HCisg
ICAgICAgICAgICAvLyBNRlZQX01FU1NBR0VfUFJPQ0VTU0lOUFVUTk9USUZZICAtPiBTVUJNSVRU
RUQKKyAgICAgICAgICAgIC8vIE9uU2FtcGxlRnJlZSAgICAgICAgICAgICAgICAgICAgIC0+IENP
TVBMRVRFCisgICAgICAgICAgICAvLyBNRlZQX01FU1NBR0VfQ0FOQ0VMICAgICAgICAgICAgICAt
PiBOT05FCisgICAgICAgICAgICAvLyBPbkNsb2NrU3RvcCAgICAgICAgICAgICAgICAgICAgICAt
PiBOT05FCisgICAgICAgICAgICAvLyBPbkNsb2NrU2V0UmF0ZSggbm9uLXplcm8gKSAgICAgICAt
PiBOT05FCisgICAgICAgIH07CisKKyAgICAgICAgLy8gRnJhbWVTdGVwOiBIb2xkcyBpbmZvcm1h
dGlvbiByZWxhdGVkIHRvIGZyYW1lLXN0ZXBwaW5nLiAKKyAgICAgICAgLy8gTm90ZTogVGhlIHB1
cnBvc2Ugb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgc2ltcGx5IHRvIG9yZ2FuaXplIHRoZSBkYXRhIGlu
IG9uZSB2YXJpYWJsZS4KKyAgICAgICAgc3RydWN0IEZyYW1lU3RlcCB7CisgICAgICAgICAgICBG
cmFtZVN0ZXAoKQorICAgICAgICAgICAgICAgIDogc3RhdGUoRlJBTUVTVEVQX05PTkUpCisgICAg
ICAgICAgICAgICAgLCBzdGVwcygwKQorICAgICAgICAgICAgICAgICwgcFNhbXBsZU5vUmVmKDAp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEZSQU1FU1RFUF9T
VEFURSBzdGF0ZTsgLy8gQ3VycmVudCBmcmFtZS1zdGVwIHN0YXRlLgorICAgICAgICAgICAgVmlk
ZW9TYW1wbGVMaXN0IHNhbXBsZXM7IC8vIExpc3Qgb2YgcGVuZGluZyBzYW1wbGVzIGZvciBmcmFt
ZS1zdGVwcGluZy4KKyAgICAgICAgICAgIERXT1JEIHN0ZXBzOyAvLyBOdW1iZXIgb2Ygc3RlcHMg
bGVmdC4KKyAgICAgICAgICAgIERXT1JEX1BUUiBwU2FtcGxlTm9SZWY7IC8vIElkZW50aWZpZXMg
dGhlIGZyYW1lLXN0ZXAgc2FtcGxlLgorICAgICAgICB9OworCisgICAgICAgIFJFTkRFUl9TVEFU
RSBtX1JlbmRlclN0YXRlOworICAgICAgICBDT01QdHI8SU1GQ2xvY2s+IG1fcENsb2NrOworICAg
ICAgICBDT01QdHI8SU1lZGlhRXZlbnRTaW5rPiBtX3BNZWRpYUV2ZW50U2luazsKKyAgICAgICAg
Q09NUHRyPElNRlRyYW5zZm9ybT4gbV9wTWl4ZXI7CisgICAgICAgIENPTVB0cjxJTUZNZWRpYVR5
cGU+IG1fcE1lZGlhVHlwZTsKKyAgICAgICAgRDNEUHJlc2VudEVuZ2luZSogbV9wRDNEUHJlc2Vu
dEVuZ2luZTsKKyAgICAgICAgTUZWaWRlb05vcm1hbGl6ZWRSZWN0IG1fbnJjU291cmNlOworICAg
ICAgICBib29sIG1fYlNhbXBsZU5vdGlmeTsKKyAgICAgICAgYm9vbCBtX2JQcmVyb2xsZWQ7Cisg
ICAgICAgIGJvb2wgbV9iUmVwYWludDsKKyAgICAgICAgYm9vbCBtX2JFbmRTdHJlYW1pbmc7Cisg
ICAgICAgIFNjaGVkdWxlciBtX3NjaGVkdWxlcjsKKyAgICAgICAgU2FtcGxlUG9vbCBtX1NhbXBs
ZVBvb2w7CisgICAgICAgIHVuc2lnbmVkIG1fVG9rZW5Db3VudGVyOworICAgICAgICBGcmFtZVN0
ZXAgbV9GcmFtZVN0ZXA7CisgICAgICAgIGZsb2F0IG1fZlJhdGU7CisgICAgICAgIE1lZGlhRm91
bmRhdGlvblV0aWxzOjpBc3luY0NhbGxiYWNrPEN1c3RvbVZpZGVvUHJlc2VudGVyPiBtX1NhbXBs
ZUZyZWVDQjsKKworICAgICAgICBib29sIElzQWN0aXZlKCk7CisKKyAgICAgICAgLy8gSXNTY3J1
YmJpbmc6IFNjcnViYmluZyBvY2N1cnMgd2hlbiB0aGUgZnJhbWUgcmF0ZSBpcyAwLgorICAgICAg
ICBpbmxpbmUgQk9PTCBJc1NjcnViYmluZygpIGNvbnN0IHsgcmV0dXJuIG1fZlJhdGUgPT0gMC4w
ZjsgfQorCisgICAgICAgIEhSRVNVTFQgQ29uZmlndXJlTWl4ZXIoSU1GVHJhbnNmb3JtICpwTWl4
ZXIpOworICAgICAgICBIUkVTVUxUIEZsdXNoKCk7CisgICAgICAgIEhSRVNVTFQgU2V0TWVkaWFU
eXBlKElNRk1lZGlhVHlwZSAqcE1lZGlhVHlwZSk7CisgICAgICAgIEhSRVNVTFQgQ2hlY2tTaHV0
ZG93bigpIGNvbnN0OworICAgICAgICBIUkVTVUxUIFJlbmVnb3RpYXRlTWVkaWFUeXBlKCk7Cisg
ICAgICAgIEhSRVNVTFQgUHJvY2Vzc0lucHV0Tm90aWZ5KCk7CisgICAgICAgIEhSRVNVTFQgQmVn
aW5TdHJlYW1pbmcoKTsKKyAgICAgICAgSFJFU1VMVCBFbmRTdHJlYW1pbmcoKTsKKyAgICAgICAg
SFJFU1VMVCBDaGVja0VuZE9mU3RyZWFtKCk7CisgICAgICAgIEhSRVNVTFQgSXNNZWRpYVR5cGVT
dXBwb3J0ZWQoSU1GTWVkaWFUeXBlICpwTWVkaWFUeXBlKTsKKyAgICAgICAgSFJFU1VMVCBDcmVh
dGVPcHRpbWFsVmlkZW9UeXBlKElNRk1lZGlhVHlwZSogcFByb3Bvc2VkVHlwZSwgSU1GTWVkaWFU
eXBlICoqcHBPcHRpbWFsVHlwZSk7CisgICAgICAgIEhSRVNVTFQgQ2FsY3VsYXRlT3V0cHV0UmVj
dGFuZ2xlKElNRk1lZGlhVHlwZSAqcFByb3Bvc2VkVHlwZSwgUkVDVCAqcHJjT3V0cHV0KTsKKwor
ICAgICAgICBIUkVTVUxUIFByZXBhcmVGcmFtZVN0ZXAoRFdPUkQgY1N0ZXBzKTsKKyAgICAgICAg
SFJFU1VMVCBTdGFydEZyYW1lU3RlcCgpOworICAgICAgICBIUkVTVUxUIERlbGl2ZXJGcmFtZVN0
ZXBTYW1wbGUoSU1GU2FtcGxlICpwU2FtcGxlKTsKKyAgICAgICAgSFJFU1VMVCBDb21wbGV0ZUZy
YW1lU3RlcChJTUZTYW1wbGUgKnBTYW1wbGUpOworICAgICAgICBIUkVTVUxUIENhbmNlbEZyYW1l
U3RlcCgpOworCisgICAgICAgIHZvaWQgUHJvY2Vzc091dHB1dExvb3AoKTsKKyAgICAgICAgSFJF
U1VMVCBQcm9jZXNzT3V0cHV0KCk7CisgICAgICAgIEhSRVNVTFQgRGVsaXZlclNhbXBsZShJTUZT
YW1wbGUgKnBTYW1wbGUsIEJPT0wgYlJlcGFpbnQpOworICAgICAgICBIUkVTVUxUIFRyYWNrU2Ft
cGxlKElNRlNhbXBsZSAqcFNhbXBsZSk7CisgICAgICAgIHZvaWQgUmVsZWFzZVJlc291cmNlcygp
OworCisgICAgICAgIEhSRVNVTFQgT25TYW1wbGVGcmVlKElNRkFzeW5jUmVzdWx0ICpwUmVzdWx0
KTsKKworICAgICAgICB2b2lkIE5vdGlmeUV2ZW50KGxvbmcgRXZlbnRDb2RlLCBMT05HX1BUUiBQ
YXJhbTEsIExPTkdfUFRSIFBhcmFtMik7CisKKyAgICB9OworCisgICAgQ09NUHRyPEN1c3RvbVZp
ZGVvUHJlc2VudGVyPiBtX3ByZXNlbnRlcjsKIH07CiAKIH0KKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264947</attachid>
            <date>2015-11-06 12:08:48 -0800</date>
            <delta_ts>2015-11-09 06:29:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150941-20151106210748.patch</filename>
            <type>text/plain</type>
            <size>170616</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MjA3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxMCBAQAorMjAxNS0xMS0wNSAgUGVyIEFy
bmUgVm9sbGFuICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXVtWaWRl
b11bTWVkaWFGb3VuZGF0aW9uXSBWaWRlbyBzaG91bGQgYmUgcmVuZGVyZWQgaW4gcHJvdmlkZWQg
Z3JhcGhpY3MgY29udGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDk0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE9uIFdpbkNhaXJvLCB3ZSBjdXJyZW50bHkgcmVuZGVyIHZpZGVvIGluIGEgY2hp
bGQgd2luZG93IG9mIHRoZSBtYWluIGJyb3dzZXIgd2luZG93LgorICAgICAgICBUaGlzIG1ha2Vz
IGl0IGRpZmZpY3VsdCB0byByZW5kZXIgdGhpbmdzIG9uIHRvcCBvZiB0aGUgdmlkZW8sIGxpa2Ug
dmlkZW8gY29udHJvbHMgYW5kCisgICAgICAgIGNvbnRleHQgbWVudXMuIFdlIHNob3VsZCByZW5k
ZXIgdGhlIHZpZGVvIGluIHRoZSBncmFwaGljcyBjb250ZXh0IHByb3ZpZGVkIGJ5IHRoZSBwYWlu
dAorICAgICAgICBtZXRob2QuIFRoaXMgaXMgZG9uZSBieSBpbXBsZW1lbnRpbmcgYSBjdXN0b20g
RVZSIChFbmhhbmNlZCBWaWRlbyBSZW5kZXJlcikgcHJlc2VudGVyCisgICAgICAgIGZvciBNZWRp
YSBGb3VuZGF0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhRm91
bmRhdGlvblV0aWxzLmg6IEFkZGVkLgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1G
VGltZVRvTXNlYyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXJlQ29tT2JqZWN0
c0VxdWFsKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6OklzVmFs
aWQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6R2V0TWVkaWFU
eXBlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6Ok1lZGlhVHlw
ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjp+TWVkaWFUeXBl
KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6Om9wZXJhdG9yPSk6
CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpvcGVyYXRvciYpOgor
ICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6b3BlcmF0b3IgSU1GTWVk
aWFUeXBlKik6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpDcmVh
dGVFbXB0eVR5cGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6
RGV0YWNoKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6OkdldE1h
am9yVHlwZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpJc0Nv
bXByZXNzZWRGb3JtYXQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlw
ZTo6SXNFcXVhbCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpH
ZXRSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFU
eXBlOjpGcmVlUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6
Ok1lZGlhVHlwZTo6Q29weUZyb20pOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1l
ZGlhVHlwZTo6U2V0TWFqb3JUeXBlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpN
ZWRpYVR5cGU6OkdldFN1YlR5cGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1l
ZGlhVHlwZTo6U2V0U3ViVHlwZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVk
aWFUeXBlOjpHZXRGb3VyQ0MpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlh
VHlwZTo6R2V0QWxsU2FtcGxlc0luZGVwZW5kZW50KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlv
blV0aWxzOjpNZWRpYVR5cGU6OlNldEFsbFNhbXBsZXNJbmRlcGVuZGVudCk6CisgICAgICAgIChN
ZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpHZXRGaXhlZFNpemVTYW1wbGVzKToKKyAg
ICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6OlNldEZpeGVkU2l6ZVNhbXBs
ZXMpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6R2V0U2FtcGxl
U2l6ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpTZXRTYW1w
bGVTaXplKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6OlVud3Jh
cCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpBbGxTYW1wbGVz
SW5kZXBlbmRlbnQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6
Rml4ZWRTaXplU2FtcGxlcyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFU
eXBlOjpTYW1wbGVTaXplKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5
cGU6OlZpZGVvVHlwZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBl
OjpDcmVhdGVFbXB0eVR5cGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVv
VHlwZTo6R2V0SW50ZXJsYWNlTW9kZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6
VmlkZW9UeXBlOjpTZXRJbnRlcmxhY2VNb2RlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0
aWxzOjpWaWRlb1R5cGU6OkdldERlZmF1bHRTdHJpZGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0
aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0RGVmYXVsdFN0cmlkZSk6CisgICAgICAgIChNZWRpYUZv
dW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRGcmFtZURpbWVuc2lvbnMpOgorICAgICAgICAo
TWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0RnJhbWVEaW1lbnNpb25zKToKKyAg
ICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldERhdGFCaXRFcnJvclJh
dGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0RGF0YUJp
dEVycm9yUmF0ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpH
ZXRBdmVyYWdlQml0UmF0ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9U
eXBlOjpTZXRBdmdlcmFnZUJpdFJhdGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6
OlZpZGVvVHlwZTo6R2V0Q3VzdG9tVmlkZW9QcmltYXJpZXMpOgorICAgICAgICAoTWVkaWFGb3Vu
ZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0Q3VzdG9tVmlkZW9QcmltYXJpZXMpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0RnJhbWVSYXRlKToKKyAgICAg
ICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OlNldEZyYW1lUmF0ZSk6CisgICAg
ICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRHZW9tZXRyaWNBcGVydHVy
ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRHZW9tZXRy
aWNBcGVydHVyZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpH
ZXRNYXhLZXlmcmFtZVNwYWNpbmcpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZp
ZGVvVHlwZTo6U2V0TWF4S2V5ZnJhbWVTcGFjaW5nKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlv
blV0aWxzOjpWaWRlb1R5cGU6OkdldE1pbkRpc3BsYXlBcGVydHVyZSk6CisgICAgICAgIChNZWRp
YUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRNaW5EaXNwbGF5QXBlcnR1cmUpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0UGFkQ29udHJvbEZsYWdz
KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OlNldFBhZENvbnRy
b2xGbGFncyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRQ
YWxldHRlRW50cmllcyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBl
OjpTZXRQYWxldHRlRW50cmllcyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6Vmlk
ZW9UeXBlOjpHZXROdW1QYWxldHRlRW50cmllcyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25V
dGlsczo6VmlkZW9UeXBlOjpHZXRQYW5TY2FuQXBlcnR1cmUpOgorICAgICAgICAoTWVkaWFGb3Vu
ZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0UGFuU2NhbkFwZXJ0dXJlKToKKyAgICAgICAgKE1l
ZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OklzUGFuU2NhbkVuYWJsZWQpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0UGFuU2NhbkVuYWJsZWQpOgor
ICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0UGl4ZWxBc3BlY3RS
YXRpbyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRQaXhl
bEFzcGVjdFJhdGlvKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6
OkdldFNvdXJjZUNvbnRlbnRIaW50KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpW
aWRlb1R5cGU6OlNldFNvdXJjZUNvbnRlbnRIaW50KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlv
blV0aWxzOjpWaWRlb1R5cGU6OkdldFRyYW5zZmVyRnVuY3Rpb24pOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0VHJhbnNmZXJGdW5jdGlvbik6CisgICAgICAg
IChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRDaHJvbWFTaXRpbmcpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0Q2hyb21hU2l0aW5nKToK
KyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldFZpZGVvTGlnaHRp
bmcpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0VmlkZW9M
aWdodGluZyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRW
aWRlb05vbWluYWxSYW5nZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9U
eXBlOjpTZXRWaWRlb05vbWluYWxSYW5nZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6VmlkZW9UeXBlOjpHZXRWaWRlb1ByaW1hcmllcyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRp
b25VdGlsczo6VmlkZW9UeXBlOjpTZXRWaWRlb1ByaW1hcmllcyk6CisgICAgICAgIChNZWRpYUZv
dW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRZVVZNYXRyaXgpOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0WVVWTWF0cml4KToKKyAgICAgICAgKE1lZGlh
Rm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldFZpZGVvRGlzcGxheUFyZWEpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6QXVkaW9UeXBlKToKKyAgICAgICAg
KE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OkNyZWF0ZUVtcHR5VHlwZSk6CisgICAg
ICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXVkaW9UeXBlOjpHZXRBdmdlcmFnZUJ5dGVzUGVy
U2Vjb25kKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OlNldEF2
Z2VyYWdlQnl0ZXNQZXJTZWNvbmQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1
ZGlvVHlwZTo6R2V0Qml0c1BlclNhbXBsZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6QXVkaW9UeXBlOjpTZXRCaXRzUGVyU2FtcGxlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlv
blV0aWxzOjpBdWRpb1R5cGU6OkdldEJsb2NrQWxpZ25tZW50KToKKyAgICAgICAgKE1lZGlhRm91
bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OlNldEJsb2NrQWxpZ25tZW50KToKKyAgICAgICAgKE1l
ZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OkdldENoYW5uZWxNYXNrKToKKyAgICAgICAg
KE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OlNldENoYW5uZWxNYXNrKToKKyAgICAg
ICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OkdldEZsb2F0U2FtcGxlc1BlclNl
Y29uZCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXVkaW9UeXBlOjpTZXRGbG9h
dFNhbXBsZXNQZXJTZWNvbmQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlv
VHlwZTo6R2V0TnVtQ2hhbm5lbHMpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1
ZGlvVHlwZTo6U2V0TnVtQ2hhbm5lbHMpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6
OkF1ZGlvVHlwZTo6R2V0U2FtcGxlc1BlckJsb2NrKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlv
blV0aWxzOjpBdWRpb1R5cGU6OlNldFNhbXBsZXNQZXJCbG9jayk6CisgICAgICAgIChNZWRpYUZv
dW5kYXRpb25VdGlsczo6QXVkaW9UeXBlOjpHZXRTYW1wbGVzUGVyU2Vjb25kKToKKyAgICAgICAg
KE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OlNldFNhbXBsZXNQZXJTZWNvbmQpOgor
ICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6R2V0VmFsaWRCaXRzUGVy
U2FtcGxlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OlNldFZh
bGlkQml0c1BlclNhbXBsZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXVkaW9U
eXBlOjpBdmdlcmFnZUJ5dGVzUGVyU2Vjb25kKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0
aWxzOjpBdWRpb1R5cGU6OkJpdHNQZXJTYW1wbGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9u
VXRpbHM6OkF1ZGlvVHlwZTo6RmxvYXRTYW1wbGVzUGVyU2Vjb25kKToKKyAgICAgICAgKE1lZGlh
Rm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6Ok51bUNoYW5uZWxzKToKKyAgICAgICAgKE1lZGlh
Rm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OlNhbXBsZXNQZXJTZWNvbmQpOgorICAgICAgICAo
TWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6Ok1QRUdWaWRlb1R5cGUpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6OkdldE1wZWdTZXFIZWFk
ZXIpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6OlNldE1w
ZWdTZXFIZWFkZXIpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5
cGU6OkdldE1wZWdTZXFIZWFkZXJTaXplKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxz
OjpNUEVHVmlkZW9UeXBlOjpHZXRTdGFydFRpbWVDb2RlKToKKyAgICAgICAgKE1lZGlhRm91bmRh
dGlvblV0aWxzOjpNUEVHVmlkZW9UeXBlOjpTZXRTdGFydFRpbWVDb2RlKToKKyAgICAgICAgKE1l
ZGlhRm91bmRhdGlvblV0aWxzOjpNUEVHVmlkZW9UeXBlOjpHZXRNUEVHMkZsYWdzKToKKyAgICAg
ICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNUEVHVmlkZW9UeXBlOjpTZXRNUEVHMkZsYWdzKToK
KyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNUEVHVmlkZW9UeXBlOjpHZXRNUEVHMkxl
dmVsKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNUEVHVmlkZW9UeXBlOjpTZXRN
UEVHMkxldmVsKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNUEVHVmlkZW9UeXBl
OjpHZXRNUEVHMlByb2ZpbGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdW
aWRlb1R5cGU6OlNldE1QRUcyUHJvZmlsZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6TWFrZU9mZnNldCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWFrZUFyZWEp
OgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkdldEZyYW1lUmF0ZSk6CisgICAgICAg
IChNZWRpYUZvdW5kYXRpb25VdGlsczo6R2V0VmlkZW9EaXNwbGF5QXJlYSk6CisgICAgICAgIChN
ZWRpYUZvdW5kYXRpb25VdGlsczo6R2V0RGVmYXVsdFN0cmlkZSk6CisgICAgICAgIChNZWRpYUZv
dW5kYXRpb25VdGlsczo6QXN5bmNDYWxsYmFjazo6QXN5bmNDYWxsYmFjayk6CisgICAgICAgIChN
ZWRpYUZvdW5kYXRpb25VdGlsczo6QXN5bmNDYWxsYmFjazo6UXVlcnlJbnRlcmZhY2UpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkFzeW5jQ2FsbGJhY2s6OkFkZFJlZik6CisgICAg
ICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXN5bmNDYWxsYmFjazo6UmVsZWFzZSk6CisgICAg
ICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXN5bmNDYWxsYmFjazo6R2V0UGFyYW1ldGVycyk6
CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXN5bmNDYWxsYmFjazo6SW52b2tlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uLmNwcDoKKyAgICAgICAgKE1GQ3JlYXRlTWVkaWFUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmlzQXZhaWxhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0U2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Y3JlYXRlU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OmVuZEdldEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3JlYXRlVmlkZW9XaW5kb3cpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpkZXN0cm95VmlkZW9X
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjppbnZhbGlkYXRlRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6YWRkTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVPdXRwdXROb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6b25Ub3Bv
bG9neVNldCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OkFzeW5jQ2FsbGJhY2s6Om9uTWVkaWFQbGF5ZXJEZWxldGVkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OkN1c3RvbVZpZGVvUHJlc2VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6On5DdXN0b21W
aWRlb1ByZXNlbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpRdWVyeUludGVyZmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZp
ZGVvUHJlc2VudGVyOjpBZGRSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6UmVsZWFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZp
ZGVvUHJlc2VudGVyOjpPbkNsb2NrU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1N0
b3ApOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1BhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6
Ok9uQ2xvY2tSZXN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9uQ2xvY2tTZXRSYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9t
VmlkZW9QcmVzZW50ZXI6OlByb2Nlc3NNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEN1
cnJlbnRNZWRpYVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0RGV2aWNlSUQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6SW5pdFNlcnZpY2VQb2ludGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpSZWxl
YXNlU2VydmljZVBvaW50ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFNlcnZpY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21W
aWRlb1ByZXNlbnRlcjo6QWN0aXZhdGVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6RGV0YWNo
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNodXRkb3duT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OlNldFZpZGVvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFZpZGVvV2luZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OlNldE1peGVyU291cmNlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjpTZXRWaWRlb1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFZpZGVvUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6UmVwYWludFZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6
OnBhaW50Q3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Om9uTWVkaWFQbGF5ZXJEZWxl
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OklzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNv
bmZpZ3VyZU1peGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkZsdXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkFyZU1lZGlhVHlwZXNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTZXRNZWRpYVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpD
dXN0b21WaWRlb1ByZXNlbnRlcjo6Q2hlY2tTaHV0ZG93bik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpS
ZW5lZ290aWF0ZU1lZGlhVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpQcm9jZXNzSW5wdXROb3Rp
ZnkpOgorICAgICAgICAoV2ViQ29yZTo6TUZPZmZzZXRUb0Zsb2F0KToKKyAgICAgICAgKFdlYkNv
cmU6OlZhbGlkYXRlVmlkZW9BcmVhKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkJlZ2luU3RyZWFtaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkVuZFN0cmVhbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpD
aGVja0VuZE9mU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OklzTWVkaWFUeXBlU3VwcG9ydGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNyZWF0ZU9wdGltYWxWaWRlb1R5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29ycmVjdEFzcGVjdFJhdGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNhbGN1bGF0
ZU91dHB1dFJlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpQcmVwYXJlRnJhbWVTdGVwKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OlN0YXJ0RnJhbWVTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNv
bXBsZXRlRnJhbWVTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNhbmNlbEZyYW1lU3RlcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3Rv
bVZpZGVvUHJlc2VudGVyOjpQcm9jZXNzT3V0cHV0TG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZXREZXNpcmVkU2FtcGxlVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGVhckRlc2lyZWRTYW1w
bGVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlByb2Nlc3NPdXRwdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNl
bnRlcjo6RGVsaXZlclNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpJc1NhbXBsZVRpbWVQYXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6RGVsaXZlckZyYW1lU3RlcFNhbXBsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpUcmFja1NhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpSZWxlYXNlUmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9uU2FtcGxlRnJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpOb3RpZnlFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OlNhbXBsZVBvb2w6OlNhbXBsZVBvb2wpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTYW1wbGVQb29sOjp+U2FtcGxlUG9v
bCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OlNhbXBsZVBvb2w6OmdldFNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OlNhbXBsZVBvb2w6OnJldHVyblNhbXBsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlNhbXBsZVBvb2w6
OmFyZVNhbXBsZXNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6U2FtcGxlUG9vbDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlNhbXBsZVBvb2w6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
U2NoZWR1bGVyOjpTY2hlZHVsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVsZXI6On5TY2hlZHVsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVsZXI6OlNldEZy
YW1lUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OlNjaGVkdWxlcjo6U3RhcnRTY2hlZHVsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVsZXI6OlN0b3BTY2hlZHVsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpT
Y2hlZHVsZXI6OkZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpTY2hlZHVsZVNhbXBsZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlNjaGVkdWxlcjo6UHJvY2Vz
c1NhbXBsZXNJblF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpQcm9jZXNzU2FtcGxlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpTY2hlZHVs
ZXJUaHJlYWRQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6U2NoZWR1bGVyOjpTY2hlZHVsZXJUaHJlYWRQcm9jUHJpdmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQzRFByZXNl
bnRFbmdpbmU6OkQzRFByZXNlbnRFbmdpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjp+RDNEUHJlc2VudEVu
Z2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkQzRFByZXNlbnRFbmdpbmU6OkdldFNlcnZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpDaGVja0Zv
cm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkQzRFByZXNlbnRFbmdpbmU6OlNldFZpZGVvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6U2V0
RGVzdGluYXRpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6Q3JlYXRlVmlkZW9TYW1wbGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJl
c2VudEVuZ2luZTo6UmVsZWFzZVJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQzRFByZXNlbnRFbmdpbmU6OkNoZWNrRGV2aWNl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpEM0RQcmVzZW50RW5naW5lOjpQcmVzZW50U2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6UGFp
bnRDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpJbml0aWFsaXplRDNEKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVu
Z2luZTo6Q3JlYXRlRDNERGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6Q3JlYXRlRDNEU2FtcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNE
UHJlc2VudEVuZ2luZTo6UHJlc2VudFN3YXBDaGFpbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQzRFByZXNlbnRFbmdpbmU6OlBhaW50RnJh
bWVXaXRoR0RJKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6R2V0U3dhcENoYWluUHJlc2VudFBhcmFtZXRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpE
M0RQcmVzZW50RW5naW5lOjpVcGRhdGVEZXN0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaW5k
QWRhcHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVsZXI6OlNldENhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpTZXRD
bG9ja1JhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpTY2hlZHVsZXI6Okxhc3RTYW1wbGVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpGcmFtZUR1cmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
RDNEUHJlc2VudEVuZ2luZTo6R2V0VmlkZW9XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpHZXREZXN0
aW5hdGlvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpSZWZyZXNoUmF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQzRFByZXNlbnRFbmdpbmU6
Ok9uQ3JlYXRlVmlkZW9TYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6T25SZWxlYXNlUmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0SXRl
bVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Q29tcGFyZUl0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRl
cjo6Q29tcGFyZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRVSU5UMzIpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNl
bnRlcjo6R2V0VUlOVDY0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldERvdWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpHZXRHVUlEKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFN0cmluZ0xlbmd0aCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1
c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0QWxs
b2NhdGVkU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEJsb2JTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OkdldEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0QWxsb2NhdGVkQmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1
c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRVbmtub3duKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldEl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6RGVsZXRlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpE
ZWxldGVBbGxJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTZXRVSU5UMzIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1By
ZXNlbnRlcjo6U2V0VUlOVDY0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldERvdWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZp
ZGVvUHJlc2VudGVyOjpTZXRHVUlEKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3Rv
bVZpZGVvUHJlc2VudGVyOjpTZXRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldFVua25vd24p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpD
dXN0b21WaWRlb1ByZXNlbnRlcjo6TG9ja1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlVubG9j
a1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6
OkdldEl0ZW1CeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNvcHlBbGxJdGVtcyk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZp
ZGVvUHJlc2VudGVyOjpHZXROYXRpdmVWaWRlb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0
SWRlYWxWaWRlb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0QXNwZWN0UmF0aW9Nb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OkdldEFzcGVjdFJhdGlvTW9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpHZXRDdXJyZW50SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0Qm9yZGVyQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6R2V0Qm9yZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0
UmVuZGVyaW5nUHJlZnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0UmVuZGVyaW5nUHJlZnMpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6U2V0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRG
dWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkZyYW1lU3RlcDo6RnJhbWVTdGVwKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9t
VmlkZW9QcmVzZW50ZXI6OklzU2NydWJiaW5nKToKKwogMjAxNS0xMS0wNSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuIElEQjogSW1wbGVtZW50IElE
QkluZGV4IGdldC9nZXRLZXkvY291bnQgcmVxdWVzdHMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFGb3VuZGF0aW9uVXRpbHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFGb3VuZGF0aW9uVXRp
bHMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFGb3VuZGF0aW9uVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMTYg
QEAKKyNpZm5kZWYgTWVkaWFGb3VuZGF0aW9uVXRpbHNfaAorI2RlZmluZSBNZWRpYUZvdW5kYXRp
b25VdGlsc19oCisKKyNpbmNsdWRlIDxNZmFwaS5oPgorI2luY2x1ZGUgPE1mZXJyb3IuaD4KKyNp
bmNsdWRlIDxNZmlkbC5oPgorCituYW1lc3BhY2UgTWVkaWFGb3VuZGF0aW9uVXRpbHMgeworCitj
bGFzcyBNZWRpYVR5cGU7CitjbGFzcyBBdWRpb1R5cGU7CitjbGFzcyBWaWRlb1R5cGU7CitjbGFz
cyBNUEVHVmlkZW9UeXBlOworCitNRk9mZnNldCBNYWtlT2Zmc2V0KGZsb2F0IHYpOworTUZWaWRl
b0FyZWEgTWFrZUFyZWEoZmxvYXQgeCwgZmxvYXQgeSwgRFdPUkQgd2lkdGgsIERXT1JEIGhlaWdo
dCk7CisKK0hSRVNVTFQgR2V0RnJhbWVSYXRlKElNRk1lZGlhVHlwZSAqcFR5cGUsIE1GUmF0aW8g
KnBSYXRpbyk7CitIUkVTVUxUIEdldFZpZGVvRGlzcGxheUFyZWEoSU1GTWVkaWFUeXBlICpwVHlw
ZSwgTUZWaWRlb0FyZWEgKnBBcmVhKTsKK0hSRVNVTFQgR2V0RGVmYXVsdFN0cmlkZShJTUZNZWRp
YVR5cGUgKnBUeXBlLCBMT05HICpwbFN0cmlkZSk7CisKKy8vIE1GVGltZVRvTWlsbGlzZWNvbmRz
OiBDb252ZXJ0IDEwMC1uYW5vc2Vjb25kIHRpbWUgdG8gbWlsbGlzZWNvbmRzLgoraW5saW5lIExP
TkcgTUZUaW1lVG9NaWxsaXNlY29uZHMoY29uc3QgTE9OR0xPTkcmIHRpbWUpCit7CisgICAgcmV0
dXJuICh0aW1lIC8gMTAwMDApOworfQorCisvLyBOYW1lOiBBcmVDT01PYmplY3RzRXF1YWwgW3Rl
bXBsYXRlXQorLy8gRGVzYzogVGVzdHMgdHdvIENPTSBwb2ludGVycyBmb3IgZXF1YWxpdHkuCisK
K3RlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+Citib29sIEFyZUNvbU9iamVjdHNFcXVhbChU
MSAqcDEsIFQyICpwMikKK3sKKyAgICBib29sIGJSZXN1bHQgPSBmYWxzZTsKKyAgICBpZiAoIXAx
ICYmICFwMikgeworICAgICAgICAvLyBCb3RoIGFyZSBudWxscHRyCisgICAgICAgIGJSZXN1bHQg
PSB0cnVlOworICAgIH0gZWxzZSBpZiAoIXAxIHx8ICFwMikgeworICAgICAgICAvLyBPbmUgaXMg
bnVsbHB0ciBhbmQgb25lIGlzIG5vdAorICAgICAgICBiUmVzdWx0ID0gZmFsc2U7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gQm90aCBhcmUgbm90IG51bGxwdHIuIENvbXBhcmUgSVVua25vd25z
LgorICAgICAgICBJVW5rbm93biAqcFVuazEgPSBudWxscHRyOworICAgICAgICBJVW5rbm93biAq
cFVuazIgPSBudWxscHRyOworICAgICAgICBpZiAoU1VDQ0VFREVEKHAxLT5RdWVyeUludGVyZmFj
ZShJSURfSVVua25vd24sICh2b2lkKiopJnBVbmsxKSkpIHsKKyAgICAgICAgICAgIGlmIChTVUND
RUVERUQocDItPlF1ZXJ5SW50ZXJmYWNlKElJRF9JVW5rbm93biwgKHZvaWQqKikmcFVuazIpKSkg
eworICAgICAgICAgICAgICAgIGJSZXN1bHQgPSAocFVuazEgPT0gcFVuazIpOworICAgICAgICAg
ICAgICAgIHBVbmsyLT5SZWxlYXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwVW5r
MS0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBiUmVzdWx0OworfQor
CisvLyBNZWRpYVR5cGUgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbiBJTUZNZWRpYVR5cGUuIEl0IGNh
biBiZSB1c2VkIAorLy8gdG8gcmVhZCAoYW5kIG1vZGlmeSkgYW4gZXhpc3RpbmcgdHlwZSBvciBj
cmVhdGUgYSBuZXcgdHlwZS4gVGhpcyBjbGFzcworLy8gZG9lcyBub3QgaW1wbGVtZW50IHRoZSBJ
TUZNZWRpYVR5cGUgaW50ZXJmYWNlLgorLy8KKy8vIFRoZSBBdWRpb1R5cGUsIFZpZGVvVHlwZSwg
YW5kIE1QRUdWaWRlb1R5cGUKKy8vIGNsYXNzZXMgYXJlIHNwZWNpYWxpemVkIGZvciB0aG9zZSBm
b3JtYXRzLgorCitjbGFzcyBNZWRpYVR5cGUgeworcHJvdGVjdGVkOgorICAgIENPTVB0cjxJTUZN
ZWRpYVR5cGU+IG1fcFR5cGU7CisKK3Byb3RlY3RlZDoKKyAgICBCT09MIElzVmFsaWQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICEhbV9wVHlwZS5nZXQoKTsKKyAgICB9CisKKyAgICBJTUZNZWRp
YVR5cGUqIEdldE1lZGlhVHlwZSgpCisgICAgeworICAgICAgICBBU1NFUlQoSXNWYWxpZCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fcFR5cGUuZ2V0KCk7CisgICAgfQorCitwdWJsaWM6CisKKyAgICAv
LyBDb25zdHJ1Y3QgZnJvbSBhbiBleGlzdGluZyBtZWRpYSB0eXBlLgorICAgIE1lZGlhVHlwZShJ
TUZNZWRpYVR5cGUqIHBUeXBlID0gbnVsbHB0cikKKyAgICAgICAgOiBtX3BUeXBlKHBUeXBlKQor
ICAgIHsKKyAgICB9CisKKyAgICBNZWRpYVR5cGUoY29uc3QgTWVkaWFUeXBlJiAgbXQpCisgICAg
eworICAgICAgICBtX3BUeXBlID0gbXQubV9wVHlwZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5N
ZWRpYVR5cGUoKQorICAgIHsKKyAgICB9CisKKworICAgIC8vIEFzc2lnbm1lbnQKKyAgICBNZWRp
YVR5cGUmIG9wZXJhdG9yPShjb25zdCBNZWRpYVR5cGUmIG10KQorICAgIHsKKyAgICAgICAgLy8g
SWYgd2UgYXJlIGFzc2lnbmVkIHRvIG91cnNlbHZlcywgZG8gbm90aGluZy4KKyAgICAgICAgaWYg
KCFBcmVDb21PYmplY3RzRXF1YWwobV9wVHlwZS5nZXQoKSwgbXQubV9wVHlwZS5nZXQoKSkpCisg
ICAgICAgICAgICBtX3BUeXBlID0gbXQubV9wVHlwZTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKworICAgIC8vIGFkZHJlc3Mtb2Ygb3BlcmF0b3IKKyAgICBJTUZNZWRpYVR5cGUqKiBv
cGVyYXRvciYoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX3BUeXBlOworICAgIH0KKworICAg
IC8vIGNvZXJjZSB0byB1bmRlcmx5aW5nIHBvaW50ZXIgdHlwZS4KKyAgICBvcGVyYXRvciBJTUZN
ZWRpYVR5cGUqKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BUeXBlLmdldCgpOworICAgIH0K
KworICAgIHZpcnR1YWwgSFJFU1VMVCBDcmVhdGVFbXB0eVR5cGUoKQorICAgIHsKKyAgICAgICAg
bV9wVHlwZSA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIE1GQ3JlYXRlTWVkaWFUeXBlKCZt
X3BUeXBlKTsKKyAgICB9CisKKyAgICAvLyBEZXRhY2ggdGhlIGludGVyZmFjZSAoZG9lcyBub3Qg
UmVsZWFzZSkKKyAgICBJTUZNZWRpYVR5cGUqIERldGFjaCgpCisgICAgeworICAgICAgICByZXR1
cm4gbV9wVHlwZS5sZWFrUmVmKCk7CisgICAgfQorCisgICAgLy8gRGlyZWN0IHdyYXBwZXJzIG9m
IElNRk1lZGlhVHlwZSBtZXRob2RzLgorICAgIC8vIChGb3IgdGhlc2UgbWV0aG9kcywgd2UgbGVh
dmUgcGFyYW1ldGVyIHZhbGlkYXRpb24gdG8gdGhlIElNRk1lZGlhVHlwZSBpbXBsZW1lbnRhdGlv
bi4pCisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIG1ham9yIHR5cGUgR1VJRC4KKyAgICBIUkVTVUxU
IEdldE1ham9yVHlwZShHVUlEKiBwR3VpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRp
YVR5cGUoKS0+R2V0TWFqb3JUeXBlKHBHdWlkKTsKKyAgICB9CisKKyAgICAvLyBTcGVjaWZpZXMg
d2hldGhlciB0aGUgbWVkaWEgZGF0YSBpcyBjb21wcmVzc2VkCisgICAgSFJFU1VMVCBJc0NvbXBy
ZXNzZWRGb3JtYXQoQk9PTCogcGJDb21wcmVzc2VkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdl
dE1lZGlhVHlwZSgpLT5Jc0NvbXByZXNzZWRGb3JtYXQocGJDb21wcmVzc2VkKTsKKyAgICB9CisK
KyAgICAvLyBDb21wYXJlcyB0d28gbWVkaWEgdHlwZXMgYW5kIGRldGVybWluZXMgd2hldGhlciB0
aGV5IGFyZSBpZGVudGljYWwuCisgICAgSFJFU1VMVCBJc0VxdWFsKElNRk1lZGlhVHlwZSogcFR5
cGUsIERXT1JEKiBwZHdGbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUo
KS0+SXNFcXVhbChwVHlwZSwgcGR3RmxhZ3MpOworICAgIH0KKworICAgIC8vIFJldHJpZXZlcyBh
biBhbHRlcm5hdGl2ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVkaWEgdHlwZS4KKyAgICBIUkVT
VUxUIEdldFJlcHJlc2VudGF0aW9uKEdVSUQgZ3VpZFJlcHJlc2VudGF0aW9uLCBMUFZPSUQqIHBw
dlJlcHJlc2VudGF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5H
ZXRSZXByZXNlbnRhdGlvbihndWlkUmVwcmVzZW50YXRpb24sIHBwdlJlcHJlc2VudGF0aW9uKTsK
KyAgICB9CisKKyAgICAvLyBGcmVlcyBtZW1vcnkgdGhhdCB3YXMgYWxsb2NhdGVkIGJ5IHRoZSBH
ZXRSZXByZXNlbnRhdGlvbiBtZXRob2QuCisgICAgSFJFU1VMVCBGcmVlUmVwcmVzZW50YXRpb24o
R1VJRCBndWlkUmVwcmVzZW50YXRpb24sIExQVk9JRCBwdlJlcHJlc2VudGF0aW9uKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5GcmVlUmVwcmVzZW50YXRpb24oZ3VpZFJl
cHJlc2VudGF0aW9uLCBwdlJlcHJlc2VudGF0aW9uKTsKKyAgICB9CisKKworICAgIC8vIEhlbHBl
ciBtZXRob2RzCisKKyAgICAvLyBDb3B5RnJvbTogQ29weSBhbGwgb2YgdGhlIGF0dHJpYnV0ZXMg
ZnJvbSBhbm90aGVyIG1lZGlhIHR5cGUgaW50byB0aGlzIHR5cGUuCisgICAgSFJFU1VMVCBDb3B5
RnJvbShNZWRpYVR5cGUqIHBUeXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFwVHlwZS0+SXNWYWxp
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIEVfVU5FWFBFQ1RFRDsKKyAgICAgICAgaWYgKCFwVHlw
ZSkKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICAgICAgcmV0dXJuIENvcHlG
cm9tKHBUeXBlLT5tX3BUeXBlLmdldCgpKTsKKyAgICB9CisKKyAgICBIUkVTVUxUIENvcHlGcm9t
KElNRk1lZGlhVHlwZSogcFR5cGUpCisgICAgeworICAgICAgICBpZiAoIXBUeXBlKQorICAgICAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgICAgICByZXR1cm4gcFR5cGUtPkNvcHlBbGxJ
dGVtcyhtX3BUeXBlLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSB1bmRlcmx5
aW5nIElNRk1lZGlhVHlwZSBwb2ludGVyLiAKKyAgICBIUkVTVUxUIEdldE1lZGlhVHlwZShJTUZN
ZWRpYVR5cGUqKiBwcFR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQoSXNWYWxpZCgpKTsKKyAg
ICAgICAgaWYgKCFwcFR5cGUpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAg
ICAqcHBUeXBlID0gbV9wVHlwZS5nZXQoKTsKKyAgICAgICAgKCpwcFR5cGUpLT5BZGRSZWYoKTsK
KyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUgbWFqb3IgdHlw
ZSBHVUlELgorICAgIEhSRVNVTFQgU2V0TWFqb3JUeXBlKEdVSUQgZ3VpZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0R1VJRChNRl9NVF9NQUpPUl9UWVBFLCBndWlk
KTsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIHN1YnR5cGUgR1VJRC4KKyAgICBIUkVT
VUxUIEdldFN1YlR5cGUoR1VJRCogcEd1aWQpCisgICAgeworICAgICAgICBpZiAoIXBHdWlkKQor
ICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlw
ZSgpLT5HZXRHVUlEKE1GX01UX1NVQlRZUEUsIHBHdWlkKTsKKyAgICB9CisKKyAgICAvLyBTZXRz
IHRoZSBzdWJ0eXBlIEdVSUQuCisgICAgSFJFU1VMVCBTZXRTdWJUeXBlKEdVSUQgZ3VpZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0R1VJRChNRl9NVF9TVUJUWVBF
LCBndWlkKTsKKyAgICB9CisKKyAgICAvLyBFeHRyYWN0cyB0aGUgRk9VUkNDIGNvZGUgZnJvbSB0
aGUgc3VidHlwZS4KKyAgICAvLyBOb3QgYWxsIHN1YnR5cGVzIGZvbGxvdyB0aGlzIHBhdHRlcm4u
CisgICAgSFJFU1VMVCBHZXRGb3VyQ0MoRFdPUkQqIHBGb3VyQ0MpCisgICAgeworICAgICAgICBB
U1NFUlQoSXNWYWxpZCgpKTsKKyAgICAgICAgaWYgKCFwRm91ckNDKQorICAgICAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgICAgIEdVSUQg
Z3VpZFN1YlR5cGUgPSBHVUlEX05VTEw7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisg
ICAgICAgICAgICBociA9IEdldFN1YlR5cGUoJmd1aWRTdWJUeXBlKTsKKworICAgICAgICBpZiAo
U1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgICpwRm91ckNDID0gZ3VpZFN1YlR5cGUuRGF0YTE7
CisKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0gICAgICAgCisKKyAgICAvLyAgUXVlcmllcyB3
aGV0aGVyIGVhY2ggc2FtcGxlIGlzIGluZGVwZW5kZW50IG9mIHRoZSBvdGhlciBzYW1wbGVzIGlu
IHRoZSBzdHJlYW0uCisgICAgSFJFU1VMVCBHZXRBbGxTYW1wbGVzSW5kZXBlbmRlbnQoQk9PTCog
cGJJbmRlcGVuZGVudCkKKyAgICB7CisgICAgICAgIGlmICghcGJJbmRlcGVuZGVudCkKKyAgICAg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+
R2V0VUlOVDMyKE1GX01UX0FMTF9TQU1QTEVTX0lOREVQRU5ERU5ULCAoVUlOVDMyKilwYkluZGVw
ZW5kZW50KTsKKyAgICB9CisKKyAgICAvLyAgU3BlY2lmaWVzIHdoZXRoZXIgZWFjaCBzYW1wbGUg
aXMgaW5kZXBlbmRlbnQgb2YgdGhlIG90aGVyIHNhbXBsZXMgaW4gdGhlIHN0cmVhbS4KKyAgICBI
UkVTVUxUIFNldEFsbFNhbXBsZXNJbmRlcGVuZGVudChCT09MIGJJbmRlcGVuZGVudCkKKyAgICB7
CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0FMTF9TQU1Q
TEVTX0lOREVQRU5ERU5ULCAoVUlOVDMyKWJJbmRlcGVuZGVudCk7CisgICAgfQorCisgICAgLy8g
UXVlcmllcyB3aGV0aGVyIHRoZSBzYW1wbGVzIGhhdmUgYSBmaXhlZCBzaXplLgorICAgIEhSRVNV
TFQgR2V0Rml4ZWRTaXplU2FtcGxlcyhCT09MKiBwYkZpeGVkKQorICAgIHsKKyAgICAgICAgaWYg
KCFwYkZpeGVkKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJu
IEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfRklYRURfU0laRV9TQU1QTEVTLCAoVUlO
VDMyKilwYkZpeGVkKTsKKyAgICB9CisKKyAgICAvLyBTcGVjaWZpZXMgd2hldGhlciB0aGUgc2Ft
cGxlcyBoYXZlIGEgZml4ZWQgc2l6ZS4KKyAgICBIUkVTVUxUIFNldEZpeGVkU2l6ZVNhbXBsZXMo
Qk9PTCBiRml4ZWQpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNldFVJ
TlQzMihNRl9NVF9GSVhFRF9TSVpFX1NBTVBMRVMsIChVSU5UMzIpYkZpeGVkKTsKKyAgICB9CisK
KyAgICAvLyBSZXRyaWV2ZXMgdGhlIHNpemUgb2YgZWFjaCBzYW1wbGUsIGluIGJ5dGVzLiAKKyAg
ICBIUkVTVUxUIEdldFNhbXBsZVNpemUoVUlOVDMyKiBwblNpemUpCisgICAgeyAgIAorICAgICAg
ICBpZiAoIXBuU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJl
dHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX1NBTVBMRV9TSVpFLCBwblNpemUp
OworICAgIH0KKworICAgIC8vIFNldHMgdGhlIHNpemUgb2YgZWFjaCBzYW1wbGUsIGluIGJ5dGVz
LiAKKyAgICBIUkVTVUxUIFNldFNhbXBsZVNpemUoVUlOVDMyIG5TaXplKQorICAgIHsgICAKKyAg
ICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfU0FNUExFX1NJWkUs
IG5TaXplKTsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgYSBtZWRpYSB0eXBlIHRoYXQgd2Fz
IHdyYXBwZWQgYnkgdGhlIE1GV3JhcE1lZGlhVHlwZSBmdW5jdGlvbi4KKyAgICBIUkVTVUxUIFVu
d3JhcChJTUZNZWRpYVR5cGUqKiBwcE9yaWdpbmFsKQorICAgIHsKKyAgICAgICAgaWYgKCFwcE9y
aWdpbmFsKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIDo6
TUZVbndyYXBNZWRpYVR5cGUoR2V0TWVkaWFUeXBlKCksIHBwT3JpZ2luYWwpOworICAgIH0KKwor
ICAgIC8vIFRoZSBmb2xsb3dpbmcgdmVyc2lvbnMgcmV0dXJuIHJlYXNvbmFibGUgZGVmYXVsdHMg
aWYgdGhlIHJlbGV2YW50IGF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudCAoemVyby9GQUxTRSkuCisg
ICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIG1ha2luZyBxdWljayBjb21wYXJpc29ucyBiZXR3ZWVl
biBtZWRpYSB0eXBlcy4gCisKKyAgICBCT09MIEFsbFNhbXBsZXNJbmRlcGVuZGVudCgpCisgICAg
eworICAgICAgICByZXR1cm4gKEJPT0wpTUZHZXRBdHRyaWJ1dGVVSU5UMzIoR2V0TWVkaWFUeXBl
KCksIE1GX01UX0FMTF9TQU1QTEVTX0lOREVQRU5ERU5ULCBGQUxTRSk7CisgICAgfQorCisgICAg
Qk9PTCBGaXhlZFNpemVTYW1wbGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiAoQk9PTClNRkdl
dEF0dHJpYnV0ZVVJTlQzMihHZXRNZWRpYVR5cGUoKSwgTUZfTVRfRklYRURfU0laRV9TQU1QTEVT
LCBGQUxTRSk7CisgICAgfQorCisgICAgVUlOVDMyIFNhbXBsZVNpemUoKQorICAgIHsgICAKKyAg
ICAgICAgcmV0dXJuIE1GR2V0QXR0cmlidXRlVUlOVDMyKEdldE1lZGlhVHlwZSgpLCBNRl9NVF9T
QU1QTEVfU0laRSwgMCk7CisgICAgfQorfTsKKworICAgIAorLy8gVmlkZW9UeXBlIHByb3ZpZGVz
IGFjY2VzcyB0byB2aWRlby1zcGVjaWZpYyBhdHRyaWJ1dGVzLgorLy8gTm90ZTogTVBFRy1zcGVj
aWZpYyBhdHRyaWJ1dGVzIGFyZSBhY2Nlc3NpYmxlIGZyb20gTVBFR1ZpZGVvVHlwZS4KKworY2xh
c3MgVmlkZW9UeXBlIDogcHVibGljIE1lZGlhVHlwZSB7CisgICAgZnJpZW5kIGNsYXNzIE1lZGlh
VHlwZTsgCisKK3B1YmxpYzoKKyAgICBWaWRlb1R5cGUoSU1GTWVkaWFUeXBlKiBwVHlwZSA9IG51
bGxwdHIpCisgICAgICAgIDogTWVkaWFUeXBlKHBUeXBlKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgQ3JlYXRlRW1wdHlUeXBlKCkKKyAgICB7CisgICAgICAgIG1fcFR5cGUg
PSBudWxscHRyOworCisgICAgICAgIEhSRVNVTFQgaHIgPSBNZWRpYVR5cGU6OkNyZWF0ZUVtcHR5
VHlwZSgpOworICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgIGhyID0gU2V0
TWFqb3JUeXBlKE1GTWVkaWFUeXBlX1ZpZGVvKTsKKworICAgICAgICByZXR1cm4gaHI7CisgICAg
fQorCisKKyAgICAvLyBSZXRyaWV2ZXMgYSBkZXNjcmlwdGlvbiBvZiBob3cgdGhlIGZyYW1lcyBh
cmUgaW50ZXJsYWNlZC4KKyAgICBIUkVTVUxUIEdldEludGVybGFjZU1vZGUoTUZWaWRlb0ludGVy
bGFjZU1vZGUqIHBtb2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFwbW9kZSkKKyAgICAgICAgICAg
IHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlO
VDMyKE1GX01UX0lOVEVSTEFDRV9NT0RFLCAoVUlOVDMyKilwbW9kZSk7CisgICAgfQorCisgICAg
Ly8gU2V0cyBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGUgZnJhbWVzIGFyZSBpbnRlcmxhY2VkLgor
ICAgIEhSRVNVTFQgU2V0SW50ZXJsYWNlTW9kZShNRlZpZGVvSW50ZXJsYWNlTW9kZSBtb2RlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfSU5U
RVJMQUNFX01PREUsIChVSU5UMzIpbW9kZSk7CisgICAgfQorCisgICAgLy8gVGhpcyByZXR1cm5z
IHRoZSBkZWZhdWx0IG9yIGF0dGVtcHRzIHRvIGNvbXB1dGUgaXQsIGluIGl0cyBhYnNlbmNlLgor
ICAgIEhSRVNVTFQgR2V0RGVmYXVsdFN0cmlkZShMT05HKiBwbFN0cmlkZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBNZWRpYUZvdW5kYXRpb25VdGlsczo6R2V0RGVmYXVsdFN0cmlkZSggR2V0TWVk
aWFUeXBlKCksIHBsU3RyaWRlICk7CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUgZGVmYXVsdCBz
dHJpZGUuIE9ubHkgYXBwcm9wcmlhdGUgZm9yIHVuY29tcHJlc3NlZCBkYXRhIGZvcm1hdHMuCisg
ICAgSFJFU1VMVCBTZXREZWZhdWx0U3RyaWRlKExPTkcgblN0cmlkZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0RFRkFVTFRfU1RSSURFLCAo
VUlOVDMyKW5TdHJpZGUpOworICAgIH0KKworICAgIC8vIFJldHJpZXZlcyB0aGUgd2lkdGggYW5k
IGhlaWdodCBvZiB0aGUgdmlkZW8gZnJhbWUuCisgICAgSFJFU1VMVCBHZXRGcmFtZURpbWVuc2lv
bnMoVUlOVDMyKiBwZHdXaWR0aEluUGl4ZWxzLCBVSU5UMzIqIHBkd0hlaWdodEluUGl4ZWxzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE1GR2V0QXR0cmlidXRlU2l6ZShHZXRNZWRpYVR5cGUoKSwg
TUZfTVRfRlJBTUVfU0laRSwgcGR3V2lkdGhJblBpeGVscywgcGR3SGVpZ2h0SW5QaXhlbHMpOwor
ICAgIH0KKworICAgIC8vIFNldHMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHZpZGVvIGZy
YW1lLgorICAgIEhSRVNVTFQgU2V0RnJhbWVEaW1lbnNpb25zKFVJTlQzMiBkd1dpZHRoSW5QaXhl
bHMsIFVJTlQzMiBkd0hlaWdodEluUGl4ZWxzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1GU2V0
QXR0cmlidXRlU2l6ZShHZXRNZWRpYVR5cGUoKSwgTUZfTVRfRlJBTUVfU0laRSwgZHdXaWR0aElu
UGl4ZWxzLCBkd0hlaWdodEluUGl4ZWxzKTsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhl
IGRhdGEgZXJyb3IgcmF0ZSBpbiBiaXQgZXJyb3JzIHBlciBzZWNvbmQKKyAgICBIUkVTVUxUIEdl
dERhdGFCaXRFcnJvclJhdGUoVUlOVDMyKiBwUmF0ZSkKKyAgICB7CisgICAgICAgIGlmICghcFJh
dGUpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVk
aWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9BVkdfQklUX0VSUk9SX1JBVEUsIHBSYXRlKTsKKyAg
ICB9CisKKyAgICAvLyBTZXRzIHRoZSBkYXRhIGVycm9yIHJhdGUgaW4gYml0IGVycm9ycyBwZXIg
c2Vjb25kCisgICAgSFJFU1VMVCBTZXREYXRhQml0RXJyb3JSYXRlKFVJTlQzMiByYXRlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfQVZHX0JJ
VF9FUlJPUl9SQVRFLCByYXRlKTsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIGFwcHJv
eGltYXRlIGRhdGEgcmF0ZSBvZiB0aGUgdmlkZW8gc3RyZWFtLgorICAgIEhSRVNVTFQgR2V0QXZl
cmFnZUJpdFJhdGUoVUlOVDMyKiBwUmF0ZSkKKyAgICB7CisgICAgICAgIGlmICghcFJhdGUpCisg
ICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBl
KCktPkdldFVJTlQzMihNRl9NVF9BVkdfQklUUkFURSwgcFJhdGUpOworICAgIH0KKworICAgIC8v
IFNldHMgdGhlIGFwcHJveGltYXRlIGRhdGEgcmF0ZSBvZiB0aGUgdmlkZW8gc3RyZWFtLgorICAg
IEhSRVNVTFQgU2V0QXZnZXJhZ2VCaXRSYXRlKFVJTlQzMiByYXRlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfQVZHX0JJVFJBVEUsIHJhdGUp
OworICAgIH0KKworICAgIC8vIFJldHJpZXZlcyBjdXN0b20gY29sb3IgcHJpbWFyaWVzLgorICAg
IEhSRVNVTFQgR2V0Q3VzdG9tVmlkZW9QcmltYXJpZXMoTVRfQ1VTVE9NX1ZJREVPX1BSSU1BUklF
UyogcFByaW1hcmllcykKKyAgICB7CisgICAgICAgIGlmICghcFByaW1hcmllcykKKyAgICAgICAg
ICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0
QmxvYihNRl9NVF9DVVNUT01fVklERU9fUFJJTUFSSUVTLCAoVUlOVDgqKXBQcmltYXJpZXMsIHNp
emVvZihNVF9DVVNUT01fVklERU9fUFJJTUFSSUVTKSwgbnVsbHB0cik7CisgICAgfQorCisgICAg
Ly8gU2V0cyBjdXN0b20gY29sb3IgcHJpbWFyaWVzLgorICAgIEhSRVNVTFQgU2V0Q3VzdG9tVmlk
ZW9QcmltYXJpZXMoY29uc3QgTVRfQ1VTVE9NX1ZJREVPX1BSSU1BUklFUyYgcHJpbWFyeSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0QmxvYihNRl9NVF9DVVNUT01f
VklERU9fUFJJTUFSSUVTLCAoY29uc3QgVUlOVDgqKSZwcmltYXJ5LCBzaXplb2YoTVRfQ1VTVE9N
X1ZJREVPX1BSSU1BUklFUykpOworICAgIH0KKworICAgIC8vIEdldHMgdGhlIG51bWJlciBvZiBm
cmFtZXMgcGVyIHNlY29uZC4KKyAgICBIUkVTVUxUIEdldEZyYW1lUmF0ZShVSU5UMzIqIHBuTnVt
ZXJhdG9yLCBVSU5UMzIqIHBuRGVub21pbmF0b3IpCisgICAgeworICAgICAgICBpZiAoIXBuTnVt
ZXJhdG9yKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgaWYgKCFwbkRl
bm9taW5hdG9yKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJu
IE1GR2V0QXR0cmlidXRlUmF0aW8oR2V0TWVkaWFUeXBlKCksIE1GX01UX0ZSQU1FX1JBVEUsIHBu
TnVtZXJhdG9yLCBwbkRlbm9taW5hdG9yKTsKKyAgICB9CisKKyAgICAvLyBHZXRzIHRoZSBmcmFt
ZXMgcGVyIHNlY29uZCBhcyBhIHJhdGlvLgorICAgIEhSRVNVTFQgR2V0RnJhbWVSYXRlKE1GUmF0
aW8qIHBSYXRpbykKKyAgICB7CisgICAgICAgIGlmICghcFJhdGlvKQorICAgICAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldEZyYW1lUmF0ZSgoVUlOVDMyKikmcFJh
dGlvLT5OdW1lcmF0b3IsIChVSU5UMzIqKSZwUmF0aW8tPkRlbm9taW5hdG9yKTsKKyAgICB9Cisg
ICAgICAgIAorICAgIC8vIFNldHMgdGhlIG51bWJlciBvZiBmcmFtZXMgcGVyIHNlY29uZC4KKyAg
ICBIUkVTVUxUIFNldEZyYW1lUmF0ZShVSU5UMzIgbk51bWVyYXRvciwgVUlOVDMyIG5EZW5vbWlu
YXRvcikKKyAgICB7CisgICAgICAgIHJldHVybiBNRlNldEF0dHJpYnV0ZVJhdGlvKEdldE1lZGlh
VHlwZSgpLCBNRl9NVF9GUkFNRV9SQVRFLCBuTnVtZXJhdG9yLCBuRGVub21pbmF0b3IpOworICAg
IH0KKworICAgIC8vIFNldHMgdGhlIG51bWJlciBvZiBmcmFtZXMgcGVyIHNlY29uZCwgYXMgYSBy
YXRpby4KKyAgICBIUkVTVUxUIFNldEZyYW1lUmF0ZShjb25zdCBNRlJhdGlvJiByYXRpbykKKyAg
ICB7CisgICAgICAgIHJldHVybiBNRlNldEF0dHJpYnV0ZVJhdGlvKEdldE1lZGlhVHlwZSgpLCBN
Rl9NVF9GUkFNRV9SQVRFLCByYXRpby5OdW1lcmF0b3IsIHJhdGlvLkRlbm9taW5hdG9yKTsKKyAg
ICB9CisKKyAgICAvLyBRdWVyaWVzIHRoZSBnZW9tZXRyaWMgYXBlcnR1cmUuCisgICAgSFJFU1VM
VCBHZXRHZW9tZXRyaWNBcGVydHVyZShNRlZpZGVvQXJlYSogcEFyZWEpCisgICAgeworICAgICAg
ICBpZiAoIXBBcmVhKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0
dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRCbG9iKE1GX01UX0dFT01FVFJJQ19BUEVSVFVSRSwgKFVJ
TlQ4KilwQXJlYSwgc2l6ZW9mKE1GVmlkZW9BcmVhKSwgbnVsbHB0cik7CisgICAgfQorICAgICAg
ICAKKyAgICAvLyBTZXRzIHRoZSBnZW9tZXRyaWMgYXBlcnR1cmUuCisgICAgSFJFU1VMVCBTZXRH
ZW9tZXRyaWNBcGVydHVyZShjb25zdCBNRlZpZGVvQXJlYSYgYXJlYSkKKyAgICB7CisgICAgICAg
IHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0QmxvYihNRl9NVF9HRU9NRVRSSUNfQVBFUlRVUkUs
IChVSU5UOCopJmFyZWEsIHNpemVvZihNRlZpZGVvQXJlYSkpOworICAgIH0KKyAgICAgICAgCisg
ICAgLy8gUmV0cmlldmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgZnJvbSBvbmUga2V5
IGZyYW1lIHRvIHRoZSBuZXh0LgorICAgIEhSRVNVTFQgR2V0TWF4S2V5ZnJhbWVTcGFjaW5nKFVJ
TlQzMiogcG5TcGFjaW5nKQorICAgIHsKKyAgICAgICAgaWYgKCFwblNwYWNpbmcpCisgICAgICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdl
dFVJTlQzMihNRl9NVF9NQVhfS0VZRlJBTUVfU1BBQ0lORywgcG5TcGFjaW5nKTsKKyAgICB9CisK
KyAgICAvLyBTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgZnJvbSBvbmUga2V5IGZy
YW1lIHRvIHRoZSBuZXh0LgorICAgIEhSRVNVTFQgU2V0TWF4S2V5ZnJhbWVTcGFjaW5nKFVJTlQz
MiBuU3BhY2luZykKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlO
VDMyKE1GX01UX01BWF9LRVlGUkFNRV9TUEFDSU5HLCBuU3BhY2luZyk7CisgICAgfQorCisgICAg
Ly8gUmV0cmlldmVzIHRoZSByZWdpb24gdGhhdCBjb250YWlucyB0aGUgdmFsaWQgcG9ydGlvbiBv
ZiB0aGUgc2lnbmFsLgorICAgIEhSRVNVTFQgR2V0TWluRGlzcGxheUFwZXJ0dXJlKE1GVmlkZW9B
cmVhKiBwQXJlYSkKKyAgICB7CisgICAgICAgIGlmICghcEFyZWEpCisgICAgICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldEJsb2IoTUZf
TVRfTUlOSU1VTV9ESVNQTEFZX0FQRVJUVVJFLCAoVUlOVDgqKXBBcmVhLCBzaXplb2YoTUZWaWRl
b0FyZWEpLCBudWxscHRyKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoZSB0aGUgcmVnaW9uIHRo
YXQgY29udGFpbnMgdGhlIHZhbGlkIHBvcnRpb24gb2YgdGhlIHNpZ25hbC4KKyAgICBIUkVTVUxU
IFNldE1pbkRpc3BsYXlBcGVydHVyZShjb25zdCBNRlZpZGVvQXJlYSYgYXJlYSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0QmxvYihNRl9NVF9NSU5JTVVNX0RJU1BM
QVlfQVBFUlRVUkUsIChVSU5UOCopJmFyZWEsIHNpemVvZihNRlZpZGVvQXJlYSkpOworICAgIH0K
KworICAgIC8vIFJldHJpZXZlcyB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSBvdXRwdXQgcmVjdGFu
Z2xlIGZvciBhIHZpZGVvIG1lZGlhIHR5cGUuIAorICAgIEhSRVNVTFQgR2V0UGFkQ29udHJvbEZs
YWdzKE1GVmlkZW9QYWRGbGFncyogcEZsYWdzKQorICAgIHsKKyAgICAgICAgaWYgKCFwRmxhZ3Mp
CisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFU
eXBlKCktPkdldFVJTlQzMihNRl9NVF9QQURfQ09OVFJPTF9GTEFHUywgKFVJTlQzMiopcEZsYWdz
KTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoZSBhc3BlY3QgcmF0aW8gb2YgdGhlIG91dHB1dCBy
ZWN0YW5nbGUgZm9yIGEgdmlkZW8gbWVkaWEgdHlwZS4gCisgICAgSFJFU1VMVCBTZXRQYWRDb250
cm9sRmxhZ3MoTUZWaWRlb1BhZEZsYWdzIGZsYWdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdl
dE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfUEFEX0NPTlRST0xfRkxBR1MsIGZsYWdzKTsK
KyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgcGFsZXR0ZSBlbnRyaWVzIGZv
ciBhIHZpZGVvIG1lZGlhIHR5cGUuIAorICAgIEhSRVNVTFQgR2V0UGFsZXR0ZUVudHJpZXMoTUZQ
YWxldHRlRW50cnkqIHBhRW50cmllcywgVUlOVDMyIG5FbnRyaWVzKQorICAgIHsKKyAgICAgICAg
aWYgKCFwYUVudHJpZXMpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICBy
ZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldEJsb2IoTUZfTVRfUEFMRVRURSwgKFVJTlQ4KilwYUVu
dHJpZXMsIHNpemVvZihNRlBhbGV0dGVFbnRyeSkgKiBuRW50cmllcywgbnVsbHB0cik7CisgICAg
fQorCisgICAgLy8gU2V0cyBhbiBhcnJheSBvZiBwYWxldHRlIGVudHJpZXMgZm9yIGEgdmlkZW8g
bWVkaWEgdHlwZS4gCisgICAgSFJFU1VMVCBTZXRQYWxldHRlRW50cmllcyhNRlBhbGV0dGVFbnRy
eSogcGFFbnRyaWVzLCBVSU5UMzIgbkVudHJpZXMpCisgICAgeworICAgICAgICBpZiAoIXBhRW50
cmllcykKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRN
ZWRpYVR5cGUoKS0+U2V0QmxvYihNRl9NVF9QQUxFVFRFLCAoVUlOVDgqKXBhRW50cmllcywgc2l6
ZW9mKE1GUGFsZXR0ZUVudHJ5KSAqIG5FbnRyaWVzKTsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2
ZXMgdGhlIG51bWJlciBvZiBwYWxldHRlIGVudHJpZXMuCisgICAgSFJFU1VMVCBHZXROdW1QYWxl
dHRlRW50cmllcyhVSU5UMzIqIHBuRW50cmllcykKKyAgICB7CisgICAgICAgIGlmICghcG5FbnRy
aWVzKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgVUlOVDMyIG5CeXRl
cyA9IDA7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgICAgICBociA9IEdldE1lZGlh
VHlwZSgpLT5HZXRCbG9iU2l6ZShNRl9NVF9QQUxFVFRFLCAmbkJ5dGVzKTsKKyAgICAgICAgaWYg
KFNVQ0NFRURFRChocikpIHsKKyAgICAgICAgICAgIGlmIChuQnl0ZXMgJSBzaXplb2YoTUZQYWxl
dHRlRW50cnkpKQorICAgICAgICAgICAgICAgIGhyID0gRV9VTkVYUEVDVEVEOworICAgICAgICB9
CisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgKnBuRW50cmllcyA9IG5C
eXRlcyAvIHNpemVvZihNRlBhbGV0dGVFbnRyeSk7CisKKyAgICAgICAgcmV0dXJuIGhyOworICAg
IH0KKworICAgIC8vIFF1ZXJpZXMgdGhlIDR4MyByZWdpb24gb2YgdmlkZW8gdGhhdCBzaG91bGQg
YmUgZGlzcGxheWVkIGluIHBhbi9zY2FuIG1vZGUuCisgICAgSFJFU1VMVCBHZXRQYW5TY2FuQXBl
cnR1cmUoTUZWaWRlb0FyZWEqIHBBcmVhKQorICAgIHsKKyAgICAgICAgaWYgKCFwQXJlYSkKKyAg
ICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUo
KS0+R2V0QmxvYihNRl9NVF9QQU5fU0NBTl9BUEVSVFVSRSwgKFVJTlQ4KilwQXJlYSwgc2l6ZW9m
KE1GVmlkZW9BcmVhKSwgbnVsbHB0cik7CisgICAgfQorICAgICAgICAKKyAgICAvLyBTZXRzIHRo
ZSA0eDMgcmVnaW9uIG9mIHZpZGVvIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBwYW4vc2Nh
biBtb2RlLgorICAgIEhSRVNVTFQgU2V0UGFuU2NhbkFwZXJ0dXJlKGNvbnN0IE1GVmlkZW9BcmVh
JiBhcmVhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRCbG9iKE1G
X01UX1BBTl9TQ0FOX0FQRVJUVVJFLCAoVUlOVDgqKSZhcmVhLCBzaXplb2YoTUZWaWRlb0FyZWEp
KTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFF1ZXJpZXMgd2hldGhlciBwYW4vc2NhbiBtb2Rl
IGlzIGVuYWJsZWQuCisgICAgSFJFU1VMVCBJc1BhblNjYW5FbmFibGVkKEJPT0wqIHBCb29sKQor
ICAgIHsKKyAgICAgICAgaWYgKCFwQm9vbCkKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7
CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX1BBTl9TQ0FO
X0VOQUJMRUQsIChVSU5UMzIqKXBCb29sKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHdoZXRoZXIg
cGFuL3NjYW4gbW9kZSBpcyBlbmFibGVkLgorICAgIEhSRVNVTFQgU2V0UGFuU2NhbkVuYWJsZWQo
Qk9PTCBiRW5hYmxlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0
VUlOVDMyKE1GX01UX1BBTl9TQ0FOX0VOQUJMRUQsIChVSU5UMzIpYkVuYWJsZWQpOworICAgIH0K
KworICAgIC8vIFF1ZXJpZXMgdGhlIHBpeGVsIGFzcGVjdCByYXRpbworICAgIEhSRVNVTFQgR2V0
UGl4ZWxBc3BlY3RSYXRpbyhVSU5UMzIqIHBuTnVtZXJhdG9yLCBVSU5UMzIqIHBuRGVub21pbmF0
b3IpCisgICAgeworICAgICAgICBpZiAoIXBuTnVtZXJhdG9yKQorICAgICAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKyAgICAgICAgaWYgKCFwbkRlbm9taW5hdG9yKQorICAgICAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIE1GR2V0QXR0cmlidXRlUmF0aW8oR2V0TWVk
aWFUeXBlKCksIE1GX01UX1BJWEVMX0FTUEVDVF9SQVRJTywgcG5OdW1lcmF0b3IsIHBuRGVub21p
bmF0b3IpOworICAgIH0gICAgICAgCisKKyAgICAvLyBTZXRzIHRoZSBwaXhlbCBhc3BlY3QgcmF0
aW8KKyAgICBIUkVTVUxUIFNldFBpeGVsQXNwZWN0UmF0aW8oVUlOVDMyIG5OdW1lcmF0b3IsIFVJ
TlQzMiBuRGVub21pbmF0b3IpCisgICAgeworICAgICAgICByZXR1cm4gTUZTZXRBdHRyaWJ1dGVS
YXRpbyhHZXRNZWRpYVR5cGUoKSwgTUZfTVRfUElYRUxfQVNQRUNUX1JBVElPLCBuTnVtZXJhdG9y
LCBuRGVub21pbmF0b3IpOworICAgIH0KKworICAgIEhSRVNVTFQgU2V0UGl4ZWxBc3BlY3RSYXRp
byhjb25zdCBNRlJhdGlvJiByYXRpbykKKyAgICB7CisgICAgICAgIHJldHVybiBNRlNldEF0dHJp
YnV0ZVJhdGlvKEdldE1lZGlhVHlwZSgpLCBNRl9NVF9QSVhFTF9BU1BFQ1RfUkFUSU8sIHJhdGlv
Lk51bWVyYXRvciwgcmF0aW8uRGVub21pbmF0b3IpOworICAgIH0KKworICAgIC8vIFF1ZXJpZXMg
dGhlIGludGVuZGVkIGFzcGVjdCByYXRpby4KKyAgICBIUkVTVUxUIEdldFNvdXJjZUNvbnRlbnRI
aW50KE1GVmlkZW9TcmNDb250ZW50SGludEZsYWdzKiBwRmxhZ3MpCisgICAgeworICAgICAgICBp
ZiAoIXBGbGFncykKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVy
biBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX1NPVVJDRV9DT05URU5UX0hJTlQsIChV
SU5UMzIqKXBGbGFncyk7CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUgaW50ZW5kZWQgYXNwZWN0
IHJhdGlvLgorICAgIEhSRVNVTFQgU2V0U291cmNlQ29udGVudEhpbnQoTUZWaWRlb1NyY0NvbnRl
bnRIaW50RmxhZ3MgbkZsYWdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgp
LT5TZXRVSU5UMzIoTUZfTVRfU09VUkNFX0NPTlRFTlRfSElOVCwgKFVJTlQzMiluRmxhZ3MpOwor
ICAgIH0KKworICAgIC8vIFF1ZXJpZXMgYW4gZW51bWVyYXRpb24gd2hpY2ggcmVwcmVzZW50cyB0
aGUgY29udmVyc2lvbiBmdW5jdGlvbiBmcm9tIFJHQiB0byBSJ0cnQicuCisgICAgSFJFU1VMVCBH
ZXRUcmFuc2ZlckZ1bmN0aW9uKE1GVmlkZW9UcmFuc2ZlckZ1bmN0aW9uKiBwbkZ4bikKKyAgICB7
CisgICAgICAgIGlmICghcG5GeG4pCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAg
ICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9UUkFOU0ZFUl9GVU5D
VElPTiwgKFVJTlQzMiopcG5GeG4pOworICAgIH0KKworICAgIC8vIFNldCBhbiBlbnVtZXJhdGlv
biB3aGljaCByZXByZXNlbnRzIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9uIGZyb20gUkdCIHRvIFIn
RydCJy4KKyAgICBIUkVTVUxUIFNldFRyYW5zZmVyRnVuY3Rpb24oTUZWaWRlb1RyYW5zZmVyRnVu
Y3Rpb24gbkZ4bikKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlO
VDMyKE1GX01UX1RSQU5TRkVSX0ZVTkNUSU9OLCAoVUlOVDMyKW5GeG4pOworICAgIH0KKworICAg
IC8vIFF1ZXJpZXMgaG93IGNocm9tYSB3YXMgc2FtcGxlZCBmb3IgYSBZJ0NiJ0NyJyB2aWRlbyBt
ZWRpYSB0eXBlLgorICAgIEhSRVNVTFQgR2V0Q2hyb21hU2l0aW5nKE1GVmlkZW9DaHJvbWFTdWJz
YW1wbGluZyogcFNhbXBsaW5nKQorICAgIHsKKyAgICAgICAgaWYgKCFwU2FtcGxpbmcpCisgICAg
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCkt
PkdldFVJTlQzMihNRl9NVF9WSURFT19DSFJPTUFfU0lUSU5HLCAoVUlOVDMyKilwU2FtcGxpbmcp
OworICAgIH0KKyAgICAgICAgCisgICAgLy8gU2V0cyBob3cgY2hyb21hIHdhcyBzYW1wbGVkIGZv
ciBhIFknQ2InQ3InIHZpZGVvIG1lZGlhIHR5cGUuCisgICAgSFJFU1VMVCBTZXRDaHJvbWFTaXRp
bmcoTUZWaWRlb0Nocm9tYVN1YnNhbXBsaW5nIG5TYW1wbGluZykKKyAgICB7CisgICAgICAgIHJl
dHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX1ZJREVPX0NIUk9NQV9TSVRJTkcs
IChVSU5UMzIpblNhbXBsaW5nKTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFF1ZXJpZXMgdGhl
IG9wdGltYWwgbGlnaHRpbmcgY29uZGl0aW9ucyBmb3Igdmlld2luZy4KKyAgICBIUkVTVUxUIEdl
dFZpZGVvTGlnaHRpbmcoTUZWaWRlb0xpZ2h0aW5nKiBwTGlnaHRpbmcpCisgICAgeworICAgICAg
ICBpZiAoIXBMaWdodGluZykKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAg
IHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX1ZJREVPX0xJR0hUSU5HLCAo
VUlOVDMyKilwTGlnaHRpbmcpOworICAgIH0KKyAgICAgICAgCisgICAgLy8gU2V0cyB0aGUgb3B0
aW1hbCBsaWdodGluZyBjb25kaXRpb25zIGZvciB2aWV3aW5nLgorICAgIEhSRVNVTFQgU2V0Vmlk
ZW9MaWdodGluZyhNRlZpZGVvTGlnaHRpbmcgbkxpZ2h0aW5nKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfVklERU9fTElHSFRJTkcsIChVSU5U
MzIpbkxpZ2h0aW5nKTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFF1ZXJpZXMgdGhlIG5vbWlu
YWwgcmFuZ2Ugb2YgdGhlIGNvbG9yIGluZm9ybWF0aW9uIGluIGEgdmlkZW8gbWVkaWEgdHlwZS4g
CisgICAgSFJFU1VMVCBHZXRWaWRlb05vbWluYWxSYW5nZShNRk5vbWluYWxSYW5nZSogcFJhbmdl
KQorICAgIHsKKyAgICAgICAgaWYgKCFwUmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9WSURF
T19OT01JTkFMX1JBTkdFLCAoVUlOVDMyKilwUmFuZ2UpOworICAgIH0KKworICAgIC8vIFNldHMg
dGhlIG5vbWluYWwgcmFuZ2Ugb2YgdGhlIGNvbG9yIGluZm9ybWF0aW9uIGluIGEgdmlkZW8gbWVk
aWEgdHlwZS4gCisgICAgSFJFU1VMVCBTZXRWaWRlb05vbWluYWxSYW5nZShNRk5vbWluYWxSYW5n
ZSBuUmFuZ2UpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNldFVJTlQz
MihNRl9NVF9WSURFT19OT01JTkFMX1JBTkdFLCAoVUlOVDMyKW5SYW5nZSk7CisgICAgfQorCisg
ICAgLy8gUXVlcmllcyB0aGUgY29sb3IgcHJpbWFyaWVzIGZvciBhIHZpZGVvIG1lZGlhIHR5cGUu
CisgICAgSFJFU1VMVCBHZXRWaWRlb1ByaW1hcmllcyhNRlZpZGVvUHJpbWFyaWVzKiBwUHJpbWFy
aWVzKQorICAgIHsKKyAgICAgICAgaWYgKCFwUHJpbWFyaWVzKQorICAgICAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZf
TVRfVklERU9fUFJJTUFSSUVTLCAoVUlOVDMyKilwUHJpbWFyaWVzKTsKKyAgICB9CisKKyAgICAv
LyBTZXRzIHRoZSBjb2xvciBwcmltYXJpZXMgZm9yIGEgdmlkZW8gbWVkaWEgdHlwZS4KKyAgICBI
UkVTVUxUIFNldFZpZGVvUHJpbWFyaWVzKE1GVmlkZW9QcmltYXJpZXMgblByaW1hcmllcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX1ZJREVP
X1BSSU1BUklFUywgKFVJTlQzMiluUHJpbWFyaWVzKTsKKyAgICB9CisKKyAgICAvLyBHZXRzIGEg
ZW51bWVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSBjb252ZXJzaW9uIG1hdHJpeCBmcm9tIHRoZSAK
KyAgICAvLyBZJ0NiJ0NyJyBjb2xvciBzcGFjZSB0byB0aGUgUidHJ0InIGNvbG9yIHNwYWNlLgor
ICAgIEhSRVNVTFQgR2V0WVVWTWF0cml4KE1GVmlkZW9UcmFuc2Zlck1hdHJpeCogcE1hdHJpeCkK
KyAgICB7CisgICAgICAgIGlmICghcE1hdHJpeCkKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5U
RVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX1lVVl9N
QVRSSVgsIChVSU5UMzIqKXBNYXRyaXgpOworICAgIH0gCisKKyAgICAvLyBTZXRzIGFuIGVudW1l
cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiBtYXRyaXggZnJvbSB0aGUgCisgICAg
Ly8gWSdDYidDcicgY29sb3Igc3BhY2UgdG8gdGhlIFInRydCJyBjb2xvciBzcGFjZS4KKyAgICBI
UkVTVUxUIFNldFlVVk1hdHJpeChNRlZpZGVvVHJhbnNmZXJNYXRyaXggbk1hdHJpeCkKKyAgICB7
CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX1lVVl9NQVRS
SVgsIChVSU5UMzIpbk1hdHJpeCk7CisgICAgfSAKKworICAgIC8vIAorICAgIC8vIFRoZSBmb2xs
b3dpbmcgdmVyc2lvbnMgcmV0dXJuIHJlYXNvbmFibGUgZGVmYXVsdHMgaWYgdGhlIHJlbGV2YW50
IGF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudCAoemVyby9GQUxTRSkuCisgICAgLy8gVGhpcyBpcyB1
c2VmdWwgZm9yIG1ha2luZyBxdWljayBjb21wYXJpc29ucyBiZXR3ZWVlbiBtZWRpYSB0eXBlcy4g
CisgICAgLy8KKworICAgIE1GUmF0aW8gR2V0UGl4ZWxBc3BlY3RSYXRpbygpIC8vIERlZmF1bHRz
IHRvIDE6MSAoc3F1YXJlIHBpeGVscykKKyAgICB7CisgICAgICAgIE1GUmF0aW8gUEFSID0geyAw
LCAwIH07CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgICAgIGhyID0gTUZHZXRB
dHRyaWJ1dGVSYXRpbyhHZXRNZWRpYVR5cGUoKSwgTUZfTVRfUElYRUxfQVNQRUNUX1JBVElPLCAo
VUlOVDMyKikmUEFSLk51bWVyYXRvciwgKFVJTlQzMiopJlBBUi5EZW5vbWluYXRvcik7CisgICAg
ICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICBQQVIuTnVtZXJhdG9yID0gMTsKKyAg
ICAgICAgICAgIFBBUi5EZW5vbWluYXRvciA9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IFBBUjsKKyAgICB9ICAgICAgIAorCisgICAgQk9PTCBJc1BhblNjYW5FbmFibGVkKCkgLy8gRGVm
YXVsdHMgdG8gRkFMU0UKKyAgICB7CisgICAgICAgIHJldHVybiAoQk9PTClNRkdldEF0dHJpYnV0
ZVVJTlQzMihHZXRNZWRpYVR5cGUoKSwgTUZfTVRfUEFOX1NDQU5fRU5BQkxFRCwgRkFMU0UpOwor
ICAgIH0KKworICAgIC8vIFJldHVybnMgKGluIHRoaXMgb3JkZXIpIAorICAgIC8vIDEuIFRoZSBw
YW4vc2NhbiByZWdpb24sIG9ubHkgaWYgcGFuL3NjYW4gbW9kZSBpcyBlbmFibGVkLgorICAgIC8v
IDIuIFRoZSBnZW9tZXRyaWMgYXBlcnR1cmUuCisgICAgLy8gMy4gVGhlIGVudGlyZSB2aWRlbyBh
cmVhLgorICAgIEhSRVNVTFQgR2V0VmlkZW9EaXNwbGF5QXJlYShNRlZpZGVvQXJlYSogcEFyZWEp
CisgICAgeworICAgICAgICBpZiAoIXBBcmVhKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRF
UjsKKyAgICAgICAgcmV0dXJuIE1lZGlhRm91bmRhdGlvblV0aWxzOjpHZXRWaWRlb0Rpc3BsYXlB
cmVhKEdldE1lZGlhVHlwZSgpLCBwQXJlYSk7CisgICAgfQorfTsgIAorCisKKy8vIEF1ZGlvVHlw
ZVdyYXBwZXIgcHJvdmlkZXMgYWNjZXNzIHRvIGF1ZGlvLXNwZWNpZmljIGF0dHJpYnV0ZXMuCisK
K2NsYXNzIEF1ZGlvVHlwZSA6IHB1YmxpYyBNZWRpYVR5cGUgeworICAgIGZyaWVuZCBjbGFzcyBN
ZWRpYVR5cGU7IAorCitwdWJsaWM6CisgICAgQXVkaW9UeXBlKElNRk1lZGlhVHlwZSogcFR5cGUg
PSBudWxscHRyKQorICAgICAgICA6IE1lZGlhVHlwZShwVHlwZSkKKyAgICB7CisgICAgfQorICAg
ICAgICAKKyAgICB2aXJ0dWFsIEhSRVNVTFQgQ3JlYXRlRW1wdHlUeXBlKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX3BUeXBlKQorICAgICAgICAgICAgbV9wVHlwZS0+UmVsZWFzZSgpOworCisgICAg
ICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgICAgIGhyID0gTWVkaWFUeXBlOjpDcmVhdGVF
bXB0eVR5cGUoKTsKKworICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgIGhy
ID0gU2V0TWFqb3JUeXBlKE1GTWVkaWFUeXBlX0F1ZGlvKTsKKworICAgICAgICByZXR1cm4gaHI7
CisgICAgfQorICAgICAgICAKKyAgICAvLyBRdWVyeSB0aGUgYXZlcmFnZSBudW1iZXIgb2YgYnl0
ZXMgcGVyIHNlY29uZC4KKyAgICBIUkVTVUxUIEdldEF2Z2VyYWdlQnl0ZXNQZXJTZWNvbmQoVUlO
VDMyKiBwQnl0ZXMpCisgICAgeworICAgICAgICBpZiAoIXBCeXRlcykKKyAgICAgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMy
KE1GX01UX0FVRElPX0FWR19CWVRFU19QRVJfU0VDT05ELCBwQnl0ZXMpOworICAgIH0KKworICAg
IC8vIFNldHMgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGJ5dGVzIHBlciBzZWNvbmQuCisgICAgSFJF
U1VMVCBTZXRBdmdlcmFnZUJ5dGVzUGVyU2Vjb25kKFVJTlQzMiBuQnl0ZXMpCisgICAgeworICAg
ICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNldFVJTlQzMihNRl9NVF9BVURJT19BVkdfQllU
RVNfUEVSX1NFQ09ORCwgbkJ5dGVzKTsKKyAgICB9CisKKyAgICAvLyBRdWVyeSB0aGUgYml0cyBw
ZXIgYXVkaW8gc2FtcGxlCisgICAgSFJFU1VMVCBHZXRCaXRzUGVyU2FtcGxlKFVJTlQzMiogcEJp
dHMpCisgICAgeworICAgICAgICBpZiAoIXBCaXRzKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9J
TlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfQVVE
SU9fQklUU19QRVJfU0FNUExFLCBwQml0cyk7CisgICAgfQorICAgICAgICAKKyAgICAvLyBTZXRz
IHRoZSBiaXRzIHBlciBhdWRpbyBzYW1wbGUKKyAgICBIUkVTVUxUIFNldEJpdHNQZXJTYW1wbGUo
VUlOVDMyIG5CaXRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRV
SU5UMzIoTUZfTVRfQVVESU9fQklUU19QRVJfU0FNUExFLCBuQml0cyk7CisgICAgfQorICAgICAg
ICAKKyAgICAvLyBRdWVyeSB0aGUgYmxvY2sgYWlnbm1lbnQgaW4gYnl0ZXMKKyAgICBIUkVTVUxU
IEdldEJsb2NrQWxpZ25tZW50KFVJTlQzMiogcEJ5dGVzKQorICAgIHsKKyAgICAgICAgaWYgKCFw
Qnl0ZXMpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0
TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9BVURJT19CTE9DS19BTElHTk1FTlQsIHBCeXRl
cyk7CisgICAgfQorICAgICAgICAKKyAgICAvLyBTZXRzIHRoZSBibG9jayBhaWdubWVudCBpbiBi
eXRlcworICAgIEhSRVNVTFQgU2V0QmxvY2tBbGlnbm1lbnQoVUlOVDMyIG5CeXRlcykKKyAgICB7
CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0FVRElPX0JM
T0NLX0FMSUdOTUVOVCwgbkJ5dGVzKTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFF1ZXJ5IHRo
ZSBhc3NpZ25tZW50IG9mIGF1ZGlvIGNoYW5uZWxzIHRvIHNwZWFrZXIgcG9zaXRpb25zLgorICAg
IEhSRVNVTFQgR2V0Q2hhbm5lbE1hc2soVUlOVDMyKiBwTWFzaykKKyAgICB7CisgICAgICAgIGlm
ICghcE1hc2spCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4g
R2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9BVURJT19DSEFOTkVMX01BU0ssIHBNYXNr
KTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFNldHMgdGhlIGFzc2lnbm1lbnQgb2YgYXVkaW8g
Y2hhbm5lbHMgdG8gc3BlYWtlciBwb3NpdGlvbnMuCisgICAgSFJFU1VMVCBTZXRDaGFubmVsTWFz
ayhVSU5UMzIgbk1hc2spCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNl
dFVJTlQzMihNRl9NVF9BVURJT19DSEFOTkVMX01BU0ssIG5NYXNrKTsKKyAgICB9CisgICAgICAg
IAorICAgIC8vIFF1ZXJ5IHRoZSBudW1iZXIgb2YgYXVkaW8gc2FtcGxlcyBwZXIgc2Vjb25kIChm
bG9hdGluZy1wb2ludCB2YWx1ZSkuCisgICAgSFJFU1VMVCBHZXRGbG9hdFNhbXBsZXNQZXJTZWNv
bmQoZG91YmxlKiBwZlNhbXBsZVJhdGUpCisgICAgeworICAgICAgICBpZiAoIXBmU2FtcGxlUmF0
ZSkKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRp
YVR5cGUoKS0+R2V0RG91YmxlKE1GX01UX0FVRElPX0ZMT0FUX1NBTVBMRVNfUEVSX1NFQ09ORCwg
cGZTYW1wbGVSYXRlKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoZSBudW1iZXIgb2YgYXVkaW8g
c2FtcGxlcyBwZXIgc2Vjb25kIChmbG9hdGluZy1wb2ludCB2YWx1ZSkuCisgICAgSFJFU1VMVCBT
ZXRGbG9hdFNhbXBsZXNQZXJTZWNvbmQoZG91YmxlIGZTYW1wbGVSYXRlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXREb3VibGUoTUZfTVRfQVVESU9fRkxPQVRfU0FN
UExFU19QRVJfU0VDT05ELCBmU2FtcGxlUmF0ZSk7CisgICAgfQorCisgICAgLy8gUXVlcmllcyB0
aGUgbnVtYmVyIG9mIGF1ZGlvIGNoYW5uZWxzCisgICAgSFJFU1VMVCBHZXROdW1DaGFubmVscyhV
SU5UMzIqIHBuQ2hhbm5lbHMpCisgICAgeworICAgICAgICBpZiAoIXBuQ2hhbm5lbHMpCisgICAg
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCkt
PkdldFVJTlQzMihNRl9NVF9BVURJT19OVU1fQ0hBTk5FTFMsIHBuQ2hhbm5lbHMpOworICAgIH0K
KworICAgIC8vIFNldHMgdGhlIG51bWJlciBvZiBhdWRpbyBjaGFubmVscworICAgIEhSRVNVTFQg
U2V0TnVtQ2hhbm5lbHMoVUlOVDMyIG5DaGFubmVscykKKyAgICB7CisgICAgICAgIHJldHVybiBH
ZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0FVRElPX05VTV9DSEFOTkVMUywgbkNoYW5u
ZWxzKTsKKyAgICB9CisKKyAgICAvLyBRdWVyeSB0aGUgbnVtYmVyIG9mIGF1ZGlvIHNhbXBsZXMg
Y29udGFpbmVkIGluIG9uZSBjb21wcmVzc2VkIGJsb2NrIG9mIGF1ZGlvIGRhdGEuCisgICAgSFJF
U1VMVCBHZXRTYW1wbGVzUGVyQmxvY2soVUlOVDMyKiBwblNhbXBsZXMpCisgICAgeworICAgICAg
ICBpZiAoIXBuU2FtcGxlcykKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAg
IHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX0FVRElPX1NBTVBMRVNfUEVS
X0JMT0NLLCBwblNhbXBsZXMpOworICAgIH0KKworICAgIC8vIFNldHMgdGhlIG51bWJlciBvZiBh
dWRpbyBzYW1wbGVzIGNvbnRhaW5lZCBpbiBvbmUgY29tcHJlc3NlZCBibG9jayBvZiBhdWRpbyBk
YXRhLgorICAgIEhSRVNVTFQgU2V0U2FtcGxlc1BlckJsb2NrKFVJTlQzMiBuU2FtcGxlcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0FVRElP
X1NBTVBMRVNfUEVSX0JMT0NLLCBuU2FtcGxlcyk7CisgICAgfQorCisgICAgLy8gUXVlcnkgdGhl
IG51bWJlciBvZiBhdWRpbyBzYW1wbGVzIHBlciBzZWNvbmQgYXMgYW4gaW50ZWdlciB2YWx1ZS4K
KyAgICBIUkVTVUxUIEdldFNhbXBsZXNQZXJTZWNvbmQoVUlOVDMyKiBwblNhbXBsZVJhdGUpCisg
ICAgeworICAgICAgICBpZiAoIXBuU2FtcGxlUmF0ZSkKKyAgICAgICAgICAgIHJldHVybiBFX1BP
SU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX0FV
RElPX1NBTVBMRVNfUEVSX1NFQ09ORCwgcG5TYW1wbGVSYXRlKTsKKyAgICB9CisKKyAgICAvLyBT
ZXQgdGhlIG51bWJlciBvZiBhdWRpbyBzYW1wbGVzIHBlciBzZWNvbmQgYXMgYW4gaW50ZWdlciB2
YWx1ZS4KKyAgICBIUkVTVUxUIFNldFNhbXBsZXNQZXJTZWNvbmQoVUlOVDMyIG5TYW1wbGVSYXRl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRf
QVVESU9fU0FNUExFU19QRVJfU0VDT05ELCBuU2FtcGxlUmF0ZSk7CisgICAgfQorCisgICAgLy8g
UXVlcnkgbnVtYmVyIG9mIHZhbGlkIGJpdHMgb2YgYXVkaW8gZGF0YSBpbiBlYWNoIHNhbXBsZS4K
KyAgICBIUkVTVUxUIEdldFZhbGlkQml0c1BlclNhbXBsZShVSU5UMzIqIHBuQml0cykKKyAgICB7
CisgICAgICAgIGlmICghcG5CaXRzKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAg
ICAgICAgSFJFU1VMVCBociA9IEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfQVVESU9f
VkFMSURfQklUU19QRVJfU0FNUExFLCBwbkJpdHMpOworICAgICAgICBpZiAoIVNVQ0NFRURFRCho
cikpCisgICAgICAgICAgICBociA9IEdldEJpdHNQZXJTYW1wbGUocG5CaXRzKTsKKyAgICAgICAg
cmV0dXJuIGhyOworICAgIH0gCisgICAgICAgIAorICAgIC8vIFNldCB0aGUgbnVtYmVyIG9mIHZh
bGlkIGJpdHMgb2YgYXVkaW8gZGF0YSBpbiBlYWNoIHNhbXBsZS4KKyAgICBIUkVTVUxUIFNldFZh
bGlkQml0c1BlclNhbXBsZShVSU5UMzIgbkJpdHMpCisgICAgeworICAgICAgICByZXR1cm4gR2V0
TWVkaWFUeXBlKCktPlNldFVJTlQzMihNRl9NVF9BVURJT19WQUxJRF9CSVRTX1BFUl9TQU1QTEUs
IG5CaXRzKTsKKyAgICB9IAorCisKKyAgICAvLyBUaGUgZm9sbG93aW5nIHZlcnNpb25zIHJldHVy
biB6ZXJvIGlmIHRoZSByZWxldmFudCBhdHRyaWJ1dGUgaXMgbm90IHByZXNlbnQuIAorICAgIC8v
IFRoaXMgaXMgdXNlZnVsIGZvciBtYWtpbmcgcXVpY2sgY29tcGFyaXNvbnMgYmV0d2VlZW4gbWVk
aWEgdHlwZXMuIAorCisgICAgVUlOVDMyIEF2Z2VyYWdlQnl0ZXNQZXJTZWNvbmQoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE1GR2V0QXR0cmlidXRlVUlOVDMyKEdldE1lZGlhVHlwZSgpLCBNRl9N
VF9BVURJT19BVkdfQllURVNfUEVSX1NFQ09ORCwgMCk7CisgICAgfQorCisgICAgVUlOVDMyIEJp
dHNQZXJTYW1wbGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1GR2V0QXR0cmlidXRlVUlOVDMy
KEdldE1lZGlhVHlwZSgpLCBNRl9NVF9BVURJT19CSVRTX1BFUl9TQU1QTEUsIDApOworICAgIH0K
KyAgICAgICAgCisgICAgVUlOVDMyIEdldEJsb2NrQWxpZ25tZW50KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBNRkdldEF0dHJpYnV0ZVVJTlQzMihHZXRNZWRpYVR5cGUoKSwgTUZfTVRfQVVESU9f
QkxPQ0tfQUxJR05NRU5ULCAwKTsKKyAgICB9CisgICAgICAgIAorICAgIGRvdWJsZSBGbG9hdFNh
bXBsZXNQZXJTZWNvbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1GR2V0QXR0cmlidXRlRG91
YmxlKEdldE1lZGlhVHlwZSgpLCBNRl9NVF9BVURJT19GTE9BVF9TQU1QTEVTX1BFUl9TRUNPTkQs
IDAuMCk7CisgICAgfQorCisgICAgVUlOVDMyIE51bUNoYW5uZWxzKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBNRkdldEF0dHJpYnV0ZVVJTlQzMihHZXRNZWRpYVR5cGUoKSwgTUZfTVRfQVVESU9f
TlVNX0NIQU5ORUxTLCAwKTsKKyAgICB9CisKKyAgICBVSU5UMzIgU2FtcGxlc1BlclNlY29uZCgp
CisgICAgeworICAgICAgICByZXR1cm4gTUZHZXRBdHRyaWJ1dGVVSU5UMzIoR2V0TWVkaWFUeXBl
KCksIE1GX01UX0FVRElPX1NBTVBMRVNfUEVSX1NFQ09ORCwgMCk7CisgICAgfQorCit9OyAgCisK
KworLy8gTVBFR1ZpZGVvVHlwZSBwcm92aWRlcyBhY2Nlc3MgdG8gTVBFRy0xIGFuZCBNUEVHLTIg
dmlkZW8gCisvLyBhdHRyaWJ1dGVzLCBwbHVzIHRoZSBnZW5lcmFsIHZpZGVvIGF0dHJpYnV0ZXMu
CisKK2NsYXNzIE1QRUdWaWRlb1R5cGUgOiBwdWJsaWMgVmlkZW9UeXBlIHsKKyAgICBmcmllbmQg
Y2xhc3MgTWVkaWFUeXBlOyAKKworcHVibGljOgorCisgICAgTVBFR1ZpZGVvVHlwZShJTUZNZWRp
YVR5cGUqIHBUeXBlID0gbnVsbHB0cikKKyAgICAgICAgOiBWaWRlb1R5cGUocFR5cGUpCisgICAg
eworICAgIH0KKworICAgIC8vIFJldHJpZXZlcyB0aGUgTVBFRyBzZXF1ZW5jZSBoZWFkZXIgZm9y
IGEgdmlkZW8gbWVkaWEgdHlwZS4KKyAgICBIUkVTVUxUIEdldE1wZWdTZXFIZWFkZXIoQllURSog
cERhdGEsIFVJTlQzMiBjYlNpemUpCisgICAgeworICAgICAgICBpZiAoIXBEYXRhKQorICAgICAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5H
ZXRCbG9iKE1GX01UX01QRUdfU0VRVUVOQ0VfSEVBREVSLCBwRGF0YSwgY2JTaXplLCBudWxscHRy
KTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoZSBNUEVHIHNlcXVlbmNlIGhlYWRlciBmb3IgYSB2
aWRlbyBtZWRpYSB0eXBlLgorICAgIEhSRVNVTFQgU2V0TXBlZ1NlcUhlYWRlcihjb25zdCBCWVRF
KiBwRGF0YSwgVUlOVDMyIGNiU2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghcERhdGEpCisgICAg
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCkt
PlNldEJsb2IoTUZfTVRfTVBFR19TRVFVRU5DRV9IRUFERVIsIHBEYXRhLCBjYlNpemUpOworICAg
IH0KKworICAgIC8vIFJldHJpZXZlcyB0aGUgc2l6ZSBvZiB0aGUgTVBFRyBzZXF1ZW5jZSBoZWFk
ZXIuCisgICAgSFJFU1VMVCBHZXRNcGVnU2VxSGVhZGVyU2l6ZShVSU5UMzIqIHBjYlNpemUpCisg
ICAgeworICAgICAgICBpZiAoIXBjYlNpemUpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVS
OworCisgICAgICAgICpwY2JTaXplID0gMDsKKworICAgICAgICBIUkVTVUxUIGhyID0gR2V0TWVk
aWFUeXBlKCktPkdldEJsb2JTaXplKE1GX01UX01QRUdfU0VRVUVOQ0VfSEVBREVSLCBwY2JTaXpl
KTsKKworICAgICAgICBpZiAoaHIgPT0gTUZfRV9BVFRSSUJVVEVOT1RGT1VORCkKKyAgICAgICAg
ICAgIGhyID0gU19PSzsKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKyAgICAgICAgCisgICAg
Ly8gUmV0cmlldmUgdGhlIGdyb3VwLW9mLXBpY3R1cmVzIChHT1ApIHN0YXJ0IHRpbWUgY29kZSwg
Zm9yIGFuIE1QRUctMSBvciBNUEVHLTIgdmlkZW8gbWVkaWEgdHlwZS4KKyAgICBIUkVTVUxUIEdl
dFN0YXJ0VGltZUNvZGUoVUlOVDMyKiBwblRpbWUpCisgICAgeworICAgICAgICBpZiAoIXBuVGlt
ZSkKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRp
YVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX01QRUdfU1RBUlRfVElNRV9DT0RFLCBwblRpbWUpOwor
ICAgIH0KKworICAgIC8vIFNldHMgdGhlIGdyb3VwLW9mLXBpY3R1cmVzIChHT1ApIHN0YXJ0IHRp
bWUgY29kZSwgZm9yIGFuIE1QRUctMSBvciBNUEVHLTIgdmlkZW8gbWVkaWEgdHlwZS4KKyAgICBI
UkVTVUxUIFNldFN0YXJ0VGltZUNvZGUoVUlOVDMyIG5UaW1lKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfTVBFR19TVEFSVF9USU1FX0NPREUs
IG5UaW1lKTsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgYXNzb3J0ZWQgZmxhZ3MgZm9yIE1Q
RUctMiB2aWRlbyBtZWRpYSB0eXBlCisgICAgSFJFU1VMVCBHZXRNUEVHMkZsYWdzKFVJTlQzMiog
cG5GbGFncykKKyAgICB7CisgICAgICAgIGlmICghcG5GbGFncykKKyAgICAgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1G
X01UX01QRUcyX0ZMQUdTLCBwbkZsYWdzKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIGFzc29ydGVk
IGZsYWdzIGZvciBNUEVHLTIgdmlkZW8gbWVkaWEgdHlwZQorICAgIEhSRVNVTFQgU2V0TVBFRzJG
bGFncyhVSU5UMzIgbkZsYWdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgp
LT5TZXRVSU5UMzIoTUZfTVRfTVBFRzJfRkxBR1MsIG5GbGFncyk7CisgICAgfQorCisgICAgLy8g
UmV0cmlldmVzIHRoZSBNUEVHLTIgbGV2ZWwgaW4gYSB2aWRlbyBtZWRpYSB0eXBlLgorICAgIEhS
RVNVTFQgR2V0TVBFRzJMZXZlbChVSU5UMzIqIHBMZXZlbCkKKyAgICB7CisgICAgICAgIGlmICgh
cExldmVsKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdl
dE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfTVBFRzJfTEVWRUwsIHBMZXZlbCk7CisgICAg
fQorCisgICAgLy8gU2V0cyB0aGUgTVBFRy0yIGxldmVsIGluIGEgdmlkZW8gbWVkaWEgdHlwZS4K
KyAgICBIUkVTVUxUIFNldE1QRUcyTGV2ZWwoVUlOVDMyIG5MZXZlbCkKKyAgICB7CisgICAgICAg
IHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX01QRUcyX0xFVkVMLCBuTGV2
ZWwpOworICAgIH0KKworICAgIC8vIFJldHJpZXZlcyB0aGUgTVBFRy0yIHByb2ZpbGUgaW4gYSB2
aWRlbyBtZWRpYSB0eXBlCisgICAgSFJFU1VMVCBHZXRNUEVHMlByb2ZpbGUoVUlOVDMyKiBwUHJv
ZmlsZSkKKyAgICB7CisgICAgICAgIGlmICghcFByb2ZpbGUpCisgICAgICAgICAgICByZXR1cm4g
RV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9N
VF9NUEVHMl9QUk9GSUxFLCBwUHJvZmlsZSk7CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUgTVBF
Ry0yIHByb2ZpbGUgaW4gYSB2aWRlbyBtZWRpYSB0eXBlCisgICAgSFJFU1VMVCBTZXRNUEVHMlBy
b2ZpbGUoVUlOVDMyIG5Qcm9maWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlw
ZSgpLT5TZXRVSU5UMzIoTUZfTVRfTVBFRzJfUFJPRklMRSwgblByb2ZpbGUpOworICAgIH0KKwor
fTsKKworCisvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgbWVkaWEgdHlwZXMu
CisKK2lubGluZSBNRk9mZnNldCBNYWtlT2Zmc2V0KGZsb2F0IHYpCit7CisgICAgLy8gdiA9IG9m
ZnNldC52YWx1ZSArIChvZmZzZXQuZnJhY3QgLyBkZW5vbWluYXRvciksIHdoZXJlIGRlbm9taW5h
dG9yID0gNjU1MzYuMGYuCisgICAgY29uc3QgaW50IGRlbm9taW5hdG9yID0gc3RkOjpudW1lcmlj
X2xpbWl0czxXT1JEPjo6bWF4KCkgKyAxOworICAgIE1GT2Zmc2V0IG9mZnNldDsKKyAgICBvZmZz
ZXQudmFsdWUgPSBzaG9ydCh2KTsKKyAgICBvZmZzZXQuZnJhY3QgPSBXT1JEKGRlbm9taW5hdG9y
ICogKHYgLSBvZmZzZXQudmFsdWUpKTsKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCisvLyBNRk9m
ZnNldFRvRmxvYXQ6IENvbnZlcnQgYSBmaXhlZC1wb2ludCB0byBhIGZsb2F0LgoraW5saW5lIGZs
b2F0IE1GT2Zmc2V0VG9GbG9hdChjb25zdCBNRk9mZnNldCYgb2Zmc2V0KQoreworICAgIGNvbnN0
IGludCBkZW5vbWluYXRvciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8V09SRD46Om1heCgpICsgMTsK
KyAgICByZXR1cm4gb2Zmc2V0LnZhbHVlICsgKGZsb2F0KG9mZnNldC5mcmFjdCkgLyBkZW5vbWlu
YXRvcik7Cit9CisKK2lubGluZSBNRlZpZGVvQXJlYSBNYWtlQXJlYShmbG9hdCB4LCBmbG9hdCB5
LCBEV09SRCB3aWR0aCwgRFdPUkQgaGVpZ2h0KQoreworICAgIE1GVmlkZW9BcmVhIGFyZWE7Cisg
ICAgYXJlYS5PZmZzZXRYID0gTWFrZU9mZnNldCh4KTsKKyAgICBhcmVhLk9mZnNldFkgPSBNYWtl
T2Zmc2V0KHkpOworICAgIGFyZWEuQXJlYS5jeCA9IHdpZHRoOworICAgIGFyZWEuQXJlYS5jeSA9
IGhlaWdodDsKKyAgICByZXR1cm4gYXJlYTsKK30KKworLy8gR2V0IHRoZSBmcmFtZSByYXRlIGZy
b20gYSB2aWRlbyBtZWRpYSB0eXBlLgoraW5saW5lIEhSRVNVTFQgR2V0RnJhbWVSYXRlKElNRk1l
ZGlhVHlwZSAqcFR5cGUsIE1GUmF0aW8gKnBSYXRpbykKK3sKKyAgICByZXR1cm4gTUZHZXRBdHRy
aWJ1dGVSYXRpbyhwVHlwZSwgTUZfTVRfRlJBTUVfUkFURSwgKFVJTlQzMiopJnBSYXRpby0+TnVt
ZXJhdG9yLCAoVUlOVDMyKikmcFJhdGlvLT5EZW5vbWluYXRvcik7Cit9CisKKy8vIEdldCB0aGUg
Y29ycmVjdCBkaXNwbGF5IGFyZWEgZnJvbSBhIHZpZGVvIG1lZGlhIHR5cGUuCitpbmxpbmUgSFJF
U1VMVCBHZXRWaWRlb0Rpc3BsYXlBcmVhKElNRk1lZGlhVHlwZSAqcFR5cGUsIE1GVmlkZW9BcmVh
ICpwQXJlYSkKK3sKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICBCT09MIGJQYW5TY2FuID0g
RkFMU0U7CisgICAgVUlOVDMyIHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKKworICAgIGJQYW5TY2Fu
ID0gTUZHZXRBdHRyaWJ1dGVVSU5UMzIocFR5cGUsIE1GX01UX1BBTl9TQ0FOX0VOQUJMRUQsIEZB
TFNFKTsKKworICAgIC8vIEluIHBhbi9zY2FuIG1vZGUsIHRyeSB0byBnZXQgdGhlIHBhbi9zY2Fu
IHJlZ2lvbi4KKyAgICBpZiAoYlBhblNjYW4pCisgICAgICAgIGhyID0gcFR5cGUtPkdldEJsb2Io
TUZfTVRfUEFOX1NDQU5fQVBFUlRVUkUsIChVSU5UOCopcEFyZWEsIHNpemVvZihNRlZpZGVvQXJl
YSksIG51bGxwdHIpOworCisgICAgLy8gSWYgbm90IGluIHBhbi9zY2FuIG1vZGUsIG9yIHRoZSBw
YW4vc2NhbiByZWdpb24gaXMgbm90IHNldCwgZ2V0IHRoZSBtaW5pbWltdW0gZGlzcGxheSBhcGVy
dHVyZS4KKworICAgIGlmICghYlBhblNjYW4gfHwgaHIgPT0gTUZfRV9BVFRSSUJVVEVOT1RGT1VO
RCkgeworICAgICAgICBociA9IHBUeXBlLT5HZXRCbG9iKE1GX01UX01JTklNVU1fRElTUExBWV9B
UEVSVFVSRSwgKFVJTlQ4KilwQXJlYSwgc2l6ZW9mKE1GVmlkZW9BcmVhKSwgbnVsbHB0cik7CisK
KyAgICAgICAgaWYgKGhyID09IE1GX0VfQVRUUklCVVRFTk9URk9VTkQpIHsKKyAgICAgICAgICAg
IC8vIE1pbmltdW0gZGlzcGxheSBhcGVydHVyZSBpcyBub3Qgc2V0LgorCisgICAgICAgICAgICAv
LyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgY29tcG9uZW50cywgY2hlY2sg
Zm9yIGEgZ2VvbWV0cmljIGFwZXJ0dXJlLiAKKyAgICAgICAgICAgIGhyID0gcFR5cGUtPkdldEJs
b2IoTUZfTVRfR0VPTUVUUklDX0FQRVJUVVJFLCAoVUlOVDgqKXBBcmVhLCBzaXplb2YoTUZWaWRl
b0FyZWEpLCBudWxscHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERlZmF1bHQ6IFVzZSB0
aGUgZW50aXJlIHZpZGVvIGFyZWEuCisKKyAgICAgICAgaWYgKGhyID09IE1GX0VfQVRUUklCVVRF
Tk9URk9VTkQpIHsKKyAgICAgICAgICAgIGhyID0gTUZHZXRBdHRyaWJ1dGVTaXplKHBUeXBlLCBN
Rl9NVF9GUkFNRV9TSVpFLCAmd2lkdGgsICZoZWlnaHQpOworICAgICAgICAgICAgaWYgKFNVQ0NF
RURFRChocikpCisgICAgICAgICAgICAgICAgKnBBcmVhID0gTWFrZUFyZWEoMC4wLCAwLjAsIHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhyOworfQorCisK
K2lubGluZSBIUkVTVUxUIEdldERlZmF1bHRTdHJpZGUoSU1GTWVkaWFUeXBlICpwVHlwZSwgTE9O
RyAqcGxTdHJpZGUpCit7CisgICAgTE9ORyBsU3RyaWRlID0gMDsKKworICAgIC8vIFRyeSB0byBn
ZXQgdGhlIGRlZmF1bHQgc3RyaWRlIGZyb20gdGhlIG1lZGlhIHR5cGUuCisgICAgSFJFU1VMVCBo
ciA9IHBUeXBlLT5HZXRVSU5UMzIoTUZfTVRfREVGQVVMVF9TVFJJREUsIChVSU5UMzIqKSZsU3Ry
aWRlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAvLyBBdHRyaWJ1dGUgbm90IHNl
dC4gVHJ5IHRvIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCBzdHJpZGUuCisgICAgICAgIEdVSUQgc3Vi
dHlwZSA9IEdVSURfTlVMTDsKKworICAgICAgICBVSU5UMzIgd2lkdGggPSAwOworICAgICAgICBV
SU5UMzIgaGVpZ2h0ID0gMDsKKworICAgICAgICAvLyBHZXQgdGhlIHN1YnR5cGUgYW5kIHRoZSBp
bWFnZSBzaXplLgorICAgICAgICBociA9IHBUeXBlLT5HZXRHVUlEKE1GX01UX1NVQlRZUEUsICZz
dWJ0eXBlKTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICBociA9IE1G
R2V0QXR0cmlidXRlU2l6ZShwVHlwZSwgTUZfTVRfRlJBTUVfU0laRSwgJndpZHRoLCAmaGVpZ2h0
KTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICBociA9IE1GR2V0U3Ry
aWRlRm9yQml0bWFwSW5mb0hlYWRlcihzdWJ0eXBlLkRhdGExLCB3aWR0aCwgJmxTdHJpZGUpOwor
CisgICAgICAgIC8vIFNldCB0aGUgYXR0cmlidXRlIGZvciBsYXRlciByZWZlcmVuY2UuCisgICAg
ICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgcFR5cGUtPlNldFVJTlQzMihNRl9N
VF9ERUZBVUxUX1NUUklERSwgVUlOVDMyKGxTdHJpZGUpKTsKKyAgICB9CisKKyAgICBpZiAoU1VD
Q0VFREVEKGhyKSkKKyAgICAgICAgKnBsU3RyaWRlID0gbFN0cmlkZTsKKworICAgIHJldHVybiBo
cjsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb24uY3BwCShyZXZpc2lvbiAxOTIwNzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTQgKzMwLDIwIEBACiAjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJIb3N0V2luZG93
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpZiBVU0UoQ0FJUk8pCisjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNlbmRpZgogI2luY2x1ZGUgIlNvZnRMaW5raW5n
LmgiCiAKICNpZiBVU0UoTUVESUFfRk9VTkRBVElPTikKIAogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAKKyNkZWZpbmUgQ0hFQ0tfSFIoaHIpIElGX0ZBSUxFRF9HT1RPKGhyLCBkb25lKQor
CiBTT0ZUX0xJTktfTElCUkFSWShNZik7CiBTT0ZUX0xJTktfT1BUSU9OQUwoTWYsIE1GQ3JlYXRl
U291cmNlUmVzb2x2ZXIsIEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoSU1GU291cmNlUmVzb2x2
ZXIqKikpOwogU09GVF9MSU5LX09QVElPTkFMKE1mLCBNRkNyZWF0ZU1lZGlhU2Vzc2lvbiwgSFJF
U1VMVCwgU1REQVBJQ0FMTFRZUEUsIChJTUZBdHRyaWJ1dGVzKiwgSU1GTWVkaWFTZXNzaW9uKiop
KTsKQEAgLTQ2LDEwICs1Miw1MCBAQCBTT0ZUX0xJTktfT1BUSU9OQUwoTWYsIE1GQ3JlYXRlVG9w
b2xvZ3lOCiBTT0ZUX0xJTktfT1BUSU9OQUwoTWYsIE1GR2V0U2VydmljZSwgSFJFU1VMVCwgU1RE
QVBJQ0FMTFRZUEUsIChJVW5rbm93biosIFJFRkdVSUQsIFJFRklJRCwgTFBWT0lEKikpOwogU09G
VF9MSU5LX09QVElPTkFMKE1mLCBNRkNyZWF0ZUF1ZGlvUmVuZGVyZXJBY3RpdmF0ZSwgSFJFU1VM
VCwgU1REQVBJQ0FMTFRZUEUsIChJTUZBY3RpdmF0ZSoqKSk7CiBTT0ZUX0xJTktfT1BUSU9OQUwo
TWYsIE1GQ3JlYXRlVmlkZW9SZW5kZXJlckFjdGl2YXRlLCBIUkVTVUxULCBTVERBUElDQUxMVFlQ
RSwgKEhXTkQsIElNRkFjdGl2YXRlKiopKTsKK1NPRlRfTElOS19PUFRJT05BTChNZiwgTUZDcmVh
dGVTYW1wbGVHcmFiYmVyU2lua0FjdGl2YXRlLCBIUkVTVUxULCBTVERBUElDQUxMVFlQRSwgKElN
Rk1lZGlhVHlwZSosIElNRlNhbXBsZUdyYWJiZXJTaW5rQ2FsbGJhY2sqLCBJTUZBY3RpdmF0ZSoq
KSk7CiAKIFNPRlRfTElOS19MSUJSQVJZKE1mcGxhdCk7CiBTT0ZUX0xJTktfT1BUSU9OQUwoTWZw
bGF0LCBNRlN0YXJ0dXAsIEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoVUxPTkcsIERXT1JEKSk7
CiBTT0ZUX0xJTktfT1BUSU9OQUwoTWZwbGF0LCBNRlNodXRkb3duLCBIUkVTVUxULCBTVERBUElD
QUxMVFlQRSwgKCkpOworU09GVF9MSU5LX09QVElPTkFMKE1mcGxhdCwgTUZDcmVhdGVNZW1vcnlC
dWZmZXIsIEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoRFdPUkQsIElNRk1lZGlhQnVmZmVyKiop
KTsKK1NPRlRfTElOS19PUFRJT05BTChNZnBsYXQsIE1GQ3JlYXRlU2FtcGxlLCBIUkVTVUxULCBT
VERBUElDQUxMVFlQRSwgKElNRlNhbXBsZSoqKSk7CitTT0ZUX0xJTktfT1BUSU9OQUwoTWZwbGF0
LCBNRkNyZWF0ZU1lZGlhVHlwZSwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUsIChJTUZNZWRpYVR5
cGUqKikpOworU09GVF9MSU5LX09QVElPTkFMKE1mcGxhdCwgTUZGcmFtZVJhdGVUb0F2ZXJhZ2VU
aW1lUGVyRnJhbWUsIEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoVUlOVDMyLCBVSU5UMzIsIFVJ
TlQ2NCopKTsKKworU1REQVBJIE1GQ3JlYXRlTWVkaWFUeXBlKF9PdXRwdHJfIElNRk1lZGlhVHlw
ZSoqICBwcE1GVHlwZSkKK3sKKyAgICByZXR1cm4gTUZDcmVhdGVNZWRpYVR5cGVQdHIoKShwcE1G
VHlwZSk7Cit9CisKK1NPRlRfTElOS19MSUJSQVJZKGV2cik7CitTT0ZUX0xJTktfT1BUSU9OQUwo
ZXZyLCBNRkNyZWF0ZVZpZGVvU2FtcGxlRnJvbVN1cmZhY2UsIEhSRVNVTFQsIFNUREFQSUNBTExU
WVBFLCAoSVVua25vd24qLCBJTUZTYW1wbGUqKikpOworCitTT0ZUX0xJTktfTElCUkFSWShEeHZh
Mik7CitTT0ZUX0xJTktfT1BUSU9OQUwoRHh2YTIsIERYVkEyQ3JlYXRlRGlyZWN0M0REZXZpY2VN
YW5hZ2VyOSwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUsIChVSU5UKiwgSURpcmVjdDNERGV2aWNl
TWFuYWdlcjkqKikpOworCitTT0ZUX0xJTktfTElCUkFSWShEM2Q5KTsKK1NPRlRfTElOS19PUFRJ
T05BTChEM2Q5LCBEaXJlY3QzRENyZWF0ZTlFeCwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUsIChV
SU5ULCBJRGlyZWN0M0Q5RXgqKikpOworCisvLyBNRlNhbXBsZVByZXNlbnRlclNhbXBsZUNvdW50
ZXIKKy8vIERhdGEgdHlwZTogVUlOVDMyCisvLworLy8gVmVyc2lvbiBudW1iZXIgZm9yIHRoZSB2
aWRlbyBzYW1wbGVzLiBXaGVuIHRoZSBwcmVzZW50ZXIgaW5jcmVtZW50cyB0aGUgdmVyc2lvbgor
Ly8gbnVtYmVyLCBhbGwgc2FtcGxlcyB3aXRoIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG51bWJlciBh
cmUgc3RhbGUgYW5kIHNob3VsZCBiZQorLy8gZGlzY2FyZGVkLgorc3RhdGljIGNvbnN0IEdVSUQg
TUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVDb3VudGVyID0KK3sgMHg4NjlmMWY3YywgMHgzNDk2LCAw
eDQ4YTksIHsgMHg4OCwgMHhlMywgMHg2OSwgMHg4NSwgMHg3OSwgMHhkMCwgMHg4YywgMHhiNiB9
IH07CisKKy8vIE1GU2FtcGxlUHJlc2VudGVyU2FtcGxlU3dhcENoYWluCisvLyBEYXRhIHR5cGU6
IElVTktOT1dOCisvLyAKKy8vIFBvaW50ZXIgdG8gYSBEaXJlY3QzRCBzd2FwIGNoYWluLgorc3Rh
dGljIGNvbnN0IEdVSUQgTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVTd2FwQ2hhaW4gPQoreyAweDI0
YTJlMDc2LCAweDM2NzMsIDB4NDMzZCwgeyAweDg3LCAweDQsIDB4NTUsIDB4MmIsIDB4MWYsIDB4
NWMsIDB4MTYsIDB4OGMgfSB9OworCisvLyBEZWZhdWx0IGZyYW1lIHJhdGUuCitzdGF0aWMgY29u
c3QgTUZSYXRpbyBnRGVmYXVsdEZyYW1lUmF0ZSA9IHsgMzAsIDEgfTsKKwordXNpbmcgbmFtZXNw
YWNlIE1lZGlhRm91bmRhdGlvblV0aWxzOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc3
LDkgKzEyMywxMCBAQCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246On5NZWRpCiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpyZWdpc3Rlck1lZGlhRW5n
aW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICBpZiAoaXNBdmFpbGFi
bGUoKSkKKyAgICBpZiAoaXNBdmFpbGFibGUoKSkgewogICAgICAgICByZWdpc3RyYXIoW10oTWVk
aWFQbGF5ZXIqIHBsYXllcikgeyByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb24+KHBsYXllcik7IH0sCiAgICAgICAgICAgICBnZXRTdXBwb3J0
ZWRUeXBlcywgc3VwcG9ydHNUeXBlLCAwLCAwLCAwLCAwKTsKKyAgICB9CiB9CiAKIGJvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjppc0F2YWlsYWJsZSgpIApAQCAtMjUyLDcg
KzI5OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjoKICAgICBp
bnQgdyA9IG1fc2l6ZS53aWR0aCgpICogZGV2aWNlU2NhbGVGYWN0b3I7CiAgICAgaW50IGggPSBt
X3NpemUuaGVpZ2h0KCkgKiBkZXZpY2VTY2FsZUZhY3RvcjsKIAotICAgIGlmIChtX2h3bmRWaWRl
byAmJiAhbV9sYXN0UGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICBpZiAobV9od25kVmlkZW8pCiAg
ICAgICAgIDo6TW92ZVdpbmRvdyhtX2h3bmRWaWRlbywgeCwgeSwgdywgaCwgRkFMU0UpOwogCiAg
ICAgUkVDVCByYyA9IHsgMCwgMCwgdywgaCB9OwpAQCAtMjYxLDE2ICszMDgsMTMgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OgogCiB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgp
Ci0gICAgICAgIHx8ICFtX3BsYXllci0+dmlzaWJsZSgpKQorICAgIGlmIChjb250ZXh0LnBhaW50
aW5nRGlzYWJsZWQoKSB8fCAhbV9wbGF5ZXItPnZpc2libGUoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9sYXN0UGFpbnRSZWN0ID0gcmVjdDsKIAotICAgIC8vIFdlIGN1cnJlbnRseSBsZXQg
TWVkaWEgRm91bmRhdGlvbiBoYW5kbGUgdGhlIGRyYXdpbmcsIGJ5IHByb3ZpZGluZyBhIGhhbmRs
ZSB0byB0aGUgd2luZG93IHRvIGRyYXcgaW4uCi0gICAgLy8gV2Ugc2hvdWxkIGluc3RlYWQgcmVh
ZCBpbmRpdmlkdWFsIGZyYW1lcyBmcm9tIHRoZSBzdHJlYW0sIGFuZCBwYWludCB0aGVtIGludG8g
dGhlIGdyYXBoaWNzIGNvbnRleHQgaGVyZS4KLQotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
aWYgKG1fcHJlc2VudGVyKQorICAgICAgICBtX3ByZXNlbnRlci0+cGFpbnRDdXJyZW50RnJhbWUo
Y29udGV4dCwgcmVjdCk7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpjcmVhdGVTZXNzaW9uKCkKQEAgLTM4NCw2ICs0MjgsOSBAQCBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAKICAgICBjYXNlIE1FU2Vzc2lvbkNsb3NlZDoKICAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1FTWVkaWFTYW1wbGU6CisgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIGlmIChtZWRpYUV2ZW50VHlwZSAhPSBNRVNlc3Npb25DbG9zZWQpIHsKQEAg
LTUxMCw3ICs1NTcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
CiAgICAgICAgIHJldHVybjsKICAgICBoV25kUGFyZW50ID0gdmlldy0+aG9zdFdpbmRvdygpLT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKTsKIAotICAgIG1faHduZFZpZGVvID0gQ3JlYXRlV2luZG93RXgo
V1NfRVhfTk9BQ1RJVkFURSB8IFdTX0VYX1RSQU5TUEFSRU5ULCByZWdpc3RlclZpZGVvV2luZG93
Q2xhc3MoKSwgMCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfQ0xJUFNJQkxJTkdTIHwgV1Nf
Q0xJUENISUxEUkVOLAorICAgIG1faHduZFZpZGVvID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9B
Q1RJVkFURSB8IFdTX0VYX1RSQU5TUEFSRU5ULCByZWdpc3RlclZpZGVvV2luZG93Q2xhc3MoKSwg
MCwgV1NfQ0hJTEQgfCBXU19DTElQU0lCTElOR1MgfCBXU19DTElQQ0hJTERSRU4sCiAgICAgICAg
IDAsIDAsIDAsIDAsIGhXbmRQYXJlbnQsIDAsIDAsIDApOwogfQogCkBAIC01MjIsNiArNTY5LDE4
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjoKICAgICB9CiB9CiAK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjppbnZhbGlkYXRlRnJhbWVW
aWV3KCkKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBudWxscHRyOworICAgIGlmICghbV9wbGF5
ZXIgfHwgIW1fcGxheWVyLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpIHx8ICFtX3BsYXllci0+Y2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZp
ZXcgPSBtX3BsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+ZG9jdW1lbnQoKS0+dmlldygp
OworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgdmlldy0+aW52YWxpZGF0
ZSgpOworfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6YWRkTGlz
dGVuZXIoTWVkaWFQbGF5ZXJMaXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9tdXRleExpc3RlbmVycyk7CkBAIC01NzksNyArNjM4LDEyIEBAIGJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjoKICAgICAgICAgbV9oYXNBdWRpbyA9IHRydWU7
CiAgICAgfSBlbHNlIGlmIChNRk1lZGlhVHlwZV9WaWRlbyA9PSBndWlkTWFqb3JUeXBlKSB7CiAg
ICAgICAgIC8vIENyZWF0ZSB0aGUgdmlkZW8gcmVuZGVyZXIuCi0gICAgICAgIGlmIChGQUlMRUQo
TUZDcmVhdGVWaWRlb1JlbmRlcmVyQWN0aXZhdGVQdHIoKShtX2h3bmRWaWRlbywgJnJlbmRlcmVy
QWN0aXZhdGUpKSkKKyAgICAgICAgaWYgKEZBSUxFRChNRkNyZWF0ZVZpZGVvUmVuZGVyZXJBY3Rp
dmF0ZVB0cigpKG51bGxwdHIsICZyZW5kZXJlckFjdGl2YXRlKSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgbV9wcmVzZW50ZXIgPSBuZXcgQ3VzdG9tVmlkZW9QcmVzZW50
ZXIodGhpcyk7CisgICAgICAgIG1fcHJlc2VudGVyLT5TZXRWaWRlb1dpbmRvdyhtX2h3bmRWaWRl
byk7CisgICAgICAgIGlmIChGQUlMRUQocmVuZGVyZXJBY3RpdmF0ZS0+U2V0VW5rbm93bihNRl9B
Q1RJVkFURV9DVVNUT01fVklERU9fUFJFU0VOVEVSX0FDVElWQVRFLCBzdGF0aWNfY2FzdDxJTUZB
Y3RpdmF0ZSo+KG1fcHJlc2VudGVyLmdldCgpKSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBtX2hhc1ZpZGVvID0gdHJ1ZTsKICAgICB9IGVsc2UKQEAgLTYzOCwxMyArNzAy
LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjoKICAgICBpZiAo
IU1GR2V0U2VydmljZVB0cigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoRkFJTEVEKE1G
R2V0U2VydmljZVB0cigpKG1fbWVkaWFTZXNzaW9uLmdldCgpLCBNUl9WSURFT19SRU5ERVJfU0VS
VklDRSwgSUlEX1BQVl9BUkdTKCZtX3ZpZGVvRGlzcGxheSkpKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKG1fdmlkZW9EaXNwbGF5KTsKLQotICAgIFJFQ1QgcmMgPSB7IDAsIDAsIG1f
c2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkgfTsKLSAgICBtX3ZpZGVvRGlzcGxheS0+U2V0
VmlkZW9Qb3NpdGlvbihudWxscHRyLCAmcmMpOworICAgIGlmIChTVUNDRUVERUQoTUZHZXRTZXJ2
aWNlUHRyKCkobV9tZWRpYVNlc3Npb24uZ2V0KCksIE1SX1ZJREVPX1JFTkRFUl9TRVJWSUNFLCBJ
SURfUFBWX0FSR1MoJm1fdmlkZW9EaXNwbGF5KSkpKSB7CisgICAgICAgIEFTU0VSVChtX3ZpZGVv
RGlzcGxheSk7CisgICAgICAgIFJFQ1QgcmMgPSB7IDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkgfTsKKyAgICAgICAgbV92aWRlb0Rpc3BsYXktPlNldFZpZGVvUG9zaXRpb24o
bnVsbHB0ciwgJnJjKTsKKyAgICB9CiAKICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZUZ1dHVyZURhdGE7CiAKQEAgLTcyNCw2ICs3ODYsMjY5NSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAgICAgbV9tZWRpYVBsYXllciA9IG51bGxwdHI7CiB9
CiAKK01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50
ZXI6OkN1c3RvbVZpZGVvUHJlc2VudGVyKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
biogbWVkaWFQbGF5ZXIpCisgICAgOiBtX21lZGlhUGxheWVyKG1lZGlhUGxheWVyKQoreworICAg
IEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgaWYgKG1fbWVkaWFQbGF5ZXIpCisgICAgICAgIG1f
bWVkaWFQbGF5ZXItPmFkZExpc3RlbmVyKHRoaXMpOworCisgICAgLy8gSW5pdGlhbCBzb3VyY2Ug
cmVjdGFuZ2xlID0gKDAsMCwxLDEpCisgICAgbV9ucmNTb3VyY2UudG9wID0gMDsKKyAgICBtX25y
Y1NvdXJjZS5sZWZ0ID0gMDsKKyAgICBtX25yY1NvdXJjZS5ib3R0b20gPSAxOworICAgIG1fbnJj
U291cmNlLnJpZ2h0ID0gMTsKKworICAgIG1fcEQzRFByZXNlbnRFbmdpbmUgPSBuZXcgRDNEUHJl
c2VudEVuZ2luZShocik7CisgICAgaWYgKCFtX3BEM0RQcmVzZW50RW5naW5lKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3NjaGVkdWxlci5TZXRDYWxsYmFjayhtX3BEM0RQcmVzZW50RW5naW5l
KTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1By
ZXNlbnRlcjo6fkN1c3RvbVZpZGVvUHJlc2VudGVyKCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXll
cikKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cmVtb3ZlTGlzdGVuZXIodGhpcyk7CisgICAgZGVs
ZXRlIG1fcEQzRFByZXNlbnRFbmdpbmU7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6UXVlcnlJbnRlcmZhY2UoUkVG
SUlEIHJpaWQsIF9fUlBDX19kZXJlZl9vdXQgdm9pZCBfX1JQQ19GQVIgKl9fUlBDX0ZBUiAqcHB2
T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSBudWxscHRyOworICAgIGlmIChJc0VxdWFsR1VJ
RChyaWlkLCBJSURfSU1GR2V0U2VydmljZSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNf
Y2FzdDxJTUZHZXRTZXJ2aWNlKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlp
ZCwgSUlEX0lNRkFjdGl2YXRlKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElN
RkFjdGl2YXRlKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lN
RlZpZGVvRGlzcGxheUNvbnRyb2wpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SU1GVmlkZW9EaXNwbGF5Q29udHJvbCo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlE
KHJpaWQsIElJRF9JTUZWaWRlb1ByZXNlbnRlcikpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0
aWNfY2FzdDxJTUZWaWRlb1ByZXNlbnRlcio+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxH
VUlEKHJpaWQsIElJRF9JTUZDbG9ja1N0YXRlU2luaykpCisgICAgICAgICpwcHZPYmplY3QgPSBz
dGF0aWNfY2FzdDxJTUZDbG9ja1N0YXRlU2luayo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1
YWxHVUlEKHJpaWQsIElJRF9JTUZWaWRlb0RldmljZUlEKSkKKyAgICAgICAgKnBwdk9iamVjdCA9
IHN0YXRpY19jYXN0PElNRlZpZGVvRGV2aWNlSUQqPih0aGlzKTsKKyAgICBlbHNlIGlmIChJc0Vx
dWFsR1VJRChyaWlkLCBJSURfSU1GVG9wb2xvZ3lTZXJ2aWNlTG9va3VwQ2xpZW50KSkKKyAgICAg
ICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElNRlRvcG9sb2d5U2VydmljZUxvb2t1cENsaWVu
dCo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JVW5rbm93bikp
CisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJTUZWaWRlb1ByZXNlbnRlcio+KHRo
aXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JTUZBc3luY0NhbGxiYWNr
KSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElNRkFzeW5jQ2FsbGJhY2sqPih0
aGlzKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOworCisgICAgQWRk
UmVmKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1VMT05HIFNURE1FVEhPRENBTExUWVBFIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkFk
ZFJlZigpCit7CisgICAgbV9yZWZDb3VudCsrOworICAgIHJldHVybiBtX3JlZkNvdW50OworfQor
CitVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpSZWxlYXNlKCkKK3sKKyAgICBtX3JlZkNvdW50LS07
CisgICAgVUxPTkcgcmVmQ291bnQgPSBtX3JlZkNvdW50OworICAgIGlmICghcmVmQ291bnQpCisg
ICAgICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiByZWZDb3VudDsKK30KKworSFJFU1VMVCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpP
bkNsb2NrU3RhcnQoTUZUSU1FIGhuc1N5c3RlbVRpbWUsIExPTkdMT05HIGxsQ2xvY2tTdGFydE9m
ZnNldCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX29iamVjdExvY2spOworCisgICAgLy8g
V2UgY2Fubm90IHN0YXJ0IGFmdGVyIHNodXRkb3duLgorICAgIEhSRVNVTFQgaHIgPSBDaGVja1No
dXRkb3duKCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAg
IC8vIENoZWNrIGlmIHRoZSBjbG9jayBpcyBhbHJlYWR5IGFjdGl2ZSAobm90IHN0b3BwZWQpLiAK
KyAgICBpZiAoSXNBY3RpdmUoKSkgeworICAgICAgICBtX1JlbmRlclN0YXRlID0gUkVOREVSX1NU
QVRFX1NUQVJURUQ7CisKKyAgICAgICAgLy8gSWYgdGhlIGNsb2NrIHBvc2l0aW9uIGNoYW5nZXMg
d2hpbGUgdGhlIGNsb2NrIGlzIGFjdGl2ZSwgaXQgCisgICAgICAgIC8vIGlzIGEgc2VlayByZXF1
ZXN0LiBXZSBuZWVkIHRvIGZsdXNoIGFsbCBwZW5kaW5nIHNhbXBsZXMuCisgICAgICAgIGlmIChs
bENsb2NrU3RhcnRPZmZzZXQgIT0gUFJFU0VOVEFUSU9OX0NVUlJFTlRfUE9TSVRJT04pCisgICAg
ICAgICAgICBGbHVzaCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fUmVuZGVyU3RhdGUgPSBS
RU5ERVJfU1RBVEVfU1RBUlRFRDsKKworICAgICAgICAvLyBUaGUgY2xvY2sgaGFzIHN0YXJ0ZWQg
ZnJvbSB0aGUgc3RvcHBlZCBzdGF0ZS4gCisKKyAgICAgICAgLy8gUG9zc2libHkgd2UgYXJlIGlu
IHRoZSBtaWRkbGUgb2YgZnJhbWUtc3RlcHBpbmcgT1IgaGF2ZSBzYW1wbGVzIHdhaXRpbmcgCisg
ICAgICAgIC8vIGluIHRoZSBmcmFtZS1zdGVwIHF1ZXVlLiBEZWFsIHdpdGggdGhlc2UgdHdvIGNh
c2VzIGZpcnN0OgorICAgICAgICBociA9IFN0YXJ0RnJhbWVTdGVwKCk7CisgICAgICAgIGlmIChG
QUlMRUQoaHIpKQorICAgICAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIC8vIE5vdyB0
cnkgdG8gZ2V0IG5ldyBvdXRwdXQgc2FtcGxlcyBmcm9tIHRoZSBtaXhlci4KKyAgICBQcm9jZXNz
T3V0cHV0TG9vcCgpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1N0
b3AoTUZUSU1FIGhuc1N5c3RlbVRpbWUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9vYmpl
Y3RMb2NrKTsKKworICAgIEhSRVNVTFQgaHIgPSBDaGVja1NodXRkb3duKCk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGlmIChtX1JlbmRlclN0YXRlICE9
IFJFTkRFUl9TVEFURV9TVE9QUEVEKSB7CisgICAgICAgIG1fUmVuZGVyU3RhdGUgPSBSRU5ERVJf
U1RBVEVfU1RPUFBFRDsKKyAgICAgICAgRmx1c2goKTsKKworICAgICAgICAvLyBJZiB3ZSBhcmUg
aW4gdGhlIG1pZGRsZSBvZiBmcmFtZS1zdGVwcGluZywgY2FuY2VsIGl0IG5vdy4KKyAgICAgICAg
aWYgKG1fRnJhbWVTdGVwLnN0YXRlICE9IEZSQU1FU1RFUF9OT05FKQorICAgICAgICAgICAgQ2Fu
Y2VsRnJhbWVTdGVwKCk7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6
T25DbG9ja1BhdXNlKE1GVElNRSBobnNTeXN0ZW1UaW1lKQoreworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fb2JqZWN0TG9jayk7CisKKyAgICAvLyBXZSBjYW5ub3QgcGF1c2UgdGhlIGNsb2NrIGFm
dGVyIHNodXRkb3duLgorICAgIEhSRVNVTFQgaHIgPSBDaGVja1NodXRkb3duKCk7CisgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIC8vIFNldCB0aGUgc3RhdGUu
IChObyBvdGhlciBhY3Rpb25zIGFyZSBuZWNlc3NhcnkuKQorICAgIG1fUmVuZGVyU3RhdGUgPSBS
RU5ERVJfU1RBVEVfUEFVU0VEOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25D
bG9ja1Jlc3RhcnQoTUZUSU1FIGhuc1N5c3RlbVRpbWUpCit7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9vYmplY3RMb2NrKTsKKworICAgIEhSRVNVTFQgaHIgPSBDaGVja1NodXRkb3duKCk7Cisg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIC8vIFRoZSBFVlIg
Y2FsbHMgT25DbG9ja1Jlc3RhcnQgb25seSB3aGlsZSBwYXVzZWQuCisgICAgQVNTRVJUKG1fUmVu
ZGVyU3RhdGUgPT0gUkVOREVSX1NUQVRFX1BBVVNFRCk7CisKKyAgICBtX1JlbmRlclN0YXRlID0g
UkVOREVSX1NUQVRFX1NUQVJURUQ7CisKKyAgICAvLyBQb3NzaWJseSB3ZSBhcmUgaW4gdGhlIG1p
ZGRsZSBvZiBmcmFtZS1zdGVwcGluZyBPUiB3ZSBoYXZlIHNhbXBsZXMgd2FpdGluZyAKKyAgICAv
LyBpbiB0aGUgZnJhbWUtc3RlcCBxdWV1ZS4gRGVhbCB3aXRoIHRoZXNlIHR3byBjYXNlcyBmaXJz
dDoKKyAgICBociA9IFN0YXJ0RnJhbWVTdGVwKCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgIHJldHVybiBocjsKKworICAgIC8vIE5vdyByZXN1bWUgdGhlIHByZXNlbnRhdGlvbiBsb29w
LgorICAgIFByb2Nlc3NPdXRwdXRMb29wKCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJF
U1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjpPbkNsb2NrU2V0UmF0ZShNRlRJTUUgaG5zU3lzdGVtVGltZSwgZmxvYXQgZlJhdGUpCit7
CisgICAgLy8gTm90ZTogCisgICAgLy8gVGhlIHByZXNlbnRlciByZXBvcnRzIGl0cyBtYXhpbXVt
IHJhdGUgdGhyb3VnaCB0aGUgSU1GUmF0ZVN1cHBvcnQgaW50ZXJmYWNlLgorICAgIC8vIEhlcmUs
IHdlIGFzc3VtZSB0aGF0IHRoZSBFVlIgaG9ub3JzIHRoZSBtYXhpbXVtIHJhdGUuCisKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX29iamVjdExvY2spOworCisgICAgSFJFU1VMVCBociA9IENoZWNr
U2h1dGRvd24oKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisg
ICAgLy8gSWYgdGhlIHJhdGUgaXMgY2hhbmdpbmcgZnJvbSB6ZXJvIChzY3J1YmJpbmcpIHRvIG5v
bi16ZXJvLCBjYW5jZWwgdGhlIAorICAgIC8vIGZyYW1lLXN0ZXAgb3BlcmF0aW9uLgorICAgIGlm
ICgobV9mUmF0ZSA9PSAwLjBmKSAmJiAoZlJhdGUgIT0gMC4wZikpIHsKKyAgICAgICAgQ2FuY2Vs
RnJhbWVTdGVwKCk7CisgICAgICAgIG1fRnJhbWVTdGVwLnNhbXBsZXMuY2xlYXIoKTsKKyAgICB9
CisKKyAgICBtX2ZSYXRlID0gZlJhdGU7CisKKyAgICAvLyBUZWxsIHRoZSBzY2hlZHVsZXIgYWJv
dXQgdGhlIG5ldyByYXRlLgorICAgIG1fc2NoZWR1bGVyLlNldENsb2NrUmF0ZShmUmF0ZSk7CisK
KyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpQcm9jZXNzTWVzc2FnZShNRlZQX01FU1NB
R0VfVFlQRSBlTWVzc2FnZSwgVUxPTkdfUFRSIHVsUGFyYW0pCit7CisgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9vYmplY3RMb2NrKTsKKworICAgIEhSRVNVTFQgaHIgPSBDaGVja1NodXRkb3duKCk7
CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIHN3aXRjaCAo
ZU1lc3NhZ2UpIHsKKyAgICAgICAgLy8gRmx1c2ggYWxsIHBlbmRpbmcgc2FtcGxlcy4KKyAgICBj
YXNlIE1GVlBfTUVTU0FHRV9GTFVTSDoKKyAgICAgICAgaHIgPSBGbHVzaCgpOworICAgICAgICBi
cmVhazsKKworICAgICAgICAvLyBSZW5lZ290aWF0ZSB0aGUgbWVkaWEgdHlwZSB3aXRoIHRoZSBt
aXhlci4KKyAgICBjYXNlIE1GVlBfTUVTU0FHRV9JTlZBTElEQVRFTUVESUFUWVBFOgorICAgICAg
ICBociA9IFJlbmVnb3RpYXRlTWVkaWFUeXBlKCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAg
IC8vIFRoZSBtaXhlciByZWNlaXZlZCBhIG5ldyBpbnB1dCBzYW1wbGUuIAorICAgIGNhc2UgTUZW
UF9NRVNTQUdFX1BST0NFU1NJTlBVVE5PVElGWToKKyAgICAgICAgaHIgPSBQcm9jZXNzSW5wdXRO
b3RpZnkoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gU3RyZWFtaW5nIGlzIGFib3V0
IHRvIHN0YXJ0LgorICAgIGNhc2UgTUZWUF9NRVNTQUdFX0JFR0lOU1RSRUFNSU5HOgorICAgICAg
ICBociA9IEJlZ2luU3RyZWFtaW5nKCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFN0
cmVhbWluZyBoYXMgZW5kZWQuIChUaGUgRVZSIGhhcyBzdG9wcGVkLikKKyAgICBjYXNlIE1GVlBf
TUVTU0FHRV9FTkRTVFJFQU1JTkc6CisgICAgICAgIGhyID0gRW5kU3RyZWFtaW5nKCk7CisgICAg
ICAgIGJyZWFrOworCisgICAgICAgIC8vIEFsbCBpbnB1dCBzdHJlYW1zIGhhdmUgZW5kZWQuCisg
ICAgY2FzZSBNRlZQX01FU1NBR0VfRU5ET0ZTVFJFQU06CisgICAgICAgIC8vIFNldCB0aGUgRU9T
IGZsYWcuIAorICAgICAgICBtX2JFbmRTdHJlYW1pbmcgPSBUUlVFOworICAgICAgICAvLyBDaGVj
ayBpZiBpdCdzIHRpbWUgdG8gc2VuZCB0aGUgRUNfQ09NUExFVEUgZXZlbnQgdG8gdGhlIEVWUi4K
KyAgICAgICAgaHIgPSBDaGVja0VuZE9mU3RyZWFtKCk7CisgICAgICAgIGJyZWFrOworCisgICAg
ICAgIC8vIEZyYW1lLXN0ZXBwaW5nIGlzIHN0YXJ0aW5nLgorICAgIGNhc2UgTUZWUF9NRVNTQUdF
X1NURVA6CisgICAgICAgIGhyID0gUHJlcGFyZUZyYW1lU3RlcCh1bFBhcmFtKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgLy8gQ2FuY2VscyBmcmFtZS1zdGVwcGluZy4KKyAgICBjYXNlIE1G
VlBfTUVTU0FHRV9DQU5DRUxTVEVQOgorICAgICAgICBociA9IENhbmNlbEZyYW1lU3RlcCgpOwor
ICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGhyID0gRV9JTlZBTElEQVJH
OyAvLyBVbmtub3duIG1lc3NhZ2UuIChUaGlzIGNhc2Ugc2hvdWxkIG5ldmVyIG9jY3VyLikKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGhyOworfQorCitIUkVTVUxUIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEN1
cnJlbnRNZWRpYVR5cGUoX091dHB0cl8gIElNRlZpZGVvTWVkaWFUeXBlICoqcHBNZWRpYVR5cGUp
Cit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9vYmplY3RMb2NrKTsKKworICAgIGlmICghcHBN
ZWRpYVR5cGUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBIUkVTVUxUIGhyID0g
Q2hlY2tTaHV0ZG93bigpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7
CisKKyAgICBpZiAoIW1fcE1lZGlhVHlwZSkKKyAgICAgICAgcmV0dXJuIE1GX0VfTk9UX0lOSVRJ
QUxJWkVEOworCisgICAgLy8gVGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gSU1GVmlkZW9NZWRpYVR5
cGUgcG9pbnRlciwgYW5kIHdlIHN0b3JlIG91ciBtZWRpYQorICAgIC8vIHR5cGUgYXMgYW4gSU1G
TWVkaWFUeXBlIHBvaW50ZXIsIHNvIHdlIG5lZWQgdG8gUUkuCisKKyAgICByZXR1cm4gbV9wTWVk
aWFUeXBlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJTUZWaWRlb01lZGlhVHlwZSksICh2b2lk
KiopJnBwTWVkaWFUeXBlKTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXREZXZpY2VJRChJSUQqIHBEZXZpY2VJ
RCkKK3sKKyAgICBpZiAoIXBEZXZpY2VJRCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKwor
ICAgICpwRGV2aWNlSUQgPSBfX3V1aWRvZihJRGlyZWN0M0REZXZpY2U5KTsKKyAgICByZXR1cm4g
U19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1
c3RvbVZpZGVvUHJlc2VudGVyOjpJbml0U2VydmljZVBvaW50ZXJzKElNRlRvcG9sb2d5U2Vydmlj
ZUxvb2t1cCAqcExvb2t1cCkKK3sKKyAgICBpZiAoIXBMb29rdXApCisgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CisKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fb2JqZWN0TG9jayk7CisKKyAgICAvLyBEbyBub3QgYWxsb3cgaW5pdGlhbGl6aW5nIHdo
ZW4gcGxheWluZyBvciBwYXVzZWQuCisgICAgaWYgKElzQWN0aXZlKCkpCisgICAgICAgIHJldHVy
biBNRl9FX0lOVkFMSURSRVFVRVNUOworCisgICAgbV9wQ2xvY2sgPSBudWxscHRyOworICAgIG1f
cE1peGVyID0gbnVsbHB0cjsKKyAgICBtX3BNZWRpYUV2ZW50U2luayA9IG51bGxwdHI7CisKKyAg
ICAvLyBBc2sgZm9yIHRoZSBjbG9jay4gT3B0aW9uYWwsIGJlY2F1c2UgdGhlIEVWUiBtaWdodCBu
b3QgaGF2ZSBhIGNsb2NrLgorICAgIERXT1JEIGR3T2JqZWN0Q291bnQgPSAxOworCisgICAgcExv
b2t1cC0+TG9va3VwU2VydmljZSgKKyAgICAgICAgTUZfU0VSVklDRV9MT09LVVBfR0xPQkFMLCAv
LyBOb3QgdXNlZC4KKyAgICAgICAgMCwgLy8gUmVzZXJ2ZWQuCisgICAgICAgIE1SX1ZJREVPX1JF
TkRFUl9TRVJWSUNFLCAvLyBTZXJ2aWNlIHRvIGxvb2sgdXAuCisgICAgICAgIElJRF9QUFZfQVJH
UygmbV9wQ2xvY2spLCAvLyBJbnRlcmZhY2UgdG8gcmV0cmlldmUuCisgICAgICAgICZkd09iamVj
dENvdW50IC8vIE51bWJlciBvZiBlbGVtZW50cyByZXRyaWV2ZWQuCisgICAgICAgICk7CisKKyAg
ICAvLyBBc2sgZm9yIHRoZSBtaXhlci4gKFJlcXVpcmVkLikKKyAgICBkd09iamVjdENvdW50ID0g
MTsKKworICAgIGhyID0gcExvb2t1cC0+TG9va3VwU2VydmljZSgKKyAgICAgICAgTUZfU0VSVklD
RV9MT09LVVBfR0xPQkFMLCAwLAorICAgICAgICBNUl9WSURFT19NSVhFUl9TRVJWSUNFLCBJSURf
UFBWX0FSR1MoJm1fcE1peGVyKSwgJmR3T2JqZWN0Q291bnQKKyAgICAgICAgKTsKKworICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhh
dCB3ZSBjYW4gd29yayB3aXRoIHRoaXMgbWl4ZXIuCisgICAgaHIgPSBDb25maWd1cmVNaXhlciht
X3BNaXhlci5nZXQoKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsK
KworICAgIC8vIEFzayBmb3IgdGhlIEVWUidzIGV2ZW50LXNpbmsgaW50ZXJmYWNlLiAoUmVxdWly
ZWQuKQorICAgIGR3T2JqZWN0Q291bnQgPSAxOworCisgICAgaHIgPSBwTG9va3VwLT5Mb29rdXBT
ZXJ2aWNlKAorICAgICAgICBNRl9TRVJWSUNFX0xPT0tVUF9HTE9CQUwsIDAsCisgICAgICAgIE1S
X1ZJREVPX1JFTkRFUl9TRVJWSUNFLCBJSURfUFBWX0FSR1MoJm1fcE1lZGlhRXZlbnRTaW5rKSwK
KyAgICAgICAgJmR3T2JqZWN0Q291bnQKKyAgICAgICAgKTsKKworICAgIGlmIChGQUlMRUQoaHIp
KQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICAvLyBTdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQu
IFNldCB0aGUgc3RhdGUgdG8gInN0b3BwZWQuIgorICAgIG1fUmVuZGVyU3RhdGUgPSBSRU5ERVJf
U1RBVEVfU1RPUFBFRDsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlJlbGVhc2VT
ZXJ2aWNlUG9pbnRlcnMoKQoreworICAgIC8vIEVudGVyIHRoZSBzaHV0LWRvd24gc3RhdGUuCisg
ICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX29iamVjdExvY2spOworICAgICAgICBt
X1JlbmRlclN0YXRlID0gUkVOREVSX1NUQVRFX1NIVVRET1dOOworICAgIH0KKworICAgIC8vIEZs
dXNoIGFueSBzYW1wbGVzIHRoYXQgd2VyZSBzY2hlZHVsZWQuCisgICAgRmx1c2goKTsKKworICAg
IC8vIENsZWFyIHRoZSBtZWRpYSB0eXBlIGFuZCByZWxlYXNlIHJlbGF0ZWQgcmVzb3VyY2VzLgor
ICAgIFNldE1lZGlhVHlwZShudWxscHRyKTsKKworICAgIC8vIFJlbGVhc2UgYWxsIHNlcnZpY2Vz
IHRoYXQgd2VyZSBhY3F1aXJlZCBmcm9tIEluaXRTZXJ2aWNlUG9pbnRlcnMuCisgICAgbV9wQ2xv
Y2sgPSBudWxscHRyOworICAgIG1fcE1peGVyID0gbnVsbHB0cjsKKyAgICBtX3BNZWRpYUV2ZW50
U2luayA9IG51bGxwdHI7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRTZXJ2
aWNlKFJFRkdVSUQgZ3VpZFNlcnZpY2UsIFJFRklJRCByaWlkLCBMUFZPSUQqIHBwdk9iamVjdCkK
K3sKKyAgICBpZiAoIXBwdk9iamVjdCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAg
IC8vIFRoZSBvbmx5IHNlcnZpY2UgR1VJRCB0aGF0IHdlIHN1cHBvcnQgaXMgTVJfVklERU9fUkVO
REVSX1NFUlZJQ0UuCisgICAgaWYgKGd1aWRTZXJ2aWNlICE9IE1SX1ZJREVPX1JFTkRFUl9TRVJW
SUNFKQorICAgICAgICByZXR1cm4gTUZfRV9VTlNVUFBPUlRFRF9TRVJWSUNFOworCisgICAgLy8g
Rmlyc3QgdHJ5IHRvIGdldCB0aGUgc2VydmljZSBpbnRlcmZhY2UgZnJvbSB0aGUgRDNEUHJlc2Vu
dEVuZ2luZSBvYmplY3QuCisgICAgSFJFU1VMVCBociA9IG1fcEQzRFByZXNlbnRFbmdpbmUtPkdl
dFNlcnZpY2UoZ3VpZFNlcnZpY2UsIHJpaWQsIHBwdk9iamVjdCk7CisgICAgaWYgKEZBSUxFRCho
cikpIHsKKyAgICAgICAgLy8gTmV4dCwgUUkgdG8gY2hlY2sgaWYgdGhpcyBvYmplY3Qgc3VwcG9y
dHMgdGhlIGludGVyZmFjZS4KKyAgICAgICAgaHIgPSBRdWVyeUludGVyZmFjZShyaWlkLCBwcHZP
YmplY3QpOworICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworSFJFU1VMVCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpBY3RpdmF0ZU9i
amVjdChSRUZJSUQgcmlpZCwgdm9pZCAqKnBwdikKK3sKKyAgICBpZiAocmlpZCA9PSBJSURfSU1G
VmlkZW9QcmVzZW50ZXIpIHsKKyAgICAgICAgKnBwdiA9IHN0YXRpY19jYXN0PElNRlZpZGVvUHJl
c2VudGVyKj4odGhpcyk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKyAgICByZXR1cm4g
RV9GQUlMOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkRldGFjaE9iamVjdCgpCit7CisgICAgcmV0dXJuIFNfT0s7
Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21W
aWRlb1ByZXNlbnRlcjo6U2h1dGRvd25PYmplY3QoKQoreworICAgIHJldHVybiBTX09LOworfQor
CitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OlNldFZpZGVvV2luZG93KEhXTkQgaHduZFZpZGVvKQoreworICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fb2JqZWN0TG9jayk7CisKKyAgICBpZiAoIUlzV2luZG93KGh3bmRWaWRlbykp
CisgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisKKyAgICBIUkVTVUxUIGhyID0gU19PSzsK
KyAgICBIV05EIG9sZEh3bmQgPSBtX3BEM0RQcmVzZW50RW5naW5lLT5HZXRWaWRlb1dpbmRvdygp
OworCisgICAgLy8gSWYgdGhlIHdpbmRvdyBoYXMgY2hhbmdlZCwgbm90aWZ5IHRoZSBEM0RQcmVz
ZW50RW5naW5lIG9iamVjdC4KKyAgICAvLyBUaGlzIHdpbGwgY2F1c2UgYSBuZXcgRGlyZWN0M0Qg
ZGV2aWNlIHRvIGJlIGNyZWF0ZWQuCisgICAgaWYgKG9sZEh3bmQgIT0gaHduZFZpZGVvKSB7Cisg
ICAgICAgIGhyID0gbV9wRDNEUHJlc2VudEVuZ2luZS0+U2V0VmlkZW9XaW5kb3coaHduZFZpZGVv
KTsKKworICAgICAgICAvLyBUZWxsIHRoZSBFVlIgdGhhdCB0aGUgZGV2aWNlIGhhcyBjaGFuZ2Vk
LgorICAgICAgICBOb3RpZnlFdmVudChFQ19ESVNQTEFZX0NIQU5HRUQsIDAsIDApOworICAgIH0K
KworICAgIHJldHVybiBocjsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRWaWRlb1dpbmRvdyhIV05EKiBwaHdu
ZFZpZGVvKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fb2JqZWN0TG9jayk7CisKKyAgICBp
ZiAoIXBod25kVmlkZW8pCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICAvLyBUaGUg
RDNEUHJlc2VudEVuZ2luZSBvYmplY3Qgc3RvcmVzIHRoZSBoYW5kbGUuCisgICAgKnBod25kVmlk
ZW8gPSBtX3BEM0RQcmVzZW50RW5naW5lLT5HZXRWaWRlb1dpbmRvdygpOworCisgICAgcmV0dXJu
IFNfT0s7Cit9CisKK0hSRVNVTFQgU2V0TWl4ZXJTb3VyY2VSZWN0KElNRlRyYW5zZm9ybSAqcE1p
eGVyLCBjb25zdCBNRlZpZGVvTm9ybWFsaXplZFJlY3QmIG5yY1NvdXJjZSkKK3sKKyAgICBpZiAo
IXBNaXhlcikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIENPTVB0cjxJTUZBdHRy
aWJ1dGVzPiBwQXR0cmlidXRlczsKKworICAgIEhSRVNVTFQgaHIgPSBwTWl4ZXItPkdldEF0dHJp
YnV0ZXMoJnBBdHRyaWJ1dGVzKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJu
IGhyOworCisgICAgcmV0dXJuIHBBdHRyaWJ1dGVzLT5TZXRCbG9iKFZJREVPX1pPT01fUkVDVCwg
KGNvbnN0IFVJTlQ4KikmbnJjU291cmNlLCBzaXplb2YobnJjU291cmNlKSk7Cit9CisKK0hSRVNV
TFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRl
cjo6U2V0VmlkZW9Qb3NpdGlvbihjb25zdCBNRlZpZGVvTm9ybWFsaXplZFJlY3QqIHBucmNTb3Vy
Y2UsIGNvbnN0IExQUkVDVCBwcmNEZXN0KQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fb2Jq
ZWN0TG9jayk7CisKKyAgICAvLyBWYWxpZGF0ZSBwYXJhbWV0ZXJzLgorCisgICAgLy8gT25lIHBh
cmFtZXRlciBjYW4gYmUgbnVsbHB0ciwgYnV0IG5vdCBib3RoLgorICAgIGlmICghcG5yY1NvdXJj
ZSAmJiAhcHJjRGVzdCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIC8vIFZhbGlk
YXRlIHRoZSByZWN0YW5nbGVzLgorICAgIGlmIChwbnJjU291cmNlKSB7CisgICAgICAgIC8vIFRo
ZSBzb3VyY2UgcmVjdGFuZ2xlIGNhbm5vdCBiZSBmbGlwcGVkLgorICAgICAgICBpZiAoKHBucmNT
b3VyY2UtPmxlZnQgPiBwbnJjU291cmNlLT5yaWdodCkgfHwgKHBucmNTb3VyY2UtPnRvcCA+IHBu
cmNTb3VyY2UtPmJvdHRvbSkpCisgICAgICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworCisg
ICAgICAgIC8vIFRoZSBzb3VyY2UgcmVjdGFuZ2xlIGhhcyByYW5nZSAoMC4uMSkKKyAgICAgICAg
aWYgKChwbnJjU291cmNlLT5sZWZ0IDwgMCkgfHwgKHBucmNTb3VyY2UtPnJpZ2h0ID4gMSkgfHwg
KHBucmNTb3VyY2UtPnRvcCA8IDApIHx8IChwbnJjU291cmNlLT5ib3R0b20gPiAxKSkKKyAgICAg
ICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisgICAgfQorCisgICAgaWYgKHByY0Rlc3QpIHsK
KyAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBjYW5ub3QgYmUgZmxpcHBlZC4K
KyAgICAgICAgaWYgKChwcmNEZXN0LT5sZWZ0ID4gcHJjRGVzdC0+cmlnaHQpIHx8IChwcmNEZXN0
LT50b3AgPiBwcmNEZXN0LT5ib3R0b20pKQorICAgICAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFS
RzsKKyAgICB9CisKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgIC8vIFVwZGF0ZSB0aGUg
c291cmNlIHJlY3RhbmdsZS4gU291cmNlIGNsaXBwaW5nIGlzIHBlcmZvcm1lZCBieSB0aGUgbWl4
ZXIuCisgICAgaWYgKHBucmNTb3VyY2UpIHsKKyAgICAgICAgbV9ucmNTb3VyY2UgPSAqcG5yY1Nv
dXJjZTsKKworICAgICAgICBpZiAobV9wTWl4ZXIpIHsKKyAgICAgICAgICAgIGhyID0gU2V0TWl4
ZXJTb3VyY2VSZWN0KG1fcE1peGVyLmdldCgpLCBtX25yY1NvdXJjZSk7CisgICAgICAgICAgICBp
ZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBVcGRhdGUgdGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZS4KKyAgICBpZiAo
cHJjRGVzdCkgeworICAgICAgICBSRUNUIHJjT2xkRGVzdCA9IG1fcEQzRFByZXNlbnRFbmdpbmUt
PkdldERlc3RpbmF0aW9uUmVjdCgpOworCisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBkZXN0aW5h
dGlvbiByZWN0YW5nbGUgY2hhbmdlZC4KKyAgICAgICAgaWYgKCFFcXVhbFJlY3QoJnJjT2xkRGVz
dCwgcHJjRGVzdCkpIHsKKyAgICAgICAgICAgIGhyID0gbV9wRDNEUHJlc2VudEVuZ2luZS0+U2V0
RGVzdGluYXRpb25SZWN0KCpwcmNEZXN0KTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgICAgIC8vIFNldCBhIG5ldyBtZWRp
YSB0eXBlIG9uIHRoZSBtaXhlci4KKyAgICAgICAgICAgIGlmIChtX3BNaXhlcikgeworICAgICAg
ICAgICAgICAgIGhyID0gUmVuZWdvdGlhdGVNZWRpYVR5cGUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoaHIgPT0gTUZfRV9UUkFOU0ZPUk1fVFlQRV9OT1RfU0VUKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgZXJyb3IgbWVhbnMgdGhhdCB0aGUgbWl4ZXIgaXMgbm90IHJlYWR5IGZvciB0
aGUgbWVkaWEgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gTm90IGEgZmFpbHVyZSBjYXNl
IC0tIHRoZSBFVlIgd2lsbCBub3RpZnkgdXMgd2hlbiB3ZSBuZWVkIHRvIHNldAorICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgdHlwZSBvbiB0aGUgbWl4ZXIuCisgICAgICAgICAgICAgICAgICAg
IGhyID0gU19PSzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBocjsKKwor
ICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbWVkaWEgdHlwZSBjaGFuZ2VkLiBSZXF1ZXN0IGEg
cmVwYWludCBvZiB0aGUgY3VycmVudCBmcmFtZS4KKyAgICAgICAgICAgICAgICAgICAgbV9iUmVw
YWludCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NPdXRwdXQoKTsgLy8gSWdu
b3JlIGVycm9ycywgdGhlIG1peGVyIG1pZ2h0IG5vdCBoYXZlIGEgdmlkZW8gZnJhbWUuCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VmlkZW9Qb3NpdGlvbihNRlZpZGVvTm9ybWFsaXpl
ZFJlY3QqIHBucmNTb3VyY2UsIExQUkVDVCBwcmNEZXN0KQoreworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fb2JqZWN0TG9jayk7CisKKyAgICBpZiAoIXBucmNTb3VyY2UgfHwgIXByY0Rlc3QpCisg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICAqcG5yY1NvdXJjZSA9IG1fbnJjU291cmNl
OworICAgICpwcmNEZXN0ID0gbV9wRDNEUHJlc2VudEVuZ2luZS0+R2V0RGVzdGluYXRpb25SZWN0
KCk7CisKKyAgICByZXR1cm4gU19PSzsKIH0KIAorSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpSZXBhaW50VmlkZW8oKQorewor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fb2JqZWN0TG9jayk7CisKKyAgICBIUkVTVUxUIGhyID0g
Q2hlY2tTaHV0ZG93bigpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7
CisKKyAgICAvLyBJZ25vcmUgdGhlIHJlcXVlc3QgaWYgd2UgaGF2ZSBub3QgcHJlc2VudGVkIGFu
eSBzYW1wbGVzIHlldC4KKyAgICBpZiAobV9iUHJlcm9sbGVkKSB7CisgICAgICAgIG1fYlJlcGFp
bnQgPSB0cnVlOworICAgICAgICBQcm9jZXNzT3V0cHV0KCk7CisgICAgfQorCisgICAgcmV0dXJu
IFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpD
dXN0b21WaWRlb1ByZXNlbnRlcjo6SW52b2tlKElNRkFzeW5jUmVzdWx0KiBwQXN5bmNSZXN1bHQp
Cit7CisgICAgcmV0dXJuIE9uU2FtcGxlRnJlZShwQXN5bmNSZXN1bHQpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Om9u
TWVkaWFQbGF5ZXJEZWxldGVkKCkKK3sKKyAgICBtX21lZGlhUGxheWVyID0gbnVsbHB0cjsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpwYWludEN1cnJlbnRGcmFtZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgcikKK3sKKyAgICBpZiAobV9wRDNEUHJlc2VudEVuZ2luZSkKKyAgICAgICAg
bV9wRDNEUHJlc2VudEVuZ2luZS0+UGFpbnRDdXJyZW50RnJhbWUoY29udGV4dCwgcik7Cit9CisK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNl
bnRlcjo6SXNBY3RpdmUoKQoreworICAgIHJldHVybiAoKG1fUmVuZGVyU3RhdGUgPT0gUkVOREVS
X1NUQVRFX1NUQVJURUQpIHx8IChtX1JlbmRlclN0YXRlID09IFJFTkRFUl9TVEFURV9QQVVTRUQp
KTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3Rv
bVZpZGVvUHJlc2VudGVyOjpDb25maWd1cmVNaXhlcihJTUZUcmFuc2Zvcm0gKnBNaXhlcikKK3sK
KyAgICBJSUQgZGV2aWNlSUQgPSBHVUlEX05VTEw7CisKKyAgICBDT01QdHI8SU1GVmlkZW9EZXZp
Y2VJRD4gcERldmljZUlEOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIG1peGVyIGhhcyB0
aGUgc2FtZSBkZXZpY2UgSUQgYXMgb3Vyc2VsdmVzLgorICAgIEhSRVNVTFQgaHIgPSBwTWl4ZXIt
PlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElNRlZpZGVvRGV2aWNlSUQpLCAodm9pZCoqKSZwRGV2
aWNlSUQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBo
ciA9IHBEZXZpY2VJRC0+R2V0RGV2aWNlSUQoJmRldmljZUlEKTsKKyAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaWYgKCFJc0VxdWFsR1VJRChkZXZpY2VJRCwg
X191dWlkb2YoSURpcmVjdDNERGV2aWNlOSkpKQorICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElE
UkVRVUVTVDsKKworICAgIC8vIFNldCB0aGUgem9vbSByZWN0YW5nbGUgKGllLCB0aGUgc291cmNl
IGNsaXBwaW5nIHJlY3RhbmdsZSkuCisgICAgU2V0TWl4ZXJTb3VyY2VSZWN0KHBNaXhlciwgbV9u
cmNTb3VyY2UpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Rmx1c2goKQorewor
ICAgIG1fYlByZXJvbGxlZCA9IGZhbHNlOworCisgICAgLy8gVGhlIHNjaGVkdWxlciBtaWdodCBo
YXZlIHNhbXBsZXMgdGhhdCBhcmUgd2FpdGluZyBmb3IKKyAgICAvLyB0aGVpciBwcmVzZW50YXRp
b24gdGltZS4gVGVsbCB0aGUgc2NoZWR1bGVyIHRvIGZsdXNoLgorCisgICAgLy8gVGhpcyBjYWxs
IGJsb2NrcyB1bnRpbCB0aGUgc2NoZWR1bGVyIHRocmVhZHMgZGlzY2FyZHMgYWxsIHNjaGVkdWxl
ZCBzYW1wbGVzLgorICAgIG1fc2NoZWR1bGVyLkZsdXNoKCk7CisKKyAgICAvLyBGbHVzaCB0aGUg
ZnJhbWUtc3RlcCBxdWV1ZS4KKyAgICBtX0ZyYW1lU3RlcC5zYW1wbGVzLmNsZWFyKCk7CisKKyAg
ICBpZiAobV9SZW5kZXJTdGF0ZSA9PSBSRU5ERVJfU1RBVEVfU1RPUFBFRCkgeworICAgICAgICAv
LyBSZXBhaW50IHdpdGggYmxhY2suCisgICAgICAgIG1fcEQzRFByZXNlbnRFbmdpbmUtPlByZXNl
bnRTYW1wbGUobnVsbHB0ciwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK3N0
YXRpYyBib29sIEFyZU1lZGlhVHlwZXNFcXVhbChJTUZNZWRpYVR5cGUgKnBUeXBlMSwgSU1GTWVk
aWFUeXBlICpwVHlwZTIpCit7CisgICAgaWYgKCFwVHlwZTEgJiYgIXBUeXBlMikKKyAgICAgICAg
cmV0dXJuIHRydWU7IC8vIEJvdGggYXJlIG51bGxwdHIuCisgICAgaWYgKCFwVHlwZTEgfHwgIXBU
eXBlMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPbmUgaXMgbnVsbHB0ci4KKworICAgIERX
T1JEIGR3RmxhZ3MgPSAwOworICAgIHJldHVybiBTX09LID09IHBUeXBlMS0+SXNFcXVhbChwVHlw
ZTIsICZkd0ZsYWdzKTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTZXRNZWRpYVR5cGUoSU1GTWVkaWFUeXBlKiBw
TWVkaWFUeXBlKQoreworICAgIC8vIE5vdGU6IHBNZWRpYVR5cGUgY2FuIGJlIG51bGxwdHIgKHRv
IGNsZWFyIHRoZSB0eXBlKQorCisgICAgLy8gQ2xlYXJpbmcgdGhlIG1lZGlhIHR5cGUgaXMgYWxs
b3dlZCBpbiBhbnkgc3RhdGUgKGluY2x1ZGluZyBzaHV0ZG93bikuCisgICAgaWYgKCFwTWVkaWFU
eXBlKSB7CisgICAgICAgIG1fcE1lZGlhVHlwZSA9IG51bGxwdHI7CisgICAgICAgIFJlbGVhc2VS
ZXNvdXJjZXMoKTsKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgTUZSYXRpbyBm
cHMgPSB7IDAsIDAgfTsKKyAgICBWaWRlb1NhbXBsZUxpc3Qgc2FtcGxlUXVldWU7CisKKyAgICAv
LyBDYW5ub3Qgc2V0IHRoZSBtZWRpYSB0eXBlIGFmdGVyIHNodXRkb3duLgorICAgIEhSRVNVTFQg
aHIgPSBDaGVja1NodXRkb3duKCk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgUmVs
ZWFzZVJlc291cmNlcygpOworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgLy8gQ2hl
Y2sgaWYgdGhlIG5ldyB0eXBlIGlzIGFjdHVhbGx5IGRpZmZlcmVudC4KKyAgICAvLyBOb3RlOiBU
aGlzIGZ1bmN0aW9uIHNhZmVseSBoYW5kbGVzIG51bGxwdHIgaW5wdXQgcGFyYW1ldGVycy4KKyAg
ICBpZiAoQXJlTWVkaWFUeXBlc0VxdWFsKG1fcE1lZGlhVHlwZS5nZXQoKSwgcE1lZGlhVHlwZSkp
CisgICAgICAgIHJldHVybiBTX09LOyAvLyBOb3RoaW5nIG1vcmUgdG8gZG8uCisKKyAgICAvLyBX
ZSdyZSByZWFsbHkgY2hhbmdpbmcgdGhlIHR5cGUuIEZpcnN0IGdldCByaWQgb2YgdGhlIG9sZCB0
eXBlLgorICAgIG1fcE1lZGlhVHlwZSA9IG51bGxwdHI7CisgICAgUmVsZWFzZVJlc291cmNlcygp
OworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcHJlc2VudGVyIGVuZ2luZSB3aXRoIHRoZSBuZXcg
bWVkaWEgdHlwZS4KKyAgICAvLyBUaGUgcHJlc2VudGVyIGVuZ2luZSBhbGxvY2F0ZXMgdGhlIHNh
bXBsZXMuIAorCisgICAgaHIgPSBtX3BEM0RQcmVzZW50RW5naW5lLT5DcmVhdGVWaWRlb1NhbXBs
ZXMocE1lZGlhVHlwZSwgc2FtcGxlUXVldWUpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAg
ICAgIFJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAg
IC8vIE1hcmsgZWFjaCBzYW1wbGUgd2l0aCBvdXIgdG9rZW4gY291bnRlci4gSWYgdGhpcyBiYXRj
aCBvZiBzYW1wbGVzIGJlY29tZXMKKyAgICAvLyBpbnZhbGlkLCB3ZSBpbmNyZW1lbnQgdGhlIGNv
dW50ZXIsIHNvIHRoYXQgd2Uga25vdyB0aGV5IHNob3VsZCBiZSBkaXNjYXJkZWQuIAorICAgIGZv
ciAoYXV0byBzYW1wbGUgOiBzYW1wbGVRdWV1ZSkgeworICAgICAgICBociA9IHNhbXBsZS0+U2V0
VUlOVDMyKE1GU2FtcGxlUHJlc2VudGVyU2FtcGxlQ291bnRlciwgbV9Ub2tlbkNvdW50ZXIpOwor
ICAgICAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAgICAgUmVsZWFzZVJlc291cmNlcygp
OworICAgICAgICAgICAgcmV0dXJuIGhyOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQWRk
IHRoZSBzYW1wbGVzIHRvIHRoZSBzYW1wbGUgcG9vbC4KKyAgICBociA9IG1fU2FtcGxlUG9vbC5p
bml0aWFsaXplKHNhbXBsZVF1ZXVlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBS
ZWxlYXNlUmVzb3VyY2VzKCk7CisgICAgICAgIHJldHVybiBocjsKKyAgICB9CisKKyAgICAvLyBT
ZXQgdGhlIGZyYW1lIHJhdGUgb24gdGhlIHNjaGVkdWxlci4gCisgICAgaWYgKFNVQ0NFRURFRChH
ZXRGcmFtZVJhdGUocE1lZGlhVHlwZSwgJmZwcykpICYmIGZwcy5OdW1lcmF0b3IgJiYgZnBzLkRl
bm9taW5hdG9yKQorICAgICAgICBtX3NjaGVkdWxlci5TZXRGcmFtZVJhdGUoZnBzKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgLy8gTk9URTogVGhlIG1peGVyJ3MgcHJvcG9zZWQgdHlwZSBtaWdodCBu
b3QgaGF2ZSBhIGZyYW1lIHJhdGUsIGluIHdoaWNoIGNhc2UgCisgICAgICAgIC8vIHdlJ2xsIHVz
ZSBhbiBhcmJpdGFyeSBkZWZhdWx0LiAoQWx0aG91Z2ggaXQncyB1bmxpa2VseSB0aGUgdmlkZW8g
c291cmNlCisgICAgICAgIC8vIGRvZXMgbm90IGhhdmUgYSBmcmFtZSByYXRlLikKKyAgICAgICAg
bV9zY2hlZHVsZXIuU2V0RnJhbWVSYXRlKGdEZWZhdWx0RnJhbWVSYXRlKTsKKyAgICB9CisKKyAg
ICAvLyBTdG9yZSB0aGUgbWVkaWEgdHlwZS4KKyAgICBBU1NFUlQocE1lZGlhVHlwZSk7CisgICAg
bV9wTWVkaWFUeXBlID0gcE1lZGlhVHlwZTsKKyAgICBtX3BNZWRpYVR5cGUtPkFkZFJlZigpOwor
CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Q2hlY2tTaHV0ZG93bigpIGNvbnN0Cit7
CisgICAgaWYgKG1fUmVuZGVyU3RhdGUgPT0gUkVOREVSX1NUQVRFX1NIVVRET1dOKQorICAgICAg
ICByZXR1cm4gTUZfRV9TSFVURE9XTjsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpS
ZW5lZ290aWF0ZU1lZGlhVHlwZSgpCit7CisgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgYm9v
bCBiRm91bmRNZWRpYVR5cGUgPSBmYWxzZTsKKworICAgIENPTVB0cjxJTUZNZWRpYVR5cGU+IHBN
aXhlclR5cGU7CisgICAgQ09NUHRyPElNRk1lZGlhVHlwZT4gcE9wdGltYWxUeXBlOworICAgIENP
TVB0cjxJTUZWaWRlb01lZGlhVHlwZT4gcFZpZGVvVHlwZTsKKworICAgIGlmICghbV9wTWl4ZXIp
CisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURSRVFVRVNUOworCisgICAgLy8gTG9vcCB0aHJv
dWdoIGFsbCBvZiB0aGUgbWl4ZXIncyBwcm9wb3NlZCBvdXRwdXQgdHlwZXMuCisgICAgRFdPUkQg
aVR5cGVJbmRleCA9IDA7CisgICAgd2hpbGUgKCFiRm91bmRNZWRpYVR5cGUgJiYgKGhyICE9IE1G
X0VfTk9fTU9SRV9UWVBFUykpIHsKKyAgICAgICAgcE1peGVyVHlwZSA9IG51bGxwdHI7CisgICAg
ICAgIHBPcHRpbWFsVHlwZSA9IG51bGxwdHI7CisKKyAgICAgICAgLy8gU3RlcCAxLiBHZXQgdGhl
IG5leHQgbWVkaWEgdHlwZSBzdXBwb3J0ZWQgYnkgbWl4ZXIuCisgICAgICAgIGhyID0gbV9wTWl4
ZXItPkdldE91dHB1dEF2YWlsYWJsZVR5cGUoMCwgaVR5cGVJbmRleCsrLCAmcE1peGVyVHlwZSk7
CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Ly8gRnJvbSBub3cgb24sIGlmIGFueXRoaW5nIGluIHRoaXMgbG9vcCBmYWlscywgdHJ5IHRoZSBu
ZXh0IHR5cGUsCisgICAgICAgIC8vIHVudGlsIHdlIHN1Y2NlZWQgb3IgdGhlIG1peGVyIHJ1bnMg
b3V0IG9mIHR5cGVzLgorCisgICAgICAgIC8vIFN0ZXAgMi4gQ2hlY2sgaWYgd2Ugc3VwcG9ydCB0
aGlzIG1lZGlhIHR5cGUuIAorICAgICAgICAvLyBOb3RlOiBOb25lIG9mIHRoZSBtb2RpZmljYXRp
b25zIHRoYXQgd2UgbWFrZSBsYXRlciBpbiBDcmVhdGVPcHRpbWFsVmlkZW9UeXBlCisgICAgICAg
IC8vIHdpbGwgYWZmZWN0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgdHlwZSwgYXQgbGVhc3QgZm9y
IHVzLiAoUG9zc2libHkgZm9yIHRoZSBtaXhlci4pCisgICAgICAgIGhyID0gSXNNZWRpYVR5cGVT
dXBwb3J0ZWQocE1peGVyVHlwZS5nZXQoKSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gU3RlcCAzLiBBZGp1c3QgdGhlIG1peGVyJ3Mg
dHlwZSB0byBtYXRjaCBvdXIgcmVxdWlyZW1lbnRzLgorICAgICAgICBociA9IENyZWF0ZU9wdGlt
YWxWaWRlb1R5cGUocE1peGVyVHlwZS5nZXQoKSwgJnBPcHRpbWFsVHlwZSk7CisgICAgICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gU3RlcCA0LiBD
aGVjayBpZiB0aGUgbWl4ZXIgd2lsbCBhY2NlcHQgdGhpcyBtZWRpYSB0eXBlLgorICAgICAgICBo
ciA9IG1fcE1peGVyLT5TZXRPdXRwdXRUeXBlKDAsIHBPcHRpbWFsVHlwZS5nZXQoKSwgTUZUX1NF
VF9UWVBFX1RFU1RfT05MWSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgLy8gU3RlcCA1LiBUcnkgdG8gc2V0IHRoZSBtZWRpYSB0eXBlIG9u
IG91cnNlbHZlcy4KKyAgICAgICAgaHIgPSBTZXRNZWRpYVR5cGUocE9wdGltYWxUeXBlLmdldCgp
KTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAvLyBTdGVwIDYuIFNldCBvdXRwdXQgbWVkaWEgdHlwZSBvbiBtaXhlci4KKyAgICAgICAgaHIg
PSBtX3BNaXhlci0+U2V0T3V0cHV0VHlwZSgwLCBwT3B0aW1hbFR5cGUuZ2V0KCksIDApOworCisg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsgLy8gVGhpcyBzaG91bGQgc3VjY2VlZCB1bmxl
c3MgdGhlIE1GVCBsaWVkIGluIHRoZSBwcmV2aW91cyBjYWxsLgorCisgICAgICAgIC8vIElmIHNv
bWV0aGluZyB3ZW50IHdyb25nLCBjbGVhciB0aGUgbWVkaWEgdHlwZS4KKyAgICAgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgICAgICBTZXRNZWRpYVR5cGUobnVsbHB0cik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGJGb3VuZE1lZGlhVHlwZSA9IHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGhyOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlByb2Nlc3NJbnB1dE5vdGlmeSgpCit7CisgICAgLy8gU2V0
IHRoZSBmbGFnIHRoYXQgc2F5cyB0aGUgbWl4ZXIgaGFzIGEgbmV3IHNhbXBsZS4KKyAgICBtX2JT
YW1wbGVOb3RpZnkgPSB0cnVlOworCisgICAgaWYgKCFtX3BNZWRpYVR5cGUpIHsKKyAgICAgICAg
Ly8gV2UgZG9uJ3QgaGF2ZSBhIHZhbGlkIG1lZGlhIHR5cGUgeWV0LgorICAgICAgICByZXR1cm4g
TUZfRV9UUkFOU0ZPUk1fVFlQRV9OT1RfU0VUOworICAgIH0gCisgICAgCisgICAgaWYgKG1fbWVk
aWFQbGF5ZXIpIHsKKyAgICAgICAgYXV0byB3ZWFrUHRyID0gbV9tZWRpYVBsYXllci0+bV93ZWFr
UHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3dl
YWtQdHJdIHsKKyAgICAgICAgICAgIGlmICh3ZWFrUHRyKQorICAgICAgICAgICAgICAgIHdlYWtQ
dHItPmludmFsaWRhdGVGcmFtZVZpZXcoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8g
VHJ5IHRvIHByb2Nlc3MgYW4gb3V0cHV0IHNhbXBsZS4KKyAgICBQcm9jZXNzT3V0cHV0TG9vcCgp
OworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFZhbGlkYXRlVmlkZW9B
cmVhKGNvbnN0IE1GVmlkZW9BcmVhJiBhcmVhLCBVSU5UMzIgd2lkdGgsIFVJTlQzMiBoZWlnaHQp
Cit7CisgICAgZmxvYXQgZk9mZnNldFggPSBNRk9mZnNldFRvRmxvYXQoYXJlYS5PZmZzZXRYKTsK
KyAgICBmbG9hdCBmT2Zmc2V0WSA9IE1GT2Zmc2V0VG9GbG9hdChhcmVhLk9mZnNldFkpOworCisg
ICAgaWYgKCgoTE9ORylmT2Zmc2V0WCArIGFyZWEuQXJlYS5jeCA+IChMT05HKXdpZHRoKSB8fCAo
KExPTkcpZk9mZnNldFkgKyBhcmVhLkFyZWEuY3kgPiAoTE9ORyloZWlnaHQpKQorICAgICAgICBy
ZXR1cm4gTUZfRV9JTlZBTElETUVESUFUWVBFOworICAgIHJldHVybiBTX09LOworfQorCitIUkVT
VUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50
ZXI6OkJlZ2luU3RyZWFtaW5nKCkKK3sKKyAgICAvLyBTdGFydCB0aGUgc2NoZWR1bGVyIHRocmVh
ZC4gCisgICAgcmV0dXJuIG1fc2NoZWR1bGVyLlN0YXJ0U2NoZWR1bGVyKG1fcENsb2NrLmdldCgp
KTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3Rv
bVZpZGVvUHJlc2VudGVyOjpFbmRTdHJlYW1pbmcoKQoreworICAgIC8vIFN0b3AgdGhlIHNjaGVk
dWxlciB0aHJlYWQuCisgICAgcmV0dXJuIG1fc2NoZWR1bGVyLlN0b3BTY2hlZHVsZXIoKTsKK30K
KworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpDaGVja0VuZE9mU3RyZWFtKCkKK3sKKyAgICBpZiAoIW1fYkVuZFN0cmVhbWlu
ZykgeworICAgICAgICAvLyBUaGUgRVZSIGRpZCBub3Qgc2VuZCB0aGUgTUZWUF9NRVNTQUdFX0VO
RE9GU1RSRUFNIG1lc3NhZ2UuCisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgIGlm
IChtX2JTYW1wbGVOb3RpZnkpIHsKKyAgICAgICAgLy8gVGhlIG1peGVyIHN0aWxsIGhhcyBpbnB1
dC4gCisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgIGlmIChtX1NhbXBsZVBvb2wu
YXJlU2FtcGxlc1BlbmRpbmcoKSkgeworICAgICAgICAvLyBTYW1wbGVzIGFyZSBzdGlsbCBzY2hl
ZHVsZWQgZm9yIHJlbmRlcmluZy4KKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAg
Ly8gRXZlcnl0aGluZyBpcyBjb21wbGV0ZS4gTm93IHdlIGNhbiB0ZWxsIHRoZSBFVlIgdGhhdCB3
ZSBhcmUgZG9uZS4KKyAgICBOb3RpZnlFdmVudChFQ19DT01QTEVURSwgKExPTkdfUFRSKVNfT0ss
IDApOworICAgIG1fYkVuZFN0cmVhbWluZyA9IGZhbHNlOworICAgIHJldHVybiBTX09LOworfQor
CitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OklzTWVkaWFUeXBlU3VwcG9ydGVkKElNRk1lZGlhVHlwZSogcE1lZGlhVHlwZSkK
K3sKKyAgICBEM0RGT1JNQVQgZDNkRm9ybWF0ID0gRDNERk1UX1VOS05PV047CisgICAgQk9PTCBi
Q29tcHJlc3NlZCA9IEZBTFNFOworICAgIE1GVmlkZW9JbnRlcmxhY2VNb2RlIEludGVybGFjZU1v
ZGUgPSBNRlZpZGVvSW50ZXJsYWNlX1Vua25vd247CisgICAgTUZWaWRlb0FyZWEgVmlkZW9Dcm9w
QXJlYTsKKyAgICBVSU5UMzIgd2lkdGggPSAwLCBoZWlnaHQgPSAwOworCisgICAgLy8gSGVscGVy
IG9iamVjdCBmb3IgcmVhZGluZyB0aGUgcHJvcG9zZWQgdHlwZS4KKyAgICBWaWRlb1R5cGUgbXRQ
cm9wb3NlZChwTWVkaWFUeXBlKTsKKworICAgIC8vIFJlamVjdCBjb21wcmVzc2VkIG1lZGlhIHR5
cGVzLgorICAgIEhSRVNVTFQgaHIgPSBtdFByb3Bvc2VkLklzQ29tcHJlc3NlZEZvcm1hdCgmYkNv
bXByZXNzZWQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisgICAg
aWYgKGJDb21wcmVzc2VkKQorICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElETUVESUFUWVBFOwor
CisgICAgLy8gVmFsaWRhdGUgdGhlIGZvcm1hdC4KKyAgICBociA9IG10UHJvcG9zZWQuR2V0Rm91
ckNDKChEV09SRCopJmQzZEZvcm1hdCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybiBocjsKKworICAgIC8vIFRoZSBEM0RQcmVzZW50RW5naW5lIGNoZWNrcyB3aGV0aGVyIHRo
ZSBmb3JtYXQgY2FuIGJlIHVzZWQgYXMKKyAgICAvLyB0aGUgYmFjay1idWZmZXIgZm9ybWF0IGZv
ciB0aGUgc3dhcCBjaGFpbnMuCisgICAgaHIgPSBtX3BEM0RQcmVzZW50RW5naW5lLT5DaGVja0Zv
cm1hdChkM2RGb3JtYXQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7
CisKKyAgICAvLyBSZWplY3QgaW50ZXJsYWNlZCBmb3JtYXRzLgorICAgIGhyID0gbXRQcm9wb3Nl
ZC5HZXRJbnRlcmxhY2VNb2RlKCZJbnRlcmxhY2VNb2RlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaWYgKEludGVybGFjZU1vZGUgIT0gTUZWaWRlb0lu
dGVybGFjZV9Qcm9ncmVzc2l2ZSkKKyAgICAgICAgcmV0dXJuIE1GX0VfSU5WQUxJRE1FRElBVFlQ
RTsKKworICAgIGhyID0gbXRQcm9wb3NlZC5HZXRGcmFtZURpbWVuc2lvbnMoJndpZHRoLCAmaGVp
Z2h0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8g
VmFsaWRhdGUgdGhlIHZhcmlvdXMgYXBlcnR1cmVzIChjcm9wcGluZyByZWdpb25zKSBhZ2FpbnN0
IHRoZSBmcmFtZSBzaXplLgorICAgIC8vIEFueSBvZiB0aGVzZSBhcGVydHVyZXMgbWF5IGJlIHVu
c3BlY2lmaWVkIGluIHRoZSBtZWRpYSB0eXBlLCBpbiB3aGljaCBjYXNlIAorICAgIC8vIHdlIGln
bm9yZSBpdC4gV2UganVzdCB3YW50IHRvIHJlamVjdCBpbnZhbGlkIGFwZXJ0dXJlcy4KKyAgICBp
ZiAoU1VDQ0VFREVEKG10UHJvcG9zZWQuR2V0UGFuU2NhbkFwZXJ0dXJlKCZWaWRlb0Nyb3BBcmVh
KSkpCisgICAgICAgIFZhbGlkYXRlVmlkZW9BcmVhKFZpZGVvQ3JvcEFyZWEsIHdpZHRoLCBoZWln
aHQpOworICAgIGlmIChTVUNDRUVERUQobXRQcm9wb3NlZC5HZXRHZW9tZXRyaWNBcGVydHVyZSgm
VmlkZW9Dcm9wQXJlYSkpKQorICAgICAgICBWYWxpZGF0ZVZpZGVvQXJlYShWaWRlb0Nyb3BBcmVh
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoU1VDQ0VFREVEKG10UHJvcG9zZWQuR2V0TWluRGlz
cGxheUFwZXJ0dXJlKCZWaWRlb0Nyb3BBcmVhKSkpCisgICAgICAgIFZhbGlkYXRlVmlkZW9BcmVh
KFZpZGVvQ3JvcEFyZWEsIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisK
K0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1By
ZXNlbnRlcjo6Q3JlYXRlT3B0aW1hbFZpZGVvVHlwZShJTUZNZWRpYVR5cGUqIHBQcm9wb3NlZFR5
cGUsIElNRk1lZGlhVHlwZSAqKnBwT3B0aW1hbFR5cGUpCit7CisgICAgUkVDVCByY091dHB1dDsK
KyAgICBaZXJvTWVtb3J5KCZyY091dHB1dCwgc2l6ZW9mKHJjT3V0cHV0KSk7CisKKyAgICBNRlZp
ZGVvQXJlYSBkaXNwbGF5QXJlYTsKKyAgICBaZXJvTWVtb3J5KCZkaXNwbGF5QXJlYSwgc2l6ZW9m
KGRpc3BsYXlBcmVhKSk7CisKKyAgICAvLyBIZWxwZXIgb2JqZWN0IHRvIG1hbmlwdWxhdGUgdGhl
IG9wdGltYWwgdHlwZS4KKyAgICBWaWRlb1R5cGUgbXRPcHRpbWFsOworICAgIG10T3B0aW1hbC5D
cmVhdGVFbXB0eVR5cGUoKTsKKworICAgIC8vIENsb25lIHRoZSBwcm9wb3NlZCB0eXBlLgorICAg
IEhSRVNVTFQgaHIgPSBtdE9wdGltYWwuQ29weUZyb20ocFByb3Bvc2VkVHlwZSk7CisgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIC8vIE1vZGlmeSB0aGUgbmV3
IHR5cGUuCisKKyAgICAvLyBGb3IgcHVycG9zZXMgb2YgdGhpcyBTREsgc2FtcGxlLCB3ZSBhc3N1
bWUgCisgICAgLy8gMSkgVGhlIG1vbml0b3IncyBwaXhlbHMgYXJlIHNxdWFyZS4KKyAgICAvLyAy
KSBUaGUgcHJlc2VudGVyIGFsd2F5cyBwcmVzZXJ2ZXMgdGhlIHBpeGVsIGFzcGVjdCByYXRpby4K
KworICAgIC8vIFNldCB0aGUgcGl4ZWwgYXNwZWN0IHJhdGlvIChQQVIpIHRvIDE6MSAoc2VlIGFz
c3VtcHRpb24gIzEsIGFib3ZlKQorICAgIGhyID0gbXRPcHRpbWFsLlNldFBpeGVsQXNwZWN0UmF0
aW8oMSwgMSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAg
IC8vIEdldCB0aGUgb3V0cHV0IHJlY3RhbmdsZS4KKyAgICByY091dHB1dCA9IG1fcEQzRFByZXNl
bnRFbmdpbmUtPkdldERlc3RpbmF0aW9uUmVjdCgpOworICAgIGlmIChJc1JlY3RFbXB0eSgmcmNP
dXRwdXQpKSB7CisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgb3V0cHV0IHJlY3RhbmdsZSBiYXNl
ZCBvbiB0aGUgbWVkaWEgdHlwZS4KKyAgICAgICAgaHIgPSBDYWxjdWxhdGVPdXRwdXRSZWN0YW5n
bGUocFByb3Bvc2VkVHlwZSwgJnJjT3V0cHV0KTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBleHRlbmRlZCBj
b2xvciBpbmZvcm1hdGlvbjogVXNlIEJULjcwOSAKKyAgICBociA9IG10T3B0aW1hbC5TZXRZVVZN
YXRyaXgoTUZWaWRlb1RyYW5zZmVyTWF0cml4X0JUNzA5KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBtdE9wdGltYWwuU2V0VHJhbnNmZXJGdW5j
dGlvbihNRlZpZGVvVHJhbnNGdW5jXzcwOSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
IHJldHVybiBocjsKKworICAgIGhyID0gbXRPcHRpbWFsLlNldFZpZGVvUHJpbWFyaWVzKE1GVmlk
ZW9QcmltYXJpZXNfQlQ3MDkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4g
aHI7CisKKyAgICBociA9IG10T3B0aW1hbC5TZXRWaWRlb05vbWluYWxSYW5nZShNRk5vbWluYWxS
YW5nZV8xNl8yMzUpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisK
KyAgICBociA9IG10T3B0aW1hbC5TZXRWaWRlb0xpZ2h0aW5nKE1GVmlkZW9MaWdodGluZ19kaW0p
OworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICAvLyBTZXQg
dGhlIHRhcmdldCByZWN0IGRpbWVuc2lvbnMuIAorICAgIGhyID0gbXRPcHRpbWFsLlNldEZyYW1l
RGltZW5zaW9ucyhyY091dHB1dC5yaWdodCwgcmNPdXRwdXQuYm90dG9tKTsKKyAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gU2V0IHRoZSBnZW9tZXRyaWMg
YXBlcnR1cmUsIGFuZCBkaXNhYmxlIHBhbi9zY2FuLgorICAgIGRpc3BsYXlBcmVhID0gTWFrZUFy
ZWEoMCwgMCwgcmNPdXRwdXQucmlnaHQsIHJjT3V0cHV0LmJvdHRvbSk7CisKKyAgICBociA9IG10
T3B0aW1hbC5TZXRQYW5TY2FuRW5hYmxlZChGQUxTRSk7CisgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gbXRPcHRpbWFsLlNldEdlb21ldHJpY0FwZXJ0
dXJlKGRpc3BsYXlBcmVhKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhy
OworCisgICAgLy8gU2V0IHRoZSBwYW4vc2NhbiBhcGVydHVyZSBhbmQgdGhlIG1pbmltdW0gZGlz
cGxheSBhcGVydHVyZS4gV2UgZG9uJ3QgY2FyZQorICAgIC8vIGFib3V0IHRoZW0gcGVyIHNlLCBi
dXQgdGhlIG1peGVyIHdpbGwgcmVqZWN0IHRoZSB0eXBlIGlmIHRoZXNlIGV4Y2VlZCB0aGUgCisg
ICAgLy8gZnJhbWUgZGltZW50aW9ucy4KKyAgICBociA9IG10T3B0aW1hbC5TZXRQYW5TY2FuQXBl
cnR1cmUoZGlzcGxheUFyZWEpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4g
aHI7CisKKyAgICBociA9IG10T3B0aW1hbC5TZXRNaW5EaXNwbGF5QXBlcnR1cmUoZGlzcGxheUFy
ZWEpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICAvLyBS
ZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGNhbGxlci4KKyAgICAqcHBPcHRpbWFsVHlwZSA9IG10
T3B0aW1hbC5EZXRhY2goKTsKKworICAgIHJldHVybiBTX09LOworfQorCitzdGF0aWMgUkVDVCBD
b3JyZWN0QXNwZWN0UmF0aW8oY29uc3QgUkVDVCYgc3JjLCBjb25zdCBNRlJhdGlvJiBzcmNQQVIs
IGNvbnN0IE1GUmF0aW8mIGRlc3RQQVIpCit7CisgICAgLy8gU3RhcnQgd2l0aCBhIHJlY3Rhbmds
ZSB0aGUgc2FtZSBzaXplIGFzIHNyYywgYnV0IG9mZnNldCB0byB0aGUgb3JpZ2luICgwLDApLgor
ICAgIFJFQ1QgcmMgPSB7IDAsIDAsIHNyYy5yaWdodCAtIHNyYy5sZWZ0LCBzcmMuYm90dG9tIC0g
c3JjLnRvcCB9OworCisgICAgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaGF2ZSB0
aGUgc2FtZSBQQVIsIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uCisgICAgLy8gT3RoZXJ3aXNlLCBh
ZGp1c3QgdGhlIGltYWdlIHNpemUsIGluIHR3byBzdGVwczoKKyAgICAvLyAgMS4gVHJhbnNmb3Jt
IGZyb20gc291cmNlIFBBUiB0byAxOjEKKyAgICAvLyAgMi4gVHJhbnNmb3JtIGZyb20gMToxIHRv
IGRlc3RpbmF0aW9uIFBBUi4KKworICAgIGlmICgoc3JjUEFSLk51bWVyYXRvciAqIGRlc3RQQVIu
RGVub21pbmF0b3IpID09IChzcmNQQVIuRGVub21pbmF0b3IgKiBkZXN0UEFSLk51bWVyYXRvcikp
IHsKKyAgICAgICAgLy8gQ29ycmVjdCBmb3IgdGhlIHNvdXJjZSdzIFBBUi4KKworICAgICAgICBp
ZiAoc3JjUEFSLk51bWVyYXRvciA+IHNyY1BBUi5EZW5vbWluYXRvcikgeworICAgICAgICAgICAg
Ly8gVGhlIHNvdXJjZSBoYXMgIndpZGUiIHBpeGVscywgc28gc3RyZXRjaCB0aGUgd2lkdGguCisg
ICAgICAgICAgICByYy5yaWdodCA9IE11bERpdihyYy5yaWdodCwgc3JjUEFSLk51bWVyYXRvciwg
c3JjUEFSLkRlbm9taW5hdG9yKTsKKyAgICAgICAgfSBlbHNlIGlmIChzcmNQQVIuTnVtZXJhdG9y
IDwgc3JjUEFSLkRlbm9taW5hdG9yKSB7CisgICAgICAgICAgICAvLyBUaGUgc291cmNlIGhhcyAi
dGFsbCIgcGl4ZWxzLCBzbyBzdHJldGNoIHRoZSBoZWlnaHQuCisgICAgICAgICAgICByYy5ib3R0
b20gPSBNdWxEaXYocmMuYm90dG9tLCBzcmNQQVIuRGVub21pbmF0b3IsIHNyY1BBUi5OdW1lcmF0
b3IpOworICAgICAgICB9CisgICAgICAgIC8vIGVsc2U6IFBBUiBpcyAxOjEsIHdoaWNoIGlzIGEg
bm8tb3AuCisKKyAgICAgICAgLy8gTmV4dCwgY29ycmVjdCBmb3IgdGhlIHRhcmdldCdzIFBBUi4g
VGhpcyBpcyB0aGUgaW52ZXJzZSBvcGVyYXRpb24gb2YgdGhlIHByZXZpb3VzLgorICAgICAgICBp
ZiAoZGVzdFBBUi5OdW1lcmF0b3IgPiBkZXN0UEFSLkRlbm9taW5hdG9yKSB7CisgICAgICAgICAg
ICAvLyBUaGUgZGVzdGluYXRpb24gaGFzICJ3aWRlIiBwaXhlbHMsIHNvIHN0cmV0Y2ggdGhlIGhl
aWdodC4KKyAgICAgICAgICAgIHJjLmJvdHRvbSA9IE11bERpdihyYy5ib3R0b20sIGRlc3RQQVIu
TnVtZXJhdG9yLCBkZXN0UEFSLkRlbm9taW5hdG9yKTsKKyAgICAgICAgfSBlbHNlIGlmIChkZXN0
UEFSLk51bWVyYXRvciA8IGRlc3RQQVIuRGVub21pbmF0b3IpIHsKKyAgICAgICAgICAgIC8vIFRo
ZSBkZXN0aW5hdGlvbiBoYXMgInRhbGwiIHBpeGVscywgc28gc3RyZXRjaCB0aGUgd2lkdGguCisg
ICAgICAgICAgICByYy5yaWdodCA9IE11bERpdihyYy5yaWdodCwgZGVzdFBBUi5EZW5vbWluYXRv
ciwgZGVzdFBBUi5OdW1lcmF0b3IpOworICAgICAgICB9CisgICAgICAgIC8vIGVsc2U6IFBBUiBp
cyAxOjEsIHdoaWNoIGlzIGEgbm8tb3AuCisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCitI
UkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OkNhbGN1bGF0ZU91dHB1dFJlY3RhbmdsZShJTUZNZWRpYVR5cGUgKnBQcm9wb3NlZFR5
cGUsIFJFQ1QgKnByY091dHB1dCkKK3sKKyAgICBVSU5UMzIgc3JjV2lkdGggPSAwLCBzcmNIZWln
aHQgPSAwOworCisgICAgTUZSYXRpbyBpbnB1dFBBUiA9IHsgMCwgMCB9OworICAgIE1GUmF0aW8g
b3V0cHV0UEFSID0geyAwLCAwIH07CisgICAgUkVDVCByY091dHB1dCA9IHsgMCwgMCwgMCwgMCB9
OworCisgICAgTUZWaWRlb0FyZWEgZGlzcGxheUFyZWE7CisgICAgWmVyb01lbW9yeSgmZGlzcGxh
eUFyZWEsIHNpemVvZihkaXNwbGF5QXJlYSkpOworCisgICAgLy8gSGVscGVyIG9iamVjdCB0byBy
ZWFkIHRoZSBtZWRpYSB0eXBlLgorICAgIFZpZGVvVHlwZSBtdFByb3Bvc2VkKHBQcm9wb3NlZFR5
cGUpOworCisgICAgLy8gR2V0IHRoZSBzb3VyY2UncyBmcmFtZSBkaW1lbnNpb25zLgorICAgIEhS
RVNVTFQgaHIgPSBtdFByb3Bvc2VkLkdldEZyYW1lRGltZW5zaW9ucygmc3JjV2lkdGgsICZzcmNI
ZWlnaHQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICAv
LyBHZXQgdGhlIHNvdXJjZSdzIGRpc3BsYXkgYXJlYS4gCisgICAgaHIgPSBtdFByb3Bvc2VkLkdl
dFZpZGVvRGlzcGxheUFyZWEoJmRpc3BsYXlBcmVhKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAg
ICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSB4LHkgb2Zmc2V0cyBvZiB0
aGUgZGlzcGxheSBhcmVhLgorICAgIExPTkcgb2Zmc2V0WCA9IChMT05HKU1GT2Zmc2V0VG9GbG9h
dChkaXNwbGF5QXJlYS5PZmZzZXRYKTsKKyAgICBMT05HIG9mZnNldFkgPSAoTE9ORylNRk9mZnNl
dFRvRmxvYXQoZGlzcGxheUFyZWEuT2Zmc2V0WSk7CisKKyAgICAvLyBVc2UgdGhlIGRpc3BsYXkg
YXJlYSBpZiB2YWxpZC4gT3RoZXJ3aXNlLCB1c2UgdGhlIGVudGlyZSBmcmFtZS4KKyAgICBpZiAo
ZGlzcGxheUFyZWEuQXJlYS5jeCAhPSAwCisgICAgICAgICYmIGRpc3BsYXlBcmVhLkFyZWEuY3kg
IT0gMAorICAgICAgICAmJiBvZmZzZXRYICsgZGlzcGxheUFyZWEuQXJlYS5jeCA8PSAoTE9ORyko
c3JjV2lkdGgpCisgICAgICAgICYmIG9mZnNldFkgKyBkaXNwbGF5QXJlYS5BcmVhLmN5IDw9IChM
T05HKShzcmNIZWlnaHQpKSB7CisgICAgICAgIHJjT3V0cHV0LmxlZnQgPSBvZmZzZXRYOworICAg
ICAgICByY091dHB1dC5yaWdodCA9IG9mZnNldFggKyBkaXNwbGF5QXJlYS5BcmVhLmN4OworICAg
ICAgICByY091dHB1dC50b3AgPSBvZmZzZXRZOworICAgICAgICByY091dHB1dC5ib3R0b20gPSBv
ZmZzZXRZICsgZGlzcGxheUFyZWEuQXJlYS5jeTsKKyAgICB9IGVsc2UgeworICAgICAgICByY091
dHB1dC5sZWZ0ID0gMDsKKyAgICAgICAgcmNPdXRwdXQudG9wID0gMDsKKyAgICAgICAgcmNPdXRw
dXQucmlnaHQgPSBzcmNXaWR0aDsKKyAgICAgICAgcmNPdXRwdXQuYm90dG9tID0gc3JjSGVpZ2h0
OworICAgIH0KKworICAgIC8vIHJjT3V0cHV0IGlzIG5vdyBlaXRoZXIgYSBzdWItcmVjdGFuZ2xl
IG9mIHRoZSB2aWRlbyBmcmFtZSwgb3IgdGhlIGVudGlyZSBmcmFtZS4KKworICAgIC8vIElmIHRo
ZSBwaXhlbCBhc3BlY3QgcmF0aW8gb2YgdGhlIHByb3Bvc2VkIG1lZGlhIHR5cGUgaXMgZGlmZmVy
ZW50IGZyb20gdGhlIG1vbml0b3IncywgCisgICAgLy8gbGV0dGVyYm94IHRoZSB2aWRlby4gV2Ug
c3RyZXRjaCB0aGUgaW1hZ2UgcmF0aGVyIHRoYW4gc2hyaW5rIGl0LgorCisgICAgaW5wdXRQQVIg
PSBtdFByb3Bvc2VkLkdldFBpeGVsQXNwZWN0UmF0aW8oKTsgLy8gRGVmYXVsdHMgdG8gMToxCisK
KyAgICBvdXRwdXRQQVIuRGVub21pbmF0b3IgPSBvdXRwdXRQQVIuTnVtZXJhdG9yID0gMTsgLy8g
VGhpcyBpcyBhbiBhc3N1bXB0aW9uIG9mIHRoZSBzYW1wbGUuCisKKyAgICAvLyBBZGp1c3QgdG8g
Z2V0IHRoZSBjb3JyZWN0IHBpY3R1cmUgYXNwZWN0IHJhdGlvLgorICAgICpwcmNPdXRwdXQgPSBD
b3JyZWN0QXNwZWN0UmF0aW8ocmNPdXRwdXQsIGlucHV0UEFSLCBvdXRwdXRQQVIpOworCisgICAg
cmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6UHJlcGFyZUZyYW1lU3RlcChEV09SRCBjU3RlcHMp
Cit7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTdGFydEZyYW1lU3RlcCgp
Cit7CisgICAgQVNTRVJUKG1fUmVuZGVyU3RhdGUgPT0gUkVOREVSX1NUQVRFX1NUQVJURUQpOwor
CisgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgQ09NUHRyPElNRlNhbXBsZT4gcFNhbXBsZTsK
KworICAgIGlmIChtX0ZyYW1lU3RlcC5zdGF0ZSA9PSBGUkFNRVNURVBfV0FJVElOR19TVEFSVCkg
eworICAgICAgICAvLyBXZSBoYXZlIGEgZnJhbWUtc3RlcCByZXF1ZXN0LCBhbmQgYXJlIHdhaXRp
bmcgZm9yIHRoZSBjbG9jayB0byBzdGFydC4KKyAgICAgICAgLy8gU2V0IHRoZSBzdGF0ZSB0byAi
cGVuZGluZywiIHdoaWNoIG1lYW5zIHdlIGFyZSB3YWl0aW5nIGZvciBzYW1wbGVzLgorICAgICAg
ICBtX0ZyYW1lU3RlcC5zdGF0ZSA9IEZSQU1FU1RFUF9QRU5ESU5HOworCisgICAgICAgIC8vIElm
IHRoZSBmcmFtZS1zdGVwIHF1ZXVlIGFscmVhZHkgaGFzIHNhbXBsZXMsIHByb2Nlc3MgdGhlbSBu
b3cuCisgICAgICAgIHdoaWxlICghbV9GcmFtZVN0ZXAuc2FtcGxlcy5pc0VtcHR5KCkgJiYgKG1f
RnJhbWVTdGVwLnN0YXRlID09IEZSQU1FU1RFUF9QRU5ESU5HKSkgeworICAgICAgICAgICAgcFNh
bXBsZSA9IG1fRnJhbWVTdGVwLnNhbXBsZXMudGFrZUZpcnN0KCk7CisgICAgICAgICAgICBociA9
IERlbGl2ZXJGcmFtZVN0ZXBTYW1wbGUocFNhbXBsZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAo
RkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAgICAgICBwU2Ft
cGxlID0gbnVsbHB0cjsKKworICAgICAgICAgICAgLy8gV2UgYnJlYWsgZnJvbSB0aGlzIGxvb3Ag
d2hlbjoKKyAgICAgICAgICAgIC8vICAgKGEpIHRoZSBmcmFtZS1zdGVwIHF1ZXVlIGlzIGVtcHR5
LCBvcgorICAgICAgICAgICAgLy8gICAoYikgdGhlIGZyYW1lLXN0ZXAgb3BlcmF0aW9uIGlzIGNv
bXBsZXRlLgorICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX0ZyYW1lU3RlcC5zdGF0ZSA9PSBG
UkFNRVNURVBfTk9ORSkgeworICAgICAgICAvLyBXZSBhcmUgbm90IGZyYW1lIHN0ZXBwaW5nLiBU
aGVyZWZvcmUsIGlmIHRoZSBmcmFtZS1zdGVwIHF1ZXVlIGhhcyBzYW1wbGVzLCAKKyAgICAgICAg
Ly8gd2UgbmVlZCB0byBwcm9jZXNzIHRoZW0gbm9ybWFsbHkuCisgICAgICAgIHdoaWxlICghbV9G
cmFtZVN0ZXAuc2FtcGxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHBTYW1wbGUgPSBtX0Zy
YW1lU3RlcC5zYW1wbGVzLnRha2VGaXJzdCgpOworICAgICAgICAgICAgaHIgPSBEZWxpdmVyU2Ft
cGxlKHBTYW1wbGUuZ2V0KCksIEZBTFNFKTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgICAgIHBTYW1wbGUgPSBudWxscHRy
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Q29t
cGxldGVGcmFtZVN0ZXAoSU1GU2FtcGxlKiBwU2FtcGxlKQoreworICAgIHJldHVybiBFX05PVElN
UEw7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6Q2FuY2VsRnJhbWVTdGVwKCkKK3sKKyAgICByZXR1cm4gRV9OT1RJ
TVBMOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9t
VmlkZW9QcmVzZW50ZXI6OlByb2Nlc3NPdXRwdXRMb29wKCkKK3sKKyAgICAvLyBHZXQgdmlkZW8g
ZnJhbWVzIGZyb20gdGhlIG1peGVyIGFuZCBzY2hlZHVsZSB0aGVtIGZvciBwcmVzZW50YXRpb24u
CisgICAgSFJFU1VMVCBociA9IFNfT0s7CisKKyAgICAvLyBQcm9jZXNzIGFzIG1hbnkgc2FtcGxl
cyBhcyBwb3NzaWJsZS4KKyAgICB3aGlsZSAoaHIgPT0gU19PSykgeworICAgICAgICAvLyBJZiB0
aGUgbWl4ZXIgZG9lc24ndCBoYXZlIGEgbmV3IGlucHV0IHNhbXBsZSwgYnJlYWsgZnJvbSB0aGUg
bG9vcC4KKyAgICAgICAgaWYgKCFtX2JTYW1wbGVOb3RpZnkpIHsKKyAgICAgICAgICAgIGhyID0g
TUZfRV9UUkFOU0ZPUk1fTkVFRF9NT1JFX0lOUFVUOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUcnkgdG8gcHJvY2VzcyBhIHNhbXBsZS4KKyAgICAgICAgaHIg
PSBQcm9jZXNzT3V0cHV0KCk7CisKKyAgICAgICAgLy8gTk9URTogUHJvY2Vzc091dHB1dCBjYW4g
cmV0dXJuIFNfRkFMU0UgdG8gaW5kaWNhdGUgaXQgZGlkIG5vdCBwcm9jZXNzIGEgc2FtcGxlLgor
ICAgICAgICAvLyBJZiBzbywgd2UgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgorICAgIH0KKworICAg
IGlmIChociA9PSBNRl9FX1RSQU5TRk9STV9ORUVEX01PUkVfSU5QVVQpIHsKKyAgICAgICAgLy8g
VGhlIG1peGVyIGhhcyBydW4gb3V0IG9mIGlucHV0IGRhdGEuIENoZWNrIGlmIHdlJ3JlIGF0IHRo
ZSBlbmQgb2YgdGhlIHN0cmVhbS4KKyAgICAgICAgQ2hlY2tFbmRPZlN0cmVhbSgpOworICAgIH0K
K30KKworLy8gU2V0RGVzaXJlZFNhbXBsZVRpbWUKKy8vCisvLyBTZXRzIHRoZSAiZGVzaXJlZCIg
c2FtcGxlIHRpbWUgb24gYSBzYW1wbGUuIFRoaXMgdGVsbHMgdGhlIG1peGVyIHRvIG91dHB1dCAK
Ky8vIGFuIGVhcmxpZXIgZnJhbWUsIG5vdCB0aGUgbmV4dCBmcmFtZS4gKFVzZWQgd2hlbiByZXBh
aW50aW5nIGEgZnJhbWUuKQorLy8KKy8vIFRoaXMgbWV0aG9kIHVzZXMgdGhlIHNhbXBsZSdzIElN
RkRlc2lyZWRTYW1wbGUgaW50ZXJmYWNlLgorLy8KKy8vIGhuc1NhbXBsZVRpbWU6IFRpbWUgc3Rh
bXAgb2YgdGhlIGZyYW1lIHRoYXQgdGhlIG1peGVyIHNob3VsZCBvdXRwdXQuCisvLyBobnNEdXJh
dGlvbjogRHVyYXRpb24gb2YgdGhlIGZyYW1lLgorLy8KKy8vIE5vdGU6IEJlZm9yZSByZS11c2lu
ZyB0aGUgc2FtcGxlLCBjYWxsIENsZWFyRGVzaXJlZFNhbXBsZVRpbWUgdG8gY2xlYXIKKy8vIHRo
ZSBkZXNpcmVkIHRpbWUuCisKK0hSRVNVTFQgU2V0RGVzaXJlZFNhbXBsZVRpbWUoSU1GU2FtcGxl
KiBwU2FtcGxlLCBjb25zdCBMT05HTE9ORyYgaG5zU2FtcGxlVGltZSwgY29uc3QgTE9OR0xPTkcm
IGhuc0R1cmF0aW9uKQoreworICAgIGlmICghcFNhbXBsZSkKKyAgICAgICAgcmV0dXJuIEVfUE9J
TlRFUjsKKworICAgIENPTVB0cjxJTUZEZXNpcmVkU2FtcGxlPiBwRGVzaXJlZDsKKworICAgIEhS
RVNVTFQgaHIgPSBwU2FtcGxlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJTUZEZXNpcmVkU2Ft
cGxlKSwgKHZvaWQqKikmcERlc2lyZWQpOworICAgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAg
ICAgIC8vIFRoaXMgbWV0aG9kIGhhcyBubyByZXR1cm4gdmFsdWUuCisgICAgICAgIHBEZXNpcmVk
LT5TZXREZXNpcmVkU2FtcGxlVGltZUFuZER1cmF0aW9uKGhuc1NhbXBsZVRpbWUsIGhuc0R1cmF0
aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKKy8vIENsZWFyRGVzaXJlZFNhbXBs
ZVRpbWUKKy8vCisvLyBDbGVhcnMgdGhlIGRlc2lyZWQgc2FtcGxlIHRpbWUuIFNlZSBTZXREZXNp
cmVkU2FtcGxlVGltZS4KKworSFJFU1VMVCBDbGVhckRlc2lyZWRTYW1wbGVUaW1lKElNRlNhbXBs
ZSogcFNhbXBsZSkKK3sKKyAgICBpZiAoIXBTYW1wbGUpCisgICAgICAgIHJldHVybiBFX1BPSU5U
RVI7CisKKyAgICBDT01QdHI8SU1GRGVzaXJlZFNhbXBsZT4gcERlc2lyZWQ7CisgICAgQ09NUHRy
PElVbmtub3duPiBwVW5rU3dhcENoYWluOworCisgICAgLy8gV2Ugc3RvcmUgc29tZSBjdXN0b20g
YXR0cmlidXRlcyBvbiB0aGUgc2FtcGxlLCBzbyB3ZSBuZWVkIHRvIGNhY2hlIHRoZW0KKyAgICAv
LyBhbmQgcmVzZXQgdGhlbS4KKyAgICAvLworICAgIC8vIFRoaXMgd29ya3MgYXJvdW5kIHRoZSBm
YWN0IHRoYXQgSU1GRGVzaXJlZFNhbXBsZTo6Q2xlYXIoKSByZW1vdmVzIGFsbCBvZiB0aGUKKyAg
ICAvLyBhdHRyaWJ1dGVzIGZyb20gdGhlIHNhbXBsZS4gCisKKyAgICBVSU5UMzIgY291bnRlciA9
IE1GR2V0QXR0cmlidXRlVUlOVDMyKHBTYW1wbGUsIE1GU2FtcGxlUHJlc2VudGVyU2FtcGxlQ291
bnRlciwgKFVJTlQzMiktMSk7CisKKyAgICBwU2FtcGxlLT5HZXRVbmtub3duKE1GU2FtcGxlUHJl
c2VudGVyU2FtcGxlU3dhcENoYWluLCBJSURfSVVua25vd24sICh2b2lkKiopJnBVbmtTd2FwQ2hh
aW4pOworCisgICAgSFJFU1VMVCBociA9IHBTYW1wbGUtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9m
KElNRkRlc2lyZWRTYW1wbGUpLCAodm9pZCoqKSZwRGVzaXJlZCk7CisgICAgaWYgKFNVQ0NFRURF
RChocikpIHsKKyAgICAgICAgLy8gVGhpcyBtZXRob2QgaGFzIG5vIHJldHVybiB2YWx1ZS4KKyAg
ICAgICAgcERlc2lyZWQtPkNsZWFyKCk7CisKKyAgICAgICAgaHIgPSBwU2FtcGxlLT5TZXRVSU5U
MzIoTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVDb3VudGVyLCBjb3VudGVyKTsKKyAgICAgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7CisKKyAgICAgICAgaWYgKHBVbmtT
d2FwQ2hhaW4pIHsKKyAgICAgICAgICAgIGhyID0gcFNhbXBsZS0+U2V0VW5rbm93bihNRlNhbXBs
ZVByZXNlbnRlclNhbXBsZVN3YXBDaGFpbiwgcFVua1N3YXBDaGFpbi5nZXQoKSk7CisgICAgICAg
ICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKKy8vIFByb2Nlc3NPdXRwdXQKKy8vCisv
LyBBdHRlbXB0cyB0byBnZXQgYSBuZXcgb3V0cHV0IHNhbXBsZSBmcm9tIHRoZSBtaXhlci4KKy8v
CisvLyBDYWxsZWQgaW4gdHdvIHNpdHVhdGlvbnM6IAorLy8gKDEpIFByb2Nlc3NPdXRwdXRMb29w
LCBpZiB0aGUgbWl4ZXIgaGFzIGEgbmV3IGlucHV0IHNhbXBsZS4gKG1fYlNhbXBsZU5vdGlmeSkK
Ky8vICgyKSBSZXBhaW50aW5nIHRoZSBsYXN0IGZyYW1lLiAobV9iUmVwYWludCkKKworSFJFU1VM
VCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpQcm9jZXNzT3V0cHV0KCkKK3sKKyAgICBBU1NFUlQobV9iU2FtcGxlTm90aWZ5IHx8IG1fYlJl
cGFpbnQpOyAvLyBTZWUgbm90ZSBhYm92ZS4KKworICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAg
IERXT1JEIGR3U3RhdHVzID0gMDsKKyAgICBMT05HTE9ORyBtaXhlclN0YXJ0VGltZSA9IDAsIG1p
eGVyRW5kVGltZSA9IDA7CisgICAgTUZUSU1FIHN5c3RlbVRpbWUgPSAwOworICAgIEJPT0wgYlJl
cGFpbnQgPSBtX2JSZXBhaW50OyAvLyBUZW1wb3JhcmlseSBzdG9yZSB0aGlzIHN0YXRlIGZsYWcu
ICAKKworICAgIE1GVF9PVVRQVVRfREFUQV9CVUZGRVIgZGF0YUJ1ZmZlcjsKKyAgICBaZXJvTWVt
b3J5KCZkYXRhQnVmZmVyLCBzaXplb2YoZGF0YUJ1ZmZlcikpOworCisgICAgQ09NUHRyPElNRlNh
bXBsZT4gcFNhbXBsZTsKKworICAgIC8vIElmIHRoZSBjbG9jayBpcyBub3QgcnVubmluZywgd2Ug
cHJlc2VudCB0aGUgZmlyc3Qgc2FtcGxlLAorICAgIC8vIGFuZCB0aGVuIGRvbid0IHByZXNlbnQg
YW55IG1vcmUgdW50aWwgdGhlIGNsb2NrIHN0YXJ0cy4gCisKKyAgICBpZiAoKG1fUmVuZGVyU3Rh
dGUgIT0gUkVOREVSX1NUQVRFX1NUQVJURUQpIC8vIE5vdCBydW5uaW5nLgorICAgICAgICAmJiAh
bV9iUmVwYWludCAvLyBOb3QgYSByZXBhaW50IHJlcXVlc3QuCisgICAgICAgICYmIG1fYlByZXJv
bGxlZCkgLy8gQXQgbGVhc3Qgb25lIHNhbXBsZSBoYXMgYmVlbiBwcmVzZW50ZWQuCisgICAgICAg
IHJldHVybiBTX0ZBTFNFOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBwb2ludGVyIHRv
IHRoZSBtaXhlci4KKyAgICBpZiAoIW1fcE1peGVyKQorICAgICAgICByZXR1cm4gTUZfRV9JTlZB
TElEUkVRVUVTVDsKKworICAgIC8vIFRyeSB0byBnZXQgYSBmcmVlIHNhbXBsZSBmcm9tIHRoZSB2
aWRlbyBzYW1wbGUgcG9vbC4KKyAgICBociA9IG1fU2FtcGxlUG9vbC5nZXRTYW1wbGUoJnBTYW1w
bGUpOworICAgIGlmIChociA9PSBNRl9FX1NBTVBMRUFMTE9DQVRPUl9FTVBUWSkKKyAgICAgICAg
cmV0dXJuIFNfRkFMU0U7IC8vIE5vIGZyZWUgc2FtcGxlcy4gV2UnbGwgdHJ5IGFnYWluIHdoZW4g
YSBzYW1wbGUgaXMgcmVsZWFzZWQuCisKKyAgICBpZiAoRkFJTEVEKGhyKSkgLy8gRmFpbCBvbiBh
bnkgb3RoZXIgZXJyb3IgY29kZS4KKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gRnJvbSBu
b3cgb24sIHdlIGhhdmUgYSB2YWxpZCB2aWRlbyBzYW1wbGUgcG9pbnRlciwgd2hlcmUgdGhlIG1p
eGVyIHdpbGwKKyAgICAvLyB3cml0ZSB0aGUgdmlkZW8gZGF0YS4KKyAgICBBU1NFUlQocFNhbXBs
ZSk7CisKKyAgICAvLyAoSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmlyZXMsIGl0IG1lYW5z
IHdlIGFyZSBub3QgbWFuYWdpbmcgdGhlIHNhbXBsZSBwb29sIGNvcnJlY3RseS4pCisgICAgQVNT
RVJUKE1GR2V0QXR0cmlidXRlVUlOVDMyKHBTYW1wbGUuZ2V0KCksIE1GU2FtcGxlUHJlc2VudGVy
U2FtcGxlQ291bnRlciwgKFVJTlQzMiktMSkgPT0gbV9Ub2tlbkNvdW50ZXIpOworCisgICAgaWYg
KG1fYlJlcGFpbnQpIHsKKyAgICAgICAgLy8gUmVwYWludCByZXF1ZXN0LiBBc2sgdGhlIG1peGVy
IGZvciB0aGUgbW9zdCByZWNlbnQgc2FtcGxlLgorICAgICAgICBTZXREZXNpcmVkU2FtcGxlVGlt
ZShwU2FtcGxlLmdldCgpLCBtX3NjaGVkdWxlci5MYXN0U2FtcGxlVGltZSgpLCBtX3NjaGVkdWxl
ci5GcmFtZUR1cmF0aW9uKCkpOworICAgICAgICBtX2JSZXBhaW50ID0gRkFMU0U7IC8vIE9LIHRv
IGNsZWFyIHRoaXMgZmxhZyBub3cuCisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IGEgcmVw
YWludCByZXF1ZXN0LiBDbGVhciB0aGUgZGVzaXJlZCBzYW1wbGUgdGltZTsgdGhlIG1peGVyIHdp
bGwKKyAgICAgICAgLy8gZ2l2ZSB1cyB0aGUgbmV4dCBmcmFtZSBpbiB0aGUgc3RyZWFtLgorICAg
ICAgICBDbGVhckRlc2lyZWRTYW1wbGVUaW1lKHBTYW1wbGUuZ2V0KCkpOworCisgICAgICAgIGlm
IChtX3BDbG9jaykgeworICAgICAgICAgICAgLy8gTGF0ZW5jeTogUmVjb3JkIHRoZSBzdGFydGlu
ZyB0aW1lIGZvciB0aGUgUHJvY2Vzc091dHB1dCBvcGVyYXRpb24uIAorICAgICAgICAgICAgbV9w
Q2xvY2stPkdldENvcnJlbGF0ZWRUaW1lKDAsICZtaXhlclN0YXJ0VGltZSwgJnN5c3RlbVRpbWUp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHdlIGFyZSByZWFkeSB0byBnZXQgYW4g
b3V0cHV0IHNhbXBsZSBmcm9tIHRoZSBtaXhlci4gCisgICAgZGF0YUJ1ZmZlci5kd1N0cmVhbUlE
ID0gMDsKKyAgICBkYXRhQnVmZmVyLnBTYW1wbGUgPSBwU2FtcGxlLmdldCgpOworICAgIGRhdGFC
dWZmZXIuZHdTdGF0dXMgPSAwOworCisgICAgaHIgPSBtX3BNaXhlci0+UHJvY2Vzc091dHB1dCgw
LCAxLCAmZGF0YUJ1ZmZlciwgJmR3U3RhdHVzKTsKKworICAgIC8vIFJlbGVhc2UgYW55IGV2ZW50
cyB0aGF0IHdlcmUgcmV0dXJuZWQgZnJvbSB0aGUgUHJvY2Vzc091dHB1dCBtZXRob2QuIAorICAg
IC8vIChXZSBkb24ndCBleHBlY3QgYW55IGV2ZW50cyBmcm9tIHRoZSBtaXhlciwgYnV0IHRoaXMg
aXMgYSBnb29kIHByYWN0aWNlLikKKyAgICBpZiAoZGF0YUJ1ZmZlci5wRXZlbnRzKQorICAgICAg
ICBkYXRhQnVmZmVyLnBFdmVudHMtPlJlbGVhc2UoKTsKKworICAgIGlmIChGQUlMRUQoaHIpKSB7
CisgICAgICAgIC8vIFJldHVybiB0aGUgc2FtcGxlIHRvIHRoZSBwb29sLgorICAgICAgICBIUkVT
VUxUIGhyMiA9IG1fU2FtcGxlUG9vbC5yZXR1cm5TYW1wbGUocFNhbXBsZS5nZXQoKSk7CisgICAg
ICAgIGlmIChGQUlMRUQoaHIyKSkKKyAgICAgICAgICAgIHJldHVybiBocjI7CisKKyAgICAgICAg
Ly8gSGFuZGxlIHNvbWUga25vd24gZXJyb3IgY29kZXMgZnJvbSBQcm9jZXNzT3V0cHV0LgorICAg
ICAgICBpZiAoaHIgPT0gTUZfRV9UUkFOU0ZPUk1fVFlQRV9OT1RfU0VUKSB7CisgICAgICAgICAg
ICAvLyBUaGUgbWl4ZXIncyBmb3JtYXQgaXMgbm90IHNldC4gTmVnb3RpYXRlIGEgbmV3IGZvcm1h
dC4KKyAgICAgICAgICAgIGhyID0gUmVuZWdvdGlhdGVNZWRpYVR5cGUoKTsKKyAgICAgICAgfSBl
bHNlIGlmIChociA9PSBNRl9FX1RSQU5TRk9STV9TVFJFQU1fQ0hBTkdFKSB7CisgICAgICAgICAg
ICAvLyBUaGVyZSB3YXMgYSBkeW5hbWljIG1lZGlhIHR5cGUgY2hhbmdlLiBDbGVhciBvdXIgbWVk
aWEgdHlwZS4KKyAgICAgICAgICAgIFNldE1lZGlhVHlwZShudWxscHRyKTsKKyAgICAgICAgfSBl
bHNlIGlmIChociA9PSBNRl9FX1RSQU5TRk9STV9ORUVEX01PUkVfSU5QVVQpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBtaXhlciBuZWVkcyBtb3JlIGlucHV0LiAKKyAgICAgICAgICAgIC8vIFdlIGhh
dmUgdG8gd2FpdCBmb3IgdGhlIG1peGVyIHRvIGdldCBtb3JlIGlucHV0LgorICAgICAgICAgICAg
bV9iU2FtcGxlTm90aWZ5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBXZSBnb3QgYW4gb3V0cHV0IHNhbXBsZSBmcm9tIHRoZSBtaXhlci4KKworICAgICAgICBp
ZiAobV9wQ2xvY2sgJiYgIWJSZXBhaW50KSB7CisgICAgICAgICAgICAvLyBMYXRlbmN5OiBSZWNv
cmQgdGhlIGVuZGluZyB0aW1lIGZvciB0aGUgUHJvY2Vzc091dHB1dCBvcGVyYXRpb24sCisgICAg
ICAgICAgICAvLyBhbmQgbm90aWZ5IHRoZSBFVlIgb2YgdGhlIGxhdGVuY3kuIAorCisgICAgICAg
ICAgICBtX3BDbG9jay0+R2V0Q29ycmVsYXRlZFRpbWUoMCwgJm1peGVyRW5kVGltZSwgJnN5c3Rl
bVRpbWUpOworCisgICAgICAgICAgICBMT05HTE9ORyBsYXRlbmN5VGltZSA9IG1peGVyRW5kVGlt
ZSAtIG1peGVyU3RhcnRUaW1lOworICAgICAgICAgICAgTm90aWZ5RXZlbnQoRUNfUFJPQ0VTU0lO
R19MQVRFTkNZLCAoTE9OR19QVFIpJmxhdGVuY3lUaW1lLCAwKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFNldCB1cCBub3RpZmljYXRpb24gZm9yIHdoZW4gdGhlIHNhbXBsZSBpcyByZWxlYXNl
ZC4KKyAgICAgICAgaHIgPSBUcmFja1NhbXBsZShwU2FtcGxlLmdldCgpKTsKKyAgICAgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7CisKKyAgICAgICAgLy8gU2NoZWR1
bGUgdGhlIHNhbXBsZS4KKyAgICAgICAgaWYgKChtX0ZyYW1lU3RlcC5zdGF0ZSA9PSBGUkFNRVNU
RVBfTk9ORSkgfHwgYlJlcGFpbnQpIHsKKyAgICAgICAgICAgIGhyID0gRGVsaXZlclNhbXBsZShw
U2FtcGxlLmdldCgpLCBiUmVwYWludCk7CisgICAgICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBXZSBhcmUgZnJhbWUtc3RlcHBpbmcgKGFuZCB0aGlzIGlzIG5vdCBhIHJlcGFpbnQgcmVxdWVz
dCkuCisgICAgICAgICAgICBociA9IERlbGl2ZXJGcmFtZVN0ZXBTYW1wbGUocFNhbXBsZS5nZXQo
KSk7CisgICAgICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
aHI7CisgICAgICAgIH0KKyAgICAgICAgbV9iUHJlcm9sbGVkID0gdHJ1ZTsgLy8gV2UgaGF2ZSBw
cmVzZW50ZWQgYXQgbGVhc3Qgb25lIHNhbXBsZSBub3cuCisgICAgfQorCisgICAgcmV0dXJuIGhy
OworfQorCisvLyBEZWxpdmVyU2FtcGxlCisvLworLy8gU2NoZWR1bGUgYSB2aWRlbyBzYW1wbGUg
Zm9yIHByZXNlbnRhdGlvbi4KKy8vCisvLyBDYWxsZWQgZnJvbToKKy8vIC0gUHJvY2Vzc091dHB1
dAorLy8gLSBEZWxpdmVyRnJhbWVTdGVwU2FtcGxlCisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6RGVsaXZlclNhbXBsZShJ
TUZTYW1wbGUqIHBTYW1wbGUsIEJPT0wgYlJlcGFpbnQpCit7CisgICAgQVNTRVJUKHBTYW1wbGUp
OworCisgICAgRDNEUHJlc2VudEVuZ2luZTo6RGV2aWNlU3RhdGUgc3RhdGUgPSBEM0RQcmVzZW50
RW5naW5lOjpEZXZpY2VPSzsKKworICAgIC8vIElmIHdlIGFyZSBub3QgYWN0aXZlbHkgcGxheWlu
ZywgT1Igd2UgYXJlIHNjcnViYmluZyAocmF0ZSA9IDApIE9SIHRoaXMgaXMgYSAKKyAgICAvLyBy
ZXBhaW50IHJlcXVlc3QsIHRoZW4gd2UgbmVlZCB0byBwcmVzZW50IHRoZSBzYW1wbGUgaW1tZWRp
YXRlbHkuIE90aGVyd2lzZSwgCisgICAgLy8gc2NoZWR1bGUgaXQgbm9ybWFsbHkuCisKKyAgICBi
b29sIGJQcmVzZW50Tm93ID0gKChtX1JlbmRlclN0YXRlICE9IFJFTkRFUl9TVEFURV9TVEFSVEVE
KSB8fCBJc1NjcnViYmluZygpIHx8IGJSZXBhaW50KTsKKworICAgIC8vIENoZWNrIHRoZSBEM0Qg
ZGV2aWNlIHN0YXRlLgorICAgIEhSRVNVTFQgaHIgPSBtX3BEM0RQcmVzZW50RW5naW5lLT5DaGVj
a0RldmljZVN0YXRlKCZzdGF0ZSk7CisKKyAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAg
aHIgPSBtX3NjaGVkdWxlci5TY2hlZHVsZVNhbXBsZShwU2FtcGxlLCBiUHJlc2VudE5vdyk7CisK
KyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAvLyBOb3RpZnkgdGhlIEVWUiB0aGF0IHdl
IGhhdmUgZmFpbGVkIGR1cmluZyBzdHJlYW1pbmcuIFRoZSBFVlIgd2lsbCBub3RpZnkgdGhlIAor
ICAgICAgICAvLyBwaXBlbGluZSAoaWUsIGl0IHdpbGwgbm90aWZ5IHRoZSBGaWx0ZXIgR3JhcGgg
TWFuYWdlciBpbiBEaXJlY3RTaG93IG9yIHRoZSAKKyAgICAgICAgLy8gTWVkaWEgU2Vzc2lvbiBp
biBNZWRpYSBGb3VuZGF0aW9uKS4KKworICAgICAgICBOb3RpZnlFdmVudChFQ19FUlJPUkFCT1JU
LCBociwgMCk7CisgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBEM0RQcmVzZW50RW5naW5lOjpEZXZp
Y2VSZXNldCkgeworICAgICAgICAvLyBUaGUgRGlyZWN0M0QgZGV2aWNlIHdhcyByZS1zZXQuIE5v
dGlmeSB0aGUgRVZSLgorICAgICAgICBOb3RpZnlFdmVudChFQ19ESVNQTEFZX0NIQU5HRUQsIFNf
T0ssIDApOworICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworLy8gSXNTYW1wbGVUaW1lUGFz
c2VkCisvLworLy8gUmV0dXJucyBUUlVFIGlmIHRoZSBlbnRpcmUgZHVyYXRpb24gb2YgcFNhbXBs
ZSBpcyBpbiB0aGUgcGFzdC4KKy8vCisvLyBSZXR1cm5zIEZBTFNFIGlmIGFsbCBvciBwYXJ0IG9m
IHRoZSBzYW1wbGUgZHVyYXRpb24gaXMgaW4gdGhlIGZ1dHVyZSwgb3IgaWYKKy8vIHRoZSBmdW5j
dGlvbiBjYW5ub3QgZGV0ZXJtaW5lZCAoZS5nLiwgaWYgdGhlIHNhbXBsZSBsYWNrcyBhIHRpbWUg
c3RhbXApLgorCitzdGF0aWMgQk9PTCBJc1NhbXBsZVRpbWVQYXNzZWQoSU1GQ2xvY2sqIHBDbG9j
aywgSU1GU2FtcGxlKiBwU2FtcGxlKQoreworICAgIEFTU0VSVChwQ2xvY2spOworICAgIEFTU0VS
VChwU2FtcGxlKTsKKworICAgIGlmICghcFNhbXBsZSB8fCAhcENsb2NrKQorICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworCisgICAgTUZUSU1FIGhuc1RpbWVOb3cgPSAwOworICAgIE1GVElNRSBo
bnNTeXN0ZW1UaW1lID0gMDsKKyAgICBNRlRJTUUgaG5zU2FtcGxlU3RhcnQgPSAwOworICAgIE1G
VElNRSBobnNTYW1wbGVEdXJhdGlvbiA9IDA7CisKKyAgICAvLyBUaGUgc2FtcGxlIG1pZ2h0IGxh
Y2sgYSB0aW1lLXN0YW1wIG9yIGEgZHVyYXRpb24sIGFuZCB0aGUKKyAgICAvLyBjbG9jayBtaWdo
dCBub3QgcmVwb3J0IGEgdGltZS4KKworICAgIEhSRVNVTFQgaHIgPSBwQ2xvY2stPkdldENvcnJl
bGF0ZWRUaW1lKDAsICZobnNUaW1lTm93LCAmaG5zU3lzdGVtVGltZSk7CisKKyAgICBpZiAoU1VD
Q0VFREVEKGhyKSkKKyAgICAgICAgaHIgPSBwU2FtcGxlLT5HZXRTYW1wbGVUaW1lKCZobnNTYW1w
bGVTdGFydCk7CisgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgIGhyID0gcFNhbXBsZS0+
R2V0U2FtcGxlRHVyYXRpb24oJmhuc1NhbXBsZUR1cmF0aW9uKTsKKworICAgIGlmIChTVUNDRUVE
RUQoaHIpKSB7CisgICAgICAgIGlmIChobnNTYW1wbGVTdGFydCArIGhuc1NhbXBsZUR1cmF0aW9u
IDwgaG5zVGltZU5vdykKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHJl
dHVybiBGQUxTRTsKK30KKworLy8gRGVsaXZlckZyYW1lU3RlcFNhbXBsZQorLy8KKy8vIFByb2Nl
c3MgYSB2aWRlbyBzYW1wbGUgZm9yIGZyYW1lLXN0ZXBwaW5nLgorCitIUkVTVUxUIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkRlbGl2ZXJG
cmFtZVN0ZXBTYW1wbGUoSU1GU2FtcGxlKiBwU2FtcGxlKQoreworICAgIEhSRVNVTFQgaHIgPSBT
X09LOworICAgIENPTVB0cjxJVW5rbm93bj4gcFVuazsKKworICAgIC8vIEZvciByYXRlIDAsIGRp
c2NhcmQgYW55IHNhbXBsZSB0aGF0IGVuZHMgZWFybGllciB0aGFuIHRoZSBjbG9jayB0aW1lLgor
ICAgIGlmIChJc1NjcnViYmluZygpICYmIG1fcENsb2NrICYmIElzU2FtcGxlVGltZVBhc3NlZCht
X3BDbG9jay5nZXQoKSwgcFNhbXBsZSkpIHsKKyAgICAgICAgLy8gRGlzY2FyZCB0aGlzIHNhbXBs
ZS4KKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgaWYgKG1fRnJhbWVTdGVwLnN0
YXRlID49IEZSQU1FU1RFUF9TQ0hFRFVMRUQpIHsKKyAgICAgICAgLy8gQSBmcmFtZSB3YXMgYWxy
ZWFkeSBzdWJtaXR0ZWQuIFB1dCB0aGlzIHNhbXBsZSBvbiB0aGUgZnJhbWUtc3RlcCBxdWV1ZSwg
CisgICAgICAgIC8vIGluIGNhc2Ugd2UgYXJlIGFza2VkIHRvIHN0ZXAgdG8gdGhlIG5leHQgZnJh
bWUuIElmIGZyYW1lLXN0ZXBwaW5nIGlzCisgICAgICAgIC8vIGNhbmNlbGxlZCwgdGhpcyBzYW1w
bGUgd2lsbCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuCisgICAgICAgIG1fRnJhbWVTdGVwLnNhbXBs
ZXMuYXBwZW5kKHBTYW1wbGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlJ3JlIHJlYWR5
IHRvIGZyYW1lLXN0ZXAuCisKKyAgICAgICAgLy8gRGVjcmVtZW50IHRoZSBudW1iZXIgb2Ygc3Rl
cHMuCisgICAgICAgIGlmIChtX0ZyYW1lU3RlcC5zdGVwcyA+IDApCisgICAgICAgICAgICBtX0Zy
YW1lU3RlcC5zdGVwcy0tOworCisgICAgICAgIGlmIChtX0ZyYW1lU3RlcC5zdGVwcyA+IDApIHsK
KyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBsYXN0IHN0ZXAuIERpc2NhcmQgdGhpcyBz
YW1wbGUuCisgICAgICAgICAgICByZXR1cm4gU19PSzsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtX0ZyYW1lU3RlcC5zdGF0ZSA9PSBGUkFNRVNURVBfV0FJVElOR19TVEFSVCkgeworICAgICAg
ICAgICAgLy8gVGhpcyBpcyB0aGUgcmlnaHQgZnJhbWUsIGJ1dCB0aGUgY2xvY2sgaGFzbid0IHN0
YXJ0ZWQgeWV0LiBQdXQgdGhlCisgICAgICAgICAgICAvLyBzYW1wbGUgb24gdGhlIGZyYW1lLXN0
ZXAgcXVldWUuIFdoZW4gdGhlIGNsb2NrIHN0YXJ0cywgdGhlIHNhbXBsZQorICAgICAgICAgICAg
Ly8gd2lsbCBiZSBwcm9jZXNzZWQuCisgICAgICAgICAgICBtX0ZyYW1lU3RlcC5zYW1wbGVzLmFw
cGVuZChwU2FtcGxlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIHJpZ2h0IGZyYW1lICphbmQqIHRoZSBjbG9jayBoYXMgc3RhcnRlZC4gRGVsaXZlciB0aGlz
IHNhbXBsZS4KKyAgICAgICAgICAgIGhyID0gRGVsaXZlclNhbXBsZShwU2FtcGxlLCBGQUxTRSk7
CisgICAgICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaHI7
CisKKyAgICAgICAgICAgIC8vIFFJIGZvciBJVW5rbm93biBzbyB0aGF0IHdlIGNhbiBpZGVudGlm
eSB0aGUgc2FtcGxlIGxhdGVyLgorICAgICAgICAgICAgLy8gKFBlciBDT00gcnVsZXMsIGFuIG9i
amVjdCBhbHdheXNzIHJldHVybiB0aGUgc2FtZSBwb2ludGVyIHdoZW4gUUknZWQgZm9yIElVbmtu
b3duLikKKyAgICAgICAgICAgIGhyID0gcFNhbXBsZS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2Yo
SVVua25vd24pLCAodm9pZCoqKSZwVW5rKTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBocjsKKworICAgICAgICAgICAgLy8gU2F2ZSB0aGlzIHZh
bHVlLgorICAgICAgICAgICAgbV9GcmFtZVN0ZXAucFNhbXBsZU5vUmVmID0gKERXT1JEX1BUUilw
VW5rLmdldCgpOyAvLyBObyBhZGQtcmVmLiAKKworICAgICAgICAgICAgLy8gTk9URTogV2UgZG8g
bm90IEFkZFJlZiB0aGUgSVVua25vd24gcG9pbnRlciwgYmVjYXVzZSB0aGF0IHdvdWxkIHByZXZl
bnQgdGhlIAorICAgICAgICAgICAgLy8gc2FtcGxlIGZyb20gaW52b2tpbmcgdGhlIE9uU2FtcGxl
RnJlZSBjYWxsYmFjayBhZnRlciB0aGUgc2FtcGxlIGlzIHByZXNlbnRlZC4gCisgICAgICAgICAg
ICAvLyBXZSB1c2UgdGhpcyBJVW5rbm93biBwb2ludGVyIHB1cmVseSB0byBpZGVudGlmeSB0aGUg
c2FtcGxlIGxhdGVyOyB3ZSBuZXZlcgorICAgICAgICAgICAgLy8gYXR0ZW1wdCB0byBkZXJlZmVy
ZW5jZSB0aGUgcG9pbnRlci4KKworICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBzdGF0ZS4KKyAg
ICAgICAgICAgIG1fRnJhbWVTdGVwLnN0YXRlID0gRlJBTUVTVEVQX1NDSEVEVUxFRDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworCisvLyBUcmFja1NhbXBsZQorLy8K
Ky8vIEdpdmVuIGEgdmlkZW8gc2FtcGxlLCBzZXRzIGEgY2FsbGJhY2sgdGhhdCBpcyBpbnZva2Vk
IHdoZW4gdGhlIHNhbXBsZSBpcyBubyAKKy8vIGxvbmdlciBpbiB1c2UuIAorLy8KKy8vIE5vdGU6
IFRoZSBjYWxsYmFjayBtZXRob2QgcmV0dXJucyB0aGUgc2FtcGxlIHRvIHRoZSBwb29sIG9mIGZy
ZWUgc2FtcGxlczsgZm9yCisvLyBtb3JlIGluZm9ybWF0aW9uLCBzZWUgQ3VzdG9tVmlkZW9QcmVz
ZW50ZXI6Ok9uU2FtcGxlRnJlZSgpLiAKKy8vCisvLyBUaGlzIG1ldGhvZCB1c2VzIHRoZSBJTUZU
cmFja2VkU2FtcGxlIGludGVyZmFjZSBvbiB0aGUgdmlkZW8gc2FtcGxlLgorCitIUkVTVUxUIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlRy
YWNrU2FtcGxlKElNRlNhbXBsZSogcFNhbXBsZSkKK3sKKyAgICBDT01QdHI8SU1GVHJhY2tlZFNh
bXBsZT4gcFRyYWNrZWQ7CisKKyAgICBIUkVTVUxUIGhyID0gcFNhbXBsZS0+UXVlcnlJbnRlcmZh
Y2UoX191dWlkb2YoSU1GVHJhY2tlZFNhbXBsZSksICh2b2lkKiopJnBUcmFja2VkKTsKKyAgICBp
ZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworICAgIHJldHVybiBwVHJhY2tlZC0+
U2V0QWxsb2NhdG9yKHRoaXMsIG51bGxwdHIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlJlbGVhc2VSZXNvdXJjZXMo
KQoreworICAgIC8vIEluY3JlbWVudCB0aGUgdG9rZW4gY291bnRlciB0byBpbmRpY2F0ZSB0aGF0
IGFsbCBleGlzdGluZyB2aWRlbyBzYW1wbGVzCisgICAgLy8gYXJlICJzdGFsZS4iIEFzIHRoZXNl
IHNhbXBsZXMgZ2V0IHJlbGVhc2VkLCB3ZSdsbCBkaXNwb3NlIG9mIHRoZW0uIAorICAgIC8vCisg
ICAgLy8gTm90ZTogVGhlIHRva2VuIGNvdW50ZXIgaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgc2Ft
cGxlcyBhcmUgc2hhcmVkCisgICAgLy8gYmV0d2VlbiBtb3JlIHRoYW4gb25lIHRocmVhZCwgYW5k
IHRoZXkgYXJlIHJldHVybmVkIHRvIHRoZSBwcmVzZW50ZXIgCisgICAgLy8gdGhyb3VnaCBhbiBh
c3luY2hyb25vdXMgY2FsbGJhY2sgKE9uU2FtcGxlRnJlZSkuIFdpdGhvdXQgdGhlIHRva2VuLCB3
ZQorICAgIC8vIG1pZ2h0IGFjY2lkZW50YWxseSByZS11c2UgYSBzdGFsZSBzYW1wbGUgYWZ0ZXIg
dGhlIFJlbGVhc2VSZXNvdXJjZXMKKyAgICAvLyBtZXRob2QgcmV0dXJucy4KKworICAgIG1fVG9r
ZW5Db3VudGVyKys7CisKKyAgICBGbHVzaCgpOworCisgICAgbV9TYW1wbGVQb29sLmNsZWFyKCk7
CisKKyAgICBpZiAobV9wRDNEUHJlc2VudEVuZ2luZSkKKyAgICAgICAgbV9wRDNEUHJlc2VudEVu
Z2luZS0+UmVsZWFzZVJlc291cmNlcygpOworfQorCisvLyBPblNhbXBsZUZyZWUKKy8vCisvLyBD
YWxsYmFjayB0aGF0IGlzIGludm9rZWQgd2hlbiBhIHNhbXBsZSBpcyByZWxlYXNlZC4KKworSFJF
U1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjpPblNhbXBsZUZyZWUoSU1GQXN5bmNSZXN1bHQqIHBSZXN1bHQpCit7CisgICAgQ09NUHRy
PElVbmtub3duPiBwT2JqZWN0OworICAgIENPTVB0cjxJTUZTYW1wbGU+IHBTYW1wbGU7CisgICAg
Q09NUHRyPElVbmtub3duPiBwVW5rOworCisgICAgLy8gR2V0IHRoZSBzYW1wbGUgZnJvbSB0aGUg
YXN5bmMgcmVzdWx0IG9iamVjdC4KKyAgICBIUkVTVUxUIGhyID0gcFJlc3VsdC0+R2V0T2JqZWN0
KCZwT2JqZWN0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBOb3RpZnlFdmVudChF
Q19FUlJPUkFCT1JULCBociwgMCk7CisgICAgICAgIHJldHVybiBocjsKKyAgICB9CisgICAgaHIg
PSBwT2JqZWN0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJTUZTYW1wbGUpLCAodm9pZCoqKSZw
U2FtcGxlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBOb3RpZnlFdmVudChFQ19F
UlJPUkFCT1JULCBociwgMCk7CisgICAgICAgIHJldHVybiBocjsKKyAgICB9CisKKyAgICAvLyBJ
ZiB0aGlzIHNhbXBsZSB3YXMgc3VibWl0dGVkIGZvciBhIGZyYW1lLXN0ZXAsIHRoZW4gdGhlIGZy
YW1lIHN0ZXAgaXMgY29tcGxldGUuCisgICAgaWYgKG1fRnJhbWVTdGVwLnN0YXRlID09IEZSQU1F
U1RFUF9TQ0hFRFVMRUQpIHsKKyAgICAgICAgLy8gUUkgdGhlIHNhbXBsZSBmb3IgSVVua25vd24g
YW5kIGNvbXBhcmUgaXQgdG8gb3VyIGNhY2hlZCB2YWx1ZS4KKyAgICAgICAgaHIgPSBwU2FtcGxl
LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJTUZTYW1wbGUpLCAodm9pZCoqKSZwVW5rKTsKKyAg
ICAgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAgIE5vdGlmeUV2ZW50KEVDX0VSUk9S
QUJPUlQsIGhyLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtX0ZyYW1lU3RlcC5wU2FtcGxlTm9SZWYgPT0gKERXT1JEX1BUUilwVW5rLmdldCgp
KSB7CisgICAgICAgICAgICAvLyBOb3RpZnkgdGhlIEVWUi4gCisgICAgICAgICAgICBociA9IENv
bXBsZXRlRnJhbWVTdGVwKHBTYW1wbGUuZ2V0KCkpOworICAgICAgICAgICAgaWYgKEZBSUxFRCho
cikpIHsKKyAgICAgICAgICAgICAgICBOb3RpZnlFdmVudChFQ19FUlJPUkFCT1JULCBociwgMCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGhyOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLy8gTm90ZTogQWx0aG91Z2ggcE9iamVjdCBpcyBhbHNvIGFuIElVbmtub3duIHBv
aW50ZXIsIGl0J3Mgbm90IGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYmUgdGhlIGV4YWN0IHBv
aW50ZXIgdmFsdWUgcmV0dXJuZWQgdmlhIFF1ZXJ5SW50ZXJmYWNlLCBoZW5jZSB0aGUgCisgICAg
ICAgIC8vIG5lZWQgZm9yIHRoZSBzZWNvbmQgUUkuCisgICAgfQorCisgICAgbV9vYmplY3RMb2Nr
LmxvY2soKTsKKworICAgIGlmIChNRkdldEF0dHJpYnV0ZVVJTlQzMihwU2FtcGxlLmdldCgpLCBN
RlNhbXBsZVByZXNlbnRlclNhbXBsZUNvdW50ZXIsIChVSU5UMzIpLTEpID09IG1fVG9rZW5Db3Vu
dGVyKSB7CisgICAgICAgIC8vIFJldHVybiB0aGUgc2FtcGxlIHRvIHRoZSBzYW1wbGUgcG9vbC4K
KyAgICAgICAgaHIgPSBtX1NhbXBsZVBvb2wucmV0dXJuU2FtcGxlKHBTYW1wbGUuZ2V0KCkpOwor
CisgICAgICAgIC8vIE5vdyB0aGF0IGEgZnJlZSBzYW1wbGUgaXMgYXZhaWxhYmxlLCBwcm9jZXNz
IG1vcmUgZGF0YSBpZiBwb3NzaWJsZS4KKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAg
ICAgICAgICBQcm9jZXNzT3V0cHV0TG9vcCgpOworICAgIH0KKworICAgIG1fb2JqZWN0TG9jay51
bmxvY2soKTsKKworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBOb3RpZnlFdmVudChFQ19F
UlJPUkFCT1JULCBociwgMCk7CisKKyAgICByZXR1cm4gaHI7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Tm90aWZ5RXZl
bnQobG9uZyBFdmVudENvZGUsIExPTkdfUFRSIFBhcmFtMSwgTE9OR19QVFIgUGFyYW0yKQorewor
ICAgIGlmIChtX3BNZWRpYUV2ZW50U2luaykKKyAgICAgICAgbV9wTWVkaWFFdmVudFNpbmstPk5v
dGlmeShFdmVudENvZGUsIFBhcmFtMSwgUGFyYW0yKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpTYW1wbGVQb29sOjpTYW1wbGVQb29sKCkKKyAgICA6IG1faW5pdGlh
bGl6ZWQoZmFsc2UpCisgICAgLCBtX3BlbmRpbmcoMCkKK3sKK30KKworTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpTYW1wbGVQb29sOjp+U2FtcGxlUG9vbCgpCit7Cit9CisKK0hS
RVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTYW1wbGVQb29sOjpnZXRT
YW1wbGUoSU1GU2FtcGxlKiogcHBTYW1wbGUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9s
b2NrKTsKKworICAgIGlmICghbV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIE1GX0VfTk9U
X0lOSVRJQUxJWkVEOworCisgICAgaWYgKG1fdmlkZW9TYW1wbGVRdWV1ZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBNRl9FX1NBTVBMRUFMTE9DQVRPUl9FTVBUWTsKKworICAgIENPTVB0cjxJ
TUZTYW1wbGU+IHBTYW1wbGU7CisKKyAgICAvLyBHZXQgYSBzYW1wbGUgZnJvbSB0aGUgYWxsb2Nh
dGVkIHF1ZXVlLgorCisgICAgLy8gSXQgZG9lc24ndCBtYXR0ZXIgaWYgd2UgcHVsbCB0aGVtIGZy
b20gdGhlIGhlYWQgb3IgdGFpbCBvZiB0aGUgbGlzdCwKKyAgICAvLyBidXQgd2hlbiB3ZSBnZXQg
aXQgYmFjaywgd2Ugd2FudCB0byByZS1pbnNlcnQgaXQgb250byB0aGUgb3Bwb3NpdGUgZW5kLgor
ICAgIC8vIChzZWUgUmV0dXJuU2FtcGxlKQorCisgICAgcFNhbXBsZSA9IG1fdmlkZW9TYW1wbGVR
dWV1ZS50YWtlRmlyc3QoKTsKKworICAgIG1fcGVuZGluZysrOworCisgICAgLy8gR2l2ZSB0aGUg
c2FtcGxlIHRvIHRoZSBjYWxsZXIuCisgICAgKnBwU2FtcGxlID0gcFNhbXBsZS5nZXQoKTsKKyAg
ICAoKnBwU2FtcGxlKS0+QWRkUmVmKCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VM
VCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlNhbXBsZVBvb2w6OnJldHVyblNh
bXBsZShJTUZTYW1wbGUqIHBTYW1wbGUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKKworICAgIGlmICghbV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIE1GX0VfTk9UX0lO
SVRJQUxJWkVEOworCisgICAgbV92aWRlb1NhbXBsZVF1ZXVlLmFwcGVuZChwU2FtcGxlKTsKKyAg
ICBtX3BlbmRpbmctLTsKKyAgICByZXR1cm4gU19PSzsKK30KKworYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OlNhbXBsZVBvb2w6OmFyZVNhbXBsZXNQZW5kaW5nKCkKK3sK
KyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgaWYgKCFtX2luaXRpYWxpemVk
KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4gKG1fcGVuZGluZyA+IDApOwor
fQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2FtcGxlUG9v
bDo6aW5pdGlhbGl6ZShWaWRlb1NhbXBsZUxpc3QmIHNhbXBsZXMpCit7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9sb2NrKTsKKworICAgIGlmIChtX2luaXRpYWxpemVkKQorICAgICAgICByZXR1
cm4gTUZfRV9JTlZBTElEUkVRVUVTVDsKKworICAgIC8vIE1vdmUgdGhlc2Ugc2FtcGxlcyBpbnRv
IG91ciBhbGxvY2F0ZWQgcXVldWUuCisgICAgZm9yIChhdXRvIHNhbXBsZSA6IHNhbXBsZXMpCisg
ICAgICAgIG1fdmlkZW9TYW1wbGVRdWV1ZS5hcHBlbmQoc2FtcGxlKTsKKworICAgIG1faW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgIHNhbXBsZXMuY2xlYXIoKTsKKworICAgIHJldHVybiBTX09LOwor
fQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2FtcGxlUG9v
bDo6Y2xlYXIoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBtX3Zp
ZGVvU2FtcGxlUXVldWUuY2xlYXIoKTsKKyAgICBtX2luaXRpYWxpemVkID0gZmFsc2U7CisgICAg
bV9wZW5kaW5nID0gMDsKKyAgICByZXR1cm4gU19PSzsKK30KKworCisvLyBNZXNzYWdlcyBmb3Ig
dGhlIHNjaGVkdWxlciB0aHJlYWQuCisKK2VudW0gU2NoZWR1bGVFdmVudCB7CisgICAgRXZlbnRU
ZXJtaW5hdGUgPSBXTV9VU0VSLAorICAgIEV2ZW50U2NoZWR1bGUgPSBXTV9VU0VSICsgMSwKKyAg
ICBFdmVudEZsdXNoID0gV01fVVNFUiArIDIKK307CisKK2NvbnN0IGludCBzY2hlZHVsZXJUaW1l
b3V0ID0gNTAwMDsKKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVs
ZXI6OlNjaGVkdWxlcigpCisgICAgOiBtX3BDQihudWxscHRyKQorICAgICwgbV9wQ2xvY2sobnVs
bHB0cikKKyAgICAsIG1fZHdUaHJlYWRJRCgwKQorICAgICwgbV9oU2NoZWR1bGVyVGhyZWFkKG51
bGxwdHIpCisgICAgLCBtX2hUaHJlYWRSZWFkeUV2ZW50KG51bGxwdHIpCisgICAgLCBtX2hGbHVz
aEV2ZW50KG51bGxwdHIpCisgICAgLCBtX2ZSYXRlKDEuMGYpCisgICAgLCBtX0xhc3RTYW1wbGVU
aW1lKDApCisgICAgLCBtX1BlckZyYW1lSW50ZXJ2YWwoMCkKKyAgICAsIG1fUGVyRnJhbWVPbmVR
dWFydGVyKDApCit7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2No
ZWR1bGVyOjp+U2NoZWR1bGVyKCkKK3sKK30KKworLy8gU2V0RnJhbWVSYXRlCisvLyBTcGVjaWZp
ZXMgdGhlIGZyYW1lIHJhdGUgb2YgdGhlIHZpZGVvLCBpbiBmcmFtZXMgcGVyIHNlY29uZC4KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlNjaGVkdWxlcjo6U2V0RnJh
bWVSYXRlKGNvbnN0IE1GUmF0aW8mIGZwcykKK3sKKyAgICBVSU5UNjQgQXZnVGltZVBlckZyYW1l
ID0gMDsKKworICAgIC8vIENvbnZlcnQgdG8gYSBkdXJhdGlvbi4KKyAgICBNRkZyYW1lUmF0ZVRv
QXZlcmFnZVRpbWVQZXJGcmFtZVB0cigpKGZwcy5OdW1lcmF0b3IsIGZwcy5EZW5vbWluYXRvciwg
JkF2Z1RpbWVQZXJGcmFtZSk7CisKKyAgICBtX1BlckZyYW1lSW50ZXJ2YWwgPSAoTUZUSU1FKUF2
Z1RpbWVQZXJGcmFtZTsKKworICAgIC8vIENhbGN1bGF0ZSAxLzR0aCBvZiB0aGlzIHZhbHVlLCBi
ZWNhdXNlIHdlIHVzZSBpdCBmcmVxdWVudGx5LgorICAgIG1fUGVyRnJhbWVPbmVRdWFydGVyID0g
bV9QZXJGcmFtZUludGVydmFsIC8gNDsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OlNjaGVkdWxlcjo6U3RhcnRTY2hlZHVsZXIoSU1GQ2xvY2sqIHBDbG9j
aykKK3sKKyAgICBpZiAobV9oU2NoZWR1bGVyVGhyZWFkLmdldCgpKQorICAgICAgICByZXR1cm4g
RV9VTkVYUEVDVEVEOworCisgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgRFdPUkQgZHdJRCA9
IDA7CisKKyAgICBtX3BDbG9jayA9IHBDbG9jazsKKworICAgIC8vIFNldCBhIGhpZ2ggdGhlIHRp
bWVyIHJlc29sdXRpb24gKGllLCBzaG9ydCB0aW1lciBwZXJpb2QpLgorICAgIHRpbWVCZWdpblBl
cmlvZCgxKTsKKworICAgIC8vIENyZWF0ZSBhbiBldmVudCB0byB3YWl0IGZvciB0aGUgdGhyZWFk
IHRvIHN0YXJ0LgorICAgIG1faFRocmVhZFJlYWR5RXZlbnQgPSBDcmVhdGVFdmVudChudWxscHRy
LCBGQUxTRSwgRkFMU0UsIG51bGxwdHIpOworICAgIGlmICghbV9oVGhyZWFkUmVhZHlFdmVudC5n
ZXQoKSkKKyAgICAgICAgcmV0dXJuIEhSRVNVTFRfRlJPTV9XSU4zMihHZXRMYXN0RXJyb3IoKSk7
CisKKyAgICAvLyBDcmVhdGUgYW4gZXZlbnQgdG8gd2FpdCBmb3IgZmx1c2ggY29tbWFuZHMgdG8g
Y29tcGxldGUuCisgICAgbV9oRmx1c2hFdmVudCA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIEZBTFNF
LCBGQUxTRSwgbnVsbHB0cik7CisgICAgaWYgKCFtX2hGbHVzaEV2ZW50LmdldCgpKQorICAgICAg
ICByZXR1cm4gSFJFU1VMVF9GUk9NX1dJTjMyKEdldExhc3RFcnJvcigpKTsKKworICAgIC8vIENy
ZWF0ZSB0aGUgc2NoZWR1bGVyIHRocmVhZC4KKyAgICBtX2hTY2hlZHVsZXJUaHJlYWQgPSBDcmVh
dGVUaHJlYWQobnVsbHB0ciwgMCwgU2NoZWR1bGVyVGhyZWFkUHJvYywgKExQVk9JRCl0aGlzLCAw
LCAmZHdJRCk7CisgICAgaWYgKCFtX2hTY2hlZHVsZXJUaHJlYWQuZ2V0KCkpCisgICAgICAgIHJl
dHVybiBIUkVTVUxUX0ZST01fV0lOMzIoR2V0TGFzdEVycm9yKCkpOworCisgICAgSEFORExFIGhP
YmplY3RzW10gPSB7IG1faFRocmVhZFJlYWR5RXZlbnQuZ2V0KCksIG1faFNjaGVkdWxlclRocmVh
ZC5nZXQoKSB9OworCisgICAgLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBzaWduYWwgdGhlICJ0
aHJlYWQgcmVhZHkiIGV2ZW50LgorICAgIERXT1JEIGR3V2FpdCA9IFdhaXRGb3JNdWx0aXBsZU9i
amVjdHMoMiwgaE9iamVjdHMsIEZBTFNFLCBJTkZJTklURSk7IC8vIFdhaXQgZm9yIEVJVEhFUiBv
ZiB0aGVzZSBoYW5kbGVzLgorICAgIGlmIChXQUlUX09CSkVDVF8wICE9IGR3V2FpdCkgeworICAg
ICAgICAvLyBUaGUgdGhyZWFkIHRlcm1pbmF0ZWQgZWFybHkgZm9yIHNvbWUgcmVhc29uLiBUaGlz
IGlzIGFuIGVycm9yIGNvbmRpdGlvbi4KKyAgICAgICAgbV9oU2NoZWR1bGVyVGhyZWFkID0gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIEVfVU5FWFBFQ1RFRDsKKyAgICB9CisKKyAgICBtX2R3VGhy
ZWFkSUQgPSBkd0lEOworCisgICAgcmV0dXJuIGhyOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpTdG9wU2NoZWR1bGVyKCkKK3sKKyAg
ICBpZiAoIW1faFNjaGVkdWxlclRocmVhZC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIFNfT0s7CisK
KyAgICAvLyBBc2sgdGhlIHNjaGVkdWxlciB0aHJlYWQgdG8gZXhpdC4KKyAgICBQb3N0VGhyZWFk
TWVzc2FnZShtX2R3VGhyZWFkSUQsIEV2ZW50VGVybWluYXRlLCAwLCAwKTsKKworICAgIC8vIFdh
aXQgZm9yIHRoZSB0aHJlYWQgdG8gZXhpdC4KKyAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KG1faFNj
aGVkdWxlclRocmVhZC5nZXQoKSwgSU5GSU5JVEUpOworCisgICAgLy8gQ2xvc2UgaGFuZGxlcy4K
KyAgICBtX2hTY2hlZHVsZXJUaHJlYWQgPSBudWxscHRyOworICAgIG1faEZsdXNoRXZlbnQgPSBu
dWxscHRyOworCisgICAgLy8gRGlzY2FyZCBzYW1wbGVzLgorICAgIHsKKyAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgbV9TY2hlZHVsZWRTYW1wbGVzLmNsZWFyKCk7
CisgICAgfQorCisgICAgLy8gUmVzdG9yZSB0aGUgdGltZXIgcmVzb2x1dGlvbi4KKyAgICB0aW1l
RW5kUGVyaW9kKDEpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpTY2hlZHVsZXI6OkZsdXNoKCkKK3sKKyAgICAvLyBO
b3RlOiBUaGlzIG1ldGhvZCBpcyBzeW5jaHJvbm91czsgaWUuLCBpdCB3YWl0cyBmb3IgdGhlIGZs
dXNoIG9wZXJhdGlvbiB0byAKKyAgICAvLyBjb21wbGV0ZSBvbiB0aGUgd29ya2VyIHRocmVhZC4K
KworICAgIGlmIChtX2hTY2hlZHVsZXJUaHJlYWQuZ2V0KCkpIHsKKyAgICAgICAgLy8gQXNrIHRo
ZSBzY2hlZHVsZXIgdGhyZWFkIHRvIGZsdXNoLgorICAgICAgICBQb3N0VGhyZWFkTWVzc2FnZSht
X2R3VGhyZWFkSUQsIEV2ZW50Rmx1c2gsIDAsIDApOworCisgICAgICAgIC8vIFdhaXQgZm9yIHRo
ZSBzY2hlZHVsZXIgdGhyZWFkIHRvIHNpZ25hbCB0aGUgZmx1c2ggZXZlbnQsCisgICAgICAgIC8v
IE9SIGZvciB0aGUgdGhyZWFkIHRvIHRlcm1pbmF0ZS4KKyAgICAgICAgSEFORExFIG9iamVjdHNb
XSA9IHsgbV9oRmx1c2hFdmVudC5nZXQoKSwgbV9oU2NoZWR1bGVyVGhyZWFkLmdldCgpIH07CisK
KyAgICAgICAgV2FpdEZvck11bHRpcGxlT2JqZWN0cyhzaXplb2Yob2JqZWN0cykgLyBzaXplb2Yo
b2JqZWN0c1swXSksIG9iamVjdHMsIEZBTFNFLCBzY2hlZHVsZXJUaW1lb3V0KTsKKyAgICB9CisK
KyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OlNjaGVkdWxlcjo6U2NoZWR1bGVTYW1wbGUoSU1GU2FtcGxlICpwU2FtcGxlLCBC
T09MIGJQcmVzZW50Tm93KQoreworICAgIC8vIFNjaGVkdWxlcyBhIG5ldyBzYW1wbGUgZm9yIHBy
ZXNlbnRhdGlvbi4KKworICAgIGlmICghbV9wQ0IpCisgICAgICAgIHJldHVybiBNRl9FX05PVF9J
TklUSUFMSVpFRDsKKworICAgIGlmICghbV9oU2NoZWR1bGVyVGhyZWFkLmdldCgpKQorICAgICAg
ICByZXR1cm4gTUZfRV9OT1RfSU5JVElBTElaRUQ7CisKKyAgICBIUkVTVUxUIGhyID0gU19PSzsK
KyAgICBEV09SRCBkd0V4aXRDb2RlID0gMDsKKworICAgIEdldEV4aXRDb2RlVGhyZWFkKG1faFNj
aGVkdWxlclRocmVhZC5nZXQoKSwgJmR3RXhpdENvZGUpOworICAgIGlmIChkd0V4aXRDb2RlICE9
IFNUSUxMX0FDVElWRSkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIGlmIChiUHJlc2Vu
dE5vdyB8fCAhbV9wQ2xvY2spIHsKKyAgICAgICAgLy8gUHJlc2VudCB0aGUgc2FtcGxlIGltbWVk
aWF0ZWx5LgorICAgICAgICBtX3BDQi0+UHJlc2VudFNhbXBsZShwU2FtcGxlLCAwKTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBRdWV1ZSB0aGUgc2FtcGxlIGFuZCBhc2sgdGhlIHNjaGVkdWxl
ciB0aHJlYWQgdG8gd2FrZSB1cC4KKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsK
KyAgICAgICAgbV9TY2hlZHVsZWRTYW1wbGVzLmFwcGVuZChwU2FtcGxlKTsKKworICAgICAgICBp
ZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgIFBvc3RUaHJlYWRNZXNzYWdlKG1fZHdUaHJl
YWRJRCwgRXZlbnRTY2hlZHVsZSwgMCwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIGhyOworfQor
CitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpQ
cm9jZXNzU2FtcGxlc0luUXVldWUoTE9ORyogcGxOZXh0U2xlZXApCit7CisgICAgSFJFU1VMVCBo
ciA9IFNfT0s7CisgICAgTE9ORyBsV2FpdCA9IDA7CisgICAgQ09NUHRyPElNRlNhbXBsZT4gcFNh
bXBsZTsKKworICAgIC8vIFByb2Nlc3Mgc2FtcGxlcyB1bnRpbCB0aGUgcXVldWUgaXMgZW1wdHkg
b3IgdW50aWwgdGhlIHdhaXQgdGltZSA+IDAuCisKKyAgICAvLyBOb3RlOiBEZXF1ZXVlIHJldHVy
bnMgU19GQUxTRSB3aGVuIHRoZSBxdWV1ZSBpcyBlbXB0eS4KKyAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKKyAgICAgICAgICAgIGlmIChtX1NjaGVkdWxlZFNhbXBsZXMuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcFNhbXBsZSA9IG1fU2NoZWR1bGVkU2FtcGxl
cy50YWtlRmlyc3QoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBQcm9jZXNzIHRoZSBuZXh0IHNh
bXBsZSBpbiB0aGUgcXVldWUuIElmIHRoZSBzYW1wbGUgaXMgbm90IHJlYWR5CisgICAgICAgIC8v
IGZvciBwcmVzZW50YXRpb24uIHRoZSB2YWx1ZSByZXR1cm5lZCBpbiBsV2FpdCBpcyA+IDAsIHdo
aWNoCisgICAgICAgIC8vIG1lYW5zIHRoZSBzY2hlZHVsZXIgc2hvdWxkIHNsZWVwIGZvciB0aGF0
IGFtb3VudCBvZiB0aW1lLgorCisgICAgICAgIGhyID0gUHJvY2Vzc1NhbXBsZShwU2FtcGxlLmdl
dCgpLCAmbFdhaXQpOworCisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgaWYgKGxXYWl0ID4gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIC8vIElmIHRoZSB3YWl0IHRpbWUgaXMgemVybywgaXQgbWVhbnMgd2Ugc3RvcHBlZCBi
ZWNhdXNlIHRoZSBxdWV1ZSBpcworICAgIC8vIGVtcHR5IChvciBhbiBlcnJvciBvY2N1cnJlZCku
IFNldCB0aGUgd2FpdCB0aW1lIHRvIGluZmluaXRlOyB0aGlzIHdpbGwKKyAgICAvLyBtYWtlIHRo
ZSBzY2hlZHVsZXIgdGhyZWFkIHNsZWVwIHVudGlsIGl0IGdldHMgYW5vdGhlciB0aHJlYWQgbWVz
c2FnZS4KKyAgICBpZiAoIWxXYWl0KQorICAgICAgICBsV2FpdCA9IElORklOSVRFOworCisgICAg
KnBsTmV4dFNsZWVwID0gbFdhaXQ7CisgICAgcmV0dXJuIGhyOworfQorCitIUkVTVUxUIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6U2NoZWR1bGVyOjpQcm9jZXNzU2FtcGxlKElN
RlNhbXBsZSogcFNhbXBsZSwgTE9ORyogcGxOZXh0U2xlZXApCit7CisgICAgSFJFU1VMVCBociA9
IFNfT0s7CisKKyAgICBMT05HTE9ORyBobnNQcmVzZW50YXRpb25UaW1lID0gMDsKKyAgICBMT05H
TE9ORyBobnNUaW1lTm93ID0gMDsKKyAgICBNRlRJTUUgaG5zU3lzdGVtVGltZSA9IDA7CisKKyAg
ICBCT09MIGJQcmVzZW50Tm93ID0gVFJVRTsKKyAgICBMT05HIGxOZXh0U2xlZXAgPSAwOworCisg
ICAgaWYgKG1fcENsb2NrKSB7CisgICAgICAgIC8vIEdldCB0aGUgc2FtcGxlJ3MgdGltZSBzdGFt
cC4gSXQgaXMgdmFsaWQgZm9yIGEgc2FtcGxlIHRvCisgICAgICAgIC8vIGhhdmUgbm8gdGltZSBz
dGFtcC4KKyAgICAgICAgaHIgPSBwU2FtcGxlLT5HZXRTYW1wbGVUaW1lKCZobnNQcmVzZW50YXRp
b25UaW1lKTsKKworICAgICAgICAvLyBHZXQgdGhlIGNsb2NrIHRpbWUuIChCdXQgaWYgdGhlIHNh
bXBsZSBkb2VzIG5vdCBoYXZlIGEgdGltZSBzdGFtcCwgCisgICAgICAgIC8vIHdlIGRvbid0IG5l
ZWQgdGhlIGNsb2NrIHRpbWUuKQorICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAg
ICAgIGhyID0gbV9wQ2xvY2stPkdldENvcnJlbGF0ZWRUaW1lKDAsICZobnNUaW1lTm93LCAmaG5z
U3lzdGVtVGltZSk7CisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0aW1lIHVudGlsIHRoZSBz
YW1wbGUncyBwcmVzZW50YXRpb24gdGltZS4gCisgICAgICAgIC8vIEEgbmVnYXRpdmUgdmFsdWUg
bWVhbnMgdGhlIHNhbXBsZSBpcyBsYXRlLgorICAgICAgICBMT05HTE9ORyBobnNEZWx0YSA9IGhu
c1ByZXNlbnRhdGlvblRpbWUgLSBobnNUaW1lTm93OworICAgICAgICBpZiAobV9mUmF0ZSA8IDAp
IHsKKyAgICAgICAgICAgIC8vIEZvciByZXZlcnNlIHBsYXliYWNrLCB0aGUgY2xvY2sgcnVucyBi
YWNrd2FyZC4gVGhlcmVmb3JlIHRoZSBkZWx0YSBpcyByZXZlcnNlZC4KKyAgICAgICAgICAgIGhu
c0RlbHRhID0gLWhuc0RlbHRhOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhuc0RlbHRhIDwg
LW1fUGVyRnJhbWVPbmVRdWFydGVyKSB7CisgICAgICAgICAgICAvLyBUaGlzIHNhbXBsZSBpcyBs
YXRlLiAKKyAgICAgICAgICAgIGJQcmVzZW50Tm93ID0gVFJVRTsKKyAgICAgICAgfSBlbHNlIGlm
IChobnNEZWx0YSA+ICgzICogbV9QZXJGcmFtZU9uZVF1YXJ0ZXIpKSB7CisgICAgICAgICAgICAv
LyBUaGlzIHNhbXBsZSBpcyBzdGlsbCB0b28gZWFybHkuIEdvIHRvIHNsZWVwLgorICAgICAgICAg
ICAgbE5leHRTbGVlcCA9IE1GVGltZVRvTWlsbGlzZWNvbmRzKGhuc0RlbHRhIC0gKDMgKiBtX1Bl
ckZyYW1lT25lUXVhcnRlcikpOworCisgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIHNsZWVwIHRp
bWUgZm9yIHRoZSBjbG9jayByYXRlLiAoVGhlIHByZXNlbnRhdGlvbiBjbG9jayBydW5zCisgICAg
ICAgICAgICAvLyBhdCBtX2ZSYXRlLCBidXQgc2xlZXBpbmcgdXNlcyB0aGUgc3lzdGVtIGNsb2Nr
LikKKyAgICAgICAgICAgIGxOZXh0U2xlZXAgPSAoTE9ORykobE5leHRTbGVlcCAvIGZhYnNmKG1f
ZlJhdGUpKTsKKworICAgICAgICAgICAgLy8gRG9uJ3QgcHJlc2VudCB5ZXQuCisgICAgICAgICAg
ICBiUHJlc2VudE5vdyA9IEZBTFNFOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJQcmVz
ZW50Tm93KQorICAgICAgICBociA9IG1fcENCLT5QcmVzZW50U2FtcGxlKHBTYW1wbGUsIGhuc1By
ZXNlbnRhdGlvblRpbWUpOworICAgIGVsc2UgeworICAgICAgICAvLyBUaGUgc2FtcGxlIGlzIG5v
dCByZWFkeSB5ZXQuIFJldHVybiBpdCB0byB0aGUgcXVldWUuCisgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fbG9jayk7CisgICAgICAgIG1fU2NoZWR1bGVkU2FtcGxlcy5wcmVwZW5kKHBTYW1w
bGUpOworICAgIH0KKworICAgICpwbE5leHRTbGVlcCA9IGxOZXh0U2xlZXA7CisKKyAgICByZXR1
cm4gaHI7Cit9CisKK0RXT1JEIFdJTkFQSSBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OlNjaGVkdWxlcjo6U2NoZWR1bGVyVGhyZWFkUHJvYyhMUFZPSUQgbHBQYXJhbWV0ZXIpCit7
CisgICAgU2NoZWR1bGVyKiBwU2NoZWR1bGVyID0gcmVpbnRlcnByZXRfY2FzdDxTY2hlZHVsZXIq
PihscFBhcmFtZXRlcik7CisgICAgaWYgKCFwU2NoZWR1bGVyKQorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RFdPUkQ+KC0xKTsKKyAgICByZXR1cm4gcFNjaGVkdWxlci0+U2NoZWR1bGVyVGhy
ZWFkUHJvY1ByaXZhdGUoKTsKK30KKworRFdPUkQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpTY2hlZHVsZXI6OlNjaGVkdWxlclRocmVhZFByb2NQcml2YXRlKCkKK3sKKyAgICBI
UkVTVUxUIGhyID0gU19PSzsKKyAgICBNU0cgbXNnOworICAgIExPTkcgbFdhaXQgPSBJTkZJTklU
RTsKKyAgICBCT09MIGJFeGl0VGhyZWFkID0gRkFMU0U7CisKKyAgICAvLyBGb3JjZSB0aGUgc3lz
dGVtIHRvIGNyZWF0ZSBhIG1lc3NhZ2UgcXVldWUgZm9yIHRoaXMgdGhyZWFkLgorICAgIC8vIChT
ZWUgTVNETiBkb2N1bWVudGF0aW9uIGZvciBQb3N0VGhyZWFkTWVzc2FnZS4pCisgICAgUGVla01l
c3NhZ2UoJm1zZywgbnVsbHB0ciwgV01fVVNFUiwgV01fVVNFUiwgUE1fTk9SRU1PVkUpOworCisg
ICAgLy8gU2lnbmFsIHRvIHRoZSBzY2hlZHVsZXIgdGhhdCB0aGUgdGhyZWFkIGlzIHJlYWR5Lgor
ICAgIFNldEV2ZW50KG1faFRocmVhZFJlYWR5RXZlbnQuZ2V0KCkpOworCisgICAgd2hpbGUgKCFi
RXhpdFRocmVhZCkgeworICAgICAgICAvLyBXYWl0IGZvciBhIHRocmVhZCBtZXNzYWdlIE9SIHVu
dGlsIHRoZSB3YWl0IHRpbWUgZXhwaXJlcy4KKyAgICAgICAgRFdPUkQgZHdSZXN1bHQgPSBNc2dX
YWl0Rm9yTXVsdGlwbGVPYmplY3RzKDAsIG51bGxwdHIsIEZBTFNFLCBsV2FpdCwgUVNfUE9TVE1F
U1NBR0UpOworCisgICAgICAgIGlmIChkd1Jlc3VsdCA9PSBXQUlUX1RJTUVPVVQpIHsKKyAgICAg
ICAgICAgIC8vIElmIHdlIHRpbWVkIG91dCwgdGhlbiBwcm9jZXNzIHRoZSBzYW1wbGVzIGluIHRo
ZSBxdWV1ZQorICAgICAgICAgICAgaHIgPSBQcm9jZXNzU2FtcGxlc0luUXVldWUoJmxXYWl0KTsK
KyAgICAgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgICAgIGJFeGl0VGhyZWFk
ID0gVFJVRTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChQZWVrTWVzc2FnZSgmbXNnLCBu
dWxscHRyLCAwLCAwLCBQTV9SRU1PVkUpKSB7CisgICAgICAgICAgICBCT09MIGJQcm9jZXNzU2Ft
cGxlcyA9IFRSVUU7CisKKyAgICAgICAgICAgIHN3aXRjaCAobXNnLm1lc3NhZ2UpIHsKKyAgICAg
ICAgICAgIGNhc2UgRXZlbnRUZXJtaW5hdGU6CisgICAgICAgICAgICAgICAgYkV4aXRUaHJlYWQg
PSBUUlVFOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEV2ZW50
Rmx1c2g6CisgICAgICAgICAgICAgICAgLy8gRmx1c2hpbmc6IENsZWFyIHRoZSBzYW1wbGUgcXVl
dWUgYW5kIHNldCB0aGUgZXZlbnQuCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9TY2hl
ZHVsZWRTYW1wbGVzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGxXYWl0ID0gSU5GSU5JVEU7CisgICAgICAgICAgICAgICAgU2V0RXZlbnQobV9oRmx1c2hFdmVu
dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRXZl
bnRTY2hlZHVsZToKKyAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIGFzIG1hbnkgc2FtcGxlcyBh
cyB3ZSBjYW4uCisgICAgICAgICAgICAgICAgaWYgKGJQcm9jZXNzU2FtcGxlcykgeworICAgICAg
ICAgICAgICAgICAgICBociA9IFByb2Nlc3NTYW1wbGVzSW5RdWV1ZSgmbFdhaXQpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJF
eGl0VGhyZWFkID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgYlByb2Nlc3NTYW1wbGVzID0g
KGxXYWl0ICE9IElORklOSVRFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9IC8vIHN3aXRjaCAgCisKKyAgICAgICAgfSAvLyB3aGlsZSBQ
ZWVrTWVzc2FnZQorCisgICAgfSAvLyB3aGlsZSAoIWJFeGl0VGhyZWFkKQorCisgICAgcmV0dXJu
IChTVUNDRUVERUQoaHIpID8gMCA6IDEpOworfQorCitzdGF0aWMgY29uc3QgaW50IHByZXNlbnRl
ckJ1ZmZlckNvdW50ID0gMzsKKworc3RhdGljIEhSRVNVTFQgRmluZEFkYXB0ZXIoSURpcmVjdDNE
OSAqcEQzRDksIEhNT05JVE9SIGhNb25pdG9yLCBVSU5UICpwdUFkYXB0ZXJJRCk7CisKK01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6RDNEUHJlc2Vu
dEVuZ2luZShIUkVTVUxUJiBocikKKyAgICA6IG1faHduZChudWxscHRyKQorICAgICwgbV9EZXZp
Y2VSZXNldFRva2VuKDApCisgICAgLCBtX3BEM0Q5KG51bGxwdHIpCisgICAgLCBtX3BEZXZpY2Uo
bnVsbHB0cikKKyAgICAsIG1fcERldmljZU1hbmFnZXIobnVsbHB0cikKKyAgICAsIG1fcFN1cmZh
Y2VSZXBhaW50KG51bGxwdHIpCisgICAgLCBtX3dpZHRoKDApCisgICAgLCBtX2hlaWdodCgwKQor
eworICAgIFNldFJlY3RFbXB0eSgmbV9yY0Rlc3RSZWN0KTsKKworICAgIFplcm9NZW1vcnkoJm1f
RGlzcGxheU1vZGUsIHNpemVvZihtX0Rpc3BsYXlNb2RlKSk7CisKKyAgICBociA9IEluaXRpYWxp
emVEM0QoKTsKKworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBo
ciA9IENyZWF0ZUQzRERldmljZSgpOworfQorCitNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OkQzRFByZXNlbnRFbmdpbmU6On5EM0RQcmVzZW50RW5naW5lKCkKK3sKK30KKworCisv
LyBHZXRTZXJ2aWNlCisvLworLy8gUmV0dXJucyBhIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gdGhl
IHByZXNlbnRlciBlbmdpbmUuCisvLyBUaGUgcHJlc2VudGVyIGNhbGxzIHRoaXMgbWV0aG9kIGZy
b20gaW5zaWRlIGl0J3MgaW1wbGVtZW50YXRpb24gb2YgCisvLyBJTUZHZXRTZXJ2aWNlOjpHZXRT
ZXJ2aWNlLgorLy8KKy8vIENsYXNzZXMgdGhhdCBkZXJpdmUgZnJvbSBEM0RQcmVzZW50RW5naW5l
IGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byByZXR1cm4gCisvLyBvdGhlciBpbnRlcmZhY2Vz
LiBJZiB5b3Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QsIGNhbGwgdGhlIGJhc2UgbWV0aG9kIGZyb20g
dGhlIAorLy8gZGVyaXZlZCBjbGFzcy4KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkQzRFByZXNlbnRFbmdpbmU6OkdldFNlcnZpY2UoUkVGR1VJRCBndWlkU2Vy
dmljZSwgUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHYpCit7CisgICAgQVNTRVJUKHBwdik7CisKKyAg
ICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgIGlmIChyaWlkID09IF9fdXVpZG9mKElEaXJlY3Qz
RERldmljZU1hbmFnZXI5KSkgeworICAgICAgICBpZiAoIW1fcERldmljZU1hbmFnZXIpCisgICAg
ICAgICAgICBociA9IE1GX0VfVU5TVVBQT1JURURfU0VSVklDRTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAqcHB2ID0gbV9wRGV2aWNlTWFuYWdlci5nZXQoKTsKKyAgICAgICAgICAgIG1f
cERldmljZU1hbmFnZXItPkFkZFJlZigpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAg
IGhyID0gTUZfRV9VTlNVUFBPUlRFRF9TRVJWSUNFOworCisgICAgcmV0dXJuIGhyOworfQorCisK
Ky8vIENoZWNrRm9ybWF0CisvLworLy8gUXVlcmllcyB3aGV0aGVyIHRoZSBEM0RQcmVzZW50RW5n
aW5lIGNhbiB1c2UgYSBzcGVjaWZpZWQgRGlyZWN0M0QgZm9ybWF0LgorCitIUkVTVUxUIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6Q2hlY2tGb3Jt
YXQoRDNERk9STUFUIGZvcm1hdCkKK3sKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgIFVJ
TlQgdUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7CisgICAgRDNEREVWVFlQRSB0eXBlID0g
RDNEREVWVFlQRV9IQUw7CisKKyAgICBEM0RESVNQTEFZTU9ERSBtb2RlOworICAgIEQzRERFVklD
RV9DUkVBVElPTl9QQVJBTUVURVJTIHBhcmFtczsKKworICAgIGlmIChtX3BEZXZpY2UpIHsKKyAg
ICAgICAgaHIgPSBtX3BEZXZpY2UtPkdldENyZWF0aW9uUGFyYW1ldGVycygmcGFyYW1zKTsKKyAg
ICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7CisKKyAgICAgICAg
dUFkYXB0ZXIgPSBwYXJhbXMuQWRhcHRlck9yZGluYWw7CisgICAgICAgIHR5cGUgPSBwYXJhbXMu
RGV2aWNlVHlwZTsKKyAgICB9CisKKyAgICBociA9IG1fcEQzRDktPkdldEFkYXB0ZXJEaXNwbGF5
TW9kZSh1QWRhcHRlciwgJm1vZGUpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1
cm4gaHI7CisKKyAgICByZXR1cm4gbV9wRDNEOS0+Q2hlY2tEZXZpY2VUeXBlKHVBZGFwdGVyLCB0
eXBlLCBtb2RlLkZvcm1hdCwgZm9ybWF0LCBUUlVFKTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQzRFByZXNlbnRFbmdpbmU6OlNldFZpZGVvV2luZG93
KEhXTkQgaHduZCkKK3sKKyAgICBBU1NFUlQoSXNXaW5kb3coaHduZCkpOworICAgIEFTU0VSVCho
d25kICE9IG1faHduZCk7CisKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fT2Jq
ZWN0TG9jayk7CisgICAgICAgIG1faHduZCA9IGh3bmQ7CisgICAgICAgIFVwZGF0ZURlc3RSZWN0
KCk7CisgICAgfQorCisgICAgLy8gUmVjcmVhdGUgdGhlIGRldmljZS4KKyAgICByZXR1cm4gQ3Jl
YXRlRDNERGV2aWNlKCk7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpTZXREZXN0aW5hdGlvblJlY3QoY29uc3QgUkVDVCYg
cmNEZXN0KQoreworICAgIGlmIChFcXVhbFJlY3QoJnJjRGVzdCwgJm1fcmNEZXN0UmVjdCkpCisg
ICAgICAgIHJldHVybiBTX09LOyAvLyBObyBjaGFuZ2UuCisKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX09iamVjdExvY2spOworCisgICAgbV9yY0Rlc3RSZWN0ID0gcmNEZXN0OworICAgIFVwZGF0
ZURlc3RSZWN0KCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworCisvLyBDcmVhdGVWaWRlb1Nh
bXBsZXMKKy8vIAorLy8gQ3JlYXRlcyB2aWRlbyBzYW1wbGVzIGJhc2VkIG9uIGEgc3BlY2lmaWVk
IG1lZGlhIHR5cGUuCisvLyAKKy8vIHBGb3JtYXQ6IE1lZGlhIHR5cGUgdGhhdCBkZXNjcmliZXMg
dGhlIHZpZGVvIGZvcm1hdC4KKy8vIHZpZGVvU2FtcGxlUXVldWU6IExpc3QgdGhhdCB3aWxsIGNv
bnRhaW4gdGhlIHZpZGVvIHNhbXBsZXMuCisvLworLy8gTm90ZTogRm9yIGVhY2ggdmlkZW8gc2Ft
cGxlLCB0aGUgbWV0aG9kIGNyZWF0ZXMgYSBzd2FwIGNoYWluIHdpdGggYQorLy8gc2luZ2xlIGJh
Y2sgYnVmZmVyLiBUaGUgdmlkZW8gc2FtcGxlIG9iamVjdCBob2xkcyBhIHBvaW50ZXIgdG8gdGhl
IHN3YXAKKy8vIGNoYWluJ3MgYmFjayBidWZmZXIgc3VyZmFjZS4gVGhlIG1peGVyIHJlbmRlcnMg
dG8gdGhpcyBzdXJmYWNlLCBhbmQgdGhlCisvLyBEM0RQcmVzZW50RW5naW5lIHJlbmRlcnMgdGhl
IHZpZGVvIGZyYW1lIGJ5IHByZXNlbnRpbmcgdGhlIHN3YXAgY2hhaW4uCisKK0hSRVNVTFQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpDcmVhdGVW
aWRlb1NhbXBsZXMoSU1GTWVkaWFUeXBlKiBwRm9ybWF0LCBWaWRlb1NhbXBsZUxpc3QmIHZpZGVv
U2FtcGxlUXVldWUpCit7CisgICAgaWYgKCFtX2h3bmQpCisgICAgICAgIHJldHVybiBNRl9FX0lO
VkFMSURSRVFVRVNUOworCisgICAgaWYgKCFwRm9ybWF0KQorICAgICAgICByZXR1cm4gTUZfRV9V
TkVYUEVDVEVEOworCisgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgRDNEUFJFU0VOVF9QQVJB
TUVURVJTIHBwOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9PYmplY3RMb2NrKTsKKworICAg
IFJlbGVhc2VSZXNvdXJjZXMoKTsKKworICAgIC8vIEdldCB0aGUgc3dhcCBjaGFpbiBwYXJhbWV0
ZXJzIGZyb20gdGhlIG1lZGlhIHR5cGUuCisgICAgaHIgPSBHZXRTd2FwQ2hhaW5QcmVzZW50UGFy
YW1ldGVycyhwRm9ybWF0LCAmcHApOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIFJl
bGVhc2VSZXNvdXJjZXMoKTsKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIFVwZGF0
ZURlc3RSZWN0KCk7CisKKyAgICAvLyBDcmVhdGUgdGhlIHZpZGVvIHNhbXBsZXMuCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBwcmVzZW50ZXJCdWZmZXJDb3VudDsgaSsrKSB7CisgICAgICAgIENP
TVB0cjxJRGlyZWN0M0RTd2FwQ2hhaW45PiBwU3dhcENoYWluOyAvLyBTd2FwIGNoYWluCisgICAg
ICAgIENPTVB0cjxJTUZTYW1wbGU+IHBWaWRlb1NhbXBsZTsgLy8gU2FtcGxlCisKKyAgICAgICAg
Ly8gQ3JlYXRlIGEgbmV3IHN3YXAgY2hhaW4uCisgICAgICAgIGhyID0gbV9wRGV2aWNlLT5DcmVh
dGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcCwgJnBTd2FwQ2hhaW4pOworICAgICAgICBpZiAoRkFJ
TEVEKGhyKSkgeworICAgICAgICAgICAgUmVsZWFzZVJlc291cmNlcygpOworICAgICAgICAgICAg
cmV0dXJuIGhyOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSB2aWRlbyBzYW1w
bGUgZnJvbSB0aGUgc3dhcCBjaGFpbi4KKyAgICAgICAgaHIgPSBDcmVhdGVEM0RTYW1wbGUocFN3
YXBDaGFpbi5nZXQoKSwgJnBWaWRlb1NhbXBsZSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7
CisgICAgICAgICAgICBSZWxlYXNlUmVzb3VyY2VzKCk7CisgICAgICAgICAgICByZXR1cm4gaHI7
CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGQgaXQgdG8gdGhlIGxpc3QuCisgICAgICAgIHZp
ZGVvU2FtcGxlUXVldWUuYXBwZW5kKHBWaWRlb1NhbXBsZSk7CisKKyAgICAgICAgLy8gU2V0IHRo
ZSBzd2FwIGNoYWluIHBvaW50ZXIgYXMgYSBjdXN0b20gYXR0cmlidXRlIG9uIHRoZSBzYW1wbGUu
IFRoaXMga2VlcHMKKyAgICAgICAgLy8gYSByZWZlcmVuY2UgY291bnQgb24gdGhlIHN3YXAgY2hh
aW4sIHNvIHRoYXQgdGhlIHN3YXAgY2hhaW4gaXMga2VwdCBhbGl2ZQorICAgICAgICAvLyBmb3Ig
dGhlIGR1cmF0aW9uIG9mIHRoZSBzYW1wbGUncyBsaWZldGltZS4KKyAgICAgICAgaHIgPSBwVmlk
ZW9TYW1wbGUtPlNldFVua25vd24oTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVTd2FwQ2hhaW4sIHBT
d2FwQ2hhaW4uZ2V0KCkpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAgICAg
UmVsZWFzZVJlc291cmNlcygpOworICAgICAgICAgICAgcmV0dXJuIGhyOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gTGV0IHRoZSBkZXJpdmVkIGNsYXNzIGNyZWF0ZSBhbnkgYWRkaXRpb25h
bCBEM0QgcmVzb3VyY2VzIHRoYXQgaXQgbmVlZHMuCisgICAgaHIgPSBPbkNyZWF0ZVZpZGVvU2Ft
cGxlcyhwcCk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgUmVsZWFzZVJlc291cmNl
cygpOworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgcmV0dXJuIGhyOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6
UmVsZWFzZVJlc291cmNlcygpCit7CisgICAgLy8gTGV0IHRoZSBkZXJpdmVkIGNsYXNzIHJlbGVh
c2UgYW55IHJlc291cmNlcyBpdCBjcmVhdGVkLgorICAgIE9uUmVsZWFzZVJlc291cmNlcygpOwor
CisgICAgbV9wU3VyZmFjZVJlcGFpbnQgPSBudWxscHRyOworfQorCitIUkVTVUxUIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6Q2hlY2tEZXZpY2VT
dGF0ZShEZXZpY2VTdGF0ZSogcFN0YXRlKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fT2Jq
ZWN0TG9jayk7CisKKyAgICAvLyBDaGVjayB0aGUgZGV2aWNlIHN0YXRlLiBOb3QgZXZlcnkgZmFp
bHVyZSBjb2RlIGlzIGEgY3JpdGljYWwgZmFpbHVyZS4KKyAgICBIUkVTVUxUIGhyID0gbV9wRGV2
aWNlLT5DaGVja0RldmljZVN0YXRlKG1faHduZCk7CisKKyAgICAqcFN0YXRlID0gRGV2aWNlT0s7
CisKKyAgICBzd2l0Y2ggKGhyKSB7CisgICAgY2FzZSBTX09LOgorICAgIGNhc2UgU19QUkVTRU5U
X09DQ0xVREVEOgorICAgIGNhc2UgU19QUkVTRU5UX01PREVfQ0hBTkdFRDoKKyAgICAgICAgLy8g
c3RhdGUgaXMgRGV2aWNlT0sKKyAgICAgICAgaHIgPSBTX09LOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgRDNERVJSX0RFVklDRUxPU1Q6CisgICAgY2FzZSBEM0RFUlJfREVWSUNFSFVORzoK
KyAgICAgICAgLy8gTG9zdC9odW5nIGRldmljZS4gRGVzdHJveSB0aGUgZGV2aWNlIGFuZCBjcmVh
dGUgYSBuZXcgb25lLgorICAgICAgICBociA9IENyZWF0ZUQzRERldmljZSgpOworICAgICAgICBp
ZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgKnBTdGF0ZSA9
IERldmljZVJlc2V0OworICAgICAgICBociA9IFNfT0s7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBEM0RFUlJfREVWSUNFUkVNT1ZFRDoKKyAgICAgICAgLy8gVGhpcyBpcyBhIGZhdGFsIGVy
cm9yLgorICAgICAgICAqcFN0YXRlID0gRGV2aWNlUmVtb3ZlZDsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIEVfSU5WQUxJREFSRzoKKyAgICAgICAgLy8gQ2hlY2tEZXZpY2VTdGF0ZSBjYW4g
cmV0dXJuIEVfSU5WQUxJREFSRyBpZiB0aGUgd2luZG93IGlzIG5vdCB2YWxpZAorICAgICAgICAv
LyBXZSdsbCBhc3N1bWUgdGhhdCB0aGUgd2luZG93IHdhcyBkZXN0cm95ZWQ7IHdlJ2xsIHJlY3Jl
YXRlIHRoZSBkZXZpY2UgCisgICAgICAgIC8vIGlmIHRoZSBhcHBsaWNhdGlvbiBzZXRzIGEgbmV3
IHdpbmRvdy4KKyAgICAgICAgaHIgPSBTX09LOworICAgIH0KKworICAgIHJldHVybiBocjsKK30K
KworLy8gUHJlc2VudFNhbXBsZQorLy8KKy8vIFByZXNlbnRzIGEgdmlkZW8gZnJhbWUuCisvLwor
Ly8gcFNhbXBsZTogUG9pbnRlciB0byB0aGUgc2FtcGxlIHRoYXQgY29udGFpbnMgdGhlIHN1cmZh
Y2UgdG8gcHJlc2VudC4gSWYgCisvLyAgICAgICAgICB0aGlzIHBhcmFtZXRlciBpcyBudWxscHRy
LCB0aGUgbWV0aG9kIHBhaW50cyBhIGJsYWNrIHJlY3RhbmdsZS4KKy8vIGxsVGFyZ2V0OiBUYXJn
ZXQgcHJlc2VudGF0aW9uIHRpbWUuCisvLworLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRo
ZSBzY2hlZHVsZXIgYW5kL29yIHRoZSBwcmVzZW50ZXIuCisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEM0RQcmVzZW50RW5naW5lOjpQcmVzZW50U2FtcGxlKElN
RlNhbXBsZSogcFNhbXBsZSwgTE9OR0xPTkcgbGxUYXJnZXQpCit7CisgICAgSFJFU1VMVCBociA9
IFNfT0s7CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX09iamVjdExvY2spOworCisgICAgQ09N
UHRyPElNRk1lZGlhQnVmZmVyPiBwQnVmZmVyOworICAgIENPTVB0cjxJRGlyZWN0M0RTdXJmYWNl
OT4gcFN1cmZhY2U7CisgICAgQ09NUHRyPElEaXJlY3QzRFN3YXBDaGFpbjk+IHBTd2FwQ2hhaW47
CisKKyAgICBpZiAocFNhbXBsZSkgeworICAgICAgICAvLyBHZXQgdGhlIGJ1ZmZlciBmcm9tIHRo
ZSBzYW1wbGUuCisgICAgICAgIGhyID0gcFNhbXBsZS0+R2V0QnVmZmVyQnlJbmRleCgwLCAmcEJ1
ZmZlcik7CisKKyAgICAgICAgLy8gR2V0IHRoZSBzdXJmYWNlIGZyb20gdGhlIGJ1ZmZlci4KKyAg
ICAgICAgaHIgPSBNRkdldFNlcnZpY2VQdHIoKShwQnVmZmVyLmdldCgpLCBNUl9CVUZGRVJfU0VS
VklDRSwgX191dWlkb2YoSURpcmVjdDNEU3VyZmFjZTkpLCAodm9pZCoqKSZwU3VyZmFjZSk7Cisg
ICAgfSBlbHNlIGlmIChtX3BTdXJmYWNlUmVwYWludCkgeworICAgICAgICAvLyBSZWRyYXcgZnJv
bSB0aGUgbGFzdCBzdXJmYWNlLgorICAgICAgICBwU3VyZmFjZSA9IG1fcFN1cmZhY2VSZXBhaW50
LmdldCgpOworICAgICAgICBwU3VyZmFjZS0+QWRkUmVmKCk7CisgICAgfQorCisgICAgaWYgKHBT
dXJmYWNlKSB7CisgICAgICAgIFVJTlQgd2lkdGggPSBtX3JjRGVzdFJlY3QucmlnaHQgLSBtX3Jj
RGVzdFJlY3QubGVmdDsKKyAgICAgICAgVUlOVCBoZWlnaHQgPSBtX3JjRGVzdFJlY3QuYm90dG9t
IC0gbV9yY0Rlc3RSZWN0LnRvcDsKKworICAgICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+
IDApIHsKKyAgICAgICAgICAgIGlmICghbV9wTWVtU3VyZmFjZSB8fCBtX3dpZHRoICE9IHdpZHRo
IHx8IG1faGVpZ2h0ICE9IGhlaWdodCkgeworICAgICAgICAgICAgICAgIGhyID0gbV9wRGV2aWNl
LT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2Uod2lkdGgsIGhlaWdodCwgRDNERk1UX0E4UjhH
OEI4LCBEM0RQT09MX1NZU1RFTU1FTSwgJm1fcE1lbVN1cmZhY2UsIG51bGxwdHIpOworICAgICAg
ICAgICAgICAgIG1fd2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgICAgICBtX2hlaWdodCA9IGhl
aWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhyID0gbV9wRGV2aWNlLT5HZXRSZW5k
ZXJUYXJnZXREYXRhKHBTdXJmYWNlLmdldCgpLCBtX3BNZW1TdXJmYWNlLmdldCgpKTsKKyAgICAg
ICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICAgICAgbV9wTWVtU3VyZmFjZSA9
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgaHIgPSBTX09LOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gU2luY2Ugd2Ugd2FudCB0byBkcmF3IHRvIHRoZSBHcmFwaGlj
c0NvbnRleHQgcHJvdmlkZWQgaW4gdGhlIHBhaW50IG1ldGhvZCwKKyAgICAgICAgLy8gYW5kIG5v
dCBkcmF3IGRpcmVjdGx5IHRvIHRoZSB3aW5kb3csIHdlIHNraXAgcHJlc2VudGluZyB0aGUgc3dh
cCBjaGFpbjoKKworICAgICAgICAvLyBHZXQgdGhlIHN3YXAgY2hhaW4gZnJvbSB0aGUgc3VyZmFj
ZS4KKyAgICAgICAgLy8gQ0hFQ0tfSFIoaHIgPSBwU3VyZmFjZS0+R2V0Q29udGFpbmVyKF9fdXVp
ZG9mKElEaXJlY3QzRFN3YXBDaGFpbjkpLCAoTFBWT0lEKikmcFN3YXBDaGFpbikpOworCisgICAg
ICAgIC8vIFByZXNlbnQgdGhlIHN3YXAgY2hhaW4uCisgICAgICAgIC8vIENIRUNLX0hSKGhyID0g
UHJlc2VudFN3YXBDaGFpbihwU3dhcENoYWluLCBwU3VyZmFjZSkpOworCisgICAgICAgIC8vIFN0
b3JlIHRoaXMgcG9pbnRlciBpbiBjYXNlIHdlIG5lZWQgdG8gcmVwYWludCB0aGUgc3VyZmFjZS4K
KyAgICAgICAgbV9wU3VyZmFjZVJlcGFpbnQgPSBwU3VyZmFjZTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBObyBzdXJmYWNlLiBBbGwgd2UgY2FuIGRvIGlzIHBhaW50IGEgYmxhY2sgcmVjdGFu
Z2xlLgorICAgICAgICBQYWludEZyYW1lV2l0aEdESSgpOworICAgIH0KKworICAgIGlmIChGQUlM
RUQoaHIpKSB7CisgICAgICAgIGlmIChociA9PSBEM0RFUlJfREVWSUNFTE9TVCB8fCBociA9PSBE
M0RFUlJfREVWSUNFTk9UUkVTRVQgfHwgaHIgPT0gRDNERVJSX0RFVklDRUhVTkcpIHsKKyAgICAg
ICAgICAgIC8vIFdlIGZhaWxlZCBiZWNhdXNlIHRoZSBkZXZpY2Ugd2FzIGxvc3QuIEZpbGwgdGhl
IGRlc3RpbmF0aW9uIHJlY3RhbmdsZS4KKyAgICAgICAgICAgIFBhaW50RnJhbWVXaXRoR0RJKCk7
CisKKyAgICAgICAgICAgIC8vIElnbm9yZS4gV2UgbmVlZCB0byByZXNldCBvciByZS1jcmVhdGUg
dGhlIGRldmljZSwgYnV0IHRoaXMgbWV0aG9kCisgICAgICAgICAgICAvLyBpcyBwcm9iYWJseSBi
ZWluZyBjYWxsZWQgZnJvbSB0aGUgc2NoZWR1bGVyIHRocmVhZCwgd2hpY2ggaXMgbm90IHRoZQor
ICAgICAgICAgICAgLy8gc2FtZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSBkZXZpY2UuIFRoZSBS
ZXNldChFeCkgbWV0aG9kIG11c3QgYmUKKyAgICAgICAgICAgIC8vIGNhbGxlZCBmcm9tIHRoZSB0
aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSBkZXZpY2UuCisKKyAgICAgICAgICAgIC8vIFRoZSBwcmVz
ZW50ZXIgd2lsbCBkZXRlY3QgdGhlIHN0YXRlIHdoZW4gaXQgY2FsbHMgQ2hlY2tEZXZpY2VTdGF0
ZSgpIAorICAgICAgICAgICAgLy8gb24gdGhlIG5leHQgc2FtcGxlLgorICAgICAgICAgICAgaHIg
PSBTX09LOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBocjsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkQzRFByZXNlbnRFbmdpbmU6OlBhaW50Q3Vy
cmVudEZyYW1lKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiByKQoreworICAgIFVJTlQgd2lkdGggPSBtX3JjRGVzdFJlY3QucmlnaHQg
LSBtX3JjRGVzdFJlY3QubGVmdDsKKyAgICBVSU5UIGhlaWdodCA9IG1fcmNEZXN0UmVjdC5ib3R0
b20gLSBtX3JjRGVzdFJlY3QudG9wOworCisgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX09iamVjdExvY2spOworCisg
ICAgaWYgKCFtX3BNZW1TdXJmYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBEM0RMT0NLRURf
UkVDVCBsb2NrZWRSZWN0OworICAgIGlmIChTVUNDRUVERUQobV9wTWVtU3VyZmFjZS0+TG9ja1Jl
Y3QoJmxvY2tlZFJlY3QsIG51bGxwdHIsIEQzRExPQ0tfUkVBRE9OTFkpKSkgeworICAgICAgICB2
b2lkKiBkYXRhID0gbG9ja2VkUmVjdC5wQml0czsKKyAgICAgICAgaW50IHBpdGNoID0gbG9ja2Vk
UmVjdC5QaXRjaDsKKworICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRDYWlybyogY3R4
dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgICAgIGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4oZGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoLCBoZWlnaHQs
IHBpdGNoKTsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNsaXAoMCwgMCwgd2lkdGgsIGhl
aWdodCk7CisgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0ID0gcjsKKyAgICAgICAgcmVj
dC5pbnRlcnNlY3QoY2xpcCk7CisgICAgICAgIGN0eHQtPmRyYXdTdXJmYWNlVG9Db250ZXh0KGlt
YWdlLCByZWN0LCByZWN0LCBjb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95
KGltYWdlKTsKKworICAgICAgICBtX3BNZW1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgfQor
fQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2Vu
dEVuZ2luZTo6SW5pdGlhbGl6ZUQzRCgpCit7CisgICAgSFJFU1VMVCBociA9IFNfT0s7CisKKyAg
ICBBU1NFUlQoIW1fcEQzRDkpOworICAgIEFTU0VSVCghbV9wRGV2aWNlTWFuYWdlcik7CisKKyAg
ICAvLyBDcmVhdGUgRGlyZWN0M0QKKyAgICBociA9IERpcmVjdDNEQ3JlYXRlOUV4UHRyKCkoRDNE
X1NES19WRVJTSU9OLCAmbV9wRDNEOSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybiBocjsKKworICAgIC8vIENyZWF0ZSB0aGUgZGV2aWNlIG1hbmFnZXIKKyAgICByZXR1cm4g
RFhWQTJDcmVhdGVEaXJlY3QzRERldmljZU1hbmFnZXI5UHRyKCkoJm1fRGV2aWNlUmVzZXRUb2tl
biwgJm1fcERldmljZU1hbmFnZXIpOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6Q3JlYXRlRDNERGV2aWNlKCkKK3sKKyAg
ICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICBVSU5UIHVBZGFwdGVySUQgPSBEM0RBREFQVEVSX0RF
RkFVTFQ7CisgICAgRFdPUkQgdnAgPSAwOworCisgICAgRDNEQ0FQUzkgZGRDYXBzOworICAgIFpl
cm9NZW1vcnkoJmRkQ2Fwcywgc2l6ZW9mKGRkQ2FwcykpOworCisgICAgQ09NUHRyPElEaXJlY3Qz
RERldmljZTlFeD4gcERldmljZTsKKworICAgIC8vIEhvbGQgdGhlIGxvY2sgYmVjYXVzZSB3ZSBt
aWdodCBiZSBkaXNjYXJkaW5nIGFuIGV4aXNpdGluZyBkZXZpY2UuCisgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9PYmplY3RMb2NrKTsKKworICAgIGlmICghbV9wRDNEOSB8fCAhbV9wRGV2aWNlTWFu
YWdlcikKKyAgICAgICAgcmV0dXJuIE1GX0VfTk9UX0lOSVRJQUxJWkVEOworCisgICAgSFdORCBo
d25kID0gR2V0RGVza3RvcFdpbmRvdygpOworCisgICAgLy8gTm90ZTogVGhlIHByZXNlbnRlciBj
cmVhdGVzIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgdG8gcHJlc2VudCB0aGUKKyAgICAvLyB2aWRl
byBmcmFtZXMuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgdXNlIHRoZSBkZXZpY2UncyBpbXBsaWNp
dCAKKyAgICAvLyBzd2FwIGNoYWluLCBzbyB0aGUgc2l6ZSBvZiB0aGUgYmFjayBidWZmZXIgaGVy
ZSBpcyAxIHggMS4KKworICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcDsKKyAgICBaZXJvTWVt
b3J5KCZwcCwgc2l6ZW9mKHBwKSk7CisKKyAgICBwcC5CYWNrQnVmZmVyV2lkdGggPSAxOworICAg
IHBwLkJhY2tCdWZmZXJIZWlnaHQgPSAxOworICAgIHBwLldpbmRvd2VkID0gVFJVRTsKKyAgICBw
cC5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9DT1BZOworICAgIHBwLkJhY2tCdWZmZXJGb3Jt
YXQgPSBEM0RGTVRfVU5LTk9XTjsKKyAgICBwcC5oRGV2aWNlV2luZG93ID0gaHduZDsKKyAgICBw
cC5GbGFncyA9IEQzRFBSRVNFTlRGTEFHX1ZJREVPOworICAgIHBwLlByZXNlbnRhdGlvbkludGVy
dmFsID0gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOworCisgICAgLy8gRmluZCB0aGUgbW9u
aXRvciBmb3IgdGhpcyB3aW5kb3cuCisgICAgaWYgKG1faHduZCkgeworICAgICAgICBITU9OSVRP
UiBoTW9uaXRvciA9IE1vbml0b3JGcm9tV2luZG93KG1faHduZCwgTU9OSVRPUl9ERUZBVUxUVE9O
RUFSRVNUKTsKKworICAgICAgICAvLyBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIGFkYXB0ZXIuCisg
ICAgICAgIGhyID0gRmluZEFkYXB0ZXIobV9wRDNEOS5nZXQoKSwgaE1vbml0b3IsICZ1QWRhcHRl
cklEKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7Cisg
ICAgfQorCisgICAgLy8gR2V0IHRoZSBkZXZpY2UgY2FwcyBmb3IgdGhpcyBhZGFwdGVyLgorICAg
IGhyID0gbV9wRDNEOS0+R2V0RGV2aWNlQ2Fwcyh1QWRhcHRlcklELCBEM0RERVZUWVBFX0hBTCwg
JmRkQ2Fwcyk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAg
IGlmIChkZENhcHMuRGV2Q2FwcyAmIEQzRERFVkNBUFNfSFdUUkFOU0ZPUk1BTkRMSUdIVCkKKyAg
ICAgICAgdnAgPSBEM0RDUkVBVEVfSEFSRFdBUkVfVkVSVEVYUFJPQ0VTU0lORzsKKyAgICBlbHNl
CisgICAgICAgIHZwID0gRDNEQ1JFQVRFX1NPRlRXQVJFX1ZFUlRFWFBST0NFU1NJTkc7CisKKyAg
ICAvLyBDcmVhdGUgdGhlIGRldmljZS4KKyAgICBociA9IG1fcEQzRDktPkNyZWF0ZURldmljZUV4
KAorICAgICAgICB1QWRhcHRlcklELAorICAgICAgICBEM0RERVZUWVBFX0hBTCwKKyAgICAgICAg
cHAuaERldmljZVdpbmRvdywKKyAgICAgICAgdnAgfCBEM0RDUkVBVEVfTk9XSU5ET1dDSEFOR0VT
IHwgRDNEQ1JFQVRFX01VTFRJVEhSRUFERUQgfCBEM0RDUkVBVEVfRlBVX1BSRVNFUlZFLAorICAg
ICAgICAmcHAsCisgICAgICAgIG51bGxwdHIsCisgICAgICAgICZwRGV2aWNlCisgICAgICAgICk7
CisKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gR2V0
IHRoZSBhZGFwdGVyIGRpc3BsYXkgbW9kZS4KKyAgICBociA9IG1fcEQzRDktPkdldEFkYXB0ZXJE
aXNwbGF5TW9kZSh1QWRhcHRlcklELCAmbV9EaXNwbGF5TW9kZSk7CisgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIC8vIFJlc2V0IHRoZSBEM0REZXZpY2VNYW5h
Z2VyIHdpdGggdGhlIG5ldyBkZXZpY2UgCisgICAgaHIgPSBtX3BEZXZpY2VNYW5hZ2VyLT5SZXNl
dERldmljZShwRGV2aWNlLmdldCgpLCBtX0RldmljZVJlc2V0VG9rZW4pOworICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBtX3BEZXZpY2UgPSBwRGV2aWNlOwor
ICAgIG1fcERldmljZS0+QWRkUmVmKCk7CisKKyAgICByZXR1cm4gaHI7Cit9CisKKworLy8gQ3Jl
YXRlRDNEU2FtcGxlCisvLworLy8gQ3JlYXRlcyBhbiBzYW1wbGUgb2JqZWN0IChJTUZTYW1wbGUp
IHRvIGhvbGQgYSBEaXJlY3QzRCBzd2FwIGNoYWluLgorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6Q3JlYXRlRDNEU2FtcGxlKElE
aXJlY3QzRFN3YXBDaGFpbjkqIHBTd2FwQ2hhaW4sIElNRlNhbXBsZSoqIHBwVmlkZW9TYW1wbGUp
Cit7CisgICAgLy8gQ2FsbGVyIGhvbGRzIHRoZSBvYmplY3QgbG9jay4KKworICAgIEhSRVNVTFQg
aHIgPSBTX09LOworICAgIEQzRENPTE9SIGNsckJsYWNrID0gRDNEQ09MT1JfQVJHQigweEZGLCAw
eDAwLCAweDAwLCAweDAwKTsKKworICAgIENPTVB0cjxJRGlyZWN0M0RTdXJmYWNlOT4gcFN1cmZh
Y2U7CisgICAgQ09NUHRyPElNRlNhbXBsZT4gcFNhbXBsZTsKKworICAgIC8vIEdldCB0aGUgYmFj
ayBidWZmZXIgc3VyZmFjZS4KKyAgICBociA9IHBTd2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwg
RDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZwU3VyZmFjZSk7CisgICAgaWYgKEZBSUxFRChocikp
CisgICAgICAgIHJldHVybiBocjsKKworICAgIC8vIEZpbGwgaXQgd2l0aCBibGFjay4KKyAgICBo
ciA9IG1fcERldmljZS0+Q29sb3JGaWxsKHBTdXJmYWNlLmdldCgpLCBudWxscHRyLCBjbHJCbGFj
ayk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIC8vIENy
ZWF0ZSB0aGUgc2FtcGxlLgorICAgIGhyID0gTUZDcmVhdGVWaWRlb1NhbXBsZUZyb21TdXJmYWNl
UHRyKCkocFN1cmZhY2UuZ2V0KCksICZwU2FtcGxlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAg
ICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gUmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBjYWxs
ZXIuCisgICAgKnBwVmlkZW9TYW1wbGUgPSBwU2FtcGxlLmdldCgpOworICAgICgqcHBWaWRlb1Nh
bXBsZSktPkFkZFJlZigpOworCisgICAgcmV0dXJuIGhyOworfQorCisKKy8vIFByZXNlbnRTd2Fw
Q2hhaW4KKy8vCisvLyBQcmVzZW50cyBhIHN3YXAgY2hhaW4gdGhhdCBjb250YWlucyBhIHZpZGVv
IGZyYW1lLgorLy8KKy8vIHBTd2FwQ2hhaW46IFBvaW50ZXIgdG8gdGhlIHN3YXAgY2hhaW4uCisv
LyBwU3VyZmFjZTogUG9pbnRlciB0byB0aGUgc3dhcCBjaGFpbidzIGJhY2sgYnVmZmVyIHN1cmZh
Y2UuCisKKy8vCisvLyBOb3RlOiBUaGlzIG1ldGhvZCBzaW1wbHkgY2FsbHMgSURpcmVjdDNEU3dh
cENoYWluOTo6UHJlc2VudCwgYnV0IGEgZGVyaXZlZCAKKy8vIGNsYXNzIGNvdWxkIGRvIHNvbWV0
aGluZyBmYW5jaWVyLgorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6RDNEUHJlc2VudEVuZ2luZTo6UHJlc2VudFN3YXBDaGFpbihJRGlyZWN0M0RTd2FwQ2hhaW45
KiBwU3dhcENoYWluLCBJRGlyZWN0M0RTdXJmYWNlOSogcFN1cmZhY2UpCit7CisgICAgaWYgKCFt
X2h3bmQpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURSRVFVRVNUOworCisgICAgcmV0dXJu
IHBTd2FwQ2hhaW4tPlByZXNlbnQobnVsbHB0ciwgJm1fcmNEZXN0UmVjdCwgbV9od25kLCBudWxs
cHRyLCAwKTsKK30KKworLy8gUGFpbnRGcmFtZVdpdGhHREkKKy8vIAorLy8gRmlsbHMgdGhlIGRl
c3RpbmF0aW9uIHJlY3RhbmdsZSB3aXRoIGJsYWNrLgorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6UGFpbnRGcmFtZVdpdGhHREkoKQor
eworICAgIEhXbmREQyBoZGMobV9od25kKTsKKworICAgIGlmIChoZGMpIHsKKyAgICAgICAgSEJS
VVNIIGhCcnVzaCA9IENyZWF0ZVNvbGlkQnJ1c2goUkdCKDAsIDAsIDApKTsKKworICAgICAgICBp
ZiAoaEJydXNoKSB7CisgICAgICAgICAgICBGaWxsUmVjdChoZGMsICZtX3JjRGVzdFJlY3QsIGhC
cnVzaCk7CisgICAgICAgICAgICBEZWxldGVPYmplY3QoaEJydXNoKTsKKyAgICAgICAgfQorICAg
IH0KK30KKworCisvLyBHZXRTd2FwQ2hhaW5QcmVzZW50UGFyYW1ldGVycworLy8KKy8vIEdpdmVu
IGEgbWVkaWEgdHlwZSB0aGF0IGRlc2NyaWJlcyB0aGUgdmlkZW8gZm9ybWF0LCBmaWxscyBpbiB0
aGUKKy8vIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBmb3IgY3JlYXRpbmcgYSBzd2FwIGNoYWluLgor
CitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVu
Z2luZTo6R2V0U3dhcENoYWluUHJlc2VudFBhcmFtZXRlcnMoSU1GTWVkaWFUeXBlKiBwVHlwZSwg
RDNEUFJFU0VOVF9QQVJBTUVURVJTKiBwUFApCit7CisgICAgLy8gQ2FsbGVyIGhvbGRzIHRoZSBv
YmplY3QgbG9jay4KKworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgVUlOVDMyIHdpZHRo
ID0gMCwgaGVpZ2h0ID0gMDsKKyAgICBEV09SRCBkM2RGb3JtYXQgPSAwOworCisgICAgLy8gSGVs
cGVyIG9iamVjdCBmb3IgcmVhZGluZyB0aGUgcHJvcG9zZWQgdHlwZS4KKyAgICBWaWRlb1R5cGUg
dmlkZW9UeXBlKHBUeXBlKTsKKworICAgIGlmICghbV9od25kKQorICAgICAgICByZXR1cm4gTUZf
RV9JTlZBTElEUkVRVUVTVDsKKworICAgIFplcm9NZW1vcnkocFBQLCBzaXplb2YoRDNEUFJFU0VO
VF9QQVJBTUVURVJTKSk7CisKKyAgICAvLyBHZXQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUg
dmlkZW8gZm9ybWF0LgorICAgIGhyID0gdmlkZW9UeXBlLkdldEZyYW1lRGltZW5zaW9ucygmd2lk
dGgsICZoZWlnaHQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisK
KyAgICBociA9IHZpZGVvVHlwZS5HZXRGb3VyQ0MoJmQzZEZvcm1hdCk7CisgICAgaWYgKEZBSUxF
RChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIFplcm9NZW1vcnkocFBQLCBzaXplb2Yo
RDNEUFJFU0VOVF9QQVJBTUVURVJTKSk7CisgICAgcFBQLT5CYWNrQnVmZmVyV2lkdGggPSB3aWR0
aDsKKyAgICBwUFAtPkJhY2tCdWZmZXJIZWlnaHQgPSBoZWlnaHQ7CisgICAgcFBQLT5XaW5kb3dl
ZCA9IFRSVUU7CisgICAgcFBQLT5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9DT1BZOworICAg
IHBQUC0+QmFja0J1ZmZlckZvcm1hdCA9IChEM0RGT1JNQVQpZDNkRm9ybWF0OworICAgIHBQUC0+
aERldmljZVdpbmRvdyA9IG1faHduZDsKKyAgICBwUFAtPkZsYWdzID0gRDNEUFJFU0VOVEZMQUdf
VklERU87CisgICAgcFBQLT5QcmVzZW50YXRpb25JbnRlcnZhbCA9IEQzRFBSRVNFTlRfSU5URVJW
QUxfREVGQVVMVDsKKworICAgIEQzRERFVklDRV9DUkVBVElPTl9QQVJBTUVURVJTIHBhcmFtczsK
KyAgICBociA9IG1fcERldmljZS0+R2V0Q3JlYXRpb25QYXJhbWV0ZXJzKCZwYXJhbXMpOworICAg
IGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBpZiAocGFyYW1zLkRl
dmljZVR5cGUgIT0gRDNEREVWVFlQRV9IQUwpCisgICAgICAgIHBQUC0+RmxhZ3MgfD0gRDNEUFJF
U0VOVEZMQUdfTE9DS0FCTEVfQkFDS0JVRkZFUjsKKworICAgIHJldHVybiBTX09LOworfQorCisK
Ky8vIFVwZGF0ZURlc3RSZWN0CisvLworLy8gVXBkYXRlcyB0aGUgdGFyZ2V0IHJlY3RhbmdsZSBi
eSBjbGlwcGluZyBpdCB0byB0aGUgdmlkZW8gd2luZG93J3MgY2xpZW50CisvLyBhcmVhLgorLy8K
Ky8vIENhbGxlZCB3aGVuZXZlciB0aGUgYXBwbGljYXRpb24gc2V0cyB0aGUgdmlkZW8gd2luZG93
IG9yIHRoZSBkZXN0aW5hdGlvbgorLy8gcmVjdGFuZ2xlLgorCitIUkVTVUxUIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RDNEUHJlc2VudEVuZ2luZTo6VXBkYXRlRGVzdFJlY3Qo
KQoreworICAgIGlmICghbV9od25kKQorICAgICAgICByZXR1cm4gU19GQUxTRTsKKworICAgIFJF
Q1QgcmNWaWV3OworICAgIEdldENsaWVudFJlY3QobV9od25kLCAmcmNWaWV3KTsKKworICAgIC8v
IENsaXAgdGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB0byB0aGUgd2luZG93J3MgY2xpZW50IGFy
ZWEuCisgICAgaWYgKG1fcmNEZXN0UmVjdC5yaWdodCA+IHJjVmlldy5yaWdodCkKKyAgICAgICAg
bV9yY0Rlc3RSZWN0LnJpZ2h0ID0gcmNWaWV3LnJpZ2h0OworCisgICAgaWYgKG1fcmNEZXN0UmVj
dC5ib3R0b20gPiByY1ZpZXcuYm90dG9tKQorICAgICAgICBtX3JjRGVzdFJlY3QuYm90dG9tID0g
cmNWaWV3LmJvdHRvbTsKKworICAgIHJldHVybiBTX09LOworfQorCisvLyBGaW5kQWRhcHRlcgor
Ly8KKy8vIEdpdmVuIGEgaGFuZGxlIHRvIGEgbW9uaXRvciwgcmV0dXJucyB0aGUgb3JkaW5hbCBu
dW1iZXIgdGhhdCBEM0QgdXNlcyB0byAKKy8vIGlkZW50aWZ5IHRoZSBhZGFwdGVyLgorCitzdGF0
aWMgSFJFU1VMVCBGaW5kQWRhcHRlcihJRGlyZWN0M0Q5KiBwRDNEOSwgSE1PTklUT1IgaE1vbml0
b3IsIFVJTlQqIHB1QWRhcHRlcklEKQoreworICAgIEhSRVNVTFQgaHIgPSBFX0ZBSUw7CisgICAg
VUlOVCBjQWRhcHRlcnMgPSAwOworICAgIFVJTlQgdUFkYXB0ZXJJRCA9IChVSU5UKS0xOworCisg
ICAgY0FkYXB0ZXJzID0gcEQzRDktPkdldEFkYXB0ZXJDb3VudCgpOworICAgIGZvciAoVUlOVCBp
ID0gMDsgaSA8IGNBZGFwdGVyczsgaSsrKSB7CisgICAgICAgIEhNT05JVE9SIGhNb25pdG9yVG1w
ID0gcEQzRDktPkdldEFkYXB0ZXJNb25pdG9yKGkpOworCisgICAgICAgIGlmICghaE1vbml0b3JU
bXApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaE1vbml0b3JUbXAgPT0gaE1v
bml0b3IpIHsKKyAgICAgICAgICAgIHVBZGFwdGVySUQgPSBpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodUFkYXB0ZXJJRCAhPSAoVUlOVCktMSkgewor
ICAgICAgICAqcHVBZGFwdGVySUQgPSB1QWRhcHRlcklEOworICAgICAgICBociA9IFNfT0s7Cisg
ICAgfQorCisgICAgcmV0dXJuIGhyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24u
aAkocmV2aXNpb24gMTkyMDcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCwxNyArMjQsMzAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRlZiBNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb25faAorI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb25faAorCiAjaW5jbHVkZSAiQ09NUHRyLmgiCisjaW5jbHVkZSAiTWVkaWFG
b3VuZGF0aW9uVXRpbHMuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNs
dWRlICJXaW4zMkhhbmRsZS5oIgorCisjaW5jbHVkZSA8RDNEOS5oPgorI2luY2x1ZGUgPER4dmEy
YXBpLmg+CiAKICNpbmNsdWRlIDxNZmFwaS5oPgorI2luY2x1ZGUgPE1mZXJyb3IuaD4KICNpbmNs
dWRlIDxNZmlkbC5oPgorI2luY2x1ZGUgPGV2Y29kZS5oPgogI2luY2x1ZGUgPGV2ci5oPgogCisj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKK3R5
cGVkZWYgRGVxdWU8Q09NUHRyPElNRlNhbXBsZT4+IFZpZGVvU2FtcGxlTGlzdDsKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24g
OiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKQEAgLTExOCw2ICsxMzEsOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlVmlkZW9XaW5kb3coKTsKICAgICB2b2lkIGRlc3Ry
b3lWaWRlb1dpbmRvdygpOwogCisgICAgdm9pZCBpbnZhbGlkYXRlRnJhbWVWaWV3KCk7CisKICAg
ICB2b2lkIGFkZExpc3RlbmVyKE1lZGlhUGxheWVyTGlzdGVuZXIqKTsKICAgICB2b2lkIHJlbW92
ZUxpc3RlbmVyKE1lZGlhUGxheWVyTGlzdGVuZXIqKTsKICAgICB2b2lkIG5vdGlmeURlbGV0ZWQo
KTsKQEAgLTE1Myw2ICsxNjgsMzgyIEBAIHByaXZhdGU6CiAgICAgICAgIExvY2sgbV9tdXRleDsK
ICAgICB9OwogCisgICAgY2xhc3MgU2FtcGxlUG9vbCB7CisgICAgcHVibGljOgorICAgICAgICBT
YW1wbGVQb29sKCk7CisgICAgICAgIHZpcnR1YWwgflNhbXBsZVBvb2woKTsKKworICAgICAgICBI
UkVTVUxUIGluaXRpYWxpemUoVmlkZW9TYW1wbGVMaXN0JiBzYW1wbGVzKTsKKyAgICAgICAgSFJF
U1VMVCBjbGVhcigpOworCisgICAgICAgIEhSRVNVTFQgZ2V0U2FtcGxlKElNRlNhbXBsZSoqIHBw
U2FtcGxlKTsgLy8gRG9lcyBub3QgYmxvY2suCisgICAgICAgIEhSRVNVTFQgcmV0dXJuU2FtcGxl
KElNRlNhbXBsZSogcFNhbXBsZSk7CisgICAgICAgIGJvb2wgYXJlU2FtcGxlc1BlbmRpbmcoKTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIExvY2sgbV9sb2NrOworICAgICAgICBWaWRlb1NhbXBs
ZUxpc3QgbV92aWRlb1NhbXBsZVF1ZXVlOyAvLyBBdmFpbGFibGUgcXVldWUKKyAgICAgICAgYm9v
bCBtX2luaXRpYWxpemVkOworICAgICAgICB1bnNpZ25lZCBtX3BlbmRpbmc7CisgICAgfTsKKwor
ICAgIHN0cnVjdCBTY2hlZHVsZXJDYWxsYmFjazsKKworICAgIC8vIFNjaGVkdWxlciBjbGFzcwor
ICAgIC8vCisgICAgLy8gU2NoZWR1bGVzIHdoZW4gYSBzYW1wbGUgc2hvdWxkIGJlIGRpc3BsYXll
ZC4KKyAgICAvLworICAgIC8vIE5vdGU6IFByZXNlbnRhdGlvbiBvZiBlYWNoIHNhbXBsZSBpcyBw
ZXJmb3JtZWQgYnkgYW5vdGhlciBvYmplY3Qgd2hpY2gKKyAgICAvLyBtdXN0IGltcGxlbWVudCBT
Y2hlZHVsZXJDYWxsYmFjazo6UHJlc2VudFNhbXBsZS4KKyAgICAvLworICAgIC8vIEdlbmVyYWwg
ZGVzaWduOgorICAgIC8vIFRoZSBzY2hlZHVsZXIgZ2VuZXJhbGx5IHJlY2VpdmVzIHNhbXBsZXMg
YmVmb3JlIHRoZWlyIHByZXNlbnRhdGlvbiB0aW1lLiBJdAorICAgIC8vIHB1dHMgdGhlIHNhbXBs
ZXMgb24gYSBxdWV1ZSBhbmQgcHJlc2VudHMgdGhlbSBpbiBGSUZPIG9yZGVyIG9uIGEgd29ya2Vy
IAorICAgIC8vIHRocmVhZC4gVGhlIHNjaGVkdWxlciBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgd29y
a2VyIHRocmVhZCBieSBwb3N0aW5nIHRocmVhZAorICAgIC8vIG1lc3NhZ2VzLgorICAgIC8vCisg
ICAgLy8gVGhlIGNhbGxlciBoYXMgdGhlIG9wdGlvbiBvZiBwcmVzZW50aW5nIHNhbXBsZXMgaW1t
ZWRpYXRlbHkgKGZvciBleGFtcGxlLAorICAgIC8vIGZvciByZXBhaW50cykuIAorCisgICAgY2xh
c3MgU2NoZWR1bGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjaGVkdWxlcigpOworICAgICAg
ICB2aXJ0dWFsIH5TY2hlZHVsZXIoKTsKKworICAgICAgICB2b2lkIFNldENhbGxiYWNrKFNjaGVk
dWxlckNhbGxiYWNrICpwQ0IpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcENCID0gcENCOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBTZXRGcmFtZVJhdGUoY29uc3QgTUZSYXRpbyYgZnBz
KTsKKyAgICAgICAgdm9pZCBTZXRDbG9ja1JhdGUoZmxvYXQgZlJhdGUpIHsgbV9mUmF0ZSA9IGZS
YXRlOyB9CisKKyAgICAgICAgY29uc3QgTE9OR0xPTkcmIExhc3RTYW1wbGVUaW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9MYXN0U2FtcGxlVGltZTsgfQorICAgICAgICBjb25zdCBMT05HTE9ORyYgRnJh
bWVEdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fUGVyRnJhbWVJbnRlcnZhbDsgfQorCisgICAg
ICAgIEhSRVNVTFQgU3RhcnRTY2hlZHVsZXIoSU1GQ2xvY2sgKnBDbG9jayk7CisgICAgICAgIEhS
RVNVTFQgU3RvcFNjaGVkdWxlcigpOworCisgICAgICAgIEhSRVNVTFQgU2NoZWR1bGVTYW1wbGUo
SU1GU2FtcGxlICpwU2FtcGxlLCBCT09MIGJQcmVzZW50Tm93KTsKKyAgICAgICAgSFJFU1VMVCBQ
cm9jZXNzU2FtcGxlc0luUXVldWUoTE9ORyAqcGxOZXh0U2xlZXApOworICAgICAgICBIUkVTVUxU
IFByb2Nlc3NTYW1wbGUoSU1GU2FtcGxlICpwU2FtcGxlLCBMT05HICpwbE5leHRTbGVlcCk7Cisg
ICAgICAgIEhSRVNVTFQgRmx1c2goKTsKKworICAgICAgICAvLyBUaHJlYWRQcm9jIGZvciB0aGUg
c2NoZWR1bGVyIHRocmVhZC4KKyAgICAgICAgc3RhdGljIERXT1JEIFdJTkFQSSBTY2hlZHVsZXJU
aHJlYWRQcm9jKExQVk9JRCBscFBhcmFtZXRlcik7CisKKyAgICBwcml2YXRlOgorICAgICAgICAv
LyBub24tc3RhdGljIHZlcnNpb24gb2YgU2NoZWR1bGVyVGhyZWFkUHJvYy4KKyAgICAgICAgRFdP
UkQgU2NoZWR1bGVyVGhyZWFkUHJvY1ByaXZhdGUoKTsKKworICAgICAgICBEZXF1ZTxDT01QdHI8
SU1GU2FtcGxlPj4gbV9TY2hlZHVsZWRTYW1wbGVzOyAvLyBTYW1wbGVzIHdhaXRpbmcgdG8gYmUg
cHJlc2VudGVkLgorICAgICAgICBMb2NrIG1fbG9jazsKKworICAgICAgICBDT01QdHI8SU1GQ2xv
Y2s+IG1fcENsb2NrOyAvLyBQcmVzZW50YXRpb24gY2xvY2suIENhbiBiZSBudWxscHRyLgorICAg
ICAgICBTY2hlZHVsZXJDYWxsYmFjayogbV9wQ0I7IC8vIFdlYWsgcmVmZXJlbmNlOyBkbyBub3Qg
ZGVsZXRlLgorCisgICAgICAgIERXT1JEIG1fZHdUaHJlYWRJRDsKKyAgICAgICAgV2luMzJIYW5k
bGUgbV9oU2NoZWR1bGVyVGhyZWFkOworICAgICAgICBXaW4zMkhhbmRsZSBtX2hUaHJlYWRSZWFk
eUV2ZW50OworICAgICAgICBXaW4zMkhhbmRsZSBtX2hGbHVzaEV2ZW50OworCisgICAgICAgIGZs
b2F0IG1fZlJhdGU7IC8vIFBsYXliYWNrIHJhdGUuCisgICAgICAgIE1GVElNRSBtX1BlckZyYW1l
SW50ZXJ2YWw7IC8vIER1cmF0aW9uIG9mIGVhY2ggZnJhbWUuCisgICAgICAgIExPTkdMT05HIG1f
UGVyRnJhbWVPbmVRdWFydGVyOyAvLyAxLzR0aCBvZiB0aGUgZnJhbWUgZHVyYXRpb24uCisgICAg
ICAgIE1GVElNRSBtX0xhc3RTYW1wbGVUaW1lOyAvLyBNb3N0IHJlY2VudCBzYW1wbGUgdGltZS4K
KyAgICB9OworCisKKyAgICAvLyBTY2hlZHVsZXJDYWxsYmFjaworICAgIC8vCisgICAgLy8gRGVm
aW5lcyB0aGUgY2FsbGJhY2sgbWV0aG9kIHRvIHByZXNlbnQgc2FtcGxlcy4gCisKKyAgICBzdHJ1
Y3QgU2NoZWR1bGVyQ2FsbGJhY2sgeworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgUHJlc2VudFNh
bXBsZShJTUZTYW1wbGUgKnBTYW1wbGUsIExPTkdMT05HIGxsVGFyZ2V0KSA9IDA7CisgICAgfTsK
KworICAgIC8vIEQzRFByZXNlbnRFbmdpbmUgY2xhc3MKKyAgICAvLworICAgIC8vIFRoaXMgY2xh
c3MgY3JlYXRlcyB0aGUgRGlyZWN0M0QgZGV2aWNlLCBhbGxvY2F0ZXMgRGlyZWN0M0Qgc3VyZmFj
ZXMgZm9yCisgICAgLy8gcmVuZGVyaW5nLCBhbmQgcHJlc2VudHMgdGhlIHN1cmZhY2VzLiBUaGlz
IGNsYXNzIGFsc28gb3ducyB0aGUgRGlyZWN0M0QKKyAgICAvLyBkZXZpY2UgbWFuYWdlciBhbmQg
cHJvdmlkZXMgdGhlIElEaXJlY3QzRERldmljZU1hbmFnZXI5IGludGVyZmFjZSB2aWEKKyAgICAv
LyBHZXRTZXJ2aWNlLgorCisgICAgY2xhc3MgRDNEUHJlc2VudEVuZ2luZSA6IHB1YmxpYyBTY2hl
ZHVsZXJDYWxsYmFjayB7CisgICAgcHVibGljOgorCisgICAgICAgIC8vIFN0YXRlIG9mIHRoZSBE
aXJlY3QzRCBkZXZpY2UuCisgICAgICAgIGVudW0gRGV2aWNlU3RhdGUgeworICAgICAgICAgICAg
RGV2aWNlT0ssCisgICAgICAgICAgICBEZXZpY2VSZXNldCwgLy8gVGhlIGRldmljZSB3YXMgcmVz
ZXQgT1IgcmUtY3JlYXRlZC4KKyAgICAgICAgICAgIERldmljZVJlbW92ZWQsIC8vIFRoZSBkZXZp
Y2Ugd2FzIHJlbW92ZWQuCisgICAgICAgIH07CisKKyAgICAgICAgRDNEUHJlc2VudEVuZ2luZShI
UkVTVUxUJik7CisgICAgICAgIHZpcnR1YWwgfkQzRFByZXNlbnRFbmdpbmUoKTsKKworICAgICAg
ICAvLyBHZXRTZXJ2aWNlOiBSZXR1cm5zIHRoZSBJRGlyZWN0M0REZXZpY2VNYW5hZ2VyOSBpbnRl
cmZhY2UuCisgICAgICAgIC8vIChUaGUgc2lnbmF0dXJlIGlzIGlkZW50aWNhbCB0byBJTUZHZXRT
ZXJ2aWNlOjpHZXRTZXJ2aWNlIGJ1dCAKKyAgICAgICAgLy8gdGhpcyBvYmplY3QgZG9lcyBub3Qg
ZGVyaXZlIGZyb20gSVVua25vd24uKQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgR2V0U2Vydmlj
ZShSRUZHVUlEIGd1aWRTZXJ2aWNlLCBSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdik7CisgICAgICAg
IHZpcnR1YWwgSFJFU1VMVCBDaGVja0Zvcm1hdChEM0RGT1JNQVQpOworCisgICAgICAgIC8vIFZp
ZGVvIHdpbmRvdyAvIGRlc3RpbmF0aW9uIHJlY3RhbmdsZToKKyAgICAgICAgLy8gVGhpcyBvYmpl
Y3QgaW1wbGVtZW50cyBhIHN1Yi1zZXQgb2YgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGJ5IHRoZSAK
KyAgICAgICAgLy8gSU1GVmlkZW9EaXNwbGF5Q29udHJvbCBpbnRlcmZhY2UuIEhvd2V2ZXIsIHNv
bWUgb2YgdGhlIG1ldGhvZCBzaWduYXR1cmVzIAorICAgICAgICAvLyBhcmUgZGlmZmVyZW50LiBU
aGUgcHJlc2VudGVyJ3MgaW1wbGVtZW50YXRpb24gb2YgSU1GVmlkZW9EaXNwbGF5Q29udHJvbCAK
KyAgICAgICAgLy8gY2FsbHMgdGhlc2UgbWV0aG9kcy4KKyAgICAgICAgSFJFU1VMVCBTZXRWaWRl
b1dpbmRvdyhIV05EKTsKKyAgICAgICAgSFdORCBHZXRWaWRlb1dpbmRvdygpIGNvbnN0IHsgcmV0
dXJuIG1faHduZDsgfQorICAgICAgICBIUkVTVUxUIFNldERlc3RpbmF0aW9uUmVjdChjb25zdCBS
RUNUJiByY0Rlc3QpOworICAgICAgICBSRUNUIEdldERlc3RpbmF0aW9uUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmNEZXN0UmVjdDsgfTsKKworICAgICAgICBIUkVTVUxUIENyZWF0ZVZpZGVvU2Ft
cGxlcyhJTUZNZWRpYVR5cGUgKnBGb3JtYXQsIFZpZGVvU2FtcGxlTGlzdCYgdmlkZW9TYW1wbGVR
dWV1ZSk7CisgICAgICAgIHZvaWQgUmVsZWFzZVJlc291cmNlcygpOworCisgICAgICAgIEhSRVNV
TFQgQ2hlY2tEZXZpY2VTdGF0ZShEZXZpY2VTdGF0ZSAqcFN0YXRlKTsKKyAgICAgICAgSFJFU1VM
VCBQcmVzZW50U2FtcGxlKElNRlNhbXBsZSogcFNhbXBsZSwgTE9OR0xPTkcgbGxUYXJnZXQpOwor
CisgICAgICAgIFVJTlQgUmVmcmVzaFJhdGUoKSBjb25zdCB7IHJldHVybiBtX0Rpc3BsYXlNb2Rl
LlJlZnJlc2hSYXRlOyB9CisKKyAgICAgICAgdm9pZCBQYWludEN1cnJlbnRGcmFtZShHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAg
SFJFU1VMVCBJbml0aWFsaXplRDNEKCk7CisgICAgICAgIEhSRVNVTFQgR2V0U3dhcENoYWluUHJl
c2VudFBhcmFtZXRlcnMoSU1GTWVkaWFUeXBlICpwVHlwZSwgRDNEUFJFU0VOVF9QQVJBTUVURVJT
KiBwUFApOworICAgICAgICBIUkVTVUxUIENyZWF0ZUQzRERldmljZSgpOworICAgICAgICBIUkVT
VUxUIENyZWF0ZUQzRFNhbXBsZShJRGlyZWN0M0RTd2FwQ2hhaW45ICpwU3dhcENoYWluLCBJTUZT
YW1wbGUgKipwcFZpZGVvU2FtcGxlKTsKKyAgICAgICAgSFJFU1VMVCBVcGRhdGVEZXN0UmVjdCgp
OworCisgICAgICAgIC8vIEEgZGVyaXZlZCBjbGFzcyBjYW4gb3ZlcnJpZGUgdGhlc2UgaGFuZGxl
cnMgdG8gYWxsb2NhdGUgYW55IGFkZGl0aW9uYWwgRDNEIHJlc291cmNlcy4KKyAgICAgICAgdmly
dHVhbCBIUkVTVUxUIE9uQ3JlYXRlVmlkZW9TYW1wbGVzKEQzRFBSRVNFTlRfUEFSQU1FVEVSUyYg
cHApIHsgcmV0dXJuIFNfT0s7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIE9uUmVsZWFzZVJlc291
cmNlcygpIHsgfQorCisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBQcmVzZW50U3dhcENoYWluKElE
aXJlY3QzRFN3YXBDaGFpbjkqIHBTd2FwQ2hhaW4sIElEaXJlY3QzRFN1cmZhY2U5KiBwU3VyZmFj
ZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBQYWludEZyYW1lV2l0aEdESSgpOworCisgICAgcHJv
dGVjdGVkOgorICAgICAgICBVSU5UIG1fRGV2aWNlUmVzZXRUb2tlbjsgLy8gUmVzZXQgdG9rZW4g
Zm9yIHRoZSBEM0QgZGV2aWNlIG1hbmFnZXIuCisgICAgICAgIEhXTkQgbV9od25kOyAvLyBBcHBs
aWNhdGlvbi1wcm92aWRlZCBkZXN0aW5hdGlvbiB3aW5kb3cuCisgICAgICAgIFJFQ1QgbV9yY0Rl
c3RSZWN0OyAvLyBEZXN0aW5hdGlvbiByZWN0YW5nbGUuCisgICAgICAgIEQzRERJU1BMQVlNT0RF
IG1fRGlzcGxheU1vZGU7IC8vIEFkYXB0ZXIncyBkaXNwbGF5IG1vZGUuCisKKyAgICAgICAgTG9j
ayBtX09iamVjdExvY2s7IC8vIFRocmVhZCBsb2NrIGZvciB0aGUgRDNEIGRldmljZS4KKyAgICAg
ICAgCisgICAgICAgIC8vIENPTSBpbnRlcmZhY2VzCisgICAgICAgIENPTVB0cjxJRGlyZWN0M0Q5
RXg+IG1fcEQzRDk7CisgICAgICAgIENPTVB0cjxJRGlyZWN0M0REZXZpY2U5RXg+IG1fcERldmlj
ZTsKKyAgICAgICAgQ09NUHRyPElEaXJlY3QzRERldmljZU1hbmFnZXI5PiBtX3BEZXZpY2VNYW5h
Z2VyOyAvLyBEaXJlY3QzRCBkZXZpY2UgbWFuYWdlci4KKyAgICAgICAgQ09NUHRyPElEaXJlY3Qz
RFN1cmZhY2U5PiBtX3BTdXJmYWNlUmVwYWludDsgLy8gU3VyZmFjZSBmb3IgcmVwYWludCByZXF1
ZXN0cy4KKworICAgICAgICBDT01QdHI8SURpcmVjdDNEU3VyZmFjZTk+IG1fcE1lbVN1cmZhY2U7
CisgICAgICAgIGludCBtX3dpZHRoOworICAgICAgICBpbnQgbV9oZWlnaHQ7CisgICAgfTsKKwor
ICAgIGNsYXNzIEN1c3RvbVZpZGVvUHJlc2VudGVyCisgICAgICAgIDogcHVibGljIElNRlZpZGVv
UHJlc2VudGVyCisgICAgICAgICwgcHVibGljIElNRlZpZGVvRGV2aWNlSUQKKyAgICAgICAgLCBw
dWJsaWMgSU1GVG9wb2xvZ3lTZXJ2aWNlTG9va3VwQ2xpZW50CisgICAgICAgICwgcHVibGljIElN
RkdldFNlcnZpY2UKKyAgICAgICAgLCBwdWJsaWMgSU1GQWN0aXZhdGUKKyAgICAgICAgLCBwdWJs
aWMgSU1GVmlkZW9EaXNwbGF5Q29udHJvbAorICAgICAgICAsIHB1YmxpYyBJTUZBc3luY0NhbGxi
YWNrCisgICAgICAgICwgcHVibGljIE1lZGlhUGxheWVyTGlzdGVuZXIgeworICAgIHB1YmxpYzoK
KyAgICAgICAgQ3VzdG9tVmlkZW9QcmVzZW50ZXIoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uKik7CisgICAgICAgIH5DdXN0b21WaWRlb1ByZXNlbnRlcigpOworCisgICAgICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlp
ZCwgX19SUENfX2RlcmVmX291dCB2b2lkIF9fUlBDX0ZBUiAqX19SUENfRkFSICpwcHZPYmplY3Qp
IG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJl
ZigpIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJl
bGVhc2UoKSBvdmVycmlkZTsKKworICAgICAgICAvLyBJTUZDbG9ja1N0YXRlU2luaworICAgICAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgT25DbG9ja1N0YXJ0KE1GVElNRSBo
bnNTeXN0ZW1UaW1lLCBMT05HTE9ORyBsbENsb2NrU3RhcnRPZmZzZXQpIG92ZXJyaWRlOworICAg
ICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgT25DbG9ja1N0b3AoTUZUSU1F
IGhuc1N5c3RlbVRpbWUpIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgT25DbG9ja1BhdXNlKE1GVElNRSBobnNTeXN0ZW1UaW1lKSBvdmVycmlkZTsK
KyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIE9uQ2xvY2tSZXN0YXJ0
KE1GVElNRSBobnNTeXN0ZW1UaW1lKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIE9uQ2xvY2tTZXRSYXRlKE1GVElNRSBobnNTeXN0ZW1UaW1lLCBm
bG9hdCBmbFJhdGUpIG92ZXJyaWRlOworCisgICAgICAgIC8vIElNRlZpZGVvUHJlc2VudGVyCisg
ICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBQcm9jZXNzTWVzc2FnZShN
RlZQX01FU1NBR0VfVFlQRSBlTWVzc2FnZSwgVUxPTkdfUFRSIHVsUGFyYW0pIG92ZXJyaWRlOwor
ICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0Q3VycmVudE1lZGlh
VHlwZShfT3V0cHRyXyAgSU1GVmlkZW9NZWRpYVR5cGUgKipwcE1lZGlhVHlwZSkgb3ZlcnJpZGU7
CisKKyAgICAgICAgLy8gSU1GVmlkZW9EZXZpY2VJRAorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgR2V0RGV2aWNlSUQoSUlEKiBwRGV2aWNlSUQpIG92ZXJyaWRlOwor
CisgICAgICAgIC8vIElNRlRvcG9sb2d5U2VydmljZUxvb2t1cENsaWVudAorICAgICAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgSW5pdFNlcnZpY2VQb2ludGVycyhfSW5fICBJ
TUZUb3BvbG9neVNlcnZpY2VMb29rdXAgKnBMb29rdXApIG92ZXJyaWRlOworICAgICAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZVNlcnZpY2VQb2ludGVycyh2b2lk
KSBvdmVycmlkZTsKKworICAgICAgICAvLyBJTUZHZXRTZXJ2aWNlCisgICAgICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRTZXJ2aWNlKFJFRkdVSUQgZ3VpZFNlcnZpY2Us
IFJFRklJRCByaWlkLCBMUFZPSUQgKnBwdk9iamVjdCk7CisKKyAgICAgICAgLy8gSU1GQWN0aXZh
dGUKKyAgICAgICAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBBY3RpdmF0ZU9iamVjdChSRUZJ
SUQgcmlpZCwgdm9pZCAqKnBwdik7CisgICAgICAgIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
RGV0YWNoT2JqZWN0KCk7CisgICAgICAgIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2h1dGRv
d25PYmplY3QoKTsKKworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
R2V0SXRlbShfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19faW5vdXRfb3B0IFBST1BW
QVJJQU5UICpwVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0SXRlbVR5cGUoX19SUENfX2luIFJFRkdVSUQgZ3Vp
ZEtleSwgX19SUENfX291dCBNRl9BVFRSSUJVVEVfVFlQRSAqcFR5cGUpIHsgcmV0dXJuIEVfTk9U
SU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ29tcGFy
ZUl0ZW0oX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX2luIFJFRlBST1BWQVJJQU5U
IFZhbHVlLCBfX1JQQ19fb3V0IEJPT0wgKnBiUmVzdWx0KSB7IHJldHVybiBFX05PVElNUEw7IH0K
KyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENvbXBhcmUoX19SUENf
X2luX29wdCBJTUZBdHRyaWJ1dGVzICpwVGhlaXJzLCBNRl9BVFRSSUJVVEVTX01BVENIX1RZUEUg
TWF0Y2hUeXBlLCBfX1JQQ19fb3V0IEJPT0wgKnBiUmVzdWx0KSB7IHJldHVybiBFX05PVElNUEw7
IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFVJTlQzMihf
X1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19fb3V0IFVJTlQzMiAqcHVuVmFsdWUpIHsg
cmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgR2V0VUlOVDY0KF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19vdXQgVUlO
VDY0ICpwdW5WYWx1ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXREb3VibGUoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtl
eSwgX19SUENfX291dCBkb3VibGUgKnBmVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAg
ICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0R1VJRChfX1JQQ19faW4g
UkVGR1VJRCBndWlkS2V5LCBfX1JQQ19fb3V0IEdVSUQgKnBndWlkVmFsdWUpIHsgcmV0dXJuIEVf
Tk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0
U3RyaW5nTGVuZ3RoKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19vdXQgVUlOVDMy
ICpwY2NoTGVuZ3RoKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIEdldFN0cmluZyhfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5
LCBfX1JQQ19fb3V0X2Vjb3VudF9mdWxsKGNjaEJ1ZlNpemUpIExQV1NUUiBwd3N6VmFsdWUsIFVJ
TlQzMiBjY2hCdWZTaXplLCBfX1JQQ19faW5vdXRfb3B0IFVJTlQzMiAqcGNjaExlbmd0aCkgeyBy
ZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBHZXRBbGxvY2F0ZWRTdHJpbmcoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENf
X2RlcmVmX291dF9lY291bnRfZnVsbF9vcHQoKCpwY2NoTGVuZ3RoICsgMSkpIExQV1NUUiAqcHB3
c3pWYWx1ZSwgX19SUENfX291dCBVSU5UMzIgKnBjY2hMZW5ndGgpIHsgcmV0dXJuIEVfTk9USU1Q
TDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0QmxvYlNp
emUoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX291dCBVSU5UMzIgKnBjYkJsb2JT
aXplKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIEdldEJsb2IoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX291
dF9lY291bnRfZnVsbChjYkJ1ZlNpemUpIFVJTlQ4ICpwQnVmLCBVSU5UMzIgY2JCdWZTaXplLCBf
X1JQQ19faW5vdXRfb3B0IFVJTlQzMiAqcGNiQmxvYlNpemUpIHsgcmV0dXJuIEVfTk9USU1QTDsg
fQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0QWxsb2NhdGVk
QmxvYihfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19fZGVyZWZfb3V0X2Vjb3VudF9m
dWxsX29wdCgqcGNiU2l6ZSkgVUlOVDggKipwcEJ1ZiwgX19SUENfX291dCBVSU5UMzIgKnBjYlNp
emUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgR2V0VW5rbm93bihfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19f
aW4gUkVGSUlEIHJpaWQsIF9fUlBDX19kZXJlZl9vdXRfb3B0IExQVk9JRCAqcHB2KSB7IHJldHVy
biBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFNldEl0ZW0oX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX2luIFJFRlBST1BWQVJJ
QU5UIFZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIERlbGV0ZUl0ZW0oX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSkg
eyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBEZWxldGVBbGxJdGVtcyh2b2lkKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldFVJTlQzMihfX1JQQ19faW4g
UkVGR1VJRCBndWlkS2V5LCBVSU5UMzIgdW5WYWx1ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9Cisg
ICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRVSU5UNjQoX19SUENf
X2luIFJFRkdVSUQgZ3VpZEtleSwgVUlOVDY0IHVuVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsg
fQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0RG91YmxlKF9f
UlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIGRvdWJsZSBmVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1Q
TDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0R1VJRChf
X1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19faW4gUkVGR1VJRCBndWlkVmFsdWUpIHsg
cmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgU2V0U3RyaW5nKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19pbl9zdHJp
bmcgTFBDV1NUUiB3c3pWYWx1ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRCbG9iKF9fUlBDX19pbiBSRUZHVUlEIGd1
aWRLZXksIF9fUlBDX19pbl9lY291bnRfZnVsbChjYkJ1ZlNpemUpIGNvbnN0IFVJTlQ4ICpwQnVm
LCBVSU5UMzIgY2JCdWZTaXplKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldFVua25vd24oX19SUENfX2luIFJFRkdVSUQg
Z3VpZEtleSwgX19SUENfX2luX29wdCBJVW5rbm93biAqcFVua25vd24pIHsgcmV0dXJuIEVfTk9U
SU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgTG9ja1N0
b3JlKHZvaWQpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgVW5sb2NrU3RvcmUodm9pZCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9
CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRDb3VudChfX1JQ
Q19fb3V0IFVJTlQzMiAqcGNJdGVtcykgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRJdGVtQnlJbmRleChVSU5UMzIgdW5J
bmRleCwgX19SUENfX291dCBHVUlEICpwZ3VpZEtleSwgX19SUENfX2lub3V0X29wdCBQUk9QVkFS
SUFOVCAqcFZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIENvcHlBbGxJdGVtcyhfX1JQQ19faW5fb3B0IElNRkF0dHJp
YnV0ZXMgKnBEZXN0KSB7IHJldHVybiBFX05PVElNUEw7IH0KKworICAgICAgICAvLyBJTUZWaWRl
b0Rpc3BsYXlDb250cm9sCisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBHZXROYXRpdmVWaWRlb1NpemUoU0laRSogcHN6VmlkZW8sIFNJWkUqIHBzekFSVmlkZW8pIHsg
cmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgR2V0SWRlYWxWaWRlb1NpemUoU0laRSogcHN6TWluLCBTSVpFKiBwc3pNYXgpIHsgcmV0
dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgU2V0VmlkZW9Qb3NpdGlvbihjb25zdCBNRlZpZGVvTm9ybWFsaXplZFJlY3QqIHBucmNTb3Vy
Y2UsIGNvbnN0IExQUkVDVCBwcmNEZXN0KTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIEdldFZpZGVvUG9zaXRpb24oTUZWaWRlb05vcm1hbGl6ZWRSZWN0KiBwbnJj
U291cmNlLCBMUFJFQ1QgcHJjRGVzdCk7CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBTZXRBc3BlY3RSYXRpb01vZGUoRFdPUkQgZHdBc3BlY3RSYXRpb01vZGUpIHsg
cmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgR2V0QXNwZWN0UmF0aW9Nb2RlKERXT1JEKiBwZHdBc3BlY3RSYXRpb01vZGUpIHsgcmV0
dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgU2V0VmlkZW9XaW5kb3coSFdORCBod25kVmlkZW8pOworICAgICAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VmlkZW9XaW5kb3coSFdORCogcGh3bmRWaWRlbyk7Cisg
ICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBSZXBhaW50VmlkZW8oKTsK
KyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldEN1cnJlbnRJbWFn
ZShCSVRNQVBJTkZPSEVBREVSKiBwQmloLCBCWVRFKiogcERpYiwgRFdPUkQqIHBjYkRpYiwgTE9O
R0xPTkcqIHBUaW1lU3RhbXApIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0Qm9yZGVyQ29sb3IoQ09MT1JSRUYgQ2xyKSB7
IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIEdldEJvcmRlckNvbG9yKENPTE9SUkVGKiBwQ2xyKSB7IHJldHVybiBFX05PVElNUEw7
IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldFJlbmRlcmlu
Z1ByZWZzKERXT1JEIGR3UmVuZGVyRmxhZ3MpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0UmVuZGVyaW5nUHJlZnMoRFdP
UkQqIHBkd1JlbmRlckZsYWdzKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldEZ1bGxzY3JlZW4oQk9PTCBiRnVsbHNjcmVl
bikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBHZXRGdWxsc2NyZWVuKEJPT0wqIHBiRnVsbHNjcmVlbikgeyByZXR1cm4gRV9O
T1RJTVBMOyB9CisKKyAgICAgICAgLy8gSU1GQXN5bmNDYWxsYmFjayBtZXRob2RzCisgICAgICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRQYXJhbWV0ZXJzKERXT1JEKiwg
RFdPUkQqKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEludm9rZShJTUZBc3luY1Jlc3VsdCogcEFzeW5jUmVzdWx0KTsKKwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgb25NZWRpYVBsYXllckRlbGV0ZWQoKSBvdmVycmlkZTsKKwor
ICAgICAgICB2b2lkIHBhaW50Q3VycmVudEZyYW1lKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVUxPTkcgbV9yZWZDb3VudCB7IDAg
fTsKKyAgICAgICAgTG9jayBtX29iamVjdExvY2s7CisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbiogbV9tZWRpYVBsYXllcjsKKworICAgICAgICBlbnVtIFJFTkRFUl9T
VEFURSB7CisgICAgICAgICAgICBSRU5ERVJfU1RBVEVfU1RBUlRFRCA9IDEsCisgICAgICAgICAg
ICBSRU5ERVJfU1RBVEVfU1RPUFBFRCwKKyAgICAgICAgICAgIFJFTkRFUl9TVEFURV9QQVVTRUQs
CisgICAgICAgICAgICBSRU5ERVJfU1RBVEVfU0hVVERPV04sIC8vIEluaXRpYWwgc3RhdGUuCisg
ICAgICAgIH07CisKKyAgICAgICAgLy8gRlJBTUVTVEVQX1NUQVRFOiBEZWZpbmVzIHRoZSBwcmVz
ZW50ZXIncyBzdGF0ZSB3aXRoIHJlc3BlY3QgdG8gZnJhbWUtc3RlcHBpbmcuCisgICAgICAgIGVu
dW0gRlJBTUVTVEVQX1NUQVRFIHsKKyAgICAgICAgICAgIEZSQU1FU1RFUF9OT05FLCAvLyBOb3Qg
ZnJhbWUgc3RlcHBpbmcuCisgICAgICAgICAgICBGUkFNRVNURVBfV0FJVElOR19TVEFSVCwgLy8g
RnJhbWUgc3RlcHBpbmcsIGJ1dCB0aGUgY2xvY2sgaXMgbm90IHN0YXJ0ZWQuCisgICAgICAgICAg
ICBGUkFNRVNURVBfUEVORElORywgLy8gQ2xvY2sgaXMgc3RhcnRlZC4gV2FpdGluZyBmb3Igc2Ft
cGxlcy4KKyAgICAgICAgICAgIEZSQU1FU1RFUF9TQ0hFRFVMRUQsIC8vIFN1Ym1pdHRlZCBhIHNh
bXBsZSBmb3IgcmVuZGVyaW5nLgorICAgICAgICAgICAgRlJBTUVTVEVQX0NPTVBMRVRFIC8vIFNh
bXBsZSB3YXMgcmVuZGVyZWQuIAorCisgICAgICAgICAgICAvLyBTdGF0ZSB0cmFuc2l0aW9uczoK
KworICAgICAgICAgICAgLy8gTUZWUF9NRVNTQUdFX1NURVAgICAgICAgICAgICAgICAgLT4gV0FJ
VElOR19TVEFSVAorICAgICAgICAgICAgLy8gT25DbG9ja1N0YXJ0L09uQ2xvY2tSZXN0YXJ0ICAg
ICAgLT4gUEVORElORworICAgICAgICAgICAgLy8gTUZWUF9NRVNTQUdFX1BST0NFU1NJTlBVVE5P
VElGWSAgLT4gU1VCTUlUVEVECisgICAgICAgICAgICAvLyBPblNhbXBsZUZyZWUgICAgICAgICAg
ICAgICAgICAgICAtPiBDT01QTEVURQorICAgICAgICAgICAgLy8gTUZWUF9NRVNTQUdFX0NBTkNF
TCAgICAgICAgICAgICAgLT4gTk9ORQorICAgICAgICAgICAgLy8gT25DbG9ja1N0b3AgICAgICAg
ICAgICAgICAgICAgICAgLT4gTk9ORQorICAgICAgICAgICAgLy8gT25DbG9ja1NldFJhdGUoIG5v
bi16ZXJvICkgICAgICAgLT4gTk9ORQorICAgICAgICB9OworCisgICAgICAgIC8vIEZyYW1lU3Rl
cDogSG9sZHMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBmcmFtZS1zdGVwcGluZy4gCisgICAgICAg
IC8vIE5vdGU6IFRoZSBwdXJwb3NlIG9mIHRoaXMgc3RydWN0dXJlIGlzIHNpbXBseSB0byBvcmdh
bml6ZSB0aGUgZGF0YSBpbiBvbmUgdmFyaWFibGUuCisgICAgICAgIHN0cnVjdCBGcmFtZVN0ZXAg
eworICAgICAgICAgICAgRnJhbWVTdGVwKCkKKyAgICAgICAgICAgICAgICA6IHN0YXRlKEZSQU1F
U1RFUF9OT05FKQorICAgICAgICAgICAgICAgICwgc3RlcHMoMCkKKyAgICAgICAgICAgICAgICAs
IHBTYW1wbGVOb1JlZigwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBGUkFNRVNURVBfU1RBVEUgc3RhdGU7IC8vIEN1cnJlbnQgZnJhbWUtc3RlcCBzdGF0ZS4K
KyAgICAgICAgICAgIFZpZGVvU2FtcGxlTGlzdCBzYW1wbGVzOyAvLyBMaXN0IG9mIHBlbmRpbmcg
c2FtcGxlcyBmb3IgZnJhbWUtc3RlcHBpbmcuCisgICAgICAgICAgICBEV09SRCBzdGVwczsgLy8g
TnVtYmVyIG9mIHN0ZXBzIGxlZnQuCisgICAgICAgICAgICBEV09SRF9QVFIgcFNhbXBsZU5vUmVm
OyAvLyBJZGVudGlmaWVzIHRoZSBmcmFtZS1zdGVwIHNhbXBsZS4KKyAgICAgICAgfTsKKworICAg
ICAgICBSRU5ERVJfU1RBVEUgbV9SZW5kZXJTdGF0ZSB7IFJFTkRFUl9TVEFURV9TSFVURE9XTiB9
OworICAgICAgICBDT01QdHI8SU1GQ2xvY2s+IG1fcENsb2NrOworICAgICAgICBDT01QdHI8SU1l
ZGlhRXZlbnRTaW5rPiBtX3BNZWRpYUV2ZW50U2luazsKKyAgICAgICAgQ09NUHRyPElNRlRyYW5z
Zm9ybT4gbV9wTWl4ZXI7CisgICAgICAgIENPTVB0cjxJTUZNZWRpYVR5cGU+IG1fcE1lZGlhVHlw
ZTsKKyAgICAgICAgRDNEUHJlc2VudEVuZ2luZSogbV9wRDNEUHJlc2VudEVuZ2luZSB7IG51bGxw
dHIgfTsKKyAgICAgICAgTUZWaWRlb05vcm1hbGl6ZWRSZWN0IG1fbnJjU291cmNlOworICAgICAg
ICBib29sIG1fYlNhbXBsZU5vdGlmeSB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9iUHJlcm9s
bGVkIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2JSZXBhaW50IHsgZmFsc2UgfTsKKyAgICAg
ICAgYm9vbCBtX2JFbmRTdHJlYW1pbmcgeyBmYWxzZSB9OworICAgICAgICBTY2hlZHVsZXIgbV9z
Y2hlZHVsZXI7CisgICAgICAgIFNhbXBsZVBvb2wgbV9TYW1wbGVQb29sOworICAgICAgICB1bnNp
Z25lZCBtX1Rva2VuQ291bnRlciB7IDAgfTsKKyAgICAgICAgRnJhbWVTdGVwIG1fRnJhbWVTdGVw
OworICAgICAgICBmbG9hdCBtX2ZSYXRlIHsgMS4wZiB9OworCisgICAgICAgIGJvb2wgSXNBY3Rp
dmUoKTsKKworICAgICAgICAvLyBJc1NjcnViYmluZzogU2NydWJiaW5nIG9jY3VycyB3aGVuIHRo
ZSBmcmFtZSByYXRlIGlzIDAuCisgICAgICAgIGlubGluZSBCT09MIElzU2NydWJiaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9mUmF0ZSA9PSAwLjBmOyB9CisKKyAgICAgICAgSFJFU1VMVCBDb25maWd1
cmVNaXhlcihJTUZUcmFuc2Zvcm0gKnBNaXhlcik7CisgICAgICAgIEhSRVNVTFQgRmx1c2goKTsK
KyAgICAgICAgSFJFU1VMVCBTZXRNZWRpYVR5cGUoSU1GTWVkaWFUeXBlICpwTWVkaWFUeXBlKTsK
KyAgICAgICAgSFJFU1VMVCBDaGVja1NodXRkb3duKCkgY29uc3Q7CisgICAgICAgIEhSRVNVTFQg
UmVuZWdvdGlhdGVNZWRpYVR5cGUoKTsKKyAgICAgICAgSFJFU1VMVCBQcm9jZXNzSW5wdXROb3Rp
ZnkoKTsKKyAgICAgICAgSFJFU1VMVCBCZWdpblN0cmVhbWluZygpOworICAgICAgICBIUkVTVUxU
IEVuZFN0cmVhbWluZygpOworICAgICAgICBIUkVTVUxUIENoZWNrRW5kT2ZTdHJlYW0oKTsKKyAg
ICAgICAgSFJFU1VMVCBJc01lZGlhVHlwZVN1cHBvcnRlZChJTUZNZWRpYVR5cGUgKnBNZWRpYVR5
cGUpOworICAgICAgICBIUkVTVUxUIENyZWF0ZU9wdGltYWxWaWRlb1R5cGUoSU1GTWVkaWFUeXBl
KiBwUHJvcG9zZWRUeXBlLCBJTUZNZWRpYVR5cGUgKipwcE9wdGltYWxUeXBlKTsKKyAgICAgICAg
SFJFU1VMVCBDYWxjdWxhdGVPdXRwdXRSZWN0YW5nbGUoSU1GTWVkaWFUeXBlICpwUHJvcG9zZWRU
eXBlLCBSRUNUICpwcmNPdXRwdXQpOworCisgICAgICAgIEhSRVNVTFQgUHJlcGFyZUZyYW1lU3Rl
cChEV09SRCBjU3RlcHMpOworICAgICAgICBIUkVTVUxUIFN0YXJ0RnJhbWVTdGVwKCk7CisgICAg
ICAgIEhSRVNVTFQgRGVsaXZlckZyYW1lU3RlcFNhbXBsZShJTUZTYW1wbGUgKnBTYW1wbGUpOwor
ICAgICAgICBIUkVTVUxUIENvbXBsZXRlRnJhbWVTdGVwKElNRlNhbXBsZSAqcFNhbXBsZSk7Cisg
ICAgICAgIEhSRVNVTFQgQ2FuY2VsRnJhbWVTdGVwKCk7CisKKyAgICAgICAgdm9pZCBQcm9jZXNz
T3V0cHV0TG9vcCgpOworICAgICAgICBIUkVTVUxUIFByb2Nlc3NPdXRwdXQoKTsKKyAgICAgICAg
SFJFU1VMVCBEZWxpdmVyU2FtcGxlKElNRlNhbXBsZSAqcFNhbXBsZSwgQk9PTCBiUmVwYWludCk7
CisgICAgICAgIEhSRVNVTFQgVHJhY2tTYW1wbGUoSU1GU2FtcGxlICpwU2FtcGxlKTsKKyAgICAg
ICAgdm9pZCBSZWxlYXNlUmVzb3VyY2VzKCk7CisKKyAgICAgICAgSFJFU1VMVCBPblNhbXBsZUZy
ZWUoSU1GQXN5bmNSZXN1bHQgKnBSZXN1bHQpOworCisgICAgICAgIHZvaWQgTm90aWZ5RXZlbnQo
bG9uZyBFdmVudENvZGUsIExPTkdfUFRSIFBhcmFtMSwgTE9OR19QVFIgUGFyYW0yKTsKKworICAg
IH07CisKKyAgICBDT01QdHI8Q3VzdG9tVmlkZW9QcmVzZW50ZXI+IG1fcHJlc2VudGVyOwogfTsK
IAogfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265044</attachid>
            <date>2015-11-09 06:29:54 -0800</date>
            <delta_ts>2015-11-09 07:25:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150941-20151109152952.patch</filename>
            <type>text/plain</type>
            <size>139059</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MjE1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5NiBAQAorMjAxNS0xMS0wOSAgUGVyIEFy
bmUgVm9sbGFuICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXVtWaWRl
b11bTWVkaWFGb3VuZGF0aW9uXSBWaWRlbyBzaG91bGQgYmUgcmVuZGVyZWQgaW4gcHJvdmlkZWQg
Z3JhcGhpY3MgY29udGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDk0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE9uIFdpbkNhaXJvLCB3ZSBjdXJyZW50bHkgcmVuZGVyIHZpZGVvIGluIGEgY2hp
bGQgd2luZG93IG9mIHRoZSBtYWluIGJyb3dzZXIgd2luZG93LgorICAgICAgICBUaGlzIG1ha2Vz
IGl0IGRpZmZpY3VsdCB0byByZW5kZXIgdGhpbmdzIG9uIHRvcCBvZiB0aGUgdmlkZW8sIGxpa2Ug
dmlkZW8gY29udHJvbHMgYW5kCisgICAgICAgIGNvbnRleHQgbWVudXMuIFdlIHNob3VsZCByZW5k
ZXIgdGhlIHZpZGVvIGluIHRoZSBncmFwaGljcyBjb250ZXh0IHByb3ZpZGVkIGJ5IHRoZSBwYWlu
dAorICAgICAgICBtZXRob2QuIFRoaXMgaXMgZG9uZSBieSBpbXBsZW1lbnRpbmcgYSBjdXN0b20g
RVZSIChFbmhhbmNlZCBWaWRlbyBSZW5kZXJlcikgcHJlc2VudGVyCisgICAgICAgIGZvciBNZWRp
YSBGb3VuZGF0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhRm91
bmRhdGlvblV0aWxzLmg6IEFkZGVkLgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1G
VGltZVRvTWlsbGlzZWNvbmRzKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpBcmVD
b21PYmplY3RzRXF1YWwpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlw
ZTo6SXNWYWxpZCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpH
ZXRNZWRpYVR5cGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6
TWVkaWFUeXBlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6On5N
ZWRpYVR5cGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6Om9wZXJh
dG9yJik6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpvcGVyYXRv
ciBJTUZNZWRpYVR5cGUqKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5
cGU6OkNyZWF0ZUVtcHR5VHlwZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVk
aWFUeXBlOjpEZXRhY2gpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlw
ZTo6R2V0TWFqb3JUeXBlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5
cGU6OklzQ29tcHJlc3NlZEZvcm1hdCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6
TWVkaWFUeXBlOjpJc0VxdWFsKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRp
YVR5cGU6OkdldFJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxz
OjpNZWRpYVR5cGU6OkZyZWVSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChNZWRpYUZvdW5kYXRp
b25VdGlsczo6TWVkaWFUeXBlOjpDb3B5RnJvbSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25V
dGlsczo6TWVkaWFUeXBlOjpTZXRNYWpvclR5cGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9u
VXRpbHM6Ok1lZGlhVHlwZTo6R2V0U3ViVHlwZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25V
dGlsczo6TWVkaWFUeXBlOjpTZXRTdWJUeXBlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0
aWxzOjpNZWRpYVR5cGU6OkdldEZvdXJDQyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6TWVkaWFUeXBlOjpHZXRBbGxTYW1wbGVzSW5kZXBlbmRlbnQpOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6U2V0QWxsU2FtcGxlc0luZGVwZW5kZW50KToKKyAg
ICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6OkdldEZpeGVkU2l6ZVNhbXBs
ZXMpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6U2V0Rml4ZWRT
aXplU2FtcGxlcyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpH
ZXRTYW1wbGVTaXplKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6
OlNldFNhbXBsZVNpemUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlw
ZTo6VW53cmFwKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6OkFs
bFNhbXBsZXNJbmRlcGVuZGVudCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVk
aWFUeXBlOjpGaXhlZFNpemVTYW1wbGVzKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxz
OjpNZWRpYVR5cGU6OlNhbXBsZVNpemUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6
OlZpZGVvVHlwZTo6VmlkZW9UeXBlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpW
aWRlb1R5cGU6OkNyZWF0ZUVtcHR5VHlwZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6VmlkZW9UeXBlOjpHZXRJbnRlcmxhY2VNb2RlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlv
blV0aWxzOjpWaWRlb1R5cGU6OlNldEludGVybGFjZU1vZGUpOgorICAgICAgICAoTWVkaWFGb3Vu
ZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0RGVmYXVsdFN0cmlkZSk6CisgICAgICAgIChNZWRp
YUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXREZWZhdWx0U3RyaWRlKToKKyAgICAgICAg
KE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldEZyYW1lRGltZW5zaW9ucyk6Cisg
ICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRGcmFtZURpbWVuc2lv
bnMpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0RGF0YUJp
dEVycm9yUmF0ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpT
ZXREYXRhQml0RXJyb3JSYXRlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRl
b1R5cGU6OkdldEF2ZXJhZ2VCaXRSYXRlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxz
OjpWaWRlb1R5cGU6OlNldEF2Z2VyYWdlQml0UmF0ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRp
b25VdGlsczo6VmlkZW9UeXBlOjpHZXRDdXN0b21WaWRlb1ByaW1hcmllcyk6CisgICAgICAgIChN
ZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRDdXN0b21WaWRlb1ByaW1hcmllcyk6
CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRGcmFtZVJhdGUp
OgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0RnJhbWVSYXRl
KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldEdlb21ldHJp
Y0FwZXJ0dXJlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OlNl
dEdlb21ldHJpY0FwZXJ0dXJlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRl
b1R5cGU6OkdldE1heEtleWZyYW1lU3BhY2luZyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25V
dGlsczo6VmlkZW9UeXBlOjpTZXRNYXhLZXlmcmFtZVNwYWNpbmcpOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0TWluRGlzcGxheUFwZXJ0dXJlKToKKyAgICAg
ICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OlNldE1pbkRpc3BsYXlBcGVydHVy
ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRQYWRDb250
cm9sRmxhZ3MpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0
UGFkQ29udHJvbEZsYWdzKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5
cGU6OkdldFBhbGV0dGVFbnRyaWVzKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpW
aWRlb1R5cGU6OlNldFBhbGV0dGVFbnRyaWVzKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0
aWxzOjpWaWRlb1R5cGU6OkdldE51bVBhbGV0dGVFbnRyaWVzKToKKyAgICAgICAgKE1lZGlhRm91
bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldFBhblNjYW5BcGVydHVyZSk6CisgICAgICAgIChN
ZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRQYW5TY2FuQXBlcnR1cmUpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6SXNQYW5TY2FuRW5hYmxlZCk6
CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRQYW5TY2FuRW5h
YmxlZCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRQaXhl
bEFzcGVjdFJhdGlvKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6
OlNldFBpeGVsQXNwZWN0UmF0aW8pOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZp
ZGVvVHlwZTo6R2V0U291cmNlQ29udGVudEhpbnQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9u
VXRpbHM6OlZpZGVvVHlwZTo6U2V0U291cmNlQ29udGVudEhpbnQpOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0VHJhbnNmZXJGdW5jdGlvbik6CisgICAgICAg
IChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRUcmFuc2ZlckZ1bmN0aW9uKToK
KyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldENocm9tYVNpdGlu
Zyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRDaHJvbWFT
aXRpbmcpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0Vmlk
ZW9MaWdodGluZyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpT
ZXRWaWRlb0xpZ2h0aW5nKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5
cGU6OkdldFZpZGVvTm9taW5hbFJhbmdlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxz
OjpWaWRlb1R5cGU6OlNldFZpZGVvTm9taW5hbFJhbmdlKToKKyAgICAgICAgKE1lZGlhRm91bmRh
dGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldFZpZGVvUHJpbWFyaWVzKToKKyAgICAgICAgKE1lZGlh
Rm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OlNldFZpZGVvUHJpbWFyaWVzKToKKyAgICAgICAg
KE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldFlVVk1hdHJpeCk6CisgICAgICAg
IChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRZVVZNYXRyaXgpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0VmlkZW9EaXNwbGF5QXJlYSk6
CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXVkaW9UeXBlOjpBdWRpb1R5cGUpOgor
ICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6Q3JlYXRlRW1wdHlUeXBl
KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OkdldEF2Z2VyYWdl
Qnl0ZXNQZXJTZWNvbmQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlw
ZTo6U2V0QXZnZXJhZ2VCeXRlc1BlclNlY29uZCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25V
dGlsczo6QXVkaW9UeXBlOjpHZXRCaXRzUGVyU2FtcGxlKToKKyAgICAgICAgKE1lZGlhRm91bmRh
dGlvblV0aWxzOjpBdWRpb1R5cGU6OlNldEJpdHNQZXJTYW1wbGUpOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6R2V0QmxvY2tBbGlnbm1lbnQpOgorICAgICAgICAo
TWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6U2V0QmxvY2tBbGlnbm1lbnQpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6R2V0Q2hhbm5lbE1hc2spOgor
ICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6U2V0Q2hhbm5lbE1hc2sp
OgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6R2V0RmxvYXRTYW1w
bGVzUGVyU2Vjb25kKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6
OlNldEZsb2F0U2FtcGxlc1BlclNlY29uZCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6QXVkaW9UeXBlOjpHZXROdW1DaGFubmVscyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25V
dGlsczo6QXVkaW9UeXBlOjpTZXROdW1DaGFubmVscyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRp
b25VdGlsczo6QXVkaW9UeXBlOjpHZXRTYW1wbGVzUGVyQmxvY2spOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6U2V0U2FtcGxlc1BlckJsb2NrKToKKyAgICAgICAg
KE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OkdldFNhbXBsZXNQZXJTZWNvbmQpOgor
ICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6U2V0U2FtcGxlc1BlclNl
Y29uZCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXVkaW9UeXBlOjpHZXRWYWxp
ZEJpdHNQZXJTYW1wbGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlw
ZTo6U2V0VmFsaWRCaXRzUGVyU2FtcGxlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxz
OjpBdWRpb1R5cGU6OkF2Z2VyYWdlQnl0ZXNQZXJTZWNvbmQpOgorICAgICAgICAoTWVkaWFGb3Vu
ZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6Qml0c1BlclNhbXBsZSk6CisgICAgICAgIChNZWRpYUZv
dW5kYXRpb25VdGlsczo6QXVkaW9UeXBlOjpGbG9hdFNhbXBsZXNQZXJTZWNvbmQpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6TnVtQ2hhbm5lbHMpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6U2FtcGxlc1BlclNlY29uZCk6Cisg
ICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TVBFR1ZpZGVvVHlwZTo6TVBFR1ZpZGVvVHlw
ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TVBFR1ZpZGVvVHlwZTo6R2V0TXBl
Z1NlcUhlYWRlcik6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TVBFR1ZpZGVvVHlw
ZTo6U2V0TXBlZ1NlcUhlYWRlcik6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TVBF
R1ZpZGVvVHlwZTo6R2V0TXBlZ1NlcUhlYWRlclNpemUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0
aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6OkdldFN0YXJ0VGltZUNvZGUpOgorICAgICAgICAoTWVk
aWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6OlNldFN0YXJ0VGltZUNvZGUpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6OkdldE1QRUcyRmxhZ3Mp
OgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6OlNldE1QRUcy
RmxhZ3MpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6Okdl
dE1QRUcyTGV2ZWwpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5
cGU6OlNldE1QRUcyTGV2ZWwpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdW
aWRlb1R5cGU6OkdldE1QRUcyUHJvZmlsZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6TVBFR1ZpZGVvVHlwZTo6U2V0TVBFRzJQcm9maWxlKToKKyAgICAgICAgKE1lZGlhRm91bmRh
dGlvblV0aWxzOjpNYWtlT2Zmc2V0KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpN
Rk9mZnNldFRvRmxvYXQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1ha2VBcmVh
KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpHZXRGcmFtZVJhdGUpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkdldFZpZGVvRGlzcGxheUFyZWEpOgorICAgICAgICAo
TWVkaWFGb3VuZGF0aW9uVXRpbHM6OkdldERlZmF1bHRTdHJpZGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwOgor
ICAgICAgICAoTUZDcmVhdGVNZWRpYVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6aXNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVTZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
ZW5kR2V0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpjcmVhdGVWaWRlb1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmRlc3Ryb3lWaWRlb1dpbmRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmludmFsaWRhdGVG
cmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZU91dHB1dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpvblRvcG9sb2d5U2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxs
YmFjazo6b25NZWRpYVBsYXllckRlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Q3VzdG9tVmlk
ZW9QcmVzZW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6fkN1c3RvbVZpZGVvUHJlc2VudGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkFk
ZFJlZik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpSZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9u
Q2xvY2tTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpPbkNsb2NrU3RvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpPbkNsb2NrUGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1Jlc3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpD
dXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1NldFJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6
UHJvY2Vzc01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0Q3VycmVudE1lZGlhVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1
c3RvbVZpZGVvUHJlc2VudGVyOjpHZXREZXZpY2VJRCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpJbml0
U2VydmljZVBvaW50ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlJlbGVhc2VTZXJ2aWNlUG9pbnRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0U2VydmljZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpB
Y3RpdmF0ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpEZXRhY2hPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6U2h1dGRvd25PYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0VmlkZW9X
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VmlkZW9XaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0TWl4ZXJTb3VyY2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldFZpZGVvUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VmlkZW9Qb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpSZXBhaW50VmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6SW52b2tlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlk
ZW9QcmVzZW50ZXI6Om9uTWVkaWFQbGF5ZXJEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OnBh
aW50Q3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmlzQWN0aXZlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OmNvbmZpZ3VyZU1peGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmZsdXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFyZU1lZGlhVHlwZXNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpz
ZXRNZWRpYVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Y2hlY2tTaHV0ZG93bik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpyZW5lZ290aWF0ZU1lZGlhVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpwcm9j
ZXNzSW5wdXROb3RpZnkpOgorICAgICAgICAoV2ViQ29yZTo6dmFsaWRhdGVWaWRlb0FyZWEpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6YmVnaW5TdHJlYW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6ZW5k
U3RyZWFtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmNoZWNrRW5kT2ZTdHJlYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6aXNNZWRpYVR5cGVTdXBwb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Y3Jl
YXRlT3B0aW1hbFZpZGVvVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpjb3JyZWN0QXNwZWN0UmF0
aW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Y2FsY3VsYXRlT3V0cHV0UmVjdGFuZ2xlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlk
ZW9QcmVzZW50ZXI6OnByb2Nlc3NPdXRwdXRMb29wKToKKyAgICAgICAgKFdlYkNvcmU6OnNldERl
c2lyZWRTYW1wbGVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyRGVzaXJlZFNhbXBsZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6cHJvY2Vzc091dHB1dCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpkZWxpdmVyU2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OnRyYWNrU2FtcGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlk
ZW9QcmVzZW50ZXI6OnJlbGVhc2VSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6b25TYW1w
bGVGcmVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Om5vdGlmeUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TYW1wbGVQb29sOjpn
ZXRTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6OnJldHVyblNhbXBsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2FtcGxlUG9vbDo6YXJl
U2FtcGxlc1BlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6OmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6
OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6VmlkZW9TY2hlZHVsZXI6OnNldEZyYW1lUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpzdGFydFNj
aGVkdWxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OlZpZGVvU2NoZWR1bGVyOjpzdG9wU2NoZWR1bGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OmZsdXNo
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
VmlkZW9TY2hlZHVsZXI6OnNjaGVkdWxlU2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OnByb2Nlc3NTYW1w
bGVzSW5RdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpwcm9jZXNzU2FtcGxlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OnNj
aGVkdWxlclRocmVhZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6c2NoZWR1bGVyVGhyZWFkUHJvY1ByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6RGly
ZWN0M0RQcmVzZW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6fkRpcmVjdDNEUHJlc2VudGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0
M0RQcmVzZW50ZXI6OmdldFNlcnZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6Y2hlY2tGb3JtYXQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJl
Y3QzRFByZXNlbnRlcjo6c2V0VmlkZW9XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6c2V0RGVzdGlu
YXRpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6OmNyZWF0ZVZpZGVvU2FtcGxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJl
c2VudGVyOjpyZWxlYXNlUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6OmNoZWNrRGV2aWNlU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpEaXJlY3QzRFByZXNlbnRlcjo6cHJlc2VudFNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpwYWlu
dEN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjppbml0aWFsaXplRDNEKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVz
ZW50ZXI6OmNyZWF0ZUQzRERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpjcmVhdGVEM0RTYW1wbGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpE
aXJlY3QzRFByZXNlbnRlcjo6cHJlc2VudFN3YXBDaGFpbik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpnZXRT
d2FwQ2hhaW5QcmVzZW50UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjp1cGRhdGVEZXN0UmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6OlZpZGVvU2FtcGxlUG9vbCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2FtcGxl
UG9vbDo6flZpZGVvU2FtcGxlUG9vbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpWaWRlb1NjaGVkdWxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVv
U2NoZWR1bGVyOjp+VmlkZW9TY2hlZHVsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6c2V0UHJlc2VudGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Vmlk
ZW9TY2hlZHVsZXI6OnNldENsb2NrUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpsYXN0U2FtcGxlVGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZp
ZGVvU2NoZWR1bGVyOjpmcmFtZUR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6OmdldFZpZGVvV2lu
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6RGlyZWN0M0RQcmVzZW50ZXI6OmdldERlc3RpbmF0aW9uUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVy
OjpyZWZyZXNoUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OkdldEl0ZW1UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNvbXBhcmVJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9t
VmlkZW9QcmVzZW50ZXI6OkNvbXBhcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VUlOVDMyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OkdldFVJTlQ2NCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXREb3Vi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0R1VJRCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRT
dHJpbmdMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0U3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OkdldEFsbG9jYXRlZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRCbG9iU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEFs
bG9jYXRlZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VW5rbm93bik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpTZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkRlbGV0ZUl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6RGVsZXRlQWxsSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0VUlOVDMy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldFVJTlQ2NCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTZXRE
b3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0R1VJRCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpT
ZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0QmxvYik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpTZXRVbmtub3duKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkxvY2tTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpVbmxvY2tTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZp
ZGVvUHJlc2VudGVyOjpHZXRJdGVtQnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpDb3B5QWxs
SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0TmF0aXZlVmlkZW9TaXplKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OkdldElkZWFsVmlkZW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldEFzcGVj
dFJhdGlvTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRBc3BlY3RSYXRpb01vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21W
aWRlb1ByZXNlbnRlcjo6R2V0Q3VycmVudEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldEJv
cmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEJvcmRlckNvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OlNldFJlbmRlcmluZ1ByZWZzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFJlbmRl
cmluZ1ByZWZzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1By
ZXNlbnRlcjo6R2V0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRQYXJhbWV0ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmlzU2NydWJiaW5nKToKKwogMjAxNS0xMS0wOCAgR3l1eW91
bmcgS2ltICA8Z3l1eW91bmcua2ltQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0VGTF0gQWRkIFVz
ZXJBZ2VudEVGbC5jcHB8aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL01lZGlhRm91bmRhdGlvblV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhRm91bmRhdGlvblV0aWxzLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhRm91bmRhdGlv
blV0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTE2IEBACisjaWZuZGVmIE1lZGlh
Rm91bmRhdGlvblV0aWxzX2gKKyNkZWZpbmUgTWVkaWFGb3VuZGF0aW9uVXRpbHNfaAorCisjaW5j
bHVkZSA8TWZhcGkuaD4KKyNpbmNsdWRlIDxNZmVycm9yLmg+CisjaW5jbHVkZSA8TWZpZGwuaD4K
KworbmFtZXNwYWNlIE1lZGlhRm91bmRhdGlvblV0aWxzIHsKKworY2xhc3MgTWVkaWFUeXBlOwor
Y2xhc3MgQXVkaW9UeXBlOworY2xhc3MgVmlkZW9UeXBlOworY2xhc3MgTVBFR1ZpZGVvVHlwZTsK
KworTUZPZmZzZXQgTWFrZU9mZnNldChmbG9hdCB2KTsKK01GVmlkZW9BcmVhIE1ha2VBcmVhKGZs
b2F0IHgsIGZsb2F0IHksIERXT1JEIHdpZHRoLCBEV09SRCBoZWlnaHQpOworCitIUkVTVUxUIEdl
dEZyYW1lUmF0ZShJTUZNZWRpYVR5cGUgKnBUeXBlLCBNRlJhdGlvICpwUmF0aW8pOworSFJFU1VM
VCBHZXRWaWRlb0Rpc3BsYXlBcmVhKElNRk1lZGlhVHlwZSAqcFR5cGUsIE1GVmlkZW9BcmVhICpw
QXJlYSk7CitIUkVTVUxUIEdldERlZmF1bHRTdHJpZGUoSU1GTWVkaWFUeXBlICpwVHlwZSwgTE9O
RyAqcGxTdHJpZGUpOworCisvLyBNRlRpbWVUb01pbGxpc2Vjb25kczogQ29udmVydCAxMDAtbmFu
b3NlY29uZCB0aW1lIHRvIG1pbGxpc2Vjb25kcy4KK2lubGluZSBMT05HIE1GVGltZVRvTWlsbGlz
ZWNvbmRzKGNvbnN0IExPTkdMT05HJiB0aW1lKQoreworICAgIHJldHVybiAodGltZSAvIDEwMDAw
KTsKK30KKworLy8gTmFtZTogQXJlQ09NT2JqZWN0c0VxdWFsIFt0ZW1wbGF0ZV0KKy8vIERlc2M6
IFRlc3RzIHR3byBDT00gcG9pbnRlcnMgZm9yIGVxdWFsaXR5LgorCit0ZW1wbGF0ZSA8Y2xhc3Mg
VDEsIGNsYXNzIFQyPgorYm9vbCBBcmVDb21PYmplY3RzRXF1YWwoVDEgKnAxLCBUMiAqcDIpCit7
CisgICAgYm9vbCBiUmVzdWx0ID0gZmFsc2U7CisgICAgaWYgKCFwMSAmJiAhcDIpIHsKKyAgICAg
ICAgLy8gQm90aCBhcmUgbnVsbHB0cgorICAgICAgICBiUmVzdWx0ID0gdHJ1ZTsKKyAgICB9IGVs
c2UgaWYgKCFwMSB8fCAhcDIpIHsKKyAgICAgICAgLy8gT25lIGlzIG51bGxwdHIgYW5kIG9uZSBp
cyBub3QKKyAgICAgICAgYlJlc3VsdCA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IEJvdGggYXJlIG5vdCBudWxscHRyLiBDb21wYXJlIElVbmtub3ducy4KKyAgICAgICAgSVVua25v
d24gKnBVbmsxID0gbnVsbHB0cjsKKyAgICAgICAgSVVua25vd24gKnBVbmsyID0gbnVsbHB0cjsK
KyAgICAgICAgaWYgKFNVQ0NFRURFRChwMS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lVbmtub3duLCAo
dm9pZCoqKSZwVW5rMSkpKSB7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHAyLT5RdWVyeUlu
dGVyZmFjZShJSURfSVVua25vd24sICh2b2lkKiopJnBVbmsyKSkpIHsKKyAgICAgICAgICAgICAg
ICBiUmVzdWx0ID0gKHBVbmsxID09IHBVbmsyKTsKKyAgICAgICAgICAgICAgICBwVW5rMi0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcFVuazEtPlJlbGVhc2UoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYlJlc3VsdDsKK30KKworLy8gTWVkaWFUeXBlIGlz
IGEgd3JhcHBlciBhcm91bmQgYW4gSU1GTWVkaWFUeXBlLiBJdCBjYW4gYmUgdXNlZCAKKy8vIHRv
IHJlYWQgKGFuZCBtb2RpZnkpIGFuIGV4aXN0aW5nIHR5cGUgb3IgY3JlYXRlIGEgbmV3IHR5cGUu
IFRoaXMgY2xhc3MKKy8vIGRvZXMgbm90IGltcGxlbWVudCB0aGUgSU1GTWVkaWFUeXBlIGludGVy
ZmFjZS4KKy8vCisvLyBUaGUgQXVkaW9UeXBlLCBWaWRlb1R5cGUsIGFuZCBNUEVHVmlkZW9UeXBl
CisvLyBjbGFzc2VzIGFyZSBzcGVjaWFsaXplZCBmb3IgdGhvc2UgZm9ybWF0cy4KKworY2xhc3Mg
TWVkaWFUeXBlIHsKK3Byb3RlY3RlZDoKKyAgICBDT01QdHI8SU1GTWVkaWFUeXBlPiBtX3BUeXBl
OworCitwcm90ZWN0ZWQ6CisgICAgQk9PTCBJc1ZhbGlkKCkKKyAgICB7CisgICAgICAgIHJldHVy
biAhIW1fcFR5cGUuZ2V0KCk7CisgICAgfQorCisgICAgSU1GTWVkaWFUeXBlKiBHZXRNZWRpYVR5
cGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKElzVmFsaWQoKSk7CisgICAgICAgIHJldHVybiBt
X3BUeXBlLmdldCgpOworICAgIH0KKworcHVibGljOgorCisgICAgLy8gQ29uc3RydWN0IGZyb20g
YW4gZXhpc3RpbmcgbWVkaWEgdHlwZS4KKyAgICBNZWRpYVR5cGUoSU1GTWVkaWFUeXBlKiBwVHlw
ZSA9IG51bGxwdHIpCisgICAgICAgIDogbV9wVHlwZShwVHlwZSkKKyAgICB7CisgICAgfQorCisg
ICAgTWVkaWFUeXBlKGNvbnN0IE1lZGlhVHlwZSYgIG10KQorICAgIHsKKyAgICAgICAgbV9wVHlw
ZSA9IG10Lm1fcFR5cGU7CisgICAgfQorCisgICAgdmlydHVhbCB+TWVkaWFUeXBlKCkKKyAgICB7
CisgICAgfQorCisKKyAgICAvLyBBc3NpZ25tZW50CisgICAgTWVkaWFUeXBlJiBvcGVyYXRvcj0o
Y29uc3QgTWVkaWFUeXBlJiBtdCkKKyAgICB7CisgICAgICAgIC8vIElmIHdlIGFyZSBhc3NpZ25l
ZCB0byBvdXJzZWx2ZXMsIGRvIG5vdGhpbmcuCisgICAgICAgIGlmICghQXJlQ29tT2JqZWN0c0Vx
dWFsKG1fcFR5cGUuZ2V0KCksIG10Lm1fcFR5cGUuZ2V0KCkpKQorICAgICAgICAgICAgbV9wVHlw
ZSA9IG10Lm1fcFR5cGU7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICAvLyBh
ZGRyZXNzLW9mIG9wZXJhdG9yCisgICAgSU1GTWVkaWFUeXBlKiogb3BlcmF0b3ImKCkKKyAgICB7
CisgICAgICAgIHJldHVybiAmbV9wVHlwZTsKKyAgICB9CisKKyAgICAvLyBjb2VyY2UgdG8gdW5k
ZXJseWluZyBwb2ludGVyIHR5cGUuCisgICAgb3BlcmF0b3IgSU1GTWVkaWFUeXBlKigpCisgICAg
eworICAgICAgICByZXR1cm4gbV9wVHlwZS5nZXQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEhS
RVNVTFQgQ3JlYXRlRW1wdHlUeXBlKCkKKyAgICB7CisgICAgICAgIG1fcFR5cGUgPSBudWxscHRy
OworCisgICAgICAgIHJldHVybiBNRkNyZWF0ZU1lZGlhVHlwZSgmbV9wVHlwZSk7CisgICAgfQor
CisgICAgLy8gRGV0YWNoIHRoZSBpbnRlcmZhY2UgKGRvZXMgbm90IFJlbGVhc2UpCisgICAgSU1G
TWVkaWFUeXBlKiBEZXRhY2goKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFR5cGUubGVha1Jl
ZigpOworICAgIH0KKworICAgIC8vIERpcmVjdCB3cmFwcGVycyBvZiBJTUZNZWRpYVR5cGUgbWV0
aG9kcy4KKyAgICAvLyAoRm9yIHRoZXNlIG1ldGhvZHMsIHdlIGxlYXZlIHBhcmFtZXRlciB2YWxp
ZGF0aW9uIHRvIHRoZSBJTUZNZWRpYVR5cGUgaW1wbGVtZW50YXRpb24uKQorCisgICAgLy8gUmV0
cmlldmVzIHRoZSBtYWpvciB0eXBlIEdVSUQuCisgICAgSFJFU1VMVCBHZXRNYWpvclR5cGUoR1VJ
RCogcEd1aWQpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldE1ham9y
VHlwZShwR3VpZCk7CisgICAgfQorCisgICAgLy8gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIG1lZGlh
IGRhdGEgaXMgY29tcHJlc3NlZAorICAgIEhSRVNVTFQgSXNDb21wcmVzc2VkRm9ybWF0KEJPT0wq
IHBiQ29tcHJlc3NlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+SXND
b21wcmVzc2VkRm9ybWF0KHBiQ29tcHJlc3NlZCk7CisgICAgfQorCisgICAgLy8gQ29tcGFyZXMg
dHdvIG1lZGlhIHR5cGVzIGFuZCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhleSBhcmUgaWRlbnRpY2Fs
LgorICAgIEhSRVNVTFQgSXNFcXVhbChJTUZNZWRpYVR5cGUqIHBUeXBlLCBEV09SRCogcGR3Rmxh
Z3MpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPklzRXF1YWwocFR5cGUs
IHBkd0ZsYWdzKTsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgYW4gYWx0ZXJuYXRpdmUgcmVw
cmVzZW50YXRpb24gb2YgdGhlIG1lZGlhIHR5cGUuCisgICAgSFJFU1VMVCBHZXRSZXByZXNlbnRh
dGlvbihHVUlEIGd1aWRSZXByZXNlbnRhdGlvbiwgTFBWT0lEKiBwcHZSZXByZXNlbnRhdGlvbikK
KyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0UmVwcmVzZW50YXRpb24o
Z3VpZFJlcHJlc2VudGF0aW9uLCBwcHZSZXByZXNlbnRhdGlvbik7CisgICAgfQorCisgICAgLy8g
RnJlZXMgbWVtb3J5IHRoYXQgd2FzIGFsbG9jYXRlZCBieSB0aGUgR2V0UmVwcmVzZW50YXRpb24g
bWV0aG9kLgorICAgIEhSRVNVTFQgRnJlZVJlcHJlc2VudGF0aW9uKEdVSUQgZ3VpZFJlcHJlc2Vu
dGF0aW9uLCBMUFZPSUQgcHZSZXByZXNlbnRhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBH
ZXRNZWRpYVR5cGUoKS0+RnJlZVJlcHJlc2VudGF0aW9uKGd1aWRSZXByZXNlbnRhdGlvbiwgcHZS
ZXByZXNlbnRhdGlvbik7CisgICAgfQorCisKKyAgICAvLyBIZWxwZXIgbWV0aG9kcworCisgICAg
Ly8gQ29weUZyb206IENvcHkgYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIGZyb20gYW5vdGhlciBtZWRp
YSB0eXBlIGludG8gdGhpcyB0eXBlLgorICAgIEhSRVNVTFQgQ29weUZyb20oTWVkaWFUeXBlKiBw
VHlwZSkKKyAgICB7CisgICAgICAgIGlmICghcFR5cGUtPklzVmFsaWQoKSkKKyAgICAgICAgICAg
IHJldHVybiBFX1VORVhQRUNURUQ7CisgICAgICAgIGlmICghcFR5cGUpCisgICAgICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworCisgICAgICAgIHJldHVybiBDb3B5RnJvbShwVHlwZS0+bV9wVHlw
ZS5nZXQoKSk7CisgICAgfQorCisgICAgSFJFU1VMVCBDb3B5RnJvbShJTUZNZWRpYVR5cGUqIHBU
eXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFwVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBFX1BP
SU5URVI7CisKKyAgICAgICAgcmV0dXJuIHBUeXBlLT5Db3B5QWxsSXRlbXMobV9wVHlwZS5nZXQo
KSk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0aGUgdW5kZXJseWluZyBJTUZNZWRpYVR5cGUg
cG9pbnRlci4gCisgICAgSFJFU1VMVCBHZXRNZWRpYVR5cGUoSU1GTWVkaWFUeXBlKiogcHBUeXBl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKElzVmFsaWQoKSk7CisgICAgICAgIGlmICghcHBUeXBl
KQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgKnBwVHlwZSA9IG1fcFR5
cGUuZ2V0KCk7CisgICAgICAgICgqcHBUeXBlKS0+QWRkUmVmKCk7CisgICAgICAgIHJldHVybiBT
X09LOworICAgIH0KKworICAgIC8vIFNldHMgdGhlIG1ham9yIHR5cGUgR1VJRC4KKyAgICBIUkVT
VUxUIFNldE1ham9yVHlwZShHVUlEIGd1aWQpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVk
aWFUeXBlKCktPlNldEdVSUQoTUZfTVRfTUFKT1JfVFlQRSwgZ3VpZCk7CisgICAgfQorCisgICAg
Ly8gUmV0cmlldmVzIHRoZSBzdWJ0eXBlIEdVSUQuCisgICAgSFJFU1VMVCBHZXRTdWJUeXBlKEdV
SUQqIHBHdWlkKQorICAgIHsKKyAgICAgICAgaWYgKCFwR3VpZCkKKyAgICAgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0R1VJRChNRl9N
VF9TVUJUWVBFLCBwR3VpZCk7CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUgc3VidHlwZSBHVUlE
LgorICAgIEhSRVNVTFQgU2V0U3ViVHlwZShHVUlEIGd1aWQpCisgICAgeworICAgICAgICByZXR1
cm4gR2V0TWVkaWFUeXBlKCktPlNldEdVSUQoTUZfTVRfU1VCVFlQRSwgZ3VpZCk7CisgICAgfQor
CisgICAgLy8gRXh0cmFjdHMgdGhlIEZPVVJDQyBjb2RlIGZyb20gdGhlIHN1YnR5cGUuCisgICAg
Ly8gTm90IGFsbCBzdWJ0eXBlcyBmb2xsb3cgdGhpcyBwYXR0ZXJuLgorICAgIEhSRVNVTFQgR2V0
Rm91ckNDKERXT1JEKiBwRm91ckNDKQorICAgIHsKKyAgICAgICAgQVNTRVJUKElzVmFsaWQoKSk7
CisgICAgICAgIGlmICghcEZvdXJDQykKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7Cisg
ICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgICAgICBHVUlEIGd1aWRTdWJUeXBlID0gR1VJ
RF9OVUxMOworCisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgaHIgPSBH
ZXRTdWJUeXBlKCZndWlkU3ViVHlwZSk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisg
ICAgICAgICAgICAqcEZvdXJDQyA9IGd1aWRTdWJUeXBlLkRhdGExOworCisgICAgICAgIHJldHVy
biBocjsKKyAgICB9ICAgICAgIAorCisgICAgLy8gIFF1ZXJpZXMgd2hldGhlciBlYWNoIHNhbXBs
ZSBpcyBpbmRlcGVuZGVudCBvZiB0aGUgb3RoZXIgc2FtcGxlcyBpbiB0aGUgc3RyZWFtLgorICAg
IEhSRVNVTFQgR2V0QWxsU2FtcGxlc0luZGVwZW5kZW50KEJPT0wqIHBiSW5kZXBlbmRlbnQpCisg
ICAgeworICAgICAgICBpZiAoIXBiSW5kZXBlbmRlbnQpCisgICAgICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9B
TExfU0FNUExFU19JTkRFUEVOREVOVCwgKFVJTlQzMiopcGJJbmRlcGVuZGVudCk7CisgICAgfQor
CisgICAgLy8gIFNwZWNpZmllcyB3aGV0aGVyIGVhY2ggc2FtcGxlIGlzIGluZGVwZW5kZW50IG9m
IHRoZSBvdGhlciBzYW1wbGVzIGluIHRoZSBzdHJlYW0uCisgICAgSFJFU1VMVCBTZXRBbGxTYW1w
bGVzSW5kZXBlbmRlbnQoQk9PTCBiSW5kZXBlbmRlbnQpCisgICAgeworICAgICAgICByZXR1cm4g
R2V0TWVkaWFUeXBlKCktPlNldFVJTlQzMihNRl9NVF9BTExfU0FNUExFU19JTkRFUEVOREVOVCwg
KFVJTlQzMiliSW5kZXBlbmRlbnQpOworICAgIH0KKworICAgIC8vIFF1ZXJpZXMgd2hldGhlciB0
aGUgc2FtcGxlcyBoYXZlIGEgZml4ZWQgc2l6ZS4KKyAgICBIUkVTVUxUIEdldEZpeGVkU2l6ZVNh
bXBsZXMoQk9PTCogcGJGaXhlZCkKKyAgICB7CisgICAgICAgIGlmICghcGJGaXhlZCkKKyAgICAg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+
R2V0VUlOVDMyKE1GX01UX0ZJWEVEX1NJWkVfU0FNUExFUywgKFVJTlQzMiopcGJGaXhlZCk7Cisg
ICAgfQorCisgICAgLy8gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHNhbXBsZXMgaGF2ZSBhIGZpeGVk
IHNpemUuCisgICAgSFJFU1VMVCBTZXRGaXhlZFNpemVTYW1wbGVzKEJPT0wgYkZpeGVkKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfRklYRURf
U0laRV9TQU1QTEVTLCAoVUlOVDMyKWJGaXhlZCk7CisgICAgfQorCisgICAgLy8gUmV0cmlldmVz
IHRoZSBzaXplIG9mIGVhY2ggc2FtcGxlLCBpbiBieXRlcy4gCisgICAgSFJFU1VMVCBHZXRTYW1w
bGVTaXplKFVJTlQzMiogcG5TaXplKQorICAgIHsgICAKKyAgICAgICAgaWYgKCFwblNpemUpCisg
ICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBl
KCktPkdldFVJTlQzMihNRl9NVF9TQU1QTEVfU0laRSwgcG5TaXplKTsKKyAgICB9CisKKyAgICAv
LyBTZXRzIHRoZSBzaXplIG9mIGVhY2ggc2FtcGxlLCBpbiBieXRlcy4gCisgICAgSFJFU1VMVCBT
ZXRTYW1wbGVTaXplKFVJTlQzMiBuU2l6ZSkKKyAgICB7ICAgCisgICAgICAgIHJldHVybiBHZXRN
ZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX1NBTVBMRV9TSVpFLCBuU2l6ZSk7CisgICAgfQor
CisgICAgLy8gUmV0cmlldmVzIGEgbWVkaWEgdHlwZSB0aGF0IHdhcyB3cmFwcGVkIGJ5IHRoZSBN
RldyYXBNZWRpYVR5cGUgZnVuY3Rpb24uCisgICAgSFJFU1VMVCBVbndyYXAoSU1GTWVkaWFUeXBl
KiogcHBPcmlnaW5hbCkKKyAgICB7CisgICAgICAgIGlmICghcHBPcmlnaW5hbCkKKyAgICAgICAg
ICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiA6Ok1GVW53cmFwTWVkaWFUeXBl
KEdldE1lZGlhVHlwZSgpLCBwcE9yaWdpbmFsKTsKKyAgICB9CisKKyAgICAvLyBUaGUgZm9sbG93
aW5nIHZlcnNpb25zIHJldHVybiByZWFzb25hYmxlIGRlZmF1bHRzIGlmIHRoZSByZWxldmFudCBh
dHRyaWJ1dGUgaXMgbm90IHByZXNlbnQgKHplcm8vRkFMU0UpLgorICAgIC8vIFRoaXMgaXMgdXNl
ZnVsIGZvciBtYWtpbmcgcXVpY2sgY29tcGFyaXNvbnMgYmV0d2VlZW4gbWVkaWEgdHlwZXMuIAor
CisgICAgQk9PTCBBbGxTYW1wbGVzSW5kZXBlbmRlbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IChCT09MKU1GR2V0QXR0cmlidXRlVUlOVDMyKEdldE1lZGlhVHlwZSgpLCBNRl9NVF9BTExfU0FN
UExFU19JTkRFUEVOREVOVCwgRkFMU0UpOworICAgIH0KKworICAgIEJPT0wgRml4ZWRTaXplU2Ft
cGxlcygpCisgICAgeworICAgICAgICByZXR1cm4gKEJPT0wpTUZHZXRBdHRyaWJ1dGVVSU5UMzIo
R2V0TWVkaWFUeXBlKCksIE1GX01UX0ZJWEVEX1NJWkVfU0FNUExFUywgRkFMU0UpOworICAgIH0K
KworICAgIFVJTlQzMiBTYW1wbGVTaXplKCkKKyAgICB7ICAgCisgICAgICAgIHJldHVybiBNRkdl
dEF0dHJpYnV0ZVVJTlQzMihHZXRNZWRpYVR5cGUoKSwgTUZfTVRfU0FNUExFX1NJWkUsIDApOwor
ICAgIH0KK307CisKKyAgICAKKy8vIFZpZGVvVHlwZSBwcm92aWRlcyBhY2Nlc3MgdG8gdmlkZW8t
c3BlY2lmaWMgYXR0cmlidXRlcy4KKy8vIE5vdGU6IE1QRUctc3BlY2lmaWMgYXR0cmlidXRlcyBh
cmUgYWNjZXNzaWJsZSBmcm9tIE1QRUdWaWRlb1R5cGUuCisKK2NsYXNzIFZpZGVvVHlwZSA6IHB1
YmxpYyBNZWRpYVR5cGUgeworICAgIGZyaWVuZCBjbGFzcyBNZWRpYVR5cGU7IAorCitwdWJsaWM6
CisgICAgVmlkZW9UeXBlKElNRk1lZGlhVHlwZSogcFR5cGUgPSBudWxscHRyKQorICAgICAgICA6
IE1lZGlhVHlwZShwVHlwZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBIUkVTVUxUIENy
ZWF0ZUVtcHR5VHlwZSgpCisgICAgeworICAgICAgICBtX3BUeXBlID0gbnVsbHB0cjsKKworICAg
ICAgICBIUkVTVUxUIGhyID0gTWVkaWFUeXBlOjpDcmVhdGVFbXB0eVR5cGUoKTsKKyAgICAgICAg
aWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICBociA9IFNldE1ham9yVHlwZShNRk1lZGlh
VHlwZV9WaWRlbyk7CisKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworCisgICAgLy8gUmV0
cmlldmVzIGEgZGVzY3JpcHRpb24gb2YgaG93IHRoZSBmcmFtZXMgYXJlIGludGVybGFjZWQuCisg
ICAgSFJFU1VMVCBHZXRJbnRlcmxhY2VNb2RlKE1GVmlkZW9JbnRlcmxhY2VNb2RlKiBwbW9kZSkK
KyAgICB7CisgICAgICAgIGlmICghcG1vZGUpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVS
OworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9JTlRFUkxB
Q0VfTU9ERSwgKFVJTlQzMiopcG1vZGUpOworICAgIH0KKworICAgIC8vIFNldHMgYSBkZXNjcmlw
dGlvbiBvZiBob3cgdGhlIGZyYW1lcyBhcmUgaW50ZXJsYWNlZC4KKyAgICBIUkVTVUxUIFNldElu
dGVybGFjZU1vZGUoTUZWaWRlb0ludGVybGFjZU1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0lOVEVSTEFDRV9NT0RFLCAoVUlO
VDMyKW1vZGUpOworICAgIH0KKworICAgIC8vIFRoaXMgcmV0dXJucyB0aGUgZGVmYXVsdCBvciBh
dHRlbXB0cyB0byBjb21wdXRlIGl0LCBpbiBpdHMgYWJzZW5jZS4KKyAgICBIUkVTVUxUIEdldERl
ZmF1bHRTdHJpZGUoTE9ORyogcGxTdHJpZGUpCisgICAgeworICAgICAgICByZXR1cm4gTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OkdldERlZmF1bHRTdHJpZGUoIEdldE1lZGlhVHlwZSgpLCBwbFN0cmlk
ZSApOworICAgIH0KKworICAgIC8vIFNldHMgdGhlIGRlZmF1bHQgc3RyaWRlLiBPbmx5IGFwcHJv
cHJpYXRlIGZvciB1bmNvbXByZXNzZWQgZGF0YSBmb3JtYXRzLgorICAgIEhSRVNVTFQgU2V0RGVm
YXVsdFN0cmlkZShMT05HIG5TdHJpZGUpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFU
eXBlKCktPlNldFVJTlQzMihNRl9NVF9ERUZBVUxUX1NUUklERSwgKFVJTlQzMiluU3RyaWRlKTsK
KyAgICB9CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHZp
ZGVvIGZyYW1lLgorICAgIEhSRVNVTFQgR2V0RnJhbWVEaW1lbnNpb25zKFVJTlQzMiogcGR3V2lk
dGhJblBpeGVscywgVUlOVDMyKiBwZHdIZWlnaHRJblBpeGVscykKKyAgICB7CisgICAgICAgIHJl
dHVybiBNRkdldEF0dHJpYnV0ZVNpemUoR2V0TWVkaWFUeXBlKCksIE1GX01UX0ZSQU1FX1NJWkUs
IHBkd1dpZHRoSW5QaXhlbHMsIHBkd0hlaWdodEluUGl4ZWxzKTsKKyAgICB9CisKKyAgICAvLyBT
ZXRzIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB2aWRlbyBmcmFtZS4KKyAgICBIUkVTVUxU
IFNldEZyYW1lRGltZW5zaW9ucyhVSU5UMzIgZHdXaWR0aEluUGl4ZWxzLCBVSU5UMzIgZHdIZWln
aHRJblBpeGVscykKKyAgICB7CisgICAgICAgIHJldHVybiBNRlNldEF0dHJpYnV0ZVNpemUoR2V0
TWVkaWFUeXBlKCksIE1GX01UX0ZSQU1FX1NJWkUsIGR3V2lkdGhJblBpeGVscywgZHdIZWlnaHRJ
blBpeGVscyk7CisgICAgfQorCisgICAgLy8gUmV0cmlldmVzIHRoZSBkYXRhIGVycm9yIHJhdGUg
aW4gYml0IGVycm9ycyBwZXIgc2Vjb25kCisgICAgSFJFU1VMVCBHZXREYXRhQml0RXJyb3JSYXRl
KFVJTlQzMiogcFJhdGUpCisgICAgeworICAgICAgICBpZiAoIXBSYXRlKQorICAgICAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5U
MzIoTUZfTVRfQVZHX0JJVF9FUlJPUl9SQVRFLCBwUmF0ZSk7CisgICAgfQorCisgICAgLy8gU2V0
cyB0aGUgZGF0YSBlcnJvciByYXRlIGluIGJpdCBlcnJvcnMgcGVyIHNlY29uZAorICAgIEhSRVNV
TFQgU2V0RGF0YUJpdEVycm9yUmF0ZShVSU5UMzIgcmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0FWR19CSVRfRVJST1JfUkFURSwgcmF0
ZSk7CisgICAgfQorCisgICAgLy8gUmV0cmlldmVzIHRoZSBhcHByb3hpbWF0ZSBkYXRhIHJhdGUg
b2YgdGhlIHZpZGVvIHN0cmVhbS4KKyAgICBIUkVTVUxUIEdldEF2ZXJhZ2VCaXRSYXRlKFVJTlQz
MiogcFJhdGUpCisgICAgeworICAgICAgICBpZiAoIXBSYXRlKQorICAgICAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZf
TVRfQVZHX0JJVFJBVEUsIHBSYXRlKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoZSBhcHByb3hp
bWF0ZSBkYXRhIHJhdGUgb2YgdGhlIHZpZGVvIHN0cmVhbS4KKyAgICBIUkVTVUxUIFNldEF2Z2Vy
YWdlQml0UmF0ZShVSU5UMzIgcmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5
cGUoKS0+U2V0VUlOVDMyKE1GX01UX0FWR19CSVRSQVRFLCByYXRlKTsKKyAgICB9CisKKyAgICAv
LyBSZXRyaWV2ZXMgY3VzdG9tIGNvbG9yIHByaW1hcmllcy4KKyAgICBIUkVTVUxUIEdldEN1c3Rv
bVZpZGVvUHJpbWFyaWVzKE1UX0NVU1RPTV9WSURFT19QUklNQVJJRVMqIHBQcmltYXJpZXMpCisg
ICAgeworICAgICAgICBpZiAoIXBQcmltYXJpZXMpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldEJsb2IoTUZfTVRfQ1VTVE9N
X1ZJREVPX1BSSU1BUklFUywgKFVJTlQ4KilwUHJpbWFyaWVzLCBzaXplb2YoTVRfQ1VTVE9NX1ZJ
REVPX1BSSU1BUklFUyksIG51bGxwdHIpOworICAgIH0KKworICAgIC8vIFNldHMgY3VzdG9tIGNv
bG9yIHByaW1hcmllcy4KKyAgICBIUkVTVUxUIFNldEN1c3RvbVZpZGVvUHJpbWFyaWVzKGNvbnN0
IE1UX0NVU1RPTV9WSURFT19QUklNQVJJRVMmIHByaW1hcnkpCisgICAgeworICAgICAgICByZXR1
cm4gR2V0TWVkaWFUeXBlKCktPlNldEJsb2IoTUZfTVRfQ1VTVE9NX1ZJREVPX1BSSU1BUklFUywg
KGNvbnN0IFVJTlQ4KikmcHJpbWFyeSwgc2l6ZW9mKE1UX0NVU1RPTV9WSURFT19QUklNQVJJRVMp
KTsKKyAgICB9CisKKyAgICAvLyBHZXRzIHRoZSBudW1iZXIgb2YgZnJhbWVzIHBlciBzZWNvbmQu
CisgICAgSFJFU1VMVCBHZXRGcmFtZVJhdGUoVUlOVDMyKiBwbk51bWVyYXRvciwgVUlOVDMyKiBw
bkRlbm9taW5hdG9yKQorICAgIHsKKyAgICAgICAgaWYgKCFwbk51bWVyYXRvcikKKyAgICAgICAg
ICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIGlmICghcG5EZW5vbWluYXRvcikKKyAgICAg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBNRkdldEF0dHJpYnV0ZVJh
dGlvKEdldE1lZGlhVHlwZSgpLCBNRl9NVF9GUkFNRV9SQVRFLCBwbk51bWVyYXRvciwgcG5EZW5v
bWluYXRvcik7CisgICAgfQorCisgICAgLy8gR2V0cyB0aGUgZnJhbWVzIHBlciBzZWNvbmQgYXMg
YSByYXRpby4KKyAgICBIUkVTVUxUIEdldEZyYW1lUmF0ZShNRlJhdGlvKiBwUmF0aW8pCisgICAg
eworICAgICAgICBpZiAoIXBSYXRpbykKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7Cisg
ICAgICAgIHJldHVybiBHZXRGcmFtZVJhdGUoKFVJTlQzMiopJnBSYXRpby0+TnVtZXJhdG9yLCAo
VUlOVDMyKikmcFJhdGlvLT5EZW5vbWluYXRvcik7CisgICAgfQorICAgICAgICAKKyAgICAvLyBT
ZXRzIHRoZSBudW1iZXIgb2YgZnJhbWVzIHBlciBzZWNvbmQuCisgICAgSFJFU1VMVCBTZXRGcmFt
ZVJhdGUoVUlOVDMyIG5OdW1lcmF0b3IsIFVJTlQzMiBuRGVub21pbmF0b3IpCisgICAgeworICAg
ICAgICByZXR1cm4gTUZTZXRBdHRyaWJ1dGVSYXRpbyhHZXRNZWRpYVR5cGUoKSwgTUZfTVRfRlJB
TUVfUkFURSwgbk51bWVyYXRvciwgbkRlbm9taW5hdG9yKTsKKyAgICB9CisKKyAgICAvLyBTZXRz
IHRoZSBudW1iZXIgb2YgZnJhbWVzIHBlciBzZWNvbmQsIGFzIGEgcmF0aW8uCisgICAgSFJFU1VM
VCBTZXRGcmFtZVJhdGUoY29uc3QgTUZSYXRpbyYgcmF0aW8pCisgICAgeworICAgICAgICByZXR1
cm4gTUZTZXRBdHRyaWJ1dGVSYXRpbyhHZXRNZWRpYVR5cGUoKSwgTUZfTVRfRlJBTUVfUkFURSwg
cmF0aW8uTnVtZXJhdG9yLCByYXRpby5EZW5vbWluYXRvcik7CisgICAgfQorCisgICAgLy8gUXVl
cmllcyB0aGUgZ2VvbWV0cmljIGFwZXJ0dXJlLgorICAgIEhSRVNVTFQgR2V0R2VvbWV0cmljQXBl
cnR1cmUoTUZWaWRlb0FyZWEqIHBBcmVhKQorICAgIHsKKyAgICAgICAgaWYgKCFwQXJlYSkKKyAg
ICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUo
KS0+R2V0QmxvYihNRl9NVF9HRU9NRVRSSUNfQVBFUlRVUkUsIChVSU5UOCopcEFyZWEsIHNpemVv
ZihNRlZpZGVvQXJlYSksIG51bGxwdHIpOworICAgIH0KKyAgICAgICAgCisgICAgLy8gU2V0cyB0
aGUgZ2VvbWV0cmljIGFwZXJ0dXJlLgorICAgIEhSRVNVTFQgU2V0R2VvbWV0cmljQXBlcnR1cmUo
Y29uc3QgTUZWaWRlb0FyZWEmIGFyZWEpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFU
eXBlKCktPlNldEJsb2IoTUZfTVRfR0VPTUVUUklDX0FQRVJUVVJFLCAoVUlOVDgqKSZhcmVhLCBz
aXplb2YoTUZWaWRlb0FyZWEpKTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFJldHJpZXZlcyB0
aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIGZyb20gb25lIGtleSBmcmFtZSB0byB0aGUgbmV4
dC4KKyAgICBIUkVTVUxUIEdldE1heEtleWZyYW1lU3BhY2luZyhVSU5UMzIqIHBuU3BhY2luZykK
KyAgICB7CisgICAgICAgIGlmICghcG5TcGFjaW5nKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9J
TlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfTUFY
X0tFWUZSQU1FX1NQQUNJTkcsIHBuU3BhY2luZyk7CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUg
bWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIGZyb20gb25lIGtleSBmcmFtZSB0byB0aGUgbmV4dC4K
KyAgICBIUkVTVUxUIFNldE1heEtleWZyYW1lU3BhY2luZyhVSU5UMzIgblNwYWNpbmcpCisgICAg
eworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNldFVJTlQzMihNRl9NVF9NQVhfS0VZ
RlJBTUVfU1BBQ0lORywgblNwYWNpbmcpOworICAgIH0KKworICAgIC8vIFJldHJpZXZlcyB0aGUg
cmVnaW9uIHRoYXQgY29udGFpbnMgdGhlIHZhbGlkIHBvcnRpb24gb2YgdGhlIHNpZ25hbC4KKyAg
ICBIUkVTVUxUIEdldE1pbkRpc3BsYXlBcGVydHVyZShNRlZpZGVvQXJlYSogcEFyZWEpCisgICAg
eworICAgICAgICBpZiAoIXBBcmVhKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAg
ICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRCbG9iKE1GX01UX01JTklNVU1fRElTUExB
WV9BUEVSVFVSRSwgKFVJTlQ4KilwQXJlYSwgc2l6ZW9mKE1GVmlkZW9BcmVhKSwgbnVsbHB0cik7
CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUgdGhlIHJlZ2lvbiB0aGF0IGNvbnRhaW5zIHRoZSB2
YWxpZCBwb3J0aW9uIG9mIHRoZSBzaWduYWwuCisgICAgSFJFU1VMVCBTZXRNaW5EaXNwbGF5QXBl
cnR1cmUoY29uc3QgTUZWaWRlb0FyZWEmIGFyZWEpCisgICAgeworICAgICAgICByZXR1cm4gR2V0
TWVkaWFUeXBlKCktPlNldEJsb2IoTUZfTVRfTUlOSU1VTV9ESVNQTEFZX0FQRVJUVVJFLCAoVUlO
VDgqKSZhcmVhLCBzaXplb2YoTUZWaWRlb0FyZWEpKTsKKyAgICB9CisKKyAgICAvLyBSZXRyaWV2
ZXMgdGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgb3V0cHV0IHJlY3RhbmdsZSBmb3IgYSB2aWRlbyBt
ZWRpYSB0eXBlLiAKKyAgICBIUkVTVUxUIEdldFBhZENvbnRyb2xGbGFncyhNRlZpZGVvUGFkRmxh
Z3MqIHBGbGFncykKKyAgICB7CisgICAgICAgIGlmICghcEZsYWdzKQorICAgICAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIo
TUZfTVRfUEFEX0NPTlRST0xfRkxBR1MsIChVSU5UMzIqKXBGbGFncyk7CisgICAgfQorCisgICAg
Ly8gU2V0cyB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSBvdXRwdXQgcmVjdGFuZ2xlIGZvciBhIHZp
ZGVvIG1lZGlhIHR5cGUuIAorICAgIEhSRVNVTFQgU2V0UGFkQ29udHJvbEZsYWdzKE1GVmlkZW9Q
YWRGbGFncyBmbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0
VUlOVDMyKE1GX01UX1BBRF9DT05UUk9MX0ZMQUdTLCBmbGFncyk7CisgICAgfQorCisgICAgLy8g
UmV0cmlldmVzIGFuIGFycmF5IG9mIHBhbGV0dGUgZW50cmllcyBmb3IgYSB2aWRlbyBtZWRpYSB0
eXBlLiAKKyAgICBIUkVTVUxUIEdldFBhbGV0dGVFbnRyaWVzKE1GUGFsZXR0ZUVudHJ5KiBwYUVu
dHJpZXMsIFVJTlQzMiBuRW50cmllcykKKyAgICB7CisgICAgICAgIGlmICghcGFFbnRyaWVzKQor
ICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlw
ZSgpLT5HZXRCbG9iKE1GX01UX1BBTEVUVEUsIChVSU5UOCopcGFFbnRyaWVzLCBzaXplb2YoTUZQ
YWxldHRlRW50cnkpICogbkVudHJpZXMsIG51bGxwdHIpOworICAgIH0KKworICAgIC8vIFNldHMg
YW4gYXJyYXkgb2YgcGFsZXR0ZSBlbnRyaWVzIGZvciBhIHZpZGVvIG1lZGlhIHR5cGUuIAorICAg
IEhSRVNVTFQgU2V0UGFsZXR0ZUVudHJpZXMoTUZQYWxldHRlRW50cnkqIHBhRW50cmllcywgVUlO
VDMyIG5FbnRyaWVzKQorICAgIHsKKyAgICAgICAgaWYgKCFwYUVudHJpZXMpCisgICAgICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNldEJs
b2IoTUZfTVRfUEFMRVRURSwgKFVJTlQ4KilwYUVudHJpZXMsIHNpemVvZihNRlBhbGV0dGVFbnRy
eSkgKiBuRW50cmllcyk7CisgICAgfQorCisgICAgLy8gUmV0cmlldmVzIHRoZSBudW1iZXIgb2Yg
cGFsZXR0ZSBlbnRyaWVzLgorICAgIEhSRVNVTFQgR2V0TnVtUGFsZXR0ZUVudHJpZXMoVUlOVDMy
KiBwbkVudHJpZXMpCisgICAgeworICAgICAgICBpZiAoIXBuRW50cmllcykKKyAgICAgICAgICAg
IHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIFVJTlQzMiBuQnl0ZXMgPSAwOworICAgICAgICBI
UkVTVUxUIGhyID0gU19PSzsKKyAgICAgICAgaHIgPSBHZXRNZWRpYVR5cGUoKS0+R2V0QmxvYlNp
emUoTUZfTVRfUEFMRVRURSwgJm5CeXRlcyk7CisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7
CisgICAgICAgICAgICBpZiAobkJ5dGVzICUgc2l6ZW9mKE1GUGFsZXR0ZUVudHJ5KSkKKyAgICAg
ICAgICAgICAgICBociA9IEVfVU5FWFBFQ1RFRDsKKyAgICAgICAgfQorICAgICAgICBpZiAoU1VD
Q0VFREVEKGhyKSkKKyAgICAgICAgICAgICpwbkVudHJpZXMgPSBuQnl0ZXMgLyBzaXplb2YoTUZQ
YWxldHRlRW50cnkpOworCisgICAgICAgIHJldHVybiBocjsKKyAgICB9CisKKyAgICAvLyBRdWVy
aWVzIHRoZSA0eDMgcmVnaW9uIG9mIHZpZGVvIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBw
YW4vc2NhbiBtb2RlLgorICAgIEhSRVNVTFQgR2V0UGFuU2NhbkFwZXJ0dXJlKE1GVmlkZW9BcmVh
KiBwQXJlYSkKKyAgICB7CisgICAgICAgIGlmICghcEFyZWEpCisgICAgICAgICAgICByZXR1cm4g
RV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldEJsb2IoTUZfTVRf
UEFOX1NDQU5fQVBFUlRVUkUsIChVSU5UOCopcEFyZWEsIHNpemVvZihNRlZpZGVvQXJlYSksIG51
bGxwdHIpOworICAgIH0KKyAgICAgICAgCisgICAgLy8gU2V0cyB0aGUgNHgzIHJlZ2lvbiBvZiB2
aWRlbyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gcGFuL3NjYW4gbW9kZS4KKyAgICBIUkVT
VUxUIFNldFBhblNjYW5BcGVydHVyZShjb25zdCBNRlZpZGVvQXJlYSYgYXJlYSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0QmxvYihNRl9NVF9QQU5fU0NBTl9BUEVS
VFVSRSwgKFVJTlQ4KikmYXJlYSwgc2l6ZW9mKE1GVmlkZW9BcmVhKSk7CisgICAgfQorICAgICAg
ICAKKyAgICAvLyBRdWVyaWVzIHdoZXRoZXIgcGFuL3NjYW4gbW9kZSBpcyBlbmFibGVkLgorICAg
IEhSRVNVTFQgSXNQYW5TY2FuRW5hYmxlZChCT09MKiBwQm9vbCkKKyAgICB7CisgICAgICAgIGlm
ICghcEJvb2wpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4g
R2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9QQU5fU0NBTl9FTkFCTEVELCAoVUlOVDMy
KilwQm9vbCk7CisgICAgfQorCisgICAgLy8gU2V0cyB3aGV0aGVyIHBhbi9zY2FuIG1vZGUgaXMg
ZW5hYmxlZC4KKyAgICBIUkVTVUxUIFNldFBhblNjYW5FbmFibGVkKEJPT0wgYkVuYWJsZWQpCisg
ICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNldFVJTlQzMihNRl9NVF9QQU5f
U0NBTl9FTkFCTEVELCAoVUlOVDMyKWJFbmFibGVkKTsKKyAgICB9CisKKyAgICAvLyBRdWVyaWVz
IHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8KKyAgICBIUkVTVUxUIEdldFBpeGVsQXNwZWN0UmF0aW8o
VUlOVDMyKiBwbk51bWVyYXRvciwgVUlOVDMyKiBwbkRlbm9taW5hdG9yKQorICAgIHsKKyAgICAg
ICAgaWYgKCFwbk51bWVyYXRvcikKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAg
ICAgIGlmICghcG5EZW5vbWluYXRvcikKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7Cisg
ICAgICAgIHJldHVybiBNRkdldEF0dHJpYnV0ZVJhdGlvKEdldE1lZGlhVHlwZSgpLCBNRl9NVF9Q
SVhFTF9BU1BFQ1RfUkFUSU8sIHBuTnVtZXJhdG9yLCBwbkRlbm9taW5hdG9yKTsKKyAgICB9ICAg
ICAgIAorCisgICAgLy8gU2V0cyB0aGUgcGl4ZWwgYXNwZWN0IHJhdGlvCisgICAgSFJFU1VMVCBT
ZXRQaXhlbEFzcGVjdFJhdGlvKFVJTlQzMiBuTnVtZXJhdG9yLCBVSU5UMzIgbkRlbm9taW5hdG9y
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1GU2V0QXR0cmlidXRlUmF0aW8oR2V0TWVkaWFUeXBl
KCksIE1GX01UX1BJWEVMX0FTUEVDVF9SQVRJTywgbk51bWVyYXRvciwgbkRlbm9taW5hdG9yKTsK
KyAgICB9CisKKyAgICBIUkVTVUxUIFNldFBpeGVsQXNwZWN0UmF0aW8oY29uc3QgTUZSYXRpbyYg
cmF0aW8pCisgICAgeworICAgICAgICByZXR1cm4gTUZTZXRBdHRyaWJ1dGVSYXRpbyhHZXRNZWRp
YVR5cGUoKSwgTUZfTVRfUElYRUxfQVNQRUNUX1JBVElPLCByYXRpby5OdW1lcmF0b3IsIHJhdGlv
LkRlbm9taW5hdG9yKTsKKyAgICB9CisKKyAgICAvLyBRdWVyaWVzIHRoZSBpbnRlbmRlZCBhc3Bl
Y3QgcmF0aW8uCisgICAgSFJFU1VMVCBHZXRTb3VyY2VDb250ZW50SGludChNRlZpZGVvU3JjQ29u
dGVudEhpbnRGbGFncyogcEZsYWdzKQorICAgIHsKKyAgICAgICAgaWYgKCFwRmxhZ3MpCisgICAg
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCkt
PkdldFVJTlQzMihNRl9NVF9TT1VSQ0VfQ09OVEVOVF9ISU5ULCAoVUlOVDMyKilwRmxhZ3MpOwor
ICAgIH0KKworICAgIC8vIFNldHMgdGhlIGludGVuZGVkIGFzcGVjdCByYXRpby4KKyAgICBIUkVT
VUxUIFNldFNvdXJjZUNvbnRlbnRIaW50KE1GVmlkZW9TcmNDb250ZW50SGludEZsYWdzIG5GbGFn
cykKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01U
X1NPVVJDRV9DT05URU5UX0hJTlQsIChVSU5UMzIpbkZsYWdzKTsKKyAgICB9CisKKyAgICAvLyBR
dWVyaWVzIGFuIGVudW1lcmF0aW9uIHdoaWNoIHJlcHJlc2VudHMgdGhlIGNvbnZlcnNpb24gZnVu
Y3Rpb24gZnJvbSBSR0IgdG8gUidHJ0InLgorICAgIEhSRVNVTFQgR2V0VHJhbnNmZXJGdW5jdGlv
bihNRlZpZGVvVHJhbnNmZXJGdW5jdGlvbiogcG5GeG4pCisgICAgeworICAgICAgICBpZiAoIXBu
RnhuKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1l
ZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfVFJBTlNGRVJfRlVOQ1RJT04sIChVSU5UMzIqKXBu
RnhuKTsKKyAgICB9CisKKyAgICAvLyBTZXQgYW4gZW51bWVyYXRpb24gd2hpY2ggcmVwcmVzZW50
cyB0aGUgY29udmVyc2lvbiBmdW5jdGlvbiBmcm9tIFJHQiB0byBSJ0cnQicuCisgICAgSFJFU1VM
VCBTZXRUcmFuc2ZlckZ1bmN0aW9uKE1GVmlkZW9UcmFuc2ZlckZ1bmN0aW9uIG5GeG4pCisgICAg
eworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNldFVJTlQzMihNRl9NVF9UUkFOU0ZF
Ul9GVU5DVElPTiwgKFVJTlQzMiluRnhuKTsKKyAgICB9CisKKyAgICAvLyBRdWVyaWVzIGhvdyBj
aHJvbWEgd2FzIHNhbXBsZWQgZm9yIGEgWSdDYidDcicgdmlkZW8gbWVkaWEgdHlwZS4KKyAgICBI
UkVTVUxUIEdldENocm9tYVNpdGluZyhNRlZpZGVvQ2hyb21hU3Vic2FtcGxpbmcqIHBTYW1wbGlu
ZykKKyAgICB7CisgICAgICAgIGlmICghcFNhbXBsaW5nKQorICAgICAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRf
VklERU9fQ0hST01BX1NJVElORywgKFVJTlQzMiopcFNhbXBsaW5nKTsKKyAgICB9CisgICAgICAg
IAorICAgIC8vIFNldHMgaG93IGNocm9tYSB3YXMgc2FtcGxlZCBmb3IgYSBZJ0NiJ0NyJyB2aWRl
byBtZWRpYSB0eXBlLgorICAgIEhSRVNVTFQgU2V0Q2hyb21hU2l0aW5nKE1GVmlkZW9DaHJvbWFT
dWJzYW1wbGluZyBuU2FtcGxpbmcpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBl
KCktPlNldFVJTlQzMihNRl9NVF9WSURFT19DSFJPTUFfU0lUSU5HLCAoVUlOVDMyKW5TYW1wbGlu
Zyk7CisgICAgfQorICAgICAgICAKKyAgICAvLyBRdWVyaWVzIHRoZSBvcHRpbWFsIGxpZ2h0aW5n
IGNvbmRpdGlvbnMgZm9yIHZpZXdpbmcuCisgICAgSFJFU1VMVCBHZXRWaWRlb0xpZ2h0aW5nKE1G
VmlkZW9MaWdodGluZyogcExpZ2h0aW5nKQorICAgIHsKKyAgICAgICAgaWYgKCFwTGlnaHRpbmcp
CisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFU
eXBlKCktPkdldFVJTlQzMihNRl9NVF9WSURFT19MSUdIVElORywgKFVJTlQzMiopcExpZ2h0aW5n
KTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFNldHMgdGhlIG9wdGltYWwgbGlnaHRpbmcgY29u
ZGl0aW9ucyBmb3Igdmlld2luZy4KKyAgICBIUkVTVUxUIFNldFZpZGVvTGlnaHRpbmcoTUZWaWRl
b0xpZ2h0aW5nIG5MaWdodGluZykKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUo
KS0+U2V0VUlOVDMyKE1GX01UX1ZJREVPX0xJR0hUSU5HLCAoVUlOVDMyKW5MaWdodGluZyk7Cisg
ICAgfQorICAgICAgICAKKyAgICAvLyBRdWVyaWVzIHRoZSBub21pbmFsIHJhbmdlIG9mIHRoZSBj
b2xvciBpbmZvcm1hdGlvbiBpbiBhIHZpZGVvIG1lZGlhIHR5cGUuIAorICAgIEhSRVNVTFQgR2V0
VmlkZW9Ob21pbmFsUmFuZ2UoTUZOb21pbmFsUmFuZ2UqIHBSYW5nZSkKKyAgICB7CisgICAgICAg
IGlmICghcFJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0
dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfVklERU9fTk9NSU5BTF9SQU5HRSwg
KFVJTlQzMiopcFJhbmdlKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoZSBub21pbmFsIHJhbmdl
IG9mIHRoZSBjb2xvciBpbmZvcm1hdGlvbiBpbiBhIHZpZGVvIG1lZGlhIHR5cGUuIAorICAgIEhS
RVNVTFQgU2V0VmlkZW9Ob21pbmFsUmFuZ2UoTUZOb21pbmFsUmFuZ2UgblJhbmdlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfVklERU9fTk9N
SU5BTF9SQU5HRSwgKFVJTlQzMiluUmFuZ2UpOworICAgIH0KKworICAgIC8vIFF1ZXJpZXMgdGhl
IGNvbG9yIHByaW1hcmllcyBmb3IgYSB2aWRlbyBtZWRpYSB0eXBlLgorICAgIEhSRVNVTFQgR2V0
VmlkZW9QcmltYXJpZXMoTUZWaWRlb1ByaW1hcmllcyogcFByaW1hcmllcykKKyAgICB7CisgICAg
ICAgIGlmICghcFByaW1hcmllcykKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAg
ICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX1ZJREVPX1BSSU1BUklF
UywgKFVJTlQzMiopcFByaW1hcmllcyk7CisgICAgfQorCisgICAgLy8gU2V0cyB0aGUgY29sb3Ig
cHJpbWFyaWVzIGZvciBhIHZpZGVvIG1lZGlhIHR5cGUuCisgICAgSFJFU1VMVCBTZXRWaWRlb1By
aW1hcmllcyhNRlZpZGVvUHJpbWFyaWVzIG5QcmltYXJpZXMpCisgICAgeworICAgICAgICByZXR1
cm4gR2V0TWVkaWFUeXBlKCktPlNldFVJTlQzMihNRl9NVF9WSURFT19QUklNQVJJRVMsIChVSU5U
MzIpblByaW1hcmllcyk7CisgICAgfQorCisgICAgLy8gR2V0cyBhIGVudW1lcmF0aW9uIHJlcHJl
c2VudGluZyB0aGUgY29udmVyc2lvbiBtYXRyaXggZnJvbSB0aGUgCisgICAgLy8gWSdDYidDcicg
Y29sb3Igc3BhY2UgdG8gdGhlIFInRydCJyBjb2xvciBzcGFjZS4KKyAgICBIUkVTVUxUIEdldFlV
Vk1hdHJpeChNRlZpZGVvVHJhbnNmZXJNYXRyaXgqIHBNYXRyaXgpCisgICAgeworICAgICAgICBp
ZiAoIXBNYXRyaXgpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1
cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9ZVVZfTUFUUklYLCAoVUlOVDMyKilw
TWF0cml4KTsKKyAgICB9IAorCisgICAgLy8gU2V0cyBhbiBlbnVtZXJhdGlvbiByZXByZXNlbnRp
bmcgdGhlIGNvbnZlcnNpb24gbWF0cml4IGZyb20gdGhlIAorICAgIC8vIFknQ2InQ3InIGNvbG9y
IHNwYWNlIHRvIHRoZSBSJ0cnQicgY29sb3Igc3BhY2UuCisgICAgSFJFU1VMVCBTZXRZVVZNYXRy
aXgoTUZWaWRlb1RyYW5zZmVyTWF0cml4IG5NYXRyaXgpCisgICAgeworICAgICAgICByZXR1cm4g
R2V0TWVkaWFUeXBlKCktPlNldFVJTlQzMihNRl9NVF9ZVVZfTUFUUklYLCAoVUlOVDMyKW5NYXRy
aXgpOworICAgIH0gCisKKyAgICAvLyAKKyAgICAvLyBUaGUgZm9sbG93aW5nIHZlcnNpb25zIHJl
dHVybiByZWFzb25hYmxlIGRlZmF1bHRzIGlmIHRoZSByZWxldmFudCBhdHRyaWJ1dGUgaXMgbm90
IHByZXNlbnQgKHplcm8vRkFMU0UpLgorICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciBtYWtpbmcg
cXVpY2sgY29tcGFyaXNvbnMgYmV0d2VlZW4gbWVkaWEgdHlwZXMuIAorICAgIC8vCisKKyAgICBN
RlJhdGlvIEdldFBpeGVsQXNwZWN0UmF0aW8oKSAvLyBEZWZhdWx0cyB0byAxOjEgKHNxdWFyZSBw
aXhlbHMpCisgICAgeworICAgICAgICBNRlJhdGlvIFBBUiA9IHsgMCwgMCB9OworICAgICAgICBI
UkVTVUxUIGhyID0gU19PSzsKKworICAgICAgICBociA9IE1GR2V0QXR0cmlidXRlUmF0aW8oR2V0
TWVkaWFUeXBlKCksIE1GX01UX1BJWEVMX0FTUEVDVF9SQVRJTywgKFVJTlQzMiopJlBBUi5OdW1l
cmF0b3IsIChVSU5UMzIqKSZQQVIuRGVub21pbmF0b3IpOworICAgICAgICBpZiAoRkFJTEVEKGhy
KSkgeworICAgICAgICAgICAgUEFSLk51bWVyYXRvciA9IDE7CisgICAgICAgICAgICBQQVIuRGVu
b21pbmF0b3IgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQQVI7CisgICAgfSAgICAg
ICAKKworICAgIEJPT0wgSXNQYW5TY2FuRW5hYmxlZCgpIC8vIERlZmF1bHRzIHRvIEZBTFNFCisg
ICAgeworICAgICAgICByZXR1cm4gKEJPT0wpTUZHZXRBdHRyaWJ1dGVVSU5UMzIoR2V0TWVkaWFU
eXBlKCksIE1GX01UX1BBTl9TQ0FOX0VOQUJMRUQsIEZBTFNFKTsKKyAgICB9CisKKyAgICAvLyBS
ZXR1cm5zIChpbiB0aGlzIG9yZGVyKSAKKyAgICAvLyAxLiBUaGUgcGFuL3NjYW4gcmVnaW9uLCBv
bmx5IGlmIHBhbi9zY2FuIG1vZGUgaXMgZW5hYmxlZC4KKyAgICAvLyAyLiBUaGUgZ2VvbWV0cmlj
IGFwZXJ0dXJlLgorICAgIC8vIDMuIFRoZSBlbnRpcmUgdmlkZW8gYXJlYS4KKyAgICBIUkVTVUxU
IEdldFZpZGVvRGlzcGxheUFyZWEoTUZWaWRlb0FyZWEqIHBBcmVhKQorICAgIHsKKyAgICAgICAg
aWYgKCFwQXJlYSkKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVy
biBNZWRpYUZvdW5kYXRpb25VdGlsczo6R2V0VmlkZW9EaXNwbGF5QXJlYShHZXRNZWRpYVR5cGUo
KSwgcEFyZWEpOworICAgIH0KK307ICAKKworCisvLyBBdWRpb1R5cGVXcmFwcGVyIHByb3ZpZGVz
IGFjY2VzcyB0byBhdWRpby1zcGVjaWZpYyBhdHRyaWJ1dGVzLgorCitjbGFzcyBBdWRpb1R5cGUg
OiBwdWJsaWMgTWVkaWFUeXBlIHsKKyAgICBmcmllbmQgY2xhc3MgTWVkaWFUeXBlOyAKKworcHVi
bGljOgorICAgIEF1ZGlvVHlwZShJTUZNZWRpYVR5cGUqIHBUeXBlID0gbnVsbHB0cikKKyAgICAg
ICAgOiBNZWRpYVR5cGUocFR5cGUpCisgICAgeworICAgIH0KKyAgICAgICAgCisgICAgdmlydHVh
bCBIUkVTVUxUIENyZWF0ZUVtcHR5VHlwZSgpCisgICAgeworICAgICAgICBpZiAobV9wVHlwZSkK
KyAgICAgICAgICAgIG1fcFR5cGUtPlJlbGVhc2UoKTsKKworICAgICAgICBIUkVTVUxUIGhyID0g
U19PSzsKKworICAgICAgICBociA9IE1lZGlhVHlwZTo6Q3JlYXRlRW1wdHlUeXBlKCk7CisKKyAg
ICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICBociA9IFNldE1ham9yVHlwZShN
Rk1lZGlhVHlwZV9BdWRpbyk7CisKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKyAgICAgICAg
CisgICAgLy8gUXVlcnkgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGJ5dGVzIHBlciBzZWNvbmQuCisg
ICAgSFJFU1VMVCBHZXRBdmdlcmFnZUJ5dGVzUGVyU2Vjb25kKFVJTlQzMiogcEJ5dGVzKQorICAg
IHsKKyAgICAgICAgaWYgKCFwQnl0ZXMpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwor
ICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9BVURJT19BVkdf
QllURVNfUEVSX1NFQ09ORCwgcEJ5dGVzKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoZSBhdmVy
YWdlIG51bWJlciBvZiBieXRlcyBwZXIgc2Vjb25kLgorICAgIEhSRVNVTFQgU2V0QXZnZXJhZ2VC
eXRlc1BlclNlY29uZChVSU5UMzIgbkJ5dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1l
ZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfQVVESU9fQVZHX0JZVEVTX1BFUl9TRUNPTkQsIG5C
eXRlcyk7CisgICAgfQorCisgICAgLy8gUXVlcnkgdGhlIGJpdHMgcGVyIGF1ZGlvIHNhbXBsZQor
ICAgIEhSRVNVTFQgR2V0Qml0c1BlclNhbXBsZShVSU5UMzIqIHBCaXRzKQorICAgIHsKKyAgICAg
ICAgaWYgKCFwQml0cykKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJl
dHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX0FVRElPX0JJVFNfUEVSX1NBTVBM
RSwgcEJpdHMpOworICAgIH0KKyAgICAgICAgCisgICAgLy8gU2V0cyB0aGUgYml0cyBwZXIgYXVk
aW8gc2FtcGxlCisgICAgSFJFU1VMVCBTZXRCaXRzUGVyU2FtcGxlKFVJTlQzMiBuQml0cykKKyAg
ICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0FVRElP
X0JJVFNfUEVSX1NBTVBMRSwgbkJpdHMpOworICAgIH0KKyAgICAgICAgCisgICAgLy8gUXVlcnkg
dGhlIGJsb2NrIGFpZ25tZW50IGluIGJ5dGVzCisgICAgSFJFU1VMVCBHZXRCbG9ja0FsaWdubWVu
dChVSU5UMzIqIHBCeXRlcykKKyAgICB7CisgICAgICAgIGlmICghcEJ5dGVzKQorICAgICAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRV
SU5UMzIoTUZfTVRfQVVESU9fQkxPQ0tfQUxJR05NRU5ULCBwQnl0ZXMpOworICAgIH0KKyAgICAg
ICAgCisgICAgLy8gU2V0cyB0aGUgYmxvY2sgYWlnbm1lbnQgaW4gYnl0ZXMKKyAgICBIUkVTVUxU
IFNldEJsb2NrQWxpZ25tZW50KFVJTlQzMiBuQnl0ZXMpCisgICAgeworICAgICAgICByZXR1cm4g
R2V0TWVkaWFUeXBlKCktPlNldFVJTlQzMihNRl9NVF9BVURJT19CTE9DS19BTElHTk1FTlQsIG5C
eXRlcyk7CisgICAgfQorICAgICAgICAKKyAgICAvLyBRdWVyeSB0aGUgYXNzaWdubWVudCBvZiBh
dWRpbyBjaGFubmVscyB0byBzcGVha2VyIHBvc2l0aW9ucy4KKyAgICBIUkVTVUxUIEdldENoYW5u
ZWxNYXNrKFVJTlQzMiogcE1hc2spCisgICAgeworICAgICAgICBpZiAoIXBNYXNrKQorICAgICAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5H
ZXRVSU5UMzIoTUZfTVRfQVVESU9fQ0hBTk5FTF9NQVNLLCBwTWFzayk7CisgICAgfQorICAgICAg
ICAKKyAgICAvLyBTZXRzIHRoZSBhc3NpZ25tZW50IG9mIGF1ZGlvIGNoYW5uZWxzIHRvIHNwZWFr
ZXIgcG9zaXRpb25zLgorICAgIEhSRVNVTFQgU2V0Q2hhbm5lbE1hc2soVUlOVDMyIG5NYXNrKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfQVVE
SU9fQ0hBTk5FTF9NQVNLLCBuTWFzayk7CisgICAgfQorICAgICAgICAKKyAgICAvLyBRdWVyeSB0
aGUgbnVtYmVyIG9mIGF1ZGlvIHNhbXBsZXMgcGVyIHNlY29uZCAoZmxvYXRpbmctcG9pbnQgdmFs
dWUpLgorICAgIEhSRVNVTFQgR2V0RmxvYXRTYW1wbGVzUGVyU2Vjb25kKGRvdWJsZSogcGZTYW1w
bGVSYXRlKQorICAgIHsKKyAgICAgICAgaWYgKCFwZlNhbXBsZVJhdGUpCisgICAgICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldERvdWJs
ZShNRl9NVF9BVURJT19GTE9BVF9TQU1QTEVTX1BFUl9TRUNPTkQsIHBmU2FtcGxlUmF0ZSk7Cisg
ICAgfQorCisgICAgLy8gU2V0cyB0aGUgbnVtYmVyIG9mIGF1ZGlvIHNhbXBsZXMgcGVyIHNlY29u
ZCAoZmxvYXRpbmctcG9pbnQgdmFsdWUpLgorICAgIEhSRVNVTFQgU2V0RmxvYXRTYW1wbGVzUGVy
U2Vjb25kKGRvdWJsZSBmU2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRp
YVR5cGUoKS0+U2V0RG91YmxlKE1GX01UX0FVRElPX0ZMT0FUX1NBTVBMRVNfUEVSX1NFQ09ORCwg
ZlNhbXBsZVJhdGUpOworICAgIH0KKworICAgIC8vIFF1ZXJpZXMgdGhlIG51bWJlciBvZiBhdWRp
byBjaGFubmVscworICAgIEhSRVNVTFQgR2V0TnVtQ2hhbm5lbHMoVUlOVDMyKiBwbkNoYW5uZWxz
KQorICAgIHsKKyAgICAgICAgaWYgKCFwbkNoYW5uZWxzKQorICAgICAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRf
QVVESU9fTlVNX0NIQU5ORUxTLCBwbkNoYW5uZWxzKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRo
ZSBudW1iZXIgb2YgYXVkaW8gY2hhbm5lbHMKKyAgICBIUkVTVUxUIFNldE51bUNoYW5uZWxzKFVJ
TlQzMiBuQ2hhbm5lbHMpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNl
dFVJTlQzMihNRl9NVF9BVURJT19OVU1fQ0hBTk5FTFMsIG5DaGFubmVscyk7CisgICAgfQorCisg
ICAgLy8gUXVlcnkgdGhlIG51bWJlciBvZiBhdWRpbyBzYW1wbGVzIGNvbnRhaW5lZCBpbiBvbmUg
Y29tcHJlc3NlZCBibG9jayBvZiBhdWRpbyBkYXRhLgorICAgIEhSRVNVTFQgR2V0U2FtcGxlc1Bl
ckJsb2NrKFVJTlQzMiogcG5TYW1wbGVzKQorICAgIHsKKyAgICAgICAgaWYgKCFwblNhbXBsZXMp
CisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFU
eXBlKCktPkdldFVJTlQzMihNRl9NVF9BVURJT19TQU1QTEVTX1BFUl9CTE9DSywgcG5TYW1wbGVz
KTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoZSBudW1iZXIgb2YgYXVkaW8gc2FtcGxlcyBjb250
YWluZWQgaW4gb25lIGNvbXByZXNzZWQgYmxvY2sgb2YgYXVkaW8gZGF0YS4KKyAgICBIUkVTVUxU
IFNldFNhbXBsZXNQZXJCbG9jayhVSU5UMzIgblNhbXBsZXMpCisgICAgeworICAgICAgICByZXR1
cm4gR2V0TWVkaWFUeXBlKCktPlNldFVJTlQzMihNRl9NVF9BVURJT19TQU1QTEVTX1BFUl9CTE9D
SywgblNhbXBsZXMpOworICAgIH0KKworICAgIC8vIFF1ZXJ5IHRoZSBudW1iZXIgb2YgYXVkaW8g
c2FtcGxlcyBwZXIgc2Vjb25kIGFzIGFuIGludGVnZXIgdmFsdWUuCisgICAgSFJFU1VMVCBHZXRT
YW1wbGVzUGVyU2Vjb25kKFVJTlQzMiogcG5TYW1wbGVSYXRlKQorICAgIHsKKyAgICAgICAgaWYg
KCFwblNhbXBsZVJhdGUpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICBy
ZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9BVURJT19TQU1QTEVTX1BFUl9T
RUNPTkQsIHBuU2FtcGxlUmF0ZSk7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBudW1iZXIgb2Yg
YXVkaW8gc2FtcGxlcyBwZXIgc2Vjb25kIGFzIGFuIGludGVnZXIgdmFsdWUuCisgICAgSFJFU1VM
VCBTZXRTYW1wbGVzUGVyU2Vjb25kKFVJTlQzMiBuU2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX0FVRElPX1NBTVBMRVNfUEVS
X1NFQ09ORCwgblNhbXBsZVJhdGUpOworICAgIH0KKworICAgIC8vIFF1ZXJ5IG51bWJlciBvZiB2
YWxpZCBiaXRzIG9mIGF1ZGlvIGRhdGEgaW4gZWFjaCBzYW1wbGUuCisgICAgSFJFU1VMVCBHZXRW
YWxpZEJpdHNQZXJTYW1wbGUoVUlOVDMyKiBwbkJpdHMpCisgICAgeworICAgICAgICBpZiAoIXBu
Qml0cykKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIEhSRVNVTFQgaHIg
PSBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1GX01UX0FVRElPX1ZBTElEX0JJVFNfUEVSX1NB
TVBMRSwgcG5CaXRzKTsKKyAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAg
aHIgPSBHZXRCaXRzUGVyU2FtcGxlKHBuQml0cyk7CisgICAgICAgIHJldHVybiBocjsKKyAgICB9
IAorICAgICAgICAKKyAgICAvLyBTZXQgdGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIG9mIGF1ZGlv
IGRhdGEgaW4gZWFjaCBzYW1wbGUuCisgICAgSFJFU1VMVCBTZXRWYWxpZEJpdHNQZXJTYW1wbGUo
VUlOVDMyIG5CaXRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRV
SU5UMzIoTUZfTVRfQVVESU9fVkFMSURfQklUU19QRVJfU0FNUExFLCBuQml0cyk7CisgICAgfSAK
KworCisgICAgLy8gVGhlIGZvbGxvd2luZyB2ZXJzaW9ucyByZXR1cm4gemVybyBpZiB0aGUgcmVs
ZXZhbnQgYXR0cmlidXRlIGlzIG5vdCBwcmVzZW50LiAKKyAgICAvLyBUaGlzIGlzIHVzZWZ1bCBm
b3IgbWFraW5nIHF1aWNrIGNvbXBhcmlzb25zIGJldHdlZWVuIG1lZGlhIHR5cGVzLiAKKworICAg
IFVJTlQzMiBBdmdlcmFnZUJ5dGVzUGVyU2Vjb25kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBN
RkdldEF0dHJpYnV0ZVVJTlQzMihHZXRNZWRpYVR5cGUoKSwgTUZfTVRfQVVESU9fQVZHX0JZVEVT
X1BFUl9TRUNPTkQsIDApOworICAgIH0KKworICAgIFVJTlQzMiBCaXRzUGVyU2FtcGxlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBNRkdldEF0dHJpYnV0ZVVJTlQzMihHZXRNZWRpYVR5cGUoKSwg
TUZfTVRfQVVESU9fQklUU19QRVJfU0FNUExFLCAwKTsKKyAgICB9CisgICAgICAgIAorICAgIFVJ
TlQzMiBHZXRCbG9ja0FsaWdubWVudCgpCisgICAgeworICAgICAgICByZXR1cm4gTUZHZXRBdHRy
aWJ1dGVVSU5UMzIoR2V0TWVkaWFUeXBlKCksIE1GX01UX0FVRElPX0JMT0NLX0FMSUdOTUVOVCwg
MCk7CisgICAgfQorICAgICAgICAKKyAgICBkb3VibGUgRmxvYXRTYW1wbGVzUGVyU2Vjb25kKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBNRkdldEF0dHJpYnV0ZURvdWJsZShHZXRNZWRpYVR5cGUo
KSwgTUZfTVRfQVVESU9fRkxPQVRfU0FNUExFU19QRVJfU0VDT05ELCAwLjApOworICAgIH0KKwor
ICAgIFVJTlQzMiBOdW1DaGFubmVscygpCisgICAgeworICAgICAgICByZXR1cm4gTUZHZXRBdHRy
aWJ1dGVVSU5UMzIoR2V0TWVkaWFUeXBlKCksIE1GX01UX0FVRElPX05VTV9DSEFOTkVMUywgMCk7
CisgICAgfQorCisgICAgVUlOVDMyIFNhbXBsZXNQZXJTZWNvbmQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE1GR2V0QXR0cmlidXRlVUlOVDMyKEdldE1lZGlhVHlwZSgpLCBNRl9NVF9BVURJT19T
QU1QTEVTX1BFUl9TRUNPTkQsIDApOworICAgIH0KKworfTsgIAorCisKKy8vIE1QRUdWaWRlb1R5
cGUgcHJvdmlkZXMgYWNjZXNzIHRvIE1QRUctMSBhbmQgTVBFRy0yIHZpZGVvIAorLy8gYXR0cmli
dXRlcywgcGx1cyB0aGUgZ2VuZXJhbCB2aWRlbyBhdHRyaWJ1dGVzLgorCitjbGFzcyBNUEVHVmlk
ZW9UeXBlIDogcHVibGljIFZpZGVvVHlwZSB7CisgICAgZnJpZW5kIGNsYXNzIE1lZGlhVHlwZTsg
CisKK3B1YmxpYzoKKworICAgIE1QRUdWaWRlb1R5cGUoSU1GTWVkaWFUeXBlKiBwVHlwZSA9IG51
bGxwdHIpCisgICAgICAgIDogVmlkZW9UeXBlKHBUeXBlKQorICAgIHsKKyAgICB9CisKKyAgICAv
LyBSZXRyaWV2ZXMgdGhlIE1QRUcgc2VxdWVuY2UgaGVhZGVyIGZvciBhIHZpZGVvIG1lZGlhIHR5
cGUuCisgICAgSFJFU1VMVCBHZXRNcGVnU2VxSGVhZGVyKEJZVEUqIHBEYXRhLCBVSU5UMzIgY2JT
aXplKQorICAgIHsKKyAgICAgICAgaWYgKCFwRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBFX1BP
SU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0QmxvYihNRl9NVF9NUEVH
X1NFUVVFTkNFX0hFQURFUiwgcERhdGEsIGNiU2l6ZSwgbnVsbHB0cik7CisgICAgfQorCisgICAg
Ly8gU2V0cyB0aGUgTVBFRyBzZXF1ZW5jZSBoZWFkZXIgZm9yIGEgdmlkZW8gbWVkaWEgdHlwZS4K
KyAgICBIUkVTVUxUIFNldE1wZWdTZXFIZWFkZXIoY29uc3QgQllURSogcERhdGEsIFVJTlQzMiBj
YlNpemUpCisgICAgeworICAgICAgICBpZiAoIXBEYXRhKQorICAgICAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRCbG9iKE1GX01UX01Q
RUdfU0VRVUVOQ0VfSEVBREVSLCBwRGF0YSwgY2JTaXplKTsKKyAgICB9CisKKyAgICAvLyBSZXRy
aWV2ZXMgdGhlIHNpemUgb2YgdGhlIE1QRUcgc2VxdWVuY2UgaGVhZGVyLgorICAgIEhSRVNVTFQg
R2V0TXBlZ1NlcUhlYWRlclNpemUoVUlOVDMyKiBwY2JTaXplKQorICAgIHsKKyAgICAgICAgaWYg
KCFwY2JTaXplKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgICAgICAqcGNi
U2l6ZSA9IDA7CisKKyAgICAgICAgSFJFU1VMVCBociA9IEdldE1lZGlhVHlwZSgpLT5HZXRCbG9i
U2l6ZShNRl9NVF9NUEVHX1NFUVVFTkNFX0hFQURFUiwgcGNiU2l6ZSk7CisKKyAgICAgICAgaWYg
KGhyID09IE1GX0VfQVRUUklCVVRFTk9URk9VTkQpCisgICAgICAgICAgICBociA9IFNfT0s7Cisg
ICAgICAgIHJldHVybiBocjsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFJldHJpZXZlIHRoZSBn
cm91cC1vZi1waWN0dXJlcyAoR09QKSBzdGFydCB0aW1lIGNvZGUsIGZvciBhbiBNUEVHLTEgb3Ig
TVBFRy0yIHZpZGVvIG1lZGlhIHR5cGUuCisgICAgSFJFU1VMVCBHZXRTdGFydFRpbWVDb2RlKFVJ
TlQzMiogcG5UaW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFwblRpbWUpCisgICAgICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJTlQz
MihNRl9NVF9NUEVHX1NUQVJUX1RJTUVfQ09ERSwgcG5UaW1lKTsKKyAgICB9CisKKyAgICAvLyBT
ZXRzIHRoZSBncm91cC1vZi1waWN0dXJlcyAoR09QKSBzdGFydCB0aW1lIGNvZGUsIGZvciBhbiBN
UEVHLTEgb3IgTVBFRy0yIHZpZGVvIG1lZGlhIHR5cGUuCisgICAgSFJFU1VMVCBTZXRTdGFydFRp
bWVDb2RlKFVJTlQzMiBuVGltZSkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUo
KS0+U2V0VUlOVDMyKE1GX01UX01QRUdfU1RBUlRfVElNRV9DT0RFLCBuVGltZSk7CisgICAgfQor
CisgICAgLy8gUmV0cmlldmVzIGFzc29ydGVkIGZsYWdzIGZvciBNUEVHLTIgdmlkZW8gbWVkaWEg
dHlwZQorICAgIEhSRVNVTFQgR2V0TVBFRzJGbGFncyhVSU5UMzIqIHBuRmxhZ3MpCisgICAgewor
ICAgICAgICBpZiAoIXBuRmxhZ3MpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAg
ICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldFVJTlQzMihNRl9NVF9NUEVHMl9GTEFHUywg
cG5GbGFncyk7CisgICAgfQorCisgICAgLy8gU2V0cyBhc3NvcnRlZCBmbGFncyBmb3IgTVBFRy0y
IHZpZGVvIG1lZGlhIHR5cGUKKyAgICBIUkVTVUxUIFNldE1QRUcyRmxhZ3MoVUlOVDMyIG5GbGFn
cykKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1GX01U
X01QRUcyX0ZMQUdTLCBuRmxhZ3MpOworICAgIH0KKworICAgIC8vIFJldHJpZXZlcyB0aGUgTVBF
Ry0yIGxldmVsIGluIGEgdmlkZW8gbWVkaWEgdHlwZS4KKyAgICBIUkVTVUxUIEdldE1QRUcyTGV2
ZWwoVUlOVDMyKiBwTGV2ZWwpCisgICAgeworICAgICAgICBpZiAoIXBMZXZlbCkKKyAgICAgICAg
ICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0
VUlOVDMyKE1GX01UX01QRUcyX0xFVkVMLCBwTGV2ZWwpOworICAgIH0KKworICAgIC8vIFNldHMg
dGhlIE1QRUctMiBsZXZlbCBpbiBhIHZpZGVvIG1lZGlhIHR5cGUuCisgICAgSFJFU1VMVCBTZXRN
UEVHMkxldmVsKFVJTlQzMiBuTGV2ZWwpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFU
eXBlKCktPlNldFVJTlQzMihNRl9NVF9NUEVHMl9MRVZFTCwgbkxldmVsKTsKKyAgICB9CisKKyAg
ICAvLyBSZXRyaWV2ZXMgdGhlIE1QRUctMiBwcm9maWxlIGluIGEgdmlkZW8gbWVkaWEgdHlwZQor
ICAgIEhSRVNVTFQgR2V0TVBFRzJQcm9maWxlKFVJTlQzMiogcFByb2ZpbGUpCisgICAgeworICAg
ICAgICBpZiAoIXBQcm9maWxlKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAg
ICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5HZXRVSU5UMzIoTUZfTVRfTVBFRzJfUFJPRklMRSwg
cFByb2ZpbGUpOworICAgIH0KKworICAgIC8vIFNldHMgdGhlIE1QRUctMiBwcm9maWxlIGluIGEg
dmlkZW8gbWVkaWEgdHlwZQorICAgIEhSRVNVTFQgU2V0TVBFRzJQcm9maWxlKFVJTlQzMiBuUHJv
ZmlsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0VUlOVDMyKE1G
X01UX01QRUcyX1BST0ZJTEUsIG5Qcm9maWxlKTsKKyAgICB9CisKK307CisKKworLy8gSGVscGVy
IGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIG1lZGlhIHR5cGVzLgorCitpbmxpbmUgTUZPZmZz
ZXQgTWFrZU9mZnNldChmbG9hdCB2KQoreworICAgIC8vIHYgPSBvZmZzZXQudmFsdWUgKyAob2Zm
c2V0LmZyYWN0IC8gZGVub21pbmF0b3IpLCB3aGVyZSBkZW5vbWluYXRvciA9IDY1NTM2LjBmLgor
ICAgIGNvbnN0IGludCBkZW5vbWluYXRvciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8V09SRD46Om1h
eCgpICsgMTsKKyAgICBNRk9mZnNldCBvZmZzZXQ7CisgICAgb2Zmc2V0LnZhbHVlID0gc2hvcnQo
dik7CisgICAgb2Zmc2V0LmZyYWN0ID0gV09SRChkZW5vbWluYXRvciAqICh2IC0gb2Zmc2V0LnZh
bHVlKSk7CisgICAgcmV0dXJuIG9mZnNldDsKK30KKworLy8gTUZPZmZzZXRUb0Zsb2F0OiBDb252
ZXJ0IGEgZml4ZWQtcG9pbnQgdG8gYSBmbG9hdC4KK2lubGluZSBmbG9hdCBNRk9mZnNldFRvRmxv
YXQoY29uc3QgTUZPZmZzZXQmIG9mZnNldCkKK3sKKyAgICBjb25zdCBpbnQgZGVub21pbmF0b3Ig
PSBzdGQ6Om51bWVyaWNfbGltaXRzPFdPUkQ+OjptYXgoKSArIDE7CisgICAgcmV0dXJuIG9mZnNl
dC52YWx1ZSArIChmbG9hdChvZmZzZXQuZnJhY3QpIC8gZGVub21pbmF0b3IpOworfQorCitpbmxp
bmUgTUZWaWRlb0FyZWEgTWFrZUFyZWEoZmxvYXQgeCwgZmxvYXQgeSwgRFdPUkQgd2lkdGgsIERX
T1JEIGhlaWdodCkKK3sKKyAgICBNRlZpZGVvQXJlYSBhcmVhOworICAgIGFyZWEuT2Zmc2V0WCA9
IE1ha2VPZmZzZXQoeCk7CisgICAgYXJlYS5PZmZzZXRZID0gTWFrZU9mZnNldCh5KTsKKyAgICBh
cmVhLkFyZWEuY3ggPSB3aWR0aDsKKyAgICBhcmVhLkFyZWEuY3kgPSBoZWlnaHQ7CisgICAgcmV0
dXJuIGFyZWE7Cit9CisKKy8vIEdldCB0aGUgZnJhbWUgcmF0ZSBmcm9tIGEgdmlkZW8gbWVkaWEg
dHlwZS4KK2lubGluZSBIUkVTVUxUIEdldEZyYW1lUmF0ZShJTUZNZWRpYVR5cGUgKnBUeXBlLCBN
RlJhdGlvICpwUmF0aW8pCit7CisgICAgcmV0dXJuIE1GR2V0QXR0cmlidXRlUmF0aW8ocFR5cGUs
IE1GX01UX0ZSQU1FX1JBVEUsIChVSU5UMzIqKSZwUmF0aW8tPk51bWVyYXRvciwgKFVJTlQzMiop
JnBSYXRpby0+RGVub21pbmF0b3IpOworfQorCisvLyBHZXQgdGhlIGNvcnJlY3QgZGlzcGxheSBh
cmVhIGZyb20gYSB2aWRlbyBtZWRpYSB0eXBlLgoraW5saW5lIEhSRVNVTFQgR2V0VmlkZW9EaXNw
bGF5QXJlYShJTUZNZWRpYVR5cGUgKnBUeXBlLCBNRlZpZGVvQXJlYSAqcEFyZWEpCit7CisgICAg
SFJFU1VMVCBociA9IFNfT0s7CisgICAgQk9PTCBiUGFuU2NhbiA9IEZBTFNFOworICAgIFVJTlQz
MiB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisKKyAgICBiUGFuU2NhbiA9IE1GR2V0QXR0cmlidXRl
VUlOVDMyKHBUeXBlLCBNRl9NVF9QQU5fU0NBTl9FTkFCTEVELCBGQUxTRSk7CisKKyAgICAvLyBJ
biBwYW4vc2NhbiBtb2RlLCB0cnkgdG8gZ2V0IHRoZSBwYW4vc2NhbiByZWdpb24uCisgICAgaWYg
KGJQYW5TY2FuKQorICAgICAgICBociA9IHBUeXBlLT5HZXRCbG9iKE1GX01UX1BBTl9TQ0FOX0FQ
RVJUVVJFLCAoVUlOVDgqKXBBcmVhLCBzaXplb2YoTUZWaWRlb0FyZWEpLCBudWxscHRyKTsKKwor
ICAgIC8vIElmIG5vdCBpbiBwYW4vc2NhbiBtb2RlLCBvciB0aGUgcGFuL3NjYW4gcmVnaW9uIGlz
IG5vdCBzZXQsIGdldCB0aGUgbWluaW1pbXVtIGRpc3BsYXkgYXBlcnR1cmUuCisKKyAgICBpZiAo
IWJQYW5TY2FuIHx8IGhyID09IE1GX0VfQVRUUklCVVRFTk9URk9VTkQpIHsKKyAgICAgICAgaHIg
PSBwVHlwZS0+R2V0QmxvYihNRl9NVF9NSU5JTVVNX0RJU1BMQVlfQVBFUlRVUkUsIChVSU5UOCop
cEFyZWEsIHNpemVvZihNRlZpZGVvQXJlYSksIG51bGxwdHIpOworCisgICAgICAgIGlmIChociA9
PSBNRl9FX0FUVFJJQlVURU5PVEZPVU5EKSB7CisgICAgICAgICAgICAvLyBNaW5pbXVtIGRpc3Bs
YXkgYXBlcnR1cmUgaXMgbm90IHNldC4KKworICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNv
bXBhdGliaWxpdHkgd2l0aCBzb21lIGNvbXBvbmVudHMsIGNoZWNrIGZvciBhIGdlb21ldHJpYyBh
cGVydHVyZS4gCisgICAgICAgICAgICBociA9IHBUeXBlLT5HZXRCbG9iKE1GX01UX0dFT01FVFJJ
Q19BUEVSVFVSRSwgKFVJTlQ4KilwQXJlYSwgc2l6ZW9mKE1GVmlkZW9BcmVhKSwgbnVsbHB0cik7
CisgICAgICAgIH0KKworICAgICAgICAvLyBEZWZhdWx0OiBVc2UgdGhlIGVudGlyZSB2aWRlbyBh
cmVhLgorCisgICAgICAgIGlmIChociA9PSBNRl9FX0FUVFJJQlVURU5PVEZPVU5EKSB7CisgICAg
ICAgICAgICBociA9IE1GR2V0QXR0cmlidXRlU2l6ZShwVHlwZSwgTUZfTVRfRlJBTUVfU0laRSwg
JndpZHRoLCAmaGVpZ2h0KTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAg
ICAgICAgICAgICpwQXJlYSA9IE1ha2VBcmVhKDAuMCwgMC4wLCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworCitpbmxpbmUgSFJFU1VMVCBH
ZXREZWZhdWx0U3RyaWRlKElNRk1lZGlhVHlwZSAqcFR5cGUsIExPTkcgKnBsU3RyaWRlKQorewor
ICAgIExPTkcgbFN0cmlkZSA9IDA7CisKKyAgICAvLyBUcnkgdG8gZ2V0IHRoZSBkZWZhdWx0IHN0
cmlkZSBmcm9tIHRoZSBtZWRpYSB0eXBlLgorICAgIEhSRVNVTFQgaHIgPSBwVHlwZS0+R2V0VUlO
VDMyKE1GX01UX0RFRkFVTFRfU1RSSURFLCAoVUlOVDMyKikmbFN0cmlkZSk7CisgICAgaWYgKEZB
SUxFRChocikpIHsKKyAgICAgICAgLy8gQXR0cmlidXRlIG5vdCBzZXQuIFRyeSB0byBjYWxjdWxh
dGUgdGhlIGRlZmF1bHQgc3RyaWRlLgorICAgICAgICBHVUlEIHN1YnR5cGUgPSBHVUlEX05VTEw7
CisKKyAgICAgICAgVUlOVDMyIHdpZHRoID0gMDsKKyAgICAgICAgVUlOVDMyIGhlaWdodCA9IDA7
CisKKyAgICAgICAgLy8gR2V0IHRoZSBzdWJ0eXBlIGFuZCB0aGUgaW1hZ2Ugc2l6ZS4KKyAgICAg
ICAgaHIgPSBwVHlwZS0+R2V0R1VJRChNRl9NVF9TVUJUWVBFLCAmc3VidHlwZSk7CisgICAgICAg
IGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgaHIgPSBNRkdldEF0dHJpYnV0ZVNpemUo
cFR5cGUsIE1GX01UX0ZSQU1FX1NJWkUsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgICAgIGlmIChT
VUNDRUVERUQoaHIpKQorICAgICAgICAgICAgaHIgPSBNRkdldFN0cmlkZUZvckJpdG1hcEluZm9I
ZWFkZXIoc3VidHlwZS5EYXRhMSwgd2lkdGgsICZsU3RyaWRlKTsKKworICAgICAgICAvLyBTZXQg
dGhlIGF0dHJpYnV0ZSBmb3IgbGF0ZXIgcmVmZXJlbmNlLgorICAgICAgICBpZiAoU1VDQ0VFREVE
KGhyKSkKKyAgICAgICAgICAgIHBUeXBlLT5TZXRVSU5UMzIoTUZfTVRfREVGQVVMVF9TVFJJREUs
IFVJTlQzMihsU3RyaWRlKSk7CisgICAgfQorCisgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAg
ICAgICpwbFN0cmlkZSA9IGxTdHJpZGU7CisKKyAgICByZXR1cm4gaHI7Cit9CisKK30KKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
LmNwcAkocmV2aXNpb24gMTkyMTUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDggKzMwLDEyIEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaCIKKyNlbmRpZgogI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCiAKICNpZiBVU0UoTUVE
SUFfRk9VTkRBVElPTikKQEAgLTQ2LDEwICs1MCw0NyBAQCBTT0ZUX0xJTktfT1BUSU9OQUwoTWYs
IE1GQ3JlYXRlVG9wb2xvZ3lOCiBTT0ZUX0xJTktfT1BUSU9OQUwoTWYsIE1GR2V0U2VydmljZSwg
SFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUsIChJVW5rbm93biosIFJFRkdVSUQsIFJFRklJRCwgTFBW
T0lEKikpOwogU09GVF9MSU5LX09QVElPTkFMKE1mLCBNRkNyZWF0ZUF1ZGlvUmVuZGVyZXJBY3Rp
dmF0ZSwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUsIChJTUZBY3RpdmF0ZSoqKSk7CiBTT0ZUX0xJ
TktfT1BUSU9OQUwoTWYsIE1GQ3JlYXRlVmlkZW9SZW5kZXJlckFjdGl2YXRlLCBIUkVTVUxULCBT
VERBUElDQUxMVFlQRSwgKEhXTkQsIElNRkFjdGl2YXRlKiopKTsKK1NPRlRfTElOS19PUFRJT05B
TChNZiwgTUZDcmVhdGVTYW1wbGVHcmFiYmVyU2lua0FjdGl2YXRlLCBIUkVTVUxULCBTVERBUElD
QUxMVFlQRSwgKElNRk1lZGlhVHlwZSosIElNRlNhbXBsZUdyYWJiZXJTaW5rQ2FsbGJhY2sqLCBJ
TUZBY3RpdmF0ZSoqKSk7CiAKIFNPRlRfTElOS19MSUJSQVJZKE1mcGxhdCk7CiBTT0ZUX0xJTktf
T1BUSU9OQUwoTWZwbGF0LCBNRlN0YXJ0dXAsIEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoVUxP
TkcsIERXT1JEKSk7CiBTT0ZUX0xJTktfT1BUSU9OQUwoTWZwbGF0LCBNRlNodXRkb3duLCBIUkVT
VUxULCBTVERBUElDQUxMVFlQRSwgKCkpOworU09GVF9MSU5LX09QVElPTkFMKE1mcGxhdCwgTUZD
cmVhdGVNZW1vcnlCdWZmZXIsIEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoRFdPUkQsIElNRk1l
ZGlhQnVmZmVyKiopKTsKK1NPRlRfTElOS19PUFRJT05BTChNZnBsYXQsIE1GQ3JlYXRlU2FtcGxl
LCBIUkVTVUxULCBTVERBUElDQUxMVFlQRSwgKElNRlNhbXBsZSoqKSk7CitTT0ZUX0xJTktfT1BU
SU9OQUwoTWZwbGF0LCBNRkNyZWF0ZU1lZGlhVHlwZSwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUs
IChJTUZNZWRpYVR5cGUqKikpOworU09GVF9MSU5LX09QVElPTkFMKE1mcGxhdCwgTUZGcmFtZVJh
dGVUb0F2ZXJhZ2VUaW1lUGVyRnJhbWUsIEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoVUlOVDMy
LCBVSU5UMzIsIFVJTlQ2NCopKTsKKworU1REQVBJIE1GQ3JlYXRlTWVkaWFUeXBlKF9PdXRwdHJf
IElNRk1lZGlhVHlwZSoqICBwcE1GVHlwZSkKK3sKKyAgICByZXR1cm4gTUZDcmVhdGVNZWRpYVR5
cGVQdHIoKShwcE1GVHlwZSk7Cit9CisKK1NPRlRfTElOS19MSUJSQVJZKGV2cik7CitTT0ZUX0xJ
TktfT1BUSU9OQUwoZXZyLCBNRkNyZWF0ZVZpZGVvU2FtcGxlRnJvbVN1cmZhY2UsIEhSRVNVTFQs
IFNUREFQSUNBTExUWVBFLCAoSVVua25vd24qLCBJTUZTYW1wbGUqKikpOworCitTT0ZUX0xJTktf
TElCUkFSWShEeHZhMik7CitTT0ZUX0xJTktfT1BUSU9OQUwoRHh2YTIsIERYVkEyQ3JlYXRlRGly
ZWN0M0REZXZpY2VNYW5hZ2VyOSwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUsIChVSU5UKiwgSURp
cmVjdDNERGV2aWNlTWFuYWdlcjkqKikpOworCitTT0ZUX0xJTktfTElCUkFSWShEM2Q5KTsKK1NP
RlRfTElOS19PUFRJT05BTChEM2Q5LCBEaXJlY3QzRENyZWF0ZTlFeCwgSFJFU1VMVCwgU1REQVBJ
Q0FMTFRZUEUsIChVSU5ULCBJRGlyZWN0M0Q5RXgqKikpOworCisvLyBNRlNhbXBsZVByZXNlbnRl
clNhbXBsZUNvdW50ZXIKKy8vIERhdGEgdHlwZTogVUlOVDMyCisvLworLy8gVmVyc2lvbiBudW1i
ZXIgZm9yIHRoZSB2aWRlbyBzYW1wbGVzLiBXaGVuIHRoZSBwcmVzZW50ZXIgaW5jcmVtZW50cyB0
aGUgdmVyc2lvbgorLy8gbnVtYmVyLCBhbGwgc2FtcGxlcyB3aXRoIHRoZSBwcmV2aW91cyB2ZXJz
aW9uIG51bWJlciBhcmUgc3RhbGUgYW5kIHNob3VsZCBiZQorLy8gZGlzY2FyZGVkLgorc3RhdGlj
IGNvbnN0IEdVSUQgTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVDb3VudGVyID0KK3sgMHg4NjlmMWY3
YywgMHgzNDk2LCAweDQ4YTksIHsgMHg4OCwgMHhlMywgMHg2OSwgMHg4NSwgMHg3OSwgMHhkMCwg
MHg4YywgMHhiNiB9IH07CisKKy8vIE1GU2FtcGxlUHJlc2VudGVyU2FtcGxlU3dhcENoYWluCisv
LyBEYXRhIHR5cGU6IElVTktOT1dOCisvLyAKKy8vIFBvaW50ZXIgdG8gYSBEaXJlY3QzRCBzd2Fw
IGNoYWluLgorc3RhdGljIGNvbnN0IEdVSUQgTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVTd2FwQ2hh
aW4gPQoreyAweDI0YTJlMDc2LCAweDM2NzMsIDB4NDMzZCwgeyAweDg3LCAweDQsIDB4NTUsIDB4
MmIsIDB4MWYsIDB4NWMsIDB4MTYsIDB4OGMgfSB9OworCit1c2luZyBuYW1lc3BhY2UgTWVkaWFG
b3VuZGF0aW9uVXRpbHM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzcsOSArMTE4LDEw
IEBAIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6fk1lZGkKIAogdm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFF
bmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQogewotICAgIGlmIChpc0F2YWlsYWJsZSgpKQorICAg
IGlmIChpc0F2YWlsYWJsZSgpKSB7CiAgICAgICAgIHJlZ2lzdHJhcihbXShNZWRpYVBsYXllciog
cGxheWVyKSB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbj4ocGxheWVyKTsgfSwKICAgICAgICAgICAgIGdldFN1cHBvcnRlZFR5cGVzLCBz
dXBwb3J0c1R5cGUsIDAsIDAsIDAsIDApOworICAgIH0KIH0KIAogYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OmlzQXZhaWxhYmxlKCkgCkBAIC0yNTIsNyArMjk0LDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OgogICAgIGludCB3ID0gbV9z
aXplLndpZHRoKCkgKiBkZXZpY2VTY2FsZUZhY3RvcjsKICAgICBpbnQgaCA9IG1fc2l6ZS5oZWln
aHQoKSAqIGRldmljZVNjYWxlRmFjdG9yOwogCi0gICAgaWYgKG1faHduZFZpZGVvICYmICFtX2xh
c3RQYWludFJlY3QuaXNFbXB0eSgpKQorICAgIGlmIChtX2h3bmRWaWRlbykKICAgICAgICAgOjpN
b3ZlV2luZG93KG1faHduZFZpZGVvLCB4LCB5LCB3LCBoLCBGQUxTRSk7CiAKICAgICBSRUNUIHJj
ID0geyAwLCAwLCB3LCBoIH07CkBAIC0yNjEsMTYgKzMwMywxMyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkKLSAgICAgICAg
fHwgIW1fcGxheWVyLT52aXNpYmxlKCkpCisgICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxl
ZCgpIHx8ICFtX3BsYXllci0+dmlzaWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2xh
c3RQYWludFJlY3QgPSByZWN0OwogCi0gICAgLy8gV2UgY3VycmVudGx5IGxldCBNZWRpYSBGb3Vu
ZGF0aW9uIGhhbmRsZSB0aGUgZHJhd2luZywgYnkgcHJvdmlkaW5nIGEgaGFuZGxlIHRvIHRoZSB3
aW5kb3cgdG8gZHJhdyBpbi4KLSAgICAvLyBXZSBzaG91bGQgaW5zdGVhZCByZWFkIGluZGl2aWR1
YWwgZnJhbWVzIGZyb20gdGhlIHN0cmVhbSwgYW5kIHBhaW50IHRoZW0gaW50byB0aGUgZ3JhcGhp
Y3MgY29udGV4dCBoZXJlLgotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAobV9wcmVz
ZW50ZXIpCisgICAgICAgIG1fcHJlc2VudGVyLT5wYWludEN1cnJlbnRGcmFtZShjb250ZXh0LCBy
ZWN0KTsKIH0KIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmNyZWF0
ZVNlc3Npb24oKQpAQCAtMzg0LDYgKzQyMyw5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjoKIAogICAgIGNhc2UgTUVTZXNzaW9uQ2xvc2VkOgogICAgICAgICBicmVh
azsKKworICAgIGNhc2UgTUVNZWRpYVNhbXBsZToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgaWYgKG1lZGlhRXZlbnRUeXBlICE9IE1FU2Vzc2lvbkNsb3NlZCkgewpAQCAtNTEwLDcgKzU1
Miw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjoKICAgICAgICAg
cmV0dXJuOwogICAgIGhXbmRQYXJlbnQgPSB2aWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFn
ZUNsaWVudCgpOwogCi0gICAgbV9od25kVmlkZW8gPSBDcmVhdGVXaW5kb3dFeChXU19FWF9OT0FD
VElWQVRFIHwgV1NfRVhfVFJBTlNQQVJFTlQsIHJlZ2lzdGVyVmlkZW9XaW5kb3dDbGFzcygpLCAw
LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19DTElQU0lCTElOR1MgfCBXU19DTElQQ0hJTERS
RU4sCisgICAgbV9od25kVmlkZW8gPSBDcmVhdGVXaW5kb3dFeChXU19FWF9OT0FDVElWQVRFIHwg
V1NfRVhfVFJBTlNQQVJFTlQsIHJlZ2lzdGVyVmlkZW9XaW5kb3dDbGFzcygpLCAwLCBXU19DSElM
RCB8IFdTX0NMSVBTSUJMSU5HUyB8IFdTX0NMSVBDSElMRFJFTiwKICAgICAgICAgMCwgMCwgMCwg
MCwgaFduZFBhcmVudCwgMCwgMCwgMCk7CiB9CiAKQEAgLTUyMiw2ICs1NjQsMTggQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OgogICAgIH0KIH0KIAordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmludmFsaWRhdGVGcmFtZVZpZXcoKQorewor
ICAgIEZyYW1lVmlldyogdmlldyA9IG51bGxwdHI7CisgICAgaWYgKCFtX3BsYXllciB8fCAhbV9w
bGF5ZXItPmNhY2hlZFJlc291cmNlTG9hZGVyKCkgfHwgIW1fcGxheWVyLT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgdmlldyA9IG1fcGxh
eWVyLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAgaWYg
KCF2aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICB2aWV3LT5pbnZhbGlkYXRlKCk7Cit9CisK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjphZGRMaXN0ZW5lcihNZWRp
YVBsYXllckxpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211
dGV4TGlzdGVuZXJzKTsKQEAgLTU3OSw3ICs2MzMsMTIgQEAgYm9vbCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OgogICAgICAgICBtX2hhc0F1ZGlvID0gdHJ1ZTsKICAgICB9IGVs
c2UgaWYgKE1GTWVkaWFUeXBlX1ZpZGVvID09IGd1aWRNYWpvclR5cGUpIHsKICAgICAgICAgLy8g
Q3JlYXRlIHRoZSB2aWRlbyByZW5kZXJlci4KLSAgICAgICAgaWYgKEZBSUxFRChNRkNyZWF0ZVZp
ZGVvUmVuZGVyZXJBY3RpdmF0ZVB0cigpKG1faHduZFZpZGVvLCAmcmVuZGVyZXJBY3RpdmF0ZSkp
KQorICAgICAgICBpZiAoRkFJTEVEKE1GQ3JlYXRlVmlkZW9SZW5kZXJlckFjdGl2YXRlUHRyKCko
bnVsbHB0ciwgJnJlbmRlcmVyQWN0aXZhdGUpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBtX3ByZXNlbnRlciA9IG5ldyBDdXN0b21WaWRlb1ByZXNlbnRlcih0aGlzKTsK
KyAgICAgICAgbV9wcmVzZW50ZXItPlNldFZpZGVvV2luZG93KG1faHduZFZpZGVvKTsKKyAgICAg
ICAgaWYgKEZBSUxFRChyZW5kZXJlckFjdGl2YXRlLT5TZXRVbmtub3duKE1GX0FDVElWQVRFX0NV
U1RPTV9WSURFT19QUkVTRU5URVJfQUNUSVZBVEUsIHN0YXRpY19jYXN0PElNRkFjdGl2YXRlKj4o
bV9wcmVzZW50ZXIuZ2V0KCkpKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IG1faGFzVmlkZW8gPSB0cnVlOwogICAgIH0gZWxzZQpAQCAtNjM4LDEzICs2OTcsMTEgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OgogICAgIGlmICghTUZHZXRTZXJ2
aWNlUHRyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChGQUlMRUQoTUZHZXRTZXJ2aWNl
UHRyKCkobV9tZWRpYVNlc3Npb24uZ2V0KCksIE1SX1ZJREVPX1JFTkRFUl9TRVJWSUNFLCBJSURf
UFBWX0FSR1MoJm1fdmlkZW9EaXNwbGF5KSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NF
UlQobV92aWRlb0Rpc3BsYXkpOwotCi0gICAgUkVDVCByYyA9IHsgMCwgMCwgbV9zaXplLndpZHRo
KCksIG1fc2l6ZS5oZWlnaHQoKSB9OwotICAgIG1fdmlkZW9EaXNwbGF5LT5TZXRWaWRlb1Bvc2l0
aW9uKG51bGxwdHIsICZyYyk7CisgICAgaWYgKFNVQ0NFRURFRChNRkdldFNlcnZpY2VQdHIoKSht
X21lZGlhU2Vzc2lvbi5nZXQoKSwgTVJfVklERU9fUkVOREVSX1NFUlZJQ0UsIElJRF9QUFZfQVJH
UygmbV92aWRlb0Rpc3BsYXkpKSkpIHsKKyAgICAgICAgQVNTRVJUKG1fdmlkZW9EaXNwbGF5KTsK
KyAgICAgICAgUkVDVCByYyA9IHsgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSB9OworICAgICAgICBtX3ZpZGVvRGlzcGxheS0+U2V0VmlkZW9Qb3NpdGlvbihudWxscHRyLCAm
cmMpOworICAgIH0KIAogICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJl
RGF0YTsKIApAQCAtNzI0LDYgKzc4MSwyMDA1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjoKICAgICBtX21lZGlhUGxheWVyID0gbnVsbHB0cjsKIH0KIAorTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Q3VzdG9t
VmlkZW9QcmVzZW50ZXIoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uKiBtZWRpYVBs
YXllcikKKyAgICA6IG1fbWVkaWFQbGF5ZXIobWVkaWFQbGF5ZXIpCit7CisgICAgaWYgKG1fbWVk
aWFQbGF5ZXIpCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPmFkZExpc3RlbmVyKHRoaXMpOworCisg
ICAgbV9zb3VyY2VSZWN0LnRvcCA9IDA7CisgICAgbV9zb3VyY2VSZWN0LmxlZnQgPSAwOworICAg
IG1fc291cmNlUmVjdC5ib3R0b20gPSAxOworICAgIG1fc291cmNlUmVjdC5yaWdodCA9IDE7CisK
KyAgICBtX3ByZXNlbnRlckVuZ2luZSA9IHN0ZDo6bWFrZV91bmlxdWU8RGlyZWN0M0RQcmVzZW50
ZXI+KCk7CisgICAgaWYgKCFtX3ByZXNlbnRlckVuZ2luZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9zY2hlZHVsZXIuc2V0UHJlc2VudGVyKG1fcHJlc2VudGVyRW5naW5lLmdldCgpKTsKK30K
KworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRl
cjo6fkN1c3RvbVZpZGVvUHJlc2VudGVyKCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllcikKKyAg
ICAgICAgbV9tZWRpYVBsYXllci0+cmVtb3ZlTGlzdGVuZXIodGhpcyk7Cit9CisKK0hSRVNVTFQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6
UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIF9fUlBDX19kZXJlZl9vdXQgdm9pZCBfX1JQQ19G
QVIgKl9fUlBDX0ZBUiAqcHB2T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSBudWxscHRyOwor
ICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSU1GR2V0U2VydmljZSkpCisgICAgICAgICpw
cHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJTUZHZXRTZXJ2aWNlKj4odGhpcyk7CisgICAgZWxzZSBp
ZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lNRkFjdGl2YXRlKSkKKyAgICAgICAgKnBwdk9iamVj
dCA9IHN0YXRpY19jYXN0PElNRkFjdGl2YXRlKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVh
bEdVSUQocmlpZCwgSUlEX0lNRlZpZGVvRGlzcGxheUNvbnRyb2wpKQorICAgICAgICAqcHB2T2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SU1GVmlkZW9EaXNwbGF5Q29udHJvbCo+KHRoaXMpOworICAgIGVs
c2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JTUZWaWRlb1ByZXNlbnRlcikpCisgICAgICAg
ICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJTUZWaWRlb1ByZXNlbnRlcio+KHRoaXMpOworICAg
IGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JTUZDbG9ja1N0YXRlU2luaykpCisgICAg
ICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJTUZDbG9ja1N0YXRlU2luayo+KHRoaXMpOwor
ICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JTUZWaWRlb0RldmljZUlEKSkKKyAg
ICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElNRlZpZGVvRGV2aWNlSUQqPih0aGlzKTsK
KyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSU1GVG9wb2xvZ3lTZXJ2aWNlTG9v
a3VwQ2xpZW50KSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElNRlRvcG9sb2d5
U2VydmljZUxvb2t1cENsaWVudCo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJp
aWQsIElJRF9JVW5rbm93bikpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJTUZW
aWRlb1ByZXNlbnRlcio+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJ
RF9JTUZBc3luY0NhbGxiYWNrKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElN
RkFzeW5jQ2FsbGJhY2sqPih0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBFX05PSU5U
RVJGQUNFOworCisgICAgQWRkUmVmKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1VMT05HIFNU
RE1FVEhPRENBTExUWVBFIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9t
VmlkZW9QcmVzZW50ZXI6OkFkZFJlZigpCit7CisgICAgbV9yZWZDb3VudCsrOworICAgIHJldHVy
biBtX3JlZkNvdW50OworfQorCitVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpSZWxlYXNlKCkKK3sK
KyAgICBtX3JlZkNvdW50LS07CisgICAgVUxPTkcgcmVmQ291bnQgPSBtX3JlZkNvdW50OworICAg
IGlmICghcmVmQ291bnQpCisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiByZWZDb3Vu
dDsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3Rv
bVZpZGVvUHJlc2VudGVyOjpPbkNsb2NrU3RhcnQoTUZUSU1FIGhuc1N5c3RlbVRpbWUsIExPTkdM
T05HIGxsQ2xvY2tTdGFydE9mZnNldCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2sp
OworCisgICAgLy8gQWZ0ZXIgc2h1dGRvd24sIHdlIGNhbm5vdCBzdGFydC4KKyAgICBIUkVTVUxU
IGhyID0gY2hlY2tTaHV0ZG93bigpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1
cm4gaHI7CisKKyAgICBtX3JlbmRlclN0YXRlID0gUmVuZGVyU3RhdGVTdGFydGVkOworCisgICAg
aWYgKGlzQWN0aXZlKCkpIHsKKyAgICAgICAgaWYgKGxsQ2xvY2tTdGFydE9mZnNldCAhPSBQUkVT
RU5UQVRJT05fQ1VSUkVOVF9QT1NJVElPTikgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNl
ZWsgcmVxdWVzdCwgZmx1c2ggcGVuZGluZyBzYW1wbGVzLgorICAgICAgICAgICAgZmx1c2goKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHByb2Nlc3NPdXRwdXRMb29wKCk7CisKKyAgICByZXR1
cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpPbkNsb2NrU3RvcChNRlRJTUUgaG5zU3lzdGVtVGltZSkK
K3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgSFJFU1VMVCBociA9IGNo
ZWNrU2h1dGRvd24oKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOwor
CisgICAgaWYgKG1fcmVuZGVyU3RhdGUgIT0gUmVuZGVyU3RhdGVTdG9wcGVkKSB7CisgICAgICAg
IG1fcmVuZGVyU3RhdGUgPSBSZW5kZXJTdGF0ZVN0b3BwZWQ7CisgICAgICAgIGZsdXNoKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1BhdXNlKE1GVElN
RSBobnNTeXN0ZW1UaW1lKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAg
ICAvLyBBZnRlciBzaHV0ZG93biwgd2UgY2Fubm90IHBhdXNlLgorICAgIEhSRVNVTFQgaHIgPSBj
aGVja1NodXRkb3duKCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsK
KworICAgIG1fcmVuZGVyU3RhdGUgPSBSZW5kZXJTdGF0ZVBhdXNlZDsKKworICAgIHJldHVybiBT
X09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6Ok9uQ2xvY2tSZXN0YXJ0KE1GVElNRSBobnNTeXN0ZW1UaW1lKQor
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBIUkVTVUxUIGhyID0gY2hl
Y2tTaHV0ZG93bigpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisK
KyAgICBBU1NFUlQobV9yZW5kZXJTdGF0ZSA9PSBSZW5kZXJTdGF0ZVBhdXNlZCk7CisKKyAgICBt
X3JlbmRlclN0YXRlID0gUmVuZGVyU3RhdGVTdGFydGVkOworCisgICAgcHJvY2Vzc091dHB1dExv
b3AoKTsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9uQ2xvY2tTZXRSYXRlKE1G
VElNRSBobnNTeXN0ZW1UaW1lLCBmbG9hdCByYXRlKQoreworICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fbG9jayk7CisKKyAgICBIUkVTVUxUIGhyID0gY2hlY2tTaHV0ZG93bigpOworICAgIGlmIChG
QUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBtX3JhdGUgPSByYXRlOworCisg
ICAgbV9zY2hlZHVsZXIuc2V0Q2xvY2tSYXRlKHJhdGUpOworCisgICAgcmV0dXJuIFNfT0s7Cit9
CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6UHJvY2Vzc01lc3NhZ2UoTUZWUF9NRVNTQUdFX1RZUEUgZU1lc3NhZ2UsIFVM
T05HX1BUUiB1bFBhcmFtKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAg
ICBIUkVTVUxUIGhyID0gY2hlY2tTaHV0ZG93bigpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAg
ICAgICByZXR1cm4gaHI7CisKKyAgICBzd2l0Y2ggKGVNZXNzYWdlKSB7CisgICAgY2FzZSBNRlZQ
X01FU1NBR0VfRkxVU0g6CisgICAgICAgIGhyID0gZmx1c2goKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIE1GVlBfTUVTU0FHRV9JTlZBTElEQVRFTUVESUFUWVBFOgorICAgICAgICBociA9
IHJlbmVnb3RpYXRlTWVkaWFUeXBlKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNRlZQ
X01FU1NBR0VfUFJPQ0VTU0lOUFVUTk9USUZZOgorICAgICAgICAvLyBBIG5ldyBpbnB1dCBzYW1w
bGUgaXMgYXZhaWxhYmxlLiAKKyAgICAgICAgaHIgPSBwcm9jZXNzSW5wdXROb3RpZnkoKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1GVlBfTUVTU0FHRV9CRUdJTlNUUkVBTUlORzoKKyAg
ICAgICAgaHIgPSBiZWdpblN0cmVhbWluZygpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
TUZWUF9NRVNTQUdFX0VORFNUUkVBTUlORzoKKyAgICAgICAgaHIgPSBlbmRTdHJlYW1pbmcoKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1GVlBfTUVTU0FHRV9FTkRPRlNUUkVBTToKKyAg
ICAgICAgbV9lbmRTdHJlYW1pbmcgPSB0cnVlOworICAgICAgICBociA9IGNoZWNrRW5kT2ZTdHJl
YW0oKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBociA9IEVfSU5W
QUxJREFSRzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGhyOworfQorCitI
UkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OkdldEN1cnJlbnRNZWRpYVR5cGUoX091dHB0cl8gIElNRlZpZGVvTWVkaWFUeXBlICoq
cHBNZWRpYVR5cGUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIGlm
ICghcHBNZWRpYVR5cGUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBIUkVTVUxU
IGhyID0gY2hlY2tTaHV0ZG93bigpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1
cm4gaHI7CisKKyAgICBpZiAoIW1fbWVkaWFUeXBlKQorICAgICAgICByZXR1cm4gTUZfRV9OT1Rf
SU5JVElBTElaRUQ7CisKKyAgICByZXR1cm4gbV9tZWRpYVR5cGUtPlF1ZXJ5SW50ZXJmYWNlKF9f
dXVpZG9mKElNRlZpZGVvTWVkaWFUeXBlKSwgKHZvaWQqKikmcHBNZWRpYVR5cGUpOworfQorCitI
UkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OkdldERldmljZUlEKElJRCogcERldmljZUlEKQoreworICAgIGlmICghcERldmljZUlE
KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgKnBEZXZpY2VJRCA9IF9fdXVpZG9m
KElEaXJlY3QzRERldmljZTkpOworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkluaXRT
ZXJ2aWNlUG9pbnRlcnMoSU1GVG9wb2xvZ3lTZXJ2aWNlTG9va3VwICpwTG9va3VwKQoreworICAg
IGlmICghcExvb2t1cCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIEhSRVNVTFQg
aHIgPSBTX09LOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIGlmIChp
c0FjdGl2ZSgpKQorICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElEUkVRVUVTVDsKKworICAgIG1f
Y2xvY2sgPSBudWxscHRyOworICAgIG1fbWl4ZXIgPSBudWxscHRyOworICAgIG1fbWVkaWFFdmVu
dFNpbmsgPSBudWxscHRyOworCisgICAgLy8gTG9va3VwIHRoZSBzZXJ2aWNlcy4KKworICAgIERX
T1JEIG9iamVjdENvdW50ID0gMTsKKyAgICBociA9IHBMb29rdXAtPkxvb2t1cFNlcnZpY2UoTUZf
U0VSVklDRV9MT09LVVBfR0xPQkFMLCAwLCBNUl9WSURFT19SRU5ERVJfU0VSVklDRSwgSUlEX1BQ
Vl9BUkdTKCZtX2Nsb2NrKSwgJm9iamVjdENvdW50KTsKKyAgICAvLyBUaGUgY2xvY2sgc2Vydmlj
ZSBpcyBvcHRpb25hbC4KKworICAgIG9iamVjdENvdW50ID0gMTsKKyAgICBociA9IHBMb29rdXAt
Pkxvb2t1cFNlcnZpY2UoTUZfU0VSVklDRV9MT09LVVBfR0xPQkFMLCAwLCBNUl9WSURFT19NSVhF
Ul9TRVJWSUNFLCBJSURfUFBWX0FSR1MoJm1fbWl4ZXIpLCAmb2JqZWN0Q291bnQpOworICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IGNvbmZpZ3VyZU1p
eGVyKG1fbWl4ZXIuZ2V0KCkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4g
aHI7CisKKyAgICBvYmplY3RDb3VudCA9IDE7CisgICAgaHIgPSBwTG9va3VwLT5Mb29rdXBTZXJ2
aWNlKE1GX1NFUlZJQ0VfTE9PS1VQX0dMT0JBTCwgMCwgTVJfVklERU9fUkVOREVSX1NFUlZJQ0Us
IElJRF9QUFZfQVJHUygmbV9tZWRpYUV2ZW50U2luayksICZvYmplY3RDb3VudCk7CisgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIG1fcmVuZGVyU3RhdGUgPSBS
ZW5kZXJTdGF0ZVN0b3BwZWQ7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpSZWxl
YXNlU2VydmljZVBvaW50ZXJzKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwor
CisgICAgbV9yZW5kZXJTdGF0ZSA9IFJlbmRlclN0YXRlU2h1dGRvd247CisKKyAgICBmbHVzaCgp
OworCisgICAgc2V0TWVkaWFUeXBlKG51bGxwdHIpOworCisgICAgbV9jbG9jayA9IG51bGxwdHI7
CisgICAgbV9taXhlciA9IG51bGxwdHI7CisgICAgbV9tZWRpYUV2ZW50U2luayA9IG51bGxwdHI7
CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRTZXJ2aWNlKFJFRkdVSUQgZ3Vp
ZFNlcnZpY2UsIFJFRklJRCByaWlkLCBMUFZPSUQqIHBwdk9iamVjdCkKK3sKKyAgICBpZiAoIXBw
dk9iamVjdCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIC8vIFdlIG9ubHkgc3Vw
cG9ydCBNUl9WSURFT19SRU5ERVJfU0VSVklDRS4KKyAgICBpZiAoZ3VpZFNlcnZpY2UgIT0gTVJf
VklERU9fUkVOREVSX1NFUlZJQ0UpCisgICAgICAgIHJldHVybiBNRl9FX1VOU1VQUE9SVEVEX1NF
UlZJQ0U7CisKKyAgICBIUkVTVUxUIGhyID0gbV9wcmVzZW50ZXJFbmdpbmUtPmdldFNlcnZpY2Uo
Z3VpZFNlcnZpY2UsIHJpaWQsIHBwdk9iamVjdCk7CisKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAg
ICAgICAgaHIgPSBRdWVyeUludGVyZmFjZShyaWlkLCBwcHZPYmplY3QpOworCisgICAgcmV0dXJu
IGhyOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OkFjdGl2YXRlT2JqZWN0KFJFRklJRCByaWlkLCB2b2lkICoqcHB2
KQoreworICAgIGlmIChyaWlkID09IElJRF9JTUZWaWRlb1ByZXNlbnRlcikgeworICAgICAgICAq
cHB2ID0gc3RhdGljX2Nhc3Q8SU1GVmlkZW9QcmVzZW50ZXIqPih0aGlzKTsKKyAgICAgICAgcmV0
dXJuIFNfT0s7CisgICAgfQorICAgIHJldHVybiBFX0ZBSUw7Cit9CisKK0hSRVNVTFQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6RGV0YWNo
T2JqZWN0KCkKK3sKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTaHV0ZG93bk9iamVj
dCgpCit7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0VmlkZW9XaW5kb3coSFdO
RCBod25kVmlkZW8pCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIGlm
ICghSXNXaW5kb3coaHduZFZpZGVvKSkKKyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKwor
ICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgIEhXTkQgb2xkSHduZCA9IG1fcHJlc2VudGVyRW5n
aW5lLT5nZXRWaWRlb1dpbmRvdygpOworCisgICAgaWYgKG9sZEh3bmQgIT0gaHduZFZpZGVvKSB7
CisgICAgICAgIC8vIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcgRGlyZWN0M0QgZGV2aWNlLgorICAg
ICAgICBociA9IG1fcHJlc2VudGVyRW5naW5lLT5zZXRWaWRlb1dpbmRvdyhod25kVmlkZW8pOwor
CisgICAgICAgIG5vdGlmeUV2ZW50KEVDX0RJU1BMQVlfQ0hBTkdFRCwgMCwgMCk7CisgICAgfQor
CisgICAgcmV0dXJuIGhyOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFZpZGVvV2luZG93KEhXTkQqIHBod25k
VmlkZW8pCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIGlmICghcGh3
bmRWaWRlbykKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgICpwaHduZFZpZGVvID0g
bV9wcmVzZW50ZXJFbmdpbmUtPmdldFZpZGVvV2luZG93KCk7CisKKyAgICByZXR1cm4gU19PSzsK
K30KKworc3RhdGljIEhSRVNVTFQgc2V0TWl4ZXJTb3VyY2VSZWN0KElNRlRyYW5zZm9ybSogbWl4
ZXIsIGNvbnN0IE1GVmlkZW9Ob3JtYWxpemVkUmVjdCYgc291cmNlUmVjdCkKK3sKKyAgICBpZiAo
IW1peGVyKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgQ09NUHRyPElNRkF0dHJp
YnV0ZXM+IGF0dHJpYnV0ZXM7CisKKyAgICBIUkVTVUxUIGhyID0gbWl4ZXItPkdldEF0dHJpYnV0
ZXMoJmF0dHJpYnV0ZXMpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7
CisKKyAgICByZXR1cm4gYXR0cmlidXRlcy0+U2V0QmxvYihWSURFT19aT09NX1JFQ1QsIChjb25z
dCBVSU5UOCopJnNvdXJjZVJlY3QsIHNpemVvZihzb3VyY2VSZWN0KSk7Cit9CisKK0hSRVNVTFQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6
U2V0VmlkZW9Qb3NpdGlvbihjb25zdCBNRlZpZGVvTm9ybWFsaXplZFJlY3QqIHBucmNTb3VyY2Us
IGNvbnN0IExQUkVDVCBwcmNEZXN0KQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7
CisKKyAgICAvLyBGaXJzdCwgY2hlY2sgdGhhdCB0aGUgcGFyYW1ldGVycyBhcmUgdmFsaWQuCisK
KyAgICBpZiAoIXBucmNTb3VyY2UgJiYgIXByY0Rlc3QpCisgICAgICAgIHJldHVybiBFX1BPSU5U
RVI7CisKKyAgICBpZiAocG5yY1NvdXJjZSkgeworICAgICAgICBpZiAoKHBucmNTb3VyY2UtPmxl
ZnQgPiBwbnJjU291cmNlLT5yaWdodCkgfHwgKHBucmNTb3VyY2UtPnRvcCA+IHBucmNTb3VyY2Ut
PmJvdHRvbSkpCisgICAgICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworCisgICAgICAgIC8v
IFRoZSBzb3VyY2UgcmVjdGFuZ2xlIG11c3QgYmUgbm9ybWFsaXplZC4KKyAgICAgICAgaWYgKChw
bnJjU291cmNlLT5sZWZ0IDwgMCkgfHwgKHBucmNTb3VyY2UtPnJpZ2h0ID4gMSkgfHwgKHBucmNT
b3VyY2UtPnRvcCA8IDApIHx8IChwbnJjU291cmNlLT5ib3R0b20gPiAxKSkKKyAgICAgICAgICAg
IHJldHVybiBFX0lOVkFMSURBUkc7CisgICAgfQorCisgICAgaWYgKHByY0Rlc3QpIHsKKyAgICAg
ICAgaWYgKChwcmNEZXN0LT5sZWZ0ID4gcHJjRGVzdC0+cmlnaHQpIHx8IChwcmNEZXN0LT50b3Ag
PiBwcmNEZXN0LT5ib3R0b20pKQorICAgICAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAg
ICB9CisKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgIC8vIFNldCB0aGUgc291cmNlIHJl
Y3RhbmdsZS4KKyAgICBpZiAocG5yY1NvdXJjZSkgeworICAgICAgICBtX3NvdXJjZVJlY3QgPSAq
cG5yY1NvdXJjZTsKKworICAgICAgICBpZiAobV9taXhlcikgeworICAgICAgICAgICAgaHIgPSBz
ZXRNaXhlclNvdXJjZVJlY3QobV9taXhlci5nZXQoKSwgbV9zb3VyY2VSZWN0KTsKKyAgICAgICAg
ICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIFNldCB0aGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlLgorICAgIGlm
IChwcmNEZXN0KSB7CisgICAgICAgIFJFQ1QgcmNPbGREZXN0ID0gbV9wcmVzZW50ZXJFbmdpbmUt
PmdldERlc3RpbmF0aW9uUmVjdCgpOworCisgICAgICAgIC8vIElmIHRoZSBkZXN0aW5hdGlvbiBy
ZWN0YW5nbGUgaGFzbid0IGNoYW5nZWQsIHdlIGFyZSBkb25lLgorICAgICAgICBpZiAoIUVxdWFs
UmVjdCgmcmNPbGREZXN0LCBwcmNEZXN0KSkgeworICAgICAgICAgICAgaHIgPSBtX3ByZXNlbnRl
ckVuZ2luZS0+c2V0RGVzdGluYXRpb25SZWN0KCpwcmNEZXN0KTsKKyAgICAgICAgICAgIGlmIChG
QUlMRUQoaHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBocjsKKworICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byBjaGFuZ2UgdGhlIG1lZGlhIHR5cGUgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVj
dGFuZ2xlIGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgaWYgKG1fbWl4ZXIpIHsKKyAgICAgICAg
ICAgICAgICBociA9IHJlbmVnb3RpYXRlTWVkaWFUeXBlKCk7CisgICAgICAgICAgICAgICAgaWYg
KGhyID09IE1GX0VfVFJBTlNGT1JNX1RZUEVfTk9UX1NFVCkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIG5vdCBhIGNyaXRpY2FsIGZhaWx1cmU7IHRoZSBFVlIgd2lsbCBsZXQgdXMg
a25vdyB3aGVuCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8gc2V0IHRoZSBtaXhl
ciBtZWRpYSB0eXBlLgorICAgICAgICAgICAgICAgICAgICBociA9IFNfT0s7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHI7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
V2UgaGF2ZSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0aGUgbWVkaWEgdHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgLy8gYXNrIGZvciBhIHJlcGFpbnQgb2YgdGhlIGN1cnJlbnQgZnJhbWUuCisgICAg
ICAgICAgICAgICAgICAgIG1fcmVwYWludCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3NPdXRwdXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRWaWRlb1Bvc2l0
aW9uKE1GVmlkZW9Ob3JtYWxpemVkUmVjdCogcG5yY1NvdXJjZSwgTFBSRUNUIHByY0Rlc3QpCit7
CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIGlmICghcG5yY1NvdXJjZSB8
fCAhcHJjRGVzdCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgICpwbnJjU291cmNl
ID0gbV9zb3VyY2VSZWN0OworICAgICpwcmNEZXN0ID0gbV9wcmVzZW50ZXJFbmdpbmUtPmdldERl
c3RpbmF0aW9uUmVjdCgpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6UmVwYWlu
dFZpZGVvKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgSFJFU1VM
VCBociA9IGNoZWNrU2h1dGRvd24oKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIGhyOworCisgICAgLy8gQ2hlY2sgdGhhdCBhdCBsZWFzdCBvbmUgc2FtcGxlIGhhcyBiZWVu
IHByZXNlbnRlZC4KKyAgICBpZiAobV9wcmVyb2xsZWQpIHsKKyAgICAgICAgbV9yZXBhaW50ID0g
dHJ1ZTsKKyAgICAgICAgcHJvY2Vzc091dHB1dCgpOworICAgIH0KKworICAgIHJldHVybiBTX09L
OworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9t
VmlkZW9QcmVzZW50ZXI6Okludm9rZShJTUZBc3luY1Jlc3VsdCogcEFzeW5jUmVzdWx0KQorewor
ICAgIHJldHVybiBvblNhbXBsZUZyZWUocEFzeW5jUmVzdWx0KTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpvbk1lZGlh
UGxheWVyRGVsZXRlZCgpCit7CisgICAgbV9tZWRpYVBsYXllciA9IG51bGxwdHI7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRl
cjo6cGFpbnRDdXJyZW50RnJhbWUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHIpCit7CisgICAgaWYgKG1fcHJlc2VudGVyRW5naW5lKQorICAgICAgICBtX3ByZXNl
bnRlckVuZ2luZS0+cGFpbnRDdXJyZW50RnJhbWUoY29udGV4dCwgcik7Cit9CisKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6aXNB
Y3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiAoKG1fcmVuZGVyU3RhdGUgPT0gUmVuZGVyU3Rh
dGVTdGFydGVkKSB8fCAobV9yZW5kZXJTdGF0ZSA9PSBSZW5kZXJTdGF0ZVBhdXNlZCkpOwogfQog
CitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OmNvbmZpZ3VyZU1peGVyKElNRlRyYW5zZm9ybSogbWl4ZXIpCit7CisgICAgQ09N
UHRyPElNRlZpZGVvRGV2aWNlSUQ+IHZpZGVvRGV2aWNlSUQ7CisgICAgSFJFU1VMVCBociA9IG1p
eGVyLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJTUZWaWRlb0RldmljZUlEKSwgKHZvaWQqKikm
dmlkZW9EZXZpY2VJRCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsK
KworICAgIElJRCBkZXZpY2VJRCA9IEdVSURfTlVMTDsKKyAgICBociA9IHZpZGVvRGV2aWNlSUQt
PkdldERldmljZUlEKCZkZXZpY2VJRCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybiBocjsKKworICAgIC8vIFRoZSBtaXhlciBtdXN0IGhhdmUgdGhpcyBkZXZpY2UgSUQuCisg
ICAgaWYgKCFJc0VxdWFsR1VJRChkZXZpY2VJRCwgX191dWlkb2YoSURpcmVjdDNERGV2aWNlOSkp
KQorICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElEUkVRVUVTVDsKKworICAgIHNldE1peGVyU291
cmNlUmVjdChtaXhlciwgbV9zb3VyY2VSZWN0KTsKKworICAgIHJldHVybiBTX09LOworfQorCitI
UkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OmZsdXNoKCkKK3sKKyAgICBtX3ByZXJvbGxlZCA9IGZhbHNlOworCisgICAgLy8gRmx1
c2ggdGhlIHNjZWR1bGVyLgorICAgIC8vIFRoaXMgY2FsbCB3aWxsIGJsb2NrIHVudGlsIHRoZSBz
Y2hlZHVsZXIgdGhyZWFkIGhhcyBmaW5pc2hlZCBmbHVzaGluZy4KKyAgICBtX3NjaGVkdWxlci5m
bHVzaCgpOworCisgICAgaWYgKG1fcmVuZGVyU3RhdGUgPT0gUmVuZGVyU3RhdGVTdG9wcGVkKQor
ICAgICAgICBtX3ByZXNlbnRlckVuZ2luZS0+cHJlc2VudFNhbXBsZShudWxscHRyLCAwKTsKKwor
ICAgIHJldHVybiBTX09LOworfQorCitzdGF0aWMgYm9vbCBhcmVNZWRpYVR5cGVzRXF1YWwoSU1G
TWVkaWFUeXBlKiB0eXBlMSwgSU1GTWVkaWFUeXBlKiB0eXBlMikKK3sKKyAgICBpZiAoIXR5cGUx
ICYmICF0eXBlMikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCF0eXBlMSB8fCAhdHlw
ZTIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERXT1JEIGZsYWdzID0gMDsKKyAgICBy
ZXR1cm4gU19PSyA9PSB0eXBlMS0+SXNFcXVhbCh0eXBlMiwgJmZsYWdzKTsKK30KKworSFJFU1VM
VCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpzZXRNZWRpYVR5cGUoSU1GTWVkaWFUeXBlKiBtZWRpYVR5cGUpCit7CisgICAgaWYgKCFtZWRp
YVR5cGUpIHsKKyAgICAgICAgbV9tZWRpYVR5cGUgPSBudWxscHRyOworICAgICAgICByZWxlYXNl
UmVzb3VyY2VzKCk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgIC8vIElmIHdl
IGhhdmUgc2h1dCBkb3duLCB3ZSBjYW5ub3Qgc2V0IHRoZSBtZWRpYSB0eXBlLgorICAgIEhSRVNV
TFQgaHIgPSBjaGVja1NodXRkb3duKCk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAg
cmVsZWFzZVJlc291cmNlcygpOworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgaWYg
KGFyZU1lZGlhVHlwZXNFcXVhbChtX21lZGlhVHlwZS5nZXQoKSwgbWVkaWFUeXBlKSkKKyAgICAg
ICAgcmV0dXJuIFNfT0s7CisKKyAgICBtX21lZGlhVHlwZSA9IG51bGxwdHI7CisgICAgcmVsZWFz
ZVJlc291cmNlcygpOworCisgICAgLy8gR2V0IGFsbG9jYXRlZCBzYW1wbGVzIGZyb20gdGhlIHBy
ZXNlbnRlci4KKyAgICBWaWRlb1NhbXBsZUxpc3Qgc2FtcGxlUXVldWU7CisgICAgaHIgPSBtX3By
ZXNlbnRlckVuZ2luZS0+Y3JlYXRlVmlkZW9TYW1wbGVzKG1lZGlhVHlwZSwgc2FtcGxlUXVldWUp
OworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAg
ICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIC8vIFNldCB0aGUgdG9rZW4gY291bnRlciBv
biBlYWNoIHNhbXBsZS4KKyAgICAvLyBUaGlzIHdpbGwgaGVscCB1cyB0byBkZXRlcm1pbmUgd2hl
biB0aGV5IGFyZSBpbnZhbGlkLCBhbmQgY2FuIGJlIHJlbGVhc2VkLgorICAgIGZvciAoYXV0byBz
YW1wbGUgOiBzYW1wbGVRdWV1ZSkgeworICAgICAgICBociA9IHNhbXBsZS0+U2V0VUlOVDMyKE1G
U2FtcGxlUHJlc2VudGVyU2FtcGxlQ291bnRlciwgbV90b2tlbkNvdW50ZXIpOworICAgICAgICBp
ZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAgICAgcmVsZWFzZVJlc291cmNlcygpOworICAgICAg
ICAgICAgcmV0dXJuIGhyOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQWRkIHRoZSBzYW1w
bGVzIHRvIHRoZSBzYW1wbGUgcG9vbC4KKyAgICBociA9IG1fc2FtcGxlUG9vbC5pbml0aWFsaXpl
KHNhbXBsZVF1ZXVlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICByZWxlYXNlUmVz
b3VyY2VzKCk7CisgICAgICAgIHJldHVybiBocjsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGZy
YW1lIHJhdGUuIAorICAgIE1GUmF0aW8gZnBzID0geyAwLCAwIH07CisgICAgaWYgKFNVQ0NFRURF
RChHZXRGcmFtZVJhdGUobWVkaWFUeXBlLCAmZnBzKSkgJiYgZnBzLk51bWVyYXRvciAmJiBmcHMu
RGVub21pbmF0b3IpCisgICAgICAgIG1fc2NoZWR1bGVyLnNldEZyYW1lUmF0ZShmcHMpOworICAg
IGVsc2UgeworICAgICAgICAvLyBXZSBjb3VsZCBub3QgZ2V0IHRoZSBmcmFtZSByZXQsIHVzZSBk
ZWZhdWx0LgorICAgICAgICBjb25zdCBNRlJhdGlvIGRlZmF1bHRGcmFtZVJhdGUgPSB7IDMwLCAx
IH07CisgICAgICAgIG1fc2NoZWR1bGVyLnNldEZyYW1lUmF0ZShkZWZhdWx0RnJhbWVSYXRlKTsK
KyAgICB9CisKKyAgICBBU1NFUlQobWVkaWFUeXBlKTsKKyAgICBtX21lZGlhVHlwZSA9IG1lZGlh
VHlwZTsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmNoZWNrU2h1dGRvd24oKSBj
b25zdAoreworICAgIGlmIChtX3JlbmRlclN0YXRlID09IFJlbmRlclN0YXRlU2h1dGRvd24pCisg
ICAgICAgIHJldHVybiBNRl9FX1NIVVRET1dOOworICAgIHJldHVybiBTX09LOworfQorCitIUkVT
VUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50
ZXI6OnJlbmVnb3RpYXRlTWVkaWFUeXBlKCkKK3sKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKwor
ICAgIGlmICghbV9taXhlcikKKyAgICAgICAgcmV0dXJuIE1GX0VfSU5WQUxJRFJFUVVFU1Q7CisK
KyAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGF2YWlsYWJsZSBvdXRwdXQgdHlwZXMgb2YgdGhlIG1p
eGVyLgorCisgICAgRFdPUkQgdHlwZUluZGV4ID0gMDsKKyAgICBib29sIGZvdW5kTWVkaWFUeXBl
ID0gZmFsc2U7CisgICAgd2hpbGUgKCFmb3VuZE1lZGlhVHlwZSAmJiAoaHIgIT0gTUZfRV9OT19N
T1JFX1RZUEVTKSkgeworICAgICAgICAvLyBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIG1lZGlhIHR5
cGUuCisgICAgICAgIENPTVB0cjxJTUZNZWRpYVR5cGU+IG1peGVyVHlwZTsKKyAgICAgICAgaHIg
PSBtX21peGVyLT5HZXRPdXRwdXRBdmFpbGFibGVUeXBlKDAsIHR5cGVJbmRleCsrLCAmbWl4ZXJU
eXBlKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAvLyBEbyB3ZSBzdXBwb3J0IHRoaXMgbWVkaWEgdHlwZT8KKyAgICAgICAgaHIgPSBpc01l
ZGlhVHlwZVN1cHBvcnRlZChtaXhlclR5cGUuZ2V0KCkpOworICAgICAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIE1ha2UgYWRqdXN0bWVudHMgdG8g
cHJvcG9zZWQgbWVkaWEgdHlwZS4KKyAgICAgICAgQ09NUHRyPElNRk1lZGlhVHlwZT4gb3B0aW1h
bFR5cGU7CisgICAgICAgIGhyID0gY3JlYXRlT3B0aW1hbFZpZGVvVHlwZShtaXhlclR5cGUuZ2V0
KCksICZvcHRpbWFsVHlwZSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgLy8gVGVzdCB3aGV0aGVyIHRoZSBtaXhlciBjYW4gYWNjZXB0IHRo
ZSBtb2RpZmllZCBtZWRpYSB0eXBlCisgICAgICAgIGhyID0gbV9taXhlci0+U2V0T3V0cHV0VHlw
ZSgwLCBvcHRpbWFsVHlwZS5nZXQoKSwgTUZUX1NFVF9UWVBFX1RFU1RfT05MWSk7CisgICAgICAg
IGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gVHJ5IHRv
IHNldCB0aGUgbmV3IG1lZGlhIHR5cGUKKworICAgICAgICBociA9IHNldE1lZGlhVHlwZShvcHRp
bWFsVHlwZS5nZXQoKSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgaHIgPSBtX21peGVyLT5TZXRPdXRwdXRUeXBlKDAsIG9wdGltYWxUeXBl
LmdldCgpLCAwKTsKKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICAgICAg
aWYgKEZBSUxFRChocikpCisgICAgICAgICAgICBzZXRNZWRpYVR5cGUobnVsbHB0cik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGZvdW5kTWVkaWFUeXBlID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6cHJvY2Vzc0lucHV0Tm90aWZ5KCkKK3sKKyAgICAv
LyBXZSBoYXZlIGEgbmV3IHNhbXBsZS4KKyAgICBtX3NhbXBsZU5vdGlmeSA9IHRydWU7CisKKyAg
ICBpZiAoIW1fbWVkaWFUeXBlKSB7CisgICAgICAgIC8vIFRoZSBtZWRpYSB0eXBlIGlzIG5vdCB2
YWxpZC4KKyAgICAgICAgcmV0dXJuIE1GX0VfVFJBTlNGT1JNX1RZUEVfTk9UX1NFVDsKKyAgICB9
IAorICAgIAorICAgIC8vIEludmFsaWRhdGUgdGhlIHZpZGVvIGFyZWEKKyAgICBpZiAobV9tZWRp
YVBsYXllcikgeworICAgICAgICBhdXRvIHdlYWtQdHIgPSBtX21lZGlhUGxheWVyLT5tX3dlYWtQ
dHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbd2Vh
a1B0cl0geworICAgICAgICAgICAgaWYgKHdlYWtQdHIpCisgICAgICAgICAgICAgICAgd2Vha1B0
ci0+aW52YWxpZGF0ZUZyYW1lVmlldygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBQ
cm9jZXNzIHNhbXBsZQorICAgIHByb2Nlc3NPdXRwdXRMb29wKCk7CisKKyAgICByZXR1cm4gU19P
SzsKK30KKworc3RhdGljIEhSRVNVTFQgdmFsaWRhdGVWaWRlb0FyZWEoY29uc3QgTUZWaWRlb0Fy
ZWEmIGFyZWEsIFVJTlQzMiB3aWR0aCwgVUlOVDMyIGhlaWdodCkKK3sKKyAgICBmbG9hdCBmT2Zm
c2V0WCA9IE1GT2Zmc2V0VG9GbG9hdChhcmVhLk9mZnNldFgpOworICAgIGZsb2F0IGZPZmZzZXRZ
ID0gTUZPZmZzZXRUb0Zsb2F0KGFyZWEuT2Zmc2V0WSk7CisKKyAgICBpZiAoKChMT05HKWZPZmZz
ZXRYICsgYXJlYS5BcmVhLmN4ID4gd2lkdGgpIHx8ICgoTE9ORylmT2Zmc2V0WSArIGFyZWEuQXJl
YS5jeSA+IGhlaWdodCkpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURNRURJQVRZUEU7Cisg
ICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6YmVnaW5TdHJlYW1pbmcoKQoreworICAgIHJl
dHVybiBtX3NjaGVkdWxlci5zdGFydFNjaGVkdWxlcihtX2Nsb2NrLmdldCgpKTsKK30KKworSFJF
U1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjplbmRTdHJlYW1pbmcoKQoreworICAgIHJldHVybiBtX3NjaGVkdWxlci5zdG9wU2NoZWR1
bGVyKCk7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpD
dXN0b21WaWRlb1ByZXNlbnRlcjo6Y2hlY2tFbmRPZlN0cmVhbSgpCit7CisgICAgaWYgKCFtX2Vu
ZFN0cmVhbWluZykgeworICAgICAgICAvLyBXZSBoYXZlIG5vdCByZWNlaXZlZCB0aGUgZW5kLW9m
LXN0cmVhbSBtZXNzYWdlIGZyb20gdGhlIEVWUi4KKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAg
fQorCisgICAgaWYgKG1fc2FtcGxlTm90aWZ5KSB7CisgICAgICAgIC8vIFRoZXJlIGlzIHN0aWxs
IGlucHV0IHNhbXBsZXMgYXZhaWxhYmxlIGZvciB0aGUgbWl4ZXIuIAorICAgICAgICByZXR1cm4g
U19PSzsKKyAgICB9CisKKyAgICBpZiAobV9zYW1wbGVQb29sLmFyZVNhbXBsZXNQZW5kaW5nKCkp
IHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNhbXBsZXMgc2NoZWR1bGVkIGZvciByZW5kZXJpbmcu
CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgIC8vIFdlIGFyZSBkb25lLCBub3Rp
ZnkgdGhlIEVWUi4KKyAgICBub3RpZnlFdmVudChFQ19DT01QTEVURSwgKExPTkdfUFRSKVNfT0ss
IDApOworICAgIG1fZW5kU3RyZWFtaW5nID0gZmFsc2U7CisgICAgcmV0dXJuIFNfT0s7Cit9CisK
K0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1By
ZXNlbnRlcjo6aXNNZWRpYVR5cGVTdXBwb3J0ZWQoSU1GTWVkaWFUeXBlKiBtZWRpYVR5cGUpCit7
CisgICAgVmlkZW9UeXBlIHByb3Bvc2VkVmlkZW9UeXBlKG1lZGlhVHlwZSk7CisKKyAgICAvLyBX
ZSBkb24ndCBzdXBwb3J0IGNvbXByZXNzZWQgbWVkaWEgdHlwZXMuCisgICAgQk9PTCBjb21wcmVz
c2VkID0gRkFMU0U7CisgICAgSFJFU1VMVCBociA9IHByb3Bvc2VkVmlkZW9UeXBlLklzQ29tcHJl
c3NlZEZvcm1hdCgmY29tcHJlc3NlZCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybiBocjsKKyAgICBpZiAoY29tcHJlc3NlZCkKKyAgICAgICAgcmV0dXJuIE1GX0VfSU5WQUxJ
RE1FRElBVFlQRTsKKworICAgIC8vIFZhbGlkYXRlIHRoZSBmb3JtYXQuCisgICAgRDNERk9STUFU
IGQzZEZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworICAgIGhyID0gcHJvcG9zZWRWaWRlb1R5cGUu
R2V0Rm91ckNDKChEV09SRCopJmQzZEZvcm1hdCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgIHJldHVybiBocjsKKworICAgIC8vIENoZWNrIGlmIHRoZSBmb3JtYXQgY2FuIGJlIHVzZWQg
YXMgYmFja2J1ZmZlciBmb3JtYXQuCisgICAgaHIgPSBtX3ByZXNlbnRlckVuZ2luZS0+Y2hlY2tG
b3JtYXQoZDNkRm9ybWF0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhy
OworCisgICAgLy8gQ2hlY2sgaW50ZXJsYWNlZCBmb3JtYXRzLgorICAgIE1GVmlkZW9JbnRlcmxh
Y2VNb2RlIGludGVybGFjZU1vZGUgPSBNRlZpZGVvSW50ZXJsYWNlX1Vua25vd247CisgICAgaHIg
PSBwcm9wb3NlZFZpZGVvVHlwZS5HZXRJbnRlcmxhY2VNb2RlKCZpbnRlcmxhY2VNb2RlKTsKKyAg
ICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaWYgKGludGVybGFj
ZU1vZGUgIT0gTUZWaWRlb0ludGVybGFjZV9Qcm9ncmVzc2l2ZSkKKyAgICAgICAgcmV0dXJuIE1G
X0VfSU5WQUxJRE1FRElBVFlQRTsKKworICAgIFVJTlQzMiB3aWR0aCA9IDAsIGhlaWdodCA9IDA7
CisgICAgaHIgPSBwcm9wb3NlZFZpZGVvVHlwZS5HZXRGcmFtZURpbWVuc2lvbnMoJndpZHRoLCAm
aGVpZ2h0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAg
Ly8gVmFsaWRhdGUgYXBlcnR1cmVzLgorICAgIE1GVmlkZW9BcmVhIHZpZGVvQ3JvcEFyZWE7Cisg
ICAgaWYgKFNVQ0NFRURFRChwcm9wb3NlZFZpZGVvVHlwZS5HZXRQYW5TY2FuQXBlcnR1cmUoJnZp
ZGVvQ3JvcEFyZWEpKSkKKyAgICAgICAgdmFsaWRhdGVWaWRlb0FyZWEodmlkZW9Dcm9wQXJlYSwg
d2lkdGgsIGhlaWdodCk7CisgICAgaWYgKFNVQ0NFRURFRChwcm9wb3NlZFZpZGVvVHlwZS5HZXRH
ZW9tZXRyaWNBcGVydHVyZSgmdmlkZW9Dcm9wQXJlYSkpKQorICAgICAgICB2YWxpZGF0ZVZpZGVv
QXJlYSh2aWRlb0Nyb3BBcmVhLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoU1VDQ0VFREVEKHBy
b3Bvc2VkVmlkZW9UeXBlLkdldE1pbkRpc3BsYXlBcGVydHVyZSgmdmlkZW9Dcm9wQXJlYSkpKQor
ICAgICAgICB2YWxpZGF0ZVZpZGVvQXJlYSh2aWRlb0Nyb3BBcmVhLCB3aWR0aCwgaGVpZ2h0KTsK
KworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmNyZWF0ZU9wdGltYWxWaWRlb1R5cGUo
SU1GTWVkaWFUeXBlKiBwcm9wb3NlZFR5cGUsIElNRk1lZGlhVHlwZSoqIG9wdGltYWxUeXBlKQor
eworICAgIFZpZGVvVHlwZSBvcHRpbWFsVmlkZW9UeXBlOworICAgIG9wdGltYWxWaWRlb1R5cGUu
Q3JlYXRlRW1wdHlUeXBlKCk7CisKKyAgICBIUkVTVUxUIGhyID0gb3B0aW1hbFZpZGVvVHlwZS5D
b3B5RnJvbShwcm9wb3NlZFR5cGUpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1
cm4gaHI7CisKKyAgICAvLyBXZSBub3cgbW9kaWZ5IHRoZSBuZXcgbWVkaWEgdHlwZS4KKworICAg
IC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBtb25pdG9yJ3MgcGl4ZWwgYXNwZWN0IHJhdGlvIGlzIDE6
MSwKKyAgICAvLyBhbmQgdGhhdCB0aGUgcGl4ZWwgYXNwZWN0IHJhdGlvIGlzIHByZXNlcnZlZCBi
eSB0aGUgcHJlc2VudGVyLgorICAgIGhyID0gb3B0aW1hbFZpZGVvVHlwZS5TZXRQaXhlbEFzcGVj
dFJhdGlvKDEsIDEpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisK
KyAgICAvLyBHZXQgdGhlIG91dHB1dCByZWN0YW5nbGUuCisgICAgUkVDVCByY091dHB1dCA9IG1f
cHJlc2VudGVyRW5naW5lLT5nZXREZXN0aW5hdGlvblJlY3QoKTsKKyAgICBpZiAoSXNSZWN0RW1w
dHkoJnJjT3V0cHV0KSkgeworICAgICAgICBociA9IGNhbGN1bGF0ZU91dHB1dFJlY3RhbmdsZShw
cm9wb3NlZFR5cGUsIHJjT3V0cHV0KTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
ICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgaHIgPSBvcHRpbWFsVmlkZW9UeXBlLlNldFlV
Vk1hdHJpeChNRlZpZGVvVHJhbnNmZXJNYXRyaXhfQlQ3MDkpOworICAgIGlmIChGQUlMRUQoaHIp
KQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IG9wdGltYWxWaWRlb1R5cGUuU2V0VHJh
bnNmZXJGdW5jdGlvbihNRlZpZGVvVHJhbnNGdW5jXzcwOSk7CisgICAgaWYgKEZBSUxFRChocikp
CisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gb3B0aW1hbFZpZGVvVHlwZS5TZXRWaWRl
b1ByaW1hcmllcyhNRlZpZGVvUHJpbWFyaWVzX0JUNzA5KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBvcHRpbWFsVmlkZW9UeXBlLlNldFZpZGVv
Tm9taW5hbFJhbmdlKE1GTm9taW5hbFJhbmdlXzE2XzIzNSk7CisgICAgaWYgKEZBSUxFRChocikp
CisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gb3B0aW1hbFZpZGVvVHlwZS5TZXRWaWRl
b0xpZ2h0aW5nKE1GVmlkZW9MaWdodGluZ19kaW0pOworICAgIGlmIChGQUlMRUQoaHIpKQorICAg
ICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IG9wdGltYWxWaWRlb1R5cGUuU2V0RnJhbWVEaW1l
bnNpb25zKHJjT3V0cHV0LnJpZ2h0LCByY091dHB1dC5ib3R0b20pOworICAgIGlmIChGQUlMRUQo
aHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBNRlZpZGVvQXJlYSBkaXNwbGF5QXJlYSA9
IE1ha2VBcmVhKDAsIDAsIHJjT3V0cHV0LnJpZ2h0LCByY091dHB1dC5ib3R0b20pOworCisgICAg
aHIgPSBvcHRpbWFsVmlkZW9UeXBlLlNldFBhblNjYW5FbmFibGVkKEZBTFNFKTsKKyAgICBpZiAo
RkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBvcHRpbWFsVmlkZW9U
eXBlLlNldEdlb21ldHJpY0FwZXJ0dXJlKGRpc3BsYXlBcmVhKTsKKyAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBvcHRpbWFsVmlkZW9UeXBlLlNldFBh
blNjYW5BcGVydHVyZShkaXNwbGF5QXJlYSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
IHJldHVybiBocjsKKworICAgIGhyID0gb3B0aW1hbFZpZGVvVHlwZS5TZXRNaW5EaXNwbGF5QXBl
cnR1cmUoZGlzcGxheUFyZWEpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4g
aHI7CisKKyAgICAqb3B0aW1hbFR5cGUgPSBvcHRpbWFsVmlkZW9UeXBlLkRldGFjaCgpOworCisg
ICAgcmV0dXJuIFNfT0s7Cit9CisKK3N0YXRpYyBSRUNUIGNvcnJlY3RBc3BlY3RSYXRpbyhjb25z
dCBSRUNUJiBzcmMsIGNvbnN0IE1GUmF0aW8mIHNyY1BBUiwgY29uc3QgTUZSYXRpbyYgZGVzdFBB
UikKK3sKKyAgICBSRUNUIHJjID0geyAwLCAwLCBzcmMucmlnaHQgLSBzcmMubGVmdCwgc3JjLmJv
dHRvbSAtIHNyYy50b3AgfTsKKworICAgIGlmICgoc3JjUEFSLk51bWVyYXRvciAqIGRlc3RQQVIu
RGVub21pbmF0b3IpICE9IChzcmNQQVIuRGVub21pbmF0b3IgKiBkZXN0UEFSLk51bWVyYXRvcikp
IHsKKyAgICAgICAgLy8gVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXNwZWN0IHJhdGlvcyBh
cmUgZGlmZmVyZW50CisKKyAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBzb3VyY2UgYXNwZWN0IHJh
dGlvIHRvIDE6MQorICAgICAgICBpZiAoc3JjUEFSLk51bWVyYXRvciA+IHNyY1BBUi5EZW5vbWlu
YXRvcikKKyAgICAgICAgICAgIHJjLnJpZ2h0ID0gTXVsRGl2KHJjLnJpZ2h0LCBzcmNQQVIuTnVt
ZXJhdG9yLCBzcmNQQVIuRGVub21pbmF0b3IpOworICAgICAgICBlbHNlIGlmIChzcmNQQVIuTnVt
ZXJhdG9yIDwgc3JjUEFSLkRlbm9taW5hdG9yKQorICAgICAgICAgICAgcmMuYm90dG9tID0gTXVs
RGl2KHJjLmJvdHRvbSwgc3JjUEFSLkRlbm9taW5hdG9yLCBzcmNQQVIuTnVtZXJhdG9yKTsKKwor
CisgICAgICAgIC8vIFRyYW5zZm9ybSB0byBkZXN0aW5hdGlvbiBhc3BlY3QgcmF0aW8uCisgICAg
ICAgIGlmIChkZXN0UEFSLk51bWVyYXRvciA+IGRlc3RQQVIuRGVub21pbmF0b3IpCisgICAgICAg
ICAgICByYy5ib3R0b20gPSBNdWxEaXYocmMuYm90dG9tLCBkZXN0UEFSLk51bWVyYXRvciwgZGVz
dFBBUi5EZW5vbWluYXRvcik7CisgICAgICAgIGVsc2UgaWYgKGRlc3RQQVIuTnVtZXJhdG9yIDwg
ZGVzdFBBUi5EZW5vbWluYXRvcikKKyAgICAgICAgICAgIHJjLnJpZ2h0ID0gTXVsRGl2KHJjLnJp
Z2h0LCBkZXN0UEFSLkRlbm9taW5hdG9yLCBkZXN0UEFSLk51bWVyYXRvcik7CisKKyAgICB9CisK
KyAgICByZXR1cm4gcmM7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Y2FsY3VsYXRlT3V0cHV0UmVjdGFuZ2xlKElN
Rk1lZGlhVHlwZSogcHJvcG9zZWRUeXBlLCBSRUNUJiBvdXRwdXRSZWN0KQoreworICAgIFZpZGVv
VHlwZSBwcm9wb3NlZFZpZGVvVHlwZShwcm9wb3NlZFR5cGUpOworCisgICAgVUlOVDMyIHNyY1dp
ZHRoID0gMCwgc3JjSGVpZ2h0ID0gMDsKKyAgICBIUkVTVUxUIGhyID0gcHJvcG9zZWRWaWRlb1R5
cGUuR2V0RnJhbWVEaW1lbnNpb25zKCZzcmNXaWR0aCwgJnNyY0hlaWdodCk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIE1GVmlkZW9BcmVhIGRpc3BsYXlB
cmVhOworICAgIFplcm9NZW1vcnkoJmRpc3BsYXlBcmVhLCBzaXplb2YoZGlzcGxheUFyZWEpKTsK
KworICAgIGhyID0gcHJvcG9zZWRWaWRlb1R5cGUuR2V0VmlkZW9EaXNwbGF5QXJlYSgmZGlzcGxh
eUFyZWEpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBM
T05HIG9mZnNldFggPSAoTE9ORylNRk9mZnNldFRvRmxvYXQoZGlzcGxheUFyZWEuT2Zmc2V0WCk7
CisgICAgTE9ORyBvZmZzZXRZID0gKExPTkcpTUZPZmZzZXRUb0Zsb2F0KGRpc3BsYXlBcmVhLk9m
ZnNldFkpOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIGRpc3BsYXkgYXJlYSBpcyB2YWxpZC4KKyAg
ICAvLyBJZiBpdCBpcyB2YWxpZCwgd2UgdXNlIGl0LiBJZiBub3QsIHdlIHVzZSB0aGUgZnJhbWUg
ZGltZW5zaW9ucy4KKworICAgIFJFQ1QgcmNPdXRwdXQ7CisKKyAgICBpZiAoZGlzcGxheUFyZWEu
QXJlYS5jeCAhPSAwCisgICAgICAgICYmIGRpc3BsYXlBcmVhLkFyZWEuY3kgIT0gMAorICAgICAg
ICAmJiBvZmZzZXRYICsgZGlzcGxheUFyZWEuQXJlYS5jeCA8PSBzcmNXaWR0aAorICAgICAgICAm
JiBvZmZzZXRZICsgZGlzcGxheUFyZWEuQXJlYS5jeSA8PSBzcmNIZWlnaHQpIHsKKyAgICAgICAg
cmNPdXRwdXQubGVmdCA9IG9mZnNldFg7CisgICAgICAgIHJjT3V0cHV0LnJpZ2h0ID0gb2Zmc2V0
WCArIGRpc3BsYXlBcmVhLkFyZWEuY3g7CisgICAgICAgIHJjT3V0cHV0LnRvcCA9IG9mZnNldFk7
CisgICAgICAgIHJjT3V0cHV0LmJvdHRvbSA9IG9mZnNldFkgKyBkaXNwbGF5QXJlYS5BcmVhLmN5
OworICAgIH0gZWxzZSB7CisgICAgICAgIHJjT3V0cHV0LmxlZnQgPSAwOworICAgICAgICByY091
dHB1dC50b3AgPSAwOworICAgICAgICByY091dHB1dC5yaWdodCA9IHNyY1dpZHRoOworICAgICAg
ICByY091dHB1dC5ib3R0b20gPSBzcmNIZWlnaHQ7CisgICAgfQorCisgICAgLy8gQ29ycmVjdCBh
c3BlY3QgcmF0aW8uCisKKyAgICBNRlJhdGlvIGlucHV0UEFSID0gcHJvcG9zZWRWaWRlb1R5cGUu
R2V0UGl4ZWxBc3BlY3RSYXRpbygpOworICAgIE1GUmF0aW8gb3V0cHV0UEFSID0geyAxLCAxIH07
IC8vIFdlIGFzc3VtZSB0aGUgbW9uaXRvcidzIHBpeGVscyBhcmUgc3F1YXJlLgorCisgICAgb3V0
cHV0UmVjdCA9IGNvcnJlY3RBc3BlY3RSYXRpbyhyY091dHB1dCwgaW5wdXRQQVIsIG91dHB1dFBB
Uik7CisKKyAgICByZXR1cm4gU19PSzsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpwcm9jZXNzT3V0cHV0TG9vcCgpCit7
CisgICAgLy8gR2V0IHZpZGVvIGZyYW1lcyBmcm9tIHRoZSBtaXhlciBhbmQgc2NoZWR1bGUgdGhl
bSBmb3IgcHJlc2VudGF0aW9uLgorICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgd2hpbGUg
KGhyID09IFNfT0spIHsKKyAgICAgICAgaWYgKCFtX3NhbXBsZU5vdGlmeSkgeworICAgICAgICAg
ICAgLy8gQ3VycmVudGx5IG5vIG1vcmUgaW5wdXQgc2FtcGxlcy4KKyAgICAgICAgICAgIGhyID0g
TUZfRV9UUkFOU0ZPUk1fTkVFRF9NT1JFX0lOUFVUOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBXZSBicmVhayBmcm9tIHRoZSBsb29wIGlmIHdlIGZhaWwgdG8g
cHJvY2VzcyBhIHNhbXBsZS4KKyAgICAgICAgaHIgPSBwcm9jZXNzT3V0cHV0KCk7CisgICAgfQor
CisgICAgaWYgKGhyID09IE1GX0VfVFJBTlNGT1JNX05FRURfTU9SRV9JTlBVVCkKKyAgICAgICAg
Y2hlY2tFbmRPZlN0cmVhbSgpOworfQorCitzdGF0aWMgSFJFU1VMVCBzZXREZXNpcmVkU2FtcGxl
VGltZShJTUZTYW1wbGUqIHNhbXBsZSwgY29uc3QgTE9OR0xPTkcmIHNhbXBsZVRpbWUsIGNvbnN0
IExPTkdMT05HJiBkdXJhdGlvbikKK3sKKyAgICAvLyBUbyB0ZWxsIHRoZSBtaXhlciB0byBnaXZl
IHVzIGFuIGVhcmxpZXIgZnJhbWUgZm9yIHJlcGFpbnRpbmcsIHdlIGNhbiBzZXQgdGhlIGRlc2ly
ZWQgc2FtcGxlIHRpbWUuCisgICAgLy8gV2UgaGF2ZSB0byBjbGVhciB0aGUgZGVzaXJlZCBzYW1w
bGUgdGltZSBiZWZvcmUgcmV1c2luZyB0aGUgc2FtcGxlLgorCisgICAgaWYgKCFzYW1wbGUpCisg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBDT01QdHI8SU1GRGVzaXJlZFNhbXBsZT4g
ZGVzaXJlZDsKKworICAgIEhSRVNVTFQgaHIgPSBzYW1wbGUtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVp
ZG9mKElNRkRlc2lyZWRTYW1wbGUpLCAodm9pZCoqKSZkZXNpcmVkKTsKKworICAgIGlmIChTVUND
RUVERUQoaHIpKQorICAgICAgICBkZXNpcmVkLT5TZXREZXNpcmVkU2FtcGxlVGltZUFuZER1cmF0
aW9uKHNhbXBsZVRpbWUsIGR1cmF0aW9uKTsKKworICAgIHJldHVybiBocjsKK30KKworc3RhdGlj
IEhSRVNVTFQgY2xlYXJEZXNpcmVkU2FtcGxlVGltZShJTUZTYW1wbGUqIHNhbXBsZSkKK3sKKyAg
ICBpZiAoIXNhbXBsZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIC8vIFdlIG5l
ZWQgdG8gcmV0cmlldmUgc29tZSBhdHRyaWJ1dGVzIHdlIGhhdmUgc2V0IG9uIHRoZSBzYW1wbGUg
YmVmb3JlIHdlIGNhbGwgCisgICAgLy8gSU1GRGVzaXJlZFNhbXBsZTo6Q2xlYXIoKSwgYW5kIHNl
dCB0aGVtIG9uY2UgbW9yZSwgc2luY2UgdGhleSBhcmUgY2xlYXJlZCBieQorICAgIC8vIHRoZSBD
bGVhcigpIGNhbGwuCisKKyAgICBVSU5UMzIgY291bnRlciA9IE1GR2V0QXR0cmlidXRlVUlOVDMy
KHNhbXBsZSwgTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVDb3VudGVyLCAoVUlOVDMyKS0xKTsKKwor
ICAgIENPTVB0cjxJVW5rbm93bj4gc3dhcENoYWluOworICAgIHNhbXBsZS0+R2V0VW5rbm93bihN
RlNhbXBsZVByZXNlbnRlclNhbXBsZVN3YXBDaGFpbiwgSUlEX0lVbmtub3duLCAodm9pZCoqKSZz
d2FwQ2hhaW4pOworCisgICAgQ09NUHRyPElNRkRlc2lyZWRTYW1wbGU+IGRlc2lyZWQ7CisgICAg
SFJFU1VMVCBociA9IHNhbXBsZS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSU1GRGVzaXJlZFNh
bXBsZSksICh2b2lkKiopJmRlc2lyZWQpOworICAgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAg
ICAgIGRlc2lyZWQtPkNsZWFyKCk7CisKKyAgICAgICAgaHIgPSBzYW1wbGUtPlNldFVJTlQzMihN
RlNhbXBsZVByZXNlbnRlclNhbXBsZUNvdW50ZXIsIGNvdW50ZXIpOworICAgICAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBocjsKKworICAgICAgICBpZiAoc3dhcENoYWlu
KSB7CisgICAgICAgICAgICBociA9IHNhbXBsZS0+U2V0VW5rbm93bihNRlNhbXBsZVByZXNlbnRl
clNhbXBsZVN3YXBDaGFpbiwgc3dhcENoYWluLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBocjsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpwcm9jZXNzT3V0cHV0KCkKK3sKKyAgICAvLyBU
aGlzIG1ldGhvZCB3aWxsIHRyeSB0byBnZXQgYSBuZXcgc2FtcGxlIGZyb20gdGhlIG1peGVyLgor
ICAgIC8vIEl0IGlzIGNhbGxlZCB3aGVuIHRoZSBtaXhlciBoYXMgYSBuZXcgc2FtcGxlLCBvciB3
aGVuIHJlcGFpbnRpbmcgdGhlIGxhc3QgZnJhbWUuCisKKyAgICBBU1NFUlQobV9zYW1wbGVOb3Rp
ZnkgfHwgbV9yZXBhaW50KTsKKworICAgIExPTkdMT05HIG1peGVyU3RhcnRUaW1lID0gMCwgbWl4
ZXJFbmRUaW1lID0gMDsKKyAgICBNRlRJTUUgc3lzdGVtVGltZSA9IDA7CisgICAgYm9vbCByZXBh
aW50ID0gbV9yZXBhaW50OyAgCisKKyAgICAvLyBJZiB0aGUgY2xvY2sgaGFzIG5vdCBzdGFydGVk
LCB3ZSBvbmx5IHByZXNlbnQgdGhlIGZpcnN0IHNhbXBsZS4gCisKKyAgICBpZiAoKG1fcmVuZGVy
U3RhdGUgIT0gUmVuZGVyU3RhdGVTdGFydGVkKSAmJiAhbV9yZXBhaW50ICYmIG1fcHJlcm9sbGVk
KQorICAgICAgICByZXR1cm4gU19GQUxTRTsKKworICAgIGlmICghbV9taXhlcikKKyAgICAgICAg
cmV0dXJuIE1GX0VfSU5WQUxJRFJFUVVFU1Q7CisKKyAgICAvLyBHZXQgYSBmcmVlIHNhbXBsZSBm
cm9tIHRoZSBwb29sLgorICAgIENPTVB0cjxJTUZTYW1wbGU+IHNhbXBsZTsKKyAgICBIUkVTVUxU
IGhyID0gbV9zYW1wbGVQb29sLmdldFNhbXBsZShzYW1wbGUpOworICAgIGlmIChociA9PSBNRl9F
X1NBTVBMRUFMTE9DQVRPUl9FTVBUWSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7IC8vIFdlIHdp
bGwgdHJ5IGFnYWluIGxhdGVyIHdoZW4gdGhlcmUgYXJlIGZyZWUgc2FtcGxlcworCisgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIEFTU0VSVChzYW1wbGUpOwor
CisgICAgQVNTRVJUKE1GR2V0QXR0cmlidXRlVUlOVDMyKHNhbXBsZS5nZXQoKSwgTUZTYW1wbGVQ
cmVzZW50ZXJTYW1wbGVDb3VudGVyLCAoVUlOVDMyKS0xKSA9PSBtX3Rva2VuQ291bnRlcik7CisK
KyAgICBpZiAobV9yZXBhaW50KSB7CisgICAgICAgIC8vIEdldCB0aGUgbW9zdCByZWNlbnQgc2Ft
cGxlIGZyb20gdGhlIG1peGVyLgorICAgICAgICBzZXREZXNpcmVkU2FtcGxlVGltZShzYW1wbGUu
Z2V0KCksIG1fc2NoZWR1bGVyLmxhc3RTYW1wbGVUaW1lKCksIG1fc2NoZWR1bGVyLmZyYW1lRHVy
YXRpb24oKSk7CisgICAgICAgIG1fcmVwYWludCA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIENsZWFyIHRoZSBkZXNpcmVkIHNhbXBsZSB0aW1lIHRvIGdldCB0aGUgbmV4dCBzYW1w
bGUgaW4gdGhlIHN0cmVhbS4KKyAgICAgICAgY2xlYXJEZXNpcmVkU2FtcGxlVGltZShzYW1wbGUu
Z2V0KCkpOworCisgICAgICAgIGlmIChtX2Nsb2NrKSB7CisgICAgICAgICAgICAvLyBHZXQgdGhl
IHN0YXJ0aW5nIHRpbWUgb2YgdGhlIFByb2Nlc3NPdXRwdXQgY2FsbC4KKyAgICAgICAgICAgIG1f
Y2xvY2stPkdldENvcnJlbGF0ZWRUaW1lKDAsICZtaXhlclN0YXJ0VGltZSwgJnN5c3RlbVRpbWUp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gR2V0IGEgc2FtcGxlIGZyb20gdGhlIG1peGVy
LiAKKyAgICBNRlRfT1VUUFVUX0RBVEFfQlVGRkVSIGRhdGFCdWZmZXI7CisgICAgWmVyb01lbW9y
eSgmZGF0YUJ1ZmZlciwgc2l6ZW9mKGRhdGFCdWZmZXIpKTsKKworICAgIGRhdGFCdWZmZXIuZHdT
dHJlYW1JRCA9IDA7CisgICAgZGF0YUJ1ZmZlci5wU2FtcGxlID0gc2FtcGxlLmdldCgpOworICAg
IGRhdGFCdWZmZXIuZHdTdGF0dXMgPSAwOworCisgICAgRFdPUkQgc3RhdHVzID0gMDsKKyAgICBo
ciA9IG1fbWl4ZXItPlByb2Nlc3NPdXRwdXQoMCwgMSwgJmRhdGFCdWZmZXIsICZzdGF0dXMpOwor
CisgICAgLy8gUmVsZWFzZSBldmVudHMuIFRoZXJlIGFyZSB1c3VhbGx5IG5vIGV2ZW50cyByZXR1
cm5lZCwKKyAgICAvLyBidXQgaW4gY2FzZSB0aGVyZSBhcmUsIHdlIHNob3VsZCByZWxlYXNlIHRo
ZW0uCisgICAgaWYgKGRhdGFCdWZmZXIucEV2ZW50cykKKyAgICAgICAgZGF0YUJ1ZmZlci5wRXZl
bnRzLT5SZWxlYXNlKCk7CisKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBIUkVTVUxU
IGhyMiA9IG1fc2FtcGxlUG9vbC5yZXR1cm5TYW1wbGUoc2FtcGxlLmdldCgpKTsKKyAgICAgICAg
aWYgKEZBSUxFRChocjIpKQorICAgICAgICAgICAgcmV0dXJuIGhyMjsKKworICAgICAgICBpZiAo
aHIgPT0gTUZfRV9UUkFOU0ZPUk1fVFlQRV9OT1RfU0VUKSB7CisgICAgICAgICAgICAvLyBUaGUg
bWVkaWEgdHlwZSBoYXMgbm90IGJlZW4gc2V0LCByZW5lZ290aWF0ZS4KKyAgICAgICAgICAgIGhy
ID0gcmVuZWdvdGlhdGVNZWRpYVR5cGUoKTsKKyAgICAgICAgfSBlbHNlIGlmIChociA9PSBNRl9F
X1RSQU5TRk9STV9TVFJFQU1fQ0hBTkdFKSB7CisgICAgICAgICAgICAvLyBUaGUgbWVkaWEgdHlw
ZSBjaGFuZ2VkLCByZXNldCBpdC4KKyAgICAgICAgICAgIHNldE1lZGlhVHlwZShudWxscHRyKTsK
KyAgICAgICAgfSBlbHNlIGlmIChociA9PSBNRl9FX1RSQU5TRk9STV9ORUVEX01PUkVfSU5QVVQp
IHsKKyAgICAgICAgICAgIC8vIFRoZSBtaXhlciBuZWVkcyBtb3JlIGlucHV0LgorICAgICAgICAg
ICAgbV9zYW1wbGVOb3RpZnkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIFdlIGhhdmUgZ290IGEgc2FtcGxlIGZyb20gdGhlIG1peGVyLgorCisgICAgICAgIGlm
IChtX2Nsb2NrICYmICFyZXBhaW50KSB7CisgICAgICAgICAgICAvLyBOb3RpZnkgdGhlIEVWUiBh
Ym91dCBsYXRlbmN5LgorICAgICAgICAgICAgbV9jbG9jay0+R2V0Q29ycmVsYXRlZFRpbWUoMCwg
Jm1peGVyRW5kVGltZSwgJnN5c3RlbVRpbWUpOworCisgICAgICAgICAgICBMT05HTE9ORyBsYXRl
bmN5VGltZSA9IG1peGVyRW5kVGltZSAtIG1peGVyU3RhcnRUaW1lOworICAgICAgICAgICAgbm90
aWZ5RXZlbnQoRUNfUFJPQ0VTU0lOR19MQVRFTkNZLCAoTE9OR19QVFIpJmxhdGVuY3lUaW1lLCAw
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcmUgbm90aWZpZWQgd2hl
biB0aGUgc2FtcGxlIGlzIHJlbGVhc2VkCisgICAgICAgIGhyID0gdHJhY2tTYW1wbGUoc2FtcGxl
LmdldCgpKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7
CisKKyAgICAgICAgLy8gRGVsaXZlciB0aGUgc2FtcGxlIGZvciBzY2hlZHVsaW5nCisgICAgICAg
IGhyID0gZGVsaXZlclNhbXBsZShzYW1wbGUuZ2V0KCksIHJlcGFpbnQpOworICAgICAgICBpZiAo
RkFJTEVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBocjsKKworICAgICAgICAvLyBBdCBsZWFz
dCBvbmUgc2FtcGxlIGhhcyBiZWVuIHByZXNlbnRlZCBub3cuCisgICAgICAgIG1fcHJlcm9sbGVk
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6ZGVsaXZlclNh
bXBsZShJTUZTYW1wbGUqIHNhbXBsZSwgYm9vbCByZXBhaW50KQoreworICAgIEFTU0VSVChzYW1w
bGUpOworCisgICAgRGlyZWN0M0RQcmVzZW50ZXI6OkRldmljZVN0YXRlIHN0YXRlID0gRGlyZWN0
M0RQcmVzZW50ZXI6OkRldmljZU9LOworCisgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBzYW1wbGUg
c2hvdWxkIGJlIHByZXNlbnRlZCBpbW1lZGlhdGVseS4KKyAgICBib29sIHByZXNlbnROb3cgPSAo
KG1fcmVuZGVyU3RhdGUgIT0gUmVuZGVyU3RhdGVTdGFydGVkKSB8fCBpc1NjcnViYmluZygpIHx8
IHJlcGFpbnQpOworCisgICAgSFJFU1VMVCBociA9IG1fcHJlc2VudGVyRW5naW5lLT5jaGVja0Rl
dmljZVN0YXRlKHN0YXRlKTsKKworICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICBociA9
IG1fc2NoZWR1bGVyLnNjaGVkdWxlU2FtcGxlKHNhbXBsZSwgcHJlc2VudE5vdyk7CisKKyAgICBp
ZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAvLyBTdHJlYW1pbmcgaGFzIGZhaWxlZCwgbm90aWZ5
IHRoZSBFVlIuCisgICAgICAgIG5vdGlmeUV2ZW50KEVDX0VSUk9SQUJPUlQsIGhyLCAwKTsKKyAg
ICB9IGVsc2UgaWYgKHN0YXRlID09IERpcmVjdDNEUHJlc2VudGVyOjpEZXZpY2VSZXNldCkKKyAg
ICAgICAgbm90aWZ5RXZlbnQoRUNfRElTUExBWV9DSEFOR0VELCBTX09LLCAwKTsKKworICAgIHJl
dHVybiBocjsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OkN1c3RvbVZpZGVvUHJlc2VudGVyOjp0cmFja1NhbXBsZShJTUZTYW1wbGUqIHNhbXBsZSkKK3sK
KyAgICBDT01QdHI8SU1GVHJhY2tlZFNhbXBsZT4gdHJhY2tlZDsKKworICAgIEhSRVNVTFQgaHIg
PSBzYW1wbGUtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElNRlRyYWNrZWRTYW1wbGUpLCAodm9p
ZCoqKSZ0cmFja2VkKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOwor
CisgICAgLy8gU2V0IGNhbGxiYWNrIG9iamVjdCBvbiB3aGljaCB0aGUgb25TYW1wbGVGcmVlIG1l
dGhvZCBpcyBpbnZva2VkIHdoZW4gdGhlIHNhbXBsZSBpcyBubyBsb25nZXIgdXNlZC4KKyAgICBy
ZXR1cm4gdHJhY2tlZC0+U2V0QWxsb2NhdG9yKHRoaXMsIG51bGxwdHIpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OnJl
bGVhc2VSZXNvdXJjZXMoKQoreworICAgIC8vIFRoZSB0b2tlbiBjb3VudGVyIGlzIGluY3JlbWVu
dGVkIHRvIGluZGljYXRlIHRoYXQgZXhpc3Rpbmcgc2FtcGxlcyBhcmUKKyAgICAvLyBpbnZhbGlk
IGFuZCBjYW4gYmUgZGlzcG9zZWQgaW4gdGhlIG1ldGhvZCBvblNhbXBsZUZyZWUuCisgICAgbV90
b2tlbkNvdW50ZXIrKzsKKworICAgIGZsdXNoKCk7CisKKyAgICBtX3NhbXBsZVBvb2wuY2xlYXIo
KTsKKworICAgIGlmIChtX3ByZXNlbnRlckVuZ2luZSkKKyAgICAgICAgbV9wcmVzZW50ZXJFbmdp
bmUtPnJlbGVhc2VSZXNvdXJjZXMoKTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpvblNhbXBsZUZyZWUoSU1GQXN5
bmNSZXN1bHQqIHJlc3VsdCkKK3sKKyAgICBDT01QdHI8SVVua25vd24+IG9iamVjdDsKKyAgICBI
UkVTVUxUIGhyID0gcmVzdWx0LT5HZXRPYmplY3QoJm9iamVjdCk7CisgICAgaWYgKEZBSUxFRCho
cikpIHsKKyAgICAgICAgbm90aWZ5RXZlbnQoRUNfRVJST1JBQk9SVCwgaHIsIDApOworICAgICAg
ICByZXR1cm4gaHI7CisgICAgfQorCisgICAgQ09NUHRyPElNRlNhbXBsZT4gc2FtcGxlOworICAg
IGhyID0gb2JqZWN0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJTUZTYW1wbGUpLCAodm9pZCoq
KSZzYW1wbGUpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIG5vdGlmeUV2ZW50KEVD
X0VSUk9SQUJPUlQsIGhyLCAwKTsKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIG1f
bG9jay5sb2NrKCk7CisKKyAgICBpZiAoTUZHZXRBdHRyaWJ1dGVVSU5UMzIoc2FtcGxlLmdldCgp
LCBNRlNhbXBsZVByZXNlbnRlclNhbXBsZUNvdW50ZXIsIChVSU5UMzIpLTEpID09IG1fdG9rZW5D
b3VudGVyKSB7CisgICAgICAgIGhyID0gbV9zYW1wbGVQb29sLnJldHVyblNhbXBsZShzYW1wbGUu
Z2V0KCkpOworCisgICAgICAgIC8vIERvIG1vcmUgcHJvY2Vzc2luZywgc2luY2UgYSBmcmVlIHNh
bXBsZSBpcyBhdmFpbGFibGUKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAg
ICBwcm9jZXNzT3V0cHV0TG9vcCgpOworICAgIH0KKworICAgIG1fbG9jay51bmxvY2soKTsKKwor
ICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBub3RpZnlFdmVudChFQ19FUlJPUkFCT1JULCBo
ciwgMCk7CisKKyAgICByZXR1cm4gaHI7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6bm90aWZ5RXZlbnQobG9uZyBFdmVu
dENvZGUsIExPTkdfUFRSIFBhcmFtMSwgTE9OR19QVFIgUGFyYW0yKQoreworICAgIGlmIChtX21l
ZGlhRXZlbnRTaW5rKQorICAgICAgICBtX21lZGlhRXZlbnRTaW5rLT5Ob3RpZnkoRXZlbnRDb2Rl
LCBQYXJhbTEsIFBhcmFtMik7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6OmdldFNhbXBsZShDT01QdHI8SU1GU2FtcGxlPiYg
c2FtcGxlKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBpZiAoIW1f
aW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiBNRl9FX05PVF9JTklUSUFMSVpFRDsKKworICAg
IGlmIChtX3ZpZGVvU2FtcGxlUXVldWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTUZfRV9T
QU1QTEVBTExPQ0FUT1JfRU1QVFk7CisKKyAgICBzYW1wbGUgPSBtX3ZpZGVvU2FtcGxlUXVldWUu
dGFrZUZpcnN0KCk7CisKKyAgICBtX3BlbmRpbmcrKzsKKworICAgIHJldHVybiBTX09LOworfQor
CitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TYW1wbGVQ
b29sOjpyZXR1cm5TYW1wbGUoSU1GU2FtcGxlKiBzYW1wbGUpCit7CisgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9sb2NrKTsKKworICAgIGlmICghbV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJu
IE1GX0VfTk9UX0lOSVRJQUxJWkVEOworCisgICAgbV92aWRlb1NhbXBsZVF1ZXVlLmFwcGVuZChz
YW1wbGUpOworICAgIG1fcGVuZGluZy0tOworICAgIHJldHVybiBTX09LOworfQorCitib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TYW1wbGVQb29sOjphcmVTYW1w
bGVzUGVuZGluZygpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIGlm
ICghbV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuICht
X3BlbmRpbmcgPiAwKTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OlZpZGVvU2FtcGxlUG9vbDo6aW5pdGlhbGl6ZShWaWRlb1NhbXBsZUxpc3QmIHNhbXBs
ZXMpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIGlmIChtX2luaXRp
YWxpemVkKQorICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElEUkVRVUVTVDsKKworICAgIC8vIENv
cHkgdGhlIHNhbXBsZXMKKyAgICBmb3IgKGF1dG8gc2FtcGxlIDogc2FtcGxlcykKKyAgICAgICAg
bV92aWRlb1NhbXBsZVF1ZXVlLmFwcGVuZChzYW1wbGUpOworCisgICAgbV9pbml0aWFsaXplZCA9
IHRydWU7CisgICAgc2FtcGxlcy5jbGVhcigpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6OmNs
ZWFyKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgbV92aWRlb1Nh
bXBsZVF1ZXVlLmNsZWFyKCk7CisgICAgbV9pbml0aWFsaXplZCA9IGZhbHNlOworICAgIG1fcGVu
ZGluZyA9IDA7Cit9CisKKworLy8gU2NoZWR1bGVyIHRocmVhZCBtZXNzYWdlcy4KKworZW51bSBT
Y2hlZHVsZUV2ZW50IHsKKyAgICBFdmVudFRlcm1pbmF0ZSA9IFdNX1VTRVIsCisgICAgRXZlbnRT
Y2hlZHVsZSwKKyAgICBFdmVudEZsdXNoCit9OworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OnNldEZyYW1lUmF0ZShjb25zdCBNRlJhdGlv
JiBmcHMpCit7CisgICAgVUlOVDY0IGF2Z1RpbWVQZXJGcmFtZSA9IDA7CisgICAgTUZGcmFtZVJh
dGVUb0F2ZXJhZ2VUaW1lUGVyRnJhbWVQdHIoKShmcHMuTnVtZXJhdG9yLCBmcHMuRGVub21pbmF0
b3IsICZhdmdUaW1lUGVyRnJhbWUpOworCisgICAgbV9mcmFtZUR1cmF0aW9uID0gKE1GVElNRSlh
dmdUaW1lUGVyRnJhbWU7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6c3RhcnRTY2hlZHVsZXIoSU1GQ2xvY2sqIGNsb2NrKQor
eworICAgIGlmIChtX3NjaGVkdWxlclRocmVhZC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBF
X1VORVhQRUNURUQ7CisKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgIG1fY2xvY2sgPSBj
bG9jazsKKworICAgIC8vIFVzZSBoaWdoIHRpbWVyIHJlc29sdXRpb24uCisgICAgdGltZUJlZ2lu
UGVyaW9kKDEpOworCisgICAgLy8gQ3JlYXRlIGFuIGV2ZW50IHRvIHNpZ25hbCB0aGF0IHRoZSBz
Y2hlZHVsZXIgdGhyZWFkIGhhcyBzdGFydGVkLgorICAgIG1fdGhyZWFkUmVhZHlFdmVudCA9IDo6
Q3JlYXRlRXZlbnQobnVsbHB0ciwgRkFMU0UsIEZBTFNFLCBudWxscHRyKTsKKyAgICBpZiAoIW1f
dGhyZWFkUmVhZHlFdmVudC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBIUkVTVUxUX0ZST01f
V0lOMzIoR2V0TGFzdEVycm9yKCkpOworCisgICAgLy8gQ3JlYXRlIGFuIGV2ZW50IHRvIHNpZ25h
bCB0aGF0IHRoZSBmbHVzaCBoYXMgY29tcGxldGVkLgorICAgIG1fZmx1c2hFdmVudCA9IDo6Q3Jl
YXRlRXZlbnQobnVsbHB0ciwgRkFMU0UsIEZBTFNFLCBudWxscHRyKTsKKyAgICBpZiAoIW1fZmx1
c2hFdmVudC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBIUkVTVUxUX0ZST01fV0lOMzIoR2V0
TGFzdEVycm9yKCkpOworCisgICAgLy8gU3RhcnQgc2NoZWR1bGVyIHRocmVhZC4KKyAgICBEV09S
RCB0aHJlYWRJRCA9IDA7CisgICAgbV9zY2hlZHVsZXJUaHJlYWQgPSA6OkNyZWF0ZVRocmVhZChu
dWxscHRyLCAwLCBzY2hlZHVsZXJUaHJlYWRQcm9jLCAoTFBWT0lEKXRoaXMsIDAsICZ0aHJlYWRJ
RCk7CisgICAgaWYgKCFtX3NjaGVkdWxlclRocmVhZC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
biBIUkVTVUxUX0ZST01fV0lOMzIoR2V0TGFzdEVycm9yKCkpOworCisgICAgSEFORExFIGhPYmpl
Y3RzW10gPSB7IG1fdGhyZWFkUmVhZHlFdmVudC5nZXQoKSwgbV9zY2hlZHVsZXJUaHJlYWQuZ2V0
KCkgfTsKKworICAgIC8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQKKyAgICBEV09SRCBy
ZXN1bHQgPSA6OldhaXRGb3JNdWx0aXBsZU9iamVjdHMoMiwgaE9iamVjdHMsIEZBTFNFLCBJTkZJ
TklURSk7CisgICAgaWYgKFdBSVRfT0JKRUNUXzAgIT0gcmVzdWx0KSB7CisgICAgICAgIC8vIFRo
ZSB0aHJlYWQgaGFzIHRlcm1pbmF0ZWQuCisgICAgICAgIG1fc2NoZWR1bGVyVGhyZWFkLmNsZWFy
KCk7CisgICAgICAgIHJldHVybiBFX1VORVhQRUNURUQ7CisgICAgfQorCisgICAgbV90aHJlYWRJ
RCA9IHRocmVhZElEOworCisgICAgcmV0dXJuIGhyOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OnN0b3BTY2hlZHVsZXIoKQor
eworICAgIGlmICghbV9zY2hlZHVsZXJUaHJlYWQuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
U19PSzsKKworICAgIC8vIFRlcm1pbmF0ZSB0aGUgc2NoZWR1bGVyIHRocmVhZAorICAgIDo6UG9z
dFRocmVhZE1lc3NhZ2UobV90aHJlYWRJRCwgRXZlbnRUZXJtaW5hdGUsIDAsIDApOworCisgICAg
Ly8gV2FpdCBmb3IgdGhlIHNjaGVkdWxlciB0aHJlYWQgdG8gZmluaXNoLgorICAgIDo6V2FpdEZv
clNpbmdsZU9iamVjdChtX3NjaGVkdWxlclRocmVhZC5nZXQoKSwgSU5GSU5JVEUpOworCisgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIG1fc2NoZWR1bGVyVGhyZWFkLmNsZWFy
KCk7CisgICAgbV9mbHVzaEV2ZW50LmNsZWFyKCk7CisKKyAgICAvLyBUaHJvdyBhd2F5IHNhbXBs
ZXMKKyAgICBtX3NjaGVkdWxlZFNhbXBsZXMuY2xlYXIoKTsKKworICAgIC8vIENsZWFyIHByZXZp
b3VzbHkgc2V0IHRpbWVyIHJlc29sdXRpb24uCisgICAgdGltZUVuZFBlcmlvZCgxKTsKKworICAg
IHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6VmlkZW9TY2hlZHVsZXI6OmZsdXNoKCkKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCB3aWxs
IHdhaXQgZm9yIHRoZSBmbHVzaCB0byBmaW5pc2ggb24gdGhlIHdvcmtlciB0aHJlYWQuCisKKyAg
ICBpZiAobV9zY2hlZHVsZXJUaHJlYWQuaXNWYWxpZCgpKSB7CisgICAgICAgIDo6UG9zdFRocmVh
ZE1lc3NhZ2UobV90aHJlYWRJRCwgRXZlbnRGbHVzaCwgMCwgMCk7CisKKyAgICAgICAgSEFORExF
IG9iamVjdHNbXSA9IHsgbV9mbHVzaEV2ZW50LmdldCgpLCBtX3NjaGVkdWxlclRocmVhZC5nZXQo
KSB9OworCisgICAgICAgIGNvbnN0IGludCBzY2hlZHVsZXJUaW1lb3V0ID0gNTAwMDsKKworICAg
ICAgICAvLyBXYWl0IGZvciB0aGUgZmx1c2ggdG8gZmluaXNoIG9yIHRoZSB0aHJlYWQgdG8gdGVy
bWluYXRlLgorICAgICAgICA6OldhaXRGb3JNdWx0aXBsZU9iamVjdHMoMiwgb2JqZWN0cywgRkFM
U0UsIHNjaGVkdWxlclRpbWVvdXQpOworICAgIH0KKworICAgIHJldHVybiBTX09LOworfQorCitI
UkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6
OnNjaGVkdWxlU2FtcGxlKElNRlNhbXBsZSogc2FtcGxlLCBib29sIHByZXNlbnROb3cpCit7Cisg
ICAgaWYgKCFtX3ByZXNlbnRlcikKKyAgICAgICAgcmV0dXJuIE1GX0VfTk9UX0lOSVRJQUxJWkVE
OworCisgICAgaWYgKCFtX3NjaGVkdWxlclRocmVhZC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
biBNRl9FX05PVF9JTklUSUFMSVpFRDsKKworICAgIERXT1JEIGV4aXRDb2RlID0gMDsKKyAgICA6
OkdldEV4aXRDb2RlVGhyZWFkKG1fc2NoZWR1bGVyVGhyZWFkLmdldCgpLCAmZXhpdENvZGUpOwor
CisgICAgaWYgKGV4aXRDb2RlICE9IFNUSUxMX0FDVElWRSkKKyAgICAgICAgcmV0dXJuIEVfRkFJ
TDsKKworICAgIGlmIChwcmVzZW50Tm93IHx8ICFtX2Nsb2NrKQorICAgICAgICBtX3ByZXNlbnRl
ci0+cHJlc2VudFNhbXBsZShzYW1wbGUsIDApOworICAgIGVsc2UgeworICAgICAgICAvLyBTdWJt
aXQgdGhlIHNhbXBsZSBmb3Igc2NoZWR1bGluZy4KKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgbV9zY2hlZHVsZWRTYW1wbGVzLmFwcGVuZChzYW1wbGUpOworCisg
ICAgICAgIDo6UG9zdFRocmVhZE1lc3NhZ2UobV90aHJlYWRJRCwgRXZlbnRTY2hlZHVsZSwgMCwg
MCk7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6cHJvY2Vzc1NhbXBsZXNJblF1
ZXVlKExPTkcmIG5leHRTbGVlcCkKK3sKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICBMT05H
IHdhaXQgPSAwOworCisgICAgLy8gUHJvY2VzcyBzYW1wbGVzIGFzIGxvbmcgYXMgdGhlcmUgYXJl
IHNhbXBsZXMgaW4gdGhlIHF1ZXVlLCBhbmQgdGhleSBoYXZlIG5vdCBhcnJpdmVkIHRvbyBlYXJs
eS4KKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIENPTVB0cjxJTUZTYW1wbGU+IHNhbXBs
ZTsKKworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgICAgIGlmIChtX3NjaGVkdWxlZFNhbXBsZXMuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgc2FtcGxlID0gbV9zY2hlZHVsZWRT
YW1wbGVzLnRha2VGaXJzdCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUHJvY2VzcyB0aGUg
c2FtcGxlLgorICAgICAgICAvLyBJZiB0aGUgc2FtcGxlIGhhcyBhcnJpdmVkIHRvbyBlYXJseSwg
d2FpdCB3aWxsIGJlID4gMCwKKyAgICAgICAgLy8gYW5kIHRoZSBzY2hlZHVsZXIgc2hvdWxkIGdv
IHRvIHNsZWVwLgorICAgICAgICBociA9IHByb2Nlc3NTYW1wbGUoc2FtcGxlLmdldCgpLCB3YWl0
KTsKKworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGlmICh3YWl0ID4gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICgh
d2FpdCkgeworICAgICAgICAvLyBUaGUgcXVldWUgaXMgZW1wdHkuIFNsZWVwIHVudGlsIHRoZSBu
ZXh0IG1lc3NhZ2UgYXJyaXZlcy4KKyAgICAgICAgd2FpdCA9IElORklOSVRFOworICAgIH0KKwor
ICAgIG5leHRTbGVlcCA9IHdhaXQ7CisgICAgcmV0dXJuIGhyOworfQorCitIUkVTVUxUIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OnByb2Nlc3NTYW1w
bGUoSU1GU2FtcGxlKiBzYW1wbGUsIExPTkcmIG5leHRTbGVlcCkKK3sKKyAgICBIUkVTVUxUIGhy
ID0gU19PSzsKKworICAgIExPTkdMT05HIHByZXNlbnRhdGlvblRpbWUgPSAwOworICAgIExPTkdM
T05HIHRpbWVOb3cgPSAwOworICAgIE1GVElNRSBzeXN0ZW1UaW1lID0gMDsKKworICAgIGJvb2wg
cHJlc2VudE5vdyA9IHRydWU7CisgICAgTE9ORyBuZXh0U2xlZXBUaW1lID0gMDsKKworICAgIGlm
IChtX2Nsb2NrKSB7CisgICAgICAgIC8vIEdldCB0aGUgdGltZSBzdGFtcCBvZiB0aGUgc2FtcGxl
LgorICAgICAgICAvLyBBIHNhbXBsZSBjYW4gcG9zc2libHkgaGF2ZSBubyB0aW1lIHN0YW1wLgor
ICAgICAgICBociA9IHNhbXBsZS0+R2V0U2FtcGxlVGltZSgmcHJlc2VudGF0aW9uVGltZSk7CisK
KyAgICAgICAgLy8gR2V0IHRoZSBjbG9jayB0aW1lLgorICAgICAgICAvLyBJZiB0aGUgc2FtcGxl
IGRvZXMgbm90IGhhdmUgYSB0aW1lIHN0YW1wLCB0aGUgY2xvY2sgdGltZSBpcyBub3QgbmVlZGVk
LgorICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgIGhyID0gbV9jbG9jay0+
R2V0Q29ycmVsYXRlZFRpbWUoMCwgJnRpbWVOb3csICZzeXN0ZW1UaW1lKTsKKworICAgICAgICAv
LyBEZXRlcm1pbmUgdGhlIHRpbWUgdW50aWwgdGhlIHNhbXBsZSBzaG91bGQgYmUgcHJlc2VudGVk
LgorICAgICAgICAvLyBTYW1wbGVzIGFycml2aW5nIGxhdGUsIHdpbGwgaGF2ZSBuZWdhdGl2ZSB2
YWx1ZXMuCisgICAgICAgIExPTkdMT05HIHRpbWVEZWx0YSA9IHByZXNlbnRhdGlvblRpbWUgLSB0
aW1lTm93OworICAgICAgICBpZiAobV9wbGF5YmFja1JhdGUgPCAwKSB7CisgICAgICAgICAgICAv
LyBSZXZlcnNlIGRlbHRhIGZvciByZXZlcnNlIHBsYXliYWNrLgorICAgICAgICAgICAgdGltZURl
bHRhID0gLXRpbWVEZWx0YTsKKyAgICAgICAgfQorCisgICAgICAgIExPTkdMT05HIGZyYW1lRHVy
YXRpb25PbmVGb3VydGggPSBtX2ZyYW1lRHVyYXRpb24gLyA0OworCisgICAgICAgIGlmICh0aW1l
RGVsdGEgPCAtZnJhbWVEdXJhdGlvbk9uZUZvdXJ0aCkgeworICAgICAgICAgICAgLy8gVGhlIHNh
bXBsZSBoYXMgYXJyaXZlZCBsYXRlLiAKKyAgICAgICAgICAgIHByZXNlbnROb3cgPSB0cnVlOwor
ICAgICAgICB9IGVsc2UgaWYgKHRpbWVEZWx0YSA+ICgzICogZnJhbWVEdXJhdGlvbk9uZUZvdXJ0
aCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbiBzbGVlcCwgdGhlIHNhbXBsZSBoYXMgYXJyaXZl
ZCB0b28gZWFybHkuCisgICAgICAgICAgICBuZXh0U2xlZXBUaW1lID0gTUZUaW1lVG9NaWxsaXNl
Y29uZHModGltZURlbHRhIC0gKDMgKiBmcmFtZUR1cmF0aW9uT25lRm91cnRoKSk7CisKKyAgICAg
ICAgICAgIC8vIFNpbmNlIHNsZWVwaW5nIGlzIHVzaW5nIHRoZSBzeXN0ZW0gY2xvY2ssIHdlIG5l
ZWQgdG8gY29udmVydCB0aGUgc2xlZXAgdGltZQorICAgICAgICAgICAgLy8gZnJvbSBwcmVzZW50
YXRpb24gdGltZSB0byBzeXN0ZW0gdGltZS4KKyAgICAgICAgICAgIG5leHRTbGVlcFRpbWUgPSAo
TE9ORykobmV4dFNsZWVwVGltZSAvIGZhYnNmKG1fcGxheWJhY2tSYXRlKSk7CisKKyAgICAgICAg
ICAgIHByZXNlbnROb3cgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChwcmVz
ZW50Tm93KQorICAgICAgICBociA9IG1fcHJlc2VudGVyLT5wcmVzZW50U2FtcGxlKHNhbXBsZSwg
cHJlc2VudGF0aW9uVGltZSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFJldHVybiB0aGUgc2Ft
cGxlIHRvIHRoZSBxdWV1ZSwgc2luY2UgaXQgaXMgbm90IHJlYWR5LgorICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICBtX3NjaGVkdWxlZFNhbXBsZXMucHJlcGVuZChz
YW1wbGUpOworICAgIH0KKworICAgIG5leHRTbGVlcCA9IG5leHRTbGVlcFRpbWU7CisKKyAgICBy
ZXR1cm4gaHI7Cit9CisKK0RXT1JEIFdJTkFQSSBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OlZpZGVvU2NoZWR1bGVyOjpzY2hlZHVsZXJUaHJlYWRQcm9jKExQVk9JRCBscFBhcmFt
ZXRlcikKK3sKKyAgICBWaWRlb1NjaGVkdWxlciogc2NoZWR1bGVyID0gcmVpbnRlcnByZXRfY2Fz
dDxWaWRlb1NjaGVkdWxlcio+KGxwUGFyYW1ldGVyKTsKKyAgICBpZiAoIXNjaGVkdWxlcikKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERXT1JEPigtMSk7CisgICAgcmV0dXJuIHNjaGVkdWxl
ci0+c2NoZWR1bGVyVGhyZWFkUHJvY1ByaXZhdGUoKTsKK30KKworRFdPUkQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6c2NoZWR1bGVyVGhyZWFkUHJv
Y1ByaXZhdGUoKQoreworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgLy8gVGhpcyB3aWxs
IGZvcmNlIGEgbWVzc2FnZSBxdWV1ZSB0byBiZSBjcmVhdGVkIGZvciB0aGUgdGhyZWFkLgorICAg
IE1TRyBtc2c7CisgICAgUGVla01lc3NhZ2UoJm1zZywgbnVsbHB0ciwgV01fVVNFUiwgV01fVVNF
UiwgUE1fTk9SRU1PVkUpOworCisgICAgLy8gVGhlIHRocmVhZCBpcyByZWFkeS4KKyAgICBTZXRF
dmVudChtX3RocmVhZFJlYWR5RXZlbnQuZ2V0KCkpOworCisgICAgTE9ORyB3YWl0ID0gSU5GSU5J
VEU7CisgICAgYm9vbCBleGl0VGhyZWFkID0gZmFsc2U7CisgICAgd2hpbGUgKCFleGl0VGhyZWFk
KSB7CisgICAgICAgIC8vIFdhaXQgZm9yIG1lc3NhZ2VzCisgICAgICAgIERXT1JEIHJlc3VsdCA9
IE1zZ1dhaXRGb3JNdWx0aXBsZU9iamVjdHMoMCwgbnVsbHB0ciwgRkFMU0UsIHdhaXQsIFFTX1BP
U1RNRVNTQUdFKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IFdBSVRfVElNRU9VVCkgeworICAg
ICAgICAgICAgaHIgPSBwcm9jZXNzU2FtcGxlc0luUXVldWUod2FpdCk7CisgICAgICAgICAgICBp
ZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICBleGl0VGhyZWFkID0gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHdoaWxlIChQZWVrTWVzc2FnZSgmbXNnLCBudWxscHRyLCAwLCAwLCBQ
TV9SRU1PVkUpKSB7CisgICAgICAgICAgICBib29sIHByb2Nlc3NTYW1wbGVzID0gdHJ1ZTsKKwor
ICAgICAgICAgICAgc3dpdGNoIChtc2cubWVzc2FnZSkgeworICAgICAgICAgICAgY2FzZSBFdmVu
dFRlcm1pbmF0ZToKKyAgICAgICAgICAgICAgICBleGl0VGhyZWFkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFdmVudEZsdXNoOgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fc2NoZWR1bGVkU2FtcGxlcy5jbGVhcigpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB3YWl0ID0gSU5GSU5JVEU7CisgICAgICAgICAgICAg
ICAgU2V0RXZlbnQobV9mbHVzaEV2ZW50LmdldCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgY2FzZSBFdmVudFNjaGVkdWxlOgorICAgICAgICAgICAgICAgIGlmIChw
cm9jZXNzU2FtcGxlcykgeworICAgICAgICAgICAgICAgICAgICBociA9IHByb2Nlc3NTYW1wbGVz
SW5RdWV1ZSh3YWl0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgICAgICAgICAgICAgICAgICBleGl0VGhyZWFkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc1NhbXBsZXMgPSAod2FpdCAhPSBJTkZJTklURSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiAoU1VDQ0VFREVEKGhyKSA/IDAgOiAxKTsKK30KKworc3RhdGljIEhSRVNV
TFQgZmluZEFkYXB0ZXIoSURpcmVjdDNEOSogZGlyZWN0M0Q5LCBITU9OSVRPUiBtb25pdG9yLCBV
SU5UJiBhZGFwdGVySUQpCit7CisgICAgSFJFU1VMVCBociA9IEVfRkFJTDsKKworICAgIFVJTlQg
YWRhcHRlckNvdW50ID0gZGlyZWN0M0Q5LT5HZXRBZGFwdGVyQ291bnQoKTsKKyAgICBmb3IgKFVJ
TlQgaSA9IDA7IGkgPCBhZGFwdGVyQ291bnQ7IGkrKykgeworICAgICAgICBITU9OSVRPUiBtb25p
dG9yVG1wID0gZGlyZWN0M0Q5LT5HZXRBZGFwdGVyTW9uaXRvcihpKTsKKworICAgICAgICBpZiAo
IW1vbml0b3JUbXApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAobW9uaXRvclRt
cCA9PSBtb25pdG9yKSB7CisgICAgICAgICAgICBhZGFwdGVySUQgPSBpOworICAgICAgICAgICAg
aHIgPSBTX09LOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gaHI7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0
M0RQcmVzZW50ZXI6OkRpcmVjdDNEUHJlc2VudGVyKCkKK3sKKyAgICBTZXRSZWN0RW1wdHkoJm1f
ZGVzdFJlY3QpOworCisgICAgWmVyb01lbW9yeSgmbV9kaXNwbGF5TW9kZSwgc2l6ZW9mKG1fZGlz
cGxheU1vZGUpKTsKKworICAgIEhSRVNVTFQgaHIgPSBpbml0aWFsaXplRDNEKCk7CisKKyAgICBp
ZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3JlYXRlRDNERGV2aWNlKCk7
Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50
ZXI6On5EaXJlY3QzRFByZXNlbnRlcigpCit7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6Z2V0U2VydmljZShSRUZHVUlE
IGd1aWRTZXJ2aWNlLCBSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdikKK3sKKyAgICBBU1NFUlQocHB2
KTsKKworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgaWYgKHJpaWQgPT0gX191dWlkb2Yo
SURpcmVjdDNERGV2aWNlTWFuYWdlcjkpKSB7CisgICAgICAgIGlmICghbV9kZXZpY2VNYW5hZ2Vy
KQorICAgICAgICAgICAgaHIgPSBNRl9FX1VOU1VQUE9SVEVEX1NFUlZJQ0U7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgKnBwdiA9IG1fZGV2aWNlTWFuYWdlci5nZXQoKTsKKyAgICAgICAg
ICAgIG1fZGV2aWNlTWFuYWdlci0+QWRkUmVmKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgaHIgPSBNRl9FX1VOU1VQUE9SVEVEX1NFUlZJQ0U7CisKKyAgICByZXR1cm4gaHI7Cit9
CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFBy
ZXNlbnRlcjo6Y2hlY2tGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKK3sKKyAgICBIUkVTVUxUIGhy
ID0gU19PSzsKKworICAgIFVJTlQgYWRhcHRlciA9IEQzREFEQVBURVJfREVGQVVMVDsKKyAgICBE
M0RERVZUWVBFIHR5cGUgPSBEM0RERVZUWVBFX0hBTDsKKworICAgIGlmIChtX2RldmljZSkgewor
ICAgICAgICBEM0RERVZJQ0VfQ1JFQVRJT05fUEFSQU1FVEVSUyBwYXJhbXM7CisgICAgICAgIGhy
ID0gbV9kZXZpY2UtPkdldENyZWF0aW9uUGFyYW1ldGVycygmcGFyYW1zKTsKKyAgICAgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4gaHI7CisKKyAgICAgICAgYWRhcHRlciA9
IHBhcmFtcy5BZGFwdGVyT3JkaW5hbDsKKyAgICAgICAgdHlwZSA9IHBhcmFtcy5EZXZpY2VUeXBl
OworICAgIH0KKworICAgIEQzRERJU1BMQVlNT0RFIG1vZGU7CisgICAgaHIgPSBtX2RpcmVjdDNE
OS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKGFkYXB0ZXIsICZtb2RlKTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgcmV0dXJuIG1fZGlyZWN0M0Q5LT5DaGVj
a0RldmljZVR5cGUoYWRhcHRlciwgdHlwZSwgbW9kZS5Gb3JtYXQsIGZvcm1hdCwgVFJVRSk7Cit9
CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFBy
ZXNlbnRlcjo6c2V0VmlkZW9XaW5kb3coSFdORCBod25kKQoreworICAgIEFTU0VSVChJc1dpbmRv
dyhod25kKSk7CisgICAgQVNTRVJUKGh3bmQgIT0gbV9od25kKTsKKworICAgIHsKKyAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgbV9od25kID0gaHduZDsKKyAgICAg
ICAgdXBkYXRlRGVzdFJlY3QoKTsKKyAgICB9CisKKyAgICByZXR1cm4gY3JlYXRlRDNERGV2aWNl
KCk7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJl
Y3QzRFByZXNlbnRlcjo6c2V0RGVzdGluYXRpb25SZWN0KGNvbnN0IFJFQ1QmIHJjRGVzdCkKK3sK
KyAgICBpZiAoRXF1YWxSZWN0KCZyY0Rlc3QsICZtX2Rlc3RSZWN0KSkKKyAgICAgICAgcmV0dXJu
IFNfT0s7CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgbV9kZXN0UmVj
dCA9IHJjRGVzdDsKKyAgICB1cGRhdGVEZXN0UmVjdCgpOworCisgICAgcmV0dXJuIFNfT0s7Cit9
CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFBy
ZXNlbnRlcjo6Y3JlYXRlVmlkZW9TYW1wbGVzKElNRk1lZGlhVHlwZSogZm9ybWF0LCBWaWRlb1Nh
bXBsZUxpc3QmIHZpZGVvU2FtcGxlUXVldWUpCit7CisgICAgLy8gQ3JlYXRlIHZpZGVvIHNhbXBs
ZXMgbWF0Y2hpbmcgdGhlIHN1cHBsaWVkIGZvcm1hdC4KKyAgICAvLyBBIHN3YXAgY2hhaW4gd2l0
aCBhIHNpbmdsZSBiYWNrIGJ1ZmZlciB3aWxsIGJlIGNyZWF0ZWQgZm9yIGVhY2ggdmlkZW8gc2Ft
cGxlLgorICAgIC8vIFRoZSBtaXhlciB3aWxsIHJlbmRlciB0byB0aGUgYmFjayBidWZmZXIgdGhy
b3VnaCBhIHN1cmZhY2Uga2VwdCBieSB0aGUgc2FtcGxlLgorICAgIC8vIFRoZSBzdXJmYWNlIGNh
biBiZSByZW5kZXJlZCB0byBhIHdpbmRvdyBieSBwcmVzZW50aW5nIHRoZSBzd2FwIGNoYWluLgor
ICAgIC8vIEluIG91ciBjYXNlIHRoZSBzdXJmYWNlIGlzIHRyYW5zZmVycmVkIHRvIHN5c3RlbSBt
ZW1vcnksIGFuZCByZW5kZXJlZCB0byBhIGdyYXBoaWNzIGNvbnRleHQuCisKKyAgICBpZiAoIW1f
aHduZCkKKyAgICAgICAgcmV0dXJuIE1GX0VfSU5WQUxJRFJFUVVFU1Q7CisKKyAgICBpZiAoIWZv
cm1hdCkKKyAgICAgICAgcmV0dXJuIE1GX0VfVU5FWFBFQ1RFRDsKKworCisgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9sb2NrKTsKKworICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKKworICAgIEQzRFBS
RVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVyczsKKyAgICBIUkVTVUxUIGhyID0gZ2V0
U3dhcENoYWluUHJlc2VudFBhcmFtZXRlcnMoZm9ybWF0LCAmcHJlc2VudFBhcmFtZXRlcnMpOwor
ICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAg
ICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIHVwZGF0ZURlc3RSZWN0KCk7CisKKyAgICBzdGF0
aWMgY29uc3QgaW50IHByZXNlbnRlckJ1ZmZlckNvdW50ID0gMzsKKworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcHJlc2VudGVyQnVmZmVyQ291bnQ7IGkrKykgeworICAgICAgICBDT01QdHI8SURp
cmVjdDNEU3dhcENoYWluOT4gc3dhcENoYWluOworICAgICAgICBociA9IG1fZGV2aWNlLT5DcmVh
dGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJnN3YXBDaGFpbik7Cisg
ICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICByZWxlYXNlUmVzb3VyY2VzKCk7
CisgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAgIH0KKworICAgICAgICBDT01QdHI8SU1G
U2FtcGxlPiB2aWRlb1NhbXBsZTsKKyAgICAgICAgaHIgPSBjcmVhdGVEM0RTYW1wbGUoc3dhcENo
YWluLmdldCgpLCB2aWRlb1NhbXBsZSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAg
ICAgICAgICByZWxlYXNlUmVzb3VyY2VzKCk7CisgICAgICAgICAgICByZXR1cm4gaHI7CisgICAg
ICAgIH0KKworICAgICAgICB2aWRlb1NhbXBsZVF1ZXVlLmFwcGVuZCh2aWRlb1NhbXBsZSk7CisK
KyAgICAgICAgLy8gS2VlcCB0aGUgc3dhcCBjaGFpbiBhbGl2ZSBieSBzZXR0aW5nIGl0IGFzIGEg
Y3VzdG9tIGF0dHJpYnV0ZSBvbiB0aGUgc2FtcGxlLgorICAgICAgICBociA9IHZpZGVvU2FtcGxl
LT5TZXRVbmtub3duKE1GU2FtcGxlUHJlc2VudGVyU2FtcGxlU3dhcENoYWluLCBzd2FwQ2hhaW4u
Z2V0KCkpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAgICAgcmVsZWFzZVJl
c291cmNlcygpOworICAgICAgICAgICAgcmV0dXJuIGhyOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGhyOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6RGlyZWN0M0RQcmVzZW50ZXI6OnJlbGVhc2VSZXNvdXJjZXMoKQoreworICAgIG1fc3VyZmFj
ZVJlcGFpbnQgPSBudWxscHRyOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6OmNoZWNrRGV2aWNlU3RhdGUoRGV2aWNlU3Rh
dGUmIHN0YXRlKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBIUkVT
VUxUIGhyID0gbV9kZXZpY2UtPkNoZWNrRGV2aWNlU3RhdGUobV9od25kKTsKKworICAgIHN0YXRl
ID0gRGV2aWNlT0s7CisKKyAgICAvLyBOb3QgYWxsIGZhaWx1cmUgY29kZXMgYXJlIGNyaXRpY2Fs
LgorCisgICAgc3dpdGNoIChocikgeworICAgIGNhc2UgU19PSzoKKyAgICBjYXNlIFNfUFJFU0VO
VF9PQ0NMVURFRDoKKyAgICBjYXNlIFNfUFJFU0VOVF9NT0RFX0NIQU5HRUQ6CisgICAgICAgIGhy
ID0gU19PSzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEQzREVSUl9ERVZJQ0VMT1NUOgor
ICAgIGNhc2UgRDNERVJSX0RFVklDRUhVTkc6CisgICAgICAgIGhyID0gY3JlYXRlRDNERGV2aWNl
KCk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgcmV0dXJuIGhyOworICAg
ICAgICBzdGF0ZSA9IERldmljZVJlc2V0OworICAgICAgICBociA9IFNfT0s7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBEM0RFUlJfREVWSUNFUkVNT1ZFRDoKKyAgICAgICAgc3RhdGUgPSBE
ZXZpY2VSZW1vdmVkOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRV9JTlZBTElEQVJHOgor
ICAgICAgICAvLyBUaGlzIG1pZ2h0IGhhcHBlbiBpZiB0aGUgd2luZG93IGhhcyBiZWVuIGRlc3Ry
b3llZCwgb3IgaXMgbm90IHZhbGlkLgorICAgICAgICAvLyBBIG5ldyBkZXZpY2Ugd2lsbCBiZSBj
cmVhdGVkIGlmIGEgbmV3IHdpbmRvdyBpcyBzZXQuCisgICAgICAgIGhyID0gU19PSzsKKyAgICB9
CisKKyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6cHJlc2VudFNhbXBsZShJTUZTYW1wbGUqIHNh
bXBsZSwgTE9OR0xPTkcgdGFyZ2V0UHJlc2VudGF0aW9uVGltZSkKK3sKKyAgICBIUkVTVUxUIGhy
ID0gU19PSzsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBDT01QdHI8
SURpcmVjdDNEU3VyZmFjZTk+IHN1cmZhY2U7CisKKyAgICBpZiAoc2FtcGxlKSB7CisgICAgICAg
IENPTVB0cjxJTUZNZWRpYUJ1ZmZlcj4gYnVmZmVyOworICAgICAgICBociA9IHNhbXBsZS0+R2V0
QnVmZmVyQnlJbmRleCgwLCAmYnVmZmVyKTsKKyAgICAgICAgaHIgPSBNRkdldFNlcnZpY2VQdHIo
KShidWZmZXIuZ2V0KCksIE1SX0JVRkZFUl9TRVJWSUNFLCBfX3V1aWRvZihJRGlyZWN0M0RTdXJm
YWNlOSksICh2b2lkKiopJnN1cmZhY2UpOworICAgIH0gZWxzZSBpZiAobV9zdXJmYWNlUmVwYWlu
dCkgeworICAgICAgICAvLyBVc2UgdGhlIGxhc3Qgc3VyZmFjZS4KKyAgICAgICAgc3VyZmFjZSA9
IG1fc3VyZmFjZVJlcGFpbnQ7CisgICAgfQorCisgICAgaWYgKHN1cmZhY2UpIHsKKyAgICAgICAg
VUlOVCB3aWR0aCA9IG1fZGVzdFJlY3QucmlnaHQgLSBtX2Rlc3RSZWN0LmxlZnQ7CisgICAgICAg
IFVJTlQgaGVpZ2h0ID0gbV9kZXN0UmVjdC5ib3R0b20gLSBtX2Rlc3RSZWN0LnRvcDsKKworICAg
ICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHsKKyAgICAgICAgICAgIGlmICghbV9t
ZW1TdXJmYWNlIHx8IG1fd2lkdGggIT0gd2lkdGggfHwgbV9oZWlnaHQgIT0gaGVpZ2h0KSB7Cisg
ICAgICAgICAgICAgICAgaHIgPSBtX2RldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNl
KHdpZHRoLCBoZWlnaHQsIEQzREZNVF9BOFI4RzhCOCwgRDNEUE9PTF9TWVNURU1NRU0sICZtX21l
bVN1cmZhY2UsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIG1fd2lkdGggPSB3aWR0aDsKKyAg
ICAgICAgICAgICAgICBtX2hlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIC8vIENvcHkgZGF0YSBmcm9tIHZpZGVvIG1lbW9yeSB0byBzeXN0ZW0gbWVtb3J5CisgICAg
ICAgICAgICBociA9IG1fZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHN1cmZhY2UuZ2V0KCks
IG1fbWVtU3VyZmFjZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoRkFJTEVEKGhyKSkgeworICAg
ICAgICAgICAgICAgIG1fbWVtU3VyZmFjZSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgaHIg
PSBTX09LOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gU2luY2Ugd2Ug
d2FudCB0byBkcmF3IHRvIHRoZSBHcmFwaGljc0NvbnRleHQgcHJvdmlkZWQgaW4gdGhlIHBhaW50
IG1ldGhvZCwKKyAgICAgICAgLy8gYW5kIG5vdCBkcmF3IGRpcmVjdGx5IHRvIHRoZSB3aW5kb3cs
IHdlIHNraXAgcHJlc2VudGluZyB0aGUgc3dhcCBjaGFpbjoKKworICAgICAgICAvLyBDT01QdHI8
SURpcmVjdDNEU3dhcENoYWluOT4gc3dhcENoYWluOworICAgICAgICAvLyBociA9IHN1cmZhY2Ut
PkdldENvbnRhaW5lcihfX3V1aWRvZihJRGlyZWN0M0RTd2FwQ2hhaW45KSwgKExQVk9JRCopJnN3
YXBDaGFpbikpOworICAgICAgICAvLyBociA9IHByZXNlbnRTd2FwQ2hhaW4oc3dhcENoYWluLCBz
dXJmYWNlKSk7CisKKyAgICAgICAgLy8gS2VlcCB0aGUgbGFzdCBzdXJmYWNlIGZvciByZXBhaW50
cy4KKyAgICAgICAgbV9zdXJmYWNlUmVwYWludCA9IHN1cmZhY2U7CisgICAgfQorCisgICAgaWYg
KEZBSUxFRChocikpIHsKKyAgICAgICAgaWYgKGhyID09IEQzREVSUl9ERVZJQ0VMT1NUIHx8IGhy
ID09IEQzREVSUl9ERVZJQ0VOT1RSRVNFVCB8fCBociA9PSBEM0RFUlJfREVWSUNFSFVORykgewor
ICAgICAgICAgICAgLy8gSWdub3JlIHRoaXMgZXJyb3IuIFdlIGhhdmUgdG8gcmVzZXQgb3IgcmVj
cmVhdGUgdGhlIGRldmljZS4KKyAgICAgICAgICAgIC8vIFRoZSBwcmVzZW50ZXIgd2lsbCBoYW5k
bGUgdGhpcyB3aGVuIGNoZWNraW5nIHRoZSBkZXZpY2Ugc3RhdGUgdGhlIG5leHQgdGltZS4KKyAg
ICAgICAgICAgIGhyID0gU19PSzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaHI7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNl
bnRlcjo6cGFpbnRDdXJyZW50RnJhbWUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHIpCit7CisgICAgVUlOVCB3aWR0aCA9IG1fZGVz
dFJlY3QucmlnaHQgLSBtX2Rlc3RSZWN0LmxlZnQ7CisgICAgVUlOVCBoZWlnaHQgPSBtX2Rlc3RS
ZWN0LmJvdHRvbSAtIG1fZGVzdFJlY3QudG9wOworCisgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0
KQorICAgICAgICByZXR1cm47CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisg
ICAgaWYgKCFtX21lbVN1cmZhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIEQzRExPQ0tFRF9S
RUNUIGxvY2tlZFJlY3Q7CisgICAgaWYgKFNVQ0NFRURFRChtX21lbVN1cmZhY2UtPkxvY2tSZWN0
KCZsb2NrZWRSZWN0LCBudWxscHRyLCBEM0RMT0NLX1JFQURPTkxZKSkpIHsKKyAgICAgICAgdm9p
ZCogZGF0YSA9IGxvY2tlZFJlY3QucEJpdHM7CisgICAgICAgIGludCBwaXRjaCA9IGxvY2tlZFJl
Y3QuUGl0Y2g7CisjaWYgVVNFKENBSVJPKQorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNvbnRl
eHRDYWlybyogY3R4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgICAgIGNhaXJv
X3N1cmZhY2VfdCogaW1hZ2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdp
ZHRoLCBoZWlnaHQsIHBpdGNoKTsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNsaXAoMCwg
MCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0ID0gcjsK
KyAgICAgICAgcmVjdC5pbnRlcnNlY3QoY2xpcCk7CisgICAgICAgIGN0eHQtPmRyYXdTdXJmYWNl
VG9Db250ZXh0KGltYWdlLCByZWN0LCByZWN0LCBjb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fc3Vy
ZmFjZV9kZXN0cm95KGltYWdlKTsKKyNlbHNlCisjZXJyb3IgIlBsYXRmb3JtIG5lZWRzIHRvIGlt
cGxlbWVudCBkcmF3aW5nIG9mIERpcmVjdDNEIHN1cmZhY2UgdG8gZ3JhcGhpY3MgY29udGV4dCEi
CisjZW5kaWYKKyAgICAgICAgbV9tZW1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgfQorfQor
CitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVz
ZW50ZXI6OmluaXRpYWxpemVEM0QoKQoreworICAgIEFTU0VSVCghbV9kaXJlY3QzRDkpOworICAg
IEFTU0VSVCghbV9kZXZpY2VNYW5hZ2VyKTsKKworICAgIEhSRVNVTFQgaHIgPSBEaXJlY3QzRENy
ZWF0ZTlFeFB0cigpKEQzRF9TREtfVkVSU0lPTiwgJm1fZGlyZWN0M0Q5KTsKKyAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgcmV0dXJuIERYVkEyQ3JlYXRlRGly
ZWN0M0REZXZpY2VNYW5hZ2VyOVB0cigpKCZtX2RldmljZVJlc2V0VG9rZW4sICZtX2RldmljZU1h
bmFnZXIpOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
RGlyZWN0M0RQcmVzZW50ZXI6OmNyZWF0ZUQzRERldmljZSgpCit7CisgICAgSFJFU1VMVCBociA9
IFNfT0s7CisgICAgVUlOVCBhZGFwdGVySUQgPSBEM0RBREFQVEVSX0RFRkFVTFQ7CisKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgaWYgKCFtX2RpcmVjdDNEOSB8fCAhbV9k
ZXZpY2VNYW5hZ2VyKQorICAgICAgICByZXR1cm4gTUZfRV9OT1RfSU5JVElBTElaRUQ7CisKKyAg
ICBIV05EIGh3bmQgPSBHZXREZXNrdG9wV2luZG93KCk7CisKKyAgICAvLyBXZSBjcmVhdGUgYWRk
aXRpb25hbCBzd2FwIGNoYWlucyB0byBwcmVzZW50IHRoZSB2aWRlbyBmcmFtZXMsCisgICAgLy8g
YW5kIGRvIG5vdCB1c2UgdGhlIGltcGxpY2l0IHN3YXAgY2hhaW4gb2YgdGhlIGRldmljZS4KKyAg
ICAvLyBUaGUgc2l6ZSBvZiB0aGUgYmFjayBidWZmZXIgaXMgMSB4IDEuCisKKyAgICBEM0RQUkVT
RU5UX1BBUkFNRVRFUlMgcHA7CisgICAgWmVyb01lbW9yeSgmcHAsIHNpemVvZihwcCkpOworCisg
ICAgcHAuQmFja0J1ZmZlcldpZHRoID0gMTsKKyAgICBwcC5CYWNrQnVmZmVySGVpZ2h0ID0gMTsK
KyAgICBwcC5XaW5kb3dlZCA9IFRSVUU7CisgICAgcHAuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZF
Q1RfQ09QWTsKKyAgICBwcC5CYWNrQnVmZmVyRm9ybWF0ID0gRDNERk1UX1VOS05PV047CisgICAg
cHAuaERldmljZVdpbmRvdyA9IGh3bmQ7CisgICAgcHAuRmxhZ3MgPSBEM0RQUkVTRU5URkxBR19W
SURFTzsKKyAgICBwcC5QcmVzZW50YXRpb25JbnRlcnZhbCA9IEQzRFBSRVNFTlRfSU5URVJWQUxf
REVGQVVMVDsKKworICAgIGlmIChtX2h3bmQpIHsKKyAgICAgICAgSE1PTklUT1IgbW9uaXRvciA9
IE1vbml0b3JGcm9tV2luZG93KG1faHduZCwgTU9OSVRPUl9ERUZBVUxUVE9ORUFSRVNUKTsKKwor
ICAgICAgICBociA9IGZpbmRBZGFwdGVyKG1fZGlyZWN0M0Q5LmdldCgpLCBtb25pdG9yLCBhZGFw
dGVySUQpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBocjsK
KyAgICB9CisKKyAgICBEM0RDQVBTOSBkZENhcHM7CisgICAgWmVyb01lbW9yeSgmZGRDYXBzLCBz
aXplb2YoZGRDYXBzKSk7CisKKyAgICBociA9IG1fZGlyZWN0M0Q5LT5HZXREZXZpY2VDYXBzKGFk
YXB0ZXJJRCwgRDNEREVWVFlQRV9IQUwsICZkZENhcHMpOworICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICByZXR1cm4gaHI7CisKKyAgICBEV09SRCBmbGFncyA9IEQzRENSRUFURV9OT1dJTkRP
V0NIQU5HRVMgfCBEM0RDUkVBVEVfTVVMVElUSFJFQURFRCB8IEQzRENSRUFURV9GUFVfUFJFU0VS
VkU7CisKKyAgICBpZiAoZGRDYXBzLkRldkNhcHMgJiBEM0RERVZDQVBTX0hXVFJBTlNGT1JNQU5E
TElHSFQpCisgICAgICAgIGZsYWdzIHw9IEQzRENSRUFURV9IQVJEV0FSRV9WRVJURVhQUk9DRVNT
SU5HOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ1JFQVRFX1NPRlRXQVJFX1ZFUlRF
WFBST0NFU1NJTkc7CisKKyAgICBDT01QdHI8SURpcmVjdDNERGV2aWNlOUV4PiBkZXZpY2U7Cisg
ICAgaHIgPSBtX2RpcmVjdDNEOS0+Q3JlYXRlRGV2aWNlRXgoCisgICAgICAgIGFkYXB0ZXJJRCwK
KyAgICAgICAgRDNEREVWVFlQRV9IQUwsCisgICAgICAgIHBwLmhEZXZpY2VXaW5kb3csCisgICAg
ICAgIGZsYWdzLAorICAgICAgICAmcHAsCisgICAgICAgIG51bGxwdHIsCisgICAgICAgICZkZXZp
Y2UKKyAgICAgICAgKTsKKworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7
CisKKyAgICBociA9IG1fZGlyZWN0M0Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUoYWRhcHRlcklE
LCAmbV9kaXNwbGF5TW9kZSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBo
cjsKKworICAgIGhyID0gbV9kZXZpY2VNYW5hZ2VyLT5SZXNldERldmljZShkZXZpY2UuZ2V0KCks
IG1fZGV2aWNlUmVzZXRUb2tlbik7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVy
biBocjsKKworICAgIG1fZGV2aWNlID0gZGV2aWNlOworCisgICAgcmV0dXJuIGhyOworfQorCitI
UkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50
ZXI6OmNyZWF0ZUQzRFNhbXBsZShJRGlyZWN0M0RTd2FwQ2hhaW45KiBzd2FwQ2hhaW4sIENPTVB0
cjxJTUZTYW1wbGU+JiB2aWRlb1NhbXBsZSkKK3sKKyAgICBDT01QdHI8SURpcmVjdDNEU3VyZmFj
ZTk+IHN1cmZhY2U7CisgICAgSFJFU1VMVCBociA9IHN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigw
LCBEM0RCQUNLQlVGRkVSX1RZUEVfTU9OTywgJnN1cmZhY2UpOworICAgIGlmIChGQUlMRUQoaHIp
KQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBEM0RDT0xPUiBjb2xvckJsYWNrID0gRDNEQ09M
T1JfQVJHQigweEZGLCAweDAwLCAweDAwLCAweDAwKTsKKyAgICBociA9IG1fZGV2aWNlLT5Db2xv
ckZpbGwoc3VyZmFjZS5nZXQoKSwgbnVsbHB0ciwgY29sb3JCbGFjayk7CisgICAgaWYgKEZBSUxF
RChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIHJldHVybiBNRkNyZWF0ZVZpZGVvU2Ft
cGxlRnJvbVN1cmZhY2VQdHIoKShzdXJmYWNlLmdldCgpLCAmdmlkZW9TYW1wbGUpOworfQorCitI
UkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50
ZXI6OnByZXNlbnRTd2FwQ2hhaW4oSURpcmVjdDNEU3dhcENoYWluOSogc3dhcENoYWluLCBJRGly
ZWN0M0RTdXJmYWNlOSogc3VyZmFjZSkKK3sKKyAgICBpZiAoIW1faHduZCkKKyAgICAgICAgcmV0
dXJuIE1GX0VfSU5WQUxJRFJFUVVFU1Q7CisKKyAgICByZXR1cm4gc3dhcENoYWluLT5QcmVzZW50
KG51bGxwdHIsICZtX2Rlc3RSZWN0LCBtX2h3bmQsIG51bGxwdHIsIDApOworfQorCitIUkVTVUxU
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6Omdl
dFN3YXBDaGFpblByZXNlbnRQYXJhbWV0ZXJzKElNRk1lZGlhVHlwZSogdHlwZSwgRDNEUFJFU0VO
VF9QQVJBTUVURVJTKiBwcmVzZW50UGFyYW1zKQoreworICAgIGlmICghbV9od25kKQorICAgICAg
ICByZXR1cm4gTUZfRV9JTlZBTElEUkVRVUVTVDsKKworICAgIFZpZGVvVHlwZSB2aWRlb1R5cGUo
dHlwZSk7CisKKyAgICBVSU5UMzIgd2lkdGggPSAwLCBoZWlnaHQgPSAwOworICAgIEhSRVNVTFQg
aHIgPSB2aWRlb1R5cGUuR2V0RnJhbWVEaW1lbnNpb25zKCZ3aWR0aCwgJmhlaWdodCk7CisgICAg
aWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIERXT1JEIGQzZEZvcm1h
dCA9IDA7CisgICAgaHIgPSB2aWRlb1R5cGUuR2V0Rm91ckNDKCZkM2RGb3JtYXQpOworICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBaZXJvTWVtb3J5KHByZXNl
bnRQYXJhbXMsIHNpemVvZihEM0RQUkVTRU5UX1BBUkFNRVRFUlMpKTsKKyAgICBwcmVzZW50UGFy
YW1zLT5CYWNrQnVmZmVyV2lkdGggPSB3aWR0aDsKKyAgICBwcmVzZW50UGFyYW1zLT5CYWNrQnVm
ZmVySGVpZ2h0ID0gaGVpZ2h0OworICAgIHByZXNlbnRQYXJhbXMtPldpbmRvd2VkID0gVFJVRTsK
KyAgICBwcmVzZW50UGFyYW1zLT5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9DT1BZOworICAg
IHByZXNlbnRQYXJhbXMtPkJhY2tCdWZmZXJGb3JtYXQgPSAoRDNERk9STUFUKWQzZEZvcm1hdDsK
KyAgICBwcmVzZW50UGFyYW1zLT5oRGV2aWNlV2luZG93ID0gbV9od25kOworICAgIHByZXNlbnRQ
YXJhbXMtPkZsYWdzID0gRDNEUFJFU0VOVEZMQUdfVklERU87CisgICAgcHJlc2VudFBhcmFtcy0+
UHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBEM0RQUkVTRU5UX0lOVEVSVkFMX0RFRkFVTFQ7CisKKyAg
ICBEM0RERVZJQ0VfQ1JFQVRJT05fUEFSQU1FVEVSUyBwYXJhbXM7CisgICAgaHIgPSBtX2Rldmlj
ZS0+R2V0Q3JlYXRpb25QYXJhbWV0ZXJzKCZwYXJhbXMpOworICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICByZXR1cm4gaHI7CisKKyAgICBpZiAocGFyYW1zLkRldmljZVR5cGUgIT0gRDNEREVW
VFlQRV9IQUwpCisgICAgICAgIHByZXNlbnRQYXJhbXMtPkZsYWdzIHw9IEQzRFBSRVNFTlRGTEFH
X0xPQ0tBQkxFX0JBQ0tCVUZGRVI7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjp1cGRh
dGVEZXN0UmVjdCgpCit7CisgICAgaWYgKCFtX2h3bmQpCisgICAgICAgIHJldHVybiBTX0ZBTFNF
OworCisgICAgUkVDVCByY1ZpZXc7CisgICAgR2V0Q2xpZW50UmVjdChtX2h3bmQsICZyY1ZpZXcp
OworCisgICAgLy8gQ2xpcCB0byB0aGUgY2xpZW50IGFyZWEgb2YgdGhlIHdpbmRvdy4KKyAgICBp
ZiAobV9kZXN0UmVjdC5yaWdodCA+IHJjVmlldy5yaWdodCkKKyAgICAgICAgbV9kZXN0UmVjdC5y
aWdodCA9IHJjVmlldy5yaWdodDsKKworICAgIGlmIChtX2Rlc3RSZWN0LmJvdHRvbSA+IHJjVmll
dy5ib3R0b20pCisgICAgICAgIG1fZGVzdFJlY3QuYm90dG9tID0gcmNWaWV3LmJvdHRvbTsKKwor
ICAgIHJldHVybiBTX09LOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uaAkocmV2
aXNpb24gMTkyMTUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwx
MyArMjQsMjQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRlZiBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb25faAorI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb25faAorCiAjaW5jbHVkZSAiQ09NUHRyLmgiCisjaW5jbHVkZSAiTWVkaWFGb3VuZGF0
aW9uVXRpbHMuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNsdWRlICJX
aW4zMkhhbmRsZS5oIgorCisjaW5jbHVkZSA8RDNEOS5oPgorI2luY2x1ZGUgPER4dmEyYXBpLmg+
CiAKICNpbmNsdWRlIDxNZmFwaS5oPgorI2luY2x1ZGUgPE1mZXJyb3IuaD4KICNpbmNsdWRlIDxN
ZmlkbC5oPgorI2luY2x1ZGUgPGV2Y29kZS5oPgogI2luY2x1ZGUgPGV2ci5oPgogCisjaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nUHJpbWl0aXZlcy5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBAIC0xMTgsNiAr
MTI5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVZpZGVvV2luZG93KCk7CiAgICAgdm9p
ZCBkZXN0cm95VmlkZW9XaW5kb3coKTsKIAorICAgIHZvaWQgaW52YWxpZGF0ZUZyYW1lVmlldygp
OworCiAgICAgdm9pZCBhZGRMaXN0ZW5lcihNZWRpYVBsYXllckxpc3RlbmVyKik7CiAgICAgdm9p
ZCByZW1vdmVMaXN0ZW5lcihNZWRpYVBsYXllckxpc3RlbmVyKik7CiAgICAgdm9pZCBub3RpZnlE
ZWxldGVkKCk7CkBAIC0xNTMsNiArMTY2LDI4OCBAQCBwcml2YXRlOgogICAgICAgICBMb2NrIG1f
bXV0ZXg7CiAgICAgfTsKIAorICAgIHR5cGVkZWYgRGVxdWU8Q09NUHRyPElNRlNhbXBsZT4+IFZp
ZGVvU2FtcGxlTGlzdDsKKworICAgIGNsYXNzIFZpZGVvU2FtcGxlUG9vbCB7CisgICAgcHVibGlj
OgorICAgICAgICBWaWRlb1NhbXBsZVBvb2woKSB7IH0KKyAgICAgICAgdmlydHVhbCB+VmlkZW9T
YW1wbGVQb29sKCkgeyB9CisKKyAgICAgICAgSFJFU1VMVCBpbml0aWFsaXplKFZpZGVvU2FtcGxl
TGlzdCYgc2FtcGxlcyk7CisgICAgICAgIHZvaWQgY2xlYXIoKTsKKworICAgICAgICBIUkVTVUxU
IGdldFNhbXBsZShDT01QdHI8SU1GU2FtcGxlPiYpOworICAgICAgICBIUkVTVUxUIHJldHVyblNh
bXBsZShJTUZTYW1wbGUqKTsKKyAgICAgICAgYm9vbCBhcmVTYW1wbGVzUGVuZGluZygpOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAgICAgIFZpZGVvU2FtcGxlTGlz
dCBtX3ZpZGVvU2FtcGxlUXVldWU7CisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZCB7IGZhbHNl
IH07CisgICAgICAgIHVuc2lnbmVkIG1fcGVuZGluZyB7IDAgfTsKKyAgICB9OworCisgICAgY2xh
c3MgRGlyZWN0M0RQcmVzZW50ZXI7CisKKyAgICBjbGFzcyBWaWRlb1NjaGVkdWxlciB7CisgICAg
cHVibGljOgorICAgICAgICBWaWRlb1NjaGVkdWxlcigpIHsgfQorICAgICAgICB2aXJ0dWFsIH5W
aWRlb1NjaGVkdWxlcigpIHsgfQorCisgICAgICAgIHZvaWQgc2V0UHJlc2VudGVyKERpcmVjdDNE
UHJlc2VudGVyKiBwcmVzZW50ZXIpIHsgbV9wcmVzZW50ZXIgPSBwcmVzZW50ZXI7IH0KKworICAg
ICAgICB2b2lkIHNldEZyYW1lUmF0ZShjb25zdCBNRlJhdGlvJiBmcHMpOworICAgICAgICB2b2lk
IHNldENsb2NrUmF0ZShmbG9hdCByYXRlKSB7IG1fcGxheWJhY2tSYXRlID0gcmF0ZTsgfQorCisg
ICAgICAgIGNvbnN0IExPTkdMT05HJiBsYXN0U2FtcGxlVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGFzdFNhbXBsZVRpbWU7IH0KKyAgICAgICAgY29uc3QgTE9OR0xPTkcmIGZyYW1lRHVyYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2ZyYW1lRHVyYXRpb247IH0KKworICAgICAgICBIUkVTVUxUIHN0
YXJ0U2NoZWR1bGVyKElNRkNsb2NrKik7CisgICAgICAgIEhSRVNVTFQgc3RvcFNjaGVkdWxlcigp
OworCisgICAgICAgIEhSRVNVTFQgc2NoZWR1bGVTYW1wbGUoSU1GU2FtcGxlKiwgYm9vbCBwcmVz
ZW50Tm93KTsKKyAgICAgICAgSFJFU1VMVCBwcm9jZXNzU2FtcGxlc0luUXVldWUoTE9ORyYgbmV4
dFNsZWVwKTsKKyAgICAgICAgSFJFU1VMVCBwcm9jZXNzU2FtcGxlKElNRlNhbXBsZSosIExPTkcm
IG5leHRTbGVlcCk7CisgICAgICAgIEhSRVNVTFQgZmx1c2goKTsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIHN0YXRpYyBEV09SRCBXSU5BUEkgc2NoZWR1bGVyVGhyZWFkUHJvYyhMUFZPSUQgbHBQ
YXJhbWV0ZXIpOworICAgICAgICBEV09SRCBzY2hlZHVsZXJUaHJlYWRQcm9jUHJpdmF0ZSgpOwor
CisgICAgICAgIERlcXVlPENPTVB0cjxJTUZTYW1wbGU+PiBtX3NjaGVkdWxlZFNhbXBsZXM7Cisg
ICAgICAgIExvY2sgbV9sb2NrOworCisgICAgICAgIENPTVB0cjxJTUZDbG9jaz4gbV9jbG9jazsK
KyAgICAgICAgRGlyZWN0M0RQcmVzZW50ZXIqIG1fcHJlc2VudGVyIHsgbnVsbHB0ciB9OworCisg
ICAgICAgIERXT1JEIG1fdGhyZWFkSUQgeyAwIH07CisgICAgICAgIFdpbjMySGFuZGxlIG1fc2No
ZWR1bGVyVGhyZWFkOworICAgICAgICBXaW4zMkhhbmRsZSBtX3RocmVhZFJlYWR5RXZlbnQ7Cisg
ICAgICAgIFdpbjMySGFuZGxlIG1fZmx1c2hFdmVudDsKKworICAgICAgICBmbG9hdCBtX3BsYXli
YWNrUmF0ZSB7IDEuMGYgfTsKKyAgICAgICAgTUZUSU1FIG1fZnJhbWVEdXJhdGlvbiB7IDAgfTsK
KyAgICAgICAgTUZUSU1FIG1fbGFzdFNhbXBsZVRpbWUgeyAwIH07CisgICAgfTsKKworICAgIGNs
YXNzIERpcmVjdDNEUHJlc2VudGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERpcmVjdDNEUHJl
c2VudGVyKCk7CisgICAgICAgIH5EaXJlY3QzRFByZXNlbnRlcigpOworCisgICAgICAgIGVudW0g
RGV2aWNlU3RhdGUgeworICAgICAgICAgICAgRGV2aWNlT0ssCisgICAgICAgICAgICBEZXZpY2VS
ZXNldCwKKyAgICAgICAgICAgIERldmljZVJlbW92ZWQsCisgICAgICAgIH07CisKKyAgICAgICAg
Ly8gUmV0dXJucyB0aGUgSURpcmVjdDNERGV2aWNlTWFuYWdlcjkgaW50ZXJmYWNlLgorICAgICAg
ICBIUkVTVUxUIGdldFNlcnZpY2UoUkVGR1VJRCBndWlkU2VydmljZSwgUkVGSUlEIHJpaWQsIHZv
aWQqKiBwcHYpOworCisgICAgICAgIEhSRVNVTFQgY2hlY2tGb3JtYXQoRDNERk9STUFUKTsKKwor
ICAgICAgICBIUkVTVUxUIHNldFZpZGVvV2luZG93KEhXTkQpOworICAgICAgICBIV05EIGdldFZp
ZGVvV2luZG93KCkgY29uc3QgeyByZXR1cm4gbV9od25kOyB9CisgICAgICAgIEhSRVNVTFQgc2V0
RGVzdGluYXRpb25SZWN0KGNvbnN0IFJFQ1QmIGRlc3RSZWN0KTsKKyAgICAgICAgUkVDVCBnZXRE
ZXN0aW5hdGlvblJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RSZWN0OyB9OworCisgICAgICAg
IEhSRVNVTFQgY3JlYXRlVmlkZW9TYW1wbGVzKElNRk1lZGlhVHlwZSogZm9ybWF0LCBWaWRlb1Nh
bXBsZUxpc3QmIHZpZGVvU2FtcGxlUXVldWUpOworICAgICAgICB2b2lkIHJlbGVhc2VSZXNvdXJj
ZXMoKTsKKworICAgICAgICBIUkVTVUxUIGNoZWNrRGV2aWNlU3RhdGUoRGV2aWNlU3RhdGUmKTsK
KyAgICAgICAgSFJFU1VMVCBwcmVzZW50U2FtcGxlKElNRlNhbXBsZSosIExPTkdMT05HIHRhcmdl
dCk7CisKKyAgICAgICAgVUlOVCByZWZyZXNoUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxh
eU1vZGUuUmVmcmVzaFJhdGU7IH0KKworICAgICAgICB2b2lkIHBhaW50Q3VycmVudEZyYW1lKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpOworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgSFJFU1VMVCBpbml0aWFsaXplRDNEKCk7CisgICAgICAgIEhSRVNVTFQgZ2V0U3dhcENoYWlu
UHJlc2VudFBhcmFtZXRlcnMoSU1GTWVkaWFUeXBlKiwgRDNEUFJFU0VOVF9QQVJBTUVURVJTKiBw
cmVzZW50UGFyYW1zKTsKKyAgICAgICAgSFJFU1VMVCBjcmVhdGVEM0REZXZpY2UoKTsKKyAgICAg
ICAgSFJFU1VMVCBjcmVhdGVEM0RTYW1wbGUoSURpcmVjdDNEU3dhcENoYWluOSosIENPTVB0cjxJ
TUZTYW1wbGU+JiB2aWRlb1NhbXBsZSk7CisgICAgICAgIEhSRVNVTFQgdXBkYXRlRGVzdFJlY3Qo
KTsKKworICAgICAgICBIUkVTVUxUIHByZXNlbnRTd2FwQ2hhaW4oSURpcmVjdDNEU3dhcENoYWlu
OSosIElEaXJlY3QzRFN1cmZhY2U5Kik7CisKKyAgICAgICAgVUlOVCBtX2RldmljZVJlc2V0VG9r
ZW4geyAwIH07CisgICAgICAgIEhXTkQgbV9od25kIHsgbnVsbHB0ciB9OworICAgICAgICBSRUNU
IG1fZGVzdFJlY3Q7CisgICAgICAgIEQzRERJU1BMQVlNT0RFIG1fZGlzcGxheU1vZGU7CisKKyAg
ICAgICAgTG9jayBtX2xvY2s7CisgICAgICAgIAorICAgICAgICBDT01QdHI8SURpcmVjdDNEOUV4
PiBtX2RpcmVjdDNEOTsKKyAgICAgICAgQ09NUHRyPElEaXJlY3QzRERldmljZTlFeD4gbV9kZXZp
Y2U7CisgICAgICAgIENPTVB0cjxJRGlyZWN0M0REZXZpY2VNYW5hZ2VyOT4gbV9kZXZpY2VNYW5h
Z2VyOworICAgICAgICBDT01QdHI8SURpcmVjdDNEU3VyZmFjZTk+IG1fc3VyZmFjZVJlcGFpbnQ7
CisKKyAgICAgICAgQ09NUHRyPElEaXJlY3QzRFN1cmZhY2U5PiBtX21lbVN1cmZhY2U7CisgICAg
ICAgIGludCBtX3dpZHRoIHsgMCB9OworICAgICAgICBpbnQgbV9oZWlnaHQgeyAwIH07CisgICAg
fTsKKworICAgIGNsYXNzIEN1c3RvbVZpZGVvUHJlc2VudGVyCisgICAgICAgIDogcHVibGljIElN
RlZpZGVvUHJlc2VudGVyCisgICAgICAgICwgcHVibGljIElNRlZpZGVvRGV2aWNlSUQKKyAgICAg
ICAgLCBwdWJsaWMgSU1GVG9wb2xvZ3lTZXJ2aWNlTG9va3VwQ2xpZW50CisgICAgICAgICwgcHVi
bGljIElNRkdldFNlcnZpY2UKKyAgICAgICAgLCBwdWJsaWMgSU1GQWN0aXZhdGUKKyAgICAgICAg
LCBwdWJsaWMgSU1GVmlkZW9EaXNwbGF5Q29udHJvbAorICAgICAgICAsIHB1YmxpYyBJTUZBc3lu
Y0NhbGxiYWNrCisgICAgICAgICwgcHVibGljIE1lZGlhUGxheWVyTGlzdGVuZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgQ3VzdG9tVmlkZW9QcmVzZW50ZXIoTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uKik7CisgICAgICAgIH5DdXN0b21WaWRlb1ByZXNlbnRlcigpOworCisgICAg
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJ
SUQgcmlpZCwgX19SUENfX2RlcmVmX291dCB2b2lkIF9fUlBDX0ZBUiAqX19SUENfRkFSICpwcHZP
YmplY3QpIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBF
IEFkZFJlZigpIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExU
WVBFIFJlbGVhc2UoKSBvdmVycmlkZTsKKworICAgICAgICAvLyBJTUZDbG9ja1N0YXRlU2luawor
ICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgT25DbG9ja1N0YXJ0KE1G
VElNRSBobnNTeXN0ZW1UaW1lLCBMT05HTE9ORyBsbENsb2NrU3RhcnRPZmZzZXQpIG92ZXJyaWRl
OworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgT25DbG9ja1N0b3Ao
TUZUSU1FIGhuc1N5c3RlbVRpbWUpIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgT25DbG9ja1BhdXNlKE1GVElNRSBobnNTeXN0ZW1UaW1lKSBvdmVy
cmlkZTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIE9uQ2xvY2tS
ZXN0YXJ0KE1GVElNRSBobnNTeXN0ZW1UaW1lKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIE9uQ2xvY2tTZXRSYXRlKE1GVElNRSBobnNTeXN0ZW1U
aW1lLCBmbG9hdCBmbFJhdGUpIG92ZXJyaWRlOworCisgICAgICAgIC8vIElNRlZpZGVvUHJlc2Vu
dGVyCisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBQcm9jZXNzTWVz
c2FnZShNRlZQX01FU1NBR0VfVFlQRSBlTWVzc2FnZSwgVUxPTkdfUFRSIHVsUGFyYW0pIG92ZXJy
aWRlOworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0Q3VycmVu
dE1lZGlhVHlwZShfT3V0cHRyXyAgSU1GVmlkZW9NZWRpYVR5cGUgKipwcE1lZGlhVHlwZSkgb3Zl
cnJpZGU7CisKKyAgICAgICAgLy8gSU1GVmlkZW9EZXZpY2VJRAorICAgICAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0RGV2aWNlSUQoSUlEKiBwRGV2aWNlSUQpIG92ZXJy
aWRlOworCisgICAgICAgIC8vIElNRlRvcG9sb2d5U2VydmljZUxvb2t1cENsaWVudAorICAgICAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgSW5pdFNlcnZpY2VQb2ludGVycyhf
SW5fICBJTUZUb3BvbG9neVNlcnZpY2VMb29rdXAgKnBMb29rdXApIG92ZXJyaWRlOworICAgICAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZVNlcnZpY2VQb2ludGVy
cyh2b2lkKSBvdmVycmlkZTsKKworICAgICAgICAvLyBJTUZHZXRTZXJ2aWNlCisgICAgICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRTZXJ2aWNlKFJFRkdVSUQgZ3VpZFNl
cnZpY2UsIFJFRklJRCByaWlkLCBMUFZPSUQgKnBwdk9iamVjdCk7CisKKyAgICAgICAgLy8gSU1G
QWN0aXZhdGUKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEFjdGl2
YXRlT2JqZWN0KFJFRklJRCByaWlkLCB2b2lkICoqcHB2KTsKKyAgICAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIERldGFjaE9iamVjdCgpOworICAgICAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2h1dGRvd25PYmplY3QoKTsKKworICAgICAgICAvLyBJ
TUZBdHRyaWJ1dGVzCisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBH
ZXRJdGVtKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19pbm91dF9vcHQgUFJPUFZB
UklBTlQgKnBWYWx1ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRJdGVtVHlwZShfX1JQQ19faW4gUkVGR1VJRCBndWlk
S2V5LCBfX1JQQ19fb3V0IE1GX0FUVFJJQlVURV9UWVBFICpwVHlwZSkgeyByZXR1cm4gRV9OT1RJ
TVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDb21wYXJl
SXRlbShfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19faW4gUkVGUFJPUFZBUklBTlQg
VmFsdWUsIF9fUlBDX19vdXQgQk9PTCAqcGJSZXN1bHQpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQor
ICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ29tcGFyZShfX1JQQ19f
aW5fb3B0IElNRkF0dHJpYnV0ZXMgKnBUaGVpcnMsIE1GX0FUVFJJQlVURVNfTUFUQ0hfVFlQRSBN
YXRjaFR5cGUsIF9fUlBDX19vdXQgQk9PTCAqcGJSZXN1bHQpIHsgcmV0dXJuIEVfTk9USU1QTDsg
fQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VUlOVDMyKF9f
UlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19vdXQgVUlOVDMyICpwdW5WYWx1ZSkgeyBy
ZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBHZXRVSU5UNjQoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX291dCBVSU5U
NjQgKnB1blZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIEdldERvdWJsZShfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5
LCBfX1JQQ19fb3V0IGRvdWJsZSAqcGZWYWx1ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAg
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRHVUlEKF9fUlBDX19pbiBS
RUZHVUlEIGd1aWRLZXksIF9fUlBDX19vdXQgR1VJRCAqcGd1aWRWYWx1ZSkgeyByZXR1cm4gRV9O
T1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRT
dHJpbmdMZW5ndGgoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX291dCBVSU5UMzIg
KnBjY2hMZW5ndGgpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0U3RyaW5nKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXks
IF9fUlBDX19vdXRfZWNvdW50X2Z1bGwoY2NoQnVmU2l6ZSkgTFBXU1RSIHB3c3pWYWx1ZSwgVUlO
VDMyIGNjaEJ1ZlNpemUsIF9fUlBDX19pbm91dF9vcHQgVUlOVDMyICpwY2NoTGVuZ3RoKSB7IHJl
dHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIEdldEFsbG9jYXRlZFN0cmluZyhfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19f
ZGVyZWZfb3V0X2Vjb3VudF9mdWxsX29wdCgoKnBjY2hMZW5ndGggKyAxKSkgTFBXU1RSICpwcHdz
elZhbHVlLCBfX1JQQ19fb3V0IFVJTlQzMiAqcGNjaExlbmd0aCkgeyByZXR1cm4gRV9OT1RJTVBM
OyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRCbG9iU2l6
ZShfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19fb3V0IFVJTlQzMiAqcGNiQmxvYlNp
emUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgR2V0QmxvYihfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19fb3V0
X2Vjb3VudF9mdWxsKGNiQnVmU2l6ZSkgVUlOVDggKnBCdWYsIFVJTlQzMiBjYkJ1ZlNpemUsIF9f
UlBDX19pbm91dF9vcHQgVUlOVDMyICpwY2JCbG9iU2l6ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9
CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRBbGxvY2F0ZWRC
bG9iKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19kZXJlZl9vdXRfZWNvdW50X2Z1
bGxfb3B0KCpwY2JTaXplKSBVSU5UOCAqKnBwQnVmLCBfX1JQQ19fb3V0IFVJTlQzMiAqcGNiU2l6
ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBHZXRVbmtub3duKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19p
biBSRUZJSUQgcmlpZCwgX19SUENfX2RlcmVmX291dF9vcHQgTFBWT0lEICpwcHYpIHsgcmV0dXJu
IEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
U2V0SXRlbShfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19faW4gUkVGUFJPUFZBUklB
TlQgVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRGVsZXRlSXRlbShfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5KSB7
IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIERlbGV0ZUFsbEl0ZW1zKHZvaWQpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0VUlOVDMyKF9fUlBDX19pbiBS
RUZHVUlEIGd1aWRLZXksIFVJTlQzMiB1blZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAg
ICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldFVJTlQ2NChfX1JQQ19f
aW4gUkVGR1VJRCBndWlkS2V5LCBVSU5UNjQgdW5WYWx1ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9
CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXREb3VibGUoX19S
UENfX2luIFJFRkdVSUQgZ3VpZEtleSwgZG91YmxlIGZWYWx1ZSkgeyByZXR1cm4gRV9OT1RJTVBM
OyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRHVUlEKF9f
UlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19pbiBSRUZHVUlEIGd1aWRWYWx1ZSkgeyBy
ZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBTZXRTdHJpbmcoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX2luX3N0cmlu
ZyBMUENXU1RSIHdzelZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldEJsb2IoX19SUENfX2luIFJFRkdVSUQgZ3Vp
ZEtleSwgX19SUENfX2luX2Vjb3VudF9mdWxsKGNiQnVmU2l6ZSkgY29uc3QgVUlOVDggKnBCdWYs
IFVJTlQzMiBjYkJ1ZlNpemUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0VW5rbm93bihfX1JQQ19faW4gUkVGR1VJRCBn
dWlkS2V5LCBfX1JQQ19faW5fb3B0IElVbmtub3duICpwVW5rbm93bikgeyByZXR1cm4gRV9OT1RJ
TVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBMb2NrU3Rv
cmUodm9pZCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBVbmxvY2tTdG9yZSh2b2lkKSB7IHJldHVybiBFX05PVElNUEw7IH0K
KyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldENvdW50KF9fUlBD
X19vdXQgVUlOVDMyICpwY0l0ZW1zKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldEl0ZW1CeUluZGV4KFVJTlQzMiB1bklu
ZGV4LCBfX1JQQ19fb3V0IEdVSUQgKnBndWlkS2V5LCBfX1JQQ19faW5vdXRfb3B0IFBST1BWQVJJ
QU5UICpwVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgQ29weUFsbEl0ZW1zKF9fUlBDX19pbl9vcHQgSU1GQXR0cmli
dXRlcyAqcERlc3QpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorCisgICAgICAgIC8vIElNRlZpZGVv
RGlzcGxheUNvbnRyb2wKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEdldE5hdGl2ZVZpZGVvU2l6ZShTSVpFKiBwc3pWaWRlbywgU0laRSogcHN6QVJWaWRlbykgeyBy
ZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBHZXRJZGVhbFZpZGVvU2l6ZShTSVpFKiBwc3pNaW4sIFNJWkUqIHBzek1heCkgeyByZXR1
cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBTZXRWaWRlb1Bvc2l0aW9uKGNvbnN0IE1GVmlkZW9Ob3JtYWxpemVkUmVjdCogcG5yY1NvdXJj
ZSwgY29uc3QgTFBSRUNUIHByY0Rlc3QpOworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgR2V0VmlkZW9Qb3NpdGlvbihNRlZpZGVvTm9ybWFsaXplZFJlY3QqIHBucmNT
b3VyY2UsIExQUkVDVCBwcmNEZXN0KTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFNldEFzcGVjdFJhdGlvTW9kZShEV09SRCBkd0FzcGVjdFJhdGlvTW9kZSkgeyBy
ZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBHZXRBc3BlY3RSYXRpb01vZGUoRFdPUkQqIHBkd0FzcGVjdFJhdGlvTW9kZSkgeyByZXR1
cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBTZXRWaWRlb1dpbmRvdyhIV05EIGh3bmRWaWRlbyk7CisgICAgICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBHZXRWaWRlb1dpbmRvdyhIV05EKiBwaHduZFZpZGVvKTsKKyAg
ICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFJlcGFpbnRWaWRlbygpOwor
ICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0Q3VycmVudEltYWdl
KEJJVE1BUElORk9IRUFERVIqIHBCaWgsIEJZVEUqKiBwRGliLCBEV09SRCogcGNiRGliLCBMT05H
TE9ORyogcFRpbWVTdGFtcCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRCb3JkZXJDb2xvcihDT0xPUlJFRiBDbHIpIHsg
cmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgR2V0Qm9yZGVyQ29sb3IoQ09MT1JSRUYqIHBDbHIpIHsgcmV0dXJuIEVfTk9USU1QTDsg
fQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0UmVuZGVyaW5n
UHJlZnMoRFdPUkQgZHdSZW5kZXJGbGFncykgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRSZW5kZXJpbmdQcmVmcyhEV09S
RCogcGR3UmVuZGVyRmxhZ3MpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0RnVsbHNjcmVlbihCT09MIGJGdWxsc2NyZWVu
KSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIEdldEZ1bGxzY3JlZW4oQk9PTCogcGJGdWxsc2NyZWVuKSB7IHJldHVybiBFX05P
VElNUEw7IH0KKworICAgICAgICAvLyBJTUZBc3luY0NhbGxiYWNrIG1ldGhvZHMKKyAgICAgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFBhcmFtZXRlcnMoRFdPUkQqLCBE
V09SRCopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgSW52b2tlKElNRkFzeW5jUmVzdWx0KiBwQXN5bmNSZXN1bHQpOworCisg
ICAgICAgIC8vIE1lZGlhUGxheWVyTGlzdGVuZXIKKyAgICAgICAgdmlydHVhbCB2b2lkIG9uTWVk
aWFQbGF5ZXJEZWxldGVkKCkgb3ZlcnJpZGU7CisKKyAgICAgICAgdm9pZCBwYWludEN1cnJlbnRG
cmFtZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKKworICAgIHByaXZhdGU6
CisgICAgICAgIFVMT05HIG1fcmVmQ291bnQgeyAwIH07CisgICAgICAgIExvY2sgbV9sb2NrOwor
ICAgICAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24qIG1fbWVkaWFQbGF5ZXI7
CisKKyAgICAgICAgZW51bSBSZW5kZXJTdGF0ZSB7CisgICAgICAgICAgICBSZW5kZXJTdGF0ZVN0
YXJ0ZWQgPSAxLAorICAgICAgICAgICAgUmVuZGVyU3RhdGVTdG9wcGVkLAorICAgICAgICAgICAg
UmVuZGVyU3RhdGVQYXVzZWQsCisgICAgICAgICAgICBSZW5kZXJTdGF0ZVNodXRkb3duLAorICAg
ICAgICB9OworCisgICAgICAgIFJlbmRlclN0YXRlIG1fcmVuZGVyU3RhdGUgeyBSZW5kZXJTdGF0
ZVNodXRkb3duIH07CisgICAgICAgIENPTVB0cjxJTUZDbG9jaz4gbV9jbG9jazsKKyAgICAgICAg
Q09NUHRyPElNZWRpYUV2ZW50U2luaz4gbV9tZWRpYUV2ZW50U2luazsKKyAgICAgICAgQ09NUHRy
PElNRlRyYW5zZm9ybT4gbV9taXhlcjsKKyAgICAgICAgQ09NUHRyPElNRk1lZGlhVHlwZT4gbV9t
ZWRpYVR5cGU7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXJlY3QzRFByZXNlbnRlcj4gbV9w
cmVzZW50ZXJFbmdpbmU7CisgICAgICAgIE1GVmlkZW9Ob3JtYWxpemVkUmVjdCBtX3NvdXJjZVJl
Y3Q7CisgICAgICAgIGJvb2wgbV9zYW1wbGVOb3RpZnkgeyBmYWxzZSB9OworICAgICAgICBib29s
IG1fcHJlcm9sbGVkIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX3JlcGFpbnQgeyBmYWxzZSB9
OworICAgICAgICBib29sIG1fZW5kU3RyZWFtaW5nIHsgZmFsc2UgfTsKKyAgICAgICAgVmlkZW9T
Y2hlZHVsZXIgbV9zY2hlZHVsZXI7CisgICAgICAgIFZpZGVvU2FtcGxlUG9vbCBtX3NhbXBsZVBv
b2w7CisgICAgICAgIHVuc2lnbmVkIG1fdG9rZW5Db3VudGVyIHsgMCB9OworICAgICAgICBmbG9h
dCBtX3JhdGUgeyAxLjBmIH07CisKKyAgICAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworCisg
ICAgICAgIGJvb2wgaXNTY3J1YmJpbmcoKSBjb25zdCB7IHJldHVybiBtX3JhdGUgPT0gMC4wZjsg
fQorCisgICAgICAgIEhSRVNVTFQgY29uZmlndXJlTWl4ZXIoSU1GVHJhbnNmb3JtKiBtaXhlcik7
CisgICAgICAgIEhSRVNVTFQgZmx1c2goKTsKKyAgICAgICAgSFJFU1VMVCBzZXRNZWRpYVR5cGUo
SU1GTWVkaWFUeXBlKik7CisgICAgICAgIEhSRVNVTFQgY2hlY2tTaHV0ZG93bigpIGNvbnN0Owor
ICAgICAgICBIUkVTVUxUIHJlbmVnb3RpYXRlTWVkaWFUeXBlKCk7CisgICAgICAgIEhSRVNVTFQg
cHJvY2Vzc0lucHV0Tm90aWZ5KCk7CisgICAgICAgIEhSRVNVTFQgYmVnaW5TdHJlYW1pbmcoKTsK
KyAgICAgICAgSFJFU1VMVCBlbmRTdHJlYW1pbmcoKTsKKyAgICAgICAgSFJFU1VMVCBjaGVja0Vu
ZE9mU3RyZWFtKCk7CisgICAgICAgIEhSRVNVTFQgaXNNZWRpYVR5cGVTdXBwb3J0ZWQoSU1GTWVk
aWFUeXBlKik7CisgICAgICAgIEhSRVNVTFQgY3JlYXRlT3B0aW1hbFZpZGVvVHlwZShJTUZNZWRp
YVR5cGUqIHByb3Bvc2VkVHlwZSwgSU1GTWVkaWFUeXBlKiogb3B0aW1hbFR5cGUpOworICAgICAg
ICBIUkVTVUxUIGNhbGN1bGF0ZU91dHB1dFJlY3RhbmdsZShJTUZNZWRpYVR5cGUqIHByb3Bvc2Vk
VHlwZSwgUkVDVCYgb3V0cHV0UmVjdCk7CisKKyAgICAgICAgdm9pZCBwcm9jZXNzT3V0cHV0TG9v
cCgpOworICAgICAgICBIUkVTVUxUIHByb2Nlc3NPdXRwdXQoKTsKKyAgICAgICAgSFJFU1VMVCBk
ZWxpdmVyU2FtcGxlKElNRlNhbXBsZSosIGJvb2wgcmVwYWludCk7CisgICAgICAgIEhSRVNVTFQg
dHJhY2tTYW1wbGUoSU1GU2FtcGxlKik7CisgICAgICAgIHZvaWQgcmVsZWFzZVJlc291cmNlcygp
OworCisgICAgICAgIEhSRVNVTFQgb25TYW1wbGVGcmVlKElNRkFzeW5jUmVzdWx0Kik7CisKKyAg
ICAgICAgdm9pZCBub3RpZnlFdmVudChsb25nIEV2ZW50Q29kZSwgTE9OR19QVFIgUGFyYW0xLCBM
T05HX1BUUiBQYXJhbTIpOworICAgIH07CisKKyAgICBDT01QdHI8Q3VzdG9tVmlkZW9QcmVzZW50
ZXI+IG1fcHJlc2VudGVyOwogfTsKIAogfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265048</attachid>
            <date>2015-11-09 07:25:45 -0800</date>
            <delta_ts>2015-11-09 11:07:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150941-20151109162543.patch</filename>
            <type>text/plain</type>
            <size>113249</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MjE1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5NiBAQAorMjAxNS0xMS0wOSAgUGVyIEFy
bmUgVm9sbGFuICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXVtWaWRl
b11bTWVkaWFGb3VuZGF0aW9uXSBWaWRlbyBzaG91bGQgYmUgcmVuZGVyZWQgaW4gcHJvdmlkZWQg
Z3JhcGhpY3MgY29udGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDk0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE9uIFdpbkNhaXJvLCB3ZSBjdXJyZW50bHkgcmVuZGVyIHZpZGVvIGluIGEgY2hp
bGQgd2luZG93IG9mIHRoZSBtYWluIGJyb3dzZXIgd2luZG93LgorICAgICAgICBUaGlzIG1ha2Vz
IGl0IGRpZmZpY3VsdCB0byByZW5kZXIgdGhpbmdzIG9uIHRvcCBvZiB0aGUgdmlkZW8sIGxpa2Ug
dmlkZW8gY29udHJvbHMgYW5kCisgICAgICAgIGNvbnRleHQgbWVudXMuIFdlIHNob3VsZCByZW5k
ZXIgdGhlIHZpZGVvIGluIHRoZSBncmFwaGljcyBjb250ZXh0IHByb3ZpZGVkIGJ5IHRoZSBwYWlu
dAorICAgICAgICBtZXRob2QuIFRoaXMgaXMgZG9uZSBieSBpbXBsZW1lbnRpbmcgYSBjdXN0b20g
RVZSIChFbmhhbmNlZCBWaWRlbyBSZW5kZXJlcikgcHJlc2VudGVyCisgICAgICAgIGZvciBNZWRp
YSBGb3VuZGF0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhRm91
bmRhdGlvblV0aWxzLmg6IEFkZGVkLgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1G
VGltZVRvTWlsbGlzZWNvbmRzKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpBcmVD
b21PYmplY3RzRXF1YWwpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlw
ZTo6SXNWYWxpZCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpH
ZXRNZWRpYVR5cGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6
TWVkaWFUeXBlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6On5N
ZWRpYVR5cGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6Om9wZXJh
dG9yJik6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpvcGVyYXRv
ciBJTUZNZWRpYVR5cGUqKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5
cGU6OkNyZWF0ZUVtcHR5VHlwZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVk
aWFUeXBlOjpEZXRhY2gpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlw
ZTo6R2V0TWFqb3JUeXBlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5
cGU6OklzQ29tcHJlc3NlZEZvcm1hdCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6
TWVkaWFUeXBlOjpJc0VxdWFsKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRp
YVR5cGU6OkdldFJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxz
OjpNZWRpYVR5cGU6OkZyZWVSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChNZWRpYUZvdW5kYXRp
b25VdGlsczo6TWVkaWFUeXBlOjpDb3B5RnJvbSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25V
dGlsczo6TWVkaWFUeXBlOjpTZXRNYWpvclR5cGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9u
VXRpbHM6Ok1lZGlhVHlwZTo6R2V0U3ViVHlwZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25V
dGlsczo6TWVkaWFUeXBlOjpTZXRTdWJUeXBlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0
aWxzOjpNZWRpYVR5cGU6OkdldEZvdXJDQyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6TWVkaWFUeXBlOjpHZXRBbGxTYW1wbGVzSW5kZXBlbmRlbnQpOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6U2V0QWxsU2FtcGxlc0luZGVwZW5kZW50KToKKyAg
ICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6OkdldEZpeGVkU2l6ZVNhbXBs
ZXMpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlwZTo6U2V0Rml4ZWRT
aXplU2FtcGxlcyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVkaWFUeXBlOjpH
ZXRTYW1wbGVTaXplKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6
OlNldFNhbXBsZVNpemUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1lZGlhVHlw
ZTo6VW53cmFwKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpNZWRpYVR5cGU6OkFs
bFNhbXBsZXNJbmRlcGVuZGVudCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TWVk
aWFUeXBlOjpGaXhlZFNpemVTYW1wbGVzKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxz
OjpNZWRpYVR5cGU6OlNhbXBsZVNpemUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6
OlZpZGVvVHlwZTo6VmlkZW9UeXBlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpW
aWRlb1R5cGU6OkNyZWF0ZUVtcHR5VHlwZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6VmlkZW9UeXBlOjpHZXRJbnRlcmxhY2VNb2RlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlv
blV0aWxzOjpWaWRlb1R5cGU6OlNldEludGVybGFjZU1vZGUpOgorICAgICAgICAoTWVkaWFGb3Vu
ZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0RGVmYXVsdFN0cmlkZSk6CisgICAgICAgIChNZWRp
YUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXREZWZhdWx0U3RyaWRlKToKKyAgICAgICAg
KE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldEZyYW1lRGltZW5zaW9ucyk6Cisg
ICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRGcmFtZURpbWVuc2lv
bnMpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0RGF0YUJp
dEVycm9yUmF0ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpT
ZXREYXRhQml0RXJyb3JSYXRlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRl
b1R5cGU6OkdldEF2ZXJhZ2VCaXRSYXRlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxz
OjpWaWRlb1R5cGU6OlNldEF2Z2VyYWdlQml0UmF0ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRp
b25VdGlsczo6VmlkZW9UeXBlOjpHZXRDdXN0b21WaWRlb1ByaW1hcmllcyk6CisgICAgICAgIChN
ZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRDdXN0b21WaWRlb1ByaW1hcmllcyk6
CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRGcmFtZVJhdGUp
OgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0RnJhbWVSYXRl
KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldEdlb21ldHJp
Y0FwZXJ0dXJlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OlNl
dEdlb21ldHJpY0FwZXJ0dXJlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRl
b1R5cGU6OkdldE1heEtleWZyYW1lU3BhY2luZyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25V
dGlsczo6VmlkZW9UeXBlOjpTZXRNYXhLZXlmcmFtZVNwYWNpbmcpOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0TWluRGlzcGxheUFwZXJ0dXJlKToKKyAgICAg
ICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OlNldE1pbkRpc3BsYXlBcGVydHVy
ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRQYWRDb250
cm9sRmxhZ3MpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6U2V0
UGFkQ29udHJvbEZsYWdzKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5
cGU6OkdldFBhbGV0dGVFbnRyaWVzKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpW
aWRlb1R5cGU6OlNldFBhbGV0dGVFbnRyaWVzKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0
aWxzOjpWaWRlb1R5cGU6OkdldE51bVBhbGV0dGVFbnRyaWVzKToKKyAgICAgICAgKE1lZGlhRm91
bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldFBhblNjYW5BcGVydHVyZSk6CisgICAgICAgIChN
ZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRQYW5TY2FuQXBlcnR1cmUpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6SXNQYW5TY2FuRW5hYmxlZCk6
CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRQYW5TY2FuRW5h
YmxlZCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpHZXRQaXhl
bEFzcGVjdFJhdGlvKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6
OlNldFBpeGVsQXNwZWN0UmF0aW8pOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZp
ZGVvVHlwZTo6R2V0U291cmNlQ29udGVudEhpbnQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9u
VXRpbHM6OlZpZGVvVHlwZTo6U2V0U291cmNlQ29udGVudEhpbnQpOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0VHJhbnNmZXJGdW5jdGlvbik6CisgICAgICAg
IChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRUcmFuc2ZlckZ1bmN0aW9uKToK
KyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldENocm9tYVNpdGlu
Zyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRDaHJvbWFT
aXRpbmcpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0Vmlk
ZW9MaWdodGluZyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpT
ZXRWaWRlb0xpZ2h0aW5nKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5
cGU6OkdldFZpZGVvTm9taW5hbFJhbmdlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxz
OjpWaWRlb1R5cGU6OlNldFZpZGVvTm9taW5hbFJhbmdlKToKKyAgICAgICAgKE1lZGlhRm91bmRh
dGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldFZpZGVvUHJpbWFyaWVzKToKKyAgICAgICAgKE1lZGlh
Rm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OlNldFZpZGVvUHJpbWFyaWVzKToKKyAgICAgICAg
KE1lZGlhRm91bmRhdGlvblV0aWxzOjpWaWRlb1R5cGU6OkdldFlVVk1hdHJpeCk6CisgICAgICAg
IChNZWRpYUZvdW5kYXRpb25VdGlsczo6VmlkZW9UeXBlOjpTZXRZVVZNYXRyaXgpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OlZpZGVvVHlwZTo6R2V0VmlkZW9EaXNwbGF5QXJlYSk6
CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXVkaW9UeXBlOjpBdWRpb1R5cGUpOgor
ICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6Q3JlYXRlRW1wdHlUeXBl
KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OkdldEF2Z2VyYWdl
Qnl0ZXNQZXJTZWNvbmQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlw
ZTo6U2V0QXZnZXJhZ2VCeXRlc1BlclNlY29uZCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25V
dGlsczo6QXVkaW9UeXBlOjpHZXRCaXRzUGVyU2FtcGxlKToKKyAgICAgICAgKE1lZGlhRm91bmRh
dGlvblV0aWxzOjpBdWRpb1R5cGU6OlNldEJpdHNQZXJTYW1wbGUpOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6R2V0QmxvY2tBbGlnbm1lbnQpOgorICAgICAgICAo
TWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6U2V0QmxvY2tBbGlnbm1lbnQpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6R2V0Q2hhbm5lbE1hc2spOgor
ICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6U2V0Q2hhbm5lbE1hc2sp
OgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6R2V0RmxvYXRTYW1w
bGVzUGVyU2Vjb25kKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6
OlNldEZsb2F0U2FtcGxlc1BlclNlY29uZCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6QXVkaW9UeXBlOjpHZXROdW1DaGFubmVscyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25V
dGlsczo6QXVkaW9UeXBlOjpTZXROdW1DaGFubmVscyk6CisgICAgICAgIChNZWRpYUZvdW5kYXRp
b25VdGlsczo6QXVkaW9UeXBlOjpHZXRTYW1wbGVzUGVyQmxvY2spOgorICAgICAgICAoTWVkaWFG
b3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6U2V0U2FtcGxlc1BlckJsb2NrKToKKyAgICAgICAg
KE1lZGlhRm91bmRhdGlvblV0aWxzOjpBdWRpb1R5cGU6OkdldFNhbXBsZXNQZXJTZWNvbmQpOgor
ICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6U2V0U2FtcGxlc1BlclNl
Y29uZCk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6QXVkaW9UeXBlOjpHZXRWYWxp
ZEJpdHNQZXJTYW1wbGUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlw
ZTo6U2V0VmFsaWRCaXRzUGVyU2FtcGxlKToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxz
OjpBdWRpb1R5cGU6OkF2Z2VyYWdlQnl0ZXNQZXJTZWNvbmQpOgorICAgICAgICAoTWVkaWFGb3Vu
ZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6Qml0c1BlclNhbXBsZSk6CisgICAgICAgIChNZWRpYUZv
dW5kYXRpb25VdGlsczo6QXVkaW9UeXBlOjpGbG9hdFNhbXBsZXNQZXJTZWNvbmQpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6TnVtQ2hhbm5lbHMpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkF1ZGlvVHlwZTo6U2FtcGxlc1BlclNlY29uZCk6Cisg
ICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TVBFR1ZpZGVvVHlwZTo6TVBFR1ZpZGVvVHlw
ZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TVBFR1ZpZGVvVHlwZTo6R2V0TXBl
Z1NlcUhlYWRlcik6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TVBFR1ZpZGVvVHlw
ZTo6U2V0TXBlZ1NlcUhlYWRlcik6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGlsczo6TVBF
R1ZpZGVvVHlwZTo6R2V0TXBlZ1NlcUhlYWRlclNpemUpOgorICAgICAgICAoTWVkaWFGb3VuZGF0
aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6OkdldFN0YXJ0VGltZUNvZGUpOgorICAgICAgICAoTWVk
aWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6OlNldFN0YXJ0VGltZUNvZGUpOgorICAg
ICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6OkdldE1QRUcyRmxhZ3Mp
OgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6OlNldE1QRUcy
RmxhZ3MpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5cGU6Okdl
dE1QRUcyTGV2ZWwpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdWaWRlb1R5
cGU6OlNldE1QRUcyTGV2ZWwpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1QRUdW
aWRlb1R5cGU6OkdldE1QRUcyUHJvZmlsZSk6CisgICAgICAgIChNZWRpYUZvdW5kYXRpb25VdGls
czo6TVBFR1ZpZGVvVHlwZTo6U2V0TVBFRzJQcm9maWxlKToKKyAgICAgICAgKE1lZGlhRm91bmRh
dGlvblV0aWxzOjpNYWtlT2Zmc2V0KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpN
Rk9mZnNldFRvRmxvYXQpOgorICAgICAgICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6Ok1ha2VBcmVh
KToKKyAgICAgICAgKE1lZGlhRm91bmRhdGlvblV0aWxzOjpHZXRGcmFtZVJhdGUpOgorICAgICAg
ICAoTWVkaWFGb3VuZGF0aW9uVXRpbHM6OkdldFZpZGVvRGlzcGxheUFyZWEpOgorICAgICAgICAo
TWVkaWFGb3VuZGF0aW9uVXRpbHM6OkdldERlZmF1bHRTdHJpZGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwOgor
ICAgICAgICAoTUZDcmVhdGVNZWRpYVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6aXNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVTZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
ZW5kR2V0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpjcmVhdGVWaWRlb1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmRlc3Ryb3lWaWRlb1dpbmRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmludmFsaWRhdGVG
cmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZU91dHB1dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpvblRvcG9sb2d5U2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxs
YmFjazo6b25NZWRpYVBsYXllckRlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Q3VzdG9tVmlk
ZW9QcmVzZW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6fkN1c3RvbVZpZGVvUHJlc2VudGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkFk
ZFJlZik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpSZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9u
Q2xvY2tTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpPbkNsb2NrU3RvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpPbkNsb2NrUGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1Jlc3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpD
dXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1NldFJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6
UHJvY2Vzc01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0Q3VycmVudE1lZGlhVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1
c3RvbVZpZGVvUHJlc2VudGVyOjpHZXREZXZpY2VJRCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpJbml0
U2VydmljZVBvaW50ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlJlbGVhc2VTZXJ2aWNlUG9pbnRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0U2VydmljZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpB
Y3RpdmF0ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpEZXRhY2hPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6U2h1dGRvd25PYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0VmlkZW9X
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VmlkZW9XaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0TWl4ZXJTb3VyY2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldFZpZGVvUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VmlkZW9Qb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpSZXBhaW50VmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6SW52b2tlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlk
ZW9QcmVzZW50ZXI6Om9uTWVkaWFQbGF5ZXJEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OnBh
aW50Q3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmlzQWN0aXZlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OmNvbmZpZ3VyZU1peGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmZsdXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFyZU1lZGlhVHlwZXNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpz
ZXRNZWRpYVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Y2hlY2tTaHV0ZG93bik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpyZW5lZ290aWF0ZU1lZGlhVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpwcm9j
ZXNzSW5wdXROb3RpZnkpOgorICAgICAgICAoV2ViQ29yZTo6dmFsaWRhdGVWaWRlb0FyZWEpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6YmVnaW5TdHJlYW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6ZW5k
U3RyZWFtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmNoZWNrRW5kT2ZTdHJlYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6aXNNZWRpYVR5cGVTdXBwb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Y3Jl
YXRlT3B0aW1hbFZpZGVvVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpjb3JyZWN0QXNwZWN0UmF0
aW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Y2FsY3VsYXRlT3V0cHV0UmVjdGFuZ2xlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlk
ZW9QcmVzZW50ZXI6OnByb2Nlc3NPdXRwdXRMb29wKToKKyAgICAgICAgKFdlYkNvcmU6OnNldERl
c2lyZWRTYW1wbGVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyRGVzaXJlZFNhbXBsZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6cHJvY2Vzc091dHB1dCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpkZWxpdmVyU2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OnRyYWNrU2FtcGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlk
ZW9QcmVzZW50ZXI6OnJlbGVhc2VSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6b25TYW1w
bGVGcmVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Om5vdGlmeUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TYW1wbGVQb29sOjpn
ZXRTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6OnJldHVyblNhbXBsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2FtcGxlUG9vbDo6YXJl
U2FtcGxlc1BlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6OmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6
OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6VmlkZW9TY2hlZHVsZXI6OnNldEZyYW1lUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpzdGFydFNj
aGVkdWxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OlZpZGVvU2NoZWR1bGVyOjpzdG9wU2NoZWR1bGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OmZsdXNo
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
VmlkZW9TY2hlZHVsZXI6OnNjaGVkdWxlU2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OnByb2Nlc3NTYW1w
bGVzSW5RdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpwcm9jZXNzU2FtcGxlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OnNj
aGVkdWxlclRocmVhZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6c2NoZWR1bGVyVGhyZWFkUHJvY1ByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6RGly
ZWN0M0RQcmVzZW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6fkRpcmVjdDNEUHJlc2VudGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0
M0RQcmVzZW50ZXI6OmdldFNlcnZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6Y2hlY2tGb3JtYXQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJl
Y3QzRFByZXNlbnRlcjo6c2V0VmlkZW9XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6c2V0RGVzdGlu
YXRpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6OmNyZWF0ZVZpZGVvU2FtcGxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJl
c2VudGVyOjpyZWxlYXNlUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6OmNoZWNrRGV2aWNlU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpEaXJlY3QzRFByZXNlbnRlcjo6cHJlc2VudFNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpwYWlu
dEN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjppbml0aWFsaXplRDNEKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVz
ZW50ZXI6OmNyZWF0ZUQzRERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpjcmVhdGVEM0RTYW1wbGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpE
aXJlY3QzRFByZXNlbnRlcjo6cHJlc2VudFN3YXBDaGFpbik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpnZXRT
d2FwQ2hhaW5QcmVzZW50UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjp1cGRhdGVEZXN0UmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6OlZpZGVvU2FtcGxlUG9vbCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2FtcGxl
UG9vbDo6flZpZGVvU2FtcGxlUG9vbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpWaWRlb1NjaGVkdWxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVv
U2NoZWR1bGVyOjp+VmlkZW9TY2hlZHVsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6c2V0UHJlc2VudGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Vmlk
ZW9TY2hlZHVsZXI6OnNldENsb2NrUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpsYXN0U2FtcGxlVGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZp
ZGVvU2NoZWR1bGVyOjpmcmFtZUR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6OmdldFZpZGVvV2lu
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6RGlyZWN0M0RQcmVzZW50ZXI6OmdldERlc3RpbmF0aW9uUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVy
OjpyZWZyZXNoUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OkdldEl0ZW1UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNvbXBhcmVJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9t
VmlkZW9QcmVzZW50ZXI6OkNvbXBhcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VUlOVDMyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OkdldFVJTlQ2NCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXREb3Vi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0R1VJRCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRT
dHJpbmdMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0U3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OkdldEFsbG9jYXRlZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRCbG9iU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEFs
bG9jYXRlZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VW5rbm93bik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpTZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkRlbGV0ZUl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6RGVsZXRlQWxsSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0VUlOVDMy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldFVJTlQ2NCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTZXRE
b3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0R1VJRCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpT
ZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0QmxvYik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpTZXRVbmtub3duKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkxvY2tTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpVbmxvY2tTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZp
ZGVvUHJlc2VudGVyOjpHZXRJdGVtQnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpDb3B5QWxs
SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0TmF0aXZlVmlkZW9TaXplKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OkdldElkZWFsVmlkZW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldEFzcGVj
dFJhdGlvTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRBc3BlY3RSYXRpb01vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21W
aWRlb1ByZXNlbnRlcjo6R2V0Q3VycmVudEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldEJv
cmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEJvcmRlckNvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OlNldFJlbmRlcmluZ1ByZWZzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFJlbmRl
cmluZ1ByZWZzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1By
ZXNlbnRlcjo6R2V0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRQYXJhbWV0ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmlzU2NydWJiaW5nKToKKwogMjAxNS0xMS0wOCAgR3l1eW91
bmcgS2ltICA8Z3l1eW91bmcua2ltQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0VGTF0gQWRkIFVz
ZXJBZ2VudEVGbC5jcHB8aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL01lZGlhRm91bmRhdGlvblV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhRm91bmRhdGlvblV0aWxzLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhRm91bmRhdGlv
blV0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNjkgQEAKKyNpZm5kZWYgTWVkaWFG
b3VuZGF0aW9uVXRpbHNfaAorI2RlZmluZSBNZWRpYUZvdW5kYXRpb25VdGlsc19oCisKKyNpbmNs
dWRlIDxNZmFwaS5oPgorI2luY2x1ZGUgPE1mZXJyb3IuaD4KKyNpbmNsdWRlIDxNZmlkbC5oPgor
CituYW1lc3BhY2UgTWVkaWFGb3VuZGF0aW9uVXRpbHMgeworCitjbGFzcyBNZWRpYVR5cGU7Citj
bGFzcyBWaWRlb1R5cGU7CisKK0hSRVNVTFQgR2V0VmlkZW9EaXNwbGF5QXJlYShJTUZNZWRpYVR5
cGUqLCBNRlZpZGVvQXJlYSopOworCisvLyBNRlRpbWVUb01pbGxpc2Vjb25kczogQ29udmVydCAx
MDAtbmFub3NlY29uZCB0aW1lIHRvIG1pbGxpc2Vjb25kcy4KK2lubGluZSBMT05HIE1GVGltZVRv
TWlsbGlzZWNvbmRzKGNvbnN0IExPTkdMT05HJiB0aW1lKQoreworICAgIHJldHVybiAodGltZSAv
IDEwMDAwKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KK2Jvb2wgYXJlQ29t
T2JqZWN0c0VxdWFsKFQxICpwMSwgVDIgKnAyKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
CisgICAgaWYgKCFwMSAmJiAhcDIpCisgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgZWxzZSBp
ZiAoIXAxIHx8ICFwMikKKyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAg
ICAgIElVbmtub3duICpwVW5rMSA9IG51bGxwdHI7CisgICAgICAgIElVbmtub3duICpwVW5rMiA9
IG51bGxwdHI7CisgICAgICAgIGlmIChTVUNDRUVERUQocDEtPlF1ZXJ5SW50ZXJmYWNlKElJRF9J
VW5rbm93biwgKHZvaWQqKikmcFVuazEpKSkgeworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChw
Mi0+UXVlcnlJbnRlcmZhY2UoSUlEX0lVbmtub3duLCAodm9pZCoqKSZwVW5rMikpKSB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gKHBVbmsxID09IHBVbmsyKTsKKyAgICAgICAgICAgICAgICBw
VW5rMi0+UmVsZWFzZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcFVuazEtPlJlbGVh
c2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBNZWRp
YVR5cGUgaXMgYSBJTUZNZWRpYVR5cGUgd3JhcHBlci4gCisKK2NsYXNzIE1lZGlhVHlwZSB7Citw
cm90ZWN0ZWQ6CisgICAgQ09NUHRyPElNRk1lZGlhVHlwZT4gbV9wVHlwZTsKKworcHJvdGVjdGVk
OgorICAgIEJPT0wgSXNWYWxpZCgpCisgICAgeworICAgICAgICByZXR1cm4gISFtX3BUeXBlLmdl
dCgpOworICAgIH0KKworICAgIElNRk1lZGlhVHlwZSogR2V0TWVkaWFUeXBlKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChJc1ZhbGlkKCkpOworICAgICAgICByZXR1cm4gbV9wVHlwZS5nZXQoKTsK
KyAgICB9CisKK3B1YmxpYzoKKyAgICBNZWRpYVR5cGUoSU1GTWVkaWFUeXBlKiBwVHlwZSA9IG51
bGxwdHIpCisgICAgICAgIDogbV9wVHlwZShwVHlwZSkKKyAgICB7CisgICAgfQorCisgICAgTWVk
aWFUeXBlKGNvbnN0IE1lZGlhVHlwZSYgIG10KQorICAgIHsKKyAgICAgICAgbV9wVHlwZSA9IG10
Lm1fcFR5cGU7CisgICAgfQorCisgICAgdmlydHVhbCB+TWVkaWFUeXBlKCkKKyAgICB7CisgICAg
fQorCisgICAgTWVkaWFUeXBlJiBvcGVyYXRvcj0oY29uc3QgTWVkaWFUeXBlJiBtdCkKKyAgICB7
CisgICAgICAgIGlmICghYXJlQ29tT2JqZWN0c0VxdWFsKG1fcFR5cGUuZ2V0KCksIG10Lm1fcFR5
cGUuZ2V0KCkpKQorICAgICAgICAgICAgbV9wVHlwZSA9IG10Lm1fcFR5cGU7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisKKyAgICBJTUZNZWRpYVR5cGUqKiBvcGVyYXRvciYoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICZtX3BUeXBlOworICAgIH0KKworICAgIG9wZXJhdG9yIElNRk1l
ZGlhVHlwZSooKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFR5cGUuZ2V0KCk7CisgICAgfQor
CisgICAgdmlydHVhbCBIUkVTVUxUIENyZWF0ZUVtcHR5VHlwZSgpCisgICAgeworICAgICAgICBt
X3BUeXBlID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gTUZDcmVhdGVNZWRpYVR5cGUoJm1f
cFR5cGUpOworICAgIH0KKworICAgIElNRk1lZGlhVHlwZSogRGV0YWNoKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3BUeXBlLmxlYWtSZWYoKTsKKyAgICB9CisKKyAgICBIUkVTVUxUIEdldE1h
am9yVHlwZShHVUlEKiBwR3VpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUo
KS0+R2V0TWFqb3JUeXBlKHBHdWlkKTsKKyAgICB9CisKKyAgICBIUkVTVUxUIElzQ29tcHJlc3Nl
ZEZvcm1hdChCT09MKiBwYkNvbXByZXNzZWQpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVk
aWFUeXBlKCktPklzQ29tcHJlc3NlZEZvcm1hdChwYkNvbXByZXNzZWQpOworICAgIH0KKworICAg
IEhSRVNVTFQgSXNFcXVhbChJTUZNZWRpYVR5cGUqIHBUeXBlLCBEV09SRCogcGR3RmxhZ3MpCisg
ICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPklzRXF1YWwocFR5cGUsIHBkd0Zs
YWdzKTsKKyAgICB9CisKKyAgICBIUkVTVUxUIENvcHlGcm9tKE1lZGlhVHlwZSogcFR5cGUpCisg
ICAgeworICAgICAgICBpZiAoIXBUeXBlLT5Jc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4g
RV9VTkVYUEVDVEVEOworICAgICAgICBpZiAoIXBUeXBlKQorICAgICAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKKworICAgICAgICByZXR1cm4gQ29weUZyb20ocFR5cGUtPm1fcFR5cGUuZ2V0KCkp
OworICAgIH0KKworICAgIEhSRVNVTFQgQ29weUZyb20oSU1GTWVkaWFUeXBlKiBwVHlwZSkKKyAg
ICB7CisgICAgICAgIGlmICghcFR5cGUpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwor
CisgICAgICAgIHJldHVybiBwVHlwZS0+Q29weUFsbEl0ZW1zKG1fcFR5cGUuZ2V0KCkpOworICAg
IH0KKworICAgIEhSRVNVTFQgR2V0TWVkaWFUeXBlKElNRk1lZGlhVHlwZSoqIHBwVHlwZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChJc1ZhbGlkKCkpOworICAgICAgICBpZiAoIXBwVHlwZSkKKyAg
ICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAgICpwcFR5cGUgPSBtX3BUeXBlLmdl
dCgpOworICAgICAgICAoKnBwVHlwZSktPkFkZFJlZigpOworICAgICAgICByZXR1cm4gU19PSzsK
KyAgICB9CisKKyAgICBIUkVTVUxUIFNldE1ham9yVHlwZShHVUlEIGd1aWQpCisgICAgeworICAg
ICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNldEdVSUQoTUZfTVRfTUFKT1JfVFlQRSwgZ3Vp
ZCk7CisgICAgfQorCisgICAgSFJFU1VMVCBHZXRTdWJUeXBlKEdVSUQqIHBHdWlkKQorICAgIHsK
KyAgICAgICAgaWYgKCFwR3VpZCkKKyAgICAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAg
ICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0R1VJRChNRl9NVF9TVUJUWVBFLCBwR3VpZCk7
CisgICAgfQorCisgICAgSFJFU1VMVCBHZXRGb3VyQ0MoRFdPUkQqIHBGb3VyQ0MpCisgICAgewor
ICAgICAgICBBU1NFUlQoSXNWYWxpZCgpKTsKKyAgICAgICAgaWYgKCFwRm91ckNDKQorICAgICAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAg
ICAgIEdVSUQgZ3VpZFN1YlR5cGUgPSBHVUlEX05VTEw7CisKKyAgICAgICAgaWYgKFNVQ0NFRURF
RChocikpCisgICAgICAgICAgICBociA9IEdldFN1YlR5cGUoJmd1aWRTdWJUeXBlKTsKKworICAg
ICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgICpwRm91ckNDID0gZ3VpZFN1YlR5
cGUuRGF0YTE7CisKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0gICAgICAgCit9OworCisgICAg
CitjbGFzcyBWaWRlb1R5cGUgOiBwdWJsaWMgTWVkaWFUeXBlIHsKKyAgICBmcmllbmQgY2xhc3Mg
TWVkaWFUeXBlOyAKKworcHVibGljOgorICAgIFZpZGVvVHlwZShJTUZNZWRpYVR5cGUqIHBUeXBl
ID0gbnVsbHB0cikKKyAgICAgICAgOiBNZWRpYVR5cGUocFR5cGUpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgSFJFU1VMVCBDcmVhdGVFbXB0eVR5cGUoKQorICAgIHsKKyAgICAgICAgbV9w
VHlwZSA9IG51bGxwdHI7CisKKyAgICAgICAgSFJFU1VMVCBociA9IE1lZGlhVHlwZTo6Q3JlYXRl
RW1wdHlUeXBlKCk7CisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgaHIg
PSBTZXRNYWpvclR5cGUoTUZNZWRpYVR5cGVfVmlkZW8pOworCisgICAgICAgIHJldHVybiBocjsK
KyAgICB9CisKKyAgICBIUkVTVUxUIEdldEludGVybGFjZU1vZGUoTUZWaWRlb0ludGVybGFjZU1v
ZGUqIHBtb2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFwbW9kZSkKKyAgICAgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisgICAgICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+R2V0VUlOVDMyKE1G
X01UX0lOVEVSTEFDRV9NT0RFLCAoVUlOVDMyKilwbW9kZSk7CisgICAgfQorCisgICAgSFJFU1VM
VCBHZXRGcmFtZURpbWVuc2lvbnMoVUlOVDMyKiBwZHdXaWR0aEluUGl4ZWxzLCBVSU5UMzIqIHBk
d0hlaWdodEluUGl4ZWxzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1GR2V0QXR0cmlidXRlU2l6
ZShHZXRNZWRpYVR5cGUoKSwgTUZfTVRfRlJBTUVfU0laRSwgcGR3V2lkdGhJblBpeGVscywgcGR3
SGVpZ2h0SW5QaXhlbHMpOworICAgIH0KKworICAgIEhSRVNVTFQgU2V0RnJhbWVEaW1lbnNpb25z
KFVJTlQzMiBkd1dpZHRoSW5QaXhlbHMsIFVJTlQzMiBkd0hlaWdodEluUGl4ZWxzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE1GU2V0QXR0cmlidXRlU2l6ZShHZXRNZWRpYVR5cGUoKSwgTUZfTVRf
RlJBTUVfU0laRSwgZHdXaWR0aEluUGl4ZWxzLCBkd0hlaWdodEluUGl4ZWxzKTsKKyAgICB9CisK
KyAgICBIUkVTVUxUIEdldEdlb21ldHJpY0FwZXJ0dXJlKE1GVmlkZW9BcmVhKiBwQXJlYSkKKyAg
ICB7CisgICAgICAgIGlmICghcEFyZWEpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwor
ICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldEJsb2IoTUZfTVRfR0VPTUVUUklDX0FQ
RVJUVVJFLCAoVUlOVDgqKXBBcmVhLCBzaXplb2YoTUZWaWRlb0FyZWEpLCBudWxscHRyKTsKKyAg
ICB9CisgICAgICAgIAorICAgIEhSRVNVTFQgU2V0R2VvbWV0cmljQXBlcnR1cmUoY29uc3QgTUZW
aWRlb0FyZWEmIGFyZWEpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNl
dEJsb2IoTUZfTVRfR0VPTUVUUklDX0FQRVJUVVJFLCAoVUlOVDgqKSZhcmVhLCBzaXplb2YoTUZW
aWRlb0FyZWEpKTsKKyAgICB9CisgICAgICAgIAorICAgIEhSRVNVTFQgR2V0TWluRGlzcGxheUFw
ZXJ0dXJlKE1GVmlkZW9BcmVhKiBwQXJlYSkKKyAgICB7CisgICAgICAgIGlmICghcEFyZWEpCisg
ICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBl
KCktPkdldEJsb2IoTUZfTVRfTUlOSU1VTV9ESVNQTEFZX0FQRVJUVVJFLCAoVUlOVDgqKXBBcmVh
LCBzaXplb2YoTUZWaWRlb0FyZWEpLCBudWxscHRyKTsKKyAgICB9CisKKyAgICBIUkVTVUxUIFNl
dE1pbkRpc3BsYXlBcGVydHVyZShjb25zdCBNRlZpZGVvQXJlYSYgYXJlYSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBHZXRNZWRpYVR5cGUoKS0+U2V0QmxvYihNRl9NVF9NSU5JTVVNX0RJU1BMQVlf
QVBFUlRVUkUsIChVSU5UOCopJmFyZWEsIHNpemVvZihNRlZpZGVvQXJlYSkpOworICAgIH0KKwor
ICAgIEhSRVNVTFQgR2V0UGFuU2NhbkFwZXJ0dXJlKE1GVmlkZW9BcmVhKiBwQXJlYSkKKyAgICB7
CisgICAgICAgIGlmICghcEFyZWEpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAg
ICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPkdldEJsb2IoTUZfTVRfUEFOX1NDQU5fQVBFUlRV
UkUsIChVSU5UOCopcEFyZWEsIHNpemVvZihNRlZpZGVvQXJlYSksIG51bGxwdHIpOworICAgIH0K
KyAgICAgICAgCisgICAgSFJFU1VMVCBTZXRQYW5TY2FuQXBlcnR1cmUoY29uc3QgTUZWaWRlb0Fy
ZWEmIGFyZWEpCisgICAgeworICAgICAgICByZXR1cm4gR2V0TWVkaWFUeXBlKCktPlNldEJsb2Io
TUZfTVRfUEFOX1NDQU5fQVBFUlRVUkUsIChVSU5UOCopJmFyZWEsIHNpemVvZihNRlZpZGVvQXJl
YSkpOworICAgIH0KKyAgICAgICAgCisgICAgSFJFU1VMVCBTZXRQYW5TY2FuRW5hYmxlZChCT09M
IGJFbmFibGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5U
MzIoTUZfTVRfUEFOX1NDQU5fRU5BQkxFRCwgKFVJTlQzMiliRW5hYmxlZCk7CisgICAgfQorCisg
ICAgSFJFU1VMVCBTZXRQaXhlbEFzcGVjdFJhdGlvKFVJTlQzMiBuTnVtZXJhdG9yLCBVSU5UMzIg
bkRlbm9taW5hdG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1GU2V0QXR0cmlidXRlUmF0aW8o
R2V0TWVkaWFUeXBlKCksIE1GX01UX1BJWEVMX0FTUEVDVF9SQVRJTywgbk51bWVyYXRvciwgbkRl
bm9taW5hdG9yKTsKKyAgICB9CisKKyAgICBIUkVTVUxUIFNldFRyYW5zZmVyRnVuY3Rpb24oTUZW
aWRlb1RyYW5zZmVyRnVuY3Rpb24gbkZ4bikKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRNZWRp
YVR5cGUoKS0+U2V0VUlOVDMyKE1GX01UX1RSQU5TRkVSX0ZVTkNUSU9OLCAoVUlOVDMyKW5GeG4p
OworICAgIH0KKworICAgIEhSRVNVTFQgU2V0VmlkZW9MaWdodGluZyhNRlZpZGVvTGlnaHRpbmcg
bkxpZ2h0aW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5U
MzIoTUZfTVRfVklERU9fTElHSFRJTkcsIChVSU5UMzIpbkxpZ2h0aW5nKTsKKyAgICB9CisgICAg
ICAgIAorICAgIEhSRVNVTFQgU2V0VmlkZW9Ob21pbmFsUmFuZ2UoTUZOb21pbmFsUmFuZ2UgblJh
bmdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZf
TVRfVklERU9fTk9NSU5BTF9SQU5HRSwgKFVJTlQzMiluUmFuZ2UpOworICAgIH0KKworICAgIEhS
RVNVTFQgU2V0VmlkZW9QcmltYXJpZXMoTUZWaWRlb1ByaW1hcmllcyBuUHJpbWFyaWVzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfVklERU9f
UFJJTUFSSUVTLCAoVUlOVDMyKW5QcmltYXJpZXMpOworICAgIH0KKworICAgIEhSRVNVTFQgU2V0
WVVWTWF0cml4KE1GVmlkZW9UcmFuc2Zlck1hdHJpeCBuTWF0cml4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEdldE1lZGlhVHlwZSgpLT5TZXRVSU5UMzIoTUZfTVRfWVVWX01BVFJJWCwgKFVJTlQz
MiluTWF0cml4KTsKKyAgICB9IAorCisgICAgTUZSYXRpbyBHZXRQaXhlbEFzcGVjdFJhdGlvKCkK
KyAgICB7CisgICAgICAgIE1GUmF0aW8gUEFSID0geyAwLCAwIH07CisgICAgICAgIEhSRVNVTFQg
aHIgPSBTX09LOworCisgICAgICAgIGhyID0gTUZHZXRBdHRyaWJ1dGVSYXRpbyhHZXRNZWRpYVR5
cGUoKSwgTUZfTVRfUElYRUxfQVNQRUNUX1JBVElPLCAoVUlOVDMyKikmUEFSLk51bWVyYXRvciwg
KFVJTlQzMiopJlBBUi5EZW5vbWluYXRvcik7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7Cisg
ICAgICAgICAgICBQQVIuTnVtZXJhdG9yID0gMTsKKyAgICAgICAgICAgIFBBUi5EZW5vbWluYXRv
ciA9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFBBUjsKKyAgICB9ICAgICAgIAorCisg
ICAgSFJFU1VMVCBHZXRWaWRlb0Rpc3BsYXlBcmVhKE1GVmlkZW9BcmVhKiBhcmVhKQorICAgIHsK
KyAgICAgICAgaWYgKCFhcmVhKQorICAgICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAg
ICAgcmV0dXJuIE1lZGlhRm91bmRhdGlvblV0aWxzOjpHZXRWaWRlb0Rpc3BsYXlBcmVhKEdldE1l
ZGlhVHlwZSgpLCBhcmVhKTsKKyAgICB9Cit9OyAgCisKKworaW5saW5lIE1GT2Zmc2V0IE1ha2VP
ZmZzZXQoZmxvYXQgdikKK3sKKyAgICAvLyB2ID0gb2Zmc2V0LnZhbHVlICsgKG9mZnNldC5mcmFj
dCAvIGRlbm9taW5hdG9yKSwgd2hlcmUgZGVub21pbmF0b3IgPSA2NTUzNi4wZi4KKyAgICBjb25z
dCBpbnQgZGVub21pbmF0b3IgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFdPUkQ+OjptYXgoKSArIDE7
CisgICAgTUZPZmZzZXQgb2Zmc2V0OworICAgIG9mZnNldC52YWx1ZSA9IHNob3J0KHYpOworICAg
IG9mZnNldC5mcmFjdCA9IFdPUkQoZGVub21pbmF0b3IgKiAodiAtIG9mZnNldC52YWx1ZSkpOwor
ICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK2lubGluZSBmbG9hdCBNRk9mZnNldFRvRmxvYXQoY29u
c3QgTUZPZmZzZXQmIG9mZnNldCkKK3sKKyAgICBjb25zdCBpbnQgZGVub21pbmF0b3IgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPFdPUkQ+OjptYXgoKSArIDE7CisgICAgcmV0dXJuIG9mZnNldC52YWx1
ZSArIChmbG9hdChvZmZzZXQuZnJhY3QpIC8gZGVub21pbmF0b3IpOworfQorCitpbmxpbmUgTUZW
aWRlb0FyZWEgTWFrZUFyZWEoZmxvYXQgeCwgZmxvYXQgeSwgRFdPUkQgd2lkdGgsIERXT1JEIGhl
aWdodCkKK3sKKyAgICBNRlZpZGVvQXJlYSBhcmVhOworICAgIGFyZWEuT2Zmc2V0WCA9IE1ha2VP
ZmZzZXQoeCk7CisgICAgYXJlYS5PZmZzZXRZID0gTWFrZU9mZnNldCh5KTsKKyAgICBhcmVhLkFy
ZWEuY3ggPSB3aWR0aDsKKyAgICBhcmVhLkFyZWEuY3kgPSBoZWlnaHQ7CisgICAgcmV0dXJuIGFy
ZWE7Cit9CisKK2lubGluZSBIUkVTVUxUIEdldEZyYW1lUmF0ZShJTUZNZWRpYVR5cGUgKnBUeXBl
LCBNRlJhdGlvICpwUmF0aW8pCit7CisgICAgcmV0dXJuIE1GR2V0QXR0cmlidXRlUmF0aW8ocFR5
cGUsIE1GX01UX0ZSQU1FX1JBVEUsIChVSU5UMzIqKSZwUmF0aW8tPk51bWVyYXRvciwgKFVJTlQz
MiopJnBSYXRpby0+RGVub21pbmF0b3IpOworfQorCitpbmxpbmUgSFJFU1VMVCBHZXRWaWRlb0Rp
c3BsYXlBcmVhKElNRk1lZGlhVHlwZSAqcFR5cGUsIE1GVmlkZW9BcmVhICpwQXJlYSkKK3sKKyAg
ICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICBCT09MIGJQYW5TY2FuID0gRkFMU0U7CisgICAgVUlO
VDMyIHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKKworICAgIGJQYW5TY2FuID0gTUZHZXRBdHRyaWJ1
dGVVSU5UMzIocFR5cGUsIE1GX01UX1BBTl9TQ0FOX0VOQUJMRUQsIEZBTFNFKTsKKworICAgIGlm
IChiUGFuU2NhbikKKyAgICAgICAgaHIgPSBwVHlwZS0+R2V0QmxvYihNRl9NVF9QQU5fU0NBTl9B
UEVSVFVSRSwgKFVJTlQ4KilwQXJlYSwgc2l6ZW9mKE1GVmlkZW9BcmVhKSwgbnVsbHB0cik7CisK
KyAgICBpZiAoIWJQYW5TY2FuIHx8IGhyID09IE1GX0VfQVRUUklCVVRFTk9URk9VTkQpIHsKKyAg
ICAgICAgaHIgPSBwVHlwZS0+R2V0QmxvYihNRl9NVF9NSU5JTVVNX0RJU1BMQVlfQVBFUlRVUkUs
IChVSU5UOCopcEFyZWEsIHNpemVvZihNRlZpZGVvQXJlYSksIG51bGxwdHIpOworCisgICAgICAg
IGlmIChociA9PSBNRl9FX0FUVFJJQlVURU5PVEZPVU5EKQorICAgICAgICAgICAgaHIgPSBwVHlw
ZS0+R2V0QmxvYihNRl9NVF9HRU9NRVRSSUNfQVBFUlRVUkUsIChVSU5UOCopcEFyZWEsIHNpemVv
ZihNRlZpZGVvQXJlYSksIG51bGxwdHIpOworCisgICAgICAgIGlmIChociA9PSBNRl9FX0FUVFJJ
QlVURU5PVEZPVU5EKSB7CisgICAgICAgICAgICBociA9IE1GR2V0QXR0cmlidXRlU2l6ZShwVHlw
ZSwgTUZfTVRfRlJBTUVfU0laRSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICAgICAgICAgIGlmIChT
VUNDRUVERUQoaHIpKQorICAgICAgICAgICAgICAgICpwQXJlYSA9IE1ha2VBcmVhKDAuMCwgMC4w
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBocjsKK30K
KworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb24uY3BwCShyZXZpc2lvbiAxOTIxNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsMTIgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lmIFVTRShDQUlSTykKKyNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRDYWlyby5oIgorI2VuZGlmCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKIAog
I2lmIFVTRShNRURJQV9GT1VOREFUSU9OKQpAQCAtNDYsMTAgKzUwLDQ3IEBAIFNPRlRfTElOS19P
UFRJT05BTChNZiwgTUZDcmVhdGVUb3BvbG9neU4KIFNPRlRfTElOS19PUFRJT05BTChNZiwgTUZH
ZXRTZXJ2aWNlLCBIUkVTVUxULCBTVERBUElDQUxMVFlQRSwgKElVbmtub3duKiwgUkVGR1VJRCwg
UkVGSUlELCBMUFZPSUQqKSk7CiBTT0ZUX0xJTktfT1BUSU9OQUwoTWYsIE1GQ3JlYXRlQXVkaW9S
ZW5kZXJlckFjdGl2YXRlLCBIUkVTVUxULCBTVERBUElDQUxMVFlQRSwgKElNRkFjdGl2YXRlKiop
KTsKIFNPRlRfTElOS19PUFRJT05BTChNZiwgTUZDcmVhdGVWaWRlb1JlbmRlcmVyQWN0aXZhdGUs
IEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoSFdORCwgSU1GQWN0aXZhdGUqKikpOworU09GVF9M
SU5LX09QVElPTkFMKE1mLCBNRkNyZWF0ZVNhbXBsZUdyYWJiZXJTaW5rQWN0aXZhdGUsIEhSRVNV
TFQsIFNUREFQSUNBTExUWVBFLCAoSU1GTWVkaWFUeXBlKiwgSU1GU2FtcGxlR3JhYmJlclNpbmtD
YWxsYmFjayosIElNRkFjdGl2YXRlKiopKTsKIAogU09GVF9MSU5LX0xJQlJBUlkoTWZwbGF0KTsK
IFNPRlRfTElOS19PUFRJT05BTChNZnBsYXQsIE1GU3RhcnR1cCwgSFJFU1VMVCwgU1REQVBJQ0FM
TFRZUEUsIChVTE9ORywgRFdPUkQpKTsKIFNPRlRfTElOS19PUFRJT05BTChNZnBsYXQsIE1GU2h1
dGRvd24sIEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoKSk7CitTT0ZUX0xJTktfT1BUSU9OQUwo
TWZwbGF0LCBNRkNyZWF0ZU1lbW9yeUJ1ZmZlciwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUsIChE
V09SRCwgSU1GTWVkaWFCdWZmZXIqKikpOworU09GVF9MSU5LX09QVElPTkFMKE1mcGxhdCwgTUZD
cmVhdGVTYW1wbGUsIEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoSU1GU2FtcGxlKiopKTsKK1NP
RlRfTElOS19PUFRJT05BTChNZnBsYXQsIE1GQ3JlYXRlTWVkaWFUeXBlLCBIUkVTVUxULCBTVERB
UElDQUxMVFlQRSwgKElNRk1lZGlhVHlwZSoqKSk7CitTT0ZUX0xJTktfT1BUSU9OQUwoTWZwbGF0
LCBNRkZyYW1lUmF0ZVRvQXZlcmFnZVRpbWVQZXJGcmFtZSwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZ
UEUsIChVSU5UMzIsIFVJTlQzMiwgVUlOVDY0KikpOworCitTVERBUEkgTUZDcmVhdGVNZWRpYVR5
cGUoX091dHB0cl8gSU1GTWVkaWFUeXBlKiogIHBwTUZUeXBlKQoreworICAgIHJldHVybiBNRkNy
ZWF0ZU1lZGlhVHlwZVB0cigpKHBwTUZUeXBlKTsKK30KKworU09GVF9MSU5LX0xJQlJBUlkoZXZy
KTsKK1NPRlRfTElOS19PUFRJT05BTChldnIsIE1GQ3JlYXRlVmlkZW9TYW1wbGVGcm9tU3VyZmFj
ZSwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUsIChJVW5rbm93biosIElNRlNhbXBsZSoqKSk7CisK
K1NPRlRfTElOS19MSUJSQVJZKER4dmEyKTsKK1NPRlRfTElOS19PUFRJT05BTChEeHZhMiwgRFhW
QTJDcmVhdGVEaXJlY3QzRERldmljZU1hbmFnZXI5LCBIUkVTVUxULCBTVERBUElDQUxMVFlQRSwg
KFVJTlQqLCBJRGlyZWN0M0REZXZpY2VNYW5hZ2VyOSoqKSk7CisKK1NPRlRfTElOS19MSUJSQVJZ
KEQzZDkpOworU09GVF9MSU5LX09QVElPTkFMKEQzZDksIERpcmVjdDNEQ3JlYXRlOUV4LCBIUkVT
VUxULCBTVERBUElDQUxMVFlQRSwgKFVJTlQsIElEaXJlY3QzRDlFeCoqKSk7CisKKy8vIE1GU2Ft
cGxlUHJlc2VudGVyU2FtcGxlQ291bnRlcgorLy8gRGF0YSB0eXBlOiBVSU5UMzIKKy8vCisvLyBW
ZXJzaW9uIG51bWJlciBmb3IgdGhlIHZpZGVvIHNhbXBsZXMuIFdoZW4gdGhlIHByZXNlbnRlciBp
bmNyZW1lbnRzIHRoZSB2ZXJzaW9uCisvLyBudW1iZXIsIGFsbCBzYW1wbGVzIHdpdGggdGhlIHBy
ZXZpb3VzIHZlcnNpb24gbnVtYmVyIGFyZSBzdGFsZSBhbmQgc2hvdWxkIGJlCisvLyBkaXNjYXJk
ZWQuCitzdGF0aWMgY29uc3QgR1VJRCBNRlNhbXBsZVByZXNlbnRlclNhbXBsZUNvdW50ZXIgPQor
eyAweDg2OWYxZjdjLCAweDM0OTYsIDB4NDhhOSwgeyAweDg4LCAweGUzLCAweDY5LCAweDg1LCAw
eDc5LCAweGQwLCAweDhjLCAweGI2IH0gfTsKKworLy8gTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVT
d2FwQ2hhaW4KKy8vIERhdGEgdHlwZTogSVVOS05PV04KKy8vIAorLy8gUG9pbnRlciB0byBhIERp
cmVjdDNEIHN3YXAgY2hhaW4uCitzdGF0aWMgY29uc3QgR1VJRCBNRlNhbXBsZVByZXNlbnRlclNh
bXBsZVN3YXBDaGFpbiA9Cit7IDB4MjRhMmUwNzYsIDB4MzY3MywgMHg0MzNkLCB7IDB4ODcsIDB4
NCwgMHg1NSwgMHgyYiwgMHgxZiwgMHg1YywgMHgxNiwgMHg4YyB9IH07CisKK3VzaW5nIG5hbWVz
cGFjZSBNZWRpYUZvdW5kYXRpb25VdGlsczsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03
Nyw5ICsxMTgsMTAgQEAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjp+TWVkaQog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB7Ci0gICAgaWYgKGlzQXZhaWxh
YmxlKCkpCisgICAgaWYgKGlzQXZhaWxhYmxlKCkpIHsKICAgICAgICAgcmVnaXN0cmFyKFtdKE1l
ZGlhUGxheWVyKiBwbGF5ZXIpIHsgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uPihwbGF5ZXIpOyB9LAogICAgICAgICAgICAgZ2V0U3VwcG9y
dGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwgMCwgMCwgMCk7CisgICAgfQogfQogCiBib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6aXNBdmFpbGFibGUoKSAKQEAgLTI1Miw3
ICsyOTQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAgICAg
aW50IHcgPSBtX3NpemUud2lkdGgoKSAqIGRldmljZVNjYWxlRmFjdG9yOwogICAgIGludCBoID0g
bV9zaXplLmhlaWdodCgpICogZGV2aWNlU2NhbGVGYWN0b3I7CiAKLSAgICBpZiAobV9od25kVmlk
ZW8gJiYgIW1fbGFzdFBhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgaWYgKG1faHduZFZpZGVvKQog
ICAgICAgICA6Ok1vdmVXaW5kb3cobV9od25kVmlkZW8sIHgsIHksIHcsIGgsIEZBTFNFKTsKIAog
ICAgIFJFQ1QgcmMgPSB7IDAsIDAsIHcsIGggfTsKQEAgLTI2MSwxNiArMzAzLDEzIEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjoKIAogdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQo
KQotICAgICAgICB8fCAhbV9wbGF5ZXItPnZpc2libGUoKSkKKyAgICBpZiAoY29udGV4dC5wYWlu
dGluZ0Rpc2FibGVkKCkgfHwgIW1fcGxheWVyLT52aXNpYmxlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fbGFzdFBhaW50UmVjdCA9IHJlY3Q7CiAKLSAgICAvLyBXZSBjdXJyZW50bHkgbGV0
IE1lZGlhIEZvdW5kYXRpb24gaGFuZGxlIHRoZSBkcmF3aW5nLCBieSBwcm92aWRpbmcgYSBoYW5k
bGUgdG8gdGhlIHdpbmRvdyB0byBkcmF3IGluLgotICAgIC8vIFdlIHNob3VsZCBpbnN0ZWFkIHJl
YWQgaW5kaXZpZHVhbCBmcmFtZXMgZnJvbSB0aGUgc3RyZWFtLCBhbmQgcGFpbnQgdGhlbSBpbnRv
IHRoZSBncmFwaGljcyBjb250ZXh0IGhlcmUuCi0KLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IGlmIChtX3ByZXNlbnRlcikKKyAgICAgICAgbV9wcmVzZW50ZXItPnBhaW50Q3VycmVudEZyYW1l
KGNvbnRleHQsIHJlY3QpOwogfQogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6Y3JlYXRlU2Vzc2lvbigpCkBAIC0zODQsNiArNDIzLDkgQEAgYm9vbCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OgogCiAgICAgY2FzZSBNRVNlc3Npb25DbG9zZWQ6CiAg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNRU1lZGlhU2FtcGxlOgorICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBpZiAobWVkaWFFdmVudFR5cGUgIT0gTUVTZXNzaW9uQ2xvc2VkKSB7CkBA
IC01MTAsNyArNTUyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OgogICAgICAgICByZXR1cm47CiAgICAgaFduZFBhcmVudCA9IHZpZXctPmhvc3RXaW5kb3coKS0+
cGxhdGZvcm1QYWdlQ2xpZW50KCk7CiAKLSAgICBtX2h3bmRWaWRlbyA9IENyZWF0ZVdpbmRvd0V4
KFdTX0VYX05PQUNUSVZBVEUgfCBXU19FWF9UUkFOU1BBUkVOVCwgcmVnaXN0ZXJWaWRlb1dpbmRv
d0NsYXNzKCksIDAsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0NMSVBTSUJMSU5HUyB8IFdT
X0NMSVBDSElMRFJFTiwKKyAgICBtX2h3bmRWaWRlbyA9IENyZWF0ZVdpbmRvd0V4KFdTX0VYX05P
QUNUSVZBVEUgfCBXU19FWF9UUkFOU1BBUkVOVCwgcmVnaXN0ZXJWaWRlb1dpbmRvd0NsYXNzKCks
IDAsIFdTX0NISUxEIHwgV1NfQ0xJUFNJQkxJTkdTIHwgV1NfQ0xJUENISUxEUkVOLAogICAgICAg
ICAwLCAwLCAwLCAwLCBoV25kUGFyZW50LCAwLCAwLCAwKTsKIH0KIApAQCAtNTIyLDYgKzU2NCwx
OCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAgICAgfQogfQog
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6aW52YWxpZGF0ZUZyYW1l
VmlldygpCit7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fcGxh
eWVyIHx8ICFtX3BsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSB8fCAhbV9wbGF5ZXItPmNh
Y2hlZFJlc291cmNlTG9hZGVyKCktPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB2
aWV3ID0gbV9wbGF5ZXItPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmRvY3VtZW50KCktPnZpZXco
KTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIHZpZXctPmludmFsaWRh
dGUoKTsKK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmFkZExp
c3RlbmVyKE1lZGlhUGxheWVyTGlzdGVuZXIqIGxpc3RlbmVyKQogewogICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fbXV0ZXhMaXN0ZW5lcnMpOwpAQCAtNTc5LDcgKzYzMywxMiBAQCBib29sIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAgICAgICAgIG1faGFzQXVkaW8gPSB0cnVl
OwogICAgIH0gZWxzZSBpZiAoTUZNZWRpYVR5cGVfVmlkZW8gPT0gZ3VpZE1ham9yVHlwZSkgewog
ICAgICAgICAvLyBDcmVhdGUgdGhlIHZpZGVvIHJlbmRlcmVyLgotICAgICAgICBpZiAoRkFJTEVE
KE1GQ3JlYXRlVmlkZW9SZW5kZXJlckFjdGl2YXRlUHRyKCkobV9od25kVmlkZW8sICZyZW5kZXJl
ckFjdGl2YXRlKSkpCisgICAgICAgIGlmIChGQUlMRUQoTUZDcmVhdGVWaWRlb1JlbmRlcmVyQWN0
aXZhdGVQdHIoKShudWxscHRyLCAmcmVuZGVyZXJBY3RpdmF0ZSkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIG1fcHJlc2VudGVyID0gbmV3IEN1c3RvbVZpZGVvUHJlc2Vu
dGVyKHRoaXMpOworICAgICAgICBtX3ByZXNlbnRlci0+U2V0VmlkZW9XaW5kb3cobV9od25kVmlk
ZW8pOworICAgICAgICBpZiAoRkFJTEVEKHJlbmRlcmVyQWN0aXZhdGUtPlNldFVua25vd24oTUZf
QUNUSVZBVEVfQ1VTVE9NX1ZJREVPX1BSRVNFTlRFUl9BQ1RJVkFURSwgc3RhdGljX2Nhc3Q8SU1G
QWN0aXZhdGUqPihtX3ByZXNlbnRlci5nZXQoKSkpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgbV9oYXNWaWRlbyA9IHRydWU7CiAgICAgfSBlbHNlCkBAIC02MzgsMTMgKzY5
NywxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAgICAgaWYg
KCFNRkdldFNlcnZpY2VQdHIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEZBSUxFRChN
RkdldFNlcnZpY2VQdHIoKShtX21lZGlhU2Vzc2lvbi5nZXQoKSwgTVJfVklERU9fUkVOREVSX1NF
UlZJQ0UsIElJRF9QUFZfQVJHUygmbV92aWRlb0Rpc3BsYXkpKSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChtX3ZpZGVvRGlzcGxheSk7Ci0KLSAgICBSRUNUIHJjID0geyAwLCAwLCBt
X3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpIH07Ci0gICAgbV92aWRlb0Rpc3BsYXktPlNl
dFZpZGVvUG9zaXRpb24obnVsbHB0ciwgJnJjKTsKKyAgICBpZiAoU1VDQ0VFREVEKE1GR2V0U2Vy
dmljZVB0cigpKG1fbWVkaWFTZXNzaW9uLmdldCgpLCBNUl9WSURFT19SRU5ERVJfU0VSVklDRSwg
SUlEX1BQVl9BUkdTKCZtX3ZpZGVvRGlzcGxheSkpKSkgeworICAgICAgICBBU1NFUlQobV92aWRl
b0Rpc3BsYXkpOworICAgICAgICBSRUNUIHJjID0geyAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpIH07CisgICAgICAgIG1fdmlkZW9EaXNwbGF5LT5TZXRWaWRlb1Bvc2l0aW9u
KG51bGxwdHIsICZyYyk7CisgICAgfQogCiAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6
OkhhdmVGdXR1cmVEYXRhOwogCkBAIC03MjQsNiArNzgxLDIwMDUgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OgogICAgIG1fbWVkaWFQbGF5ZXIgPSBudWxscHRyOwog
fQogCitNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjpDdXN0b21WaWRlb1ByZXNlbnRlcihNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b24qIG1lZGlhUGxheWVyKQorICAgIDogbV9tZWRpYVBsYXllcihtZWRpYVBsYXllcikKK3sKKyAg
ICBpZiAobV9tZWRpYVBsYXllcikKKyAgICAgICAgbV9tZWRpYVBsYXllci0+YWRkTGlzdGVuZXIo
dGhpcyk7CisKKyAgICBtX3NvdXJjZVJlY3QudG9wID0gMDsKKyAgICBtX3NvdXJjZVJlY3QubGVm
dCA9IDA7CisgICAgbV9zb3VyY2VSZWN0LmJvdHRvbSA9IDE7CisgICAgbV9zb3VyY2VSZWN0LnJp
Z2h0ID0gMTsKKworICAgIG1fcHJlc2VudGVyRW5naW5lID0gc3RkOjptYWtlX3VuaXF1ZTxEaXJl
Y3QzRFByZXNlbnRlcj4oKTsKKyAgICBpZiAoIW1fcHJlc2VudGVyRW5naW5lKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3NjaGVkdWxlci5zZXRQcmVzZW50ZXIobV9wcmVzZW50ZXJFbmdpbmUu
Z2V0KCkpOworfQorCitNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZp
ZGVvUHJlc2VudGVyOjp+Q3VzdG9tVmlkZW9QcmVzZW50ZXIoKQoreworICAgIGlmIChtX21lZGlh
UGxheWVyKQorICAgICAgICBtX21lZGlhUGxheWVyLT5yZW1vdmVMaXN0ZW5lcih0aGlzKTsKK30K
KworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgX19SUENfX2RlcmVmX291dCB2
b2lkIF9fUlBDX0ZBUiAqX19SUENfRkFSICpwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9
IG51bGxwdHI7CisgICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JTUZHZXRTZXJ2aWNlKSkK
KyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElNRkdldFNlcnZpY2UqPih0aGlzKTsK
KyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSU1GQWN0aXZhdGUpKQorICAgICAg
ICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SU1GQWN0aXZhdGUqPih0aGlzKTsKKyAgICBlbHNl
IGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSU1GVmlkZW9EaXNwbGF5Q29udHJvbCkpCisgICAg
ICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJTUZWaWRlb0Rpc3BsYXlDb250cm9sKj4odGhp
cyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lNRlZpZGVvUHJlc2VudGVy
KSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElNRlZpZGVvUHJlc2VudGVyKj4o
dGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lNRkNsb2NrU3RhdGVT
aW5rKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElNRkNsb2NrU3RhdGVTaW5r
Kj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lNRlZpZGVvRGV2
aWNlSUQpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SU1GVmlkZW9EZXZpY2VJ
RCo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JTUZUb3BvbG9n
eVNlcnZpY2VMb29rdXBDbGllbnQpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SU1GVG9wb2xvZ3lTZXJ2aWNlTG9va3VwQ2xpZW50Kj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNF
cXVhbEdVSUQocmlpZCwgSUlEX0lVbmtub3duKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRp
Y19jYXN0PElNRlZpZGVvUHJlc2VudGVyKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdV
SUQocmlpZCwgSUlEX0lNRkFzeW5jQ2FsbGJhY2spKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SU1GQXN5bmNDYWxsYmFjayo+KHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuIEVfTk9JTlRFUkZBQ0U7CisKKyAgICBBZGRSZWYoKTsKKyAgICByZXR1cm4gU19PSzsKK30K
KworVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6QWRkUmVmKCkKK3sKKyAgICBtX3JlZkNvdW50Kys7
CisgICAgcmV0dXJuIG1fcmVmQ291bnQ7Cit9CisKK1VMT05HIFNURE1FVEhPRENBTExUWVBFIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlJl
bGVhc2UoKQoreworICAgIG1fcmVmQ291bnQtLTsKKyAgICBVTE9ORyByZWZDb3VudCA9IG1fcmVm
Q291bnQ7CisgICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0
dXJuIHJlZkNvdW50OworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9uQ2xvY2tTdGFydChNRlRJTUUgaG5zU3lzdGVt
VGltZSwgTE9OR0xPTkcgbGxDbG9ja1N0YXJ0T2Zmc2V0KQoreworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbG9jayk7CisKKyAgICAvLyBBZnRlciBzaHV0ZG93biwgd2UgY2Fubm90IHN0YXJ0Lgor
ICAgIEhSRVNVTFQgaHIgPSBjaGVja1NodXRkb3duKCk7CisgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgIHJldHVybiBocjsKKworICAgIG1fcmVuZGVyU3RhdGUgPSBSZW5kZXJTdGF0ZVN0YXJ0
ZWQ7CisKKyAgICBpZiAoaXNBY3RpdmUoKSkgeworICAgICAgICBpZiAobGxDbG9ja1N0YXJ0T2Zm
c2V0ICE9IFBSRVNFTlRBVElPTl9DVVJSRU5UX1BPU0lUSU9OKSB7CisgICAgICAgICAgICAvLyBU
aGlzIGlzIGEgc2VlayByZXF1ZXN0LCBmbHVzaCBwZW5kaW5nIHNhbXBsZXMuCisgICAgICAgICAg
ICBmbHVzaCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvY2Vzc091dHB1dExvb3AoKTsK
KworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9uQ2xvY2tTdG9wKE1GVElNRSBobnNT
eXN0ZW1UaW1lKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBIUkVT
VUxUIGhyID0gY2hlY2tTaHV0ZG93bigpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBy
ZXR1cm4gaHI7CisKKyAgICBpZiAobV9yZW5kZXJTdGF0ZSAhPSBSZW5kZXJTdGF0ZVN0b3BwZWQp
IHsKKyAgICAgICAgbV9yZW5kZXJTdGF0ZSA9IFJlbmRlclN0YXRlU3RvcHBlZDsKKyAgICAgICAg
Zmx1c2goKTsKKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpPbkNsb2Nr
UGF1c2UoTUZUSU1FIGhuc1N5c3RlbVRpbWUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9s
b2NrKTsKKworICAgIC8vIEFmdGVyIHNodXRkb3duLCB3ZSBjYW5ub3QgcGF1c2UuCisgICAgSFJF
U1VMVCBociA9IGNoZWNrU2h1dGRvd24oKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAg
cmV0dXJuIGhyOworCisgICAgbV9yZW5kZXJTdGF0ZSA9IFJlbmRlclN0YXRlUGF1c2VkOworCisg
ICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1Jlc3RhcnQoTUZUSU1FIGhuc1N5
c3RlbVRpbWUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIEhSRVNV
TFQgaHIgPSBjaGVja1NodXRkb3duKCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybiBocjsKKworICAgIEFTU0VSVChtX3JlbmRlclN0YXRlID09IFJlbmRlclN0YXRlUGF1c2Vk
KTsKKworICAgIG1fcmVuZGVyU3RhdGUgPSBSZW5kZXJTdGF0ZVN0YXJ0ZWQ7CisKKyAgICBwcm9j
ZXNzT3V0cHV0TG9vcCgpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9j
a1NldFJhdGUoTUZUSU1FIGhuc1N5c3RlbVRpbWUsIGZsb2F0IHJhdGUpCit7CisgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIEhSRVNVTFQgaHIgPSBjaGVja1NodXRkb3duKCk7
CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIG1fcmF0ZSA9
IHJhdGU7CisKKyAgICBtX3NjaGVkdWxlci5zZXRDbG9ja1JhdGUocmF0ZSk7CisKKyAgICByZXR1
cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpQcm9jZXNzTWVzc2FnZShNRlZQX01FU1NBR0VfVFlQRSBl
TWVzc2FnZSwgVUxPTkdfUFRSIHVsUGFyYW0pCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9s
b2NrKTsKKworICAgIEhSRVNVTFQgaHIgPSBjaGVja1NodXRkb3duKCk7CisgICAgaWYgKEZBSUxF
RChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIHN3aXRjaCAoZU1lc3NhZ2UpIHsKKyAg
ICBjYXNlIE1GVlBfTUVTU0FHRV9GTFVTSDoKKyAgICAgICAgaHIgPSBmbHVzaCgpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgTUZWUF9NRVNTQUdFX0lOVkFMSURBVEVNRURJQVRZUEU6Cisg
ICAgICAgIGhyID0gcmVuZWdvdGlhdGVNZWRpYVR5cGUoKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIE1GVlBfTUVTU0FHRV9QUk9DRVNTSU5QVVROT1RJRlk6CisgICAgICAgIC8vIEEgbmV3
IGlucHV0IHNhbXBsZSBpcyBhdmFpbGFibGUuIAorICAgICAgICBociA9IHByb2Nlc3NJbnB1dE5v
dGlmeSgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTUZWUF9NRVNTQUdFX0JFR0lOU1RS
RUFNSU5HOgorICAgICAgICBociA9IGJlZ2luU3RyZWFtaW5nKCk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBNRlZQX01FU1NBR0VfRU5EU1RSRUFNSU5HOgorICAgICAgICBociA9IGVuZFN0
cmVhbWluZygpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTUZWUF9NRVNTQUdFX0VORE9G
U1RSRUFNOgorICAgICAgICBtX2VuZFN0cmVhbWluZyA9IHRydWU7CisgICAgICAgIGhyID0gY2hl
Y2tFbmRPZlN0cmVhbSgpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAg
IGhyID0gRV9JTlZBTElEQVJHOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
aHI7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6R2V0Q3VycmVudE1lZGlhVHlwZShfT3V0cHRyXyAgSU1GVmlkZW9N
ZWRpYVR5cGUgKipwcE1lZGlhVHlwZSkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2sp
OworCisgICAgaWYgKCFwcE1lZGlhVHlwZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKwor
ICAgIEhSRVNVTFQgaHIgPSBjaGVja1NodXRkb3duKCk7CisgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgIHJldHVybiBocjsKKworICAgIGlmICghbV9tZWRpYVR5cGUpCisgICAgICAgIHJldHVy
biBNRl9FX05PVF9JTklUSUFMSVpFRDsKKworICAgIHJldHVybiBtX21lZGlhVHlwZS0+UXVlcnlJ
bnRlcmZhY2UoX191dWlkb2YoSU1GVmlkZW9NZWRpYVR5cGUpLCAodm9pZCoqKSZwcE1lZGlhVHlw
ZSk7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6R2V0RGV2aWNlSUQoSUlEKiBwRGV2aWNlSUQpCit7CisgICAgaWYg
KCFwRGV2aWNlSUQpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICAqcERldmljZUlE
ID0gX191dWlkb2YoSURpcmVjdDNERGV2aWNlOSk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hS
RVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNl
bnRlcjo6SW5pdFNlcnZpY2VQb2ludGVycyhJTUZUb3BvbG9neVNlcnZpY2VMb29rdXAgKnBMb29r
dXApCit7CisgICAgaWYgKCFwTG9va3VwKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisg
ICAgSFJFU1VMVCBociA9IFNfT0s7CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwor
CisgICAgaWYgKGlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURSRVFVRVNU
OworCisgICAgbV9jbG9jayA9IG51bGxwdHI7CisgICAgbV9taXhlciA9IG51bGxwdHI7CisgICAg
bV9tZWRpYUV2ZW50U2luayA9IG51bGxwdHI7CisKKyAgICAvLyBMb29rdXAgdGhlIHNlcnZpY2Vz
LgorCisgICAgRFdPUkQgb2JqZWN0Q291bnQgPSAxOworICAgIGhyID0gcExvb2t1cC0+TG9va3Vw
U2VydmljZShNRl9TRVJWSUNFX0xPT0tVUF9HTE9CQUwsIDAsIE1SX1ZJREVPX1JFTkRFUl9TRVJW
SUNFLCBJSURfUFBWX0FSR1MoJm1fY2xvY2spLCAmb2JqZWN0Q291bnQpOworICAgIC8vIFRoZSBj
bG9jayBzZXJ2aWNlIGlzIG9wdGlvbmFsLgorCisgICAgb2JqZWN0Q291bnQgPSAxOworICAgIGhy
ID0gcExvb2t1cC0+TG9va3VwU2VydmljZShNRl9TRVJWSUNFX0xPT0tVUF9HTE9CQUwsIDAsIE1S
X1ZJREVPX01JWEVSX1NFUlZJQ0UsIElJRF9QUFZfQVJHUygmbV9taXhlciksICZvYmplY3RDb3Vu
dCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0g
Y29uZmlndXJlTWl4ZXIobV9taXhlci5nZXQoKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgIHJldHVybiBocjsKKworICAgIG9iamVjdENvdW50ID0gMTsKKyAgICBociA9IHBMb29rdXAt
Pkxvb2t1cFNlcnZpY2UoTUZfU0VSVklDRV9MT09LVVBfR0xPQkFMLCAwLCBNUl9WSURFT19SRU5E
RVJfU0VSVklDRSwgSUlEX1BQVl9BUkdTKCZtX21lZGlhRXZlbnRTaW5rKSwgJm9iamVjdENvdW50
KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgbV9yZW5k
ZXJTdGF0ZSA9IFJlbmRlclN0YXRlU3RvcHBlZDsKKworICAgIHJldHVybiBTX09LOworfQorCitI
UkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVz
ZW50ZXI6OlJlbGVhc2VTZXJ2aWNlUG9pbnRlcnMoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fbG9jayk7CisKKyAgICBtX3JlbmRlclN0YXRlID0gUmVuZGVyU3RhdGVTaHV0ZG93bjsKKwor
ICAgIGZsdXNoKCk7CisKKyAgICBzZXRNZWRpYVR5cGUobnVsbHB0cik7CisKKyAgICBtX2Nsb2Nr
ID0gbnVsbHB0cjsKKyAgICBtX21peGVyID0gbnVsbHB0cjsKKyAgICBtX21lZGlhRXZlbnRTaW5r
ID0gbnVsbHB0cjsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFNlcnZpY2Uo
UkVGR1VJRCBndWlkU2VydmljZSwgUkVGSUlEIHJpaWQsIExQVk9JRCogcHB2T2JqZWN0KQorewor
ICAgIGlmICghcHB2T2JqZWN0KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgLy8g
V2Ugb25seSBzdXBwb3J0IE1SX1ZJREVPX1JFTkRFUl9TRVJWSUNFLgorICAgIGlmIChndWlkU2Vy
dmljZSAhPSBNUl9WSURFT19SRU5ERVJfU0VSVklDRSkKKyAgICAgICAgcmV0dXJuIE1GX0VfVU5T
VVBQT1JURURfU0VSVklDRTsKKworICAgIEhSRVNVTFQgaHIgPSBtX3ByZXNlbnRlckVuZ2luZS0+
Z2V0U2VydmljZShndWlkU2VydmljZSwgcmlpZCwgcHB2T2JqZWN0KTsKKworICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICBociA9IFF1ZXJ5SW50ZXJmYWNlKHJpaWQsIHBwdk9iamVjdCk7CisK
KyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6QWN0aXZhdGVPYmplY3QoUkVGSUlEIHJpaWQs
IHZvaWQgKipwcHYpCit7CisgICAgaWYgKHJpaWQgPT0gSUlEX0lNRlZpZGVvUHJlc2VudGVyKSB7
CisgICAgICAgICpwcHYgPSBzdGF0aWNfY2FzdDxJTUZWaWRlb1ByZXNlbnRlcio+KHRoaXMpOwor
ICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisgICAgcmV0dXJuIEVfRkFJTDsKK30KKworSFJF
U1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjpEZXRhY2hPYmplY3QoKQoreworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNo
dXRkb3duT2JqZWN0KCkKK3sKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTZXRWaWRl
b1dpbmRvdyhIV05EIGh3bmRWaWRlbykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2sp
OworCisgICAgaWYgKCFJc1dpbmRvdyhod25kVmlkZW8pKQorICAgICAgICByZXR1cm4gRV9JTlZB
TElEQVJHOworCisgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgSFdORCBvbGRId25kID0gbV9w
cmVzZW50ZXJFbmdpbmUtPmdldFZpZGVvV2luZG93KCk7CisKKyAgICBpZiAob2xkSHduZCAhPSBo
d25kVmlkZW8pIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBEaXJlY3QzRCBk
ZXZpY2UuCisgICAgICAgIGhyID0gbV9wcmVzZW50ZXJFbmdpbmUtPnNldFZpZGVvV2luZG93KGh3
bmRWaWRlbyk7CisKKyAgICAgICAgbm90aWZ5RXZlbnQoRUNfRElTUExBWV9DSEFOR0VELCAwLCAw
KTsKKyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VmlkZW9XaW5kb3co
SFdORCogcGh3bmRWaWRlbykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisg
ICAgaWYgKCFwaHduZFZpZGVvKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgKnBo
d25kVmlkZW8gPSBtX3ByZXNlbnRlckVuZ2luZS0+Z2V0VmlkZW9XaW5kb3coKTsKKworICAgIHJl
dHVybiBTX09LOworfQorCitzdGF0aWMgSFJFU1VMVCBzZXRNaXhlclNvdXJjZVJlY3QoSU1GVHJh
bnNmb3JtKiBtaXhlciwgY29uc3QgTUZWaWRlb05vcm1hbGl6ZWRSZWN0JiBzb3VyY2VSZWN0KQor
eworICAgIGlmICghbWl4ZXIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBDT01Q
dHI8SU1GQXR0cmlidXRlcz4gYXR0cmlidXRlczsKKworICAgIEhSRVNVTFQgaHIgPSBtaXhlci0+
R2V0QXR0cmlidXRlcygmYXR0cmlidXRlcyk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
IHJldHVybiBocjsKKworICAgIHJldHVybiBhdHRyaWJ1dGVzLT5TZXRCbG9iKFZJREVPX1pPT01f
UkVDVCwgKGNvbnN0IFVJTlQ4Kikmc291cmNlUmVjdCwgc2l6ZW9mKHNvdXJjZVJlY3QpKTsKK30K
KworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpTZXRWaWRlb1Bvc2l0aW9uKGNvbnN0IE1GVmlkZW9Ob3JtYWxpemVkUmVjdCog
cG5yY1NvdXJjZSwgY29uc3QgTFBSRUNUIHByY0Rlc3QpCit7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9sb2NrKTsKKworICAgIC8vIEZpcnN0LCBjaGVjayB0aGF0IHRoZSBwYXJhbWV0ZXJzIGFy
ZSB2YWxpZC4KKworICAgIGlmICghcG5yY1NvdXJjZSAmJiAhcHJjRGVzdCkKKyAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKKworICAgIGlmIChwbnJjU291cmNlKSB7CisgICAgICAgIGlmICgocG5y
Y1NvdXJjZS0+bGVmdCA+IHBucmNTb3VyY2UtPnJpZ2h0KSB8fCAocG5yY1NvdXJjZS0+dG9wID4g
cG5yY1NvdXJjZS0+Ym90dG9tKSkKKyAgICAgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisK
KyAgICAgICAgLy8gVGhlIHNvdXJjZSByZWN0YW5nbGUgbXVzdCBiZSBub3JtYWxpemVkLgorICAg
ICAgICBpZiAoKHBucmNTb3VyY2UtPmxlZnQgPCAwKSB8fCAocG5yY1NvdXJjZS0+cmlnaHQgPiAx
KSB8fCAocG5yY1NvdXJjZS0+dG9wIDwgMCkgfHwgKHBucmNTb3VyY2UtPmJvdHRvbSA+IDEpKQor
ICAgICAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisKKyAgICBpZiAocHJjRGVz
dCkgeworICAgICAgICBpZiAoKHByY0Rlc3QtPmxlZnQgPiBwcmNEZXN0LT5yaWdodCkgfHwgKHBy
Y0Rlc3QtPnRvcCA+IHByY0Rlc3QtPmJvdHRvbSkpCisgICAgICAgICAgICByZXR1cm4gRV9JTlZB
TElEQVJHOworICAgIH0KKworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgLy8gU2V0IHRo
ZSBzb3VyY2UgcmVjdGFuZ2xlLgorICAgIGlmIChwbnJjU291cmNlKSB7CisgICAgICAgIG1fc291
cmNlUmVjdCA9ICpwbnJjU291cmNlOworCisgICAgICAgIGlmIChtX21peGVyKSB7CisgICAgICAg
ICAgICBociA9IHNldE1peGVyU291cmNlUmVjdChtX21peGVyLmdldCgpLCBtX3NvdXJjZVJlY3Qp
OworICAgICAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhy
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBkZXN0aW5hdGlvbiByZWN0YW5n
bGUuCisgICAgaWYgKHByY0Rlc3QpIHsKKyAgICAgICAgUkVDVCByY09sZERlc3QgPSBtX3ByZXNl
bnRlckVuZ2luZS0+Z2V0RGVzdGluYXRpb25SZWN0KCk7CisKKyAgICAgICAgLy8gSWYgdGhlIGRl
c3RpbmF0aW9uIHJlY3RhbmdsZSBoYXNuJ3QgY2hhbmdlZCwgd2UgYXJlIGRvbmUuCisgICAgICAg
IGlmICghRXF1YWxSZWN0KCZyY09sZERlc3QsIHByY0Rlc3QpKSB7CisgICAgICAgICAgICBociA9
IG1fcHJlc2VudGVyRW5naW5lLT5zZXREZXN0aW5hdGlvblJlY3QoKnByY0Rlc3QpOworICAgICAg
ICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhyOworCisgICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIGNoYW5nZSB0aGUgbWVkaWEgdHlwZSB3aGVuIHRoZSBkZXN0
aW5hdGlvbiByZWN0YW5nbGUgaGFzIGNoYW5nZWQuCisgICAgICAgICAgICBpZiAobV9taXhlcikg
eworICAgICAgICAgICAgICAgIGhyID0gcmVuZWdvdGlhdGVNZWRpYVR5cGUoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaHIgPT0gTUZfRV9UUkFOU0ZPUk1fVFlQRV9OT1RfU0VUKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgY3JpdGljYWwgZmFpbHVyZTsgdGhlIEVWUiB3
aWxsIGxldCB1cyBrbm93IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBz
ZXQgdGhlIG1peGVyIG1lZGlhIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGhyID0gU19PSzsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBocjsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBoYXZlIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRoZSBtZWRpYSB0eXBlLAor
ICAgICAgICAgICAgICAgICAgICAvLyBhc2sgZm9yIGEgcmVwYWludCBvZiB0aGUgY3VycmVudCBm
cmFtZS4KKyAgICAgICAgICAgICAgICAgICAgbV9yZXBhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvY2Vzc091dHB1dCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Okdl
dFZpZGVvUG9zaXRpb24oTUZWaWRlb05vcm1hbGl6ZWRSZWN0KiBwbnJjU291cmNlLCBMUFJFQ1Qg
cHJjRGVzdCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgaWYgKCFw
bnJjU291cmNlIHx8ICFwcmNEZXN0KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAg
KnBucmNTb3VyY2UgPSBtX3NvdXJjZVJlY3Q7CisgICAgKnByY0Rlc3QgPSBtX3ByZXNlbnRlckVu
Z2luZS0+Z2V0RGVzdGluYXRpb25SZWN0KCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJF
U1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjpSZXBhaW50VmlkZW8oKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisK
KyAgICBIUkVTVUxUIGhyID0gY2hlY2tTaHV0ZG93bigpOworICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICByZXR1cm4gaHI7CisKKyAgICAvLyBDaGVjayB0aGF0IGF0IGxlYXN0IG9uZSBzYW1w
bGUgaGFzIGJlZW4gcHJlc2VudGVkLgorICAgIGlmIChtX3ByZXJvbGxlZCkgeworICAgICAgICBt
X3JlcGFpbnQgPSB0cnVlOworICAgICAgICBwcm9jZXNzT3V0cHV0KCk7CisgICAgfQorCisgICAg
cmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6SW52b2tlKElNRkFzeW5jUmVzdWx0KiBwQXN5bmNS
ZXN1bHQpCit7CisgICAgcmV0dXJuIG9uU2FtcGxlRnJlZShwQXN5bmNSZXN1bHQpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50
ZXI6Om9uTWVkaWFQbGF5ZXJEZWxldGVkKCkKK3sKKyAgICBtX21lZGlhUGxheWVyID0gbnVsbHB0
cjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZp
ZGVvUHJlc2VudGVyOjpwYWludEN1cnJlbnRGcmFtZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBpZiAobV9wcmVzZW50ZXJFbmdpbmUpCisgICAg
ICAgIG1fcHJlc2VudGVyRW5naW5lLT5wYWludEN1cnJlbnRGcmFtZShjb250ZXh0LCByKTsKK30K
KworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICgobV9yZW5kZXJTdGF0ZSA9
PSBSZW5kZXJTdGF0ZVN0YXJ0ZWQpIHx8IChtX3JlbmRlclN0YXRlID09IFJlbmRlclN0YXRlUGF1
c2VkKSk7CiB9CiAKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpD
dXN0b21WaWRlb1ByZXNlbnRlcjo6Y29uZmlndXJlTWl4ZXIoSU1GVHJhbnNmb3JtKiBtaXhlcikK
K3sKKyAgICBDT01QdHI8SU1GVmlkZW9EZXZpY2VJRD4gdmlkZW9EZXZpY2VJRDsKKyAgICBIUkVT
VUxUIGhyID0gbWl4ZXItPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElNRlZpZGVvRGV2aWNlSUQp
LCAodm9pZCoqKSZ2aWRlb0RldmljZUlEKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAg
cmV0dXJuIGhyOworCisgICAgSUlEIGRldmljZUlEID0gR1VJRF9OVUxMOworICAgIGhyID0gdmlk
ZW9EZXZpY2VJRC0+R2V0RGV2aWNlSUQoJmRldmljZUlEKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gVGhlIG1peGVyIG11c3QgaGF2ZSB0aGlzIGRl
dmljZSBJRC4KKyAgICBpZiAoIUlzRXF1YWxHVUlEKGRldmljZUlELCBfX3V1aWRvZihJRGlyZWN0
M0REZXZpY2U5KSkpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURSRVFVRVNUOworCisgICAg
c2V0TWl4ZXJTb3VyY2VSZWN0KG1peGVyLCBtX3NvdXJjZVJlY3QpOworCisgICAgcmV0dXJuIFNf
T0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6Zmx1c2goKQoreworICAgIG1fcHJlcm9sbGVkID0gZmFsc2U7CisK
KyAgICAvLyBGbHVzaCB0aGUgc2NlZHVsZXIuCisgICAgLy8gVGhpcyBjYWxsIHdpbGwgYmxvY2sg
dW50aWwgdGhlIHNjaGVkdWxlciB0aHJlYWQgaGFzIGZpbmlzaGVkIGZsdXNoaW5nLgorICAgIG1f
c2NoZWR1bGVyLmZsdXNoKCk7CisKKyAgICBpZiAobV9yZW5kZXJTdGF0ZSA9PSBSZW5kZXJTdGF0
ZVN0b3BwZWQpCisgICAgICAgIG1fcHJlc2VudGVyRW5naW5lLT5wcmVzZW50U2FtcGxlKG51bGxw
dHIsIDApOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK3N0YXRpYyBib29sIGFyZU1lZGlhVHlw
ZXNFcXVhbChJTUZNZWRpYVR5cGUqIHR5cGUxLCBJTUZNZWRpYVR5cGUqIHR5cGUyKQoreworICAg
IGlmICghdHlwZTEgJiYgIXR5cGUyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIXR5
cGUxIHx8ICF0eXBlMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRFdPUkQgZmxhZ3Mg
PSAwOworICAgIHJldHVybiBTX09LID09IHR5cGUxLT5Jc0VxdWFsKHR5cGUyLCAmZmxhZ3MpOwor
fQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlk
ZW9QcmVzZW50ZXI6OnNldE1lZGlhVHlwZShJTUZNZWRpYVR5cGUqIG1lZGlhVHlwZSkKK3sKKyAg
ICBpZiAoIW1lZGlhVHlwZSkgeworICAgICAgICBtX21lZGlhVHlwZSA9IG51bGxwdHI7CisgICAg
ICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisg
ICAgLy8gSWYgd2UgaGF2ZSBzaHV0IGRvd24sIHdlIGNhbm5vdCBzZXQgdGhlIG1lZGlhIHR5cGUu
CisgICAgSFJFU1VMVCBociA9IGNoZWNrU2h1dGRvd24oKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkg
eworICAgICAgICByZWxlYXNlUmVzb3VyY2VzKCk7CisgICAgICAgIHJldHVybiBocjsKKyAgICB9
CisKKyAgICBpZiAoYXJlTWVkaWFUeXBlc0VxdWFsKG1fbWVkaWFUeXBlLmdldCgpLCBtZWRpYVR5
cGUpKQorICAgICAgICByZXR1cm4gU19PSzsKKworICAgIG1fbWVkaWFUeXBlID0gbnVsbHB0cjsK
KyAgICByZWxlYXNlUmVzb3VyY2VzKCk7CisKKyAgICAvLyBHZXQgYWxsb2NhdGVkIHNhbXBsZXMg
ZnJvbSB0aGUgcHJlc2VudGVyLgorICAgIFZpZGVvU2FtcGxlTGlzdCBzYW1wbGVRdWV1ZTsKKyAg
ICBociA9IG1fcHJlc2VudGVyRW5naW5lLT5jcmVhdGVWaWRlb1NhbXBsZXMobWVkaWFUeXBlLCBz
YW1wbGVRdWV1ZSk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgcmVsZWFzZVJlc291
cmNlcygpOworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSB0b2tl
biBjb3VudGVyIG9uIGVhY2ggc2FtcGxlLgorICAgIC8vIFRoaXMgd2lsbCBoZWxwIHVzIHRvIGRl
dGVybWluZSB3aGVuIHRoZXkgYXJlIGludmFsaWQsIGFuZCBjYW4gYmUgcmVsZWFzZWQuCisgICAg
Zm9yIChhdXRvIHNhbXBsZSA6IHNhbXBsZVF1ZXVlKSB7CisgICAgICAgIGhyID0gc2FtcGxlLT5T
ZXRVSU5UMzIoTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVDb3VudGVyLCBtX3Rva2VuQ291bnRlcik7
CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICByZWxlYXNlUmVzb3VyY2Vz
KCk7CisgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBB
ZGQgdGhlIHNhbXBsZXMgdG8gdGhlIHNhbXBsZSBwb29sLgorICAgIGhyID0gbV9zYW1wbGVQb29s
LmluaXRpYWxpemUoc2FtcGxlUXVldWUpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAg
IHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIC8v
IFNldCB0aGUgZnJhbWUgcmF0ZS4gCisgICAgTUZSYXRpbyBmcHMgPSB7IDAsIDAgfTsKKyAgICBp
ZiAoU1VDQ0VFREVEKEdldEZyYW1lUmF0ZShtZWRpYVR5cGUsICZmcHMpKSAmJiBmcHMuTnVtZXJh
dG9yICYmIGZwcy5EZW5vbWluYXRvcikKKyAgICAgICAgbV9zY2hlZHVsZXIuc2V0RnJhbWVSYXRl
KGZwcyk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIGNvdWxkIG5vdCBnZXQgdGhlIGZyYW1l
IHJldCwgdXNlIGRlZmF1bHQuCisgICAgICAgIGNvbnN0IE1GUmF0aW8gZGVmYXVsdEZyYW1lUmF0
ZSA9IHsgMzAsIDEgfTsKKyAgICAgICAgbV9zY2hlZHVsZXIuc2V0RnJhbWVSYXRlKGRlZmF1bHRG
cmFtZVJhdGUpOworICAgIH0KKworICAgIEFTU0VSVChtZWRpYVR5cGUpOworICAgIG1fbWVkaWFU
eXBlID0gbWVkaWFUeXBlOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Y2hlY2tT
aHV0ZG93bigpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVuZGVyU3RhdGUgPT0gUmVuZGVyU3RhdGVT
aHV0ZG93bikKKyAgICAgICAgcmV0dXJuIE1GX0VfU0hVVERPV047CisgICAgcmV0dXJuIFNfT0s7
Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21W
aWRlb1ByZXNlbnRlcjo6cmVuZWdvdGlhdGVNZWRpYVR5cGUoKQoreworICAgIEhSRVNVTFQgaHIg
PSBTX09LOworCisgICAgaWYgKCFtX21peGVyKQorICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElE
UkVRVUVTVDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXZhaWxhYmxlIG91dHB1dCB0eXBl
cyBvZiB0aGUgbWl4ZXIuCisKKyAgICBEV09SRCB0eXBlSW5kZXggPSAwOworICAgIGJvb2wgZm91
bmRNZWRpYVR5cGUgPSBmYWxzZTsKKyAgICB3aGlsZSAoIWZvdW5kTWVkaWFUeXBlICYmIChociAh
PSBNRl9FX05PX01PUkVfVFlQRVMpKSB7CisgICAgICAgIC8vIEdldCB0aGUgbmV4dCBhdmFpbGFi
bGUgbWVkaWEgdHlwZS4KKyAgICAgICAgQ09NUHRyPElNRk1lZGlhVHlwZT4gbWl4ZXJUeXBlOwor
ICAgICAgICBociA9IG1fbWl4ZXItPkdldE91dHB1dEF2YWlsYWJsZVR5cGUoMCwgdHlwZUluZGV4
KyssICZtaXhlclR5cGUpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIC8vIERvIHdlIHN1cHBvcnQgdGhpcyBtZWRpYSB0eXBlPworICAgICAg
ICBociA9IGlzTWVkaWFUeXBlU3VwcG9ydGVkKG1peGVyVHlwZS5nZXQoKSk7CisgICAgICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gTWFrZSBhZGp1
c3RtZW50cyB0byBwcm9wb3NlZCBtZWRpYSB0eXBlLgorICAgICAgICBDT01QdHI8SU1GTWVkaWFU
eXBlPiBvcHRpbWFsVHlwZTsKKyAgICAgICAgaHIgPSBjcmVhdGVPcHRpbWFsVmlkZW9UeXBlKG1p
eGVyVHlwZS5nZXQoKSwgJm9wdGltYWxUeXBlKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBUZXN0IHdoZXRoZXIgdGhlIG1peGVyIGNh
biBhY2NlcHQgdGhlIG1vZGlmaWVkIG1lZGlhIHR5cGUKKyAgICAgICAgaHIgPSBtX21peGVyLT5T
ZXRPdXRwdXRUeXBlKDAsIG9wdGltYWxUeXBlLmdldCgpLCBNRlRfU0VUX1RZUEVfVEVTVF9PTkxZ
KTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAvLyBUcnkgdG8gc2V0IHRoZSBuZXcgbWVkaWEgdHlwZQorCisgICAgICAgIGhyID0gc2V0TWVk
aWFUeXBlKG9wdGltYWxUeXBlLmdldCgpKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBociA9IG1fbWl4ZXItPlNldE91dHB1dFR5cGUoMCwg
b3B0aW1hbFR5cGUuZ2V0KCksIDApOworCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
KworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIHNldE1lZGlhVHlwZShudWxs
cHRyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZm91bmRNZWRpYVR5cGUgPSB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpwcm9jZXNzSW5wdXROb3RpZnko
KQoreworICAgIC8vIFdlIGhhdmUgYSBuZXcgc2FtcGxlLgorICAgIG1fc2FtcGxlTm90aWZ5ID0g
dHJ1ZTsKKworICAgIGlmICghbV9tZWRpYVR5cGUpIHsKKyAgICAgICAgLy8gVGhlIG1lZGlhIHR5
cGUgaXMgbm90IHZhbGlkLgorICAgICAgICByZXR1cm4gTUZfRV9UUkFOU0ZPUk1fVFlQRV9OT1Rf
U0VUOworICAgIH0gCisgICAgCisgICAgLy8gSW52YWxpZGF0ZSB0aGUgdmlkZW8gYXJlYQorICAg
IGlmIChtX21lZGlhUGxheWVyKSB7CisgICAgICAgIGF1dG8gd2Vha1B0ciA9IG1fbWVkaWFQbGF5
ZXItPm1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOworICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFt3ZWFrUHRyXSB7CisgICAgICAgICAgICBpZiAod2Vha1B0cikKKyAgICAgICAgICAg
ICAgICB3ZWFrUHRyLT5pbnZhbGlkYXRlRnJhbWVWaWV3KCk7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIC8vIFByb2Nlc3Mgc2FtcGxlCisgICAgcHJvY2Vzc091dHB1dExvb3AoKTsKKworICAg
IHJldHVybiBTX09LOworfQorCitzdGF0aWMgSFJFU1VMVCB2YWxpZGF0ZVZpZGVvQXJlYShjb25z
dCBNRlZpZGVvQXJlYSYgYXJlYSwgVUlOVDMyIHdpZHRoLCBVSU5UMzIgaGVpZ2h0KQoreworICAg
IGZsb2F0IGZPZmZzZXRYID0gTUZPZmZzZXRUb0Zsb2F0KGFyZWEuT2Zmc2V0WCk7CisgICAgZmxv
YXQgZk9mZnNldFkgPSBNRk9mZnNldFRvRmxvYXQoYXJlYS5PZmZzZXRZKTsKKworICAgIGlmICgo
KExPTkcpZk9mZnNldFggKyBhcmVhLkFyZWEuY3ggPiB3aWR0aCkgfHwgKChMT05HKWZPZmZzZXRZ
ICsgYXJlYS5BcmVhLmN5ID4gaGVpZ2h0KSkKKyAgICAgICAgcmV0dXJuIE1GX0VfSU5WQUxJRE1F
RElBVFlQRTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpiZWdpblN0cmVhbWluZygp
Cit7CisgICAgcmV0dXJuIG1fc2NoZWR1bGVyLnN0YXJ0U2NoZWR1bGVyKG1fY2xvY2suZ2V0KCkp
OworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9t
VmlkZW9QcmVzZW50ZXI6OmVuZFN0cmVhbWluZygpCit7CisgICAgcmV0dXJuIG1fc2NoZWR1bGVy
LnN0b3BTY2hlZHVsZXIoKTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpjaGVja0VuZE9mU3RyZWFtKCkKK3sKKyAg
ICBpZiAoIW1fZW5kU3RyZWFtaW5nKSB7CisgICAgICAgIC8vIFdlIGhhdmUgbm90IHJlY2VpdmVk
IHRoZSBlbmQtb2Ytc3RyZWFtIG1lc3NhZ2UgZnJvbSB0aGUgRVZSLgorICAgICAgICByZXR1cm4g
U19PSzsKKyAgICB9CisKKyAgICBpZiAobV9zYW1wbGVOb3RpZnkpIHsKKyAgICAgICAgLy8gVGhl
cmUgaXMgc3RpbGwgaW5wdXQgc2FtcGxlcyBhdmFpbGFibGUgZm9yIHRoZSBtaXhlci4gCisgICAg
ICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgIGlmIChtX3NhbXBsZVBvb2wuYXJlU2FtcGxl
c1BlbmRpbmcoKSkgeworICAgICAgICAvLyBUaGVyZSBhcmUgc2FtcGxlcyBzY2hlZHVsZWQgZm9y
IHJlbmRlcmluZy4KKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgLy8gV2UgYXJl
IGRvbmUsIG5vdGlmeSB0aGUgRVZSLgorICAgIG5vdGlmeUV2ZW50KEVDX0NPTVBMRVRFLCAoTE9O
R19QVFIpU19PSywgMCk7CisgICAgbV9lbmRTdHJlYW1pbmcgPSBmYWxzZTsKKyAgICByZXR1cm4g
U19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1
c3RvbVZpZGVvUHJlc2VudGVyOjppc01lZGlhVHlwZVN1cHBvcnRlZChJTUZNZWRpYVR5cGUqIG1l
ZGlhVHlwZSkKK3sKKyAgICBWaWRlb1R5cGUgcHJvcG9zZWRWaWRlb1R5cGUobWVkaWFUeXBlKTsK
KworICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgY29tcHJlc3NlZCBtZWRpYSB0eXBlcy4KKyAgICBC
T09MIGNvbXByZXNzZWQgPSBGQUxTRTsKKyAgICBIUkVTVUxUIGhyID0gcHJvcG9zZWRWaWRlb1R5
cGUuSXNDb21wcmVzc2VkRm9ybWF0KCZjb21wcmVzc2VkKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGhyOworICAgIGlmIChjb21wcmVzc2VkKQorICAgICAgICByZXR1cm4g
TUZfRV9JTlZBTElETUVESUFUWVBFOworCisgICAgLy8gVmFsaWRhdGUgdGhlIGZvcm1hdC4KKyAg
ICBEM0RGT1JNQVQgZDNkRm9ybWF0ID0gRDNERk1UX1VOS05PV047CisgICAgaHIgPSBwcm9wb3Nl
ZFZpZGVvVHlwZS5HZXRGb3VyQ0MoKERXT1JEKikmZDNkRm9ybWF0KTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIGZvcm1hdCBj
YW4gYmUgdXNlZCBhcyBiYWNrYnVmZmVyIGZvcm1hdC4KKyAgICBociA9IG1fcHJlc2VudGVyRW5n
aW5lLT5jaGVja0Zvcm1hdChkM2RGb3JtYXQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAg
ICByZXR1cm4gaHI7CisKKyAgICAvLyBDaGVjayBpbnRlcmxhY2VkIGZvcm1hdHMuCisgICAgTUZW
aWRlb0ludGVybGFjZU1vZGUgaW50ZXJsYWNlTW9kZSA9IE1GVmlkZW9JbnRlcmxhY2VfVW5rbm93
bjsKKyAgICBociA9IHByb3Bvc2VkVmlkZW9UeXBlLkdldEludGVybGFjZU1vZGUoJmludGVybGFj
ZU1vZGUpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBp
ZiAoaW50ZXJsYWNlTW9kZSAhPSBNRlZpZGVvSW50ZXJsYWNlX1Byb2dyZXNzaXZlKQorICAgICAg
ICByZXR1cm4gTUZfRV9JTlZBTElETUVESUFUWVBFOworCisgICAgVUlOVDMyIHdpZHRoID0gMCwg
aGVpZ2h0ID0gMDsKKyAgICBociA9IHByb3Bvc2VkVmlkZW9UeXBlLkdldEZyYW1lRGltZW5zaW9u
cygmd2lkdGgsICZoZWlnaHQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4g
aHI7CisKKyAgICAvLyBWYWxpZGF0ZSBhcGVydHVyZXMuCisgICAgTUZWaWRlb0FyZWEgdmlkZW9D
cm9wQXJlYTsKKyAgICBpZiAoU1VDQ0VFREVEKHByb3Bvc2VkVmlkZW9UeXBlLkdldFBhblNjYW5B
cGVydHVyZSgmdmlkZW9Dcm9wQXJlYSkpKQorICAgICAgICB2YWxpZGF0ZVZpZGVvQXJlYSh2aWRl
b0Nyb3BBcmVhLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoU1VDQ0VFREVEKHByb3Bvc2VkVmlk
ZW9UeXBlLkdldEdlb21ldHJpY0FwZXJ0dXJlKCZ2aWRlb0Nyb3BBcmVhKSkpCisgICAgICAgIHZh
bGlkYXRlVmlkZW9BcmVhKHZpZGVvQ3JvcEFyZWEsIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChT
VUNDRUVERUQocHJvcG9zZWRWaWRlb1R5cGUuR2V0TWluRGlzcGxheUFwZXJ0dXJlKCZ2aWRlb0Ny
b3BBcmVhKSkpCisgICAgICAgIHZhbGlkYXRlVmlkZW9BcmVhKHZpZGVvQ3JvcEFyZWEsIHdpZHRo
LCBoZWlnaHQpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Y3JlYXRlT3B0aW1h
bFZpZGVvVHlwZShJTUZNZWRpYVR5cGUqIHByb3Bvc2VkVHlwZSwgSU1GTWVkaWFUeXBlKiogb3B0
aW1hbFR5cGUpCit7CisgICAgVmlkZW9UeXBlIG9wdGltYWxWaWRlb1R5cGU7CisgICAgb3B0aW1h
bFZpZGVvVHlwZS5DcmVhdGVFbXB0eVR5cGUoKTsKKworICAgIEhSRVNVTFQgaHIgPSBvcHRpbWFs
VmlkZW9UeXBlLkNvcHlGcm9tKHByb3Bvc2VkVHlwZSk7CisgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgIHJldHVybiBocjsKKworICAgIC8vIFdlIG5vdyBtb2RpZnkgdGhlIG5ldyBtZWRpYSB0
eXBlLgorCisgICAgLy8gV2UgYXNzdW1lIHRoYXQgdGhlIG1vbml0b3IncyBwaXhlbCBhc3BlY3Qg
cmF0aW8gaXMgMToxLAorICAgIC8vIGFuZCB0aGF0IHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8gaXMg
cHJlc2VydmVkIGJ5IHRoZSBwcmVzZW50ZXIuCisgICAgaHIgPSBvcHRpbWFsVmlkZW9UeXBlLlNl
dFBpeGVsQXNwZWN0UmF0aW8oMSwgMSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybiBocjsKKworICAgIC8vIEdldCB0aGUgb3V0cHV0IHJlY3RhbmdsZS4KKyAgICBSRUNUIHJj
T3V0cHV0ID0gbV9wcmVzZW50ZXJFbmdpbmUtPmdldERlc3RpbmF0aW9uUmVjdCgpOworICAgIGlm
IChJc1JlY3RFbXB0eSgmcmNPdXRwdXQpKSB7CisgICAgICAgIGhyID0gY2FsY3VsYXRlT3V0cHV0
UmVjdGFuZ2xlKHByb3Bvc2VkVHlwZSwgcmNPdXRwdXQpOworICAgICAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICB9CisKKyAgICBociA9IG9wdGltYWxWaWRl
b1R5cGUuU2V0WVVWTWF0cml4KE1GVmlkZW9UcmFuc2Zlck1hdHJpeF9CVDcwOSk7CisgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gb3B0aW1hbFZpZGVv
VHlwZS5TZXRUcmFuc2ZlckZ1bmN0aW9uKE1GVmlkZW9UcmFuc0Z1bmNfNzA5KTsKKyAgICBpZiAo
RkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBvcHRpbWFsVmlkZW9U
eXBlLlNldFZpZGVvUHJpbWFyaWVzKE1GVmlkZW9QcmltYXJpZXNfQlQ3MDkpOworICAgIGlmIChG
QUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IG9wdGltYWxWaWRlb1R5
cGUuU2V0VmlkZW9Ob21pbmFsUmFuZ2UoTUZOb21pbmFsUmFuZ2VfMTZfMjM1KTsKKyAgICBpZiAo
RkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBvcHRpbWFsVmlkZW9U
eXBlLlNldFZpZGVvTGlnaHRpbmcoTUZWaWRlb0xpZ2h0aW5nX2RpbSk7CisgICAgaWYgKEZBSUxF
RChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gb3B0aW1hbFZpZGVvVHlwZS5T
ZXRGcmFtZURpbWVuc2lvbnMocmNPdXRwdXQucmlnaHQsIHJjT3V0cHV0LmJvdHRvbSk7CisgICAg
aWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIE1GVmlkZW9BcmVhIGRp
c3BsYXlBcmVhID0gTWFrZUFyZWEoMCwgMCwgcmNPdXRwdXQucmlnaHQsIHJjT3V0cHV0LmJvdHRv
bSk7CisKKyAgICBociA9IG9wdGltYWxWaWRlb1R5cGUuU2V0UGFuU2NhbkVuYWJsZWQoRkFMU0Up
OworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IG9w
dGltYWxWaWRlb1R5cGUuU2V0R2VvbWV0cmljQXBlcnR1cmUoZGlzcGxheUFyZWEpOworICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IG9wdGltYWxWaWRl
b1R5cGUuU2V0UGFuU2NhbkFwZXJ0dXJlKGRpc3BsYXlBcmVhKTsKKyAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBvcHRpbWFsVmlkZW9UeXBlLlNldE1p
bkRpc3BsYXlBcGVydHVyZShkaXNwbGF5QXJlYSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgIHJldHVybiBocjsKKworICAgICpvcHRpbWFsVHlwZSA9IG9wdGltYWxWaWRlb1R5cGUuRGV0
YWNoKCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworc3RhdGljIFJFQ1QgY29ycmVjdEFzcGVj
dFJhdGlvKGNvbnN0IFJFQ1QmIHNyYywgY29uc3QgTUZSYXRpbyYgc3JjUEFSLCBjb25zdCBNRlJh
dGlvJiBkZXN0UEFSKQoreworICAgIFJFQ1QgcmMgPSB7IDAsIDAsIHNyYy5yaWdodCAtIHNyYy5s
ZWZ0LCBzcmMuYm90dG9tIC0gc3JjLnRvcCB9OworCisgICAgaWYgKChzcmNQQVIuTnVtZXJhdG9y
ICogZGVzdFBBUi5EZW5vbWluYXRvcikgIT0gKHNyY1BBUi5EZW5vbWluYXRvciAqIGRlc3RQQVIu
TnVtZXJhdG9yKSkgeworICAgICAgICAvLyBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhc3Bl
Y3QgcmF0aW9zIGFyZSBkaWZmZXJlbnQKKworICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIHNvdXJj
ZSBhc3BlY3QgcmF0aW8gdG8gMToxCisgICAgICAgIGlmIChzcmNQQVIuTnVtZXJhdG9yID4gc3Jj
UEFSLkRlbm9taW5hdG9yKQorICAgICAgICAgICAgcmMucmlnaHQgPSBNdWxEaXYocmMucmlnaHQs
IHNyY1BBUi5OdW1lcmF0b3IsIHNyY1BBUi5EZW5vbWluYXRvcik7CisgICAgICAgIGVsc2UgaWYg
KHNyY1BBUi5OdW1lcmF0b3IgPCBzcmNQQVIuRGVub21pbmF0b3IpCisgICAgICAgICAgICByYy5i
b3R0b20gPSBNdWxEaXYocmMuYm90dG9tLCBzcmNQQVIuRGVub21pbmF0b3IsIHNyY1BBUi5OdW1l
cmF0b3IpOworCisKKyAgICAgICAgLy8gVHJhbnNmb3JtIHRvIGRlc3RpbmF0aW9uIGFzcGVjdCBy
YXRpby4KKyAgICAgICAgaWYgKGRlc3RQQVIuTnVtZXJhdG9yID4gZGVzdFBBUi5EZW5vbWluYXRv
cikKKyAgICAgICAgICAgIHJjLmJvdHRvbSA9IE11bERpdihyYy5ib3R0b20sIGRlc3RQQVIuTnVt
ZXJhdG9yLCBkZXN0UEFSLkRlbm9taW5hdG9yKTsKKyAgICAgICAgZWxzZSBpZiAoZGVzdFBBUi5O
dW1lcmF0b3IgPCBkZXN0UEFSLkRlbm9taW5hdG9yKQorICAgICAgICAgICAgcmMucmlnaHQgPSBN
dWxEaXYocmMucmlnaHQsIGRlc3RQQVIuRGVub21pbmF0b3IsIGRlc3RQQVIuTnVtZXJhdG9yKTsK
KworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpjYWxjdWxhdGVPdXRwdXRS
ZWN0YW5nbGUoSU1GTWVkaWFUeXBlKiBwcm9wb3NlZFR5cGUsIFJFQ1QmIG91dHB1dFJlY3QpCit7
CisgICAgVmlkZW9UeXBlIHByb3Bvc2VkVmlkZW9UeXBlKHByb3Bvc2VkVHlwZSk7CisKKyAgICBV
SU5UMzIgc3JjV2lkdGggPSAwLCBzcmNIZWlnaHQgPSAwOworICAgIEhSRVNVTFQgaHIgPSBwcm9w
b3NlZFZpZGVvVHlwZS5HZXRGcmFtZURpbWVuc2lvbnMoJnNyY1dpZHRoLCAmc3JjSGVpZ2h0KTsK
KyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgTUZWaWRlb0Fy
ZWEgZGlzcGxheUFyZWE7CisgICAgWmVyb01lbW9yeSgmZGlzcGxheUFyZWEsIHNpemVvZihkaXNw
bGF5QXJlYSkpOworCisgICAgaHIgPSBwcm9wb3NlZFZpZGVvVHlwZS5HZXRWaWRlb0Rpc3BsYXlB
cmVhKCZkaXNwbGF5QXJlYSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBo
cjsKKworICAgIExPTkcgb2Zmc2V0WCA9IChMT05HKU1GT2Zmc2V0VG9GbG9hdChkaXNwbGF5QXJl
YS5PZmZzZXRYKTsKKyAgICBMT05HIG9mZnNldFkgPSAoTE9ORylNRk9mZnNldFRvRmxvYXQoZGlz
cGxheUFyZWEuT2Zmc2V0WSk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgZGlzcGxheSBhcmVhIGlz
IHZhbGlkLgorICAgIC8vIElmIGl0IGlzIHZhbGlkLCB3ZSB1c2UgaXQuIElmIG5vdCwgd2UgdXNl
IHRoZSBmcmFtZSBkaW1lbnNpb25zLgorCisgICAgUkVDVCByY091dHB1dDsKKworICAgIGlmIChk
aXNwbGF5QXJlYS5BcmVhLmN4ICE9IDAKKyAgICAgICAgJiYgZGlzcGxheUFyZWEuQXJlYS5jeSAh
PSAwCisgICAgICAgICYmIG9mZnNldFggKyBkaXNwbGF5QXJlYS5BcmVhLmN4IDw9IHNyY1dpZHRo
CisgICAgICAgICYmIG9mZnNldFkgKyBkaXNwbGF5QXJlYS5BcmVhLmN5IDw9IHNyY0hlaWdodCkg
eworICAgICAgICByY091dHB1dC5sZWZ0ID0gb2Zmc2V0WDsKKyAgICAgICAgcmNPdXRwdXQucmln
aHQgPSBvZmZzZXRYICsgZGlzcGxheUFyZWEuQXJlYS5jeDsKKyAgICAgICAgcmNPdXRwdXQudG9w
ID0gb2Zmc2V0WTsKKyAgICAgICAgcmNPdXRwdXQuYm90dG9tID0gb2Zmc2V0WSArIGRpc3BsYXlB
cmVhLkFyZWEuY3k7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmNPdXRwdXQubGVmdCA9IDA7Cisg
ICAgICAgIHJjT3V0cHV0LnRvcCA9IDA7CisgICAgICAgIHJjT3V0cHV0LnJpZ2h0ID0gc3JjV2lk
dGg7CisgICAgICAgIHJjT3V0cHV0LmJvdHRvbSA9IHNyY0hlaWdodDsKKyAgICB9CisKKyAgICAv
LyBDb3JyZWN0IGFzcGVjdCByYXRpby4KKworICAgIE1GUmF0aW8gaW5wdXRQQVIgPSBwcm9wb3Nl
ZFZpZGVvVHlwZS5HZXRQaXhlbEFzcGVjdFJhdGlvKCk7CisgICAgTUZSYXRpbyBvdXRwdXRQQVIg
PSB7IDEsIDEgfTsgLy8gV2UgYXNzdW1lIHRoZSBtb25pdG9yJ3MgcGl4ZWxzIGFyZSBzcXVhcmUu
CisKKyAgICBvdXRwdXRSZWN0ID0gY29ycmVjdEFzcGVjdFJhdGlvKHJjT3V0cHV0LCBpbnB1dFBB
Uiwgb3V0cHV0UEFSKTsKKworICAgIHJldHVybiBTX09LOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OnByb2Nlc3NPdXRw
dXRMb29wKCkKK3sKKyAgICAvLyBHZXQgdmlkZW8gZnJhbWVzIGZyb20gdGhlIG1peGVyIGFuZCBz
Y2hlZHVsZSB0aGVtIGZvciBwcmVzZW50YXRpb24uCisgICAgSFJFU1VMVCBociA9IFNfT0s7CisK
KyAgICB3aGlsZSAoaHIgPT0gU19PSykgeworICAgICAgICBpZiAoIW1fc2FtcGxlTm90aWZ5KSB7
CisgICAgICAgICAgICAvLyBDdXJyZW50bHkgbm8gbW9yZSBpbnB1dCBzYW1wbGVzLgorICAgICAg
ICAgICAgaHIgPSBNRl9FX1RSQU5TRk9STV9ORUVEX01PUkVfSU5QVVQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGJyZWFrIGZyb20gdGhlIGxvb3AgaWYg
d2UgZmFpbCB0byBwcm9jZXNzIGEgc2FtcGxlLgorICAgICAgICBociA9IHByb2Nlc3NPdXRwdXQo
KTsKKyAgICB9CisKKyAgICBpZiAoaHIgPT0gTUZfRV9UUkFOU0ZPUk1fTkVFRF9NT1JFX0lOUFVU
KQorICAgICAgICBjaGVja0VuZE9mU3RyZWFtKCk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIHNldERl
c2lyZWRTYW1wbGVUaW1lKElNRlNhbXBsZSogc2FtcGxlLCBjb25zdCBMT05HTE9ORyYgc2FtcGxl
VGltZSwgY29uc3QgTE9OR0xPTkcmIGR1cmF0aW9uKQoreworICAgIC8vIFRvIHRlbGwgdGhlIG1p
eGVyIHRvIGdpdmUgdXMgYW4gZWFybGllciBmcmFtZSBmb3IgcmVwYWludGluZywgd2UgY2FuIHNl
dCB0aGUgZGVzaXJlZCBzYW1wbGUgdGltZS4KKyAgICAvLyBXZSBoYXZlIHRvIGNsZWFyIHRoZSBk
ZXNpcmVkIHNhbXBsZSB0aW1lIGJlZm9yZSByZXVzaW5nIHRoZSBzYW1wbGUuCisKKyAgICBpZiAo
IXNhbXBsZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIENPTVB0cjxJTUZEZXNp
cmVkU2FtcGxlPiBkZXNpcmVkOworCisgICAgSFJFU1VMVCBociA9IHNhbXBsZS0+UXVlcnlJbnRl
cmZhY2UoX191dWlkb2YoSU1GRGVzaXJlZFNhbXBsZSksICh2b2lkKiopJmRlc2lyZWQpOworCisg
ICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgIGRlc2lyZWQtPlNldERlc2lyZWRTYW1wbGVU
aW1lQW5kRHVyYXRpb24oc2FtcGxlVGltZSwgZHVyYXRpb24pOworCisgICAgcmV0dXJuIGhyOwor
fQorCitzdGF0aWMgSFJFU1VMVCBjbGVhckRlc2lyZWRTYW1wbGVUaW1lKElNRlNhbXBsZSogc2Ft
cGxlKQoreworICAgIGlmICghc2FtcGxlKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisg
ICAgLy8gV2UgbmVlZCB0byByZXRyaWV2ZSBzb21lIGF0dHJpYnV0ZXMgd2UgaGF2ZSBzZXQgb24g
dGhlIHNhbXBsZSBiZWZvcmUgd2UgY2FsbCAKKyAgICAvLyBJTUZEZXNpcmVkU2FtcGxlOjpDbGVh
cigpLCBhbmQgc2V0IHRoZW0gb25jZSBtb3JlLCBzaW5jZSB0aGV5IGFyZSBjbGVhcmVkIGJ5Cisg
ICAgLy8gdGhlIENsZWFyKCkgY2FsbC4KKworICAgIFVJTlQzMiBjb3VudGVyID0gTUZHZXRBdHRy
aWJ1dGVVSU5UMzIoc2FtcGxlLCBNRlNhbXBsZVByZXNlbnRlclNhbXBsZUNvdW50ZXIsIChVSU5U
MzIpLTEpOworCisgICAgQ09NUHRyPElVbmtub3duPiBzd2FwQ2hhaW47CisgICAgc2FtcGxlLT5H
ZXRVbmtub3duKE1GU2FtcGxlUHJlc2VudGVyU2FtcGxlU3dhcENoYWluLCBJSURfSVVua25vd24s
ICh2b2lkKiopJnN3YXBDaGFpbik7CisKKyAgICBDT01QdHI8SU1GRGVzaXJlZFNhbXBsZT4gZGVz
aXJlZDsKKyAgICBIUkVTVUxUIGhyID0gc2FtcGxlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJ
TUZEZXNpcmVkU2FtcGxlKSwgKHZvaWQqKikmZGVzaXJlZCk7CisgICAgaWYgKFNVQ0NFRURFRCho
cikpIHsKKyAgICAgICAgZGVzaXJlZC0+Q2xlYXIoKTsKKworICAgICAgICBociA9IHNhbXBsZS0+
U2V0VUlOVDMyKE1GU2FtcGxlUHJlc2VudGVyU2FtcGxlQ291bnRlciwgY291bnRlcik7CisgICAg
ICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgcmV0dXJuIGhyOworCisgICAgICAgIGlm
IChzd2FwQ2hhaW4pIHsKKyAgICAgICAgICAgIGhyID0gc2FtcGxlLT5TZXRVbmtub3duKE1GU2Ft
cGxlUHJlc2VudGVyU2FtcGxlU3dhcENoYWluLCBzd2FwQ2hhaW4uZ2V0KCkpOworICAgICAgICAg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhyOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGhyOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OnByb2Nlc3NPdXRwdXQoKQor
eworICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIGdldCBhIG5ldyBzYW1wbGUgZnJvbSB0
aGUgbWl4ZXIuCisgICAgLy8gSXQgaXMgY2FsbGVkIHdoZW4gdGhlIG1peGVyIGhhcyBhIG5ldyBz
YW1wbGUsIG9yIHdoZW4gcmVwYWludGluZyB0aGUgbGFzdCBmcmFtZS4KKworICAgIEFTU0VSVCht
X3NhbXBsZU5vdGlmeSB8fCBtX3JlcGFpbnQpOworCisgICAgTE9OR0xPTkcgbWl4ZXJTdGFydFRp
bWUgPSAwLCBtaXhlckVuZFRpbWUgPSAwOworICAgIE1GVElNRSBzeXN0ZW1UaW1lID0gMDsKKyAg
ICBib29sIHJlcGFpbnQgPSBtX3JlcGFpbnQ7ICAKKworICAgIC8vIElmIHRoZSBjbG9jayBoYXMg
bm90IHN0YXJ0ZWQsIHdlIG9ubHkgcHJlc2VudCB0aGUgZmlyc3Qgc2FtcGxlLiAKKworICAgIGlm
ICgobV9yZW5kZXJTdGF0ZSAhPSBSZW5kZXJTdGF0ZVN0YXJ0ZWQpICYmICFtX3JlcGFpbnQgJiYg
bV9wcmVyb2xsZWQpCisgICAgICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgaWYgKCFtX21peGVy
KQorICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElEUkVRVUVTVDsKKworICAgIC8vIEdldCBhIGZy
ZWUgc2FtcGxlIGZyb20gdGhlIHBvb2wuCisgICAgQ09NUHRyPElNRlNhbXBsZT4gc2FtcGxlOwor
ICAgIEhSRVNVTFQgaHIgPSBtX3NhbXBsZVBvb2wuZ2V0U2FtcGxlKHNhbXBsZSk7CisgICAgaWYg
KGhyID09IE1GX0VfU0FNUExFQUxMT0NBVE9SX0VNUFRZKQorICAgICAgICByZXR1cm4gU19GQUxT
RTsgLy8gV2Ugd2lsbCB0cnkgYWdhaW4gbGF0ZXIgd2hlbiB0aGVyZSBhcmUgZnJlZSBzYW1wbGVz
CisKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgQVNTRVJU
KHNhbXBsZSk7CisKKyAgICBBU1NFUlQoTUZHZXRBdHRyaWJ1dGVVSU5UMzIoc2FtcGxlLmdldCgp
LCBNRlNhbXBsZVByZXNlbnRlclNhbXBsZUNvdW50ZXIsIChVSU5UMzIpLTEpID09IG1fdG9rZW5D
b3VudGVyKTsKKworICAgIGlmIChtX3JlcGFpbnQpIHsKKyAgICAgICAgLy8gR2V0IHRoZSBtb3N0
IHJlY2VudCBzYW1wbGUgZnJvbSB0aGUgbWl4ZXIuCisgICAgICAgIHNldERlc2lyZWRTYW1wbGVU
aW1lKHNhbXBsZS5nZXQoKSwgbV9zY2hlZHVsZXIubGFzdFNhbXBsZVRpbWUoKSwgbV9zY2hlZHVs
ZXIuZnJhbWVEdXJhdGlvbigpKTsKKyAgICAgICAgbV9yZXBhaW50ID0gZmFsc2U7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gQ2xlYXIgdGhlIGRlc2lyZWQgc2FtcGxlIHRpbWUgdG8gZ2V0IHRo
ZSBuZXh0IHNhbXBsZSBpbiB0aGUgc3RyZWFtLgorICAgICAgICBjbGVhckRlc2lyZWRTYW1wbGVU
aW1lKHNhbXBsZS5nZXQoKSk7CisKKyAgICAgICAgaWYgKG1fY2xvY2spIHsKKyAgICAgICAgICAg
IC8vIEdldCB0aGUgc3RhcnRpbmcgdGltZSBvZiB0aGUgUHJvY2Vzc091dHB1dCBjYWxsLgorICAg
ICAgICAgICAgbV9jbG9jay0+R2V0Q29ycmVsYXRlZFRpbWUoMCwgJm1peGVyU3RhcnRUaW1lLCAm
c3lzdGVtVGltZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBHZXQgYSBzYW1wbGUgZnJv
bSB0aGUgbWl4ZXIuIAorICAgIE1GVF9PVVRQVVRfREFUQV9CVUZGRVIgZGF0YUJ1ZmZlcjsKKyAg
ICBaZXJvTWVtb3J5KCZkYXRhQnVmZmVyLCBzaXplb2YoZGF0YUJ1ZmZlcikpOworCisgICAgZGF0
YUJ1ZmZlci5kd1N0cmVhbUlEID0gMDsKKyAgICBkYXRhQnVmZmVyLnBTYW1wbGUgPSBzYW1wbGUu
Z2V0KCk7CisgICAgZGF0YUJ1ZmZlci5kd1N0YXR1cyA9IDA7CisKKyAgICBEV09SRCBzdGF0dXMg
PSAwOworICAgIGhyID0gbV9taXhlci0+UHJvY2Vzc091dHB1dCgwLCAxLCAmZGF0YUJ1ZmZlciwg
JnN0YXR1cyk7CisKKyAgICAvLyBSZWxlYXNlIGV2ZW50cy4gVGhlcmUgYXJlIHVzdWFsbHkgbm8g
ZXZlbnRzIHJldHVybmVkLAorICAgIC8vIGJ1dCBpbiBjYXNlIHRoZXJlIGFyZSwgd2Ugc2hvdWxk
IHJlbGVhc2UgdGhlbS4KKyAgICBpZiAoZGF0YUJ1ZmZlci5wRXZlbnRzKQorICAgICAgICBkYXRh
QnVmZmVyLnBFdmVudHMtPlJlbGVhc2UoKTsKKworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAg
ICAgIEhSRVNVTFQgaHIyID0gbV9zYW1wbGVQb29sLnJldHVyblNhbXBsZShzYW1wbGUuZ2V0KCkp
OworICAgICAgICBpZiAoRkFJTEVEKGhyMikpCisgICAgICAgICAgICByZXR1cm4gaHIyOworCisg
ICAgICAgIGlmIChociA9PSBNRl9FX1RSQU5TRk9STV9UWVBFX05PVF9TRVQpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBtZWRpYSB0eXBlIGhhcyBub3QgYmVlbiBzZXQsIHJlbmVnb3RpYXRlLgorICAg
ICAgICAgICAgaHIgPSByZW5lZ290aWF0ZU1lZGlhVHlwZSgpOworICAgICAgICB9IGVsc2UgaWYg
KGhyID09IE1GX0VfVFJBTlNGT1JNX1NUUkVBTV9DSEFOR0UpIHsKKyAgICAgICAgICAgIC8vIFRo
ZSBtZWRpYSB0eXBlIGNoYW5nZWQsIHJlc2V0IGl0LgorICAgICAgICAgICAgc2V0TWVkaWFUeXBl
KG51bGxwdHIpOworICAgICAgICB9IGVsc2UgaWYgKGhyID09IE1GX0VfVFJBTlNGT1JNX05FRURf
TU9SRV9JTlBVVCkgeworICAgICAgICAgICAgLy8gVGhlIG1peGVyIG5lZWRzIG1vcmUgaW5wdXQu
CisgICAgICAgICAgICBtX3NhbXBsZU5vdGlmeSA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBnb3QgYSBzYW1wbGUgZnJvbSB0aGUgbWl4ZXIuCisK
KyAgICAgICAgaWYgKG1fY2xvY2sgJiYgIXJlcGFpbnQpIHsKKyAgICAgICAgICAgIC8vIE5vdGlm
eSB0aGUgRVZSIGFib3V0IGxhdGVuY3kuCisgICAgICAgICAgICBtX2Nsb2NrLT5HZXRDb3JyZWxh
dGVkVGltZSgwLCAmbWl4ZXJFbmRUaW1lLCAmc3lzdGVtVGltZSk7CisKKyAgICAgICAgICAgIExP
TkdMT05HIGxhdGVuY3lUaW1lID0gbWl4ZXJFbmRUaW1lIC0gbWl4ZXJTdGFydFRpbWU7CisgICAg
ICAgICAgICBub3RpZnlFdmVudChFQ19QUk9DRVNTSU5HX0xBVEVOQ1ksIChMT05HX1BUUikmbGF0
ZW5jeVRpbWUsIDApOworICAgICAgICB9CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGFyZSBu
b3RpZmllZCB3aGVuIHRoZSBzYW1wbGUgaXMgcmVsZWFzZWQKKyAgICAgICAgaHIgPSB0cmFja1Nh
bXBsZShzYW1wbGUuZ2V0KCkpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAg
IHJldHVybiBocjsKKworICAgICAgICAvLyBEZWxpdmVyIHRoZSBzYW1wbGUgZm9yIHNjaGVkdWxp
bmcKKyAgICAgICAgaHIgPSBkZWxpdmVyU2FtcGxlKHNhbXBsZS5nZXQoKSwgcmVwYWludCk7Cisg
ICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgcmV0dXJuIGhyOworCisgICAgICAg
IC8vIEF0IGxlYXN0IG9uZSBzYW1wbGUgaGFzIGJlZW4gcHJlc2VudGVkIG5vdy4KKyAgICAgICAg
bV9wcmVyb2xsZWQgPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworSFJFU1VM
VCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpkZWxpdmVyU2FtcGxlKElNRlNhbXBsZSogc2FtcGxlLCBib29sIHJlcGFpbnQpCit7CisgICAg
QVNTRVJUKHNhbXBsZSk7CisKKyAgICBEaXJlY3QzRFByZXNlbnRlcjo6RGV2aWNlU3RhdGUgc3Rh
dGUgPSBEaXJlY3QzRFByZXNlbnRlcjo6RGV2aWNlT0s7CisKKyAgICAvLyBEZXRlcm1pbmUgaWYg
dGhlIHNhbXBsZSBzaG91bGQgYmUgcHJlc2VudGVkIGltbWVkaWF0ZWx5LgorICAgIGJvb2wgcHJl
c2VudE5vdyA9ICgobV9yZW5kZXJTdGF0ZSAhPSBSZW5kZXJTdGF0ZVN0YXJ0ZWQpIHx8IGlzU2Ny
dWJiaW5nKCkgfHwgcmVwYWludCk7CisKKyAgICBIUkVTVUxUIGhyID0gbV9wcmVzZW50ZXJFbmdp
bmUtPmNoZWNrRGV2aWNlU3RhdGUoc3RhdGUpOworCisgICAgaWYgKFNVQ0NFRURFRChocikpCisg
ICAgICAgIGhyID0gbV9zY2hlZHVsZXIuc2NoZWR1bGVTYW1wbGUoc2FtcGxlLCBwcmVzZW50Tm93
KTsKKworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIC8vIFN0cmVhbWluZyBoYXMgZmFp
bGVkLCBub3RpZnkgdGhlIEVWUi4KKyAgICAgICAgbm90aWZ5RXZlbnQoRUNfRVJST1JBQk9SVCwg
aHIsIDApOworICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gRGlyZWN0M0RQcmVzZW50ZXI6OkRldmlj
ZVJlc2V0KQorICAgICAgICBub3RpZnlFdmVudChFQ19ESVNQTEFZX0NIQU5HRUQsIFNfT0ssIDAp
OworCisgICAgcmV0dXJuIGhyOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OnRyYWNrU2FtcGxlKElNRlNhbXBsZSog
c2FtcGxlKQoreworICAgIENPTVB0cjxJTUZUcmFja2VkU2FtcGxlPiB0cmFja2VkOworCisgICAg
SFJFU1VMVCBociA9IHNhbXBsZS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSU1GVHJhY2tlZFNh
bXBsZSksICh2b2lkKiopJnRyYWNrZWQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBy
ZXR1cm4gaHI7CisKKyAgICAvLyBTZXQgY2FsbGJhY2sgb2JqZWN0IG9uIHdoaWNoIHRoZSBvblNh
bXBsZUZyZWUgbWV0aG9kIGlzIGludm9rZWQgd2hlbiB0aGUgc2FtcGxlIGlzIG5vIGxvbmdlciB1
c2VkLgorICAgIHJldHVybiB0cmFja2VkLT5TZXRBbGxvY2F0b3IodGhpcywgbnVsbHB0cik7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1By
ZXNlbnRlcjo6cmVsZWFzZVJlc291cmNlcygpCit7CisgICAgLy8gVGhlIHRva2VuIGNvdW50ZXIg
aXMgaW5jcmVtZW50ZWQgdG8gaW5kaWNhdGUgdGhhdCBleGlzdGluZyBzYW1wbGVzIGFyZQorICAg
IC8vIGludmFsaWQgYW5kIGNhbiBiZSBkaXNwb3NlZCBpbiB0aGUgbWV0aG9kIG9uU2FtcGxlRnJl
ZS4KKyAgICBtX3Rva2VuQ291bnRlcisrOworCisgICAgZmx1c2goKTsKKworICAgIG1fc2FtcGxl
UG9vbC5jbGVhcigpOworCisgICAgaWYgKG1fcHJlc2VudGVyRW5naW5lKQorICAgICAgICBtX3By
ZXNlbnRlckVuZ2luZS0+cmVsZWFzZVJlc291cmNlcygpOworfQorCitIUkVTVUxUIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Om9uU2FtcGxl
RnJlZShJTUZBc3luY1Jlc3VsdCogcmVzdWx0KQoreworICAgIENPTVB0cjxJVW5rbm93bj4gb2Jq
ZWN0OworICAgIEhSRVNVTFQgaHIgPSByZXN1bHQtPkdldE9iamVjdCgmb2JqZWN0KTsKKyAgICBp
ZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBub3RpZnlFdmVudChFQ19FUlJPUkFCT1JULCBociwg
MCk7CisgICAgICAgIHJldHVybiBocjsKKyAgICB9CisKKyAgICBDT01QdHI8SU1GU2FtcGxlPiBz
YW1wbGU7CisgICAgaHIgPSBvYmplY3QtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElNRlNhbXBs
ZSksICh2b2lkKiopJnNhbXBsZSk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgbm90
aWZ5RXZlbnQoRUNfRVJST1JBQk9SVCwgaHIsIDApOworICAgICAgICByZXR1cm4gaHI7CisgICAg
fQorCisgICAgbV9sb2NrLmxvY2soKTsKKworICAgIGlmIChNRkdldEF0dHJpYnV0ZVVJTlQzMihz
YW1wbGUuZ2V0KCksIE1GU2FtcGxlUHJlc2VudGVyU2FtcGxlQ291bnRlciwgKFVJTlQzMiktMSkg
PT0gbV90b2tlbkNvdW50ZXIpIHsKKyAgICAgICAgaHIgPSBtX3NhbXBsZVBvb2wucmV0dXJuU2Ft
cGxlKHNhbXBsZS5nZXQoKSk7CisKKyAgICAgICAgLy8gRG8gbW9yZSBwcm9jZXNzaW5nLCBzaW5j
ZSBhIGZyZWUgc2FtcGxlIGlzIGF2YWlsYWJsZQorICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgICAgIHByb2Nlc3NPdXRwdXRMb29wKCk7CisgICAgfQorCisgICAgbV9sb2NrLnVu
bG9jaygpOworCisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIG5vdGlmeUV2ZW50KEVDX0VS
Uk9SQUJPUlQsIGhyLCAwKTsKKworICAgIHJldHVybiBocjsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpub3RpZnlFdmVu
dChsb25nIEV2ZW50Q29kZSwgTE9OR19QVFIgUGFyYW0xLCBMT05HX1BUUiBQYXJhbTIpCit7Cisg
ICAgaWYgKG1fbWVkaWFFdmVudFNpbmspCisgICAgICAgIG1fbWVkaWFFdmVudFNpbmstPk5vdGlm
eShFdmVudENvZGUsIFBhcmFtMSwgUGFyYW0yKTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2FtcGxlUG9vbDo6Z2V0U2FtcGxlKENPTVB0cjxJ
TUZTYW1wbGU+JiBzYW1wbGUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKwor
ICAgIGlmICghbV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIE1GX0VfTk9UX0lOSVRJQUxJ
WkVEOworCisgICAgaWYgKG1fdmlkZW9TYW1wbGVRdWV1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBNRl9FX1NBTVBMRUFMTE9DQVRPUl9FTVBUWTsKKworICAgIHNhbXBsZSA9IG1fdmlkZW9T
YW1wbGVRdWV1ZS50YWtlRmlyc3QoKTsKKworICAgIG1fcGVuZGluZysrOworCisgICAgcmV0dXJu
IFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpW
aWRlb1NhbXBsZVBvb2w6OnJldHVyblNhbXBsZShJTUZTYW1wbGUqIHNhbXBsZSkKK3sKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgaWYgKCFtX2luaXRpYWxpemVkKQorICAg
ICAgICByZXR1cm4gTUZfRV9OT1RfSU5JVElBTElaRUQ7CisKKyAgICBtX3ZpZGVvU2FtcGxlUXVl
dWUuYXBwZW5kKHNhbXBsZSk7CisgICAgbV9wZW5kaW5nLS07CisgICAgcmV0dXJuIFNfT0s7Cit9
CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBv
b2w6OmFyZVNhbXBsZXNQZW5kaW5nKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2sp
OworCisgICAgaWYgKCFtX2luaXRpYWxpemVkKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAg
ICByZXR1cm4gKG1fcGVuZGluZyA+IDApOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TYW1wbGVQb29sOjppbml0aWFsaXplKFZpZGVvU2FtcGxl
TGlzdCYgc2FtcGxlcykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAg
aWYgKG1faW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURSRVFVRVNUOwor
CisgICAgLy8gQ29weSB0aGUgc2FtcGxlcworICAgIGZvciAoYXV0byBzYW1wbGUgOiBzYW1wbGVz
KQorICAgICAgICBtX3ZpZGVvU2FtcGxlUXVldWUuYXBwZW5kKHNhbXBsZSk7CisKKyAgICBtX2lu
aXRpYWxpemVkID0gdHJ1ZTsKKyAgICBzYW1wbGVzLmNsZWFyKCk7CisKKyAgICByZXR1cm4gU19P
SzsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2Ft
cGxlUG9vbDo6Y2xlYXIoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAg
ICBtX3ZpZGVvU2FtcGxlUXVldWUuY2xlYXIoKTsKKyAgICBtX2luaXRpYWxpemVkID0gZmFsc2U7
CisgICAgbV9wZW5kaW5nID0gMDsKK30KKworCisvLyBTY2hlZHVsZXIgdGhyZWFkIG1lc3NhZ2Vz
LgorCitlbnVtIFNjaGVkdWxlRXZlbnQgeworICAgIEV2ZW50VGVybWluYXRlID0gV01fVVNFUiwK
KyAgICBFdmVudFNjaGVkdWxlLAorICAgIEV2ZW50Rmx1c2gKK307CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6c2V0RnJhbWVSYXRlKGNv
bnN0IE1GUmF0aW8mIGZwcykKK3sKKyAgICBVSU5UNjQgYXZnVGltZVBlckZyYW1lID0gMDsKKyAg
ICBNRkZyYW1lUmF0ZVRvQXZlcmFnZVRpbWVQZXJGcmFtZVB0cigpKGZwcy5OdW1lcmF0b3IsIGZw
cy5EZW5vbWluYXRvciwgJmF2Z1RpbWVQZXJGcmFtZSk7CisKKyAgICBtX2ZyYW1lRHVyYXRpb24g
PSAoTUZUSU1FKWF2Z1RpbWVQZXJGcmFtZTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpzdGFydFNjaGVkdWxlcihJTUZDbG9j
ayogY2xvY2spCit7CisgICAgaWYgKG1fc2NoZWR1bGVyVGhyZWFkLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIEVfVU5FWFBFQ1RFRDsKKworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAg
bV9jbG9jayA9IGNsb2NrOworCisgICAgLy8gVXNlIGhpZ2ggdGltZXIgcmVzb2x1dGlvbi4KKyAg
ICB0aW1lQmVnaW5QZXJpb2QoMSk7CisKKyAgICAvLyBDcmVhdGUgYW4gZXZlbnQgdG8gc2lnbmFs
IHRoYXQgdGhlIHNjaGVkdWxlciB0aHJlYWQgaGFzIHN0YXJ0ZWQuCisgICAgbV90aHJlYWRSZWFk
eUV2ZW50ID0gOjpDcmVhdGVFdmVudChudWxscHRyLCBGQUxTRSwgRkFMU0UsIG51bGxwdHIpOwor
ICAgIGlmICghbV90aHJlYWRSZWFkeUV2ZW50LmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIEhS
RVNVTFRfRlJPTV9XSU4zMihHZXRMYXN0RXJyb3IoKSk7CisKKyAgICAvLyBDcmVhdGUgYW4gZXZl
bnQgdG8gc2lnbmFsIHRoYXQgdGhlIGZsdXNoIGhhcyBjb21wbGV0ZWQuCisgICAgbV9mbHVzaEV2
ZW50ID0gOjpDcmVhdGVFdmVudChudWxscHRyLCBGQUxTRSwgRkFMU0UsIG51bGxwdHIpOworICAg
IGlmICghbV9mbHVzaEV2ZW50LmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIEhSRVNVTFRfRlJP
TV9XSU4zMihHZXRMYXN0RXJyb3IoKSk7CisKKyAgICAvLyBTdGFydCBzY2hlZHVsZXIgdGhyZWFk
LgorICAgIERXT1JEIHRocmVhZElEID0gMDsKKyAgICBtX3NjaGVkdWxlclRocmVhZCA9IDo6Q3Jl
YXRlVGhyZWFkKG51bGxwdHIsIDAsIHNjaGVkdWxlclRocmVhZFByb2MsIChMUFZPSUQpdGhpcywg
MCwgJnRocmVhZElEKTsKKyAgICBpZiAoIW1fc2NoZWR1bGVyVGhyZWFkLmlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuIEhSRVNVTFRfRlJPTV9XSU4zMihHZXRMYXN0RXJyb3IoKSk7CisKKyAgICBI
QU5ETEUgaE9iamVjdHNbXSA9IHsgbV90aHJlYWRSZWFkeUV2ZW50LmdldCgpLCBtX3NjaGVkdWxl
clRocmVhZC5nZXQoKSB9OworCisgICAgLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBzdGFydAor
ICAgIERXT1JEIHJlc3VsdCA9IDo6V2FpdEZvck11bHRpcGxlT2JqZWN0cygyLCBoT2JqZWN0cywg
RkFMU0UsIElORklOSVRFKTsKKyAgICBpZiAoV0FJVF9PQkpFQ1RfMCAhPSByZXN1bHQpIHsKKyAg
ICAgICAgLy8gVGhlIHRocmVhZCBoYXMgdGVybWluYXRlZC4KKyAgICAgICAgbV9zY2hlZHVsZXJU
aHJlYWQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIEVfVU5FWFBFQ1RFRDsKKyAgICB9CisKKyAg
ICBtX3RocmVhZElEID0gdGhyZWFkSUQ7CisKKyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6c3RvcFNj
aGVkdWxlcigpCit7CisgICAgaWYgKCFtX3NjaGVkdWxlclRocmVhZC5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybiBTX09LOworCisgICAgLy8gVGVybWluYXRlIHRoZSBzY2hlZHVsZXIgdGhyZWFk
CisgICAgOjpQb3N0VGhyZWFkTWVzc2FnZShtX3RocmVhZElELCBFdmVudFRlcm1pbmF0ZSwgMCwg
MCk7CisKKyAgICAvLyBXYWl0IGZvciB0aGUgc2NoZWR1bGVyIHRocmVhZCB0byBmaW5pc2guCisg
ICAgOjpXYWl0Rm9yU2luZ2xlT2JqZWN0KG1fc2NoZWR1bGVyVGhyZWFkLmdldCgpLCBJTkZJTklU
RSk7CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgbV9zY2hlZHVsZXJU
aHJlYWQuY2xlYXIoKTsKKyAgICBtX2ZsdXNoRXZlbnQuY2xlYXIoKTsKKworICAgIC8vIFRocm93
IGF3YXkgc2FtcGxlcworICAgIG1fc2NoZWR1bGVkU2FtcGxlcy5jbGVhcigpOworCisgICAgLy8g
Q2xlYXIgcHJldmlvdXNseSBzZXQgdGltZXIgcmVzb2x1dGlvbi4KKyAgICB0aW1lRW5kUGVyaW9k
KDEpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6Zmx1c2goKQoreworICAgIC8vIFRoaXMg
bWV0aG9kIHdpbGwgd2FpdCBmb3IgdGhlIGZsdXNoIHRvIGZpbmlzaCBvbiB0aGUgd29ya2VyIHRo
cmVhZC4KKworICAgIGlmIChtX3NjaGVkdWxlclRocmVhZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
OjpQb3N0VGhyZWFkTWVzc2FnZShtX3RocmVhZElELCBFdmVudEZsdXNoLCAwLCAwKTsKKworICAg
ICAgICBIQU5ETEUgb2JqZWN0c1tdID0geyBtX2ZsdXNoRXZlbnQuZ2V0KCksIG1fc2NoZWR1bGVy
VGhyZWFkLmdldCgpIH07CisKKyAgICAgICAgY29uc3QgaW50IHNjaGVkdWxlclRpbWVvdXQgPSA1
MDAwOworCisgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBmbHVzaCB0byBmaW5pc2ggb3IgdGhlIHRo
cmVhZCB0byB0ZXJtaW5hdGUuCisgICAgICAgIDo6V2FpdEZvck11bHRpcGxlT2JqZWN0cygyLCBv
YmplY3RzLCBGQUxTRSwgc2NoZWR1bGVyVGltZW91dCk7CisgICAgfQorCisgICAgcmV0dXJuIFNf
T0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRl
b1NjaGVkdWxlcjo6c2NoZWR1bGVTYW1wbGUoSU1GU2FtcGxlKiBzYW1wbGUsIGJvb2wgcHJlc2Vu
dE5vdykKK3sKKyAgICBpZiAoIW1fcHJlc2VudGVyKQorICAgICAgICByZXR1cm4gTUZfRV9OT1Rf
SU5JVElBTElaRUQ7CisKKyAgICBpZiAoIW1fc2NoZWR1bGVyVGhyZWFkLmlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuIE1GX0VfTk9UX0lOSVRJQUxJWkVEOworCisgICAgRFdPUkQgZXhpdENvZGUg
PSAwOworICAgIDo6R2V0RXhpdENvZGVUaHJlYWQobV9zY2hlZHVsZXJUaHJlYWQuZ2V0KCksICZl
eGl0Q29kZSk7CisKKyAgICBpZiAoZXhpdENvZGUgIT0gU1RJTExfQUNUSVZFKQorICAgICAgICBy
ZXR1cm4gRV9GQUlMOworCisgICAgaWYgKHByZXNlbnROb3cgfHwgIW1fY2xvY2spCisgICAgICAg
IG1fcHJlc2VudGVyLT5wcmVzZW50U2FtcGxlKHNhbXBsZSwgMCk7CisgICAgZWxzZSB7CisgICAg
ICAgIC8vIFN1Ym1pdCB0aGUgc2FtcGxlIGZvciBzY2hlZHVsaW5nLgorICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICBtX3NjaGVkdWxlZFNhbXBsZXMuYXBwZW5kKHNh
bXBsZSk7CisKKyAgICAgICAgOjpQb3N0VGhyZWFkTWVzc2FnZShtX3RocmVhZElELCBFdmVudFNj
aGVkdWxlLCAwLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpwcm9jZXNz
U2FtcGxlc0luUXVldWUoTE9ORyYgbmV4dFNsZWVwKQoreworICAgIEhSRVNVTFQgaHIgPSBTX09L
OworICAgIExPTkcgd2FpdCA9IDA7CisKKyAgICAvLyBQcm9jZXNzIHNhbXBsZXMgYXMgbG9uZyBh
cyB0aGVyZSBhcmUgc2FtcGxlcyBpbiB0aGUgcXVldWUsIGFuZCB0aGV5IGhhdmUgbm90IGFycml2
ZWQgdG9vIGVhcmx5LgorCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgQ09NUHRyPElNRlNh
bXBsZT4gc2FtcGxlOworCisgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICAgICAgaWYgKG1fc2NoZWR1bGVkU2FtcGxlcy5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBzYW1wbGUgPSBt
X3NjaGVkdWxlZFNhbXBsZXMudGFrZUZpcnN0KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQ
cm9jZXNzIHRoZSBzYW1wbGUuCisgICAgICAgIC8vIElmIHRoZSBzYW1wbGUgaGFzIGFycml2ZWQg
dG9vIGVhcmx5LCB3YWl0IHdpbGwgYmUgPiAwLAorICAgICAgICAvLyBhbmQgdGhlIHNjaGVkdWxl
ciBzaG91bGQgZ28gdG8gc2xlZXAuCisgICAgICAgIGhyID0gcHJvY2Vzc1NhbXBsZShzYW1wbGUu
Z2V0KCksIHdhaXQpOworCisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgaWYgKHdhaXQgPiAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgaWYgKCF3YWl0KSB7CisgICAgICAgIC8vIFRoZSBxdWV1ZSBpcyBlbXB0eS4gU2xlZXAg
dW50aWwgdGhlIG5leHQgbWVzc2FnZSBhcnJpdmVzLgorICAgICAgICB3YWl0ID0gSU5GSU5JVEU7
CisgICAgfQorCisgICAgbmV4dFNsZWVwID0gd2FpdDsKKyAgICByZXR1cm4gaHI7Cit9CisKK0hS
RVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6
cHJvY2Vzc1NhbXBsZShJTUZTYW1wbGUqIHNhbXBsZSwgTE9ORyYgbmV4dFNsZWVwKQoreworICAg
IEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgTE9OR0xPTkcgcHJlc2VudGF0aW9uVGltZSA9IDA7
CisgICAgTE9OR0xPTkcgdGltZU5vdyA9IDA7CisgICAgTUZUSU1FIHN5c3RlbVRpbWUgPSAwOwor
CisgICAgYm9vbCBwcmVzZW50Tm93ID0gdHJ1ZTsKKyAgICBMT05HIG5leHRTbGVlcFRpbWUgPSAw
OworCisgICAgaWYgKG1fY2xvY2spIHsKKyAgICAgICAgLy8gR2V0IHRoZSB0aW1lIHN0YW1wIG9m
IHRoZSBzYW1wbGUuCisgICAgICAgIC8vIEEgc2FtcGxlIGNhbiBwb3NzaWJseSBoYXZlIG5vIHRp
bWUgc3RhbXAuCisgICAgICAgIGhyID0gc2FtcGxlLT5HZXRTYW1wbGVUaW1lKCZwcmVzZW50YXRp
b25UaW1lKTsKKworICAgICAgICAvLyBHZXQgdGhlIGNsb2NrIHRpbWUuCisgICAgICAgIC8vIElm
IHRoZSBzYW1wbGUgZG9lcyBub3QgaGF2ZSBhIHRpbWUgc3RhbXAsIHRoZSBjbG9jayB0aW1lIGlz
IG5vdCBuZWVkZWQuCisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgaHIg
PSBtX2Nsb2NrLT5HZXRDb3JyZWxhdGVkVGltZSgwLCAmdGltZU5vdywgJnN5c3RlbVRpbWUpOwor
CisgICAgICAgIC8vIERldGVybWluZSB0aGUgdGltZSB1bnRpbCB0aGUgc2FtcGxlIHNob3VsZCBi
ZSBwcmVzZW50ZWQuCisgICAgICAgIC8vIFNhbXBsZXMgYXJyaXZpbmcgbGF0ZSwgd2lsbCBoYXZl
IG5lZ2F0aXZlIHZhbHVlcy4KKyAgICAgICAgTE9OR0xPTkcgdGltZURlbHRhID0gcHJlc2VudGF0
aW9uVGltZSAtIHRpbWVOb3c7CisgICAgICAgIGlmIChtX3BsYXliYWNrUmF0ZSA8IDApIHsKKyAg
ICAgICAgICAgIC8vIFJldmVyc2UgZGVsdGEgZm9yIHJldmVyc2UgcGxheWJhY2suCisgICAgICAg
ICAgICB0aW1lRGVsdGEgPSAtdGltZURlbHRhOworICAgICAgICB9CisKKyAgICAgICAgTE9OR0xP
TkcgZnJhbWVEdXJhdGlvbk9uZUZvdXJ0aCA9IG1fZnJhbWVEdXJhdGlvbiAvIDQ7CisKKyAgICAg
ICAgaWYgKHRpbWVEZWx0YSA8IC1mcmFtZUR1cmF0aW9uT25lRm91cnRoKSB7CisgICAgICAgICAg
ICAvLyBUaGUgc2FtcGxlIGhhcyBhcnJpdmVkIGxhdGUuIAorICAgICAgICAgICAgcHJlc2VudE5v
dyA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAodGltZURlbHRhID4gKDMgKiBmcmFtZUR1cmF0
aW9uT25lRm91cnRoKSkgeworICAgICAgICAgICAgLy8gV2UgY2FuIHNsZWVwLCB0aGUgc2FtcGxl
IGhhcyBhcnJpdmVkIHRvbyBlYXJseS4KKyAgICAgICAgICAgIG5leHRTbGVlcFRpbWUgPSBNRlRp
bWVUb01pbGxpc2Vjb25kcyh0aW1lRGVsdGEgLSAoMyAqIGZyYW1lRHVyYXRpb25PbmVGb3VydGgp
KTsKKworICAgICAgICAgICAgLy8gU2luY2Ugc2xlZXBpbmcgaXMgdXNpbmcgdGhlIHN5c3RlbSBj
bG9jaywgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBzbGVlcCB0aW1lCisgICAgICAgICAgICAvLyBm
cm9tIHByZXNlbnRhdGlvbiB0aW1lIHRvIHN5c3RlbSB0aW1lLgorICAgICAgICAgICAgbmV4dFNs
ZWVwVGltZSA9IChMT05HKShuZXh0U2xlZXBUaW1lIC8gZmFic2YobV9wbGF5YmFja1JhdGUpKTsK
KworICAgICAgICAgICAgcHJlc2VudE5vdyA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHByZXNlbnROb3cpCisgICAgICAgIGhyID0gbV9wcmVzZW50ZXItPnByZXNlbnRTYW1w
bGUoc2FtcGxlLCBwcmVzZW50YXRpb25UaW1lKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gUmV0
dXJuIHRoZSBzYW1wbGUgdG8gdGhlIHF1ZXVlLCBzaW5jZSBpdCBpcyBub3QgcmVhZHkuCisgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIG1fc2NoZWR1bGVkU2FtcGxl
cy5wcmVwZW5kKHNhbXBsZSk7CisgICAgfQorCisgICAgbmV4dFNsZWVwID0gbmV4dFNsZWVwVGlt
ZTsKKworICAgIHJldHVybiBocjsKK30KKworRFdPUkQgV0lOQVBJIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OnNjaGVkdWxlclRocmVhZFByb2MoTFBW
T0lEIGxwUGFyYW1ldGVyKQoreworICAgIFZpZGVvU2NoZWR1bGVyKiBzY2hlZHVsZXIgPSByZWlu
dGVycHJldF9jYXN0PFZpZGVvU2NoZWR1bGVyKj4obHBQYXJhbWV0ZXIpOworICAgIGlmICghc2No
ZWR1bGVyKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RFdPUkQ+KC0xKTsKKyAgICByZXR1
cm4gc2NoZWR1bGVyLT5zY2hlZHVsZXJUaHJlYWRQcm9jUHJpdmF0ZSgpOworfQorCitEV09SRCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpzY2hlZHVs
ZXJUaHJlYWRQcm9jUHJpdmF0ZSgpCit7CisgICAgSFJFU1VMVCBociA9IFNfT0s7CisKKyAgICAv
LyBUaGlzIHdpbGwgZm9yY2UgYSBtZXNzYWdlIHF1ZXVlIHRvIGJlIGNyZWF0ZWQgZm9yIHRoZSB0
aHJlYWQuCisgICAgTVNHIG1zZzsKKyAgICBQZWVrTWVzc2FnZSgmbXNnLCBudWxscHRyLCBXTV9V
U0VSLCBXTV9VU0VSLCBQTV9OT1JFTU9WRSk7CisKKyAgICAvLyBUaGUgdGhyZWFkIGlzIHJlYWR5
LgorICAgIFNldEV2ZW50KG1fdGhyZWFkUmVhZHlFdmVudC5nZXQoKSk7CisKKyAgICBMT05HIHdh
aXQgPSBJTkZJTklURTsKKyAgICBib29sIGV4aXRUaHJlYWQgPSBmYWxzZTsKKyAgICB3aGlsZSAo
IWV4aXRUaHJlYWQpIHsKKyAgICAgICAgLy8gV2FpdCBmb3IgbWVzc2FnZXMKKyAgICAgICAgRFdP
UkQgcmVzdWx0ID0gTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0cygwLCBudWxscHRyLCBGQUxTRSwg
d2FpdCwgUVNfUE9TVE1FU1NBR0UpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gV0FJVF9USU1F
T1VUKSB7CisgICAgICAgICAgICBociA9IHByb2Nlc3NTYW1wbGVzSW5RdWV1ZSh3YWl0KTsKKyAg
ICAgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgICAgIGV4aXRUaHJlYWQgPSB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKFBlZWtNZXNzYWdlKCZtc2csIG51bGxw
dHIsIDAsIDAsIFBNX1JFTU9WRSkpIHsKKyAgICAgICAgICAgIGJvb2wgcHJvY2Vzc1NhbXBsZXMg
PSB0cnVlOworCisgICAgICAgICAgICBzd2l0Y2ggKG1zZy5tZXNzYWdlKSB7CisgICAgICAgICAg
ICBjYXNlIEV2ZW50VGVybWluYXRlOgorICAgICAgICAgICAgICAgIGV4aXRUaHJlYWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEV2ZW50Rmx1c2g6
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2so
bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zY2hlZHVsZWRTYW1wbGVzLmNsZWFyKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdhaXQgPSBJTkZJTklURTsKKyAg
ICAgICAgICAgICAgICBTZXRFdmVudChtX2ZsdXNoRXZlbnQuZ2V0KCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEV2ZW50U2NoZWR1bGU6CisgICAgICAgICAg
ICAgICAgaWYgKHByb2Nlc3NTYW1wbGVzKSB7CisgICAgICAgICAgICAgICAgICAgIGhyID0gcHJv
Y2Vzc1NhbXBsZXNJblF1ZXVlKHdhaXQpOworICAgICAgICAgICAgICAgICAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRUaHJlYWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBwcm9jZXNzU2FtcGxlcyA9ICh3YWl0ICE9IElORklOSVRFKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIChTVUNDRUVERUQoaHIpID8gMCA6IDEpOworfQorCitz
dGF0aWMgSFJFU1VMVCBmaW5kQWRhcHRlcihJRGlyZWN0M0Q5KiBkaXJlY3QzRDksIEhNT05JVE9S
IG1vbml0b3IsIFVJTlQmIGFkYXB0ZXJJRCkKK3sKKyAgICBIUkVTVUxUIGhyID0gRV9GQUlMOwor
CisgICAgVUlOVCBhZGFwdGVyQ291bnQgPSBkaXJlY3QzRDktPkdldEFkYXB0ZXJDb3VudCgpOwor
ICAgIGZvciAoVUlOVCBpID0gMDsgaSA8IGFkYXB0ZXJDb3VudDsgaSsrKSB7CisgICAgICAgIEhN
T05JVE9SIG1vbml0b3JUbXAgPSBkaXJlY3QzRDktPkdldEFkYXB0ZXJNb25pdG9yKGkpOworCisg
ICAgICAgIGlmICghbW9uaXRvclRtcCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlm
IChtb25pdG9yVG1wID09IG1vbml0b3IpIHsKKyAgICAgICAgICAgIGFkYXB0ZXJJRCA9IGk7Cisg
ICAgICAgICAgICBociA9IFNfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBocjsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6RGlyZWN0M0RQcmVzZW50ZXIoKQoreworICAgIFNldFJl
Y3RFbXB0eSgmbV9kZXN0UmVjdCk7CisKKyAgICBaZXJvTWVtb3J5KCZtX2Rpc3BsYXlNb2RlLCBz
aXplb2YobV9kaXNwbGF5TW9kZSkpOworCisgICAgSFJFU1VMVCBociA9IGluaXRpYWxpemVEM0Qo
KTsKKworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBjcmVhdGVE
M0REZXZpY2UoKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJl
Y3QzRFByZXNlbnRlcjo6fkRpcmVjdDNEUHJlc2VudGVyKCkKK3sKK30KKworSFJFU1VMVCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpnZXRTZXJ2
aWNlKFJFRkdVSUQgZ3VpZFNlcnZpY2UsIFJFRklJRCByaWlkLCB2b2lkKiogcHB2KQoreworICAg
IEFTU0VSVChwcHYpOworCisgICAgSFJFU1VMVCBociA9IFNfT0s7CisKKyAgICBpZiAocmlpZCA9
PSBfX3V1aWRvZihJRGlyZWN0M0REZXZpY2VNYW5hZ2VyOSkpIHsKKyAgICAgICAgaWYgKCFtX2Rl
dmljZU1hbmFnZXIpCisgICAgICAgICAgICBociA9IE1GX0VfVU5TVVBQT1JURURfU0VSVklDRTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAqcHB2ID0gbV9kZXZpY2VNYW5hZ2VyLmdldCgp
OworICAgICAgICAgICAgbV9kZXZpY2VNYW5hZ2VyLT5BZGRSZWYoKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZQorICAgICAgICBociA9IE1GX0VfVU5TVVBQT1JURURfU0VSVklDRTsKKworICAgIHJl
dHVybiBocjsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OkRpcmVjdDNEUHJlc2VudGVyOjpjaGVja0Zvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQoreworICAg
IEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgVUlOVCBhZGFwdGVyID0gRDNEQURBUFRFUl9ERUZB
VUxUOworICAgIEQzRERFVlRZUEUgdHlwZSA9IEQzRERFVlRZUEVfSEFMOworCisgICAgaWYgKG1f
ZGV2aWNlKSB7CisgICAgICAgIEQzRERFVklDRV9DUkVBVElPTl9QQVJBTUVURVJTIHBhcmFtczsK
KyAgICAgICAgaHIgPSBtX2RldmljZS0+R2V0Q3JlYXRpb25QYXJhbWV0ZXJzKCZwYXJhbXMpOwor
ICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBocjsKKworICAgICAg
ICBhZGFwdGVyID0gcGFyYW1zLkFkYXB0ZXJPcmRpbmFsOworICAgICAgICB0eXBlID0gcGFyYW1z
LkRldmljZVR5cGU7CisgICAgfQorCisgICAgRDNERElTUExBWU1PREUgbW9kZTsKKyAgICBociA9
IG1fZGlyZWN0M0Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUoYWRhcHRlciwgJm1vZGUpOworICAg
IGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICByZXR1cm4gbV9kaXJl
Y3QzRDktPkNoZWNrRGV2aWNlVHlwZShhZGFwdGVyLCB0eXBlLCBtb2RlLkZvcm1hdCwgZm9ybWF0
LCBUUlVFKTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OkRpcmVjdDNEUHJlc2VudGVyOjpzZXRWaWRlb1dpbmRvdyhIV05EIGh3bmQpCit7CisgICAgQVNT
RVJUKElzV2luZG93KGh3bmQpKTsKKyAgICBBU1NFUlQoaHduZCAhPSBtX2h3bmQpOworCisgICAg
eworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICBtX2h3bmQgPSBo
d25kOworICAgICAgICB1cGRhdGVEZXN0UmVjdCgpOworICAgIH0KKworICAgIHJldHVybiBjcmVh
dGVEM0REZXZpY2UoKTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpzZXREZXN0aW5hdGlvblJlY3QoY29uc3QgUkVDVCYg
cmNEZXN0KQoreworICAgIGlmIChFcXVhbFJlY3QoJnJjRGVzdCwgJm1fZGVzdFJlY3QpKQorICAg
ICAgICByZXR1cm4gU19PSzsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAg
ICBtX2Rlc3RSZWN0ID0gcmNEZXN0OworICAgIHVwZGF0ZURlc3RSZWN0KCk7CisKKyAgICByZXR1
cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OkRpcmVjdDNEUHJlc2VudGVyOjpjcmVhdGVWaWRlb1NhbXBsZXMoSU1GTWVkaWFUeXBlKiBmb3Jt
YXQsIFZpZGVvU2FtcGxlTGlzdCYgdmlkZW9TYW1wbGVRdWV1ZSkKK3sKKyAgICAvLyBDcmVhdGUg
dmlkZW8gc2FtcGxlcyBtYXRjaGluZyB0aGUgc3VwcGxpZWQgZm9ybWF0LgorICAgIC8vIEEgc3dh
cCBjaGFpbiB3aXRoIGEgc2luZ2xlIGJhY2sgYnVmZmVyIHdpbGwgYmUgY3JlYXRlZCBmb3IgZWFj
aCB2aWRlbyBzYW1wbGUuCisgICAgLy8gVGhlIG1peGVyIHdpbGwgcmVuZGVyIHRvIHRoZSBiYWNr
IGJ1ZmZlciB0aHJvdWdoIGEgc3VyZmFjZSBrZXB0IGJ5IHRoZSBzYW1wbGUuCisgICAgLy8gVGhl
IHN1cmZhY2UgY2FuIGJlIHJlbmRlcmVkIHRvIGEgd2luZG93IGJ5IHByZXNlbnRpbmcgdGhlIHN3
YXAgY2hhaW4uCisgICAgLy8gSW4gb3VyIGNhc2UgdGhlIHN1cmZhY2UgaXMgdHJhbnNmZXJyZWQg
dG8gc3lzdGVtIG1lbW9yeSwgYW5kIHJlbmRlcmVkIHRvIGEgZ3JhcGhpY3MgY29udGV4dC4KKwor
ICAgIGlmICghbV9od25kKQorICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElEUkVRVUVTVDsKKwor
ICAgIGlmICghZm9ybWF0KQorICAgICAgICByZXR1cm4gTUZfRV9VTkVYUEVDVEVEOworCisKKyAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgcmVsZWFzZVJlc291cmNlcygpOwor
CisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzOworICAgIEhSRVNV
TFQgaHIgPSBnZXRTd2FwQ2hhaW5QcmVzZW50UGFyYW1ldGVycyhmb3JtYXQsICZwcmVzZW50UGFy
YW1ldGVycyk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgcmVsZWFzZVJlc291cmNl
cygpOworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgdXBkYXRlRGVzdFJlY3QoKTsK
KworICAgIHN0YXRpYyBjb25zdCBpbnQgcHJlc2VudGVyQnVmZmVyQ291bnQgPSAzOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBwcmVzZW50ZXJCdWZmZXJDb3VudDsgaSsrKSB7CisgICAgICAg
IENPTVB0cjxJRGlyZWN0M0RTd2FwQ2hhaW45PiBzd2FwQ2hhaW47CisgICAgICAgIGhyID0gbV9k
ZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmc3dh
cENoYWluKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAgIHJlbGVhc2VS
ZXNvdXJjZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQorCisgICAgICAg
IENPTVB0cjxJTUZTYW1wbGU+IHZpZGVvU2FtcGxlOworICAgICAgICBociA9IGNyZWF0ZUQzRFNh
bXBsZShzd2FwQ2hhaW4uZ2V0KCksIHZpZGVvU2FtcGxlKTsKKyAgICAgICAgaWYgKEZBSUxFRCho
cikpIHsKKyAgICAgICAgICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgIHJldHVy
biBocjsKKyAgICAgICAgfQorCisgICAgICAgIHZpZGVvU2FtcGxlUXVldWUuYXBwZW5kKHZpZGVv
U2FtcGxlKTsKKworICAgICAgICAvLyBLZWVwIHRoZSBzd2FwIGNoYWluIGFsaXZlIGJ5IHNldHRp
bmcgaXQgYXMgYSBjdXN0b20gYXR0cmlidXRlIG9uIHRoZSBzYW1wbGUuCisgICAgICAgIGhyID0g
dmlkZW9TYW1wbGUtPlNldFVua25vd24oTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVTd2FwQ2hhaW4s
IHN3YXBDaGFpbi5nZXQoKSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAg
ICByZWxlYXNlUmVzb3VyY2VzKCk7CisgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6cmVsZWFzZVJlc291cmNlcygpCit7Cisg
ICAgbV9zdXJmYWNlUmVwYWludCA9IG51bGxwdHI7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6Y2hlY2tEZXZpY2VTdGF0
ZShEZXZpY2VTdGF0ZSYgc3RhdGUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsK
KworICAgIEhSRVNVTFQgaHIgPSBtX2RldmljZS0+Q2hlY2tEZXZpY2VTdGF0ZShtX2h3bmQpOwor
CisgICAgc3RhdGUgPSBEZXZpY2VPSzsKKworICAgIC8vIE5vdCBhbGwgZmFpbHVyZSBjb2RlcyBh
cmUgY3JpdGljYWwuCisKKyAgICBzd2l0Y2ggKGhyKSB7CisgICAgY2FzZSBTX09LOgorICAgIGNh
c2UgU19QUkVTRU5UX09DQ0xVREVEOgorICAgIGNhc2UgU19QUkVTRU5UX01PREVfQ0hBTkdFRDoK
KyAgICAgICAgaHIgPSBTX09LOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRDNERVJSX0RF
VklDRUxPU1Q6CisgICAgY2FzZSBEM0RFUlJfREVWSUNFSFVORzoKKyAgICAgICAgaHIgPSBjcmVh
dGVEM0REZXZpY2UoKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1
cm4gaHI7CisgICAgICAgIHN0YXRlID0gRGV2aWNlUmVzZXQ7CisgICAgICAgIGhyID0gU19PSzsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEQzREVSUl9ERVZJQ0VSRU1PVkVEOgorICAgICAg
ICBzdGF0ZSA9IERldmljZVJlbW92ZWQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFX0lO
VkFMSURBUkc6CisgICAgICAgIC8vIFRoaXMgbWlnaHQgaGFwcGVuIGlmIHRoZSB3aW5kb3cgaGFz
IGJlZW4gZGVzdHJveWVkLCBvciBpcyBub3QgdmFsaWQuCisgICAgICAgIC8vIEEgbmV3IGRldmlj
ZSB3aWxsIGJlIGNyZWF0ZWQgaWYgYSBuZXcgd2luZG93IGlzIHNldC4KKyAgICAgICAgaHIgPSBT
X09LOworICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpwcmVzZW50U2FtcGxlKElN
RlNhbXBsZSogc2FtcGxlLCBMT05HTE9ORyB0YXJnZXRQcmVzZW50YXRpb25UaW1lKQoreworICAg
IEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKwor
ICAgIENPTVB0cjxJRGlyZWN0M0RTdXJmYWNlOT4gc3VyZmFjZTsKKworICAgIGlmIChzYW1wbGUp
IHsKKyAgICAgICAgQ09NUHRyPElNRk1lZGlhQnVmZmVyPiBidWZmZXI7CisgICAgICAgIGhyID0g
c2FtcGxlLT5HZXRCdWZmZXJCeUluZGV4KDAsICZidWZmZXIpOworICAgICAgICBociA9IE1GR2V0
U2VydmljZVB0cigpKGJ1ZmZlci5nZXQoKSwgTVJfQlVGRkVSX1NFUlZJQ0UsIF9fdXVpZG9mKElE
aXJlY3QzRFN1cmZhY2U5KSwgKHZvaWQqKikmc3VyZmFjZSk7CisgICAgfSBlbHNlIGlmIChtX3N1
cmZhY2VSZXBhaW50KSB7CisgICAgICAgIC8vIFVzZSB0aGUgbGFzdCBzdXJmYWNlLgorICAgICAg
ICBzdXJmYWNlID0gbV9zdXJmYWNlUmVwYWludDsKKyAgICB9CisKKyAgICBpZiAoc3VyZmFjZSkg
eworICAgICAgICBVSU5UIHdpZHRoID0gbV9kZXN0UmVjdC5yaWdodCAtIG1fZGVzdFJlY3QubGVm
dDsKKyAgICAgICAgVUlOVCBoZWlnaHQgPSBtX2Rlc3RSZWN0LmJvdHRvbSAtIG1fZGVzdFJlY3Qu
dG9wOworCisgICAgICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgeworICAgICAgICAg
ICAgaWYgKCFtX21lbVN1cmZhY2UgfHwgbV93aWR0aCAhPSB3aWR0aCB8fCBtX2hlaWdodCAhPSBo
ZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBociA9IG1fZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5Q
bGFpblN1cmZhY2Uod2lkdGgsIGhlaWdodCwgRDNERk1UX0E4UjhHOEI4LCBEM0RQT09MX1NZU1RF
TU1FTSwgJm1fbWVtU3VyZmFjZSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgbV93aWR0aCA9
IHdpZHRoOworICAgICAgICAgICAgICAgIG1faGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gQ29weSBkYXRhIGZyb20gdmlkZW8gbWVtb3J5IHRvIHN5c3RlbSBt
ZW1vcnkKKyAgICAgICAgICAgIGhyID0gbV9kZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEoc3Vy
ZmFjZS5nZXQoKSwgbV9tZW1TdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQo
aHIpKSB7CisgICAgICAgICAgICAgICAgbV9tZW1TdXJmYWNlID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICBociA9IFNfT0s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBTaW5jZSB3ZSB3YW50IHRvIGRyYXcgdG8gdGhlIEdyYXBoaWNzQ29udGV4dCBwcm92aWRlZCBp
biB0aGUgcGFpbnQgbWV0aG9kLAorICAgICAgICAvLyBhbmQgbm90IGRyYXcgZGlyZWN0bHkgdG8g
dGhlIHdpbmRvdywgd2Ugc2tpcCBwcmVzZW50aW5nIHRoZSBzd2FwIGNoYWluOgorCisgICAgICAg
IC8vIENPTVB0cjxJRGlyZWN0M0RTd2FwQ2hhaW45PiBzd2FwQ2hhaW47CisgICAgICAgIC8vIGhy
ID0gc3VyZmFjZS0+R2V0Q29udGFpbmVyKF9fdXVpZG9mKElEaXJlY3QzRFN3YXBDaGFpbjkpLCAo
TFBWT0lEKikmc3dhcENoYWluKSk7CisgICAgICAgIC8vIGhyID0gcHJlc2VudFN3YXBDaGFpbihz
d2FwQ2hhaW4sIHN1cmZhY2UpKTsKKworICAgICAgICAvLyBLZWVwIHRoZSBsYXN0IHN1cmZhY2Ug
Zm9yIHJlcGFpbnRzLgorICAgICAgICBtX3N1cmZhY2VSZXBhaW50ID0gc3VyZmFjZTsKKyAgICB9
CisKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBpZiAoaHIgPT0gRDNERVJSX0RFVklD
RUxPU1QgfHwgaHIgPT0gRDNERVJSX0RFVklDRU5PVFJFU0VUIHx8IGhyID09IEQzREVSUl9ERVZJ
Q0VIVU5HKSB7CisgICAgICAgICAgICAvLyBJZ25vcmUgdGhpcyBlcnJvci4gV2UgaGF2ZSB0byBy
ZXNldCBvciByZWNyZWF0ZSB0aGUgZGV2aWNlLgorICAgICAgICAgICAgLy8gVGhlIHByZXNlbnRl
ciB3aWxsIGhhbmRsZSB0aGlzIHdoZW4gY2hlY2tpbmcgdGhlIGRldmljZSBzdGF0ZSB0aGUgbmV4
dCB0aW1lLgorICAgICAgICAgICAgaHIgPSBTX09LOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBocjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRp
cmVjdDNEUHJlc2VudGVyOjpwYWludEN1cnJlbnRGcmFtZShXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcikKK3sKKyAgICBVSU5UIHdp
ZHRoID0gbV9kZXN0UmVjdC5yaWdodCAtIG1fZGVzdFJlY3QubGVmdDsKKyAgICBVSU5UIGhlaWdo
dCA9IG1fZGVzdFJlY3QuYm90dG9tIC0gbV9kZXN0UmVjdC50b3A7CisKKyAgICBpZiAoIXdpZHRo
IHx8ICFoZWlnaHQpCisgICAgICAgIHJldHVybjsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
bG9jayk7CisKKyAgICBpZiAoIW1fbWVtU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
RDNETE9DS0VEX1JFQ1QgbG9ja2VkUmVjdDsKKyAgICBpZiAoU1VDQ0VFREVEKG1fbWVtU3VyZmFj
ZS0+TG9ja1JlY3QoJmxvY2tlZFJlY3QsIG51bGxwdHIsIEQzRExPQ0tfUkVBRE9OTFkpKSkgewor
ICAgICAgICB2b2lkKiBkYXRhID0gbG9ja2VkUmVjdC5wQml0czsKKyAgICAgICAgaW50IHBpdGNo
ID0gbG9ja2VkUmVjdC5QaXRjaDsKKyNpZiBVU0UoQ0FJUk8pCisgICAgICAgIFdlYkNvcmU6OlBs
YXRmb3JtQ29udGV4dENhaXJvKiBjdHh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAg
ICAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgQ0FJUk9fRk9STUFU
X0FSR0IzMiwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpOworICAgICAgICBXZWJDb3JlOjpGbG9hdFJl
Y3QgY2xpcCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IHJlY3QgPSByOworICAgICAgICByZWN0LmludGVyc2VjdChjbGlwKTsKKyAgICAgICAgY3R4dC0+
ZHJhd1N1cmZhY2VUb0NvbnRleHQoaW1hZ2UsIHJlY3QsIHJlY3QsIGNvbnRleHQpOworICAgICAg
ICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOworI2Vsc2UKKyNlcnJvciAiUGxhdGZvcm0g
bmVlZHMgdG8gaW1wbGVtZW50IGRyYXdpbmcgb2YgRGlyZWN0M0Qgc3VyZmFjZSB0byBncmFwaGlj
cyBjb250ZXh0ISIKKyNlbmRpZgorICAgICAgICBtX21lbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsK
KyAgICB9Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpE
aXJlY3QzRFByZXNlbnRlcjo6aW5pdGlhbGl6ZUQzRCgpCit7CisgICAgQVNTRVJUKCFtX2RpcmVj
dDNEOSk7CisgICAgQVNTRVJUKCFtX2RldmljZU1hbmFnZXIpOworCisgICAgSFJFU1VMVCBociA9
IERpcmVjdDNEQ3JlYXRlOUV4UHRyKCkoRDNEX1NES19WRVJTSU9OLCAmbV9kaXJlY3QzRDkpOwor
ICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICByZXR1cm4gRFhW
QTJDcmVhdGVEaXJlY3QzRERldmljZU1hbmFnZXI5UHRyKCkoJm1fZGV2aWNlUmVzZXRUb2tlbiwg
Jm1fZGV2aWNlTWFuYWdlcik7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6Y3JlYXRlRDNERGV2aWNlKCkKK3sKKyAgICBI
UkVTVUxUIGhyID0gU19PSzsKKyAgICBVSU5UIGFkYXB0ZXJJRCA9IEQzREFEQVBURVJfREVGQVVM
VDsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBpZiAoIW1fZGlyZWN0
M0Q5IHx8ICFtX2RldmljZU1hbmFnZXIpCisgICAgICAgIHJldHVybiBNRl9FX05PVF9JTklUSUFM
SVpFRDsKKworICAgIEhXTkQgaHduZCA9IEdldERlc2t0b3BXaW5kb3coKTsKKworICAgIC8vIFdl
IGNyZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zIHRvIHByZXNlbnQgdGhlIHZpZGVvIGZyYW1l
cywKKyAgICAvLyBhbmQgZG8gbm90IHVzZSB0aGUgaW1wbGljaXQgc3dhcCBjaGFpbiBvZiB0aGUg
ZGV2aWNlLgorICAgIC8vIFRoZSBzaXplIG9mIHRoZSBiYWNrIGJ1ZmZlciBpcyAxIHggMS4KKwor
ICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcDsKKyAgICBaZXJvTWVtb3J5KCZwcCwgc2l6ZW9m
KHBwKSk7CisKKyAgICBwcC5CYWNrQnVmZmVyV2lkdGggPSAxOworICAgIHBwLkJhY2tCdWZmZXJI
ZWlnaHQgPSAxOworICAgIHBwLldpbmRvd2VkID0gVFJVRTsKKyAgICBwcC5Td2FwRWZmZWN0ID0g
RDNEU1dBUEVGRkVDVF9DT1BZOworICAgIHBwLkJhY2tCdWZmZXJGb3JtYXQgPSBEM0RGTVRfVU5L
Tk9XTjsKKyAgICBwcC5oRGV2aWNlV2luZG93ID0gaHduZDsKKyAgICBwcC5GbGFncyA9IEQzRFBS
RVNFTlRGTEFHX1ZJREVPOworICAgIHBwLlByZXNlbnRhdGlvbkludGVydmFsID0gRDNEUFJFU0VO
VF9JTlRFUlZBTF9ERUZBVUxUOworCisgICAgaWYgKG1faHduZCkgeworICAgICAgICBITU9OSVRP
UiBtb25pdG9yID0gTW9uaXRvckZyb21XaW5kb3cobV9od25kLCBNT05JVE9SX0RFRkFVTFRUT05F
QVJFU1QpOworCisgICAgICAgIGhyID0gZmluZEFkYXB0ZXIobV9kaXJlY3QzRDkuZ2V0KCksIG1v
bml0b3IsIGFkYXB0ZXJJRCk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAg
cmV0dXJuIGhyOworICAgIH0KKworICAgIEQzRENBUFM5IGRkQ2FwczsKKyAgICBaZXJvTWVtb3J5
KCZkZENhcHMsIHNpemVvZihkZENhcHMpKTsKKworICAgIGhyID0gbV9kaXJlY3QzRDktPkdldERl
dmljZUNhcHMoYWRhcHRlcklELCBEM0RERVZUWVBFX0hBTCwgJmRkQ2Fwcyk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIERXT1JEIGZsYWdzID0gRDNEQ1JF
QVRFX05PV0lORE9XQ0hBTkdFUyB8IEQzRENSRUFURV9NVUxUSVRIUkVBREVEIHwgRDNEQ1JFQVRF
X0ZQVV9QUkVTRVJWRTsKKworICAgIGlmIChkZENhcHMuRGV2Q2FwcyAmIEQzRERFVkNBUFNfSFdU
UkFOU0ZPUk1BTkRMSUdIVCkKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ1JFQVRFX0hBUkRXQVJFX1ZF
UlRFWFBST0NFU1NJTkc7CisgICAgZWxzZQorICAgICAgICBmbGFncyB8PSBEM0RDUkVBVEVfU09G
VFdBUkVfVkVSVEVYUFJPQ0VTU0lORzsKKworICAgIENPTVB0cjxJRGlyZWN0M0REZXZpY2U5RXg+
IGRldmljZTsKKyAgICBociA9IG1fZGlyZWN0M0Q5LT5DcmVhdGVEZXZpY2VFeCgKKyAgICAgICAg
YWRhcHRlcklELAorICAgICAgICBEM0RERVZUWVBFX0hBTCwKKyAgICAgICAgcHAuaERldmljZVdp
bmRvdywKKyAgICAgICAgZmxhZ3MsCisgICAgICAgICZwcCwKKyAgICAgICAgbnVsbHB0ciwKKyAg
ICAgICAgJmRldmljZQorICAgICAgICApOworCisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
IHJldHVybiBocjsKKworICAgIGhyID0gbV9kaXJlY3QzRDktPkdldEFkYXB0ZXJEaXNwbGF5TW9k
ZShhZGFwdGVySUQsICZtX2Rpc3BsYXlNb2RlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBtX2RldmljZU1hbmFnZXItPlJlc2V0RGV2aWNlKGRl
dmljZS5nZXQoKSwgbV9kZXZpY2VSZXNldFRva2VuKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAg
ICAgICAgcmV0dXJuIGhyOworCisgICAgbV9kZXZpY2UgPSBkZXZpY2U7CisKKyAgICByZXR1cm4g
aHI7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJl
Y3QzRFByZXNlbnRlcjo6Y3JlYXRlRDNEU2FtcGxlKElEaXJlY3QzRFN3YXBDaGFpbjkqIHN3YXBD
aGFpbiwgQ09NUHRyPElNRlNhbXBsZT4mIHZpZGVvU2FtcGxlKQoreworICAgIENPTVB0cjxJRGly
ZWN0M0RTdXJmYWNlOT4gc3VyZmFjZTsKKyAgICBIUkVTVUxUIGhyID0gc3dhcENoYWluLT5HZXRC
YWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmc3VyZmFjZSk7CisgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIEQzRENPTE9SIGNvbG9yQmxh
Y2sgPSBEM0RDT0xPUl9BUkdCKDB4RkYsIDB4MDAsIDB4MDAsIDB4MDApOworICAgIGhyID0gbV9k
ZXZpY2UtPkNvbG9yRmlsbChzdXJmYWNlLmdldCgpLCBudWxscHRyLCBjb2xvckJsYWNrKTsKKyAg
ICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgcmV0dXJuIE1GQ3Jl
YXRlVmlkZW9TYW1wbGVGcm9tU3VyZmFjZVB0cigpKHN1cmZhY2UuZ2V0KCksICZ2aWRlb1NhbXBs
ZSk7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJl
Y3QzRFByZXNlbnRlcjo6cHJlc2VudFN3YXBDaGFpbihJRGlyZWN0M0RTd2FwQ2hhaW45KiBzd2Fw
Q2hhaW4sIElEaXJlY3QzRFN1cmZhY2U5KiBzdXJmYWNlKQoreworICAgIGlmICghbV9od25kKQor
ICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElEUkVRVUVTVDsKKworICAgIHJldHVybiBzd2FwQ2hh
aW4tPlByZXNlbnQobnVsbHB0ciwgJm1fZGVzdFJlY3QsIG1faHduZCwgbnVsbHB0ciwgMCk7Cit9
CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFBy
ZXNlbnRlcjo6Z2V0U3dhcENoYWluUHJlc2VudFBhcmFtZXRlcnMoSU1GTWVkaWFUeXBlKiB0eXBl
LCBEM0RQUkVTRU5UX1BBUkFNRVRFUlMqIHByZXNlbnRQYXJhbXMpCit7CisgICAgaWYgKCFtX2h3
bmQpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURSRVFVRVNUOworCisgICAgVmlkZW9UeXBl
IHZpZGVvVHlwZSh0eXBlKTsKKworICAgIFVJTlQzMiB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Cisg
ICAgSFJFU1VMVCBociA9IHZpZGVvVHlwZS5HZXRGcmFtZURpbWVuc2lvbnMoJndpZHRoLCAmaGVp
Z2h0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgRFdP
UkQgZDNkRm9ybWF0ID0gMDsKKyAgICBociA9IHZpZGVvVHlwZS5HZXRGb3VyQ0MoJmQzZEZvcm1h
dCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIFplcm9N
ZW1vcnkocHJlc2VudFBhcmFtcywgc2l6ZW9mKEQzRFBSRVNFTlRfUEFSQU1FVEVSUykpOworICAg
IHByZXNlbnRQYXJhbXMtPkJhY2tCdWZmZXJXaWR0aCA9IHdpZHRoOworICAgIHByZXNlbnRQYXJh
bXMtPkJhY2tCdWZmZXJIZWlnaHQgPSBoZWlnaHQ7CisgICAgcHJlc2VudFBhcmFtcy0+V2luZG93
ZWQgPSBUUlVFOworICAgIHByZXNlbnRQYXJhbXMtPlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNU
X0NPUFk7CisgICAgcHJlc2VudFBhcmFtcy0+QmFja0J1ZmZlckZvcm1hdCA9IChEM0RGT1JNQVQp
ZDNkRm9ybWF0OworICAgIHByZXNlbnRQYXJhbXMtPmhEZXZpY2VXaW5kb3cgPSBtX2h3bmQ7Cisg
ICAgcHJlc2VudFBhcmFtcy0+RmxhZ3MgPSBEM0RQUkVTRU5URkxBR19WSURFTzsKKyAgICBwcmVz
ZW50UGFyYW1zLT5QcmVzZW50YXRpb25JbnRlcnZhbCA9IEQzRFBSRVNFTlRfSU5URVJWQUxfREVG
QVVMVDsKKworICAgIEQzRERFVklDRV9DUkVBVElPTl9QQVJBTUVURVJTIHBhcmFtczsKKyAgICBo
ciA9IG1fZGV2aWNlLT5HZXRDcmVhdGlvblBhcmFtZXRlcnMoJnBhcmFtcyk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGlmIChwYXJhbXMuRGV2aWNlVHlw
ZSAhPSBEM0RERVZUWVBFX0hBTCkKKyAgICAgICAgcHJlc2VudFBhcmFtcy0+RmxhZ3MgfD0gRDNE
UFJFU0VOVEZMQUdfTE9DS0FCTEVfQkFDS0JVRkZFUjsKKworICAgIHJldHVybiBTX09LOworfQor
CitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVz
ZW50ZXI6OnVwZGF0ZURlc3RSZWN0KCkKK3sKKyAgICBpZiAoIW1faHduZCkKKyAgICAgICAgcmV0
dXJuIFNfRkFMU0U7CisKKyAgICBSRUNUIHJjVmlldzsKKyAgICBHZXRDbGllbnRSZWN0KG1faHdu
ZCwgJnJjVmlldyk7CisKKyAgICAvLyBDbGlwIHRvIHRoZSBjbGllbnQgYXJlYSBvZiB0aGUgd2lu
ZG93LgorICAgIGlmIChtX2Rlc3RSZWN0LnJpZ2h0ID4gcmNWaWV3LnJpZ2h0KQorICAgICAgICBt
X2Rlc3RSZWN0LnJpZ2h0ID0gcmNWaWV3LnJpZ2h0OworCisgICAgaWYgKG1fZGVzdFJlY3QuYm90
dG9tID4gcmNWaWV3LmJvdHRvbSkKKyAgICAgICAgbV9kZXN0UmVjdC5ib3R0b20gPSByY1ZpZXcu
Ym90dG9tOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbi5oCShyZXZpc2lvbiAxOTIxNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDEzICsyNCwyNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWZuZGVmIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbl9oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbl9oCisKICNpbmNsdWRlICJDT01QdHIuaCIKKyNpbmNsdWRlICJN
ZWRpYUZvdW5kYXRpb25VdGlscy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldpbjMySGFuZGxlLmgiCisKKyNpbmNsdWRlIDxEM0Q5Lmg+CisjaW5jbHVkZSA8
RHh2YTJhcGkuaD4KIAogI2luY2x1ZGUgPE1mYXBpLmg+CisjaW5jbHVkZSA8TWZlcnJvci5oPgog
I2luY2x1ZGUgPE1maWRsLmg+CisjaW5jbHVkZSA8ZXZjb2RlLmg+CiAjaW5jbHVkZSA8ZXZyLmg+
CiAKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
QEAgLTExOCw2ICsxMjksOCBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlVmlkZW9XaW5kb3co
KTsKICAgICB2b2lkIGRlc3Ryb3lWaWRlb1dpbmRvdygpOwogCisgICAgdm9pZCBpbnZhbGlkYXRl
RnJhbWVWaWV3KCk7CisKICAgICB2b2lkIGFkZExpc3RlbmVyKE1lZGlhUGxheWVyTGlzdGVuZXIq
KTsKICAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKE1lZGlhUGxheWVyTGlzdGVuZXIqKTsKICAgICB2
b2lkIG5vdGlmeURlbGV0ZWQoKTsKQEAgLTE1Myw2ICsxNjYsMjg4IEBAIHByaXZhdGU6CiAgICAg
ICAgIExvY2sgbV9tdXRleDsKICAgICB9OwogCisgICAgdHlwZWRlZiBEZXF1ZTxDT01QdHI8SU1G
U2FtcGxlPj4gVmlkZW9TYW1wbGVMaXN0OworCisgICAgY2xhc3MgVmlkZW9TYW1wbGVQb29sIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFZpZGVvU2FtcGxlUG9vbCgpIHsgfQorICAgICAgICB2aXJ0
dWFsIH5WaWRlb1NhbXBsZVBvb2woKSB7IH0KKworICAgICAgICBIUkVTVUxUIGluaXRpYWxpemUo
VmlkZW9TYW1wbGVMaXN0JiBzYW1wbGVzKTsKKyAgICAgICAgdm9pZCBjbGVhcigpOworCisgICAg
ICAgIEhSRVNVTFQgZ2V0U2FtcGxlKENPTVB0cjxJTUZTYW1wbGU+Jik7CisgICAgICAgIEhSRVNV
TFQgcmV0dXJuU2FtcGxlKElNRlNhbXBsZSopOworICAgICAgICBib29sIGFyZVNhbXBsZXNQZW5k
aW5nKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBMb2NrIG1fbG9jazsKKyAgICAgICAgVmlk
ZW9TYW1wbGVMaXN0IG1fdmlkZW9TYW1wbGVRdWV1ZTsKKyAgICAgICAgYm9vbCBtX2luaXRpYWxp
emVkIHsgZmFsc2UgfTsKKyAgICAgICAgdW5zaWduZWQgbV9wZW5kaW5nIHsgMCB9OworICAgIH07
CisKKyAgICBjbGFzcyBEaXJlY3QzRFByZXNlbnRlcjsKKworICAgIGNsYXNzIFZpZGVvU2NoZWR1
bGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZpZGVvU2NoZWR1bGVyKCkgeyB9CisgICAgICAg
IHZpcnR1YWwgflZpZGVvU2NoZWR1bGVyKCkgeyB9CisKKyAgICAgICAgdm9pZCBzZXRQcmVzZW50
ZXIoRGlyZWN0M0RQcmVzZW50ZXIqIHByZXNlbnRlcikgeyBtX3ByZXNlbnRlciA9IHByZXNlbnRl
cjsgfQorCisgICAgICAgIHZvaWQgc2V0RnJhbWVSYXRlKGNvbnN0IE1GUmF0aW8mIGZwcyk7Cisg
ICAgICAgIHZvaWQgc2V0Q2xvY2tSYXRlKGZsb2F0IHJhdGUpIHsgbV9wbGF5YmFja1JhdGUgPSBy
YXRlOyB9CisKKyAgICAgICAgY29uc3QgTE9OR0xPTkcmIGxhc3RTYW1wbGVUaW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXN0U2FtcGxlVGltZTsgfQorICAgICAgICBjb25zdCBMT05HTE9ORyYgZnJh
bWVEdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVEdXJhdGlvbjsgfQorCisgICAgICAg
IEhSRVNVTFQgc3RhcnRTY2hlZHVsZXIoSU1GQ2xvY2sqKTsKKyAgICAgICAgSFJFU1VMVCBzdG9w
U2NoZWR1bGVyKCk7CisKKyAgICAgICAgSFJFU1VMVCBzY2hlZHVsZVNhbXBsZShJTUZTYW1wbGUq
LCBib29sIHByZXNlbnROb3cpOworICAgICAgICBIUkVTVUxUIHByb2Nlc3NTYW1wbGVzSW5RdWV1
ZShMT05HJiBuZXh0U2xlZXApOworICAgICAgICBIUkVTVUxUIHByb2Nlc3NTYW1wbGUoSU1GU2Ft
cGxlKiwgTE9ORyYgbmV4dFNsZWVwKTsKKyAgICAgICAgSFJFU1VMVCBmbHVzaCgpOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgc3RhdGljIERXT1JEIFdJTkFQSSBzY2hlZHVsZXJUaHJlYWRQcm9j
KExQVk9JRCBscFBhcmFtZXRlcik7CisgICAgICAgIERXT1JEIHNjaGVkdWxlclRocmVhZFByb2NQ
cml2YXRlKCk7CisKKyAgICAgICAgRGVxdWU8Q09NUHRyPElNRlNhbXBsZT4+IG1fc2NoZWR1bGVk
U2FtcGxlczsKKyAgICAgICAgTG9jayBtX2xvY2s7CisKKyAgICAgICAgQ09NUHRyPElNRkNsb2Nr
PiBtX2Nsb2NrOworICAgICAgICBEaXJlY3QzRFByZXNlbnRlciogbV9wcmVzZW50ZXIgeyBudWxs
cHRyIH07CisKKyAgICAgICAgRFdPUkQgbV90aHJlYWRJRCB7IDAgfTsKKyAgICAgICAgV2luMzJI
YW5kbGUgbV9zY2hlZHVsZXJUaHJlYWQ7CisgICAgICAgIFdpbjMySGFuZGxlIG1fdGhyZWFkUmVh
ZHlFdmVudDsKKyAgICAgICAgV2luMzJIYW5kbGUgbV9mbHVzaEV2ZW50OworCisgICAgICAgIGZs
b2F0IG1fcGxheWJhY2tSYXRlIHsgMS4wZiB9OworICAgICAgICBNRlRJTUUgbV9mcmFtZUR1cmF0
aW9uIHsgMCB9OworICAgICAgICBNRlRJTUUgbV9sYXN0U2FtcGxlVGltZSB7IDAgfTsKKyAgICB9
OworCisgICAgY2xhc3MgRGlyZWN0M0RQcmVzZW50ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
RGlyZWN0M0RQcmVzZW50ZXIoKTsKKyAgICAgICAgfkRpcmVjdDNEUHJlc2VudGVyKCk7CisKKyAg
ICAgICAgZW51bSBEZXZpY2VTdGF0ZSB7CisgICAgICAgICAgICBEZXZpY2VPSywKKyAgICAgICAg
ICAgIERldmljZVJlc2V0LAorICAgICAgICAgICAgRGV2aWNlUmVtb3ZlZCwKKyAgICAgICAgfTsK
KworICAgICAgICAvLyBSZXR1cm5zIHRoZSBJRGlyZWN0M0REZXZpY2VNYW5hZ2VyOSBpbnRlcmZh
Y2UuCisgICAgICAgIEhSRVNVTFQgZ2V0U2VydmljZShSRUZHVUlEIGd1aWRTZXJ2aWNlLCBSRUZJ
SUQgcmlpZCwgdm9pZCoqIHBwdik7CisKKyAgICAgICAgSFJFU1VMVCBjaGVja0Zvcm1hdChEM0RG
T1JNQVQpOworCisgICAgICAgIEhSRVNVTFQgc2V0VmlkZW9XaW5kb3coSFdORCk7CisgICAgICAg
IEhXTkQgZ2V0VmlkZW9XaW5kb3coKSBjb25zdCB7IHJldHVybiBtX2h3bmQ7IH0KKyAgICAgICAg
SFJFU1VMVCBzZXREZXN0aW5hdGlvblJlY3QoY29uc3QgUkVDVCYgZGVzdFJlY3QpOworICAgICAg
ICBSRUNUIGdldERlc3RpbmF0aW9uUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdFJlY3Q7IH07
CisKKyAgICAgICAgSFJFU1VMVCBjcmVhdGVWaWRlb1NhbXBsZXMoSU1GTWVkaWFUeXBlKiBmb3Jt
YXQsIFZpZGVvU2FtcGxlTGlzdCYgdmlkZW9TYW1wbGVRdWV1ZSk7CisgICAgICAgIHZvaWQgcmVs
ZWFzZVJlc291cmNlcygpOworCisgICAgICAgIEhSRVNVTFQgY2hlY2tEZXZpY2VTdGF0ZShEZXZp
Y2VTdGF0ZSYpOworICAgICAgICBIUkVTVUxUIHByZXNlbnRTYW1wbGUoSU1GU2FtcGxlKiwgTE9O
R0xPTkcgdGFyZ2V0KTsKKworICAgICAgICBVSU5UIHJlZnJlc2hSYXRlKCkgY29uc3QgeyByZXR1
cm4gbV9kaXNwbGF5TW9kZS5SZWZyZXNoUmF0ZTsgfQorCisgICAgICAgIHZvaWQgcGFpbnRDdXJy
ZW50RnJhbWUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jik7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBIUkVTVUxUIGluaXRpYWxpemVEM0QoKTsKKyAgICAgICAgSFJFU1VMVCBn
ZXRTd2FwQ2hhaW5QcmVzZW50UGFyYW1ldGVycyhJTUZNZWRpYVR5cGUqLCBEM0RQUkVTRU5UX1BB
UkFNRVRFUlMqIHByZXNlbnRQYXJhbXMpOworICAgICAgICBIUkVTVUxUIGNyZWF0ZUQzRERldmlj
ZSgpOworICAgICAgICBIUkVTVUxUIGNyZWF0ZUQzRFNhbXBsZShJRGlyZWN0M0RTd2FwQ2hhaW45
KiwgQ09NUHRyPElNRlNhbXBsZT4mIHZpZGVvU2FtcGxlKTsKKyAgICAgICAgSFJFU1VMVCB1cGRh
dGVEZXN0UmVjdCgpOworCisgICAgICAgIEhSRVNVTFQgcHJlc2VudFN3YXBDaGFpbihJRGlyZWN0
M0RTd2FwQ2hhaW45KiwgSURpcmVjdDNEU3VyZmFjZTkqKTsKKworICAgICAgICBVSU5UIG1fZGV2
aWNlUmVzZXRUb2tlbiB7IDAgfTsKKyAgICAgICAgSFdORCBtX2h3bmQgeyBudWxscHRyIH07Cisg
ICAgICAgIFJFQ1QgbV9kZXN0UmVjdDsKKyAgICAgICAgRDNERElTUExBWU1PREUgbV9kaXNwbGF5
TW9kZTsKKworICAgICAgICBMb2NrIG1fbG9jazsKKyAgICAgICAgCisgICAgICAgIENPTVB0cjxJ
RGlyZWN0M0Q5RXg+IG1fZGlyZWN0M0Q5OworICAgICAgICBDT01QdHI8SURpcmVjdDNERGV2aWNl
OUV4PiBtX2RldmljZTsKKyAgICAgICAgQ09NUHRyPElEaXJlY3QzRERldmljZU1hbmFnZXI5PiBt
X2RldmljZU1hbmFnZXI7CisgICAgICAgIENPTVB0cjxJRGlyZWN0M0RTdXJmYWNlOT4gbV9zdXJm
YWNlUmVwYWludDsKKworICAgICAgICBDT01QdHI8SURpcmVjdDNEU3VyZmFjZTk+IG1fbWVtU3Vy
ZmFjZTsKKyAgICAgICAgaW50IG1fd2lkdGggeyAwIH07CisgICAgICAgIGludCBtX2hlaWdodCB7
IDAgfTsKKyAgICB9OworCisgICAgY2xhc3MgQ3VzdG9tVmlkZW9QcmVzZW50ZXIKKyAgICAgICAg
OiBwdWJsaWMgSU1GVmlkZW9QcmVzZW50ZXIKKyAgICAgICAgLCBwdWJsaWMgSU1GVmlkZW9EZXZp
Y2VJRAorICAgICAgICAsIHB1YmxpYyBJTUZUb3BvbG9neVNlcnZpY2VMb29rdXBDbGllbnQKKyAg
ICAgICAgLCBwdWJsaWMgSU1GR2V0U2VydmljZQorICAgICAgICAsIHB1YmxpYyBJTUZBY3RpdmF0
ZQorICAgICAgICAsIHB1YmxpYyBJTUZWaWRlb0Rpc3BsYXlDb250cm9sCisgICAgICAgICwgcHVi
bGljIElNRkFzeW5jQ2FsbGJhY2sKKyAgICAgICAgLCBwdWJsaWMgTWVkaWFQbGF5ZXJMaXN0ZW5l
ciB7CisgICAgcHVibGljOgorICAgICAgICBDdXN0b21WaWRlb1ByZXNlbnRlcihNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb24qKTsKKyAgICAgICAgfkN1c3RvbVZpZGVvUHJlc2VudGVy
KCk7CisKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50
ZXJmYWNlKFJFRklJRCByaWlkLCBfX1JQQ19fZGVyZWZfb3V0IHZvaWQgX19SUENfRkFSICpfX1JQ
Q19GQVIgKnBwdk9iamVjdCkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgVUxPTkcgU1RETUVU
SE9EQ0FMTFRZUEUgQWRkUmVmKCkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgVUxPTkcgU1RE
TUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSgpIG92ZXJyaWRlOworCisgICAgICAgIC8vIElNRkNsb2Nr
U3RhdGVTaW5rCisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBPbkNs
b2NrU3RhcnQoTUZUSU1FIGhuc1N5c3RlbVRpbWUsIExPTkdMT05HIGxsQ2xvY2tTdGFydE9mZnNl
dCkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBP
bkNsb2NrU3RvcChNRlRJTUUgaG5zU3lzdGVtVGltZSkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBPbkNsb2NrUGF1c2UoTUZUSU1FIGhuc1N5c3Rl
bVRpbWUpIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgT25DbG9ja1Jlc3RhcnQoTUZUSU1FIGhuc1N5c3RlbVRpbWUpIG92ZXJyaWRlOworICAgICAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgT25DbG9ja1NldFJhdGUoTUZUSU1F
IGhuc1N5c3RlbVRpbWUsIGZsb2F0IGZsUmF0ZSkgb3ZlcnJpZGU7CisKKyAgICAgICAgLy8gSU1G
VmlkZW9QcmVzZW50ZXIKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFByb2Nlc3NNZXNzYWdlKE1GVlBfTUVTU0FHRV9UWVBFIGVNZXNzYWdlLCBVTE9OR19QVFIgdWxQ
YXJhbSkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBHZXRDdXJyZW50TWVkaWFUeXBlKF9PdXRwdHJfICBJTUZWaWRlb01lZGlhVHlwZSAqKnBwTWVk
aWFUeXBlKSBvdmVycmlkZTsKKworICAgICAgICAvLyBJTUZWaWRlb0RldmljZUlECisgICAgICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXREZXZpY2VJRChJSUQqIHBEZXZp
Y2VJRCkgb3ZlcnJpZGU7CisKKyAgICAgICAgLy8gSU1GVG9wb2xvZ3lTZXJ2aWNlTG9va3VwQ2xp
ZW50CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBJbml0U2Vydmlj
ZVBvaW50ZXJzKF9Jbl8gIElNRlRvcG9sb2d5U2VydmljZUxvb2t1cCAqcExvb2t1cCkgb3ZlcnJp
ZGU7CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlU2Vy
dmljZVBvaW50ZXJzKHZvaWQpIG92ZXJyaWRlOworCisgICAgICAgIC8vIElNRkdldFNlcnZpY2UK
KyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFNlcnZpY2UoUkVG
R1VJRCBndWlkU2VydmljZSwgUkVGSUlEIHJpaWQsIExQVk9JRCAqcHB2T2JqZWN0KTsKKworICAg
ICAgICAvLyBJTUZBY3RpdmF0ZQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgQWN0aXZhdGVPYmplY3QoUkVGSUlEIHJpaWQsIHZvaWQgKipwcHYpOworICAgICAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRGV0YWNoT2JqZWN0KCk7CisgICAgICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTaHV0ZG93bk9iamVjdCgpOworCisg
ICAgICAgIC8vIElNRkF0dHJpYnV0ZXMKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIEdldEl0ZW0oX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX2lub3V0
X29wdCBQUk9QVkFSSUFOVCAqcFZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldEl0ZW1UeXBlKF9fUlBDX19pbiBS
RUZHVUlEIGd1aWRLZXksIF9fUlBDX19vdXQgTUZfQVRUUklCVVRFX1RZUEUgKnBUeXBlKSB7IHJl
dHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIENvbXBhcmVJdGVtKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19pbiBSRUZQ
Uk9QVkFSSUFOVCBWYWx1ZSwgX19SUENfX291dCBCT09MICpwYlJlc3VsdCkgeyByZXR1cm4gRV9O
T1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDb21w
YXJlKF9fUlBDX19pbl9vcHQgSU1GQXR0cmlidXRlcyAqcFRoZWlycywgTUZfQVRUUklCVVRFU19N
QVRDSF9UWVBFIE1hdGNoVHlwZSwgX19SUENfX291dCBCT09MICpwYlJlc3VsdCkgeyByZXR1cm4g
RV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBH
ZXRVSU5UMzIoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX291dCBVSU5UMzIgKnB1
blZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEdldFVJTlQ2NChfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQ
Q19fb3V0IFVJTlQ2NCAqcHVuVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0RG91YmxlKF9fUlBDX19pbiBSRUZH
VUlEIGd1aWRLZXksIF9fUlBDX19vdXQgZG91YmxlICpwZlZhbHVlKSB7IHJldHVybiBFX05PVElN
UEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldEdVSUQo
X19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX291dCBHVUlEICpwZ3VpZFZhbHVlKSB7
IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIEdldFN0cmluZ0xlbmd0aChfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19f
b3V0IFVJTlQzMiAqcGNjaExlbmd0aCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRTdHJpbmcoX19SUENfX2luIFJFRkdV
SUQgZ3VpZEtleSwgX19SUENfX291dF9lY291bnRfZnVsbChjY2hCdWZTaXplKSBMUFdTVFIgcHdz
elZhbHVlLCBVSU5UMzIgY2NoQnVmU2l6ZSwgX19SUENfX2lub3V0X29wdCBVSU5UMzIgKnBjY2hM
ZW5ndGgpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgR2V0QWxsb2NhdGVkU3RyaW5nKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRL
ZXksIF9fUlBDX19kZXJlZl9vdXRfZWNvdW50X2Z1bGxfb3B0KCgqcGNjaExlbmd0aCArIDEpKSBM
UFdTVFIgKnBwd3N6VmFsdWUsIF9fUlBDX19vdXQgVUlOVDMyICpwY2NoTGVuZ3RoKSB7IHJldHVy
biBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEdldEJsb2JTaXplKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19vdXQgVUlOVDMy
ICpwY2JCbG9iU2l6ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRCbG9iKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXks
IF9fUlBDX19vdXRfZWNvdW50X2Z1bGwoY2JCdWZTaXplKSBVSU5UOCAqcEJ1ZiwgVUlOVDMyIGNi
QnVmU2l6ZSwgX19SUENfX2lub3V0X29wdCBVSU5UMzIgKnBjYkJsb2JTaXplKSB7IHJldHVybiBF
X05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdl
dEFsbG9jYXRlZEJsb2IoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX2RlcmVmX291
dF9lY291bnRfZnVsbF9vcHQoKnBjYlNpemUpIFVJTlQ4ICoqcHBCdWYsIF9fUlBDX19vdXQgVUlO
VDMyICpwY2JTaXplKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIEdldFVua25vd24oX19SUENfX2luIFJFRkdVSUQgZ3VpZEtl
eSwgX19SUENfX2luIFJFRklJRCByaWlkLCBfX1JQQ19fZGVyZWZfb3V0X29wdCBMUFZPSUQgKnBw
dikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBTZXRJdGVtKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19pbiBS
RUZQUk9QVkFSSUFOVCBWYWx1ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEZWxldGVJdGVtKF9fUlBDX19pbiBSRUZHVUlE
IGd1aWRLZXkpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRGVsZXRlQWxsSXRlbXModm9pZCkgeyByZXR1cm4gRV9OT1RJTVBM
OyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRVSU5UMzIo
X19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgVUlOVDMyIHVuVmFsdWUpIHsgcmV0dXJuIEVfTk9U
SU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0VUlO
VDY0KF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIFVJTlQ2NCB1blZhbHVlKSB7IHJldHVybiBF
X05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNl
dERvdWJsZShfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBkb3VibGUgZlZhbHVlKSB7IHJldHVy
biBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFNldEdVSUQoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX2luIFJFRkdVSUQgZ3Vp
ZFZhbHVlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFNldFN0cmluZyhfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQ
Q19faW5fc3RyaW5nIExQQ1dTVFIgd3N6VmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAg
ICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0QmxvYihfX1JQQ19faW4g
UkVGR1VJRCBndWlkS2V5LCBfX1JQQ19faW5fZWNvdW50X2Z1bGwoY2JCdWZTaXplKSBjb25zdCBV
SU5UOCAqcEJ1ZiwgVUlOVDMyIGNiQnVmU2l6ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAg
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRVbmtub3duKF9fUlBDX19p
biBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19pbl9vcHQgSVVua25vd24gKnBVbmtub3duKSB7IHJl
dHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIExvY2tTdG9yZSh2b2lkKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVubG9ja1N0b3JlKHZvaWQpIHsgcmV0dXJuIEVf
Tk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0
Q291bnQoX19SUENfX291dCBVSU5UMzIgKnBjSXRlbXMpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQor
ICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0SXRlbUJ5SW5kZXgo
VUlOVDMyIHVuSW5kZXgsIF9fUlBDX19vdXQgR1VJRCAqcGd1aWRLZXksIF9fUlBDX19pbm91dF9v
cHQgUFJPUFZBUklBTlQgKnBWYWx1ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDb3B5QWxsSXRlbXMoX19SUENfX2luX29w
dCBJTUZBdHRyaWJ1dGVzICpwRGVzdCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisKKyAgICAgICAg
Ly8gSU1GVmlkZW9EaXNwbGF5Q29udHJvbAorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgR2V0TmF0aXZlVmlkZW9TaXplKFNJWkUqIHBzelZpZGVvLCBTSVpFKiBwc3pB
UlZpZGVvKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEdldElkZWFsVmlkZW9TaXplKFNJWkUqIHBzek1pbiwgU0laRSogcHN6
TWF4KSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFNldFZpZGVvUG9zaXRpb24oY29uc3QgTUZWaWRlb05vcm1hbGl6ZWRSZWN0
KiBwbnJjU291cmNlLCBjb25zdCBMUFJFQ1QgcHJjRGVzdCk7CisgICAgICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRWaWRlb1Bvc2l0aW9uKE1GVmlkZW9Ob3JtYWxpemVk
UmVjdCogcG5yY1NvdXJjZSwgTFBSRUNUIHByY0Rlc3QpOworICAgICAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0QXNwZWN0UmF0aW9Nb2RlKERXT1JEIGR3QXNwZWN0UmF0
aW9Nb2RlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEdldEFzcGVjdFJhdGlvTW9kZShEV09SRCogcGR3QXNwZWN0UmF0aW9N
b2RlKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFNldFZpZGVvV2luZG93KEhXTkQgaHduZFZpZGVvKTsKKyAgICAgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFZpZGVvV2luZG93KEhXTkQqIHBod25k
VmlkZW8pOworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVwYWlu
dFZpZGVvKCk7CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRD
dXJyZW50SW1hZ2UoQklUTUFQSU5GT0hFQURFUiogcEJpaCwgQllURSoqIHBEaWIsIERXT1JEKiBw
Y2JEaWIsIExPTkdMT05HKiBwVGltZVN0YW1wKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldEJvcmRlckNvbG9yKENPTE9S
UkVGIENscikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBHZXRCb3JkZXJDb2xvcihDT0xPUlJFRiogcENscikgeyByZXR1cm4g
RV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBT
ZXRSZW5kZXJpbmdQcmVmcyhEV09SRCBkd1JlbmRlckZsYWdzKSB7IHJldHVybiBFX05PVElNUEw7
IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFJlbmRlcmlu
Z1ByZWZzKERXT1JEKiBwZHdSZW5kZXJGbGFncykgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAg
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRGdWxsc2NyZWVuKEJPT0wg
YkZ1bGxzY3JlZW4pIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0RnVsbHNjcmVlbihCT09MKiBwYkZ1bGxzY3JlZW4pIHsg
cmV0dXJuIEVfTk9USU1QTDsgfQorCisgICAgICAgIC8vIElNRkFzeW5jQ2FsbGJhY2sgbWV0aG9k
cworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0UGFyYW1ldGVy
cyhEV09SRCosIERXT1JEKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBJbnZva2UoSU1GQXN5bmNSZXN1bHQqIHBBc3luY1Jl
c3VsdCk7CisKKyAgICAgICAgLy8gTWVkaWFQbGF5ZXJMaXN0ZW5lcgorICAgICAgICB2aXJ0dWFs
IHZvaWQgb25NZWRpYVBsYXllckRlbGV0ZWQoKSBvdmVycmlkZTsKKworICAgICAgICB2b2lkIHBh
aW50Q3VycmVudEZyYW1lKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgVUxPTkcgbV9yZWZDb3VudCB7IDAgfTsKKyAgICAgICAgTG9j
ayBtX2xvY2s7CisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbiogbV9t
ZWRpYVBsYXllcjsKKworICAgICAgICBlbnVtIFJlbmRlclN0YXRlIHsKKyAgICAgICAgICAgIFJl
bmRlclN0YXRlU3RhcnRlZCA9IDEsCisgICAgICAgICAgICBSZW5kZXJTdGF0ZVN0b3BwZWQsCisg
ICAgICAgICAgICBSZW5kZXJTdGF0ZVBhdXNlZCwKKyAgICAgICAgICAgIFJlbmRlclN0YXRlU2h1
dGRvd24sCisgICAgICAgIH07CisKKyAgICAgICAgUmVuZGVyU3RhdGUgbV9yZW5kZXJTdGF0ZSB7
IFJlbmRlclN0YXRlU2h1dGRvd24gfTsKKyAgICAgICAgQ09NUHRyPElNRkNsb2NrPiBtX2Nsb2Nr
OworICAgICAgICBDT01QdHI8SU1lZGlhRXZlbnRTaW5rPiBtX21lZGlhRXZlbnRTaW5rOworICAg
ICAgICBDT01QdHI8SU1GVHJhbnNmb3JtPiBtX21peGVyOworICAgICAgICBDT01QdHI8SU1GTWVk
aWFUeXBlPiBtX21lZGlhVHlwZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERpcmVjdDNEUHJl
c2VudGVyPiBtX3ByZXNlbnRlckVuZ2luZTsKKyAgICAgICAgTUZWaWRlb05vcm1hbGl6ZWRSZWN0
IG1fc291cmNlUmVjdDsKKyAgICAgICAgYm9vbCBtX3NhbXBsZU5vdGlmeSB7IGZhbHNlIH07Cisg
ICAgICAgIGJvb2wgbV9wcmVyb2xsZWQgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fcmVwYWlu
dCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9lbmRTdHJlYW1pbmcgeyBmYWxzZSB9OworICAg
ICAgICBWaWRlb1NjaGVkdWxlciBtX3NjaGVkdWxlcjsKKyAgICAgICAgVmlkZW9TYW1wbGVQb29s
IG1fc2FtcGxlUG9vbDsKKyAgICAgICAgdW5zaWduZWQgbV90b2tlbkNvdW50ZXIgeyAwIH07Cisg
ICAgICAgIGZsb2F0IG1fcmF0ZSB7IDEuMGYgfTsKKworICAgICAgICBib29sIGlzQWN0aXZlKCkg
Y29uc3Q7CisKKyAgICAgICAgYm9vbCBpc1NjcnViYmluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmF0
ZSA9PSAwLjBmOyB9CisKKyAgICAgICAgSFJFU1VMVCBjb25maWd1cmVNaXhlcihJTUZUcmFuc2Zv
cm0qIG1peGVyKTsKKyAgICAgICAgSFJFU1VMVCBmbHVzaCgpOworICAgICAgICBIUkVTVUxUIHNl
dE1lZGlhVHlwZShJTUZNZWRpYVR5cGUqKTsKKyAgICAgICAgSFJFU1VMVCBjaGVja1NodXRkb3du
KCkgY29uc3Q7CisgICAgICAgIEhSRVNVTFQgcmVuZWdvdGlhdGVNZWRpYVR5cGUoKTsKKyAgICAg
ICAgSFJFU1VMVCBwcm9jZXNzSW5wdXROb3RpZnkoKTsKKyAgICAgICAgSFJFU1VMVCBiZWdpblN0
cmVhbWluZygpOworICAgICAgICBIUkVTVUxUIGVuZFN0cmVhbWluZygpOworICAgICAgICBIUkVT
VUxUIGNoZWNrRW5kT2ZTdHJlYW0oKTsKKyAgICAgICAgSFJFU1VMVCBpc01lZGlhVHlwZVN1cHBv
cnRlZChJTUZNZWRpYVR5cGUqKTsKKyAgICAgICAgSFJFU1VMVCBjcmVhdGVPcHRpbWFsVmlkZW9U
eXBlKElNRk1lZGlhVHlwZSogcHJvcG9zZWRUeXBlLCBJTUZNZWRpYVR5cGUqKiBvcHRpbWFsVHlw
ZSk7CisgICAgICAgIEhSRVNVTFQgY2FsY3VsYXRlT3V0cHV0UmVjdGFuZ2xlKElNRk1lZGlhVHlw
ZSogcHJvcG9zZWRUeXBlLCBSRUNUJiBvdXRwdXRSZWN0KTsKKworICAgICAgICB2b2lkIHByb2Nl
c3NPdXRwdXRMb29wKCk7CisgICAgICAgIEhSRVNVTFQgcHJvY2Vzc091dHB1dCgpOworICAgICAg
ICBIUkVTVUxUIGRlbGl2ZXJTYW1wbGUoSU1GU2FtcGxlKiwgYm9vbCByZXBhaW50KTsKKyAgICAg
ICAgSFJFU1VMVCB0cmFja1NhbXBsZShJTUZTYW1wbGUqKTsKKyAgICAgICAgdm9pZCByZWxlYXNl
UmVzb3VyY2VzKCk7CisKKyAgICAgICAgSFJFU1VMVCBvblNhbXBsZUZyZWUoSU1GQXN5bmNSZXN1
bHQqKTsKKworICAgICAgICB2b2lkIG5vdGlmeUV2ZW50KGxvbmcgRXZlbnRDb2RlLCBMT05HX1BU
UiBQYXJhbTEsIExPTkdfUFRSIFBhcmFtMik7CisgICAgfTsKKworICAgIENPTVB0cjxDdXN0b21W
aWRlb1ByZXNlbnRlcj4gbV9wcmVzZW50ZXI7CiB9OwogCiB9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265074</attachid>
            <date>2015-11-09 11:07:19 -0800</date>
            <delta_ts>2015-11-09 11:45:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150941-20151109200717.patch</filename>
            <type>text/plain</type>
            <size>98740</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MjE2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OCBAQAorMjAxNS0xMS0wOSAgVS1BQi1P
U0wtTEFQMDIzXFN5c3RlbSBJbnN0YWxsZXIgIDxwZWF2b0BvdXRsb29rLmNvbT4KKworICAgICAg
ICBbV2luQ2Fpcm9dW1ZpZGVvXVtNZWRpYUZvdW5kYXRpb25dIFZpZGVvIHNob3VsZCBiZSByZW5k
ZXJlZCBpbiBwcm92aWRlZCBncmFwaGljcyBjb250ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT24gV2luQ2Fpcm8sIHdlIGN1cnJlbnRseSByZW5k
ZXIgdmlkZW8gaW4gYSBjaGlsZCB3aW5kb3cgb2YgdGhlIG1haW4gYnJvd3NlciB3aW5kb3cuCisg
ICAgICAgIFRoaXMgbWFrZXMgaXQgZGlmZmljdWx0IHRvIHJlbmRlciB0aGluZ3Mgb24gdG9wIG9m
IHRoZSB2aWRlbywgbGlrZSB2aWRlbyBjb250cm9scyBhbmQKKyAgICAgICAgY29udGV4dCBtZW51
cy4gV2Ugc2hvdWxkIHJlbmRlciB0aGUgdmlkZW8gaW4gdGhlIGdyYXBoaWNzIGNvbnRleHQgcHJv
dmlkZWQgYnkgdGhlIHBhaW50CisgICAgICAgIG1ldGhvZC4gVGhpcyBpcyBkb25lIGJ5IGltcGxl
bWVudGluZyBhIGN1c3RvbSBFVlIgKEVuaGFuY2VkIFZpZGVvIFJlbmRlcmVyKSBwcmVzZW50ZXIK
KyAgICAgICAgZm9yIE1lZGlhIEZvdW5kYXRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcDoKKyAgICAgICAg
KE1GQ3JlYXRlTWVkaWFUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cmVnaXN0
ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3JlYXRlU2Vzc2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmVuZEdldEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Y3JlYXRlVmlkZW9XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpkZXN0cm95VmlkZW9XaW5kb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjppbnZhbGlkYXRlRnJhbWVWaWV3
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
YWRkTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpjcmVhdGVPdXRwdXROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6b25Ub3BvbG9neVNldCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6Om9u
TWVkaWFQbGF5ZXJEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6On5DdXN0b21WaWRlb1ByZXNlbnRlcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpBZGRSZWYpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6UmVsZWFzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpPbkNsb2NrU3Rh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1N0b3ApOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6
T25DbG9ja1BhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9uQ2xvY2tSZXN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlk
ZW9QcmVzZW50ZXI6Ok9uQ2xvY2tTZXRSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlByb2Nlc3NN
ZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEN1cnJlbnRNZWRpYVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6R2V0RGV2aWNlSUQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6SW5pdFNlcnZpY2VQ
b2ludGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpSZWxlYXNlU2VydmljZVBvaW50ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9t
VmlkZW9QcmVzZW50ZXI6OkdldFNlcnZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6QWN0aXZhdGVP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6RGV0YWNoT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50
ZXI6OlNodXRkb3duT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldFZpZGVvV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OkdldFZpZGVvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dE1peGVyU291cmNlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTZXRWaWRlb1Bvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OkdldFZpZGVvUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6
UmVwYWludFZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Okludm9rZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjpvbk1lZGlhUGxheWVyRGVsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpwYWludEN1cnJl
bnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
Ojpjb25maWd1cmVNaXhlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpmbHVzaCk6CisgICAgICAgIChX
ZWJDb3JlOjphcmVNZWRpYVR5cGVzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6c2V0TWVkaWFU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmNoZWNrU2h1dGRvd24pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRl
cjo6cmVuZWdvdGlhdGVNZWRpYVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6cHJvY2Vzc0lucHV0
Tm90aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1GT2Zmc2V0VG9GbG9hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpNYWtlT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1ha2VBcmVhKToKKyAgICAg
ICAgKFdlYkNvcmU6OnZhbGlkYXRlVmlkZW9BcmVhKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmJlZ2lu
U3RyZWFtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmVuZFN0cmVhbWluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpjaGVja0VuZE9mU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmlzTWVkaWFUeXBl
U3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmNyZWF0ZU9wdGltYWxWaWRlb1R5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29ycmVjdEFzcGVjdFJhdGlvKToKKyAgICAgICAgKFdlYkNvcmU6
OkdldFZpZGVvRGlzcGxheUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Y2FsY3VsYXRlT3V0cHV0
UmVjdGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OnByb2Nlc3NPdXRwdXRMb29wKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldERlc2lyZWRTYW1wbGVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmNs
ZWFyRGVzaXJlZFNhbXBsZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6cHJvY2Vzc091dHB1dCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1
c3RvbVZpZGVvUHJlc2VudGVyOjpkZWxpdmVyU2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OnRy
YWNrU2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OnJlbGVhc2VSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6b25TYW1wbGVGcmVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Om5vdGlmeUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
VmlkZW9TYW1wbGVQb29sOjpnZXRTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6OnJldHVyblNhbXBsZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZp
ZGVvU2FtcGxlUG9vbDo6YXJlU2FtcGxlc1BlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpWaWRlb1NhbXBsZVBvb2w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OnNldEZyYW1lUmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVv
U2NoZWR1bGVyOjpzdGFydFNjaGVkdWxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpzdG9wU2NoZWR1bGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Vmlk
ZW9TY2hlZHVsZXI6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OnNjaGVkdWxlU2FtcGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hl
ZHVsZXI6OnByb2Nlc3NTYW1wbGVzSW5RdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNRlRpbWVU
b01pbGxpc2Vjb25kcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpwcm9jZXNzU2FtcGxlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6
OnNjaGVkdWxlclRocmVhZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6c2NoZWR1bGVyVGhyZWFkUHJvY1By
aXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6
RGlyZWN0M0RQcmVzZW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6fkRpcmVjdDNEUHJlc2VudGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGly
ZWN0M0RQcmVzZW50ZXI6OmdldFNlcnZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6Y2hlY2tGb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpE
aXJlY3QzRFByZXNlbnRlcjo6c2V0VmlkZW9XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6c2V0RGVz
dGluYXRpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6OmNyZWF0ZVZpZGVvU2FtcGxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNE
UHJlc2VudGVyOjpyZWxlYXNlUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6OmNoZWNrRGV2aWNl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6cHJlc2VudFNhbXBsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpw
YWludEN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjppbml0aWFsaXplRDNEKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQ
cmVzZW50ZXI6OmNyZWF0ZUQzRERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpjcmVhdGVEM0RTYW1w
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpEaXJlY3QzRFByZXNlbnRlcjo6cHJlc2VudFN3YXBDaGFpbik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpn
ZXRTd2FwQ2hhaW5QcmVzZW50UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjp1cGRhdGVEZXN0
UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6OlZpZGVvU2FtcGxlUG9vbCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2Ft
cGxlUG9vbDo6flZpZGVvU2FtcGxlUG9vbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpWaWRlb1NjaGVkdWxlcik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZp
ZGVvU2NoZWR1bGVyOjp+VmlkZW9TY2hlZHVsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NjaGVkdWxlcjo6c2V0UHJlc2VudGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
VmlkZW9TY2hlZHVsZXI6OnNldENsb2NrUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpsYXN0U2FtcGxlVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OlZpZGVvU2NoZWR1bGVyOjpmcmFtZUR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6OmdldFZpZGVv
V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6RGlyZWN0M0RQcmVzZW50ZXI6OmdldERlc3RpbmF0aW9uUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2Vu
dGVyOjpyZWZyZXNoUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OkdldEl0ZW1UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkNvbXBhcmVJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OkNvbXBhcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VUlOVDMy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFVJTlQ2NCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRE
b3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0R1VJRCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpH
ZXRTdHJpbmdMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0U3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OkdldEFsbG9jYXRlZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRCbG9i
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Okdl
dEFsbG9jYXRlZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VW5rbm93bik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpTZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkRlbGV0ZUl0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21W
aWRlb1ByZXNlbnRlcjo6RGVsZXRlQWxsSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0VUlO
VDMyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldFVJTlQ2NCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpT
ZXREb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0R1VJRCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpTZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6U2V0QmxvYik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjpTZXRVbmtub3duKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkxvY2tTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpVbmxvY2tTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRDb3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3Rv
bVZpZGVvUHJlc2VudGVyOjpHZXRJdGVtQnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpDb3B5
QWxsSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0TmF0aXZlVmlkZW9TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlk
ZW9QcmVzZW50ZXI6OkdldElkZWFsVmlkZW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldEFz
cGVjdFJhdGlvTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRBc3BlY3RSYXRpb01vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6R2V0Q3VycmVudEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNl
dEJvcmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldEJvcmRlckNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlk
ZW9QcmVzZW50ZXI6OlNldFJlbmRlcmluZ1ByZWZzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFJl
bmRlcmluZ1ByZWZzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNldEZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6R2V0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpHZXRQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmlzU2NydWJiaW5nKToKKwogMjAxNS0xMS0wOSAgQnJl
bnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBSZWNvZ25p
emUgY29udGV4dCBmbHVzaCBhcyBhbiBldmVudCB0aGF0IHJlcXVpcmVzIGFuIHVwZGF0ZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAJKHJl
dmlzaW9uIDE5MjE1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw4ICszMCwxMiBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SFduZERDLmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgi
CisjZW5kaWYKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgogCiAjaWYgVVNFKE1FRElBX0ZPVU5E
QVRJT04pCkBAIC00NiwxMCArNTAsNDUgQEAgU09GVF9MSU5LX09QVElPTkFMKE1mLCBNRkNyZWF0
ZVRvcG9sb2d5TgogU09GVF9MSU5LX09QVElPTkFMKE1mLCBNRkdldFNlcnZpY2UsIEhSRVNVTFQs
IFNUREFQSUNBTExUWVBFLCAoSVVua25vd24qLCBSRUZHVUlELCBSRUZJSUQsIExQVk9JRCopKTsK
IFNPRlRfTElOS19PUFRJT05BTChNZiwgTUZDcmVhdGVBdWRpb1JlbmRlcmVyQWN0aXZhdGUsIEhS
RVNVTFQsIFNUREFQSUNBTExUWVBFLCAoSU1GQWN0aXZhdGUqKikpOwogU09GVF9MSU5LX09QVElP
TkFMKE1mLCBNRkNyZWF0ZVZpZGVvUmVuZGVyZXJBY3RpdmF0ZSwgSFJFU1VMVCwgU1REQVBJQ0FM
TFRZUEUsIChIV05ELCBJTUZBY3RpdmF0ZSoqKSk7CitTT0ZUX0xJTktfT1BUSU9OQUwoTWYsIE1G
Q3JlYXRlU2FtcGxlR3JhYmJlclNpbmtBY3RpdmF0ZSwgSFJFU1VMVCwgU1REQVBJQ0FMTFRZUEUs
IChJTUZNZWRpYVR5cGUqLCBJTUZTYW1wbGVHcmFiYmVyU2lua0NhbGxiYWNrKiwgSU1GQWN0aXZh
dGUqKikpOwogCiBTT0ZUX0xJTktfTElCUkFSWShNZnBsYXQpOwogU09GVF9MSU5LX09QVElPTkFM
KE1mcGxhdCwgTUZTdGFydHVwLCBIUkVTVUxULCBTVERBUElDQUxMVFlQRSwgKFVMT05HLCBEV09S
RCkpOwogU09GVF9MSU5LX09QVElPTkFMKE1mcGxhdCwgTUZTaHV0ZG93biwgSFJFU1VMVCwgU1RE
QVBJQ0FMTFRZUEUsICgpKTsKK1NPRlRfTElOS19PUFRJT05BTChNZnBsYXQsIE1GQ3JlYXRlTWVt
b3J5QnVmZmVyLCBIUkVTVUxULCBTVERBUElDQUxMVFlQRSwgKERXT1JELCBJTUZNZWRpYUJ1ZmZl
cioqKSk7CitTT0ZUX0xJTktfT1BUSU9OQUwoTWZwbGF0LCBNRkNyZWF0ZVNhbXBsZSwgSFJFU1VM
VCwgU1REQVBJQ0FMTFRZUEUsIChJTUZTYW1wbGUqKikpOworU09GVF9MSU5LX09QVElPTkFMKE1m
cGxhdCwgTUZDcmVhdGVNZWRpYVR5cGUsIEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoSU1GTWVk
aWFUeXBlKiopKTsKK1NPRlRfTElOS19PUFRJT05BTChNZnBsYXQsIE1GRnJhbWVSYXRlVG9BdmVy
YWdlVGltZVBlckZyYW1lLCBIUkVTVUxULCBTVERBUElDQUxMVFlQRSwgKFVJTlQzMiwgVUlOVDMy
LCBVSU5UNjQqKSk7CisKK1NUREFQSSBNRkNyZWF0ZU1lZGlhVHlwZShfT3V0cHRyXyBJTUZNZWRp
YVR5cGUqKiAgcHBNRlR5cGUpCit7CisgICAgcmV0dXJuIE1GQ3JlYXRlTWVkaWFUeXBlUHRyKCko
cHBNRlR5cGUpOworfQorCitTT0ZUX0xJTktfTElCUkFSWShldnIpOworU09GVF9MSU5LX09QVElP
TkFMKGV2ciwgTUZDcmVhdGVWaWRlb1NhbXBsZUZyb21TdXJmYWNlLCBIUkVTVUxULCBTVERBUElD
QUxMVFlQRSwgKElVbmtub3duKiwgSU1GU2FtcGxlKiopKTsKKworU09GVF9MSU5LX0xJQlJBUlko
RHh2YTIpOworU09GVF9MSU5LX09QVElPTkFMKER4dmEyLCBEWFZBMkNyZWF0ZURpcmVjdDNERGV2
aWNlTWFuYWdlcjksIEhSRVNVTFQsIFNUREFQSUNBTExUWVBFLCAoVUlOVCosIElEaXJlY3QzRERl
dmljZU1hbmFnZXI5KiopKTsKKworU09GVF9MSU5LX0xJQlJBUlkoRDNkOSk7CitTT0ZUX0xJTktf
T1BUSU9OQUwoRDNkOSwgRGlyZWN0M0RDcmVhdGU5RXgsIEhSRVNVTFQsIFNUREFQSUNBTExUWVBF
LCAoVUlOVCwgSURpcmVjdDNEOUV4KiopKTsKKworLy8gTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVD
b3VudGVyCisvLyBEYXRhIHR5cGU6IFVJTlQzMgorLy8KKy8vIFZlcnNpb24gbnVtYmVyIGZvciB0
aGUgdmlkZW8gc2FtcGxlcy4gV2hlbiB0aGUgcHJlc2VudGVyIGluY3JlbWVudHMgdGhlIHZlcnNp
b24KKy8vIG51bWJlciwgYWxsIHNhbXBsZXMgd2l0aCB0aGUgcHJldmlvdXMgdmVyc2lvbiBudW1i
ZXIgYXJlIHN0YWxlIGFuZCBzaG91bGQgYmUKKy8vIGRpc2NhcmRlZC4KK3N0YXRpYyBjb25zdCBH
VUlEIE1GU2FtcGxlUHJlc2VudGVyU2FtcGxlQ291bnRlciA9Cit7IDB4ODY5ZjFmN2MsIDB4MzQ5
NiwgMHg0OGE5LCB7IDB4ODgsIDB4ZTMsIDB4NjksIDB4ODUsIDB4NzksIDB4ZDAsIDB4OGMsIDB4
YjYgfSB9OworCisvLyBNRlNhbXBsZVByZXNlbnRlclNhbXBsZVN3YXBDaGFpbgorLy8gRGF0YSB0
eXBlOiBJVU5LTk9XTgorLy8gCisvLyBQb2ludGVyIHRvIGEgRGlyZWN0M0Qgc3dhcCBjaGFpbi4K
K3N0YXRpYyBjb25zdCBHVUlEIE1GU2FtcGxlUHJlc2VudGVyU2FtcGxlU3dhcENoYWluID0KK3sg
MHgyNGEyZTA3NiwgMHgzNjczLCAweDQzM2QsIHsgMHg4NywgMHg0LCAweDU1LCAweDJiLCAweDFm
LCAweDVjLCAweDE2LCAweDhjIH0gfTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03Nyw5
ICsxMTYsMTAgQEAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjp+TWVkaQogCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cmVnaXN0ZXJNZWRpYUVuZ2lu
ZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB7Ci0gICAgaWYgKGlzQXZhaWxhYmxl
KCkpCisgICAgaWYgKGlzQXZhaWxhYmxlKCkpIHsKICAgICAgICAgcmVnaXN0cmFyKFtdKE1lZGlh
UGxheWVyKiBwbGF5ZXIpIHsgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uPihwbGF5ZXIpOyB9LAogICAgICAgICAgICAgZ2V0U3VwcG9ydGVk
VHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwgMCwgMCwgMCk7CisgICAgfQogfQogCiBib29sIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6aXNBdmFpbGFibGUoKSAKQEAgLTI1Miw3ICsy
OTIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAgICAgaW50
IHcgPSBtX3NpemUud2lkdGgoKSAqIGRldmljZVNjYWxlRmFjdG9yOwogICAgIGludCBoID0gbV9z
aXplLmhlaWdodCgpICogZGV2aWNlU2NhbGVGYWN0b3I7CiAKLSAgICBpZiAobV9od25kVmlkZW8g
JiYgIW1fbGFzdFBhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgaWYgKG1faHduZFZpZGVvKQogICAg
ICAgICA6Ok1vdmVXaW5kb3cobV9od25kVmlkZW8sIHgsIHksIHcsIGgsIEZBTFNFKTsKIAogICAg
IFJFQ1QgcmMgPSB7IDAsIDAsIHcsIGggfTsKQEAgLTI2MSwxNiArMzAxLDEzIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjoKIAogdm9pZCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKQot
ICAgICAgICB8fCAhbV9wbGF5ZXItPnZpc2libGUoKSkKKyAgICBpZiAoY29udGV4dC5wYWludGlu
Z0Rpc2FibGVkKCkgfHwgIW1fcGxheWVyLT52aXNpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fbGFzdFBhaW50UmVjdCA9IHJlY3Q7CiAKLSAgICAvLyBXZSBjdXJyZW50bHkgbGV0IE1l
ZGlhIEZvdW5kYXRpb24gaGFuZGxlIHRoZSBkcmF3aW5nLCBieSBwcm92aWRpbmcgYSBoYW5kbGUg
dG8gdGhlIHdpbmRvdyB0byBkcmF3IGluLgotICAgIC8vIFdlIHNob3VsZCBpbnN0ZWFkIHJlYWQg
aW5kaXZpZHVhbCBmcmFtZXMgZnJvbSB0aGUgc3RyZWFtLCBhbmQgcGFpbnQgdGhlbSBpbnRvIHRo
ZSBncmFwaGljcyBjb250ZXh0IGhlcmUuCi0KLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlm
IChtX3ByZXNlbnRlcikKKyAgICAgICAgbV9wcmVzZW50ZXItPnBhaW50Q3VycmVudEZyYW1lKGNv
bnRleHQsIHJlY3QpOwogfQogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Y3JlYXRlU2Vzc2lvbigpCkBAIC0zODQsNiArNDIxLDkgQEAgYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OgogCiAgICAgY2FzZSBNRVNlc3Npb25DbG9zZWQ6CiAgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBNRU1lZGlhU2FtcGxlOgorICAgICAgICBicmVhazsKICAg
ICB9CiAKICAgICBpZiAobWVkaWFFdmVudFR5cGUgIT0gTUVTZXNzaW9uQ2xvc2VkKSB7CkBAIC01
MTAsNyArNTUwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Ogog
ICAgICAgICByZXR1cm47CiAgICAgaFduZFBhcmVudCA9IHZpZXctPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCk7CiAKLSAgICBtX2h3bmRWaWRlbyA9IENyZWF0ZVdpbmRvd0V4KFdT
X0VYX05PQUNUSVZBVEUgfCBXU19FWF9UUkFOU1BBUkVOVCwgcmVnaXN0ZXJWaWRlb1dpbmRvd0Ns
YXNzKCksIDAsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0NMSVBTSUJMSU5HUyB8IFdTX0NM
SVBDSElMRFJFTiwKKyAgICBtX2h3bmRWaWRlbyA9IENyZWF0ZVdpbmRvd0V4KFdTX0VYX05PQUNU
SVZBVEUgfCBXU19FWF9UUkFOU1BBUkVOVCwgcmVnaXN0ZXJWaWRlb1dpbmRvd0NsYXNzKCksIDAs
IFdTX0NISUxEIHwgV1NfQ0xJUFNJQkxJTkdTIHwgV1NfQ0xJUENISUxEUkVOLAogICAgICAgICAw
LCAwLCAwLCAwLCBoV25kUGFyZW50LCAwLCAwLCAwKTsKIH0KIApAQCAtNTIyLDYgKzU2MiwxOCBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAgICAgfQogfQogCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6aW52YWxpZGF0ZUZyYW1lVmll
dygpCit7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fcGxheWVy
IHx8ICFtX3BsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSB8fCAhbV9wbGF5ZXItPmNhY2hl
ZFJlc291cmNlTG9hZGVyKCktPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB2aWV3
ID0gbV9wbGF5ZXItPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmRvY3VtZW50KCktPnZpZXcoKTsK
KyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIHZpZXctPmludmFsaWRhdGUo
KTsKK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmFkZExpc3Rl
bmVyKE1lZGlhUGxheWVyTGlzdGVuZXIqIGxpc3RlbmVyKQogewogICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbXV0ZXhMaXN0ZW5lcnMpOwpAQCAtNTc5LDcgKzYzMSwxMiBAQCBib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAgICAgICAgIG1faGFzQXVkaW8gPSB0cnVlOwog
ICAgIH0gZWxzZSBpZiAoTUZNZWRpYVR5cGVfVmlkZW8gPT0gZ3VpZE1ham9yVHlwZSkgewogICAg
ICAgICAvLyBDcmVhdGUgdGhlIHZpZGVvIHJlbmRlcmVyLgotICAgICAgICBpZiAoRkFJTEVEKE1G
Q3JlYXRlVmlkZW9SZW5kZXJlckFjdGl2YXRlUHRyKCkobV9od25kVmlkZW8sICZyZW5kZXJlckFj
dGl2YXRlKSkpCisgICAgICAgIGlmIChGQUlMRUQoTUZDcmVhdGVWaWRlb1JlbmRlcmVyQWN0aXZh
dGVQdHIoKShudWxscHRyLCAmcmVuZGVyZXJBY3RpdmF0ZSkpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIG1fcHJlc2VudGVyID0gbmV3IEN1c3RvbVZpZGVvUHJlc2VudGVy
KHRoaXMpOworICAgICAgICBtX3ByZXNlbnRlci0+U2V0VmlkZW9XaW5kb3cobV9od25kVmlkZW8p
OworICAgICAgICBpZiAoRkFJTEVEKHJlbmRlcmVyQWN0aXZhdGUtPlNldFVua25vd24oTUZfQUNU
SVZBVEVfQ1VTVE9NX1ZJREVPX1BSRVNFTlRFUl9BQ1RJVkFURSwgc3RhdGljX2Nhc3Q8SU1GQWN0
aXZhdGUqPihtX3ByZXNlbnRlci5nZXQoKSkpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgbV9oYXNWaWRlbyA9IHRydWU7CiAgICAgfSBlbHNlCkBAIC02MzgsMTMgKzY5NSwx
MSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAgICAgaWYgKCFN
RkdldFNlcnZpY2VQdHIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEZBSUxFRChNRkdl
dFNlcnZpY2VQdHIoKShtX21lZGlhU2Vzc2lvbi5nZXQoKSwgTVJfVklERU9fUkVOREVSX1NFUlZJ
Q0UsIElJRF9QUFZfQVJHUygmbV92aWRlb0Rpc3BsYXkpKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChtX3ZpZGVvRGlzcGxheSk7Ci0KLSAgICBSRUNUIHJjID0geyAwLCAwLCBtX3Np
emUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpIH07Ci0gICAgbV92aWRlb0Rpc3BsYXktPlNldFZp
ZGVvUG9zaXRpb24obnVsbHB0ciwgJnJjKTsKKyAgICBpZiAoU1VDQ0VFREVEKE1GR2V0U2Vydmlj
ZVB0cigpKG1fbWVkaWFTZXNzaW9uLmdldCgpLCBNUl9WSURFT19SRU5ERVJfU0VSVklDRSwgSUlE
X1BQVl9BUkdTKCZtX3ZpZGVvRGlzcGxheSkpKSkgeworICAgICAgICBBU1NFUlQobV92aWRlb0Rp
c3BsYXkpOworICAgICAgICBSRUNUIHJjID0geyAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpIH07CisgICAgICAgIG1fdmlkZW9EaXNwbGF5LT5TZXRWaWRlb1Bvc2l0aW9uKG51
bGxwdHIsICZyYyk7CisgICAgfQogCiAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6Okhh
dmVGdXR1cmVEYXRhOwogCkBAIC03MjQsNiArNzc5LDIwNzMgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OgogICAgIG1fbWVkaWFQbGF5ZXIgPSBudWxscHRyOwogfQog
CitNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpDdXN0b21WaWRlb1ByZXNlbnRlcihNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24q
IG1lZGlhUGxheWVyKQorICAgIDogbV9tZWRpYVBsYXllcihtZWRpYVBsYXllcikKK3sKKyAgICBp
ZiAobV9tZWRpYVBsYXllcikKKyAgICAgICAgbV9tZWRpYVBsYXllci0+YWRkTGlzdGVuZXIodGhp
cyk7CisKKyAgICBtX3NvdXJjZVJlY3QudG9wID0gMDsKKyAgICBtX3NvdXJjZVJlY3QubGVmdCA9
IDA7CisgICAgbV9zb3VyY2VSZWN0LmJvdHRvbSA9IDE7CisgICAgbV9zb3VyY2VSZWN0LnJpZ2h0
ID0gMTsKKworICAgIG1fcHJlc2VudGVyRW5naW5lID0gc3RkOjptYWtlX3VuaXF1ZTxEaXJlY3Qz
RFByZXNlbnRlcj4oKTsKKyAgICBpZiAoIW1fcHJlc2VudGVyRW5naW5lKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3NjaGVkdWxlci5zZXRQcmVzZW50ZXIobV9wcmVzZW50ZXJFbmdpbmUuZ2V0
KCkpOworfQorCitNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjp+Q3VzdG9tVmlkZW9QcmVzZW50ZXIoKQoreworICAgIGlmIChtX21lZGlhUGxh
eWVyKQorICAgICAgICBtX21lZGlhUGxheWVyLT5yZW1vdmVMaXN0ZW5lcih0aGlzKTsKK30KKwor
SFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgX19SUENfX2RlcmVmX291dCB2b2lk
IF9fUlBDX0ZBUiAqX19SUENfRkFSICpwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IG51
bGxwdHI7CisgICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JTUZHZXRTZXJ2aWNlKSkKKyAg
ICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElNRkdldFNlcnZpY2UqPih0aGlzKTsKKyAg
ICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSU1GQWN0aXZhdGUpKQorICAgICAgICAq
cHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SU1GQWN0aXZhdGUqPih0aGlzKTsKKyAgICBlbHNlIGlm
IChJc0VxdWFsR1VJRChyaWlkLCBJSURfSU1GVmlkZW9EaXNwbGF5Q29udHJvbCkpCisgICAgICAg
ICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJTUZWaWRlb0Rpc3BsYXlDb250cm9sKj4odGhpcyk7
CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lNRlZpZGVvUHJlc2VudGVyKSkK
KyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElNRlZpZGVvUHJlc2VudGVyKj4odGhp
cyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lNRkNsb2NrU3RhdGVTaW5r
KSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElNRkNsb2NrU3RhdGVTaW5rKj4o
dGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lNRlZpZGVvRGV2aWNl
SUQpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SU1GVmlkZW9EZXZpY2VJRCo+
KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JTUZUb3BvbG9neVNl
cnZpY2VMb29rdXBDbGllbnQpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SU1G
VG9wb2xvZ3lTZXJ2aWNlTG9va3VwQ2xpZW50Kj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVh
bEdVSUQocmlpZCwgSUlEX0lVbmtub3duKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19j
YXN0PElNRlZpZGVvUHJlc2VudGVyKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQo
cmlpZCwgSUlEX0lNRkFzeW5jQ2FsbGJhY2spKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SU1GQXN5bmNDYWxsYmFjayo+KHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
IEVfTk9JTlRFUkZBQ0U7CisKKyAgICBBZGRSZWYoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKwor
VUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6QWRkUmVmKCkKK3sKKyAgICBtX3JlZkNvdW50Kys7Cisg
ICAgcmV0dXJuIG1fcmVmQ291bnQ7Cit9CisKK1VMT05HIFNURE1FVEhPRENBTExUWVBFIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlJlbGVh
c2UoKQoreworICAgIG1fcmVmQ291bnQtLTsKKyAgICBVTE9ORyByZWZDb3VudCA9IG1fcmVmQ291
bnQ7CisgICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJu
IHJlZkNvdW50OworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9uQ2xvY2tTdGFydChNRlRJTUUgaG5zU3lzdGVtVGlt
ZSwgTE9OR0xPTkcgbGxDbG9ja1N0YXJ0T2Zmc2V0KQoreworICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fbG9jayk7CisKKyAgICAvLyBBZnRlciBzaHV0ZG93biwgd2UgY2Fubm90IHN0YXJ0LgorICAg
IEhSRVNVTFQgaHIgPSBjaGVja1NodXRkb3duKCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgIHJldHVybiBocjsKKworICAgIG1fcmVuZGVyU3RhdGUgPSBSZW5kZXJTdGF0ZVN0YXJ0ZWQ7
CisKKyAgICBpZiAoaXNBY3RpdmUoKSkgeworICAgICAgICBpZiAobGxDbG9ja1N0YXJ0T2Zmc2V0
ICE9IFBSRVNFTlRBVElPTl9DVVJSRU5UX1BPU0lUSU9OKSB7CisgICAgICAgICAgICAvLyBUaGlz
IGlzIGEgc2VlayByZXF1ZXN0LCBmbHVzaCBwZW5kaW5nIHNhbXBsZXMuCisgICAgICAgICAgICBm
bHVzaCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvY2Vzc091dHB1dExvb3AoKTsKKwor
ICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6Ok9uQ2xvY2tTdG9wKE1GVElNRSBobnNTeXN0
ZW1UaW1lKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBIUkVTVUxU
IGhyID0gY2hlY2tTaHV0ZG93bigpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1
cm4gaHI7CisKKyAgICBpZiAobV9yZW5kZXJTdGF0ZSAhPSBSZW5kZXJTdGF0ZVN0b3BwZWQpIHsK
KyAgICAgICAgbV9yZW5kZXJTdGF0ZSA9IFJlbmRlclN0YXRlU3RvcHBlZDsKKyAgICAgICAgZmx1
c2goKTsKKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpPbkNsb2NrUGF1
c2UoTUZUSU1FIGhuc1N5c3RlbVRpbWUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKKworICAgIC8vIEFmdGVyIHNodXRkb3duLCB3ZSBjYW5ub3QgcGF1c2UuCisgICAgSFJFU1VM
VCBociA9IGNoZWNrU2h1dGRvd24oKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIGhyOworCisgICAgbV9yZW5kZXJTdGF0ZSA9IFJlbmRlclN0YXRlUGF1c2VkOworCisgICAg
cmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1Jlc3RhcnQoTUZUSU1FIGhuc1N5c3Rl
bVRpbWUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKworICAgIEhSRVNVTFQg
aHIgPSBjaGVja1NodXRkb3duKCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVy
biBocjsKKworICAgIEFTU0VSVChtX3JlbmRlclN0YXRlID09IFJlbmRlclN0YXRlUGF1c2VkKTsK
KworICAgIG1fcmVuZGVyU3RhdGUgPSBSZW5kZXJTdGF0ZVN0YXJ0ZWQ7CisKKyAgICBwcm9jZXNz
T3V0cHV0TG9vcCgpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6T25DbG9ja1Nl
dFJhdGUoTUZUSU1FIGhuc1N5c3RlbVRpbWUsIGZsb2F0IHJhdGUpCit7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9sb2NrKTsKKworICAgIEhSRVNVTFQgaHIgPSBjaGVja1NodXRkb3duKCk7Cisg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIG1fcmF0ZSA9IHJh
dGU7CisKKyAgICBtX3NjaGVkdWxlci5zZXRDbG9ja1JhdGUocmF0ZSk7CisKKyAgICByZXR1cm4g
U19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1
c3RvbVZpZGVvUHJlc2VudGVyOjpQcm9jZXNzTWVzc2FnZShNRlZQX01FU1NBR0VfVFlQRSBlTWVz
c2FnZSwgVUxPTkdfUFRSIHVsUGFyYW0pCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKKworICAgIEhSRVNVTFQgaHIgPSBjaGVja1NodXRkb3duKCk7CisgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIHN3aXRjaCAoZU1lc3NhZ2UpIHsKKyAgICBj
YXNlIE1GVlBfTUVTU0FHRV9GTFVTSDoKKyAgICAgICAgaHIgPSBmbHVzaCgpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgTUZWUF9NRVNTQUdFX0lOVkFMSURBVEVNRURJQVRZUEU6CisgICAg
ICAgIGhyID0gcmVuZWdvdGlhdGVNZWRpYVR5cGUoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIE1GVlBfTUVTU0FHRV9QUk9DRVNTSU5QVVROT1RJRlk6CisgICAgICAgIC8vIEEgbmV3IGlu
cHV0IHNhbXBsZSBpcyBhdmFpbGFibGUuIAorICAgICAgICBociA9IHByb2Nlc3NJbnB1dE5vdGlm
eSgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTUZWUF9NRVNTQUdFX0JFR0lOU1RSRUFN
SU5HOgorICAgICAgICBociA9IGJlZ2luU3RyZWFtaW5nKCk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBNRlZQX01FU1NBR0VfRU5EU1RSRUFNSU5HOgorICAgICAgICBociA9IGVuZFN0cmVh
bWluZygpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTUZWUF9NRVNTQUdFX0VORE9GU1RS
RUFNOgorICAgICAgICBtX2VuZFN0cmVhbWluZyA9IHRydWU7CisgICAgICAgIGhyID0gY2hlY2tF
bmRPZlN0cmVhbSgpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGhy
ID0gRV9JTlZBTElEQVJHOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gaHI7
Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21W
aWRlb1ByZXNlbnRlcjo6R2V0Q3VycmVudE1lZGlhVHlwZShfT3V0cHRyXyAgSU1GVmlkZW9NZWRp
YVR5cGUgKipwcE1lZGlhVHlwZSkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwor
CisgICAgaWYgKCFwcE1lZGlhVHlwZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAg
IEhSRVNVTFQgaHIgPSBjaGVja1NodXRkb3duKCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgIHJldHVybiBocjsKKworICAgIGlmICghbV9tZWRpYVR5cGUpCisgICAgICAgIHJldHVybiBN
Rl9FX05PVF9JTklUSUFMSVpFRDsKKworICAgIHJldHVybiBtX21lZGlhVHlwZS0+UXVlcnlJbnRl
cmZhY2UoX191dWlkb2YoSU1GVmlkZW9NZWRpYVR5cGUpLCAodm9pZCoqKSZwcE1lZGlhVHlwZSk7
Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21W
aWRlb1ByZXNlbnRlcjo6R2V0RGV2aWNlSUQoSUlEKiBwRGV2aWNlSUQpCit7CisgICAgaWYgKCFw
RGV2aWNlSUQpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICAqcERldmljZUlEID0g
X191dWlkb2YoSURpcmVjdDNERGV2aWNlOSk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNV
TFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRl
cjo6SW5pdFNlcnZpY2VQb2ludGVycyhJTUZUb3BvbG9neVNlcnZpY2VMb29rdXAgKnBMb29rdXAp
Cit7CisgICAgaWYgKCFwTG9va3VwKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAg
SFJFU1VMVCBociA9IFNfT0s7CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisg
ICAgaWYgKGlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURSRVFVRVNUOwor
CisgICAgbV9jbG9jayA9IG51bGxwdHI7CisgICAgbV9taXhlciA9IG51bGxwdHI7CisgICAgbV9t
ZWRpYUV2ZW50U2luayA9IG51bGxwdHI7CisKKyAgICAvLyBMb29rdXAgdGhlIHNlcnZpY2VzLgor
CisgICAgRFdPUkQgb2JqZWN0Q291bnQgPSAxOworICAgIGhyID0gcExvb2t1cC0+TG9va3VwU2Vy
dmljZShNRl9TRVJWSUNFX0xPT0tVUF9HTE9CQUwsIDAsIE1SX1ZJREVPX1JFTkRFUl9TRVJWSUNF
LCBJSURfUFBWX0FSR1MoJm1fY2xvY2spLCAmb2JqZWN0Q291bnQpOworICAgIC8vIFRoZSBjbG9j
ayBzZXJ2aWNlIGlzIG9wdGlvbmFsLgorCisgICAgb2JqZWN0Q291bnQgPSAxOworICAgIGhyID0g
cExvb2t1cC0+TG9va3VwU2VydmljZShNRl9TRVJWSUNFX0xPT0tVUF9HTE9CQUwsIDAsIE1SX1ZJ
REVPX01JWEVSX1NFUlZJQ0UsIElJRF9QUFZfQVJHUygmbV9taXhlciksICZvYmplY3RDb3VudCk7
CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gY29u
ZmlndXJlTWl4ZXIobV9taXhlci5nZXQoKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
IHJldHVybiBocjsKKworICAgIG9iamVjdENvdW50ID0gMTsKKyAgICBociA9IHBMb29rdXAtPkxv
b2t1cFNlcnZpY2UoTUZfU0VSVklDRV9MT09LVVBfR0xPQkFMLCAwLCBNUl9WSURFT19SRU5ERVJf
U0VSVklDRSwgSUlEX1BQVl9BUkdTKCZtX21lZGlhRXZlbnRTaW5rKSwgJm9iamVjdENvdW50KTsK
KyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgbV9yZW5kZXJT
dGF0ZSA9IFJlbmRlclN0YXRlU3RvcHBlZDsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVT
VUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50
ZXI6OlJlbGVhc2VTZXJ2aWNlUG9pbnRlcnMoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
bG9jayk7CisKKyAgICBtX3JlbmRlclN0YXRlID0gUmVuZGVyU3RhdGVTaHV0ZG93bjsKKworICAg
IGZsdXNoKCk7CisKKyAgICBzZXRNZWRpYVR5cGUobnVsbHB0cik7CisKKyAgICBtX2Nsb2NrID0g
bnVsbHB0cjsKKyAgICBtX21peGVyID0gbnVsbHB0cjsKKyAgICBtX21lZGlhRXZlbnRTaW5rID0g
bnVsbHB0cjsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFNlcnZpY2UoUkVG
R1VJRCBndWlkU2VydmljZSwgUkVGSUlEIHJpaWQsIExQVk9JRCogcHB2T2JqZWN0KQoreworICAg
IGlmICghcHB2T2JqZWN0KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgLy8gV2Ug
b25seSBzdXBwb3J0IE1SX1ZJREVPX1JFTkRFUl9TRVJWSUNFLgorICAgIGlmIChndWlkU2Vydmlj
ZSAhPSBNUl9WSURFT19SRU5ERVJfU0VSVklDRSkKKyAgICAgICAgcmV0dXJuIE1GX0VfVU5TVVBQ
T1JURURfU0VSVklDRTsKKworICAgIEhSRVNVTFQgaHIgPSBtX3ByZXNlbnRlckVuZ2luZS0+Z2V0
U2VydmljZShndWlkU2VydmljZSwgcmlpZCwgcHB2T2JqZWN0KTsKKworICAgIGlmIChGQUlMRUQo
aHIpKQorICAgICAgICBociA9IFF1ZXJ5SW50ZXJmYWNlKHJpaWQsIHBwdk9iamVjdCk7CisKKyAg
ICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6QWN0aXZhdGVPYmplY3QoUkVGSUlEIHJpaWQsIHZv
aWQgKipwcHYpCit7CisgICAgaWYgKHJpaWQgPT0gSUlEX0lNRlZpZGVvUHJlc2VudGVyKSB7Cisg
ICAgICAgICpwcHYgPSBzdGF0aWNfY2FzdDxJTUZWaWRlb1ByZXNlbnRlcio+KHRoaXMpOworICAg
ICAgICByZXR1cm4gU19PSzsKKyAgICB9CisgICAgcmV0dXJuIEVfRkFJTDsKK30KKworSFJFU1VM
VCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpEZXRhY2hPYmplY3QoKQoreworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OlNodXRk
b3duT2JqZWN0KCkKK3sKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpTZXRWaWRlb1dp
bmRvdyhIV05EIGh3bmRWaWRlbykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwor
CisgICAgaWYgKCFJc1dpbmRvdyhod25kVmlkZW8pKQorICAgICAgICByZXR1cm4gRV9JTlZBTElE
QVJHOworCisgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgSFdORCBvbGRId25kID0gbV9wcmVz
ZW50ZXJFbmdpbmUtPmdldFZpZGVvV2luZG93KCk7CisKKyAgICBpZiAob2xkSHduZCAhPSBod25k
VmlkZW8pIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBEaXJlY3QzRCBkZXZp
Y2UuCisgICAgICAgIGhyID0gbV9wcmVzZW50ZXJFbmdpbmUtPnNldFZpZGVvV2luZG93KGh3bmRW
aWRlbyk7CisKKyAgICAgICAgbm90aWZ5RXZlbnQoRUNfRElTUExBWV9DSEFOR0VELCAwLCAwKTsK
KyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6R2V0VmlkZW9XaW5kb3coSFdO
RCogcGh3bmRWaWRlbykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAg
aWYgKCFwaHduZFZpZGVvKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgKnBod25k
VmlkZW8gPSBtX3ByZXNlbnRlckVuZ2luZS0+Z2V0VmlkZW9XaW5kb3coKTsKKworICAgIHJldHVy
biBTX09LOworfQorCitzdGF0aWMgSFJFU1VMVCBzZXRNaXhlclNvdXJjZVJlY3QoSU1GVHJhbnNm
b3JtKiBtaXhlciwgY29uc3QgTUZWaWRlb05vcm1hbGl6ZWRSZWN0JiBzb3VyY2VSZWN0KQorewor
ICAgIGlmICghbWl4ZXIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBDT01QdHI8
SU1GQXR0cmlidXRlcz4gYXR0cmlidXRlczsKKworICAgIEhSRVNVTFQgaHIgPSBtaXhlci0+R2V0
QXR0cmlidXRlcygmYXR0cmlidXRlcyk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybiBocjsKKworICAgIHJldHVybiBhdHRyaWJ1dGVzLT5TZXRCbG9iKFZJREVPX1pPT01fUkVD
VCwgKGNvbnN0IFVJTlQ4Kikmc291cmNlUmVjdCwgc2l6ZW9mKHNvdXJjZVJlY3QpKTsKK30KKwor
SFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJl
c2VudGVyOjpTZXRWaWRlb1Bvc2l0aW9uKGNvbnN0IE1GVmlkZW9Ob3JtYWxpemVkUmVjdCogcG5y
Y1NvdXJjZSwgY29uc3QgTFBSRUNUIHByY0Rlc3QpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9sb2NrKTsKKworICAgIC8vIEZpcnN0LCBjaGVjayB0aGF0IHRoZSBwYXJhbWV0ZXJzIGFyZSB2
YWxpZC4KKworICAgIGlmICghcG5yY1NvdXJjZSAmJiAhcHJjRGVzdCkKKyAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKworICAgIGlmIChwbnJjU291cmNlKSB7CisgICAgICAgIGlmICgocG5yY1Nv
dXJjZS0+bGVmdCA+IHBucmNTb3VyY2UtPnJpZ2h0KSB8fCAocG5yY1NvdXJjZS0+dG9wID4gcG5y
Y1NvdXJjZS0+Ym90dG9tKSkKKyAgICAgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisKKyAg
ICAgICAgLy8gVGhlIHNvdXJjZSByZWN0YW5nbGUgbXVzdCBiZSBub3JtYWxpemVkLgorICAgICAg
ICBpZiAoKHBucmNTb3VyY2UtPmxlZnQgPCAwKSB8fCAocG5yY1NvdXJjZS0+cmlnaHQgPiAxKSB8
fCAocG5yY1NvdXJjZS0+dG9wIDwgMCkgfHwgKHBucmNTb3VyY2UtPmJvdHRvbSA+IDEpKQorICAg
ICAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisKKyAgICBpZiAocHJjRGVzdCkg
eworICAgICAgICBpZiAoKHByY0Rlc3QtPmxlZnQgPiBwcmNEZXN0LT5yaWdodCkgfHwgKHByY0Rl
c3QtPnRvcCA+IHByY0Rlc3QtPmJvdHRvbSkpCisgICAgICAgICAgICByZXR1cm4gRV9JTlZBTElE
QVJHOworICAgIH0KKworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgLy8gU2V0IHRoZSBz
b3VyY2UgcmVjdGFuZ2xlLgorICAgIGlmIChwbnJjU291cmNlKSB7CisgICAgICAgIG1fc291cmNl
UmVjdCA9ICpwbnJjU291cmNlOworCisgICAgICAgIGlmIChtX21peGVyKSB7CisgICAgICAgICAg
ICBociA9IHNldE1peGVyU291cmNlUmVjdChtX21peGVyLmdldCgpLCBtX3NvdXJjZVJlY3QpOwor
ICAgICAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhyOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUu
CisgICAgaWYgKHByY0Rlc3QpIHsKKyAgICAgICAgUkVDVCByY09sZERlc3QgPSBtX3ByZXNlbnRl
ckVuZ2luZS0+Z2V0RGVzdGluYXRpb25SZWN0KCk7CisKKyAgICAgICAgLy8gSWYgdGhlIGRlc3Rp
bmF0aW9uIHJlY3RhbmdsZSBoYXNuJ3QgY2hhbmdlZCwgd2UgYXJlIGRvbmUuCisgICAgICAgIGlm
ICghRXF1YWxSZWN0KCZyY09sZERlc3QsIHByY0Rlc3QpKSB7CisgICAgICAgICAgICBociA9IG1f
cHJlc2VudGVyRW5naW5lLT5zZXREZXN0aW5hdGlvblJlY3QoKnByY0Rlc3QpOworICAgICAgICAg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhyOworCisgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGNoYW5nZSB0aGUgbWVkaWEgdHlwZSB3aGVuIHRoZSBkZXN0aW5h
dGlvbiByZWN0YW5nbGUgaGFzIGNoYW5nZWQuCisgICAgICAgICAgICBpZiAobV9taXhlcikgewor
ICAgICAgICAgICAgICAgIGhyID0gcmVuZWdvdGlhdGVNZWRpYVR5cGUoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaHIgPT0gTUZfRV9UUkFOU0ZPUk1fVFlQRV9OT1RfU0VUKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgY3JpdGljYWwgZmFpbHVyZTsgdGhlIEVWUiB3aWxs
IGxldCB1cyBrbm93IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBzZXQg
dGhlIG1peGVyIG1lZGlhIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGhyID0gU19PSzsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBocjsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBoYXZlIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRoZSBtZWRpYSB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAvLyBhc2sgZm9yIGEgcmVwYWludCBvZiB0aGUgY3VycmVudCBmcmFt
ZS4KKyAgICAgICAgICAgICAgICAgICAgbV9yZXBhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgcHJvY2Vzc091dHB1dCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OkdldFZp
ZGVvUG9zaXRpb24oTUZWaWRlb05vcm1hbGl6ZWRSZWN0KiBwbnJjU291cmNlLCBMUFJFQ1QgcHJj
RGVzdCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgaWYgKCFwbnJj
U291cmNlIHx8ICFwcmNEZXN0KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgKnBu
cmNTb3VyY2UgPSBtX3NvdXJjZVJlY3Q7CisgICAgKnByY0Rlc3QgPSBtX3ByZXNlbnRlckVuZ2lu
ZS0+Z2V0RGVzdGluYXRpb25SZWN0KCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VM
VCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVy
OjpSZXBhaW50VmlkZW8oKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAg
ICBIUkVTVUxUIGhyID0gY2hlY2tTaHV0ZG93bigpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAg
ICAgICByZXR1cm4gaHI7CisKKyAgICAvLyBDaGVjayB0aGF0IGF0IGxlYXN0IG9uZSBzYW1wbGUg
aGFzIGJlZW4gcHJlc2VudGVkLgorICAgIGlmIChtX3ByZXJvbGxlZCkgeworICAgICAgICBtX3Jl
cGFpbnQgPSB0cnVlOworICAgICAgICBwcm9jZXNzT3V0cHV0KCk7CisgICAgfQorCisgICAgcmV0
dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6SW52b2tlKElNRkFzeW5jUmVzdWx0KiBwQXN5bmNSZXN1
bHQpCit7CisgICAgcmV0dXJuIG9uU2FtcGxlRnJlZShwQXN5bmNSZXN1bHQpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6
Om9uTWVkaWFQbGF5ZXJEZWxldGVkKCkKK3sKKyAgICBtX21lZGlhUGxheWVyID0gbnVsbHB0cjsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVv
UHJlc2VudGVyOjpwYWludEN1cnJlbnRGcmFtZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBpZiAobV9wcmVzZW50ZXJFbmdpbmUpCisgICAgICAg
IG1fcHJlc2VudGVyRW5naW5lLT5wYWludEN1cnJlbnRGcmFtZShjb250ZXh0LCByKTsKK30KKwor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkN1c3RvbVZpZGVvUHJlc2Vu
dGVyOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICgobV9yZW5kZXJTdGF0ZSA9PSBS
ZW5kZXJTdGF0ZVN0YXJ0ZWQpIHx8IChtX3JlbmRlclN0YXRlID09IFJlbmRlclN0YXRlUGF1c2Vk
KSk7CiB9CiAKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0
b21WaWRlb1ByZXNlbnRlcjo6Y29uZmlndXJlTWl4ZXIoSU1GVHJhbnNmb3JtKiBtaXhlcikKK3sK
KyAgICBDT01QdHI8SU1GVmlkZW9EZXZpY2VJRD4gdmlkZW9EZXZpY2VJRDsKKyAgICBIUkVTVUxU
IGhyID0gbWl4ZXItPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElNRlZpZGVvRGV2aWNlSUQpLCAo
dm9pZCoqKSZ2aWRlb0RldmljZUlEKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIGhyOworCisgICAgSUlEIGRldmljZUlEID0gR1VJRF9OVUxMOworICAgIGhyID0gdmlkZW9E
ZXZpY2VJRC0+R2V0RGV2aWNlSUQoJmRldmljZUlEKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAg
ICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gVGhlIG1peGVyIG11c3QgaGF2ZSB0aGlzIGRldmlj
ZSBJRC4KKyAgICBpZiAoIUlzRXF1YWxHVUlEKGRldmljZUlELCBfX3V1aWRvZihJRGlyZWN0M0RE
ZXZpY2U5KSkpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURSRVFVRVNUOworCisgICAgc2V0
TWl4ZXJTb3VyY2VSZWN0KG1peGVyLCBtX3NvdXJjZVJlY3QpOworCisgICAgcmV0dXJuIFNfT0s7
Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21W
aWRlb1ByZXNlbnRlcjo6Zmx1c2goKQoreworICAgIG1fcHJlcm9sbGVkID0gZmFsc2U7CisKKyAg
ICAvLyBGbHVzaCB0aGUgc2NlZHVsZXIuCisgICAgLy8gVGhpcyBjYWxsIHdpbGwgYmxvY2sgdW50
aWwgdGhlIHNjaGVkdWxlciB0aHJlYWQgaGFzIGZpbmlzaGVkIGZsdXNoaW5nLgorICAgIG1fc2No
ZWR1bGVyLmZsdXNoKCk7CisKKyAgICBpZiAobV9yZW5kZXJTdGF0ZSA9PSBSZW5kZXJTdGF0ZVN0
b3BwZWQpCisgICAgICAgIG1fcHJlc2VudGVyRW5naW5lLT5wcmVzZW50U2FtcGxlKG51bGxwdHIs
IDApOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK3N0YXRpYyBib29sIGFyZU1lZGlhVHlwZXNF
cXVhbChJTUZNZWRpYVR5cGUqIHR5cGUxLCBJTUZNZWRpYVR5cGUqIHR5cGUyKQoreworICAgIGlm
ICghdHlwZTEgJiYgIXR5cGUyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIXR5cGUx
IHx8ICF0eXBlMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRFdPUkQgZmxhZ3MgPSAw
OworICAgIHJldHVybiBTX09LID09IHR5cGUxLT5Jc0VxdWFsKHR5cGUyLCAmZmxhZ3MpOworfQor
CitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6OnNldE1lZGlhVHlwZShJTUZNZWRpYVR5cGUqIG1lZGlhVHlwZSkKK3sKKyAgICBp
ZiAoIW1lZGlhVHlwZSkgeworICAgICAgICBtX21lZGlhVHlwZSA9IG51bGxwdHI7CisgICAgICAg
IHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAg
Ly8gSWYgd2UgaGF2ZSBzaHV0IGRvd24sIHdlIGNhbm5vdCBzZXQgdGhlIG1lZGlhIHR5cGUuCisg
ICAgSFJFU1VMVCBociA9IGNoZWNrU2h1dGRvd24oKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgewor
ICAgICAgICByZWxlYXNlUmVzb3VyY2VzKCk7CisgICAgICAgIHJldHVybiBocjsKKyAgICB9CisK
KyAgICBpZiAoYXJlTWVkaWFUeXBlc0VxdWFsKG1fbWVkaWFUeXBlLmdldCgpLCBtZWRpYVR5cGUp
KQorICAgICAgICByZXR1cm4gU19PSzsKKworICAgIG1fbWVkaWFUeXBlID0gbnVsbHB0cjsKKyAg
ICByZWxlYXNlUmVzb3VyY2VzKCk7CisKKyAgICAvLyBHZXQgYWxsb2NhdGVkIHNhbXBsZXMgZnJv
bSB0aGUgcHJlc2VudGVyLgorICAgIFZpZGVvU2FtcGxlTGlzdCBzYW1wbGVRdWV1ZTsKKyAgICBo
ciA9IG1fcHJlc2VudGVyRW5naW5lLT5jcmVhdGVWaWRlb1NhbXBsZXMobWVkaWFUeXBlLCBzYW1w
bGVRdWV1ZSk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgcmVsZWFzZVJlc291cmNl
cygpOworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSB0b2tlbiBj
b3VudGVyIG9uIGVhY2ggc2FtcGxlLgorICAgIC8vIFRoaXMgd2lsbCBoZWxwIHVzIHRvIGRldGVy
bWluZSB3aGVuIHRoZXkgYXJlIGludmFsaWQsIGFuZCBjYW4gYmUgcmVsZWFzZWQuCisgICAgZm9y
IChhdXRvIHNhbXBsZSA6IHNhbXBsZVF1ZXVlKSB7CisgICAgICAgIGhyID0gc2FtcGxlLT5TZXRV
SU5UMzIoTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVDb3VudGVyLCBtX3Rva2VuQ291bnRlcik7Cisg
ICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICByZWxlYXNlUmVzb3VyY2VzKCk7
CisgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBZGQg
dGhlIHNhbXBsZXMgdG8gdGhlIHNhbXBsZSBwb29sLgorICAgIGhyID0gbV9zYW1wbGVQb29sLmlu
aXRpYWxpemUoc2FtcGxlUXVldWUpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIHJl
bGVhc2VSZXNvdXJjZXMoKTsKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIC8vIFNl
dCB0aGUgZnJhbWUgcmF0ZS4gCisgICAgTUZSYXRpbyBmcHMgPSB7IDAsIDAgfTsKKyAgICBociA9
IE1GR2V0QXR0cmlidXRlUmF0aW8obWVkaWFUeXBlLCBNRl9NVF9GUkFNRV9SQVRFLCAoVUlOVDMy
KikmZnBzLk51bWVyYXRvciwgKFVJTlQzMiopJmZwcy5EZW5vbWluYXRvcik7CisgICAgaWYgKFNV
Q0NFRURFRChocikgJiYgZnBzLk51bWVyYXRvciAmJiBmcHMuRGVub21pbmF0b3IpCisgICAgICAg
IG1fc2NoZWR1bGVyLnNldEZyYW1lUmF0ZShmcHMpOworICAgIGVsc2UgeworICAgICAgICAvLyBX
ZSBjb3VsZCBub3QgZ2V0IHRoZSBmcmFtZSByZXQsIHVzZSBkZWZhdWx0LgorICAgICAgICBjb25z
dCBNRlJhdGlvIGRlZmF1bHRGcmFtZVJhdGUgPSB7IDMwLCAxIH07CisgICAgICAgIG1fc2NoZWR1
bGVyLnNldEZyYW1lUmF0ZShkZWZhdWx0RnJhbWVSYXRlKTsKKyAgICB9CisKKyAgICBBU1NFUlQo
bWVkaWFUeXBlKTsKKyAgICBtX21lZGlhVHlwZSA9IG1lZGlhVHlwZTsKKworICAgIHJldHVybiBT
X09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OmNoZWNrU2h1dGRvd24oKSBjb25zdAoreworICAgIGlmIChtX3Jl
bmRlclN0YXRlID09IFJlbmRlclN0YXRlU2h1dGRvd24pCisgICAgICAgIHJldHVybiBNRl9FX1NI
VVRET1dOOworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OnJlbmVnb3RpYXRlTWVkaWFU
eXBlKCkKK3sKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgIGlmICghbV9taXhlcikKKyAg
ICAgICAgcmV0dXJuIE1GX0VfSU5WQUxJRFJFUVVFU1Q7CisKKyAgICAvLyBJdGVyYXRlIG92ZXIg
dGhlIGF2YWlsYWJsZSBvdXRwdXQgdHlwZXMgb2YgdGhlIG1peGVyLgorCisgICAgRFdPUkQgdHlw
ZUluZGV4ID0gMDsKKyAgICBib29sIGZvdW5kTWVkaWFUeXBlID0gZmFsc2U7CisgICAgd2hpbGUg
KCFmb3VuZE1lZGlhVHlwZSAmJiAoaHIgIT0gTUZfRV9OT19NT1JFX1RZUEVTKSkgeworICAgICAg
ICAvLyBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIG1lZGlhIHR5cGUuCisgICAgICAgIENPTVB0cjxJ
TUZNZWRpYVR5cGU+IG1peGVyVHlwZTsKKyAgICAgICAgaHIgPSBtX21peGVyLT5HZXRPdXRwdXRB
dmFpbGFibGVUeXBlKDAsIHR5cGVJbmRleCsrLCAmbWl4ZXJUeXBlKTsKKyAgICAgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBEbyB3ZSBzdXBwb3J0
IHRoaXMgbWVkaWEgdHlwZT8KKyAgICAgICAgaHIgPSBpc01lZGlhVHlwZVN1cHBvcnRlZChtaXhl
clR5cGUuZ2V0KCkpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIC8vIE1ha2UgYWRqdXN0bWVudHMgdG8gcHJvcG9zZWQgbWVkaWEgdHlwZS4K
KyAgICAgICAgQ09NUHRyPElNRk1lZGlhVHlwZT4gb3B0aW1hbFR5cGU7CisgICAgICAgIGhyID0g
Y3JlYXRlT3B0aW1hbFZpZGVvVHlwZShtaXhlclR5cGUuZ2V0KCksICZvcHRpbWFsVHlwZSk7Cisg
ICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8g
VGVzdCB3aGV0aGVyIHRoZSBtaXhlciBjYW4gYWNjZXB0IHRoZSBtb2RpZmllZCBtZWRpYSB0eXBl
CisgICAgICAgIGhyID0gbV9taXhlci0+U2V0T3V0cHV0VHlwZSgwLCBvcHRpbWFsVHlwZS5nZXQo
KSwgTUZUX1NFVF9UWVBFX1RFU1RfT05MWSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gVHJ5IHRvIHNldCB0aGUgbmV3IG1lZGlhIHR5
cGUKKworICAgICAgICBociA9IHNldE1lZGlhVHlwZShvcHRpbWFsVHlwZS5nZXQoKSk7CisgICAg
ICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaHIgPSBt
X21peGVyLT5TZXRPdXRwdXRUeXBlKDAsIG9wdGltYWxUeXBlLmdldCgpLCAwKTsKKworICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgICAgICBzZXRNZWRpYVR5cGUobnVsbHB0cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGZvdW5kTWVkaWFUeXBlID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKK0hS
RVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNl
bnRlcjo6cHJvY2Vzc0lucHV0Tm90aWZ5KCkKK3sKKyAgICAvLyBXZSBoYXZlIGEgbmV3IHNhbXBs
ZS4KKyAgICBtX3NhbXBsZU5vdGlmeSA9IHRydWU7CisKKyAgICBpZiAoIW1fbWVkaWFUeXBlKSB7
CisgICAgICAgIC8vIFRoZSBtZWRpYSB0eXBlIGlzIG5vdCB2YWxpZC4KKyAgICAgICAgcmV0dXJu
IE1GX0VfVFJBTlNGT1JNX1RZUEVfTk9UX1NFVDsKKyAgICB9IAorICAgIAorICAgIC8vIEludmFs
aWRhdGUgdGhlIHZpZGVvIGFyZWEKKyAgICBpZiAobV9tZWRpYVBsYXllcikgeworICAgICAgICBh
dXRvIHdlYWtQdHIgPSBtX21lZGlhUGxheWVyLT5tX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQ
dHIoKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbd2Vha1B0cl0geworICAgICAgICAgICAg
aWYgKHdlYWtQdHIpCisgICAgICAgICAgICAgICAgd2Vha1B0ci0+aW52YWxpZGF0ZUZyYW1lVmll
dygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBQcm9jZXNzIHNhbXBsZQorICAgIHBy
b2Nlc3NPdXRwdXRMb29wKCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworc3RhdGljIGZsb2F0
IE1GT2Zmc2V0VG9GbG9hdChjb25zdCBNRk9mZnNldCYgb2Zmc2V0KQoreworICAgIGNvbnN0IGlu
dCBkZW5vbWluYXRvciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8V09SRD46Om1heCgpICsgMTsKKyAg
ICByZXR1cm4gb2Zmc2V0LnZhbHVlICsgKGZsb2F0KG9mZnNldC5mcmFjdCkgLyBkZW5vbWluYXRv
cik7Cit9CisKK3N0YXRpYyBNRk9mZnNldCBNYWtlT2Zmc2V0KGZsb2F0IHYpCit7CisgICAgLy8g
diA9IG9mZnNldC52YWx1ZSArIChvZmZzZXQuZnJhY3QgLyBkZW5vbWluYXRvciksIHdoZXJlIGRl
bm9taW5hdG9yID0gNjU1MzYuMGYuCisgICAgY29uc3QgaW50IGRlbm9taW5hdG9yID0gc3RkOjpu
dW1lcmljX2xpbWl0czxXT1JEPjo6bWF4KCkgKyAxOworICAgIE1GT2Zmc2V0IG9mZnNldDsKKyAg
ICBvZmZzZXQudmFsdWUgPSBzaG9ydCh2KTsKKyAgICBvZmZzZXQuZnJhY3QgPSBXT1JEKGRlbm9t
aW5hdG9yICogKHYgLSBvZmZzZXQudmFsdWUpKTsKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCitz
dGF0aWMgTUZWaWRlb0FyZWEgTWFrZUFyZWEoZmxvYXQgeCwgZmxvYXQgeSwgRFdPUkQgd2lkdGgs
IERXT1JEIGhlaWdodCkKK3sKKyAgICBNRlZpZGVvQXJlYSBhcmVhOworICAgIGFyZWEuT2Zmc2V0
WCA9IE1ha2VPZmZzZXQoeCk7CisgICAgYXJlYS5PZmZzZXRZID0gTWFrZU9mZnNldCh5KTsKKyAg
ICBhcmVhLkFyZWEuY3ggPSB3aWR0aDsKKyAgICBhcmVhLkFyZWEuY3kgPSBoZWlnaHQ7CisgICAg
cmV0dXJuIGFyZWE7Cit9CisKK3N0YXRpYyBIUkVTVUxUIHZhbGlkYXRlVmlkZW9BcmVhKGNvbnN0
IE1GVmlkZW9BcmVhJiBhcmVhLCBVSU5UMzIgd2lkdGgsIFVJTlQzMiBoZWlnaHQpCit7CisgICAg
ZmxvYXQgZk9mZnNldFggPSBNRk9mZnNldFRvRmxvYXQoYXJlYS5PZmZzZXRYKTsKKyAgICBmbG9h
dCBmT2Zmc2V0WSA9IE1GT2Zmc2V0VG9GbG9hdChhcmVhLk9mZnNldFkpOworCisgICAgaWYgKCgo
TE9ORylmT2Zmc2V0WCArIGFyZWEuQXJlYS5jeCA+IHdpZHRoKSB8fCAoKExPTkcpZk9mZnNldFkg
KyBhcmVhLkFyZWEuY3kgPiBoZWlnaHQpKQorICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElETUVE
SUFUWVBFOworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmJlZ2luU3RyZWFtaW5nKCkK
K3sKKyAgICByZXR1cm4gbV9zY2hlZHVsZXIuc3RhcnRTY2hlZHVsZXIobV9jbG9jay5nZXQoKSk7
Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21W
aWRlb1ByZXNlbnRlcjo6ZW5kU3RyZWFtaW5nKCkKK3sKKyAgICByZXR1cm4gbV9zY2hlZHVsZXIu
c3RvcFNjaGVkdWxlcigpOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmNoZWNrRW5kT2ZTdHJlYW0oKQoreworICAg
IGlmICghbV9lbmRTdHJlYW1pbmcpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBub3QgcmVjZWl2ZWQg
dGhlIGVuZC1vZi1zdHJlYW0gbWVzc2FnZSBmcm9tIHRoZSBFVlIuCisgICAgICAgIHJldHVybiBT
X09LOworICAgIH0KKworICAgIGlmIChtX3NhbXBsZU5vdGlmeSkgeworICAgICAgICAvLyBUaGVy
ZSBpcyBzdGlsbCBpbnB1dCBzYW1wbGVzIGF2YWlsYWJsZSBmb3IgdGhlIG1peGVyLiAKKyAgICAg
ICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgaWYgKG1fc2FtcGxlUG9vbC5hcmVTYW1wbGVz
UGVuZGluZygpKSB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBzYW1wbGVzIHNjaGVkdWxlZCBmb3Ig
cmVuZGVyaW5nLgorICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICAvLyBXZSBhcmUg
ZG9uZSwgbm90aWZ5IHRoZSBFVlIuCisgICAgbm90aWZ5RXZlbnQoRUNfQ09NUExFVEUsIChMT05H
X1BUUilTX09LLCAwKTsKKyAgICBtX2VuZFN0cmVhbWluZyA9IGZhbHNlOworICAgIHJldHVybiBT
X09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3Vz
dG9tVmlkZW9QcmVzZW50ZXI6OmlzTWVkaWFUeXBlU3VwcG9ydGVkKElNRk1lZGlhVHlwZSogbWVk
aWFUeXBlKQoreworICAgIENPTVB0cjxJTUZNZWRpYVR5cGU+IHByb3Bvc2VkVmlkZW9UeXBlID0g
bWVkaWFUeXBlOworCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBjb21wcmVzc2VkIG1lZGlhIHR5
cGVzLgorICAgIEJPT0wgY29tcHJlc3NlZCA9IEZBTFNFOworICAgIEhSRVNVTFQgaHIgPSBwcm9w
b3NlZFZpZGVvVHlwZS0+SXNDb21wcmVzc2VkRm9ybWF0KCZjb21wcmVzc2VkKTsKKyAgICBpZiAo
RkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworICAgIGlmIChjb21wcmVzc2VkKQorICAg
ICAgICByZXR1cm4gTUZfRV9JTlZBTElETUVESUFUWVBFOworCisgICAgLy8gVmFsaWRhdGUgdGhl
IGZvcm1hdC4KKyAgICBHVUlEIGd1aWRTdWJUeXBlID0gR1VJRF9OVUxMOworICAgIGhyID0gcHJv
cG9zZWRWaWRlb1R5cGUtPkdldEdVSUQoTUZfTVRfU1VCVFlQRSwgJmd1aWRTdWJUeXBlKTsKKyAg
ICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworICAgIEQzREZPUk1BVCBkM2RG
b3JtYXQgPSAoRDNERk9STUFUKWd1aWRTdWJUeXBlLkRhdGExOworCisgICAgLy8gQ2hlY2sgaWYg
dGhlIGZvcm1hdCBjYW4gYmUgdXNlZCBhcyBiYWNrYnVmZmVyIGZvcm1hdC4KKyAgICBociA9IG1f
cHJlc2VudGVyRW5naW5lLT5jaGVja0Zvcm1hdChkM2RGb3JtYXQpOworICAgIGlmIChGQUlMRUQo
aHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICAvLyBDaGVjayBpbnRlcmxhY2VkIGZvcm1h
dHMuCisgICAgTUZWaWRlb0ludGVybGFjZU1vZGUgaW50ZXJsYWNlTW9kZSA9IE1GVmlkZW9JbnRl
cmxhY2VfVW5rbm93bjsKKyAgICBociA9IHByb3Bvc2VkVmlkZW9UeXBlLT5HZXRVSU5UMzIoTUZf
TVRfSU5URVJMQUNFX01PREUsIChVSU5UMzIqKSZpbnRlcmxhY2VNb2RlKTsKKyAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaWYgKGludGVybGFjZU1vZGUgIT0g
TUZWaWRlb0ludGVybGFjZV9Qcm9ncmVzc2l2ZSkKKyAgICAgICAgcmV0dXJuIE1GX0VfSU5WQUxJ
RE1FRElBVFlQRTsKKworICAgIFVJTlQzMiB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisgICAgaHIg
PSBNRkdldEF0dHJpYnV0ZVNpemUocHJvcG9zZWRWaWRlb1R5cGUuZ2V0KCksIE1GX01UX0ZSQU1F
X1NJWkUsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybiBocjsKKworICAgIC8vIFZhbGlkYXRlIGFwZXJ0dXJlcy4KKyAgICBNRlZpZGVvQXJlYSB2
aWRlb0Nyb3BBcmVhOworICAgIGlmIChTVUNDRUVERUQocHJvcG9zZWRWaWRlb1R5cGUtPkdldEJs
b2IoTUZfTVRfUEFOX1NDQU5fQVBFUlRVUkUsIChVSU5UOCopJnZpZGVvQ3JvcEFyZWEsIHNpemVv
ZihNRlZpZGVvQXJlYSksIG51bGxwdHIpKSkKKyAgICAgICAgdmFsaWRhdGVWaWRlb0FyZWEodmlk
ZW9Dcm9wQXJlYSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKFNVQ0NFRURFRChwcm9wb3NlZFZp
ZGVvVHlwZS0+R2V0QmxvYihNRl9NVF9HRU9NRVRSSUNfQVBFUlRVUkUsIChVSU5UOCopJnZpZGVv
Q3JvcEFyZWEsIHNpemVvZihNRlZpZGVvQXJlYSksIG51bGxwdHIpKSkKKyAgICAgICAgdmFsaWRh
dGVWaWRlb0FyZWEodmlkZW9Dcm9wQXJlYSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKFNVQ0NF
RURFRChwcm9wb3NlZFZpZGVvVHlwZS0+R2V0QmxvYihNRl9NVF9NSU5JTVVNX0RJU1BMQVlfQVBF
UlRVUkUsIChVSU5UOCopJnZpZGVvQ3JvcEFyZWEsIHNpemVvZihNRlZpZGVvQXJlYSksIG51bGxw
dHIpKSkKKyAgICAgICAgdmFsaWRhdGVWaWRlb0FyZWEodmlkZW9Dcm9wQXJlYSwgd2lkdGgsIGhl
aWdodCk7CisgICAgCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6Y3JlYXRlT3B0aW1h
bFZpZGVvVHlwZShJTUZNZWRpYVR5cGUqIHByb3Bvc2VkVHlwZSwgSU1GTWVkaWFUeXBlKiogb3B0
aW1hbFR5cGUpCit7CisgICAgQ09NUHRyPElNRk1lZGlhVHlwZT4gb3B0aW1hbFZpZGVvVHlwZTsK
KyAgICBIUkVTVUxUIGhyID0gTUZDcmVhdGVNZWRpYVR5cGUoJm9wdGltYWxWaWRlb1R5cGUpOwor
ICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisgICAgaHIgPSBvcHRpbWFs
VmlkZW9UeXBlLT5TZXRHVUlEKE1GX01UX01BSk9SX1RZUEUsIE1GTWVkaWFUeXBlX1ZpZGVvKTsK
KyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBwcm9w
b3NlZFR5cGUtPkNvcHlBbGxJdGVtcyhvcHRpbWFsVmlkZW9UeXBlLmdldCgpKTsKKyAgICBpZiAo
RkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgLy8gV2Ugbm93IG1vZGlmeSB0
aGUgbmV3IG1lZGlhIHR5cGUuCisKKyAgICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgbW9uaXRvcidz
IHBpeGVsIGFzcGVjdCByYXRpbyBpcyAxOjEsCisgICAgLy8gYW5kIHRoYXQgdGhlIHBpeGVsIGFz
cGVjdCByYXRpbyBpcyBwcmVzZXJ2ZWQgYnkgdGhlIHByZXNlbnRlci4KKyAgICBociA9IE1GU2V0
QXR0cmlidXRlUmF0aW8ob3B0aW1hbFZpZGVvVHlwZS5nZXQoKSwgTUZfTVRfUElYRUxfQVNQRUNU
X1JBVElPLCAxLCAxKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOwor
CisgICAgLy8gR2V0IHRoZSBvdXRwdXQgcmVjdGFuZ2xlLgorICAgIFJFQ1QgcmNPdXRwdXQgPSBt
X3ByZXNlbnRlckVuZ2luZS0+Z2V0RGVzdGluYXRpb25SZWN0KCk7CisgICAgaWYgKElzUmVjdEVt
cHR5KCZyY091dHB1dCkpIHsKKyAgICAgICAgaHIgPSBjYWxjdWxhdGVPdXRwdXRSZWN0YW5nbGUo
cHJvcG9zZWRUeXBlLCByY091dHB1dCk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAg
ICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIGhyID0gb3B0aW1hbFZpZGVvVHlwZS0+U2V0
VUlOVDMyKE1GX01UX1lVVl9NQVRSSVgsIE1GVmlkZW9UcmFuc2Zlck1hdHJpeF9CVDcwOSk7Cisg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gb3B0aW1h
bFZpZGVvVHlwZS0+U2V0VUlOVDMyKE1GX01UX1RSQU5TRkVSX0ZVTkNUSU9OLCBNRlZpZGVvVHJh
bnNGdW5jXzcwOSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKwor
ICAgIGhyID0gb3B0aW1hbFZpZGVvVHlwZS0+U2V0VUlOVDMyKE1GX01UX1ZJREVPX1BSSU1BUklF
UywgTUZWaWRlb1ByaW1hcmllc19CVDcwOSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
IHJldHVybiBocjsKKworICAgIGhyID0gb3B0aW1hbFZpZGVvVHlwZS0+U2V0VUlOVDMyKE1GX01U
X1ZJREVPX05PTUlOQUxfUkFOR0UsIE1GTm9taW5hbFJhbmdlXzE2XzIzNSk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gb3B0aW1hbFZpZGVvVHlw
ZS0+U2V0VUlOVDMyKE1GX01UX1ZJREVPX0xJR0hUSU5HLCBNRlZpZGVvTGlnaHRpbmdfZGltKTsK
KyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBNRlNl
dEF0dHJpYnV0ZVNpemUob3B0aW1hbFZpZGVvVHlwZS5nZXQoKSwgTUZfTVRfRlJBTUVfU0laRSwg
cmNPdXRwdXQucmlnaHQsIHJjT3V0cHV0LmJvdHRvbSk7CisgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgIHJldHVybiBocjsKKworICAgIE1GVmlkZW9BcmVhIGRpc3BsYXlBcmVhID0gTWFrZUFy
ZWEoMCwgMCwgcmNPdXRwdXQucmlnaHQsIHJjT3V0cHV0LmJvdHRvbSk7CisKKyAgICBociA9IG9w
dGltYWxWaWRlb1R5cGUtPlNldFVJTlQzMihNRl9NVF9QQU5fU0NBTl9FTkFCTEVELCBGQUxTRSk7
CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gb3B0
aW1hbFZpZGVvVHlwZS0+U2V0QmxvYihNRl9NVF9HRU9NRVRSSUNfQVBFUlRVUkUsIChVSU5UOCop
JmRpc3BsYXlBcmVhLCBzaXplb2YoTUZWaWRlb0FyZWEpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBvcHRpbWFsVmlkZW9UeXBlLT5TZXRCbG9i
KE1GX01UX1BBTl9TQ0FOX0FQRVJUVVJFLCAoVUlOVDgqKSZkaXNwbGF5QXJlYSwgc2l6ZW9mKE1G
VmlkZW9BcmVhKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKwor
ICAgIGhyID0gb3B0aW1hbFZpZGVvVHlwZS0+U2V0QmxvYihNRl9NVF9NSU5JTVVNX0RJU1BMQVlf
QVBFUlRVUkUsIChVSU5UOCopJmRpc3BsYXlBcmVhLCBzaXplb2YoTUZWaWRlb0FyZWEpKTsKKyAg
ICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgKm9wdGltYWxUeXBl
ID0gb3B0aW1hbFZpZGVvVHlwZS5sZWFrUmVmKCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKwor
c3RhdGljIFJFQ1QgY29ycmVjdEFzcGVjdFJhdGlvKGNvbnN0IFJFQ1QmIHNyYywgY29uc3QgTUZS
YXRpbyYgc3JjUEFSLCBjb25zdCBNRlJhdGlvJiBkZXN0UEFSKQoreworICAgIFJFQ1QgcmMgPSB7
IDAsIDAsIHNyYy5yaWdodCAtIHNyYy5sZWZ0LCBzcmMuYm90dG9tIC0gc3JjLnRvcCB9OworCisg
ICAgaWYgKChzcmNQQVIuTnVtZXJhdG9yICogZGVzdFBBUi5EZW5vbWluYXRvcikgIT0gKHNyY1BB
Ui5EZW5vbWluYXRvciAqIGRlc3RQQVIuTnVtZXJhdG9yKSkgeworICAgICAgICAvLyBUaGUgc291
cmNlIGFuZCBkZXN0aW5hdGlvbiBhc3BlY3QgcmF0aW9zIGFyZSBkaWZmZXJlbnQKKworICAgICAg
ICAvLyBUcmFuc2Zvcm0gdGhlIHNvdXJjZSBhc3BlY3QgcmF0aW8gdG8gMToxCisgICAgICAgIGlm
IChzcmNQQVIuTnVtZXJhdG9yID4gc3JjUEFSLkRlbm9taW5hdG9yKQorICAgICAgICAgICAgcmMu
cmlnaHQgPSBNdWxEaXYocmMucmlnaHQsIHNyY1BBUi5OdW1lcmF0b3IsIHNyY1BBUi5EZW5vbWlu
YXRvcik7CisgICAgICAgIGVsc2UgaWYgKHNyY1BBUi5OdW1lcmF0b3IgPCBzcmNQQVIuRGVub21p
bmF0b3IpCisgICAgICAgICAgICByYy5ib3R0b20gPSBNdWxEaXYocmMuYm90dG9tLCBzcmNQQVIu
RGVub21pbmF0b3IsIHNyY1BBUi5OdW1lcmF0b3IpOworCisKKyAgICAgICAgLy8gVHJhbnNmb3Jt
IHRvIGRlc3RpbmF0aW9uIGFzcGVjdCByYXRpby4KKyAgICAgICAgaWYgKGRlc3RQQVIuTnVtZXJh
dG9yID4gZGVzdFBBUi5EZW5vbWluYXRvcikKKyAgICAgICAgICAgIHJjLmJvdHRvbSA9IE11bERp
dihyYy5ib3R0b20sIGRlc3RQQVIuTnVtZXJhdG9yLCBkZXN0UEFSLkRlbm9taW5hdG9yKTsKKyAg
ICAgICAgZWxzZSBpZiAoZGVzdFBBUi5OdW1lcmF0b3IgPCBkZXN0UEFSLkRlbm9taW5hdG9yKQor
ICAgICAgICAgICAgcmMucmlnaHQgPSBNdWxEaXYocmMucmlnaHQsIGRlc3RQQVIuRGVub21pbmF0
b3IsIGRlc3RQQVIuTnVtZXJhdG9yKTsKKworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKwor
c3RhdGljIEhSRVNVTFQgR2V0VmlkZW9EaXNwbGF5QXJlYShJTUZNZWRpYVR5cGUgKnR5cGUsIE1G
VmlkZW9BcmVhICphcmVhKQoreworICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgIEJPT0wgYlBh
blNjYW4gPSBGQUxTRTsKKyAgICBVSU5UMzIgd2lkdGggPSAwLCBoZWlnaHQgPSAwOworCisgICAg
YlBhblNjYW4gPSBNRkdldEF0dHJpYnV0ZVVJTlQzMih0eXBlLCBNRl9NVF9QQU5fU0NBTl9FTkFC
TEVELCBGQUxTRSk7CisKKyAgICBpZiAoYlBhblNjYW4pCisgICAgICAgIGhyID0gdHlwZS0+R2V0
QmxvYihNRl9NVF9QQU5fU0NBTl9BUEVSVFVSRSwgKFVJTlQ4KilhcmVhLCBzaXplb2YoTUZWaWRl
b0FyZWEpLCBudWxscHRyKTsKKworICAgIGlmICghYlBhblNjYW4gfHwgaHIgPT0gTUZfRV9BVFRS
SUJVVEVOT1RGT1VORCkgeworICAgICAgICBociA9IHR5cGUtPkdldEJsb2IoTUZfTVRfTUlOSU1V
TV9ESVNQTEFZX0FQRVJUVVJFLCAoVUlOVDgqKWFyZWEsIHNpemVvZihNRlZpZGVvQXJlYSksIG51
bGxwdHIpOworCisgICAgICAgIGlmIChociA9PSBNRl9FX0FUVFJJQlVURU5PVEZPVU5EKQorICAg
ICAgICAgICAgaHIgPSB0eXBlLT5HZXRCbG9iKE1GX01UX0dFT01FVFJJQ19BUEVSVFVSRSwgKFVJ
TlQ4KilhcmVhLCBzaXplb2YoTUZWaWRlb0FyZWEpLCBudWxscHRyKTsKKworICAgICAgICBpZiAo
aHIgPT0gTUZfRV9BVFRSSUJVVEVOT1RGT1VORCkgeworICAgICAgICAgICAgaHIgPSBNRkdldEF0
dHJpYnV0ZVNpemUodHlwZSwgTUZfTVRfRlJBTUVfU0laRSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgICAgICphcmVhID0gTWFr
ZUFyZWEoMC4wLCAwLjAsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIGhyOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmNhbGN1bGF0ZU91dHB1dFJlY3RhbmdsZShJTUZNZWRp
YVR5cGUqIHByb3Bvc2VkVHlwZSwgUkVDVCYgb3V0cHV0UmVjdCkKK3sKKyAgICBDT01QdHI8SU1G
TWVkaWFUeXBlPiBwcm9wb3NlZFZpZGVvVHlwZSA9IHByb3Bvc2VkVHlwZTsKKworICAgIFVJTlQz
MiBzcmNXaWR0aCA9IDAsIHNyY0hlaWdodCA9IDA7CisgICAgSFJFU1VMVCBociA9IE1GR2V0QXR0
cmlidXRlU2l6ZShwcm9wb3NlZFZpZGVvVHlwZS5nZXQoKSwgTUZfTVRfRlJBTUVfU0laRSwgJnNy
Y1dpZHRoLCAmc3JjSGVpZ2h0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJu
IGhyOworCisgICAgTUZWaWRlb0FyZWEgZGlzcGxheUFyZWE7CisgICAgWmVyb01lbW9yeSgmZGlz
cGxheUFyZWEsIHNpemVvZihkaXNwbGF5QXJlYSkpOworCisgICAgaHIgPSBHZXRWaWRlb0Rpc3Bs
YXlBcmVhKHByb3Bvc2VkVmlkZW9UeXBlLmdldCgpLCAmZGlzcGxheUFyZWEpOworICAgIGlmIChG
QUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBMT05HIG9mZnNldFggPSAoTE9O
RylNRk9mZnNldFRvRmxvYXQoZGlzcGxheUFyZWEuT2Zmc2V0WCk7CisgICAgTE9ORyBvZmZzZXRZ
ID0gKExPTkcpTUZPZmZzZXRUb0Zsb2F0KGRpc3BsYXlBcmVhLk9mZnNldFkpOworCisgICAgLy8g
Q2hlY2sgaWYgdGhlIGRpc3BsYXkgYXJlYSBpcyB2YWxpZC4KKyAgICAvLyBJZiBpdCBpcyB2YWxp
ZCwgd2UgdXNlIGl0LiBJZiBub3QsIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9ucy4KKworICAg
IFJFQ1QgcmNPdXRwdXQ7CisKKyAgICBpZiAoZGlzcGxheUFyZWEuQXJlYS5jeCAhPSAwCisgICAg
ICAgICYmIGRpc3BsYXlBcmVhLkFyZWEuY3kgIT0gMAorICAgICAgICAmJiBvZmZzZXRYICsgZGlz
cGxheUFyZWEuQXJlYS5jeCA8PSBzcmNXaWR0aAorICAgICAgICAmJiBvZmZzZXRZICsgZGlzcGxh
eUFyZWEuQXJlYS5jeSA8PSBzcmNIZWlnaHQpIHsKKyAgICAgICAgcmNPdXRwdXQubGVmdCA9IG9m
ZnNldFg7CisgICAgICAgIHJjT3V0cHV0LnJpZ2h0ID0gb2Zmc2V0WCArIGRpc3BsYXlBcmVhLkFy
ZWEuY3g7CisgICAgICAgIHJjT3V0cHV0LnRvcCA9IG9mZnNldFk7CisgICAgICAgIHJjT3V0cHV0
LmJvdHRvbSA9IG9mZnNldFkgKyBkaXNwbGF5QXJlYS5BcmVhLmN5OworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHJjT3V0cHV0LmxlZnQgPSAwOworICAgICAgICByY091dHB1dC50b3AgPSAwOworICAg
ICAgICByY091dHB1dC5yaWdodCA9IHNyY1dpZHRoOworICAgICAgICByY091dHB1dC5ib3R0b20g
PSBzcmNIZWlnaHQ7CisgICAgfQorCisgICAgLy8gQ29ycmVjdCBhc3BlY3QgcmF0aW8uCisKKyAg
ICBNRlJhdGlvIGlucHV0UEFSID0geyAxLCAxIH07CisgICAgTUZSYXRpbyBvdXRwdXRQQVIgPSB7
IDEsIDEgfTsgLy8gV2UgYXNzdW1lIHRoZSBtb25pdG9yJ3MgcGl4ZWxzIGFyZSBzcXVhcmUuCisg
ICAgTUZHZXRBdHRyaWJ1dGVSYXRpbyhwcm9wb3NlZFZpZGVvVHlwZS5nZXQoKSwgTUZfTVRfUElY
RUxfQVNQRUNUX1JBVElPLCAoVUlOVDMyKikmaW5wdXRQQVIuTnVtZXJhdG9yLCAoVUlOVDMyKikm
aW5wdXRQQVIuRGVub21pbmF0b3IpOworICAgIG91dHB1dFJlY3QgPSBjb3JyZWN0QXNwZWN0UmF0
aW8ocmNPdXRwdXQsIGlucHV0UEFSLCBvdXRwdXRQQVIpOworCisgICAgcmV0dXJuIFNfT0s7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1By
ZXNlbnRlcjo6cHJvY2Vzc091dHB1dExvb3AoKQoreworICAgIC8vIEdldCB2aWRlbyBmcmFtZXMg
ZnJvbSB0aGUgbWl4ZXIgYW5kIHNjaGVkdWxlIHRoZW0gZm9yIHByZXNlbnRhdGlvbi4KKyAgICBI
UkVTVUxUIGhyID0gU19PSzsKKworICAgIHdoaWxlIChociA9PSBTX09LKSB7CisgICAgICAgIGlm
ICghbV9zYW1wbGVOb3RpZnkpIHsKKyAgICAgICAgICAgIC8vIEN1cnJlbnRseSBubyBtb3JlIGlu
cHV0IHNhbXBsZXMuCisgICAgICAgICAgICBociA9IE1GX0VfVFJBTlNGT1JNX05FRURfTU9SRV9J
TlBVVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgYnJl
YWsgZnJvbSB0aGUgbG9vcCBpZiB3ZSBmYWlsIHRvIHByb2Nlc3MgYSBzYW1wbGUuCisgICAgICAg
IGhyID0gcHJvY2Vzc091dHB1dCgpOworICAgIH0KKworICAgIGlmIChociA9PSBNRl9FX1RSQU5T
Rk9STV9ORUVEX01PUkVfSU5QVVQpCisgICAgICAgIGNoZWNrRW5kT2ZTdHJlYW0oKTsKK30KKwor
c3RhdGljIEhSRVNVTFQgc2V0RGVzaXJlZFNhbXBsZVRpbWUoSU1GU2FtcGxlKiBzYW1wbGUsIGNv
bnN0IExPTkdMT05HJiBzYW1wbGVUaW1lLCBjb25zdCBMT05HTE9ORyYgZHVyYXRpb24pCit7Cisg
ICAgLy8gVG8gdGVsbCB0aGUgbWl4ZXIgdG8gZ2l2ZSB1cyBhbiBlYXJsaWVyIGZyYW1lIGZvciBy
ZXBhaW50aW5nLCB3ZSBjYW4gc2V0IHRoZSBkZXNpcmVkIHNhbXBsZSB0aW1lLgorICAgIC8vIFdl
IGhhdmUgdG8gY2xlYXIgdGhlIGRlc2lyZWQgc2FtcGxlIHRpbWUgYmVmb3JlIHJldXNpbmcgdGhl
IHNhbXBsZS4KKworICAgIGlmICghc2FtcGxlKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwor
CisgICAgQ09NUHRyPElNRkRlc2lyZWRTYW1wbGU+IGRlc2lyZWQ7CisKKyAgICBIUkVTVUxUIGhy
ID0gc2FtcGxlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJTUZEZXNpcmVkU2FtcGxlKSwgKHZv
aWQqKikmZGVzaXJlZCk7CisKKyAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgZGVzaXJl
ZC0+U2V0RGVzaXJlZFNhbXBsZVRpbWVBbmREdXJhdGlvbihzYW1wbGVUaW1lLCBkdXJhdGlvbik7
CisKKyAgICByZXR1cm4gaHI7Cit9CisKK3N0YXRpYyBIUkVTVUxUIGNsZWFyRGVzaXJlZFNhbXBs
ZVRpbWUoSU1GU2FtcGxlKiBzYW1wbGUpCit7CisgICAgaWYgKCFzYW1wbGUpCisgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CisKKyAgICAvLyBXZSBuZWVkIHRvIHJldHJpZXZlIHNvbWUgYXR0cmli
dXRlcyB3ZSBoYXZlIHNldCBvbiB0aGUgc2FtcGxlIGJlZm9yZSB3ZSBjYWxsIAorICAgIC8vIElN
RkRlc2lyZWRTYW1wbGU6OkNsZWFyKCksIGFuZCBzZXQgdGhlbSBvbmNlIG1vcmUsIHNpbmNlIHRo
ZXkgYXJlIGNsZWFyZWQgYnkKKyAgICAvLyB0aGUgQ2xlYXIoKSBjYWxsLgorCisgICAgVUlOVDMy
IGNvdW50ZXIgPSBNRkdldEF0dHJpYnV0ZVVJTlQzMihzYW1wbGUsIE1GU2FtcGxlUHJlc2VudGVy
U2FtcGxlQ291bnRlciwgKFVJTlQzMiktMSk7CisKKyAgICBDT01QdHI8SVVua25vd24+IHN3YXBD
aGFpbjsKKyAgICBzYW1wbGUtPkdldFVua25vd24oTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVTd2Fw
Q2hhaW4sIElJRF9JVW5rbm93biwgKHZvaWQqKikmc3dhcENoYWluKTsKKworICAgIENPTVB0cjxJ
TUZEZXNpcmVkU2FtcGxlPiBkZXNpcmVkOworICAgIEhSRVNVTFQgaHIgPSBzYW1wbGUtPlF1ZXJ5
SW50ZXJmYWNlKF9fdXVpZG9mKElNRkRlc2lyZWRTYW1wbGUpLCAodm9pZCoqKSZkZXNpcmVkKTsK
KyAgICBpZiAoU1VDQ0VFREVEKGhyKSkgeworICAgICAgICBkZXNpcmVkLT5DbGVhcigpOworCisg
ICAgICAgIGhyID0gc2FtcGxlLT5TZXRVSU5UMzIoTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVDb3Vu
dGVyLCBjb3VudGVyKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1
cm4gaHI7CisKKyAgICAgICAgaWYgKHN3YXBDaGFpbikgeworICAgICAgICAgICAgaHIgPSBzYW1w
bGUtPlNldFVua25vd24oTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVTd2FwQ2hhaW4sIHN3YXBDaGFp
bi5nZXQoKSk7CisgICAgICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNV
TFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRl
cjo6cHJvY2Vzc091dHB1dCgpCit7CisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCB0cnkgdG8gZ2V0
IGEgbmV3IHNhbXBsZSBmcm9tIHRoZSBtaXhlci4KKyAgICAvLyBJdCBpcyBjYWxsZWQgd2hlbiB0
aGUgbWl4ZXIgaGFzIGEgbmV3IHNhbXBsZSwgb3Igd2hlbiByZXBhaW50aW5nIHRoZSBsYXN0IGZy
YW1lLgorCisgICAgQVNTRVJUKG1fc2FtcGxlTm90aWZ5IHx8IG1fcmVwYWludCk7CisKKyAgICBM
T05HTE9ORyBtaXhlclN0YXJ0VGltZSA9IDAsIG1peGVyRW5kVGltZSA9IDA7CisgICAgTUZUSU1F
IHN5c3RlbVRpbWUgPSAwOworICAgIGJvb2wgcmVwYWludCA9IG1fcmVwYWludDsgIAorCisgICAg
Ly8gSWYgdGhlIGNsb2NrIGhhcyBub3Qgc3RhcnRlZCwgd2Ugb25seSBwcmVzZW50IHRoZSBmaXJz
dCBzYW1wbGUuIAorCisgICAgaWYgKChtX3JlbmRlclN0YXRlICE9IFJlbmRlclN0YXRlU3RhcnRl
ZCkgJiYgIW1fcmVwYWludCAmJiBtX3ByZXJvbGxlZCkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7
CisKKyAgICBpZiAoIW1fbWl4ZXIpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURSRVFVRVNU
OworCisgICAgLy8gR2V0IGEgZnJlZSBzYW1wbGUgZnJvbSB0aGUgcG9vbC4KKyAgICBDT01QdHI8
SU1GU2FtcGxlPiBzYW1wbGU7CisgICAgSFJFU1VMVCBociA9IG1fc2FtcGxlUG9vbC5nZXRTYW1w
bGUoc2FtcGxlKTsKKyAgICBpZiAoaHIgPT0gTUZfRV9TQU1QTEVBTExPQ0FUT1JfRU1QVFkpCisg
ICAgICAgIHJldHVybiBTX0ZBTFNFOyAvLyBXZSB3aWxsIHRyeSBhZ2FpbiBsYXRlciB3aGVuIHRo
ZXJlIGFyZSBmcmVlIHNhbXBsZXMKKworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1
cm4gaHI7CisKKyAgICBBU1NFUlQoc2FtcGxlKTsKKworICAgIEFTU0VSVChNRkdldEF0dHJpYnV0
ZVVJTlQzMihzYW1wbGUuZ2V0KCksIE1GU2FtcGxlUHJlc2VudGVyU2FtcGxlQ291bnRlciwgKFVJ
TlQzMiktMSkgPT0gbV90b2tlbkNvdW50ZXIpOworCisgICAgaWYgKG1fcmVwYWludCkgeworICAg
ICAgICAvLyBHZXQgdGhlIG1vc3QgcmVjZW50IHNhbXBsZSBmcm9tIHRoZSBtaXhlci4KKyAgICAg
ICAgc2V0RGVzaXJlZFNhbXBsZVRpbWUoc2FtcGxlLmdldCgpLCBtX3NjaGVkdWxlci5sYXN0U2Ft
cGxlVGltZSgpLCBtX3NjaGVkdWxlci5mcmFtZUR1cmF0aW9uKCkpOworICAgICAgICBtX3JlcGFp
bnQgPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDbGVhciB0aGUgZGVzaXJlZCBz
YW1wbGUgdGltZSB0byBnZXQgdGhlIG5leHQgc2FtcGxlIGluIHRoZSBzdHJlYW0uCisgICAgICAg
IGNsZWFyRGVzaXJlZFNhbXBsZVRpbWUoc2FtcGxlLmdldCgpKTsKKworICAgICAgICBpZiAobV9j
bG9jaykgeworICAgICAgICAgICAgLy8gR2V0IHRoZSBzdGFydGluZyB0aW1lIG9mIHRoZSBQcm9j
ZXNzT3V0cHV0IGNhbGwuCisgICAgICAgICAgICBtX2Nsb2NrLT5HZXRDb3JyZWxhdGVkVGltZSgw
LCAmbWl4ZXJTdGFydFRpbWUsICZzeXN0ZW1UaW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIEdldCBhIHNhbXBsZSBmcm9tIHRoZSBtaXhlci4gCisgICAgTUZUX09VVFBVVF9EQVRBX0JV
RkZFUiBkYXRhQnVmZmVyOworICAgIFplcm9NZW1vcnkoJmRhdGFCdWZmZXIsIHNpemVvZihkYXRh
QnVmZmVyKSk7CisKKyAgICBkYXRhQnVmZmVyLmR3U3RyZWFtSUQgPSAwOworICAgIGRhdGFCdWZm
ZXIucFNhbXBsZSA9IHNhbXBsZS5nZXQoKTsKKyAgICBkYXRhQnVmZmVyLmR3U3RhdHVzID0gMDsK
KworICAgIERXT1JEIHN0YXR1cyA9IDA7CisgICAgaHIgPSBtX21peGVyLT5Qcm9jZXNzT3V0cHV0
KDAsIDEsICZkYXRhQnVmZmVyLCAmc3RhdHVzKTsKKworICAgIC8vIFJlbGVhc2UgZXZlbnRzLiBU
aGVyZSBhcmUgdXN1YWxseSBubyBldmVudHMgcmV0dXJuZWQsCisgICAgLy8gYnV0IGluIGNhc2Ug
dGhlcmUgYXJlLCB3ZSBzaG91bGQgcmVsZWFzZSB0aGVtLgorICAgIGlmIChkYXRhQnVmZmVyLnBF
dmVudHMpCisgICAgICAgIGRhdGFCdWZmZXIucEV2ZW50cy0+UmVsZWFzZSgpOworCisgICAgaWYg
KEZBSUxFRChocikpIHsKKyAgICAgICAgSFJFU1VMVCBocjIgPSBtX3NhbXBsZVBvb2wucmV0dXJu
U2FtcGxlKHNhbXBsZS5nZXQoKSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIyKSkKKyAgICAgICAg
ICAgIHJldHVybiBocjI7CisKKyAgICAgICAgaWYgKGhyID09IE1GX0VfVFJBTlNGT1JNX1RZUEVf
Tk9UX1NFVCkgeworICAgICAgICAgICAgLy8gVGhlIG1lZGlhIHR5cGUgaGFzIG5vdCBiZWVuIHNl
dCwgcmVuZWdvdGlhdGUuCisgICAgICAgICAgICBociA9IHJlbmVnb3RpYXRlTWVkaWFUeXBlKCk7
CisgICAgICAgIH0gZWxzZSBpZiAoaHIgPT0gTUZfRV9UUkFOU0ZPUk1fU1RSRUFNX0NIQU5HRSkg
eworICAgICAgICAgICAgLy8gVGhlIG1lZGlhIHR5cGUgY2hhbmdlZCwgcmVzZXQgaXQuCisgICAg
ICAgICAgICBzZXRNZWRpYVR5cGUobnVsbHB0cik7CisgICAgICAgIH0gZWxzZSBpZiAoaHIgPT0g
TUZfRV9UUkFOU0ZPUk1fTkVFRF9NT1JFX0lOUFVUKSB7CisgICAgICAgICAgICAvLyBUaGUgbWl4
ZXIgbmVlZHMgbW9yZSBpbnB1dC4KKyAgICAgICAgICAgIG1fc2FtcGxlTm90aWZ5ID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSBoYXZlIGdvdCBhIHNhbXBs
ZSBmcm9tIHRoZSBtaXhlci4KKworICAgICAgICBpZiAobV9jbG9jayAmJiAhcmVwYWludCkgewor
ICAgICAgICAgICAgLy8gTm90aWZ5IHRoZSBFVlIgYWJvdXQgbGF0ZW5jeS4KKyAgICAgICAgICAg
IG1fY2xvY2stPkdldENvcnJlbGF0ZWRUaW1lKDAsICZtaXhlckVuZFRpbWUsICZzeXN0ZW1UaW1l
KTsKKworICAgICAgICAgICAgTE9OR0xPTkcgbGF0ZW5jeVRpbWUgPSBtaXhlckVuZFRpbWUgLSBt
aXhlclN0YXJ0VGltZTsKKyAgICAgICAgICAgIG5vdGlmeUV2ZW50KEVDX1BST0NFU1NJTkdfTEFU
RU5DWSwgKExPTkdfUFRSKSZsYXRlbmN5VGltZSwgMCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBNYWtlIHN1cmUgd2UgYXJlIG5vdGlmaWVkIHdoZW4gdGhlIHNhbXBsZSBpcyByZWxlYXNlZAor
ICAgICAgICBociA9IHRyYWNrU2FtcGxlKHNhbXBsZS5nZXQoKSk7CisgICAgICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICAgICAgcmV0dXJuIGhyOworCisgICAgICAgIC8vIERlbGl2ZXIgdGhl
IHNhbXBsZSBmb3Igc2NoZWR1bGluZworICAgICAgICBociA9IGRlbGl2ZXJTYW1wbGUoc2FtcGxl
LmdldCgpLCByZXBhaW50KTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICBy
ZXR1cm4gaHI7CisKKyAgICAgICAgLy8gQXQgbGVhc3Qgb25lIHNhbXBsZSBoYXMgYmVlbiBwcmVz
ZW50ZWQgbm93LgorICAgICAgICBtX3ByZXJvbGxlZCA9IHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGhyOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
Q3VzdG9tVmlkZW9QcmVzZW50ZXI6OmRlbGl2ZXJTYW1wbGUoSU1GU2FtcGxlKiBzYW1wbGUsIGJv
b2wgcmVwYWludCkKK3sKKyAgICBBU1NFUlQoc2FtcGxlKTsKKworICAgIERpcmVjdDNEUHJlc2Vu
dGVyOjpEZXZpY2VTdGF0ZSBzdGF0ZSA9IERpcmVjdDNEUHJlc2VudGVyOjpEZXZpY2VPSzsKKwor
ICAgIC8vIERldGVybWluZSBpZiB0aGUgc2FtcGxlIHNob3VsZCBiZSBwcmVzZW50ZWQgaW1tZWRp
YXRlbHkuCisgICAgYm9vbCBwcmVzZW50Tm93ID0gKChtX3JlbmRlclN0YXRlICE9IFJlbmRlclN0
YXRlU3RhcnRlZCkgfHwgaXNTY3J1YmJpbmcoKSB8fCByZXBhaW50KTsKKworICAgIEhSRVNVTFQg
aHIgPSBtX3ByZXNlbnRlckVuZ2luZS0+Y2hlY2tEZXZpY2VTdGF0ZShzdGF0ZSk7CisKKyAgICBp
ZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgaHIgPSBtX3NjaGVkdWxlci5zY2hlZHVsZVNhbXBs
ZShzYW1wbGUsIHByZXNlbnROb3cpOworCisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAg
Ly8gU3RyZWFtaW5nIGhhcyBmYWlsZWQsIG5vdGlmeSB0aGUgRVZSLgorICAgICAgICBub3RpZnlF
dmVudChFQ19FUlJPUkFCT1JULCBociwgMCk7CisgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBEaXJl
Y3QzRFByZXNlbnRlcjo6RGV2aWNlUmVzZXQpCisgICAgICAgIG5vdGlmeUV2ZW50KEVDX0RJU1BM
QVlfQ0hBTkdFRCwgU19PSywgMCk7CisKKyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRlb1ByZXNlbnRlcjo6dHJh
Y2tTYW1wbGUoSU1GU2FtcGxlKiBzYW1wbGUpCit7CisgICAgQ09NUHRyPElNRlRyYWNrZWRTYW1w
bGU+IHRyYWNrZWQ7CisKKyAgICBIUkVTVUxUIGhyID0gc2FtcGxlLT5RdWVyeUludGVyZmFjZShf
X3V1aWRvZihJTUZUcmFja2VkU2FtcGxlKSwgKHZvaWQqKikmdHJhY2tlZCk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIC8vIFNldCBjYWxsYmFjayBvYmpl
Y3Qgb24gd2hpY2ggdGhlIG9uU2FtcGxlRnJlZSBtZXRob2QgaXMgaW52b2tlZCB3aGVuIHRoZSBz
YW1wbGUgaXMgbm8gbG9uZ2VyIHVzZWQuCisgICAgcmV0dXJuIHRyYWNrZWQtPlNldEFsbG9jYXRv
cih0aGlzLCBudWxscHRyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OkN1c3RvbVZpZGVvUHJlc2VudGVyOjpyZWxlYXNlUmVzb3VyY2VzKCkKK3sKKyAgICAv
LyBUaGUgdG9rZW4gY291bnRlciBpcyBpbmNyZW1lbnRlZCB0byBpbmRpY2F0ZSB0aGF0IGV4aXN0
aW5nIHNhbXBsZXMgYXJlCisgICAgLy8gaW52YWxpZCBhbmQgY2FuIGJlIGRpc3Bvc2VkIGluIHRo
ZSBtZXRob2Qgb25TYW1wbGVGcmVlLgorICAgIG1fdG9rZW5Db3VudGVyKys7CisKKyAgICBmbHVz
aCgpOworCisgICAgbV9zYW1wbGVQb29sLmNsZWFyKCk7CisKKyAgICBpZiAobV9wcmVzZW50ZXJF
bmdpbmUpCisgICAgICAgIG1fcHJlc2VudGVyRW5naW5lLT5yZWxlYXNlUmVzb3VyY2VzKCk7Cit9
CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpDdXN0b21WaWRl
b1ByZXNlbnRlcjo6b25TYW1wbGVGcmVlKElNRkFzeW5jUmVzdWx0KiByZXN1bHQpCit7CisgICAg
Q09NUHRyPElVbmtub3duPiBvYmplY3Q7CisgICAgSFJFU1VMVCBociA9IHJlc3VsdC0+R2V0T2Jq
ZWN0KCZvYmplY3QpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIG5vdGlmeUV2ZW50
KEVDX0VSUk9SQUJPUlQsIGhyLCAwKTsKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAg
IENPTVB0cjxJTUZTYW1wbGU+IHNhbXBsZTsKKyAgICBociA9IG9iamVjdC0+UXVlcnlJbnRlcmZh
Y2UoX191dWlkb2YoSU1GU2FtcGxlKSwgKHZvaWQqKikmc2FtcGxlKTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkgeworICAgICAgICBub3RpZnlFdmVudChFQ19FUlJPUkFCT1JULCBociwgMCk7CisgICAg
ICAgIHJldHVybiBocjsKKyAgICB9CisKKyAgICBtX2xvY2subG9jaygpOworCisgICAgaWYgKE1G
R2V0QXR0cmlidXRlVUlOVDMyKHNhbXBsZS5nZXQoKSwgTUZTYW1wbGVQcmVzZW50ZXJTYW1wbGVD
b3VudGVyLCAoVUlOVDMyKS0xKSA9PSBtX3Rva2VuQ291bnRlcikgeworICAgICAgICBociA9IG1f
c2FtcGxlUG9vbC5yZXR1cm5TYW1wbGUoc2FtcGxlLmdldCgpKTsKKworICAgICAgICAvLyBEbyBt
b3JlIHByb2Nlc3NpbmcsIHNpbmNlIGEgZnJlZSBzYW1wbGUgaXMgYXZhaWxhYmxlCisgICAgICAg
IGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgcHJvY2Vzc091dHB1dExvb3AoKTsKKyAg
ICB9CisKKyAgICBtX2xvY2sudW5sb2NrKCk7CisKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgbm90aWZ5RXZlbnQoRUNfRVJST1JBQk9SVCwgaHIsIDApOworCisgICAgcmV0dXJuIGhyOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Q3VzdG9tVmlkZW9Q
cmVzZW50ZXI6Om5vdGlmeUV2ZW50KGxvbmcgRXZlbnRDb2RlLCBMT05HX1BUUiBQYXJhbTEsIExP
TkdfUFRSIFBhcmFtMikKK3sKKyAgICBpZiAobV9tZWRpYUV2ZW50U2luaykKKyAgICAgICAgbV9t
ZWRpYUV2ZW50U2luay0+Tm90aWZ5KEV2ZW50Q29kZSwgUGFyYW0xLCBQYXJhbTIpOworfQorCitI
UkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TYW1wbGVQb29s
OjpnZXRTYW1wbGUoQ09NUHRyPElNRlNhbXBsZT4mIHNhbXBsZSkKK3sKKyAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOworCisgICAgaWYgKCFtX2luaXRpYWxpemVkKQorICAgICAgICByZXR1
cm4gTUZfRV9OT1RfSU5JVElBTElaRUQ7CisKKyAgICBpZiAobV92aWRlb1NhbXBsZVF1ZXVlLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIE1GX0VfU0FNUExFQUxMT0NBVE9SX0VNUFRZOworCisg
ICAgc2FtcGxlID0gbV92aWRlb1NhbXBsZVF1ZXVlLnRha2VGaXJzdCgpOworCisgICAgbV9wZW5k
aW5nKys7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2FtcGxlUG9vbDo6cmV0dXJuU2FtcGxlKElNRlNhbXBs
ZSogc2FtcGxlKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBpZiAo
IW1faW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiBNRl9FX05PVF9JTklUSUFMSVpFRDsKKwor
ICAgIG1fdmlkZW9TYW1wbGVRdWV1ZS5hcHBlbmQoc2FtcGxlKTsKKyAgICBtX3BlbmRpbmctLTsK
KyAgICByZXR1cm4gU19PSzsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OlZpZGVvU2FtcGxlUG9vbDo6YXJlU2FtcGxlc1BlbmRpbmcoKQoreworICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBpZiAoIW1faW5pdGlhbGl6ZWQpCisgICAgICAg
IHJldHVybiBGQUxTRTsKKworICAgIHJldHVybiAobV9wZW5kaW5nID4gMCk7Cit9CisKK0hSRVNV
TFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRlb1NhbXBsZVBvb2w6Omlu
aXRpYWxpemUoVmlkZW9TYW1wbGVMaXN0JiBzYW1wbGVzKQoreworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbG9jayk7CisKKyAgICBpZiAobV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIE1G
X0VfSU5WQUxJRFJFUVVFU1Q7CisKKyAgICAvLyBDb3B5IHRoZSBzYW1wbGVzCisgICAgZm9yIChh
dXRvIHNhbXBsZSA6IHNhbXBsZXMpCisgICAgICAgIG1fdmlkZW9TYW1wbGVRdWV1ZS5hcHBlbmQo
c2FtcGxlKTsKKworICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIHNhbXBsZXMuY2xlYXIo
KTsKKworICAgIHJldHVybiBTX09LOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6VmlkZW9TYW1wbGVQb29sOjpjbGVhcigpCit7CisgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9sb2NrKTsKKworICAgIG1fdmlkZW9TYW1wbGVRdWV1ZS5jbGVhcigpOworICAgIG1f
aW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBtX3BlbmRpbmcgPSAwOworfQorCisKKy8vIFNjaGVk
dWxlciB0aHJlYWQgbWVzc2FnZXMuCisKK2VudW0gU2NoZWR1bGVFdmVudCB7CisgICAgRXZlbnRU
ZXJtaW5hdGUgPSBXTV9VU0VSLAorICAgIEV2ZW50U2NoZWR1bGUsCisgICAgRXZlbnRGbHVzaAor
fTsKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1
bGVyOjpzZXRGcmFtZVJhdGUoY29uc3QgTUZSYXRpbyYgZnBzKQoreworICAgIFVJTlQ2NCBhdmdU
aW1lUGVyRnJhbWUgPSAwOworICAgIE1GRnJhbWVSYXRlVG9BdmVyYWdlVGltZVBlckZyYW1lUHRy
KCkoZnBzLk51bWVyYXRvciwgZnBzLkRlbm9taW5hdG9yLCAmYXZnVGltZVBlckZyYW1lKTsKKwor
ICAgIG1fZnJhbWVEdXJhdGlvbiA9IChNRlRJTUUpYXZnVGltZVBlckZyYW1lOworfQorCitIUkVT
VUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OnN0
YXJ0U2NoZWR1bGVyKElNRkNsb2NrKiBjbG9jaykKK3sKKyAgICBpZiAobV9zY2hlZHVsZXJUaHJl
YWQuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gRV9VTkVYUEVDVEVEOworCisgICAgSFJFU1VM
VCBociA9IFNfT0s7CisKKyAgICBtX2Nsb2NrID0gY2xvY2s7CisKKyAgICAvLyBVc2UgaGlnaCB0
aW1lciByZXNvbHV0aW9uLgorICAgIHRpbWVCZWdpblBlcmlvZCgxKTsKKworICAgIC8vIENyZWF0
ZSBhbiBldmVudCB0byBzaWduYWwgdGhhdCB0aGUgc2NoZWR1bGVyIHRocmVhZCBoYXMgc3RhcnRl
ZC4KKyAgICBtX3RocmVhZFJlYWR5RXZlbnQgPSA6OkNyZWF0ZUV2ZW50KG51bGxwdHIsIEZBTFNF
LCBGQUxTRSwgbnVsbHB0cik7CisgICAgaWYgKCFtX3RocmVhZFJlYWR5RXZlbnQuaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm4gSFJFU1VMVF9GUk9NX1dJTjMyKEdldExhc3RFcnJvcigpKTsKKwor
ICAgIC8vIENyZWF0ZSBhbiBldmVudCB0byBzaWduYWwgdGhhdCB0aGUgZmx1c2ggaGFzIGNvbXBs
ZXRlZC4KKyAgICBtX2ZsdXNoRXZlbnQgPSA6OkNyZWF0ZUV2ZW50KG51bGxwdHIsIEZBTFNFLCBG
QUxTRSwgbnVsbHB0cik7CisgICAgaWYgKCFtX2ZsdXNoRXZlbnQuaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gSFJFU1VMVF9GUk9NX1dJTjMyKEdldExhc3RFcnJvcigpKTsKKworICAgIC8vIFN0
YXJ0IHNjaGVkdWxlciB0aHJlYWQuCisgICAgRFdPUkQgdGhyZWFkSUQgPSAwOworICAgIG1fc2No
ZWR1bGVyVGhyZWFkID0gOjpDcmVhdGVUaHJlYWQobnVsbHB0ciwgMCwgc2NoZWR1bGVyVGhyZWFk
UHJvYywgKExQVk9JRCl0aGlzLCAwLCAmdGhyZWFkSUQpOworICAgIGlmICghbV9zY2hlZHVsZXJU
aHJlYWQuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gSFJFU1VMVF9GUk9NX1dJTjMyKEdldExh
c3RFcnJvcigpKTsKKworICAgIEhBTkRMRSBoT2JqZWN0c1tdID0geyBtX3RocmVhZFJlYWR5RXZl
bnQuZ2V0KCksIG1fc2NoZWR1bGVyVGhyZWFkLmdldCgpIH07CisKKyAgICAvLyBXYWl0IGZvciB0
aGUgdGhyZWFkIHRvIHN0YXJ0CisgICAgRFdPUkQgcmVzdWx0ID0gOjpXYWl0Rm9yTXVsdGlwbGVP
YmplY3RzKDIsIGhPYmplY3RzLCBGQUxTRSwgSU5GSU5JVEUpOworICAgIGlmIChXQUlUX09CSkVD
VF8wICE9IHJlc3VsdCkgeworICAgICAgICAvLyBUaGUgdGhyZWFkIGhhcyB0ZXJtaW5hdGVkLgor
ICAgICAgICBtX3NjaGVkdWxlclRocmVhZC5jbGVhcigpOworICAgICAgICByZXR1cm4gRV9VTkVY
UEVDVEVEOworICAgIH0KKworICAgIG1fdGhyZWFkSUQgPSB0aHJlYWRJRDsKKworICAgIHJldHVy
biBocjsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZp
ZGVvU2NoZWR1bGVyOjpzdG9wU2NoZWR1bGVyKCkKK3sKKyAgICBpZiAoIW1fc2NoZWR1bGVyVGhy
ZWFkLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIFNfT0s7CisKKyAgICAvLyBUZXJtaW5hdGUg
dGhlIHNjaGVkdWxlciB0aHJlYWQKKyAgICA6OlBvc3RUaHJlYWRNZXNzYWdlKG1fdGhyZWFkSUQs
IEV2ZW50VGVybWluYXRlLCAwLCAwKTsKKworICAgIC8vIFdhaXQgZm9yIHRoZSBzY2hlZHVsZXIg
dGhyZWFkIHRvIGZpbmlzaC4KKyAgICA6OldhaXRGb3JTaW5nbGVPYmplY3QobV9zY2hlZHVsZXJU
aHJlYWQuZ2V0KCksIElORklOSVRFKTsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7
CisKKyAgICBtX3NjaGVkdWxlclRocmVhZC5jbGVhcigpOworICAgIG1fZmx1c2hFdmVudC5jbGVh
cigpOworCisgICAgLy8gVGhyb3cgYXdheSBzYW1wbGVzCisgICAgbV9zY2hlZHVsZWRTYW1wbGVz
LmNsZWFyKCk7CisKKyAgICAvLyBDbGVhciBwcmV2aW91c2x5IHNldCB0aW1lciByZXNvbHV0aW9u
LgorICAgIHRpbWVFbmRQZXJpb2QoMSk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VM
VCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpmbHVz
aCgpCit7CisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCB3YWl0IGZvciB0aGUgZmx1c2ggdG8gZmlu
aXNoIG9uIHRoZSB3b3JrZXIgdGhyZWFkLgorCisgICAgaWYgKG1fc2NoZWR1bGVyVGhyZWFkLmlz
VmFsaWQoKSkgeworICAgICAgICA6OlBvc3RUaHJlYWRNZXNzYWdlKG1fdGhyZWFkSUQsIEV2ZW50
Rmx1c2gsIDAsIDApOworCisgICAgICAgIEhBTkRMRSBvYmplY3RzW10gPSB7IG1fZmx1c2hFdmVu
dC5nZXQoKSwgbV9zY2hlZHVsZXJUaHJlYWQuZ2V0KCkgfTsKKworICAgICAgICBjb25zdCBpbnQg
c2NoZWR1bGVyVGltZW91dCA9IDUwMDA7CisKKyAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGZsdXNo
IHRvIGZpbmlzaCBvciB0aGUgdGhyZWFkIHRvIHRlcm1pbmF0ZS4KKyAgICAgICAgOjpXYWl0Rm9y
TXVsdGlwbGVPYmplY3RzKDIsIG9iamVjdHMsIEZBTFNFLCBzY2hlZHVsZXJUaW1lb3V0KTsKKyAg
ICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1bGVyOjpzY2hlZHVsZVNhbXBsZShJTUZTYW1wbGUq
IHNhbXBsZSwgYm9vbCBwcmVzZW50Tm93KQoreworICAgIGlmICghbV9wcmVzZW50ZXIpCisgICAg
ICAgIHJldHVybiBNRl9FX05PVF9JTklUSUFMSVpFRDsKKworICAgIGlmICghbV9zY2hlZHVsZXJU
aHJlYWQuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gTUZfRV9OT1RfSU5JVElBTElaRUQ7CisK
KyAgICBEV09SRCBleGl0Q29kZSA9IDA7CisgICAgOjpHZXRFeGl0Q29kZVRocmVhZChtX3NjaGVk
dWxlclRocmVhZC5nZXQoKSwgJmV4aXRDb2RlKTsKKworICAgIGlmIChleGl0Q29kZSAhPSBTVElM
TF9BQ1RJVkUpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBpZiAocHJlc2VudE5vdyB8
fCAhbV9jbG9jaykKKyAgICAgICAgbV9wcmVzZW50ZXItPnByZXNlbnRTYW1wbGUoc2FtcGxlLCAw
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gU3VibWl0IHRoZSBzYW1wbGUgZm9yIHNjaGVkdWxp
bmcuCisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIG1fc2NoZWR1
bGVkU2FtcGxlcy5hcHBlbmQoc2FtcGxlKTsKKworICAgICAgICA6OlBvc3RUaHJlYWRNZXNzYWdl
KG1fdGhyZWFkSUQsIEV2ZW50U2NoZWR1bGUsIDAsIDApOworICAgIH0KKworICAgIHJldHVybiBT
X09LOworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Vmlk
ZW9TY2hlZHVsZXI6OnByb2Nlc3NTYW1wbGVzSW5RdWV1ZShMT05HJiBuZXh0U2xlZXApCit7Cisg
ICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgTE9ORyB3YWl0ID0gMDsKKworICAgIC8vIFByb2Nl
c3Mgc2FtcGxlcyBhcyBsb25nIGFzIHRoZXJlIGFyZSBzYW1wbGVzIGluIHRoZSBxdWV1ZSwgYW5k
IHRoZXkgaGF2ZSBub3QgYXJyaXZlZCB0b28gZWFybHkuCisKKyAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICBDT01QdHI8SU1GU2FtcGxlPiBzYW1wbGU7CisKKyAgICAgICAgaWYgKHRydWUpIHsK
KyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgICAgICBpZiAo
bV9zY2hlZHVsZWRTYW1wbGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIHNhbXBsZSA9IG1fc2NoZWR1bGVkU2FtcGxlcy50YWtlRmlyc3QoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFByb2Nlc3MgdGhlIHNhbXBsZS4KKyAgICAgICAgLy8gSWYgdGhl
IHNhbXBsZSBoYXMgYXJyaXZlZCB0b28gZWFybHksIHdhaXQgd2lsbCBiZSA+IDAsCisgICAgICAg
IC8vIGFuZCB0aGUgc2NoZWR1bGVyIHNob3VsZCBnbyB0byBzbGVlcC4KKyAgICAgICAgaHIgPSBw
cm9jZXNzU2FtcGxlKHNhbXBsZS5nZXQoKSwgd2FpdCk7CisKKyAgICAgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAod2FpdCA+IDApCisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXdhaXQpIHsKKyAgICAgICAgLy8gVGhlIHF1
ZXVlIGlzIGVtcHR5LiBTbGVlcCB1bnRpbCB0aGUgbmV4dCBtZXNzYWdlIGFycml2ZXMuCisgICAg
ICAgIHdhaXQgPSBJTkZJTklURTsKKyAgICB9CisKKyAgICBuZXh0U2xlZXAgPSB3YWl0OworICAg
IHJldHVybiBocjsKK30KKworLy8gTUZUaW1lVG9NaWxsaXNlY29uZHM6IENvbnZlcnQgMTAwLW5h
bm9zZWNvbmQgdGltZSB0byBtaWxsaXNlY29uZHMuCitzdGF0aWMgTE9ORyBNRlRpbWVUb01pbGxp
c2Vjb25kcyhjb25zdCBMT05HTE9ORyYgdGltZSkKK3sKKyAgICByZXR1cm4gKHRpbWUgLyAxMDAw
MCk7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpWaWRl
b1NjaGVkdWxlcjo6cHJvY2Vzc1NhbXBsZShJTUZTYW1wbGUqIHNhbXBsZSwgTE9ORyYgbmV4dFNs
ZWVwKQoreworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgTE9OR0xPTkcgcHJlc2VudGF0
aW9uVGltZSA9IDA7CisgICAgTE9OR0xPTkcgdGltZU5vdyA9IDA7CisgICAgTUZUSU1FIHN5c3Rl
bVRpbWUgPSAwOworCisgICAgYm9vbCBwcmVzZW50Tm93ID0gdHJ1ZTsKKyAgICBMT05HIG5leHRT
bGVlcFRpbWUgPSAwOworCisgICAgaWYgKG1fY2xvY2spIHsKKyAgICAgICAgLy8gR2V0IHRoZSB0
aW1lIHN0YW1wIG9mIHRoZSBzYW1wbGUuCisgICAgICAgIC8vIEEgc2FtcGxlIGNhbiBwb3NzaWJs
eSBoYXZlIG5vIHRpbWUgc3RhbXAuCisgICAgICAgIGhyID0gc2FtcGxlLT5HZXRTYW1wbGVUaW1l
KCZwcmVzZW50YXRpb25UaW1lKTsKKworICAgICAgICAvLyBHZXQgdGhlIGNsb2NrIHRpbWUuCisg
ICAgICAgIC8vIElmIHRoZSBzYW1wbGUgZG9lcyBub3QgaGF2ZSBhIHRpbWUgc3RhbXAsIHRoZSBj
bG9jayB0aW1lIGlzIG5vdCBuZWVkZWQuCisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAg
ICAgICAgICAgaHIgPSBtX2Nsb2NrLT5HZXRDb3JyZWxhdGVkVGltZSgwLCAmdGltZU5vdywgJnN5
c3RlbVRpbWUpOworCisgICAgICAgIC8vIERldGVybWluZSB0aGUgdGltZSB1bnRpbCB0aGUgc2Ft
cGxlIHNob3VsZCBiZSBwcmVzZW50ZWQuCisgICAgICAgIC8vIFNhbXBsZXMgYXJyaXZpbmcgbGF0
ZSwgd2lsbCBoYXZlIG5lZ2F0aXZlIHZhbHVlcy4KKyAgICAgICAgTE9OR0xPTkcgdGltZURlbHRh
ID0gcHJlc2VudGF0aW9uVGltZSAtIHRpbWVOb3c7CisgICAgICAgIGlmIChtX3BsYXliYWNrUmF0
ZSA8IDApIHsKKyAgICAgICAgICAgIC8vIFJldmVyc2UgZGVsdGEgZm9yIHJldmVyc2UgcGxheWJh
Y2suCisgICAgICAgICAgICB0aW1lRGVsdGEgPSAtdGltZURlbHRhOworICAgICAgICB9CisKKyAg
ICAgICAgTE9OR0xPTkcgZnJhbWVEdXJhdGlvbk9uZUZvdXJ0aCA9IG1fZnJhbWVEdXJhdGlvbiAv
IDQ7CisKKyAgICAgICAgaWYgKHRpbWVEZWx0YSA8IC1mcmFtZUR1cmF0aW9uT25lRm91cnRoKSB7
CisgICAgICAgICAgICAvLyBUaGUgc2FtcGxlIGhhcyBhcnJpdmVkIGxhdGUuIAorICAgICAgICAg
ICAgcHJlc2VudE5vdyA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAodGltZURlbHRhID4gKDMg
KiBmcmFtZUR1cmF0aW9uT25lRm91cnRoKSkgeworICAgICAgICAgICAgLy8gV2UgY2FuIHNsZWVw
LCB0aGUgc2FtcGxlIGhhcyBhcnJpdmVkIHRvbyBlYXJseS4KKyAgICAgICAgICAgIG5leHRTbGVl
cFRpbWUgPSBNRlRpbWVUb01pbGxpc2Vjb25kcyh0aW1lRGVsdGEgLSAoMyAqIGZyYW1lRHVyYXRp
b25PbmVGb3VydGgpKTsKKworICAgICAgICAgICAgLy8gU2luY2Ugc2xlZXBpbmcgaXMgdXNpbmcg
dGhlIHN5c3RlbSBjbG9jaywgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBzbGVlcCB0aW1lCisgICAg
ICAgICAgICAvLyBmcm9tIHByZXNlbnRhdGlvbiB0aW1lIHRvIHN5c3RlbSB0aW1lLgorICAgICAg
ICAgICAgbmV4dFNsZWVwVGltZSA9IChMT05HKShuZXh0U2xlZXBUaW1lIC8gZmFic2YobV9wbGF5
YmFja1JhdGUpKTsKKworICAgICAgICAgICAgcHJlc2VudE5vdyA9IGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKHByZXNlbnROb3cpCisgICAgICAgIGhyID0gbV9wcmVzZW50ZXIt
PnByZXNlbnRTYW1wbGUoc2FtcGxlLCBwcmVzZW50YXRpb25UaW1lKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgLy8gUmV0dXJuIHRoZSBzYW1wbGUgdG8gdGhlIHF1ZXVlLCBzaW5jZSBpdCBpcyBub3Qg
cmVhZHkuCisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIG1fc2No
ZWR1bGVkU2FtcGxlcy5wcmVwZW5kKHNhbXBsZSk7CisgICAgfQorCisgICAgbmV4dFNsZWVwID0g
bmV4dFNsZWVwVGltZTsKKworICAgIHJldHVybiBocjsKK30KKworRFdPUkQgV0lOQVBJIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9TY2hlZHVsZXI6OnNjaGVkdWxlclRo
cmVhZFByb2MoTFBWT0lEIGxwUGFyYW1ldGVyKQoreworICAgIFZpZGVvU2NoZWR1bGVyKiBzY2hl
ZHVsZXIgPSByZWludGVycHJldF9jYXN0PFZpZGVvU2NoZWR1bGVyKj4obHBQYXJhbWV0ZXIpOwor
ICAgIGlmICghc2NoZWR1bGVyKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RFdPUkQ+KC0x
KTsKKyAgICByZXR1cm4gc2NoZWR1bGVyLT5zY2hlZHVsZXJUaHJlYWRQcm9jUHJpdmF0ZSgpOwor
fQorCitEV09SRCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvU2NoZWR1
bGVyOjpzY2hlZHVsZXJUaHJlYWRQcm9jUHJpdmF0ZSgpCit7CisgICAgSFJFU1VMVCBociA9IFNf
T0s7CisKKyAgICAvLyBUaGlzIHdpbGwgZm9yY2UgYSBtZXNzYWdlIHF1ZXVlIHRvIGJlIGNyZWF0
ZWQgZm9yIHRoZSB0aHJlYWQuCisgICAgTVNHIG1zZzsKKyAgICBQZWVrTWVzc2FnZSgmbXNnLCBu
dWxscHRyLCBXTV9VU0VSLCBXTV9VU0VSLCBQTV9OT1JFTU9WRSk7CisKKyAgICAvLyBUaGUgdGhy
ZWFkIGlzIHJlYWR5LgorICAgIFNldEV2ZW50KG1fdGhyZWFkUmVhZHlFdmVudC5nZXQoKSk7CisK
KyAgICBMT05HIHdhaXQgPSBJTkZJTklURTsKKyAgICBib29sIGV4aXRUaHJlYWQgPSBmYWxzZTsK
KyAgICB3aGlsZSAoIWV4aXRUaHJlYWQpIHsKKyAgICAgICAgLy8gV2FpdCBmb3IgbWVzc2FnZXMK
KyAgICAgICAgRFdPUkQgcmVzdWx0ID0gTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0cygwLCBudWxs
cHRyLCBGQUxTRSwgd2FpdCwgUVNfUE9TVE1FU1NBR0UpOworCisgICAgICAgIGlmIChyZXN1bHQg
PT0gV0FJVF9USU1FT1VUKSB7CisgICAgICAgICAgICBociA9IHByb2Nlc3NTYW1wbGVzSW5RdWV1
ZSh3YWl0KTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgICAgIGV4
aXRUaHJlYWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKFBlZWtNZXNzYWdl
KCZtc2csIG51bGxwdHIsIDAsIDAsIFBNX1JFTU9WRSkpIHsKKyAgICAgICAgICAgIGJvb2wgcHJv
Y2Vzc1NhbXBsZXMgPSB0cnVlOworCisgICAgICAgICAgICBzd2l0Y2ggKG1zZy5tZXNzYWdlKSB7
CisgICAgICAgICAgICBjYXNlIEV2ZW50VGVybWluYXRlOgorICAgICAgICAgICAgICAgIGV4aXRU
aHJlYWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IEV2ZW50Rmx1c2g6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMb2Nr
SG9sZGVyIGxvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zY2hlZHVsZWRTYW1w
bGVzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdhaXQgPSBJ
TkZJTklURTsKKyAgICAgICAgICAgICAgICBTZXRFdmVudChtX2ZsdXNoRXZlbnQuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEV2ZW50U2NoZWR1bGU6
CisgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NTYW1wbGVzKSB7CisgICAgICAgICAgICAgICAg
ICAgIGhyID0gcHJvY2Vzc1NhbXBsZXNJblF1ZXVlKHdhaXQpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRUaHJlYWQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzU2FtcGxlcyA9ICh3YWl0ICE9IElORklO
SVRFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIChTVUNDRUVERUQoaHIpID8gMCA6
IDEpOworfQorCitzdGF0aWMgSFJFU1VMVCBmaW5kQWRhcHRlcihJRGlyZWN0M0Q5KiBkaXJlY3Qz
RDksIEhNT05JVE9SIG1vbml0b3IsIFVJTlQmIGFkYXB0ZXJJRCkKK3sKKyAgICBIUkVTVUxUIGhy
ID0gRV9GQUlMOworCisgICAgVUlOVCBhZGFwdGVyQ291bnQgPSBkaXJlY3QzRDktPkdldEFkYXB0
ZXJDb3VudCgpOworICAgIGZvciAoVUlOVCBpID0gMDsgaSA8IGFkYXB0ZXJDb3VudDsgaSsrKSB7
CisgICAgICAgIEhNT05JVE9SIG1vbml0b3JUbXAgPSBkaXJlY3QzRDktPkdldEFkYXB0ZXJNb25p
dG9yKGkpOworCisgICAgICAgIGlmICghbW9uaXRvclRtcCkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGlmIChtb25pdG9yVG1wID09IG1vbml0b3IpIHsKKyAgICAgICAgICAgIGFkYXB0
ZXJJRCA9IGk7CisgICAgICAgICAgICBociA9IFNfT0s7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6RGlyZWN0M0RQcmVzZW50ZXIoKQor
eworICAgIFNldFJlY3RFbXB0eSgmbV9kZXN0UmVjdCk7CisKKyAgICBaZXJvTWVtb3J5KCZtX2Rp
c3BsYXlNb2RlLCBzaXplb2YobV9kaXNwbGF5TW9kZSkpOworCisgICAgSFJFU1VMVCBociA9IGlu
aXRpYWxpemVEM0QoKTsKKworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm47CisK
KyAgICBjcmVhdGVEM0REZXZpY2UoKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6fkRpcmVjdDNEUHJlc2VudGVyKCkKK3sKK30KKwor
SFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2Vu
dGVyOjpnZXRTZXJ2aWNlKFJFRkdVSUQgZ3VpZFNlcnZpY2UsIFJFRklJRCByaWlkLCB2b2lkKiog
cHB2KQoreworICAgIEFTU0VSVChwcHYpOworCisgICAgSFJFU1VMVCBociA9IFNfT0s7CisKKyAg
ICBpZiAocmlpZCA9PSBfX3V1aWRvZihJRGlyZWN0M0REZXZpY2VNYW5hZ2VyOSkpIHsKKyAgICAg
ICAgaWYgKCFtX2RldmljZU1hbmFnZXIpCisgICAgICAgICAgICBociA9IE1GX0VfVU5TVVBQT1JU
RURfU0VSVklDRTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAqcHB2ID0gbV9kZXZpY2VN
YW5hZ2VyLmdldCgpOworICAgICAgICAgICAgbV9kZXZpY2VNYW5hZ2VyLT5BZGRSZWYoKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBociA9IE1GX0VfVU5TVVBQT1JURURfU0VSVklD
RTsKKworICAgIHJldHVybiBocjsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpjaGVja0Zvcm1hdChEM0RGT1JNQVQgZm9y
bWF0KQoreworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgVUlOVCBhZGFwdGVyID0gRDNE
QURBUFRFUl9ERUZBVUxUOworICAgIEQzRERFVlRZUEUgdHlwZSA9IEQzRERFVlRZUEVfSEFMOwor
CisgICAgaWYgKG1fZGV2aWNlKSB7CisgICAgICAgIEQzRERFVklDRV9DUkVBVElPTl9QQVJBTUVU
RVJTIHBhcmFtczsKKyAgICAgICAgaHIgPSBtX2RldmljZS0+R2V0Q3JlYXRpb25QYXJhbWV0ZXJz
KCZwYXJhbXMpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBo
cjsKKworICAgICAgICBhZGFwdGVyID0gcGFyYW1zLkFkYXB0ZXJPcmRpbmFsOworICAgICAgICB0
eXBlID0gcGFyYW1zLkRldmljZVR5cGU7CisgICAgfQorCisgICAgRDNERElTUExBWU1PREUgbW9k
ZTsKKyAgICBociA9IG1fZGlyZWN0M0Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUoYWRhcHRlciwg
Jm1vZGUpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBy
ZXR1cm4gbV9kaXJlY3QzRDktPkNoZWNrRGV2aWNlVHlwZShhZGFwdGVyLCB0eXBlLCBtb2RlLkZv
cm1hdCwgZm9ybWF0LCBUUlVFKTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpzZXRWaWRlb1dpbmRvdyhIV05EIGh3bmQp
Cit7CisgICAgQVNTRVJUKElzV2luZG93KGh3bmQpKTsKKyAgICBBU1NFUlQoaHduZCAhPSBtX2h3
bmQpOworCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgICAg
ICBtX2h3bmQgPSBod25kOworICAgICAgICB1cGRhdGVEZXN0UmVjdCgpOworICAgIH0KKworICAg
IHJldHVybiBjcmVhdGVEM0REZXZpY2UoKTsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpzZXREZXN0aW5hdGlvblJlY3Qo
Y29uc3QgUkVDVCYgcmNEZXN0KQoreworICAgIGlmIChFcXVhbFJlY3QoJnJjRGVzdCwgJm1fZGVz
dFJlY3QpKQorICAgICAgICByZXR1cm4gU19PSzsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
bG9jayk7CisKKyAgICBtX2Rlc3RSZWN0ID0gcmNEZXN0OworICAgIHVwZGF0ZURlc3RSZWN0KCk7
CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpjcmVhdGVWaWRlb1NhbXBsZXMoSU1GTWVk
aWFUeXBlKiBmb3JtYXQsIFZpZGVvU2FtcGxlTGlzdCYgdmlkZW9TYW1wbGVRdWV1ZSkKK3sKKyAg
ICAvLyBDcmVhdGUgdmlkZW8gc2FtcGxlcyBtYXRjaGluZyB0aGUgc3VwcGxpZWQgZm9ybWF0Lgor
ICAgIC8vIEEgc3dhcCBjaGFpbiB3aXRoIGEgc2luZ2xlIGJhY2sgYnVmZmVyIHdpbGwgYmUgY3Jl
YXRlZCBmb3IgZWFjaCB2aWRlbyBzYW1wbGUuCisgICAgLy8gVGhlIG1peGVyIHdpbGwgcmVuZGVy
IHRvIHRoZSBiYWNrIGJ1ZmZlciB0aHJvdWdoIGEgc3VyZmFjZSBrZXB0IGJ5IHRoZSBzYW1wbGUu
CisgICAgLy8gVGhlIHN1cmZhY2UgY2FuIGJlIHJlbmRlcmVkIHRvIGEgd2luZG93IGJ5IHByZXNl
bnRpbmcgdGhlIHN3YXAgY2hhaW4uCisgICAgLy8gSW4gb3VyIGNhc2UgdGhlIHN1cmZhY2UgaXMg
dHJhbnNmZXJyZWQgdG8gc3lzdGVtIG1lbW9yeSwgYW5kIHJlbmRlcmVkIHRvIGEgZ3JhcGhpY3Mg
Y29udGV4dC4KKworICAgIGlmICghbV9od25kKQorICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElE
UkVRVUVTVDsKKworICAgIGlmICghZm9ybWF0KQorICAgICAgICByZXR1cm4gTUZfRV9VTkVYUEVD
VEVEOworCisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworCisgICAgcmVsZWFzZVJl
c291cmNlcygpOworCisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJz
OworICAgIEhSRVNVTFQgaHIgPSBnZXRTd2FwQ2hhaW5QcmVzZW50UGFyYW1ldGVycyhmb3JtYXQs
ICZwcmVzZW50UGFyYW1ldGVycyk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgcmVs
ZWFzZVJlc291cmNlcygpOworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgdXBkYXRl
RGVzdFJlY3QoKTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgcHJlc2VudGVyQnVmZmVyQ291bnQg
PSAzOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmVzZW50ZXJCdWZmZXJDb3VudDsgaSsr
KSB7CisgICAgICAgIENPTVB0cjxJRGlyZWN0M0RTd2FwQ2hhaW45PiBzd2FwQ2hhaW47CisgICAg
ICAgIGhyID0gbV9kZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJh
bWV0ZXJzLCAmc3dhcENoYWluKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAg
ICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAg
fQorCisgICAgICAgIENPTVB0cjxJTUZTYW1wbGU+IHZpZGVvU2FtcGxlOworICAgICAgICBociA9
IGNyZWF0ZUQzRFNhbXBsZShzd2FwQ2hhaW4uZ2V0KCksIHZpZGVvU2FtcGxlKTsKKyAgICAgICAg
aWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKKyAgICAg
ICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQorCisgICAgICAgIHZpZGVvU2FtcGxlUXVldWUu
YXBwZW5kKHZpZGVvU2FtcGxlKTsKKworICAgICAgICAvLyBLZWVwIHRoZSBzd2FwIGNoYWluIGFs
aXZlIGJ5IHNldHRpbmcgaXQgYXMgYSBjdXN0b20gYXR0cmlidXRlIG9uIHRoZSBzYW1wbGUuCisg
ICAgICAgIGhyID0gdmlkZW9TYW1wbGUtPlNldFVua25vd24oTUZTYW1wbGVQcmVzZW50ZXJTYW1w
bGVTd2FwQ2hhaW4sIHN3YXBDaGFpbi5nZXQoKSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7
CisgICAgICAgICAgICByZWxlYXNlUmVzb3VyY2VzKCk7CisgICAgICAgICAgICByZXR1cm4gaHI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6cmVsZWFzZVJlc291
cmNlcygpCit7CisgICAgbV9zdXJmYWNlUmVwYWludCA9IG51bGxwdHI7Cit9CisKK0hSRVNVTFQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6Y2hl
Y2tEZXZpY2VTdGF0ZShEZXZpY2VTdGF0ZSYgc3RhdGUpCit7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9sb2NrKTsKKworICAgIEhSRVNVTFQgaHIgPSBtX2RldmljZS0+Q2hlY2tEZXZpY2VTdGF0
ZShtX2h3bmQpOworCisgICAgc3RhdGUgPSBEZXZpY2VPSzsKKworICAgIC8vIE5vdCBhbGwgZmFp
bHVyZSBjb2RlcyBhcmUgY3JpdGljYWwuCisKKyAgICBzd2l0Y2ggKGhyKSB7CisgICAgY2FzZSBT
X09LOgorICAgIGNhc2UgU19QUkVTRU5UX09DQ0xVREVEOgorICAgIGNhc2UgU19QUkVTRU5UX01P
REVfQ0hBTkdFRDoKKyAgICAgICAgaHIgPSBTX09LOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgRDNERVJSX0RFVklDRUxPU1Q6CisgICAgY2FzZSBEM0RFUlJfREVWSUNFSFVORzoKKyAgICAg
ICAgaHIgPSBjcmVhdGVEM0REZXZpY2UoKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgICAgICByZXR1cm4gaHI7CisgICAgICAgIHN0YXRlID0gRGV2aWNlUmVzZXQ7CisgICAgICAg
IGhyID0gU19PSzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEQzREVSUl9ERVZJQ0VSRU1P
VkVEOgorICAgICAgICBzdGF0ZSA9IERldmljZVJlbW92ZWQ7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBFX0lOVkFMSURBUkc6CisgICAgICAgIC8vIFRoaXMgbWlnaHQgaGFwcGVuIGlmIHRo
ZSB3aW5kb3cgaGFzIGJlZW4gZGVzdHJveWVkLCBvciBpcyBub3QgdmFsaWQuCisgICAgICAgIC8v
IEEgbmV3IGRldmljZSB3aWxsIGJlIGNyZWF0ZWQgaWYgYSBuZXcgd2luZG93IGlzIHNldC4KKyAg
ICAgICAgaHIgPSBTX09LOworICAgIH0KKworICAgIHJldHVybiBocjsKK30KKworSFJFU1VMVCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpwcmVz
ZW50U2FtcGxlKElNRlNhbXBsZSogc2FtcGxlLCBMT05HTE9ORyB0YXJnZXRQcmVzZW50YXRpb25U
aW1lKQoreworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9sb2NrKTsKKworICAgIENPTVB0cjxJRGlyZWN0M0RTdXJmYWNlOT4gc3VyZmFjZTsKKworICAg
IGlmIChzYW1wbGUpIHsKKyAgICAgICAgQ09NUHRyPElNRk1lZGlhQnVmZmVyPiBidWZmZXI7Cisg
ICAgICAgIGhyID0gc2FtcGxlLT5HZXRCdWZmZXJCeUluZGV4KDAsICZidWZmZXIpOworICAgICAg
ICBociA9IE1GR2V0U2VydmljZVB0cigpKGJ1ZmZlci5nZXQoKSwgTVJfQlVGRkVSX1NFUlZJQ0Us
IF9fdXVpZG9mKElEaXJlY3QzRFN1cmZhY2U5KSwgKHZvaWQqKikmc3VyZmFjZSk7CisgICAgfSBl
bHNlIGlmIChtX3N1cmZhY2VSZXBhaW50KSB7CisgICAgICAgIC8vIFVzZSB0aGUgbGFzdCBzdXJm
YWNlLgorICAgICAgICBzdXJmYWNlID0gbV9zdXJmYWNlUmVwYWludDsKKyAgICB9CisKKyAgICBp
ZiAoc3VyZmFjZSkgeworICAgICAgICBVSU5UIHdpZHRoID0gbV9kZXN0UmVjdC5yaWdodCAtIG1f
ZGVzdFJlY3QubGVmdDsKKyAgICAgICAgVUlOVCBoZWlnaHQgPSBtX2Rlc3RSZWN0LmJvdHRvbSAt
IG1fZGVzdFJlY3QudG9wOworCisgICAgICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkg
eworICAgICAgICAgICAgaWYgKCFtX21lbVN1cmZhY2UgfHwgbV93aWR0aCAhPSB3aWR0aCB8fCBt
X2hlaWdodCAhPSBoZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBociA9IG1fZGV2aWNlLT5DcmVh
dGVPZmZzY3JlZW5QbGFpblN1cmZhY2Uod2lkdGgsIGhlaWdodCwgRDNERk1UX0E4UjhHOEI4LCBE
M0RQT09MX1NZU1RFTU1FTSwgJm1fbWVtU3VyZmFjZSwgbnVsbHB0cik7CisgICAgICAgICAgICAg
ICAgbV93aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgICAgIG1faGVpZ2h0ID0gaGVpZ2h0Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ29weSBkYXRhIGZyb20gdmlkZW8gbWVtb3J5
IHRvIHN5c3RlbSBtZW1vcnkKKyAgICAgICAgICAgIGhyID0gbV9kZXZpY2UtPkdldFJlbmRlclRh
cmdldERhdGEoc3VyZmFjZS5nZXQoKSwgbV9tZW1TdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAg
IGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICAgICAgbV9tZW1TdXJmYWNlID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBociA9IFNfT0s7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBTaW5jZSB3ZSB3YW50IHRvIGRyYXcgdG8gdGhlIEdyYXBoaWNzQ29udGV4
dCBwcm92aWRlZCBpbiB0aGUgcGFpbnQgbWV0aG9kLAorICAgICAgICAvLyBhbmQgbm90IGRyYXcg
ZGlyZWN0bHkgdG8gdGhlIHdpbmRvdywgd2Ugc2tpcCBwcmVzZW50aW5nIHRoZSBzd2FwIGNoYWlu
OgorCisgICAgICAgIC8vIENPTVB0cjxJRGlyZWN0M0RTd2FwQ2hhaW45PiBzd2FwQ2hhaW47Cisg
ICAgICAgIC8vIGhyID0gc3VyZmFjZS0+R2V0Q29udGFpbmVyKF9fdXVpZG9mKElEaXJlY3QzRFN3
YXBDaGFpbjkpLCAoTFBWT0lEKikmc3dhcENoYWluKSk7CisgICAgICAgIC8vIGhyID0gcHJlc2Vu
dFN3YXBDaGFpbihzd2FwQ2hhaW4sIHN1cmZhY2UpKTsKKworICAgICAgICAvLyBLZWVwIHRoZSBs
YXN0IHN1cmZhY2UgZm9yIHJlcGFpbnRzLgorICAgICAgICBtX3N1cmZhY2VSZXBhaW50ID0gc3Vy
ZmFjZTsKKyAgICB9CisKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBpZiAoaHIgPT0g
RDNERVJSX0RFVklDRUxPU1QgfHwgaHIgPT0gRDNERVJSX0RFVklDRU5PVFJFU0VUIHx8IGhyID09
IEQzREVSUl9ERVZJQ0VIVU5HKSB7CisgICAgICAgICAgICAvLyBJZ25vcmUgdGhpcyBlcnJvci4g
V2UgaGF2ZSB0byByZXNldCBvciByZWNyZWF0ZSB0aGUgZGV2aWNlLgorICAgICAgICAgICAgLy8g
VGhlIHByZXNlbnRlciB3aWxsIGhhbmRsZSB0aGlzIHdoZW4gY2hlY2tpbmcgdGhlIGRldmljZSBz
dGF0ZSB0aGUgbmV4dCB0aW1lLgorICAgICAgICAgICAgaHIgPSBTX09LOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBocjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OkRpcmVjdDNEUHJlc2VudGVyOjpwYWludEN1cnJlbnRGcmFtZShXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcikKK3sK
KyAgICBVSU5UIHdpZHRoID0gbV9kZXN0UmVjdC5yaWdodCAtIG1fZGVzdFJlY3QubGVmdDsKKyAg
ICBVSU5UIGhlaWdodCA9IG1fZGVzdFJlY3QuYm90dG9tIC0gbV9kZXN0UmVjdC50b3A7CisKKyAg
ICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpCisgICAgICAgIHJldHVybjsKKworICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBpZiAoIW1fbWVtU3VyZmFjZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkUmVjdDsKKyAgICBpZiAoU1VDQ0VFREVE
KG1fbWVtU3VyZmFjZS0+TG9ja1JlY3QoJmxvY2tlZFJlY3QsIG51bGxwdHIsIEQzRExPQ0tfUkVB
RE9OTFkpKSkgeworICAgICAgICB2b2lkKiBkYXRhID0gbG9ja2VkUmVjdC5wQml0czsKKyAgICAg
ICAgaW50IHBpdGNoID0gbG9ja2VkUmVjdC5QaXRjaDsKKyNpZiBVU0UoQ0FJUk8pCisgICAgICAg
IFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dENhaXJvKiBjdHh0ID0gY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKTsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSwg
Q0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpOworICAgICAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgY2xpcCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IHJlY3QgPSByOworICAgICAgICByZWN0LmludGVyc2VjdChjbGlwKTsKKyAg
ICAgICAgY3R4dC0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoaW1hZ2UsIHJlY3QsIHJlY3QsIGNvbnRl
eHQpOworICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOworI2Vsc2UKKyNlcnJv
ciAiUGxhdGZvcm0gbmVlZHMgdG8gaW1wbGVtZW50IGRyYXdpbmcgb2YgRGlyZWN0M0Qgc3VyZmFj
ZSB0byBncmFwaGljcyBjb250ZXh0ISIKKyNlbmRpZgorICAgICAgICBtX21lbVN1cmZhY2UtPlVu
bG9ja1JlY3QoKTsKKyAgICB9Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6aW5pdGlhbGl6ZUQzRCgpCit7CisgICAgQVNT
RVJUKCFtX2RpcmVjdDNEOSk7CisgICAgQVNTRVJUKCFtX2RldmljZU1hbmFnZXIpOworCisgICAg
SFJFU1VMVCBociA9IERpcmVjdDNEQ3JlYXRlOUV4UHRyKCkoRDNEX1NES19WRVJTSU9OLCAmbV9k
aXJlY3QzRDkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAg
ICByZXR1cm4gRFhWQTJDcmVhdGVEaXJlY3QzRERldmljZU1hbmFnZXI5UHRyKCkoJm1fZGV2aWNl
UmVzZXRUb2tlbiwgJm1fZGV2aWNlTWFuYWdlcik7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6Y3JlYXRlRDNERGV2aWNl
KCkKK3sKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICBVSU5UIGFkYXB0ZXJJRCA9IEQzREFE
QVBURVJfREVGQVVMVDsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBp
ZiAoIW1fZGlyZWN0M0Q5IHx8ICFtX2RldmljZU1hbmFnZXIpCisgICAgICAgIHJldHVybiBNRl9F
X05PVF9JTklUSUFMSVpFRDsKKworICAgIEhXTkQgaHduZCA9IEdldERlc2t0b3BXaW5kb3coKTsK
KworICAgIC8vIFdlIGNyZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zIHRvIHByZXNlbnQgdGhl
IHZpZGVvIGZyYW1lcywKKyAgICAvLyBhbmQgZG8gbm90IHVzZSB0aGUgaW1wbGljaXQgc3dhcCBj
aGFpbiBvZiB0aGUgZGV2aWNlLgorICAgIC8vIFRoZSBzaXplIG9mIHRoZSBiYWNrIGJ1ZmZlciBp
cyAxIHggMS4KKworICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcDsKKyAgICBaZXJvTWVtb3J5
KCZwcCwgc2l6ZW9mKHBwKSk7CisKKyAgICBwcC5CYWNrQnVmZmVyV2lkdGggPSAxOworICAgIHBw
LkJhY2tCdWZmZXJIZWlnaHQgPSAxOworICAgIHBwLldpbmRvd2VkID0gVFJVRTsKKyAgICBwcC5T
d2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9DT1BZOworICAgIHBwLkJhY2tCdWZmZXJGb3JtYXQg
PSBEM0RGTVRfVU5LTk9XTjsKKyAgICBwcC5oRGV2aWNlV2luZG93ID0gaHduZDsKKyAgICBwcC5G
bGFncyA9IEQzRFBSRVNFTlRGTEFHX1ZJREVPOworICAgIHBwLlByZXNlbnRhdGlvbkludGVydmFs
ID0gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOworCisgICAgaWYgKG1faHduZCkgeworICAg
ICAgICBITU9OSVRPUiBtb25pdG9yID0gTW9uaXRvckZyb21XaW5kb3cobV9od25kLCBNT05JVE9S
X0RFRkFVTFRUT05FQVJFU1QpOworCisgICAgICAgIGhyID0gZmluZEFkYXB0ZXIobV9kaXJlY3Qz
RDkuZ2V0KCksIG1vbml0b3IsIGFkYXB0ZXJJRCk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIEQzRENBUFM5IGRkQ2FwczsKKyAg
ICBaZXJvTWVtb3J5KCZkZENhcHMsIHNpemVvZihkZENhcHMpKTsKKworICAgIGhyID0gbV9kaXJl
Y3QzRDktPkdldERldmljZUNhcHMoYWRhcHRlcklELCBEM0RERVZUWVBFX0hBTCwgJmRkQ2Fwcyk7
CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIERXT1JEIGZs
YWdzID0gRDNEQ1JFQVRFX05PV0lORE9XQ0hBTkdFUyB8IEQzRENSRUFURV9NVUxUSVRIUkVBREVE
IHwgRDNEQ1JFQVRFX0ZQVV9QUkVTRVJWRTsKKworICAgIGlmIChkZENhcHMuRGV2Q2FwcyAmIEQz
RERFVkNBUFNfSFdUUkFOU0ZPUk1BTkRMSUdIVCkKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ1JFQVRF
X0hBUkRXQVJFX1ZFUlRFWFBST0NFU1NJTkc7CisgICAgZWxzZQorICAgICAgICBmbGFncyB8PSBE
M0RDUkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lORzsKKworICAgIENPTVB0cjxJRGlyZWN0
M0REZXZpY2U5RXg+IGRldmljZTsKKyAgICBociA9IG1fZGlyZWN0M0Q5LT5DcmVhdGVEZXZpY2VF
eCgKKyAgICAgICAgYWRhcHRlcklELAorICAgICAgICBEM0RERVZUWVBFX0hBTCwKKyAgICAgICAg
cHAuaERldmljZVdpbmRvdywKKyAgICAgICAgZmxhZ3MsCisgICAgICAgICZwcCwKKyAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgJmRldmljZQorICAgICAgICApOworCisgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gbV9kaXJlY3QzRDktPkdldEFkYXB0
ZXJEaXNwbGF5TW9kZShhZGFwdGVySUQsICZtX2Rpc3BsYXlNb2RlKTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBtX2RldmljZU1hbmFnZXItPlJl
c2V0RGV2aWNlKGRldmljZS5nZXQoKSwgbV9kZXZpY2VSZXNldFRva2VuKTsKKyAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgbV9kZXZpY2UgPSBkZXZpY2U7CisK
KyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6Y3JlYXRlRDNEU2FtcGxlKElEaXJlY3QzRFN3YXBD
aGFpbjkqIHN3YXBDaGFpbiwgQ09NUHRyPElNRlNhbXBsZT4mIHZpZGVvU2FtcGxlKQoreworICAg
IENPTVB0cjxJRGlyZWN0M0RTdXJmYWNlOT4gc3VyZmFjZTsKKyAgICBIUkVTVUxUIGhyID0gc3dh
cENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmc3VyZmFj
ZSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIEQzRENP
TE9SIGNvbG9yQmxhY2sgPSBEM0RDT0xPUl9BUkdCKDB4RkYsIDB4MDAsIDB4MDAsIDB4MDApOwor
ICAgIGhyID0gbV9kZXZpY2UtPkNvbG9yRmlsbChzdXJmYWNlLmdldCgpLCBudWxscHRyLCBjb2xv
ckJsYWNrKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAg
cmV0dXJuIE1GQ3JlYXRlVmlkZW9TYW1wbGVGcm9tU3VyZmFjZVB0cigpKHN1cmZhY2UuZ2V0KCks
ICZ2aWRlb1NhbXBsZSk7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpEaXJlY3QzRFByZXNlbnRlcjo6cHJlc2VudFN3YXBDaGFpbihJRGlyZWN0M0RTd2Fw
Q2hhaW45KiBzd2FwQ2hhaW4sIElEaXJlY3QzRFN1cmZhY2U5KiBzdXJmYWNlKQoreworICAgIGlm
ICghbV9od25kKQorICAgICAgICByZXR1cm4gTUZfRV9JTlZBTElEUkVRVUVTVDsKKworICAgIHJl
dHVybiBzd2FwQ2hhaW4tPlByZXNlbnQobnVsbHB0ciwgJm1fZGVzdFJlY3QsIG1faHduZCwgbnVs
bHB0ciwgMCk7Cit9CisKK0hSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpEaXJlY3QzRFByZXNlbnRlcjo6Z2V0U3dhcENoYWluUHJlc2VudFBhcmFtZXRlcnMoSU1GTWVk
aWFUeXBlKiB0eXBlLCBEM0RQUkVTRU5UX1BBUkFNRVRFUlMqIHByZXNlbnRQYXJhbXMpCit7Cisg
ICAgaWYgKCFtX2h3bmQpCisgICAgICAgIHJldHVybiBNRl9FX0lOVkFMSURSRVFVRVNUOworCisg
ICAgQ09NUHRyPElNRk1lZGlhVHlwZT4gdmlkZW9UeXBlID0gdHlwZTsKKworICAgIFVJTlQzMiB3
aWR0aCA9IDAsIGhlaWdodCA9IDA7CisgICAgSFJFU1VMVCBociA9IE1GR2V0QXR0cmlidXRlU2l6
ZSh2aWRlb1R5cGUuZ2V0KCksIE1GX01UX0ZSQU1FX1NJWkUsICZ3aWR0aCwgJmhlaWdodCk7Cisg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIEdVSUQgZ3VpZFN1
YlR5cGUgPSBHVUlEX05VTEw7CisgICAgaHIgPSB2aWRlb1R5cGUtPkdldEdVSUQoTUZfTVRfU1VC
VFlQRSwgJmd1aWRTdWJUeXBlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJu
IGhyOworCisgICAgRFdPUkQgZDNkRm9ybWF0ID0gZ3VpZFN1YlR5cGUuRGF0YTE7CisKKyAgICBa
ZXJvTWVtb3J5KHByZXNlbnRQYXJhbXMsIHNpemVvZihEM0RQUkVTRU5UX1BBUkFNRVRFUlMpKTsK
KyAgICBwcmVzZW50UGFyYW1zLT5CYWNrQnVmZmVyV2lkdGggPSB3aWR0aDsKKyAgICBwcmVzZW50
UGFyYW1zLT5CYWNrQnVmZmVySGVpZ2h0ID0gaGVpZ2h0OworICAgIHByZXNlbnRQYXJhbXMtPldp
bmRvd2VkID0gVFJVRTsKKyAgICBwcmVzZW50UGFyYW1zLT5Td2FwRWZmZWN0ID0gRDNEU1dBUEVG
RkVDVF9DT1BZOworICAgIHByZXNlbnRQYXJhbXMtPkJhY2tCdWZmZXJGb3JtYXQgPSAoRDNERk9S
TUFUKWQzZEZvcm1hdDsKKyAgICBwcmVzZW50UGFyYW1zLT5oRGV2aWNlV2luZG93ID0gbV9od25k
OworICAgIHByZXNlbnRQYXJhbXMtPkZsYWdzID0gRDNEUFJFU0VOVEZMQUdfVklERU87CisgICAg
cHJlc2VudFBhcmFtcy0+UHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBEM0RQUkVTRU5UX0lOVEVSVkFM
X0RFRkFVTFQ7CisKKyAgICBEM0RERVZJQ0VfQ1JFQVRJT05fUEFSQU1FVEVSUyBwYXJhbXM7Cisg
ICAgaHIgPSBtX2RldmljZS0+R2V0Q3JlYXRpb25QYXJhbWV0ZXJzKCZwYXJhbXMpOworICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBpZiAocGFyYW1zLkRldmlj
ZVR5cGUgIT0gRDNEREVWVFlQRV9IQUwpCisgICAgICAgIHByZXNlbnRQYXJhbXMtPkZsYWdzIHw9
IEQzRFBSRVNFTlRGTEFHX0xPQ0tBQkxFX0JBQ0tCVUZGRVI7CisKKyAgICByZXR1cm4gU19PSzsK
K30KKworSFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkRpcmVjdDNE
UHJlc2VudGVyOjp1cGRhdGVEZXN0UmVjdCgpCit7CisgICAgaWYgKCFtX2h3bmQpCisgICAgICAg
IHJldHVybiBTX0ZBTFNFOworCisgICAgUkVDVCByY1ZpZXc7CisgICAgR2V0Q2xpZW50UmVjdCht
X2h3bmQsICZyY1ZpZXcpOworCisgICAgLy8gQ2xpcCB0byB0aGUgY2xpZW50IGFyZWEgb2YgdGhl
IHdpbmRvdy4KKyAgICBpZiAobV9kZXN0UmVjdC5yaWdodCA+IHJjVmlldy5yaWdodCkKKyAgICAg
ICAgbV9kZXN0UmVjdC5yaWdodCA9IHJjVmlldy5yaWdodDsKKworICAgIGlmIChtX2Rlc3RSZWN0
LmJvdHRvbSA+IHJjVmlldy5ib3R0b20pCisgICAgICAgIG1fZGVzdFJlY3QuYm90dG9tID0gcmNW
aWV3LmJvdHRvbTsKKworICAgIHJldHVybiBTX09LOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb24uaAkocmV2aXNpb24gMTkyMTUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCwxMyArMjQsMjMgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRl
ZiBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb25faAorI2RlZmluZSBNZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb25faAorCiAjaW5jbHVkZSAiQ09NUHRyLmgiCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiV2luMzJIYW5kbGUuaCIKKworI2lu
Y2x1ZGUgPEQzRDkuaD4KKyNpbmNsdWRlIDxEeHZhMmFwaS5oPgogCiAjaW5jbHVkZSA8TWZhcGku
aD4KKyNpbmNsdWRlIDxNZmVycm9yLmg+CiAjaW5jbHVkZSA8TWZpZGwuaD4KKyNpbmNsdWRlIDxl
dmNvZGUuaD4KICNpbmNsdWRlIDxldnIuaD4KIAorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4K
ICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtMTE4LDYgKzEyOCw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjcmVhdGVWaWRlb1dpbmRvdygpOwogICAgIHZvaWQgZGVzdHJveVZpZGVvV2luZG93
KCk7CiAKKyAgICB2b2lkIGludmFsaWRhdGVGcmFtZVZpZXcoKTsKKwogICAgIHZvaWQgYWRkTGlz
dGVuZXIoTWVkaWFQbGF5ZXJMaXN0ZW5lciopOwogICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoTWVk
aWFQbGF5ZXJMaXN0ZW5lciopOwogICAgIHZvaWQgbm90aWZ5RGVsZXRlZCgpOwpAQCAtMTUzLDYg
KzE2NSwyODggQEAgcHJpdmF0ZToKICAgICAgICAgTG9jayBtX211dGV4OwogICAgIH07CiAKKyAg
ICB0eXBlZGVmIERlcXVlPENPTVB0cjxJTUZTYW1wbGU+PiBWaWRlb1NhbXBsZUxpc3Q7CisKKyAg
ICBjbGFzcyBWaWRlb1NhbXBsZVBvb2wgeworICAgIHB1YmxpYzoKKyAgICAgICAgVmlkZW9TYW1w
bGVQb29sKCkgeyB9CisgICAgICAgIHZpcnR1YWwgflZpZGVvU2FtcGxlUG9vbCgpIHsgfQorCisg
ICAgICAgIEhSRVNVTFQgaW5pdGlhbGl6ZShWaWRlb1NhbXBsZUxpc3QmIHNhbXBsZXMpOworICAg
ICAgICB2b2lkIGNsZWFyKCk7CisKKyAgICAgICAgSFJFU1VMVCBnZXRTYW1wbGUoQ09NUHRyPElN
RlNhbXBsZT4mKTsKKyAgICAgICAgSFJFU1VMVCByZXR1cm5TYW1wbGUoSU1GU2FtcGxlKik7Cisg
ICAgICAgIGJvb2wgYXJlU2FtcGxlc1BlbmRpbmcoKTsKKworICAgIHByaXZhdGU6CisgICAgICAg
IExvY2sgbV9sb2NrOworICAgICAgICBWaWRlb1NhbXBsZUxpc3QgbV92aWRlb1NhbXBsZVF1ZXVl
OworICAgICAgICBib29sIG1faW5pdGlhbGl6ZWQgeyBmYWxzZSB9OworICAgICAgICB1bnNpZ25l
ZCBtX3BlbmRpbmcgeyAwIH07CisgICAgfTsKKworICAgIGNsYXNzIERpcmVjdDNEUHJlc2VudGVy
OworCisgICAgY2xhc3MgVmlkZW9TY2hlZHVsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVmlk
ZW9TY2hlZHVsZXIoKSB7IH0KKyAgICAgICAgdmlydHVhbCB+VmlkZW9TY2hlZHVsZXIoKSB7IH0K
KworICAgICAgICB2b2lkIHNldFByZXNlbnRlcihEaXJlY3QzRFByZXNlbnRlciogcHJlc2VudGVy
KSB7IG1fcHJlc2VudGVyID0gcHJlc2VudGVyOyB9CisKKyAgICAgICAgdm9pZCBzZXRGcmFtZVJh
dGUoY29uc3QgTUZSYXRpbyYgZnBzKTsKKyAgICAgICAgdm9pZCBzZXRDbG9ja1JhdGUoZmxvYXQg
cmF0ZSkgeyBtX3BsYXliYWNrUmF0ZSA9IHJhdGU7IH0KKworICAgICAgICBjb25zdCBMT05HTE9O
RyYgbGFzdFNhbXBsZVRpbWUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RTYW1wbGVUaW1lOyB9Cisg
ICAgICAgIGNvbnN0IExPTkdMT05HJiBmcmFtZUR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZUR1cmF0aW9uOyB9CisKKyAgICAgICAgSFJFU1VMVCBzdGFydFNjaGVkdWxlcihJTUZDbG9j
ayopOworICAgICAgICBIUkVTVUxUIHN0b3BTY2hlZHVsZXIoKTsKKworICAgICAgICBIUkVTVUxU
IHNjaGVkdWxlU2FtcGxlKElNRlNhbXBsZSosIGJvb2wgcHJlc2VudE5vdyk7CisgICAgICAgIEhS
RVNVTFQgcHJvY2Vzc1NhbXBsZXNJblF1ZXVlKExPTkcmIG5leHRTbGVlcCk7CisgICAgICAgIEhS
RVNVTFQgcHJvY2Vzc1NhbXBsZShJTUZTYW1wbGUqLCBMT05HJiBuZXh0U2xlZXApOworICAgICAg
ICBIUkVTVUxUIGZsdXNoKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgRFdPUkQg
V0lOQVBJIHNjaGVkdWxlclRocmVhZFByb2MoTFBWT0lEIGxwUGFyYW1ldGVyKTsKKyAgICAgICAg
RFdPUkQgc2NoZWR1bGVyVGhyZWFkUHJvY1ByaXZhdGUoKTsKKworICAgICAgICBEZXF1ZTxDT01Q
dHI8SU1GU2FtcGxlPj4gbV9zY2hlZHVsZWRTYW1wbGVzOworICAgICAgICBMb2NrIG1fbG9jazsK
KworICAgICAgICBDT01QdHI8SU1GQ2xvY2s+IG1fY2xvY2s7CisgICAgICAgIERpcmVjdDNEUHJl
c2VudGVyKiBtX3ByZXNlbnRlciB7IG51bGxwdHIgfTsKKworICAgICAgICBEV09SRCBtX3RocmVh
ZElEIHsgMCB9OworICAgICAgICBXaW4zMkhhbmRsZSBtX3NjaGVkdWxlclRocmVhZDsKKyAgICAg
ICAgV2luMzJIYW5kbGUgbV90aHJlYWRSZWFkeUV2ZW50OworICAgICAgICBXaW4zMkhhbmRsZSBt
X2ZsdXNoRXZlbnQ7CisKKyAgICAgICAgZmxvYXQgbV9wbGF5YmFja1JhdGUgeyAxLjBmIH07Cisg
ICAgICAgIE1GVElNRSBtX2ZyYW1lRHVyYXRpb24geyAwIH07CisgICAgICAgIE1GVElNRSBtX2xh
c3RTYW1wbGVUaW1lIHsgMCB9OworICAgIH07CisKKyAgICBjbGFzcyBEaXJlY3QzRFByZXNlbnRl
ciB7CisgICAgcHVibGljOgorICAgICAgICBEaXJlY3QzRFByZXNlbnRlcigpOworICAgICAgICB+
RGlyZWN0M0RQcmVzZW50ZXIoKTsKKworICAgICAgICBlbnVtIERldmljZVN0YXRlIHsKKyAgICAg
ICAgICAgIERldmljZU9LLAorICAgICAgICAgICAgRGV2aWNlUmVzZXQsCisgICAgICAgICAgICBE
ZXZpY2VSZW1vdmVkLAorICAgICAgICB9OworCisgICAgICAgIC8vIFJldHVybnMgdGhlIElEaXJl
Y3QzRERldmljZU1hbmFnZXI5IGludGVyZmFjZS4KKyAgICAgICAgSFJFU1VMVCBnZXRTZXJ2aWNl
KFJFRkdVSUQgZ3VpZFNlcnZpY2UsIFJFRklJRCByaWlkLCB2b2lkKiogcHB2KTsKKworICAgICAg
ICBIUkVTVUxUIGNoZWNrRm9ybWF0KEQzREZPUk1BVCk7CisKKyAgICAgICAgSFJFU1VMVCBzZXRW
aWRlb1dpbmRvdyhIV05EKTsKKyAgICAgICAgSFdORCBnZXRWaWRlb1dpbmRvdygpIGNvbnN0IHsg
cmV0dXJuIG1faHduZDsgfQorICAgICAgICBIUkVTVUxUIHNldERlc3RpbmF0aW9uUmVjdChjb25z
dCBSRUNUJiBkZXN0UmVjdCk7CisgICAgICAgIFJFQ1QgZ2V0RGVzdGluYXRpb25SZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9kZXN0UmVjdDsgfTsKKworICAgICAgICBIUkVTVUxUIGNyZWF0ZVZpZGVv
U2FtcGxlcyhJTUZNZWRpYVR5cGUqIGZvcm1hdCwgVmlkZW9TYW1wbGVMaXN0JiB2aWRlb1NhbXBs
ZVF1ZXVlKTsKKyAgICAgICAgdm9pZCByZWxlYXNlUmVzb3VyY2VzKCk7CisKKyAgICAgICAgSFJF
U1VMVCBjaGVja0RldmljZVN0YXRlKERldmljZVN0YXRlJik7CisgICAgICAgIEhSRVNVTFQgcHJl
c2VudFNhbXBsZShJTUZTYW1wbGUqLCBMT05HTE9ORyB0YXJnZXQpOworCisgICAgICAgIFVJTlQg
cmVmcmVzaFJhdGUoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlNb2RlLlJlZnJlc2hSYXRlOyB9
CisKKyAgICAgICAgdm9pZCBwYWludEN1cnJlbnRGcmFtZShHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEhSRVNVTFQgaW5pdGlhbGl6
ZUQzRCgpOworICAgICAgICBIUkVTVUxUIGdldFN3YXBDaGFpblByZXNlbnRQYXJhbWV0ZXJzKElN
Rk1lZGlhVHlwZSosIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyogcHJlc2VudFBhcmFtcyk7CisgICAg
ICAgIEhSRVNVTFQgY3JlYXRlRDNERGV2aWNlKCk7CisgICAgICAgIEhSRVNVTFQgY3JlYXRlRDNE
U2FtcGxlKElEaXJlY3QzRFN3YXBDaGFpbjkqLCBDT01QdHI8SU1GU2FtcGxlPiYgdmlkZW9TYW1w
bGUpOworICAgICAgICBIUkVTVUxUIHVwZGF0ZURlc3RSZWN0KCk7CisKKyAgICAgICAgSFJFU1VM
VCBwcmVzZW50U3dhcENoYWluKElEaXJlY3QzRFN3YXBDaGFpbjkqLCBJRGlyZWN0M0RTdXJmYWNl
OSopOworCisgICAgICAgIFVJTlQgbV9kZXZpY2VSZXNldFRva2VuIHsgMCB9OworICAgICAgICBI
V05EIG1faHduZCB7IG51bGxwdHIgfTsKKyAgICAgICAgUkVDVCBtX2Rlc3RSZWN0OworICAgICAg
ICBEM0RESVNQTEFZTU9ERSBtX2Rpc3BsYXlNb2RlOworCisgICAgICAgIExvY2sgbV9sb2NrOwor
ICAgICAgICAKKyAgICAgICAgQ09NUHRyPElEaXJlY3QzRDlFeD4gbV9kaXJlY3QzRDk7CisgICAg
ICAgIENPTVB0cjxJRGlyZWN0M0REZXZpY2U5RXg+IG1fZGV2aWNlOworICAgICAgICBDT01QdHI8
SURpcmVjdDNERGV2aWNlTWFuYWdlcjk+IG1fZGV2aWNlTWFuYWdlcjsKKyAgICAgICAgQ09NUHRy
PElEaXJlY3QzRFN1cmZhY2U5PiBtX3N1cmZhY2VSZXBhaW50OworCisgICAgICAgIENPTVB0cjxJ
RGlyZWN0M0RTdXJmYWNlOT4gbV9tZW1TdXJmYWNlOworICAgICAgICBpbnQgbV93aWR0aCB7IDAg
fTsKKyAgICAgICAgaW50IG1faGVpZ2h0IHsgMCB9OworICAgIH07CisKKyAgICBjbGFzcyBDdXN0
b21WaWRlb1ByZXNlbnRlcgorICAgICAgICA6IHB1YmxpYyBJTUZWaWRlb1ByZXNlbnRlcgorICAg
ICAgICAsIHB1YmxpYyBJTUZWaWRlb0RldmljZUlECisgICAgICAgICwgcHVibGljIElNRlRvcG9s
b2d5U2VydmljZUxvb2t1cENsaWVudAorICAgICAgICAsIHB1YmxpYyBJTUZHZXRTZXJ2aWNlCisg
ICAgICAgICwgcHVibGljIElNRkFjdGl2YXRlCisgICAgICAgICwgcHVibGljIElNRlZpZGVvRGlz
cGxheUNvbnRyb2wKKyAgICAgICAgLCBwdWJsaWMgSU1GQXN5bmNDYWxsYmFjaworICAgICAgICAs
IHB1YmxpYyBNZWRpYVBsYXllckxpc3RlbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEN1c3Rv
bVZpZGVvUHJlc2VudGVyKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbiopOworICAg
ICAgICB+Q3VzdG9tVmlkZW9QcmVzZW50ZXIoKTsKKworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIF9fUlBDX19kZXJl
Zl9vdXQgdm9pZCBfX1JQQ19GQVIgKl9fUlBDX0ZBUiAqcHB2T2JqZWN0KSBvdmVycmlkZTsKKyAg
ICAgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRSZWYoKSBvdmVycmlkZTsK
KyAgICAgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKCkgb3ZlcnJp
ZGU7CisKKyAgICAgICAgLy8gSU1GQ2xvY2tTdGF0ZVNpbmsKKyAgICAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIE9uQ2xvY2tTdGFydChNRlRJTUUgaG5zU3lzdGVtVGltZSwg
TE9OR0xPTkcgbGxDbG9ja1N0YXJ0T2Zmc2V0KSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIE9uQ2xvY2tTdG9wKE1GVElNRSBobnNTeXN0ZW1UaW1l
KSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIE9u
Q2xvY2tQYXVzZShNRlRJTUUgaG5zU3lzdGVtVGltZSkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBPbkNsb2NrUmVzdGFydChNRlRJTUUgaG5zU3lz
dGVtVGltZSkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBPbkNsb2NrU2V0UmF0ZShNRlRJTUUgaG5zU3lzdGVtVGltZSwgZmxvYXQgZmxSYXRlKSBv
dmVycmlkZTsKKworICAgICAgICAvLyBJTUZWaWRlb1ByZXNlbnRlcgorICAgICAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUHJvY2Vzc01lc3NhZ2UoTUZWUF9NRVNTQUdFX1RZ
UEUgZU1lc3NhZ2UsIFVMT05HX1BUUiB1bFBhcmFtKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldEN1cnJlbnRNZWRpYVR5cGUoX091dHB0cl8g
IElNRlZpZGVvTWVkaWFUeXBlICoqcHBNZWRpYVR5cGUpIG92ZXJyaWRlOworCisgICAgICAgIC8v
IElNRlZpZGVvRGV2aWNlSUQKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIEdldERldmljZUlEKElJRCogcERldmljZUlEKSBvdmVycmlkZTsKKworICAgICAgICAvLyBJ
TUZUb3BvbG9neVNlcnZpY2VMb29rdXBDbGllbnQKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEluaXRTZXJ2aWNlUG9pbnRlcnMoX0luXyAgSU1GVG9wb2xvZ3lTZXJ2
aWNlTG9va3VwICpwTG9va3VwKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFJlbGVhc2VTZXJ2aWNlUG9pbnRlcnModm9pZCkgb3ZlcnJpZGU7CisK
KyAgICAgICAgLy8gSU1GR2V0U2VydmljZQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgR2V0U2VydmljZShSRUZHVUlEIGd1aWRTZXJ2aWNlLCBSRUZJSUQgcmlpZCwg
TFBWT0lEICpwcHZPYmplY3QpOworCisgICAgICAgIC8vIElNRkFjdGl2YXRlCisgICAgICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBBY3RpdmF0ZU9iamVjdChSRUZJSUQgcmlp
ZCwgdm9pZCAqKnBwdik7CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBEZXRhY2hPYmplY3QoKTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFNodXRkb3duT2JqZWN0KCk7CisKKyAgICAgICAgLy8gSU1GQXR0cmlidXRlcworICAgICAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0SXRlbShfX1JQQ19faW4gUkVG
R1VJRCBndWlkS2V5LCBfX1JQQ19faW5vdXRfb3B0IFBST1BWQVJJQU5UICpwVmFsdWUpIHsgcmV0
dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgR2V0SXRlbVR5cGUoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX291dCBNRl9B
VFRSSUJVVEVfVFlQRSAqcFR5cGUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ29tcGFyZUl0ZW0oX19SUENfX2luIFJFRkdV
SUQgZ3VpZEtleSwgX19SUENfX2luIFJFRlBST1BWQVJJQU5UIFZhbHVlLCBfX1JQQ19fb3V0IEJP
T0wgKnBiUmVzdWx0KSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIENvbXBhcmUoX19SUENfX2luX29wdCBJTUZBdHRyaWJ1dGVz
ICpwVGhlaXJzLCBNRl9BVFRSSUJVVEVTX01BVENIX1RZUEUgTWF0Y2hUeXBlLCBfX1JQQ19fb3V0
IEJPT0wgKnBiUmVzdWx0KSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFVJTlQzMihfX1JQQ19faW4gUkVGR1VJRCBndWlk
S2V5LCBfX1JQQ19fb3V0IFVJTlQzMiAqcHVuVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQor
ICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VUlOVDY0KF9fUlBD
X19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19vdXQgVUlOVDY0ICpwdW5WYWx1ZSkgeyByZXR1
cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBHZXREb3VibGUoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX291dCBkb3VibGUg
KnBmVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgR2V0R1VJRChfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQ
Q19fb3V0IEdVSUQgKnBndWlkVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0U3RyaW5nTGVuZ3RoKF9fUlBDX19p
biBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19vdXQgVUlOVDMyICpwY2NoTGVuZ3RoKSB7IHJldHVy
biBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEdldFN0cmluZyhfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19fb3V0X2Vjb3VudF9m
dWxsKGNjaEJ1ZlNpemUpIExQV1NUUiBwd3N6VmFsdWUsIFVJTlQzMiBjY2hCdWZTaXplLCBfX1JQ
Q19faW5vdXRfb3B0IFVJTlQzMiAqcGNjaExlbmd0aCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9Cisg
ICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRBbGxvY2F0ZWRTdHJp
bmcoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX2RlcmVmX291dF9lY291bnRfZnVs
bF9vcHQoKCpwY2NoTGVuZ3RoICsgMSkpIExQV1NUUiAqcHB3c3pWYWx1ZSwgX19SUENfX291dCBV
SU5UMzIgKnBjY2hMZW5ndGgpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0QmxvYlNpemUoX19SUENfX2luIFJFRkdVSUQg
Z3VpZEtleSwgX19SUENfX291dCBVSU5UMzIgKnBjYkJsb2JTaXplKSB7IHJldHVybiBFX05PVElN
UEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldEJsb2Io
X19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX291dF9lY291bnRfZnVsbChjYkJ1ZlNp
emUpIFVJTlQ4ICpwQnVmLCBVSU5UMzIgY2JCdWZTaXplLCBfX1JQQ19faW5vdXRfb3B0IFVJTlQz
MiAqcGNiQmxvYlNpemUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0QWxsb2NhdGVkQmxvYihfX1JQQ19faW4gUkVGR1VJ
RCBndWlkS2V5LCBfX1JQQ19fZGVyZWZfb3V0X2Vjb3VudF9mdWxsX29wdCgqcGNiU2l6ZSkgVUlO
VDggKipwcEJ1ZiwgX19SUENfX291dCBVSU5UMzIgKnBjYlNpemUpIHsgcmV0dXJuIEVfTk9USU1Q
TDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VW5rbm93
bihfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBfX1JQQ19faW4gUkVGSUlEIHJpaWQsIF9fUlBD
X19kZXJlZl9vdXRfb3B0IExQVk9JRCAqcHB2KSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldEl0ZW0oX19SUENfX2luIFJF
RkdVSUQgZ3VpZEtleSwgX19SUENfX2luIFJFRlBST1BWQVJJQU5UIFZhbHVlKSB7IHJldHVybiBF
X05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERl
bGV0ZUl0ZW0oX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9
CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEZWxldGVBbGxJdGVt
cyh2b2lkKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFNldFVJTlQzMihfX1JQQ19faW4gUkVGR1VJRCBndWlkS2V5LCBVSU5U
MzIgdW5WYWx1ZSkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBTZXRVSU5UNjQoX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwg
VUlOVDY0IHVuVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0RG91YmxlKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRL
ZXksIGRvdWJsZSBmVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0R1VJRChfX1JQQ19faW4gUkVGR1VJRCBndWlk
S2V5LCBfX1JQQ19faW4gUkVGR1VJRCBndWlkVmFsdWUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQor
ICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0U3RyaW5nKF9fUlBD
X19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19pbl9zdHJpbmcgTFBDV1NUUiB3c3pWYWx1ZSkg
eyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBTZXRCbG9iKF9fUlBDX19pbiBSRUZHVUlEIGd1aWRLZXksIF9fUlBDX19pbl9lY291
bnRfZnVsbChjYkJ1ZlNpemUpIGNvbnN0IFVJTlQ4ICpwQnVmLCBVSU5UMzIgY2JCdWZTaXplKSB7
IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFNldFVua25vd24oX19SUENfX2luIFJFRkdVSUQgZ3VpZEtleSwgX19SUENfX2luX29w
dCBJVW5rbm93biAqcFVua25vd24pIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgTG9ja1N0b3JlKHZvaWQpIHsgcmV0dXJuIEVf
Tk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVW5s
b2NrU3RvcmUodm9pZCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRDb3VudChfX1JQQ19fb3V0IFVJTlQzMiAqcGNJdGVt
cykgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBHZXRJdGVtQnlJbmRleChVSU5UMzIgdW5JbmRleCwgX19SUENfX291dCBHVUlE
ICpwZ3VpZEtleSwgX19SUENfX2lub3V0X29wdCBQUk9QVkFSSUFOVCAqcFZhbHVlKSB7IHJldHVy
biBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IENvcHlBbGxJdGVtcyhfX1JQQ19faW5fb3B0IElNRkF0dHJpYnV0ZXMgKnBEZXN0KSB7IHJldHVy
biBFX05PVElNUEw7IH0KKworICAgICAgICAvLyBJTUZWaWRlb0Rpc3BsYXlDb250cm9sCisgICAg
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXROYXRpdmVWaWRlb1NpemUo
U0laRSogcHN6VmlkZW8sIFNJWkUqIHBzekFSVmlkZW8pIHsgcmV0dXJuIEVfTk9USU1QTDsgfQor
ICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0SWRlYWxWaWRlb1Np
emUoU0laRSogcHN6TWluLCBTSVpFKiBwc3pNYXgpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAg
ICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0VmlkZW9Qb3NpdGlvbihj
b25zdCBNRlZpZGVvTm9ybWFsaXplZFJlY3QqIHBucmNTb3VyY2UsIGNvbnN0IExQUkVDVCBwcmNE
ZXN0KTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFZpZGVv
UG9zaXRpb24oTUZWaWRlb05vcm1hbGl6ZWRSZWN0KiBwbnJjU291cmNlLCBMUFJFQ1QgcHJjRGVz
dCk7CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRBc3BlY3RS
YXRpb01vZGUoRFdPUkQgZHdBc3BlY3RSYXRpb01vZGUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQor
ICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0QXNwZWN0UmF0aW9N
b2RlKERXT1JEKiBwZHdBc3BlY3RSYXRpb01vZGUpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAg
ICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0VmlkZW9XaW5kb3coSFdO
RCBod25kVmlkZW8pOworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
R2V0VmlkZW9XaW5kb3coSFdORCogcGh3bmRWaWRlbyk7CisgICAgICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBSZXBhaW50VmlkZW8oKTsKKyAgICAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIEdldEN1cnJlbnRJbWFnZShCSVRNQVBJTkZPSEVBREVSKiBw
QmloLCBCWVRFKiogcERpYiwgRFdPUkQqIHBjYkRpYiwgTE9OR0xPTkcqIHBUaW1lU3RhbXApIHsg
cmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgU2V0Qm9yZGVyQ29sb3IoQ09MT1JSRUYgQ2xyKSB7IHJldHVybiBFX05PVElNUEw7IH0K
KyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldEJvcmRlckNvbG9y
KENPTE9SUkVGKiBwQ2xyKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldFJlbmRlcmluZ1ByZWZzKERXT1JEIGR3UmVuZGVy
RmxhZ3MpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgR2V0UmVuZGVyaW5nUHJlZnMoRFdPUkQqIHBkd1JlbmRlckZsYWdzKSB7
IHJldHVybiBFX05PVElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFNldEZ1bGxzY3JlZW4oQk9PTCBiRnVsbHNjcmVlbikgeyByZXR1cm4gRV9OT1RJTVBM
OyB9CisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRGdWxsc2Ny
ZWVuKEJPT0wqIHBiRnVsbHNjcmVlbikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisKKyAgICAgICAg
Ly8gSU1GQXN5bmNDYWxsYmFjayBtZXRob2RzCisgICAgICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBHZXRQYXJhbWV0ZXJzKERXT1JEKiwgRFdPUkQqKSB7IHJldHVybiBFX05P
VElNUEw7IH0KKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEludm9r
ZShJTUZBc3luY1Jlc3VsdCogcEFzeW5jUmVzdWx0KTsKKworICAgICAgICAvLyBNZWRpYVBsYXll
ckxpc3RlbmVyCisgICAgICAgIHZpcnR1YWwgdm9pZCBvbk1lZGlhUGxheWVyRGVsZXRlZCgpIG92
ZXJyaWRlOworCisgICAgICAgIHZvaWQgcGFpbnRDdXJyZW50RnJhbWUoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBVTE9ORyBtX3Jl
ZkNvdW50IHsgMCB9OworICAgICAgICBMb2NrIG1fbG9jazsKKyAgICAgICAgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uKiBtX21lZGlhUGxheWVyOworCisgICAgICAgIGVudW0gUmVu
ZGVyU3RhdGUgeworICAgICAgICAgICAgUmVuZGVyU3RhdGVTdGFydGVkID0gMSwKKyAgICAgICAg
ICAgIFJlbmRlclN0YXRlU3RvcHBlZCwKKyAgICAgICAgICAgIFJlbmRlclN0YXRlUGF1c2VkLAor
ICAgICAgICAgICAgUmVuZGVyU3RhdGVTaHV0ZG93biwKKyAgICAgICAgfTsKKworICAgICAgICBS
ZW5kZXJTdGF0ZSBtX3JlbmRlclN0YXRlIHsgUmVuZGVyU3RhdGVTaHV0ZG93biB9OworICAgICAg
ICBDT01QdHI8SU1GQ2xvY2s+IG1fY2xvY2s7CisgICAgICAgIENPTVB0cjxJTWVkaWFFdmVudFNp
bms+IG1fbWVkaWFFdmVudFNpbms7CisgICAgICAgIENPTVB0cjxJTUZUcmFuc2Zvcm0+IG1fbWl4
ZXI7CisgICAgICAgIENPTVB0cjxJTUZNZWRpYVR5cGU+IG1fbWVkaWFUeXBlOworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RGlyZWN0M0RQcmVzZW50ZXI+IG1fcHJlc2VudGVyRW5naW5lOworICAg
ICAgICBNRlZpZGVvTm9ybWFsaXplZFJlY3QgbV9zb3VyY2VSZWN0OworICAgICAgICBib29sIG1f
c2FtcGxlTm90aWZ5IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX3ByZXJvbGxlZCB7IGZhbHNl
IH07CisgICAgICAgIGJvb2wgbV9yZXBhaW50IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2Vu
ZFN0cmVhbWluZyB7IGZhbHNlIH07CisgICAgICAgIFZpZGVvU2NoZWR1bGVyIG1fc2NoZWR1bGVy
OworICAgICAgICBWaWRlb1NhbXBsZVBvb2wgbV9zYW1wbGVQb29sOworICAgICAgICB1bnNpZ25l
ZCBtX3Rva2VuQ291bnRlciB7IDAgfTsKKyAgICAgICAgZmxvYXQgbV9yYXRlIHsgMS4wZiB9Owor
CisgICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKworICAgICAgICBib29sIGlzU2NydWJi
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9yYXRlID09IDAuMGY7IH0KKworICAgICAgICBIUkVTVUxU
IGNvbmZpZ3VyZU1peGVyKElNRlRyYW5zZm9ybSogbWl4ZXIpOworICAgICAgICBIUkVTVUxUIGZs
dXNoKCk7CisgICAgICAgIEhSRVNVTFQgc2V0TWVkaWFUeXBlKElNRk1lZGlhVHlwZSopOworICAg
ICAgICBIUkVTVUxUIGNoZWNrU2h1dGRvd24oKSBjb25zdDsKKyAgICAgICAgSFJFU1VMVCByZW5l
Z290aWF0ZU1lZGlhVHlwZSgpOworICAgICAgICBIUkVTVUxUIHByb2Nlc3NJbnB1dE5vdGlmeSgp
OworICAgICAgICBIUkVTVUxUIGJlZ2luU3RyZWFtaW5nKCk7CisgICAgICAgIEhSRVNVTFQgZW5k
U3RyZWFtaW5nKCk7CisgICAgICAgIEhSRVNVTFQgY2hlY2tFbmRPZlN0cmVhbSgpOworICAgICAg
ICBIUkVTVUxUIGlzTWVkaWFUeXBlU3VwcG9ydGVkKElNRk1lZGlhVHlwZSopOworICAgICAgICBI
UkVTVUxUIGNyZWF0ZU9wdGltYWxWaWRlb1R5cGUoSU1GTWVkaWFUeXBlKiBwcm9wb3NlZFR5cGUs
IElNRk1lZGlhVHlwZSoqIG9wdGltYWxUeXBlKTsKKyAgICAgICAgSFJFU1VMVCBjYWxjdWxhdGVP
dXRwdXRSZWN0YW5nbGUoSU1GTWVkaWFUeXBlKiBwcm9wb3NlZFR5cGUsIFJFQ1QmIG91dHB1dFJl
Y3QpOworCisgICAgICAgIHZvaWQgcHJvY2Vzc091dHB1dExvb3AoKTsKKyAgICAgICAgSFJFU1VM
VCBwcm9jZXNzT3V0cHV0KCk7CisgICAgICAgIEhSRVNVTFQgZGVsaXZlclNhbXBsZShJTUZTYW1w
bGUqLCBib29sIHJlcGFpbnQpOworICAgICAgICBIUkVTVUxUIHRyYWNrU2FtcGxlKElNRlNhbXBs
ZSopOworICAgICAgICB2b2lkIHJlbGVhc2VSZXNvdXJjZXMoKTsKKworICAgICAgICBIUkVTVUxU
IG9uU2FtcGxlRnJlZShJTUZBc3luY1Jlc3VsdCopOworCisgICAgICAgIHZvaWQgbm90aWZ5RXZl
bnQobG9uZyBFdmVudENvZGUsIExPTkdfUFRSIFBhcmFtMSwgTE9OR19QVFIgUGFyYW0yKTsKKyAg
ICB9OworCisgICAgQ09NUHRyPEN1c3RvbVZpZGVvUHJlc2VudGVyPiBtX3ByZXNlbnRlcjsKIH07
CiAKIH0KKworI2VuZGlmCg==
</data>
<flag name="review"
          id="290161"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
    <flag name="commit-queue"
          id="290166"
          type_id="3"
          status="-"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>