<?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>140337</bug_id>
          
          <creation_ts>2015-01-10 08:53:53 -0800</creation_ts>
          <short_desc>[WinCairo][Video] Windows Media Foundation implementation is not completed.</short_desc>
          <delta_ts>2015-01-19 13:03:06 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>peavo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alex.christensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1060423</commentid>
    <comment_count>0</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-01-10 08:53:53 -0800</bug_when>
    <thetext>This patch aims to complete some of the methods which are not implemented. Currently, only MP4 is supported. Video is rendered in a child window of the main window. We should eventually render the video directly in the main window, by reading and painting individual video frames from the stream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060424</commentid>
    <comment_count>1</comment_count>
      <attachid>244411</attachid>
    <who name="">peavo</who>
    <bug_when>2015-01-10 09:10:02 -0800</bug_when>
    <thetext>Created attachment 244411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060425</commentid>
    <comment_count>2</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-01-10 09:13:09 -0800</bug_when>
    <thetext>I have used http://html5videoformatconverter.com/html5-video-tag-example.html for testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060683</commentid>
    <comment_count>3</comment_count>
      <attachid>244411</attachid>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2015-01-12 14:47:45 -0800</bug_when>
    <thetext>Comment on attachment 244411
Patch

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

This looks like some pretty dang good work in progress.  I wouldn&apos;t be opposed to having this in WebKit and it can be polished from here.  What do you think, Brent?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:212
&gt; +        ::MoveWindow(m_hwndVideo, rect.x(), rect.y(), rect.width(), rect.height(), FALSE);

Does this just move the child window over where the video element is supposed to be?  Does it draw controls below the child window?  What if the parent window is moved or not in the coordinates (0,0)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060915</commentid>
    <comment_count>4</comment_count>
      <attachid>244540</attachid>
    <who name="">peavo</who>
    <bug_when>2015-01-13 13:49:49 -0800</bug_when>
    <thetext>Created attachment 244540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060917</commentid>
    <comment_count>5</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-01-13 13:54:00 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 244411 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=244411&amp;action=review
&gt; 
&gt; This looks like some pretty dang good work in progress.  I wouldn&apos;t be
&gt; opposed to having this in WebKit and it can be polished from here.  What do
&gt; you think, Brent?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:212
&gt; &gt; +        ::MoveWindow(m_hwndVideo, rect.x(), rect.y(), rect.width(), rect.height(), FALSE);
&gt; 
&gt; Does this just move the child window over where the video element is
&gt; supposed to be?  Does it draw controls below the child window?  What if the
&gt; parent window is moved or not in the coordinates (0,0)?

Thanks for reviewing :)

I&apos;ve changed this in the latest patch. The child window will be moved along with the parent, and scrolling should also work (with a little lag, though). Unfortunately, the controls are drawn beneath the child window, I think. This should be fixed by drawing individual frames directly into the main window, which the Media Foundation api supports. This should be the next step, I believe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060944</commentid>
    <comment_count>6</comment_count>
      <attachid>244540</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-13 14:33:47 -0800</bug_when>
    <thetext>Comment on attachment 244540
Patch

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

A really great start! Thank you for working on this. I think this patch needs a little attention before we land it, but it is getting very close.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:120
&gt; +    HRESULT hr = m_mediaSession-&gt;Start(nullptr, &amp;varStart);

What should we do if Start fails? Do we need to log anything that would help us understand why the media session failed to start? Maybe we should ASSERT on this?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:124
&gt; +    m_paused = false;

Is this true, if m_mediaSession-&gt;Start fails?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:132
&gt; +    m_mediaSession-&gt;Pause();

Does this have an HRESULT return code? If so, should we do something with it (e.g., maybe the media cannot be paused for some reason?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:236
&gt; +    if (FAILED(hr))

You could probably combine these two lines if you don&apos;t care about hanging onto the HRESULT for logging or debugging.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:250
&gt; +        m_mediaSession-&gt;Release();

Can we set m_mediaSession to nullptr here?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:253
&gt; +    HRESULT hr = MFShutdown();

Maybe you should ASSERT here if HRESULT is some kind of failure so we can see this in debug builds?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:276
&gt; +        );

We don&apos;t usually use this one-line-per-argument syntax. Could you tighten this into a couple of lines, please?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:345
&gt; +    // TODO: cleanup on failure

OOPS! :-)

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

I think the two preceding lines could be combined.  &quot;if (!addBranchToPartialTopology(i))&quot;

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:377
&gt; +    COMPtr&lt;IMFTopologyNode&gt; outputNode;

