<?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>53169</bug_id>
          
          <creation_ts>2011-01-26 07:41:32 -0800</creation_ts>
          <short_desc>Web Inspector: move InspectorController&apos;s methods from InspectorAgent to InspectorController</short_desc>
          <delta_ts>2011-02-08 10:22:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>53580</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>abarth</cc>
    
    <cc>apavlov</cc>
    
    <cc>buildbot</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>ossy</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>340257</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-26 07:41:32 -0800</bug_when>
    <thetext>%subj%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340261</commentid>
    <comment_count>1</comment_count>
      <attachid>80192</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-26 07:50:25 -0800</bug_when>
    <thetext>Created attachment 80192
[patch] initial version. for trybots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340267</commentid>
    <comment_count>2</comment_count>
      <attachid>80192</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-01-26 08:17:04 -0800</bug_when>
    <thetext>Comment on attachment 80192
[patch] initial version. for trybots

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

A bunch of nits, otherwise looks good.

&gt; Source/WebCore/ChangeLog:12
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=53169

ChangeLog structure should be:

Web Inspector: &lt;Bug title&gt;
http://bug
&lt;blank line&gt;
Description.
&lt;blank line&gt;

&gt; Source/WebCore/inspector/InspectorController.cpp:167
&gt; +    m_inspectorAgent-&gt;evaluateForTestInFrontend(callId, script);

This can go straight into the front-end.

&gt; Source/WebCore/inspector/InspectorController.h:65
&gt; +    InspectorAgent* inspectorAgent() const { return m_inspectorAgent.get(); }

You can&apos;t expose agent from inspector controller.

&gt; Source/WebCore/inspector/InspectorController.h:66
&gt; +    InspectorBackendDispatcher* inspectorBackendDispatcher() { return m_inspectorBackendDispatcher.get(); }

replace with wrapper method: dispatchMessageFromFrontend

&gt; Source/WebCore/inspector/InspectorController.h:67
&gt; +    InspectorClient* inspectorClient() const { return m_inspectorClient; }

Should not be exposed. Or at least put a FIXME here.

&gt; Source/WebCore/inspector/InspectorController.h:82
&gt; +    void reuseFrontend();

I don&apos;t think we have reuseFrontend.

&gt; Source/WebCore/inspector/InspectorController.h:87
&gt; +    void highlight(Node*);

This code should move to HighlightUtilities class.

&gt; Source/WebCore/inspector/InspectorController.h:94
&gt; +    // FIXME: these methods are necessary for LayoutTestController but we can do that with help of script injected into WebInspector page.

These should stay here.

&gt; Source/WebCore/loader/FrameLoader.cpp:2981
&gt; +    InspectorInstrumentation::resume(m_frame-&gt;page());

resume is not a part of the instrumentation, this is a control statement, should be called on InspectorController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340271</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-26 08:25:02 -0800</bug_when>
    <thetext>Attachment 80192 did not build on win:
Build output: http://queues.webkit.org/results/7523362</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340284</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-26 08:51:55 -0800</bug_when>
    <thetext>Attachment 80192 did not build on mac:
Build output: http://queues.webkit.org/results/7592372</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344031</commentid>
    <comment_count>5</comment_count>
      <attachid>80927</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-02 10:14:36 -0800</bug_when>
    <thetext>Created attachment 80927
[patch] second version

(In reply to comment #2)
&gt; (From update of attachment 80192 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80192&amp;action=review
&gt; 
&gt; A bunch of nits, otherwise looks good.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=53169
&gt; 
&gt; ChangeLog structure should be:
&gt; 
&gt; Web Inspector: &lt;Bug title&gt;
&gt; http://bug
&gt; &lt;blank line&gt;
&gt; Description.
&gt; &lt;blank line&gt;

done.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorController.cpp:167
&gt; &gt; +    m_inspectorAgent-&gt;evaluateForTestInFrontend(callId, script);
&gt; 
&gt; This can go straight into the front-end.

done.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorController.h:65
&gt; &gt; +    InspectorAgent* inspectorAgent() const { return m_inspectorAgent.get(); }
&gt; 
&gt; You can&apos;t expose agent from inspector controller.

done.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorController.h:66
&gt; &gt; +    InspectorBackendDispatcher* inspectorBackendDispatcher() { return m_inspectorBackendDispatcher.get(); }
&gt; 
&gt; replace with wrapper method: dispatchMessageFromFrontend

done.

&gt; &gt; Source/WebCore/inspector/InspectorController.h:67
&gt; &gt; +    InspectorClient* inspectorClient() const { return m_inspectorClient; }
&gt; 
&gt; Should not be exposed. Or at least put a FIXME here.
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorController.h:82
&gt; &gt; +    void reuseFrontend();
&gt; 
&gt; I don&apos;t think we have reuseFrontend.

done.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorController.h:87
&gt; &gt; +    void highlight(Node*);
&gt; 
&gt; This code should move to HighlightUtilities class.

I&apos;ll do this in a separate patch.


&gt; 
&gt; &gt; Source/WebCore/loader/FrameLoader.cpp:2981
&gt; &gt; +    InspectorInstrumentation::resume(m_frame-&gt;page());
&gt; 
&gt; resume is not a part of the instrumentation, this is a control statement, should be called on InspectorController.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344056</commentid>
    <comment_count>6</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-02 10:51:12 -0800</bug_when>
    <thetext>Attachment 80927 did not build on qt:
Build output: http://queues.webkit.org/results/7503449</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344604</commentid>
    <comment_count>7</comment_count>
      <attachid>80927</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-02-03 02:31:20 -0800</bug_when>
    <thetext>Comment on attachment 80927
[patch] second version

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

&gt; Source/WebCore/inspector/InspectorAgent.cpp:-161
&gt; -    ASSERT(!m_highlightedNode);

Please revert this line.

&gt; Source/WebCore/inspector/InspectorAgent.cpp:189
&gt; +        m_inspectorController-&gt;connectFrontend();

InspectorAgent shouldn&apos;t know about InspectorController. You can break this dependency in a separate change though. Please file a bug and add a FIXME.

&gt; Source/WebCore/inspector/InspectorAgent.cpp:289
&gt; +        m_inspectorController-&gt;inspect(node.get());

You shouldn&apos;t go into IC here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344632</commentid>
    <comment_count>8</comment_count>
      <attachid>80927</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-02-03 04:44:52 -0800</bug_when>
    <thetext>Comment on attachment 80927
[patch] second version

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

&gt; Source/WebCore/loader/FrameLoader.cpp:2977
&gt; +    m_frame-&gt;page()-&gt;inspectorController()-&gt;resume();

You may want to assign m_frame-&gt;page() to a local variable since it is used in several places in the method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344635</commentid>
    <comment_count>9</comment_count>
      <attachid>80927</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-02-03 04:54:43 -0800</bug_when>
    <thetext>Comment on attachment 80927
[patch] second version

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

&gt; Source/WebCore/inspector/InspectorController.h:37
&gt; +#include &lt;wtf/PassOwnPtr.h&gt;

You don&apos;t need PassOwnPtr and RefPtr includes here, wtf/Forward should be enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344638</commentid>
    <comment_count>10</comment_count>
      <attachid>80927</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-02-03 04:56:34 -0800</bug_when>
    <thetext>Comment on attachment 80927
[patch] second version

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

&gt; Source/WebCore/inspector/InspectorController.h:111
&gt; +    friend class InspectorAgent;

We could introduce InspectorAgentClient and have InspectorController implement it. Then you wouldn&apos;t need this friendship.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347248</commentid>
    <comment_count>11</comment_count>
      <attachid>81617</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-08 02:31:45 -0800</bug_when>
    <thetext>Created attachment 81617
[patch] third version version

(In reply to comment #7)
&gt; (From update of attachment 80927 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80927&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorAgent.cpp:-161
&gt; &gt; -    ASSERT(!m_highlightedNode);
&gt; 
&gt; Please revert this line.
done


&gt; &gt; Source/WebCore/inspector/InspectorAgent.cpp:189
&gt; &gt; +        m_inspectorController-&gt;connectFrontend();
&gt; 
&gt; InspectorAgent shouldn&apos;t know about InspectorController. You can break this dependency in a separate change though. Please file a bug and add a FIXME.

done

&gt; &gt; Source/WebCore/inspector/InspectorAgent.cpp:289
&gt; &gt; +        m_inspectorController-&gt;inspect(node.get());
&gt; 
&gt; You shouldn&apos;t go into IC here.

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347249</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-08 02:33:56 -0800</bug_when>
    <thetext>Attachment 81617 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorController.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347289</commentid>
    <comment_count>13</comment_count>
      <attachid>81617</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-02-08 05:16:50 -0800</bug_when>
    <thetext>Comment on attachment 81617
[patch] third version version

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

&gt; Source/WebCore/inspector/InspectorAgent.cpp:295
&gt; +void InspectorAgent::didClearWindowObjectInWorld(Frame* frame)

This method should be renamed since it doesn&apos;t accept any world anymore.

&gt; Source/WebCore/inspector/InspectorAgent.cpp:454
&gt; +    if (!m_requiredPanel) {

!m_requiredPanel -&gt; m_requiredPanel

&gt; Source/WebCore/loader/FrameLoader.cpp:2984
&gt; +    m_frame-&gt;page()-&gt;inspectorController()-&gt;resume();

Why has the main frame check gone?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347324</commentid>
    <comment_count>14</comment_count>
      <attachid>81629</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-08 06:45:25 -0800</bug_when>
    <thetext>Created attachment 81629
[patch] fourth version

(In reply to comment #13)
&gt; (From update of attachment 81617 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81617&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorAgent.cpp:295
&gt; &gt; +void InspectorAgent::didClearWindowObjectInWorld(Frame* frame)
&gt; 
&gt; This method should be renamed since it doesn&apos;t accept any world anymore.

done


&gt; &gt; Source/WebCore/inspector/InspectorAgent.cpp:454
&gt; &gt; +    if (!m_requiredPanel) {
&gt; 
&gt; !m_requiredPanel -&gt; m_requiredPanel

done

&gt; &gt; Source/WebCore/loader/FrameLoader.cpp:2984
&gt; &gt; +    m_frame-&gt;page()-&gt;inspectorController()-&gt;resume();
&gt; 
&gt; Why has the main frame check gone?

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347326</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-08 06:51:24 -0800</bug_when>
    <thetext>Attachment 81629 did not build on chromium:
Build output: http://queues.webkit.org/results/7797080</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347329</commentid>
    <comment_count>16</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-02-08 06:54:07 -0800</bug_when>
    <thetext>Attachment 81629 did not build on gtk:
Build output: http://queues.webkit.org/results/7847070</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347338</commentid>
    <comment_count>17</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-08 07:03:11 -0800</bug_when>
    <thetext>Attachment 81629 did not build on qt:
Build output: http://queues.webkit.org/results/7797087</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347348</commentid>
    <comment_count>18</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-08 07:15:40 -0800</bug_when>
    <thetext>Attachment 81629 did not build on win:
Build output: http://queues.webkit.org/results/7791080</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347353</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-08 07:31:17 -0800</bug_when>
    <thetext>Attachment 81629 did not build on chromium:
Build output: http://queues.webkit.org/results/7801087</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347354</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-08 07:31:24 -0800</bug_when>
    <thetext>Attachment 81629 did not build on mac:
Build output: http://queues.webkit.org/results/7763099</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347456</commentid>
    <comment_count>21</comment_count>
      <attachid>81652</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-08 09:33:57 -0800</bug_when>
    <thetext>Created attachment 81652
patch I&apos;m going to land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347485</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-08 10:15:28 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77950 might have broken Qt Linux Release
The following tests are not passing:
http/tests/websocket/tests/workers/close-in-onmessage-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347490</commentid>
    <comment_count>23</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-08 10:22:55 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; http://trac.webkit.org/changeset/77950 might have broken Qt Linux Release
&gt; The following tests are not passing:
&gt; http/tests/websocket/tests/workers/close-in-onmessage-crash.html

It is a false positive alarm: https://bugs.webkit.org/show_bug.cgi?id=53912
Sorry for the SPAM.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80192</attachid>
            <date>2011-01-26 07:50:25 -0800</date>
            <delta_ts>2011-02-08 09:34:59 -0800</delta_ts>
            <desc>[patch] initial version. for trybots</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>84470</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiN2QwODhiLi43ZWU1ODhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIz
IEBACisyMDExLTAxLTI2ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBtb3ZlIEluc3BlY3RvckNvbnRyb2xsZXIncyBtZXRob2RzIGZyb20gSW5zcGVjdG9y
QWdlbnQgdG8gSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICAgICAgQWxsIHRoZSBJbnNwZWN0b3Ig
QVBJIGZvciBXZWJDb3JlIGhhcyB0d28gcGFydHMuCisgICAgICAgIFRoZSBmaXJzdCBvbmUgaXMg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uIGZvciBXZWJDb3JlLgorICAgICAgICBUaGUgc2Vjb25k
IGlzIEluc3BlY3RvckNvbnRyb2xsZXIgZm9yIFdlYktpdC4KKyAgICAgICAgSW5zcGVjdG9yQWdl
bnQgd2FzIHByb2R1Y2VkIGJ5IHJlbmFtaW5nIG9yaWdpbmFsIEluc3BlY3RvckNvbnRyb2xsZXIu
CisgICAgICAgIFRoaXMgcGF0Y2ggZXh0cmFjdHMgV2ViS2l0IHJlbGF0ZWQgbWV0aG9kcyBmcm9t
IEluc3BlY3RvckFnZW50IHRvIEluc3BlY3RvckNvbnRyb2xsZXIuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMTY5CisKKyAgICAgICAgKiBXZWJD
b3JlLmV4cC5pbjoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JGcm9u
dGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6Y3JlYXRlUGFyc2VyKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QWdlbnQ6Okluc3BlY3RvckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50
Ojp+SW5zcGVjdG9yQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Omlu
c3BlY3RlZFBhZ2VEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6Omluc3BlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
OmZvY3VzTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6aGlnaGxpZ2h0
RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6aGlnaGxpZ2h0RnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRDbGVhcldpbmRvd09i
amVjdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnNldFNlYXJj
aGluZ0Zvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnNldEZyb250
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaXNjb25uZWN0RnJvbnRl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJlc291cmNlQWdlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmNyZWF0ZUZyb250ZW5kTGlmZXRpbWVB
Z2VudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJlbGVhc2VGcm9udGVu
ZExpZmV0aW1lQWdlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpwb3B1
bGF0ZVNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnB1
c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2Vu
dDo6cmVzdG9yZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpy
ZXN0b3JlUHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZENv
bW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Om1haW5SZXNvdXJj
ZUZpcmVkRE9NQ29udGVudEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50
OjptYWluUmVzb3VyY2VGaXJlZExvYWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFn
ZW50OjpzdGFydFRpbWVsaW5lUHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QWdlbnQ6OnN0b3BUaW1lbGluZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RXb3Jr
ZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQWdlbnQ6OnBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRDcmVhdGVXb3JrZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZERlc3Ryb3lXb3JrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZE9wZW5EYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGlkVXNlRE9NU3RvcmFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBZ2VudDo6c2hvd0FuZEVuYWJsZURlYnVnZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjplbmFibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckFnZW50OjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFnZW50OjpoaWRlRE9NTm9kZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBZ2VudDo6aGlkZUZyYW1lSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFnZW50OjplbmFibGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpmcm9udGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6aGFzRnJvbnRlbmQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGltZWxpbmVQcm9maWxlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZEltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmV2YWx1YXRlRm9yVGVzdEluRnJv
bnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxpZ2h0
ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmhpZGVIaWdo
bGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OnF1YWRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6ZHJh
d091dGxpbmVkUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3T3V0bGluZWRRdWFkV2l0aENs
aXApOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0hpZ2hsaWdodEZvckJveCk6CisgICAgICAgIChX
ZWJDb3JlOjpkcmF3SGlnaGxpZ2h0Rm9yTGluZUJveGVzT3JTVkdSZW5kZXJlcik6CisgICAgICAg
IChXZWJDb3JlOjpjb252ZXJ0RnJvbUZyYW1lVG9NYWluRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZnJhbWVUb01haW5GcmFtZU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3RWxlbWVu
dFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRyYXdOb2Rl
SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3Bl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93UGFuZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmlsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnByb2ZpbGVyRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkZWJ1Z2dlckVuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd0FuZEVuYWJs
ZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Fi
bGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFy
dFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckFnZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckNsaWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omhhc0Zyb250ZW5kKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2V0RXh0ZW5zaW9uQVBJKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlc3VtZUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwcm9maWxl
ckVuYWJsZWRJbXBsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zy
b250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVz
dW1lKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeSk6CisKIDIw
MTEtMDEtMjYgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXgg
OWIyMTE3ZC4uMjAzZGU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEzNTcsMjMgKzEzNTcs
MjcgQEAgX19aTjdXZWJDb3JlMjJHZW9sb2NhdGlvblNlcnZpY2VNb2NrOHNldEVycm9yRU4zV1RG
MTBQYXNzUmVmUHRySU5TXzEzUG9zaXRpb25FcnIKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQ0c2hvd0V2Ci1fX1pON1dlYkNvcmUx
NEluc3BlY3RvckFnZW50NWNsb3NlRXYKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQ5c2hv
d1BhbmVsRVJLTjNXVEY2U3RyaW5nRQotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDEyQ29u
c29sZVBhbmVsRQotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDEzUHJvZmlsZXNQYW5lbEUK
LV9fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQxNGVuYWJsZVByb2ZpbGVyRWJiCi1fX1pON1dl
YkNvcmUxNEluc3BlY3RvckFnZW50MTVkaXNhYmxlRGVidWdnZXJFYgotX19aTjdXZWJDb3JlMTRJ
bnNwZWN0b3JBZ2VudDE1ZGlzYWJsZVByb2ZpbGVyRWIKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9y
QWdlbnQxOGRpc2Nvbm5lY3RGcm9udGVuZEV2Ci1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50
MjBzdG9wVGltZWxpbmVQcm9maWxlckV2Ci1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MjFz
aG93QW5kRW5hYmxlRGVidWdnZXJFdgotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDIxc3Rh
cnRUaW1lbGluZVByb2ZpbGVyRXYKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQyNWV2YWx1
YXRlRm9yVGVzdEluRnJvbnRlbmRFbFJLTjNXVEY2U3RyaW5nRQotX19aTjdXZWJDb3JlMTRJbnNw
ZWN0b3JBZ2VudDI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFTjNXVEYxMFBhc3NPd25QdHJJ
TlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JB
Z2VudDI2c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFdgotX19aTjdXZWJDb3JlMTRJbnNwZWN0
b3JBZ2VudDI3c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKIF9fWk43V2ViQ29yZTE1SW5z
cGVjdG9yQ2xpZW50MzFkb0Rpc3BhdGNoTWVzc2FnZU9uRnJvbnRlbmRQYWdlRVBOU180UGFnZUVS
S04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyQ29uc29s
ZVBhbmVsRQorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTNQcm9maWxlc1BhbmVs
RQorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTNpbnNwZWN0ZWRQYWdlRXYKK19f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxlUHJvZmlsZXJFdgorX19aTjdX
ZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkZWJ1Z2dlckVuYWJsZWRFdgorX19aTjdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlRGVidWdnZXJFdgorX19aTjdXZWJDb3Jl
MTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlUHJvZmlsZXJFdgorX19aTjdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyMTVwcm9maWxlckVuYWJsZWRFdgorX19aTjdXZWJDb3JlMTlJbnNw
ZWN0b3JDb250cm9sbGVyMThkaXNjb25uZWN0RnJvbnRlbmRFdgorX19aTjdXZWJDb3JlMTlJbnNw
ZWN0b3JDb250cm9sbGVyMjBzdG9wVGltZWxpbmVQcm9maWxlckV2CitfX1pON1dlYkNvcmUxOUlu
c3BlY3RvckNvbnRyb2xsZXIyMXNob3dBbmRFbmFibGVEZWJ1Z2dlckV2CitfX1pON1dlYkNvcmUx
OUluc3BlY3RvckNvbnRyb2xsZXIyMXN0YXJ0VGltZWxpbmVQcm9maWxlckV2CitfX1pON1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXIyM3RpbWVsaW5lUHJvZmlsZXJFbmFibGVkRXYKK19fWk43
V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI1ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZEVs
UktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnNldElu
c3BlY3RvckZyb250ZW5kQ2xpZW50RU4zV1RGMTBQYXNzT3duUHRySU5TXzIzSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRFRUUKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c3RvcFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmdFdgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
MjdzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFdgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyNHNob3dFdgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNWNsb3Nl
RXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjlzaG93UGFuZWxFUktOM1dURjZT
dHJpbmdFCiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwxMm1vdmVX
aW5kb3dCeUVmZgogX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTRm
cm9udGVuZExvYWRlZEV2CiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwxNWNhbkF0dGFjaFdpbmRvd0V2CkBAIC0xMzg1LDkgKzEzODksOCBAQCBfX1pON1dlYkNvcmUy
OEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyNmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0
RWoKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDI3cmVzdG9yZUF0
dGFjaGVkV2luZG93SGVpZ2h0RXYKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbEMyRVBOU18xOUluc3BlY3RvckNvbnRyb2xsZXJFUE5TXzRQYWdlRQogX19aTjdXZWJD
b3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsRDJFdgotX19aTks3V2ViQ29yZTE0SW5z
cGVjdG9yQWdlbnQxNXByb2ZpbGVyRW5hYmxlZEV2Ci1fX1pOSzdXZWJDb3JlMTRJbnNwZWN0b3JB
Z2VudDE3ZHJhd05vZGVIaWdobGlnaHRFUk5TXzE1R3JhcGhpY3NDb250ZXh0RQotX19aTks3V2Vi
Q29yZTE0SW5zcGVjdG9yQWdlbnQzMWlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGVFdgor
X19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE3ZHJhd05vZGVIaWdobGlnaHRFUk5T
XzE1R3JhcGhpY3NDb250ZXh0RQorX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjMx
aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZUV2CiAjZW5kaWYKIAogI2lmIEVOQUJMRShK
QVZBX0JSSURHRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEluc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCmluZGV4IDk0
ZmE4NmUuLmE4ZDhkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEluc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcApA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlY4SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCiAK
ICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAK
aW5kZXggMzZjMWY1Zi4uMTdjZTYwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNw
cApAQCAtNjksNyArNjksNyBAQAogI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxFbGVtZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCkBAIC0yNzcsMTEgKzI3Nyw3IEBAIHZvaWQgSFRNTERvY3VtZW50OjpyZWxl
YXNlRXZlbnRzKCkKIAogUGFzc1JlZlB0cjxEb2N1bWVudFBhcnNlcj4gSFRNTERvY3VtZW50Ojpj
cmVhdGVQYXJzZXIoKQogewotICAgIGJvb2wgcmVwb3J0RXJyb3JzID0gZmFsc2U7Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKLSAgICAg
ICAgcmVwb3J0RXJyb3JzID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5oYXNGcm9udGVu
ZCgpOwotI2VuZGlmCisgICAgYm9vbCByZXBvcnRFcnJvcnMgPSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246Omhhc0Zyb250ZW5kKHRoaXMtPnBhZ2UoKSk7CiAgICAgcmV0dXJuIEhUTUxEb2N1bWVu
dFBhcnNlcjo6Y3JlYXRlKHRoaXMsIHJlcG9ydEVycm9ycyk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDRiMzQyYzcuLjk3NTc1ODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcApAQCAtNTAsMTMg
KzUwLDExIEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVy
TWFwLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2Ny
aXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCi0jaW5jbHVkZSAiSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ2xpZW50LmgiCkBAIC04MSw3ICs3OSw2IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAi
UmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgpAQCAtOTcs
NyArOTQsNiBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRleHRFbmNv
ZGluZy5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIK
ICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1
cmVzLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0xMzAsMTkgKzEyNiwxMyBA
QCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IGNo
YXIqIGNvbnN0IEluc3BlY3RvckFnZW50OjpFbGVtZW50c1BhbmVsID0gImVsZW1lbnRzIjsKLWNv
bnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckFnZW50OjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7
Ci1jb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JBZ2VudDo6U2NyaXB0c1BhbmVsID0gInNjcmlw
dHMiOwotY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQWdlbnQ6OlByb2ZpbGVzUGFuZWwgPSAi
cHJvZmlsZXMiOwotCiBJbnNwZWN0b3JBZ2VudDo6SW5zcGVjdG9yQWdlbnQoSW5zcGVjdG9yQ29u
dHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50
KiBjbGllbnQpCiAgICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxl
cikKICAgICAsIG1faW5zcGVjdGVkUGFnZShwYWdlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQot
ICAgICwgbV9vcGVuaW5nRnJvbnRlbmQoZmFsc2UpCisgICAgLCBtX2luc3BlY3RvckZyb250ZW5k
KDApCiAgICAgLCBtX2Nzc0FnZW50KG5ldyBJbnNwZWN0b3JDU1NBZ2VudCgpKQogICAgICwgbV9z
dGF0ZShuZXcgSW5zcGVjdG9yU3RhdGUoY2xpZW50KSkKLSAgICAsIG1faW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKHRoaXMpKQogICAgICwg
bV9pbmplY3RlZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhpcykpCiAg
ICAgLCBtX2NvbnNvbGVBZ2VudChuZXcgSW5zcGVjdG9yQ29uc29sZUFnZW50KHRoaXMpKQogI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtMTYwLDE1ICsxNTAsMTQgQEAgSW5zcGVj
dG9yQWdlbnQ6On5JbnNwZWN0b3JBZ2VudCgpCiAgICAgLy8gVGhlc2Ugc2hvdWxkIGhhdmUgYmVl
biBjbGVhcmVkIGluIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKS4KICAgICBBU1NFUlQoIW1fY2xp
ZW50KTsKICAgICBBU1NFUlQoIW1faW5zcGVjdGVkUGFnZSk7Ci0gICAgQVNTRVJUKCFtX2hpZ2hs
aWdodGVkTm9kZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RlZFBhZ2VEZXN0
cm95ZWQoKQogewotICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICBtX2Zyb250ZW5kLT5kaXNj
b25uZWN0RnJvbUJhY2tlbmQoKTsKKyAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZCkKKyAgICAg
ICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+ZGlzY29ubmVjdEZyb21CYWNrZW5kKCk7CiAKLSAgICBo
aWRlSGlnaGxpZ2h0KCk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oaWRlSGlnaGxpZ2h0
KCk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBtX2RlYnVnZ2VyQWdl
bnQuY2xlYXIoKTsKQEAgLTE4NiwxMyArMTc1LDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5z
cGVjdGVkUGFnZURlc3Ryb3llZCgpCiAgICAgbV9jbGllbnQgPSAwOwogfQogCi1ib29sIEluc3Bl
Y3RvckFnZW50OjplbmFibGVkKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX2luc3BlY3RlZFBhZ2UtPnNldHRp
bmdzKCktPmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKTsKLX0KLQogYm9vbCBJbnNwZWN0b3JBZ2Vu
dDo6c2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3RhdGUt
PmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUpOwpAQCAtMjAyLDE1
ICsxODQsMTUgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJv
bUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXQKIHsKICAgICBtX3N0YXRlLT5yZXN0
b3JlRnJvbUluc3BlY3RvckNvb2tpZShpbnNwZWN0b3JTdGF0ZUNvb2tpZSk7CiAKLSAgICBpZiAo
IW1fZnJvbnRlbmQpIHsKLSAgICAgICAgY29ubmVjdEZyb250ZW5kKCk7Ci0gICAgICAgIG1fZnJv
bnRlbmQtPmZyb250ZW5kUmV1c2VkKCk7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmluc3BlY3RlZFVS
TENoYW5nZWQoaW5zcGVjdGVkVVJMKCkuc3RyaW5nKCkpOworICAgIGlmICghbV9pbnNwZWN0b3JG
cm9udGVuZCkgeworICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNvbm5lY3RGcm9udGVu
ZCgpOworICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kLT5mcm9udGVuZFJldXNlZCgpOworICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kLT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKGluc3BlY3RlZFVS
TCgpLnN0cmluZygpKTsKICAgICAgICAgbV9kb21BZ2VudC0+c2V0RG9jdW1lbnQobV9pbnNwZWN0
ZWRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgIHB1c2hEYXRhQ29sbGVj
dGVkT2ZmbGluZSgpOwogICAgIH0KIAotICAgIG1fcmVzb3VyY2VBZ2VudCA9IEluc3BlY3RvclJl
c291cmNlQWdlbnQ6OnJlc3RvcmUobV9pbnNwZWN0ZWRQYWdlLCBtX3N0YXRlLmdldCgpLCBtX2Zy
b250ZW5kLmdldCgpKTsKKyAgICBtX3Jlc291cmNlQWdlbnQgPSBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjpyZXN0b3JlKG1faW5zcGVjdGVkUGFnZSwgbV9zdGF0ZS5nZXQoKSwgbV9pbnNwZWN0b3JG
cm9udGVuZCk7CiAKICAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6
dGltZWxpbmVQcm9maWxlckVuYWJsZWQpKQogICAgICAgICBzdGFydFRpbWVsaW5lUHJvZmlsZXIo
KTsKQEAgLTIyNSwxNiArMjA3LDExIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnJlc3RvcmVJbnNw
ZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3QgU3RyaW5nJiBpbnNwZWN0b3JTdGF0CiAKIHZvaWQg
SW5zcGVjdG9yQWdlbnQ6Omluc3BlY3QoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIWVuYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2hvdygpOwotCiAgICAgaWYgKG5vZGUtPm5vZGVU
eXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6
RE9DVU1FTlRfTk9ERSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBt
X25vZGVUb0ZvY3VzID0gbm9kZTsKIAotICAgIGlmICghbV9mcm9udGVuZCkKKyAgICBpZiAoIW1f
aW5zcGVjdG9yRnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvY3VzTm9kZSgpOwpA
QCAtMjQ1LDI4ICsyMjIsMTkgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6Zm9jdXNOb2RlKCkKICAg
ICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fZnJvbnRl
bmQpOworICAgIEFTU0VSVChtX2luc3BlY3RvckZyb250ZW5kKTsKICAgICBBU1NFUlQobV9ub2Rl
VG9Gb2N1cyk7CiAKICAgICBsb25nIGlkID0gbV9kb21BZ2VudC0+cHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChtX25vZGVUb0ZvY3VzLmdldCgpKTsKLSAgICBtX2Zyb250ZW5kLT51cGRhdGVGb2N1c2Vk
Tm9kZShpZCk7CisgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+dXBkYXRlRm9jdXNlZE5vZGUoaWQp
OwogICAgIG1fbm9kZVRvRm9jdXMgPSAwOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpoaWdo
bGlnaHQoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEFTU0VSVF9BUkcobm9kZSwgbm9kZSk7Ci0gICAgbV9oaWdobGlnaHRlZE5vZGUgPSBu
b2RlOwotICAgIG1fY2xpZW50LT5oaWdobGlnaHQobm9kZSk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9y
QWdlbnQ6OmhpZ2hsaWdodERPTU5vZGUobG9uZyBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9
IDA7CiAgICAgaWYgKG1fZG9tQWdlbnQgJiYgKG5vZGUgPSBtX2RvbUFnZW50LT5ub2RlRm9ySWQo
bm9kZUlkKSkpCi0gICAgICAgIGhpZ2hsaWdodChub2RlKTsKKyAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5oaWdobGlnaHQobm9kZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6Omhp
Z2hsaWdodEZyYW1lKHVuc2lnbmVkIGxvbmcgZnJhbWVJZCkKQEAgLTI3NCwxOCArMjQyLDIzIEBA
IHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKHVuc2lnbmVkIGxvbmcgZnJhbWVJ
ZCkKICAgICBGcmFtZSogbWFpbkZyYW1lID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKTsK
ICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1haW5GcmFtZSkpIHsKICAgICAgICAgaWYgKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihmcmFtZSkgPT0gZnJhbWVJZCAmJiBmcmFtZS0+b3duZXJFbGVt
ZW50KCkpIHsKLSAgICAgICAgICAgIGhpZ2hsaWdodChmcmFtZS0+b3duZXJFbGVtZW50KCkpOwor
ICAgICAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oaWdobGlnaHQoZnJhbWUtPm93bmVy
RWxlbWVudCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIH0KIAot
dm9pZCBJbnNwZWN0b3JBZ2VudDo6aGlkZUhpZ2hsaWdodCgpCitib29sIEluc3BlY3RvckFnZW50
OjpoYW5kbGVNb3VzZVByZXNzKCkKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1faGlnaGxpZ2h0ZWROb2RlID0gMDsKLSAgICBtX2NsaWVudC0+aGlkZUhpZ2hs
aWdodCgpOworICAgIGlmICghZW5hYmxlZCgpIHx8ICFzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIt
PmhpZ2hsaWdodGVkTm9kZSgpKSB7CisgICAgICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5oaWdobGlnaHRlZE5vZGUoKTsKKyAgICAgICAgc2V0U2VhcmNoaW5n
Rm9yTm9kZShmYWxzZSk7CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdChu
b2RlLmdldCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
QWdlbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgdW5zaWduZWQpCkBAIC0yOTcsNDAgKzI3MCwxMyBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojpt
b3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2ln
bgogICAgIHdoaWxlIChub2RlICYmIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RF
KQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChub2RlKQotICAg
ICAgICBoaWdobGlnaHQobm9kZSk7CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGln
aGxpZ2h0KG5vZGUpOwogfQogCi1ib29sIEluc3BlY3RvckFnZW50OjpoYW5kbGVNb3VzZVByZXNz
KCkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFt
ZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwgIXNlYXJjaGluZ0Zvck5vZGVJblBh
Z2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1faGlnaGxpZ2h0ZWROb2Rl
KSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9oaWdobGlnaHRlZE5vZGU7Ci0gICAg
ICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOwotICAgICAgICBpbnNwZWN0KG5vZGUuZ2V0
KCkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJbnNwZWN0b3JBZ2VudDo6
c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENs
aWVudD4gY2xpZW50KQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCk7
Ci0gICAgbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCA9IGNsaWVudDsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9N
V3JhcHBlcldvcmxkKiB3b3JsZCkKLXsKLSAgICBpZiAod29ybGQgIT0gbWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBwYWdlIGlzIHN1cHBv
c2VkIHRvIHNlcnZlIGFzIEluc3BlY3RvckZyb250ZW5kIG5vdGlmeSBpbnNwZXRvciBmcm9udGVu
ZAotICAgIC8vIGNsaWVudCB0aGF0IGl0J3MgY2xlYXJlZCBzbyB0aGF0IHRoZSBjbGllbnQgY2Fu
IGV4cG9zZSBpbnNwZWN0b3IgYmluZGluZ3MuCi0gICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQgJiYgZnJhbWUgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENsaWVudC0+d2luZG93T2JqZWN0Q2xlYXJlZCgpOwotCiAgICAg
aWYgKGVuYWJsZWQoKSkgewotICAgICAgICBpZiAobV9mcm9udGVuZCAmJiBmcmFtZSA9PSBtX2lu
c3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZCAmJiBmcmFtZSA9PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQogICAgICAgICAgICAg
bV9pbmplY3RlZFNjcmlwdEhvc3QtPmRpc2NhcmRJbmplY3RlZFNjcmlwdHMoKTsKICAgICAgICAg
aWYgKG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuc2l6ZSgpKSB7CiAgICAgICAgICAgICBTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSk7CkBAIC0z
NTAsNyArMjk2LDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShi
b29sIGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKElu
c3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlLCBlbmFibGVkKTsKICAgICBpZiAoIWVuYWJs
ZWQpCi0gICAgICAgIGhpZGVIaWdobGlnaHQoKTsKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5oaWRlSGlnaGxpZ2h0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldFNlYXJj
aGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKQEAgLTM1OSw5MiArMzA1
LDMxIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFi
bGVkLCBib29sKiBuZXdTdGF0ZSkKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVuYWJsZWQpOwog
fQogCi12b2lkIEluc3BlY3RvckFnZW50Ojpjb25uZWN0RnJvbnRlbmQoKQordm9pZCBJbnNwZWN0
b3JBZ2VudDo6c2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqIGluc3BlY3RvckZyb250ZW5k
KQogewotICAgIG1fb3BlbmluZ0Zyb250ZW5kID0gZmFsc2U7CiAgICAgcmVsZWFzZUZyb250ZW5k
TGlmZXRpbWVBZ2VudHMoKTsKLSAgICBtX2Zyb250ZW5kID0gbmV3IEluc3BlY3RvckZyb250ZW5k
KG1fY2xpZW50KTsKLSAgICBtX2RvbUFnZW50ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZSht
X2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSwgbV9mcm9udGVuZC5nZXQoKSk7Ci0gICAgbV9ydW50
aW1lQWdlbnQgPSBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0
SG9zdC5nZXQoKSk7CisgICAgbV9pbnNwZWN0b3JGcm9udGVuZCA9IGluc3BlY3RvckZyb250ZW5k
OworICAgIGNyZWF0ZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKKyAgICAKICAgICBtX2Nzc0Fn
ZW50LT5zZXRET01BZ2VudChtX2RvbUFnZW50LmdldCgpKTsKIAotI2lmIEVOQUJMRShEQVRBQkFT
RSkKLSAgICBtX2RhdGFiYXNlQWdlbnQgPSBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpjcmVhdGUo
Jm1fZGF0YWJhc2VSZXNvdXJjZXMsIG1fZnJvbnRlbmQuZ2V0KCkpOwotI2VuZGlmCi0KLSNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgbV9kb21TdG9yYWdlQWdlbnQgPSBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6OmNyZWF0ZSgmbV9kb21TdG9yYWdlUmVzb3VyY2VzLCBtX2Zyb250ZW5kLmdl
dCgpKTsKLSNlbmRpZgotCiAgICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKLSAgICAgICAgbV90aW1l
bGluZUFnZW50LT5yZXNldEZyb250ZW5kUHJveHlPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7Cisg
ICAgICAgIG1fdGltZWxpbmVBZ2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1faW5zcGVj
dG9yRnJvbnRlbmQpOwogCi0gICAgbV9jb25zb2xlQWdlbnQtPnNldEZyb250ZW5kKG1fZnJvbnRl
bmQuZ2V0KCkpOworICAgIG1fY29uc29sZUFnZW50LT5zZXRGcm9udGVuZChtX2luc3BlY3RvckZy
b250ZW5kKTsKIAogICAgIC8vIEluaXRpYWxpemUgV2ViIEluc3BlY3RvciB0aXRsZS4KLSAgICBt
X2Zyb250ZW5kLT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKGluc3BlY3RlZFVSTCgpLnN0cmluZygpKTsK
LQotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgbV9hcHBsaWNhdGlv
bkNhY2hlQWdlbnQgPSBuZXcgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KHRoaXMsIG1f
ZnJvbnRlbmQuZ2V0KCkpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0gICAg
bV9maWxlU3lzdGVtQWdlbnQgPSBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OmNyZWF0ZSh0aGlz
LCBtX2Zyb250ZW5kLmdldCgpKTsKLSNlbmRpZgotCi0gICAgaWYgKCFJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246Omhhc0Zyb250ZW5kcygpKQotICAgICAgICBTY3JpcHRDb250cm9sbGVyOjpzZXRD
YXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRFeGNlcHRpb25zKHRydWUpOwotICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZnJvbnRlbmRDcmVhdGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9y
QWdlbnQ6OnNob3coKQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9vcGVuaW5nRnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2Zyb250ZW5kKQotICAgICAgICBtX2Zyb250ZW5kLT5icmluZ1RvRnJvbnQoKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgbV9vcGVuaW5nRnJvbnRlbmQgPSB0cnVlOwotICAgICAgICBtX2NsaWVudC0+
b3Blbkluc3BlY3RvckZyb250ZW5kKGluc3BlY3RvckNvbnRyb2xsZXIoKSk7Ci0gICAgfQotfQot
Ci12b2lkIEluc3BlY3RvckFnZW50OjpzaG93UGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbCkKLXsK
LSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2hvdygpOwotCi0g
ICAgaWYgKCFtX2Zyb250ZW5kKSB7Ci0gICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IHBhbmVs
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fZnJvbnRlbmQtPnNob3dQYW5lbChwYW5l
bCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmNsb3NlKCkKLXsKLSAgICBpZiAoIW1fZnJv
bnRlbmQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Zyb250ZW5kLT5kaXNjb25uZWN0RnJvbUJh
Y2tlbmQoKTsKLSAgICBkaXNjb25uZWN0RnJvbnRlbmQoKTsKKyAgICBtX2luc3BlY3RvckZyb250
ZW5kLT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKGluc3BlY3RlZFVSTCgpLnN0cmluZygpKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzY29ubmVjdEZyb250ZW5kKCkKIHsKLSAgICBpZiAoIW1f
ZnJvbnRlbmQpCisgICAgaWYgKCFtX2luc3BlY3RvckZyb250ZW5kKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2Zyb250ZW5kLmNsZWFyKCk7CisgICAgbV9pbnNwZWN0b3JGcm9udGVuZCA9IDA7
CiAKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyb250ZW5kRGVsZXRlZCgpOwotICAg
IGlmICghSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZHMoKSkKLSAgICAgICAg
U2NyaXB0Q29udHJvbGxlcjo6c2V0Q2FwdHVyZUNhbGxTdGFja0ZvclVuY2F1Z2h0RXhjZXB0aW9u
cyhmYWxzZSk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNjb25uZWN0RnJvbnRlbmRJ
bXBsKCk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAvLyBJZiB0aGUg
d2luZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBkZWJ1Z2dlciBlbmFibGVkLApAQCAtNDU2
LDkgKzM0MSw4IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiAj
ZW5kaWYKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKICAgICB1bmJpbmRBbGxSZXNv
dXJjZXMoKTsKLSAgICBzdG9wVGltZWxpbmVQcm9maWxlcigpOwogCi0gICAgaGlkZUhpZ2hsaWdo
dCgpOworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGlkZUhpZ2hsaWdodCgpOwogCiAjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgbV9wcm9maWxlckFnZW50LT5zZXRGcm9u
dGVuZCgwKTsKQEAgLTQ2NywxNyArMzUxLDM5IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Nv
bm5lY3RGcm9udGVuZCgpCiAgICAgbV9jb25zb2xlQWdlbnQtPnNldEZyb250ZW5kKDApOwogCiAg
ICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKLSAgICBtX3RpbWVsaW5lQWdlbnQu
Y2xlYXIoKTsKICAgICBtX2V4dHJhSGVhZGVycy5jbGVhcigpOwogfQogCiBJbnNwZWN0b3JSZXNv
dXJjZUFnZW50KiBJbnNwZWN0b3JBZ2VudDo6cmVzb3VyY2VBZ2VudCgpCiB7Ci0gICAgaWYgKCFt
X3Jlc291cmNlQWdlbnQgJiYgbV9mcm9udGVuZCkKLSAgICAgICAgbV9yZXNvdXJjZUFnZW50ID0g
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y3JlYXRlKG1faW5zcGVjdGVkUGFnZSwgbV9zdGF0ZS5n
ZXQoKSwgbV9mcm9udGVuZC5nZXQoKSk7CisgICAgaWYgKCFtX3Jlc291cmNlQWdlbnQgJiYgbV9p
bnNwZWN0b3JGcm9udGVuZCkKKyAgICAgICAgbV9yZXNvdXJjZUFnZW50ID0gSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6Y3JlYXRlKG1faW5zcGVjdGVkUGFnZSwgbV9zdGF0ZS5nZXQoKSwgbV9pbnNw
ZWN0b3JGcm9udGVuZCk7CiAgICAgcmV0dXJuIG1fcmVzb3VyY2VBZ2VudC5nZXQoKTsKIH0KIAor
dm9pZCBJbnNwZWN0b3JBZ2VudDo6Y3JlYXRlRnJvbnRlbmRMaWZldGltZUFnZW50cygpCit7Cisg
ICAgbV9kb21BZ2VudCA9IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9pbmplY3RlZFNjcmlw
dEhvc3QuZ2V0KCksIG1faW5zcGVjdG9yRnJvbnRlbmQpOworLy8gICAgbV9yZXNvdXJjZUFnZW50
ID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y3JlYXRlKG1faW5zcGVjdGVkUGFnZSwgbV9zdGF0
ZS5nZXQoKSwgbV9pbnNwZWN0b3JGcm9udGVuZCk7CisgICAgbV9ydW50aW1lQWdlbnQgPSBJbnNw
ZWN0b3JSdW50aW1lQWdlbnQ6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSk7CisK
KyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgbV9kYXRhYmFzZUFnZW50ID0gSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudDo6Y3JlYXRlKCZtX2RhdGFiYXNlUmVzb3VyY2VzLCBtX2luc3BlY3RvckZyb250
ZW5kKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIG1fZG9tU3RvcmFn
ZUFnZW50ID0gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjcmVhdGUoJm1fZG9tU3RvcmFnZVJl
c291cmNlcywgbV9pbnNwZWN0b3JGcm9udGVuZCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBuZXcg
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KHRoaXMsIG1faW5zcGVjdG9yRnJvbnRlbmQp
OworI2VuZGlmCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgbV9maWxlU3lzdGVtQWdl
bnQgPSBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OmNyZWF0ZSh0aGlzLCBtX2luc3BlY3RvckZy
b250ZW5kKTsKKyNlbmRpZgorfQorCiB2b2lkIEluc3BlY3RvckFnZW50OjpyZWxlYXNlRnJvbnRl
bmRMaWZldGltZUFnZW50cygpCiB7CiAgICAgbV9yZXNvdXJjZUFnZW50LmNsZWFyKCk7CkBAIC01
MTEsMjIgKzQxNywyMCBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpyZWxlYXNlRnJvbnRlbmRMaWZl
dGltZUFnZW50cygpCiAgICAgICAgIG1fZmlsZVN5c3RlbUFnZW50LT5zdG9wKCk7CiAgICAgICAg
IG1fZmlsZVN5c3RlbUFnZW50LmNsZWFyKCk7CiAjZW5kaWYKKyAgICBzdG9wVGltZWxpbmVQcm9m
aWxlcigpOwogfQogCiB2b2lkIEluc3BlY3RvckFnZW50Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMo
KQogewotICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKLSAgICBpZiAoIW1fZnJvbnRlbmQpCisgICAg
QVNTRVJUKG1faW5zcGVjdG9yRnJvbnRlbmQpOworICAgIGlmICghbV9pbnNwZWN0b3JGcm9udGVu
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3Nob3dBZnRlclZpc2libGUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIHNob3dQYW5lbChtX3Nob3dBZnRlclZpc2libGUpOwotICAgICAgICBt
X3Nob3dBZnRlclZpc2libGUgPSAiIjsKLSAgICB9CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5mcm9udGVuZExvYWRlZCgpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAg
ICAgaWYgKG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlZCgpKQotICAgICAgICBtX2Zyb250ZW5kLT5w
cm9maWxlcldhc0VuYWJsZWQoKTsKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+cHJvZmls
ZXJXYXNFbmFibGVkKCk7CiAjZW5kaWYKIAogICAgIHB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgp
OwpAQCAtNTM2LDcgKzQ0MCw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnBvcHVsYXRlU2NyaXB0
T2JqZWN0cygpCiAKICAgICAvLyBEaXNwYXRjaCBwZW5kaW5nIGZyb250ZW5kIGNvbW1hbmRzCiAg
ICAgZm9yIChWZWN0b3I8cGFpcjxsb25nLCBTdHJpbmc+ID46Oml0ZXJhdG9yIGl0ID0gbV9wZW5k
aW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuYmVnaW4oKTsgaXQgIT0gbV9wZW5kaW5nRXZhbHVhdGVU
ZXN0Q29tbWFuZHMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1fZnJvbnRlbmQtPmV2YWx1YXRlRm9y
VGVzdEluRnJvbnRlbmQoKCppdCkuZmlyc3QsICgqaXQpLnNlY29uZCk7CisgICAgICAgIG1faW5z
cGVjdG9yRnJvbnRlbmQtPmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoKCppdCkuZmlyc3QsICgq
aXQpLnNlY29uZCk7CiAgICAgbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xlYXIoKTsK
IAogICAgIHJlc3RvcmVEZWJ1Z2dlcigpOwpAQCAtNTUwLDI1ICs0NTQsMjUgQEAgdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6cHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKCkKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1f
ZGF0YWJhc2VSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6
aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNl
c0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5kLmdldCgpKTsK
KyAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2luc3BlY3RvckZyb250ZW5kKTsKICNlbmRpZgog
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVy
YXRvciBkb21TdG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOwogICAgIGZv
ciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNv
dXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+YmluZChtX2Zyb250ZW5kLmdldCgpKTsKKyAgICAgICAgaXQtPnNlY29uZC0+YmluZCht
X2luc3BlY3RvckZyb250ZW5kKTsKICNlbmRpZgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKSAmJiBFTkFCTEUoV09SS0VSUykKICAgICBXb3JrZXJzTWFwOjppdGVyYXRvciB3b3JrZXJz
RW5kID0gbV93b3JrZXJzLmVuZCgpOwogICAgIGZvciAoV29ya2Vyc01hcDo6aXRlcmF0b3IgaXQg
PSBtX3dvcmtlcnMuYmVnaW4oKTsgaXQgIT0gd29ya2Vyc0VuZDsgKytpdCkgewogICAgICAgICBJ
bnNwZWN0b3JXb3JrZXJSZXNvdXJjZSogd29ya2VyID0gaXQtPnNlY29uZC5nZXQoKTsKLSAgICAg
ICAgbV9mcm9udGVuZC0+ZGlkQ3JlYXRlV29ya2VyKHdvcmtlci0+aWQoKSwgd29ya2VyLT51cmwo
KSwgd29ya2VyLT5pc1NoYXJlZFdvcmtlcigpKTsKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZC0+ZGlkQ3JlYXRlV29ya2VyKHdvcmtlci0+aWQoKSwgd29ya2VyLT51cmwoKSwgd29ya2VyLT5p
c1NoYXJlZFdvcmtlcigpKTsKICAgICB9CiAjZW5kaWYKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6cmVzdG9yZURlYnVnZ2VyKCkKIHsKLSAgICBBU1NFUlQobV9mcm9udGVuZCk7CisgICAgQVNT
RVJUKG1faW5zcGVjdG9yRnJvbnRlbmQpOwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQogICAgIGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojppc0RlYnVnZ2VyQWx3YXlzRW5hYmxl
ZCgpIHx8IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gfHwgbV9zZXR0aW5ncy0+Z2V0Qm9vbGVh
bihJbnNwZWN0b3JTZXR0aW5nczo6RGVidWdnZXJBbHdheXNFbmFibGVkKSkgewogICAgICAgICBl
bmFibGVEZWJ1Z2dlcihmYWxzZSk7CkBAIC01NzksOSArNDgzLDkgQEAgdm9pZCBJbnNwZWN0b3JB
Z2VudDo6cmVzdG9yZURlYnVnZ2VyKCkKIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVzdG9yZVBy
b2ZpbGVyKFByb2ZpbGVyUmVzdG9yZUFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1fZnJv
bnRlbmQpOworICAgIEFTU0VSVChtX2luc3BlY3RvckZyb250ZW5kKTsKICNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKLSAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldEZyb250ZW5kKG1fZnJv
bnRlbmQuZ2V0KCkpOworICAgIG1fcHJvZmlsZXJBZ2VudC0+c2V0RnJvbnRlbmQobV9pbnNwZWN0
b3JGcm9udGVuZCk7CiAgICAgaWYgKCFTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0Vu
YWJsZWQoKSAmJiBtX3NldHRpbmdzLT5nZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpQcm9m
aWxlckFsd2F5c0VuYWJsZWQpKQogICAgICAgICBlbmFibGVQcm9maWxlcigpOwogICAgIGlmIChh
Y3Rpb24gPT0gUHJvZmlsZXJSZXN0b3JlUmVzZXRBZ2VudCkKQEAgLTYxNiw4ICs1MjAsOCBAQCB2
b2lkIEluc3BlY3RvckFnZW50OjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIp
CiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CiAKICAgICBpZiAobG9hZGVyLT5mcmFtZSgp
ID09IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpIHsKLSAgICAgICAgaWYgKG1fZnJvbnRl
bmQpCi0gICAgICAgICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKGxvYWRlci0+
dXJsKCkuc3RyaW5nKCkpOworICAgICAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZCkKKyAgICAg
ICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmQtPmluc3BlY3RlZFVSTENoYW5nZWQobG9hZGVyLT51
cmwoKS5zdHJpbmcoKSk7CiAKICAgICAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmRpc2NhcmRJ
bmplY3RlZFNjcmlwdHMoKTsKICAgICAgICAgbV9jb25zb2xlQWdlbnQtPnJlc2V0KCk7CkBAIC02
NDAsOCArNTQ0LDggQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkQ29tbWl0TG9hZChEb2N1bWVu
dExvYWRlciogbG9hZGVyKQogICAgICAgICAvLyByZXNvdXJjZXMgYXJlIGNsZWFyZWQgc28gdGhh
dCBpdCBoYXMgYSBjaGFuY2UgdG8gdW5iaW5kIHRoZW0uCiAgICAgICAgIHVuYmluZEFsbFJlc291
cmNlcygpOwogCi0gICAgICAgIGlmIChtX2Zyb250ZW5kKSB7Ci0gICAgICAgICAgICBtX2Zyb250
ZW5kLT5yZXNldCgpOworICAgICAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZCkgeworICAgICAg
ICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+cmVzZXQoKTsKICAgICAgICAgICAgIG1fZG9tQWdl
bnQtPnJlc2V0KCk7CiAgICAgICAgICAgICBtX2Nzc0FnZW50LT5yZXNldCgpOwogICAgICAgICB9
CkBAIC02NTUsNyArNTU5LDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkQ29tbWl0TG9hZChE
b2N1bWVudExvYWRlciogbG9hZGVyKQogICAgICAgICBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuY2xl
YXIoKTsKICNlbmRpZgogCi0gICAgICAgIGlmIChtX2Zyb250ZW5kKQorICAgICAgICBpZiAobV9p
bnNwZWN0b3JGcm9udGVuZCkKICAgICAgICAgICAgIG1fZG9tQWdlbnQtPnNldERvY3VtZW50KG1f
aW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkpOwogICAgIH0KIH0KQEAgLTY2
Nyw4ICs1NzEsOCBAQCB2b2lkIEluc3BlY3RvckFnZW50OjptYWluUmVzb3VyY2VGaXJlZERPTUNv
bnRlbnRFdmVudChEb2N1bWVudExvYWRlciogbG9hZGVyLCBjbwogCiAgICAgaWYgKG1fdGltZWxp
bmVBZ2VudCkKICAgICAgICAgbV90aW1lbGluZUFnZW50LT5kaWRNYXJrRE9NQ29udGVudEV2ZW50
KCk7Ci0gICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIG1fZnJvbnRlbmQtPmRvbUNvbnRlbnRF
dmVudEZpcmVkKGN1cnJlbnRUaW1lKCkpOworICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kKQor
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kLT5kb21Db250ZW50RXZlbnRGaXJlZChjdXJyZW50
VGltZSgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6bWFpblJlc291cmNlRmlyZWRMb2Fk
RXZlbnQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgS1VSTCYgdXJsKQpAQCAtNjc4LDgg
KzU4Miw4IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6Om1haW5SZXNvdXJjZUZpcmVkTG9hZEV2ZW50
KERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IEtVCiAKICAgICBpZiAobV90aW1lbGluZUFn
ZW50KQogICAgICAgICBtX3RpbWVsaW5lQWdlbnQtPmRpZE1hcmtMb2FkRXZlbnQoKTsKLSAgICBp
ZiAobV9mcm9udGVuZCkKLSAgICAgICAgbV9mcm9udGVuZC0+bG9hZEV2ZW50RmlyZWQoY3VycmVu
dFRpbWUoKSk7CisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmQpCisgICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmQtPmxvYWRFdmVudEZpcmVkKGN1cnJlbnRUaW1lKCkpOwogfQogCiBib29sIElu
c3BlY3RvckFnZW50Ojppc01haW5SZXNvdXJjZUxvYWRlcihEb2N1bWVudExvYWRlciogbG9hZGVy
LCBjb25zdCBLVVJMJiByZXF1ZXN0VXJsKQpAQCAtNjkyLDcgKzU5Niw3IEBAIHZvaWQgSW5zcGVj
dG9yQWdlbnQ6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiAgICAg
aWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2Zyb250ZW5kKSB7
CisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmQpIHsKICAgICAgICAgLy8gT25seSBlbmFibGUg
bG9hZCB0aW1pbmcgYW5kIHJhdyBoZWFkZXJzIGlmIGZyb250LWVuZCBpcyBhdHRhY2hlZCwgYXMg
b3RoZXJ3aXNlIHdlIG1heSBwcm9kdWNlIG92ZXJoZWFkLgogICAgICAgICByZXF1ZXN0LnNldFJl
cG9ydExvYWRUaW1pbmcodHJ1ZSk7CiAgICAgICAgIHJlcXVlc3Quc2V0UmVwb3J0UmF3SGVhZGVy
cyh0cnVlKTsKQEAgLTcyMSw5ICs2MjUsOSBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpzdGFydFRp
bWVsaW5lUHJvZmlsZXIoKQogICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fdGltZWxpbmVBZ2VudCA9IG5ldyBJbnNwZWN0b3JUaW1lbGluZUFnZW50KG1f
ZnJvbnRlbmQuZ2V0KCkpOwotICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICBtX2Zyb250ZW5k
LT50aW1lbGluZVByb2ZpbGVyV2FzU3RhcnRlZCgpOworICAgIG1fdGltZWxpbmVBZ2VudCA9IG5l
dyBJbnNwZWN0b3JUaW1lbGluZUFnZW50KG1faW5zcGVjdG9yRnJvbnRlbmQpOworICAgIGlmICht
X2luc3BlY3RvckZyb250ZW5kKQorICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kLT50aW1lbGlu
ZVByb2ZpbGVyV2FzU3RhcnRlZCgpOwogCiAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0
b3JTdGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQsIHRydWUpOwogfQpAQCAtNzM3LDggKzY0
MSw4IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV90aW1lbGluZUFnZW50ID0gMDsKLSAgICBpZiAobV9mcm9udGVu
ZCkKLSAgICAgICAgbV9mcm9udGVuZC0+dGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQoKTsKKyAg
ICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZCkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+
dGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQoKTsKIAogICAgIG1fc3RhdGUtPnNldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkLCBmYWxzZSk7CiB9CkBAIC03
NjEsOCArNjY1LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCkKICAgICB7CiAgICAgICAgIGlmIChz
Y3JpcHRDb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRDb250ZXh0KS0+
cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICAgICAgaW5zcGVjdG9y
LT5wb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZCgqbV93b3JrZXIsIG1fYWN0aW9uKTsK
KyAgICAgICAgICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBzdGF0aWNf
Y2FzdDxEb2N1bWVudCo+KHNjcmlwdENvbnRleHQpLT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+aW5zcGVjdG9yQWdlbnQoKSkKKyAgICAgICAgICAgICAgICBpbnNwZWN0b3JBZ2VudC0+
cG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmQoKm1fd29ya2VyLCBtX2FjdGlvbik7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTc3MywxNSArNjc3LDE1IEBAIHByaXZhdGU6CiAKIHZvaWQg
SW5zcGVjdG9yQWdlbnQ6OnBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kKGNvbnN0IElu
c3BlY3RvcldvcmtlclJlc291cmNlJiB3b3JrZXIsIEluc3BlY3RvckFnZW50OjpXb3JrZXJBY3Rp
b24gYWN0aW9uKQogewotICAgIGlmICghbV9mcm9udGVuZCkKKyAgICBpZiAoIW1faW5zcGVjdG9y
RnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgIGNhc2UgSW5zcGVjdG9yQWdlbnQ6Oldvcmtl
ckNyZWF0ZWQ6Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZENyZWF0ZVdvcmtlcih3b3JrZXIuaWQo
KSwgd29ya2VyLnVybCgpLCB3b3JrZXIuaXNTaGFyZWRXb3JrZXIoKSk7CisgICAgICAgIG1faW5z
cGVjdG9yRnJvbnRlbmQtPmRpZENyZWF0ZVdvcmtlcih3b3JrZXIuaWQoKSwgd29ya2VyLnVybCgp
LCB3b3JrZXIuaXNTaGFyZWRXb3JrZXIoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5z
cGVjdG9yQWdlbnQ6OldvcmtlckRlc3Ryb3llZDoKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkRGVz
dHJveVdvcmtlcih3b3JrZXIuaWQoKSk7CisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmQtPmRp
ZERlc3Ryb3lXb3JrZXIod29ya2VyLmlkKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAjZW5k
aWYKQEAgLTc5NCw3ICs2OTgsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpkaWRDcmVhdGVXb3Jr
ZXIoaW50cHRyX3QgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcgogCiAgICAgUmVm
UHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiB3b3JrZXJSZXNvdXJjZShJbnNwZWN0b3JXb3Jr
ZXJSZXNvdXJjZTo6Y3JlYXRlKGlkLCB1cmwsIGlzU2hhcmVkV29ya2VyKSk7CiAgICAgbV93b3Jr
ZXJzLnNldChpZCwgd29ya2VyUmVzb3VyY2UpOwotICAgIGlmIChtX2luc3BlY3RlZFBhZ2UgJiYg
bV9mcm9udGVuZCkKKyAgICBpZiAobV9pbnNwZWN0ZWRQYWdlICYmIG1faW5zcGVjdG9yRnJvbnRl
bmQpCiAgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnBv
c3RUYXNrKFBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzazo6Y3JlYXRlKHdvcmtl
clJlc291cmNlLCBJbnNwZWN0b3JBZ2VudDo6V29ya2VyQ3JlYXRlZCkpOwogfQogCkBAIC04MDYs
NyArNzEwLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkRGVzdHJveVdvcmtlcihpbnRwdHJf
dCBpZCkKICAgICBXb3JrZXJzTWFwOjppdGVyYXRvciB3b3JrZXJSZXNvdXJjZSA9IG1fd29ya2Vy
cy5maW5kKGlkKTsKICAgICBpZiAod29ya2VyUmVzb3VyY2UgPT0gbV93b3JrZXJzLmVuZCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFnZSAmJiBtX2Zyb250ZW5kKQor
ICAgIGlmIChtX2luc3BlY3RlZFBhZ2UgJiYgbV9pbnNwZWN0b3JGcm9udGVuZCkKICAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soUG9zdFdv
cmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpjcmVhdGUod29ya2VyUmVzb3VyY2UtPnNl
Y29uZCwgSW5zcGVjdG9yQWdlbnQ6OldvcmtlckRlc3Ryb3llZCkpOwogICAgIG1fd29ya2Vycy5y
ZW1vdmUod29ya2VyUmVzb3VyY2UpOwogfQpAQCAtODIzLDggKzcyNyw4IEBAIHZvaWQgSW5zcGVj
dG9yQWdlbnQ6OmRpZE9wZW5EYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwg
Y29uc3QgU3RyaW5nCiAgICAgbV9kYXRhYmFzZVJlc291cmNlcy5zZXQocmVzb3VyY2UtPmlkKCks
IHJlc291cmNlKTsKIAogICAgIC8vIFJlc291cmNlcyBhcmUgb25seSBib3VuZCB3aGlsZSB2aXNp
YmxlLgotICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICByZXNvdXJjZS0+YmluZChtX2Zyb250
ZW5kLmdldCgpKTsKKyAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZCkKKyAgICAgICAgcmVzb3Vy
Y2UtPmJpbmQobV9pbnNwZWN0b3JGcm9udGVuZCk7CiB9CiAjZW5kaWYKIApAQCAtOTI5LDggKzgz
Myw4IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2UoU3RvcmFnZUFyZWEq
IHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYWxTdG9yCiAgICAgbV9kb21TdG9yYWdlUmVzb3VyY2Vz
LnNldChyZXNvdXJjZS0+aWQoKSwgcmVzb3VyY2UpOwogCiAgICAgLy8gUmVzb3VyY2VzIGFyZSBv
bmx5IGJvdW5kIHdoaWxlIHZpc2libGUuCi0gICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIHJl
c291cmNlLT5iaW5kKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIGlmIChtX2luc3BlY3RvckZyb250
ZW5kKQorICAgICAgICByZXNvdXJjZS0+YmluZChtX2luc3BlY3RvckZyb250ZW5kKTsKIH0KICNl
bmRpZgogCkBAIC0xMDE2LDkgKzkyMCw5IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNob3dBbmRF
bmFibGVEZWJ1Z2dlcigpCiAgICAgaWYgKGRlYnVnZ2VyRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoIW1fZnJvbnRlbmQpIHsKKyAgICBpZiAoIW1faW5zcGVjdG9yRnJvbnRl
bmQpIHsKICAgICAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IHRydWU7Ci0gICAgICAg
IHNob3dQYW5lbChTY3JpcHRzUGFuZWwpOworICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5z
aG93UGFuZWwoSW5zcGVjdG9yQ29udHJvbGxlcjo6U2NyaXB0c1BhbmVsKTsKICAgICB9IGVsc2UK
ICAgICAgICAgZW5hYmxlRGVidWdnZXIoZmFsc2UpOwogfQpAQCAtMTAzMSwxMCArOTM1LDEwIEBA
IHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKQogCiAgICAg
QVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CiAKLSAgICBtX2RlYnVnZ2VyQWdlbnQgPSBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZC5nZXQoKSk7CisgICAgbV9k
ZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRoaXMsIG1faW5z
cGVjdG9yRnJvbnRlbmQpOwogICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQgPSBJbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRoaXMpOwogCi0gICAgbV9mcm9udGVuZC0+ZGVi
dWdnZXJXYXNFbmFibGVkKCk7CisgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+ZGVidWdnZXJXYXNF
bmFibGVkKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2FibGVEZWJ1Z2dlcihib29s
IGFsd2F5cykKQEAgLTEwNTIsOCArOTU2LDggQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJs
ZURlYnVnZ2VyKGJvb2wgYWx3YXlzKQogCiAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9
IGZhbHNlOwogCi0gICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIG1fZnJvbnRlbmQtPmRlYnVn
Z2VyV2FzRGlzYWJsZWQoKTsKKyAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZCkKKyAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZC0+ZGVidWdnZXJXYXNEaXNhYmxlZCgpOwogfQogCiB2b2lkIElu
c3BlY3RvckFnZW50OjpyZXN1bWUoKQpAQCAtMTA3MCw4ICs5NzQsOCBAQCB2b2lkIEluc3BlY3Rv
ckFnZW50OjpzZXRBbGxCcm93c2VyQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJyZWFrcAogCiB2b2lkIEluc3BlY3RvckFnZW50OjpldmFsdWF0ZUZvclRlc3RJbkZyb250
ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCkKIHsKLSAgICBpZiAobV9mcm9u
dGVuZCkKLSAgICAgICAgbV9mcm9udGVuZC0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjYWxs
SWQsIHNjcmlwdCk7CisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmQpCisgICAgICAgIG1faW5z
cGVjdG9yRnJvbnRlbmQtPmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoY2FsbElkLCBzY3JpcHQp
OwogICAgIGVsc2UKICAgICAgICAgbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuYXBwZW5k
KHBhaXI8bG9uZywgU3RyaW5nPihjYWxsSWQsIHNjcmlwdCkpOwogfQpAQCAtMTA4NywyNTEgKzk5
MSw2IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQo
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYganNvCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQog
Ci1zdGF0aWMgUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKLXsKLSAgICBQ
YXRoIHF1YWRQYXRoOwotICAgIHF1YWRQYXRoLm1vdmVUbyhxdWFkLnAxKCkpOwotICAgIHF1YWRQ
YXRoLmFkZExpbmVUbyhxdWFkLnAyKCkpOwotICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnAz
KCkpOwotICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnA0KCkpOwotICAgIHF1YWRQYXRoLmNs
b3NlU3VicGF0aCgpOwotICAgIHJldHVybiBxdWFkUGF0aDsKLX0KLQotc3RhdGljIHZvaWQgZHJh
d091dGxpbmVkUXVhZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYg
cXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IG91
dGxpbmVUaGlja25lc3MgPSAyOwotICAgIHN0YXRpYyBjb25zdCBDb2xvciBvdXRsaW5lQ29sb3Io
NjIsIDg2LCAxODAsIDIyOCk7Ci0KLSAgICBQYXRoIHF1YWRQYXRoID0gcXVhZFRvUGF0aChxdWFk
KTsKLQotICAgIC8vIENsaXAgb3V0IHRoZSBxdWFkLCB0aGVuIGRyYXcgd2l0aCBhIDJweCBzdHJv
a2UgdG8gZ2V0IGEgcGl4ZWwKLSAgICAvLyBvZiBvdXRsaW5lIChiZWNhdXNlIGluZmxhdGluZyBh
IHF1YWQgaXMgaGFyZCkKLSAgICB7Ci0gICAgICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAgICBj
b250ZXh0LmNsaXBPdXQocXVhZFBhdGgpOwotCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhp
Y2tuZXNzKG91dGxpbmVUaGlja25lc3MpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9y
KG91dGxpbmVDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGNvbnRleHQuc3Ry
b2tlUGF0aChxdWFkUGF0aCk7Ci0KLSAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQot
Ci0gICAgLy8gTm93IGRvIHRoZSBmaWxsCi0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENv
bG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRQYXRo
KTsKLX0KLQotc3RhdGljIHZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBGbG9hdFF1YWQmIGNs
aXBRdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQotewotICAgIGNvbnRleHQuc2F2ZSgpOwot
ICAgIFBhdGggY2xpcFF1YWRQYXRoID0gcXVhZFRvUGF0aChjbGlwUXVhZCk7Ci0gICAgY29udGV4
dC5jbGlwT3V0KGNsaXBRdWFkUGF0aCk7Ci0gICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBx
dWFkLCBmaWxsQ29sb3IpOwotICAgIGNvbnRleHQucmVzdG9yZSgpOwotfQotCi1zdGF0aWMgdm9p
ZCBkcmF3SGlnaGxpZ2h0Rm9yQm94KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxv
YXRRdWFkJiBjb250ZW50UXVhZCwgY29uc3QgRmxvYXRRdWFkJiBwYWRkaW5nUXVhZCwgY29uc3Qg
RmxvYXRRdWFkJiBib3JkZXJRdWFkLCBjb25zdCBGbG9hdFF1YWQmIG1hcmdpblF1YWQpCi17Ci0g
ICAgc3RhdGljIGNvbnN0IENvbG9yIGNvbnRlbnRCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxMjgp
OwotICAgIHN0YXRpYyBjb25zdCBDb2xvciBwYWRkaW5nQm94Q29sb3IoMTI1LCAxNzMsIDIxNywg
MTYwKTsKLSAgICBzdGF0aWMgY29uc3QgQ29sb3IgYm9yZGVyQm94Q29sb3IoMTI1LCAxNzMsIDIx
NywgMTkyKTsKLSAgICBzdGF0aWMgY29uc3QgQ29sb3IgbWFyZ2luQm94Q29sb3IoMTI1LCAxNzMs
IDIxNywgMjI4KTsKLQotICAgIGlmIChtYXJnaW5RdWFkICE9IGJvcmRlclF1YWQpCi0gICAgICAg
IGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBtYXJnaW5RdWFkLCBib3JkZXJRdWFk
LCBtYXJnaW5Cb3hDb2xvcik7Ci0gICAgaWYgKGJvcmRlclF1YWQgIT0gcGFkZGluZ1F1YWQpCi0g
ICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBib3JkZXJRdWFkLCBwYWRk
aW5nUXVhZCwgYm9yZGVyQm94Q29sb3IpOwotICAgIGlmIChwYWRkaW5nUXVhZCAhPSBjb250ZW50
UXVhZCkKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIHBhZGRpbmdR
dWFkLCBjb250ZW50UXVhZCwgcGFkZGluZ0JveENvbG9yKTsKLQotICAgIGRyYXdPdXRsaW5lZFF1
YWQoY29udGV4dCwgY29udGVudFF1YWQsIGNvbnRlbnRCb3hDb2xvcik7Ci19Ci0KLXN0YXRpYyB2
b2lkIGRyYXdIaWdobGlnaHRGb3JMaW5lQm94ZXNPclNWR1JlbmRlcmVyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGxpbmVCb3hRdWFkcykKLXsKLSAg
ICBzdGF0aWMgY29uc3QgQ29sb3IgbGluZUJveENvbG9yKDEyNSwgMTczLCAyMTcsIDEyOCk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVCb3hRdWFkcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBsaW5lQm94UXVhZHNbaV0sIGxpbmVCb3hD
b2xvcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb252ZXJ0RnJvbUZyYW1lVG9NYWluRnJh
bWUoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiByZWN0KQotewotICAgIHJlY3QgPSBmcmFtZS0+cGFn
ZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGZyYW1lLT52aWV3KCkt
PmNvbnRlbnRzVG9XaW5kb3cocmVjdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIEludFNpemUgZnJh
bWVUb01haW5GcmFtZU9mZnNldChGcmFtZSogZnJhbWUpCi17Ci0gICAgSW50UG9pbnQgbWFpbkZy
YW1lUG9pbnQgPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0Nv
bnRlbnRzKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoKSkpOwotICAg
IHJldHVybiBtYWluRnJhbWVQb2ludCAtIEludFBvaW50KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9y
QWdlbnQ6OmRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBpZiAoIW1faGlnaGxpZ2h0ZWROb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9oaWdobGlnaHRlZE5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IG1faGlnaGxpZ2h0ZWROb2RlLT5kb2N1bWVudCgp
LT5mcmFtZSgpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIWNvbnRhaW5pbmdGcmFtZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBtYWluRnJhbWVPZmZzZXQgPSBmcmFtZVRvTWFpbkZy
YW1lT2Zmc2V0KGNvbnRhaW5pbmdGcmFtZSk7Ci0gICAgSW50UmVjdCBib3VuZGluZ0JveCA9IHJl
bmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlKTsKLSAgICBib3VuZGluZ0JveC5t
b3ZlKG1haW5GcmFtZU9mZnNldCk7Ci0KLSAgICBJbnRSZWN0IHRpdGxlUmVmZXJlbmNlQm94ID0g
Ym91bmRpbmdCb3g7Ci0KLSAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKLQotICAgIEZyYW1l
VmlldyogdmlldyA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKLSAgICBG
bG9hdFJlY3Qgb3ZlcmxheVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICBp
ZiAoIW92ZXJsYXlSZWN0LmNvbnRhaW5zKGJvdW5kaW5nQm94KSAmJiAhYm91bmRpbmdCb3guY29u
dGFpbnMoZW5jbG9zaW5nSW50UmVjdChvdmVybGF5UmVjdCkpKQotICAgICAgICBvdmVybGF5UmVj
dCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgIGNvbnRleHQudHJhbnNsYXRlKC1v
dmVybGF5UmVjdC54KCksIC1vdmVybGF5UmVjdC55KCkpOwotCi0gICAgLy8gUmVuZGVyU1ZHUm9v
dCBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgdGhyb3VnaCB0aGUgaXNCb3goKSBjb2RlIHBhdGgsIGFs
bCBvdGhlciBTVkcgZWxlbWVudHMgc2hvdWxkIGp1c3QgZHVtcCB0aGVpciBhYnNvbHV0ZVF1YWRz
KCkuCi0jaWYgRU5BQkxFKFNWRykKLSAgICBib29sIGlzU1ZHUmVuZGVyZXIgPSByZW5kZXJlci0+
bm9kZSgpICYmIHJlbmRlcmVyLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgpICYmICFyZW5kZXJlci0+
aXNTVkdSb290KCk7Ci0jZWxzZQotICAgIGJvb2wgaXNTVkdSZW5kZXJlciA9IGZhbHNlOwotI2Vu
ZGlmCi0KLSAgICBpZiAocmVuZGVyZXItPmlzQm94KCkgJiYgIWlzU1ZHUmVuZGVyZXIpIHsKLSAg
ICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChyZW5kZXJlcik7Ci0KLSAg
ICAgICAgSW50UmVjdCBjb250ZW50Qm94ID0gcmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOwot
Ci0gICAgICAgIEludFJlY3QgcGFkZGluZ0JveChjb250ZW50Qm94LngoKSAtIHJlbmRlckJveC0+
cGFkZGluZ0xlZnQoKSwgY29udGVudEJveC55KCkgLSByZW5kZXJCb3gtPnBhZGRpbmdUb3AoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCb3gud2lkdGgoKSArIHJlbmRlckJv
eC0+cGFkZGluZ0xlZnQoKSArIHJlbmRlckJveC0+cGFkZGluZ1JpZ2h0KCksIGNvbnRlbnRCb3gu
aGVpZ2h0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdUb3AoKSArIHJlbmRlckJveC0+cGFkZGluZ0Jv
dHRvbSgpKTsKLSAgICAgICAgSW50UmVjdCBib3JkZXJCb3gocGFkZGluZ0JveC54KCkgLSByZW5k
ZXJCb3gtPmJvcmRlckxlZnQoKSwgcGFkZGluZ0JveC55KCkgLSByZW5kZXJCb3gtPmJvcmRlclRv
cCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm94LndpZHRoKCkgKyByZW5k
ZXJCb3gtPmJvcmRlckxlZnQoKSArIHJlbmRlckJveC0+Ym9yZGVyUmlnaHQoKSwgcGFkZGluZ0Jv
eC5oZWlnaHQoKSArIHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgKyByZW5kZXJCb3gtPmJvcmRlckJv
dHRvbSgpKTsKLSAgICAgICAgSW50UmVjdCBtYXJnaW5Cb3goYm9yZGVyQm94LngoKSAtIHJlbmRl
ckJveC0+bWFyZ2luTGVmdCgpLCBib3JkZXJCb3gueSgpIC0gcmVuZGVyQm94LT5tYXJnaW5Ub3Ao
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm94LndpZHRoKCkgKyByZW5kZXJC
b3gtPm1hcmdpbkxlZnQoKSArIHJlbmRlckJveC0+bWFyZ2luUmlnaHQoKSwgYm9yZGVyQm94Lmhl
aWdodCgpICsgcmVuZGVyQm94LT5tYXJnaW5Ub3AoKSArIHJlbmRlckJveC0+bWFyZ2luQm90dG9t
KCkpOwotCi0gICAgICAgIHRpdGxlUmVmZXJlbmNlQm94ID0gbWFyZ2luQm94OwotICAgICAgICB0
aXRsZVJlZmVyZW5jZUJveC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7Ci0gICAgICAgIHRpdGxlUmVm
ZXJlbmNlQm94Lm1vdmUoYm91bmRpbmdCb3gueCgpLCBib3VuZGluZ0JveC55KCkpOwotCi0gICAg
ICAgIEZsb2F0UXVhZCBhYnNDb250ZW50UXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFJlY3QoY29udGVudEJveCkpOwotICAgICAgICBGbG9hdFF1YWQgYWJzUGFkZGlu
Z1F1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHBhZGRpbmdC
b3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic0JvcmRlclF1YWQgPSByZW5kZXJCb3gtPmxvY2Fs
VG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGJvcmRlckJveCkpOwotICAgICAgICBGbG9hdFF1YWQg
YWJzTWFyZ2luUXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
bWFyZ2luQm94KSk7Ci0KLSAgICAgICAgYWJzQ29udGVudFF1YWQubW92ZShtYWluRnJhbWVPZmZz
ZXQpOwotICAgICAgICBhYnNQYWRkaW5nUXVhZC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7Ci0gICAg
ICAgIGFic0JvcmRlclF1YWQubW92ZShtYWluRnJhbWVPZmZzZXQpOwotICAgICAgICBhYnNNYXJn
aW5RdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKLQotICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9y
Qm94KGNvbnRleHQsIGFic0NvbnRlbnRRdWFkLCBhYnNQYWRkaW5nUXVhZCwgYWJzQm9yZGVyUXVh
ZCwgYWJzTWFyZ2luUXVhZCk7Ci0gICAgfSBlbHNlIGlmIChyZW5kZXJlci0+aXNSZW5kZXJJbmxp
bmUoKSB8fCBpc1NWR1JlbmRlcmVyKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc2hv
dyBtYXJnaW5zL3BhZGRpbmcvYm9yZGVyIGZvciBpbmxpbmVzLgotICAgICAgICBWZWN0b3I8Rmxv
YXRRdWFkPiBsaW5lQm94UXVhZHM7Ci0gICAgICAgIHJlbmRlcmVyLT5hYnNvbHV0ZVF1YWRzKGxp
bmVCb3hRdWFkcyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaW5lQm94UXVh
ZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBsaW5lQm94UXVhZHNbaV0gKz0gbWFpbkZyYW1l
T2Zmc2V0OwotCi0gICAgICAgIGRyYXdIaWdobGlnaHRGb3JMaW5lQm94ZXNPclNWR1JlbmRlcmVy
KGNvbnRleHQsIGxpbmVCb3hRdWFkcyk7Ci0gICAgfQotCi0gICAgLy8gRHJhdyBub2RlIHRpdGxl
IGlmIG5lY2Vzc2FyeS4KLQotICAgIGlmICghbV9oaWdobGlnaHRlZE5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdz
ID0gY29udGFpbmluZ0ZyYW1lLT5zZXR0aW5ncygpOwotICAgIGRyYXdFbGVtZW50VGl0bGUoY29u
dGV4dCwgdGl0bGVSZWZlcmVuY2VCb3gsIG92ZXJsYXlSZWN0LCBzZXR0aW5ncyk7Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBvdmVybGF5
UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKSBjb25zdAotewotICAgIHN0YXRpYyBj
b25zdCBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7Ci0gICAgc3RhdGljIGNvbnN0IGludCBmb250SGVp
Z2h0UHggPSAxMjsKLSAgICBzdGF0aWMgY29uc3QgaW50IGJvcmRlcldpZHRoUHggPSAxOwotICAg
IHN0YXRpYyBjb25zdCBDb2xvciB0b29sdGlwQmFja2dyb3VuZENvbG9yKDI1NSwgMjU1LCAxOTQs
IDI1NSk7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIHRvb2x0aXBCb3JkZXJDb2xvcihDb2xvcjo6
YmxhY2spOwotICAgIHN0YXRpYyBjb25zdCBDb2xvciB0b29sdGlwRm9udENvbG9yKENvbG9yOjpi
bGFjayk7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1f
aGlnaGxpZ2h0ZWROb2RlLmdldCgpKTsKLSAgICBib29sIGlzWEhUTUwgPSBlbGVtZW50LT5kb2N1
bWVudCgpLT5pc1hIVE1MRG9jdW1lbnQoKTsKLSAgICBTdHJpbmcgbm9kZVRpdGxlID0gaXNYSFRN
TCA/IGVsZW1lbnQtPm5vZGVOYW1lKCkgOiBlbGVtZW50LT5ub2RlTmFtZSgpLmxvd2VyKCk7Ci0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUo
KTsKLSAgICBpZiAoIWlkVmFsdWUuaXNOdWxsKCkgJiYgIWlkVmFsdWUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIG5vZGVUaXRsZSArPSAiIyI7Ci0gICAgICAgIG5vZGVUaXRsZSArPSBpZFZhbHVlOwot
ICAgIH0KLSAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50LT5pc1N0eWxlZEVs
ZW1lbnQoKSkgewotICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzU3Ry
aW5nID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7
Ci0gICAgICAgIHNpemVfdCBjbGFzc05hbWVDb3VudCA9IGNsYXNzTmFtZXNTdHJpbmcuc2l6ZSgp
OwotICAgICAgICBpZiAoY2xhc3NOYW1lQ291bnQpIHsKLSAgICAgICAgICAgIEhhc2hTZXQ8QXRv
bWljU3RyaW5nPiB1c2VkQ2xhc3NOYW1lczsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1N0cmluZ1tpXTsKLSAgICAgICAgICAgICAg
ICBpZiAodXNlZENsYXNzTmFtZXMuY29udGFpbnMoY2xhc3NOYW1lKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgdXNlZENsYXNzTmFtZXMuYWRkKGNsYXNz
TmFtZSk7Ci0gICAgICAgICAgICAgICAgbm9kZVRpdGxlICs9ICIuIjsKLSAgICAgICAgICAgICAg
ICBub2RlVGl0bGUgKz0gY2xhc3NOYW1lOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgRWxlbWVudCogaGlnaGxpZ2h0ZWRFbGVtZW50ID0gbV9oaWdobGlnaHRlZE5vZGUt
PmlzRWxlbWVudE5vZGUoKSA/IHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX2hpZ2hsaWdodGVkTm9k
ZS5nZXQoKSkgOiAwOwotICAgIG5vZGVUaXRsZSArPSAiIFsiOwotICAgIG5vZGVUaXRsZSArPSBT
dHJpbmc6Om51bWJlcihoaWdobGlnaHRlZEVsZW1lbnQgPyBoaWdobGlnaHRlZEVsZW1lbnQtPm9m
ZnNldFdpZHRoKCkgOiBib3VuZGluZ0JveC53aWR0aCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5k
KHN0YXRpY19jYXN0PFVDaGFyPigweDAwRDcpKTsgLy8gJnRpbWVzOwotICAgIG5vZGVUaXRsZSAr
PSBTdHJpbmc6Om51bWJlcihoaWdobGlnaHRlZEVsZW1lbnQgPyBoaWdobGlnaHRlZEVsZW1lbnQt
Pm9mZnNldEhlaWdodCgpIDogYm91bmRpbmdCb3guaGVpZ2h0KCkpOwotICAgIG5vZGVUaXRsZSAr
PSAiXSI7Ci0KLSAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKLSAgICBGb250RmFtaWx5IGZhbWls
eTsKLSAgICBmYW1pbHkuc2V0RmFtaWx5KHNldHRpbmdzLT5maXhlZEZvbnRGYW1pbHkoKSk7Ci0g
ICAgZGVzYy5zZXRGYW1pbHkoZmFtaWx5KTsKLSAgICBkZXNjLnNldENvbXB1dGVkU2l6ZShmb250
SGVpZ2h0UHgpOwotICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7Ci0gICAgZm9udC51
cGRhdGUoMCk7Ci0KLSAgICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2RlVGl0bGUpOwotICAgIElu
dFBvaW50IHRpdGxlQmFzZVBvaW50ID0gYm91bmRpbmdCb3guYm90dG9tTGVmdCgpOwotICAgIHRp
dGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdEluZmxhdGVQeCk7Ci0gICAgSW50
UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRl
eHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhlaWdodFB4KSk7Ci0gICAgdGl0
bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7Ci0KLSAgICAvLyBUaGUgaW5pdGlhbCBvZmZz
ZXRzIG5lZWRlZCB0byBjb21wZW5zYXRlIGZvciBhIDFweC10aGljayBib3JkZXIgc3Ryb2tlICh3
aGljaCBpcyBub3QgYSBwYXJ0IG9mIHRoZSByZWN0YW5nbGUpLgotICAgIGludCBkeCA9IC1ib3Jk
ZXJXaWR0aFB4OwotICAgIGludCBkeSA9IGJvcmRlcldpZHRoUHg7Ci0KLSAgICAvLyBJZiB0aGUg
dGlwIHN0aWNrcyBiZXlvbmQgdGhlIHJpZ2h0IG9mIG92ZXJsYXlSZWN0LCByaWdodC1hbGlnbiB0
aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0gICAgaWYgKHRpdGxlUmVjdC5yaWdodCgp
ID4gb3ZlcmxheVJlY3QucmlnaHQoKSkKLSAgICAgICAgZHggPSBvdmVybGF5UmVjdC5yaWdodCgp
IC0gdGl0bGVSZWN0LnJpZ2h0KCk7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQg
dGhlIGxlZnQgb2Ygb3ZlcmxheVJlY3QsIGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlk
IGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QueCgpICsgZHggPCBvdmVybGF5UmVjdC54KCkp
Ci0gICAgICAgIGR4ID0gb3ZlcmxheVJlY3QueCgpIC0gdGl0bGVSZWN0LngoKSAtIGJvcmRlcldp
ZHRoUHg7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBv
dmVybGF5UmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBib3VuZGluZyBib3guCi0gICAgaWYg
KHRpdGxlUmVjdC5ib3R0b20oKSA+IG92ZXJsYXlSZWN0LmJvdHRvbSgpKSB7Ci0gICAgICAgIGR5
ID0gYm91bmRpbmdCb3gueSgpIC0gdGl0bGVSZWN0LmJvdHRvbSgpIC0gYm9yZGVyV2lkdGhQeDsK
LSAgICAgICAgLy8gSWYgdGhlIHRpcCBzdGlsbCBzdGlja3MgYmV5b25kIHRoZSBib3R0b20gb2Yg
b3ZlcmxheVJlY3QsIGJvdHRvbS1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnku
Ci0gICAgICAgIGlmICh0aXRsZVJlY3QuYm90dG9tKCkgKyBkeSA+IG92ZXJsYXlSZWN0LmJvdHRv
bSgpKQotICAgICAgICAgICAgZHkgPSBvdmVybGF5UmVjdC5ib3R0b20oKSAtIHRpdGxlUmVjdC5i
b3R0b20oKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHRv
cCBvZiBvdmVybGF5UmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBvdmVybGF5UmVjdC4KLSAg
ICBpZiAodGl0bGVSZWN0LnkoKSArIGR5IDwgb3ZlcmxheVJlY3QueSgpKQotICAgICAgICBkeSA9
IG92ZXJsYXlSZWN0LnkoKSAtIHRpdGxlUmVjdC55KCkgKyBib3JkZXJXaWR0aFB4OwotCi0gICAg
dGl0bGVSZWN0Lm1vdmUoZHgsIGR5KTsKLSAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHRvb2x0
aXBCb3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5zZXRTdHJv
a2VUaGlja25lc3MoYm9yZGVyV2lkdGhQeCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG9v
bHRpcEJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5k
cmF3UmVjdCh0aXRsZVJlY3QpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvb2x0aXBGb250
Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwg
bm9kZVRpdGxlUnVuLCBJbnRQb2ludCh0aXRsZVJlY3QueCgpICsgcmVjdEluZmxhdGVQeCwgdGl0
bGVSZWN0LnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSkpOwotfQotCiB2b2lkIElu
c3BlY3RvckFnZW50OjpvcGVuSW5JbnNwZWN0ZWRXaW5kb3coY29uc3QgU3RyaW5nJiB1cmwpCiB7
CiAgICAgRnJhbWUqIG1haW5GcmFtZSA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7CkBA
IC0xMzk2LDYgKzEwNTUsMjEgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0RXh0cmFIZWFkZXJz
KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzKQogICAgIH0KIH0KIAordm9pZCBJ
bnNwZWN0b3JBZ2VudDo6aGlkZURPTU5vZGVIaWdobGlnaHQoKQoreworICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+aGlkZUhpZ2hsaWdodCgpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50Ojpo
aWRlRnJhbWVIaWdobGlnaHQoKQoreworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGlkZUhp
Z2hsaWdodCgpOworfQorCitib29sIEluc3BlY3RvckFnZW50OjplbmFibGVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFibGVkKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IDM2MmFiZWMuLjczYzcxMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCkBAIC01Niw3ICs1
Niw2IEBAIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdDsKIGNsYXNz
IEluamVjdGVkU2NyaXB0SG9zdDsKIGNsYXNzIEluc3BlY3RvckFycmF5OwotY2xhc3MgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI7CiBjbGFzcyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dDsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudDsK
QEAgLTExMCwxNSArMTA5LDkgQEAgY2xhc3MgSW5zcGVjdG9yQWdlbnQgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEluc3BlY3RvckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ29uc29sZVBhbmVsOwot
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBFbGVtZW50c1BhbmVsOwotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBQcm9maWxlc1BhbmVsOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBTY3JpcHRzUGFuZWw7Ci0KICAgICBJbnNwZWN0b3JBZ2VudChJbnNwZWN0b3JDb250cm9s
bGVyKiwgUGFnZSosIEluc3BlY3RvckNsaWVudCopOwogICAgIHZpcnR1YWwgfkluc3BlY3RvckFn
ZW50KCk7CiAKLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogaW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIoKSB7IHJldHVybiBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQoKSB7IHJldHVybiBtX2Ns
aWVudDsgfQogICAgIEluamVjdGVkU2NyaXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRIb3N0KCkgeyBy
ZXR1cm4gbV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCk7IH0KIApAQCAtMTM0LDIyICsxMjcsMTUg
QEAgcHVibGljOgogICAgIHZvaWQgcmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25z
dCBTdHJpbmcmIGluc3BlY3RvckNvb2tpZSk7CiAKICAgICB2b2lkIGluc3BlY3QoTm9kZSopOwot
ICAgIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKTsKLSAgICB2b2lkIGhpZGVIaWdobGlnaHQoKTsKICAg
ICB2b2lkIGhpZ2hsaWdodERPTU5vZGUobG9uZyBub2RlSWQpOwotICAgIHZvaWQgaGlkZURPTU5v
ZGVIaWdobGlnaHQoKSB7IGhpZGVIaWdobGlnaHQoKTsgfQorICAgIHZvaWQgaGlkZURPTU5vZGVI
aWdobGlnaHQoKTsKIAogICAgIHZvaWQgaGlnaGxpZ2h0RnJhbWUodW5zaWduZWQgbG9uZyBmcmFt
ZUlkKTsKLSAgICB2b2lkIGhpZGVGcmFtZUhpZ2hsaWdodCgpIHsgaGlkZUhpZ2hsaWdodCgpOyB9
Ci0KLSAgICB2b2lkIHNob3coKTsKLSAgICB2b2lkIHNob3dQYW5lbChjb25zdCBTdHJpbmcmKTsK
LSAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBoaWRlRnJhbWVIaWdobGlnaHQoKTsKIAotICAg
IHZvaWQgY29ubmVjdEZyb250ZW5kKCk7Ci0gICAgdm9pZCByZXVzZUZyb250ZW5kKCk7CisgICAg
dm9pZCBzZXRGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCopOworICAgIEluc3BlY3RvckZyb250
ZW5kKiBmcm9udGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmQ7IH0KICAg
ICB2b2lkIGRpc2Nvbm5lY3RGcm9udGVuZCgpOwotICAgIEluc3BlY3RvckZyb250ZW5kKiBmcm9u
dGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRlbmQuZ2V0KCk7IH0KIAogICAgIEluc3BlY3Rv
clJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQoKTsKIApAQCAtMTc5LDE1ICsxNjUsMTEgQEAg
cHVibGljOgogICAgIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYXBwbGljYXRpb25D
YWNoZUFnZW50KCkgeyByZXR1cm4gbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0KCk7IH0KICNl
bmRpZgogCi0KKyAgICBib29sIGhhbmRsZU1vdXNlUHJlc3MoKTsKICAgICBib29sIHNlYXJjaGlu
Z0Zvck5vZGVJblBhZ2UoKSBjb25zdDsKICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKLSAgICBib29s
IGhhbmRsZU1vdXNlUHJlc3MoKTsKLQotICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4pOwotICAgIGJvb2wgaGFzSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5k
Q2xpZW50OyB9CiAKLSAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSos
IERPTVdyYXBwZXJXb3JsZCopOworICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxk
KEZyYW1lKik7CiAKICAgICB2b2lkIGRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqKTsKIApA
QCAtMjI1LDExICsyMDcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDbG9zZVdlYlNvY2tldCh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwogI2VuZGlmCiAKLSAgICBib29sIGhhc0Zyb250ZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9mcm9udGVuZDsgfQorICAgIGJvb2wgaGFzRnJvbnRlbmQoKSBj
b25zdCB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kOyB9CiAKLSAgICB2b2lkIGRyYXdOb2Rl
SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHZvaWQgb3BlbkluSW5zcGVj
dGVkV2luZG93KGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2b2lkIGRyYXdFbGVtZW50VGl0bGUo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0
UmVjdCYgb3ZlcmxheVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKikgY29uc3Q7CiAKICNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBib29sIGlzUmVjb3JkaW5nVXNlckluaXRpYXRl
ZFByb2ZpbGUoKSBjb25zdDsKQEAgLTI4NCw2ICsyNjQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpOwogCiAgICAgdm9pZCByZWxlYXNlRnJv
bnRlbmRMaWZldGltZUFnZW50cygpOworICAgIHZvaWQgY3JlYXRlRnJvbnRlbmRMaWZldGltZUFn
ZW50cygpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgdm9pZCB0b2dn
bGVSZWNvcmRCdXR0b24oYm9vbCk7CkBAIC0yOTgsOSArMjc5LDcgQEAgcHJpdmF0ZToKICAgICBJ
bnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CiAgICAgUGFnZSogbV9p
bnNwZWN0ZWRQYWdlOwogICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7Ci0gICAgT3duUHRy
PEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50OwotICAg
IGJvb2wgbV9vcGVuaW5nRnJvbnRlbmQ7Ci0gICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBt
X2Zyb250ZW5kOworICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2luc3BlY3RvckZyb250ZW5kOwog
ICAgIE93blB0cjxJbnNwZWN0b3JDU1NBZ2VudD4gbV9jc3NBZ2VudDsKICAgICBSZWZQdHI8SW5z
cGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7CiAKQEAgLTMzNyw5ICszMTYsNiBAQCBwcml2YXRl
OgogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXAgbV9kb21TdG9yYWdlUmVzb3VyY2VzOwogI2Vu
ZGlmCiAKLSAgICBTdHJpbmcgbV9zaG93QWZ0ZXJWaXNpYmxlOwotICAgIFJlZlB0cjxOb2RlPiBt
X2hpZ2hsaWdodGVkTm9kZTsKLSAgICBPd25QdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRyPEluamVjdGVkU2NyaXB0
SG9zdD4gbV9pbmplY3RlZFNjcmlwdEhvc3Q7CiAgICAgT3duUHRyPEluc3BlY3RvckNvbnNvbGVB
Z2VudD4gbV9jb25zb2xlQWdlbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBmYjg0MDllLi44NWVhNDllIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0zMywx
NyArMzMsNTAxIEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNs
aWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVkZSAiVGV4
dFJ1bi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiB0ZW1wb3Jhcnkgc29s
dXRpb24uIEl0IHdpbGwgYmVjb21lIGEgc2VwYXJhdGUgY2xhc3MgaW4gdGhlIG5leHQgcGF0Y2gg
YW5kIENvbnRyb2xsZXIgcmVsYXRlZCBzdWJzZXQgb2YgZnVuY3Rpb25zIHdpbGwgYmUgbW92ZWQg
ZnJvbSBJbnNwZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JDb250cm9sZXIuCitjb25zdCBjaGFyKiBj
b25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpFbGVtZW50c1BhbmVsID0gImVsZW1lbnRzIjsKK2Nv
bnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OkNvbnNvbGVQYW5lbCA9ICJjb25z
b2xlIjsKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OlNjcmlwdHNQYW5l
bCA9ICJzY3JpcHRzIjsKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OlBy
b2ZpbGVzUGFuZWwgPSAicHJvZmlsZXMiOworCiBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0
b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50
KQotICAgIDogSW5zcGVjdG9yQWdlbnQodGhpcywgcGFnZSwgaW5zcGVjdG9yQ2xpZW50KQorICAg
IDogbV9pbnNwZWN0b3JBZ2VudChuZXcgSW5zcGVjdG9yQWdlbnQodGhpcywgcGFnZSwgaW5zcGVj
dG9yQ2xpZW50KSkKKyAgICAsIG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIobmV3IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKG1faW5zcGVjdG9yQWdlbnQuZ2V0KCkpKQorICAgICwgbV9p
bnNwZWN0ZWRQYWdlKHBhZ2UpCisgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGll
bnQpCisgICAgLCBtX29wZW5pbmdGcm9udGVuZChmYWxzZSkKK3sKK30KKworSW5zcGVjdG9yQ29u
dHJvbGxlcjo6fkluc3BlY3RvckNvbnRyb2xsZXIoKQoreworICAgIEFTU0VSVCghbV9oaWdobGln
aHRlZE5vZGUpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckZy
b250ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50KQoreworICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgPSBpbnNw
ZWN0b3JGcm9udGVuZENsaWVudDsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ2xlYXJX
aW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkK
K3sKKyAgICBpZiAod29ybGQgIT0gbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1faW5zcGVjdG9yQWdlbnQtPmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3Js
ZChmcmFtZSk7CisKKyAgICAvLyBJZiB0aGUgcGFnZSBpcyBzdXBwb3NlZCB0byBzZXJ2ZSBhcyBJ
bnNwZWN0b3JGcm9udGVuZCBub3RpZnkgaW5zcGVjdG9yIGZyb250ZW5kCisgICAgLy8gY2xpZW50
IHRoYXQgaXQncyBjbGVhcmVkIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gZXhwb3NlIGluc3BlY3Rv
ciBiaW5kaW5ncy4KKyAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCAmJiBmcmFtZSA9
PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2xpZW50LT53aW5kb3dPYmplY3RDbGVhcmVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKCkKK3sKKyAgICBtX2luc3BlY3RvckFnZW50
LT5zdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzdG9wVGltZWxpbmVQcm9maWxlcigpCit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RvcFRp
bWVsaW5lUHJvZmlsZXIoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0
RnJvbnRlbmQoKQoreworICAgIG1fb3BlbmluZ0Zyb250ZW5kID0gZmFsc2U7CisgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZCA9IG5ldyBJbnNwZWN0b3JGcm9udGVuZChtX2luc3BlY3RvckNsaWVudCk7
CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c2V0RnJvbnRlbmQobV9pbnNwZWN0b3JGcm9udGVuZC5n
ZXQoKSk7CisKKyAgICBpZiAoIUluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRz
KCkpCisgICAgICAgIFNjcmlwdENvbnRyb2xsZXI6OnNldENhcHR1cmVDYWxsU3RhY2tGb3JVbmNh
dWdodEV4Y2VwdGlvbnModHJ1ZSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcm9u
dGVuZENyZWF0ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0
RnJvbnRlbmQoKQoreworICAgIG1faW5zcGVjdG9yQWdlbnQtPmRpc2Nvbm5lY3RGcm9udGVuZCgp
OworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZEltcGwo
KQoreworICAgIGlmICghbV9pbnNwZWN0b3JGcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIG1faW5zcGVjdG9yRnJvbnRlbmQuY2xlYXIoKTsKKworICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZnJvbnRlbmREZWxldGVkKCk7CisgICAgaWYgKCFJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246Omhhc0Zyb250ZW5kcygpKQorICAgICAgICBTY3JpcHRDb250cm9sbGVyOjpzZXRD
YXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRFeGNlcHRpb25zKGZhbHNlKTsKKworICAgIGhpZGVI
aWdobGlnaHQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkKK3sKKyAg
ICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fb3BlbmluZ0Zy
b250ZW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZCkK
KyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+YnJpbmdUb0Zyb250KCk7CisgICAgZWxzZSB7
CisgICAgICAgIG1fb3BlbmluZ0Zyb250ZW5kID0gdHJ1ZTsKKyAgICAgICAgbV9pbnNwZWN0b3JD
bGllbnQtPm9wZW5JbnNwZWN0b3JGcm9udGVuZCh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6Y2xvc2UoKQogeworICAgIGlmICghbV9pbnNwZWN0b3JGcm9udGVu
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1faW5zcGVjdG9yRnJvbnRlbmQtPmRpc2Nvbm5lY3RG
cm9tQmFja2VuZCgpOworICAgIGRpc2Nvbm5lY3RGcm9udGVuZCgpOwogfQogCit2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3QgU3Ry
aW5nJiBpbnNwZWN0b3JTdGF0ZUNvb2tpZSkKK3sKKyAgICBtX2luc3BlY3RvckFnZW50LT5yZXN0
b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGluc3BlY3RvclN0YXRlQ29va2llKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcg
Y2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCkKK3sKKyAgICBtX2luc3BlY3RvckFnZW50LT5l
dmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNhbGxJZCwgc2NyaXB0KTsKK30KKworUGFzc1JlZlB0
cjxOb2RlPiBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWdobGlnaHRlZE5vZGUoKQoreworICAgIHJl
dHVybiBtX2hpZ2hsaWdodGVkTm9kZS5nZXQoKTsgCit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6aGlkZUhpZ2hsaWdodCgpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2hpZ2hsaWdodGVkTm9kZSA9IDA7CisgICAgbV9pbnNwZWN0b3JDbGllbnQt
PmhpZGVIaWdobGlnaHQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWdobGln
aHQoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEFTU0VSVF9BUkcobm9kZSwgbm9kZSk7CisgICAgbV9oaWdobGlnaHRlZE5vZGUgPSBub2Rl
OworICAgIG1faW5zcGVjdG9yQ2xpZW50LT5oaWdobGlnaHQobm9kZSk7Cit9CisKKworc3RhdGlj
IFBhdGggcXVhZFRvUGF0aChjb25zdCBGbG9hdFF1YWQmIHF1YWQpCit7CisgICAgUGF0aCBxdWFk
UGF0aDsKKyAgICBxdWFkUGF0aC5tb3ZlVG8ocXVhZC5wMSgpKTsKKyAgICBxdWFkUGF0aC5hZGRM
aW5lVG8ocXVhZC5wMigpKTsKKyAgICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5wMygpKTsKKyAg
ICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5wNCgpKTsKKyAgICBxdWFkUGF0aC5jbG9zZVN1YnBh
dGgoKTsKKyAgICByZXR1cm4gcXVhZFBhdGg7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdPdXRsaW5l
ZFF1YWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNv
bnN0IENvbG9yJiBmaWxsQ29sb3IpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBvdXRsaW5lVGhp
Y2tuZXNzID0gMjsKKyAgICBzdGF0aWMgY29uc3QgQ29sb3Igb3V0bGluZUNvbG9yKDYyLCA4Niwg
MTgwLCAyMjgpOworCisgICAgUGF0aCBxdWFkUGF0aCA9IHF1YWRUb1BhdGgocXVhZCk7CisKKyAg
ICAvLyBDbGlwIG91dCB0aGUgcXVhZCwgdGhlbiBkcmF3IHdpdGggYSAycHggc3Ryb2tlIHRvIGdl
dCBhIHBpeGVsCisgICAgLy8gb2Ygb3V0bGluZSAoYmVjYXVzZSBpbmZsYXRpbmcgYSBxdWFkIGlz
IGhhcmQpCisgICAgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAgICAgY29udGV4dC5j
bGlwT3V0KHF1YWRQYXRoKTsKKworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhv
dXRsaW5lVGhpY2tuZXNzKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihvdXRsaW5l
Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgo
cXVhZFBhdGgpOworCisgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIH0KKworICAgIC8v
IE5vdyBkbyB0aGUgZmlsbAorICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvciwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5maWxsUGF0aChxdWFkUGF0aCk7Cit9CisK
K3N0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY29uc3QgRmxvYXRRdWFkJiBjbGlwUXVhZCwg
Y29uc3QgQ29sb3ImIGZpbGxDb2xvcikKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBQYXRo
IGNsaXBRdWFkUGF0aCA9IHF1YWRUb1BhdGgoY2xpcFF1YWQpOworICAgIGNvbnRleHQuY2xpcE91
dChjbGlwUXVhZFBhdGgpOworICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgcXVhZCwgZmls
bENvbG9yKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworc3RhdGljIHZvaWQgZHJhd0hp
Z2hsaWdodEZvckJveChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYg
Y29udGVudFF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgcGFkZGluZ1F1YWQsIGNvbnN0IEZsb2F0UXVh
ZCYgYm9yZGVyUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBtYXJnaW5RdWFkKQoreworICAgIHN0YXRp
YyBjb25zdCBDb2xvciBjb250ZW50Qm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMTI4KTsKKyAgICBz
dGF0aWMgY29uc3QgQ29sb3IgcGFkZGluZ0JveENvbG9yKDEyNSwgMTczLCAyMTcsIDE2MCk7Cisg
ICAgc3RhdGljIGNvbnN0IENvbG9yIGJvcmRlckJveENvbG9yKDEyNSwgMTczLCAyMTcsIDE5Mik7
CisgICAgc3RhdGljIGNvbnN0IENvbG9yIG1hcmdpbkJveENvbG9yKDEyNSwgMTczLCAyMTcsIDIy
OCk7CisKKyAgICBpZiAobWFyZ2luUXVhZCAhPSBib3JkZXJRdWFkKQorICAgICAgICBkcmF3T3V0
bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgbWFyZ2luUXVhZCwgYm9yZGVyUXVhZCwgbWFyZ2lu
Qm94Q29sb3IpOworICAgIGlmIChib3JkZXJRdWFkICE9IHBhZGRpbmdRdWFkKQorICAgICAgICBk
cmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgYm9yZGVyUXVhZCwgcGFkZGluZ1F1YWQs
IGJvcmRlckJveENvbG9yKTsKKyAgICBpZiAocGFkZGluZ1F1YWQgIT0gY29udGVudFF1YWQpCisg
ICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBwYWRkaW5nUXVhZCwgY29u
dGVudFF1YWQsIHBhZGRpbmdCb3hDb2xvcik7CisKKyAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRl
eHQsIGNvbnRlbnRRdWFkLCBjb250ZW50Qm94Q29sb3IpOworfQorCitzdGF0aWMgdm9pZCBkcmF3
SGlnaGxpZ2h0Rm9yTGluZUJveGVzT3JTVkdSZW5kZXJlcihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBsaW5lQm94UXVhZHMpCit7CisgICAgc3RhdGlj
IGNvbnN0IENvbG9yIGxpbmVCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxMjgpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaW5lQm94UXVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGRy
YXdPdXRsaW5lZFF1YWQoY29udGV4dCwgbGluZUJveFF1YWRzW2ldLCBsaW5lQm94Q29sb3IpOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29udmVydEZyb21GcmFtZVRvTWFpbkZyYW1lKEZyYW1l
KiBmcmFtZSwgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZWN0ID0gZnJhbWUtPnBhZ2UoKS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhmcmFtZS0+dmlldygpLT5jb250ZW50
c1RvV2luZG93KHJlY3QpKTsKK30KKworc3RhdGljIGlubGluZSBJbnRTaXplIGZyYW1lVG9NYWlu
RnJhbWVPZmZzZXQoRnJhbWUqIGZyYW1lKQoreworICAgIEludFBvaW50IG1haW5GcmFtZVBvaW50
ID0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhm
cmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KEludFBvaW50KCkpKTsKKyAgICByZXR1cm4g
bWFpbkZyYW1lUG9pbnQgLSBJbnRQb2ludCgpOworfQorCitzdGF0aWMgdm9pZCBkcmF3RWxlbWVu
dFRpdGxlKE5vZGUqIG5vZGUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVj
dCYgYm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgb3ZlcmxheVJlY3QsIFdlYkNvcmU6OlNl
dHRpbmdzKiBzZXR0aW5ncykKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IHJlY3RJbmZsYXRlUHgg
PSA0OworICAgIHN0YXRpYyBjb25zdCBpbnQgZm9udEhlaWdodFB4ID0gMTI7CisgICAgc3RhdGlj
IGNvbnN0IGludCBib3JkZXJXaWR0aFB4ID0gMTsKKyAgICBzdGF0aWMgY29uc3QgQ29sb3IgdG9v
bHRpcEJhY2tncm91bmRDb2xvcigyNTUsIDI1NSwgMTk0LCAyNTUpOworICAgIHN0YXRpYyBjb25z
dCBDb2xvciB0b29sdGlwQm9yZGVyQ29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICBzdGF0aWMgY29u
c3QgQ29sb3IgdG9vbHRpcEZvbnRDb2xvcihDb2xvcjo6YmxhY2spOworCisgICAgRWxlbWVudCog
ZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAgICBib29sIGlzWEhUTUwg
PSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc1hIVE1MRG9jdW1lbnQoKTsKKyAgICBTdHJpbmcgbm9k
ZVRpdGxlID0gaXNYSFRNTCA/IGVsZW1lbnQtPm5vZGVOYW1lKCkgOiBlbGVtZW50LT5ub2RlTmFt
ZSgpLmxvd2VyKCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlID0gZWxlbWVudC0+
Z2V0SWRBdHRyaWJ1dGUoKTsKKyAgICBpZiAoIWlkVmFsdWUuaXNOdWxsKCkgJiYgIWlkVmFsdWUu
aXNFbXB0eSgpKSB7CisgICAgICAgIG5vZGVUaXRsZSArPSAiIyI7CisgICAgICAgIG5vZGVUaXRs
ZSArPSBpZFZhbHVlOworICAgIH0KKyAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVt
ZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5n
JiBjbGFzc05hbWVzU3RyaW5nID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQp
LT5jbGFzc05hbWVzKCk7CisgICAgICAgIHNpemVfdCBjbGFzc05hbWVDb3VudCA9IGNsYXNzTmFt
ZXNTdHJpbmcuc2l6ZSgpOworICAgICAgICBpZiAoY2xhc3NOYW1lQ291bnQpIHsKKyAgICAgICAg
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NOYW1lczsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkgeworICAgICAgICAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1N0cmluZ1tpXTsK
KyAgICAgICAgICAgICAgICBpZiAodXNlZENsYXNzTmFtZXMuY29udGFpbnMoY2xhc3NOYW1lKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdXNlZENsYXNz
TmFtZXMuYWRkKGNsYXNzTmFtZSk7CisgICAgICAgICAgICAgICAgbm9kZVRpdGxlICs9ICIuIjsK
KyAgICAgICAgICAgICAgICBub2RlVGl0bGUgKz0gY2xhc3NOYW1lOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgRWxlbWVudCogaGlnaGxpZ2h0ZWRFbGVtZW50ID0gbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpID8gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpIDogMDsKKyAg
ICBub2RlVGl0bGUgKz0gIiBbIjsKKyAgICBub2RlVGl0bGUgKz0gU3RyaW5nOjpudW1iZXIoaGln
aGxpZ2h0ZWRFbGVtZW50ID8gaGlnaGxpZ2h0ZWRFbGVtZW50LT5vZmZzZXRXaWR0aCgpIDogYm91
bmRpbmdCb3gud2lkdGgoKSk7CisgICAgbm9kZVRpdGxlLmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hh
cj4oMHgwMEQ3KSk7IC8vICZ0aW1lczsKKyAgICBub2RlVGl0bGUgKz0gU3RyaW5nOjpudW1iZXIo
aGlnaGxpZ2h0ZWRFbGVtZW50ID8gaGlnaGxpZ2h0ZWRFbGVtZW50LT5vZmZzZXRIZWlnaHQoKSA6
IGJvdW5kaW5nQm94LmhlaWdodCgpKTsKKyAgICBub2RlVGl0bGUgKz0gIl0iOworCisgICAgRm9u
dERlc2NyaXB0aW9uIGRlc2M7CisgICAgRm9udEZhbWlseSBmYW1pbHk7CisgICAgZmFtaWx5LnNl
dEZhbWlseShzZXR0aW5ncy0+Zml4ZWRGb250RmFtaWx5KCkpOworICAgIGRlc2Muc2V0RmFtaWx5
KGZhbWlseSk7CisgICAgZGVzYy5zZXRDb21wdXRlZFNpemUoZm9udEhlaWdodFB4KTsKKyAgICBG
b250IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOworICAgIGZvbnQudXBkYXRlKDApOworCisgICAg
VGV4dFJ1biBub2RlVGl0bGVSdW4obm9kZVRpdGxlKTsKKyAgICBJbnRQb2ludCB0aXRsZUJhc2VQ
b2ludCA9IGJvdW5kaW5nQm94LmJvdHRvbUxlZnQoKTsKKyAgICB0aXRsZUJhc2VQb2ludC5tb3Zl
KHJlY3RJbmZsYXRlUHgsIHJlY3RJbmZsYXRlUHgpOworICAgIEludFJlY3QgdGl0bGVSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KG5vZGVUaXRsZVJ1biwg
dGl0bGVCYXNlUG9pbnQsIGZvbnRIZWlnaHRQeCkpOworICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJl
Y3RJbmZsYXRlUHgpOworCisgICAgLy8gVGhlIGluaXRpYWwgb2Zmc2V0cyBuZWVkZWQgdG8gY29t
cGVuc2F0ZSBmb3IgYSAxcHgtdGhpY2sgYm9yZGVyIHN0cm9rZSAod2hpY2ggaXMgbm90IGEgcGFy
dCBvZiB0aGUgcmVjdGFuZ2xlKS4KKyAgICBpbnQgZHggPSAtYm9yZGVyV2lkdGhQeDsKKyAgICBp
bnQgZHkgPSBib3JkZXJXaWR0aFB4OworCisgICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25k
IHRoZSByaWdodCBvZiBvdmVybGF5UmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBz
YWlkIGJvdW5kYXJ5LgorICAgIGlmICh0aXRsZVJlY3QucmlnaHQoKSA+IG92ZXJsYXlSZWN0LnJp
Z2h0KCkpCisgICAgICAgIGR4ID0gb3ZlcmxheVJlY3QucmlnaHQoKSAtIHRpdGxlUmVjdC5yaWdo
dCgpOworCisgICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSBsZWZ0IG9mIG92ZXJs
YXlSZWN0LCBsZWZ0LWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KKyAgICBp
ZiAodGl0bGVSZWN0LngoKSArIGR4IDwgb3ZlcmxheVJlY3QueCgpKQorICAgICAgICBkeCA9IG92
ZXJsYXlSZWN0LngoKSAtIHRpdGxlUmVjdC54KCkgLSBib3JkZXJXaWR0aFB4OworCisgICAgLy8g
SWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSBib3R0b20gb2Ygb3ZlcmxheVJlY3QsIHNob3cg
dGhlIHRpcCBhdCB0b3Agb2YgYm91bmRpbmcgYm94LgorICAgIGlmICh0aXRsZVJlY3QuYm90dG9t
KCkgPiBvdmVybGF5UmVjdC5ib3R0b20oKSkgeworICAgICAgICBkeSA9IGJvdW5kaW5nQm94Lnko
KSAtIHRpdGxlUmVjdC5ib3R0b20oKSAtIGJvcmRlcldpZHRoUHg7CisgICAgICAgIC8vIElmIHRo
ZSB0aXAgc3RpbGwgc3RpY2tzIGJleW9uZCB0aGUgYm90dG9tIG9mIG92ZXJsYXlSZWN0LCBib3R0
b20tYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgorICAgICAgICBpZiAodGl0
bGVSZWN0LmJvdHRvbSgpICsgZHkgPiBvdmVybGF5UmVjdC5ib3R0b20oKSkKKyAgICAgICAgICAg
IGR5ID0gb3ZlcmxheVJlY3QuYm90dG9tKCkgLSB0aXRsZVJlY3QuYm90dG9tKCk7CisgICAgfQor
CisgICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSB0b3Agb2Ygb3ZlcmxheVJlY3Qs
IHNob3cgdGhlIHRpcCBhdCB0b3Agb2Ygb3ZlcmxheVJlY3QuCisgICAgaWYgKHRpdGxlUmVjdC55
KCkgKyBkeSA8IG92ZXJsYXlSZWN0LnkoKSkKKyAgICAgICAgZHkgPSBvdmVybGF5UmVjdC55KCkg
LSB0aXRsZVJlY3QueSgpICsgYm9yZGVyV2lkdGhQeDsKKworICAgIHRpdGxlUmVjdC5tb3ZlKGR4
LCBkeSk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcih0b29sdGlwQm9yZGVyQ29sb3IsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRl
cldpZHRoUHgpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvb2x0aXBCYWNrZ3JvdW5kQ29s
b3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd1JlY3QodGl0bGVSZWN0
KTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b29sdGlwRm9udENvbG9yLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIG5vZGVUaXRsZVJ1biwgSW50
UG9pbnQodGl0bGVSZWN0LngoKSArIHJlY3RJbmZsYXRlUHgsIHRpdGxlUmVjdC55KCkgKyBmb250
LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2hpZ2hsaWdodGVkTm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG1faGlnaGxpZ2h0ZWROb2RlLT5yZW5kZXJlcigpOworICAgIEZy
YW1lKiBjb250YWluaW5nRnJhbWUgPSBtX2hpZ2hsaWdodGVkTm9kZS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKKyAgICBpZiAoIXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIEludFNpemUgbWFpbkZyYW1lT2Zmc2V0ID0gZnJhbWVUb01haW5GcmFtZU9m
ZnNldChjb250YWluaW5nRnJhbWUpOworICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSByZW5kZXJl
ci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSk7CisgICAgYm91bmRpbmdCb3gubW92ZSht
YWluRnJhbWVPZmZzZXQpOworCisgICAgSW50UmVjdCB0aXRsZVJlZmVyZW5jZUJveCA9IGJvdW5k
aW5nQm94OworCisgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CisKKyAgICBGcmFtZVZpZXcq
IHZpZXcgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7CisgICAgRmxvYXRS
ZWN0IG92ZXJsYXlSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgaWYgKCFv
dmVybGF5UmVjdC5jb250YWlucyhib3VuZGluZ0JveCkgJiYgIWJvdW5kaW5nQm94LmNvbnRhaW5z
KGVuY2xvc2luZ0ludFJlY3Qob3ZlcmxheVJlY3QpKSkKKyAgICAgICAgb3ZlcmxheVJlY3QgPSB2
aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgtb3Zlcmxh
eVJlY3QueCgpLCAtb3ZlcmxheVJlY3QueSgpKTsKKworICAgIC8vIFJlbmRlclNWR1Jvb3Qgc2hv
dWxkIGJlIGhpZ2hsaWdodGVkIHRocm91Z2ggdGhlIGlzQm94KCkgY29kZSBwYXRoLCBhbGwgb3Ro
ZXIgU1ZHIGVsZW1lbnRzIHNob3VsZCBqdXN0IGR1bXAgdGhlaXIgYWJzb2x1dGVRdWFkcygpLgor
I2lmIEVOQUJMRShTVkcpCisgICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gcmVuZGVyZXItPm5vZGUo
KSAmJiByZW5kZXJlci0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSAmJiAhcmVuZGVyZXItPmlzU1ZH
Um9vdCgpOworI2Vsc2UKKyAgICBib29sIGlzU1ZHUmVuZGVyZXIgPSBmYWxzZTsKKyNlbmRpZgor
CisgICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpICYmICFpc1NWR1JlbmRlcmVyKSB7CisgICAgICAg
IFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOworCisgICAgICAg
IEludFJlY3QgY29udGVudEJveCA9IHJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsKKworICAg
ICAgICBJbnRSZWN0IHBhZGRpbmdCb3goY29udGVudEJveC54KCkgLSByZW5kZXJCb3gtPnBhZGRp
bmdMZWZ0KCksIGNvbnRlbnRCb3gueSgpIC0gcmVuZGVyQm94LT5wYWRkaW5nVG9wKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50Qm94LndpZHRoKCkgKyByZW5kZXJCb3gtPnBh
ZGRpbmdMZWZ0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdSaWdodCgpLCBjb250ZW50Qm94LmhlaWdo
dCgpICsgcmVuZGVyQm94LT5wYWRkaW5nVG9wKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdCb3R0b20o
KSk7CisgICAgICAgIEludFJlY3QgYm9yZGVyQm94KHBhZGRpbmdCb3gueCgpIC0gcmVuZGVyQm94
LT5ib3JkZXJMZWZ0KCksIHBhZGRpbmdCb3gueSgpIC0gcmVuZGVyQm94LT5ib3JkZXJUb3AoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JveC53aWR0aCgpICsgcmVuZGVyQm94
LT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJCb3gtPmJvcmRlclJpZ2h0KCksIHBhZGRpbmdCb3guaGVp
Z2h0KCkgKyByZW5kZXJCb3gtPmJvcmRlclRvcCgpICsgcmVuZGVyQm94LT5ib3JkZXJCb3R0b20o
KSk7CisgICAgICAgIEludFJlY3QgbWFyZ2luQm94KGJvcmRlckJveC54KCkgLSByZW5kZXJCb3gt
Pm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSAtIHJlbmRlckJveC0+bWFyZ2luVG9wKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgpICsgcmVuZGVyQm94LT5t
YXJnaW5MZWZ0KCkgKyByZW5kZXJCb3gtPm1hcmdpblJpZ2h0KCksIGJvcmRlckJveC5oZWlnaHQo
KSArIHJlbmRlckJveC0+bWFyZ2luVG9wKCkgKyByZW5kZXJCb3gtPm1hcmdpbkJvdHRvbSgpKTsK
KworICAgICAgICB0aXRsZVJlZmVyZW5jZUJveCA9IG1hcmdpbkJveDsKKyAgICAgICAgdGl0bGVS
ZWZlcmVuY2VCb3gubW92ZShtYWluRnJhbWVPZmZzZXQpOworICAgICAgICB0aXRsZVJlZmVyZW5j
ZUJveC5tb3ZlKGJvdW5kaW5nQm94LngoKSwgYm91bmRpbmdCb3gueSgpKTsKKworICAgICAgICBG
bG9hdFF1YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRSZWN0KGNvbnRlbnRCb3gpKTsKKyAgICAgICAgRmxvYXRRdWFkIGFic1BhZGRpbmdRdWFk
ID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChwYWRkaW5nQm94KSk7
CisgICAgICAgIEZsb2F0UXVhZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJz
b2x1dGVRdWFkKEZsb2F0UmVjdChib3JkZXJCb3gpKTsKKyAgICAgICAgRmxvYXRRdWFkIGFic01h
cmdpblF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmdp
bkJveCkpOworCisgICAgICAgIGFic0NvbnRlbnRRdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsK
KyAgICAgICAgYWJzUGFkZGluZ1F1YWQubW92ZShtYWluRnJhbWVPZmZzZXQpOworICAgICAgICBh
YnNCb3JkZXJRdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKKyAgICAgICAgYWJzTWFyZ2luUXVh
ZC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7CisKKyAgICAgICAgZHJhd0hpZ2hsaWdodEZvckJveChj
b250ZXh0LCBhYnNDb250ZW50UXVhZCwgYWJzUGFkZGluZ1F1YWQsIGFic0JvcmRlclF1YWQsIGFi
c01hcmdpblF1YWQpOworICAgIH0gZWxzZSBpZiAocmVuZGVyZXItPmlzUmVuZGVySW5saW5lKCkg
fHwgaXNTVkdSZW5kZXJlcikgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNob3cgbWFy
Z2lucy9wYWRkaW5nL2JvcmRlciBmb3IgaW5saW5lcy4KKyAgICAgICAgVmVjdG9yPEZsb2F0UXVh
ZD4gbGluZUJveFF1YWRzOworICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFkcyhsaW5lQm94
UXVhZHMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGluZUJveFF1YWRzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgbGluZUJveFF1YWRzW2ldICs9IG1haW5GcmFtZU9mZnNl
dDsKKworICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yTGluZUJveGVzT3JTVkdSZW5kZXJlcihjb250
ZXh0LCBsaW5lQm94UXVhZHMpOworICAgIH0KKworICAgIC8vIERyYXcgbm9kZSB0aXRsZSBpZiBu
ZWNlc3NhcnkuCisKKyAgICBpZiAoIW1faGlnaGxpZ2h0ZWROb2RlLT5pc0VsZW1lbnROb2RlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncyA9IGNv
bnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBkcmF3RWxlbWVudFRpdGxlKG1faGlnaGxp
Z2h0ZWROb2RlLmdldCgpLCBjb250ZXh0LCB0aXRsZVJlZmVyZW5jZUJveCwgb3ZlcmxheVJlY3Qs
IHNldHRpbmdzKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0KE5vZGUq
IG5vZGUpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNo
b3coKTsKKyAgICAKKyAgICBtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0KG5vZGUpOworfQorCiti
b29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZWQoKSBjb25zdAoreworICAgIGlmICghbV9p
bnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9pbnNw
ZWN0ZWRQYWdlLT5zZXR0aW5ncygpLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWwpCit7
CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNob3coKTsKKwor
ICAgIGlmICghbV9pbnNwZWN0b3JGcm9udGVuZCkgeworICAgICAgICBtX3JlcXVpcmVkUGFuZWwg
PSBwYW5lbDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2luc3BlY3RvckZyb250ZW5k
LT5zaG93UGFuZWwocGFuZWwpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250
ZW5kTG9hZGVkKCkKK3sKKyAgICBpZiAoIW1fcmVxdWlyZWRQYW5lbCkgeworICAgICAgICBzaG93
UGFuZWwobV9yZXF1aXJlZFBhbmVsKTsKKyAgICAgICAgbV9yZXF1aXJlZFBhbmVsID0gIiI7Cisg
ICAgfQorfQorCitib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnRpbWVsaW5lUHJvZmlsZXJFbmFi
bGVkKCkKK3sKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JBZ2VudC0+dGltZWxpbmVBZ2VudCgpOwor
fQorICAgIAorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQordm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjplbmFibGVQcm9maWxlcigpCit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZW5h
YmxlUHJvZmlsZXIoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlUHJv
ZmlsZXIoKQoreworICAgIG1faW5zcGVjdG9yQWdlbnQtPmRpc2FibGVQcm9maWxlcigpOworfQor
Citib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnByb2ZpbGVyRW5hYmxlZCgpCit7CisgICAgcmV0
dXJuIG1faW5zcGVjdG9yQWdlbnQtPnByb2ZpbGVyRW5hYmxlZCgpOworfQorCitib29sIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmRlYnVnZ2VyRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIG1faW5zcGVj
dG9yQWdlbnQtPmRlYnVnZ2VyRW5hYmxlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnNob3dBbmRFbmFibGVEZWJ1Z2dlcigpCit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c2hv
d0FuZEVuYWJsZURlYnVnZ2VyKCk7Cit9CisgIAordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpk
aXNhYmxlRGVidWdnZXIoKQoreworICAgIG1faW5zcGVjdG9yQWdlbnQtPmRpc2FibGVEZWJ1Z2dl
cigpOworfQorICAKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRVc2VySW5pdGlhdGVk
UHJvZmlsaW5nKCkKK3sKKyAgICBtX2luc3BlY3RvckFnZW50LT5zdGFydFVzZXJJbml0aWF0ZWRQ
cm9maWxpbmcoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVXNlckluaXRp
YXRlZFByb2ZpbGluZygpCit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RvcFVzZXJJbml0aWF0
ZWRQcm9maWxpbmcoKTsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjppc1JlY29yZGlu
Z1VzZXJJbml0aWF0ZWRQcm9maWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JB
Z2VudC0+aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpOworfQorCisjZW5kaWYKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDQy
ZTk2MTUuLjZiYzdjZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaApAQCAtMzEsMTcgKzMxLDk5IEBACiAjaWZuZGVmIEluc3BlY3RvckNvbnRy
b2xsZXJfaAogI2RlZmluZSBJbnNwZWN0b3JDb250cm9sbGVyX2gKIAotI2luY2x1ZGUgIkluc3Bl
Y3RvckFnZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgRE9NV3JhcHBlcldvcmxkOworY2xhc3MgRnJhbWU7CitjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CitjbGFzcyBJbnNwZWN0b3JBZ2VudDsKK2NsYXNzIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmQ7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKIGNsYXNzIFBhZ2U7CitjbGFzcyBO
b2RlOwogCi0vLyBGSVhNRTogdGVtcG9yYXJ5IHNvbHV0aW9uLiBJdCB3aWxsIGJlY29tZSBhIHNl
cGFyYXRlIGNsYXNzIGluIHRoZSBuZXh0IHBhdGNoIGFuZCBjb250cm9sbGVyIHJlbGF0ZWQgc3Vi
c2V0IG9mIGZ1bmN0aW9ucyB3aWxsIGJlIG1vdmVkIGZyb20gSW5zcGVjdG9yQWdlbnQgdG8gSW5z
cGVjdG9yQ29udHJvbGVyLgotY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlciA6IHB1YmxpYyBJbnNw
ZWN0b3JBZ2VudCB7CitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JDb250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ29uc29sZVBhbmVs
OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBFbGVtZW50c1BhbmVsOworICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBQcm9maWxlc1BhbmVsOworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBTY3JpcHRzUGFuZWw7CisgIAogICAgIEluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSos
IEluc3BlY3RvckNsaWVudCopOworICAgIH5JbnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgCisg
ICAgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNw
ZWN0b3JBZ2VudC5nZXQoKTsgfQorICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBpbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcigpIHsgcmV0dXJuIG1faW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KKyAgICBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yQ2xpZW50OyB9CisgICAgUGFnZSogaW5zcGVjdGVkUGFn
ZSgpIHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQorCisgICAgYm9vbCBlbmFibGVkKCkgY29u
c3Q7CisKKyAgICB2b2lkIHNob3coKTsKKyAgICB2b2lkIHNob3dQYW5lbChjb25zdCBTdHJpbmcm
IHBhbmVsKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICB2b2lkIHNldEluc3BlY3RvckZyb250
ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+KTsKKyAgICBib29s
IGhhc0luc3BlY3RvckZyb250ZW5kQ2xpZW50KCkgY29uc3Q7CisgICAgdm9pZCBkaWRDbGVhcldp
bmRvd09iamVjdEluV29ybGQoRnJhbWUqLCBET01XcmFwcGVyV29ybGQqKTsKKworICAgIGJvb2wg
aGFzRnJvbnRlbmQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kOyB9CisgICAg
dm9pZCBjb25uZWN0RnJvbnRlbmQoKTsKKyAgICB2b2lkIHJldXNlRnJvbnRlbmQoKTsKKyAgICB2
b2lkIGRpc2Nvbm5lY3RGcm9udGVuZCgpOworICAgIHZvaWQgcmVzdG9yZUluc3BlY3RvclN0YXRl
RnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvckNvb2tpZSk7CisKKyAgICB2b2lkIGlu
c3BlY3QoTm9kZSopOworICAgIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKTsKKyAgICBQYXNzUmVmUHRy
PE5vZGU+IGhpZ2hsaWdodGVkTm9kZSgpOworICAgIHZvaWQgaGlkZUhpZ2hsaWdodCgpOworICAg
IHZvaWQgZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisKKyAgICB2
b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYg
c2NyaXB0KTsKKworICAgIC8vIEZJWE1FOiB0aGVzZSBtZXRob2RzIGFyZSBuZWNlc3NhcnkgZm9y
IExheW91dFRlc3RDb250cm9sbGVyIGJ1dCB3ZSBjYW4gZG8gdGhhdCB3aXRoIGhlbHAgb2Ygc2Ny
aXB0IGluamVjdGVkIGludG8gV2ViSW5zcGVjdG9yIHBhZ2UuCisgICAgdm9pZCBzdGFydFRpbWVs
aW5lUHJvZmlsZXIoKTsKKyAgICB2b2lkIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CisKKyAgICBi
b29sIHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKCk7IC8vIHVzZWQgYnkgV2ViS2l0CisgICAgCisj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgYm9vbCBwcm9maWxlckVuYWJsZWQo
KTsKKyAgICB2b2lkIGVuYWJsZVByb2ZpbGVyKCk7CisgICAgdm9pZCBzdGFydFVzZXJJbml0aWF0
ZWRQcm9maWxpbmcoKTsKKyAgICBib29sIGlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUo
KSBjb25zdDsKKyAgICB2b2lkIHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CisgICAgdm9p
ZCBkaXNhYmxlUHJvZmlsZXIoKTsKKyAgICB2b2lkIHNob3dBbmRFbmFibGVEZWJ1Z2dlcigpOwor
ICAgIGJvb2wgZGVidWdnZXJFbmFibGVkKCk7CisgICAgdm9pZCBkaXNhYmxlRGVidWdnZXIoKTsK
KyNlbmRpZgorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKKwor
ICAgIHZvaWQgZGlzY29ubmVjdEZyb250ZW5kSW1wbCgpOyAvLyB1c2VkIGJ5IEluc3BlY3RvckFn
ZW50CisgICAgdm9pZCBmcm9udGVuZExvYWRlZCgpOworCisgICAgT3duUHRyPEluc3BlY3RvckFn
ZW50PiBtX2luc3BlY3RvckFnZW50OworICAgIE93blB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBPd25QdHI8SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ+IG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CisgICAgT3duUHRyPElu
c3BlY3RvckZyb250ZW5kPiBtX2luc3BlY3RvckZyb250ZW5kOworICAgIFBhZ2UqIG1faW5zcGVj
dGVkUGFnZTsKKyAgICBJbnNwZWN0b3JDbGllbnQqIG1faW5zcGVjdG9yQ2xpZW50OworICAgIGJv
b2wgbV9vcGVuaW5nRnJvbnRlbmQ7CisgICAgUmVmUHRyPE5vZGU+IG1faGlnaGxpZ2h0ZWROb2Rl
OworICAgIFN0cmluZyBtX3JlcXVpcmVkUGFuZWw7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCmluZGV4IDE3OTYyNTYu
Ljg3YTgzNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwCkBAIC0yMDEsNyArMjAxLDkgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdAogCiB2b2lkIEluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6c2V0RXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYgc2NyaXB0KQog
ewotICAgIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3IgPSBtX2Zyb250ZW5kUGFnZS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpOworICAgIEFTU0VSVChtX2Zyb250ZW5kUGFnZS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpKTsKKyAgICBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yID0gbV9mcm9udGVuZFBh
Z2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVjdG9yQWdlbnQoKTsKKyAgICBBU1NFUlQo
aW5zcGVjdG9yKTsKICAgICBpbnNwZWN0b3ItPnNldEluc3BlY3RvckV4dGVuc2lvbkFQSShzY3Jp
cHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uY3BwCmluZGV4IGM0NDliYTQuLmI3ZmViMGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBA
IC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgpAQCAt
ODgsNyArODksNyBAQCBzdGF0aWMgYm9vbCBldmVudEhhc0xpc3RlbmVycyhjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgRE9NV2luZG93KiB3aW5kb3csCiAKIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGRJbXBsKEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCwgRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29ybGQqIHdvcmxk
KQogewotICAgIGluc3BlY3RvckFnZW50LT5kaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoZnJh
bWUsIHdvcmxkKTsKKyAgICBpbnNwZWN0b3JBZ2VudC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5k
aWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoZnJhbWUsIHdvcmxkKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWRJbXBsKEluc3BlY3Rv
ckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKQEAgLTU1Myw2ICs1NTQsMTEgQEAgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVNYXJrVGltZWxpbmVJbXBsKEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3IKIH0KIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQordm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlc3VtZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50KQoreworICAgIGluc3BlY3RvckFnZW50LT5yZXN1bWUoKTsKK30KKwogdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29s
ZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBjb25zdCBTdHJpbmcmIHRpdGxl
LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKICAgICBp
ZiAoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCA9IGluc3BlY3RvckFnZW50
LT5wcm9maWxlckFnZW50KCkpCkBAIC01NjcsMjQgKzU3MywxNyBAQCB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6YWRkUHJvZmlsZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50LCBSZQogICAgIH0KIH0KIAotYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnByb2Zp
bGVyRW5hYmxlZEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50KQotewotICAgIGlm
ICghaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCA9IGluc3BlY3RvckFnZW50
LT5wcm9maWxlckFnZW50KCk7Ci0gICAgaWYgKCFwcm9maWxlckFnZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcHJvZmlsZXJBZ2VudC0+ZW5hYmxlZCgpOwotfQotCiBT
dHJpbmcgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpnZXRDdXJyZW50VXNlckluaXRpYXRlZFBy
b2ZpbGVOYW1lSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGJvb2wgaW5jcmVt
ZW50UHJvZmlsZU51bWJlcikKIHsKICAgICBpZiAoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogcHJv
ZmlsZXJBZ2VudCA9IGluc3BlY3RvckFnZW50LT5wcm9maWxlckFnZW50KCkpCiAgICAgICAgIHJl
dHVybiBwcm9maWxlckFnZW50LT5nZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKGlu
Y3JlbWVudFByb2ZpbGVOdW1iZXIpOwogICAgIHJldHVybiAiIjsKIH0KKworYm9vbCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnByb2ZpbGVyRW5hYmxlZEltcGwoSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50KQoreworICAgIHJldHVybiBpbnNwZWN0b3JBZ2VudC0+cHJvZmlsZXJFbmFi
bGVkKCk7Cit9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCAwMmY1
ZDNmLi41NDY3NzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC0xMzcsMTAgKzEzNywxMSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgY29uc29sZU1hcmtUaW1lbGluZShQYWdlKiwgUGFzc1JlZlB0cjxTY3JpcHRB
cmd1bWVudHM+KTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIHN0YXRp
YyB2b2lkIHJlc3VtZShQYWdlKik7CiAgICAgc3RhdGljIHZvaWQgYWRkU3RhcnRQcm9maWxpbmdN
ZXNzYWdlVG9Db25zb2xlKFBhZ2UqLCBjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5l
TnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgc3RhdGljIHZvaWQgYWRkUHJv
ZmlsZShQYWdlKiwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4pOwotICAgIHN0YXRpYyBib29sIHByb2ZpbGVyRW5hYmxlZChQYWdlKik7CiAgICAgc3Rh
dGljIFN0cmluZyBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKFBhZ2UqLCBib29s
IGluY3JlbWVudFByb2ZpbGVOdW1iZXIpOworICAgIHN0YXRpYyBib29sIHByb2ZpbGVyRW5hYmxl
ZChQYWdlKik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKQEAgLTE3NSw4ICsxNzYs
MTAgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGZyb250ZW5kQ3JlYXRlZCgpIHsgc19mcm9u
dGVuZENvdW50ZXIgKz0gMTsgfQogICAgIHN0YXRpYyB2b2lkIGZyb250ZW5kRGVsZXRlZCgpIHsg
c19mcm9udGVuZENvdW50ZXIgLT0gMTsgfQogICAgIHN0YXRpYyBib29sIGhhc0Zyb250ZW5kcygp
IHsgcmV0dXJuIHNfZnJvbnRlbmRDb3VudGVyOyB9CisgICAgc3RhdGljIGJvb2wgaGFzRnJvbnRl
bmQoUGFnZSopOwogI2Vsc2UKICAgICBzdGF0aWMgYm9vbCBoYXNGcm9udGVuZHMoKSB7IHJldHVy
biBmYWxzZTsgfQorICAgIHN0YXRpYyBib29sIGhhc0Zyb250ZW5kKFBhZ2UqKSB7IHJldHVybiBm
YWxzZTsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0yNDksMTAgKzI1MiwxMSBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVNYXJrVGltZWxpbmVJbXBsKEluc3BlY3RvckFnZW50
KiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQorICAgIHN0YXRpYyB2b2lkIHJlc3VtZUltcGwoSW5zcGVjdG9yQWdlbnQqKTsK
ICAgICBzdGF0aWMgdm9pZCBhZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGVJbXBsKElu
c3BlY3RvckFnZW50KiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIHN0YXRpYyB2b2lkIGFkZFByb2ZpbGVJbXBs
KEluc3BlY3RvckFnZW50KiwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+LCBQYXNzUmVmUHRyPFNjcmlw
dENhbGxTdGFjaz4pOwotICAgIHN0YXRpYyBib29sIHByb2ZpbGVyRW5hYmxlZEltcGwoSW5zcGVj
dG9yQWdlbnQqKTsKICAgICBzdGF0aWMgU3RyaW5nIGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJv
ZmlsZU5hbWVJbXBsKEluc3BlY3RvckFnZW50KiwgYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVtYmVy
KTsKKyAgICBzdGF0aWMgYm9vbCBwcm9maWxlckVuYWJsZWRJbXBsKEluc3BlY3RvckFnZW50Kik7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKQEAgLTc0Miw2ICs3NDYsMTYgQEAgaW5s
aW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRXcml0ZUhUTUwoY29uc3QgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW8KICNlbmRpZgogfQogCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlc3VtZShQ
YWdlKiBwYWdlKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yUGFnZShwYWdlKSkKKyAgICAg
ICAgcmVzdW1lSW1wbChpbnNwZWN0b3JBZ2VudCk7CisjZW5kaWYgICAgCit9CisjZW5kaWYKKwog
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkVXNlRE9NU3RvcmFnZShQYWdlKiBwYWdlLCBTdG9yYWdlQXJlYSogc3RvcmFnZUFy
ZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKIHsKQEAgLTgyMyw2ICs4Mzcs
MTYgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp1cGRhdGVBcHBsaWNh
dGlvbkNhY2hlU3RhdHVzKEZyYW1lKiBmcmFtZSkKIH0KICNlbmRpZgogCitpbmxpbmUgYm9vbCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kKFBhZ2UqIHBhZ2UpCit7CisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKyAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRG
b3JQYWdlKHBhZ2UpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKIGlubGluZSBJbnNwZWN0b3JBZ2VudCogSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjppbnNwZWN0b3JBZ2VudEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4
IDExMjliYWMuLjI4MGZmYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApA
QCAtNjksNyArNjksNiBAQAogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiSWNv
bkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSWNvbkxvYWRlci5oIgotI2luY2x1ZGUgIkluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtMjk3
OCwxMSArMjk3Nyw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdh
dGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzCiAgICAgaWYgKCFtX2ZyYW1l
LT5wYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKSAmJiBFTkFCTEUoSU5TUEVDVE9SKSAmJiBVU0UoSlNDKQotICAgIGlmIChQYWdlKiBwYWdl
ID0gbV9mcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgIGlmIChwYWdlLT5tYWluRnJhbWUoKSA9PSBt
X2ZyYW1lKQotICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5yZXN1bWUo
KTsKLSAgICB9CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCisg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZXN1bWUobV9mcmFtZS0+cGFnZSgpKTsKICNl
bmRpZgogCiAgICAgc2V0UHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcihtX3BvbGljeURvY3VtZW50
TG9hZGVyLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDA2ZmRiNi4uNWEy
MzQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0w
MS0yNiAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92
ZSBJbnNwZWN0b3JDb250cm9sbGVyJ3MgbWV0aG9kcyBmcm9tIEluc3BlY3RvckFnZW50IHRvIElu
c3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIE1pbm9yIGNoYW5nZSBlbmZvcmNlZCBieSBtYWpv
ciBjaGFuZ2VzIGluIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMTY5CisKKyAg
ICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMS0wMS0yNiAgSmFtZXMgUm9iaW5zb24g
IDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGlu
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggZDE2NGE0OC4u
NzY0MGNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC01
Myw2ICs1Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENocm9taXVtRGF0YU9i
amVjdDsKK2NsYXNzIERvY3VtZW50TG9hZGVyOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBIaXN0b3J5
SXRlbTsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggOTEyYzk0OC4u
NmNmZmUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTAxLTI2ICBJ
bHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIEluc3Bl
Y3RvckNvbnRyb2xsZXIncyBtZXRob2RzIGZyb20gSW5zcGVjdG9yQWdlbnQgdG8gSW5zcGVjdG9y
Q29udHJvbGxlci4KKyAgICAgICAgTWlub3IgY2hhbmdlIGVuZm9yY2VkIGJ5IG1ham9yIGNoYW5n
ZXMgaW4gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMxNjkKKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHA6CisgICAgICAgICogd2Via2l0
L3dlYmtpdHdlYmluc3BlY3Rvci5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX2luc3BlY3Rvcl9n
ZXRfcHJvcGVydHkpOgorCiAyMDExLTAxLTIxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xp
ZW50R3RrLmNwcAppbmRleCAzMWFmMjQzLi5lMDcyM2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAKQEAgLTIz
LDYgKzIzLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIndlYmtpdHZlcnNpb24uaCIK
ICNpbmNsdWRlICJ3ZWJraXR3ZWJpbnNwZWN0b3IuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5jcHAKaW5kZXggZGY2M2M2My4uOGI1YjVhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkludFBvaW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCkBAIC0zOTcsNyAr
Mzk4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1YKICNlbmRpZgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFBST1BfVElNRUxJTkVfUFJPRklMSU5HX0VOQUJMRUQ6Ci0gICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
dGltZWxpbmVBZ2VudCgpICE9IDApOworICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCBwcml2LT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnRpbWVsaW5lUHJvZmlsZXJFbmFi
bGVkKCkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKaW5kZXggMWY0ZTNjNC4uOGEwYjU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDExLTAxLTI2ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiBtb3ZlIEluc3BlY3RvckNvbnRyb2xsZXIncyBtZXRob2RzIGZyb20gSW5zcGVj
dG9yQWdlbnQgdG8gSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICAgICAgTWlub3IgY2hhbmdlIGVu
Zm9yY2VkIGJ5IG1ham9yIGNoYW5nZXMgaW4gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTMxNjkKKworICAgICAgICAqIFdlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW06CisgICAg
ICAgICgtW1dlYkluc3BlY3RvciBpc1RpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZF0pOgorCiAyMDEx
LTAxLTI1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbmRlcnMgQ2FybHNzb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJJ
bnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViSW5zcGVjdG9y
L1dlYkluc3BlY3Rvci5tbQppbmRleCA4YWIwNDlmLi5jMDAwZjBjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0KQEAgLTE1Nyw3ICsxNTcsNyBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIC0gKEJPT0wpaXNUaW1lbGluZVByb2ZpbGluZ0Vu
YWJsZWQKIHsKICAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmUoX3dlYlZpZXcpKQotICAgICAgICBy
ZXR1cm4gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT50aW1lbGluZUFnZW50KCkgPyBZRVMg
OiBOTzsKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+dGltZWxp
bmVQcm9maWxlckVuYWJsZWQoKSA/IFlFUyA6IE5POwogICAgIHJldHVybiBOTzsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80927</attachid>
            <date>2011-02-02 10:14:36 -0800</date>
            <delta_ts>2011-02-08 02:31:45 -0800</delta_ts>
            <desc>[patch] second version</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>53260</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0OGEwMzI3Li45NGFlZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUg
QEAKKzIwMTEtMDItMDIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IG1vdmUgSW5zcGVjdG9yQ29udHJvbGxlcidzIG1ldGhvZHMgZnJvbSBJbnNwZWN0b3JB
Z2VudCB0byBJbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzE2OQorCisgICAgICAgIEFsbCB0aGUgSW5zcGVjdG9y
IEFQSSBmb3IgV2ViQ29yZSBoYXMgdHdvIHBhcnRzLgorICAgICAgICBUaGUgZmlyc3Qgb25lIGlz
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBmb3IgV2ViQ29yZS4KKyAgICAgICAgVGhlIHNlY29u
ZCBpcyBJbnNwZWN0b3JDb250cm9sbGVyIGZvciBXZWJLaXQuCisgICAgICAgIEluc3BlY3RvckFn
ZW50IHdhcyBwcm9kdWNlZCBieSByZW5hbWluZyBvcmlnaW5hbCBJbnNwZWN0b3JDb250cm9sbGVy
LgorICAgICAgICBUaGlzIHBhdGNoIGV4dHJhY3RzIFdlYktpdCByZWxhdGVkIG1ldGhvZHMgZnJv
bSBJbnNwZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgICogV2Vi
Q29yZS5leHAuaW46CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJv
bnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcik6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50OjpJbnNwZWN0b3JBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2Vu
dDo6fkluc3BlY3RvckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpy
ZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckFnZW50OjppbnNwZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpo
YW5kbGVNb3VzZVByZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRD
bGVhcldpbmRvd09iamVjdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaXNj
b25uZWN0RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJlc291
cmNlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmNyZWF0ZUZyb250
ZW5kTGlmZXRpbWVBZ2VudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJl
bGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQWdlbnQ6OnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JBZ2VudDo6cmVzdG9yZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckFnZW50OjpzdGFydFRpbWVsaW5lUHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UG9z
dFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGlkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRVc2VET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFnZW50OjpzaG93QW5kRW5hYmxlRGVidWdnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQWdlbnQ6OmVuYWJsZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50OjplbmFibGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpmcm9udGVuZCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNw
ZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0
SW5Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3
Tm9kZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpp
bnNwZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kTG9hZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnRpbWVsaW5lUHJvZmlsZXJFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2Zp
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVQcm9m
aWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlckVu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVidWdnZXJF
bmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dBbmRF
bmFibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpk
aXNhYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yRXh0
ZW5zaW9uQVBJKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3Vt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoaWRlSGlnaGxpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc3BhdGNoTWVzc2Fn
ZUZyb21Gcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omhhc0Zyb250ZW5kKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpzZW5kTWVzc2Fn
ZVRvQmFja2VuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNldEV4dGVuc2lv
bkFQSSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpwcm9maWxlckVuYWJsZWRJbXBsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Omhhc0Zyb250ZW5kKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2
aWdhdGlvblBvbGljeSk6CisKIDIwMTEtMDItMDIgIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBn
b29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCmluZGV4IDg5NzhhOGIuLmFkNGEyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBA
IC0xMzkyLDIzICsxMzkyLDI2IEBAIF9fWk43V2ViQ29yZTIyR2VvbG9jYXRpb25TZXJ2aWNlTW9j
azhzZXRFcnJvckVOM1dURjEwUGFzc1JlZlB0cklOU18xM1Bvc2l0aW9uRXJyCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCi1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50NHNob3dF
dgotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDVjbG9zZUV2Ci1fX1pON1dlYkNvcmUxNElu
c3BlY3RvckFnZW50OXNob3dQYW5lbEVSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTE0SW5z
cGVjdG9yQWdlbnQxMkNvbnNvbGVQYW5lbEUKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQx
M1Byb2ZpbGVzUGFuZWxFCi1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MTRlbmFibGVQcm9m
aWxlckV2Ci1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MTVkaXNhYmxlRGVidWdnZXJFdgot
X19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDE1ZGlzYWJsZVByb2ZpbGVyRXYKLV9fWk43V2Vi
Q29yZTE0SW5zcGVjdG9yQWdlbnQxOGRpc2Nvbm5lY3RGcm9udGVuZEV2Ci1fX1pON1dlYkNvcmUx
NEluc3BlY3RvckFnZW50MjBzdG9wVGltZWxpbmVQcm9maWxlckV2Ci1fX1pON1dlYkNvcmUxNElu
c3BlY3RvckFnZW50MjFzaG93QW5kRW5hYmxlRGVidWdnZXJFdgotX19aTjdXZWJDb3JlMTRJbnNw
ZWN0b3JBZ2VudDIxc3RhcnRUaW1lbGluZVByb2ZpbGVyRXYKLV9fWk43V2ViQ29yZTE0SW5zcGVj
dG9yQWdlbnQyNWV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRFbFJLTjNXVEY2U3RyaW5nRQotX19a
TjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFTjNX
VEYxMFBhc3NPd25QdHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQotX19aTjdXZWJD
b3JlMTRJbnNwZWN0b3JBZ2VudDI2c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFdgotX19aTjdX
ZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDI3c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKIF9f
Wk43V2ViQ29yZTE1SW5zcGVjdG9yQ2xpZW50MzFkb0Rpc3BhdGNoTWVzc2FnZU9uRnJvbnRlbmRQ
YWdlRVBOU180UGFnZUVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjEyQ29uc29sZVBhbmVsRQorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
MTNQcm9maWxlc1BhbmVsRQorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTRlbmFi
bGVQcm9maWxlckV2CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNWRlYnVnZ2Vy
RW5hYmxlZEV2CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNWRpc2FibGVEZWJ1
Z2dlckV2CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNWRpc2FibGVQcm9maWxl
ckV2CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNXByb2ZpbGVyRW5hYmxlZEV2
CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxOGRpc2Nvbm5lY3RGcm9udGVuZEV2
CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMHN0b3BUaW1lbGluZVByb2ZpbGVy
RXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIxc2hvd0FuZEVuYWJsZURlYnVn
Z2VyRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIxc3RhcnRUaW1lbGluZVBy
b2ZpbGVyRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIzdGltZWxpbmVQcm9m
aWxlckVuYWJsZWRFdgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjVldmFsdWF0
ZUZvclRlc3RJbkZyb250ZW5kRWxSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFTjNXVEYxMFBhc3NPd25Q
dHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQorX19aTjdXZWJDb3JlMTlJbnNwZWN0
b3JDb250cm9sbGVyMjZzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZ0V2CitfX1pON1dlYkNvcmUx
OUluc3BlY3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ0V2CitfX1pO
N1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI0c2hvd0V2CitfX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXI1Y2xvc2VFdgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
OXNob3dQYW5lbEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDEybW92ZVdpbmRvd0J5RWZmCiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwxNGZyb250ZW5kTG9hZGVkRXYKIF9fWk43V2ViQ29yZTI4SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDE1Y2FuQXR0YWNoV2luZG93RXYKQEAgLTE0MjAsOSArMTQy
Myw4IEBAIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDI2Y2hhbmdl
QXR0YWNoZWRXaW5kb3dIZWlnaHRFagogX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsMjdyZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHRFdgogX19aTjdXZWJDb3JlMjhJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsQzJFUE5TXzE5SW5zcGVjdG9yQ29udHJvbGxlckVQ
TlNfNFBhZ2VFCiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxEMkV2
Ci1fX1pOSzdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDE1cHJvZmlsZXJFbmFibGVkRXYKLV9fWk5L
N1dlYkNvcmUxNEluc3BlY3RvckFnZW50MTdkcmF3Tm9kZUhpZ2hsaWdodEVSTlNfMTVHcmFwaGlj
c0NvbnRleHRFCi1fX1pOSzdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDMxaXNSZWNvcmRpbmdVc2Vy
SW5pdGlhdGVkUHJvZmlsZUV2CitfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTdk
cmF3Tm9kZUhpZ2hsaWdodEVSTlNfMTVHcmFwaGljc0NvbnRleHRFCitfX1pOSzdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyMzFpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlRXYKICNl
bmRpZgogCiAjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckZyb250ZW5kSG9z
dEN1c3RvbS5jcHAKaW5kZXggOTRmYTg2ZS4uYThkOGQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JGcm9u
dGVuZEhvc3RDdXN0b20uY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiVjhJbnNwZWN0
b3JGcm9udGVuZEhvc3QuaCIKIAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kSG9zdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTERvY3VtZW50LmNwcAppbmRleCAzNmMxZjVmLi4xN2NlNjBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRG9jdW1lbnQuY3BwCkBAIC02OSw3ICs2OSw3IEBACiAjaW5jbHVkZSAiSFRNTEJv
ZHlFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
Ikluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTI3NywxMSArMjc3LDcgQEAgdm9p
ZCBIVE1MRG9jdW1lbnQ6OnJlbGVhc2VFdmVudHMoKQogCiBQYXNzUmVmUHRyPERvY3VtZW50UGFy
c2VyPiBIVE1MRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCiB7Ci0gICAgYm9vbCByZXBvcnRFcnJv
cnMgPSBmYWxzZTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChQYWdlKiBwYWdlID0g
dGhpcy0+cGFnZSgpKQotICAgICAgICByZXBvcnRFcnJvcnMgPSBwYWdlLT5pbnNwZWN0b3JDb250
cm9sbGVyKCktPmhhc0Zyb250ZW5kKCk7Ci0jZW5kaWYKKyAgICBib29sIHJlcG9ydEVycm9ycyA9
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmQodGhpcy0+cGFnZSgpKTsKICAg
ICByZXR1cm4gSFRNTERvY3VtZW50UGFyc2VyOjpjcmVhdGUodGhpcywgcmVwb3J0RXJyb3JzKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXgg
NjY0Mjc3ZS4uZTg4YzRkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuY3BwCkBAIC01Niw3ICs1Niw2IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgog
I2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0
LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU0Fn
ZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCkBAIC0xMjksMTkgKzEyOCwxMyBA
QCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IGNo
YXIqIGNvbnN0IEluc3BlY3RvckFnZW50OjpFbGVtZW50c1BhbmVsID0gImVsZW1lbnRzIjsKLWNv
bnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckFnZW50OjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7
Ci1jb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JBZ2VudDo6U2NyaXB0c1BhbmVsID0gInNjcmlw
dHMiOwotY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQWdlbnQ6OlByb2ZpbGVzUGFuZWwgPSAi
cHJvZmlsZXMiOwotCiBJbnNwZWN0b3JBZ2VudDo6SW5zcGVjdG9yQWdlbnQoSW5zcGVjdG9yQ29u
dHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50
KiBjbGllbnQpCiAgICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxl
cikKICAgICAsIG1faW5zcGVjdGVkUGFnZShwYWdlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQot
ICAgICwgbV9vcGVuaW5nRnJvbnRlbmQoZmFsc2UpCisgICAgLCBtX2Zyb250ZW5kKDApCiAgICAg
LCBtX2Nzc0FnZW50KG5ldyBJbnNwZWN0b3JDU1NBZ2VudCgpKQogICAgICwgbV9zdGF0ZShuZXcg
SW5zcGVjdG9yU3RhdGUoY2xpZW50KSkKLSAgICAsIG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKHRoaXMpKQogICAgICwgbV9pbmplY3Rl
ZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhpcykpCiAgICAgLCBtX2Nv
bnNvbGVBZ2VudChuZXcgSW5zcGVjdG9yQ29uc29sZUFnZW50KHRoaXMpKQogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtMTU4LDcgKzE1MSw2IEBAIEluc3BlY3RvckFnZW50Ojp+
SW5zcGVjdG9yQWdlbnQoKQogICAgIC8vIFRoZXNlIHNob3VsZCBoYXZlIGJlZW4gY2xlYXJlZCBp
biBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkuCiAgICAgQVNTRVJUKCFtX2NsaWVudCk7CiAgICAg
QVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOwotICAgIEFTU0VSVCghbV9oaWdobGlnaHRlZE5vZGUp
OwogfQogCiB2b2lkIEluc3BlY3RvckFnZW50OjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKQEAg
LTE4NCwxMyArMTc2LDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdGVkUGFnZURlc3Ry
b3llZCgpCiAgICAgbV9jbGllbnQgPSAwOwogfQogCi1ib29sIEluc3BlY3RvckFnZW50OjplbmFi
bGVkKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBtX2luc3BlY3RlZFBhZ2UtPnNldHRpbmdzKCktPmRldmVsb3Bl
ckV4dHJhc0VuYWJsZWQoKTsKLX0KLQogYm9vbCBJbnNwZWN0b3JBZ2VudDo6c2VhcmNoaW5nRm9y
Tm9kZUluUGFnZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4oSW5z
cGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUpOwpAQCAtMjAxLDE0ICsxODYsMTQgQEAgdm9p
ZCBJbnNwZWN0b3JBZ2VudDo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBT
dHJpbmcmIGluc3BlY3RvclN0YXQKICAgICBtX3N0YXRlLT5yZXN0b3JlRnJvbUluc3BlY3RvckNv
b2tpZShpbnNwZWN0b3JTdGF0ZUNvb2tpZSk7CiAKICAgICBpZiAoIW1fZnJvbnRlbmQpIHsKLSAg
ICAgICAgY29ubmVjdEZyb250ZW5kKCk7CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
Y29ubmVjdEZyb250ZW5kKCk7CiAgICAgICAgIG1fZnJvbnRlbmQtPmZyb250ZW5kUmV1c2VkKCk7
CiAgICAgICAgIG1fZnJvbnRlbmQtPmluc3BlY3RlZFVSTENoYW5nZWQoaW5zcGVjdGVkVVJMKCku
c3RyaW5nKCkpOwogICAgICAgICBtX2RvbUFnZW50LT5zZXREb2N1bWVudChtX2luc3BlY3RlZFBh
Z2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpKTsKICAgICAgICAgcHVzaERhdGFDb2xsZWN0ZWRP
ZmZsaW5lKCk7CiAgICAgfQogCi0gICAgbV9yZXNvdXJjZUFnZW50ID0gSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6cmVzdG9yZShtX2luc3BlY3RlZFBhZ2UsIG1fc3RhdGUuZ2V0KCksIG1fZnJvbnRl
bmQuZ2V0KCkpOworICAgIG1fcmVzb3VyY2VBZ2VudCA9IEluc3BlY3RvclJlc291cmNlQWdlbnQ6
OnJlc3RvcmUobV9pbnNwZWN0ZWRQYWdlLCBtX3N0YXRlLmdldCgpLCBtX2Zyb250ZW5kKTsKIAog
ICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp0aW1lbGluZVByb2Zp
bGVyRW5hYmxlZCkpCiAgICAgICAgIHN0YXJ0VGltZWxpbmVQcm9maWxlcigpOwpAQCAtMjIzLDEx
ICsyMDgsNiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9t
Q29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdAogCiB2b2lkIEluc3BlY3RvckFnZW50
OjppbnNwZWN0KE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNob3coKTsKLQogICAgIGlmIChub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6
OkVMRU1FTlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX05PREUp
CiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgbV9ub2RlVG9Gb2N1cyA9
IG5vZGU7CkBAIC0zMDYsMjcgKzI4NiwxMyBAQCBib29sIEluc3BlY3RvckFnZW50OjpoYW5kbGVN
b3VzZVByZXNzKCkKICAgICBpZiAobV9oaWdobGlnaHRlZE5vZGUpIHsKICAgICAgICAgUmVmUHRy
PE5vZGU+IG5vZGUgPSBtX2hpZ2hsaWdodGVkTm9kZTsKICAgICAgICAgc2V0U2VhcmNoaW5nRm9y
Tm9kZShmYWxzZSk7Ci0gICAgICAgIGluc3BlY3Qobm9kZS5nZXQoKSk7CisgICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdChub2RlLmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCkKK3ZvaWQgSW5z
cGVjdG9yQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUpCiB7
Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50KTsKLSAgICBtX2luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50ID0gY2xpZW50OwotfQotCi12b2lkIEluc3BlY3RvckFnZW50OjpkaWRD
bGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29ybGQqIHdv
cmxkKQotewotICAgIGlmICh3b3JsZCAhPSBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIHBhZ2UgaXMgc3VwcG9zZWQgdG8gc2VydmUgYXMg
SW5zcGVjdG9yRnJvbnRlbmQgbm90aWZ5IGluc3BldG9yIGZyb250ZW5kCi0gICAgLy8gY2xpZW50
IHRoYXQgaXQncyBjbGVhcmVkIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gZXhwb3NlIGluc3BlY3Rv
ciBiaW5kaW5ncy4KLSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCAmJiBmcmFtZSA9
PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2xpZW50LT53aW5kb3dPYmplY3RDbGVhcmVkKCk7Ci0KICAgICBpZiAoZW5hYmxlZCgpKSB7
CiAgICAgICAgIGlmIChtX2Zyb250ZW5kICYmIGZyYW1lID09IG1faW5zcGVjdGVkUGFnZS0+bWFp
bkZyYW1lKCkpCiAgICAgICAgICAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY2FyZEluamVj
dGVkU2NyaXB0cygpOwpAQCAtMzM4LDggKzMwNCw2IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRp
ZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCoK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoIW1faW5zcGVjdG9yRXh0
ZW5zaW9uQVBJLmlzRW1wdHkoKSkKLSAgICAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmluamVj
dFNjcmlwdChtX2luc3BlY3RvckV4dGVuc2lvbkFQSSwgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJh
bWUpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29s
IGVuYWJsZWQpCkBAIC0zNTcsODAgKzMyMSwyMSBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpzZXRT
ZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpCiAgICAgc2V0U2Vh
cmNoaW5nRm9yTm9kZShlbmFibGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6Y29ubmVj
dEZyb250ZW5kKCkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEZyb250ZW5kKEluc3BlY3RvckZy
b250ZW5kKiBpbnNwZWN0b3JGcm9udGVuZCkKIHsKLSAgICBtX29wZW5pbmdGcm9udGVuZCA9IGZh
bHNlOwogICAgIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7Ci0gICAgbV9mcm9udGVu
ZCA9IG5ldyBJbnNwZWN0b3JGcm9udGVuZChtX2NsaWVudCk7Ci0gICAgbV9kb21BZ2VudCA9IElu
c3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCksIG1fZnJv
bnRlbmQuZ2V0KCkpOwotICAgIG1fcnVudGltZUFnZW50ID0gSW5zcGVjdG9yUnVudGltZUFnZW50
OjpjcmVhdGUobV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCkpOwotICAgIG1fY3NzQWdlbnQtPnNl
dERPTUFnZW50KG1fZG9tQWdlbnQuZ2V0KCkpOworICAgIG1fZnJvbnRlbmQgPSBpbnNwZWN0b3JG
cm9udGVuZDsKKyAgICBjcmVhdGVGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7CiAKLSNpZiBFTkFC
TEUoREFUQUJBU0UpCi0gICAgbV9kYXRhYmFzZUFnZW50ID0gSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dDo6Y3JlYXRlKCZtX2RhdGFiYXNlUmVzb3VyY2VzLCBtX2Zyb250ZW5kLmdldCgpKTsKLSNlbmRp
ZgotCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIG1fZG9tU3RvcmFnZUFnZW50ID0gSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjcmVhdGUoJm1fZG9tU3RvcmFnZVJlc291cmNlcywgbV9m
cm9udGVuZC5nZXQoKSk7Ci0jZW5kaWYKKyAgICBtX2Nzc0FnZW50LT5zZXRET01BZ2VudChtX2Rv
bUFnZW50LmdldCgpKTsKIAogICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCi0gICAgICAgIG1fdGlt
ZWxpbmVBZ2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkpOwor
ICAgICAgICBtX3RpbWVsaW5lQWdlbnQtPnJlc2V0RnJvbnRlbmRQcm94eU9iamVjdChtX2Zyb250
ZW5kKTsKIAotICAgIG1fY29uc29sZUFnZW50LT5zZXRGcm9udGVuZChtX2Zyb250ZW5kLmdldCgp
KTsKKyAgICBtX2NvbnNvbGVBZ2VudC0+c2V0RnJvbnRlbmQobV9mcm9udGVuZCk7CiAKICAgICAv
LyBJbml0aWFsaXplIFdlYiBJbnNwZWN0b3IgdGl0bGUuCiAgICAgbV9mcm9udGVuZC0+aW5zcGVj
dGVkVVJMQ2hhbmdlZChpbnNwZWN0ZWRVUkwoKS5zdHJpbmcoKSk7Ci0KLSNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIG1fYXBwbGljYXRpb25DYWNoZUFnZW50ID0gbmV3
IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCh0aGlzLCBtX2Zyb250ZW5kLmdldCgpKTsK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotICAgIG1fZmlsZVN5c3RlbUFnZW50
ID0gSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZC5nZXQo
KSk7Ci0jZW5kaWYKLQotICAgIGlmICghSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9u
dGVuZHMoKSkKLSAgICAgICAgU2NyaXB0Q29udHJvbGxlcjo6c2V0Q2FwdHVyZUNhbGxTdGFja0Zv
clVuY2F1Z2h0RXhjZXB0aW9ucyh0cnVlKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmZyb250ZW5kQ3JlYXRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckFnZW50OjpzaG93KCkKLXsK
LSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fb3Blbmlu
Z0Zyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9mcm9udGVuZCkKLSAgICAg
ICAgbV9mcm9udGVuZC0+YnJpbmdUb0Zyb250KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fb3Bl
bmluZ0Zyb250ZW5kID0gdHJ1ZTsKLSAgICAgICAgbV9jbGllbnQtPm9wZW5JbnNwZWN0b3JGcm9u
dGVuZChpbnNwZWN0b3JDb250cm9sbGVyKCkpOwotICAgIH0KLX0KLQotdm9pZCBJbnNwZWN0b3JB
Z2VudDo6c2hvd1BhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWwpCi17Ci0gICAgaWYgKCFlbmFibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNob3coKTsKLQotICAgIGlmICghbV9mcm9udGVu
ZCkgewotICAgICAgICBtX3Nob3dBZnRlclZpc2libGUgPSBwYW5lbDsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBtX2Zyb250ZW5kLT5zaG93UGFuZWwocGFuZWwpOwotfQotCi12b2lkIElu
c3BlY3RvckFnZW50OjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX2Zyb250ZW5kKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9mcm9udGVuZC0+ZGlzY29ubmVjdEZyb21CYWNrZW5kKCk7Ci0gICAgZGlz
Y29ubmVjdEZyb250ZW5kKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Nvbm5lY3RG
cm9udGVuZCgpCkBAIC00MzgsMTEgKzM0Myw5IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Nv
bm5lY3RGcm9udGVuZCgpCiAgICAgaWYgKCFtX2Zyb250ZW5kKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2Zyb250ZW5kLmNsZWFyKCk7CisgICAgbV9mcm9udGVuZCA9IDA7CiAKLSAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmZyb250ZW5kRGVsZXRlZCgpOwotICAgIGlmICghSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZHMoKSkKLSAgICAgICAgU2NyaXB0Q29udHJv
bGxlcjo6c2V0Q2FwdHVyZUNhbGxTdGFja0ZvclVuY2F1Z2h0RXhjZXB0aW9ucyhmYWxzZSk7Cisg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNjb25uZWN0RnJvbnRlbmRJbXBsKCk7CiAKICNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAvLyBJZiB0aGUgd2luZG93IGlzIGJl
aW5nIGNsb3NlZCB3aXRoIHRoZSBkZWJ1Z2dlciBlbmFibGVkLApAQCAtNDUyLDcgKzM1NSw2IEBA
IHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiAjZW5kaWYKICAgICBz
ZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKICAgICB1bmJpbmRBbGxSZXNvdXJjZXMoKTsKLSAg
ICBzdG9wVGltZWxpbmVQcm9maWxlcigpOwogCiAgICAgaGlkZUhpZ2hsaWdodCgpOwogCkBAIC00
NjMsMTcgKzM2NSwzOCBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpkaXNjb25uZWN0RnJvbnRlbmQo
KQogICAgIG1fY29uc29sZUFnZW50LT5zZXRGcm9udGVuZCgwKTsKIAogICAgIHJlbGVhc2VGcm9u
dGVuZExpZmV0aW1lQWdlbnRzKCk7Ci0gICAgbV90aW1lbGluZUFnZW50LmNsZWFyKCk7CiAgICAg
bV9leHRyYUhlYWRlcnMuY2xlYXIoKTsKIH0KIAogSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogSW5z
cGVjdG9yQWdlbnQ6OnJlc291cmNlQWdlbnQoKQogewogICAgIGlmICghbV9yZXNvdXJjZUFnZW50
ICYmIG1fZnJvbnRlbmQpCi0gICAgICAgIG1fcmVzb3VyY2VBZ2VudCA9IEluc3BlY3RvclJlc291
cmNlQWdlbnQ6OmNyZWF0ZShtX2luc3BlY3RlZFBhZ2UsIG1fc3RhdGUuZ2V0KCksIG1fZnJvbnRl
bmQuZ2V0KCkpOworICAgICAgICBtX3Jlc291cmNlQWdlbnQgPSBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjpjcmVhdGUobV9pbnNwZWN0ZWRQYWdlLCBtX3N0YXRlLmdldCgpLCBtX2Zyb250ZW5kKTsK
ICAgICByZXR1cm4gbV9yZXNvdXJjZUFnZW50LmdldCgpOwogfQogCit2b2lkIEluc3BlY3RvckFn
ZW50OjpjcmVhdGVGcm9udGVuZExpZmV0aW1lQWdlbnRzKCkKK3sKKyAgICBtX2RvbUFnZW50ID0g
SW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSwgbV9m
cm9udGVuZCk7CisgICAgbV9ydW50aW1lQWdlbnQgPSBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNy
ZWF0ZShtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0Up
CisgICAgbV9kYXRhYmFzZUFnZW50ID0gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Y3JlYXRlKCZt
X2RhdGFiYXNlUmVzb3VyY2VzLCBtX2Zyb250ZW5kKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKERP
TV9TVE9SQUdFKQorICAgIG1fZG9tU3RvcmFnZUFnZW50ID0gSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50OjpjcmVhdGUoJm1fZG9tU3RvcmFnZVJlc291cmNlcywgbV9mcm9udGVuZCk7CisjZW5kaWYK
KworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgbV9hcHBsaWNhdGlv
bkNhY2hlQWdlbnQgPSBuZXcgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KHRoaXMsIG1f
ZnJvbnRlbmQpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgbV9maWxl
U3lzdGVtQWdlbnQgPSBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OmNyZWF0ZSh0aGlzLCBtX2Zy
b250ZW5kKTsKKyNlbmRpZgorfQorCiB2b2lkIEluc3BlY3RvckFnZW50OjpyZWxlYXNlRnJvbnRl
bmRMaWZldGltZUFnZW50cygpCiB7CiAgICAgbV9yZXNvdXJjZUFnZW50LmNsZWFyKCk7CkBAIC01
MDcsNiArNDMwLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVsZWFzZUZyb250ZW5kTGlmZXRp
bWVBZ2VudHMoKQogICAgICAgICBtX2ZpbGVTeXN0ZW1BZ2VudC0+c3RvcCgpOwogICAgICAgICBt
X2ZpbGVTeXN0ZW1BZ2VudC5jbGVhcigpOwogI2VuZGlmCisgICAgc3RvcFRpbWVsaW5lUHJvZmls
ZXIoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkK
QEAgLTUxNSwxMSArNDM5LDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6cG9wdWxhdGVTY3JpcHRP
YmplY3RzKCkKICAgICBpZiAoIW1fZnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghbV9zaG93QWZ0ZXJWaXNpYmxlLmlzRW1wdHkoKSkgewotICAgICAgICBzaG93UGFuZWwobV9z
aG93QWZ0ZXJWaXNpYmxlKTsKLSAgICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gIiI7Ci0gICAg
fQotCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgaWYgKG1fcHJvZmlsZXJB
Z2VudC0+ZW5hYmxlZCgpKQogICAgICAgICBtX2Zyb250ZW5kLT5wcm9maWxlcldhc0VuYWJsZWQo
KTsKQEAgLTUzMCwxMCArNDQ5LDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6cG9wdWxhdGVTY3Jp
cHRPYmplY3RzKCkKICAgICBpZiAobV9ub2RlVG9Gb2N1cykKICAgICAgICAgZm9jdXNOb2RlKCk7
CiAKLSAgICAvLyBEaXNwYXRjaCBwZW5kaW5nIGZyb250ZW5kIGNvbW1hbmRzCi0gICAgZm9yIChW
ZWN0b3I8cGFpcjxsb25nLCBTdHJpbmc+ID46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRXZhbHVh
dGVUZXN0Q29tbWFuZHMuYmVnaW4oKTsgaXQgIT0gbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFu
ZHMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1fZnJvbnRlbmQtPmV2YWx1YXRlRm9yVGVzdEluRnJv
bnRlbmQoKCppdCkuZmlyc3QsICgqaXQpLnNlY29uZCk7Ci0gICAgbV9wZW5kaW5nRXZhbHVhdGVU
ZXN0Q29tbWFuZHMuY2xlYXIoKTsKKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmZyb250ZW5k
TG9hZGVkKCk7CiAKICAgICByZXN0b3JlRGVidWdnZXIoKTsKICAgICByZXN0b3JlUHJvZmlsZXIo
UHJvZmlsZXJSZXN0b3JlTm9BY3Rpb24pOwpAQCAtNTQ2LDEyICs0NjIsMTIgQEAgdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6cHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKCkKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1f
ZGF0YWJhc2VSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6
aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNl
c0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5kLmdldCgpKTsK
KyAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5kKTsKICNlbmRpZgogI2lmIEVOQUJM
RShET01fU1RPUkFHRSkKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21T
dG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3Rv
cmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuYmVn
aW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Ymlu
ZChtX2Zyb250ZW5kLmdldCgpKTsKKyAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5k
KTsKICNlbmRpZgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEUoV09S
S0VSUykKICAgICBXb3JrZXJzTWFwOjppdGVyYXRvciB3b3JrZXJzRW5kID0gbV93b3JrZXJzLmVu
ZCgpOwpAQCAtNTc1LDcgKzQ5MSw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnJlc3RvcmVQcm9m
aWxlcihQcm9maWxlclJlc3RvcmVBY3Rpb24gYWN0aW9uKQogewogICAgIEFTU0VSVChtX2Zyb250
ZW5kKTsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBtX3Byb2ZpbGVyQWdl
bnQtPnNldEZyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIG1fcHJvZmlsZXJBZ2VudC0+
c2V0RnJvbnRlbmQobV9mcm9udGVuZCk7CiAgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5z
cGVjdG9yU3RhdGU6OnByb2ZpbGVyRW5hYmxlZCkpCiAgICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7
CiAgICAgaWYgKGFjdGlvbiA9PSBQcm9maWxlclJlc3RvcmVSZXNldEFnZW50KQpAQCAtNzA3LDcg
KzYyMyw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnN0YXJ0VGltZWxpbmVQcm9maWxlcigpCiAg
ICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90aW1lbGlu
ZUFnZW50ID0gbmV3IEluc3BlY3RvclRpbWVsaW5lQWdlbnQobV9mcm9udGVuZC5nZXQoKSk7Cisg
ICAgbV90aW1lbGluZUFnZW50ID0gbmV3IEluc3BlY3RvclRpbWVsaW5lQWdlbnQobV9mcm9udGVu
ZCk7CiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAgIG1fZnJvbnRlbmQtPnRpbWVsaW5lUHJv
ZmlsZXJXYXNTdGFydGVkKCk7CiAKQEAgLTc0Nyw4ICs2NjMsOCBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250
ZXh0KQogICAgIHsKICAgICAgICAgaWYgKHNjcmlwdENvbnRleHQtPmlzRG9jdW1lbnQoKSkgewot
ICAgICAgICAgICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3IgPSBzdGF0aWNfY2FzdDxE
b2N1bWVudCo+KHNjcmlwdENvbnRleHQpLT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSkK
LSAgICAgICAgICAgICAgICBpbnNwZWN0b3ItPnBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250
ZW5kKCptX3dvcmtlciwgbV9hY3Rpb24pOworICAgICAgICAgICAgaWYgKEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3JBZ2VudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0Q29udGV4dCkt
PnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5tX2luc3BlY3RvckFnZW50LmdldCgpKQor
ICAgICAgICAgICAgICAgIGluc3BlY3RvckFnZW50LT5wb3N0V29ya2VyTm90aWZpY2F0aW9uVG9G
cm9udGVuZCgqbV93b3JrZXIsIG1fYWN0aW9uKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODEw
LDcgKzcyNiw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZE9wZW5EYXRhYmFzZShQYXNzUmVm
UHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nCiAKICAgICAvLyBSZXNvdXJjZXMg
YXJlIG9ubHkgYm91bmQgd2hpbGUgdmlzaWJsZS4KICAgICBpZiAobV9mcm9udGVuZCkKLSAgICAg
ICAgcmVzb3VyY2UtPmJpbmQobV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgIHJlc291cmNlLT5i
aW5kKG1fZnJvbnRlbmQpOwogfQogI2VuZGlmCiAKQEAgLTkxNiw3ICs4MzIsNyBAQCB2b2lkIElu
c3BlY3RvckFnZW50OjpkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwg
Ym9vbCBpc0xvY2FsU3RvcgogCiAgICAgLy8gUmVzb3VyY2VzIGFyZSBvbmx5IGJvdW5kIHdoaWxl
IHZpc2libGUuCiAgICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIHJlc291cmNlLT5iaW5kKG1f
ZnJvbnRlbmQuZ2V0KCkpOworICAgICAgICByZXNvdXJjZS0+YmluZChtX2Zyb250ZW5kKTsKIH0K
ICNlbmRpZgogCkBAIC0xMDA0LDcgKzkyMCw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNob3dB
bmRFbmFibGVEZWJ1Z2dlcigpCiAKICAgICBpZiAoIW1fZnJvbnRlbmQpIHsKICAgICAgICAgbV9z
dGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6ZGVidWdnZXJFbmFibGVkLCB0cnVlKTsK
LSAgICAgICAgc2hvd1BhbmVsKFNjcmlwdHNQYW5lbCk7CisgICAgICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+c2hvd1BhbmVsKEluc3BlY3RvckNvbnRyb2xsZXI6OlNjcmlwdHNQYW5lbCk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7CiB9CkBAIC0xMDE2LDcgKzkzMiw3
IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZURlYnVnZ2VyKCkKICAgICBtX3N0YXRlLT5z
ZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpkZWJ1Z2dlckVuYWJsZWQsIHRydWUpOwogICAgIEFT
U0VSVChtX2luc3BlY3RlZFBhZ2UpOwogCi0gICAgbV9kZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRoaXMsIG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIG1fZGVi
dWdnZXJBZ2VudCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSh0aGlzLCBtX2Zyb250
ZW5kKTsKICAgICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9yQnJvd3NlckRlYnVn
Z2VyQWdlbnQ6OmNyZWF0ZSh0aGlzKTsKIAogICAgIG1fZnJvbnRlbmQtPmRlYnVnZ2VyV2FzRW5h
YmxlZCgpOwpAQCAtMTAzNiwyNiArOTUyLDEyIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Fi
bGVEZWJ1Z2dlcigpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpyZXN1bWUoKQot
ewotICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCi0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+cmVz
dW1lKCk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEFsbEJyb3dzZXJCcmVha3BvaW50
cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMpCiB7CiAgICAgbV9zdGF0
ZS0+c2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpicm93c2VyQnJlYWtwb2ludHMsIGJyZWFrcG9p
bnRzKTsKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckFnZW50OjpldmFsdWF0ZUZvclRlc3RJ
bkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICBpZiAo
bV9mcm9udGVuZCkKLSAgICAgICAgbV9mcm9udGVuZC0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVu
ZChjYWxsSWQsIHNjcmlwdCk7Ci0gICAgZWxzZQotICAgICAgICBtX3BlbmRpbmdFdmFsdWF0ZVRl
c3RDb21tYW5kcy5hcHBlbmQocGFpcjxsb25nLCBTdHJpbmc+KGNhbGxJZCwgc2NyaXB0KSk7Ci19
Ci0KIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9u
ZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYganNvblJlc3VsdCkKIHsKICAgICBTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKGRlYnVnZ2VyV29ybGQoKSwgbV9pbnNw
ZWN0ZWRQYWdlKTsKQEAgLTEzNDAsMTEgKzEyNDIsNiBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojpy
ZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpCiAgICAgbV9zY3JpcHRzVG9FdmFsdWF0
ZU9uTG9hZC5jbGVhcigpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpzZXRJbnNwZWN0b3JF
eHRlbnNpb25BUEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpCi17Ci0gICAgbV9pbnNwZWN0b3JFeHRl
bnNpb25BUEkgPSBzb3VyY2U7Ci19Ci0KIEtVUkwgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RlZFVS
TCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRv
Y3VtZW50KCktPnVybCgpOwpAQCAtMTM3Niw2ICsxMjczLDExIEBAIHZvaWQgSW5zcGVjdG9yQWdl
bnQ6OnNldEV4dHJhSGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycykK
ICAgICB9CiB9CiAKK2Jvb2wgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZWQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZWQoKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKaW5kZXggOGNjNDlhNi4uNzRjNmU1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKQEAgLTU2LDcgKzU2LDYg
QEAgY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIEluamVjdGVkU2NyaXB0OwogY2xhc3MgSW5q
ZWN0ZWRTY3JpcHRIb3N0OwogY2xhc3MgSW5zcGVjdG9yQXJyYXk7Ci1jbGFzcyBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjsKIGNsYXNzIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Owog
Y2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yQ29uc29sZUFnZW50OwpAQCAt
MTA5LDE1ICsxMDgsOSBAQCBjbGFzcyBJbnNwZWN0b3JBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSW5zcGVjdG9yQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDb25zb2xlUGFuZWw7Ci0gICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IEVsZW1lbnRzUGFuZWw7Ci0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IFByb2ZpbGVzUGFuZWw7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IFNjcmlwdHNQYW5lbDsKLQogICAgIEluc3BlY3RvckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIq
LCBQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yQWdlbnQo
KTsKIAotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBpbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcigpIHsgcmV0dXJuIG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
ICAgICBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50
OyB9CiAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEhvc3QoKSB7IHJldHVy
biBtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKTsgfQogCkBAIC0xMzIsMjMgKzEyNSwxOCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3Qg
U3RyaW5nJiBpbnNwZWN0b3JDb29raWUpOwogCi0gICAgdm9pZCBpbnNwZWN0KE5vZGUqKTsKICAg
ICB2b2lkIGhpZ2hsaWdodChOb2RlKik7CiAgICAgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CisgICAg
dm9pZCBpbnNwZWN0KE5vZGUqKTsKICAgICB2b2lkIGhpZ2hsaWdodERPTU5vZGUobG9uZyBub2Rl
SWQpOwogICAgIHZvaWQgaGlkZURPTU5vZGVIaWdobGlnaHQoKSB7IGhpZGVIaWdobGlnaHQoKTsg
fQogCiAgICAgdm9pZCBoaWdobGlnaHRGcmFtZSh1bnNpZ25lZCBsb25nIGZyYW1lSWQpOwogICAg
IHZvaWQgaGlkZUZyYW1lSGlnaGxpZ2h0KCkgeyBoaWRlSGlnaGxpZ2h0KCk7IH0KIAotICAgIHZv
aWQgc2hvdygpOwotICAgIHZvaWQgc2hvd1BhbmVsKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQg
Y2xvc2UoKTsKLQotICAgIHZvaWQgY29ubmVjdEZyb250ZW5kKCk7Ci0gICAgdm9pZCByZXVzZUZy
b250ZW5kKCk7CisgICAgdm9pZCBzZXRGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCopOworICAg
IEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRlbmQ7
IH0KICAgICB2b2lkIGRpc2Nvbm5lY3RGcm9udGVuZCgpOwotICAgIEluc3BlY3RvckZyb250ZW5k
KiBmcm9udGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRlbmQuZ2V0KCk7IH0KIAogICAgIElu
c3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQoKTsKIApAQCAtMTc4LDE1ICsxNjYs
MTEgQEAgcHVibGljOgogICAgIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYXBwbGlj
YXRpb25DYWNoZUFnZW50KCkgeyByZXR1cm4gbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0KCk7
IH0KICNlbmRpZgogCi0KKyAgICBib29sIGhhbmRsZU1vdXNlUHJlc3MoKTsKICAgICBib29sIHNl
YXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25zdDsKICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKLSAg
ICBib29sIGhhbmRsZU1vdXNlUHJlc3MoKTsKLQotICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4pOwotICAgIGJvb2wg
aGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckZy
b250ZW5kQ2xpZW50OyB9CiAKLSAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChG
cmFtZSosIERPTVdyYXBwZXJXb3JsZCopOworICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJ
bldvcmxkKEZyYW1lKik7CiAKICAgICB2b2lkIGRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIq
KTsKIApAQCAtMjQ0LDcgKzIyOCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGVuYWJsZURlYnVnZ2Vy
KCk7CiAgICAgdm9pZCBkaXNhYmxlRGVidWdnZXIoKTsKICAgICBib29sIGRlYnVnZ2VyRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJBZ2VudDsgfQotICAgIHZvaWQgcmVzdW1lKCk7
CiAKICAgICB2b2lkIHNldEFsbEJyb3dzZXJCcmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4pOwogI2VuZGlmCkBAIC0yNTQsNyArMjM3LDYgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGNvbnN0IFN0cmluZyYgc291cmNlKTsKICAgICB2
b2lkIHJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKCk7Ci0gICAgdm9pZCBzZXRJbnNw
ZWN0b3JFeHRlbnNpb25BUEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpOwogCiAgICAgSW5zcGVjdG9y
U3RhdGUqIHN0YXRlKCkgeyByZXR1cm4gbV9zdGF0ZS5nZXQoKTsgfQogCkBAIC0yODEsNiArMjYz
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVk
KTsKIAogICAgIHZvaWQgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKKyAgICB2b2lk
IGNyZWF0ZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQogICAgIHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wpOwpAQCAtMjk1LDkg
KzI3OCw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JD
b250cm9sbGVyOwogICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBJbnNwZWN0b3JDbGll
bnQqIG1fY2xpZW50OwotICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gbV9pbnNw
ZWN0b3JGcm9udGVuZENsaWVudDsKLSAgICBib29sIG1fb3BlbmluZ0Zyb250ZW5kOwotICAgIE93
blB0cjxJbnNwZWN0b3JGcm9udGVuZD4gbV9mcm9udGVuZDsKKyAgICBJbnNwZWN0b3JGcm9udGVu
ZCogbV9mcm9udGVuZDsKICAgICBPd25QdHI8SW5zcGVjdG9yQ1NTQWdlbnQ+IG1fY3NzQWdlbnQ7
CiAgICAgUmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBtX2RvbUFnZW50OwogCkBAIC0zMjAsNiAr
MzAxLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50PiBt
X2ZpbGVTeXN0ZW1BZ2VudDsKICNlbmRpZgogCisgICAgUmVmUHRyPE5vZGU+IG1faGlnaGxpZ2h0
ZWROb2RlOwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGVUb0ZvY3VzOwogICAgIFJlZlB0cjxJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50PiBtX3Jlc291cmNlQWdlbnQ7CiAgICAgT3duUHRyPEluc3BlY3Rv
clJ1bnRpbWVBZ2VudD4gbV9ydW50aW1lQWdlbnQ7CkBAIC0zMzMsMTMgKzMxNSw5IEBAIHByaXZh
dGU6CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcCBtX2RvbVN0b3JhZ2VSZXNvdXJjZXM7CiAj
ZW5kaWYKIAotICAgIFN0cmluZyBtX3Nob3dBZnRlclZpc2libGU7Ci0gICAgUmVmUHRyPE5vZGU+
IG1faGlnaGxpZ2h0ZWROb2RlOwotICAgIE93blB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5qZWN0ZWRTY3Jp
cHRIb3N0PiBtX2luamVjdGVkU2NyaXB0SG9zdDsKICAgICBPd25QdHI8SW5zcGVjdG9yQ29uc29s
ZUFnZW50PiBtX2NvbnNvbGVBZ2VudDsKIAotICAgIFZlY3RvcjxwYWlyPGxvbmcsIFN0cmluZz4g
PiBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kczsKICAgICBWZWN0b3I8U3RyaW5nPiBtX3Nj
cmlwdHNUb0V2YWx1YXRlT25Mb2FkOwogICAgIFN0cmluZyBtX2luc3BlY3RvckV4dGVuc2lvbkFQ
STsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBmYjg0MDllLi4wMWQ4Mjk4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCkBAIC0zMywxNyArMzMsMjY1IEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJ
bmplY3RlZFNjcmlwdEhvc3QuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgorI2luY2x1
ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIklu
c3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogdGVtcG9yYXJ5IHNvbHV0aW9uLiBJdCB3aWxs
IGJlY29tZSBhIHNlcGFyYXRlIGNsYXNzIGluIHRoZSBuZXh0IHBhdGNoIGFuZCBDb250cm9sbGVy
IHJlbGF0ZWQgc3Vic2V0IG9mIGZ1bmN0aW9ucyB3aWxsIGJlIG1vdmVkIGZyb20gSW5zcGVjdG9y
QWdlbnQgdG8gSW5zcGVjdG9yQ29udHJvbGVyLgorY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9y
Q29udHJvbGxlcjo6RWxlbWVudHNQYW5lbCA9ICJlbGVtZW50cyI7Citjb25zdCBjaGFyKiBjb25z
dCBJbnNwZWN0b3JDb250cm9sbGVyOjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7Citjb25zdCBj
aGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTY3JpcHRzUGFuZWwgPSAic2NyaXB0cyI7
Citjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpQcm9maWxlc1BhbmVsID0g
InByb2ZpbGVzIjsKKwogSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQ
YWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCkKLSAgICA6IEluc3Bl
Y3RvckFnZW50KHRoaXMsIHBhZ2UsIGluc3BlY3RvckNsaWVudCkKKyAgICA6IG1faW5zcGVjdG9y
QWdlbnQobmV3IEluc3BlY3RvckFnZW50KHRoaXMsIHBhZ2UsIGluc3BlY3RvckNsaWVudCkpCisg
ICAgLCBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG5ldyBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcihtX2luc3BlY3RvckFnZW50LmdldCgpKSkKKyAgICAsIG1faW5zcGVjdGVkUGFnZShw
YWdlKQorICAgICwgbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQorICAgICwgbV9v
cGVuaW5nRnJvbnRlbmQoZmFsc2UpCit7Cit9CisKK0luc3BlY3RvckNvbnRyb2xsZXI6On5JbnNw
ZWN0b3JDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJ
bnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50
PiBpbnNwZWN0b3JGcm9udGVuZENsaWVudCkKK3sKKyAgICBtX2luc3BlY3RvckZyb250ZW5kQ2xp
ZW50ID0gaW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQ29udHJv
bGxlcjo6aGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2luc3BlY3RvckZyb250ZW5kQ2xpZW50OworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3Js
ZCogd29ybGQpCit7CisgICAgaWYgKHdvcmxkICE9IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvckFnZW50LT5kaWRDbGVhcldpbmRvd09i
amVjdEluV29ybGQoZnJhbWUpOworCisgICAgaWYgKCFtX2luc3BlY3RvckV4dGVuc2lvbkFQSS5p
c0VtcHR5KCkpCisgICAgICAgIG1faW5zcGVjdG9yQWdlbnQtPmluamVjdGVkU2NyaXB0SG9zdCgp
LT5pbmplY3RTY3JpcHQobV9pbnNwZWN0b3JFeHRlbnNpb25BUEksIG1haW5Xb3JsZFNjcmlwdFN0
YXRlKGZyYW1lKSk7CisKKyAgICAvLyBJZiB0aGUgcGFnZSBpcyBzdXBwb3NlZCB0byBzZXJ2ZSBh
cyBJbnNwZWN0b3JGcm9udGVuZCBub3RpZnkgaW5zcGVjdG9yIGZyb250ZW5kCisgICAgLy8gY2xp
ZW50IHRoYXQgaXQncyBjbGVhcmVkIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gZXhwb3NlIGluc3Bl
Y3RvciBiaW5kaW5ncy4KKyAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCAmJiBmcmFt
ZSA9PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2xpZW50LT53aW5kb3dPYmplY3RDbGVhcmVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKCkKK3sKKyAgICBtX2luc3BlY3RvckFn
ZW50LT5zdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpzdG9wVGltZWxpbmVQcm9maWxlcigpCit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c3Rv
cFRpbWVsaW5lUHJvZmlsZXIoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25u
ZWN0RnJvbnRlbmQoKQoreworICAgIG1fb3BlbmluZ0Zyb250ZW5kID0gZmFsc2U7CisgICAgbV9p
bnNwZWN0b3JGcm9udGVuZCA9IG5ldyBJbnNwZWN0b3JGcm9udGVuZChtX2luc3BlY3RvckNsaWVu
dCk7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c2V0RnJvbnRlbmQobV9pbnNwZWN0b3JGcm9udGVu
ZC5nZXQoKSk7CisKKyAgICBpZiAoIUluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRl
bmRzKCkpCisgICAgICAgIFNjcmlwdENvbnRyb2xsZXI6OnNldENhcHR1cmVDYWxsU3RhY2tGb3JV
bmNhdWdodEV4Y2VwdGlvbnModHJ1ZSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpm
cm9udGVuZENyZWF0ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25u
ZWN0RnJvbnRlbmQoKQoreworICAgIG1faW5zcGVjdG9yQWdlbnQtPmRpc2Nvbm5lY3RGcm9udGVu
ZCgpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZElt
cGwoKQoreworICAgIGlmICghbV9pbnNwZWN0b3JGcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9pbnNwZWN0b3JGcm9udGVuZC5jbGVhcigpOworCisgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpmcm9udGVuZERlbGV0ZWQoKTsKKyAgICBpZiAoIUluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkpCisgICAgICAgIFNjcmlwdENvbnRyb2xsZXI6OnNldENh
cHR1cmVDYWxsU3RhY2tGb3JVbmNhdWdodEV4Y2VwdGlvbnMoZmFsc2UpOworfQorCit2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnNob3coKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9vcGVuaW5nRnJvbnRlbmQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kKQorICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kLT5icmluZ1RvRnJvbnQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9vcGVuaW5nRnJvbnRl
bmQgPSB0cnVlOworICAgICAgICBtX2luc3BlY3RvckNsaWVudC0+b3Blbkluc3BlY3RvckZyb250
ZW5kKHRoaXMpOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbG9zZSgp
Cit7CisgICAgaWYgKCFtX2luc3BlY3RvckZyb250ZW5kKQorICAgICAgICByZXR1cm47CisgICAg
bV9pbnNwZWN0b3JGcm9udGVuZC0+ZGlzY29ubmVjdEZyb21CYWNrZW5kKCk7CisgICAgZGlzY29u
bmVjdEZyb250ZW5kKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZUlu
c3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXRlQ29va2ll
KQoreworICAgIG1faW5zcGVjdG9yQWdlbnQtPnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29r
aWUoaW5zcGVjdG9yU3RhdGVDb29raWUpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0KQoreworICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kKQorICAgICAgICBtX2luc3BlY3Rv
ckZyb250ZW5kLT5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNhbGxJZCwgc2NyaXB0KTsKKyAg
ICBlbHNlCisgICAgICAgIG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzLmFwcGVuZChwYWly
PGxvbmcsIFN0cmluZz4oY2FsbElkLCBzY3JpcHQpKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Cit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZHJhd05vZGVIaWdobGlnaHQoY29udGV4dCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdChOb2RlKiBub2RlKQoreworICAg
IGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzaG93KCk7CisKKyAgICBt
X2luc3BlY3RvckFnZW50LT5pbnNwZWN0KG5vZGUpOworfQorCitib29sIEluc3BlY3RvckNvbnRy
b2xsZXI6OmVuYWJsZWQoKSBjb25zdAoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLT5zZXR0aW5n
cygpLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2hvd1BhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWwpCit7CisgICAgaWYgKCFlbmFibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNob3coKTsKKworICAgIGlmICghbV9pbnNwZWN0
b3JGcm9udGVuZCkgeworICAgICAgICBtX3JlcXVpcmVkUGFuZWwgPSBwYW5lbDsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX2luc3BlY3RvckZyb250ZW5kLT5zaG93UGFuZWwocGFuZWwp
OworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kTG9hZGVkKCkKK3sKKyAg
ICBpZiAoIW1fcmVxdWlyZWRQYW5lbCkgeworICAgICAgICBzaG93UGFuZWwobV9yZXF1aXJlZFBh
bmVsKTsKKyAgICAgICAgbV9yZXF1aXJlZFBhbmVsID0gIiI7CisgICAgfQorICAgIC8vIERpc3Bh
dGNoIHBlbmRpbmcgZnJvbnRlbmQgY29tbWFuZHMKKyAgICBmb3IgKFZlY3RvcjxwYWlyPGxvbmcs
IFN0cmluZz4gPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5i
ZWdpbigpOyBpdCAhPSBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5lbmQoKTsgKytpdCkK
KyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCgo
Kml0KS5maXJzdCwgKCppdCkuc2Vjb25kKTsKKyAgICBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21t
YW5kcy5jbGVhcigpOworCit9CisKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6dGltZWxpbmVQ
cm9maWxlckVuYWJsZWQoKQoreworICAgIHJldHVybiBtX2luc3BlY3RvckFnZW50LT50aW1lbGlu
ZUFnZW50KCk7Cit9CisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKK3ZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmlsZXIoKQoreworICAgIG1faW5zcGVjdG9yQWdl
bnQtPmVuYWJsZVByb2ZpbGVyKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlz
YWJsZVByb2ZpbGVyKCkKK3sKKyAgICBtX2luc3BlY3RvckFnZW50LT5kaXNhYmxlUHJvZmlsZXIo
KTsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlckVuYWJsZWQoKQorewor
ICAgIHJldHVybiBtX2luc3BlY3RvckFnZW50LT5wcm9maWxlckVuYWJsZWQoKTsKK30KKworYm9v
bCBJbnNwZWN0b3JDb250cm9sbGVyOjpkZWJ1Z2dlckVuYWJsZWQoKQogeworICAgIHJldHVybiBt
X2luc3BlY3RvckFnZW50LT5kZWJ1Z2dlckVuYWJsZWQoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzaG93QW5kRW5hYmxlRGVidWdnZXIoKQoreworICAgIG1faW5zcGVjdG9yQWdl
bnQtPnNob3dBbmRFbmFibGVEZWJ1Z2dlcigpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpc2FibGVEZWJ1Z2dlcigpCit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZGlzYWJsZURl
YnVnZ2VyKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRVc2VySW5pdGlh
dGVkUHJvZmlsaW5nKCkKK3sKKyAgICBtX2luc3BlY3RvckFnZW50LT5zdGFydFVzZXJJbml0aWF0
ZWRQcm9maWxpbmcoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVXNlcklu
aXRpYXRlZFByb2ZpbGluZygpCit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RvcFVzZXJJbml0
aWF0ZWRQcm9maWxpbmcoKTsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjppc1JlY29y
ZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnNwZWN0
b3JBZ2VudC0+aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpOworfQorCit2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckV4dGVuc2lvbkFQSShjb25zdCBTdHJpbmcm
IHNvdXJjZSkKK3sKKyAgICBtX2luc3BlY3RvckV4dGVuc2lvbkFQSSA9IHNvdXJjZTsKK30KKwor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN1bWUoKQoreworICAgIGlmIChJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JBZ2VudC0+ZGVidWdnZXJB
Z2VudCgpKQorICAgICAgICBkZWJ1Z2dlckFnZW50LT5yZXN1bWUoKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyAgICBtX2luc3BlY3RvckFnZW50
LT5oaWRlSGlnaGxpZ2h0KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzcGF0
Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX2lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLT5kaXNwYXRjaChtZXNzYWdlKTsKK30KKworI2VuZGlm
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRl
eCA0MmU5NjE1Li4zZWQ1YmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgKQEAgLTMxLDE3ICszMSwxMDAgQEAKICNpZm5kZWYgSW5zcGVjdG9y
Q29udHJvbGxlcl9oCiAjZGVmaW5lIEluc3BlY3RvckNvbnRyb2xsZXJfaAogCi0jaW5jbHVkZSAi
SW5zcGVjdG9yQWdlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NV3JhcHBlcldvcmxk
OworY2xhc3MgRnJhbWU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnNwZWN0b3JB
Z2VudDsKK2NsYXNzIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9y
Q2xpZW50OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDsKIGNsYXNzIFBhZ2U7CitjbGFzcyBQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9u
dGVuZFRhc2s7CitjbGFzcyBOb2RlOwogCi0vLyBGSVhNRTogdGVtcG9yYXJ5IHNvbHV0aW9uLiBJ
dCB3aWxsIGJlY29tZSBhIHNlcGFyYXRlIGNsYXNzIGluIHRoZSBuZXh0IHBhdGNoIGFuZCBjb250
cm9sbGVyIHJlbGF0ZWQgc3Vic2V0IG9mIGZ1bmN0aW9ucyB3aWxsIGJlIG1vdmVkIGZyb20gSW5z
cGVjdG9yQWdlbnQgdG8gSW5zcGVjdG9yQ29udHJvbGVyLgotY2xhc3MgSW5zcGVjdG9yQ29udHJv
bGxlciA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudCB7CitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVy
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JDb250cm9sbGVyKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgQ29uc29sZVBhbmVsOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBFbGVtZW50
c1BhbmVsOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBQcm9maWxlc1BhbmVsOworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBTY3JpcHRzUGFuZWw7CisKICAgICBJbnNwZWN0b3JD
b250cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICB+SW5zcGVjdG9yQ29udHJv
bGxlcigpOworCisgICAgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQoKSBjb25zdCB7
IHJldHVybiBtX2luc3BlY3RvckNsaWVudDsgfSAvLyBGSVhNRTogaXMgdXNlZCBmb3IgYXR0YWNo
ZWRIZWlnaHQKKyAgICBQYWdlKiBpbnNwZWN0ZWRQYWdlKCkgeyByZXR1cm4gbV9pbnNwZWN0ZWRQ
YWdlOyB9CisKKyAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2hvdygpOwor
ICAgIHZvaWQgc2hvd1BhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWwpOworICAgIHZvaWQgY2xvc2Uo
KTsKKworICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoUGFzc093blB0cjxJbnNw
ZWN0b3JGcm9udGVuZENsaWVudD4pOworICAgIGJvb2wgaGFzSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQoKSBjb25zdDsKKyAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSos
IERPTVdyYXBwZXJXb3JsZCopOworICAgIHZvaWQgc2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKGNv
bnN0IFN0cmluZyYgc291cmNlKTsKKyAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisgICAgYm9vbCBoYXNGcm9udGVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmQ7IH0KKyAgICB2b2lkIGNvbm5lY3RGcm9udGVu
ZCgpOworICAgIHZvaWQgZGlzY29ubmVjdEZyb250ZW5kKCk7CisgICAgdm9pZCByZXN0b3JlSW5z
cGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yQ29va2llKTsKKwor
ICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CisgICAgdm9pZCBkcmF3Tm9kZUhpZ2hsaWdodChHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKKyAgICB2b2lkIGhpZGVIaWdobGlnaHQoKTsKKworICAgIHZv
aWQgZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBz
Y3JpcHQpOworCisgICAgdm9pZCBzdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKKyAgICB2b2lkIHN0
b3BUaW1lbGluZVByb2ZpbGVyKCk7CisgICAgYm9vbCB0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCgp
OworCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgYm9vbCBwcm9maWxlckVu
YWJsZWQoKTsKKyAgICB2b2lkIGVuYWJsZVByb2ZpbGVyKCk7CisgICAgdm9pZCBzdGFydFVzZXJJ
bml0aWF0ZWRQcm9maWxpbmcoKTsKKyAgICBib29sIGlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFBy
b2ZpbGUoKSBjb25zdDsKKyAgICB2b2lkIHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7Cisg
ICAgdm9pZCBkaXNhYmxlUHJvZmlsZXIoKTsKKyAgICB2b2lkIHNob3dBbmRFbmFibGVEZWJ1Z2dl
cigpOworICAgIGJvb2wgZGVidWdnZXJFbmFibGVkKCk7CisgICAgdm9pZCBkaXNhYmxlRGVidWdn
ZXIoKTsKKyAgICB2b2lkIHJlc3VtZSgpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIEluc3BlY3RvckFnZW50OworICAgIGZyaWVuZCBjbGFzcyBQb3N0V29ya2VyTm90aWZp
Y2F0aW9uVG9Gcm9udGVuZFRhc2s7CisKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9udGVuZEltcGwo
KTsgLy8gdXNlZCBieSBJbnNwZWN0b3JBZ2VudAorICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsK
KworICAgIE93blB0cjxJbnNwZWN0b3JBZ2VudD4gbV9pbnNwZWN0b3JBZ2VudDsKKyAgICBPd25Q
dHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI7CisgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBtX2luc3BlY3RvckZyb250
ZW5kQ2xpZW50OworICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZD4gbV9pbnNwZWN0b3JGcm9u
dGVuZDsKKyAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CisgICAgSW5zcGVjdG9yQ2xpZW50KiBt
X2luc3BlY3RvckNsaWVudDsKKyAgICBib29sIG1fb3BlbmluZ0Zyb250ZW5kOworICAgIFN0cmlu
ZyBtX3JlcXVpcmVkUGFuZWw7CisKKyAgICBWZWN0b3I8cGFpcjxsb25nLCBTdHJpbmc+ID4gbV9w
ZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHM7CisgICAgU3RyaW5nIG1faW5zcGVjdG9yRXh0ZW5z
aW9uQVBJOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCmluZGV4IDVlOWI0NDEuLmEwMGNmNDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbC5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCB1bnNpZ25lZCBJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHVu
c2lnbmVkCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6c2VuZE1lc3NhZ2VU
b0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIG1faW5zcGVjdG9yQ29udHJv
bGxlci0+aW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoKS0+ZGlzcGF0Y2gobWVzc2FnZSk7Cisg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVz
c2FnZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKaW5kZXggMTc5NjI1Ni4uZjJl
NjZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kSG9zdC5jcHAKQEAgLTIwMSw4ICsyMDEsOCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9z
dDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0CiAKIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0OjpzZXRFeHRlbnNpb25BUEkoY29uc3QgU3RyaW5nJiBzY3JpcHQpCiB7Ci0g
ICAgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvciA9IG1fZnJvbnRlbmRQYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCk7Ci0gICAgaW5zcGVjdG9yLT5zZXRJbnNwZWN0b3JFeHRlbnNpb25BUEkoc2Ny
aXB0KTsKKyAgICBBU1NFUlQobV9mcm9udGVuZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSk7
CisgICAgbV9mcm9udGVuZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9y
RXh0ZW5zaW9uQVBJKHNjcmlwdCk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6
OmxvY2FsaXplZFN0cmluZ3NVUkwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBkYmI0NzJhLi45ODkxNjQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29uc29sZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVy
QWdlbnQuaCIKQEAgLTg4LDcgKzg5LDcgQEAgc3RhdGljIGJvb2wgZXZlbnRIYXNMaXN0ZW5lcnMo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERPTVdpbmRvdyogd2luZG93LAogCiB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkSW1w
bChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBl
cldvcmxkKiB3b3JsZCkKIHsKLSAgICBpbnNwZWN0b3JBZ2VudC0+ZGlkQ2xlYXJXaW5kb3dPYmpl
Y3RJbldvcmxkKGZyYW1lLCB3b3JsZCk7CisgICAgaW5zcGVjdG9yQWdlbnQtPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKGZyYW1lLCB3b3JsZCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVk
SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCkBAIC01NjUsMjQgKzU2NiwxNyBA
QCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkUHJvZmlsZUltcGwoSW5zcGVjdG9y
QWdlbnQqIGluc3BlY3RvckFnZW50LCBSZQogICAgIH0KIH0KIAotYm9vbCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnByb2ZpbGVyRW5hYmxlZEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50KQotewotICAgIGlmICghaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2Vu
dCA9IGluc3BlY3RvckFnZW50LT5wcm9maWxlckFnZW50KCk7Ci0gICAgaWYgKCFwcm9maWxlckFn
ZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcHJvZmlsZXJBZ2VudC0+
ZW5hYmxlZCgpOwotfQotCiBTdHJpbmcgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpnZXRDdXJy
ZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbnQsIGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlcikKIHsKICAgICBpZiAoSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCA9IGluc3BlY3RvckFnZW50LT5wcm9maWxlckFn
ZW50KCkpCiAgICAgICAgIHJldHVybiBwcm9maWxlckFnZW50LT5nZXRDdXJyZW50VXNlckluaXRp
YXRlZFByb2ZpbGVOYW1lKGluY3JlbWVudFByb2ZpbGVOdW1iZXIpOwogICAgIHJldHVybiAiIjsK
IH0KKworYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnByb2ZpbGVyRW5hYmxlZEltcGwo
SW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50KQoreworICAgIHJldHVybiBpbnNwZWN0b3JB
Z2VudC0+cHJvZmlsZXJFbmFibGVkKCk7Cit9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBQkFT
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaAppbmRleCAwMmY1ZDNmLi45YmQyMzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC0xMzksOCArMTM5LDgg
QEAgcHVibGljOgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIHN0YXRpYyB2
b2lkIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZShQYWdlKiwgY29uc3QgU3RyaW5n
JiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwog
ICAgIHN0YXRpYyB2b2lkIGFkZFByb2ZpbGUoUGFnZSosIFJlZlB0cjxTY3JpcHRQcm9maWxlPiwg
UGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+KTsKLSAgICBzdGF0aWMgYm9vbCBwcm9maWxlckVu
YWJsZWQoUGFnZSopOwogICAgIHN0YXRpYyBTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQ
cm9maWxlTmFtZShQYWdlKiwgYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyKTsKKyAgICBzdGF0
aWMgYm9vbCBwcm9maWxlckVuYWJsZWQoUGFnZSopOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCkBAIC0xNzUsOCArMTc1LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBmcm9u
dGVuZENyZWF0ZWQoKSB7IHNfZnJvbnRlbmRDb3VudGVyICs9IDE7IH0KICAgICBzdGF0aWMgdm9p
ZCBmcm9udGVuZERlbGV0ZWQoKSB7IHNfZnJvbnRlbmRDb3VudGVyIC09IDE7IH0KICAgICBzdGF0
aWMgYm9vbCBoYXNGcm9udGVuZHMoKSB7IHJldHVybiBzX2Zyb250ZW5kQ291bnRlcjsgfQorICAg
IHN0YXRpYyBib29sIGhhc0Zyb250ZW5kKFBhZ2UqKTsKICNlbHNlCiAgICAgc3RhdGljIGJvb2wg
aGFzRnJvbnRlbmRzKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBzdGF0aWMgYm9vbCBoYXNGcm9u
dGVuZChQYWdlKikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMjUx
LDggKzI1Myw4IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAg
ICAgc3RhdGljIHZvaWQgYWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlSW1wbChJbnNw
ZWN0b3JBZ2VudCosIGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICBzdGF0aWMgdm9pZCBhZGRQcm9maWxlSW1wbChJ
bnNwZWN0b3JBZ2VudCosIFJlZlB0cjxTY3JpcHRQcm9maWxlPiwgUGFzc1JlZlB0cjxTY3JpcHRD
YWxsU3RhY2s+KTsKLSAgICBzdGF0aWMgYm9vbCBwcm9maWxlckVuYWJsZWRJbXBsKEluc3BlY3Rv
ckFnZW50Kik7CiAgICAgc3RhdGljIFN0cmluZyBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2Zp
bGVOYW1lSW1wbChJbnNwZWN0b3JBZ2VudCosIGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlcik7
CisgICAgc3RhdGljIGJvb2wgcHJvZmlsZXJFbmFibGVkSW1wbChJbnNwZWN0b3JBZ2VudCopOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCkBAIC04MjMsNiArODI1LDE2IEBAIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0
YXR1cyhGcmFtZSogZnJhbWUpCiB9CiAjZW5kaWYKIAoraW5saW5lIGJvb2wgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZChQYWdlKiBwYWdlKQoreworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisgICAgcmV0dXJuIGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yUGFnZShwYWdl
KTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKwogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCiBpbmxpbmUgSW5zcGVjdG9yQWdlbnQqIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6aW5zcGVjdG9yQWdlbnRGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA0OGJhNjQ4Li5l
YjhiNDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTI5NzMsMTEg
KzI5NzMsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Q
b2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzcwogICAgIGlmICghbV9mcmFtZS0+cGFn
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikg
JiYgRU5BQkxFKElOU1BFQ1RPUikgJiYgVVNFKEpTQykKLSAgICBpZiAoUGFnZSogcGFnZSA9IG1f
ZnJhbWUtPnBhZ2UoKSkgewotICAgICAgICBpZiAocGFnZS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFt
ZSkKLSAgICAgICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+cmVzdW1lKCk7Ci0g
ICAgfQorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQorICAgIG1f
ZnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5yZXN1bWUoKTsKICNlbmRpZgog
CiAgICAgc2V0UHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcihtX3BvbGljeURvY3VtZW50TG9hZGVy
LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMTNhNjhkZi4uYjczNzZlOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wMi0wMiAg
SWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBJbnNw
ZWN0b3JDb250cm9sbGVyJ3MgbWV0aG9kcyBmcm9tIEluc3BlY3RvckFnZW50IHRvIEluc3BlY3Rv
ckNvbnRyb2xsZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzMTY5CisKKyAgICAgICAgTWlub3IgY2hhbmdlIGVuZm9yY2VkIGJ5IG1ham9yIGNo
YW5nZXMgaW4gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci4KKworICAgICAg
ICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRl
dlRvb2xzQWdlbnRJbXBsOjpkaXNwYXRjaE9uSW5zcGVjdG9yQmFja2VuZCk6CisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTEtMDItMDIgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKaW5k
ZXggMDA1ZGZhZi4uZmNhZDZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcApAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgV2Vi
RGV2VG9vbHNBZ2VudEltcGw6OmRpZENsZWFyV2luZG93T2JqZWN0KFdlYkZyYW1lSW1wbCogd2Vi
ZnJhbWUpCiAKIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpc3BhdGNoT25JbnNwZWN0b3JC
YWNrZW5kKGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBpbnNwZWN0b3JDb250cm9s
bGVyKCktPmluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKCktPmRpc3BhdGNoKG1lc3NhZ2UpOwor
ICAgIGluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1l
c3NhZ2UpOwogfQogCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjppbnNwZWN0RWxlbWVudEF0
KGNvbnN0IFdlYlBvaW50JiBwb2ludCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oCmluZGV4IGQxNjRhNDguLjc2NDBjZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaApAQCAtNTMsNiArNTMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDaHJvbWl1bURhdGFPYmplY3Q7CitjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNz
IEZyYW1lOwogY2xhc3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hh
bmdlTG9nCmluZGV4IDBlNWRlYmMuLjdiNTZiNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAxMS0wMi0wMiAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
IEluc3BlY3RvcjogbW92ZSBJbnNwZWN0b3JDb250cm9sbGVyJ3MgbWV0aG9kcyBmcm9tIEluc3Bl
Y3RvckFnZW50IHRvIEluc3BlY3RvckNvbnRyb2xsZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMTY5CisKKyAgICAgICAgTWlub3IgY2hhbmdl
IGVuZm9yY2VkIGJ5IG1ham9yIGNoYW5nZXMgaW4gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0
ay5jcHA6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5jcHA6CisgICAgICAg
ICh3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfcHJvcGVydHkpOgorCiAyMDExLTAyLTAxICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcAppbmRleCAzMWFmMjQzLi5lMDcyM2Ew
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudEd0ay5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIndlYmtpdHZlcnNpb24uaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJpbnNwZWN0b3IuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3Iu
Y3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5jcHAKaW5k
ZXggZGY2M2M2My4uOGI1YjVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYmluc3BlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYmluc3BlY3Rvci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCkBAIC0zOTcsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9p
bnNwZWN0b3JfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1YK
ICNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIFBST1BfVElNRUxJTkVfUFJPRklMSU5H
X0VOQUJMRUQ6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPnBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+dGltZWxpbmVBZ2VudCgpICE9IDApOworICAgICAgICBn
X3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2LT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKCkpOwogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wX2lkLCBwc3BlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggNzFhNzE0ZC4uMDBhZWQyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTAyLTAyICBJbHlhIFRpa2hvbm92
c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIEluc3BlY3RvckNvbnRyb2xs
ZXIncyBtZXRob2RzIGZyb20gSW5zcGVjdG9yQWdlbnQgdG8gSW5zcGVjdG9yQ29udHJvbGxlci4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMxNjkK
KworICAgICAgICBNaW5vciBjaGFuZ2UgZW5mb3JjZWQgYnkgbWFqb3IgY2hhbmdlcyBpbiBXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgICogV2ViSW5zcGVj
dG9yL1dlYkluc3BlY3Rvci5tbToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yIGlzVGltZWxpbmVQ
cm9maWxpbmdFbmFibGVkXSk6CisKIDIwMTEtMDItMDEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBCZXRoIERha2luLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tbSBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0KaW5kZXggOGFiMDQ5Zi4uYzAwMGYw
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3BlY3Rv
ci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1t
CkBAIC0xNTcsNyArMTU3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAtIChCT09MKWlz
VGltZWxpbmVQcm9maWxpbmdFbmFibGVkCiB7CiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlKF93
ZWJWaWV3KSkKLSAgICAgICAgcmV0dXJuIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+dGlt
ZWxpbmVBZ2VudCgpID8gWUVTIDogTk87CisgICAgICAgIHJldHVybiBwYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKCkgPyBZRVMgOiBOTzsKICAgICBy
ZXR1cm4gTk87CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCA5MmFmZmZlLi42MzQxNmU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93
aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDItMDIgIElseWEgVGlraG9ub3Zz
a3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgSW5zcGVjdG9yQ29udHJvbGxl
cidzIG1ldGhvZHMgZnJvbSBJbnNwZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JDb250cm9sbGVyLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzE2OQor
CisgICAgICAgIE1pbm9yIGNoYW5nZSBlbmZvcmNlZCBieSBtYWpvciBjaGFuZ2VzIGluIFdlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuCisKKyAgICAgICAgKiBXZWJJbnNwZWN0
b3IuY3BwOgorICAgICAgICAoV2ViSW5zcGVjdG9yOjppc1RpbWVsaW5lUHJvZmlsaW5nRW5hYmxl
ZCk6CisKIDIwMTEtMDEtMzEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJJbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNw
cAppbmRleCBjMzgyM2IyLi40ZTk1ZmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJJbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkluc3BlY3Rvci5jcHAK
QEAgLTI3Nyw3ICsyNzcsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkluc3BlY3Rv
cjo6aXNUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQoQk9PTCogaXNFbmFibAogICAgIGlmICghcGFn
ZSkKICAgICAgICAgcmV0dXJuIFNfT0s7CiAKLSAgICAqaXNFbmFibGVkID0gcGFnZS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLT50aW1lbGluZUFnZW50KCkgIT0gMDsKKyAgICAqaXNFbmFibGVkID0g
cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT50aW1lbGluZVByb2ZpbGVyRW5hYmxlZCgpOwog
ICAgIHJldHVybiBTX09LOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81617</attachid>
            <date>2011-02-08 02:31:45 -0800</date>
            <delta_ts>2011-02-08 06:45:25 -0800</delta_ts>
            <desc>[patch] third version version</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>53738</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmYWI5YmI1Li42NzI5NzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUg
QEAKKzIwMTEtMDItMDIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IG1vdmUgSW5zcGVjdG9yQ29udHJvbGxlcidzIG1ldGhvZHMgZnJvbSBJbnNwZWN0b3JB
Z2VudCB0byBJbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzE2OQorCisgICAgICAgIEFsbCB0aGUgSW5zcGVjdG9y
IEFQSSBmb3IgV2ViQ29yZSBoYXMgdHdvIHBhcnRzLgorICAgICAgICBUaGUgZmlyc3Qgb25lIGlz
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBmb3IgV2ViQ29yZS4KKyAgICAgICAgVGhlIHNlY29u
ZCBpcyBJbnNwZWN0b3JDb250cm9sbGVyIGZvciBXZWJLaXQuCisgICAgICAgIEluc3BlY3RvckFn
ZW50IHdhcyBwcm9kdWNlZCBieSByZW5hbWluZyBvcmlnaW5hbCBJbnNwZWN0b3JDb250cm9sbGVy
LgorICAgICAgICBUaGlzIHBhdGNoIGV4dHJhY3RzIFdlYktpdCByZWxhdGVkIG1ldGhvZHMgZnJv
bSBJbnNwZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgICogV2Vi
Q29yZS5leHAuaW46CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJv
bnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcik6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50OjpJbnNwZWN0b3JBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2Vu
dDo6fkluc3BlY3RvckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpy
ZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckFnZW50OjppbnNwZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpo
YW5kbGVNb3VzZVByZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRD
bGVhcldpbmRvd09iamVjdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaXNj
b25uZWN0RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJlc291
cmNlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmNyZWF0ZUZyb250
ZW5kTGlmZXRpbWVBZ2VudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJl
bGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQWdlbnQ6OnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JBZ2VudDo6cmVzdG9yZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckFnZW50OjpzdGFydFRpbWVsaW5lUHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UG9z
dFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGlkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRVc2VET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFnZW50OjpzaG93QW5kRW5hYmxlRGVidWdnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQWdlbnQ6OmVuYWJsZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50OjplbmFibGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpmcm9udGVuZCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNw
ZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0
SW5Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3
Tm9kZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpp
bnNwZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kTG9hZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnRpbWVsaW5lUHJvZmlsZXJFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2Zp
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVQcm9m
aWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlckVu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVidWdnZXJF
bmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dBbmRF
bmFibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpk
aXNhYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yRXh0
ZW5zaW9uQVBJKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3Vt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoaWRlSGlnaGxpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc3BhdGNoTWVzc2Fn
ZUZyb21Gcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omhhc0Zyb250ZW5kKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpzZW5kTWVzc2Fn
ZVRvQmFja2VuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNldEV4dGVuc2lv
bkFQSSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpwcm9maWxlckVuYWJsZWRJbXBsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Omhhc0Zyb250ZW5kKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2
aWdhdGlvblBvbGljeSk6CisKIDIwMTEtMDItMDcgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNv
bT4KIAogICAgICAgICBGaXggdGhlIDMyLWJpdCBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5k
ZXggYmQ0OWMxZi4uMDk2ODM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTE0MDQsMjMgKzE0
MDQsMjYgQEAgX19aTjdXZWJDb3JlMjJHZW9sb2NhdGlvblNlcnZpY2VNb2NrOHNldEVycm9yRU4z
V1RGMTBQYXNzUmVmUHRySU5TXzEzUG9zaXRpb25FcnIKICNlbmRpZgogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQ0c2hvd0V2Ci1fX1pON1dlYkNv
cmUxNEluc3BlY3RvckFnZW50NWNsb3NlRXYKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQ5
c2hvd1BhbmVsRVJLTjNXVEY2U3RyaW5nRQotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDEy
Q29uc29sZVBhbmVsRQotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDEzUHJvZmlsZXNQYW5l
bEUKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQxNGVuYWJsZVByb2ZpbGVyRXYKLV9fWk43
V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQxNWRpc2FibGVEZWJ1Z2dlckV2Ci1fX1pON1dlYkNvcmUx
NEluc3BlY3RvckFnZW50MTVkaXNhYmxlUHJvZmlsZXJFdgotX19aTjdXZWJDb3JlMTRJbnNwZWN0
b3JBZ2VudDE4ZGlzY29ubmVjdEZyb250ZW5kRXYKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdl
bnQyMHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQy
MXNob3dBbmRFbmFibGVEZWJ1Z2dlckV2Ci1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MjFz
dGFydFRpbWVsaW5lUHJvZmlsZXJFdgotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDI1ZXZh
bHVhdGVGb3JUZXN0SW5Gcm9udGVuZEVsUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxNElu
c3BlY3RvckFnZW50MjZzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudEVOM1dURjEwUGFzc093blB0
cklOU18yM0luc3BlY3RvckZyb250ZW5kQ2xpZW50RUVFCi1fX1pON1dlYkNvcmUxNEluc3BlY3Rv
ckFnZW50MjZzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZ0V2Ci1fX1pON1dlYkNvcmUxNEluc3Bl
Y3RvckFnZW50MjdzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFdgogX19aTjdXZWJDb3JlMTVJ
bnNwZWN0b3JDbGllbnQzMWRvRGlzcGF0Y2hNZXNzYWdlT25Gcm9udGVuZFBhZ2VFUE5TXzRQYWdl
RVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJDb25z
b2xlUGFuZWxFCitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxM1Byb2ZpbGVzUGFu
ZWxFCitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNGVuYWJsZVByb2ZpbGVyRXYK
K19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1ZGVidWdnZXJFbmFibGVkRXYKK19f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1ZGlzYWJsZURlYnVnZ2VyRXYKK19fWk43
V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1ZGlzYWJsZVByb2ZpbGVyRXYKK19fWk43V2Vi
Q29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1cHJvZmlsZXJFbmFibGVkRXYKK19fWk43V2ViQ29y
ZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE4ZGlzY29ubmVjdEZyb250ZW5kRXYKK19fWk43V2ViQ29y
ZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIwc3RvcFRpbWVsaW5lUHJvZmlsZXJFdgorX19aTjdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjFzaG93QW5kRW5hYmxlRGVidWdnZXJFdgorX19aTjdX
ZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjFzdGFydFRpbWVsaW5lUHJvZmlsZXJFdgorX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjN0aW1lbGluZVByb2ZpbGVyRW5hYmxlZEV2
CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNWV2YWx1YXRlRm9yVGVzdEluRnJv
bnRlbmRFbFJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
MjZzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudEVOM1dURjEwUGFzc093blB0cklOU18yM0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50RUVFCitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIy
NnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjI3c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKK19fWk43V2ViQ29yZTE5SW5z
cGVjdG9yQ29udHJvbGxlcjRzaG93RXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjVjbG9zZUV2CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI5c2hvd1BhbmVsRVJL
TjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
MTJtb3ZlV2luZG93QnlFZmYKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDE0ZnJvbnRlbmRMb2FkZWRFdgogX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsMTVjYW5BdHRhY2hXaW5kb3dFdgpAQCAtMTQzMiw5ICsxNDM1LDggQEAgX19aTjdX
ZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMjZjaGFuZ2VBdHRhY2hlZFdpbmRv
d0hlaWdodEVqCiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyN3Jl
c3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodEV2CiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWxDMkVQTlNfMTlJbnNwZWN0b3JDb250cm9sbGVyRVBOU180UGFnZUVOM1dU
RjEwUGFzc093blB0cklOUzBfOFNldHRpbmdzRUVFCiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWxEMkV2Ci1fX1pOSzdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDE1cHJv
ZmlsZXJFbmFibGVkRXYKLV9fWk5LN1dlYkNvcmUxNEluc3BlY3RvckFnZW50MTdkcmF3Tm9kZUhp
Z2hsaWdodEVSTlNfMTVHcmFwaGljc0NvbnRleHRFCi1fX1pOSzdXZWJDb3JlMTRJbnNwZWN0b3JB
Z2VudDMxaXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZUV2CitfX1pOSzdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyMTdkcmF3Tm9kZUhpZ2hsaWdodEVSTlNfMTVHcmFwaGljc0NvbnRl
eHRFCitfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMzFpc1JlY29yZGluZ1VzZXJJ
bml0aWF0ZWRQcm9maWxlRXYKICNlbmRpZgogCiAjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJv
bnRlbmRIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEluc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKaW5kZXggOTRmYTg2ZS4uYThkOGQwYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9y
RnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiVjhJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKIAogI2luY2x1ZGUgIkluc3Bl
Y3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAppbmRleCAzNmMxZjVmLi4x
N2NlNjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCkBAIC02OSw3ICs2OSw3
IEBACiAjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRG
YWN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAg
LTI3NywxMSArMjc3LDcgQEAgdm9pZCBIVE1MRG9jdW1lbnQ6OnJlbGVhc2VFdmVudHMoKQogCiBQ
YXNzUmVmUHRyPERvY3VtZW50UGFyc2VyPiBIVE1MRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCiB7
Ci0gICAgYm9vbCByZXBvcnRFcnJvcnMgPSBmYWxzZTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgIGlmIChQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpKQotICAgICAgICByZXBvcnRFcnJvcnMg
PSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmhhc0Zyb250ZW5kKCk7Ci0jZW5kaWYKKyAg
ICBib29sIHJlcG9ydEVycm9ycyA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRl
bmQodGhpcy0+cGFnZSgpKTsKICAgICByZXR1cm4gSFRNTERvY3VtZW50UGFyc2VyOjpjcmVhdGUo
dGhpcywgcmVwb3J0RXJyb3JzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JBZ2VudC5jcHAKaW5kZXggZGFmMDU1ZC4uODMwODhjMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCkBAIC01Niw3ICs1Niw2IEBACiAjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVk
ZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50Lmgi
CkBAIC0xMjksMTkgKzEyOCwxMyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckFnZW50OjpFbGVtZW50c1Bh
bmVsID0gImVsZW1lbnRzIjsKLWNvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckFnZW50OjpDb25z
b2xlUGFuZWwgPSAiY29uc29sZSI7Ci1jb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JBZ2VudDo6
U2NyaXB0c1BhbmVsID0gInNjcmlwdHMiOwotY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQWdl
bnQ6OlByb2ZpbGVzUGFuZWwgPSAicHJvZmlsZXMiOwotCiBJbnNwZWN0b3JBZ2VudDo6SW5zcGVj
dG9yQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUGFnZSog
cGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX2luc3BlY3RvckNvbnRyb2xs
ZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAsIG1faW5zcGVjdGVkUGFnZShwYWdlKQogICAg
ICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9vcGVuaW5nRnJvbnRlbmQoZmFsc2UpCisgICAg
LCBtX2Zyb250ZW5kKDApCiAgICAgLCBtX2Nzc0FnZW50KG5ldyBJbnNwZWN0b3JDU1NBZ2VudCgp
KQogICAgICwgbV9zdGF0ZShuZXcgSW5zcGVjdG9yU3RhdGUoY2xpZW50KSkKLSAgICAsIG1faW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKHRo
aXMpKQogICAgICwgbV9pbmplY3RlZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVh
dGUodGhpcykpCiAgICAgLCBtX2NvbnNvbGVBZ2VudChuZXcgSW5zcGVjdG9yQ29uc29sZUFnZW50
KHRoaXMpKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtMTg0LDEzICsxNzcs
NiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKICAgICBt
X2NsaWVudCA9IDA7CiB9CiAKLWJvb2wgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZWQoKSBjb25zdAot
ewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIG1faW5zcGVjdGVkUGFnZS0+c2V0dGluZ3MoKS0+ZGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZCgpOwotfQotCiBib29sIEluc3BlY3RvckFnZW50OjpzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6
c2VhcmNoaW5nRm9yTm9kZSk7CkBAIC0yMDEsMTQgKzE4NywxNCBAQCB2b2lkIEluc3BlY3RvckFn
ZW50OjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVj
dG9yU3RhdAogICAgIG1fc3RhdGUtPnJlc3RvcmVGcm9tSW5zcGVjdG9yQ29va2llKGluc3BlY3Rv
clN0YXRlQ29va2llKTsKIAogICAgIGlmICghbV9mcm9udGVuZCkgewotICAgICAgICBjb25uZWN0
RnJvbnRlbmQoKTsKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5jb25uZWN0RnJvbnRl
bmQoKTsKICAgICAgICAgbV9mcm9udGVuZC0+ZnJvbnRlbmRSZXVzZWQoKTsKICAgICAgICAgbV9m
cm9udGVuZC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChpbnNwZWN0ZWRVUkwoKS5zdHJpbmcoKSk7CiAg
ICAgICAgIG1fZG9tQWdlbnQtPnNldERvY3VtZW50KG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1l
KCktPmRvY3VtZW50KCkpOwogICAgICAgICBwdXNoRGF0YUNvbGxlY3RlZE9mZmxpbmUoKTsKICAg
ICB9CiAKLSAgICBtX3Jlc291cmNlQWdlbnQgPSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXN0
b3JlKG1faW5zcGVjdGVkUGFnZSwgbV9zdGF0ZS5nZXQoKSwgbV9mcm9udGVuZC5nZXQoKSk7Cisg
ICAgbV9yZXNvdXJjZUFnZW50ID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzdG9yZShtX2lu
c3BlY3RlZFBhZ2UsIG1fc3RhdGUuZ2V0KCksIG1fZnJvbnRlbmQpOwogCiAgICAgaWYgKG1fc3Rh
dGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKSkK
ICAgICAgICAgc3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7CkBAIC0yMjMsMTEgKzIwOSw2IEBAIHZv
aWQgSW5zcGVjdG9yQWdlbnQ6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3Qg
U3RyaW5nJiBpbnNwZWN0b3JTdGF0CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3QoTm9k
ZSogbm9kZSkKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c2hvdygpOwotCiAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RF
ICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkKICAgICAgICAgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBtX25vZGVUb0ZvY3VzID0gbm9kZTsKQEAgLTMx
MSwyMiArMjkyLDggQEAgYm9vbCBJbnNwZWN0b3JBZ2VudDo6aGFuZGxlTW91c2VQcmVzcygpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEluc3BlY3RvckZy
b250ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCkK
LXsKLSAgICBBU1NFUlQoIW1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOwotICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQgPSBjbGllbnQ7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRp
ZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCog
d29ybGQpCit2b2lkIEluc3BlY3RvckFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQo
RnJhbWUqIGZyYW1lKQogewotICAgIGlmICh3b3JsZCAhPSBtYWluVGhyZWFkTm9ybWFsV29ybGQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIHBhZ2UgaXMgc3VwcG9zZWQgdG8g
c2VydmUgYXMgSW5zcGVjdG9yRnJvbnRlbmQgbm90aWZ5IGluc3BldG9yIGZyb250ZW5kCi0gICAg
Ly8gY2xpZW50IHRoYXQgaXQncyBjbGVhcmVkIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gZXhwb3Nl
IGluc3BlY3RvciBiaW5kaW5ncy4KLSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCAm
JiBmcmFtZSA9PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50LT53aW5kb3dPYmplY3RDbGVhcmVkKCk7Ci0KICAgICBpZiAoZW5h
YmxlZCgpKSB7CiAgICAgICAgIGlmIChtX2Zyb250ZW5kICYmIGZyYW1lID09IG1faW5zcGVjdGVk
UGFnZS0+bWFpbkZyYW1lKCkpCiAgICAgICAgICAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlz
Y2FyZEluamVjdGVkU2NyaXB0cygpOwpAQCAtMzM4LDggKzMwNSw2IEBAIHZvaWQgSW5zcGVjdG9y
QWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBw
ZXJXb3JsZCoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoIW1faW5z
cGVjdG9yRXh0ZW5zaW9uQVBJLmlzRW1wdHkoKSkKLSAgICAgICAgbV9pbmplY3RlZFNjcmlwdEhv
c3QtPmluamVjdFNjcmlwdChtX2luc3BlY3RvckV4dGVuc2lvbkFQSSwgbWFpbldvcmxkU2NyaXB0
U3RhdGUoZnJhbWUpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0U2VhcmNoaW5nRm9y
Tm9kZShib29sIGVuYWJsZWQpCkBAIC0zNTcsODAgKzMyMiwyMSBAQCB2b2lkIEluc3BlY3RvckFn
ZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpCiAg
ICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlbmFibGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6Y29ubmVjdEZyb250ZW5kKCkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEZyb250ZW5kKElu
c3BlY3RvckZyb250ZW5kKiBpbnNwZWN0b3JGcm9udGVuZCkKIHsKLSAgICBtX29wZW5pbmdGcm9u
dGVuZCA9IGZhbHNlOwogICAgIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7Ci0gICAg
bV9mcm9udGVuZCA9IG5ldyBJbnNwZWN0b3JGcm9udGVuZChtX2NsaWVudCk7Ci0gICAgbV9kb21B
Z2VudCA9IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0
KCksIG1fZnJvbnRlbmQuZ2V0KCkpOwotICAgIG1fcnVudGltZUFnZW50ID0gSW5zcGVjdG9yUnVu
dGltZUFnZW50OjpjcmVhdGUobV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCkpOwotICAgIG1fY3Nz
QWdlbnQtPnNldERPTUFnZW50KG1fZG9tQWdlbnQuZ2V0KCkpOworICAgIG1fZnJvbnRlbmQgPSBp
bnNwZWN0b3JGcm9udGVuZDsKKyAgICBjcmVhdGVGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7CiAK
LSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgbV9kYXRhYmFzZUFnZW50ID0gSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudDo6Y3JlYXRlKCZtX2RhdGFiYXNlUmVzb3VyY2VzLCBtX2Zyb250ZW5kLmdldCgp
KTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIG1fZG9tU3RvcmFnZUFn
ZW50ID0gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjcmVhdGUoJm1fZG9tU3RvcmFnZVJlc291
cmNlcywgbV9mcm9udGVuZC5nZXQoKSk7Ci0jZW5kaWYKKyAgICBtX2Nzc0FnZW50LT5zZXRET01B
Z2VudChtX2RvbUFnZW50LmdldCgpKTsKIAogICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCi0gICAg
ICAgIG1fdGltZWxpbmVBZ2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmQu
Z2V0KCkpOworICAgICAgICBtX3RpbWVsaW5lQWdlbnQtPnJlc2V0RnJvbnRlbmRQcm94eU9iamVj
dChtX2Zyb250ZW5kKTsKIAotICAgIG1fY29uc29sZUFnZW50LT5zZXRGcm9udGVuZChtX2Zyb250
ZW5kLmdldCgpKTsKKyAgICBtX2NvbnNvbGVBZ2VudC0+c2V0RnJvbnRlbmQobV9mcm9udGVuZCk7
CiAKICAgICAvLyBJbml0aWFsaXplIFdlYiBJbnNwZWN0b3IgdGl0bGUuCiAgICAgbV9mcm9udGVu
ZC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChpbnNwZWN0ZWRVUkwoKS5zdHJpbmcoKSk7Ci0KLSNpZiBF
TkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIG1fYXBwbGljYXRpb25DYWNoZUFn
ZW50ID0gbmV3IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCh0aGlzLCBtX2Zyb250ZW5k
LmdldCgpKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotICAgIG1fZmlsZVN5
c3RlbUFnZW50ID0gSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9u
dGVuZC5nZXQoKSk7Ci0jZW5kaWYKLQotICAgIGlmICghSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpoYXNGcm9udGVuZHMoKSkKLSAgICAgICAgU2NyaXB0Q29udHJvbGxlcjo6c2V0Q2FwdHVyZUNh
bGxTdGFja0ZvclVuY2F1Z2h0RXhjZXB0aW9ucyh0cnVlKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmZyb250ZW5kQ3JlYXRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckFnZW50Ojpz
aG93KCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fb3BlbmluZ0Zyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9mcm9udGVu
ZCkKLSAgICAgICAgbV9mcm9udGVuZC0+YnJpbmdUb0Zyb250KCk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIG1fb3BlbmluZ0Zyb250ZW5kID0gdHJ1ZTsKLSAgICAgICAgbV9jbGllbnQtPm9wZW5JbnNw
ZWN0b3JGcm9udGVuZChpbnNwZWN0b3JDb250cm9sbGVyKCkpOwotICAgIH0KLX0KLQotdm9pZCBJ
bnNwZWN0b3JBZ2VudDo6c2hvd1BhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWwpCi17Ci0gICAgaWYg
KCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNob3coKTsKLQotICAgIGlmICgh
bV9mcm9udGVuZCkgewotICAgICAgICBtX3Nob3dBZnRlclZpc2libGUgPSBwYW5lbDsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2Zyb250ZW5kLT5zaG93UGFuZWwocGFuZWwpOwotfQot
Ci12b2lkIEluc3BlY3RvckFnZW50OjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX2Zyb250ZW5kKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9mcm9udGVuZC0+ZGlzY29ubmVjdEZyb21CYWNrZW5kKCk7
Ci0gICAgZGlzY29ubmVjdEZyb250ZW5kKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRp
c2Nvbm5lY3RGcm9udGVuZCgpCkBAIC00MzgsMTEgKzM0NCw5IEBAIHZvaWQgSW5zcGVjdG9yQWdl
bnQ6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiAgICAgaWYgKCFtX2Zyb250ZW5kKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2Zyb250ZW5kLmNsZWFyKCk7CisgICAgbV9mcm9udGVuZCA9IDA7CiAK
LSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyb250ZW5kRGVsZXRlZCgpOwotICAgIGlm
ICghSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZHMoKSkKLSAgICAgICAgU2Ny
aXB0Q29udHJvbGxlcjo6c2V0Q2FwdHVyZUNhbGxTdGFja0ZvclVuY2F1Z2h0RXhjZXB0aW9ucyhm
YWxzZSk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNjb25uZWN0RnJvbnRlbmRJbXBs
KCk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAvLyBJZiB0aGUgd2lu
ZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBkZWJ1Z2dlciBlbmFibGVkLApAQCAtNDUyLDcg
KzM1Niw2IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiAjZW5k
aWYKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKICAgICB1bmJpbmRBbGxSZXNvdXJj
ZXMoKTsKLSAgICBzdG9wVGltZWxpbmVQcm9maWxlcigpOwogCiAgICAgaGlkZUhpZ2hsaWdodCgp
OwogCkBAIC00NjMsNyArMzY2LDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzY29ubmVjdEZy
b250ZW5kKCkKICAgICBtX2NvbnNvbGVBZ2VudC0+c2V0RnJvbnRlbmQoMCk7CiAKICAgICByZWxl
YXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwotICAgIG1fdGltZWxpbmVBZ2VudC5jbGVhcigp
OwogICAgIG1fZXh0cmFIZWFkZXJzLmNsZWFyKCk7CiAgICAgbV91c2VyQWdlbnRPdmVycmlkZSA9
ICIiOwogfQpAQCAtNDcxLDEwICszNzMsMzIgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzY29u
bmVjdEZyb250ZW5kKCkKIEluc3BlY3RvclJlc291cmNlQWdlbnQqIEluc3BlY3RvckFnZW50Ojpy
ZXNvdXJjZUFnZW50KCkKIHsKICAgICBpZiAoIW1fcmVzb3VyY2VBZ2VudCAmJiBtX2Zyb250ZW5k
KQotICAgICAgICBtX3Jlc291cmNlQWdlbnQgPSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpjcmVh
dGUobV9pbnNwZWN0ZWRQYWdlLCBtX3N0YXRlLmdldCgpLCBtX2Zyb250ZW5kLmdldCgpKTsKKyAg
ICAgICAgbV9yZXNvdXJjZUFnZW50ID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y3JlYXRlKG1f
aW5zcGVjdGVkUGFnZSwgbV9zdGF0ZS5nZXQoKSwgbV9mcm9udGVuZCk7CiAgICAgcmV0dXJuIG1f
cmVzb3VyY2VBZ2VudC5nZXQoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JBZ2VudDo6Y3JlYXRlRnJv
bnRlbmRMaWZldGltZUFnZW50cygpCit7CisgICAgbV9kb21BZ2VudCA9IEluc3BlY3RvckRPTUFn
ZW50OjpjcmVhdGUobV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCksIG1fZnJvbnRlbmQpOworICAg
IG1fcnVudGltZUFnZW50ID0gSW5zcGVjdG9yUnVudGltZUFnZW50OjpjcmVhdGUobV9pbmplY3Rl
ZFNjcmlwdEhvc3QuZ2V0KCkpOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIG1fZGF0YWJh
c2VBZ2VudCA9IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmNyZWF0ZSgmbV9kYXRhYmFzZVJlc291
cmNlcywgbV9mcm9udGVuZCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAg
ICBtX2RvbVN0b3JhZ2VBZ2VudCA9IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y3JlYXRlKCZt
X2RvbVN0b3JhZ2VSZXNvdXJjZXMsIG1fZnJvbnRlbmQpOworI2VuZGlmCisKKyNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIG1fYXBwbGljYXRpb25DYWNoZUFnZW50ID0g
bmV3IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCh0aGlzLCBtX2Zyb250ZW5kKTsKKyNl
bmRpZgorCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorICAgIG1fZmlsZVN5c3RlbUFnZW50ID0g
SW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZCk7CisjZW5k
aWYKK30KKwogdm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2Vu
dHMoKQogewogICAgIG1fcmVzb3VyY2VBZ2VudC5jbGVhcigpOwpAQCAtNTA4LDYgKzQzMiw3IEBA
IHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCkKICAg
ICAgICAgbV9maWxlU3lzdGVtQWdlbnQtPnN0b3AoKTsKICAgICAgICAgbV9maWxlU3lzdGVtQWdl
bnQuY2xlYXIoKTsKICNlbmRpZgorICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQWdlbnQ6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCkBAIC01MTYsMTEgKzQ0
MSw2IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCiAgICAg
aWYgKCFtX2Zyb250ZW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fc2hvd0FmdGVy
VmlzaWJsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgc2hvd1BhbmVsKG1fc2hvd0FmdGVyVmlzaWJs
ZSk7Ci0gICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9ICIiOwotICAgIH0KLQogI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIGlmIChtX3Byb2ZpbGVyQWdlbnQtPmVuYWJsZWQo
KSkKICAgICAgICAgbV9mcm9udGVuZC0+cHJvZmlsZXJXYXNFbmFibGVkKCk7CkBAIC01MzEsMTMg
KzQ1MSwxOCBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQog
ICAgIGlmIChtX25vZGVUb0ZvY3VzKQogICAgICAgICBmb2N1c05vZGUoKTsKIAorICAgIGlmICgh
bV9yZXF1aXJlZFBhbmVsKSB7CisgICAgICAgIG1fZnJvbnRlbmQtPnNob3dQYW5lbChtX3JlcXVp
cmVkUGFuZWwpOworICAgICAgICBtX3JlcXVpcmVkUGFuZWwgPSAiIjsKKyAgICB9CisKKyAgICBy
ZXN0b3JlRGVidWdnZXIodHJ1ZSk7CisgICAgcmVzdG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9y
ZU5vQWN0aW9uKTsKKwogICAgIC8vIERpc3BhdGNoIHBlbmRpbmcgZnJvbnRlbmQgY29tbWFuZHMK
ICAgICBmb3IgKFZlY3RvcjxwYWlyPGxvbmcsIFN0cmluZz4gPjo6aXRlcmF0b3IgaXQgPSBtX3Bl
bmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5iZWdpbigpOyBpdCAhPSBtX3BlbmRpbmdFdmFsdWF0
ZVRlc3RDb21tYW5kcy5lbmQoKTsgKytpdCkKICAgICAgICAgbV9mcm9udGVuZC0+ZXZhbHVhdGVG
b3JUZXN0SW5Gcm9udGVuZCgoKml0KS5maXJzdCwgKCppdCkuc2Vjb25kKTsKICAgICBtX3BlbmRp
bmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5jbGVhcigpOwotCi0gICAgcmVzdG9yZURlYnVnZ2VyKHRy
dWUpOwotICAgIHJlc3RvcmVQcm9maWxlcihQcm9maWxlclJlc3RvcmVOb0FjdGlvbik7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgpCkBAIC01NDcs
MTIgKzQ3MiwxMiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpwdXNoRGF0YUNvbGxlY3RlZE9mZmxp
bmUoKQogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRl
cmF0b3IgZGF0YWJhc2VzRW5kID0gbV9kYXRhYmFzZVJlc291cmNlcy5lbmQoKTsKICAgICBmb3Ig
KERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMu
YmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5i
aW5kKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRl
bmQpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgIERPTVN0b3JhZ2VSZXNv
dXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMu
ZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1f
ZG9tU3RvcmFnZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KQot
ICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgICAgICBpdC0+
c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmQpOwogI2VuZGlmCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpICYmIEVOQUJMRShXT1JLRVJTKQogICAgIFdvcmtlcnNNYXA6Oml0ZXJhdG9yIHdv
cmtlcnNFbmQgPSBtX3dvcmtlcnMuZW5kKCk7CkBAIC01NzYsNyArNTAxLDcgQEAgdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6cmVzdG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZUFjdGlvbiBhY3Rpb24p
CiB7CiAgICAgQVNTRVJUKG1fZnJvbnRlbmQpOwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQotICAgIG1fcHJvZmlsZXJBZ2VudC0+c2V0RnJvbnRlbmQobV9mcm9udGVuZC5nZXQoKSk7
CisgICAgbV9wcm9maWxlckFnZW50LT5zZXRGcm9udGVuZChtX2Zyb250ZW5kKTsKICAgICBpZiAo
bV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cHJvZmlsZXJFbmFibGVkKSkKICAg
ICAgICAgZW5hYmxlUHJvZmlsZXIoKTsKICAgICBpZiAoYWN0aW9uID09IFByb2ZpbGVyUmVzdG9y
ZVJlc2V0QWdlbnQpCkBAIC03MTgsNyArNjQzLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6c3Rh
cnRUaW1lbGluZVByb2ZpbGVyKCkKICAgICBpZiAobV90aW1lbGluZUFnZW50KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3RpbWVsaW5lQWdlbnQgPSBuZXcgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dChtX2Zyb250ZW5kLmdldCgpKTsKKyAgICBtX3RpbWVsaW5lQWdlbnQgPSBuZXcgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudChtX2Zyb250ZW5kKTsKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAg
bV9mcm9udGVuZC0+dGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQoKTsKIApAQCAtNzU4LDggKzY4
Myw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQpCiAgICAgewogICAgICAgICBpZiAoc2NyaXB0Q29u
dGV4dC0+aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvciA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0Q29udGV4dCktPnBhZ2UoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICAgICAgICAgIGluc3BlY3Rvci0+cG9zdFdv
cmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmQoKm1fd29ya2VyLCBtX2FjdGlvbik7CisgICAgICAg
ICAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihzY3JpcHRDb250ZXh0KS0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPm1f
aW5zcGVjdG9yQWdlbnQuZ2V0KCkpCisgICAgICAgICAgICAgICAgaW5zcGVjdG9yQWdlbnQtPnBv
c3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kKCptX3dvcmtlciwgbV9hY3Rpb24pOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC04MjEsNyArNzQ2LDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6
ZGlkT3BlbkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJp
bmcKIAogICAgIC8vIFJlc291cmNlcyBhcmUgb25seSBib3VuZCB3aGlsZSB2aXNpYmxlLgogICAg
IGlmIChtX2Zyb250ZW5kKQotICAgICAgICByZXNvdXJjZS0+YmluZChtX2Zyb250ZW5kLmdldCgp
KTsKKyAgICAgICAgcmVzb3VyY2UtPmJpbmQobV9mcm9udGVuZCk7CiB9CiAjZW5kaWYKIApAQCAt
OTI3LDcgKzg1Miw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2UoU3Rv
cmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYWxTdG9yCiAKICAgICAvLyBSZXNvdXJj
ZXMgYXJlIG9ubHkgYm91bmQgd2hpbGUgdmlzaWJsZS4KICAgICBpZiAobV9mcm9udGVuZCkKLSAg
ICAgICAgcmVzb3VyY2UtPmJpbmQobV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgIHJlc291cmNl
LT5iaW5kKG1fZnJvbnRlbmQpOwogfQogI2VuZGlmCiAKQEAgLTEwMTUsNyArOTQwLDcgQEAgdm9p
ZCBJbnNwZWN0b3JBZ2VudDo6c2hvd0FuZEVuYWJsZURlYnVnZ2VyKCkKIAogICAgIGlmICghbV9m
cm9udGVuZCkgewogICAgICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpk
ZWJ1Z2dlckVuYWJsZWQsIHRydWUpOwotICAgICAgICBzaG93UGFuZWwoU2NyaXB0c1BhbmVsKTsK
KyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zaG93UGFuZWwoSW5zcGVjdG9yQ29udHJv
bGxlcjo6U2NyaXB0c1BhbmVsKTsKICAgICB9IGVsc2UKICAgICAgICAgZW5hYmxlRGVidWdnZXIo
dHJ1ZSk7CiB9CkBAIC0xMDMyLDcgKzk1Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJs
ZURlYnVnZ2VyKGJvb2wgZXJhc2VTdGlja3lCcmVha3BvaW50cykKICAgICAgICAgbV9zdGF0ZS0+
c2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpicm93c2VyQnJlYWtwb2ludHMsIEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIAotICAgIG1fZGVidWdnZXJBZ2VudCA9IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSh0aGlzLCBtX2Zyb250ZW5kLmdldCgpKTsKKyAgICBtX2Rl
YnVnZ2VyQWdlbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9u
dGVuZCk7CiAgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudCA9IEluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50OjpjcmVhdGUodGhpcyk7CiAKICAgICBtX2Zyb250ZW5kLT5kZWJ1Z2dlcldhc0Vu
YWJsZWQoKTsKQEAgLTEwNTIsMTIgKzk3Nyw2IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Fi
bGVEZWJ1Z2dlcigpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpyZXN1bWUoKQot
ewotICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCi0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+cmVz
dW1lKCk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEFsbEJyb3dzZXJCcmVha3BvaW50
cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMpCiB7CiAgICAgbV9zdGF0
ZS0+c2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpicm93c2VyQnJlYWtwb2ludHMsIGJyZWFrcG9p
bnRzKTsKQEAgLTEzNTYsMTEgKzEyNzUsNiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpyZW1vdmVB
bGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpCiAgICAgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9h
ZC5jbGVhcigpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpzZXRJbnNwZWN0b3JFeHRlbnNp
b25BUEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpCi17Ci0gICAgbV9pbnNwZWN0b3JFeHRlbnNpb25B
UEkgPSBzb3VyY2U7Ci19Ci0KIEtVUkwgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RlZFVSTCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50
KCktPnVybCgpOwpAQCAtMTM5Miw2ICsxMzA2LDIwIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNl
dEV4dHJhSGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycykKICAgICB9
CiB9CiAKK2Jvb2wgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVy
biBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JB
Z2VudDo6c2hvd1BhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWwpCit7CisgICAgaWYgKCFtX2Zyb250
ZW5kKSB7CisgICAgICAgIG1fcmVxdWlyZWRQYW5lbCA9IHBhbmVsOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIG1fZnJvbnRlbmQtPnNob3dQYW5lbChwYW5lbCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IDQ3ZDA3MDAuLmYyNTQ4ODggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCkBAIC01Niw3ICs1Niw2
IEBAIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdDsKIGNsYXNzIElu
amVjdGVkU2NyaXB0SG9zdDsKIGNsYXNzIEluc3BlY3RvckFycmF5OwotY2xhc3MgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI7CiBjbGFzcyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDsK
IGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudDsKQEAg
LTEwOSwxNSArMTA4LDkgQEAgY2xhc3MgSW5zcGVjdG9yQWdlbnQgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEluc3BlY3RvckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ29uc29sZVBhbmVsOwotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBFbGVtZW50c1BhbmVsOwotICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBQcm9maWxlc1BhbmVsOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBTY3JpcHRzUGFuZWw7Ci0KICAgICBJbnNwZWN0b3JBZ2VudChJbnNwZWN0b3JDb250cm9sbGVy
KiwgUGFnZSosIEluc3BlY3RvckNsaWVudCopOwogICAgIHZpcnR1YWwgfkluc3BlY3RvckFnZW50
KCk7CiAKLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogaW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIoKSB7IHJldHVybiBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQoKSB7IHJldHVybiBtX2NsaWVu
dDsgfQogICAgIEluamVjdGVkU2NyaXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRIb3N0KCkgeyByZXR1
cm4gbV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCk7IH0KIApAQCAtMTI5LDI2ICsxMjIsMjIgQEAg
cHVibGljOgogICAgIEtVUkwgaW5zcGVjdGVkVVJMKCkgY29uc3Q7CiAgICAgS1VSTCBpbnNwZWN0
ZWRVUkxXaXRob3V0RnJhZ21lbnQoKSBjb25zdDsKICAgICB2b2lkIHJlbG9hZFBhZ2UoKTsKKyAg
ICB2b2lkIHNob3dQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsKTsKIAogICAgIHZvaWQgcmVzdG9y
ZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvckNvb2tpZSk7
CiAKLSAgICB2b2lkIGluc3BlY3QoTm9kZSopOwogICAgIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKTsK
ICAgICB2b2lkIGhpZGVIaWdobGlnaHQoKTsKKyAgICB2b2lkIGluc3BlY3QoTm9kZSopOwogICAg
IHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShsb25nIG5vZGVJZCk7CiAgICAgdm9pZCBoaWRlRE9NTm9k
ZUhpZ2hsaWdodCgpIHsgaGlkZUhpZ2hsaWdodCgpOyB9CiAKICAgICB2b2lkIGhpZ2hsaWdodEZy
YW1lKHVuc2lnbmVkIGxvbmcgZnJhbWVJZCk7CiAgICAgdm9pZCBoaWRlRnJhbWVIaWdobGlnaHQo
KSB7IGhpZGVIaWdobGlnaHQoKTsgfQogCi0gICAgdm9pZCBzaG93KCk7Ci0gICAgdm9pZCBzaG93
UGFuZWwoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgdm9pZCBjb25u
ZWN0RnJvbnRlbmQoKTsKLSAgICB2b2lkIHJldXNlRnJvbnRlbmQoKTsKKyAgICB2b2lkIHNldEZy
b250ZW5kKEluc3BlY3RvckZyb250ZW5kKik7CisgICAgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250
ZW5kKCkgY29uc3QgeyByZXR1cm4gbV9mcm9udGVuZDsgfQogICAgIHZvaWQgZGlzY29ubmVjdEZy
b250ZW5kKCk7Ci0gICAgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9mcm9udGVuZC5nZXQoKTsgfQogCiAgICAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVz
b3VyY2VBZ2VudCgpOwogCkBAIC0xNzgsMTUgKzE2NywxMSBAQCBwdWJsaWM6CiAgICAgSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSB7IHJldHVy
biBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudC5nZXQoKTsgfQogI2VuZGlmCiAKLQorICAgIGJvb2wg
aGFuZGxlTW91c2VQcmVzcygpOwogICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNv
bnN0OwogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3Vs
dCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwotICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygp
OwotCi0gICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50Pik7Ci0gICAgYm9vbCBoYXNJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7IH0KIAotICAgIHZv
aWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiwgRE9NV3JhcHBlcldvcmxkKik7
CisgICAgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqKTsKIAogICAgIHZv
aWQgZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciopOwogCkBAIC0yNDUsNyArMjMwLDYgQEAg
cHVibGljOgogICAgIHZvaWQgZW5hYmxlRGVidWdnZXIoYm9vbCBlcmFzZVN0aWNreUJyZWFrcG9p
bnRzKTsKICAgICB2b2lkIGRpc2FibGVEZWJ1Z2dlcigpOwogICAgIGJvb2wgZGVidWdnZXJFbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckFnZW50OyB9Ci0gICAgdm9pZCByZXN1bWUo
KTsKIAogICAgIHZvaWQgc2V0QWxsQnJvd3NlckJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0Pik7CiAjZW5kaWYKQEAgLTI1NSw3ICsyMzksNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5nJiBzb3VyY2UpOwogICAg
IHZvaWQgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKTsKLSAgICB2b2lkIHNldElu
c3BlY3RvckV4dGVuc2lvbkFQSShjb25zdCBTdHJpbmcmIHNvdXJjZSk7CiAKICAgICBJbnNwZWN0
b3JTdGF0ZSogc3RhdGUoKSB7IHJldHVybiBtX3N0YXRlLmdldCgpOyB9CiAKQEAgLTI4NSw2ICsy
NjgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJs
ZWQpOwogCiAgICAgdm9pZCByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOworICAgIHZv
aWQgY3JlYXRlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiAgICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCk7CkBAIC0yOTks
OSArMjgzLDcgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXI7CiAgICAgUGFnZSogbV9pbnNwZWN0ZWRQYWdlOwogICAgIEluc3BlY3RvckNs
aWVudCogbV9jbGllbnQ7Ci0gICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBtX2lu
c3BlY3RvckZyb250ZW5kQ2xpZW50OwotICAgIGJvb2wgbV9vcGVuaW5nRnJvbnRlbmQ7Ci0gICAg
T3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2Zyb250ZW5kOworICAgIEluc3BlY3RvckZyb250
ZW5kKiBtX2Zyb250ZW5kOwogICAgIE93blB0cjxJbnNwZWN0b3JDU1NBZ2VudD4gbV9jc3NBZ2Vu
dDsKICAgICBSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7CiAKQEAgLTMyNCw2
ICszMDYsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ+
IG1fZmlsZVN5c3RlbUFnZW50OwogI2VuZGlmCiAKKyAgICBSZWZQdHI8Tm9kZT4gbV9oaWdobGln
aHRlZE5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZVRvRm9jdXM7CiAgICAgUmVmUHRyPElu
c3BlY3RvclJlc291cmNlQWdlbnQ+IG1fcmVzb3VyY2VBZ2VudDsKICAgICBPd25QdHI8SW5zcGVj
dG9yUnVudGltZUFnZW50PiBtX3J1bnRpbWVBZ2VudDsKQEAgLTMzNywxMyArMzIwLDExIEBAIHBy
aXZhdGU6CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcCBtX2RvbVN0b3JhZ2VSZXNvdXJjZXM7
CiAjZW5kaWYKIAotICAgIFN0cmluZyBtX3Nob3dBZnRlclZpc2libGU7Ci0gICAgUmVmUHRyPE5v
ZGU+IG1faGlnaGxpZ2h0ZWROb2RlOwotICAgIE93blB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5qZWN0ZWRT
Y3JpcHRIb3N0PiBtX2luamVjdGVkU2NyaXB0SG9zdDsKICAgICBPd25QdHI8SW5zcGVjdG9yQ29u
c29sZUFnZW50PiBtX2NvbnNvbGVBZ2VudDsKIAogICAgIFZlY3RvcjxwYWlyPGxvbmcsIFN0cmlu
Zz4gPiBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kczsKKyAgICBTdHJpbmcgbV9yZXF1aXJl
ZFBhbmVsOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQ7CiAg
ICAgU3RyaW5nIG1faW5zcGVjdG9yRXh0ZW5zaW9uQVBJOwogI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCmluZGV4IGZiODQwOWUuLmJjMWMwZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTMzLDE3ICszMywyNTAgQEAK
IAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3Qu
aCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJ
WE1FOiB0ZW1wb3Jhcnkgc29sdXRpb24uIEl0IHdpbGwgYmVjb21lIGEgc2VwYXJhdGUgY2xhc3Mg
aW4gdGhlIG5leHQgcGF0Y2ggYW5kIENvbnRyb2xsZXIgcmVsYXRlZCBzdWJzZXQgb2YgZnVuY3Rp
b25zIHdpbGwgYmUgbW92ZWQgZnJvbSBJbnNwZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JDb250cm9s
ZXIuCitjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpFbGVtZW50c1BhbmVs
ID0gImVsZW1lbnRzIjsKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OkNv
bnNvbGVQYW5lbCA9ICJjb25zb2xlIjsKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRy
b2xsZXI6OlNjcmlwdHNQYW5lbCA9ICJzY3JpcHRzIjsKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3Bl
Y3RvckNvbnRyb2xsZXI6OlByb2ZpbGVzUGFuZWwgPSAicHJvZmlsZXMiOworCiBJbnNwZWN0b3JD
b250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVu
dCogaW5zcGVjdG9yQ2xpZW50KQotICAgIDogSW5zcGVjdG9yQWdlbnQodGhpcywgcGFnZSwgaW5z
cGVjdG9yQ2xpZW50KQorICAgIDogbV9pbnNwZWN0b3JBZ2VudChuZXcgSW5zcGVjdG9yQWdlbnQo
dGhpcywgcGFnZSwgaW5zcGVjdG9yQ2xpZW50KSkKKyAgICAsIG1faW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG1faW5zcGVjdG9yQWdlbnQu
Z2V0KCkpKQorICAgICwgbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCisgICAgLCBtX2luc3BlY3RvckNs
aWVudChpbnNwZWN0b3JDbGllbnQpCisgICAgLCBtX29wZW5pbmdGcm9udGVuZChmYWxzZSkKK3sK
K30KKworSW5zcGVjdG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNvbnRyb2xsZXIoKQoreworfQor
Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFBh
c3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGluc3BlY3RvckZyb250ZW5kQ2xpZW50
KQoreworICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgPSBpbnNwZWN0b3JGcm9udGVuZENs
aWVudDsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldv
cmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKK3sKKyAgICBpZiAod29y
bGQgIT0gbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
aW5zcGVjdG9yQWdlbnQtPmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChmcmFtZSk7CisKKyAg
ICBpZiAoIW1faW5zcGVjdG9yRXh0ZW5zaW9uQVBJLmlzRW1wdHkoKSkKKyAgICAgICAgbV9pbnNw
ZWN0b3JBZ2VudC0+aW5qZWN0ZWRTY3JpcHRIb3N0KCktPmluamVjdFNjcmlwdChtX2luc3BlY3Rv
ckV4dGVuc2lvbkFQSSwgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKKworICAgIC8vIElm
IHRoZSBwYWdlIGlzIHN1cHBvc2VkIHRvIHNlcnZlIGFzIEluc3BlY3RvckZyb250ZW5kIG5vdGlm
eSBpbnNwZWN0b3IgZnJvbnRlbmQKKyAgICAvLyBjbGllbnQgdGhhdCBpdCdzIGNsZWFyZWQgc28g
dGhhdCB0aGUgY2xpZW50IGNhbiBleHBvc2UgaW5zcGVjdG9yIGJpbmRpbmdzLgorICAgIGlmICht
X2luc3BlY3RvckZyb250ZW5kQ2xpZW50ICYmIGZyYW1lID09IG1faW5zcGVjdGVkUGFnZS0+bWFp
bkZyYW1lKCkpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQtPndpbmRvd09iamVj
dENsZWFyZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFRpbWVsaW5l
UHJvZmlsZXIoKQoreworICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXJ0VGltZWxpbmVQcm9maWxl
cigpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVy
KCkKK3sKKyAgICBtX2luc3BlY3RvckFnZW50LT5zdG9wVGltZWxpbmVQcm9maWxlcigpOworfQor
Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCgpCit7CisgICAgbV9v
cGVuaW5nRnJvbnRlbmQgPSBmYWxzZTsKKyAgICBtX2luc3BlY3RvckZyb250ZW5kID0gbmV3IElu
c3BlY3RvckZyb250ZW5kKG1faW5zcGVjdG9yQ2xpZW50KTsKKyAgICBtX2luc3BlY3RvckFnZW50
LT5zZXRGcm9udGVuZChtX2luc3BlY3RvckZyb250ZW5kLmdldCgpKTsKKworICAgIGlmICghSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZHMoKSkKKyAgICAgICAgU2NyaXB0Q29u
dHJvbGxlcjo6c2V0Q2FwdHVyZUNhbGxTdGFja0ZvclVuY2F1Z2h0RXhjZXB0aW9ucyh0cnVlKTsK
KyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyb250ZW5kQ3JlYXRlZCgpOworfQorCit2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCit7CisgICAgbV9p
bnNwZWN0b3JBZ2VudC0+ZGlzY29ubmVjdEZyb250ZW5kKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kSW1wbCgpCit7CisgICAgaWYgKCFtX2luc3Bl
Y3RvckZyb250ZW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvckZyb250ZW5k
LmNsZWFyKCk7CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyb250ZW5kRGVsZXRl
ZCgpOworICAgIGlmICghSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZHMoKSkK
KyAgICAgICAgU2NyaXB0Q29udHJvbGxlcjo6c2V0Q2FwdHVyZUNhbGxTdGFja0ZvclVuY2F1Z2h0
RXhjZXB0aW9ucyhmYWxzZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdygp
Cit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX29w
ZW5pbmdGcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW5zcGVjdG9yRnJv
bnRlbmQpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmQtPmJyaW5nVG9Gcm9udCgpOworICAg
IGVsc2UgeworICAgICAgICBtX29wZW5pbmdGcm9udGVuZCA9IHRydWU7CisgICAgICAgIG1faW5z
cGVjdG9yQ2xpZW50LT5vcGVuSW5zcGVjdG9yRnJvbnRlbmQodGhpcyk7CisgICAgfQorfQorCit2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNsb3NlKCkKIHsKKyAgICBpZiAoIW1faW5zcGVjdG9y
RnJvbnRlbmQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2luc3BlY3RvckZyb250ZW5kLT5kaXNj
b25uZWN0RnJvbUJhY2tlbmQoKTsKKyAgICBkaXNjb25uZWN0RnJvbnRlbmQoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNv
bnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdGVDb29raWUpCit7CisgICAgbV9pbnNwZWN0b3JBZ2Vu
dC0+cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShpbnNwZWN0b3JTdGF0ZUNvb2tpZSk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVu
ZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCit7CisgICAgbV9pbnNwZWN0b3JB
Z2VudC0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjYWxsSWQsIHNjcmlwdCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAoreworICAgIG1faW5zcGVjdG9yQWdlbnQtPmRyYXdOb2RlSGlnaGxp
Z2h0KGNvbnRleHQpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3QoTm9k
ZSogbm9kZSkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2hvdygpOworCisgICAgbV9pbnNwZWN0b3JBZ2VudC0+aW5zcGVjdChub2RlKTsKIH0KIAorYm9v
bCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW5z
cGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1faW5zcGVj
dGVkUGFnZS0+c2V0dGluZ3MoKS0+ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpOworfQorCit2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsKQorewor
ICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzaG93KCk7CisKKyAg
ICBtX2luc3BlY3RvckFnZW50LT5zaG93UGFuZWwocGFuZWwpOworfQorCitib29sIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gbV9p
bnNwZWN0b3JBZ2VudC0+dGltZWxpbmVBZ2VudCgpOworfQorCisjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2ZpbGVyKCkK
K3sKKyAgICBtX2luc3BlY3RvckFnZW50LT5lbmFibGVQcm9maWxlcigpOworfQorCit2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVQcm9maWxlcigpCit7CisgICAgbV9pbnNwZWN0b3JB
Z2VudC0+ZGlzYWJsZVByb2ZpbGVyKCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6
cHJvZmlsZXJFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JBZ2VudC0+cHJvZmls
ZXJFbmFibGVkKCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVidWdnZXJFbmFi
bGVkKCkKK3sKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JBZ2VudC0+ZGVidWdnZXJFbmFibGVkKCk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd0FuZEVuYWJsZURlYnVnZ2VyKCkK
K3sKKyAgICBtX2luc3BlY3RvckFnZW50LT5zaG93QW5kRW5hYmxlRGVidWdnZXIoKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIoKQoreworICAgIG1faW5z
cGVjdG9yQWdlbnQtPmRpc2FibGVEZWJ1Z2dlcigpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpCit7CisgICAgbV9pbnNwZWN0b3JB
Z2VudC0+c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQoreworICAgIG1faW5zcGVj
dG9yQWdlbnQtPnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7Cit9CisKK2Jvb2wgSW5zcGVj
dG9yQ29udHJvbGxlcjo6aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQtPmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFBy
b2ZpbGUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JFeHRl
bnNpb25BUEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpCit7CisgICAgbV9pbnNwZWN0b3JFeHRlbnNp
b25BUEkgPSBzb3VyY2U7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdW1lKCkK
K3sKKyAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IG1faW5z
cGVjdG9yQWdlbnQtPmRlYnVnZ2VyQWdlbnQoKSkKKyAgICAgICAgZGVidWdnZXJBZ2VudC0+cmVz
dW1lKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlkZUhpZ2hsaWdodCgpCit7
CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+aGlkZUhpZ2hsaWdodCgpOworfQorCit2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCit7CisgICAgbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci0+ZGlzcGF0Y2go
bWVzc2FnZSk7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjp1c2VyQWdlbnRPdmVy
cmlkZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQtPnVzZXJBZ2VudE92
ZXJyaWRlKCk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNDJlOTYxNS4uZmM0MmRlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0zMSwxNyArMzEsOTcg
QEAKICNpZm5kZWYgSW5zcGVjdG9yQ29udHJvbGxlcl9oCiAjZGVmaW5lIEluc3BlY3RvckNvbnRy
b2xsZXJfaAogCi0jaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIERPTVdyYXBwZXJXb3JsZDsKK2NsYXNzIEZyYW1lOworY2xhc3MgR3JhcGhpY3ND
b250ZXh0OworY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5k
OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBQYWdlOworY2xhc3MgUG9z
dFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOworY2xhc3MgTm9kZTsKIAotLy8gRklY
TUU6IHRlbXBvcmFyeSBzb2x1dGlvbi4gSXQgd2lsbCBiZWNvbWUgYSBzZXBhcmF0ZSBjbGFzcyBp
biB0aGUgbmV4dCBwYXRjaCBhbmQgY29udHJvbGxlciByZWxhdGVkIHN1YnNldCBvZiBmdW5jdGlv
bnMgd2lsbCBiZSBtb3ZlZCBmcm9tIEluc3BlY3RvckFnZW50IHRvIEluc3BlY3RvckNvbnRyb2xl
ci4KLWNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXIgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnQgewor
Y2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5z
cGVjdG9yQ29udHJvbGxlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENvbnNvbGVQYW5lbDsKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgRWxlbWVudHNQYW5lbDsKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgUHJvZmlsZXNQYW5lbDsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgU2NyaXB0
c1BhbmVsOworCiAgICAgSW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiwgSW5zcGVjdG9yQ2xpZW50
Kik7CisgICAgfkluc3BlY3RvckNvbnRyb2xsZXIoKTsKKworICAgIFBhZ2UqIGluc3BlY3RlZFBh
Z2UoKSB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KKworICAgIGJvb2wgZW5hYmxlZCgpIGNv
bnN0OworCisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBzaG93UGFuZWwoY29uc3QgU3RyaW5n
JiBwYW5lbCk7CisgICAgdm9pZCBjbG9zZSgpOworCisgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9u
dGVuZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50Pik7CisgICAgYm9v
bCBoYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpIGNvbnN0OworICAgIHZvaWQgZGlkQ2xlYXJX
aW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiwgRE9NV3JhcHBlcldvcmxkKik7CisgICAgdm9pZCBz
ZXRJbnNwZWN0b3JFeHRlbnNpb25BUEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpOworICAgIHZvaWQg
ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKKyAg
ICBib29sIGhhc0Zyb250ZW5kKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZDsg
fQorICAgIHZvaWQgY29ubmVjdEZyb250ZW5kKCk7CisgICAgdm9pZCBkaXNjb25uZWN0RnJvbnRl
bmQoKTsKKyAgICB2b2lkIHJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3QgU3Ry
aW5nJiBpbnNwZWN0b3JDb29raWUpOworCisgICAgdm9pZCBpbnNwZWN0KE5vZGUqKTsKKyAgICB2
b2lkIGRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIHZvaWQg
aGlkZUhpZ2hsaWdodCgpOworCisgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCk7CisKKyAgICB2b2lkIHN0YXJ0VGltZWxp
bmVQcm9maWxlcigpOworICAgIHZvaWQgc3RvcFRpbWVsaW5lUHJvZmlsZXIoKTsKKyAgICBib29s
IHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKCk7CisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKKyAgICBib29sIHByb2ZpbGVyRW5hYmxlZCgpOworICAgIHZvaWQgZW5hYmxlUHJvZmls
ZXIoKTsKKyAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOworICAgIGJvb2wg
aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpIGNvbnN0OworICAgIHZvaWQgc3RvcFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKKyAgICB2b2lkIGRpc2FibGVQcm9maWxlcigpOworICAg
IHZvaWQgc2hvd0FuZEVuYWJsZURlYnVnZ2VyKCk7CisgICAgYm9vbCBkZWJ1Z2dlckVuYWJsZWQo
KTsKKyAgICB2b2lkIGRpc2FibGVEZWJ1Z2dlcigpOworICAgIHZvaWQgcmVzdW1lKCk7CisjZW5k
aWYKKworICAgIFN0cmluZyB1c2VyQWdlbnRPdmVycmlkZSgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKKyAgICBmcmllbmQgY2xhc3MgUG9zdFdv
cmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOworCisgICAgdm9pZCBkaXNjb25uZWN0RnJv
bnRlbmRJbXBsKCk7IC8vIHVzZWQgYnkgSW5zcGVjdG9yQWdlbnQKKyAgICB2b2lkIGZyb250ZW5k
TG9hZGVkKCk7CisKKyAgICBPd25QdHI8SW5zcGVjdG9yQWdlbnQ+IG1faW5zcGVjdG9yQWdlbnQ7
CisgICAgT3duUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOworICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gbV9pbnNw
ZWN0b3JGcm9udGVuZENsaWVudDsKKyAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IG1faW5z
cGVjdG9yRnJvbnRlbmQ7CisgICAgUGFnZSogbV9pbnNwZWN0ZWRQYWdlOworICAgIEluc3BlY3Rv
ckNsaWVudCogbV9pbnNwZWN0b3JDbGllbnQ7CisgICAgYm9vbCBtX29wZW5pbmdGcm9udGVuZDsK
KworICAgIFN0cmluZyBtX2luc3BlY3RvckV4dGVuc2lvbkFQSTsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmNwcAppbmRleCBjZWNiYzc2Li44MzMwNTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCkBAIC0x
NjEsNyArMTYxLDcgQEAgdW5zaWduZWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29u
c3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZAogCiB2b2lkIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWw6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKIHsKLSAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKCktPmRpc3BhdGNoKG1lc3NhZ2UpOworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuY3BwCmluZGV4IDE3OTYyNTYuLmYyZTY2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCkBAIC0yMDEsOCArMjAx
LDggQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBm
bG9hdCB5KSBjb25zdAogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2V0RXh0ZW5zaW9u
QVBJKGNvbnN0IFN0cmluZyYgc2NyaXB0KQogewotICAgIEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3IgPSBtX2Zyb250ZW5kUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAgIGluc3BlY3Rv
ci0+c2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKHNjcmlwdCk7CisgICAgQVNTRVJUKG1fZnJvbnRl
bmRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpOworICAgIG1fZnJvbnRlbmRQYWdlLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvckV4dGVuc2lvbkFQSShzY3JpcHQpOwogfQog
CiBTdHJpbmcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5jcHAKaW5kZXggZGJiNDcyYS4uOTg5MTY0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTQyLDYgKzQyLDcg
QEAKICNpbmNsdWRlICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNv
bnNvbGVBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JQcm9maWxlckFnZW50LmgiCkBAIC04OCw3ICs4OSw3IEBA
IHN0YXRpYyBib29sIGV2ZW50SGFzTGlzdGVuZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBET01XaW5kb3cqIHdpbmRvdywKIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50LCBGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7Ci0gICAgaW5z
cGVjdG9yQWdlbnQtPmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChmcmFtZSwgd29ybGQpOwor
ICAgIGluc3BlY3RvckFnZW50LT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpZENsZWFyV2luZG93
T2JqZWN0SW5Xb3JsZChmcmFtZSwgd29ybGQpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50KQpAQCAtNTY1LDI0ICs1NjYsMTcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmFkZFByb2ZpbGVJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgUmUK
ICAgICB9CiB9CiAKLWJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwcm9maWxlckVuYWJs
ZWRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKLXsKLSAgICBpZiAoIWluc3Bl
Y3RvckFnZW50LT5lbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+cHJvZmls
ZXJBZ2VudCgpOwotICAgIGlmICghcHJvZmlsZXJBZ2VudCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIHByb2ZpbGVyQWdlbnQtPmVuYWJsZWQoKTsKLX0KLQogU3RyaW5nIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFt
ZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBib29sIGluY3JlbWVudFByb2Zp
bGVOdW1iZXIpCiB7CiAgICAgaWYgKEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdl
bnQgPSBpbnNwZWN0b3JBZ2VudC0+cHJvZmlsZXJBZ2VudCgpKQogICAgICAgICByZXR1cm4gcHJv
ZmlsZXJBZ2VudC0+Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShpbmNyZW1lbnRQ
cm9maWxlTnVtYmVyKTsKICAgICByZXR1cm4gIiI7CiB9CisKK2Jvb2wgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpwcm9maWxlckVuYWJsZWRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCkKK3sKKyAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnQtPnByb2ZpbGVyRW5hYmxlZCgpOwor
fQogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggMDJmNWQzZi4uOWJk
MjM1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaApAQCAtMTM5LDggKzEzOSw4IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKICAgICBzdGF0aWMgdm9pZCBhZGRTdGFydFByb2ZpbGluZ01lc3Nh
Z2VUb0NvbnNvbGUoUGFnZSosIGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICBzdGF0aWMgdm9pZCBhZGRQcm9maWxl
KFBhZ2UqLCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
Pik7Ci0gICAgc3RhdGljIGJvb2wgcHJvZmlsZXJFbmFibGVkKFBhZ2UqKTsKICAgICBzdGF0aWMg
U3RyaW5nIGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoUGFnZSosIGJvb2wgaW5j
cmVtZW50UHJvZmlsZU51bWJlcik7CisgICAgc3RhdGljIGJvb2wgcHJvZmlsZXJFbmFibGVkKFBh
Z2UqKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQpAQCAtMTc1LDggKzE3NSwxMCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZnJvbnRlbmRDcmVhdGVkKCkgeyBzX2Zyb250ZW5k
Q291bnRlciArPSAxOyB9CiAgICAgc3RhdGljIHZvaWQgZnJvbnRlbmREZWxldGVkKCkgeyBzX2Zy
b250ZW5kQ291bnRlciAtPSAxOyB9CiAgICAgc3RhdGljIGJvb2wgaGFzRnJvbnRlbmRzKCkgeyBy
ZXR1cm4gc19mcm9udGVuZENvdW50ZXI7IH0KKyAgICBzdGF0aWMgYm9vbCBoYXNGcm9udGVuZChQ
YWdlKik7CiAjZWxzZQogICAgIHN0YXRpYyBib29sIGhhc0Zyb250ZW5kcygpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgc3RhdGljIGJvb2wgaGFzRnJvbnRlbmQoUGFnZSopIHsgcmV0dXJuIGZhbHNl
OyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTI1MSw4ICsyNTMsOCBAQCBwcml2YXRlOgogI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIHN0YXRpYyB2b2lkIGFkZFN0YXJ0UHJv
ZmlsaW5nTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBjb25zdCBTdHJpbmcm
IHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAg
ICAgc3RhdGljIHZvaWQgYWRkUHJvZmlsZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBSZWZQdHI8U2Ny
aXB0UHJvZmlsZT4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7Ci0gICAgc3RhdGljIGJv
b2wgcHJvZmlsZXJFbmFibGVkSW1wbChJbnNwZWN0b3JBZ2VudCopOwogICAgIHN0YXRpYyBTdHJp
bmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZUltcGwoSW5zcGVjdG9yQWdlbnQq
LCBib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIpOworICAgIHN0YXRpYyBib29sIHByb2ZpbGVy
RW5hYmxlZEltcGwoSW5zcGVjdG9yQWdlbnQqKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQpAQCAtODIzLDYgKzgyNSwxNiBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMoRnJhbWUqIGZyYW1lKQogfQogI2Vu
ZGlmCiAKK2lubGluZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmQo
UGFnZSogcGFnZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIHJldHVybiBpbnNwZWN0
b3JBZ2VudFdpdGhGcm9udGVuZEZvclBhZ2UocGFnZSk7CisjZWxzZQorICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgorfQorCisKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogaW5saW5lIEluc3BlY3Rv
ckFnZW50KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RvckFnZW50Rm9yQ29udGV4
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKaW5kZXggNzFmNjI1Yy4uMzdmNWU4ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0yOTgwLDExICsyOTgwLDggQEAgdm9pZCBGcmFtZUxvYWRl
cjo6Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIFBhc3MKICAgICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0j
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRShJTlNQRUNUT1IpICYmIFVT
RShKU0MpCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKLSAgICAgICAg
aWYgKHBhZ2UtPm1haW5GcmFtZSgpID09IG1fZnJhbWUpCi0gICAgICAgICAgICBwYWdlLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPnJlc3VtZSgpOwotICAgIH0KKyNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikgJiYgVVNFKEpTQykKKyAgICBtX2ZyYW1lLT5wYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+cmVzdW1lKCk7CiAjZW5kaWYKIAogICAgIHNldFByb3Zpc2lvbmFsRG9jdW1l
bnRMb2FkZXIobV9wb2xpY3lEb2N1bWVudExvYWRlci5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDczZTE3OWYuLjllMWQ1NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDItMDIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgSW5zcGVjdG9yQ29udHJvbGxlcidzIG1ldGhvZHMg
ZnJvbSBJbnNwZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzE2OQorCisgICAgICAgIE1p
bm9yIGNoYW5nZSBlbmZvcmNlZCBieSBtYWpvciBjaGFuZ2VzIGluIFdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuCisKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudElt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlzcGF0Y2hP
bkluc3BlY3RvckJhY2tlbmQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorCiAyMDEx
LTAyLTA3ICBBbGV4ZXkgTWFyaW5pY2hldiAgPGFtYXJpbmljaGV2QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKaW5kZXggNWMwMzlmMS4u
MmY5M2QwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNBZ2VudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRv
b2xzQWdlbnRJbXBsLmNwcApAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OmRpZENsZWFyV2luZG93T2JqZWN0KFdlYkZyYW1lSW1wbCogd2ViZnJhbWUpCiAKIHZv
aWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpc3BhdGNoT25JbnNwZWN0b3JCYWNrZW5kKGNvbnN0
IFdlYlN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBpbnNwZWN0b3JDb250cm9sbGVyKCktPmluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKCktPmRpc3BhdGNoKG1lc3NhZ2UpOworICAgIGluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwogfQog
CiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjppbnNwZWN0RWxlbWVudEF0KGNvbnN0IFdlYlBv
aW50JiBwb2ludCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4
IGQxNjRhNDguLjc2NDBjZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaApAQCAtNTMsNiArNTMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDaHJv
bWl1bURhdGFPYmplY3Q7CitjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEZyYW1lOwogY2xh
c3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4
IGQ2ZTA5NDYuLmQyZGM0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAx
MS0wMi0wMiAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW92ZSBJbnNwZWN0b3JDb250cm9sbGVyJ3MgbWV0aG9kcyBmcm9tIEluc3BlY3RvckFnZW50IHRv
IEluc3BlY3RvckNvbnRyb2xsZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUzMTY5CisKKyAgICAgICAgTWlub3IgY2hhbmdlIGVuZm9yY2VkIGJ5
IG1ham9yIGNoYW5nZXMgaW4gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHA6CisgICAg
ICAgICogd2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5jcHA6CisgICAgICAgICh3ZWJraXRfd2Vi
X2luc3BlY3Rvcl9nZXRfcHJvcGVydHkpOgorCiAyMDExLTAyLTA3ICBFbnJpY2EgQ2FzdWNjaSAg
PGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgQWRhbSBSb2JlbiBhbmQgRGFy
aW4gQWRsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50R3RrLmNwcAppbmRleCBiZDZhMTk4Li42NmYzNzVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0
ay5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIndlYmtp
dHZlcnNpb24uaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJpbnNwZWN0b3IuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuY3BwIGIvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5jcHAKaW5kZXggZGY2M2M2My4u
OGI1YjVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmlu
c3BlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmluc3Bl
Y3Rvci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUg
IkludFBvaW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CkBAIC0zOTcsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1YKICNlbmRpZgogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFBST1BfVElNRUxJTkVfUFJPRklMSU5HX0VOQUJMRUQ6Ci0g
ICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPnBhZ2UtPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+dGltZWxpbmVBZ2VudCgpICE9IDApOworICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCBwcml2LT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnRpbWVsaW5l
UHJvZmlsZXJFbmFibGVkKCkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3Bl
Yyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYTc2OWQxZC4uZGQ3ODVlYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTAyLTAyICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xv
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIEluc3BlY3RvckNvbnRyb2xsZXIncyBtZXRob2Rz
IGZyb20gSW5zcGVjdG9yQWdlbnQgdG8gSW5zcGVjdG9yQ29udHJvbGxlci4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMxNjkKKworICAgICAgICBN
aW5vciBjaGFuZ2UgZW5mb3JjZWQgYnkgbWFqb3IgY2hhbmdlcyBpbiBXZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgICogV2ViSW5zcGVjdG9yL1dlYkluc3Bl
Y3Rvci5tbToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yIGlzVGltZWxpbmVQcm9maWxpbmdFbmFi
bGVkXSk6CisKIDIwMTEtMDItMDcgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBBZGFtIFJvYmVuIGFuZCBEYXJpbiBBZGxlci4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1tCmluZGV4IDhhYjA0OWYu
LmMwMDBmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkluc3BlY3Rvci9XZWJJ
bnNwZWN0b3IubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3Bl
Y3Rvci5tbQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogLSAo
Qk9PTClpc1RpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZAogewogICAgIGlmIChQYWdlKiBwYWdlID0g
Y29yZShfd2ViVmlldykpCi0gICAgICAgIHJldHVybiBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPnRpbWVsaW5lQWdlbnQoKSA/IFlFUyA6IE5POworICAgICAgICByZXR1cm4gcGFnZS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT50aW1lbGluZVByb2ZpbGVyRW5hYmxlZCgpID8gWUVTIDogTk87
CiAgICAgcmV0dXJuIE5POwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwCmluZGV4IDZhZWM1ZTIuLmYzNjRiMjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xp
ZW50UXQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50UXQu
aCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTZXJ2ZXJRdC5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JTZXJ2ZXJRdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNw
cAppbmRleCBiYWQyNmE0Li5mODNkZWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcApAQCAtMjAsNyArMjAsNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvclNlcnZlclF0LmgiCiAKLSNp
bmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckNsaWVudFF0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
Ik1ENS5oIgpAQCAtMzY0LDcgKzM2Myw3IEBAIHZvaWQgSW5zcGVjdG9yU2VydmVyUmVxdWVzdEhh
bmRsZXJRdDo6d2ViU29ja2V0UmVhZHlSZWFkKCkKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAg
ICAgICBpZiAobV9pbnNwZWN0b3JDbGllbnQpIHsKICAgICAgICAgICBJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gbV9pbnNwZWN0b3JDbGllbnQtPm1faW5zcGVjdGVk
V2ViUGFnZS0+ZC0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAgICAgICAgIGluc3Bl
Y3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKCktPmRpc3BhdGNoKFFT
dHJpbmc6OmZyb21VdGY4KHBheWxvYWQpKTsKKyAgICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVy
LT5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQoUVN0cmluZzo6ZnJvbVV0ZjgocGF5bG9hZCkp
OwogICAgICAgICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IGRhNjIzOTcuLmU3NTVl
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wMi0wMiAgSWx5YSBU
aWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBJbnNwZWN0b3JD
b250cm9sbGVyJ3MgbWV0aG9kcyBmcm9tIEluc3BlY3RvckFnZW50IHRvIEluc3BlY3RvckNvbnRy
b2xsZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUzMTY5CisKKyAgICAgICAgTWlub3IgY2hhbmdlIGVuZm9yY2VkIGJ5IG1ham9yIGNoYW5nZXMg
aW4gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci4KKworICAgICAgICAqIFdl
Ykluc3BlY3Rvci5jcHA6CisgICAgICAgIChXZWJJbnNwZWN0b3I6OmlzVGltZWxpbmVQcm9maWxp
bmdFbmFibGVkKToKKwogMjAxMS0wMi0wNyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIEFkYW0gUm9iZW4gYW5kIERhcmluIEFkbGVyLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJL
aXQvd2luL1dlYkluc3BlY3Rvci5jcHAKaW5kZXggYzM4MjNiMi4uNGU5NWZkMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJJbnNwZWN0b3IuY3BwCkBAIC0yNzcsNyArMjc3LDcgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJJbnNwZWN0b3I6OmlzVGltZWxpbmVQcm9maWxpbmdFbmFibGVkKEJPT0wq
IGlzRW5hYmwKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBTX09LOwogCi0gICAgKmlz
RW5hYmxlZCA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+dGltZWxpbmVBZ2VudCgpICE9
IDA7CisgICAgKmlzRW5hYmxlZCA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+dGltZWxp
bmVQcm9maWxlckVuYWJsZWQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81629</attachid>
            <date>2011-02-08 06:45:25 -0800</date>
            <delta_ts>2011-02-08 09:34:46 -0800</delta_ts>
            <desc>[patch] fourth version</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>53013</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1NjllOWIwLi5lOThlYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUg
QEAKKzIwMTEtMDItMDIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IG1vdmUgSW5zcGVjdG9yQ29udHJvbGxlcidzIG1ldGhvZHMgZnJvbSBJbnNwZWN0b3JB
Z2VudCB0byBJbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzE2OQorCisgICAgICAgIEFsbCB0aGUgSW5zcGVjdG9y
IEFQSSBmb3IgV2ViQ29yZSBoYXMgdHdvIHBhcnRzLgorICAgICAgICBUaGUgZmlyc3Qgb25lIGlz
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBmb3IgV2ViQ29yZS4KKyAgICAgICAgVGhlIHNlY29u
ZCBpcyBJbnNwZWN0b3JDb250cm9sbGVyIGZvciBXZWJLaXQuCisgICAgICAgIEluc3BlY3RvckFn
ZW50IHdhcyBwcm9kdWNlZCBieSByZW5hbWluZyBvcmlnaW5hbCBJbnNwZWN0b3JDb250cm9sbGVy
LgorICAgICAgICBUaGlzIHBhdGNoIGV4dHJhY3RzIFdlYktpdCByZWxhdGVkIG1ldGhvZHMgZnJv
bSBJbnNwZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgICogV2Vi
Q29yZS5leHAuaW46CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJv
bnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcik6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50OjpJbnNwZWN0b3JBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2Vu
dDo6fkluc3BlY3RvckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpy
ZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckFnZW50OjppbnNwZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpo
YW5kbGVNb3VzZVByZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRD
bGVhcldpbmRvd09iamVjdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaXNj
b25uZWN0RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJlc291
cmNlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmNyZWF0ZUZyb250
ZW5kTGlmZXRpbWVBZ2VudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJl
bGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQWdlbnQ6OnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JBZ2VudDo6cmVzdG9yZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckFnZW50OjpzdGFydFRpbWVsaW5lUHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UG9z
dFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGlkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRVc2VET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFnZW50OjpzaG93QW5kRW5hYmxlRGVidWdnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQWdlbnQ6OmVuYWJsZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50OjplbmFibGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpmcm9udGVuZCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNw
ZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0
SW5Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3
Tm9kZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpp
bnNwZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kTG9hZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnRpbWVsaW5lUHJvZmlsZXJFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2Zp
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVQcm9m
aWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlckVu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVidWdnZXJF
bmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dBbmRF
bmFibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpk
aXNhYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yRXh0
ZW5zaW9uQVBJKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3Vt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoaWRlSGlnaGxpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc3BhdGNoTWVzc2Fn
ZUZyb21Gcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omhhc0Zyb250ZW5kKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpzZW5kTWVzc2Fn
ZVRvQmFja2VuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNldEV4dGVuc2lv
bkFQSSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpwcm9maWxlckVuYWJsZWRJbXBsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Omhhc0Zyb250ZW5kKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2
aWdhdGlvblBvbGljeSk6CisKIDIwMTEtMDItMDggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3Nzky
NC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggYmQ0OWMxZi4uMDk2ODM0ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KQEAgLTE0MDQsMjMgKzE0MDQsMjYgQEAgX19aTjdXZWJDb3JlMjJHZW9sb2NhdGlv
blNlcnZpY2VNb2NrOHNldEVycm9yRU4zV1RGMTBQYXNzUmVmUHRySU5TXzEzUG9zaXRpb25FcnIK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9y
QWdlbnQ0c2hvd0V2Ci1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50NWNsb3NlRXYKLV9fWk43
V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQ5c2hvd1BhbmVsRVJLTjNXVEY2U3RyaW5nRQotX19aTjdX
ZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDEyQ29uc29sZVBhbmVsRQotX19aTjdXZWJDb3JlMTRJbnNw
ZWN0b3JBZ2VudDEzUHJvZmlsZXNQYW5lbEUKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQx
NGVuYWJsZVByb2ZpbGVyRXYKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQxNWRpc2FibGVE
ZWJ1Z2dlckV2Ci1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MTVkaXNhYmxlUHJvZmlsZXJF
dgotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDE4ZGlzY29ubmVjdEZyb250ZW5kRXYKLV9f
Wk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQyMHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKLV9fWk43
V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQyMXNob3dBbmRFbmFibGVEZWJ1Z2dlckV2Ci1fX1pON1dl
YkNvcmUxNEluc3BlY3RvckFnZW50MjFzdGFydFRpbWVsaW5lUHJvZmlsZXJFdgotX19aTjdXZWJD
b3JlMTRJbnNwZWN0b3JBZ2VudDI1ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZEVsUktOM1dURjZT
dHJpbmdFCi1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MjZzZXRJbnNwZWN0b3JGcm9udGVu
ZENsaWVudEVOM1dURjEwUGFzc093blB0cklOU18yM0luc3BlY3RvckZyb250ZW5kQ2xpZW50RUVF
Ci1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MjZzdG9wVXNlckluaXRpYXRlZFByb2ZpbGlu
Z0V2Ci1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MjdzdGFydFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmdFdgogX19aTjdXZWJDb3JlMTVJbnNwZWN0b3JDbGllbnQzMWRvRGlzcGF0Y2hNZXNzYWdl
T25Gcm9udGVuZFBhZ2VFUE5TXzRQYWdlRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyMTJDb25zb2xlUGFuZWxFCitfX1pON1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXIxM1Byb2ZpbGVzUGFuZWxFCitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRy
b2xsZXIxNGVuYWJsZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjE1ZGVidWdnZXJFbmFibGVkRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1
ZGlzYWJsZURlYnVnZ2VyRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1ZGlz
YWJsZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1cHJvZmls
ZXJFbmFibGVkRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE4ZGlzY29ubmVj
dEZyb250ZW5kRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIwc3RvcFRpbWVs
aW5lUHJvZmlsZXJFdgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjFzaG93QW5k
RW5hYmxlRGVidWdnZXJFdgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjFzdGFy
dFRpbWVsaW5lUHJvZmlsZXJFdgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjN0
aW1lbGluZVByb2ZpbGVyRW5hYmxlZEV2CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIyNWV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRFbFJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudEVOM1dU
RjEwUGFzc093blB0cklOU18yM0luc3BlY3RvckZyb250ZW5kQ2xpZW50RUVFCitfX1pON1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKK19f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI3c3RhcnRVc2VySW5pdGlhdGVkUHJvZmls
aW5nRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjRzaG93RXYKK19fWk43V2Vi
Q29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjVjbG9zZUV2CitfX1pON1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXI5c2hvd1BhbmVsRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjhJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTJtb3ZlV2luZG93QnlFZmYKIF9fWk43V2ViQ29yZTI4
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE0ZnJvbnRlbmRMb2FkZWRFdgogX19aTjdXZWJD
b3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTVjYW5BdHRhY2hXaW5kb3dFdgpAQCAt
MTQzMiw5ICsxNDM1LDggQEAgX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsMjZjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodEVqCiBfX1pON1dlYkNvcmUyOEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwyN3Jlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodEV2CiBfX1pO
N1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxDMkVQTlNfMTlJbnNwZWN0b3JD
b250cm9sbGVyRVBOU180UGFnZUVOM1dURjEwUGFzc093blB0cklOUzBfOFNldHRpbmdzRUVFCiBf
X1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxEMkV2Ci1fX1pOSzdXZWJD
b3JlMTRJbnNwZWN0b3JBZ2VudDE1cHJvZmlsZXJFbmFibGVkRXYKLV9fWk5LN1dlYkNvcmUxNElu
c3BlY3RvckFnZW50MTdkcmF3Tm9kZUhpZ2hsaWdodEVSTlNfMTVHcmFwaGljc0NvbnRleHRFCi1f
X1pOSzdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDMxaXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJv
ZmlsZUV2CitfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTdkcmF3Tm9kZUhpZ2hs
aWdodEVSTlNfMTVHcmFwaGljc0NvbnRleHRFCitfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250
cm9sbGVyMzFpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlRXYKICNlbmRpZgogCiAjaWYg
RU5BQkxFKEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAK
aW5kZXggOTRmYTg2ZS4uYThkOGQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0
b20uY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiVjhJbnNwZWN0b3JGcm9udGVuZEhv
c3QuaCIKIAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3Vt
ZW50LmNwcAppbmRleCAzNmMxZjVmLi4xN2NlNjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9j
dW1lbnQuY3BwCkBAIC02OSw3ICs2OSw3IEBACiAjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
Ci0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTI3NywxMSArMjc3LDcgQEAgdm9pZCBIVE1MRG9jdW1l
bnQ6OnJlbGVhc2VFdmVudHMoKQogCiBQYXNzUmVmUHRyPERvY3VtZW50UGFyc2VyPiBIVE1MRG9j
dW1lbnQ6OmNyZWF0ZVBhcnNlcigpCiB7Ci0gICAgYm9vbCByZXBvcnRFcnJvcnMgPSBmYWxzZTsK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgp
KQotICAgICAgICByZXBvcnRFcnJvcnMgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmhh
c0Zyb250ZW5kKCk7Ci0jZW5kaWYKKyAgICBib29sIHJlcG9ydEVycm9ycyA9IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmQodGhpcy0+cGFnZSgpKTsKICAgICByZXR1cm4gSFRN
TERvY3VtZW50UGFyc2VyOjpjcmVhdGUodGhpcywgcmVwb3J0RXJyb3JzKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggZWE0ZGMwZi4uNmY1
YzM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCkBA
IC01Niw3ICs1Niw2IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklu
amVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCi0jaW5jbHVk
ZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCkBAIC0xMzcsMTkgKzEzNiwxMyBAQCBzdGF0aWMgY29u
c3QgY2hhciBkZWJ1Z2dlckVuYWJsZWRbXSA9ICJkZWJ1Z2dlckVuYWJsZWQiOwogc3RhdGljIGNv
bnN0IGNoYXIgcHJvZmlsZXJFbmFibGVkW10gPSAicHJvZmlsZXJFbmFibGVkIjsKIH0KIAotY29u
c3QgY2hhciogY29uc3QgSW5zcGVjdG9yQWdlbnQ6OkVsZW1lbnRzUGFuZWwgPSAiZWxlbWVudHMi
OwotY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQWdlbnQ6OkNvbnNvbGVQYW5lbCA9ICJjb25z
b2xlIjsKLWNvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckFnZW50OjpTY3JpcHRzUGFuZWwgPSAi
c2NyaXB0cyI7Ci1jb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JBZ2VudDo6UHJvZmlsZXNQYW5l
bCA9ICJwcm9maWxlcyI7Ci0KIEluc3BlY3RvckFnZW50OjpJbnNwZWN0b3JBZ2VudChJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JD
bGllbnQqIGNsaWVudCkKICAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250
cm9sbGVyKQogICAgICwgbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCiAgICAgLCBtX2NsaWVudChjbGll
bnQpCi0gICAgLCBtX29wZW5pbmdGcm9udGVuZChmYWxzZSkKKyAgICAsIG1fZnJvbnRlbmQoMCkK
ICAgICAsIG1fY3NzQWdlbnQobmV3IEluc3BlY3RvckNTU0FnZW50KCkpCiAgICAgLCBtX3N0YXRl
KG5ldyBJbnNwZWN0b3JTdGF0ZShjbGllbnQpKQotICAgICwgbV9pbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcihuZXcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIodGhpcykpCiAgICAgLCBtX2lu
amVjdGVkU2NyaXB0SG9zdChJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKICAgICAs
IG1fY29uc29sZUFnZW50KG5ldyBJbnNwZWN0b3JDb25zb2xlQWdlbnQodGhpcykpCiAjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkBAIC0xOTIsMTMgKzE4NSw2IEBAIHZvaWQgSW5zcGVj
dG9yQWdlbnQ6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQogICAgIG1fY2xpZW50ID0gMDsKIH0K
IAotYm9vbCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2lu
c3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9pbnNwZWN0
ZWRQYWdlLT5zZXR0aW5ncygpLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7Ci19Ci0KIGJvb2wg
SW5zcGVjdG9yQWdlbnQ6OnNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25zdAogewogICAgIHJl
dHVybiBtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnNlYXJjaGluZ0Zv
ck5vZGUpOwpAQCAtMjA5LDE0ICsxOTUsMTQgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVzdG9y
ZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXQKICAg
ICBtX3N0YXRlLT5yZXN0b3JlRnJvbUluc3BlY3RvckNvb2tpZShpbnNwZWN0b3JTdGF0ZUNvb2tp
ZSk7CiAKICAgICBpZiAoIW1fZnJvbnRlbmQpIHsKLSAgICAgICAgY29ubmVjdEZyb250ZW5kKCk7
CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y29ubmVjdEZyb250ZW5kKCk7CiAgICAg
ICAgIG1fZnJvbnRlbmQtPmZyb250ZW5kUmV1c2VkKCk7CiAgICAgICAgIG1fZnJvbnRlbmQtPmlu
c3BlY3RlZFVSTENoYW5nZWQoaW5zcGVjdGVkVVJMKCkuc3RyaW5nKCkpOwogICAgICAgICBtX2Rv
bUFnZW50LT5zZXREb2N1bWVudChtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVu
dCgpKTsKICAgICAgICAgcHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKCk7CiAgICAgfQogCi0gICAg
bV9yZXNvdXJjZUFnZW50ID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzdG9yZShtX2luc3Bl
Y3RlZFBhZ2UsIG1fc3RhdGUuZ2V0KCksIG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIG1fcmVzb3Vy
Y2VBZ2VudCA9IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc3RvcmUobV9pbnNwZWN0ZWRQYWdl
LCBtX3N0YXRlLmdldCgpLCBtX2Zyb250ZW5kKTsKIAogICAgIGlmIChtX3N0YXRlLT5nZXRCb29s
ZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKSkKICAgICAg
ICAgc3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7CkBAIC0yMzEsMTEgKzIxNyw2IEBAIHZvaWQgSW5z
cGVjdG9yQWdlbnQ6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3QgU3RyaW5n
JiBpbnNwZWN0b3JTdGF0CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3QoTm9kZSogbm9k
ZSkKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2hvdygp
OwotCiAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIG5v
ZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkKICAgICAgICAgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKICAgICBtX25vZGVUb0ZvY3VzID0gbm9kZTsKQEAgLTMxOSwyMiAr
MzAwLDggQEAgYm9vbCBJbnNwZWN0b3JBZ2VudDo6aGFuZGxlTW91c2VQcmVzcygpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEluc3BlY3RvckZyb250ZW5k
Q2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCkKLXsKLSAg
ICBBU1NFUlQoIW1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOwotICAgIG1faW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQgPSBjbGllbnQ7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZENsZWFy
V2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQp
Cit2b2lkIEluc3BlY3RvckFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdChGcmFtZSogZnJhbWUp
CiB7Ci0gICAgaWYgKHdvcmxkICE9IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgcGFnZSBpcyBzdXBwb3NlZCB0byBzZXJ2ZSBhcyBJbnNw
ZWN0b3JGcm9udGVuZCBub3RpZnkgaW5zcGV0b3IgZnJvbnRlbmQKLSAgICAvLyBjbGllbnQgdGhh
dCBpdCdzIGNsZWFyZWQgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBleHBvc2UgaW5zcGVjdG9yIGJp
bmRpbmdzLgotICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50ICYmIGZyYW1lID09IG1f
aW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQtPndpbmRvd09iamVjdENsZWFyZWQoKTsKLQogICAgIGlmIChlbmFibGVkKCkpIHsKICAg
ICAgICAgaWYgKG1fZnJvbnRlbmQgJiYgZnJhbWUgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJh
bWUoKSkKICAgICAgICAgICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5kaXNjYXJkSW5qZWN0ZWRT
Y3JpcHRzKCk7CkBAIC0zNDYsOCArMzEzLDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkQ2xl
YXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkKgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGlmICghbV9pbnNwZWN0b3JFeHRlbnNp
b25BUEkuaXNFbXB0eSgpKQotICAgICAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+aW5qZWN0U2Ny
aXB0KG1faW5zcGVjdG9yRXh0ZW5zaW9uQVBJLCBtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkp
OwogfQogCiB2b2lkIEluc3BlY3RvckFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5h
YmxlZCkKQEAgLTM2NSw4MCArMzMwLDIxIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldFNlYXJj
aGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKICAgICBzZXRTZWFyY2hp
bmdGb3JOb2RlKGVuYWJsZWQpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50Ojpjb25uZWN0RnJv
bnRlbmQoKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRl
bmQqIGluc3BlY3RvckZyb250ZW5kKQogewotICAgIG1fb3BlbmluZ0Zyb250ZW5kID0gZmFsc2U7
CiAgICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKLSAgICBtX2Zyb250ZW5kID0g
bmV3IEluc3BlY3RvckZyb250ZW5kKG1fY2xpZW50KTsKLSAgICBtX2RvbUFnZW50ID0gSW5zcGVj
dG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSwgbV9mcm9udGVu
ZC5nZXQoKSk7Ci0gICAgbV9ydW50aW1lQWdlbnQgPSBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNy
ZWF0ZShtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSk7Ci0gICAgbV9jc3NBZ2VudC0+c2V0RE9N
QWdlbnQobV9kb21BZ2VudC5nZXQoKSk7CisgICAgbV9mcm9udGVuZCA9IGluc3BlY3RvckZyb250
ZW5kOworICAgIGNyZWF0ZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKIAotI2lmIEVOQUJMRShE
QVRBQkFTRSkKLSAgICBtX2RhdGFiYXNlQWdlbnQgPSBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojpj
cmVhdGUoJm1fZGF0YWJhc2VSZXNvdXJjZXMsIG1fZnJvbnRlbmQuZ2V0KCkpOwotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgbV9kb21TdG9yYWdlQWdlbnQgPSBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OmNyZWF0ZSgmbV9kb21TdG9yYWdlUmVzb3VyY2VzLCBtX2Zyb250
ZW5kLmdldCgpKTsKLSNlbmRpZgorICAgIG1fY3NzQWdlbnQtPnNldERPTUFnZW50KG1fZG9tQWdl
bnQuZ2V0KCkpOwogCiAgICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKLSAgICAgICAgbV90aW1lbGlu
ZUFnZW50LT5yZXNldEZyb250ZW5kUHJveHlPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7CisgICAg
ICAgIG1fdGltZWxpbmVBZ2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmQp
OwogCi0gICAgbV9jb25zb2xlQWdlbnQtPnNldEZyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCkpOwor
ICAgIG1fY29uc29sZUFnZW50LT5zZXRGcm9udGVuZChtX2Zyb250ZW5kKTsKIAogICAgIC8vIElu
aXRpYWxpemUgV2ViIEluc3BlY3RvciB0aXRsZS4KICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRV
UkxDaGFuZ2VkKGluc3BlY3RlZFVSTCgpLnN0cmluZygpKTsKLQotI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi0gICAgbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBuZXcgSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KHRoaXMsIG1fZnJvbnRlbmQuZ2V0KCkpOwotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0gICAgbV9maWxlU3lzdGVtQWdlbnQgPSBJ
bnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OmNyZWF0ZSh0aGlzLCBtX2Zyb250ZW5kLmdldCgpKTsK
LSNlbmRpZgotCi0gICAgaWYgKCFJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5k
cygpKQotICAgICAgICBTY3JpcHRDb250cm9sbGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9yVW5j
YXVnaHRFeGNlcHRpb25zKHRydWUpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJv
bnRlbmRDcmVhdGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNob3coKQotewotICAg
IGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9vcGVuaW5nRnJv
bnRlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICBt
X2Zyb250ZW5kLT5icmluZ1RvRnJvbnQoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9vcGVuaW5n
RnJvbnRlbmQgPSB0cnVlOwotICAgICAgICBtX2NsaWVudC0+b3Blbkluc3BlY3RvckZyb250ZW5k
KGluc3BlY3RvckNvbnRyb2xsZXIoKSk7Ci0gICAgfQotfQotCi12b2lkIEluc3BlY3RvckFnZW50
OjpzaG93UGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc2hvdygpOwotCi0gICAgaWYgKCFtX2Zyb250ZW5kKSB7
Ci0gICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IHBhbmVsOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIG1fZnJvbnRlbmQtPnNob3dQYW5lbChwYW5lbCk7Ci19Ci0KLXZvaWQgSW5zcGVj
dG9yQWdlbnQ6OmNsb3NlKCkKLXsKLSAgICBpZiAoIW1fZnJvbnRlbmQpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2Zyb250ZW5kLT5kaXNjb25uZWN0RnJvbUJhY2tlbmQoKTsKLSAgICBkaXNjb25u
ZWN0RnJvbnRlbmQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzY29ubmVjdEZyb250
ZW5kKCkKQEAgLTQ0NiwxMSArMzUyLDkgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzY29ubmVj
dEZyb250ZW5kKCkKICAgICBpZiAoIW1fZnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fZnJvbnRlbmQuY2xlYXIoKTsKKyAgICBtX2Zyb250ZW5kID0gMDsKIAotICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZnJvbnRlbmREZWxldGVkKCk7Ci0gICAgaWYgKCFJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kcygpKQotICAgICAgICBTY3JpcHRDb250cm9sbGVy
OjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRFeGNlcHRpb25zKGZhbHNlKTsKKyAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2Nvbm5lY3RGcm9udGVuZEltcGwoKTsKIAogI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIC8vIElmIHRoZSB3aW5kb3cgaXMgYmVpbmcg
Y2xvc2VkIHdpdGggdGhlIGRlYnVnZ2VyIGVuYWJsZWQsCkBAIC00NjAsNyArMzY0LDYgQEAgdm9p
ZCBJbnNwZWN0b3JBZ2VudDo6ZGlzY29ubmVjdEZyb250ZW5kKCkKICNlbmRpZgogICAgIHNldFNl
YXJjaGluZ0Zvck5vZGUoZmFsc2UpOwogICAgIHVuYmluZEFsbFJlc291cmNlcygpOwotICAgIHN0
b3BUaW1lbGluZVByb2ZpbGVyKCk7CiAKICAgICBoaWRlSGlnaGxpZ2h0KCk7CiAKQEAgLTQ3OCwx
MCArMzgxLDMyIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50KiBJbnNwZWN0b3JBZ2VudDo6cmVzb3VyY2VBZ2VudCgpCiB7
CiAgICAgaWYgKCFtX3Jlc291cmNlQWdlbnQgJiYgbV9mcm9udGVuZCkKLSAgICAgICAgbV9yZXNv
dXJjZUFnZW50ID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y3JlYXRlKG1faW5zcGVjdGVkUGFn
ZSwgbV9zdGF0ZS5nZXQoKSwgbV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgIG1fcmVzb3VyY2VB
Z2VudCA9IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmNyZWF0ZShtX2luc3BlY3RlZFBhZ2UsIG1f
c3RhdGUuZ2V0KCksIG1fZnJvbnRlbmQpOwogICAgIHJldHVybiBtX3Jlc291cmNlQWdlbnQuZ2V0
KCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmNyZWF0ZUZyb250ZW5kTGlmZXRpbWVBZ2Vu
dHMoKQoreworICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1faW5q
ZWN0ZWRTY3JpcHRIb3N0LmdldCgpLCBtX2Zyb250ZW5kKTsKKyAgICBtX3J1bnRpbWVBZ2VudCA9
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y3JlYXRlKG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgp
KTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBtX2RhdGFiYXNlQWdlbnQgPSBJbnNwZWN0
b3JEYXRhYmFzZUFnZW50OjpjcmVhdGUoJm1fZGF0YWJhc2VSZXNvdXJjZXMsIG1fZnJvbnRlbmQp
OworI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgbV9kb21TdG9yYWdlQWdl
bnQgPSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNyZWF0ZSgmbV9kb21TdG9yYWdlUmVzb3Vy
Y2VzLCBtX2Zyb250ZW5kKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKKyAgICBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCA9IG5ldyBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQodGhpcywgbV9mcm9udGVuZCk7CisjZW5kaWYKKworI2lmIEVOQUJM
RShGSUxFX1NZU1RFTSkKKyAgICBtX2ZpbGVTeXN0ZW1BZ2VudCA9IEluc3BlY3RvckZpbGVTeXN0
ZW1BZ2VudDo6Y3JlYXRlKHRoaXMsIG1fZnJvbnRlbmQpOworI2VuZGlmCit9CisKIHZvaWQgSW5z
cGVjdG9yQWdlbnQ6OnJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCkKIHsKICAgICBtX3Jl
c291cmNlQWdlbnQuY2xlYXIoKTsKQEAgLTUxNSw2ICs0NDAsNyBAQCB2b2lkIEluc3BlY3RvckFn
ZW50OjpyZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpCiAgICAgICAgIG1fZmlsZVN5c3Rl
bUFnZW50LT5zdG9wKCk7CiAgICAgICAgIG1fZmlsZVN5c3RlbUFnZW50LmNsZWFyKCk7CiAjZW5k
aWYKKyAgICBzdG9wVGltZWxpbmVQcm9maWxlcigpOwogfQogCiB2b2lkIEluc3BlY3RvckFnZW50
Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQpAQCAtNTIzLDExICs0NDksNiBAQCB2b2lkIEluc3Bl
Y3RvckFnZW50Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQogICAgIGlmICghbV9mcm9udGVuZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3Nob3dBZnRlclZpc2libGUuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIHNob3dQYW5lbChtX3Nob3dBZnRlclZpc2libGUpOwotICAgICAgICBtX3No
b3dBZnRlclZpc2libGUgPSAiIjsKLSAgICB9Ci0KICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKICAgICBpZiAobV9wcm9maWxlckFnZW50LT5lbmFibGVkKCkpCiAgICAgICAgIG1fZnJv
bnRlbmQtPnByb2ZpbGVyV2FzRW5hYmxlZCgpOwpAQCAtNTM4LDEzICs0NTksMTggQEAgdm9pZCBJ
bnNwZWN0b3JBZ2VudDo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKICAgICBpZiAobV9ub2RlVG9G
b2N1cykKICAgICAgICAgZm9jdXNOb2RlKCk7CiAKKyAgICBpZiAobV9yZXF1aXJlZFBhbmVsKSB7
CisgICAgICAgIG1fZnJvbnRlbmQtPnNob3dQYW5lbChtX3JlcXVpcmVkUGFuZWwpOworICAgICAg
ICBtX3JlcXVpcmVkUGFuZWwgPSAiIjsKKyAgICB9CisKKyAgICByZXN0b3JlRGVidWdnZXIodHJ1
ZSk7CisgICAgcmVzdG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZU5vQWN0aW9uKTsKKwogICAg
IC8vIERpc3BhdGNoIHBlbmRpbmcgZnJvbnRlbmQgY29tbWFuZHMKICAgICBmb3IgKFZlY3Rvcjxw
YWlyPGxvbmcsIFN0cmluZz4gPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RD
b21tYW5kcy5iZWdpbigpOyBpdCAhPSBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5lbmQo
KTsgKytpdCkKICAgICAgICAgbV9mcm9udGVuZC0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCgo
Kml0KS5maXJzdCwgKCppdCkuc2Vjb25kKTsKICAgICBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21t
YW5kcy5jbGVhcigpOwotCi0gICAgcmVzdG9yZURlYnVnZ2VyKHRydWUpOwotICAgIHJlc3RvcmVQ
cm9maWxlcihQcm9maWxlclJlc3RvcmVOb0FjdGlvbik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdl
bnQ6OnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgpCkBAIC01NTQsMTIgKzQ4MCwxMiBAQCB2b2lk
IEluc3BlY3RvckFnZW50OjpwdXNoRGF0YUNvbGxlY3RlZE9mZmxpbmUoKQogI2lmIEVOQUJMRShE
QVRBQkFTRSkKICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZGF0YWJhc2VzRW5k
ID0gbV9kYXRhYmFzZVJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2Vz
TWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZGF0
YWJhc2VzRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmQuZ2V0
KCkpOworICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmQpOwogI2VuZGlmCiAjaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9y
IGRvbVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChE
T01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fZG9tU3RvcmFnZVJlc291cmNl
cy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25k
LT5iaW5kKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJv
bnRlbmQpOwogI2VuZGlmCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJM
RShXT1JLRVJTKQogICAgIFdvcmtlcnNNYXA6Oml0ZXJhdG9yIHdvcmtlcnNFbmQgPSBtX3dvcmtl
cnMuZW5kKCk7CkBAIC01ODMsNyArNTA5LDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVzdG9y
ZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZUFjdGlvbiBhY3Rpb24pCiB7CiAgICAgQVNTRVJUKG1f
ZnJvbnRlbmQpOwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIG1fcHJvZmls
ZXJBZ2VudC0+c2V0RnJvbnRlbmQobV9mcm9udGVuZC5nZXQoKSk7CisgICAgbV9wcm9maWxlckFn
ZW50LT5zZXRGcm9udGVuZChtX2Zyb250ZW5kKTsKICAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVh
bihJbnNwZWN0b3JBZ2VudFN0YXRlOjpwcm9maWxlckVuYWJsZWQpKQogICAgICAgICBlbmFibGVQ
cm9maWxlcigpOwogICAgIGlmIChhY3Rpb24gPT0gUHJvZmlsZXJSZXN0b3JlUmVzZXRBZ2VudCkK
QEAgLTcwOCw3ICs2MzQsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpzdGFydFRpbWVsaW5lUHJv
ZmlsZXIoKQogICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fdGltZWxpbmVBZ2VudCA9IG5ldyBJbnNwZWN0b3JUaW1lbGluZUFnZW50KG1fZnJvbnRlbmQu
Z2V0KCkpOworICAgIG1fdGltZWxpbmVBZ2VudCA9IG5ldyBJbnNwZWN0b3JUaW1lbGluZUFnZW50
KG1fZnJvbnRlbmQpOwogICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT50
aW1lbGluZVByb2ZpbGVyV2FzU3RhcnRlZCgpOwogCkBAIC03NDgsOCArNjc0LDggQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0Q29udGV4dCkKICAgICB7CiAgICAgICAgIGlmIChzY3JpcHRDb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yID0gc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRDb250ZXh0KS0+cGFnZSgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkpCi0gICAgICAgICAgICAgICAgaW5zcGVjdG9yLT5wb3N0V29ya2VyTm90aWZpY2F0
aW9uVG9Gcm9udGVuZCgqbV93b3JrZXIsIG1fYWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChJbnNw
ZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlw
dENvbnRleHQpLT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+bV9pbnNwZWN0b3JBZ2Vu
dC5nZXQoKSkKKyAgICAgICAgICAgICAgICBpbnNwZWN0b3JBZ2VudC0+cG9zdFdvcmtlck5vdGlm
aWNhdGlvblRvRnJvbnRlbmQoKm1fd29ya2VyLCBtX2FjdGlvbik7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTgxMSw3ICs3MzcsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpkaWRPcGVuRGF0YWJh
c2UoUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZwogCiAgICAgLy8g
UmVzb3VyY2VzIGFyZSBvbmx5IGJvdW5kIHdoaWxlIHZpc2libGUuCiAgICAgaWYgKG1fZnJvbnRl
bmQpCi0gICAgICAgIHJlc291cmNlLT5iaW5kKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgICAgICBy
ZXNvdXJjZS0+YmluZChtX2Zyb250ZW5kKTsKIH0KICNlbmRpZgogCkBAIC05MTcsNyArODQzLDcg
QEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJlYSogc3Rv
cmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3IKIAogICAgIC8vIFJlc291cmNlcyBhcmUgb25seSBi
b3VuZCB3aGlsZSB2aXNpYmxlLgogICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICByZXNvdXJj
ZS0+YmluZChtX2Zyb250ZW5kLmdldCgpKTsKKyAgICAgICAgcmVzb3VyY2UtPmJpbmQobV9mcm9u
dGVuZCk7CiB9CiAjZW5kaWYKIApAQCAtMTAwNSw3ICs5MzEsNyBAQCB2b2lkIEluc3BlY3RvckFn
ZW50OjpzaG93QW5kRW5hYmxlRGVidWdnZXIoKQogCiAgICAgaWYgKCFtX2Zyb250ZW5kKSB7CiAg
ICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6ZGVidWdnZXJF
bmFibGVkLCB0cnVlKTsKLSAgICAgICAgc2hvd1BhbmVsKFNjcmlwdHNQYW5lbCk7CisgICAgICAg
IHNob3dQYW5lbChJbnNwZWN0b3JDb250cm9sbGVyOjpTY3JpcHRzUGFuZWwpOwogICAgIH0gZWxz
ZQogICAgICAgICBlbmFibGVEZWJ1Z2dlcih0cnVlKTsKIH0KQEAgLTEwMTcsNyArOTQzLDcgQEAg
dm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlRGVidWdnZXIoYm9vbCBlcmFzZVN0aWNreUJyZWFr
cG9pbnRzKQogICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6ZGVi
dWdnZXJFbmFibGVkLCB0cnVlKTsKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIAotICAg
IG1fZGVidWdnZXJBZ2VudCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSh0aGlzLCBt
X2Zyb250ZW5kLmdldCgpLCBlcmFzZVN0aWNreUJyZWFrcG9pbnRzKTsKKyAgICBtX2RlYnVnZ2Vy
QWdlbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZCwg
ZXJhc2VTdGlja3lCcmVha3BvaW50cyk7CiAgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudCA9IElu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpjcmVhdGUodGhpcywgZXJhc2VTdGlja3lCcmVh
a3BvaW50cyk7CiAKICAgICBtX2Zyb250ZW5kLT5kZWJ1Z2dlcldhc0VuYWJsZWQoKTsKQEAgLTEz
MzYsMTEgKzEyNjIsNiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpyZW1vdmVBbGxTY3JpcHRzVG9F
dmFsdWF0ZU9uTG9hZCgpCiAgICAgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5jbGVhcigpOwog
fQogCi12b2lkIEluc3BlY3RvckFnZW50OjpzZXRJbnNwZWN0b3JFeHRlbnNpb25BUEkoY29uc3Qg
U3RyaW5nJiBzb3VyY2UpCi17Ci0gICAgbV9pbnNwZWN0b3JFeHRlbnNpb25BUEkgPSBzb3VyY2U7
Ci19Ci0KIEtVUkwgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RlZFVSTCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpOwpA
QCAtMTM1OCw2ICsxMjc5LDIwIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnJlbG9hZFBhZ2UoYm9v
bCBpZ25vcmVDYWNoZSkKICAgICBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIo
KS0+cmVsb2FkKGlnbm9yZUNhY2hlKTsKIH0KIAorYm9vbCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5hYmxlZCgp
OworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpzaG93UGFuZWwoY29uc3QgU3RyaW5nJiBwYW5l
bCkKK3sKKyAgICBpZiAoIW1fZnJvbnRlbmQpIHsKKyAgICAgICAgbV9yZXF1aXJlZFBhbmVsID0g
cGFuZWw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9mcm9udGVuZC0+c2hvd1BhbmVs
KHBhbmVsKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKaW5k
ZXggMjkxMTZjYS4uMTA1YTkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckFnZW50LmgKQEAgLTU2LDcgKzU2LDYgQEAgY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIElu
amVjdGVkU2NyaXB0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0OwogY2xhc3MgSW5zcGVjdG9y
QXJyYXk7Ci1jbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKIGNsYXNzIEluc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5z
cGVjdG9yQ29uc29sZUFnZW50OwpAQCAtMTA5LDE1ICsxMDgsOSBAQCBjbGFzcyBJbnNwZWN0b3JB
Z2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQWdlbnQpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBDb25zb2xlUGFuZWw7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IEVsZW1lbnRz
UGFuZWw7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFByb2ZpbGVzUGFuZWw7Ci0gICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFNjcmlwdHNQYW5lbDsKLQogICAgIEluc3BlY3RvckFn
ZW50KEluc3BlY3RvckNvbnRyb2xsZXIqLCBQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7CiAgICAg
dmlydHVhbCB+SW5zcGVjdG9yQWdlbnQoKTsKIAotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiBpbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcigpIHsgcmV0dXJuIG1faW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KICAgICBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNs
aWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmpl
Y3RlZFNjcmlwdEhvc3QoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKTsgfQog
CkBAIC0xMjksMjYgKzEyMiwyMiBAQCBwdWJsaWM6CiAgICAgS1VSTCBpbnNwZWN0ZWRVUkwoKSBj
b25zdDsKICAgICBLVVJMIGluc3BlY3RlZFVSTFdpdGhvdXRGcmFnbWVudCgpIGNvbnN0OwogICAg
IHZvaWQgcmVsb2FkUGFnZShib29sIGlnbm9yZUNhY2hlKTsKKyAgICB2b2lkIHNob3dQYW5lbChj
b25zdCBTdHJpbmcmIHBhbmVsKTsKIAogICAgIHZvaWQgcmVzdG9yZUluc3BlY3RvclN0YXRlRnJv
bUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvckNvb2tpZSk7CiAKLSAgICB2b2lkIGluc3Bl
Y3QoTm9kZSopOwogICAgIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKTsKICAgICB2b2lkIGhpZGVIaWdo
bGlnaHQoKTsKKyAgICB2b2lkIGluc3BlY3QoTm9kZSopOwogICAgIHZvaWQgaGlnaGxpZ2h0RE9N
Tm9kZShsb25nIG5vZGVJZCk7CiAgICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpIHsgaGlk
ZUhpZ2hsaWdodCgpOyB9CiAKICAgICB2b2lkIGhpZ2hsaWdodEZyYW1lKHVuc2lnbmVkIGxvbmcg
ZnJhbWVJZCk7CiAgICAgdm9pZCBoaWRlRnJhbWVIaWdobGlnaHQoKSB7IGhpZGVIaWdobGlnaHQo
KTsgfQogCi0gICAgdm9pZCBzaG93KCk7Ci0gICAgdm9pZCBzaG93UGFuZWwoY29uc3QgU3RyaW5n
Jik7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgdm9pZCBjb25uZWN0RnJvbnRlbmQoKTsKLSAg
ICB2b2lkIHJldXNlRnJvbnRlbmQoKTsKKyAgICB2b2lkIHNldEZyb250ZW5kKEluc3BlY3RvckZy
b250ZW5kKik7CisgICAgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9mcm9udGVuZDsgfQogICAgIHZvaWQgZGlzY29ubmVjdEZyb250ZW5kKCk7Ci0gICAgSW5z
cGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKCkgY29uc3QgeyByZXR1cm4gbV9mcm9udGVuZC5nZXQo
KTsgfQogCiAgICAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCgpOwogCkBA
IC0xNzgsMjAgKzE2NywxNCBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSB7IHJldHVybiBtX2FwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5nZXQoKTsgfQogI2VuZGlmCiAKLQorICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygp
OwogICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0OwogICAgIHZvaWQgbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlm
aWVyRmxhZ3MpOwotICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygpOwotCi0gICAgdm9pZCBzZXRJ
bnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50
Pik7Ci0gICAgYm9vbCBoYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7IH0KIAotICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dP
YmplY3RJbldvcmxkKEZyYW1lKiwgRE9NV3JhcHBlcldvcmxkKik7CisgICAgdm9pZCBkaWRDbGVh
cldpbmRvd09iamVjdChGcmFtZSopOwogCiAgICAgdm9pZCBkaWRDb21taXRMb2FkKERvY3VtZW50
TG9hZGVyKik7CiAKLSAgICB2b2lkIHNldEV4dHJhSGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4pOwotCiAgICAgdm9pZCBzdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKICAgICB2b2lk
IHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CiAKQEAgLTI1Myw3ICsyMzYsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5nJiBzb3VyY2Up
OwogICAgIHZvaWQgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKTsKLSAgICB2b2lk
IHNldEluc3BlY3RvckV4dGVuc2lvbkFQSShjb25zdCBTdHJpbmcmIHNvdXJjZSk7CiAKICAgICBJ
bnNwZWN0b3JTdGF0ZSogc3RhdGUoKSB7IHJldHVybiBtX3N0YXRlLmdldCgpOyB9CiAKQEAgLTI4
MCw2ICsyNjIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29s
IGVuYWJsZWQpOwogCiAgICAgdm9pZCByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwor
ICAgIHZvaWQgY3JlYXRlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwogCiAjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCk7CkBA
IC0yOTQsOSArMjc3LDcgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2lu
c3BlY3RvckNvbnRyb2xsZXI7CiAgICAgUGFnZSogbV9pbnNwZWN0ZWRQYWdlOwogICAgIEluc3Bl
Y3RvckNsaWVudCogbV9jbGllbnQ7Ci0gICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50
PiBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50OwotICAgIGJvb2wgbV9vcGVuaW5nRnJvbnRlbmQ7
Ci0gICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2Zyb250ZW5kOworICAgIEluc3BlY3Rv
ckZyb250ZW5kKiBtX2Zyb250ZW5kOwogICAgIE93blB0cjxJbnNwZWN0b3JDU1NBZ2VudD4gbV9j
c3NBZ2VudDsKICAgICBSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7CiAKQEAg
LTMxOSw2ICszMDAsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3JGaWxlU3lzdGVt
QWdlbnQ+IG1fZmlsZVN5c3RlbUFnZW50OwogI2VuZGlmCiAKKyAgICBSZWZQdHI8Tm9kZT4gbV9o
aWdobGlnaHRlZE5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZVRvRm9jdXM7CiAgICAgUmVm
UHRyPEluc3BlY3RvclJlc291cmNlQWdlbnQ+IG1fcmVzb3VyY2VBZ2VudDsKICAgICBPd25QdHI8
SW5zcGVjdG9yUnVudGltZUFnZW50PiBtX3J1bnRpbWVBZ2VudDsKQEAgLTMzMiwxMyArMzE0LDEx
IEBAIHByaXZhdGU6CiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcCBtX2RvbVN0b3JhZ2VSZXNv
dXJjZXM7CiAjZW5kaWYKIAotICAgIFN0cmluZyBtX3Nob3dBZnRlclZpc2libGU7Ci0gICAgUmVm
UHRyPE5vZGU+IG1faGlnaGxpZ2h0ZWROb2RlOwotICAgIE93blB0cjxJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5q
ZWN0ZWRTY3JpcHRIb3N0PiBtX2luamVjdGVkU2NyaXB0SG9zdDsKICAgICBPd25QdHI8SW5zcGVj
dG9yQ29uc29sZUFnZW50PiBtX2NvbnNvbGVBZ2VudDsKIAogICAgIFZlY3RvcjxwYWlyPGxvbmcs
IFN0cmluZz4gPiBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kczsKKyAgICBTdHJpbmcgbV9y
ZXF1aXJlZFBhbmVsOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxv
YWQ7CiAgICAgU3RyaW5nIG1faW5zcGVjdG9yRXh0ZW5zaW9uQVBJOwogI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCmluZGV4IGZiODQwOWUuLjNlMDliMTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTMzLDE3ICszMywy
NDUgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5o
IgorI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRP
YmplY3QuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LS8vIEZJWE1FOiB0ZW1wb3Jhcnkgc29sdXRpb24uIEl0IHdpbGwgYmVjb21lIGEgc2VwYXJhdGUg
Y2xhc3MgaW4gdGhlIG5leHQgcGF0Y2ggYW5kIENvbnRyb2xsZXIgcmVsYXRlZCBzdWJzZXQgb2Yg
ZnVuY3Rpb25zIHdpbGwgYmUgbW92ZWQgZnJvbSBJbnNwZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JD
b250cm9sZXIuCitjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpFbGVtZW50
c1BhbmVsID0gImVsZW1lbnRzIjsKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xs
ZXI6OkNvbnNvbGVQYW5lbCA9ICJjb25zb2xlIjsKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3Rv
ckNvbnRyb2xsZXI6OlNjcmlwdHNQYW5lbCA9ICJzY3JpcHRzIjsKK2NvbnN0IGNoYXIqIGNvbnN0
IEluc3BlY3RvckNvbnRyb2xsZXI6OlByb2ZpbGVzUGFuZWwgPSAicHJvZmlsZXMiOworCiBJbnNw
ZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3Rv
ckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KQotICAgIDogSW5zcGVjdG9yQWdlbnQodGhpcywgcGFn
ZSwgaW5zcGVjdG9yQ2xpZW50KQorICAgIDogbV9pbnNwZWN0b3JBZ2VudChuZXcgSW5zcGVjdG9y
QWdlbnQodGhpcywgcGFnZSwgaW5zcGVjdG9yQ2xpZW50KSkKKyAgICAsIG1faW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG1faW5zcGVjdG9y
QWdlbnQuZ2V0KCkpKQorICAgICwgbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCisgICAgLCBtX2luc3Bl
Y3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCisgICAgLCBtX29wZW5pbmdGcm9udGVuZChmYWxz
ZSkKK3sKK30KKworSW5zcGVjdG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNvbnRyb2xsZXIoKQor
eworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGluc3BlY3RvckZyb250ZW5k
Q2xpZW50KQoreworICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgPSBpbnNwZWN0b3JGcm9u
dGVuZENsaWVudDsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNwZWN0b3JG
cm9udGVuZENsaWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ2xlYXJXaW5kb3dPYmpl
Y3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKK3sKKyAgICBp
ZiAod29ybGQgIT0gbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1faW5zcGVjdG9yQWdlbnQtPmRpZENsZWFyV2luZG93T2JqZWN0KGZyYW1lKTsKKworICAg
IGlmICghbV9pbnNwZWN0b3JFeHRlbnNpb25BUEkuaXNFbXB0eSgpKQorICAgICAgICBtX2luc3Bl
Y3RvckFnZW50LT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+aW5qZWN0U2NyaXB0KG1faW5zcGVjdG9y
RXh0ZW5zaW9uQVBJLCBtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkpOworCisgICAgLy8gSWYg
dGhlIHBhZ2UgaXMgc3VwcG9zZWQgdG8gc2VydmUgYXMgSW5zcGVjdG9yRnJvbnRlbmQgbm90aWZ5
IGluc3BlY3RvciBmcm9udGVuZAorICAgIC8vIGNsaWVudCB0aGF0IGl0J3MgY2xlYXJlZCBzbyB0
aGF0IHRoZSBjbGllbnQgY2FuIGV4cG9zZSBpbnNwZWN0b3IgYmluZGluZ3MuCisgICAgaWYgKG1f
aW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgJiYgZnJhbWUgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWlu
RnJhbWUoKSkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudC0+d2luZG93T2JqZWN0
Q2xlYXJlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VGltZWxpbmVQ
cm9maWxlcigpCit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RhcnRUaW1lbGluZVByb2ZpbGVy
KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWVsaW5lUHJvZmlsZXIo
KQoreworICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0b3BUaW1lbGluZVByb2ZpbGVyKCk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZyb250ZW5kKCkKK3sKKyAgICBtX29w
ZW5pbmdGcm9udGVuZCA9IGZhbHNlOworICAgIG1faW5zcGVjdG9yRnJvbnRlbmQgPSBuZXcgSW5z
cGVjdG9yRnJvbnRlbmQobV9pbnNwZWN0b3JDbGllbnQpOworICAgIG1faW5zcGVjdG9yQWdlbnQt
PnNldEZyb250ZW5kKG1faW5zcGVjdG9yRnJvbnRlbmQuZ2V0KCkpOworCisgICAgaWYgKCFJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kcygpKQorICAgICAgICBTY3JpcHRDb250
cm9sbGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRFeGNlcHRpb25zKHRydWUpOwor
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJvbnRlbmRDcmVhdGVkKCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKCkKK3sKKyAgICBtX2lu
c3BlY3RvckFnZW50LT5kaXNjb25uZWN0RnJvbnRlbmQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmRJbXBsKCkKK3sKKyAgICBpZiAoIW1faW5zcGVj
dG9yRnJvbnRlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9yRnJvbnRlbmQu
Y2xlYXIoKTsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJvbnRlbmREZWxldGVk
KCk7CisgICAgaWYgKCFJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kcygpKQor
ICAgICAgICBTY3JpcHRDb250cm9sbGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRF
eGNlcHRpb25zKGZhbHNlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkK
K3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fb3Bl
bmluZ0Zyb250ZW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZCkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+YnJpbmdUb0Zyb250KCk7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fb3BlbmluZ0Zyb250ZW5kID0gdHJ1ZTsKKyAgICAgICAgbV9pbnNw
ZWN0b3JDbGllbnQtPm9wZW5JbnNwZWN0b3JGcm9udGVuZCh0aGlzKTsKKyAgICB9Cit9CisKK3Zv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xvc2UoKQoreworICAgIGlmICghbV9pbnNwZWN0b3JG
cm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1faW5zcGVjdG9yRnJvbnRlbmQtPmRpc2Nv
bm5lY3RGcm9tQmFja2VuZCgpOworICAgIGRpc2Nvbm5lY3RGcm9udGVuZCgpOworfQorCit2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29u
c3QgU3RyaW5nJiBpbnNwZWN0b3JTdGF0ZUNvb2tpZSkKK3sKKyAgICBtX2luc3BlY3RvckFnZW50
LT5yZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGluc3BlY3RvclN0YXRlQ29va2llKTsK
K30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5k
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCkKK3sKKyAgICBtX2luc3BlY3RvckFn
ZW50LT5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNhbGxJZCwgc2NyaXB0KTsKK30KKwordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZHJhd05vZGVIaWdobGln
aHQoY29udGV4dCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdChOb2Rl
KiBub2RlKQogeworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBz
aG93KCk7CisKKyAgICBtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0KG5vZGUpOworfQorCitib29s
IEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZWQoKSBjb25zdAoreworICAgIGlmICghbV9pbnNw
ZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9pbnNwZWN0
ZWRQYWdlLT5zZXR0aW5ncygpLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWwpCit7Cisg
ICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNob3coKTsKKworICAg
IG1faW5zcGVjdG9yQWdlbnQtPnNob3dQYW5lbChwYW5lbCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9y
Q29udHJvbGxlcjo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQoKQoreworICAgIHJldHVybiBtX2lu
c3BlY3RvckFnZW50LT50aW1lbGluZUFnZW50KCk7Cit9CisKKyNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmlsZXIoKQor
eworICAgIG1faW5zcGVjdG9yQWdlbnQtPmVuYWJsZVByb2ZpbGVyKCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKCkKK3sKKyAgICBtX2luc3BlY3RvckFn
ZW50LT5kaXNhYmxlUHJvZmlsZXIoKTsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpw
cm9maWxlckVuYWJsZWQoKQoreworICAgIHJldHVybiBtX2luc3BlY3RvckFnZW50LT5wcm9maWxl
ckVuYWJsZWQoKTsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpkZWJ1Z2dlckVuYWJs
ZWQoKQoreworICAgIHJldHVybiBtX2luc3BlY3RvckFnZW50LT5kZWJ1Z2dlckVuYWJsZWQoKTsK
K30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93QW5kRW5hYmxlRGVidWdnZXIoKQor
eworICAgIG1faW5zcGVjdG9yQWdlbnQtPnNob3dBbmRFbmFibGVEZWJ1Z2dlcigpOworfQorCit2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVEZWJ1Z2dlcigpCit7CisgICAgbV9pbnNw
ZWN0b3JBZ2VudC0+ZGlzYWJsZURlYnVnZ2VyKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKK3sKKyAgICBtX2luc3BlY3RvckFn
ZW50LT5zdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKK30KKwordm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpCit7CisgICAgbV9pbnNwZWN0
b3JBZ2VudC0+c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKK30KKworYm9vbCBJbnNwZWN0
b3JDb250cm9sbGVyOjppc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pbnNwZWN0b3JBZ2VudC0+aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJv
ZmlsZSgpOwogfQogCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckV4dGVu
c2lvbkFQSShjb25zdCBTdHJpbmcmIHNvdXJjZSkKK3sKKyAgICBtX2luc3BlY3RvckV4dGVuc2lv
bkFQSSA9IHNvdXJjZTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN1bWUoKQor
eworICAgIGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gbV9pbnNw
ZWN0b3JBZ2VudC0+ZGVidWdnZXJBZ2VudCgpKQorICAgICAgICBkZWJ1Z2dlckFnZW50LT5yZXN1
bWUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWRlSGlnaGxpZ2h0KCkKK3sK
KyAgICBtX2luc3BlY3RvckFnZW50LT5oaWRlSGlnaGxpZ2h0KCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK3sKKyAgICBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLT5kaXNwYXRjaCht
ZXNzYWdlKTsKK30KKworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaAppbmRleCA0MmU5NjE1Li4xOGIxNWU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTMxLDE3ICszMSw5NSBA
QAogI2lmbmRlZiBJbnNwZWN0b3JDb250cm9sbGVyX2gKICNkZWZpbmUgSW5zcGVjdG9yQ29udHJv
bGxlcl9oCiAKLSNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgRE9NV3JhcHBlcldvcmxkOworY2xhc3MgRnJhbWU7CitjbGFzcyBHcmFwaGljc0Nv
bnRleHQ7CitjbGFzcyBJbnNwZWN0b3JBZ2VudDsKK2NsYXNzIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7
CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKIGNsYXNzIFBhZ2U7CitjbGFzcyBQb3N0
V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2s7CitjbGFzcyBOb2RlOwogCi0vLyBGSVhN
RTogdGVtcG9yYXJ5IHNvbHV0aW9uLiBJdCB3aWxsIGJlY29tZSBhIHNlcGFyYXRlIGNsYXNzIGlu
IHRoZSBuZXh0IHBhdGNoIGFuZCBjb250cm9sbGVyIHJlbGF0ZWQgc3Vic2V0IG9mIGZ1bmN0aW9u
cyB3aWxsIGJlIG1vdmVkIGZyb20gSW5zcGVjdG9yQWdlbnQgdG8gSW5zcGVjdG9yQ29udHJvbGVy
LgotY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlciA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudCB7Citj
bGFzcyBJbnNwZWN0b3JDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNw
ZWN0b3JDb250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ29uc29sZVBhbmVsOworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBFbGVtZW50c1BhbmVsOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBQcm9maWxlc1BhbmVsOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBTY3JpcHRz
UGFuZWw7CisKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQq
KTsKKyAgICB+SW5zcGVjdG9yQ29udHJvbGxlcigpOworCisgICAgUGFnZSogaW5zcGVjdGVkUGFn
ZSgpIHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQorCisgICAgYm9vbCBlbmFibGVkKCkgY29u
c3Q7CisKKyAgICB2b2lkIHNob3coKTsKKyAgICB2b2lkIHNob3dQYW5lbChjb25zdCBTdHJpbmcm
IHBhbmVsKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICB2b2lkIHNldEluc3BlY3RvckZyb250
ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+KTsKKyAgICBib29s
IGhhc0luc3BlY3RvckZyb250ZW5kQ2xpZW50KCkgY29uc3Q7CisgICAgdm9pZCBkaWRDbGVhcldp
bmRvd09iamVjdEluV29ybGQoRnJhbWUqLCBET01XcmFwcGVyV29ybGQqKTsKKyAgICB2b2lkIHNl
dEluc3BlY3RvckV4dGVuc2lvbkFQSShjb25zdCBTdHJpbmcmIHNvdXJjZSk7CisgICAgdm9pZCBk
aXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworICAg
IGJvb2wgaGFzRnJvbnRlbmQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kOyB9
CisgICAgdm9pZCBjb25uZWN0RnJvbnRlbmQoKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9udGVu
ZCgpOworICAgIHZvaWQgcmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJp
bmcmIGluc3BlY3RvckNvb2tpZSk7CisKKyAgICB2b2lkIGluc3BlY3QoTm9kZSopOworICAgIHZv
aWQgZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgdm9pZCBo
aWRlSGlnaGxpZ2h0KCk7CisKKyAgICB2b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9u
ZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKKworICAgIHZvaWQgc3RhcnRUaW1lbGlu
ZVByb2ZpbGVyKCk7CisgICAgdm9pZCBzdG9wVGltZWxpbmVQcm9maWxlcigpOworICAgIGJvb2wg
dGltZWxpbmVQcm9maWxlckVuYWJsZWQoKTsKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQorICAgIGJvb2wgcHJvZmlsZXJFbmFibGVkKCk7CisgICAgdm9pZCBlbmFibGVQcm9maWxl
cigpOworICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CisgICAgYm9vbCBp
c1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKCkgY29uc3Q7CisgICAgdm9pZCBzdG9wVXNl
ckluaXRpYXRlZFByb2ZpbGluZygpOworICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKCk7CisgICAg
dm9pZCBzaG93QW5kRW5hYmxlRGVidWdnZXIoKTsKKyAgICBib29sIGRlYnVnZ2VyRW5hYmxlZCgp
OworICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKKyAgICBmcmll
bmQgY2xhc3MgUG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOworCisgICAgdm9p
ZCBkaXNjb25uZWN0RnJvbnRlbmRJbXBsKCk7IC8vIHVzZWQgYnkgSW5zcGVjdG9yQWdlbnQKKyAg
ICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CisKKyAgICBPd25QdHI8SW5zcGVjdG9yQWdlbnQ+IG1f
aW5zcGVjdG9yQWdlbnQ7CisgICAgT3duUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBt
X2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOworICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVu
ZENsaWVudD4gbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudDsKKyAgICBPd25QdHI8SW5zcGVjdG9y
RnJvbnRlbmQ+IG1faW5zcGVjdG9yRnJvbnRlbmQ7CisgICAgUGFnZSogbV9pbnNwZWN0ZWRQYWdl
OworICAgIEluc3BlY3RvckNsaWVudCogbV9pbnNwZWN0b3JDbGllbnQ7CisgICAgYm9vbCBtX29w
ZW5pbmdGcm9udGVuZDsKKworICAgIFN0cmluZyBtX2luc3BlY3RvckV4dGVuc2lvbkFQSTsKIH07
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLmNwcAppbmRleCBjZWNiYzc2Li44MzMwNTdkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgdW5zaWduZWQgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZAogCiB2
b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKCktPmRpc3BhdGNoKG1lc3NhZ2UpOworICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCmluZGV4IDE3OTYyNTYuLmYyZTY2YmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
CkBAIC0yMDEsOCArMjAxLDggQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Om1vdmVXaW5k
b3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdAogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9z
dDo6c2V0RXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYgc2NyaXB0KQogewotICAgIEluc3BlY3Rv
ckFnZW50KiBpbnNwZWN0b3IgPSBtX2Zyb250ZW5kUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
OwotICAgIGluc3BlY3Rvci0+c2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKHNjcmlwdCk7CisgICAg
QVNTRVJUKG1fZnJvbnRlbmRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpOworICAgIG1fZnJv
bnRlbmRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvckV4dGVuc2lvbkFQ
SShzY3JpcHQpOwogfQogCiBTdHJpbmcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2NhbGl6ZWRT
dHJpbmdzVVJMKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggY2E3NThhMC4uMjQzNDRjYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAK
QEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNvbnNvbGVBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQcm9maWxlckFnZW50LmgiCkBA
IC04OCw3ICs4OSw3IEBAIHN0YXRpYyBib29sIGV2ZW50SGFzTGlzdGVuZXJzKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBET01XaW5kb3cqIHdpbmRvdywKIAogdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZEltcGwoSW5zcGVjdG9y
QWdlbnQqIGluc3BlY3RvckFnZW50LCBGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29y
bGQpCiB7Ci0gICAgaW5zcGVjdG9yQWdlbnQtPmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChm
cmFtZSwgd29ybGQpOworICAgIGluc3BlY3RvckFnZW50LT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChmcmFtZSwgd29ybGQpOwogfQogCiB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZEltcGwoSW5zcGVj
dG9yQWdlbnQqIGluc3BlY3RvckFnZW50KQpAQCAtNTY5LDI0ICs1NzAsMTcgQEAgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZFByb2ZpbGVJbXBsKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCwgUmUKICAgICB9CiB9CiAKLWJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojpwcm9maWxlckVuYWJsZWRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKLXsK
LSAgICBpZiAoIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBpbnNwZWN0
b3JBZ2VudC0+cHJvZmlsZXJBZ2VudCgpOwotICAgIGlmICghcHJvZmlsZXJBZ2VudCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHByb2ZpbGVyQWdlbnQtPmVuYWJsZWQoKTsK
LX0KLQogU3RyaW5nIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Z2V0Q3VycmVudFVzZXJJbml0
aWF0ZWRQcm9maWxlTmFtZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBib29s
IGluY3JlbWVudFByb2ZpbGVOdW1iZXIpCiB7CiAgICAgaWYgKEluc3BlY3RvclByb2ZpbGVyQWdl
bnQqIHByb2ZpbGVyQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+cHJvZmlsZXJBZ2VudCgpKQogICAg
ICAgICByZXR1cm4gcHJvZmlsZXJBZ2VudC0+Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxl
TmFtZShpbmNyZW1lbnRQcm9maWxlTnVtYmVyKTsKICAgICByZXR1cm4gIiI7CiB9CisKK2Jvb2wg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwcm9maWxlckVuYWJsZWRJbXBsKEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCkKK3sKKyAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnQtPnByb2Zp
bGVyRW5hYmxlZCgpOworfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKaW5k
ZXggYTQzN2JhMi4uMWUzODJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtMTQwLDggKzE0MCw4IEBAIHB1YmxpYzoK
ICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBzdGF0aWMgdm9pZCBhZGRTdGFy
dFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUoUGFnZSosIGNvbnN0IFN0cmluZyYgdGl0bGUsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICBzdGF0aWMg
dm9pZCBhZGRQcm9maWxlKFBhZ2UqLCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4sIFBhc3NSZWZQdHI8
U2NyaXB0Q2FsbFN0YWNrPik7Ci0gICAgc3RhdGljIGJvb2wgcHJvZmlsZXJFbmFibGVkKFBhZ2Uq
KTsKICAgICBzdGF0aWMgU3RyaW5nIGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUo
UGFnZSosIGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlcik7CisgICAgc3RhdGljIGJvb2wgcHJv
ZmlsZXJFbmFibGVkKFBhZ2UqKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQpAQCAt
MTc2LDggKzE3NiwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZnJvbnRlbmRDcmVhdGVk
KCkgeyBzX2Zyb250ZW5kQ291bnRlciArPSAxOyB9CiAgICAgc3RhdGljIHZvaWQgZnJvbnRlbmRE
ZWxldGVkKCkgeyBzX2Zyb250ZW5kQ291bnRlciAtPSAxOyB9CiAgICAgc3RhdGljIGJvb2wgaGFz
RnJvbnRlbmRzKCkgeyByZXR1cm4gc19mcm9udGVuZENvdW50ZXI7IH0KKyAgICBzdGF0aWMgYm9v
bCBoYXNGcm9udGVuZChQYWdlKik7CiAjZWxzZQogICAgIHN0YXRpYyBib29sIGhhc0Zyb250ZW5k
cygpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIGJvb2wgaGFzRnJvbnRlbmQoUGFnZSop
IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTI1NCw4ICsyNTYsOCBA
QCBwcml2YXRlOgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIHN0YXRpYyB2
b2lkIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zcGVjdG9yQWdlbnQq
LCBjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCk7CiAgICAgc3RhdGljIHZvaWQgYWRkUHJvZmlsZUltcGwoSW5zcGVjdG9yQWdl
bnQqLCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7
Ci0gICAgc3RhdGljIGJvb2wgcHJvZmlsZXJFbmFibGVkSW1wbChJbnNwZWN0b3JBZ2VudCopOwog
ICAgIHN0YXRpYyBTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZUltcGwo
SW5zcGVjdG9yQWdlbnQqLCBib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIpOworICAgIHN0YXRp
YyBib29sIHByb2ZpbGVyRW5hYmxlZEltcGwoSW5zcGVjdG9yQWdlbnQqKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQpAQCAtODM0LDYgKzgzNiwxNiBAQCBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMoRnJhbWUq
IGZyYW1lKQogfQogI2VuZGlmCiAKK2lubGluZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6aGFzRnJvbnRlbmQoUGFnZSogcGFnZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAg
IHJldHVybiBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvclBhZ2UocGFnZSk7CisjZWxzZQor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQog
aW5saW5lIEluc3BlY3RvckFnZW50KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3Rv
ckFnZW50Rm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggZjU3NWM3Zi4uYTQ1N2FiMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0yOTc1LDEwICsyOTc1LDEwIEBA
IHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzCiAgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkpCiAgICAg
ICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEUo
SU5TUEVDVE9SKSAmJiBVU0UoSlNDKQorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAm
JiBVU0UoSlNDKQogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7CiAgICAg
ICAgIGlmIChwYWdlLT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKQotICAgICAgICAgICAgcGFnZS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5yZXN1bWUoKTsKKyAgICAgICAgICAgIG1fZnJhbWUtPnBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5yZXN1bWUoKTsKICAgICB9CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3M2UxNzlmLi45ZTFkNTQzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTAyLTAyICBJbHlhIFRpa2hv
bm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIEluc3BlY3RvckNvbnRy
b2xsZXIncyBtZXRob2RzIGZyb20gSW5zcGVjdG9yQWdlbnQgdG8gSW5zcGVjdG9yQ29udHJvbGxl
ci4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMx
NjkKKworICAgICAgICBNaW5vciBjaGFuZ2UgZW5mb3JjZWQgYnkgbWFqb3IgY2hhbmdlcyBpbiBX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgICogc3JjL1dl
YkRldlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OmRpc3BhdGNoT25JbnNwZWN0b3JCYWNrZW5kKToKKyAgICAgICAgKiBzcmMvV2ViVmll
d0ltcGwuaDoKKwogMjAxMS0wMi0wNyAgQWxleGV5IE1hcmluaWNoZXYgIDxhbWFyaW5pY2hldkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3Bw
CmluZGV4IDVjMDM5ZjEuLjJmOTNkMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lk
IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRDbGVhcldpbmRvd09iamVjdChXZWJGcmFtZUltcGwq
IHdlYmZyYW1lKQogCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpkaXNwYXRjaE9uSW5zcGVj
dG9yQmFja2VuZChjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgaW5zcGVjdG9yQ29u
dHJvbGxlcigpLT5pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcigpLT5kaXNwYXRjaChtZXNzYWdl
KTsKKyAgICBpbnNwZWN0b3JDb250cm9sbGVyKCktPmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVu
ZChtZXNzYWdlKTsKIH0KIAogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5zcGVjdEVsZW1l
bnRBdChjb25zdCBXZWJQb2ludCYgcG9pbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAppbmRleCBkMTY0YTQ4Li43NjQwY2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTUzLDYgKzUzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0OworY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBj
bGFzcyBGcmFtZTsKIGNsYXNzIEhpc3RvcnlJdGVtOwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZwppbmRleCBiNmM4YzAwLi41MTQ4YWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTEtMDItMDIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IG1vdmUgSW5zcGVjdG9yQ29udHJvbGxlcidzIG1ldGhvZHMgZnJvbSBJ
bnNwZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzE2OQorCisgICAgICAgIE1pbm9yIGNo
YW5nZSBlbmZvcmNlZCBieSBtYWpvciBjaGFuZ2VzIGluIFdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRHdGsuY3BwOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuY3BwOgorICAg
ICAgICAod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3Byb3BlcnR5KToKKwogMjAxMS0wMi0wOCAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAKaW5kZXggYmQ2YTE5OC4uNjZm
Mzc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRHdGsuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJ3ZWJraXR2ZXJzaW9uLmgiCiAjaW5jbHVkZSAid2Via2l0d2ViaW5zcGVjdG9y
LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViaW5zcGVj
dG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuY3Bw
CmluZGV4IGRmNjNjNjMuLjhiNWI1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJpbnNwZWN0b3IuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEd0ay5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgpAQCAtMzk3LDcgKzM5OCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfaW5zcGVjdG9yX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQs
IEdWCiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX1RJTUVMSU5FX1BST0ZJ
TElOR19FTkFCTEVEOgotICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2LT5w
YWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnRpbWVsaW5lQWdlbnQoKSAhPSAwKTsKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJpdi0+cGFnZS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT50aW1lbGluZVByb2ZpbGVyRW5hYmxlZCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcF9pZCwgcHNwZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGE3NjlkMWQuLmRkNzg1ZWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wMi0wMiAgSWx5YSBUaWto
b25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBJbnNwZWN0b3JDb250
cm9sbGVyJ3MgbWV0aG9kcyBmcm9tIEluc3BlY3RvckFnZW50IHRvIEluc3BlY3RvckNvbnRyb2xs
ZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUz
MTY5CisKKyAgICAgICAgTWlub3IgY2hhbmdlIGVuZm9yY2VkIGJ5IG1ham9yIGNoYW5nZXMgaW4g
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci4KKworICAgICAgICAqIFdlYklu
c3BlY3Rvci9XZWJJbnNwZWN0b3IubW06CisgICAgICAgICgtW1dlYkluc3BlY3RvciBpc1RpbWVs
aW5lUHJvZmlsaW5nRW5hYmxlZF0pOgorCiAyMDExLTAyLTA3ICBFbnJpY2EgQ2FzdWNjaSAgPGVu
cmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgQWRhbSBSb2JlbiBhbmQgRGFyaW4g
QWRsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJJbnNwZWN0b3IvV2ViSW5z
cGVjdG9yLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5t
bQppbmRleCA4YWIwNDlmLi5jMDAwZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYklu
c3BlY3Rvci9XZWJJbnNwZWN0b3IubW0KQEAgLTE1Nyw3ICsxNTcsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIC0gKEJPT0wpaXNUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQKIHsKICAgICBp
ZiAoUGFnZSogcGFnZSA9IGNvcmUoX3dlYlZpZXcpKQotICAgICAgICByZXR1cm4gcGFnZS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT50aW1lbGluZUFnZW50KCkgPyBZRVMgOiBOTzsKKyAgICAgICAg
cmV0dXJuIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+dGltZWxpbmVQcm9maWxlckVuYWJs
ZWQoKSA/IFlFUyA6IE5POwogICAgIHJldHVybiBOTzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNwcAppbmRleCA2YWVj
NWUyLi5mMzY0YjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0luc3BlY3RvckNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudFF0LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIklu
c3BlY3RvckNsaWVudFF0LmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU2Vy
dmVyUXQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yU2VydmVyUXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JTZXJ2ZXJRdC5jcHAKaW5kZXggYmFkMjZhNC4uZjgzZGViMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JTZXJ2ZXJRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JTZXJ2ZXJRdC5jcHAKQEAg
LTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JT
ZXJ2ZXJRdC5oIgogCi0jaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JDbGllbnRRdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJNRDUuaCIKQEAgLTM2NCw3ICszNjMsNyBAQCB2b2lkIEluc3BlY3Rv
clNlcnZlclJlcXVlc3RIYW5kbGVyUXQ6OndlYlNvY2tldFJlYWR5UmVhZCgpCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKICAgICAgICAgaWYgKG1faW5zcGVjdG9yQ2xpZW50KSB7CiAgICAgICAgICAg
SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IG1faW5zcGVjdG9yQ2xp
ZW50LT5tX2luc3BlY3RlZFdlYlBhZ2UtPmQtPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsK
LSAgICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cigpLT5kaXNwYXRjaChRU3RyaW5nOjpmcm9tVXRmOChwYXlsb2FkKSk7CisgICAgICAgICAgaW5z
cGVjdG9yQ29udHJvbGxlci0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKFFTdHJpbmc6OmZy
b21VdGY4KHBheWxvYWQpKTsKICAgICAgICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRl
eCBkYTYyMzk3Li5lNzU1ZTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTEtMDItMDIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IG1vdmUgSW5zcGVjdG9yQ29udHJvbGxlcidzIG1ldGhvZHMgZnJvbSBJbnNwZWN0b3JBZ2VudCB0
byBJbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01MzE2OQorCisgICAgICAgIE1pbm9yIGNoYW5nZSBlbmZvcmNlZCBi
eSBtYWpvciBjaGFuZ2VzIGluIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
CisKKyAgICAgICAgKiBXZWJJbnNwZWN0b3IuY3BwOgorICAgICAgICAoV2ViSW5zcGVjdG9yOjpp
c1RpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCk6CisKIDIwMTEtMDItMDcgIEVucmljYSBDYXN1Y2Np
ICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBBZGFtIFJvYmVuIGFuZCBE
YXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkluc3BlY3Rvci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJJbnNwZWN0b3IuY3BwCmluZGV4IGMzODIzYjIuLjRl
OTVmZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkluc3BlY3Rvci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNwcApAQCAtMjc3LDcgKzI3Nyw3IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSW5zcGVjdG9yOjppc1RpbWVsaW5lUHJvZmls
aW5nRW5hYmxlZChCT09MKiBpc0VuYWJsCiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4g
U19PSzsKIAotICAgICppc0VuYWJsZWQgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnRp
bWVsaW5lQWdlbnQoKSAhPSAwOworICAgICppc0VuYWJsZWQgPSBwYWdlLT5pbnNwZWN0b3JDb250
cm9sbGVyKCktPnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81652</attachid>
            <date>2011-02-08 09:33:57 -0800</date>
            <delta_ts>2011-02-08 09:33:57 -0800</delta_ts>
            <desc>patch I&apos;m going to land</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>52248</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MGRmN2E4Li5iYjMwNmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUg
QEAKKzIwMTEtMDItMDIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogbW92ZSBJbnNwZWN0b3JDb250cm9sbGVyJ3MgbWV0aG9kcyBmcm9tIEluc3BlY3Rv
ckFnZW50IHRvIEluc3BlY3RvckNvbnRyb2xsZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMTY5CisKKyAgICAgICAgQWxsIHRoZSBJbnNwZWN0
b3IgQVBJIGZvciBXZWJDb3JlIGhhcyB0d28gcGFydHMuCisgICAgICAgIFRoZSBmaXJzdCBvbmUg
aXMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uIGZvciBXZWJDb3JlLgorICAgICAgICBUaGUgc2Vj
b25kIGlzIEluc3BlY3RvckNvbnRyb2xsZXIgZm9yIFdlYktpdC4KKyAgICAgICAgSW5zcGVjdG9y
QWdlbnQgd2FzIHByb2R1Y2VkIGJ5IHJlbmFtaW5nIG9yaWdpbmFsIEluc3BlY3RvckNvbnRyb2xs
ZXIuCisgICAgICAgIFRoaXMgcGF0Y2ggZXh0cmFjdHMgV2ViS2l0IHJlbGF0ZWQgbWV0aG9kcyBm
cm9tIEluc3BlY3RvckFnZW50IHRvIEluc3BlY3RvckNvbnRyb2xsZXIuCisKKyAgICAgICAgKiBX
ZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JG
cm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6Y3JlYXRlUGFyc2VyKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQWdlbnQ6Okluc3BlY3RvckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFn
ZW50Ojp+SW5zcGVjdG9yQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6Omluc3BlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
OmhhbmRsZU1vdXNlUHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRp
ZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
Z2VudDo6c2V0RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRp
c2Nvbm5lY3RGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cmVz
b3VyY2VBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6Y3JlYXRlRnJv
bnRlbmRMaWZldGltZUFnZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6
cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQWdlbnQ6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBZ2VudDo6cHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50OjpyZXN0b3JlUHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6OnN0YXJ0VGltZWxpbmVQcm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
b3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRPcGVuRGF0YWJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQWdlbnQ6OnNob3dBbmRFbmFibGVEZWJ1Z2dlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6OmVuYWJsZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmZyb250ZW5kKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckZyb250
ZW5kQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omhhc0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWVsaW5lUHJvZmlsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZyb250ZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmRJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNob3cpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xvc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpldmFsdWF0ZUZvclRl
c3RJbkZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRy
YXdOb2RlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
Omluc3BlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93UGFuZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRMb2FkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6dGltZWxpbmVQcm9maWxlckVu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJv
ZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVBy
b2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnByb2ZpbGVy
RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkZWJ1Z2dl
ckVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd0Fu
ZEVuYWJsZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpc2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JF
eHRlbnNpb25BUEkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVz
dW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmhpZGVIaWdobGln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzcGF0Y2hNZXNz
YWdlRnJvbUZyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFBh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzRnJvbnRlbmQp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnNlbmRNZXNz
YWdlVG9CYWNrZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6c2V0RXh0ZW5z
aW9uQVBJKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xlYXJX
aW5kb3dPYmplY3RJbldvcmxkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnByb2ZpbGVyRW5hYmxlZEltcGwpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmQpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJO
YXZpZ2F0aW9uUG9saWN5KToKKwogMjAxMS0wMi0wOCAgR2VvcmdlIFdyaWdodCAgPGd3cmlnaHRA
cmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgppbmRleCBiZDQ5YzFmLi4wOTY4MzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMTQw
NCwyMyArMTQwNCwyNiBAQCBfX1pON1dlYkNvcmUyMkdlb2xvY2F0aW9uU2VydmljZU1vY2s4c2V0
RXJyb3JFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTNQb3NpdGlvbkVycgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDRzaG93RXYKLV9f
Wk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQ1Y2xvc2VFdgotX19aTjdXZWJDb3JlMTRJbnNwZWN0
b3JBZ2VudDlzaG93UGFuZWxFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxNEluc3BlY3Rv
ckFnZW50MTJDb25zb2xlUGFuZWxFCi1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MTNQcm9m
aWxlc1BhbmVsRQotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDE0ZW5hYmxlUHJvZmlsZXJF
dgotX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDE1ZGlzYWJsZURlYnVnZ2VyRXYKLV9fWk43
V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQxNWRpc2FibGVQcm9maWxlckV2Ci1fX1pON1dlYkNvcmUx
NEluc3BlY3RvckFnZW50MThkaXNjb25uZWN0RnJvbnRlbmRFdgotX19aTjdXZWJDb3JlMTRJbnNw
ZWN0b3JBZ2VudDIwc3RvcFRpbWVsaW5lUHJvZmlsZXJFdgotX19aTjdXZWJDb3JlMTRJbnNwZWN0
b3JBZ2VudDIxc2hvd0FuZEVuYWJsZURlYnVnZ2VyRXYKLV9fWk43V2ViQ29yZTE0SW5zcGVjdG9y
QWdlbnQyMXN0YXJ0VGltZWxpbmVQcm9maWxlckV2Ci1fX1pON1dlYkNvcmUxNEluc3BlY3RvckFn
ZW50MjVldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kRWxSS04zV1RGNlN0cmluZ0UKLV9fWk43V2Vi
Q29yZTE0SW5zcGVjdG9yQWdlbnQyNnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50RU4zV1RGMTBQ
YXNzT3duUHRySU5TXzIzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFRUUKLV9fWk43V2ViQ29yZTE0
SW5zcGVjdG9yQWdlbnQyNnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKLV9fWk43V2ViQ29y
ZTE0SW5zcGVjdG9yQWdlbnQyN3N0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ0V2CiBfX1pON1dl
YkNvcmUxNUluc3BlY3RvckNsaWVudDMxZG9EaXNwYXRjaE1lc3NhZ2VPbkZyb250ZW5kUGFnZUVQ
TlNfNFBhZ2VFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIxMkNvbnNvbGVQYW5lbEUKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEzUHJv
ZmlsZXNQYW5lbEUKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxlUHJv
ZmlsZXJFdgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkZWJ1Z2dlckVuYWJs
ZWRFdgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlRGVidWdnZXJF
dgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlUHJvZmlsZXJFdgor
X19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVwcm9maWxlckVuYWJsZWRFdgorX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMThkaXNjb25uZWN0RnJvbnRlbmRFdgorX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjBzdG9wVGltZWxpbmVQcm9maWxlckV2Citf
X1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMXNob3dBbmRFbmFibGVEZWJ1Z2dlckV2
CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMXN0YXJ0VGltZWxpbmVQcm9maWxl
ckV2CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyM3RpbWVsaW5lUHJvZmlsZXJF
bmFibGVkRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI1ZXZhbHVhdGVGb3JU
ZXN0SW5Gcm9udGVuZEVsUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIyNnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50RU4zV1RGMTBQYXNzT3duUHRySU5T
XzIzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFRUUKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjI2c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFdgorX19aTjdXZWJDb3JlMTlJbnNw
ZWN0b3JDb250cm9sbGVyMjdzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFdgorX19aTjdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dFdgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyNWNsb3NlRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjlzaG93
UGFuZWxFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwxMm1vdmVXaW5kb3dCeUVmZgogX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsMTRmcm9udGVuZExvYWRlZEV2CiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwxNWNhbkF0dGFjaFdpbmRvd0V2CkBAIC0xNDMyLDkgKzE0MzUsOCBA
QCBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyNmNoYW5nZUF0dGFj
aGVkV2luZG93SGVpZ2h0RWoKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDI3cmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0RXYKIF9fWk43V2ViQ29yZTI4SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbEMyRVBOU18xOUluc3BlY3RvckNvbnRyb2xsZXJFUE5TXzRQ
YWdlRU4zV1RGMTBQYXNzT3duUHRySU5TMF84U2V0dGluZ3NFRUUKIF9fWk43V2ViQ29yZTI4SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbEQyRXYKLV9fWk5LN1dlYkNvcmUxNEluc3BlY3RvckFn
ZW50MTVwcm9maWxlckVuYWJsZWRFdgotX19aTks3V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQxN2Ry
YXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29udGV4dEUKLV9fWk5LN1dlYkNvcmUxNElu
c3BlY3RvckFnZW50MzFpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlRXYKK19fWk5LN1dl
YkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxN2RyYXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBo
aWNzQ29udGV4dEUKK19fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIzMWlzUmVjb3Jk
aW5nVXNlckluaXRpYXRlZFByb2ZpbGVFdgogI2VuZGlmCiAKICNpZiBFTkFCTEUoSkFWQV9CUklE
R0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNw
ZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAppbmRleCA5NGZhODZlLi5h
OGQ4ZDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJ
bnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJWOEluc3BlY3RvckZyb250ZW5kSG9zdC5oIgogCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9j
dW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCmluZGV4IDM2
YzFmNWYuLjE3Y2U2MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3Vt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKQEAgLTY5
LDcgKzY5LDcgQEAKICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
RWxlbWVudEZhY3RvcnkuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJbnNw
ZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgi
CiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgpAQCAtMjc3LDExICsyNzcsNyBAQCB2b2lkIEhUTUxEb2N1bWVudDo6cmVsZWFzZUV2ZW50
cygpCiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRQYXJzZXI+IEhUTUxEb2N1bWVudDo6Y3JlYXRlUGFy
c2VyKCkKIHsKLSAgICBib29sIHJlcG9ydEVycm9ycyA9IGZhbHNlOwotI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCkpCi0gICAgICAgIHJlcG9y
dEVycm9ycyA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aGFzRnJvbnRlbmQoKTsKLSNl
bmRpZgorICAgIGJvb2wgcmVwb3J0RXJyb3JzID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpo
YXNGcm9udGVuZCh0aGlzLT5wYWdlKCkpOwogICAgIHJldHVybiBIVE1MRG9jdW1lbnRQYXJzZXI6
OmNyZWF0ZSh0aGlzLCByZXBvcnRFcnJvcnMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckFnZW50LmNwcAppbmRleCBlYTRkYzBmLi42MDdjN2FmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKQEAgLTU2LDcgKzU2LDYgQEAK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIK
ICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnQuaCIKQEAgLTEzNywxOSArMTM2LDEzIEBAIHN0YXRpYyBjb25zdCBjaGFyIGRlYnVnZ2Vy
RW5hYmxlZFtdID0gImRlYnVnZ2VyRW5hYmxlZCI7CiBzdGF0aWMgY29uc3QgY2hhciBwcm9maWxl
ckVuYWJsZWRbXSA9ICJwcm9maWxlckVuYWJsZWQiOwogfQogCi1jb25zdCBjaGFyKiBjb25zdCBJ
bnNwZWN0b3JBZ2VudDo6RWxlbWVudHNQYW5lbCA9ICJlbGVtZW50cyI7Ci1jb25zdCBjaGFyKiBj
b25zdCBJbnNwZWN0b3JBZ2VudDo6Q29uc29sZVBhbmVsID0gImNvbnNvbGUiOwotY29uc3QgY2hh
ciogY29uc3QgSW5zcGVjdG9yQWdlbnQ6OlNjcmlwdHNQYW5lbCA9ICJzY3JpcHRzIjsKLWNvbnN0
IGNoYXIqIGNvbnN0IEluc3BlY3RvckFnZW50OjpQcm9maWxlc1BhbmVsID0gInByb2ZpbGVzIjsK
LQogSW5zcGVjdG9yQWdlbnQ6Okluc3BlY3RvckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQog
ICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCiAgICAgLCBt
X2luc3BlY3RlZFBhZ2UocGFnZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fb3Bl
bmluZ0Zyb250ZW5kKGZhbHNlKQorICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9jc3NBZ2Vu
dChuZXcgSW5zcGVjdG9yQ1NTQWdlbnQoKSkKICAgICAsIG1fc3RhdGUobmV3IEluc3BlY3RvclN0
YXRlKGNsaWVudCkpCi0gICAgLCBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG5ldyBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcih0aGlzKSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRIb3N0
KEluamVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9jb25zb2xlQWdlbnQo
bmV3IEluc3BlY3RvckNvbnNvbGVBZ2VudCh0aGlzKSkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKQEAgLTE5MiwxMyArMTg1LDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVj
dGVkUGFnZURlc3Ryb3llZCgpCiAgICAgbV9jbGllbnQgPSAwOwogfQogCi1ib29sIEluc3BlY3Rv
ckFnZW50OjplbmFibGVkKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX2luc3BlY3RlZFBhZ2UtPnNldHRpbmdz
KCktPmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKTsKLX0KLQogYm9vbCBJbnNwZWN0b3JBZ2VudDo6
c2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3RhdGUtPmdl
dEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6c2VhcmNoaW5nRm9yTm9kZSk7CkBAIC0yMDks
MTQgKzE5NSwxNCBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVG
cm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdAogICAgIG1fc3RhdGUtPnJlc3Rv
cmVGcm9tSW5zcGVjdG9yQ29va2llKGluc3BlY3RvclN0YXRlQ29va2llKTsKIAogICAgIGlmICgh
bV9mcm9udGVuZCkgewotICAgICAgICBjb25uZWN0RnJvbnRlbmQoKTsKKyAgICAgICAgbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5jb25uZWN0RnJvbnRlbmQoKTsKICAgICAgICAgbV9mcm9udGVuZC0+
ZnJvbnRlbmRSZXVzZWQoKTsKICAgICAgICAgbV9mcm9udGVuZC0+aW5zcGVjdGVkVVJMQ2hhbmdl
ZChpbnNwZWN0ZWRVUkwoKS5zdHJpbmcoKSk7CiAgICAgICAgIG1fZG9tQWdlbnQtPnNldERvY3Vt
ZW50KG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkpOwogICAgICAgICBw
dXNoRGF0YUNvbGxlY3RlZE9mZmxpbmUoKTsKICAgICB9CiAKLSAgICBtX3Jlc291cmNlQWdlbnQg
PSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXN0b3JlKG1faW5zcGVjdGVkUGFnZSwgbV9zdGF0
ZS5nZXQoKSwgbV9mcm9udGVuZC5nZXQoKSk7CisgICAgbV9yZXNvdXJjZUFnZW50ID0gSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6cmVzdG9yZShtX2luc3BlY3RlZFBhZ2UsIG1fc3RhdGUuZ2V0KCks
IG1fZnJvbnRlbmQpOwogCiAgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yQWdl
bnRTdGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQpKQogICAgICAgICBzdGFydFRpbWVsaW5l
UHJvZmlsZXIoKTsKQEAgLTIzMSwxMSArMjE3LDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVz
dG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXQK
IAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdChOb2RlKiBub2RlKQogewotICAgIGlmICgh
ZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaG93KCk7Ci0KICAgICBpZiAobm9k
ZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUgJiYgbm9kZS0+bm9kZVR5cGUoKSAh
PSBOb2RlOjpET0NVTUVOVF9OT0RFKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgp
OwogICAgIG1fbm9kZVRvRm9jdXMgPSBub2RlOwpAQCAtMzE5LDMzICszMDAsMjQgQEAgYm9vbCBJ
bnNwZWN0b3JBZ2VudDo6aGFuZGxlTW91c2VQcmVzcygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFBhc3NPd25Q
dHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIW1faW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQpOwotICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgPSBj
bGllbnQ7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5X
b3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CiAgICAgaWYgKHdv
cmxkICE9IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBJZiB0aGUgcGFnZSBpcyBzdXBwb3NlZCB0byBzZXJ2ZSBhcyBJbnNwZWN0b3JGcm9udGVuZCBu
b3RpZnkgaW5zcGV0b3IgZnJvbnRlbmQKLSAgICAvLyBjbGllbnQgdGhhdCBpdCdzIGNsZWFyZWQg
c28gdGhhdCB0aGUgY2xpZW50IGNhbiBleHBvc2UgaW5zcGVjdG9yIGJpbmRpbmdzLgotICAgIGlm
IChtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50ICYmIGZyYW1lID09IG1faW5zcGVjdGVkUGFnZS0+
bWFpbkZyYW1lKCkpCi0gICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQtPndpbmRvd09i
amVjdENsZWFyZWQoKTsKLQogICAgIGlmIChlbmFibGVkKCkpIHsKICAgICAgICAgaWYgKG1fZnJv
bnRlbmQgJiYgZnJhbWUgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkKICAgICAgICAg
ICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5kaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCk7CisKICAg
ICAgICAgaWYgKG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuc2l6ZSgpKSB7CiAgICAgICAgICAg
ICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSk7
CiAgICAgICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IG1fc2NyaXB0
c1RvRXZhbHVhdGVPbkxvYWQuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICAgaXQgIT0gbV9zY3Jp
cHRzVG9FdmFsdWF0ZU9uTG9hZC5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgICAgICAgaXQg
IT0gbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5lbmQoKTsgKytpdCkgewogICAgICAgICAgICAg
ICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3RTY3JpcHQoKml0LCBzY3JpcHRTdGF0ZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisKICAgICBpZiAoIW1faW5zcGVjdG9y
RXh0ZW5zaW9uQVBJLmlzRW1wdHkoKSkKICAgICAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmlu
amVjdFNjcmlwdChtX2luc3BlY3RvckV4dGVuc2lvbkFQSSwgbWFpbldvcmxkU2NyaXB0U3RhdGUo
ZnJhbWUpKTsKIH0KQEAgLTM2NSw4MCArMzM3LDIxIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNl
dFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKICAgICBzZXRT
ZWFyY2hpbmdGb3JOb2RlKGVuYWJsZWQpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50Ojpjb25u
ZWN0RnJvbnRlbmQoKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0RnJvbnRlbmQoSW5zcGVjdG9y
RnJvbnRlbmQqIGluc3BlY3RvckZyb250ZW5kKQogewotICAgIG1fb3BlbmluZ0Zyb250ZW5kID0g
ZmFsc2U7CiAgICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKLSAgICBtX2Zyb250
ZW5kID0gbmV3IEluc3BlY3RvckZyb250ZW5kKG1fY2xpZW50KTsKLSAgICBtX2RvbUFnZW50ID0g
SW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSwgbV9m
cm9udGVuZC5nZXQoKSk7Ci0gICAgbV9ydW50aW1lQWdlbnQgPSBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSk7Ci0gICAgbV9jc3NBZ2VudC0+
c2V0RE9NQWdlbnQobV9kb21BZ2VudC5nZXQoKSk7Ci0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0g
ICAgbV9kYXRhYmFzZUFnZW50ID0gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Y3JlYXRlKCZtX2Rh
dGFiYXNlUmVzb3VyY2VzLCBtX2Zyb250ZW5kLmdldCgpKTsKLSNlbmRpZgorICAgIG1fZnJvbnRl
bmQgPSBpbnNwZWN0b3JGcm9udGVuZDsKKyAgICBjcmVhdGVGcm9udGVuZExpZmV0aW1lQWdlbnRz
KCk7CiAKLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgbV9kb21TdG9yYWdlQWdlbnQgPSBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNyZWF0ZSgmbV9kb21TdG9yYWdlUmVzb3VyY2VzLCBt
X2Zyb250ZW5kLmdldCgpKTsKLSNlbmRpZgorICAgIG1fY3NzQWdlbnQtPnNldERPTUFnZW50KG1f
ZG9tQWdlbnQuZ2V0KCkpOwogCiAgICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKLSAgICAgICAgbV90
aW1lbGluZUFnZW50LT5yZXNldEZyb250ZW5kUHJveHlPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7
CisgICAgICAgIG1fdGltZWxpbmVBZ2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJv
bnRlbmQpOwogCi0gICAgbV9jb25zb2xlQWdlbnQtPnNldEZyb250ZW5kKG1fZnJvbnRlbmQuZ2V0
KCkpOworICAgIG1fY29uc29sZUFnZW50LT5zZXRGcm9udGVuZChtX2Zyb250ZW5kKTsKIAogICAg
IC8vIEluaXRpYWxpemUgV2ViIEluc3BlY3RvciB0aXRsZS4KICAgICBtX2Zyb250ZW5kLT5pbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGluc3BlY3RlZFVSTCgpLnN0cmluZygpKTsKLQotI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBu
ZXcgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KHRoaXMsIG1fZnJvbnRlbmQuZ2V0KCkp
OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0gICAgbV9maWxlU3lzdGVtQWdl
bnQgPSBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OmNyZWF0ZSh0aGlzLCBtX2Zyb250ZW5kLmdl
dCgpKTsKLSNlbmRpZgotCi0gICAgaWYgKCFJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zy
b250ZW5kcygpKQotICAgICAgICBTY3JpcHRDb250cm9sbGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNr
Rm9yVW5jYXVnaHRFeGNlcHRpb25zKHRydWUpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZnJvbnRlbmRDcmVhdGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNob3coKQot
ewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9vcGVu
aW5nRnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2Zyb250ZW5kKQotICAg
ICAgICBtX2Zyb250ZW5kLT5icmluZ1RvRnJvbnQoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9v
cGVuaW5nRnJvbnRlbmQgPSB0cnVlOwotICAgICAgICBtX2NsaWVudC0+b3Blbkluc3BlY3RvckZy
b250ZW5kKGluc3BlY3RvckNvbnRyb2xsZXIoKSk7Ci0gICAgfQotfQotCi12b2lkIEluc3BlY3Rv
ckFnZW50OjpzaG93UGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbCkKLXsKLSAgICBpZiAoIWVuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2hvdygpOwotCi0gICAgaWYgKCFtX2Zyb250
ZW5kKSB7Ci0gICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IHBhbmVsOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIG1fZnJvbnRlbmQtPnNob3dQYW5lbChwYW5lbCk7Ci19Ci0KLXZvaWQg
SW5zcGVjdG9yQWdlbnQ6OmNsb3NlKCkKLXsKLSAgICBpZiAoIW1fZnJvbnRlbmQpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2Zyb250ZW5kLT5kaXNjb25uZWN0RnJvbUJhY2tlbmQoKTsKLSAgICBk
aXNjb25uZWN0RnJvbnRlbmQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzY29ubmVj
dEZyb250ZW5kKCkKQEAgLTQ0NiwxMSArMzU5LDkgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlz
Y29ubmVjdEZyb250ZW5kKCkKICAgICBpZiAoIW1fZnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fZnJvbnRlbmQuY2xlYXIoKTsKKyAgICBtX2Zyb250ZW5kID0gMDsKIAotICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJvbnRlbmREZWxldGVkKCk7Ci0gICAgaWYgKCFJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kcygpKQotICAgICAgICBTY3JpcHRDb250
cm9sbGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRFeGNlcHRpb25zKGZhbHNlKTsK
KyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2Nvbm5lY3RGcm9udGVuZEltcGwoKTsKIAog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIC8vIElmIHRoZSB3aW5kb3cgaXMg
YmVpbmcgY2xvc2VkIHdpdGggdGhlIGRlYnVnZ2VyIGVuYWJsZWQsCkBAIC00NjAsNyArMzcxLDYg
QEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzY29ubmVjdEZyb250ZW5kKCkKICNlbmRpZgogICAg
IHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOwogICAgIHVuYmluZEFsbFJlc291cmNlcygpOwot
ICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CiAKICAgICBoaWRlSGlnaGxpZ2h0KCk7CiAKQEAg
LTQ3OCwxMCArMzg4LDMyIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Nvbm5lY3RGcm9udGVu
ZCgpCiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBJbnNwZWN0b3JBZ2VudDo6cmVzb3VyY2VBZ2Vu
dCgpCiB7CiAgICAgaWYgKCFtX3Jlc291cmNlQWdlbnQgJiYgbV9mcm9udGVuZCkKLSAgICAgICAg
bV9yZXNvdXJjZUFnZW50ID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y3JlYXRlKG1faW5zcGVj
dGVkUGFnZSwgbV9zdGF0ZS5nZXQoKSwgbV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgIG1fcmVz
b3VyY2VBZ2VudCA9IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmNyZWF0ZShtX2luc3BlY3RlZFBh
Z2UsIG1fc3RhdGUuZ2V0KCksIG1fZnJvbnRlbmQpOwogICAgIHJldHVybiBtX3Jlc291cmNlQWdl
bnQuZ2V0KCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmNyZWF0ZUZyb250ZW5kTGlmZXRp
bWVBZ2VudHMoKQoreworICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRl
KG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpLCBtX2Zyb250ZW5kKTsKKyAgICBtX3J1bnRpbWVB
Z2VudCA9IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y3JlYXRlKG1faW5qZWN0ZWRTY3JpcHRIb3N0
LmdldCgpKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBtX2RhdGFiYXNlQWdlbnQgPSBJ
bnNwZWN0b3JEYXRhYmFzZUFnZW50OjpjcmVhdGUoJm1fZGF0YWJhc2VSZXNvdXJjZXMsIG1fZnJv
bnRlbmQpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgbV9kb21TdG9y
YWdlQWdlbnQgPSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNyZWF0ZSgmbV9kb21TdG9yYWdl
UmVzb3VyY2VzLCBtX2Zyb250ZW5kKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VC
X0FQUExJQ0FUSU9OUykKKyAgICBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCA9IG5ldyBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQodGhpcywgbV9mcm9udGVuZCk7CisjZW5kaWYKKworI2lm
IEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICBtX2ZpbGVTeXN0ZW1BZ2VudCA9IEluc3BlY3RvckZp
bGVTeXN0ZW1BZ2VudDo6Y3JlYXRlKHRoaXMsIG1fZnJvbnRlbmQpOworI2VuZGlmCit9CisKIHZv
aWQgSW5zcGVjdG9yQWdlbnQ6OnJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCkKIHsKICAg
ICBtX3Jlc291cmNlQWdlbnQuY2xlYXIoKTsKQEAgLTUxNSw2ICs0NDcsNyBAQCB2b2lkIEluc3Bl
Y3RvckFnZW50OjpyZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpCiAgICAgICAgIG1fZmls
ZVN5c3RlbUFnZW50LT5zdG9wKCk7CiAgICAgICAgIG1fZmlsZVN5c3RlbUFnZW50LmNsZWFyKCk7
CiAjZW5kaWYKKyAgICBzdG9wVGltZWxpbmVQcm9maWxlcigpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckFnZW50Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQpAQCAtNTIzLDExICs0NTYsNiBAQCB2b2lk
IEluc3BlY3RvckFnZW50Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQogICAgIGlmICghbV9mcm9u
dGVuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3Nob3dBZnRlclZpc2libGUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIHNob3dQYW5lbChtX3Nob3dBZnRlclZpc2libGUpOwotICAgICAg
ICBtX3Nob3dBZnRlclZpc2libGUgPSAiIjsKLSAgICB9Ci0KICNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKICAgICBpZiAobV9wcm9maWxlckFnZW50LT5lbmFibGVkKCkpCiAgICAgICAg
IG1fZnJvbnRlbmQtPnByb2ZpbGVyV2FzRW5hYmxlZCgpOwpAQCAtNTM4LDEzICs0NjYsMTggQEAg
dm9pZCBJbnNwZWN0b3JBZ2VudDo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKICAgICBpZiAobV9u
b2RlVG9Gb2N1cykKICAgICAgICAgZm9jdXNOb2RlKCk7CiAKKyAgICBpZiAoIW1fcmVxdWlyZWRQ
YW5lbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9mcm9udGVuZC0+c2hvd1BhbmVsKG1fcmVxdWly
ZWRQYW5lbCk7CisgICAgICAgIG1fcmVxdWlyZWRQYW5lbCA9ICIiOworICAgIH0KKworICAgIHJl
c3RvcmVEZWJ1Z2dlcih0cnVlKTsKKyAgICByZXN0b3JlUHJvZmlsZXIoUHJvZmlsZXJSZXN0b3Jl
Tm9BY3Rpb24pOworCiAgICAgLy8gRGlzcGF0Y2ggcGVuZGluZyBmcm9udGVuZCBjb21tYW5kcwog
ICAgIGZvciAoVmVjdG9yPHBhaXI8bG9uZywgU3RyaW5nPiA+OjppdGVyYXRvciBpdCA9IG1fcGVu
ZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzLmJlZ2luKCk7IGl0ICE9IG1fcGVuZGluZ0V2YWx1YXRl
VGVzdENvbW1hbmRzLmVuZCgpOyArK2l0KQogICAgICAgICBtX2Zyb250ZW5kLT5ldmFsdWF0ZUZv
clRlc3RJbkZyb250ZW5kKCgqaXQpLmZpcnN0LCAoKml0KS5zZWNvbmQpOwogICAgIG1fcGVuZGlu
Z0V2YWx1YXRlVGVzdENvbW1hbmRzLmNsZWFyKCk7Ci0KLSAgICByZXN0b3JlRGVidWdnZXIodHJ1
ZSk7Ci0gICAgcmVzdG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZU5vQWN0aW9uKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JBZ2VudDo6cHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKCkKQEAgLTU1NCwx
MiArNDg3LDEyIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGlu
ZSgpCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVy
YXRvciBkYXRhYmFzZXNFbmQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAo
RGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVJlc291cmNlcy5i
ZWdpbigpOyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmJp
bmQobV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVu
ZCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgRE9NU3RvcmFnZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5l
bmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9k
b21TdG9yYWdlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpCi0g
ICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgIGl0LT5z
ZWNvbmQtPmJpbmQobV9mcm9udGVuZCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikgJiYgRU5BQkxFKFdPUktFUlMpCiAgICAgV29ya2Vyc01hcDo6aXRlcmF0b3Igd29y
a2Vyc0VuZCA9IG1fd29ya2Vycy5lbmQoKTsKQEAgLTU4Myw3ICs1MTYsNyBAQCB2b2lkIEluc3Bl
Y3RvckFnZW50OjpyZXN0b3JlUHJvZmlsZXIoUHJvZmlsZXJSZXN0b3JlQWN0aW9uIGFjdGlvbikK
IHsKICAgICBBU1NFUlQobV9mcm9udGVuZCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCi0gICAgbV9wcm9maWxlckFnZW50LT5zZXRGcm9udGVuZChtX2Zyb250ZW5kLmdldCgpKTsK
KyAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldEZyb250ZW5kKG1fZnJvbnRlbmQpOwogICAgIGlmICht
X3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnByb2ZpbGVyRW5hYmxlZCkp
CiAgICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7CiAgICAgaWYgKGFjdGlvbiA9PSBQcm9maWxlclJl
c3RvcmVSZXNldEFnZW50KQpAQCAtNzA4LDcgKzY0MSw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6
OnN0YXJ0VGltZWxpbmVQcm9maWxlcigpCiAgICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV90aW1lbGluZUFnZW50ID0gbmV3IEluc3BlY3RvclRpbWVsaW5l
QWdlbnQobV9mcm9udGVuZC5nZXQoKSk7CisgICAgbV90aW1lbGluZUFnZW50ID0gbmV3IEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQobV9mcm9udGVuZCk7CiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAg
ICAgIG1fZnJvbnRlbmQtPnRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCk7CiAKQEAgLTc0OCw4
ICs2ODEsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0KQogICAgIHsKICAgICAgICAgaWYgKHNjcmlw
dENvbnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3IgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdENvbnRleHQpLT5wYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAgICBpbnNwZWN0b3ItPnBv
c3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kKCptX3dvcmtlciwgbV9hY3Rpb24pOworICAg
ICAgICAgICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IHN0YXRpY19jYXN0
PERvY3VtZW50Kj4oc2NyaXB0Q29udGV4dCktPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5tX2luc3BlY3RvckFnZW50LmdldCgpKQorICAgICAgICAgICAgICAgIGluc3BlY3RvckFnZW50
LT5wb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZCgqbV93b3JrZXIsIG1fYWN0aW9uKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtODExLDcgKzc0NCw3IEBAIHZvaWQgSW5zcGVjdG9yQWdl
bnQ6OmRpZE9wZW5EYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3Qg
U3RyaW5nCiAKICAgICAvLyBSZXNvdXJjZXMgYXJlIG9ubHkgYm91bmQgd2hpbGUgdmlzaWJsZS4K
ICAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgcmVzb3VyY2UtPmJpbmQobV9mcm9udGVuZC5n
ZXQoKSk7CisgICAgICAgIHJlc291cmNlLT5iaW5kKG1fZnJvbnRlbmQpOwogfQogI2VuZGlmCiAK
QEAgLTkxNyw3ICs4NTAsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpkaWRVc2VET01TdG9yYWdl
KFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcgogCiAgICAgLy8gUmVz
b3VyY2VzIGFyZSBvbmx5IGJvdW5kIHdoaWxlIHZpc2libGUuCiAgICAgaWYgKG1fZnJvbnRlbmQp
Ci0gICAgICAgIHJlc291cmNlLT5iaW5kKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgICAgICByZXNv
dXJjZS0+YmluZChtX2Zyb250ZW5kKTsKIH0KICNlbmRpZgogCkBAIC0xMDA1LDcgKzkzOCw3IEBA
IHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNob3dBbmRFbmFibGVEZWJ1Z2dlcigpCiAKICAgICBpZiAo
IW1fZnJvbnRlbmQpIHsKICAgICAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2Vu
dFN0YXRlOjpkZWJ1Z2dlckVuYWJsZWQsIHRydWUpOwotICAgICAgICBzaG93UGFuZWwoU2NyaXB0
c1BhbmVsKTsKKyAgICAgICAgc2hvd1BhbmVsKEluc3BlY3RvckNvbnRyb2xsZXI6OlNjcmlwdHNQ
YW5lbCk7CiAgICAgfSBlbHNlCiAgICAgICAgIGVuYWJsZURlYnVnZ2VyKHRydWUpOwogfQpAQCAt
MTAxNyw3ICs5NTAsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjplbmFibGVEZWJ1Z2dlcihib29s
IGVyYXNlU3RpY2t5QnJlYWtwb2ludHMpCiAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0
b3JBZ2VudFN0YXRlOjpkZWJ1Z2dlckVuYWJsZWQsIHRydWUpOwogICAgIEFTU0VSVChtX2luc3Bl
Y3RlZFBhZ2UpOwogCi0gICAgbV9kZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Y3JlYXRlKHRoaXMsIG1fZnJvbnRlbmQuZ2V0KCksIGVyYXNlU3RpY2t5QnJlYWtwb2ludHMp
OworICAgIG1fZGVidWdnZXJBZ2VudCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSh0
aGlzLCBtX2Zyb250ZW5kLCBlcmFzZVN0aWNreUJyZWFrcG9pbnRzKTsKICAgICBtX2Jyb3dzZXJE
ZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSh0aGlz
LCBlcmFzZVN0aWNreUJyZWFrcG9pbnRzKTsKIAogICAgIG1fZnJvbnRlbmQtPmRlYnVnZ2VyV2Fz
RW5hYmxlZCgpOwpAQCAtMTM1OCw2ICsxMjkxLDIwIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnJl
bG9hZFBhZ2UoYm9vbCBpZ25vcmVDYWNoZSkKICAgICBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFt
ZSgpLT5sb2FkZXIoKS0+cmVsb2FkKGlnbm9yZUNhY2hlKTsKIH0KIAorYm9vbCBJbnNwZWN0b3JB
Z2VudDo6ZW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+ZW5hYmxlZCgpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpzaG93UGFuZWwoY29uc3Qg
U3RyaW5nJiBwYW5lbCkKK3sKKyAgICBpZiAoIW1fZnJvbnRlbmQpIHsKKyAgICAgICAgbV9yZXF1
aXJlZFBhbmVsID0gcGFuZWw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9mcm9udGVu
ZC0+c2hvd1BhbmVsKHBhbmVsKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckFnZW50LmgKaW5kZXggMjkxMTZjYS4uZTFjYzA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckFnZW50LmgKQEAgLTU2LDcgKzU2LDYgQEAgY2xhc3MgSGl0VGVzdFJlc3Vs
dDsKIGNsYXNzIEluamVjdGVkU2NyaXB0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0OwogY2xh
c3MgSW5zcGVjdG9yQXJyYXk7Ci1jbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKIGNs
YXNzIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50
OwogY2xhc3MgSW5zcGVjdG9yQ29uc29sZUFnZW50OwpAQCAtMTA5LDE1ICsxMDgsOSBAQCBjbGFz
cyBJbnNwZWN0b3JBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQWdl
bnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBDb25zb2xlUGFuZWw7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IEVsZW1lbnRzUGFuZWw7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFByb2ZpbGVz
UGFuZWw7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFNjcmlwdHNQYW5lbDsKLQogICAg
IEluc3BlY3RvckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqLCBQYWdlKiwgSW5zcGVjdG9yQ2xp
ZW50Kik7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yQWdlbnQoKTsKIAotICAgIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiBpbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcigpIHsgcmV0dXJuIG1f
aW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KICAgICBJbnNwZWN0b3JDbGllbnQq
IGluc3BlY3RvckNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAgICAgSW5qZWN0ZWRTY3Jp
cHRIb3N0KiBpbmplY3RlZFNjcmlwdEhvc3QoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0SG9z
dC5nZXQoKTsgfQogCkBAIC0xMjksMjYgKzEyMiwyMiBAQCBwdWJsaWM6CiAgICAgS1VSTCBpbnNw
ZWN0ZWRVUkwoKSBjb25zdDsKICAgICBLVVJMIGluc3BlY3RlZFVSTFdpdGhvdXRGcmFnbWVudCgp
IGNvbnN0OwogICAgIHZvaWQgcmVsb2FkUGFnZShib29sIGlnbm9yZUNhY2hlKTsKKyAgICB2b2lk
IHNob3dQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsKTsKIAogICAgIHZvaWQgcmVzdG9yZUluc3Bl
Y3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvckNvb2tpZSk7CiAKLSAg
ICB2b2lkIGluc3BlY3QoTm9kZSopOwogICAgIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKTsKICAgICB2
b2lkIGhpZGVIaWdobGlnaHQoKTsKKyAgICB2b2lkIGluc3BlY3QoTm9kZSopOwogICAgIHZvaWQg
aGlnaGxpZ2h0RE9NTm9kZShsb25nIG5vZGVJZCk7CiAgICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hs
aWdodCgpIHsgaGlkZUhpZ2hsaWdodCgpOyB9CiAKICAgICB2b2lkIGhpZ2hsaWdodEZyYW1lKHVu
c2lnbmVkIGxvbmcgZnJhbWVJZCk7CiAgICAgdm9pZCBoaWRlRnJhbWVIaWdobGlnaHQoKSB7IGhp
ZGVIaWdobGlnaHQoKTsgfQogCi0gICAgdm9pZCBzaG93KCk7Ci0gICAgdm9pZCBzaG93UGFuZWwo
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgdm9pZCBjb25uZWN0RnJv
bnRlbmQoKTsKLSAgICB2b2lkIHJldXNlRnJvbnRlbmQoKTsKKyAgICB2b2lkIHNldEZyb250ZW5k
KEluc3BlY3RvckZyb250ZW5kKik7CisgICAgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9mcm9udGVuZDsgfQogICAgIHZvaWQgZGlzY29ubmVjdEZyb250ZW5k
KCk7Ci0gICAgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKCkgY29uc3QgeyByZXR1cm4gbV9m
cm9udGVuZC5nZXQoKTsgfQogCiAgICAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VB
Z2VudCgpOwogCkBAIC0xNzgsMjAgKzE2NywxNCBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSB7IHJldHVybiBtX2Fw
cGxpY2F0aW9uQ2FjaGVBZ2VudC5nZXQoKTsgfQogI2VuZGlmCiAKLQorICAgIGJvb2wgaGFuZGxl
TW91c2VQcmVzcygpOwogICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0Owog
ICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVu
c2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwotICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygpOwotCi0g
ICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZy
b250ZW5kQ2xpZW50Pik7Ci0gICAgYm9vbCBoYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7IH0KIAogICAgIHZvaWQgZGlk
Q2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiwgRE9NV3JhcHBlcldvcmxkKik7CiAKICAg
ICB2b2lkIGRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqKTsKIAotICAgIHZvaWQgc2V0RXh0
cmFIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7Ci0KICAgICB2b2lkIHN0YXJ0
VGltZWxpbmVQcm9maWxlcigpOwogICAgIHZvaWQgc3RvcFRpbWVsaW5lUHJvZmlsZXIoKTsKIApA
QCAtMjgwLDYgKzI2Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2Rl
KGJvb2wgZW5hYmxlZCk7CiAKICAgICB2b2lkIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRz
KCk7CisgICAgdm9pZCBjcmVhdGVGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7CiAKICNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29s
KTsKQEAgLTI5NCw5ICsyNzgsNyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKICAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CiAgICAg
SW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKLSAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ+IG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7Ci0gICAgYm9vbCBtX29wZW5pbmdGcm9u
dGVuZDsKLSAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IG1fZnJvbnRlbmQ7CisgICAgSW5z
cGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CiAgICAgT3duUHRyPEluc3BlY3RvckNTU0FnZW50
PiBtX2Nzc0FnZW50OwogICAgIFJlZlB0cjxJbnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2VudDsK
IApAQCAtMzE5LDYgKzMwMSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEluc3BlY3RvckZpbGVT
eXN0ZW1BZ2VudD4gbV9maWxlU3lzdGVtQWdlbnQ7CiAjZW5kaWYKIAorICAgIFJlZlB0cjxOb2Rl
PiBtX2hpZ2hsaWdodGVkTm9kZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlVG9Gb2N1czsKICAg
ICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2VBZ2VudD4gbV9yZXNvdXJjZUFnZW50OwogICAgIE93
blB0cjxJbnNwZWN0b3JSdW50aW1lQWdlbnQ+IG1fcnVudGltZUFnZW50OwpAQCAtMzMyLDEzICsz
MTUsMTEgQEAgcHJpdmF0ZToKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwIG1fZG9tU3RvcmFn
ZVJlc291cmNlczsKICNlbmRpZgogCi0gICAgU3RyaW5nIG1fc2hvd0FmdGVyVmlzaWJsZTsKLSAg
ICBSZWZQdHI8Tm9kZT4gbV9oaWdobGlnaHRlZE5vZGU7Ci0gICAgT3duUHRyPEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyPiBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0
cjxJbmplY3RlZFNjcmlwdEhvc3Q+IG1faW5qZWN0ZWRTY3JpcHRIb3N0OwogICAgIE93blB0cjxJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ+IG1fY29uc29sZUFnZW50OwogCiAgICAgVmVjdG9yPHBhaXI8
bG9uZywgU3RyaW5nPiA+IG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzOworICAgIFN0cmlu
ZyBtX3JlcXVpcmVkUGFuZWw7CiAgICAgVmVjdG9yPFN0cmluZz4gbV9zY3JpcHRzVG9FdmFsdWF0
ZU9uTG9hZDsKICAgICBTdHJpbmcgbV9pbnNwZWN0b3JFeHRlbnNpb25BUEk7CiAjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZmI4NDA5ZS4uNWZmOTMzMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMzMsMTcg
KzMzLDI0MCBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRI
b3N0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVu
ZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNj
cmlwdE9iamVjdC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotLy8gRklYTUU6IHRlbXBvcmFyeSBzb2x1dGlvbi4gSXQgd2lsbCBiZWNvbWUgYSBzZXBh
cmF0ZSBjbGFzcyBpbiB0aGUgbmV4dCBwYXRjaCBhbmQgQ29udHJvbGxlciByZWxhdGVkIHN1YnNl
dCBvZiBmdW5jdGlvbnMgd2lsbCBiZSBtb3ZlZCBmcm9tIEluc3BlY3RvckFnZW50IHRvIEluc3Bl
Y3RvckNvbnRyb2xlci4KK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OkVs
ZW1lbnRzUGFuZWwgPSAiZWxlbWVudHMiOworY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6Q29uc29sZVBhbmVsID0gImNvbnNvbGUiOworY29uc3QgY2hhciogY29uc3QgSW5z
cGVjdG9yQ29udHJvbGxlcjo6U2NyaXB0c1BhbmVsID0gInNjcmlwdHMiOworY29uc3QgY2hhciog
Y29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6UHJvZmlsZXNQYW5lbCA9ICJwcm9maWxlcyI7CisK
IEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5z
cGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQpCi0gICAgOiBJbnNwZWN0b3JBZ2VudCh0aGlz
LCBwYWdlLCBpbnNwZWN0b3JDbGllbnQpCisgICAgOiBtX2luc3BlY3RvckFnZW50KG5ldyBJbnNw
ZWN0b3JBZ2VudCh0aGlzLCBwYWdlLCBpbnNwZWN0b3JDbGllbnQpKQorICAgICwgbV9pbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcihuZXcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIobV9pbnNw
ZWN0b3JBZ2VudC5nZXQoKSkpCisgICAgLCBtX2luc3BlY3RlZFBhZ2UocGFnZSkKKyAgICAsIG1f
aW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKKyAgICAsIG1fb3BlbmluZ0Zyb250ZW5k
KGZhbHNlKQoreworfQorCitJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxl
cigpCit7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gaW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQpCit7CisgICAgbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCA9IGluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OworfQorCitib29sIEluc3BlY3RvckNvbnRyb2xsZXI6Omhhc0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JGcm9u
dGVuZENsaWVudDsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDbGVhcldpbmRv
d09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29ybGQqIHdvcmxkKQorewor
ICAgIGlmICh3b3JsZCAhPSBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gSWYgdGhlIHBhZ2UgaXMgc3VwcG9zZWQgdG8gc2VydmUgYXMgSW5zcGVjdG9y
RnJvbnRlbmQgbm90aWZ5IGluc3BlY3RvciBmcm9udGVuZAorICAgIC8vIGNsaWVudCB0aGF0IGl0
J3MgY2xlYXJlZCBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGV4cG9zZSBpbnNwZWN0b3IgYmluZGlu
Z3MuCisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgJiYgZnJhbWUgPT0gbV9pbnNw
ZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENsaWVu
dC0+d2luZG93T2JqZWN0Q2xlYXJlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnN0YXJ0VGltZWxpbmVQcm9maWxlcigpCit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RhcnRU
aW1lbGluZVByb2ZpbGVyKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRp
bWVsaW5lUHJvZmlsZXIoKQoreworICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0b3BUaW1lbGluZVBy
b2ZpbGVyKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZyb250ZW5k
KCkKK3sKKyAgICBtX29wZW5pbmdGcm9udGVuZCA9IGZhbHNlOworICAgIG1faW5zcGVjdG9yRnJv
bnRlbmQgPSBuZXcgSW5zcGVjdG9yRnJvbnRlbmQobV9pbnNwZWN0b3JDbGllbnQpOworICAgIG1f
aW5zcGVjdG9yQWdlbnQtPnNldEZyb250ZW5kKG1faW5zcGVjdG9yRnJvbnRlbmQuZ2V0KCkpOwor
CisgICAgaWYgKCFJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kcygpKQorICAg
ICAgICBTY3JpcHRDb250cm9sbGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRFeGNl
cHRpb25zKHRydWUpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJvbnRlbmRDcmVh
dGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5k
KCkKK3sKKyAgICBtX2luc3BlY3RvckFnZW50LT5kaXNjb25uZWN0RnJvbnRlbmQoKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmRJbXBsKCkKK3sKKyAg
ICBpZiAoIW1faW5zcGVjdG9yRnJvbnRlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5z
cGVjdG9yRnJvbnRlbmQuY2xlYXIoKTsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZnJvbnRlbmREZWxldGVkKCk7CisgICAgaWYgKCFJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhh
c0Zyb250ZW5kcygpKQorICAgICAgICBTY3JpcHRDb250cm9sbGVyOjpzZXRDYXB0dXJlQ2FsbFN0
YWNrRm9yVW5jYXVnaHRFeGNlcHRpb25zKGZhbHNlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzaG93KCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG1fb3BlbmluZ0Zyb250ZW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9pbnNwZWN0b3JGcm9udGVuZCkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZC0+YnJpbmdU
b0Zyb250KCk7CisgICAgZWxzZSB7CisgICAgICAgIG1fb3BlbmluZ0Zyb250ZW5kID0gdHJ1ZTsK
KyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQtPm9wZW5JbnNwZWN0b3JGcm9udGVuZCh0aGlzKTsK
KyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xvc2UoKQoreworICAgIGlm
ICghbV9pbnNwZWN0b3JGcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1faW5zcGVjdG9y
RnJvbnRlbmQtPmRpc2Nvbm5lY3RGcm9tQmFja2VuZCgpOworICAgIGRpc2Nvbm5lY3RGcm9udGVu
ZCgpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0
ZUZyb21Db29raWUoY29uc3QgU3RyaW5nJiBpbnNwZWN0b3JTdGF0ZUNvb2tpZSkKK3sKKyAgICBt
X2luc3BlY3RvckFnZW50LT5yZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGluc3BlY3Rv
clN0YXRlQ29va2llKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpldmFsdWF0ZUZv
clRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCkKK3sKKyAg
ICBtX2luc3BlY3RvckFnZW50LT5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNhbGxJZCwgc2Ny
aXB0KTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaWdodChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+
ZHJhd05vZGVIaWdobGlnaHQoY29udGV4dCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6aW5zcGVjdChOb2RlKiBub2RlKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBzaG93KCk7CisKKyAgICBtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0KG5v
ZGUpOworfQorCitib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZWQoKSBjb25zdAorewor
ICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLT5zZXR0aW5ncygpLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVk
KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKGNvbnN0IFN0cmlu
ZyYgcGFuZWwpCiB7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IHNob3coKTsKKworICAgIG1faW5zcGVjdG9yQWdlbnQtPnNob3dQYW5lbChwYW5lbCk7CiB9CiAK
K2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQoKQorewor
ICAgIHJldHVybiBtX2luc3BlY3RvckFnZW50LT50aW1lbGluZUFnZW50KCk7Cit9CisKKyNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5h
YmxlUHJvZmlsZXIoKQoreworICAgIG1faW5zcGVjdG9yQWdlbnQtPmVuYWJsZVByb2ZpbGVyKCk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKCkKK3sKKyAg
ICBtX2luc3BlY3RvckFnZW50LT5kaXNhYmxlUHJvZmlsZXIoKTsKK30KKworYm9vbCBJbnNwZWN0
b3JDb250cm9sbGVyOjpwcm9maWxlckVuYWJsZWQoKQoreworICAgIHJldHVybiBtX2luc3BlY3Rv
ckFnZW50LT5wcm9maWxlckVuYWJsZWQoKTsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkZWJ1Z2dlckVuYWJsZWQoKQoreworICAgIHJldHVybiBtX2luc3BlY3RvckFnZW50LT5kZWJ1
Z2dlckVuYWJsZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93QW5kRW5h
YmxlRGVidWdnZXIoKQoreworICAgIG1faW5zcGVjdG9yQWdlbnQtPnNob3dBbmRFbmFibGVEZWJ1
Z2dlcigpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVEZWJ1Z2dlcigp
Cit7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZGlzYWJsZURlYnVnZ2VyKCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKK3sKKyAg
ICBtX2luc3BlY3RvckFnZW50LT5zdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpCit7
CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKK30K
KworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjppc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9m
aWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JBZ2VudC0+aXNSZWNvcmRpbmdV
c2VySW5pdGlhdGVkUHJvZmlsZSgpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNl
dEluc3BlY3RvckV4dGVuc2lvbkFQSShjb25zdCBTdHJpbmcmIHNvdXJjZSkKK3sKKyAgICBtX2lu
c3BlY3RvckFnZW50LT5zZXRJbnNwZWN0b3JFeHRlbnNpb25BUEkoc291cmNlKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN1bWUoKQoreworICAgIGlmIChJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JBZ2VudC0+ZGVidWdnZXJBZ2Vu
dCgpKQorICAgICAgICBkZWJ1Z2dlckFnZW50LT5yZXN1bWUoKTsKK30KKwordm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyAgICBtX2luc3BlY3RvckFnZW50LT5o
aWRlSGlnaGxpZ2h0KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzcGF0Y2hN
ZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX2luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLT5kaXNwYXRjaChtZXNzYWdlKTsKK30KKworI2VuZGlmCisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCA0
MmU5NjE1Li5lMzAyMjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmgKQEAgLTMxLDE3ICszMSw5MyBAQAogI2lmbmRlZiBJbnNwZWN0b3JDb250
cm9sbGVyX2gKICNkZWZpbmUgSW5zcGVjdG9yQ29udHJvbGxlcl9oCiAKLSNpbmNsdWRlICJJbnNw
ZWN0b3JBZ2VudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NV3JhcHBlcldvcmxk
OworY2xhc3MgRnJhbWU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnNwZWN0b3JB
Z2VudDsKK2NsYXNzIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9y
Q2xpZW50OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDsKIGNsYXNzIFBhZ2U7CitjbGFzcyBQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9u
dGVuZFRhc2s7CitjbGFzcyBOb2RlOwogCi0vLyBGSVhNRTogdGVtcG9yYXJ5IHNvbHV0aW9uLiBJ
dCB3aWxsIGJlY29tZSBhIHNlcGFyYXRlIGNsYXNzIGluIHRoZSBuZXh0IHBhdGNoIGFuZCBjb250
cm9sbGVyIHJlbGF0ZWQgc3Vic2V0IG9mIGZ1bmN0aW9ucyB3aWxsIGJlIG1vdmVkIGZyb20gSW5z
cGVjdG9yQWdlbnQgdG8gSW5zcGVjdG9yQ29udHJvbGVyLgotY2xhc3MgSW5zcGVjdG9yQ29udHJv
bGxlciA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudCB7CitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVy
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JDb250cm9sbGVyKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgQ29uc29sZVBhbmVsOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBFbGVtZW50
c1BhbmVsOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBQcm9maWxlc1BhbmVsOworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBTY3JpcHRzUGFuZWw7CisKICAgICBJbnNwZWN0b3JD
b250cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICB+SW5zcGVjdG9yQ29udHJv
bGxlcigpOworCisgICAgUGFnZSogaW5zcGVjdGVkUGFnZSgpIHsgcmV0dXJuIG1faW5zcGVjdGVk
UGFnZTsgfQorCisgICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNob3coKTsK
KyAgICB2b2lkIHNob3dQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsKTsKKyAgICB2b2lkIGNsb3Nl
KCk7CisKKyAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ+KTsKKyAgICBib29sIGhhc0luc3BlY3RvckZyb250ZW5kQ2xp
ZW50KCkgY29uc3Q7CisgICAgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUq
LCBET01XcmFwcGVyV29ybGQqKTsKKyAgICB2b2lkIHNldEluc3BlY3RvckV4dGVuc2lvbkFQSShj
b25zdCBTdHJpbmcmIHNvdXJjZSk7CisgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRl
bmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworICAgIGJvb2wgaGFzRnJvbnRlbmQoKSBjb25z
dCB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kOyB9CisgICAgdm9pZCBjb25uZWN0RnJvbnRl
bmQoKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9udGVuZCgpOworICAgIHZvaWQgcmVzdG9yZUlu
c3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvckNvb2tpZSk7CisK
KyAgICB2b2lkIGluc3BlY3QoTm9kZSopOworICAgIHZvaWQgZHJhd05vZGVIaWdobGlnaHQoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CisKKyAgICB2
b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYg
c2NyaXB0KTsKKworICAgIHZvaWQgc3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7CisgICAgdm9pZCBz
dG9wVGltZWxpbmVQcm9maWxlcigpOworICAgIGJvb2wgdGltZWxpbmVQcm9maWxlckVuYWJsZWQo
KTsKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIGJvb2wgcHJvZmlsZXJF
bmFibGVkKCk7CisgICAgdm9pZCBlbmFibGVQcm9maWxlcigpOworICAgIHZvaWQgc3RhcnRVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nKCk7CisgICAgYm9vbCBpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQ
cm9maWxlKCkgY29uc3Q7CisgICAgdm9pZCBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOwor
ICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKCk7CisgICAgdm9pZCBzaG93QW5kRW5hYmxlRGVidWdn
ZXIoKTsKKyAgICBib29sIGRlYnVnZ2VyRW5hYmxlZCgpOworICAgIHZvaWQgZGlzYWJsZURlYnVn
Z2VyKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKKyAgICBmcmllbmQgY2xhc3MgUG9zdFdvcmtlck5vdGlm
aWNhdGlvblRvRnJvbnRlbmRUYXNrOworCisgICAgdm9pZCBkaXNjb25uZWN0RnJvbnRlbmRJbXBs
KCk7IC8vIHVzZWQgYnkgSW5zcGVjdG9yQWdlbnQKKyAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7
CisKKyAgICBPd25QdHI8SW5zcGVjdG9yQWdlbnQ+IG1faW5zcGVjdG9yQWdlbnQ7CisgICAgT3du
UHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOworICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gbV9pbnNwZWN0b3JGcm9u
dGVuZENsaWVudDsKKyAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IG1faW5zcGVjdG9yRnJv
bnRlbmQ7CisgICAgUGFnZSogbV9pbnNwZWN0ZWRQYWdlOworICAgIEluc3BlY3RvckNsaWVudCog
bV9pbnNwZWN0b3JDbGllbnQ7CisgICAgYm9vbCBtX29wZW5pbmdGcm9udGVuZDsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsLmNwcAppbmRleCBjZWNiYzc2Li44MzMwNTdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwu
Y3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgdW5zaWduZWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZAogCiB2b2lkIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKIHsKLSAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKCktPmRpc3BhdGNoKG1lc3NhZ2UpOworICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY3BwCmluZGV4IDE3OTYyNTYuLmYyZTY2YmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCkBAIC0y
MDEsOCArMjAxLDggQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Om1vdmVXaW5kb3dCeShm
bG9hdCB4LCBmbG9hdCB5KSBjb25zdAogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2V0
RXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYgc2NyaXB0KQogewotICAgIEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3IgPSBtX2Zyb250ZW5kUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAg
IGluc3BlY3Rvci0+c2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKHNjcmlwdCk7CisgICAgQVNTRVJU
KG1fZnJvbnRlbmRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpOworICAgIG1fZnJvbnRlbmRQ
YWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvckV4dGVuc2lvbkFQSShzY3Jp
cHQpOwogfQogCiBTdHJpbmcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2NhbGl6ZWRTdHJpbmdz
VVJMKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5jcHAKaW5kZXggY2E3NThhMC4uMDc0NTA1ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTU1
MSw3ICs1NTEsNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZU1hcmtU
aW1lbGluZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvcgogICAgICAgICBTdHJpbmcgbWVz
c2FnZTsKICAgICAgICAgYXJndW1lbnRzLT5nZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcobWVzc2Fn
ZSk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZE1hcmtUaW1lbGluZShtZXNzYWdlKTsKLSAg
ICB9CisgICAgIH0KIH0KIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtNTY5
LDI0ICs1NjksMTcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZFByb2ZpbGVJ
bXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgUmUKICAgICB9CiB9CiAKLWJvb2wg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwcm9maWxlckVuYWJsZWRJbXBsKEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCkKLXsKLSAgICBpZiAoIWluc3BlY3RvckFnZW50LT5lbmFibGVk
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQq
IHByb2ZpbGVyQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+cHJvZmlsZXJBZ2VudCgpOwotICAgIGlm
ICghcHJvZmlsZXJBZ2VudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHBy
b2ZpbGVyQWdlbnQtPmVuYWJsZWQoKTsKLX0KLQogU3RyaW5nIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZUltcGwoSW5zcGVjdG9yQWdl
bnQqIGluc3BlY3RvckFnZW50LCBib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIpCiB7CiAgICAg
aWYgKEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBpbnNwZWN0b3JBZ2Vu
dC0+cHJvZmlsZXJBZ2VudCgpKQogICAgICAgICByZXR1cm4gcHJvZmlsZXJBZ2VudC0+Z2V0Q3Vy
cmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShpbmNyZW1lbnRQcm9maWxlTnVtYmVyKTsKICAg
ICByZXR1cm4gIiI7CiB9CisKK2Jvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwcm9maWxl
ckVuYWJsZWRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKK3sKKyAgICByZXR1
cm4gaW5zcGVjdG9yQWdlbnQtPnByb2ZpbGVyRW5hYmxlZCgpOworfQogI2VuZGlmCiAKICNpZiBF
TkFCTEUoREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggYTQzN2JhMi4uMWUzODJjYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAt
MTQwLDggKzE0MCw4IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
ICAgICBzdGF0aWMgdm9pZCBhZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUoUGFnZSos
IGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKTsKICAgICBzdGF0aWMgdm9pZCBhZGRQcm9maWxlKFBhZ2UqLCBSZWZQdHI8U2Ny
aXB0UHJvZmlsZT4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7Ci0gICAgc3RhdGljIGJv
b2wgcHJvZmlsZXJFbmFibGVkKFBhZ2UqKTsKICAgICBzdGF0aWMgU3RyaW5nIGdldEN1cnJlbnRV
c2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoUGFnZSosIGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJl
cik7CisgICAgc3RhdGljIGJvb2wgcHJvZmlsZXJFbmFibGVkKFBhZ2UqKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQpAQCAtMTc2LDggKzE3NiwxMCBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgZnJvbnRlbmRDcmVhdGVkKCkgeyBzX2Zyb250ZW5kQ291bnRlciArPSAxOyB9CiAg
ICAgc3RhdGljIHZvaWQgZnJvbnRlbmREZWxldGVkKCkgeyBzX2Zyb250ZW5kQ291bnRlciAtPSAx
OyB9CiAgICAgc3RhdGljIGJvb2wgaGFzRnJvbnRlbmRzKCkgeyByZXR1cm4gc19mcm9udGVuZENv
dW50ZXI7IH0KKyAgICBzdGF0aWMgYm9vbCBoYXNGcm9udGVuZChQYWdlKik7CiAjZWxzZQogICAg
IHN0YXRpYyBib29sIGhhc0Zyb250ZW5kcygpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGlj
IGJvb2wgaGFzRnJvbnRlbmQoUGFnZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAogcHJp
dmF0ZToKQEAgLTI1NCw4ICsyNTYsOCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQogICAgIHN0YXRpYyB2b2lkIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29u
c29sZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgc3RhdGljIHZvaWQgYWRk
UHJvZmlsZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4sIFBhc3NS
ZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7Ci0gICAgc3RhdGljIGJvb2wgcHJvZmlsZXJFbmFibGVk
SW1wbChJbnNwZWN0b3JBZ2VudCopOwogICAgIHN0YXRpYyBTdHJpbmcgZ2V0Q3VycmVudFVzZXJJ
bml0aWF0ZWRQcm9maWxlTmFtZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBib29sIGluY3JlbWVudFBy
b2ZpbGVOdW1iZXIpOworICAgIHN0YXRpYyBib29sIHByb2ZpbGVyRW5hYmxlZEltcGwoSW5zcGVj
dG9yQWdlbnQqKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQpAQCAtODM0LDYgKzgz
NiwxNiBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnVwZGF0ZUFwcGxp
Y2F0aW9uQ2FjaGVTdGF0dXMoRnJhbWUqIGZyYW1lKQogfQogI2VuZGlmCiAKK2lubGluZSBib29s
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmQoUGFnZSogcGFnZSkKK3sKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIHJldHVybiBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVu
ZEZvclBhZ2UocGFnZSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogaW5saW5lIEluc3BlY3RvckFnZW50KiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246Omluc3BlY3RvckFnZW50Rm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5k
ZXggZjU3NWM3Zi4uN2RmYmRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CkBAIC0yOTc1LDEwICsyOTc1LDEwIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFm
dGVyTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzCiAgICAgaWYg
KCFtX2ZyYW1lLT5wYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKSAmJiBFTkFCTEUoSU5TUEVDVE9SKSAmJiBVU0UoSlNDKQorI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQogICAgIGlmIChQYWdlKiBwYWdlID0g
bV9mcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIGlmIChwYWdlLT5tYWluRnJhbWUoKSA9PSBtX2Zy
YW1lKQotICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5yZXN1bWUoKTsK
KyAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5yZXN1
bWUoKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMzM4MCw2ICszMzgwLDExIEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKERPTVdyYXBwZXJXb3Js
ZCogd29ybGQpCiAKICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdElu
V29ybGQod29ybGQpOwogCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoUGFnZSogcGFn
ZSA9IG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5kaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQobV9mcmFtZSwgd29ybGQpOworI2VuZGlmCisK
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3Js
ZChtX2ZyYW1lLCB3b3JsZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNzNl
MTc5Zi4uMzkxZGIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBA
QAorMjAxMS0wMi0wMiAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBtb3ZlIEluc3BlY3RvckNvbnRyb2xsZXIncyBtZXRob2RzIGZyb20gSW5zcGVjdG9y
QWdlbnQgdG8gSW5zcGVjdG9yQ29udHJvbGxlci4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMxNjkKKworICAgICAgICBNaW5vciBjaGFuZ2UgZW5m
b3JjZWQgYnkgbWFqb3IgY2hhbmdlcyBpbiBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLgorCisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpc3BhdGNoT25JbnNwZWN0b3JCYWNr
ZW5kKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMS0wMi0wNyAgQWxleGV5
IE1hcmluaWNoZXYgIDxhbWFyaW5pY2hldkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCmluZGV4IDVjMDM5ZjEuLjJmOTNkMDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5j
cHAKQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRDbGVh
cldpbmRvd09iamVjdChXZWJGcmFtZUltcGwqIHdlYmZyYW1lKQogCiB2b2lkIFdlYkRldlRvb2xz
QWdlbnRJbXBsOjpkaXNwYXRjaE9uSW5zcGVjdG9yQmFja2VuZChjb25zdCBXZWJTdHJpbmcmIG1l
c3NhZ2UpCiB7Ci0gICAgaW5zcGVjdG9yQ29udHJvbGxlcigpLT5pbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcigpLT5kaXNwYXRjaChtZXNzYWdlKTsKKyAgICBpbnNwZWN0b3JDb250cm9sbGVyKCkt
PmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKIH0KIAogdm9pZCBXZWJEZXZU
b29sc0FnZW50SW1wbDo6aW5zcGVjdEVsZW1lbnRBdChjb25zdCBXZWJQb2ludCYgcG9pbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBkMTY0YTQ4Li43NjQw
Y2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTUzLDYg
KzUzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0
OworY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhpc3RvcnlJdGVt
OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBiNmM4YzAwLi4yZjE2
ZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDItMDIgIElseWEg
VGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IFl1cnkgU2VtaWtoYXRza3kuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBJbnNwZWN0
b3JDb250cm9sbGVyJ3MgbWV0aG9kcyBmcm9tIEluc3BlY3RvckFnZW50IHRvIEluc3BlY3RvckNv
bnRyb2xsZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUzMTY5CisKKyAgICAgICAgTWlub3IgY2hhbmdlIGVuZm9yY2VkIGJ5IG1ham9yIGNoYW5n
ZXMgaW4gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHA6CisgICAgICAgICogd2Via2l0
L3dlYmtpdHdlYmluc3BlY3Rvci5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX2luc3BlY3Rvcl9n
ZXRfcHJvcGVydHkpOgorCiAyMDExLTAyLTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xp
ZW50R3RrLmNwcAppbmRleCBiZDZhMTk4Li42NmYzNzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAKQEAgLTIz
LDYgKzIzLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIndlYmtpdHZlcnNpb24uaCIK
ICNpbmNsdWRlICJ3ZWJraXR3ZWJpbnNwZWN0b3IuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5jcHAKaW5kZXggZGY2M2M2My4uOGI1YjVhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkludFBvaW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCkBAIC0zOTcsNyAr
Mzk4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1YKICNlbmRpZgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFBST1BfVElNRUxJTkVfUFJPRklMSU5HX0VOQUJMRUQ6Ci0gICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
dGltZWxpbmVBZ2VudCgpICE9IDApOworICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCBwcml2LT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnRpbWVsaW5lUHJvZmlsZXJFbmFi
bGVkKCkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKaW5kZXggYTc2OWQxZC4uZWNhZGRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2IEBACisyMDExLTAyLTAyICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IG1vdmUgSW5zcGVjdG9yQ29udHJvbGxlcidzIG1ldGhvZHMgZnJvbSBJbnNw
ZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzE2OQorCisgICAgICAgIE1pbm9yIGNoYW5n
ZSBlbmZvcmNlZCBieSBtYWpvciBjaGFuZ2VzIGluIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuCisKKyAgICAgICAgKiBXZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1tOgor
ICAgICAgICAoLVtXZWJJbnNwZWN0b3IgaXNUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWRdKToKKwog
MjAxMS0wMi0wNyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIEFkYW0gUm9iZW4gYW5kIERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tbSBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0KaW5kZXggOGFiMDQ5Zi4uYzAwMGYwYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1tCkBA
IC0xNTcsNyArMTU3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAtIChCT09MKWlzVGlt
ZWxpbmVQcm9maWxpbmdFbmFibGVkCiB7CiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlKF93ZWJW
aWV3KSkKLSAgICAgICAgcmV0dXJuIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+dGltZWxp
bmVBZ2VudCgpID8gWUVTIDogTk87CisgICAgICAgIHJldHVybiBwYWdlLT5pbnNwZWN0b3JDb250
cm9sbGVyKCktPnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKCkgPyBZRVMgOiBOTzsKICAgICByZXR1
cm4gTk87CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRRdC5jcHAKaW5kZXggNmFlYzVlMi4uZjM2NGIyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAK
QEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRRdC5oIgogCiAjaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclNlcnZlclF0LmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yU2VydmVyUXQuY3BwCmluZGV4IGJh
ZDI2YTQuLmY4M2RlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yU2VydmVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yU2VydmVyUXQuY3BwCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU2VydmVyUXQuaCIKIAotI2luY2x1ZGUgIklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50UXQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTUQ1LmgiCkBA
IC0zNjQsNyArMzYzLDcgQEAgdm9pZCBJbnNwZWN0b3JTZXJ2ZXJSZXF1ZXN0SGFuZGxlclF0Ojp3
ZWJTb2NrZXRSZWFkeVJlYWQoKQogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgICAgIGlmICht
X2luc3BlY3RvckNsaWVudCkgewogICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3Bl
Y3RvckNvbnRyb2xsZXIgPSBtX2luc3BlY3RvckNsaWVudC0+bV9pbnNwZWN0ZWRXZWJQYWdlLT5k
LT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7Ci0gICAgICAgICAgaW5zcGVjdG9yQ29udHJv
bGxlci0+aW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoKS0+ZGlzcGF0Y2goUVN0cmluZzo6ZnJv
bVV0ZjgocGF5bG9hZCkpOworICAgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpc3BhdGNo
TWVzc2FnZUZyb21Gcm9udGVuZChRU3RyaW5nOjpmcm9tVXRmOChwYXlsb2FkKSk7CiAgICAgICAg
IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggZGE2MjM5Ny4uZTYyMzkyYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTAyLTAyICBJbHlhIFRpa2hvbm92c2t5
ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlr
aGF0c2t5LgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgSW5zcGVjdG9yQ29udHJvbGxl
cidzIG1ldGhvZHMgZnJvbSBJbnNwZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JDb250cm9sbGVyLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzE2OQor
CisgICAgICAgIE1pbm9yIGNoYW5nZSBlbmZvcmNlZCBieSBtYWpvciBjaGFuZ2VzIGluIFdlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuCisKKyAgICAgICAgKiBXZWJJbnNwZWN0
b3IuY3BwOgorICAgICAgICAoV2ViSW5zcGVjdG9yOjppc1RpbWVsaW5lUHJvZmlsaW5nRW5hYmxl
ZCk6CisKIDIwMTEtMDItMDcgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBBZGFtIFJvYmVuIGFuZCBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luL1dlYkluc3BlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJJbnNwZWN0b3IuY3BwCmluZGV4IGMzODIzYjIuLjRlOTVmZDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYkluc3BlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2Vi
SW5zcGVjdG9yLmNwcApAQCAtMjc3LDcgKzI3Nyw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViSW5zcGVjdG9yOjppc1RpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZChCT09MKiBpc0VuYWJs
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gU19PSzsKIAotICAgICppc0VuYWJsZWQg
PSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnRpbWVsaW5lQWdlbnQoKSAhPSAwOworICAg
ICppc0VuYWJsZWQgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnRpbWVsaW5lUHJvZmls
ZXJFbmFibGVkKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>