Could you please move these closer to the point where they are first used, rather than just having a block of declarations here?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:387
&gt; +    if (selected) {

Please make this an early return.

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

In general, if you aren&apos;t going to use &apos;ok&apos; for logging, I think this should just be written &quot;if (!createSourceStreamNode(...)&quot;

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:393
&gt; +        // Create the output node for the renderer.

This comment just states what the next line does. Please remove it.

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

Ditto: &quot;if (!createOutputNode(...)&quot;

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:408
&gt; +        hr = sourceNode-&gt;ConnectOutput(0, outputNode.get(), 0);

Should either of these 0&apos;s be nullptr?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:441
&gt; +    wcex.lpszMenuName = 0;

nullptr

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:448
&gt; +    return 0;

return nullptr; please!

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:471
&gt; +{

Should you be checking for nullptr here, like you do in the other ::create methods you wrote?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:472
&gt; +    COMPtr&lt;IMFMediaTypeHandler&gt; handler;

Please move declaration down to where it is first used.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:473
&gt; +    COMPtr&lt;IMFActivate&gt; rendererActivate;

Ditto.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:475
&gt; +    GUID guidMajorType = GUID_NULL;

Please move declaration down to where it is first used.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:479
&gt; +    sourceSD-&gt;GetStreamIdentifier(&amp;streamID); // Just for debugging, ignore any failures.

Should this be wrapped in an #ifndef NDEBUG?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:481
&gt; +    // Get the media type handler for the stream.

I don&apos;t think this comment is helpful, since it just restates the next line.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:486
&gt; +    // Get the major media type.

I don&apos;t think this comment is helpful.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:518
&gt; +    return true;

Maybe this should just be &quot;return SUCCEEDED(hr);&quot; and get rid of the if case?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:557
&gt; +        return;

This seems a little weird. Is there supposed to be more? Or maybe just a TODO?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:587
&gt; +HRESULT STDMETHODCALLTYPE MediaPlayerPrivateMediaFoundation::AsyncCallback::QueryInterface(REFIID riid, __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject)

Please remove the STDMETHODCALLTYPE declarations in the implementation file. They are only needed in the method declarations.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:594
&gt; +    }

I think the above might be clearer written as an early return for the !IsEqualGUIID case, then just include *ppvObject = this down where you do the AddRef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060951</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2015-01-13 15:00:58 -0800</bug_when>
    <thetext>Thanks for the more thorough review, Brent.  This patch is basically what I meant to do with https://bugs.webkit.org/show_bug.cgi?id=132143 so I&apos;m marking that one as a duplicate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060953</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2015-01-13 15:02:08 -0800</bug_when>
    <thetext>*** Bug 132143 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061244</commentid>
    <comment_count>9</comment_count>
      <attachid>244624</attachid>
    <who name="">peavo</who>
    <bug_when>2015-01-14 11:20:02 -0800</bug_when>
    <thetext>Created attachment 244624
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061245</commentid>
    <comment_count>10</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-01-14 11:21:53 -0800</bug_when>
    <thetext>Thanks for the review! The review comments are addressed in the latest patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062116</commentid>
    <comment_count>11</comment_count>
      <attachid>244624</attachid>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2015-01-17 10:44:11 -0800</bug_when>
    <thetext>Comment on attachment 244624
Patch

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

This is great!  Let&apos;s do another iteration of refining before putting it in, though.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:49
&gt; +    , m_hwndVideo(0)

This should probably be nullptr.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:133
&gt; +    HRESULT hr = m_mediaSession-&gt;Pause();

This could just be put into the next line.  We don&apos;t really need an explicit local variable name if we only use it once outside of an assert.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:239
&gt; +    AsyncCallback* callback = new AsyncCallback(this, true);

Where is this deleted?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:240
&gt; +    m_mediaSession-&gt;BeginGetEvent(callback, nullptr);

Should we check the return value of this to see if it succeeded?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:261
&gt; +    HRESULT hr = MFCreateSourceResolver(&amp;m_sourceResolver);

Again, this could just be put inside the next line.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:262
&gt; +    if (!SUCCEEDED(hr))

That&apos;s what the FAILED macro is for.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:272
&gt; +    return SUCCEEDED(hr);

This should always be true, right?  Otherwise it would have returned early.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:327
&gt; +        AsyncCallback* callback = new AsyncCallback(this, true);

Again, should this be deleted?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:353
&gt; +    for (int i = 0; i &lt; sourceStreams; i++) {

i should be a DWORD to keep type comparisons as consistent as possible.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:420
&gt; +    wcex.hInstance = 0;

nullptr

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:421
&gt; +    wcex.hIcon = 0;

nullptr? Is HICON a pointer type?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:423
&gt; +    wcex.hbrBackground = 0;

probably nullptr.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:426
&gt; +    wcex.hIconSm = 0;

probably nullptr.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:436
&gt; +    HWND hWndParent = 0;

nullptr

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:440
&gt; +    if (view &amp;&amp; view-&gt;hostWindow())

else return early, I think.  Otherwise CreateWindowEx could be given nullptr as its parent.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:543
&gt; +    m_videoDisplay-&gt;SetVideoPosition(nullptr, &amp;rc);

It would be good to assert m_videoDisplay and m_player before using them here.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:583
&gt; +    int refCount = m_refCount;

ULONG.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:118
&gt; +        virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject);

These should probably have override after them.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:126
&gt; +        int m_refCount;

This should be a ULONG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062145</commentid>
    <comment_count>12</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2015-01-17 17:18:48 -0800</bug_when>
    <thetext>It works!
To get it to link, I had to add these libraries to WebKitCFLite.props:
Mfplat.lib;Mf.lib;mfuuid.lib;strmiids.lib;
It also crashes every time with http://www.w3.org/2010/05/video/mediaevents.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062210</commentid>
    <comment_count>13</comment_count>
      <attachid>244863</attachid>
    <who name="">peavo</who>
    <bug_when>2015-01-18 11:22:31 -0800</bug_when>
    <thetext>Created attachment 244863
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062211</commentid>
    <comment_count>14</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-01-18 11:24:53 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 244624 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=244624&amp;action=review
&gt; 

Thanks for reviewing :) Updated patch.

&gt;Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:239
&gt; &gt; +    AsyncCallback* callback = new AsyncCallback(this, true);
&gt; 
&gt; Where is this deleted?
&gt; 

It&apos;s deleted when Media Foundation releases its reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062361</commentid>
    <comment_count>15</comment_count>
      <attachid>244863</attachid>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2015-01-19 08:24:39 -0800</bug_when>
    <thetext>Comment on attachment 244863
Patch

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

Does this really link successfully without linking to additional libraries?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:451
&gt; +        DestroyWindow(m_hwndVideo);

You should probably set m_hwndVideo to nullptr after this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062439</commentid>
    <comment_count>16</comment_count>
      <attachid>244914</attachid>
    <who name="">peavo</who>
    <bug_when>2015-01-19 11:59:04 -0800</bug_when>
    <thetext>Created attachment 244914
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062440</commentid>
    <comment_count>17</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-01-19 11:59:56 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 244863 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=244863&amp;action=review
&gt; 
&gt; Does this really link successfully without linking to additional libraries?
&gt; 

Sorry, forgot about this one, added in latest patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062455</commentid>
    <comment_count>18</comment_count>
      <attachid>244914</attachid>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2015-01-19 12:20:13 -0800</bug_when>
    <thetext>Comment on attachment 244914
Patch

Hooray!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062468</commentid>
    <comment_count>19</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-01-19 12:45:34 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Comment on attachment 244914 [details]
&gt; Patch
&gt; 
&gt; Hooray!

Thanks for the review and helpful feedback :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062474</commentid>
    <comment_count>20</comment_count>
      <attachid>244914</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-19 13:03:00 -0800</bug_when>
    <thetext>Comment on attachment 244914
Patch

Clearing flags on attachment: 244914

Committed r178671: &lt;http://trac.webkit.org/changeset/178671&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062476</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-19 13:03:06 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244411</attachid>
            <date>2015-01-10 09:10:02 -0800</date>
            <delta_ts>2015-01-13 13:49:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140337-20150110180946.patch</filename>
            <type>text/plain</type>
            <size>23928</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE1LTAxLTEwICBwZWF2b0Bv
dXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgorCisgICAgICAgIFtXaW5DYWlyb11bVmlk
ZW9dIFdpbmRvd3MgTWVkaWEgRm91bmRhdGlvbiBpbXBsZW1lbnRhdGlvbiBpcyBub3QgY29tcGxl
dGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQw
MzM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhaW1zIHRvIGNvbXBsZXRlIHNvbWUgb2YgdGhlIG1ldGhvZHMgd2hpY2ggYXJlIG5v
dCBpbXBsZW1lbnRlZC4KKyAgICAgICAgQ3VycmVudGx5LCBvbmx5IE1QNCBpcyBzdXBwb3J0ZWQu
CisgICAgICAgIFZpZGVvIGlzIHJlbmRlcmVkIGluIGEgY2hpbGQgd2luZG93IG9mIHRoZSBtYWlu
IHdpbmRvdy4KKyAgICAgICAgV2Ugc2hvdWxkIGV2ZW50dWFsbHkgcmVuZGVyIHRoZSB2aWRlbyBk
aXJlY3RseSBpbiB0aGUgbWFpbiB3aW5kb3csCisgICAgICAgIGJ5IHJlYWRpbmcgYW5kIHBhaW50
aW5nIGluZGl2aWR1YWwgdmlkZW8gZnJhbWVzIGZyb20gdGhlIHN0cmVhbS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpsb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6bmF0
dXJhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246Omhhc0F1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBhdXNlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnJlYWR5U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpkaWRMb2Fk
aW5nUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5kU2Vzc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnN0YXJ0Q3JlYXRl
TWVkaWFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjplbmRDcmVhdGVkTWVkaWFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjplbmRHZXRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZVRvcG9sb2d5
RnJvbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OmFkZEJyYW5jaFRvUGFydGlhbFRvcG9sb2d5KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9WaWV3V25kUHJvYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnJlZ2lz
dGVyVmlkZW9XaW5kb3dDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZVZpZGVvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZGVzdHJveVZpZGVvV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3Jl
YXRlT3V0cHV0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OmNyZWF0ZVNvdXJjZVN0cmVhbU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpvbkNyZWF0ZWRNZWRpYVNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Om9u
VG9wb2xvZ3lTZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpBc3luY0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFjazo6fkFz
eW5jQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6OkFk
ZFJlZik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkFzeW5jQ2FsbGJhY2s6OlJlbGVhc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpHZXRQYXJhbWV0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5
bmNDYWxsYmFjazo6SW52b2tlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmg6CisKIDIwMTUtMDEtMTAgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlICdrZXJuaW5nJyAvICdwYWlu
dC1vcmRlcicgLyAnc3Ryb2tlLWRhc2hhcnJheScgU1ZHIENTUyBwcm9wZXJ0aWVzIHRvIHRoZSBu
ZXcgU3R5bGVCdWlsZGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uLmNwcAkocmV2aXNpb24gMTc4MjM3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDE4ICsyNyw0MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5oIgogCisjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogI2lmIFVTRShNRURJQV9GT1VOREFUSU9OKQogCi1uYW1l
c3BhY2UgV2ViQ29yZSB7CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAotLy8gVE9ETzog
SW1wbGVtZW50IHZpZGVvIGZ1bmN0aW9uYWxpdHkgdXNpbmcgTWVkaWEgRm91bmRhdGlvbgorbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Ok1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbihNZWRpYVBsYXllciogcGxheWVyKSAKICAg
ICA6IG1fcGxheWVyKHBsYXllcikKKyAgICAsIG1fdmlzaWJsZShmYWxzZSkKKyAgICAsIG1fbG9h
ZGluZ1Byb2dyZXNzKGZhbHNlKQorICAgICwgbV9wYXVzZWQoZmFsc2UpCisgICAgLCBtX2hhc0F1
ZGlvKGZhbHNlKQorICAgICwgbV9oYXNWaWRlbyhmYWxzZSkKKyAgICAsIG1faHduZFZpZGVvKDAp
CisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAgICwgbV9t
ZWRpYVNlc3Npb24obnVsbHB0cikKKyAgICAsIG1fc291cmNlUmVzb2x2ZXIobnVsbHB0cikKKyAg
ICAsIG1fbWVkaWFTb3VyY2UobnVsbHB0cikKKyAgICAsIG1fdG9wb2xvZ3kobnVsbHB0cikKKyAg
ICAsIG1fc291cmNlUEQobnVsbHB0cikKKyAgICAsIG1fdmlkZW9EaXNwbGF5KG51bGxwdHIpCit7
CisgICAgY3JlYXRlU2Vzc2lvbigpOworICAgIGNyZWF0ZVZpZGVvV2luZG93KCk7Cit9CisKK01l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6fk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbigpCiB7CisgICAgZGVzdHJveVZpZGVvV2luZG93KCk7CisgICAgZW5kU2Vzc2lv
bigpOwogfQogCiBQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikK
QEAgLTYwLDE5ICs4NCwyMyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpnZXRTdXBwb3J0
ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgdHlwZXMgPSBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICB0eXBlcy5hZGQoU3RyaW5nKCJ2
aWRlby9tcDQiKSk7CiB9CiAKIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBw
b3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNOdWxsKCkgfHwgcGFyYW1ldGVycy50eXBlLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKKworICAgIGlm
IChwYXJhbWV0ZXJzLnR5cGUgPT0gInZpZGVvL21wNCIpCisgICAgICAgIHJldHVybiBNZWRpYVBs
YXllcjo6SXNTdXBwb3J0ZWQ7CisKICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9y
dGVkOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6bG9hZChj
b25zdCBTdHJpbmcmKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Omxv
YWQoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGFy
dENyZWF0ZU1lZGlhU291cmNlKHVybCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpjYW5jZWxMb2FkKCkKQEAgLTgyLDM1ICsxMTAsNDggQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6cGxheSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBp
ZiAoIW1fbWVkaWFTZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBQUk9QVkFSSUFOVCB2
YXJTdGFydDsKKyAgICBQcm9wVmFyaWFudEluaXQoJnZhclN0YXJ0KTsKKyAgICB2YXJTdGFydC52
dCA9IFZUX0VNUFRZOworCisgICAgSFJFU1VMVCBociA9IG1fbWVkaWFTZXNzaW9uLT5TdGFydChu
dWxscHRyLCAmdmFyU3RhcnQpOworCisgICAgUHJvcFZhcmlhbnRDbGVhcigmdmFyU3RhcnQpOwor
CisgICAgbV9wYXVzZWQgPSBmYWxzZTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OnBhdXNlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICgh
bV9tZWRpYVNlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIG1fbWVkaWFTZXNzaW9uLT5Q
YXVzZSgpOworCisgICAgbV9wYXVzZWQgPSB0cnVlOwogfQogCiBJbnRTaXplIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6bmF0dXJhbFNpemUoKSBjb25zdCAKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRTaXplKDAsIDApOworICAgIHJldHVybiBtX3Np
emU7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpoYXNWaWRl
bygpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIG1faGFzVmlkZW87CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpoYXNBdWRpbygpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1faGFzQXVkaW87CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzZXRWaXNpYmxlKGJvb2wpCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3Zpc2libGUgPSB2aXNpYmxlOwogfQogCiBi
b29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2Vla2luZygpIGNvbnN0CkBA
IC0xMjEsOCArMTYyLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OgogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cGF1c2VkKCkgY29u
c3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gbV9wYXVzZWQ7CiB9CiAKIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpuZXR3b3JrU3RhdGUoKSBjb25zdApAQCAtMTMzLDggKzE3
Myw3IEBAIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcmkKIAogTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpyZWFk
eVN0YXRlKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBNZWRp
YVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKIH0KIAogc3Rk
Ojp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpidWZmZXJlZCgpIGNvbnN0CkBAIC0xNDUsMTMgKzE4NCwxOCBAQCBzdGQ6OnVu
aXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpCiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAogewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2xvYWRpbmdQ
cm9ncmVzczsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnNl
dFNpemUoY29uc3QgSW50U2l6ZSYpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgbV9zaXplID0gc2l6ZTsKKworICAgIGlmICghbV92aWRlb0Rpc3BsYXkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJFQ1QgcmMgPSB7IDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkgfTsKKyAgICBtX3ZpZGVvRGlzcGxheS0+U2V0VmlkZW9Qb3NpdGlvbihudWxs
cHRyLCAmcmMpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAt
MTYwLDggKzIwNCw0MTMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OgogICAgICAgICB8fCAhbV9wbGF5ZXItPnZpc2libGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gVE9ETzogUGFpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSB2aWRlbyB0byB0aGUgY29udGV4
dAotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gV2UgY3VycmVudGx5IGxldCBNZWRpYSBG
b3VuZGF0aW9uIGhhbmRsZSB0aGUgZHJhd2luZywgYnkgcHJvdmlkaW5nIGEgaGFuZGxlIHRvIHRo
ZSB3aW5kb3cgdG8gZHJhdyBpbi4KKyAgICAvLyBXZSBzaG91bGQgaW5zdGVhZCByZWFkIGluZGl2
aWR1YWwgZnJhbWVzIGZyb20gdGhlIHN0cmVhbSwgYW5kIHBhaW50IHRoZW0gaW50byB0aGUgZ3Jh
cGhpY3MgY29udGV4dC4KKyAgICAvLyBCdXQgZm9yIG5vdyB3ZSBqdXN0IHJlc2l6ZSB0aGUgd2lu
ZG93IHRvIHRoZSBjb3JyZWN0IHNpemUgaGVyZS4KKworICAgIGlmIChtX2h3bmRWaWRlbykKKyAg
ICAgICAgOjpNb3ZlV2luZG93KG1faHduZFZpZGVvLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgRkFMU0UpOworfQorCitib29sIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3JlYXRlU2Vzc2lvbigpCit7CisgICAgSFJFU1VMVCBociA9
IE1GU3RhcnR1cChNRl9WRVJTSU9OLCBNRlNUQVJUVVBfRlVMTCk7CisgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhyID0gTUZDcmVhdGVNZWRpYVNlc3Np
b24obnVsbHB0ciwgJm1fbWVkaWFTZXNzaW9uKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gR2V0IG5leHQgZXZlbnQuCisgICAgQXN5bmNDYWxs
YmFjayogY2FsbGJhY2sgPSBuZXcgQXN5bmNDYWxsYmFjayh0aGlzLCB0cnVlKTsKKyAgICBtX21l
ZGlhU2Vzc2lvbi0+QmVnaW5HZXRFdmVudChjYWxsYmFjaywgbnVsbHB0cik7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmVu
ZFNlc3Npb24oKQoreworICAgIGlmIChtX21lZGlhU2Vzc2lvbikgeworICAgICAgICBtX21lZGlh
U2Vzc2lvbi0+U2h1dGRvd24oKTsKKyAgICAgICAgbV9tZWRpYVNlc3Npb24tPlJlbGVhc2UoKTsK
KyAgICB9CisKKyAgICBIUkVTVUxUIGhyID0gTUZTaHV0ZG93bigpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzdGFydENy
ZWF0ZU1lZGlhU291cmNlKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIEhSRVNVTFQgaHIgPSBN
RkNyZWF0ZVNvdXJjZVJlc29sdmVyKCZtX3NvdXJjZVJlc29sdmVyKTsKKyAgICBpZiAoIVNVQ0NF
RURFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENPTVB0cjxJVW5rbm93bj4g
Y2FuY2VsQ29va2llOworICAgIFZlY3RvcjxVQ2hhcj4gdXJsU291cmNlID0gdXJsLmNoYXJhY3Rl
cnNXaXRoTnVsbFRlcm1pbmF0aW9uKCk7CisKKyAgICBBc3luY0NhbGxiYWNrKiBjYWxsYmFjayA9
IG5ldyBBc3luY0NhbGxiYWNrKHRoaXMsIGZhbHNlKTsKKworICAgIGhyID0gbV9zb3VyY2VSZXNv
bHZlci0+QmVnaW5DcmVhdGVPYmplY3RGcm9tVVJMKAorICAgICAgICB1cmxTb3VyY2UuZGF0YSgp
LAorICAgICAgICBNRl9SRVNPTFVUSU9OX01FRElBU09VUkNFLAorICAgICAgICBudWxscHRyLAor
ICAgICAgICAmY2FuY2VsQ29va2llLAorICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgbnVsbHB0
cgorICAgICAgICApOworCisgICAgcmV0dXJuIFNVQ0NFRURFRChocik7Cit9CisKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjplbmRDcmVhdGVkTWVkaWFTb3VyY2UoSU1G
QXN5bmNSZXN1bHQqIGFzeW5jUmVzdWx0KQoreworICAgIE1GX09CSkVDVF9UWVBFIG9iamVjdFR5
cGU7CisgICAgQ09NUHRyPElVbmtub3duPiBzb3VyY2U7CisKKyAgICBIUkVTVUxUIGhyID0gbV9z
b3VyY2VSZXNvbHZlci0+RW5kQ3JlYXRlT2JqZWN0RnJvbVVSTChhc3luY1Jlc3VsdCwgJm9iamVj
dFR5cGUsICZzb3VyY2UpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBociA9IHNvdXJjZS0+UXVlcnlJbnRlcmZhY2UoSUlEX1BQVl9BUkdTKCZtX21l
ZGlhU291cmNlKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGhyID0gYXN5bmNSZXN1bHQtPkdldFN0YXR1cygpOworICAgIG1fbG9hZGluZ1Byb2dy
ZXNzID0gU1VDQ0VFREVEKGhyKTsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAg
ICAgICAgb25DcmVhdGVkTWVkaWFTb3VyY2UoKTsKKyAgICB9KTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5kR2V0RXZl
bnQoSU1GQXN5bmNSZXN1bHQqIGFzeW5jUmVzdWx0KQoreworICAgIENPTVB0cjxJTUZNZWRpYUV2
ZW50PiBldmVudDsKKworICAgIC8vIEdldCB0aGUgZXZlbnQgZnJvbSB0aGUgZXZlbnQgcXVldWUu
CisgICAgSFJFU1VMVCBociA9IG1fbWVkaWFTZXNzaW9uLT5FbmRHZXRFdmVudChhc3luY1Jlc3Vs
dCwgJmV2ZW50KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gR2V0IHRoZSBldmVudCB0eXBlLgorICAgIE1lZGlhRXZlbnRUeXBlIG1lZGlhRXZl
bnRUeXBlOworICAgIGhyID0gZXZlbnQtPkdldFR5cGUoJm1lZGlhRXZlbnRUeXBlKTsKKyAgICBp
ZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtZWRp
YUV2ZW50VHlwZSkgeworICAgIGNhc2UgTUVTZXNzaW9uVG9wb2xvZ3lTZXQ6CisgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAgICAgICAgICAgIG9uVG9wb2xvZ3lTZXQoKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNRVNlc3Npb25DbG9zZWQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChtZWRpYUV2ZW50VHlwZSAhPSBNRVNlc3Np
b25DbG9zZWQpIHsKKyAgICAgICAgLy8gRm9yIGFsbCBvdGhlciBldmVudHMsIGFzayB0aGUgbWVk
aWEgc2Vzc2lvbiBmb3IgdGhlCisgICAgICAgIC8vIG5leHQgZXZlbnQgaW4gdGhlIHF1ZXVlLgor
ICAgICAgICBBc3luY0NhbGxiYWNrKiBjYWxsYmFjayA9IG5ldyBBc3luY0NhbGxiYWNrKHRoaXMs
IHRydWUpOworCisgICAgICAgIGhyID0gbV9tZWRpYVNlc3Npb24tPkJlZ2luR2V0RXZlbnQoY2Fs
bGJhY2ssIG51bGxwdHIpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZVRvcG9sb2d5RnJvbVNvdXJjZSgpCit7
CisgICAgLy8gVE9ETzogY2xlYW51cCBvbiBmYWlsdXJlCisgICAgRFdPUkQgc291cmNlU3RyZWFt
cyA9IDA7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgdG9wb2xvZ3kuCisgICAgSFJFU1VMVCBociA9
IE1GQ3JlYXRlVG9wb2xvZ3koJm1fdG9wb2xvZ3kpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgdGhlIHByZXNlbnRhdGlvbiBkZXNj
cmlwdG9yIGZvciB0aGUgbWVkaWEgc291cmNlLgorICAgIGhyID0gbV9tZWRpYVNvdXJjZS0+Q3Jl
YXRlUHJlc2VudGF0aW9uRGVzY3JpcHRvcigmbV9zb3VyY2VQRCk7CisgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIHN0
cmVhbXMgaW4gdGhlIG1lZGlhIHNvdXJjZS4KKyAgICBociA9IG1fc291cmNlUEQtPkdldFN0cmVh
bURlc2NyaXB0b3JDb3VudCgmc291cmNlU3RyZWFtcyk7CisgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZvciBlYWNoIHN0cmVhbSwgY3JlYXRlIHRo
ZSB0b3BvbG9neSBub2RlcyBhbmQgYWRkIHRoZW0gdG8gdGhlIHRvcG9sb2d5LgorICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc291cmNlU3RyZWFtczsgaSsrKSB7CisgICAgICAgIGJvb2wgb2sgPSBh
ZGRCcmFuY2hUb1BhcnRpYWxUb3BvbG9neShpKTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmFkZEJyYW5jaFRvUGFydGlhbFRvcG9s
b2d5KGludCBzdHJlYW0pCit7CisgICAgQ09NUHRyPElNRlN0cmVhbURlc2NyaXB0b3I+IHNvdXJj
ZVNEOworICAgIENPTVB0cjxJTUZUb3BvbG9neU5vZGU+IHNvdXJjZU5vZGU7CisgICAgQ09NUHRy
PElNRlRvcG9sb2d5Tm9kZT4gb3V0cHV0Tm9kZTsKKyAgICBCT09MIHNlbGVjdGVkID0gRkFMU0U7
CisKKyAgICAvLyBHZXQgdGhlIHN0cmVhbSBkZXNjcmlwdG9yIGZvciB0aGlzIHN0cmVhbS4KKyAg
ICBIUkVTVUxUIGhyID0gbV9zb3VyY2VQRC0+R2V0U3RyZWFtRGVzY3JpcHRvckJ5SW5kZXgoc3Ry
ZWFtLCAmc2VsZWN0ZWQsICZzb3VyY2VTRCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIENyZWF0ZSB0aGUgdG9wb2xvZ3kgYnJhbmNoIG9ubHkg
aWYgdGhlIHN0cmVhbSBpcyBzZWxlY3RlZC4KKyAgICAvLyBPdGhlcndpc2UsIGRvIG5vdGhpbmcu
CisgICAgaWYgKHNlbGVjdGVkKSB7CisgICAgICAgIC8vIENyZWF0ZSBhIHNvdXJjZSBub2RlIGZv
ciB0aGlzIHN0cmVhbS4KKyAgICAgICAgYm9vbCBvayA9IGNyZWF0ZVNvdXJjZVN0cmVhbU5vZGUo
c291cmNlU0QsIHNvdXJjZU5vZGUpOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIC8vIENyZWF0ZSB0aGUgb3V0cHV0IG5vZGUgZm9yIHRoZSBy
ZW5kZXJlci4KKyAgICAgICAgb2sgPSBjcmVhdGVPdXRwdXROb2RlKHNvdXJjZVNELCBvdXRwdXRO
b2RlKTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAvLyBBZGQgYm90aCBub2RlcyB0byB0aGUgdG9wb2xvZ3kuCisgICAgICAgIGhyID0gbV90
b3BvbG9neS0+QWRkTm9kZShzb3VyY2VOb2RlLmdldCgpKTsKKyAgICAgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaHIgPSBtX3RvcG9sb2d5
LT5BZGROb2RlKG91dHB1dE5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBDb25uZWN0IHRoZSBzb3VyY2Ug
bm9kZSB0byB0aGUgb3V0cHV0IG5vZGUuCisgICAgICAgIGhyID0gc291cmNlTm9kZS0+Q29ubmVj
dE91dHB1dCgwLCBvdXRwdXROb2RlLmdldCgpLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworTFJFU1VMVCBDQUxMQkFDSyBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OlZpZGVvVmlld1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFy
YW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVz
c2FnZSwgd1BhcmFtLCBsUGFyYW0pOworfQorCitMUENXU1RSIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6cmVnaXN0ZXJWaWRlb1dpbmRvd0NsYXNzKCkKK3sKKyAgICBjb25zdCBM
UENXU1RSIGtWaWRlb1dpbmRvd0NsYXNzTmFtZSA9IEwiV2ViVmlkZW9XaW5kb3dDbGFzcyI7CisK
KyAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7CisgICAg
aWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCisgICAgICAgIHJldHVybiBrVmlkZW9XaW5k
b3dDbGFzc05hbWU7CisKKyAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKKwor
ICAgIFdORENMQVNTRVggd2NleDsKKworICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNT
RVgpOworCisgICAgd2NleC5zdHlsZSA9IENTX0RCTENMS1M7CisgICAgd2NleC5scGZuV25kUHJv
YyA9IFZpZGVvVmlld1duZFByb2M7CisgICAgd2NleC5jYkNsc0V4dHJhID0gMDsKKyAgICB3Y2V4
LmNiV25kRXh0cmEgPSAwOworICAgIHdjZXguaEluc3RhbmNlID0gMDsKKyAgICB3Y2V4LmhJY29u
ID0gMDsKKyAgICB3Y2V4LmhDdXJzb3IgPSA6OkxvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAg
ICB3Y2V4LmhickJhY2tncm91bmQgPSAwOworICAgIHdjZXgubHBzek1lbnVOYW1lID0gMDsKKyAg
ICB3Y2V4Lmxwc3pDbGFzc05hbWUgPSBrVmlkZW9XaW5kb3dDbGFzc05hbWU7CisgICAgd2NleC5o
SWNvblNtID0gMDsKKworICAgIGlmIChSZWdpc3RlckNsYXNzRXgoJndjZXgpKQorICAgICAgICBy
ZXR1cm4ga1ZpZGVvV2luZG93Q2xhc3NOYW1lOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVWaWRlb1dpbmRvdygpCit7
CisgICAgSFdORCBoV25kUGFyZW50ID0gMDsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBudWxscHRy
OworICAgIGlmIChtX3BsYXllciAmJiBtX3BsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSAm
JiBtX3BsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+ZG9jdW1lbnQoKSkKKyAgICAgICAg
dmlldyA9IG1fcGxheWVyLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5kb2N1bWVudCgpLT52aWV3
KCk7CisgICAgaWYgKHZpZXcgJiYgdmlldy0+aG9zdFdpbmRvdygpKQorICAgICAgICBoV25kUGFy
ZW50ID0gdmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKworICAgIG1f
aHduZFZpZGVvID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9BQ1RJVkFURSwgcmVnaXN0ZXJWaWRl
b1dpbmRvd0NsYXNzKCksIDAsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0NMSVBTSUJMSU5H
UyB8IFdTX0NMSVBDSElMRFJFTiwKKyAgICAgICAgMCwgMCwgMCwgMCwgaFduZFBhcmVudCwgMCwg
MCwgMCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpkZXN0
cm95VmlkZW9XaW5kb3coKQoreworICAgIGlmIChtX2h3bmRWaWRlbykKKyAgICAgICAgRGVzdHJv
eVdpbmRvdyhtX2h3bmRWaWRlbyk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpjcmVhdGVPdXRwdXROb2RlKENPTVB0cjxJTUZTdHJlYW1EZXNjcmlwdG9yPiBz
b3VyY2VTRCwgQ09NUHRyPElNRlRvcG9sb2d5Tm9kZT4mIG5vZGUpCit7CisgICAgQ09NUHRyPElN
Rk1lZGlhVHlwZUhhbmRsZXI+IGhhbmRsZXI7CisgICAgQ09NUHRyPElNRkFjdGl2YXRlPiByZW5k
ZXJlckFjdGl2YXRlOworCisgICAgR1VJRCBndWlkTWFqb3JUeXBlID0gR1VJRF9OVUxMOworCisg
ICAgLy8gR2V0IHRoZSBzdHJlYW0gSUQuCisgICAgRFdPUkQgc3RyZWFtSUQgPSAwOworICAgIHNv
dXJjZVNELT5HZXRTdHJlYW1JZGVudGlmaWVyKCZzdHJlYW1JRCk7IC8vIEp1c3QgZm9yIGRlYnVn
Z2luZywgaWdub3JlIGFueSBmYWlsdXJlcy4KKworICAgIC8vIEdldCB0aGUgbWVkaWEgdHlwZSBo
YW5kbGVyIGZvciB0aGUgc3RyZWFtLgorICAgIEhSRVNVTFQgaHIgPSBzb3VyY2VTRC0+R2V0TWVk
aWFUeXBlSGFuZGxlcigmaGFuZGxlcik7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIEdldCB0aGUgbWFqb3IgbWVkaWEgdHlwZS4KKyAgICBociA9
IGhhbmRsZXItPkdldE1ham9yVHlwZSgmZ3VpZE1ham9yVHlwZSk7CisgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhIGRvd25zdHJlYW0g
bm9kZS4KKyAgICBociA9IE1GQ3JlYXRlVG9wb2xvZ3lOb2RlKE1GX1RPUE9MT0dZX09VVFBVVF9O
T0RFLCAmbm9kZSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIENyZWF0ZSBhbiBJTUZBY3RpdmF0ZSBvYmplY3QgZm9yIHRoZSByZW5kZXJlciwg
YmFzZWQgb24gdGhlIG1lZGlhIHR5cGUuCisgICAgaWYgKE1GTWVkaWFUeXBlX0F1ZGlvID09IGd1
aWRNYWpvclR5cGUpIHsKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBhdWRpbyByZW5kZXJlci4KKyAg
ICAgICAgaHIgPSBNRkNyZWF0ZUF1ZGlvUmVuZGVyZXJBY3RpdmF0ZSgmcmVuZGVyZXJBY3RpdmF0
ZSk7CisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgbV9oYXNBdWRpbyA9
IHRydWU7CisgICAgfSBlbHNlIGlmIChNRk1lZGlhVHlwZV9WaWRlbyA9PSBndWlkTWFqb3JUeXBl
KSB7CisgICAgICAgIC8vIENyZWF0ZSB0aGUgdmlkZW8gcmVuZGVyZXIuCisgICAgICAgIGhyID0g
TUZDcmVhdGVWaWRlb1JlbmRlcmVyQWN0aXZhdGUobV9od25kVmlkZW8sICZyZW5kZXJlckFjdGl2
YXRlKTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICBtX2hhc1ZpZGVv
ID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgaHIgPSBFX0ZBSUw7CisKKyAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU2V0IHRoZSBJQWN0aXZh
dGUgb2JqZWN0IG9uIHRoZSBvdXRwdXQgbm9kZS4KKyAgICBociA9IG5vZGUtPlNldE9iamVjdChy
ZW5kZXJlckFjdGl2YXRlLmdldCgpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVTb3VyY2VTdHJlYW1Ob2RlKENPTVB0cjxJTUZTdHJl
YW1EZXNjcmlwdG9yPiBzb3VyY2VTRCwgQ09NUHRyPElNRlRvcG9sb2d5Tm9kZT4mIG5vZGUpCit7
CisgICAgaWYgKCFtX21lZGlhU291cmNlIHx8ICFtX3NvdXJjZVBEIHx8ICFzb3VyY2VTRCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3JlYXRlIHRoZSBzb3VyY2Utc3RyZWFtIG5v
ZGUuCisgICAgSFJFU1VMVCBociA9IE1GQ3JlYXRlVG9wb2xvZ3lOb2RlKE1GX1RPUE9MT0dZX1NP
VVJDRVNUUkVBTV9OT0RFLCAmbm9kZSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFNldCBhdHRyaWJ1dGU6IFBvaW50ZXIgdG8gdGhlIG1lZGlh
IHNvdXJjZS4KKyAgICBociA9IG5vZGUtPlNldFVua25vd24oTUZfVE9QT05PREVfU09VUkNFLCBt
X21lZGlhU291cmNlLmdldCgpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gU2V0IGF0dHJpYnV0ZTogUG9pbnRlciB0byB0aGUgcHJlc2VudGF0
aW9uIGRlc2NyaXB0b3IuCisgICAgaHIgPSBub2RlLT5TZXRVbmtub3duKE1GX1RPUE9OT0RFX1BS
RVNFTlRBVElPTl9ERVNDUklQVE9SLCBtX3NvdXJjZVBELmdldCgpKTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU2V0IGF0dHJpYnV0ZTogUG9p
bnRlciB0byB0aGUgc3RyZWFtIGRlc2NyaXB0b3IuCisgICAgaHIgPSBub2RlLT5TZXRVbmtub3du
KE1GX1RPUE9OT0RFX1NUUkVBTV9ERVNDUklQVE9SLCBzb3VyY2VTRC5nZXQoKSk7CisgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6b25DcmVhdGVkTWVk
aWFTb3VyY2UoKQoreworICAgIGlmICghY3JlYXRlVG9wb2xvZ3lGcm9tU291cmNlKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFNldCB0aGUgdG9wb2xvZ3kgb24gdGhlIG1lZGlhIHNlc3Np
b24uCisgICAgSFJFU1VMVCBociA9IG1fbWVkaWFTZXNzaW9uLT5TZXRUb3BvbG9neSgwLCBtX3Rv
cG9sb2d5LmdldCgpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6b25Ub3BvbG9neVNldCgp
Cit7CisgICAgSFJFU1VMVCBociA9IE1GR2V0U2VydmljZShtX21lZGlhU2Vzc2lvbi5nZXQoKSwg
TVJfVklERU9fUkVOREVSX1NFUlZJQ0UsIElJRF9QUFZfQVJHUygmbV92aWRlb0Rpc3BsYXkpKTsK
KyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybjsKKworICAgIFJFQ1QgcmMg
PSB7IDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkgfTsKKyAgICBtX3ZpZGVv
RGlzcGxheS0+U2V0VmlkZW9Qb3NpdGlvbihudWxscHRyLCAmcmMpOworCisgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhOworICAgIG1fcGxheWVyLT5yZWFkeVN0
YXRlQ2hhbmdlZCgpOworCisgICAgcGxheSgpOworICAgIG1fcGxheWVyLT5wbGF5YmFja1N0YXRl
Q2hhbmdlZCgpOworfQorCitNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5j
Q2FsbGJhY2s6OkFzeW5jQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
KiBtZWRpYVBsYXllciwgYm9vbCBldmVudCkKKyAgICA6IG1fcmVmQ291bnQoMCkKKyAgICAsIG1f
bWVkaWFQbGF5ZXIobWVkaWFQbGF5ZXIpCisgICAgLCBtX2V2ZW50KGV2ZW50KQoreworfQorCitN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6On5Bc3luY0Nh
bGxiYWNrKCkKK3sKK30KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJ
RCByaWlkLCBfX1JQQ19fZGVyZWZfb3V0IHZvaWQgX19SUENfRkFSICpfX1JQQ19GQVIgKnBwdk9i
amVjdCkKK3sKKyAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lNRkFzeW5jQ2FsbGJhY2sp
KQorICAgICAgICAqcHB2T2JqZWN0ID0gdGhpczsKKyAgICBlbHNlIHsKKyAgICAgICAgKnBwdk9i
amVjdCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOworICAgIH0KKyAg
ICBBZGRSZWYoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworVUxPTkcgU1RETUVUSE9EQ0FMTFRZ
UEUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpBZGRS
ZWYodm9pZCkKK3sKKyAgICBtX3JlZkNvdW50Kys7CisgICAgcmV0dXJuIG1fcmVmQ291bnQ7Cit9
CisKK1VMT05HIFNURE1FVEhPRENBTExUWVBFIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6QXN5bmNDYWxsYmFjazo6UmVsZWFzZSh2b2lkKQoreworICAgIG1fcmVmQ291bnQtLTsK
KyAgICBpbnQgcmVmQ291bnQgPSBtX3JlZkNvdW50OworICAgIGlmICghcmVmQ291bnQpCisgICAg
ICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiByZWZDb3VudDsKK30KKworSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2Fs
bGJhY2s6OkdldFBhcmFtZXRlcnMoX19SUENfX291dCBEV09SRCAqcGR3RmxhZ3MsIF9fUlBDX19v
dXQgRFdPUkQgKnBkd1F1ZXVlKQoreworICAgIC8vIFJldHVybmluZyBFX05PVElNUEwgZ2l2ZXMg
ZGVmYXVsdCB2YWx1ZXMuCisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2Fs
bGJhY2s6Okludm9rZShfX1JQQ19faW5fb3B0IElNRkFzeW5jUmVzdWx0ICpwQXN5bmNSZXN1bHQp
Cit7CisgICAgaWYgKG1fZXZlbnQpCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPmVuZEdldEV2ZW50
KHBBc3luY1Jlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBtX21lZGlhUGxheWVyLT5lbmRDcmVh
dGVkTWVkaWFTb3VyY2UocEFzeW5jUmVzdWx0KTsKKworICAgIHJldHVybiBTX09LOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5oCShy
ZXZpc2lvbiAxNzgyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDEzICsyNCwxOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSAiQ09NUHRyLmgi
CiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAKKyNpbmNsdWRlIDxNZmFwaS5oPgor
I2luY2x1ZGUgPE1maWRsLmg+CisjaW5jbHVkZSA8ZXZyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uIDogcHVibGljIE1l
ZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CiBwdWJsaWM6CiAgICAgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uKE1lZGlhUGxheWVyKik7CisgICAgfk1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbigpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUo
TWVkaWFFbmdpbmVSZWdpc3RyYXIpOwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFQbGF5
ZXJQcml2YXRlSW50ZXJmYWNlPiBjcmVhdGUoTWVkaWFQbGF5ZXIqKTsKQEAgLTY3LDggKzczLDU5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYpOwogCiBwcml2YXRlOgotCiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwor
ICAgIEludFNpemUgbV9zaXplOworICAgIGJvb2wgbV92aXNpYmxlOworICAgIGJvb2wgbV9sb2Fk
aW5nUHJvZ3Jlc3M7CisgICAgYm9vbCBtX3BhdXNlZDsKKyAgICBib29sIG1faGFzQXVkaW87Cisg
ICAgYm9vbCBtX2hhc1ZpZGVvOworICAgIEhXTkQgbV9od25kVmlkZW87CisgICAgTWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworCisgICAgQ09NUHRyPElNRk1lZGlhU2Vzc2lv
bj4gbV9tZWRpYVNlc3Npb247CisgICAgQ09NUHRyPElNRlNvdXJjZVJlc29sdmVyPiBtX3NvdXJj
ZVJlc29sdmVyOworICAgIENPTVB0cjxJTUZNZWRpYVNvdXJjZT4gbV9tZWRpYVNvdXJjZTsKKyAg
ICBDT01QdHI8SU1GVG9wb2xvZ3k+IG1fdG9wb2xvZ3k7CisgICAgQ09NUHRyPElNRlByZXNlbnRh
dGlvbkRlc2NyaXB0b3I+IG1fc291cmNlUEQ7CisgICAgQ09NUHRyPElNRlZpZGVvRGlzcGxheUNv
bnRyb2w+IG1fdmlkZW9EaXNwbGF5OworCisgICAgYm9vbCBjcmVhdGVTZXNzaW9uKCk7CisgICAg
Ym9vbCBlbmRTZXNzaW9uKCk7CisgICAgYm9vbCBzdGFydENyZWF0ZU1lZGlhU291cmNlKGNvbnN0
IFN0cmluZyYgdXJsKTsKKyAgICBib29sIGVuZENyZWF0ZWRNZWRpYVNvdXJjZShJTUZBc3luY1Jl
c3VsdCopOworICAgIGJvb2wgZW5kR2V0RXZlbnQoSU1GQXN5bmNSZXN1bHQqKTsKKyAgICBib29s
IGNyZWF0ZVRvcG9sb2d5RnJvbVNvdXJjZSgpOworICAgIGJvb2wgYWRkQnJhbmNoVG9QYXJ0aWFs
VG9wb2xvZ3koaW50IHN0cmVhbSk7CisgICAgYm9vbCBjcmVhdGVPdXRwdXROb2RlKENPTVB0cjxJ
TUZTdHJlYW1EZXNjcmlwdG9yPiBzb3VyY2VTRCwgQ09NUHRyPElNRlRvcG9sb2d5Tm9kZT4mKTsK
KyAgICBib29sIGNyZWF0ZVNvdXJjZVN0cmVhbU5vZGUoQ09NUHRyPElNRlN0cmVhbURlc2NyaXB0
b3I+IHNvdXJjZVNELCBDT01QdHI8SU1GVG9wb2xvZ3lOb2RlPiYpOworCisgICAgdm9pZCBvbkNy
ZWF0ZWRNZWRpYVNvdXJjZSgpOworICAgIHZvaWQgb25Ub3BvbG9neVNldCgpOworCisgICAgTFBD
V1NUUiByZWdpc3RlclZpZGVvV2luZG93Q2xhc3MoKTsKKyAgICB2b2lkIGNyZWF0ZVZpZGVvV2lu
ZG93KCk7CisgICAgdm9pZCBkZXN0cm95VmlkZW9XaW5kb3coKTsKKworICAgIHN0YXRpYyBMUkVT
VUxUIENBTExCQUNLIFZpZGVvVmlld1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQ
QVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOworCisgICAgY2xhc3MgQXN5bmNDYWxsYmFjayA6
IHB1YmxpYyBJTUZBc3luY0NhbGxiYWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFzeW5jQ2Fs
bGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uKiwgYm9vbCBldmVudCk7Cisg
ICAgICAgIH5Bc3luY0NhbGxiYWNrKCk7CisKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCBfX1JQQ19fZGVyZWZfb3V0
IHZvaWQgX19SUENfRkFSICpfX1JQQ19GQVIgKnBwdk9iamVjdCk7CisgICAgICAgIHZpcnR1YWwg
VUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZvaWQpOworICAgICAgICB2aXJ0dWFsIFVM
T05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uodm9pZCk7CisKKyAgICAgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFBhcmFtZXRlcnMoX19SUENfX291dCBEV09SRCAq
cGR3RmxhZ3MsIF9fUlBDX19vdXQgRFdPUkQgKnBkd1F1ZXVlKTsKKyAgICAgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEludm9rZShfX1JQQ19faW5fb3B0IElNRkFzeW5jUmVz
dWx0ICpwQXN5bmNSZXN1bHQpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1fcmVmQ291
bnQ7CisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbiogbV9tZWRpYVBs
YXllcjsKKyAgICAgICAgYm9vbCBtX2V2ZW50OworICAgIH07CiAKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244540</attachid>
            <date>2015-01-13 13:49:49 -0800</date>
            <delta_ts>2015-01-14 11:19:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140337-20150113224945.patch</filename>
            <type>text/plain</type>
            <size>24426</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODM3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE1LTAxLTEzICBwZWF2b0Bv
dXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgorCisgICAgICAgIFtXaW5DYWlyb11bVmlk
ZW9dIFdpbmRvd3MgTWVkaWEgRm91bmRhdGlvbiBpbXBsZW1lbnRhdGlvbiBpcyBub3QgY29tcGxl
dGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQw
MzM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhaW1zIHRvIGNvbXBsZXRlIHNvbWUgb2YgdGhlIG1ldGhvZHMgd2hpY2ggYXJlIG5v
dCBpbXBsZW1lbnRlZC4KKyAgICAgICAgQ3VycmVudGx5LCBvbmx5IE1QNCBpcyBzdXBwb3J0ZWQu
CisgICAgICAgIFZpZGVvIGlzIHJlbmRlcmVkIGluIGEgY2hpbGQgd2luZG93IG9mIHRoZSBtYWlu
IHdpbmRvdy4KKyAgICAgICAgV2Ugc2hvdWxkIGV2ZW50dWFsbHkgcmVuZGVyIHRoZSB2aWRlbyBk
aXJlY3RseSBpbiB0aGUgbWFpbiB3aW5kb3csCisgICAgICAgIGJ5IHJlYWRpbmcgYW5kIHBhaW50
aW5nIGluZGl2aWR1YWwgdmlkZW8gZnJhbWVzIGZyb20gdGhlIHN0cmVhbS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpsb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6bmF0
dXJhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246Omhhc0F1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBhdXNlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnJlYWR5U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpkaWRMb2Fk
aW5nUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5kU2Vzc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnN0YXJ0Q3JlYXRl
TWVkaWFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjplbmRDcmVhdGVkTWVkaWFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjplbmRHZXRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZVRvcG9sb2d5
RnJvbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OmFkZEJyYW5jaFRvUGFydGlhbFRvcG9sb2d5KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9WaWV3V25kUHJvYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnJlZ2lz
dGVyVmlkZW9XaW5kb3dDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZVZpZGVvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZGVzdHJveVZpZGVvV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3Jl
YXRlT3V0cHV0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OmNyZWF0ZVNvdXJjZVN0cmVhbU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpvbkNyZWF0ZWRNZWRpYVNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Om9u
VG9wb2xvZ3lTZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpBc3luY0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFjazo6fkFz
eW5jQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6OkFk
ZFJlZik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkFzeW5jQ2FsbGJhY2s6OlJlbGVhc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpHZXRQYXJhbWV0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5
bmNDYWxsYmFjazo6SW52b2tlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmg6CisKIDIwMTUtMDEtMTMgIEpvc2VwaCBQ
ZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBS
ZW1vdmUgdW51c2VkIFJlc2l6ZUltYWdlIGFuZCBEZWNvZGVJbWFnZURhdGEgdGltZWxpbmUgZXZl
bnRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
LmNwcAkocmV2aXNpb24gMTc4MjM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDE4ICsyNyw0MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5oIgogCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKIAogI2lmIFVTRShNRURJQV9GT1VOREFUSU9OKQogCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAotLy8gVE9ETzogSW1wbGVtZW50IHZp
ZGVvIGZ1bmN0aW9uYWxpdHkgdXNpbmcgTWVkaWEgRm91bmRhdGlvbgorbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbihNZWRpYVBsYXllciogcGxheWVyKSAKICAgICA6IG1fcGxheWVy
KHBsYXllcikKKyAgICAsIG1fdmlzaWJsZShmYWxzZSkKKyAgICAsIG1fbG9hZGluZ1Byb2dyZXNz
KGZhbHNlKQorICAgICwgbV9wYXVzZWQoZmFsc2UpCisgICAgLCBtX2hhc0F1ZGlvKGZhbHNlKQor
ICAgICwgbV9oYXNWaWRlbyhmYWxzZSkKKyAgICAsIG1faHduZFZpZGVvKDApCisgICAgLCBtX3Jl
YWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAgICwgbV9tZWRpYVNlc3Npb24o
bnVsbHB0cikKKyAgICAsIG1fc291cmNlUmVzb2x2ZXIobnVsbHB0cikKKyAgICAsIG1fbWVkaWFT
b3VyY2UobnVsbHB0cikKKyAgICAsIG1fdG9wb2xvZ3kobnVsbHB0cikKKyAgICAsIG1fc291cmNl
UEQobnVsbHB0cikKKyAgICAsIG1fdmlkZW9EaXNwbGF5KG51bGxwdHIpCit7CisgICAgY3JlYXRl
U2Vzc2lvbigpOworICAgIGNyZWF0ZVZpZGVvV2luZG93KCk7Cit9CisKK01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6fk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbigp
CiB7CisgICAgZGVzdHJveVZpZGVvV2luZG93KCk7CisgICAgZW5kU2Vzc2lvbigpOwogfQogCiBQ
YXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKQEAgLTYwLDE5ICs4
NCwyMyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAKIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNo
U2V0PFN0cmluZz4mIHR5cGVzKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgdHlwZXMg
PSBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICB0eXBlcy5hZGQoU3RyaW5nKCJ2aWRlby9tcDQiKSk7
CiB9CiAKIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChwYXJhbWV0
ZXJzLnR5cGUuaXNOdWxsKCkgfHwgcGFyYW1ldGVycy50eXBlLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKKworICAgIGlmIChwYXJhbWV0ZXJz
LnR5cGUgPT0gInZpZGVvL21wNCIpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNTdXBw
b3J0ZWQ7CisKICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6bG9hZChjb25zdCBTdHJpbmcm
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmxvYWQoY29uc3QgU3Ry
aW5nJiB1cmwpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGFydENyZWF0ZU1lZGlh
U291cmNlKHVybCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpjYW5jZWxMb2FkKCkKQEAgLTgyLDM1ICsxMTAsNDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6cGxheSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAoIW1fbWVkaWFT
ZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBQUk9QVkFSSUFOVCB2YXJTdGFydDsKKyAg
ICBQcm9wVmFyaWFudEluaXQoJnZhclN0YXJ0KTsKKyAgICB2YXJTdGFydC52dCA9IFZUX0VNUFRZ
OworCisgICAgSFJFU1VMVCBociA9IG1fbWVkaWFTZXNzaW9uLT5TdGFydChudWxscHRyLCAmdmFy
U3RhcnQpOworCisgICAgUHJvcFZhcmlhbnRDbGVhcigmdmFyU3RhcnQpOworCisgICAgbV9wYXVz
ZWQgPSBmYWxzZTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
OnBhdXNlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICghbV9tZWRpYVNlc3Np
b24pCisgICAgICAgIHJldHVybjsKKworICAgIG1fbWVkaWFTZXNzaW9uLT5QYXVzZSgpOworCisg
ICAgbV9wYXVzZWQgPSB0cnVlOwogfQogCiBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6bmF0dXJhbFNpemUoKSBjb25zdCAKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBJbnRTaXplKDAsIDApOworICAgIHJldHVybiBtX3NpemU7CiB9CiAKIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpoYXNWaWRlbygpIGNvbnN0CiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1f
aGFzVmlkZW87CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpo
YXNBdWRpbygpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIG1faGFzQXVkaW87CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpzZXRWaXNpYmxlKGJvb2wpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBtX3Zpc2libGUgPSB2aXNpYmxlOwogfQogCiBib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2Vla2luZygpIGNvbnN0CkBAIC0xMjEsOCArMTYy
LDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OgogCiBib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cGF1c2VkKCkgY29uc3QKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9wYXVzZWQ7
CiB9CiAKIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpuZXR3b3JrU3RhdGUoKSBjb25zdApAQCAtMTMzLDggKzE3Myw3IEBAIE1lZGlh
UGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcmkKIAogTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpyZWFkeVN0YXRlKCkgY29u
c3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBNZWRpYVBsYXllcjo6SGF2
ZU5vdGhpbmc7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpi
dWZmZXJlZCgpIGNvbnN0CkBAIC0xNDUsMTMgKzE4NCwzMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGxh
dGZvcm1UaW1lUmFuZ2VzPiBNZWRpCiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2xvYWRpbmdQcm9ncmVzczsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnNldFNpemUoY29uc3Qg
SW50U2l6ZSYpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0U2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9z
aXplID0gc2l6ZTsKKworICAgIGlmICghbV92aWRlb0Rpc3BsYXkpCisgICAgICAgIHJldHVybjsK
KworICAgIExheW91dFNpemUgc2Nyb2xsT2Zmc2V0OworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0g
bnVsbHB0cjsKKyAgICBpZiAobV9wbGF5ZXIgJiYgbV9wbGF5ZXItPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCkgJiYgbV9wbGF5ZXItPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmRvY3VtZW50KCkpCisg
ICAgICAgIHZpZXcgPSBtX3BsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+ZG9jdW1lbnQo
KS0+dmlldygpOworICAgIGlmICh2aWV3KQorICAgICAgICBzY3JvbGxPZmZzZXQgPSB2aWV3LT5z
Y3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCk7CisKKyAgICBpbnQgeFBvcyA9IC1zY3JvbGxP
ZmZzZXQud2lkdGgoKS50b0ludCgpICsgbV9sYXN0UGFpbnRSZWN0LngoKTsKKyAgICBpbnQgeVBv
cyA9IC1zY3JvbGxPZmZzZXQuaGVpZ2h0KCkudG9JbnQoKSArIG1fbGFzdFBhaW50UmVjdC55KCk7
CisKKyAgICBpZiAobV9od25kVmlkZW8gJiYgIW1fbGFzdFBhaW50UmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIDo6TW92ZVdpbmRvdyhtX2h3bmRWaWRlbywgeFBvcywgeVBvcywgbV9zaXplLndpZHRo
KCksIG1fc2l6ZS5oZWlnaHQoKSwgRkFMU0UpOworCisgICAgUkVDVCByYyA9IHsgMCwgMCwgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSB9OworICAgIG1fdmlkZW9EaXNwbGF5LT5TZXRW
aWRlb1Bvc2l0aW9uKG51bGxwdHIsICZyYyk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCkBAIC0xNjAsMTAgKzIxOCw0MTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OgogICAgICAgICB8fCAhbV9wbGF5ZXItPnZpc2libGUoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgLy8gVE9ETzogUGFpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSB2
aWRlbyB0byB0aGUgY29udGV4dAorICAgIG1fbGFzdFBhaW50UmVjdCA9IHJlY3Q7CisKKyAgICAv
LyBXZSBjdXJyZW50bHkgbGV0IE1lZGlhIEZvdW5kYXRpb24gaGFuZGxlIHRoZSBkcmF3aW5nLCBi
eSBwcm92aWRpbmcgYSBoYW5kbGUgdG8gdGhlIHdpbmRvdyB0byBkcmF3IGluLgorICAgIC8vIFdl
IHNob3VsZCBpbnN0ZWFkIHJlYWQgaW5kaXZpZHVhbCBmcmFtZXMgZnJvbSB0aGUgc3RyZWFtLCBh
bmQgcGFpbnQgdGhlbSBpbnRvIHRoZSBncmFwaGljcyBjb250ZXh0IGhlcmUuCisKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6Y3JlYXRlU2Vzc2lvbigpCit7CisgICAgSFJFU1VMVCBociA9IE1GU3RhcnR1cChNRl9WRVJT
SU9OLCBNRlNUQVJUVVBfRlVMTCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGhyID0gTUZDcmVhdGVNZWRpYVNlc3Npb24obnVsbHB0ciwgJm1fbWVk
aWFTZXNzaW9uKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gR2V0IG5leHQgZXZlbnQuCisgICAgQXN5bmNDYWxsYmFjayogY2FsbGJhY2sgPSBu
ZXcgQXN5bmNDYWxsYmFjayh0aGlzLCB0cnVlKTsKKyAgICBtX21lZGlhU2Vzc2lvbi0+QmVnaW5H
ZXRFdmVudChjYWxsYmFjaywgbnVsbHB0cik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmVuZFNlc3Npb24oKQoreworICAg
IGlmIChtX21lZGlhU2Vzc2lvbikgeworICAgICAgICBtX21lZGlhU2Vzc2lvbi0+U2h1dGRvd24o
KTsKKyAgICAgICAgbV9tZWRpYVNlc3Npb24tPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBIUkVT
VUxUIGhyID0gTUZTaHV0ZG93bigpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzdGFydENyZWF0ZU1lZGlhU291cmNlKGNv
bnN0IFN0cmluZyYgdXJsKQoreworICAgIEhSRVNVTFQgaHIgPSBNRkNyZWF0ZVNvdXJjZVJlc29s
dmVyKCZtX3NvdXJjZVJlc29sdmVyKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIENPTVB0cjxJVW5rbm93bj4gY2FuY2VsQ29va2llOworICAg
IFZlY3RvcjxVQ2hhcj4gdXJsU291cmNlID0gdXJsLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCk7CisKKyAgICBBc3luY0NhbGxiYWNrKiBjYWxsYmFjayA9IG5ldyBBc3luY0NhbGxiYWNr
KHRoaXMsIGZhbHNlKTsKKworICAgIGhyID0gbV9zb3VyY2VSZXNvbHZlci0+QmVnaW5DcmVhdGVP
YmplY3RGcm9tVVJMKAorICAgICAgICB1cmxTb3VyY2UuZGF0YSgpLAorICAgICAgICBNRl9SRVNP
TFVUSU9OX01FRElBU09VUkNFLAorICAgICAgICBudWxscHRyLAorICAgICAgICAmY2FuY2VsQ29v
a2llLAorICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgbnVsbHB0cgorICAgICAgICApOworCisg
ICAgcmV0dXJuIFNVQ0NFRURFRChocik7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjplbmRDcmVhdGVkTWVkaWFTb3VyY2UoSU1GQXN5bmNSZXN1bHQqIGFzeW5j
UmVzdWx0KQoreworICAgIE1GX09CSkVDVF9UWVBFIG9iamVjdFR5cGU7CisgICAgQ09NUHRyPElV
bmtub3duPiBzb3VyY2U7CisKKyAgICBIUkVTVUxUIGhyID0gbV9zb3VyY2VSZXNvbHZlci0+RW5k
Q3JlYXRlT2JqZWN0RnJvbVVSTChhc3luY1Jlc3VsdCwgJm9iamVjdFR5cGUsICZzb3VyY2UpOwor
ICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBociA9IHNv
dXJjZS0+UXVlcnlJbnRlcmZhY2UoSUlEX1BQVl9BUkdTKCZtX21lZGlhU291cmNlKSk7CisgICAg
aWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhyID0gYXN5bmNS
ZXN1bHQtPkdldFN0YXR1cygpOworICAgIG1fbG9hZGluZ1Byb2dyZXNzID0gU1VDQ0VFREVEKGhy
KTsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAgICAgICAgb25DcmVhdGVkTWVk
aWFTb3VyY2UoKTsKKyAgICB9KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5kR2V0RXZlbnQoSU1GQXN5bmNSZXN1bHQq
IGFzeW5jUmVzdWx0KQoreworICAgIENPTVB0cjxJTUZNZWRpYUV2ZW50PiBldmVudDsKKworICAg
IC8vIEdldCB0aGUgZXZlbnQgZnJvbSB0aGUgZXZlbnQgcXVldWUuCisgICAgSFJFU1VMVCBociA9
IG1fbWVkaWFTZXNzaW9uLT5FbmRHZXRFdmVudChhc3luY1Jlc3VsdCwgJmV2ZW50KTsKKyAgICBp
ZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gR2V0IHRoZSBl
dmVudCB0eXBlLgorICAgIE1lZGlhRXZlbnRUeXBlIG1lZGlhRXZlbnRUeXBlOworICAgIGhyID0g
ZXZlbnQtPkdldFR5cGUoJm1lZGlhRXZlbnRUeXBlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtZWRpYUV2ZW50VHlwZSkgeworICAg
IGNhc2UgTUVTZXNzaW9uVG9wb2xvZ3lTZXQ6CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Ro
aXNdIHsKKyAgICAgICAgICAgIG9uVG9wb2xvZ3lTZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBNRVNlc3Npb25DbG9zZWQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGlmIChtZWRpYUV2ZW50VHlwZSAhPSBNRVNlc3Npb25DbG9zZWQpIHsKKyAgICAg
ICAgLy8gRm9yIGFsbCBvdGhlciBldmVudHMsIGFzayB0aGUgbWVkaWEgc2Vzc2lvbiBmb3IgdGhl
CisgICAgICAgIC8vIG5leHQgZXZlbnQgaW4gdGhlIHF1ZXVlLgorICAgICAgICBBc3luY0NhbGxi
YWNrKiBjYWxsYmFjayA9IG5ldyBBc3luY0NhbGxiYWNrKHRoaXMsIHRydWUpOworCisgICAgICAg
IGhyID0gbV9tZWRpYVNlc3Npb24tPkJlZ2luR2V0RXZlbnQoY2FsbGJhY2ssIG51bGxwdHIpOwor
ICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OmNyZWF0ZVRvcG9sb2d5RnJvbVNvdXJjZSgpCit7CisgICAgLy8gVE9ETzogY2xl
YW51cCBvbiBmYWlsdXJlCisgICAgRFdPUkQgc291cmNlU3RyZWFtcyA9IDA7CisKKyAgICAvLyBD
cmVhdGUgYSBuZXcgdG9wb2xvZ3kuCisgICAgSFJFU1VMVCBociA9IE1GQ3JlYXRlVG9wb2xvZ3ko
Jm1fdG9wb2xvZ3kpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBDcmVhdGUgdGhlIHByZXNlbnRhdGlvbiBkZXNjcmlwdG9yIGZvciB0aGUgbWVk
aWEgc291cmNlLgorICAgIGhyID0gbV9tZWRpYVNvdXJjZS0+Q3JlYXRlUHJlc2VudGF0aW9uRGVz
Y3JpcHRvcigmbV9zb3VyY2VQRCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIHN0cmVhbXMgaW4gdGhlIG1lZGlh
IHNvdXJjZS4KKyAgICBociA9IG1fc291cmNlUEQtPkdldFN0cmVhbURlc2NyaXB0b3JDb3VudCgm
c291cmNlU3RyZWFtcyk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIEZvciBlYWNoIHN0cmVhbSwgY3JlYXRlIHRoZSB0b3BvbG9neSBub2RlcyBh
bmQgYWRkIHRoZW0gdG8gdGhlIHRvcG9sb2d5LgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc291
cmNlU3RyZWFtczsgaSsrKSB7CisgICAgICAgIGJvb2wgb2sgPSBhZGRCcmFuY2hUb1BhcnRpYWxU
b3BvbG9neShpKTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246OmFkZEJyYW5jaFRvUGFydGlhbFRvcG9sb2d5KGludCBzdHJlYW0pCit7
CisgICAgQ09NUHRyPElNRlN0cmVhbURlc2NyaXB0b3I+IHNvdXJjZVNEOworICAgIENPTVB0cjxJ
TUZUb3BvbG9neU5vZGU+IHNvdXJjZU5vZGU7CisgICAgQ09NUHRyPElNRlRvcG9sb2d5Tm9kZT4g
b3V0cHV0Tm9kZTsKKyAgICBCT09MIHNlbGVjdGVkID0gRkFMU0U7CisKKyAgICAvLyBHZXQgdGhl
IHN0cmVhbSBkZXNjcmlwdG9yIGZvciB0aGlzIHN0cmVhbS4KKyAgICBIUkVTVUxUIGhyID0gbV9z
b3VyY2VQRC0+R2V0U3RyZWFtRGVzY3JpcHRvckJ5SW5kZXgoc3RyZWFtLCAmc2VsZWN0ZWQsICZz
b3VyY2VTRCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIENyZWF0ZSB0aGUgdG9wb2xvZ3kgYnJhbmNoIG9ubHkgaWYgdGhlIHN0cmVhbSBpcyBz
ZWxlY3RlZC4KKyAgICAvLyBPdGhlcndpc2UsIGRvIG5vdGhpbmcuCisgICAgaWYgKHNlbGVjdGVk
KSB7CisgICAgICAgIC8vIENyZWF0ZSBhIHNvdXJjZSBub2RlIGZvciB0aGlzIHN0cmVhbS4KKyAg
ICAgICAgYm9vbCBvayA9IGNyZWF0ZVNvdXJjZVN0cmVhbU5vZGUoc291cmNlU0QsIHNvdXJjZU5v
ZGUpOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIC8vIENyZWF0ZSB0aGUgb3V0cHV0IG5vZGUgZm9yIHRoZSByZW5kZXJlci4KKyAgICAgICAg
b2sgPSBjcmVhdGVPdXRwdXROb2RlKHNvdXJjZVNELCBvdXRwdXROb2RlKTsKKyAgICAgICAgaWYg
KCFvaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBBZGQgYm90aCBu
b2RlcyB0byB0aGUgdG9wb2xvZ3kuCisgICAgICAgIGhyID0gbV90b3BvbG9neS0+QWRkTm9kZShz
b3VyY2VOb2RlLmdldCgpKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaHIgPSBtX3RvcG9sb2d5LT5BZGROb2RlKG91dHB1dE5v
ZGUuZ2V0KCkpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAvLyBDb25uZWN0IHRoZSBzb3VyY2Ugbm9kZSB0byB0aGUgb3V0cHV0
IG5vZGUuCisgICAgICAgIGhyID0gc291cmNlTm9kZS0+Q29ubmVjdE91dHB1dCgwLCBvdXRwdXRO
b2RlLmdldCgpLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworTFJFU1VMVCBD
QUxMQkFDSyBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvVmlld1duZFBy
b2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0p
Cit7CisgICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFy
YW0pOworfQorCitMUENXU1RSIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cmVn
aXN0ZXJWaWRlb1dpbmRvd0NsYXNzKCkKK3sKKyAgICBjb25zdCBMUENXU1RSIGtWaWRlb1dpbmRv
d0NsYXNzTmFtZSA9IEwiV2ViVmlkZW9XaW5kb3dDbGFzcyI7CisKKyAgICBzdGF0aWMgYm9vbCBo
YXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7CisgICAgaWYgKGhhdmVSZWdpc3RlcmVk
V2luZG93Q2xhc3MpCisgICAgICAgIHJldHVybiBrVmlkZW9XaW5kb3dDbGFzc05hbWU7CisKKyAg
ICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKKworICAgIFdORENMQVNTRVggd2Nl
eDsKKworICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOworCisgICAgd2NleC5z
dHlsZSA9IENTX0RCTENMS1M7CisgICAgd2NleC5scGZuV25kUHJvYyA9IFZpZGVvVmlld1duZFBy
b2M7CisgICAgd2NleC5jYkNsc0V4dHJhID0gMDsKKyAgICB3Y2V4LmNiV25kRXh0cmEgPSAwOwor
ICAgIHdjZXguaEluc3RhbmNlID0gMDsKKyAgICB3Y2V4LmhJY29uID0gMDsKKyAgICB3Y2V4LmhD
dXJzb3IgPSA6OkxvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91
bmQgPSAwOworICAgIHdjZXgubHBzek1lbnVOYW1lID0gMDsKKyAgICB3Y2V4Lmxwc3pDbGFzc05h
bWUgPSBrVmlkZW9XaW5kb3dDbGFzc05hbWU7CisgICAgd2NleC5oSWNvblNtID0gMDsKKworICAg
IGlmIChSZWdpc3RlckNsYXNzRXgoJndjZXgpKQorICAgICAgICByZXR1cm4ga1ZpZGVvV2luZG93
Q2xhc3NOYW1lOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVWaWRlb1dpbmRvdygpCit7CisgICAgSFdORCBoV25kUGFy
ZW50ID0gMDsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBudWxscHRyOworICAgIGlmIChtX3BsYXll
ciAmJiBtX3BsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSAmJiBtX3BsYXllci0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgdmlldyA9IG1fcGxheWVyLT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpLT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAgaWYgKHZpZXcg
JiYgdmlldy0+aG9zdFdpbmRvdygpKQorICAgICAgICBoV25kUGFyZW50ID0gdmlldy0+aG9zdFdp
bmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKworICAgIG1faHduZFZpZGVvID0gQ3JlYXRl
V2luZG93RXgoV1NfRVhfTk9BQ1RJVkFURSB8IFdTX0VYX1RSQU5TUEFSRU5ULCByZWdpc3RlclZp
ZGVvV2luZG93Q2xhc3MoKSwgMCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfQ0xJUFNJQkxJ
TkdTIHwgV1NfQ0xJUENISUxEUkVOLAorICAgICAgICAwLCAwLCAwLCAwLCBoV25kUGFyZW50LCAw
LCAwLCAwKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmRl
c3Ryb3lWaWRlb1dpbmRvdygpCit7CisgICAgaWYgKG1faHduZFZpZGVvKQorICAgICAgICBEZXN0
cm95V2luZG93KG1faHduZFZpZGVvKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OmNyZWF0ZU91dHB1dE5vZGUoQ09NUHRyPElNRlN0cmVhbURlc2NyaXB0b3I+
IHNvdXJjZVNELCBDT01QdHI8SU1GVG9wb2xvZ3lOb2RlPiYgbm9kZSkKK3sKKyAgICBDT01QdHI8
SU1GTWVkaWFUeXBlSGFuZGxlcj4gaGFuZGxlcjsKKyAgICBDT01QdHI8SU1GQWN0aXZhdGU+IHJl
bmRlcmVyQWN0aXZhdGU7CisKKyAgICBHVUlEIGd1aWRNYWpvclR5cGUgPSBHVUlEX05VTEw7CisK
KyAgICAvLyBHZXQgdGhlIHN0cmVhbSBJRC4KKyAgICBEV09SRCBzdHJlYW1JRCA9IDA7CisgICAg
c291cmNlU0QtPkdldFN0cmVhbUlkZW50aWZpZXIoJnN0cmVhbUlEKTsgLy8gSnVzdCBmb3IgZGVi
dWdnaW5nLCBpZ25vcmUgYW55IGZhaWx1cmVzLgorCisgICAgLy8gR2V0IHRoZSBtZWRpYSB0eXBl
IGhhbmRsZXIgZm9yIHRoZSBzdHJlYW0uCisgICAgSFJFU1VMVCBociA9IHNvdXJjZVNELT5HZXRN
ZWRpYVR5cGVIYW5kbGVyKCZoYW5kbGVyKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gR2V0IHRoZSBtYWpvciBtZWRpYSB0eXBlLgorICAgIGhy
ID0gaGFuZGxlci0+R2V0TWFqb3JUeXBlKCZndWlkTWFqb3JUeXBlKTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3JlYXRlIGEgZG93bnN0cmVh
bSBub2RlLgorICAgIGhyID0gTUZDcmVhdGVUb3BvbG9neU5vZGUoTUZfVE9QT0xPR1lfT1VUUFVU
X05PREUsICZub2RlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gQ3JlYXRlIGFuIElNRkFjdGl2YXRlIG9iamVjdCBmb3IgdGhlIHJlbmRlcmVy
LCBiYXNlZCBvbiB0aGUgbWVkaWEgdHlwZS4KKyAgICBpZiAoTUZNZWRpYVR5cGVfQXVkaW8gPT0g
Z3VpZE1ham9yVHlwZSkgeworICAgICAgICAvLyBDcmVhdGUgdGhlIGF1ZGlvIHJlbmRlcmVyLgor
ICAgICAgICBociA9IE1GQ3JlYXRlQXVkaW9SZW5kZXJlckFjdGl2YXRlKCZyZW5kZXJlckFjdGl2
YXRlKTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICBtX2hhc0F1ZGlv
ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKE1GTWVkaWFUeXBlX1ZpZGVvID09IGd1aWRNYWpvclR5
cGUpIHsKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSB2aWRlbyByZW5kZXJlci4KKyAgICAgICAgaHIg
PSBNRkNyZWF0ZVZpZGVvUmVuZGVyZXJBY3RpdmF0ZShtX2h3bmRWaWRlbywgJnJlbmRlcmVyQWN0
aXZhdGUpOworICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgIG1faGFzVmlk
ZW8gPSB0cnVlOworICAgIH0gZWxzZQorICAgICAgICBociA9IEVfRkFJTDsKKworICAgIGlmIChG
QUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTZXQgdGhlIElBY3Rp
dmF0ZSBvYmplY3Qgb24gdGhlIG91dHB1dCBub2RlLgorICAgIGhyID0gbm9kZS0+U2V0T2JqZWN0
KHJlbmRlcmVyQWN0aXZhdGUuZ2V0KCkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZVNvdXJjZVN0cmVhbU5vZGUoQ09NUHRyPElNRlN0
cmVhbURlc2NyaXB0b3I+IHNvdXJjZVNELCBDT01QdHI8SU1GVG9wb2xvZ3lOb2RlPiYgbm9kZSkK
K3sKKyAgICBpZiAoIW1fbWVkaWFTb3VyY2UgfHwgIW1fc291cmNlUEQgfHwgIXNvdXJjZVNEKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgdGhlIHNvdXJjZS1zdHJlYW0g
bm9kZS4KKyAgICBIUkVTVUxUIGhyID0gTUZDcmVhdGVUb3BvbG9neU5vZGUoTUZfVE9QT0xPR1lf
U09VUkNFU1RSRUFNX05PREUsICZub2RlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gU2V0IGF0dHJpYnV0ZTogUG9pbnRlciB0byB0aGUgbWVk
aWEgc291cmNlLgorICAgIGhyID0gbm9kZS0+U2V0VW5rbm93bihNRl9UT1BPTk9ERV9TT1VSQ0Us
IG1fbWVkaWFTb3VyY2UuZ2V0KCkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBTZXQgYXR0cmlidXRlOiBQb2ludGVyIHRvIHRoZSBwcmVzZW50
YXRpb24gZGVzY3JpcHRvci4KKyAgICBociA9IG5vZGUtPlNldFVua25vd24oTUZfVE9QT05PREVf
UFJFU0VOVEFUSU9OX0RFU0NSSVBUT1IsIG1fc291cmNlUEQuZ2V0KCkpOworICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTZXQgYXR0cmlidXRlOiBQ
b2ludGVyIHRvIHRoZSBzdHJlYW0gZGVzY3JpcHRvci4KKyAgICBociA9IG5vZGUtPlNldFVua25v
d24oTUZfVE9QT05PREVfU1RSRUFNX0RFU0NSSVBUT1IsIHNvdXJjZVNELmdldCgpKTsKKyAgICBp
ZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpvbkNyZWF0ZWRN
ZWRpYVNvdXJjZSgpCit7CisgICAgaWYgKCFjcmVhdGVUb3BvbG9neUZyb21Tb3VyY2UoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gU2V0IHRoZSB0b3BvbG9neSBvbiB0aGUgbWVkaWEgc2Vz
c2lvbi4KKyAgICBIUkVTVUxUIGhyID0gbV9tZWRpYVNlc3Npb24tPlNldFRvcG9sb2d5KDAsIG1f
dG9wb2xvZ3kuZ2V0KCkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm47Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpvblRvcG9sb2d5U2V0
KCkKK3sKKyAgICBIUkVTVUxUIGhyID0gTUZHZXRTZXJ2aWNlKG1fbWVkaWFTZXNzaW9uLmdldCgp
LCBNUl9WSURFT19SRU5ERVJfU0VSVklDRSwgSUlEX1BQVl9BUkdTKCZtX3ZpZGVvRGlzcGxheSkp
OworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUkVDVCBy
YyA9IHsgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSB9OworICAgIG1fdmlk
ZW9EaXNwbGF5LT5TZXRWaWRlb1Bvc2l0aW9uKG51bGxwdHIsICZyYyk7CisKKyAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgbV9wbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBwbGF5KCk7CisgICAgbV9wbGF5ZXItPnBsYXliYWNrU3Rh
dGVDaGFuZ2VkKCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5
bmNDYWxsYmFjazo6QXN5bmNDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b24qIG1lZGlhUGxheWVyLCBib29sIGV2ZW50KQorICAgIDogbV9yZWZDb3VudCgwKQorICAgICwg
bV9tZWRpYVBsYXllcihtZWRpYVBsYXllcikKKyAgICAsIG1fZXZlbnQoZXZlbnQpCit7Cit9CisK
K01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFjazo6fkFzeW5j
Q2FsbGJhY2soKQoreworfQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFjazo6UXVlcnlJbnRlcmZhY2UoUkVG
SUlEIHJpaWQsIF9fUlBDX19kZXJlZl9vdXQgdm9pZCBfX1JQQ19GQVIgKl9fUlBDX0ZBUiAqcHB2
T2JqZWN0KQoreworICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSU1GQXN5bmNDYWxsYmFj
aykpCisgICAgICAgICpwcHZPYmplY3QgPSB0aGlzOworICAgIGVsc2UgeworICAgICAgICAqcHB2
T2JqZWN0ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7CisgICAgfQor
ICAgIEFkZFJlZigpOworICAgIHJldHVybiBTX09LOworfQorCitVTE9ORyBTVERNRVRIT0RDQUxM
VFlQRSBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6OkFk
ZFJlZih2b2lkKQoreworICAgIG1fcmVmQ291bnQrKzsKKyAgICByZXR1cm4gbV9yZWZDb3VudDsK
K30KKworVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpSZWxlYXNlKHZvaWQpCit7CisgICAgbV9yZWZDb3VudC0t
OworICAgIGludCByZWZDb3VudCA9IG1fcmVmQ291bnQ7CisgICAgaWYgKCFyZWZDb3VudCkKKyAg
ICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNvdW50OworfQorCitIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmND
YWxsYmFjazo6R2V0UGFyYW1ldGVycyhfX1JQQ19fb3V0IERXT1JEICpwZHdGbGFncywgX19SUENf
X291dCBEV09SRCAqcGR3UXVldWUpCit7CisgICAgLy8gUmV0dXJuaW5nIEVfTk9USU1QTCBnaXZl
cyBkZWZhdWx0IHZhbHVlcy4KKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmND
YWxsYmFjazo6SW52b2tlKF9fUlBDX19pbl9vcHQgSU1GQXN5bmNSZXN1bHQgKnBBc3luY1Jlc3Vs
dCkKK3sKKyAgICBpZiAobV9ldmVudCkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+ZW5kR2V0RXZl
bnQocEFzeW5jUmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPmVuZENy
ZWF0ZWRNZWRpYVNvdXJjZShwQXN5bmNSZXN1bHQpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisK
IH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbi5oCShyZXZpc2lvbiAxNzgyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDEzICsyNCwxOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVk
ZSAiQ09NUHRyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAKKyNpbmNsdWRl
IDxNZmFwaS5oPgorI2luY2x1ZGUgPE1maWRsLmg+CisjaW5jbHVkZSA8ZXZyLmg+CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
IDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CiBwdWJsaWM6CiAgICAgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uKE1lZGlhUGxheWVyKik7CisgICAgfk1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbigpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
TWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwogCiAgICAgc3RhdGljIFBhc3NPd25Q
dHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBjcmVhdGUoTWVkaWFQbGF5ZXIqKTsKQEAg
LTY3LDggKzczLDYwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCiBwcml2YXRlOgotCiAgICAgTWVkaWFQbGF5ZXIq
IG1fcGxheWVyOworICAgIEludFNpemUgbV9zaXplOworICAgIGJvb2wgbV92aXNpYmxlOworICAg
IGJvb2wgbV9sb2FkaW5nUHJvZ3Jlc3M7CisgICAgYm9vbCBtX3BhdXNlZDsKKyAgICBib29sIG1f
aGFzQXVkaW87CisgICAgYm9vbCBtX2hhc1ZpZGVvOworICAgIEhXTkQgbV9od25kVmlkZW87Cisg
ICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworICAgIEludFJlY3QgbV9s
YXN0UGFpbnRSZWN0OworCisgICAgQ09NUHRyPElNRk1lZGlhU2Vzc2lvbj4gbV9tZWRpYVNlc3Np
b247CisgICAgQ09NUHRyPElNRlNvdXJjZVJlc29sdmVyPiBtX3NvdXJjZVJlc29sdmVyOworICAg
IENPTVB0cjxJTUZNZWRpYVNvdXJjZT4gbV9tZWRpYVNvdXJjZTsKKyAgICBDT01QdHI8SU1GVG9w
b2xvZ3k+IG1fdG9wb2xvZ3k7CisgICAgQ09NUHRyPElNRlByZXNlbnRhdGlvbkRlc2NyaXB0b3I+
IG1fc291cmNlUEQ7CisgICAgQ09NUHRyPElNRlZpZGVvRGlzcGxheUNvbnRyb2w+IG1fdmlkZW9E
aXNwbGF5OworCisgICAgYm9vbCBjcmVhdGVTZXNzaW9uKCk7CisgICAgYm9vbCBlbmRTZXNzaW9u
KCk7CisgICAgYm9vbCBzdGFydENyZWF0ZU1lZGlhU291cmNlKGNvbnN0IFN0cmluZyYgdXJsKTsK
KyAgICBib29sIGVuZENyZWF0ZWRNZWRpYVNvdXJjZShJTUZBc3luY1Jlc3VsdCopOworICAgIGJv
b2wgZW5kR2V0RXZlbnQoSU1GQXN5bmNSZXN1bHQqKTsKKyAgICBib29sIGNyZWF0ZVRvcG9sb2d5
RnJvbVNvdXJjZSgpOworICAgIGJvb2wgYWRkQnJhbmNoVG9QYXJ0aWFsVG9wb2xvZ3koaW50IHN0
cmVhbSk7CisgICAgYm9vbCBjcmVhdGVPdXRwdXROb2RlKENPTVB0cjxJTUZTdHJlYW1EZXNjcmlw
dG9yPiBzb3VyY2VTRCwgQ09NUHRyPElNRlRvcG9sb2d5Tm9kZT4mKTsKKyAgICBib29sIGNyZWF0
ZVNvdXJjZVN0cmVhbU5vZGUoQ09NUHRyPElNRlN0cmVhbURlc2NyaXB0b3I+IHNvdXJjZVNELCBD
T01QdHI8SU1GVG9wb2xvZ3lOb2RlPiYpOworCisgICAgdm9pZCBvbkNyZWF0ZWRNZWRpYVNvdXJj
ZSgpOworICAgIHZvaWQgb25Ub3BvbG9neVNldCgpOworCisgICAgTFBDV1NUUiByZWdpc3RlclZp
ZGVvV2luZG93Q2xhc3MoKTsKKyAgICB2b2lkIGNyZWF0ZVZpZGVvV2luZG93KCk7CisgICAgdm9p
ZCBkZXN0cm95VmlkZW9XaW5kb3coKTsKKworICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFZp
ZGVvVmlld1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQ
QVJBTSBsUGFyYW0pOworCisgICAgY2xhc3MgQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBJTUZBc3lu
Y0NhbGxiYWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFzeW5jQ2FsbGJhY2soTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uKiwgYm9vbCBldmVudCk7CisgICAgICAgIH5Bc3luY0Nh
bGxiYWNrKCk7CisKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1
ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCBfX1JQQ19fZGVyZWZfb3V0IHZvaWQgX19SUENfRkFS
ICpfX1JQQ19GQVIgKnBwdk9iamVjdCk7CisgICAgICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9E
Q0FMTFRZUEUgQWRkUmVmKHZvaWQpOworICAgICAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENB
TExUWVBFIFJlbGVhc2Uodm9pZCk7CisKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIEdldFBhcmFtZXRlcnMoX19SUENfX291dCBEV09SRCAqcGR3RmxhZ3MsIF9fUlBD
X19vdXQgRFdPUkQgKnBkd1F1ZXVlKTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIEludm9rZShfX1JQQ19faW5fb3B0IElNRkFzeW5jUmVzdWx0ICpwQXN5bmNSZXN1
bHQpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1fcmVmQ291bnQ7CisgICAgICAgIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbiogbV9tZWRpYVBsYXllcjsKKyAgICAgICAg
Ym9vbCBtX2V2ZW50OworICAgIH07CiAKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244624</attachid>
            <date>2015-01-14 11:20:02 -0800</date>
            <delta_ts>2015-01-18 11:22:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140337-20150114201956.patch</filename>
            <type>text/plain</type>
            <size>24005</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODQzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE1LTAxLTE0ICBwZWF2b0Bv
dXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgorCisgICAgICAgIFtXaW5DYWlyb11bVmlk
ZW9dIFdpbmRvd3MgTWVkaWEgRm91bmRhdGlvbiBpbXBsZW1lbnRhdGlvbiBpcyBub3QgY29tcGxl
dGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQw
MzM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhaW1zIHRvIGNvbXBsZXRlIHNvbWUgb2YgdGhlIG1ldGhvZHMgd2hpY2ggYXJlIG5v
dCBpbXBsZW1lbnRlZC4KKyAgICAgICAgQ3VycmVudGx5LCBvbmx5IE1QNCBpcyBzdXBwb3J0ZWQu
CisgICAgICAgIFZpZGVvIGlzIHJlbmRlcmVkIGluIGEgY2hpbGQgd2luZG93IG9mIHRoZSBtYWlu
IHdpbmRvdy4KKyAgICAgICAgV2Ugc2hvdWxkIGV2ZW50dWFsbHkgcmVuZGVyIHRoZSB2aWRlbyBk
aXJlY3RseSBpbiB0aGUgbWFpbiB3aW5kb3csCisgICAgICAgIGJ5IHJlYWRpbmcgYW5kIHBhaW50
aW5nIGluZGl2aWR1YWwgdmlkZW8gZnJhbWVzIGZyb20gdGhlIHN0cmVhbS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpsb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6bmF0
dXJhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246Omhhc0F1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBhdXNlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnJlYWR5U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpkaWRMb2Fk
aW5nUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5kU2Vzc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnN0YXJ0Q3JlYXRl
TWVkaWFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjplbmRDcmVhdGVkTWVkaWFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjplbmRHZXRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZVRvcG9sb2d5
RnJvbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OmFkZEJyYW5jaFRvUGFydGlhbFRvcG9sb2d5KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9WaWV3V25kUHJvYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnJlZ2lz
dGVyVmlkZW9XaW5kb3dDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZVZpZGVvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZGVzdHJveVZpZGVvV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3Jl
YXRlT3V0cHV0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OmNyZWF0ZVNvdXJjZVN0cmVhbU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpvbkNyZWF0ZWRNZWRpYVNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Om9u
VG9wb2xvZ3lTZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpBc3luY0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFjazo6fkFz
eW5jQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6OkFk
ZFJlZik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkFzeW5jQ2FsbGJhY2s6OlJlbGVhc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpHZXRQYXJhbWV0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5
bmNDYWxsYmFjazo6SW52b2tlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmg6CisKIDIwMTUtMDEtMTQgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgTnVsbC1kZXJlZiBjcmFzaCB3aGVu
IHNlZWtpbmcgaW1tZWRpYXRlbHkgYmVmb3JlIGxvb3BpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAkocmV2aXNpb24gMTc4MjM3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE4ICsyNyw0MiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbi5oIgogCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJI
b3N0V2luZG93LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogI2lmIFVTRShNRURJ
QV9GT1VOREFUSU9OKQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KIAotLy8gVE9ETzogSW1wbGVtZW50IHZpZGVvIGZ1bmN0aW9uYWxpdHkgdXNpbmcg
TWVkaWEgRm91bmRhdGlvbgorbmFtZXNwYWNlIFdlYkNvcmUgewogCiBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbihNZWRp
YVBsYXllciogcGxheWVyKSAKICAgICA6IG1fcGxheWVyKHBsYXllcikKKyAgICAsIG1fdmlzaWJs
ZShmYWxzZSkKKyAgICAsIG1fbG9hZGluZ1Byb2dyZXNzKGZhbHNlKQorICAgICwgbV9wYXVzZWQo
ZmFsc2UpCisgICAgLCBtX2hhc0F1ZGlvKGZhbHNlKQorICAgICwgbV9oYXNWaWRlbyhmYWxzZSkK
KyAgICAsIG1faHduZFZpZGVvKDApCisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6Okhh
dmVOb3RoaW5nKQorICAgICwgbV9tZWRpYVNlc3Npb24obnVsbHB0cikKKyAgICAsIG1fc291cmNl
UmVzb2x2ZXIobnVsbHB0cikKKyAgICAsIG1fbWVkaWFTb3VyY2UobnVsbHB0cikKKyAgICAsIG1f
dG9wb2xvZ3kobnVsbHB0cikKKyAgICAsIG1fc291cmNlUEQobnVsbHB0cikKKyAgICAsIG1fdmlk
ZW9EaXNwbGF5KG51bGxwdHIpCit7CisgICAgY3JlYXRlU2Vzc2lvbigpOworICAgIGNyZWF0ZVZp
ZGVvV2luZG93KCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6fk1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbigpCiB7CisgICAgZGVzdHJveVZpZGVvV2lu
ZG93KCk7CisgICAgZW5kU2Vzc2lvbigpOwogfQogCiBQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGUo
TWVkaWFQbGF5ZXIqIHBsYXllcikKQEAgLTYwLDE5ICs4NCwyMyBAQCBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgdHlwZXMgPSBIYXNoU2V0PFN0cmluZz4oKTsKKyAg
ICB0eXBlcy5hZGQoU3RyaW5nKCJ2aWRlby9tcDQiKSk7CiB9CiAKIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzdXBwb3J0c1R5cGUo
Y29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNOdWxsKCkgfHwgcGFy
YW1ldGVycy50eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05v
dFN1cHBvcnRlZDsKKworICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUgPT0gInZpZGVvL21wNCIpCisg
ICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CisKICAgICByZXR1cm4gTWVk
aWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6bG9hZChjb25zdCBTdHJpbmcmKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBzdGFydENyZWF0ZU1lZGlhU291cmNlKHVybCk7CiB9CiAKIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjYW5jZWxMb2FkKCkKQEAgLTgyLDM1
ICsxMTAsNDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OgogCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cGxheSgpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAoIW1fbWVkaWFTZXNzaW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBQUk9QVkFSSUFOVCB2YXJTdGFydDsKKyAgICBQcm9wVmFyaWFudEluaXQoJnZhclN0
YXJ0KTsKKyAgICB2YXJTdGFydC52dCA9IFZUX0VNUFRZOworCisgICAgSFJFU1VMVCBociA9IG1f
bWVkaWFTZXNzaW9uLT5TdGFydChudWxscHRyLCAmdmFyU3RhcnQpOworICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKKworICAgIFByb3BWYXJpYW50Q2xlYXIoJnZhclN0YXJ0KTsKKworICAgIG1f
cGF1c2VkID0gIVNVQ0NFRURFRChocik7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uOjpwYXVzZSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAo
IW1fbWVkaWFTZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBIUkVTVUxUIGhyID0gbV9t
ZWRpYVNlc3Npb24tPlBhdXNlKCk7CisKKyAgICBtX3BhdXNlZCA9IFNVQ0NFRURFRChocik7CiB9
CiAKIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpuYXR1cmFsU2l6
ZSgpIGNvbnN0IAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludFNpemUo
MCwgMCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKIH0KIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246Omhhc1ZpZGVvKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9oYXNWaWRlbzsKIH0KIAogYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Omhhc0F1ZGlvKCkgY29uc3QKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9oYXNB
dWRpbzsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnNldFZp
c2libGUoYm9vbCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzZXRW
aXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fdmlz
aWJsZSA9IHZpc2libGU7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0
aW9uOjpzZWVraW5nKCkgY29uc3QKQEAgLTEyMSw4ICsxNjMsNyBAQCBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpwYXVzZWQoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3BhdXNlZDsKIH0KIAogTWVkaWFQbGF5ZXI6Ok5l
dHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Om5ldHdvcmtTdGF0
ZSgpIGNvbnN0CkBAIC0xMzMsOCArMTc0LDcgQEAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBN
ZWRpYVBsYXllclByaQogCiBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OnJlYWR5U3RhdGUoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICByZXR1cm4g
bV9yZWFkeVN0YXRlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmJ1ZmZlcmVkKCkgY29uc3QKQEAgLTE0
NSwxMyArMTg1LDMyIEBAIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGkK
IAogYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmRpZExvYWRpbmdQcm9n
cmVzcygpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIG1fbG9hZGluZ1Byb2dyZXNzOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJikKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3NpemUgPSBzaXplOworCisgICAgaWYg
KCFtX3ZpZGVvRGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5b3V0U2l6ZSBzY3Jv
bGxPZmZzZXQ7CisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBudWxscHRyOworICAgIGlmIChtX3Bs
YXllciAmJiBtX3BsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSAmJiBtX3BsYXllci0+Y2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgdmlldyA9IG1fcGxheWVy
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAgaWYgKHZp
ZXcpCisgICAgICAgIHNjcm9sbE9mZnNldCA9IHZpZXctPnNjcm9sbE9mZnNldEZvckZpeGVkUG9z
aXRpb24oKTsKKworICAgIGludCB4UG9zID0gLXNjcm9sbE9mZnNldC53aWR0aCgpLnRvSW50KCkg
KyBtX2xhc3RQYWludFJlY3QueCgpOworICAgIGludCB5UG9zID0gLXNjcm9sbE9mZnNldC5oZWln
aHQoKS50b0ludCgpICsgbV9sYXN0UGFpbnRSZWN0LnkoKTsKKworICAgIGlmIChtX2h3bmRWaWRl
byAmJiAhbV9sYXN0UGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgOjpNb3ZlV2luZG93KG1f
aHduZFZpZGVvLCB4UG9zLCB5UG9zLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCBG
QUxTRSk7CisKKyAgICBSRUNUIHJjID0geyAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpIH07CisgICAgbV92aWRlb0Rpc3BsYXktPlNldFZpZGVvUG9zaXRpb24obnVsbHB0ciwg
JnJjKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBhaW50
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTE2MCwx
MCArMjE5LDM4OSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6CiAg
ICAgICAgIHx8ICFtX3BsYXllci0+dmlzaWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBUT0RPOiBQYWludCB0aGUgY29udGVudHMgb2YgdGhlIHZpZGVvIHRvIHRoZSBjb250ZXh0Cisg
ICAgbV9sYXN0UGFpbnRSZWN0ID0gcmVjdDsKKworICAgIC8vIFdlIGN1cnJlbnRseSBsZXQgTWVk
aWEgRm91bmRhdGlvbiBoYW5kbGUgdGhlIGRyYXdpbmcsIGJ5IHByb3ZpZGluZyBhIGhhbmRsZSB0
byB0aGUgd2luZG93IHRvIGRyYXcgaW4uCisgICAgLy8gV2Ugc2hvdWxkIGluc3RlYWQgcmVhZCBp
bmRpdmlkdWFsIGZyYW1lcyBmcm9tIHRoZSBzdHJlYW0sIGFuZCBwYWludCB0aGVtIGludG8gdGhl
IGdyYXBoaWNzIGNvbnRleHQgaGVyZS4KKwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK2Jv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVTZXNzaW9uKCkKK3sK
KyAgICBpZiAoRkFJTEVEKE1GU3RhcnR1cChNRl9WRVJTSU9OLCBNRlNUQVJUVVBfRlVMTCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoRkFJTEVEKE1GQ3JlYXRlTWVkaWFTZXNz
aW9uKG51bGxwdHIsICZtX21lZGlhU2Vzc2lvbikpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBHZXQgbmV4dCBldmVudC4KKyAgICBBc3luY0NhbGxiYWNrKiBjYWxsYmFjayA9IG5l
dyBBc3luY0NhbGxiYWNrKHRoaXMsIHRydWUpOworICAgIG1fbWVkaWFTZXNzaW9uLT5CZWdpbkdl
dEV2ZW50KGNhbGxiYWNrLCBudWxscHRyKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5kU2Vzc2lvbigpCit7CisgICAg
aWYgKG1fbWVkaWFTZXNzaW9uKSB7CisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5TaHV0ZG93bigp
OworICAgICAgICBtX21lZGlhU2Vzc2lvbi0+UmVsZWFzZSgpOworICAgICAgICBtX21lZGlhU2Vz
c2lvbiA9IG51bGxwdHI7CisgICAgfQorCisgICAgSFJFU1VMVCBociA9IE1GU2h1dGRvd24oKTsK
KyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnN0YXJ0Q3JlYXRlTWVkaWFTb3Vy
Y2UoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgSFJFU1VMVCBociA9IE1GQ3JlYXRlU291cmNl
UmVzb2x2ZXIoJm1fc291cmNlUmVzb2x2ZXIpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ09NUHRyPElVbmtub3duPiBjYW5jZWxDb29raWU7
CisgICAgVmVjdG9yPFVDaGFyPiB1cmxTb3VyY2UgPSB1cmwuY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKTsKKworICAgIEFzeW5jQ2FsbGJhY2sqIGNhbGxiYWNrID0gbmV3IEFzeW5jQ2Fs
bGJhY2sodGhpcywgZmFsc2UpOworCisgICAgaHIgPSBtX3NvdXJjZVJlc29sdmVyLT5CZWdpbkNy
ZWF0ZU9iamVjdEZyb21VUkwodXJsU291cmNlLmRhdGEoKSwgTUZfUkVTT0xVVElPTl9NRURJQVNP
VVJDRSwgbnVsbHB0ciwgJmNhbmNlbENvb2tpZSwgY2FsbGJhY2ssIG51bGxwdHIpOworCisgICAg
cmV0dXJuIFNVQ0NFRURFRChocik7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjplbmRDcmVhdGVkTWVkaWFTb3VyY2UoSU1GQXN5bmNSZXN1bHQqIGFzeW5jUmVz
dWx0KQoreworICAgIE1GX09CSkVDVF9UWVBFIG9iamVjdFR5cGU7CisgICAgQ09NUHRyPElVbmtu
b3duPiBzb3VyY2U7CisKKyAgICBIUkVTVUxUIGhyID0gbV9zb3VyY2VSZXNvbHZlci0+RW5kQ3Jl
YXRlT2JqZWN0RnJvbVVSTChhc3luY1Jlc3VsdCwgJm9iamVjdFR5cGUsICZzb3VyY2UpOworICAg
IGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBociA9IHNvdXJj
ZS0+UXVlcnlJbnRlcmZhY2UoSUlEX1BQVl9BUkdTKCZtX21lZGlhU291cmNlKSk7CisgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhyID0gYXN5bmNSZXN1
bHQtPkdldFN0YXR1cygpOworICAgIG1fbG9hZGluZ1Byb2dyZXNzID0gU1VDQ0VFREVEKGhyKTsK
KworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAgICAgICAgb25DcmVhdGVkTWVkaWFT
b3VyY2UoKTsKKyAgICB9KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5kR2V0RXZlbnQoSU1GQXN5bmNSZXN1bHQqIGFz
eW5jUmVzdWx0KQoreworICAgIENPTVB0cjxJTUZNZWRpYUV2ZW50PiBldmVudDsKKworICAgIC8v
IEdldCB0aGUgZXZlbnQgZnJvbSB0aGUgZXZlbnQgcXVldWUuCisgICAgSFJFU1VMVCBociA9IG1f
bWVkaWFTZXNzaW9uLT5FbmRHZXRFdmVudChhc3luY1Jlc3VsdCwgJmV2ZW50KTsKKyAgICBpZiAo
RkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gR2V0IHRoZSBldmVu
dCB0eXBlLgorICAgIE1lZGlhRXZlbnRUeXBlIG1lZGlhRXZlbnRUeXBlOworICAgIGhyID0gZXZl
bnQtPkdldFR5cGUoJm1lZGlhRXZlbnRUeXBlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtZWRpYUV2ZW50VHlwZSkgeworICAgIGNh
c2UgTUVTZXNzaW9uVG9wb2xvZ3lTZXQ6CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNd
IHsKKyAgICAgICAgICAgIG9uVG9wb2xvZ3lTZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBNRVNlc3Npb25DbG9zZWQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGlmIChtZWRpYUV2ZW50VHlwZSAhPSBNRVNlc3Npb25DbG9zZWQpIHsKKyAgICAgICAg
Ly8gRm9yIGFsbCBvdGhlciBldmVudHMsIGFzayB0aGUgbWVkaWEgc2Vzc2lvbiBmb3IgdGhlCisg
ICAgICAgIC8vIG5leHQgZXZlbnQgaW4gdGhlIHF1ZXVlLgorICAgICAgICBBc3luY0NhbGxiYWNr
KiBjYWxsYmFjayA9IG5ldyBBc3luY0NhbGxiYWNrKHRoaXMsIHRydWUpOworCisgICAgICAgIGhy
ID0gbV9tZWRpYVNlc3Npb24tPkJlZ2luR2V0RXZlbnQoY2FsbGJhY2ssIG51bGxwdHIpOworICAg
ICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OmNyZWF0ZVRvcG9sb2d5RnJvbVNvdXJjZSgpCit7CisgICAgLy8gQ3JlYXRlIGEgbmV3
IHRvcG9sb2d5LgorICAgIGlmIChGQUlMRUQoTUZDcmVhdGVUb3BvbG9neSgmbV90b3BvbG9neSkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgdGhlIHByZXNlbnRhdGlv
biBkZXNjcmlwdG9yIGZvciB0aGUgbWVkaWEgc291cmNlLgorICAgIGlmIChGQUlMRUQobV9tZWRp
YVNvdXJjZS0+Q3JlYXRlUHJlc2VudGF0aW9uRGVzY3JpcHRvcigmbV9zb3VyY2VQRCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBzdHJlYW1zIGlu
IHRoZSBtZWRpYSBzb3VyY2UuCisgICAgRFdPUkQgc291cmNlU3RyZWFtcyA9IDA7CisgICAgaWYg
KEZBSUxFRChtX3NvdXJjZVBELT5HZXRTdHJlYW1EZXNjcmlwdG9yQ291bnQoJnNvdXJjZVN0cmVh
bXMpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRm9yIGVhY2ggc3RyZWFtLCBj
cmVhdGUgdGhlIHRvcG9sb2d5IG5vZGVzIGFuZCBhZGQgdGhlbSB0byB0aGUgdG9wb2xvZ3kuCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb3VyY2VTdHJlYW1zOyBpKyspIHsKKyAgICAgICAgaWYg
KCFhZGRCcmFuY2hUb1BhcnRpYWxUb3BvbG9neShpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OmFkZEJyYW5jaFRvUGFydGlhbFRvcG9sb2d5KGludCBzdHJlYW0p
Cit7CisgICAgLy8gR2V0IHRoZSBzdHJlYW0gZGVzY3JpcHRvciBmb3IgdGhpcyBzdHJlYW0uCisg
ICAgQ09NUHRyPElNRlN0cmVhbURlc2NyaXB0b3I+IHNvdXJjZVNEOworICAgIEJPT0wgc2VsZWN0
ZWQgPSBGQUxTRTsKKyAgICBpZiAoRkFJTEVEKG1fc291cmNlUEQtPkdldFN0cmVhbURlc2NyaXB0
b3JCeUluZGV4KHN0cmVhbSwgJnNlbGVjdGVkLCAmc291cmNlU0QpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gQ3JlYXRlIHRoZSB0b3BvbG9neSBicmFuY2ggb25seSBpZiB0aGUg
c3RyZWFtIGlzIHNlbGVjdGVkLgorICAgIC8vIE90aGVyd2lzZSwgZG8gbm90aGluZy4KKyAgICBp
ZiAoIXNlbGVjdGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIENyZWF0ZSBhIHNv
dXJjZSBub2RlIGZvciB0aGlzIHN0cmVhbS4KKyAgICBDT01QdHI8SU1GVG9wb2xvZ3lOb2RlPiBz
b3VyY2VOb2RlOworICAgIGlmICghY3JlYXRlU291cmNlU3RyZWFtTm9kZShzb3VyY2VTRCwgc291
cmNlTm9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENPTVB0cjxJTUZUb3BvbG9n
eU5vZGU+IG91dHB1dE5vZGU7CisgICAgaWYgKCFjcmVhdGVPdXRwdXROb2RlKHNvdXJjZVNELCBv
dXRwdXROb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQWRkIGJvdGggbm9k
ZXMgdG8gdGhlIHRvcG9sb2d5LgorICAgIGlmIChGQUlMRUQobV90b3BvbG9neS0+QWRkTm9kZShz
b3VyY2VOb2RlLmdldCgpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChGQUlM
RUQobV90b3BvbG9neS0+QWRkTm9kZShvdXRwdXROb2RlLmdldCgpKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIENvbm5lY3QgdGhlIHNvdXJjZSBub2RlIHRvIHRoZSBvdXRwdXQg
bm9kZS4KKyAgICBpZiAoRkFJTEVEKHNvdXJjZU5vZGUtPkNvbm5lY3RPdXRwdXQoMCwgb3V0cHV0
Tm9kZS5nZXQoKSwgMCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworTFJFU1VMVCBDQUxMQkFDSyBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OlZpZGVvVmlld1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFy
YW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVz
c2FnZSwgd1BhcmFtLCBsUGFyYW0pOworfQorCitMUENXU1RSIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6cmVnaXN0ZXJWaWRlb1dpbmRvd0NsYXNzKCkKK3sKKyAgICBjb25zdCBM
UENXU1RSIGtWaWRlb1dpbmRvd0NsYXNzTmFtZSA9IEwiV2ViVmlkZW9XaW5kb3dDbGFzcyI7CisK
KyAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7CisgICAg
aWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCisgICAgICAgIHJldHVybiBrVmlkZW9XaW5k
b3dDbGFzc05hbWU7CisKKyAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKKwor
ICAgIFdORENMQVNTRVggd2NleDsKKworICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNT
RVgpOworCisgICAgd2NleC5zdHlsZSA9IENTX0RCTENMS1M7CisgICAgd2NleC5scGZuV25kUHJv
YyA9IFZpZGVvVmlld1duZFByb2M7CisgICAgd2NleC5jYkNsc0V4dHJhID0gMDsKKyAgICB3Y2V4
LmNiV25kRXh0cmEgPSAwOworICAgIHdjZXguaEluc3RhbmNlID0gMDsKKyAgICB3Y2V4LmhJY29u
ID0gMDsKKyAgICB3Y2V4LmhDdXJzb3IgPSA6OkxvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAg
ICB3Y2V4LmhickJhY2tncm91bmQgPSAwOworICAgIHdjZXgubHBzek1lbnVOYW1lID0gbnVsbHB0
cjsKKyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgPSBrVmlkZW9XaW5kb3dDbGFzc05hbWU7CisgICAg
d2NleC5oSWNvblNtID0gMDsKKworICAgIGlmIChSZWdpc3RlckNsYXNzRXgoJndjZXgpKQorICAg
ICAgICByZXR1cm4ga1ZpZGVvV2luZG93Q2xhc3NOYW1lOworCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVWaWRl
b1dpbmRvdygpCit7CisgICAgSFdORCBoV25kUGFyZW50ID0gMDsKKyAgICBGcmFtZVZpZXcqIHZp
ZXcgPSBudWxscHRyOworICAgIGlmIChtX3BsYXllciAmJiBtX3BsYXllci0+Y2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoKSAmJiBtX3BsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+ZG9jdW1lbnQo
KSkKKyAgICAgICAgdmlldyA9IG1fcGxheWVyLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5kb2N1
bWVudCgpLT52aWV3KCk7CisgICAgaWYgKHZpZXcgJiYgdmlldy0+aG9zdFdpbmRvdygpKQorICAg
ICAgICBoV25kUGFyZW50ID0gdmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQo
KTsKKworICAgIG1faHduZFZpZGVvID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9BQ1RJVkFURSB8
IFdTX0VYX1RSQU5TUEFSRU5ULCByZWdpc3RlclZpZGVvV2luZG93Q2xhc3MoKSwgMCwgV1NfQ0hJ
TEQgfCBXU19WSVNJQkxFIHwgV1NfQ0xJUFNJQkxJTkdTIHwgV1NfQ0xJUENISUxEUkVOLAorICAg
ICAgICAwLCAwLCAwLCAwLCBoV25kUGFyZW50LCAwLCAwLCAwKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmRlc3Ryb3lWaWRlb1dpbmRvdygpCit7CisgICAg
aWYgKG1faHduZFZpZGVvKQorICAgICAgICBEZXN0cm95V2luZG93KG1faHduZFZpZGVvKTsKK30K
KworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZU91dHB1dE5v
ZGUoQ09NUHRyPElNRlN0cmVhbURlc2NyaXB0b3I+IHNvdXJjZVNELCBDT01QdHI8SU1GVG9wb2xv
Z3lOb2RlPiYgbm9kZSkKK3sKKyAgICBpZiAoIXNvdXJjZVNEKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gR2V0IHRoZSBzdHJlYW0gSUQuCisgICAgRFdP
UkQgc3RyZWFtSUQgPSAwOworICAgIHNvdXJjZVNELT5HZXRTdHJlYW1JZGVudGlmaWVyKCZzdHJl
YW1JRCk7IC8vIEp1c3QgZm9yIGRlYnVnZ2luZywgaWdub3JlIGFueSBmYWlsdXJlcy4KKyNlbmRp
ZgorCisgICAgQ09NUHRyPElNRk1lZGlhVHlwZUhhbmRsZXI+IGhhbmRsZXI7CisgICAgaWYgKEZB
SUxFRChzb3VyY2VTRC0+R2V0TWVkaWFUeXBlSGFuZGxlcigmaGFuZGxlcikpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBHVUlEIGd1aWRNYWpvclR5cGUgPSBHVUlEX05VTEw7CisgICAg
aWYgKEZBSUxFRChoYW5kbGVyLT5HZXRNYWpvclR5cGUoJmd1aWRNYWpvclR5cGUpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3JlYXRlIGEgZG93bnN0cmVhbSBub2RlLgorICAg
IGlmIChGQUlMRUQoTUZDcmVhdGVUb3BvbG9neU5vZGUoTUZfVE9QT0xPR1lfT1VUUFVUX05PREUs
ICZub2RlKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhbiBJTUZB
Y3RpdmF0ZSBvYmplY3QgZm9yIHRoZSByZW5kZXJlciwgYmFzZWQgb24gdGhlIG1lZGlhIHR5cGUu
CisgICAgQ09NUHRyPElNRkFjdGl2YXRlPiByZW5kZXJlckFjdGl2YXRlOworICAgIGlmIChNRk1l
ZGlhVHlwZV9BdWRpbyA9PSBndWlkTWFqb3JUeXBlKSB7CisgICAgICAgIC8vIENyZWF0ZSB0aGUg
YXVkaW8gcmVuZGVyZXIuCisgICAgICAgIGlmIChGQUlMRUQoTUZDcmVhdGVBdWRpb1JlbmRlcmVy
QWN0aXZhdGUoJnJlbmRlcmVyQWN0aXZhdGUpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgbV9oYXNBdWRpbyA9IHRydWU7CisgICAgfSBlbHNlIGlmIChNRk1lZGlhVHlwZV9W
aWRlbyA9PSBndWlkTWFqb3JUeXBlKSB7CisgICAgICAgIC8vIENyZWF0ZSB0aGUgdmlkZW8gcmVu
ZGVyZXIuCisgICAgICAgIGlmIChGQUlMRUQoTUZDcmVhdGVWaWRlb1JlbmRlcmVyQWN0aXZhdGUo
bV9od25kVmlkZW8sICZyZW5kZXJlckFjdGl2YXRlKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIG1faGFzVmlkZW8gPSB0cnVlOworICAgIH0gZWxzZQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBTZXQgdGhlIElBY3RpdmF0ZSBvYmplY3Qgb24gdGhlIG91dHB1
dCBub2RlLgorICAgIGlmIChGQUlMRUQobm9kZS0+U2V0T2JqZWN0KHJlbmRlcmVyQWN0aXZhdGUu
Z2V0KCkpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVTb3VyY2VTdHJl
YW1Ob2RlKENPTVB0cjxJTUZTdHJlYW1EZXNjcmlwdG9yPiBzb3VyY2VTRCwgQ09NUHRyPElNRlRv
cG9sb2d5Tm9kZT4mIG5vZGUpCit7CisgICAgaWYgKCFtX21lZGlhU291cmNlIHx8ICFtX3NvdXJj
ZVBEIHx8ICFzb3VyY2VTRCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3JlYXRl
IHRoZSBzb3VyY2Utc3RyZWFtIG5vZGUuCisgICAgSFJFU1VMVCBociA9IE1GQ3JlYXRlVG9wb2xv
Z3lOb2RlKE1GX1RPUE9MT0dZX1NPVVJDRVNUUkVBTV9OT0RFLCAmbm9kZSk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFNldCBhdHRyaWJ1dGU6
IFBvaW50ZXIgdG8gdGhlIG1lZGlhIHNvdXJjZS4KKyAgICBociA9IG5vZGUtPlNldFVua25vd24o
TUZfVE9QT05PREVfU09VUkNFLCBtX21lZGlhU291cmNlLmdldCgpKTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU2V0IGF0dHJpYnV0ZTogUG9p
bnRlciB0byB0aGUgcHJlc2VudGF0aW9uIGRlc2NyaXB0b3IuCisgICAgaHIgPSBub2RlLT5TZXRV
bmtub3duKE1GX1RPUE9OT0RFX1BSRVNFTlRBVElPTl9ERVNDUklQVE9SLCBtX3NvdXJjZVBELmdl
dCgpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gU2V0IGF0dHJpYnV0ZTogUG9pbnRlciB0byB0aGUgc3RyZWFtIGRlc2NyaXB0b3IuCisgICAg
aHIgPSBub2RlLT5TZXRVbmtub3duKE1GX1RPUE9OT0RFX1NUUkVBTV9ERVNDUklQVE9SLCBzb3Vy
Y2VTRC5nZXQoKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6b25DcmVhdGVkTWVkaWFTb3VyY2UoKQoreworICAgIGlmICghY3JlYXRlVG9wb2xv
Z3lGcm9tU291cmNlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNldCB0aGUgdG9wb2xv
Z3kgb24gdGhlIG1lZGlhIHNlc3Npb24uCisgICAgSFJFU1VMVCBociA9IG1fbWVkaWFTZXNzaW9u
LT5TZXRUb3BvbG9neSgwLCBtX3RvcG9sb2d5LmdldCgpKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpvblRv
cG9sb2d5U2V0KCkKK3sKKyAgICBIUkVTVUxUIGhyID0gTUZHZXRTZXJ2aWNlKG1fbWVkaWFTZXNz
aW9uLmdldCgpLCBNUl9WSURFT19SRU5ERVJfU0VSVklDRSwgSUlEX1BQVl9BUkdTKCZtX3ZpZGVv
RGlzcGxheSkpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUkVDVCByYyA9IHsgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSB9Owor
ICAgIG1fdmlkZW9EaXNwbGF5LT5TZXRWaWRlb1Bvc2l0aW9uKG51bGxwdHIsICZyYyk7CisKKyAg
ICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgbV9wbGF5
ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBwbGF5KCk7CisgICAgbV9wbGF5ZXItPnBs
YXliYWNrU3RhdGVDaGFuZ2VkKCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRh
dGlvbjo6QXN5bmNDYWxsYmFjazo6QXN5bmNDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb24qIG1lZGlhUGxheWVyLCBib29sIGV2ZW50KQorICAgIDogbV9yZWZDb3VudCgw
KQorICAgICwgbV9tZWRpYVBsYXllcihtZWRpYVBsYXllcikKKyAgICAsIG1fZXZlbnQoZXZlbnQp
Cit7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFj
azo6fkFzeW5jQ2FsbGJhY2soKQoreworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFjazo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQs
IF9fUlBDX19kZXJlZl9vdXQgdm9pZCBfX1JQQ19GQVIgKl9fUlBDX0ZBUiAqcHB2T2JqZWN0KQor
eworICAgIGlmICghSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lNRkFzeW5jQ2FsbGJhY2spKSB7Cisg
ICAgICAgICpwcHZPYmplY3QgPSBudWxscHRyOworICAgICAgICByZXR1cm4gRV9OT0lOVEVSRkFD
RTsKKyAgICB9CisgICAgKnBwdk9iamVjdCA9IHRoaXM7CisgICAgQWRkUmVmKCk7CisgICAgcmV0
dXJuIFNfT0s7Cit9CisKK1VMT05HIFNURE1FVEhPRENBTExUWVBFIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFjazo6QWRkUmVmKHZvaWQpCit7CisgICAgbV9y
ZWZDb3VudCsrOworICAgIHJldHVybiBtX3JlZkNvdW50OworfQorCitVTE9ORyBTVERNRVRIT0RD
QUxMVFlQRSBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6
OlJlbGVhc2Uodm9pZCkKK3sKKyAgICBtX3JlZkNvdW50LS07CisgICAgaW50IHJlZkNvdW50ID0g
bV9yZWZDb3VudDsKKyAgICBpZiAoIXJlZkNvdW50KQorICAgICAgICBkZWxldGUgdGhpczsKKyAg
ICByZXR1cm4gcmVmQ291bnQ7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpHZXRQYXJhbWV0ZXJz
KF9fUlBDX19vdXQgRFdPUkQgKnBkd0ZsYWdzLCBfX1JQQ19fb3V0IERXT1JEICpwZHdRdWV1ZSkK
K3sKKyAgICAvLyBSZXR1cm5pbmcgRV9OT1RJTVBMIGdpdmVzIGRlZmF1bHQgdmFsdWVzLgorICAg
IHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpJbnZva2UoX19SUENf
X2luX29wdCBJTUZBc3luY1Jlc3VsdCAqcEFzeW5jUmVzdWx0KQoreworICAgIGlmIChtX2V2ZW50
KQorICAgICAgICBtX21lZGlhUGxheWVyLT5lbmRHZXRFdmVudChwQXN5bmNSZXN1bHQpOworICAg
IGVsc2UKKyAgICAgICAgbV9tZWRpYVBsYXllci0+ZW5kQ3JlYXRlZE1lZGlhU291cmNlKHBBc3lu
Y1Jlc3VsdCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKwogfQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmgJKHJldmlzaW9uIDE3
ODIzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTMgKzI0LDE5
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlICJDT01QdHIuaCIKICNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGUuaCIKIAorI2luY2x1ZGUgPE1mYXBpLmg+CisjaW5jbHVkZSA8
TWZpZGwuaD4KKyNpbmNsdWRlIDxldnIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24gOiBwdWJsaWMgTWVkaWFQbGF5ZXJQ
cml2YXRlSW50ZXJmYWNlIHsKIHB1YmxpYzoKICAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb24oTWVkaWFQbGF5ZXIqKTsKKyAgICB+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uKCk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2lu
ZVJlZ2lzdHJhcik7CiAKICAgICBzdGF0aWMgUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJ
bnRlcmZhY2U+IGNyZWF0ZShNZWRpYVBsYXllciopOwpAQCAtNjcsOCArNzMsNjAgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
Jik7CiAKIHByaXZhdGU6Ci0KICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CisgICAgSW50U2l6
ZSBtX3NpemU7CisgICAgYm9vbCBtX3Zpc2libGU7CisgICAgYm9vbCBtX2xvYWRpbmdQcm9ncmVz
czsKKyAgICBib29sIG1fcGF1c2VkOworICAgIGJvb2wgbV9oYXNBdWRpbzsKKyAgICBib29sIG1f
aGFzVmlkZW87CisgICAgSFdORCBtX2h3bmRWaWRlbzsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlT
dGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgSW50UmVjdCBtX2xhc3RQYWludFJlY3Q7CisKKyAgICBD
T01QdHI8SU1GTWVkaWFTZXNzaW9uPiBtX21lZGlhU2Vzc2lvbjsKKyAgICBDT01QdHI8SU1GU291
cmNlUmVzb2x2ZXI+IG1fc291cmNlUmVzb2x2ZXI7CisgICAgQ09NUHRyPElNRk1lZGlhU291cmNl
PiBtX21lZGlhU291cmNlOworICAgIENPTVB0cjxJTUZUb3BvbG9neT4gbV90b3BvbG9neTsKKyAg
ICBDT01QdHI8SU1GUHJlc2VudGF0aW9uRGVzY3JpcHRvcj4gbV9zb3VyY2VQRDsKKyAgICBDT01Q
dHI8SU1GVmlkZW9EaXNwbGF5Q29udHJvbD4gbV92aWRlb0Rpc3BsYXk7CisKKyAgICBib29sIGNy
ZWF0ZVNlc3Npb24oKTsKKyAgICBib29sIGVuZFNlc3Npb24oKTsKKyAgICBib29sIHN0YXJ0Q3Jl
YXRlTWVkaWFTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIGJvb2wgZW5kQ3JlYXRlZE1l
ZGlhU291cmNlKElNRkFzeW5jUmVzdWx0Kik7CisgICAgYm9vbCBlbmRHZXRFdmVudChJTUZBc3lu
Y1Jlc3VsdCopOworICAgIGJvb2wgY3JlYXRlVG9wb2xvZ3lGcm9tU291cmNlKCk7CisgICAgYm9v
bCBhZGRCcmFuY2hUb1BhcnRpYWxUb3BvbG9neShpbnQgc3RyZWFtKTsKKyAgICBib29sIGNyZWF0
ZU91dHB1dE5vZGUoQ09NUHRyPElNRlN0cmVhbURlc2NyaXB0b3I+IHNvdXJjZVNELCBDT01QdHI8
SU1GVG9wb2xvZ3lOb2RlPiYpOworICAgIGJvb2wgY3JlYXRlU291cmNlU3RyZWFtTm9kZShDT01Q
dHI8SU1GU3RyZWFtRGVzY3JpcHRvcj4gc291cmNlU0QsIENPTVB0cjxJTUZUb3BvbG9neU5vZGU+
Jik7CisKKyAgICB2b2lkIG9uQ3JlYXRlZE1lZGlhU291cmNlKCk7CisgICAgdm9pZCBvblRvcG9s
b2d5U2V0KCk7CisKKyAgICBMUENXU1RSIHJlZ2lzdGVyVmlkZW9XaW5kb3dDbGFzcygpOworICAg
IHZvaWQgY3JlYXRlVmlkZW9XaW5kb3coKTsKKyAgICB2b2lkIGRlc3Ryb3lWaWRlb1dpbmRvdygp
OworCisgICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgVmlkZW9WaWV3V25kUHJvYyhIV05EIGhX
bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CisKKyAgICBj
bGFzcyBBc3luY0NhbGxiYWNrIDogcHVibGljIElNRkFzeW5jQ2FsbGJhY2sgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgQXN5bmNDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b24qLCBib29sIGV2ZW50KTsKKyAgICAgICAgfkFzeW5jQ2FsbGJhY2soKTsKKworICAgICAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIF9fUlBDX19kZXJlZl9vdXQgdm9pZCBfX1JQQ19GQVIgKl9fUlBDX0ZBUiAqcHB2T2JqZWN0
KTsKKyAgICAgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRSZWYodm9pZCk7
CisgICAgICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSh2b2lkKTsK
KworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0UGFyYW1ldGVy
cyhfX1JQQ19fb3V0IERXT1JEICpwZHdGbGFncywgX19SUENfX291dCBEV09SRCAqcGR3UXVldWUp
OworICAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgSW52b2tlKF9fUlBD
X19pbl9vcHQgSU1GQXN5bmNSZXN1bHQgKnBBc3luY1Jlc3VsdCk7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBpbnQgbV9yZWZDb3VudDsKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uKiBtX21lZGlhUGxheWVyOworICAgICAgICBib29sIG1fZXZlbnQ7CisgICAgfTsK
IAogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244863</attachid>
            <date>2015-01-18 11:22:31 -0800</date>
            <delta_ts>2015-01-19 11:58:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140337-20150118202218.patch</filename>
            <type>text/plain</type>
            <size>24174</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODYzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE1LTAxLTE4ICBwZWF2b0Bv
dXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgorCisgICAgICAgIFtXaW5DYWlyb11bVmlk
ZW9dIFdpbmRvd3MgTWVkaWEgRm91bmRhdGlvbiBpbXBsZW1lbnRhdGlvbiBpcyBub3QgY29tcGxl
dGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQw
MzM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhaW1zIHRvIGNvbXBsZXRlIHNvbWUgb2YgdGhlIG1ldGhvZHMgd2hpY2ggYXJlIG5v
dCBpbXBsZW1lbnRlZC4KKyAgICAgICAgQ3VycmVudGx5LCBvbmx5IE1QNCBpcyBzdXBwb3J0ZWQu
CisgICAgICAgIFZpZGVvIGlzIHJlbmRlcmVkIGluIGEgY2hpbGQgd2luZG93IG9mIHRoZSBtYWlu
IHdpbmRvdy4KKyAgICAgICAgV2Ugc2hvdWxkIGV2ZW50dWFsbHkgcmVuZGVyIHRoZSB2aWRlbyBk
aXJlY3RseSBpbiB0aGUgbWFpbiB3aW5kb3csCisgICAgICAgIGJ5IHJlYWRpbmcgYW5kIHBhaW50
aW5nIGluZGl2aWR1YWwgdmlkZW8gZnJhbWVzIGZyb20gdGhlIHN0cmVhbS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpsb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6bmF0
dXJhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246Omhhc0F1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBhdXNlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnJlYWR5U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpkaWRMb2Fk
aW5nUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5kU2Vzc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnN0YXJ0Q3JlYXRl
TWVkaWFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjplbmRDcmVhdGVkTWVkaWFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjplbmRHZXRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZVRvcG9sb2d5
RnJvbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OmFkZEJyYW5jaFRvUGFydGlhbFRvcG9sb2d5KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9WaWV3V25kUHJvYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnJlZ2lz
dGVyVmlkZW9XaW5kb3dDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZVZpZGVvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZGVzdHJveVZpZGVvV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3Jl
YXRlT3V0cHV0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OmNyZWF0ZVNvdXJjZVN0cmVhbU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpvbkNyZWF0ZWRNZWRpYVNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Om9u
VG9wb2xvZ3lTZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpBc3luY0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFjazo6fkFz
eW5jQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6OkFk
ZFJlZik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkFzeW5jQ2FsbGJhY2s6OlJlbGVhc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpHZXRQYXJhbWV0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5
bmNDYWxsYmFjazo6SW52b2tlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmg6CisKIDIwMTUtMDEtMTcgIEJyaWFuIEou
IEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IGhpZ2hsaWdodCBkYXRhIGZvciBvdmVybGF5IHNob3VsZCB1c2UgcHJvdG9jb2wgdHlwZSBidWls
ZGVycwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bi5jcHAJKHJldmlzaW9uIDE3ODIzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNywxOCArMjcsNDIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uaCIKIAorI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAKICNpZiBVU0UoTUVESUFfRk9VTkRBVElPTikKIAotbmFtZXNwYWNlIFdlYkNv
cmUgeworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKLS8vIFRPRE86IEltcGxlbWVudCB2
aWRlbyBmdW5jdGlvbmFsaXR5IHVzaW5nIE1lZGlhIEZvdW5kYXRpb24KK25hbWVzcGFjZSBXZWJD
b3JlIHsKIAogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb24oTWVkaWFQbGF5ZXIqIHBsYXllcikgCiAgICAgOiBtX3BsYXll
cihwbGF5ZXIpCisgICAgLCBtX3Zpc2libGUoZmFsc2UpCisgICAgLCBtX2xvYWRpbmdQcm9ncmVz
cyhmYWxzZSkKKyAgICAsIG1fcGF1c2VkKGZhbHNlKQorICAgICwgbV9oYXNBdWRpbyhmYWxzZSkK
KyAgICAsIG1faGFzVmlkZW8oZmFsc2UpCisgICAgLCBtX2h3bmRWaWRlbyhudWxscHRyKQorICAg
ICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKKyAgICAsIG1fbWVkaWFT
ZXNzaW9uKG51bGxwdHIpCisgICAgLCBtX3NvdXJjZVJlc29sdmVyKG51bGxwdHIpCisgICAgLCBt
X21lZGlhU291cmNlKG51bGxwdHIpCisgICAgLCBtX3RvcG9sb2d5KG51bGxwdHIpCisgICAgLCBt
X3NvdXJjZVBEKG51bGxwdHIpCisgICAgLCBtX3ZpZGVvRGlzcGxheShudWxscHRyKQoreworICAg
IGNyZWF0ZVNlc3Npb24oKTsKKyAgICBjcmVhdGVWaWRlb1dpbmRvdygpOworfQorCitNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246On5NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb24oKQogeworICAgIGRlc3Ryb3lWaWRlb1dpbmRvdygpOworICAgIGVuZFNlc3Npb24oKTsK
IH0KIAogUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCkBAIC02
MCwxOSArODQsMjMgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Ogog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Z2V0U3VwcG9ydGVkVHlw
ZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHR5cGVzID0gSGFzaFNldDxTdHJpbmc+KCk7CisgICAgdHlwZXMuYWRkKFN0cmluZygidmlkZW8v
bXA0IikpOwogfQogCiBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAo
cGFyYW1ldGVycy50eXBlLmlzTnVsbCgpIHx8IHBhcmFtZXRlcnMudHlwZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBpZiAocGFy
YW1ldGVycy50eXBlID09ICJ2aWRlby9tcDQiKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6
OklzU3VwcG9ydGVkOworCiAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmxvYWQoY29uc3Qg
U3RyaW5nJikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpsb2FkKGNv
bnN0IFN0cmluZyYgdXJsKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhcnRDcmVh
dGVNZWRpYVNvdXJjZSh1cmwpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Y2FuY2VsTG9hZCgpCkBAIC04MiwzNSArMTEwLDQ3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjoKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OnBsYXkoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFt
X21lZGlhU2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgUFJPUFZBUklBTlQgdmFyU3Rh
cnQ7CisgICAgUHJvcFZhcmlhbnRJbml0KCZ2YXJTdGFydCk7CisgICAgdmFyU3RhcnQudnQgPSBW
VF9FTVBUWTsKKworICAgIEhSRVNVTFQgaHIgPSBtX21lZGlhU2Vzc2lvbi0+U3RhcnQobnVsbHB0
ciwgJnZhclN0YXJ0KTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBQcm9wVmFy
aWFudENsZWFyKCZ2YXJTdGFydCk7CisKKyAgICBtX3BhdXNlZCA9ICFTVUNDRUVERUQoaHIpOwog
fQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cGF1c2UoKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFtX21lZGlhU2Vzc2lvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9wYXVzZWQgPSBTVUNDRUVERUQobV9tZWRpYVNlc3Npb24tPlBhdXNl
KCkpOwogfQogCiBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6bmF0
dXJhbFNpemUoKSBjb25zdCAKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJ
bnRTaXplKDAsIDApOworICAgIHJldHVybiBtX3NpemU7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpoYXNWaWRlbygpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1faGFzVmlkZW87CiB9CiAK
IGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpoYXNBdWRpbygpIGNvbnN0
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IG1faGFzQXVkaW87CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpzZXRWaXNpYmxlKGJvb2wpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBtX3Zpc2libGUgPSB2aXNpYmxlOwogfQogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6c2Vla2luZygpIGNvbnN0CkBAIC0xMjEsOCArMTYxLDcgQEAgYm9vbCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OgogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6cGF1c2VkKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9wYXVzZWQ7CiB9CiAKIE1lZGlhUGxh
eWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpuZXR3
b3JrU3RhdGUoKSBjb25zdApAQCAtMTMzLDggKzE3Miw3IEBAIE1lZGlhUGxheWVyOjpOZXR3b3Jr
U3RhdGUgTWVkaWFQbGF5ZXJQcmkKIAogTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpyZWFkeVN0YXRlKCkgY29uc3QKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAg
cmV0dXJuIG1fcmVhZHlTdGF0ZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJh
bmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpidWZmZXJlZCgpIGNvbnN0
CkBAIC0xNDUsMTMgKzE4MywzMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2Vz
PiBNZWRpCiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpkaWRMb2Fk
aW5nUHJvZ3Jlc3MoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBtX2xvYWRpbmdQcm9ncmVzczsKIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnNldFNpemUoY29uc3QgSW50U2l6ZSYpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0U2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9zaXplID0gc2l6ZTsKKwor
ICAgIGlmICghbV92aWRlb0Rpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIExheW91dFNp
emUgc2Nyb2xsT2Zmc2V0OworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbnVsbHB0cjsKKyAgICBp
ZiAobV9wbGF5ZXIgJiYgbV9wbGF5ZXItPmNhY2hlZFJlc291cmNlTG9hZGVyKCkgJiYgbV9wbGF5
ZXItPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmRvY3VtZW50KCkpCisgICAgICAgIHZpZXcgPSBt
X3BsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAg
IGlmICh2aWV3KQorICAgICAgICBzY3JvbGxPZmZzZXQgPSB2aWV3LT5zY3JvbGxPZmZzZXRGb3JG
aXhlZFBvc2l0aW9uKCk7CisKKyAgICBpbnQgeFBvcyA9IC1zY3JvbGxPZmZzZXQud2lkdGgoKS50
b0ludCgpICsgbV9sYXN0UGFpbnRSZWN0LngoKTsKKyAgICBpbnQgeVBvcyA9IC1zY3JvbGxPZmZz
ZXQuaGVpZ2h0KCkudG9JbnQoKSArIG1fbGFzdFBhaW50UmVjdC55KCk7CisKKyAgICBpZiAobV9o
d25kVmlkZW8gJiYgIW1fbGFzdFBhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIDo6TW92ZVdp
bmRvdyhtX2h3bmRWaWRlbywgeFBvcywgeVBvcywgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSwgRkFMU0UpOworCisgICAgUkVDVCByYyA9IHsgMCwgMCwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSB9OworICAgIG1fdmlkZW9EaXNwbGF5LT5TZXRWaWRlb1Bvc2l0aW9uKG51
bGxwdHIsICZyYyk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCkBA
IC0xNjAsMTAgKzIxNywzOTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OgogICAgICAgICB8fCAhbV9wbGF5ZXItPnZpc2libGUoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gVE9ETzogUGFpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSB2aWRlbyB0byB0aGUgY29u
dGV4dAorICAgIG1fbGFzdFBhaW50UmVjdCA9IHJlY3Q7CisKKyAgICAvLyBXZSBjdXJyZW50bHkg
bGV0IE1lZGlhIEZvdW5kYXRpb24gaGFuZGxlIHRoZSBkcmF3aW5nLCBieSBwcm92aWRpbmcgYSBo
YW5kbGUgdG8gdGhlIHdpbmRvdyB0byBkcmF3IGluLgorICAgIC8vIFdlIHNob3VsZCBpbnN0ZWFk
IHJlYWQgaW5kaXZpZHVhbCBmcmFtZXMgZnJvbSB0aGUgc3RyZWFtLCBhbmQgcGFpbnQgdGhlbSBp
bnRvIHRoZSBncmFwaGljcyBjb250ZXh0IGhlcmUuCisKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3JlYXRlU2Vzc2lv
bigpCit7CisgICAgaWYgKEZBSUxFRChNRlN0YXJ0dXAoTUZfVkVSU0lPTiwgTUZTVEFSVFVQX0ZV
TEwpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKEZBSUxFRChNRkNyZWF0ZU1l
ZGlhU2Vzc2lvbihudWxscHRyLCAmbV9tZWRpYVNlc3Npb24pKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gR2V0IG5leHQgZXZlbnQuCisgICAgQXN5bmNDYWxsYmFjayogY2FsbGJh
Y2sgPSBuZXcgQXN5bmNDYWxsYmFjayh0aGlzLCB0cnVlKTsKKyAgICBIUkVTVUxUIGhyID0gbV9t
ZWRpYVNlc3Npb24tPkJlZ2luR2V0RXZlbnQoY2FsbGJhY2ssIG51bGxwdHIpOworICAgIEFTU0VS
VChTVUNDRUVERUQoaHIpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5kU2Vzc2lvbigpCit7CisgICAgaWYgKG1fbWVk
aWFTZXNzaW9uKSB7CisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5TaHV0ZG93bigpOworICAgICAg
ICBtX21lZGlhU2Vzc2lvbi0+UmVsZWFzZSgpOworICAgICAgICBtX21lZGlhU2Vzc2lvbiA9IG51
bGxwdHI7CisgICAgfQorCisgICAgSFJFU1VMVCBociA9IE1GU2h1dGRvd24oKTsKKyAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnN0YXJ0Q3JlYXRlTWVkaWFTb3VyY2UoY29uc3Qg
U3RyaW5nJiB1cmwpCit7CisgICAgaWYgKEZBSUxFRChNRkNyZWF0ZVNvdXJjZVJlc29sdmVyKCZt
X3NvdXJjZVJlc29sdmVyKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENPTVB0cjxJ
VW5rbm93bj4gY2FuY2VsQ29va2llOworICAgIFZlY3RvcjxVQ2hhcj4gdXJsU291cmNlID0gdXJs
LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCk7CisKKyAgICBBc3luY0NhbGxiYWNrKiBj
YWxsYmFjayA9IG5ldyBBc3luY0NhbGxiYWNrKHRoaXMsIGZhbHNlKTsKKworICAgIGlmIChGQUlM
RUQobV9zb3VyY2VSZXNvbHZlci0+QmVnaW5DcmVhdGVPYmplY3RGcm9tVVJMKHVybFNvdXJjZS5k
YXRhKCksIE1GX1JFU09MVVRJT05fTUVESUFTT1VSQ0UsIG51bGxwdHIsICZjYW5jZWxDb29raWUs
IGNhbGxiYWNrLCBudWxscHRyKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5k
Q3JlYXRlZE1lZGlhU291cmNlKElNRkFzeW5jUmVzdWx0KiBhc3luY1Jlc3VsdCkKK3sKKyAgICBN
Rl9PQkpFQ1RfVFlQRSBvYmplY3RUeXBlOworICAgIENPTVB0cjxJVW5rbm93bj4gc291cmNlOwor
CisgICAgSFJFU1VMVCBociA9IG1fc291cmNlUmVzb2x2ZXItPkVuZENyZWF0ZU9iamVjdEZyb21V
UkwoYXN5bmNSZXN1bHQsICZvYmplY3RUeXBlLCAmc291cmNlKTsKKyAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaHIgPSBzb3VyY2UtPlF1ZXJ5SW50ZXJm
YWNlKElJRF9QUFZfQVJHUygmbV9tZWRpYVNvdXJjZSkpOworICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBociA9IGFzeW5jUmVzdWx0LT5HZXRTdGF0dXMo
KTsKKyAgICBtX2xvYWRpbmdQcm9ncmVzcyA9IFNVQ0NFRURFRChocik7CisKKyAgICBjYWxsT25N
YWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgIG9uQ3JlYXRlZE1lZGlhU291cmNlKCk7CisgICAg
fSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OmVuZEdldEV2ZW50KElNRkFzeW5jUmVzdWx0KiBhc3luY1Jlc3VsdCkKK3sK
KyAgICBDT01QdHI8SU1GTWVkaWFFdmVudD4gZXZlbnQ7CisKKyAgICAvLyBHZXQgdGhlIGV2ZW50
IGZyb20gdGhlIGV2ZW50IHF1ZXVlLgorICAgIEhSRVNVTFQgaHIgPSBtX21lZGlhU2Vzc2lvbi0+
RW5kR2V0RXZlbnQoYXN5bmNSZXN1bHQsICZldmVudCk7CisgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEdldCB0aGUgZXZlbnQgdHlwZS4KKyAgICBN
ZWRpYUV2ZW50VHlwZSBtZWRpYUV2ZW50VHlwZTsKKyAgICBociA9IGV2ZW50LT5HZXRUeXBlKCZt
ZWRpYUV2ZW50VHlwZSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHN3aXRjaCAobWVkaWFFdmVudFR5cGUpIHsKKyAgICBjYXNlIE1FU2Vzc2lvblRv
cG9sb2d5U2V0OgorICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgICAg
ICBvblRvcG9sb2d5U2V0KCk7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgTUVTZXNzaW9uQ2xvc2VkOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobWVk
aWFFdmVudFR5cGUgIT0gTUVTZXNzaW9uQ2xvc2VkKSB7CisgICAgICAgIC8vIEZvciBhbGwgb3Ro
ZXIgZXZlbnRzLCBhc2sgdGhlIG1lZGlhIHNlc3Npb24gZm9yIHRoZQorICAgICAgICAvLyBuZXh0
IGV2ZW50IGluIHRoZSBxdWV1ZS4KKyAgICAgICAgQXN5bmNDYWxsYmFjayogY2FsbGJhY2sgPSBu
ZXcgQXN5bmNDYWxsYmFjayh0aGlzLCB0cnVlKTsKKworICAgICAgICBociA9IG1fbWVkaWFTZXNz
aW9uLT5CZWdpbkdldEV2ZW50KGNhbGxiYWNrLCBudWxscHRyKTsKKyAgICAgICAgaWYgKEZBSUxF
RChocikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVU
b3BvbG9neUZyb21Tb3VyY2UoKQoreworICAgIC8vIENyZWF0ZSBhIG5ldyB0b3BvbG9neS4KKyAg
ICBpZiAoRkFJTEVEKE1GQ3JlYXRlVG9wb2xvZ3koJm1fdG9wb2xvZ3kpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gQ3JlYXRlIHRoZSBwcmVzZW50YXRpb24gZGVzY3JpcHRvciBm
b3IgdGhlIG1lZGlhIHNvdXJjZS4KKyAgICBpZiAoRkFJTEVEKG1fbWVkaWFTb3VyY2UtPkNyZWF0
ZVByZXNlbnRhdGlvbkRlc2NyaXB0b3IoJm1fc291cmNlUEQpKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gR2V0IHRoZSBudW1iZXIgb2Ygc3RyZWFtcyBpbiB0aGUgbWVkaWEgc291
cmNlLgorICAgIERXT1JEIHNvdXJjZVN0cmVhbXMgPSAwOworICAgIGlmIChGQUlMRUQobV9zb3Vy
Y2VQRC0+R2V0U3RyZWFtRGVzY3JpcHRvckNvdW50KCZzb3VyY2VTdHJlYW1zKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIEZvciBlYWNoIHN0cmVhbSwgY3JlYXRlIHRoZSB0b3Bv
bG9neSBub2RlcyBhbmQgYWRkIHRoZW0gdG8gdGhlIHRvcG9sb2d5LgorICAgIGZvciAoRFdPUkQg
aSA9IDA7IGkgPCBzb3VyY2VTdHJlYW1zOyBpKyspIHsKKyAgICAgICAgaWYgKCFhZGRCcmFuY2hU
b1BhcnRpYWxUb3BvbG9neShpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OmFkZEJyYW5jaFRvUGFydGlhbFRvcG9sb2d5KGludCBzdHJlYW0pCit7CisgICAgLy8g
R2V0IHRoZSBzdHJlYW0gZGVzY3JpcHRvciBmb3IgdGhpcyBzdHJlYW0uCisgICAgQ09NUHRyPElN
RlN0cmVhbURlc2NyaXB0b3I+IHNvdXJjZVNEOworICAgIEJPT0wgc2VsZWN0ZWQgPSBGQUxTRTsK
KyAgICBpZiAoRkFJTEVEKG1fc291cmNlUEQtPkdldFN0cmVhbURlc2NyaXB0b3JCeUluZGV4KHN0
cmVhbSwgJnNlbGVjdGVkLCAmc291cmNlU0QpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gQ3JlYXRlIHRoZSB0b3BvbG9neSBicmFuY2ggb25seSBpZiB0aGUgc3RyZWFtIGlzIHNl
bGVjdGVkLgorICAgIC8vIE90aGVyd2lzZSwgZG8gbm90aGluZy4KKyAgICBpZiAoIXNlbGVjdGVk
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIENyZWF0ZSBhIHNvdXJjZSBub2RlIGZv
ciB0aGlzIHN0cmVhbS4KKyAgICBDT01QdHI8SU1GVG9wb2xvZ3lOb2RlPiBzb3VyY2VOb2RlOwor
ICAgIGlmICghY3JlYXRlU291cmNlU3RyZWFtTm9kZShzb3VyY2VTRCwgc291cmNlTm9kZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENPTVB0cjxJTUZUb3BvbG9neU5vZGU+IG91dHB1
dE5vZGU7CisgICAgaWYgKCFjcmVhdGVPdXRwdXROb2RlKHNvdXJjZVNELCBvdXRwdXROb2RlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQWRkIGJvdGggbm9kZXMgdG8gdGhlIHRv
cG9sb2d5LgorICAgIGlmIChGQUlMRUQobV90b3BvbG9neS0+QWRkTm9kZShzb3VyY2VOb2RlLmdl
dCgpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChGQUlMRUQobV90b3BvbG9n
eS0+QWRkTm9kZShvdXRwdXROb2RlLmdldCgpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIENvbm5lY3QgdGhlIHNvdXJjZSBub2RlIHRvIHRoZSBvdXRwdXQgbm9kZS4KKyAgICBp
ZiAoRkFJTEVEKHNvdXJjZU5vZGUtPkNvbm5lY3RPdXRwdXQoMCwgb3V0cHV0Tm9kZS5nZXQoKSwg
MCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworTFJF
U1VMVCBDQUxMQkFDSyBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvVmll
d1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBs
UGFyYW0pCit7CisgICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFt
LCBsUGFyYW0pOworfQorCitMUENXU1RSIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6cmVnaXN0ZXJWaWRlb1dpbmRvd0NsYXNzKCkKK3sKKyAgICBjb25zdCBMUENXU1RSIGtWaWRl
b1dpbmRvd0NsYXNzTmFtZSA9IEwiV2ViVmlkZW9XaW5kb3dDbGFzcyI7CisKKyAgICBzdGF0aWMg
Ym9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7CisgICAgaWYgKGhhdmVSZWdp
c3RlcmVkV2luZG93Q2xhc3MpCisgICAgICAgIHJldHVybiBrVmlkZW9XaW5kb3dDbGFzc05hbWU7
CisKKyAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKKworICAgIFdORENMQVNT
RVggd2NleDsKKworICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOworCisgICAg
d2NleC5zdHlsZSA9IENTX0RCTENMS1M7CisgICAgd2NleC5scGZuV25kUHJvYyA9IFZpZGVvVmll
d1duZFByb2M7CisgICAgd2NleC5jYkNsc0V4dHJhID0gMDsKKyAgICB3Y2V4LmNiV25kRXh0cmEg
PSAwOworICAgIHdjZXguaEluc3RhbmNlID0gbnVsbHB0cjsKKyAgICB3Y2V4LmhJY29uID0gbnVs
bHB0cjsKKyAgICB3Y2V4LmhDdXJzb3IgPSA6OkxvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAg
ICB3Y2V4LmhickJhY2tncm91bmQgPSBudWxscHRyOworICAgIHdjZXgubHBzek1lbnVOYW1lID0g
bnVsbHB0cjsKKyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgPSBrVmlkZW9XaW5kb3dDbGFzc05hbWU7
CisgICAgd2NleC5oSWNvblNtID0gbnVsbHB0cjsKKworICAgIGlmIChSZWdpc3RlckNsYXNzRXgo
JndjZXgpKQorICAgICAgICByZXR1cm4ga1ZpZGVvV2luZG93Q2xhc3NOYW1lOworCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpjcmVhdGVWaWRlb1dpbmRvdygpCit7CisgICAgSFdORCBoV25kUGFyZW50ID0gbnVsbHB0cjsK
KyAgICBGcmFtZVZpZXcqIHZpZXcgPSBudWxscHRyOworICAgIGlmICghbV9wbGF5ZXIgfHwgIW1f
cGxheWVyLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpIHx8ICFtX3BsYXllci0+Y2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoKS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZpZXcgPSBtX3Bs
YXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIGlm
ICghdmlldyB8fCAhdmlldy0+aG9zdFdpbmRvdygpKQorICAgICAgICByZXR1cm47CisgICAgaFdu
ZFBhcmVudCA9IHZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisKKyAg
ICBtX2h3bmRWaWRlbyA9IENyZWF0ZVdpbmRvd0V4KFdTX0VYX05PQUNUSVZBVEUgfCBXU19FWF9U
UkFOU1BBUkVOVCwgcmVnaXN0ZXJWaWRlb1dpbmRvd0NsYXNzKCksIDAsIFdTX0NISUxEIHwgV1Nf
VklTSUJMRSB8IFdTX0NMSVBTSUJMSU5HUyB8IFdTX0NMSVBDSElMRFJFTiwKKyAgICAgICAgMCwg
MCwgMCwgMCwgaFduZFBhcmVudCwgMCwgMCwgMCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpkZXN0cm95VmlkZW9XaW5kb3coKQoreworICAgIGlmIChtX2h3
bmRWaWRlbykKKyAgICAgICAgRGVzdHJveVdpbmRvdyhtX2h3bmRWaWRlbyk7Cit9CisKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVPdXRwdXROb2RlKENPTVB0
cjxJTUZTdHJlYW1EZXNjcmlwdG9yPiBzb3VyY2VTRCwgQ09NUHRyPElNRlRvcG9sb2d5Tm9kZT4m
IG5vZGUpCit7CisgICAgaWYgKCFzb3VyY2VTRCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisj
aWZuZGVmIE5ERUJVRworICAgIC8vIEdldCB0aGUgc3RyZWFtIElELgorICAgIERXT1JEIHN0cmVh
bUlEID0gMDsKKyAgICBzb3VyY2VTRC0+R2V0U3RyZWFtSWRlbnRpZmllcigmc3RyZWFtSUQpOyAv
LyBKdXN0IGZvciBkZWJ1Z2dpbmcsIGlnbm9yZSBhbnkgZmFpbHVyZXMuCisjZW5kaWYKKworICAg
IENPTVB0cjxJTUZNZWRpYVR5cGVIYW5kbGVyPiBoYW5kbGVyOworICAgIGlmIChGQUlMRUQoc291
cmNlU0QtPkdldE1lZGlhVHlwZUhhbmRsZXIoJmhhbmRsZXIpKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgR1VJRCBndWlkTWFqb3JUeXBlID0gR1VJRF9OVUxMOworICAgIGlmIChGQUlM
RUQoaGFuZGxlci0+R2V0TWFqb3JUeXBlKCZndWlkTWFqb3JUeXBlKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhIGRvd25zdHJlYW0gbm9kZS4KKyAgICBpZiAoRkFJ
TEVEKE1GQ3JlYXRlVG9wb2xvZ3lOb2RlKE1GX1RPUE9MT0dZX09VVFBVVF9OT0RFLCAmbm9kZSkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgYW4gSU1GQWN0aXZhdGUg
b2JqZWN0IGZvciB0aGUgcmVuZGVyZXIsIGJhc2VkIG9uIHRoZSBtZWRpYSB0eXBlLgorICAgIENP
TVB0cjxJTUZBY3RpdmF0ZT4gcmVuZGVyZXJBY3RpdmF0ZTsKKyAgICBpZiAoTUZNZWRpYVR5cGVf
QXVkaW8gPT0gZ3VpZE1ham9yVHlwZSkgeworICAgICAgICAvLyBDcmVhdGUgdGhlIGF1ZGlvIHJl
bmRlcmVyLgorICAgICAgICBpZiAoRkFJTEVEKE1GQ3JlYXRlQXVkaW9SZW5kZXJlckFjdGl2YXRl
KCZyZW5kZXJlckFjdGl2YXRlKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IG1faGFzQXVkaW8gPSB0cnVlOworICAgIH0gZWxzZSBpZiAoTUZNZWRpYVR5cGVfVmlkZW8gPT0g
Z3VpZE1ham9yVHlwZSkgeworICAgICAgICAvLyBDcmVhdGUgdGhlIHZpZGVvIHJlbmRlcmVyLgor
ICAgICAgICBpZiAoRkFJTEVEKE1GQ3JlYXRlVmlkZW9SZW5kZXJlckFjdGl2YXRlKG1faHduZFZp
ZGVvLCAmcmVuZGVyZXJBY3RpdmF0ZSkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBtX2hhc1ZpZGVvID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gU2V0IHRoZSBJQWN0aXZhdGUgb2JqZWN0IG9uIHRoZSBvdXRwdXQgbm9kZS4K
KyAgICBpZiAoRkFJTEVEKG5vZGUtPlNldE9iamVjdChyZW5kZXJlckFjdGl2YXRlLmdldCgpKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3JlYXRlU291cmNlU3RyZWFtTm9kZShD
T01QdHI8SU1GU3RyZWFtRGVzY3JpcHRvcj4gc291cmNlU0QsIENPTVB0cjxJTUZUb3BvbG9neU5v
ZGU+JiBub2RlKQoreworICAgIGlmICghbV9tZWRpYVNvdXJjZSB8fCAhbV9zb3VyY2VQRCB8fCAh
c291cmNlU0QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENyZWF0ZSB0aGUgc291
cmNlLXN0cmVhbSBub2RlLgorICAgIEhSRVNVTFQgaHIgPSBNRkNyZWF0ZVRvcG9sb2d5Tm9kZShN
Rl9UT1BPTE9HWV9TT1VSQ0VTVFJFQU1fTk9ERSwgJm5vZGUpOworICAgIGlmIChGQUlMRUQoaHIp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTZXQgYXR0cmlidXRlOiBQb2ludGVy
IHRvIHRoZSBtZWRpYSBzb3VyY2UuCisgICAgaHIgPSBub2RlLT5TZXRVbmtub3duKE1GX1RPUE9O
T0RFX1NPVVJDRSwgbV9tZWRpYVNvdXJjZS5nZXQoKSk7CisgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFNldCBhdHRyaWJ1dGU6IFBvaW50ZXIgdG8g
dGhlIHByZXNlbnRhdGlvbiBkZXNjcmlwdG9yLgorICAgIGhyID0gbm9kZS0+U2V0VW5rbm93bihN
Rl9UT1BPTk9ERV9QUkVTRU5UQVRJT05fREVTQ1JJUFRPUiwgbV9zb3VyY2VQRC5nZXQoKSk7Cisg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFNldCBh
dHRyaWJ1dGU6IFBvaW50ZXIgdG8gdGhlIHN0cmVhbSBkZXNjcmlwdG9yLgorICAgIGhyID0gbm9k
ZS0+U2V0VW5rbm93bihNRl9UT1BPTk9ERV9TVFJFQU1fREVTQ1JJUFRPUiwgc291cmNlU0QuZ2V0
KCkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246
Om9uQ3JlYXRlZE1lZGlhU291cmNlKCkKK3sKKyAgICBpZiAoIWNyZWF0ZVRvcG9sb2d5RnJvbVNv
dXJjZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTZXQgdGhlIHRvcG9sb2d5IG9uIHRo
ZSBtZWRpYSBzZXNzaW9uLgorICAgIEhSRVNVTFQgaHIgPSBtX21lZGlhU2Vzc2lvbi0+U2V0VG9w
b2xvZ3koMCwgbV90b3BvbG9neS5nZXQoKSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6b25Ub3BvbG9neVNl
dCgpCit7CisgICAgaWYgKEZBSUxFRChNRkdldFNlcnZpY2UobV9tZWRpYVNlc3Npb24uZ2V0KCks
IE1SX1ZJREVPX1JFTkRFUl9TRVJWSUNFLCBJSURfUFBWX0FSR1MoJm1fdmlkZW9EaXNwbGF5KSkp
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV92aWRlb0Rpc3BsYXkpOworCisgICAg
UkVDVCByYyA9IHsgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSB9OworICAg
IG1fdmlkZW9EaXNwbGF5LT5TZXRWaWRlb1Bvc2l0aW9uKG51bGxwdHIsICZyYyk7CisKKyAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisKKyAgICBBU1NFUlQo
bV9wbGF5ZXIpOworICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworCisgICAgcGxh
eSgpOworICAgIG1fcGxheWVyLT5wbGF5YmFja1N0YXRlQ2hhbmdlZCgpOworfQorCitNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6OkFzeW5jQ2FsbGJhY2so
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uKiBtZWRpYVBsYXllciwgYm9vbCBldmVu
dCkKKyAgICA6IG1fcmVmQ291bnQoMCkKKyAgICAsIG1fbWVkaWFQbGF5ZXIobWVkaWFQbGF5ZXIp
CisgICAgLCBtX2V2ZW50KGV2ZW50KQoreworfQorCitNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6On5Bc3luY0NhbGxiYWNrKCkKK3sKK30KKworSFJFU1VM
VCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6OlF1ZXJ5
SW50ZXJmYWNlKFJFRklJRCByaWlkLCBfX1JQQ19fZGVyZWZfb3V0IHZvaWQgX19SUENfRkFSICpf
X1JQQ19GQVIgKnBwdk9iamVjdCkKK3sKKyAgICBpZiAoIUlzRXF1YWxHVUlEKHJpaWQsIElJRF9J
TUZBc3luY0NhbGxiYWNrKSkgeworICAgICAgICAqcHB2T2JqZWN0ID0gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7CisgICAgfQorICAgICpwcHZPYmplY3QgPSB0aGlzOwor
ICAgIEFkZFJlZigpOworICAgIHJldHVybiBTX09LOworfQorCitVTE9ORyBTVERNRVRIT0RDQUxM
VFlQRSBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6OkFk
ZFJlZigpCit7CisgICAgbV9yZWZDb3VudCsrOworICAgIHJldHVybiBtX3JlZkNvdW50OworfQor
CitVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkFzeW5jQ2FsbGJhY2s6OlJlbGVhc2UoKQoreworICAgIG1fcmVmQ291bnQtLTsKKyAgICBV
TE9ORyByZWZDb3VudCA9IG1fcmVmQ291bnQ7CisgICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAg
ZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNvdW50OworfQorCitIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFj
azo6R2V0UGFyYW1ldGVycyhfX1JQQ19fb3V0IERXT1JEICpwZHdGbGFncywgX19SUENfX291dCBE
V09SRCAqcGR3UXVldWUpCit7CisgICAgLy8gUmV0dXJuaW5nIEVfTk9USU1QTCBnaXZlcyBkZWZh
dWx0IHZhbHVlcy4KKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFj
azo6SW52b2tlKF9fUlBDX19pbl9vcHQgSU1GQXN5bmNSZXN1bHQgKnBBc3luY1Jlc3VsdCkKK3sK
KyAgICBpZiAobV9ldmVudCkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+ZW5kR2V0RXZlbnQocEFz
eW5jUmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPmVuZENyZWF0ZWRN
ZWRpYVNvdXJjZShwQXN5bmNSZXN1bHQpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKIH0KIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bi5oCShyZXZpc2lvbiAxNzgyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDEzICsyNCwxOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSAiQ09N
UHRyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAKKyNpbmNsdWRlIDxNZmFw
aS5oPgorI2luY2x1ZGUgPE1maWRsLmg+CisjaW5jbHVkZSA8ZXZyLmg+CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uIDogcHVi
bGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CiBwdWJsaWM6CiAgICAgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uKE1lZGlhUGxheWVyKik7CisgICAgfk1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbigpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFF
bmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8TWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBjcmVhdGUoTWVkaWFQbGF5ZXIqKTsKQEAgLTY3LDgg
KzczLDYwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpOwogCiBwcml2YXRlOgotCiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxh
eWVyOworICAgIEludFNpemUgbV9zaXplOworICAgIGJvb2wgbV92aXNpYmxlOworICAgIGJvb2wg
bV9sb2FkaW5nUHJvZ3Jlc3M7CisgICAgYm9vbCBtX3BhdXNlZDsKKyAgICBib29sIG1faGFzQXVk
aW87CisgICAgYm9vbCBtX2hhc1ZpZGVvOworICAgIEhXTkQgbV9od25kVmlkZW87CisgICAgTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworICAgIEludFJlY3QgbV9sYXN0UGFp
bnRSZWN0OworCisgICAgQ09NUHRyPElNRk1lZGlhU2Vzc2lvbj4gbV9tZWRpYVNlc3Npb247Cisg
ICAgQ09NUHRyPElNRlNvdXJjZVJlc29sdmVyPiBtX3NvdXJjZVJlc29sdmVyOworICAgIENPTVB0
cjxJTUZNZWRpYVNvdXJjZT4gbV9tZWRpYVNvdXJjZTsKKyAgICBDT01QdHI8SU1GVG9wb2xvZ3k+
IG1fdG9wb2xvZ3k7CisgICAgQ09NUHRyPElNRlByZXNlbnRhdGlvbkRlc2NyaXB0b3I+IG1fc291
cmNlUEQ7CisgICAgQ09NUHRyPElNRlZpZGVvRGlzcGxheUNvbnRyb2w+IG1fdmlkZW9EaXNwbGF5
OworCisgICAgYm9vbCBjcmVhdGVTZXNzaW9uKCk7CisgICAgYm9vbCBlbmRTZXNzaW9uKCk7Cisg
ICAgYm9vbCBzdGFydENyZWF0ZU1lZGlhU291cmNlKGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICBi
b29sIGVuZENyZWF0ZWRNZWRpYVNvdXJjZShJTUZBc3luY1Jlc3VsdCopOworICAgIGJvb2wgZW5k
R2V0RXZlbnQoSU1GQXN5bmNSZXN1bHQqKTsKKyAgICBib29sIGNyZWF0ZVRvcG9sb2d5RnJvbVNv
dXJjZSgpOworICAgIGJvb2wgYWRkQnJhbmNoVG9QYXJ0aWFsVG9wb2xvZ3koaW50IHN0cmVhbSk7
CisgICAgYm9vbCBjcmVhdGVPdXRwdXROb2RlKENPTVB0cjxJTUZTdHJlYW1EZXNjcmlwdG9yPiBz
b3VyY2VTRCwgQ09NUHRyPElNRlRvcG9sb2d5Tm9kZT4mKTsKKyAgICBib29sIGNyZWF0ZVNvdXJj
ZVN0cmVhbU5vZGUoQ09NUHRyPElNRlN0cmVhbURlc2NyaXB0b3I+IHNvdXJjZVNELCBDT01QdHI8
SU1GVG9wb2xvZ3lOb2RlPiYpOworCisgICAgdm9pZCBvbkNyZWF0ZWRNZWRpYVNvdXJjZSgpOwor
ICAgIHZvaWQgb25Ub3BvbG9neVNldCgpOworCisgICAgTFBDV1NUUiByZWdpc3RlclZpZGVvV2lu
ZG93Q2xhc3MoKTsKKyAgICB2b2lkIGNyZWF0ZVZpZGVvV2luZG93KCk7CisgICAgdm9pZCBkZXN0
cm95VmlkZW9XaW5kb3coKTsKKworICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFZpZGVvVmll
d1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBs
UGFyYW0pOworCisgICAgY2xhc3MgQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBJTUZBc3luY0NhbGxi
YWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFzeW5jQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uKiwgYm9vbCBldmVudCk7CisgICAgICAgIH5Bc3luY0NhbGxiYWNr
KCk7CisKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50
ZXJmYWNlKFJFRklJRCByaWlkLCBfX1JQQ19fZGVyZWZfb3V0IHZvaWQgX19SUENfRkFSICpfX1JQ
Q19GQVIgKnBwdk9iamVjdCkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgVUxPTkcgU1RETUVU
SE9EQ0FMTFRZUEUgQWRkUmVmKCkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgVUxPTkcgU1RE
TUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSgpIG92ZXJyaWRlOworCisgICAgICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRQYXJhbWV0ZXJzKF9fUlBDX19vdXQgRFdPUkQgKnBk
d0ZsYWdzLCBfX1JQQ19fb3V0IERXT1JEICpwZHdRdWV1ZSkgb3ZlcnJpZGU7CisgICAgICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBJbnZva2UoX19SUENfX2luX29wdCBJTUZB
c3luY1Jlc3VsdCAqcEFzeW5jUmVzdWx0KSBvdmVycmlkZTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIFVMT05HIG1fcmVmQ291bnQ7CisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbiogbV9tZWRpYVBsYXllcjsKKyAgICAgICAgYm9vbCBtX2V2ZW50OworICAgIH07CiAK
IH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244914</attachid>
            <date>2015-01-19 11:59:04 -0800</date>
            <delta_ts>2015-01-19 13:03:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140337-20150119205906.patch</filename>
            <type>text/plain</type>
            <size>25751</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODYzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE1LTAxLTE4ICBwZWF2b0Bv
dXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgorCisgICAgICAgIFtXaW5DYWlyb11bVmlk
ZW9dIFdpbmRvd3MgTWVkaWEgRm91bmRhdGlvbiBpbXBsZW1lbnRhdGlvbiBpcyBub3QgY29tcGxl
dGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQw
MzM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhaW1zIHRvIGNvbXBsZXRlIHNvbWUgb2YgdGhlIG1ldGhvZHMgd2hpY2ggYXJlIG5v
dCBpbXBsZW1lbnRlZC4KKyAgICAgICAgQ3VycmVudGx5LCBvbmx5IE1QNCBpcyBzdXBwb3J0ZWQu
CisgICAgICAgIFZpZGVvIGlzIHJlbmRlcmVkIGluIGEgY2hpbGQgd2luZG93IG9mIHRoZSBtYWlu
IHdpbmRvdy4KKyAgICAgICAgV2Ugc2hvdWxkIGV2ZW50dWFsbHkgcmVuZGVyIHRoZSB2aWRlbyBk
aXJlY3RseSBpbiB0aGUgbWFpbiB3aW5kb3csCisgICAgICAgIGJ5IHJlYWRpbmcgYW5kIHBhaW50
aW5nIGluZGl2aWR1YWwgdmlkZW8gZnJhbWVzIGZyb20gdGhlIHN0cmVhbS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFGb3VuZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpsb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6bmF0
dXJhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYUZvdW5kYXRpb246Omhhc0F1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnBhdXNlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnJlYWR5U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpkaWRMb2Fk
aW5nUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5kU2Vzc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnN0YXJ0Q3JlYXRl
TWVkaWFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjplbmRDcmVhdGVkTWVkaWFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjplbmRHZXRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZVRvcG9sb2d5
RnJvbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb246OmFkZEJyYW5jaFRvUGFydGlhbFRvcG9sb2d5KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6VmlkZW9WaWV3V25kUHJvYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnJlZ2lz
dGVyVmlkZW9XaW5kb3dDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZVZpZGVvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZGVzdHJveVZpZGVvV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3Jl
YXRlT3V0cHV0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OmNyZWF0ZVNvdXJjZVN0cmVhbU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpvbkNyZWF0ZWRNZWRpYVNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Om9u
VG9wb2xvZ3lTZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpBc3luY0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFjazo6fkFz
eW5jQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFG
b3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OkFzeW5jQ2FsbGJhY2s6OkFk
ZFJlZik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OkFzeW5jQ2FsbGJhY2s6OlJlbGVhc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpHZXRQYXJhbWV0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5
bmNDYWxsYmFjazo6SW52b2tlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmg6CisKIDIwMTUtMDEtMTcgIEJyaWFuIEou
IEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IGhpZ2hsaWdodCBkYXRhIGZvciBvdmVybGF5IHNob3VsZCB1c2UgcHJvdG9jb2wgdHlwZSBidWls
ZGVycwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bi5jcHAJKHJldmlzaW9uIDE3ODIzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNywxOCArMjcsNDIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uaCIKIAorI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAKICNpZiBVU0UoTUVESUFfRk9VTkRBVElPTikKIAotbmFtZXNwYWNlIFdlYkNv
cmUgeworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKLS8vIFRPRE86IEltcGxlbWVudCB2
aWRlbyBmdW5jdGlvbmFsaXR5IHVzaW5nIE1lZGlhIEZvdW5kYXRpb24KK25hbWVzcGFjZSBXZWJD
b3JlIHsKIAogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYUZvdW5kYXRpb24oTWVkaWFQbGF5ZXIqIHBsYXllcikgCiAgICAgOiBtX3BsYXll
cihwbGF5ZXIpCisgICAgLCBtX3Zpc2libGUoZmFsc2UpCisgICAgLCBtX2xvYWRpbmdQcm9ncmVz
cyhmYWxzZSkKKyAgICAsIG1fcGF1c2VkKGZhbHNlKQorICAgICwgbV9oYXNBdWRpbyhmYWxzZSkK
KyAgICAsIG1faGFzVmlkZW8oZmFsc2UpCisgICAgLCBtX2h3bmRWaWRlbyhudWxscHRyKQorICAg
ICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKKyAgICAsIG1fbWVkaWFT
ZXNzaW9uKG51bGxwdHIpCisgICAgLCBtX3NvdXJjZVJlc29sdmVyKG51bGxwdHIpCisgICAgLCBt
X21lZGlhU291cmNlKG51bGxwdHIpCisgICAgLCBtX3RvcG9sb2d5KG51bGxwdHIpCisgICAgLCBt
X3NvdXJjZVBEKG51bGxwdHIpCisgICAgLCBtX3ZpZGVvRGlzcGxheShudWxscHRyKQoreworICAg
IGNyZWF0ZVNlc3Npb24oKTsKKyAgICBjcmVhdGVWaWRlb1dpbmRvdygpOworfQorCitNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246On5NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb24oKQogeworICAgIGRlc3Ryb3lWaWRlb1dpbmRvdygpOworICAgIGVuZFNlc3Npb24oKTsK
IH0KIAogUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCkBAIC02
MCwxOSArODQsMjMgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246Ogog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Z2V0U3VwcG9ydGVkVHlw
ZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHR5cGVzID0gSGFzaFNldDxTdHJpbmc+KCk7CisgICAgdHlwZXMuYWRkKFN0cmluZygidmlkZW8v
bXA0IikpOwogfQogCiBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAo
cGFyYW1ldGVycy50eXBlLmlzTnVsbCgpIHx8IHBhcmFtZXRlcnMudHlwZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBpZiAocGFy
YW1ldGVycy50eXBlID09ICJ2aWRlby9tcDQiKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6
OklzU3VwcG9ydGVkOworCiAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OmxvYWQoY29uc3Qg
U3RyaW5nJikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpsb2FkKGNv
bnN0IFN0cmluZyYgdXJsKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhcnRDcmVh
dGVNZWRpYVNvdXJjZSh1cmwpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91
bmRhdGlvbjo6Y2FuY2VsTG9hZCgpCkBAIC04MiwzNSArMTEwLDQ3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjoKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OnBsYXkoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFt
X21lZGlhU2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgUFJPUFZBUklBTlQgdmFyU3Rh
cnQ7CisgICAgUHJvcFZhcmlhbnRJbml0KCZ2YXJTdGFydCk7CisgICAgdmFyU3RhcnQudnQgPSBW
VF9FTVBUWTsKKworICAgIEhSRVNVTFQgaHIgPSBtX21lZGlhU2Vzc2lvbi0+U3RhcnQobnVsbHB0
ciwgJnZhclN0YXJ0KTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBQcm9wVmFy
aWFudENsZWFyKCZ2YXJTdGFydCk7CisKKyAgICBtX3BhdXNlZCA9ICFTVUNDRUVERUQoaHIpOwog
fQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6cGF1c2UoKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFtX21lZGlhU2Vzc2lvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9wYXVzZWQgPSBTVUNDRUVERUQobV9tZWRpYVNlc3Npb24tPlBhdXNl
KCkpOwogfQogCiBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6bmF0
dXJhbFNpemUoKSBjb25zdCAKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJ
bnRTaXplKDAsIDApOworICAgIHJldHVybiBtX3NpemU7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFGb3VuZGF0aW9uOjpoYXNWaWRlbygpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1faGFzVmlkZW87CiB9CiAK
IGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpoYXNBdWRpbygpIGNvbnN0
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IG1faGFzQXVkaW87CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpzZXRWaXNpYmxlKGJvb2wpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBtX3Zpc2libGUgPSB2aXNpYmxlOwogfQogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6c2Vla2luZygpIGNvbnN0CkBAIC0xMjEsOCArMTYxLDcgQEAgYm9vbCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OgogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbjo6cGF1c2VkKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9wYXVzZWQ7CiB9CiAKIE1lZGlhUGxh
eWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpuZXR3
b3JrU3RhdGUoKSBjb25zdApAQCAtMTMzLDggKzE3Miw3IEBAIE1lZGlhUGxheWVyOjpOZXR3b3Jr
U3RhdGUgTWVkaWFQbGF5ZXJQcmkKIAogTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpyZWFkeVN0YXRlKCkgY29uc3QKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAg
cmV0dXJuIG1fcmVhZHlTdGF0ZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJh
bmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpidWZmZXJlZCgpIGNvbnN0
CkBAIC0xNDUsMTMgKzE4MywzMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2Vz
PiBNZWRpCiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpkaWRMb2Fk
aW5nUHJvZ3Jlc3MoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBtX2xvYWRpbmdQcm9ncmVzczsKIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnNldFNpemUoY29uc3QgSW50U2l6ZSYpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6c2V0U2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9zaXplID0gc2l6ZTsKKwor
ICAgIGlmICghbV92aWRlb0Rpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIExheW91dFNp
emUgc2Nyb2xsT2Zmc2V0OworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbnVsbHB0cjsKKyAgICBp
ZiAobV9wbGF5ZXIgJiYgbV9wbGF5ZXItPmNhY2hlZFJlc291cmNlTG9hZGVyKCkgJiYgbV9wbGF5
ZXItPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmRvY3VtZW50KCkpCisgICAgICAgIHZpZXcgPSBt
X3BsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAg
IGlmICh2aWV3KQorICAgICAgICBzY3JvbGxPZmZzZXQgPSB2aWV3LT5zY3JvbGxPZmZzZXRGb3JG
aXhlZFBvc2l0aW9uKCk7CisKKyAgICBpbnQgeFBvcyA9IC1zY3JvbGxPZmZzZXQud2lkdGgoKS50
b0ludCgpICsgbV9sYXN0UGFpbnRSZWN0LngoKTsKKyAgICBpbnQgeVBvcyA9IC1zY3JvbGxPZmZz
ZXQuaGVpZ2h0KCkudG9JbnQoKSArIG1fbGFzdFBhaW50UmVjdC55KCk7CisKKyAgICBpZiAobV9o
d25kVmlkZW8gJiYgIW1fbGFzdFBhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIDo6TW92ZVdp
bmRvdyhtX2h3bmRWaWRlbywgeFBvcywgeVBvcywgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSwgRkFMU0UpOworCisgICAgUkVDVCByYyA9IHsgMCwgMCwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSB9OworICAgIG1fdmlkZW9EaXNwbGF5LT5TZXRWaWRlb1Bvc2l0aW9uKG51
bGxwdHIsICZyYyk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCkBA
IC0xNjAsMTAgKzIxNywzOTcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b246OgogICAgICAgICB8fCAhbV9wbGF5ZXItPnZpc2libGUoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gVE9ETzogUGFpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSB2aWRlbyB0byB0aGUgY29u
dGV4dAorICAgIG1fbGFzdFBhaW50UmVjdCA9IHJlY3Q7CisKKyAgICAvLyBXZSBjdXJyZW50bHkg
bGV0IE1lZGlhIEZvdW5kYXRpb24gaGFuZGxlIHRoZSBkcmF3aW5nLCBieSBwcm92aWRpbmcgYSBo
YW5kbGUgdG8gdGhlIHdpbmRvdyB0byBkcmF3IGluLgorICAgIC8vIFdlIHNob3VsZCBpbnN0ZWFk
IHJlYWQgaW5kaXZpZHVhbCBmcmFtZXMgZnJvbSB0aGUgc3RyZWFtLCBhbmQgcGFpbnQgdGhlbSBp
bnRvIHRoZSBncmFwaGljcyBjb250ZXh0IGhlcmUuCisKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6Y3JlYXRlU2Vzc2lv
bigpCit7CisgICAgaWYgKEZBSUxFRChNRlN0YXJ0dXAoTUZfVkVSU0lPTiwgTUZTVEFSVFVQX0ZV
TEwpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKEZBSUxFRChNRkNyZWF0ZU1l
ZGlhU2Vzc2lvbihudWxscHRyLCAmbV9tZWRpYVNlc3Npb24pKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gR2V0IG5leHQgZXZlbnQuCisgICAgQXN5bmNDYWxsYmFjayogY2FsbGJh
Y2sgPSBuZXcgQXN5bmNDYWxsYmFjayh0aGlzLCB0cnVlKTsKKyAgICBIUkVTVUxUIGhyID0gbV9t
ZWRpYVNlc3Npb24tPkJlZ2luR2V0RXZlbnQoY2FsbGJhY2ssIG51bGxwdHIpOworICAgIEFTU0VS
VChTVUNDRUVERUQoaHIpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5kU2Vzc2lvbigpCit7CisgICAgaWYgKG1fbWVk
aWFTZXNzaW9uKSB7CisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5TaHV0ZG93bigpOworICAgICAg
ICBtX21lZGlhU2Vzc2lvbi0+UmVsZWFzZSgpOworICAgICAgICBtX21lZGlhU2Vzc2lvbiA9IG51
bGxwdHI7CisgICAgfQorCisgICAgSFJFU1VMVCBociA9IE1GU2h1dGRvd24oKTsKKyAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OnN0YXJ0Q3JlYXRlTWVkaWFTb3VyY2UoY29uc3Qg
U3RyaW5nJiB1cmwpCit7CisgICAgaWYgKEZBSUxFRChNRkNyZWF0ZVNvdXJjZVJlc29sdmVyKCZt
X3NvdXJjZVJlc29sdmVyKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENPTVB0cjxJ
VW5rbm93bj4gY2FuY2VsQ29va2llOworICAgIFZlY3RvcjxVQ2hhcj4gdXJsU291cmNlID0gdXJs
LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCk7CisKKyAgICBBc3luY0NhbGxiYWNrKiBj
YWxsYmFjayA9IG5ldyBBc3luY0NhbGxiYWNrKHRoaXMsIGZhbHNlKTsKKworICAgIGlmIChGQUlM
RUQobV9zb3VyY2VSZXNvbHZlci0+QmVnaW5DcmVhdGVPYmplY3RGcm9tVVJMKHVybFNvdXJjZS5k
YXRhKCksIE1GX1JFU09MVVRJT05fTUVESUFTT1VSQ0UsIG51bGxwdHIsICZjYW5jZWxDb29raWUs
IGNhbGxiYWNrLCBudWxscHRyKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6ZW5k
Q3JlYXRlZE1lZGlhU291cmNlKElNRkFzeW5jUmVzdWx0KiBhc3luY1Jlc3VsdCkKK3sKKyAgICBN
Rl9PQkpFQ1RfVFlQRSBvYmplY3RUeXBlOworICAgIENPTVB0cjxJVW5rbm93bj4gc291cmNlOwor
CisgICAgSFJFU1VMVCBociA9IG1fc291cmNlUmVzb2x2ZXItPkVuZENyZWF0ZU9iamVjdEZyb21V
UkwoYXN5bmNSZXN1bHQsICZvYmplY3RUeXBlLCAmc291cmNlKTsKKyAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaHIgPSBzb3VyY2UtPlF1ZXJ5SW50ZXJm
YWNlKElJRF9QUFZfQVJHUygmbV9tZWRpYVNvdXJjZSkpOworICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBociA9IGFzeW5jUmVzdWx0LT5HZXRTdGF0dXMo
KTsKKyAgICBtX2xvYWRpbmdQcm9ncmVzcyA9IFNVQ0NFRURFRChocik7CisKKyAgICBjYWxsT25N
YWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgIG9uQ3JlYXRlZE1lZGlhU291cmNlKCk7CisgICAg
fSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb246OmVuZEdldEV2ZW50KElNRkFzeW5jUmVzdWx0KiBhc3luY1Jlc3VsdCkKK3sK
KyAgICBDT01QdHI8SU1GTWVkaWFFdmVudD4gZXZlbnQ7CisKKyAgICAvLyBHZXQgdGhlIGV2ZW50
IGZyb20gdGhlIGV2ZW50IHF1ZXVlLgorICAgIEhSRVNVTFQgaHIgPSBtX21lZGlhU2Vzc2lvbi0+
RW5kR2V0RXZlbnQoYXN5bmNSZXN1bHQsICZldmVudCk7CisgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEdldCB0aGUgZXZlbnQgdHlwZS4KKyAgICBN
ZWRpYUV2ZW50VHlwZSBtZWRpYUV2ZW50VHlwZTsKKyAgICBociA9IGV2ZW50LT5HZXRUeXBlKCZt
ZWRpYUV2ZW50VHlwZSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHN3aXRjaCAobWVkaWFFdmVudFR5cGUpIHsKKyAgICBjYXNlIE1FU2Vzc2lvblRv
cG9sb2d5U2V0OgorICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgICAg
ICBvblRvcG9sb2d5U2V0KCk7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgTUVTZXNzaW9uQ2xvc2VkOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobWVk
aWFFdmVudFR5cGUgIT0gTUVTZXNzaW9uQ2xvc2VkKSB7CisgICAgICAgIC8vIEZvciBhbGwgb3Ro
ZXIgZXZlbnRzLCBhc2sgdGhlIG1lZGlhIHNlc3Npb24gZm9yIHRoZQorICAgICAgICAvLyBuZXh0
IGV2ZW50IGluIHRoZSBxdWV1ZS4KKyAgICAgICAgQXN5bmNDYWxsYmFjayogY2FsbGJhY2sgPSBu
ZXcgQXN5bmNDYWxsYmFjayh0aGlzLCB0cnVlKTsKKworICAgICAgICBociA9IG1fbWVkaWFTZXNz
aW9uLT5CZWdpbkdldEV2ZW50KGNhbGxiYWNrLCBudWxscHRyKTsKKyAgICAgICAgaWYgKEZBSUxF
RChocikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVU
b3BvbG9neUZyb21Tb3VyY2UoKQoreworICAgIC8vIENyZWF0ZSBhIG5ldyB0b3BvbG9neS4KKyAg
ICBpZiAoRkFJTEVEKE1GQ3JlYXRlVG9wb2xvZ3koJm1fdG9wb2xvZ3kpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gQ3JlYXRlIHRoZSBwcmVzZW50YXRpb24gZGVzY3JpcHRvciBm
b3IgdGhlIG1lZGlhIHNvdXJjZS4KKyAgICBpZiAoRkFJTEVEKG1fbWVkaWFTb3VyY2UtPkNyZWF0
ZVByZXNlbnRhdGlvbkRlc2NyaXB0b3IoJm1fc291cmNlUEQpKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gR2V0IHRoZSBudW1iZXIgb2Ygc3RyZWFtcyBpbiB0aGUgbWVkaWEgc291
cmNlLgorICAgIERXT1JEIHNvdXJjZVN0cmVhbXMgPSAwOworICAgIGlmIChGQUlMRUQobV9zb3Vy
Y2VQRC0+R2V0U3RyZWFtRGVzY3JpcHRvckNvdW50KCZzb3VyY2VTdHJlYW1zKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIEZvciBlYWNoIHN0cmVhbSwgY3JlYXRlIHRoZSB0b3Bv
bG9neSBub2RlcyBhbmQgYWRkIHRoZW0gdG8gdGhlIHRvcG9sb2d5LgorICAgIGZvciAoRFdPUkQg
aSA9IDA7IGkgPCBzb3VyY2VTdHJlYW1zOyBpKyspIHsKKyAgICAgICAgaWYgKCFhZGRCcmFuY2hU
b1BhcnRpYWxUb3BvbG9neShpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb246OmFkZEJyYW5jaFRvUGFydGlhbFRvcG9sb2d5KGludCBzdHJlYW0pCit7CisgICAgLy8g
R2V0IHRoZSBzdHJlYW0gZGVzY3JpcHRvciBmb3IgdGhpcyBzdHJlYW0uCisgICAgQ09NUHRyPElN
RlN0cmVhbURlc2NyaXB0b3I+IHNvdXJjZVNEOworICAgIEJPT0wgc2VsZWN0ZWQgPSBGQUxTRTsK
KyAgICBpZiAoRkFJTEVEKG1fc291cmNlUEQtPkdldFN0cmVhbURlc2NyaXB0b3JCeUluZGV4KHN0
cmVhbSwgJnNlbGVjdGVkLCAmc291cmNlU0QpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gQ3JlYXRlIHRoZSB0b3BvbG9neSBicmFuY2ggb25seSBpZiB0aGUgc3RyZWFtIGlzIHNl
bGVjdGVkLgorICAgIC8vIE90aGVyd2lzZSwgZG8gbm90aGluZy4KKyAgICBpZiAoIXNlbGVjdGVk
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIENyZWF0ZSBhIHNvdXJjZSBub2RlIGZv
ciB0aGlzIHN0cmVhbS4KKyAgICBDT01QdHI8SU1GVG9wb2xvZ3lOb2RlPiBzb3VyY2VOb2RlOwor
ICAgIGlmICghY3JlYXRlU291cmNlU3RyZWFtTm9kZShzb3VyY2VTRCwgc291cmNlTm9kZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENPTVB0cjxJTUZUb3BvbG9neU5vZGU+IG91dHB1
dE5vZGU7CisgICAgaWYgKCFjcmVhdGVPdXRwdXROb2RlKHNvdXJjZVNELCBvdXRwdXROb2RlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQWRkIGJvdGggbm9kZXMgdG8gdGhlIHRv
cG9sb2d5LgorICAgIGlmIChGQUlMRUQobV90b3BvbG9neS0+QWRkTm9kZShzb3VyY2VOb2RlLmdl
dCgpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChGQUlMRUQobV90b3BvbG9n
eS0+QWRkTm9kZShvdXRwdXROb2RlLmdldCgpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIENvbm5lY3QgdGhlIHNvdXJjZSBub2RlIHRvIHRoZSBvdXRwdXQgbm9kZS4KKyAgICBp
ZiAoRkFJTEVEKHNvdXJjZU5vZGUtPkNvbm5lY3RPdXRwdXQoMCwgb3V0cHV0Tm9kZS5nZXQoKSwg
MCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworTFJF
U1VMVCBDQUxMQkFDSyBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb246OlZpZGVvVmll
d1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBs
UGFyYW0pCit7CisgICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFt
LCBsUGFyYW0pOworfQorCitMUENXU1RSIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlv
bjo6cmVnaXN0ZXJWaWRlb1dpbmRvd0NsYXNzKCkKK3sKKyAgICBjb25zdCBMUENXU1RSIGtWaWRl
b1dpbmRvd0NsYXNzTmFtZSA9IEwiV2ViVmlkZW9XaW5kb3dDbGFzcyI7CisKKyAgICBzdGF0aWMg
Ym9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7CisgICAgaWYgKGhhdmVSZWdp
c3RlcmVkV2luZG93Q2xhc3MpCisgICAgICAgIHJldHVybiBrVmlkZW9XaW5kb3dDbGFzc05hbWU7
CisKKyAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKKworICAgIFdORENMQVNT
RVggd2NleDsKKworICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOworCisgICAg
d2NleC5zdHlsZSA9IENTX0RCTENMS1M7CisgICAgd2NleC5scGZuV25kUHJvYyA9IFZpZGVvVmll
d1duZFByb2M7CisgICAgd2NleC5jYkNsc0V4dHJhID0gMDsKKyAgICB3Y2V4LmNiV25kRXh0cmEg
PSAwOworICAgIHdjZXguaEluc3RhbmNlID0gbnVsbHB0cjsKKyAgICB3Y2V4LmhJY29uID0gbnVs
bHB0cjsKKyAgICB3Y2V4LmhDdXJzb3IgPSA6OkxvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAg
ICB3Y2V4LmhickJhY2tncm91bmQgPSBudWxscHRyOworICAgIHdjZXgubHBzek1lbnVOYW1lID0g
bnVsbHB0cjsKKyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgPSBrVmlkZW9XaW5kb3dDbGFzc05hbWU7
CisgICAgd2NleC5oSWNvblNtID0gbnVsbHB0cjsKKworICAgIGlmIChSZWdpc3RlckNsYXNzRXgo
JndjZXgpKQorICAgICAgICByZXR1cm4ga1ZpZGVvV2luZG93Q2xhc3NOYW1lOworCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9u
OjpjcmVhdGVWaWRlb1dpbmRvdygpCit7CisgICAgSFdORCBoV25kUGFyZW50ID0gbnVsbHB0cjsK
KyAgICBGcmFtZVZpZXcqIHZpZXcgPSBudWxscHRyOworICAgIGlmICghbV9wbGF5ZXIgfHwgIW1f
cGxheWVyLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpIHx8ICFtX3BsYXllci0+Y2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoKS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZpZXcgPSBtX3Bs
YXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIGlm
ICghdmlldyB8fCAhdmlldy0+aG9zdFdpbmRvdygpKQorICAgICAgICByZXR1cm47CisgICAgaFdu
ZFBhcmVudCA9IHZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisKKyAg
ICBtX2h3bmRWaWRlbyA9IENyZWF0ZVdpbmRvd0V4KFdTX0VYX05PQUNUSVZBVEUgfCBXU19FWF9U
UkFOU1BBUkVOVCwgcmVnaXN0ZXJWaWRlb1dpbmRvd0NsYXNzKCksIDAsIFdTX0NISUxEIHwgV1Nf
VklTSUJMRSB8IFdTX0NMSVBTSUJMSU5HUyB8IFdTX0NMSVBDSElMRFJFTiwKKyAgICAgICAgMCwg
MCwgMCwgMCwgaFduZFBhcmVudCwgMCwgMCwgMCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFGb3VuZGF0aW9uOjpkZXN0cm95VmlkZW9XaW5kb3coKQoreworICAgIGlmIChtX2h3
bmRWaWRlbykgeworICAgICAgICBEZXN0cm95V2luZG93KG1faHduZFZpZGVvKTsKKyAgICAgICAg
bV9od25kVmlkZW8gPSBudWxscHRyOworICAgIH0KK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb246OmNyZWF0ZU91dHB1dE5vZGUoQ09NUHRyPElNRlN0cmVhbURlc2Ny
aXB0b3I+IHNvdXJjZVNELCBDT01QdHI8SU1GVG9wb2xvZ3lOb2RlPiYgbm9kZSkKK3sKKyAgICBp
ZiAoIXNvdXJjZVNEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZm5kZWYgTkRFQlVHCisg
ICAgLy8gR2V0IHRoZSBzdHJlYW0gSUQuCisgICAgRFdPUkQgc3RyZWFtSUQgPSAwOworICAgIHNv
dXJjZVNELT5HZXRTdHJlYW1JZGVudGlmaWVyKCZzdHJlYW1JRCk7IC8vIEp1c3QgZm9yIGRlYnVn
Z2luZywgaWdub3JlIGFueSBmYWlsdXJlcy4KKyNlbmRpZgorCisgICAgQ09NUHRyPElNRk1lZGlh
VHlwZUhhbmRsZXI+IGhhbmRsZXI7CisgICAgaWYgKEZBSUxFRChzb3VyY2VTRC0+R2V0TWVkaWFU
eXBlSGFuZGxlcigmaGFuZGxlcikpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHVUlE
IGd1aWRNYWpvclR5cGUgPSBHVUlEX05VTEw7CisgICAgaWYgKEZBSUxFRChoYW5kbGVyLT5HZXRN
YWpvclR5cGUoJmd1aWRNYWpvclR5cGUpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gQ3JlYXRlIGEgZG93bnN0cmVhbSBub2RlLgorICAgIGlmIChGQUlMRUQoTUZDcmVhdGVUb3Bv
bG9neU5vZGUoTUZfVE9QT0xPR1lfT1VUUFVUX05PREUsICZub2RlKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhbiBJTUZBY3RpdmF0ZSBvYmplY3QgZm9yIHRoZSBy
ZW5kZXJlciwgYmFzZWQgb24gdGhlIG1lZGlhIHR5cGUuCisgICAgQ09NUHRyPElNRkFjdGl2YXRl
PiByZW5kZXJlckFjdGl2YXRlOworICAgIGlmIChNRk1lZGlhVHlwZV9BdWRpbyA9PSBndWlkTWFq
b3JUeXBlKSB7CisgICAgICAgIC8vIENyZWF0ZSB0aGUgYXVkaW8gcmVuZGVyZXIuCisgICAgICAg
IGlmIChGQUlMRUQoTUZDcmVhdGVBdWRpb1JlbmRlcmVyQWN0aXZhdGUoJnJlbmRlcmVyQWN0aXZh
dGUpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9oYXNBdWRpbyA9IHRy
dWU7CisgICAgfSBlbHNlIGlmIChNRk1lZGlhVHlwZV9WaWRlbyA9PSBndWlkTWFqb3JUeXBlKSB7
CisgICAgICAgIC8vIENyZWF0ZSB0aGUgdmlkZW8gcmVuZGVyZXIuCisgICAgICAgIGlmIChGQUlM
RUQoTUZDcmVhdGVWaWRlb1JlbmRlcmVyQWN0aXZhdGUobV9od25kVmlkZW8sICZyZW5kZXJlckFj
dGl2YXRlKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1faGFzVmlkZW8g
PSB0cnVlOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTZXQg
dGhlIElBY3RpdmF0ZSBvYmplY3Qgb24gdGhlIG91dHB1dCBub2RlLgorICAgIGlmIChGQUlMRUQo
bm9kZS0+U2V0T2JqZWN0KHJlbmRlcmVyQWN0aXZhdGUuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFGb3VuZGF0aW9uOjpjcmVhdGVTb3VyY2VTdHJlYW1Ob2RlKENPTVB0cjxJTUZTdHJlYW1E
ZXNjcmlwdG9yPiBzb3VyY2VTRCwgQ09NUHRyPElNRlRvcG9sb2d5Tm9kZT4mIG5vZGUpCit7Cisg
ICAgaWYgKCFtX21lZGlhU291cmNlIHx8ICFtX3NvdXJjZVBEIHx8ICFzb3VyY2VTRCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3JlYXRlIHRoZSBzb3VyY2Utc3RyZWFtIG5vZGUu
CisgICAgSFJFU1VMVCBociA9IE1GQ3JlYXRlVG9wb2xvZ3lOb2RlKE1GX1RPUE9MT0dZX1NPVVJD
RVNUUkVBTV9OT0RFLCAmbm9kZSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIFNldCBhdHRyaWJ1dGU6IFBvaW50ZXIgdG8gdGhlIG1lZGlhIHNv
dXJjZS4KKyAgICBociA9IG5vZGUtPlNldFVua25vd24oTUZfVE9QT05PREVfU09VUkNFLCBtX21l
ZGlhU291cmNlLmdldCgpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gU2V0IGF0dHJpYnV0ZTogUG9pbnRlciB0byB0aGUgcHJlc2VudGF0aW9u
IGRlc2NyaXB0b3IuCisgICAgaHIgPSBub2RlLT5TZXRVbmtub3duKE1GX1RPUE9OT0RFX1BSRVNF
TlRBVElPTl9ERVNDUklQVE9SLCBtX3NvdXJjZVBELmdldCgpKTsKKyAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU2V0IGF0dHJpYnV0ZTogUG9pbnRl
ciB0byB0aGUgc3RyZWFtIGRlc2NyaXB0b3IuCisgICAgaHIgPSBub2RlLT5TZXRVbmtub3duKE1G
X1RPUE9OT0RFX1NUUkVBTV9ERVNDUklQVE9SLCBzb3VyY2VTRC5nZXQoKSk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6b25DcmVhdGVkTWVkaWFT
b3VyY2UoKQoreworICAgIGlmICghY3JlYXRlVG9wb2xvZ3lGcm9tU291cmNlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFNldCB0aGUgdG9wb2xvZ3kgb24gdGhlIG1lZGlhIHNlc3Npb24u
CisgICAgSFJFU1VMVCBociA9IG1fbWVkaWFTZXNzaW9uLT5TZXRUb3BvbG9neSgwLCBtX3RvcG9s
b2d5LmdldCgpKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpvblRvcG9sb2d5U2V0KCkKK3sKKyAgICBpZiAo
RkFJTEVEKE1GR2V0U2VydmljZShtX21lZGlhU2Vzc2lvbi5nZXQoKSwgTVJfVklERU9fUkVOREVS
X1NFUlZJQ0UsIElJRF9QUFZfQVJHUygmbV92aWRlb0Rpc3BsYXkpKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX3ZpZGVvRGlzcGxheSk7CisKKyAgICBSRUNUIHJjID0geyAwLCAw
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpIH07CisgICAgbV92aWRlb0Rpc3BsYXkt
PlNldFZpZGVvUG9zaXRpb24obnVsbHB0ciwgJnJjKTsKKworICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YTsKKworICAgIEFTU0VSVChtX3BsYXllcik7CisgICAg
bV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBwbGF5KCk7CisgICAgbV9wbGF5
ZXItPnBsYXliYWNrU3RhdGVDaGFuZ2VkKCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbjo6QXN5bmNDYWxsYmFjazo6QXN5bmNDYWxsYmFjayhNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb24qIG1lZGlhUGxheWVyLCBib29sIGV2ZW50KQorICAgIDogbV9yZWZD
b3VudCgwKQorICAgICwgbV9tZWRpYVBsYXllcihtZWRpYVBsYXllcikKKyAgICAsIG1fZXZlbnQo
ZXZlbnQpCit7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmND
YWxsYmFjazo6fkFzeW5jQ2FsbGJhY2soKQoreworfQorCitIUkVTVUxUIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFjazo6UXVlcnlJbnRlcmZhY2UoUkVGSUlE
IHJpaWQsIF9fUlBDX19kZXJlZl9vdXQgdm9pZCBfX1JQQ19GQVIgKl9fUlBDX0ZBUiAqcHB2T2Jq
ZWN0KQoreworICAgIGlmICghSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lNRkFzeW5jQ2FsbGJhY2sp
KSB7CisgICAgICAgICpwcHZPYmplY3QgPSBudWxscHRyOworICAgICAgICByZXR1cm4gRV9OT0lO
VEVSRkFDRTsKKyAgICB9CisgICAgKnBwdk9iamVjdCA9IHRoaXM7CisgICAgQWRkUmVmKCk7Cisg
ICAgcmV0dXJuIFNfT0s7Cit9CisKK1VMT05HIFNURE1FVEhPRENBTExUWVBFIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFjazo6QWRkUmVmKCkKK3sKKyAgICBt
X3JlZkNvdW50Kys7CisgICAgcmV0dXJuIG1fcmVmQ291bnQ7Cit9CisKK1VMT05HIFNURE1FVEhP
RENBTExUWVBFIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbjo6QXN5bmNDYWxsYmFj
azo6UmVsZWFzZSgpCit7CisgICAgbV9yZWZDb3VudC0tOworICAgIFVMT05HIHJlZkNvdW50ID0g
bV9yZWZDb3VudDsKKyAgICBpZiAoIXJlZkNvdW50KQorICAgICAgICBkZWxldGUgdGhpczsKKyAg
ICByZXR1cm4gcmVmQ291bnQ7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpHZXRQYXJhbWV0ZXJz
KF9fUlBDX19vdXQgRFdPUkQgKnBkd0ZsYWdzLCBfX1JQQ19fb3V0IERXT1JEICpwZHdRdWV1ZSkK
K3sKKyAgICAvLyBSZXR1cm5pbmcgRV9OT1RJTVBMIGdpdmVzIGRlZmF1bHQgdmFsdWVzLgorICAg
IHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uOjpBc3luY0NhbGxiYWNrOjpJbnZva2UoX19SUENf
X2luX29wdCBJTUZBc3luY1Jlc3VsdCAqcEFzeW5jUmVzdWx0KQoreworICAgIGlmIChtX2V2ZW50
KQorICAgICAgICBtX21lZGlhUGxheWVyLT5lbmRHZXRFdmVudChwQXN5bmNSZXN1bHQpOworICAg
IGVsc2UKKyAgICAgICAgbV9tZWRpYVBsYXllci0+ZW5kQ3JlYXRlZE1lZGlhU291cmNlKHBBc3lu
Y1Jlc3VsdCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKwogfQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRp
YUZvdW5kYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmgJKHJldmlzaW9uIDE3
ODIzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXll
clByaXZhdGVNZWRpYUZvdW5kYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTMgKzI0LDE5
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlICJDT01QdHIuaCIKICNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGUuaCIKIAorI2luY2x1ZGUgPE1mYXBpLmg+CisjaW5jbHVkZSA8
TWZpZGwuaD4KKyNpbmNsdWRlIDxldnIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24gOiBwdWJsaWMgTWVkaWFQbGF5ZXJQ
cml2YXRlSW50ZXJmYWNlIHsKIHB1YmxpYzoKICAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb24oTWVkaWFQbGF5ZXIqKTsKKyAgICB+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3Vu
ZGF0aW9uKCk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2lu
ZVJlZ2lzdHJhcik7CiAKICAgICBzdGF0aWMgUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJ
bnRlcmZhY2U+IGNyZWF0ZShNZWRpYVBsYXllciopOwpAQCAtNjcsOCArNzMsNjAgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
Jik7CiAKIHByaXZhdGU6Ci0KICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CisgICAgSW50U2l6
ZSBtX3NpemU7CisgICAgYm9vbCBtX3Zpc2libGU7CisgICAgYm9vbCBtX2xvYWRpbmdQcm9ncmVz
czsKKyAgICBib29sIG1fcGF1c2VkOworICAgIGJvb2wgbV9oYXNBdWRpbzsKKyAgICBib29sIG1f
aGFzVmlkZW87CisgICAgSFdORCBtX2h3bmRWaWRlbzsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlT
dGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgSW50UmVjdCBtX2xhc3RQYWludFJlY3Q7CisKKyAgICBD
T01QdHI8SU1GTWVkaWFTZXNzaW9uPiBtX21lZGlhU2Vzc2lvbjsKKyAgICBDT01QdHI8SU1GU291
cmNlUmVzb2x2ZXI+IG1fc291cmNlUmVzb2x2ZXI7CisgICAgQ09NUHRyPElNRk1lZGlhU291cmNl
PiBtX21lZGlhU291cmNlOworICAgIENPTVB0cjxJTUZUb3BvbG9neT4gbV90b3BvbG9neTsKKyAg
ICBDT01QdHI8SU1GUHJlc2VudGF0aW9uRGVzY3JpcHRvcj4gbV9zb3VyY2VQRDsKKyAgICBDT01Q
dHI8SU1GVmlkZW9EaXNwbGF5Q29udHJvbD4gbV92aWRlb0Rpc3BsYXk7CisKKyAgICBib29sIGNy
ZWF0ZVNlc3Npb24oKTsKKyAgICBib29sIGVuZFNlc3Npb24oKTsKKyAgICBib29sIHN0YXJ0Q3Jl
YXRlTWVkaWFTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIGJvb2wgZW5kQ3JlYXRlZE1l
ZGlhU291cmNlKElNRkFzeW5jUmVzdWx0Kik7CisgICAgYm9vbCBlbmRHZXRFdmVudChJTUZBc3lu
Y1Jlc3VsdCopOworICAgIGJvb2wgY3JlYXRlVG9wb2xvZ3lGcm9tU291cmNlKCk7CisgICAgYm9v
bCBhZGRCcmFuY2hUb1BhcnRpYWxUb3BvbG9neShpbnQgc3RyZWFtKTsKKyAgICBib29sIGNyZWF0
ZU91dHB1dE5vZGUoQ09NUHRyPElNRlN0cmVhbURlc2NyaXB0b3I+IHNvdXJjZVNELCBDT01QdHI8
SU1GVG9wb2xvZ3lOb2RlPiYpOworICAgIGJvb2wgY3JlYXRlU291cmNlU3RyZWFtTm9kZShDT01Q
dHI8SU1GU3RyZWFtRGVzY3JpcHRvcj4gc291cmNlU0QsIENPTVB0cjxJTUZUb3BvbG9neU5vZGU+
Jik7CisKKyAgICB2b2lkIG9uQ3JlYXRlZE1lZGlhU291cmNlKCk7CisgICAgdm9pZCBvblRvcG9s
b2d5U2V0KCk7CisKKyAgICBMUENXU1RSIHJlZ2lzdGVyVmlkZW9XaW5kb3dDbGFzcygpOworICAg
IHZvaWQgY3JlYXRlVmlkZW9XaW5kb3coKTsKKyAgICB2b2lkIGRlc3Ryb3lWaWRlb1dpbmRvdygp
OworCisgICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgVmlkZW9WaWV3V25kUHJvYyhIV05EIGhX
bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CisKKyAgICBj
bGFzcyBBc3luY0NhbGxiYWNrIDogcHVibGljIElNRkFzeW5jQ2FsbGJhY2sgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgQXN5bmNDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRp
b24qLCBib29sIGV2ZW50KTsKKyAgICAgICAgfkFzeW5jQ2FsbGJhY2soKTsKKworICAgICAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIF9fUlBDX19kZXJlZl9vdXQgdm9pZCBfX1JQQ19GQVIgKl9fUlBDX0ZBUiAqcHB2T2JqZWN0
KSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRS
ZWYoKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBS
ZWxlYXNlKCkgb3ZlcnJpZGU7CisKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIEdldFBhcmFtZXRlcnMoX19SUENfX291dCBEV09SRCAqcGR3RmxhZ3MsIF9fUlBDX19v
dXQgRFdPUkQgKnBkd1F1ZXVlKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEludm9rZShfX1JQQ19faW5fb3B0IElNRkFzeW5jUmVzdWx0ICpwQXN5
bmNSZXN1bHQpIG92ZXJyaWRlOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVUxPTkcgbV9yZWZD
b3VudDsKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uKiBtX21lZGlh
UGxheWVyOworICAgICAgICBib29sIG1fZXZlbnQ7CisgICAgfTsKIAogfTsKIApJbmRleDogV2Vi
S2l0TGlicmFyaWVzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRMaWJyYXJpZXMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzg2NjApCisrKyBXZWJLaXRMaWJyYXJpZXMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMDEtMTkgIHBlYXZvQG91dGxvb2su
Y29tICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXVtWaWRlb10gV2lu
ZG93cyBNZWRpYSBGb3VuZGF0aW9uIGltcGxlbWVudGF0aW9uIGlzIG5vdCBjb21wbGV0ZWQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAzMzcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMaW5rIHdpdGgg
TWVkaWEgRm91bmRhdGlvbiBsaWJyYXJpZXMuCisKKyAgICAgICAgKiB3aW4vdG9vbHMvdnNwcm9w
cy9XaW5DYWlyby5wcm9wczoKKwogMjAxNS0wMS0wMSAgSmVmZiBNaWxsZXIgIDxqZWZmbUBhcHBs
ZS5jb20+CiAKICAgICAgICAgVXBkYXRlIHVzZXItdmlzaWJsZSBjb3B5cmlnaHQgc3RyaW5ncyB0
byBpbmNsdWRlIDIwMTUKSW5kZXg6IFdlYktpdExpYnJhcmllcy93aW4vdG9vbHMvdnNwcm9wcy9X
aW5DYWlyby5wcm9wcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3Zz
cHJvcHMvV2luQ2Fpcm8ucHJvcHMJKHJldmlzaW9uIDE3ODIzNykKKysrIFdlYktpdExpYnJhcmll
cy93aW4vdG9vbHMvdnNwcm9wcy9XaW5DYWlyby5wcm9wcwkod29ya2luZyBjb3B5KQpAQCAtOSw3
ICs5LDcgQEAKICAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU5fQ0FJUk89MTtXVEZf
UExBVEZPUk1fV0lOX0NBSVJPPTE7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nl
c3NvckRlZmluaXRpb25zPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEFk
ZGl0aW9uYWxEZXBlbmRlbmNpZXM+Y2Fpcm8ubGliO2xpYmpwZWcubGliO3pkbGwubGliO2xpYnBu
Zy5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4K
KyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmNhaXJvLmxpYjtsaWJqcGVnLmxpYjt6ZGxs
LmxpYjtsaWJwbmcubGliO01mLmxpYjtNZnBsYXQubGliO01mdXVpZC5saWI7c3RybWlpZHMubGli
OyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAg
ICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFdlYktpdF9MaWJyYXJpZXMpXGxpYjsl
KEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9y
aWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>