<?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>49914</bug_id>
          
          <creation_ts>2010-11-22 09:10:33 -0800</creation_ts>
          <short_desc>Merge GraphicsContextPrivate into GraphicsContext</short_desc>
          <delta_ts>2010-12-10 08:03:31 -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>Layout and Rendering</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Renata Hodovan">rhodovan.u-szeged</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>kbalazs</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>312372</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-11-22 09:10:33 -0800</bug_when>
    <thetext>From GraphicsContext.h:

GraphicsContextPrivate* m_common;
GraphicsContextPlatformPrivate* m_data; // Deprecated; m_commmon can just be downcasted. To be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315085</commentid>
    <comment_count>1</comment_count>
      <attachid>75155</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-11-30 09:11:25 -0800</bug_when>
    <thetext>Created attachment 75155
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315094</commentid>
    <comment_count>2</comment_count>
      <attachid>75155</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-11-30 09:22:12 -0800</bug_when>
    <thetext>Comment on attachment 75155
Patch

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

&gt; WebCore/platform/graphics/GraphicsContext.h:445
&gt;          static GraphicsContextPrivate* createGraphicsContextPrivate();
&gt;          static void destroyGraphicsContextPrivate(GraphicsContextPrivate*);

These two methods should be removed since they are no longer used/needed.

&gt; WebCore/platform/graphics/wx/GraphicsContextWx.cpp:139
&gt;      destroyGraphicsContextPrivate(m_common);
&gt; -    delete m_data;
&gt; +    delete platformPrivate();

This will crash! (Double delete)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315109</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-30 09:44:50 -0800</bug_when>
    <thetext>Attachment 75155 did not build on mac:
Build output: http://queues.webkit.org/results/6461021</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315111</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-30 09:48:16 -0800</bug_when>
    <thetext>Attachment 75155 did not build on gtk:
Build output: http://queues.webkit.org/results/6328116</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315116</commentid>
    <comment_count>5</comment_count>
      <attachid>75155</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-11-30 09:52:49 -0800</bug_when>
    <thetext>Comment on attachment 75155
Patch

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

Generally the patch would do it&apos;s job correctly, but I am doubtful about what do we win with that.
As I see a renaming from GraphicsContextPrivate to GraphicsContextState and m_common to m_state would be
enough to make the roles of those member clear.  Could you give some arguments of the change in the ChangeLog?

&gt; WebCore/platform/graphics/GraphicsContext.h:-448
&gt;          GraphicsContextPrivate* m_common;
&gt; -        GraphicsContextPlatformPrivate* m_data; // Deprecated; m_commmon can just be downcasted. To be removed.

I think m_common should be renamed to m_data.

&gt; WebCore/platform/graphics/cg/GraphicsContextCG.cpp:114
&gt;  }
&gt;  
&gt;  GraphicsContext::GraphicsContext(CGContextRef cgContext)
&gt; -    : m_common(createGraphicsContextPrivate())
&gt; -    , m_data(new GraphicsContextPlatformPrivate(cgContext))
&gt; +    : m_common(new GraphicsContextPlatformPrivate(cgContext))
&gt;  {
&gt;      setPaintingDisabled(!cgContext);
&gt;      if (cgContext) {

After this change nobody should ever create a GraphicsContextPrivate object so it&apos;s constructor should be private (with a comment maybe).

&gt; WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:173
&gt; +    rgb_color oldColor = platformPrivate()-&gt;m_view-&gt;HighColor();
&gt; +    platformPrivate()-&gt;m_view-&gt;SetHighColor(color);
&gt; +    platformPrivate()-&gt;m_view-&gt;FillRect(rect);
&gt; +    platformPrivate()-&gt;m_view-&gt;SetHighColor(oldColor);

platformPrivate() should be assigned to a local variable. I am not sure about what is the preferred style, but maybe you should do it in every case when 
you call a getter more than once in a function. Personally I am OK with calling it twice (but not more) because it is just an inline getter.

&gt; WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:296
&gt; +    float oldSize = platformPrivate()-&gt;m_view-&gt;PenSize();
&gt; +    platformPrivate()-&gt;m_view-&gt;SetPenSize(width);
&gt; +    platformPrivate()-&gt;m_view-&gt;StrokeRect(rect, getHaikuStrokeStyle());
&gt; +    platformPrivate()-&gt;m_view-&gt;SetPenSize(oldSize);

Ditto.

&gt; WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:317
&gt; -    m_data-&gt;m_view-&gt;SetLineMode(mode, m_data-&gt;m_view-&gt;LineJoinMode(), m_data-&gt;m_view-&gt;LineMiterLimit());
&gt; +    platformPrivate()-&gt;m_view-&gt;SetLineMode(mode, platformPrivate()-&gt;m_view-&gt;LineJoinMode(), platformPrivate()-&gt;m_view-&gt;LineMiterLimit());

Ditto. I will not repeat that observation in the rest of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315126</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-11-30 10:06:32 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; As I see a renaming from GraphicsContextPrivate to GraphicsContextState and m_common to m_state would be
&gt; enough to make the roles of those member clear.

GraphicsContextPrivate has a member &quot;GraphicsContextPrivate::GraphicsContextState state&quot; so this would be rather confusing, e.g &quot;m_state-&gt;state&quot;

&gt; I think m_common should be renamed to m_data.

Agreed.

&gt; platformPrivate() should be assigned to a local variable. I am not sure about what is the preferred style, but maybe you should do it in every case when 
&gt; you call a getter more than once in a function. Personally I am OK with calling it twice (but not more) because it is just an inline getter.

I don&apos;t know if there&apos;s a preferred style, but I agree that repeating platformPrivate() all over the place is rather ugly. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315264</commentid>
    <comment_count>7</comment_count>
      <attachid>75155</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-11-30 13:17:19 -0800</bug_when>
    <thetext>Comment on attachment 75155
Patch

Resetting r- as the patch has numerous issues. (Guess the re-r? was accidental.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315340</commentid>
    <comment_count>8</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-11-30 15:09:10 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; As I see a renaming from GraphicsContextPrivate to GraphicsContextState and m_common to m_state would be
&gt; &gt; enough to make the roles of those member clear.
&gt; 
&gt; GraphicsContextPrivate has a member &quot;GraphicsContextPrivate::GraphicsContextState state&quot; so this would be rather confusing, e.g &quot;m_state-&gt;state&quot;

That&apos;s true but the point is that we are trying to merge two different
things into one class. Actually GraphicsContextPrivate is just data (no methods)
so we could simply merge it into GraphicsContext and let GraphicsContextPlatformPrivate
as it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315570</commentid>
    <comment_count>9</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-12-01 01:29:12 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; That&apos;s true but the point is that we are trying to merge two different
&gt; things into one class. Actually GraphicsContextPrivate is just data (no methods)
&gt; so we could simply merge it into GraphicsContext and let GraphicsContextPlatformPrivate
&gt; as it is.

You are absolutely right, this would be a lot cleaner. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316106</commentid>
    <comment_count>10</comment_count>
      <attachid>75370</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-12-02 06:29:00 -0800</bug_when>
    <thetext>Created attachment 75370
Patch

This patch follows the previous suggestions. I merged all data from GraphicsContextPrivate into GraphicsContext and removed the m_common member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316116</commentid>
    <comment_count>11</comment_count>
      <attachid>75370</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-12-02 06:46:04 -0800</bug_when>
    <thetext>Comment on attachment 75370
Patch

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

Good patch with not so good Changelog.

&gt; WebCore/ChangeLog:9
&gt; +        GraphicsContext: Merge m_common and m_data
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=49914
&gt; +
&gt; +        Move data members from GraphicsContextPrivate into GraphicsContext. So the m_common member became unnecessary.
&gt; +        It is removed.

Why? I know but the Changelog should contain arguments for the change. Don&apos;t sparing with the words in Changelog&apos;s! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316802</commentid>
    <comment_count>12</comment_count>
      <attachid>75370</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-12-03 06:12:12 -0800</bug_when>
    <thetext>Comment on attachment 75370
Patch

Removing r? since Reni is working on a new version of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317792</commentid>
    <comment_count>13</comment_count>
      <attachid>75729</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-12-06 12:32:37 -0800</bug_when>
    <thetext>Created attachment 75729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317848</commentid>
    <comment_count>14</comment_count>
      <attachid>75737</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-12-06 14:26:58 -0800</bug_when>
    <thetext>Created attachment 75737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317907</commentid>
    <comment_count>15</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-12-06 16:18:37 -0800</bug_when>
    <thetext>Attachment 75737 did not build on win:
Build output: http://queues.webkit.org/results/6851058</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318050</commentid>
    <comment_count>16</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-12-06 21:04:04 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Attachment 75737 [details] did not build on win:
&gt; Build output: http://queues.webkit.org/results/6851058

3&gt;..\platform\graphics\win\GraphicsContextCGWin.cpp(65) : error C2511: &apos;void WebCore::GraphicsContext::platformInit(HDC,bool)&apos; : overloaded member function not found in &apos;WebCore::GraphicsContext&apos;
3&gt;        c:\cygwin\home\buildbot\WebKit\WebCore\platform\graphics\GraphicsContext.h(200) : see declaration of &apos;WebCore::GraphicsContext&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318054</commentid>
    <comment_count>17</comment_count>
      <attachid>75737</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-12-06 21:17:57 -0800</bug_when>
    <thetext>Comment on attachment 75737
Patch

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

Getting better, but not quite there yet. :)

First and foremost your copy of GraphicsContextState appears to be out-of-date, smfr reordered the members in &lt;http://trac.webkit.org/changeset/73292&gt;

&gt; WebCore/platform/graphics/GraphicsContext.cpp:102
&gt; +        LOG_ERROR(&quot;ERROR void GraphicsContext::restore() m_stack is empty&quot;);

Nit: I suspect that &quot;stack&quot; here refers to the state stack, not the actual variable name.

&gt; WebCore/platform/graphics/GraphicsContext.h:206
&gt; +        virtual ~GraphicsContext();
&gt; +
&gt; +        virtual void platformInit(PlatformGraphicsContext*);
&gt; +        virtual void platformDestroy();

These should not be virtual! Nothing inherits from GraphicsContext.

&gt; WebCore/platform/graphics/GraphicsContext.h:243
&gt; +        GraphicsContextState state() const;

This should return a &apos;const GraphicsContextState&amp;&apos; instead of a copy.

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:202
&gt; -GraphicsContext::GraphicsContext(PlatformGraphicsContext* cr)
&gt; -    : m_common(createGraphicsContextPrivate())
&gt; -    , m_data(new GraphicsContextPlatformPrivate)
&gt; +void GraphicsContext::platformInit(PlatformGraphicsContext* cr)
&gt;  {
&gt; +    m_data = new GraphicsContextPlatformPrivate;

Why are you switching away from using initializer list syntax for m_data?
(This comment repeated for all GraphicsContext implementations.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318113</commentid>
    <comment_count>18</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-12-07 03:14:33 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Why are you switching away from using initializer list syntax for m_data?
&gt; (This comment repeated for all GraphicsContext implementations.)

Ehm. Disregard this, I am an idiot. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318137</commentid>
    <comment_count>19</comment_count>
      <attachid>75799</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-12-07 04:51:27 -0800</bug_when>
    <thetext>Created attachment 75799
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318145</commentid>
    <comment_count>20</comment_count>
      <attachid>75799</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-12-07 05:31:04 -0800</bug_when>
    <thetext>Comment on attachment 75799
Patch

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

&gt; WebCore/ChangeLog:9
&gt; +        and  m_common member became unnecessary. They are removed.

Double space after &apos;and&apos;.
s/m_common member/m_common/

&gt; WebCore/ChangeLog:10
&gt; +        Add two virtual methods to GraphicsContext: platformInit() and platformDestroy(), which

Not virtual anymore.

&gt; WebCore/platform/graphics/GraphicsContext.h:208
&gt; +        void platformInit(PlatformGraphicsContext*);
&gt; +        void platformDestroy();

These methods should be private.

&gt; WebCore/platform/graphics/GraphicsContext.h:245
&gt; +        const GraphicsContextState&amp; state();

Should be &quot;const GraphicsContext&amp; state() const&quot; since the method doesn&apos;t modify any GraphicsContext members.

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:75
&gt; +    GraphicsContextState state = context-&gt;state();

Avoid the unnecessary copy:
const GraphicsContextState&amp; state = context-&gt;state();

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:96
&gt; +    GraphicsContextState state = context-&gt;state();

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318150</commentid>
    <comment_count>21</comment_count>
      <attachid>75806</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-12-07 05:59:56 -0800</bug_when>
    <thetext>Created attachment 75806
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318151</commentid>
    <comment_count>22</comment_count>
      <attachid>75806</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-12-07 06:02:37 -0800</bug_when>
    <thetext>Comment on attachment 75806
Patch

Excellent, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318674</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-07 23:34:59 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 75806:

http/tests/misc/script-async.html
java/lc3/JSObject/ToObject-001.html

Please file bugs against the tests.  These tests were authored by ap@webkit.org and tonyg@chromium.org.  The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318679</commentid>
    <comment_count>24</comment_count>
      <attachid>75806</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-08 00:05:36 -0800</bug_when>
    <thetext>Comment on attachment 75806
Patch

Clearing flags on attachment: 75806

Committed r73492: &lt;http://trac.webkit.org/changeset/73492&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318680</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-08 00:05:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318693</commentid>
    <comment_count>26</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2010-12-08 01:07:34 -0800</bug_when>
    <thetext>Hi,

Your change caused a LOT of pixel test failures on Chromium&apos;s canary bot. Sounds like Linux bot is producing ~350 test failures. Windows and Mac bots are still compiling, and I guess they are likely to fail as well.

As far as I looked at the test results, &lt;input&gt; controls are not rendered correctly (border of input text box is missing, radio button is not rendered at all, and so forth). Do you have any ideas about this breakage? I&apos;d like to hear from you as soon as possible because these failures seems pretty severe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318694</commentid>
    <comment_count>27</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2010-12-08 01:26:55 -0800</bug_when>
    <thetext>I confirmed that Mac WebKit (non-Chromium) also causes a lot of pixel test failures as well.

I&apos;m going to roll out this change for this reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318696</commentid>
    <comment_count>28</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2010-12-08 01:35:22 -0800</bug_when>
    <thetext>Reverted r73492 for reason:

Caused a lot of pixel test failures and broke Windows build

Committed r73496: &lt;http://trac.webkit.org/changeset/73496&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319341</commentid>
    <comment_count>29</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-12-09 02:16:12 -0800</bug_when>
    <thetext>@Reni: The problem here was most likely the missing initialization of GraphicsContext::m_updatingControlTints</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320134</commentid>
    <comment_count>30</comment_count>
      <attachid>76191</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-12-10 07:01:46 -0800</bug_when>
    <thetext>Created attachment 76191
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320138</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-10 07:11:37 -0800</bug_when>
    <thetext>Attachment 76191 did not build on chromium:
Build output: http://queues.webkit.org/results/6991032</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320142</commentid>
    <comment_count>32</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-12-10 07:17:55 -0800</bug_when>
    <thetext>Attachment 76191 did not build on qt:
Build output: http://queues.webkit.org/results/6975024</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320144</commentid>
    <comment_count>33</comment_count>
      <attachid>76193</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-12-10 07:24:30 -0800</bug_when>
    <thetext>Created attachment 76193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320156</commentid>
    <comment_count>34</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-12-10 07:47:09 -0800</bug_when>
    <thetext>Attachment 76191 did not build on win:
Build output: http://queues.webkit.org/results/6906041</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320159</commentid>
    <comment_count>35</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-12-10 08:03:31 -0800</bug_when>
    <thetext>This was landed in &lt;http://trac.webkit.org/changeset/73728&gt;, closing..</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75155</attachid>
            <date>2010-11-30 09:11:25 -0800</date>
            <delta_ts>2010-12-02 06:29:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>mergeCommonAndData_v1.1.patch</filename>
            <type>text/plain</type>
            <size>97548</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjkxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAxIEBACisyMDEwLTExLTMwICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBH
cmFwaGljc0NvbnRleHQ6IE1lcmdlIG1fY29tbW9uIGFuZCBtX2RhdGEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTE0CisKKyAgICAgICAgTWFrZSBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgaW5oZXJpdCBmcm9tIEdyYXBoaWNzQ29udGV4
dFByaXZhdGUgY2xhc3MuCisgICAgICAgIFJlbW92ZSB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgbV9k
YXRhIGFuZCBhZGQgcGxhdGZvcm1Qcml2YXRlKCkgYWNjZXNzb3IgZm9yIG1fY29tbW9uIHRoYXQg
ZG93bmNhc3RzIHRvIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS4KKworICAgICAgICBO
byBuZXcgdGVzdCBpcyBuZWVkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZv
cm1Qcml2YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Ojpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGVDRy5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VBcmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3Q29udmV4UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzdHJva2VBcmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
dmV4UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpiZWdpblBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojph
ZGRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlj
a25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZp
bGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdF
bGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBv
bHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9s
eWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6YmVnaW5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YWRkUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmluVHJhbnNw
YXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjdXJyZW50
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbnRleHRTaGFkb3cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6cHVzaFRyYW5zcGFyZW5jeUxheWVySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpv
aW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhp
Y2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1G
aWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJl
bGVhc2VXaW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6dGFrZU93bmVyc2hpcE9mUGxhdGZvcm1Db250ZXh0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2
ZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JUZXh0Q2hlY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRD
VE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpiZWdpblBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjphZGRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQp
OgorCiAyMDEwLTExLTI1ICBTYXRpc2ggU2FtcGF0aCAgPHNhdGlzaEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDcyOTA4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQ0LDggKzQ0NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBHcmFw
aGljc0NvbnRleHRQcml2YXRlKiBjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCk7CiAgICAg
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKEdyYXBoaWNzQ29u
dGV4dFByaXZhdGUqKTsKIAorICAgICAgICBpbmxpbmUgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKiBwbGF0Zm9ybVByaXZhdGUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqPiht
X2NvbW1vbik7CisgICAgICAgIH0KKwogICAgICAgICBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBt
X2NvbW1vbjsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGE7
IC8vIERlcHJlY2F0ZWQ7IG1fY29tbW1vbiBjYW4ganVzdCBiZSBkb3duY2FzdGVkLiBUbyBiZSBy
ZW1vdmVkLgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fp
cm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgJKHJldmlzaW9uIDcyOTA4KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGVDYWlyby5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMCArNDMsMTEgQEAgdHlwZWRlZiBzdHJ1
Y3QgX0dka0V4cG9zZUV2ZW50IEdka0V4cG9zZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSB7CitjbGFzcyBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSB7CiBwdWJs
aWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKLSAgICAgICAgOiBjcigw
KQorICAgICAgICA6IEdyYXBoaWNzQ29udGV4dFByaXZhdGUoKQorICAgICAgICAsIGNyKDApCiAj
aWYgUExBVEZPUk0oR1RLKQogICAgICAgICAsIGV4cG9zZSgwKQogI2VsaWYgUExBVEZPUk0oV0lO
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAJKHJldmlzaW9uIDcyOTA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgs
NyBAQCBDR0NvbG9yU3BhY2VSZWYgbGluZWFyUkdCQ29sb3JTcGFjZVJlZigpCiB9CiAKIEdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCi0gICAg
OiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgLCBtX2RhdGEo
bmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQpKQorICAgIDogbV9j
b21tb24obmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQpKQogewog
ICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNnQ29udGV4dCk7CiAgICAgaWYgKGNnQ29udGV4dCkg
ewpAQCAtMTIxLDE1ICsxMjAsMTQgQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQo
Q0dDb250ZQogCiBHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewotICAgIGRl
c3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKLSAgICBkZWxldGUgbV9kYXRh
OworICAgIGRlbGV0ZSBwbGF0Zm9ybVByaXZhdGUoKTsKIH0KIAogQ0dDb250ZXh0UmVmIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIXBhaW50
aW5nRGlzYWJsZWQoKSk7Ci0gICAgQVNTRVJUKG1fZGF0YS0+bV9jZ0NvbnRleHQpOwotICAgIHJl
dHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOworICAgIEFTU0VSVChwbGF0Zm9ybVByaXZh
dGUoKS0+bV9jZ0NvbnRleHQpOworICAgIHJldHVybiBwbGF0Zm9ybVByaXZhdGUoKS0+bV9jZ0Nv
bnRleHQuZ2V0KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0
ZSgpCkBAIC0xMzcsNyArMTM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9y
bVN0YXRlKAogICAgIC8vIE5vdGU6IERvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhp
cyBjbGFzcyBpbXBsZW1lbnRhdGlvbiwgc2luY2Ugd2Ugd2FudCB0byBhdm9pZCB0aGUgZXh0cmEK
ICAgICAvLyBzYXZlIG9mIHRoZSBzZWNvbmRhcnkgY29udGV4dCAoaW4gR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlQ0cuaCkuCiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShwbGF0Zm9ybUNv
bnRleHQoKSk7Ci0gICAgbV9kYXRhLT5zYXZlKCk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPnNh
dmUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkK
QEAgLTE0NSw4ICsxNDMsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3Jt
U3RhCiAgICAgLy8gTm90ZTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIGNs
YXNzIGltcGxlbWVudGF0aW9uLCBzaW5jZSB3ZSB3YW50IHRvIGF2b2lkIHRoZSBleHRyYQogICAg
IC8vIHJlc3RvcmUgb2YgdGhlIHNlY29uZGFyeSBjb250ZXh0IChpbiBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVDRy5oKS4KICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKHBsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBtX2RhdGEtPnJlc3RvcmUoKTsKLSAgICBtX2RhdGEtPm1fdXNlclRv
RGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKKyAgICBwbGF0Zm9ybVBy
aXZhdGUoKS0+cmVzdG9yZSgpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3VzZXJUb0Rldmlj
ZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKIC8vIERyYXdzIGEgZmls
bGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCkBAIC02NTUsNyArNjUzLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZQogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KHBs
YXRmb3JtQ29udGV4dCgpLCByZWN0KTsKLSAgICBtX2RhdGEtPmNsaXAocmVjdCk7CisgICAgcGxh
dGZvcm1Qcml2YXRlKCktPmNsaXAocmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC03MDksOCArNzA3LDggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TAogICAgIENHQ29udGV4dFNhdmVHU3RhdGUo
Y29udGV4dCk7CiAgICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgb3BhY2l0eSk7CiAgICAg
Q0dDb250ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcihjb250ZXh0LCAwKTsKLSAgICBtX2RhdGEt
PmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJh
bnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+
YmVnaW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3VzZXJU
b0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCkBAIC03MjAsOCArNzE4LDggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheQogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0RW5kVHJhbnNwYXJl
bmN5TGF5ZXIoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsK
LSAgICBtX2RhdGEtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgbV9kYXRhLT5tX3VzZXJU
b0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CisgICAgcGxhdGZvcm1Q
cml2YXRlKCktPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCkt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYg
b2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSkKQEAgLTg4OSw3ICs4ODcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25z
dCBQYXRoJiBwCiAgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9y
bVBhdGgoKSk7CiAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7CiAgICAgfQotICAgIG1f
ZGF0YS0+Y2xpcChwYXRoKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+Y2xpcChwYXRoKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCkKQEAg
LTkxMyw4ICs5MTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRT
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIENHQ29u
dGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOwotICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0Rldmlj
ZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CisgICAgcGxhdGZvcm1Qcml2YXRl
KCktPnNjYWxlKHNpemUpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3VzZXJUb0RldmljZVRy
YW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGUpCkBAIC05MjIsOCArOTIwLDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBDR0NvbnRleHRSb3RhdGVDVE0ocGxhdGZvcm1Db250ZXh0
KCksIGFuZ2xlKTsKLSAgICBtX2RhdGEtPnJvdGF0ZShhbmdsZSk7Ci0gICAgbV9kYXRhLT5tX3Vz
ZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CisgICAgcGxhdGZv
cm1Qcml2YXRlKCktPnJvdGF0ZShhbmdsZSk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPm1fdXNl
clRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQpAQCAtOTMxLDggKzky
OSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgQ0dDb250ZXh0VHJhbnNs
YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKLSAgICBtX2RhdGEtPnRyYW5zbGF0ZSh4
LCB5KTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRp
dHkgPSBmYWxzZTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+dHJhbnNsYXRlKHgsIHkpOworICAg
IHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50
aXR5ID0gZmFsc2U7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCkBAIC05NDAsOCArOTM4LDggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZgogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBDR0NvbnRleHRDb25jYXRDVE0ocGxhdGZvcm1Db250
ZXh0KCksIHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAg
ICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxz
ZTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CisgICAgcGxh
dGZvcm1Qcml2YXRlKCktPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkg
PSBmYWxzZTsKIH0KIAogQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkg
Y29uc3QKQEAgLTk1NywxMiArOTU1LDEyIEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJv
dW5kVG9EZXZpY2UKICAgICAvLyByb3RhdGluZyBpbWFnZSBsaWtlIHRoZSBoYW5kcyBvZiB0aGUg
d29ybGQgY2xvY2sgd2lkZ2V0LiBXZSBqdXN0IG5lZWQgdGhlIHNjYWxlLCBzbwogICAgIC8vIHdl
IGdldCB0aGUgYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggYW5kIGV4dHJhY3QgdGhlIHNjYWxlLgog
Ci0gICAgaWYgKG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSkKKyAgICBpZiAocGxhdGZvcm1Qcml2YXRlKCktPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25v
d25Ub0JlSWRlbnRpdHkpCiAgICAgICAgIHJldHVybiByZWN0OwogCiAgICAgQ0dBZmZpbmVUcmFu
c2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dDb250ZXh0R2V0VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRy
YW5zZm9ybShwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgaWYgKENHQWZmaW5lVHJhbnNmb3JtSXNJ
ZGVudGl0eShkZXZpY2VNYXRyaXgpKSB7Ci0gICAgICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VU
cmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IHRydWU7CisgICAgICAgIHBsYXRmb3JtUHJpdmF0
ZSgpLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gdHJ1ZTsKICAg
ICAgICAgcmV0dXJuIHJlY3Q7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGVDRy5oCShyZXZpc2lvbiA3MjkwOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
MTAgKzI4LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRQcml2YXRlIHsKIHB1YmxpYzoKICAgICBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKLSAgICAgICAg
OiBtX2NnQ29udGV4dChjZ0NvbnRleHQpCisgICAgICAgIDogR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSgpCisgICAgICAgICwgbV9jZ0NvbnRleHQoY2dDb250ZXh0KQogI2lmIFBMQVRGT1JNKFdJTikK
ICAgICAgICAgLCBtX2hkYygwKQogICAgICAgICAsIG1fdHJhbnNwYXJlbmN5Q291bnQoMCkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhp
Y3NDb250ZXh0SGFpa3UuY3BwCShyZXZpc2lvbiA3MjkwOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRQcml2YXRlIHsKIHB1YmxpYzoKICAgICBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQlZpZXcqIHZpZXcpOwogICAgIH5HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUoKTsKQEAgLTU0LDcgKzU0LDggQEAgcHVibGljOgogfTsKIAog
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUoQlZpZXcqIHZpZXcpCi0gICAgOiBtX3ZpZXcodmlldykKKyAgICA6IEdyYXBoaWNzQ29u
dGV4dFByaXZhdGUoKQorICAgICwgbV92aWV3KHZpZXcpCiB7CiB9CiAKQEAgLTYzLDMxICs2NCwy
OSBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljCiB9CiAKIEdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAg
ICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoY29udGV4dCkpCisg
ICAgOiBtX2NvbW1vbihuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNvbnRleHQp
KQogewogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNvbnRleHQpOwogfQogCiBHcmFwaGljc0Nv
bnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewotICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQ
cml2YXRlKG1fY29tbW9uKTsKLSAgICBkZWxldGUgbV9kYXRhOworICAgIGRlbGV0ZSBwbGF0Zm9y
bVByaXZhdGUoKTsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLT5tX3ZpZXc7
CisgICAgcmV0dXJuIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3ZpZXc7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCiB7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlB1
c2hTdGF0ZSgpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3ZpZXctPlB1c2hTdGF0ZSgpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQogewotICAg
IG1fZGF0YS0+bV92aWV3LT5Qb3BTdGF0ZSgpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3Zp
ZXctPlBvcFN0YXRlKCk7CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEg
c3Ryb2tlZCBib3JkZXIuCkBAIC05Niw5ICs5NSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmVjdChjb25zdCBJbnQKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2RhdGEtPm1fdmlldy0+RmlsbFJlY3QocmVjdCk7CisgICAgcGxhdGZv
cm1Qcml2YXRlKCktPm1fdmlldy0+RmlsbFJlY3QocmVjdCk7CiAgICAgaWYgKHN0cm9rZVN0eWxl
KCkgIT0gTm9TdHJva2UpCi0gICAgICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VSZWN0KHJlY3Qs
IGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3Zp
ZXctPlN0cm9rZVJlY3QocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKIH0KIAogLy8gVGhp
cyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgpAQCAtMTEwLDcgKzEwOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnQKICAgICBpZiAoc3Ryb2tlU3R5bGUo
KSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlN0
cm9rZUxpbmUocG9pbnQxLCBwb2ludDIsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgcGxh
dGZvcm1Qcml2YXRlKCktPm1fdmlldy0+U3Ryb2tlTGluZShwb2ludDEsIHBvaW50MiwgZ2V0SGFp
a3VTdHJva2VTdHlsZSgpKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRy
YXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCkBAIC0xMTksOSArMTE4LDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IAogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5GaWxs
RWxsaXBzZShyZWN0KTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+bV92aWV3LT5GaWxsRWxsaXBz
ZShyZWN0KTsKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKLSAgICAgICAgbV9k
YXRhLT5tX3ZpZXctPlN0cm9rZUVsbGlwc2UocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsK
KyAgICAgICAgcGxhdGZvcm1Qcml2YXRlKCktPm1fdmlldy0+U3Ryb2tlRWxsaXBzZShyZWN0LCBn
ZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
QXJjKGNvbnN0IEludFJlY3QmIHJlY3QsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKQpA
QCAtMTI5LDcgKzEyOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3Qg
SW4KICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2RhdGEtPm1fdmlldy0+U3Ryb2tlQXJjKHJlY3QsIHN0YXJ0QW5nbGUsIGFuZ2xlU3BhbiwgZ2V0
SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+bV92aWV3LT5TdHJv
a2VBcmMocmVjdCwgc3RhcnRBbmdsZSwgYW5nbGVTcGFuLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCkBAIC0xNDYsMTAgKzE0
NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwb2ludHNMZW5ndGg7IGkrKykKICAgICAgICAgYlBvaW50c1tp
XSA9IHBvaW50c1tpXTsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsUG9seWdvbihiUG9pbnRz
LCBwb2ludHNMZW5ndGgpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3ZpZXctPkZpbGxQb2x5
Z29uKGJQb2ludHMsIHBvaW50c0xlbmd0aCk7CiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9T
dHJva2UpCiAgICAgICAgIC8vIFN0cm9rZSB3aXRoIGxvdyBjb2xvcgotICAgICAgICBtX2RhdGEt
Pm1fdmlldy0+U3Ryb2tlUG9seWdvbihiUG9pbnRzLCBwb2ludHNMZW5ndGgsIHRydWUsIGdldEhh
aWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3ZpZXctPlN0
cm9rZVBvbHlnb24oYlBvaW50cywgcG9pbnRzTGVuZ3RoLCB0cnVlLCBnZXRIYWlrdVN0cm9rZVN0
eWxlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6
ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2Vk
KQpAQCAtMTY4LDEwICsxNjcsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsbwogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHJnYl9jb2xvciBvbGRDb2xvciA9IG1fZGF0YS0+bV92aWV3LT5IaWdoQ29sb3IoKTsKLSAg
ICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKLSAgICBtX2RhdGEtPm1fdmll
dy0+RmlsbFJlY3QocmVjdCk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihvbGRD
b2xvcik7CisgICAgcmdiX2NvbG9yIG9sZENvbG9yID0gcGxhdGZvcm1Qcml2YXRlKCktPm1fdmll
dy0+SGlnaENvbG9yKCk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPm1fdmlldy0+U2V0SGlnaENv
bG9yKGNvbG9yKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+bV92aWV3LT5GaWxsUmVjdChyZWN0
KTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+bV92aWV3LT5TZXRIaWdoQ29sb3Iob2xkQ29sb3Ip
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQpAQCAtMjEyLDcgKzIxMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0
IEZsb2F0UmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgQlJlZ2lvbiByZWdpb24ocmVjdCk7Ci0g
ICAgbV9kYXRhLT5tX3ZpZXctPkNvbnN0cmFpbkNsaXBwaW5nUmVnaW9uKCZyZWdpb24pOworICAg
IHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3ZpZXctPkNvbnN0cmFpbkNsaXBwaW5nUmVnaW9uKCZyZWdp
b24pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRo
JiBwYXRoLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTIz
NCw4ICsyMzMsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zCiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdENvdW50OyArK2kpCiAgICAgICAgICAgICBy
ZWdpb24uSW5jbHVkZShCUmVjdChyZWN0c1tpXSkpOwogCi0gICAgICAgIG1fZGF0YS0+bV92aWV3
LT5TZXRIaWdoQ29sb3IoY29sb3IpOwotICAgICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlUmVj
dChyZWdpb24uRnJhbWUoKSwgQl9NSVhFRF9DT0xPUlMpOworICAgICAgICBwbGF0Zm9ybVByaXZh
dGUoKS0+bV92aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOworICAgICAgICBwbGF0Zm9ybVByaXZh
dGUoKS0+bV92aWV3LT5TdHJva2VSZWN0KHJlZ2lvbi5GcmFtZSgpLCBCX01JWEVEX0NPTE9SUyk7
CiAgICAgfQogfQogCkBAIC0yOTEsMTAgKzI5MCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUmVjdChjb25zdCBGCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0YS0+bV92aWV3LT5QZW5TaXplKCk7
Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUod2lkdGgpOwotICAgIG1fZGF0YS0+bV92
aWV3LT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Ci0gICAgbV9kYXRh
LT5tX3ZpZXctPlNldFBlblNpemUob2xkU2l6ZSk7CisgICAgZmxvYXQgb2xkU2l6ZSA9IHBsYXRm
b3JtUHJpdmF0ZSgpLT5tX3ZpZXctPlBlblNpemUoKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+
bV92aWV3LT5TZXRQZW5TaXplKHdpZHRoKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+bV92aWV3
LT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgcGxhdGZvcm1Q
cml2YXRlKCktPm1fdmlldy0+U2V0UGVuU2l6ZShvbGRTaXplKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQpAQCAtMzE1LDcgKzMxNCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldExpbmVNb2RlKG1vZGUsIG1fZGF0YS0+
bV92aWV3LT5MaW5lSm9pbk1vZGUoKSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVNaXRlckxpbWl0KCkp
OworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3ZpZXctPlNldExpbmVNb2RlKG1vZGUsIHBsYXRm
b3JtUHJpdmF0ZSgpLT5tX3ZpZXctPkxpbmVKb2luTW9kZSgpLCBwbGF0Zm9ybVByaXZhdGUoKS0+
bV92aWV3LT5MaW5lTWl0ZXJMaW1pdCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQpAQCAtMzM2LDcgKzMzNSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm8KICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldExpbmVNb2RlKG1fZGF0YS0+bV92aWV3LT5MaW5lQ2Fw
TW9kZSgpLCBtb2RlLCBtX2RhdGEtPm1fdmlldy0+TGluZU1pdGVyTGltaXQoKSk7CisgICAgcGxh
dGZvcm1Qcml2YXRlKCktPm1fdmlldy0+U2V0TGluZU1vZGUocGxhdGZvcm1Qcml2YXRlKCktPm1f
dmlldy0+TGluZUNhcE1vZGUoKSwgbW9kZSwgcGxhdGZvcm1Qcml2YXRlKCktPm1fdmlldy0+TGlu
ZU1pdGVyTGltaXQoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0
KGZsb2F0IGxpbWl0KQpAQCAtMzQ0LDcgKzM0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRNaXRlckxpbWl0KGZsb2EKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2RhdGEtPm1fdmlldy0+U2V0TGluZU1vZGUobV9kYXRhLT5tX3ZpZXct
PkxpbmVDYXBNb2RlKCksIG1fZGF0YS0+bV92aWV3LT5MaW5lSm9pbk1vZGUoKSwgbGltaXQpOwor
ICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3ZpZXctPlNldExpbmVNb2RlKHBsYXRmb3JtUHJpdmF0
ZSgpLT5tX3ZpZXctPkxpbmVDYXBNb2RlKCksIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3ZpZXctPkxp
bmVKb2luTW9kZSgpLCBsaW1pdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBo
YShmbG9hdCBvcGFjaXR5KQpAQCAtMzczLDcgKzM3Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRDb21wb3NpdGVPcGVyYXQKICAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQ6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbjogVW5zdXBwb3J0ZWQgY29tcG9zaXRlIG9wZXJhdGlvbiAlc1xu
IiwKICAgICAgICAgICAgICAgICBjb21wb3NpdGVPcGVyYXRvck5hbWUob3ApLnV0ZjgoKS5kYXRh
KCkpOwogICAgIH0KLSAgICBtX2RhdGEtPm1fdmlldy0+U2V0RHJhd2luZ01vZGUobW9kZSk7Cisg
ICAgcGxhdGZvcm1Qcml2YXRlKCktPm1fdmlldy0+U2V0RHJhd2luZ01vZGUobW9kZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zODEsNyAr
MzgwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYgcAogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92
aWV3LT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbihwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICBw
bGF0Zm9ybVByaXZhdGUoKS0+bV92aWV3LT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbihwYXRoLnBs
YXRmb3JtUGF0aCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29u
c3QgUGF0aCYgcGF0aCkKQEAgLTQ4MSw3ICs0ODAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0VVJMRm9yUmVjdChjb25zCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZv
bnQoY29uc3QgRm9udCYgZm9udCkKIHsKLSAgICBtX2RhdGEtPm1fdmlldy0+U2V0Rm9udChmb250
LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CisgICAgcGxhdGZvcm1Qcml2
YXRlKCktPm1fdmlldy0+U2V0Rm9udChmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgp
LmZvbnQoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNv
bG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtNDg5LDcg
KzQ4OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUMKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPm1f
dmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+bV92aWV3
LT5TZXRIaWdoQ29sb3IoY29sb3IpOwogfQogCiBwYXR0ZXJuIEdyYXBoaWNzQ29udGV4dDo6Z2V0
SGFpa3VTdHJva2VTdHlsZSgpCkBAIC01MjMsNyArNTIyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU3Ryb2tlVAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRQZW5TaXplKHRoaWNrbmVzcyk7
CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPm1fdmlldy0+U2V0UGVuU2l6ZSh0aGlja25lc3MpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCkBAIC01MzEsNyArNTMwLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbAogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdo
Q29sb3IoY29sb3IpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5tX3ZpZXctPlNldEhpZ2hDb2xv
cihjb2xvcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93
KCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4
dE9wZW5WRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcAkocmV2aXNpb24gNzI5MDgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwyNSArNDEsMjQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8g
dHlwZWRlZidpbmcgZG9lc24ndCB3b3JrLCBsZXQncyBpbmhlcml0IGZyb20gUGFpbnRlck9wZW5W
RyBpbnN0ZWFkCi1jbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgOiBwdWJsaWMg
UGFpbnRlck9wZW5WRyB7CitjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgOiBw
dWJsaWMgUGFpbnRlck9wZW5WRywgcHVibGljIEdyYXBoaWNzQ29udGV4dFByaXZhdGUgewogcHVi
bGljOgogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShTdXJmYWNlT3BlblZHKiBz
dXJmYWNlKQogICAgICAgICA6IFBhaW50ZXJPcGVuVkcoc3VyZmFjZSkKKyAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRQcml2YXRlKCkKICAgICB7CiAgICAgfQogfTsKIAogR3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHQoU3VyZmFjZU9wZW5WRyogc3VyZmFjZSkKLSAgICA6IG1fY29tbW9u
KGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShzdXJmYWNlID8g
bmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdXJmYWNlKSA6IDApCisgICAgOiBt
X2NvbW1vbihzdXJmYWNlID8gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdXJm
YWNlKSA6IDApCiB7CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxlZCghc3VyZmFjZSk7CiB9CiAKIEdy
YXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiB7Ci0gICAgZGVzdHJveUdyYXBoaWNz
Q29udGV4dFByaXZhdGUobV9jb21tb24pOwotICAgIGRlbGV0ZSBtX2RhdGE7CisgICAgZGVsZXRl
IHBsYXRmb3JtUHJpdmF0ZSgpOwogfQogCiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdApAQCAtNjcsNyArNjYsNyBAQCBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCogR3JhcGhpY3NDb250ZXh0CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbV9kYXRhLT5iYXNlU3Vy
ZmFjZSgpOworICAgIHJldHVybiBwbGF0Zm9ybVByaXZhdGUoKS0+YmFzZVN1cmZhY2UoKTsKIH0K
IAogQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKQEAgLTc1
LDcgKzc0LDcgQEAgQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKAogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0o
KTsKIAotICAgIHJldHVybiBtX2RhdGEtPnRyYW5zZm9ybWF0aW9uKCk7CisgICAgcmV0dXJuIHBs
YXRmb3JtUHJpdmF0ZSgpLT50cmFuc2Zvcm1hdGlvbigpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQpAQCAtODMsNyArODIsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5zYXZlKCk7CisgICAgcGxhdGZvcm1Qcml2
YXRlKCktPnNhdmUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9y
bVN0YXRlKCkKQEAgLTkxLDcgKzkwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQ
bGF0Zm9ybVN0YQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fZGF0YS0+cmVzdG9yZSgpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5yZXN0b3Jl
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQpAQCAtOTksNyArOTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29u
c3QgSW50CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9kYXRhLT5kcmF3UmVjdChyZWN0KTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+ZHJhd1Jl
Y3QocmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQ
b2ludCYgZnJvbSwgY29uc3QgSW50UG9pbnQmIHRvKQpAQCAtMTA3LDcgKzEwNiw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnQKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPmRyYXdMaW5lKGZyb20sIHRv
KTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+ZHJhd0xpbmUoZnJvbSwgdG8pOwogfQogCiAvKioK
QEAgLTExOCw3ICsxMTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29u
c3QgCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9kYXRhLT5kcmF3RWxsaXBzZShyZWN0KTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+ZHJhd0Vs
bGlwc2UocmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3Qg
SW50UmVjdCYgcmVjdCwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCkBAIC0xMjYsNyAr
MTI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbgogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+ZHJh
d0FyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIFZHX1NUUk9LRV9QQVRIKTsKKyAgICBw
bGF0Zm9ybVByaXZhdGUoKS0+ZHJhd0FyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIFZH
X1NUUk9LRV9QQVRIKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91
bGRBbnRpYWxpYXMpCkBAIC0xMzQsNyArMTMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdDb252ZXhQb2x5Z29uKAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZGF0YS0+ZHJhd1BvbHlnb24obnVtUG9pbnRzLCBwb2ludHMpOworICAg
IHBsYXRmb3JtUHJpdmF0ZSgpLT5kcmF3UG9seWdvbihudW1Qb2ludHMsIHBvaW50cyk7CiAKICAg
ICBVTlVTRURfUEFSQU0oc2hvdWxkQW50aWFsaWFzKTsgLy8gRklYTUUKIH0KQEAgLTE0NCw3ICsx
NDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+ZHJhd1BhdGgoVkdf
RklMTF9QQVRILCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAgIHBsYXRmb3JtUHJpdmF0
ZSgpLT5kcmF3UGF0aChWR19GSUxMX1BBVEgsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKQEAgLTE1Miw3ICsxNTEsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5kcmF3UGF0aChWR19TVFJP
S0VfUEFUSCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUo
KS0+ZHJhd1BhdGgoVkdfU1RST0tFX1BBVEgsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpCkBAIC0xNjAsNyArMTU5LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPmRyYXdQYXRoKFZHX0ZJTExfUEFU
SCB8IFZHX1NUUk9LRV9QQVRILCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAgIHBsYXRm
b3JtUHJpdmF0ZSgpLT5kcmF3UGF0aChWR19GSUxMX1BBVEggfCBWR19TVFJPS0VfUEFUSCwgbV9j
b21tb24tPnN0YXRlLmZpbGxSdWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTE2OCw3ICsxNjcsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5kcmF3UmVjdChyZWN0LCBWR19GSUxM
X1BBVEgpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5kcmF3UmVjdChyZWN0LCBWR19GSUxMX1BB
VEgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKQEAgLTE3
NiwxMCArMTc1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8K
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDb2xv
ciBvbGRDb2xvciA9IG1fZGF0YS0+ZmlsbENvbG9yKCk7Ci0gICAgbV9kYXRhLT5zZXRGaWxsQ29s
b3IoY29sb3IpOwotICAgIG1fZGF0YS0+ZHJhd1JlY3QocmVjdCwgVkdfRklMTF9QQVRIKTsKLSAg
ICBtX2RhdGEtPnNldEZpbGxDb2xvcihvbGRDb2xvcik7CisgICAgQ29sb3Igb2xkQ29sb3IgPSBw
bGF0Zm9ybVByaXZhdGUoKS0+ZmlsbENvbG9yKCk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPnNl
dEZpbGxDb2xvcihjb2xvcik7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPmRyYXdSZWN0KHJlY3Qs
IFZHX0ZJTExfUEFUSCk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPnNldEZpbGxDb2xvcihvbGRD
b2xvcik7CiAKICAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7IC8vIEZJWE1FCiB9CkBAIC0x
ODksMTAgKzE4OCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNv
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ29s
b3Igb2xkQ29sb3IgPSBtX2RhdGEtPmZpbGxDb2xvcigpOwotICAgIG1fZGF0YS0+c2V0RmlsbENv
bG9yKGNvbG9yKTsKLSAgICBtX2RhdGEtPmRyYXdSb3VuZGVkUmVjdChyZWN0LCB0b3BMZWZ0LCB0
b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQsIFZHX0ZJTExfUEFUSCk7Ci0gICAgbV9k
YXRhLT5zZXRGaWxsQ29sb3Iob2xkQ29sb3IpOworICAgIENvbG9yIG9sZENvbG9yID0gcGxhdGZv
cm1Qcml2YXRlKCktPmZpbGxDb2xvcigpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5zZXRGaWxs
Q29sb3IoY29sb3IpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5kcmF3Um91bmRlZFJlY3QocmVj
dCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBWR19GSUxMX1BB
VEgpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5zZXRGaWxsQ29sb3Iob2xkQ29sb3IpOwogCiAg
ICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOyAvLyBGSVhNRQogfQpAQCAtMjAyLDcgKzIwMSw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+YmVnaW5QYXRoKCk7Cisg
ICAgcGxhdGZvcm1Qcml2YXRlKCktPmJlZ2luUGF0aCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMjEwLDcgKzIwOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPmFkZFBhdGgocGF0aCk7Cisg
ICAgcGxhdGZvcm1Qcml2YXRlKCktPmFkZFBhdGgocGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTIxOCw3ICsyMTcsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlCiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5pbnRlcnNlY3RDbGlw
UmVjdChyZWN0KTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+aW50ZXJzZWN0Q2xpcFJlY3QocmVj
dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChXaW5kUnVsZSBjbGlwUnVs
ZSkKQEAgLTIyNiw3ICsyMjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoV2lu
ZFJ1bGUgCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9kYXRhLT5jbGlwUGF0aCgqKG1fZGF0YS0+Y3VycmVudFBhdGgoKSksIFBhaW50ZXJPcGVu
Vkc6OkludGVyc2VjdENsaXAsIGNsaXBSdWxlKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+Y2xp
cFBhdGgoKihwbGF0Zm9ybVByaXZhdGUoKS0+Y3VycmVudFBhdGgoKSksIFBhaW50ZXJPcGVuVkc6
OkludGVyc2VjdENsaXAsIGNsaXBSdWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC0yNDgsMTMgKzI0NywxMyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zCiAgICAgICAgIGZpbmFsRm9jdXNSZWN0
LnVuaXRlKGZvY3VzUmVjdCk7CiAgICAgfQogCi0gICAgU3Ryb2tlU3R5bGUgb2xkU3R5bGUgPSBt
X2RhdGEtPnN0cm9rZVN0eWxlKCk7Ci0gICAgQ29sb3Igb2xkU3Ryb2tlQ29sb3IgPSBtX2RhdGEt
PnN0cm9rZUNvbG9yKCk7Ci0gICAgbV9kYXRhLT5zZXRTdHJva2VTdHlsZShEYXNoZWRTdHJva2Up
OwotICAgIG1fZGF0YS0+c2V0U3Ryb2tlQ29sb3IoY29sb3IpOworICAgIFN0cm9rZVN0eWxlIG9s
ZFN0eWxlID0gcGxhdGZvcm1Qcml2YXRlKCktPnN0cm9rZVN0eWxlKCk7CisgICAgQ29sb3Igb2xk
U3Ryb2tlQ29sb3IgPSBwbGF0Zm9ybVByaXZhdGUoKS0+c3Ryb2tlQ29sb3IoKTsKKyAgICBwbGF0
Zm9ybVByaXZhdGUoKS0+c2V0U3Ryb2tlU3R5bGUoRGFzaGVkU3Ryb2tlKTsKKyAgICBwbGF0Zm9y
bVByaXZhdGUoKS0+c2V0U3Ryb2tlQ29sb3IoY29sb3IpOwogICAgIHN0cm9rZVJlY3QoRmxvYXRS
ZWN0KGZpbmFsRm9jdXNSZWN0KSwgMS5mKTsKLSAgICBtX2RhdGEtPnNldFN0cm9rZVN0eWxlKG9s
ZFN0eWxlKTsKLSAgICBtX2RhdGEtPnNldFN0cm9rZUNvbG9yKG9sZFN0cm9rZUNvbG9yKTsKKyAg
ICBwbGF0Zm9ybVByaXZhdGUoKS0+c2V0U3Ryb2tlU3R5bGUob2xkU3R5bGUpOworICAgIHBsYXRm
b3JtUHJpdmF0ZSgpLT5zZXRTdHJva2VDb2xvcihvbGRTdHJva2VDb2xvcik7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgSW50UG9pbnQmIG9yaWdpbiwg
aW50IHdpZHRoLCBib29sIHByaW50aW5nKQpAQCAtMjY1LDEwICsyNjQsMTAgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjbwogICAgIGlmICh3aWR0aCA8PSAwKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBTdHJva2VTdHlsZSBvbGRTdHlsZSA9IG1fZGF0YS0+c3Ryb2tl
U3R5bGUoKTsKLSAgICBtX2RhdGEtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKKyAgICBT
dHJva2VTdHlsZSBvbGRTdHlsZSA9IHBsYXRmb3JtUHJpdmF0ZSgpLT5zdHJva2VTdHlsZSgpOwor
ICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAgICAg
ZHJhd0xpbmUob3JpZ2luLCBvcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKSk7Ci0gICAgbV9kYXRh
LT5zZXRTdHJva2VTdHlsZShvbGRTdHlsZSk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPnNldFN0
cm9rZVN0eWxlKG9sZFN0eWxlKTsKIAogICAgIFVOVVNFRF9QQVJBTShwcmludGluZyk7CiB9CkBA
IC0yODksNyArMjg4LDcgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rldmlj
ZQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKIAotICAgIHJldHVybiBGbG9hdFJlY3QoZW5jbG9zaW5nSW50UmVjdChtX2RhdGEtPnRyYW5z
Zm9ybWF0aW9uKCkubWFwUmVjdChyZWN0KSkpOworICAgIHJldHVybiBGbG9hdFJlY3QoZW5jbG9z
aW5nSW50UmVjdChwbGF0Zm9ybVByaXZhdGUoKS0+dHJhbnNmb3JtYXRpb24oKS5tYXBSZWN0KHJl
Y3QpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQpAQCAtMzM0LDEwICszMzMsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsZWFyUmVjdChjb25zdCBGbAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wID0gbV9kYXRhLT5jb21wb3Np
dGVPcGVyYXRpb24oKTsKLSAgICBtX2RhdGEtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVDbGVhcik7Ci0gICAgbV9kYXRhLT5kcmF3UmVjdChyZWN0LCBWR19GSUxMX1BBVEgpOwotICAg
IG1fZGF0YS0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKKyAgICBDb21wb3NpdGVPcGVyYXRv
ciBvcCA9IHBsYXRmb3JtUHJpdmF0ZSgpLT5jb21wb3NpdGVPcGVyYXRpb24oKTsKKyAgICBwbGF0
Zm9ybVByaXZhdGUoKS0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNsZWFyKTsKKyAg
ICBwbGF0Zm9ybVByaXZhdGUoKS0+ZHJhd1JlY3QocmVjdCwgVkdfRklMTF9QQVRIKTsKKyAgICBw
bGF0Zm9ybVByaXZhdGUoKS0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBs
aW5lV2lkdGgpCkBAIC0zNDUsMTAgKzM0NCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUmVjdChjb25zdCBGCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZmxvYXQgb2xkVGhpY2tuZXNzID0gbV9kYXRhLT5zdHJva2VUaGlja25lc3Mo
KTsKLSAgICBtX2RhdGEtPnNldFN0cm9rZVRoaWNrbmVzcyhsaW5lV2lkdGgpOwotICAgIG1fZGF0
YS0+ZHJhd1JlY3QocmVjdCwgVkdfU1RST0tFX1BBVEgpOwotICAgIG1fZGF0YS0+c2V0U3Ryb2tl
VGhpY2tuZXNzKG9sZFRoaWNrbmVzcyk7CisgICAgZmxvYXQgb2xkVGhpY2tuZXNzID0gcGxhdGZv
cm1Qcml2YXRlKCktPnN0cm9rZVRoaWNrbmVzcygpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5z
ZXRTdHJva2VUaGlja25lc3MobGluZVdpZHRoKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+ZHJh
d1JlY3QocmVjdCwgVkdfU1RST0tFX1BBVEgpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5zZXRT
dHJva2VUaGlja25lc3Mob2xkVGhpY2tuZXNzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVDYXAoTGluZUNhcCBsYykKQEAgLTM1Niw3ICszNTUsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5zZXRMaW5lQ2FwKGxjKTsKKyAgICBwbGF0
Zm9ybVByaXZhdGUoKS0+c2V0TGluZUNhcChsYyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkK
QEAgLTM2NCw3ICszNjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29u
c3QgCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9kYXRhLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOworICAgIHBsYXRmb3JtUHJp
dmF0ZSgpLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGopCkBAIC0zNzIsNyArMzcxLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKbwogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+c2V0TGluZUpvaW4o
bGopOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5zZXRMaW5lSm9pbihsaik7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQpAQCAtMzgwLDcgKzM3
OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2EKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPnNldE1p
dGVyTGltaXQobGltaXQpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5zZXRNaXRlckxpbWl0KGxp
bWl0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0IG9wYWNpdHkp
CkBAIC0zODgsNyArMzg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0
IG9wYQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fZGF0YS0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+c2V0
T3BhY2l0eShvcGFjaXR5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKQEAgLTM5Niw3ICszOTUsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5zZXRDb21wb3NpdGVPcGVy
YXRpb24ob3ApOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5zZXRDb21wb3NpdGVPcGVyYXRpb24o
b3ApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQpA
QCAtNDA0LDcgKzQwMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgm
IHAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OkludGVyc2VjdENsaXAsIG1fY29t
bW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPmNsaXBQYXRoKHBh
dGgsIFBhaW50ZXJPcGVuVkc6OkludGVyc2VjdENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVs
ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBh
dGgpCkBAIC00MTcsNyArNDE2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29u
c3QgUGF0aAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6U3VidHJhY3RDbGlwLCBt
X2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jbGlwUGF0
aChwYXRoLCBQYWludGVyT3BlblZHOjpTdWJ0cmFjdENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxs
UnVsZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNjYWxlRmFjdG9ycykKQEAgLTQyNSw3ICs0MjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2NhbGUoY29uc3QgRmxvYXRTCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9kYXRhLT5zY2FsZShzY2FsZUZhY3RvcnMpOworICAgIHBsYXRmb3Jt
UHJpdmF0ZSgpLT5zY2FsZShzY2FsZUZhY3RvcnMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCkBAIC00MzMsNyArNDMyLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+cm90YXRlKHJhZGlhbnMpOworICAgIHBs
YXRmb3JtUHJpdmF0ZSgpLT5yb3RhdGUocmFkaWFucyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KQpAQCAtNDQxLDcgKzQ0MCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgZHgKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPnRyYW5zbGF0ZShkeCwg
ZHkpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT50cmFuc2xhdGUoZHgsIGR5KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTQ1MSw3
ICs0NTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSCiAKICAg
ICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRSZWN0KHJlY3QpOwotICAgIG1fZGF0YS0+Y2xpcFBh
dGgocGF0aCwgUGFpbnRlck9wZW5WRzo6U3VidHJhY3RDbGlwLCBtX2NvbW1vbi0+c3RhdGUuZmls
bFJ1bGUpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3Bl
blZHOjpTdWJ0cmFjdENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKQEAgLTQ3NCw3ICs0NzMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiAgICAgcGF0aC5hZGRFbGxpcHNl
KEZsb2F0UmVjdChyZWN0LngoKSArIHRoaWNrbmVzcywgcmVjdC55KCkgKyB0aGlja25lc3MsCiAg
ICAgICAgIHJlY3Qud2lkdGgoKSAtICh0aGlja25lc3MgKiAyKSwgcmVjdC5oZWlnaHQoKSAtICh0
aGlja25lc3MgKiAyKSkpOwogCi0gICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3Bl
blZHOjpJbnRlcnNlY3RDbGlwLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAgIHBsYXRm
b3JtUHJpdmF0ZSgpLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpJbnRlcnNlY3RDbGlw
LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtYXRpb24pCkBAIC00ODIs
NyArNDgxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZgogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+
Y29uY2F0VHJhbnNmb3JtYXRpb24odHJhbnNmb3JtYXRpb24pOworICAgIHBsYXRmb3JtUHJpdmF0
ZSgpLT5jb25jYXRUcmFuc2Zvcm1hdGlvbih0cmFuc2Zvcm1hdGlvbik7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmIGxpbmssIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KQpAQCAtNDk3LDcgKzQ5Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVN0cm9rZUMKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2RhdGEtPnNldFN0cm9rZUNvbG9yKGNvbG9yKTsKKyAgICBwbGF0Zm9y
bVByaXZhdGUoKS0+c2V0U3Ryb2tlQ29sb3IoY29sb3IpOwogCiAgICAgVU5VU0VEX1BBUkFNKGNv
bG9yU3BhY2UpOyAvLyBGSVhNRQogfQpAQCAtNTA3LDcgKzUwNiw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVMKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPnNldFN0cm9rZVN0eWxlKHN0cm9rZVN0eWxl
KTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+c2V0U3Ryb2tlU3R5bGUoc3Ryb2tlU3R5bGUpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxv
YXQgdGhpY2tuZXNzKQpAQCAtNTE1LDcgKzUxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVN0cm9rZVQKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2RhdGEtPnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOworICAg
IHBsYXRmb3JtUHJpdmF0ZSgpLT5zZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtNTIzLDcgKzUyMiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2wKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPnNldEZpbGxDb2xvcihjb2xvcik7
CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPnNldEZpbGxDb2xvcihjb2xvcik7CiAKICAgICBVTlVT
RURfUEFSQU0oY29sb3JTcGFjZSk7IC8vIEZJWE1FCiB9CkBAIC01MzMsNyArNTMyLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQQogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+c2V0QW50aWFsaWFzaW5n
RW5hYmxlZChlbmFibGUpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5zZXRBbnRpYWxpYXNpbmdF
bmFibGVkKGVuYWJsZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHJldmlzaW9u
IDcyOTA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw5ICsxNzcsOSBAQCBzdGF0aWMgaW5saW5lIFF0
OjpGaWxsUnVsZSB0b1F0RmlsbFJ1bGUoCiAgICAgcmV0dXJuIFF0OjpPZGRFdmVuRmlsbDsKIH0K
IAotY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSA6IHB1YmxpYyBHcmFw
aGljc0NvbnRleHRQcml2YXRlIHsKIHB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUoUVBhaW50ZXIqLCBjb25zdCBRQ29sb3ImIGluaXRpYWxTb2xpZENvbG9yKTsKKyAg
ICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUVBhaW50ZXIqKTsKICAgICB+R3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CiAKICAgICBpbmxpbmUgUVBhaW50ZXIqIHAoKSBj
b25zdApAQCAtMjM2LDEwICsyMzYsMTAgQEAgcHJpdmF0ZToKIH07CiAKIAotR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUVBhaW50
ZXIqIHAsIGNvbnN0IFFDb2xvciYgaW5pdGlhbFNvbGlkQ29sb3IpCi0gICAgOiBhbnRpQWxpYXNp
bmdGb3JSZWN0c0FuZExpbmVzKGZhbHNlKQorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUVBhaW50ZXIqIHApCisgICAgOiBHcmFw
aGljc0NvbnRleHRQcml2YXRlKCkKKyAgICAsIGFudGlBbGlhc2luZ0ZvclJlY3RzQW5kTGluZXMo
ZmFsc2UpCiAgICAgLCBsYXllckNvdW50KDApCi0gICAgLCBzb2xpZENvbG9yKGluaXRpYWxTb2xp
ZENvbG9yKQogICAgICwgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uRGVm
YXVsdCkKICAgICAsIHBhaW50ZXIocCkKICAgICAsIHBsYXRmb3JtQ29udGV4dElzT3duZWQoZmFs
c2UpCkBAIC0yNjUsMTYgKzI2NSwxNiBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
On5HcmFwaGljCiB9CiAKIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBwYWludGVyKQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3ND
b250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUocGFpbnRlciwgZmlsbENvbG9yKCkpKQorICAgIDogbV9jb21tb24obmV3IEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShwYWludGVyKSkKIHsKKyAgICBwbGF0Zm9ybVByaXZh
dGUoKS0+c29saWRDb2xvciA9IFFCcnVzaChmaWxsQ29sb3IoKSk7CiAgICAgc2V0UGFpbnRpbmdE
aXNhYmxlZCghcGFpbnRlcik7CiAKICAgICBpZiAoIXBhaW50ZXIpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIHNvbGlkQ29sb3IgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZmlsbENvbG9yKCku
Ci0gICAgcGFpbnRlci0+c2V0QnJ1c2gobV9kYXRhLT5zb2xpZENvbG9yKTsKKyAgICBwYWludGVy
LT5zZXRCcnVzaChwbGF0Zm9ybVByaXZhdGUoKS0+c29saWRDb2xvcik7CiAKICAgICBRUGVuIHBl
bihwYWludGVyLT5wZW4oKSk7CiAgICAgcGVuLnNldENvbG9yKHN0cm9rZUNvbG9yKCkpOwpAQCAt
Mjg0LDE2ICsyODQsMTUgQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZv
cgogCiBHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewotICAgIHdoaWxlICgh
bV9kYXRhLT5sYXllcnMuaXNFbXB0eSgpKQorICAgIHdoaWxlICghcGxhdGZvcm1Qcml2YXRlKCkt
PmxheWVycy5pc0VtcHR5KCkpCiAgICAgICAgIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAKLSAg
ICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7Ci0gICAgZGVsZXRlIG1f
ZGF0YTsKKyAgICBkZWxldGUgcGxhdGZvcm1Qcml2YXRlKCk7CiB9CiAKIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fZGF0YS0+cCgpOworICAgIHJldHVybiBwbGF0Zm9ybVByaXZhdGUoKS0+cCgp
OwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdApA
QCAtMzA1LDI5ICszMDQsMjkgQEAgQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0
Q1RNKAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQogewotICAg
IGlmICghbV9kYXRhLT5sYXllcnMuaXNFbXB0eSgpICYmICFtX2RhdGEtPmxheWVycy50b3AoKS0+
YWxwaGFNYXNrLmlzTnVsbCgpKQotICAgICAgICArK21fZGF0YS0+bGF5ZXJzLnRvcCgpLT5zYXZl
Q291bnRlcjsKLSAgICBtX2RhdGEtPnAoKS0+c2F2ZSgpOwotICAgIG1fZGF0YS0+c2hhZG93U3Rh
Y2sucHVzaChtX2RhdGEtPnNoYWRvdyk7CisgICAgaWYgKCFwbGF0Zm9ybVByaXZhdGUoKS0+bGF5
ZXJzLmlzRW1wdHkoKSAmJiAhcGxhdGZvcm1Qcml2YXRlKCktPmxheWVycy50b3AoKS0+YWxwaGFN
YXNrLmlzTnVsbCgpKQorICAgICAgICArK3BsYXRmb3JtUHJpdmF0ZSgpLT5sYXllcnMudG9wKCkt
PnNhdmVDb3VudGVyOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5wKCktPnNhdmUoKTsKKyAgICBw
bGF0Zm9ybVByaXZhdGUoKS0+c2hhZG93U3RhY2sucHVzaChwbGF0Zm9ybVByaXZhdGUoKS0+c2hh
ZG93KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkK
IHsKLSAgICBpZiAoIW1fZGF0YS0+bGF5ZXJzLmlzRW1wdHkoKSAmJiAhbV9kYXRhLT5sYXllcnMu
dG9wKCktPmFscGhhTWFzay5pc051bGwoKSkKLSAgICAgICAgaWYgKCEtLW1fZGF0YS0+bGF5ZXJz
LnRvcCgpLT5zYXZlQ291bnRlcikKKyAgICBpZiAoIXBsYXRmb3JtUHJpdmF0ZSgpLT5sYXllcnMu
aXNFbXB0eSgpICYmICFwbGF0Zm9ybVByaXZhdGUoKS0+bGF5ZXJzLnRvcCgpLT5hbHBoYU1hc2su
aXNOdWxsKCkpCisgICAgICAgIGlmICghLS1wbGF0Zm9ybVByaXZhdGUoKS0+bGF5ZXJzLnRvcCgp
LT5zYXZlQ291bnRlcikKICAgICAgICAgICAgIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAKLSAg
ICBtX2RhdGEtPnAoKS0+cmVzdG9yZSgpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5wKCktPnJl
c3RvcmUoKTsKIAotICAgIGlmICghbV9kYXRhLT5jdXJyZW50UGF0aC5pc0VtcHR5KCkgJiYgbV9j
b21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKKyAgICBpZiAoIXBs
YXRmb3JtUHJpdmF0ZSgpLT5jdXJyZW50UGF0aC5pc0VtcHR5KCkgJiYgbV9jb21tb24tPnN0YXRl
LnBhdGhUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKICAgICAgICAgUVRyYW5zZm9ybSBtYXRy
aXggPSBtX2NvbW1vbi0+c3RhdGUucGF0aFRyYW5zZm9ybTsKLSAgICAgICAgbV9kYXRhLT5jdXJy
ZW50UGF0aCA9IG1fZGF0YS0+Y3VycmVudFBhdGggKiBtYXRyaXg7CisgICAgICAgIHBsYXRmb3Jt
UHJpdmF0ZSgpLT5jdXJyZW50UGF0aCA9IHBsYXRmb3JtUHJpdmF0ZSgpLT5jdXJyZW50UGF0aCAq
IG1hdHJpeDsKICAgICB9CiAKLSAgICBpZiAobV9kYXRhLT5zaGFkb3dTdGFjay5pc0VtcHR5KCkp
Ci0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdygpOworICAgIGlmIChwbGF0
Zm9ybVByaXZhdGUoKS0+c2hhZG93U3RhY2suaXNFbXB0eSgpKQorICAgICAgICBwbGF0Zm9ybVBy
aXZhdGUoKS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdygpOwogICAgIGVsc2UKLSAgICAgICAgbV9k
YXRhLT5zaGFkb3cgPSBtX2RhdGEtPnNoYWRvd1N0YWNrLnBvcCgpOworICAgICAgICBwbGF0Zm9y
bVByaXZhdGUoKS0+c2hhZG93ID0gcGxhdGZvcm1Qcml2YXRlKCktPnNoYWRvd1N0YWNrLnBvcCgp
OwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVy
LgpAQCAtMzM4LDkgKzMzNyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25z
dCBJbnQKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOworICAgIFFQYWludGVyKiBwID0gcGxhdGZvcm1Q
cml2YXRlKCktPnAoKTsKICAgICBjb25zdCBib29sIGFudGlBbGlhcyA9IHAtPnRlc3RSZW5kZXJI
aW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcpOwotICAgIHAtPnNldFJlbmRlckhpbnQoUVBhaW50
ZXI6OkFudGlhbGlhc2luZywgbV9kYXRhLT5hbnRpQWxpYXNpbmdGb3JSZWN0c0FuZExpbmVzKTsK
KyAgICBwLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHBsYXRmb3JtUHJp
dmF0ZSgpLT5hbnRpQWxpYXNpbmdGb3JSZWN0c0FuZExpbmVzKTsKIAogICAgIHAtPmRyYXdSZWN0
KHJlY3QpOwogCkBAIC0zNjUsOSArMzY0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lKGNvbnN0IEludAogICAgIEZsb2F0UG9pbnQgcDIgPSBwb2ludDI7CiAgICAgYm9vbCBpc1Zl
cnRpY2FsTGluZSA9IChwMS54KCkgPT0gcDIueCgpKTsKIAotICAgIFFQYWludGVyKiBwID0gbV9k
YXRhLT5wKCk7CisgICAgUVBhaW50ZXIqIHAgPSBwbGF0Zm9ybVByaXZhdGUoKS0+cCgpOwogICAg
IGNvbnN0IGJvb2wgYW50aUFsaWFzID0gcC0+dGVzdFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlh
bGlhc2luZyk7Ci0gICAgcC0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBt
X2RhdGEtPmFudGlBbGlhc2luZ0ZvclJlY3RzQW5kTGluZXMpOworICAgIHAtPnNldFJlbmRlckhp
bnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgcGxhdGZvcm1Qcml2YXRlKCktPmFudGlBbGlhc2lu
Z0ZvclJlY3RzQW5kTGluZXMpOwogICAgIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhwMSwg
cDIsIHdpZHRoLCBzdHlsZSk7CiAKICAgICBpbnQgcGF0V2lkdGggPSAwOwpAQCAtNDQ5LDcgKzQ0
OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCAKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPnAoKS0+
ZHJhd0VsbGlwc2UocmVjdCk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPnAoKS0+ZHJhd0VsbGlw
c2UocmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihz
aXplX3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlh
bGlhcykKQEAgLTQ2NSwxOSArNDY0LDE5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
dmV4UG9seWdvbigKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5wb2ludHM7IGkrKykKICAg
ICAgICAgcG9seWdvbltpXSA9IHBvaW50c1tpXTsKIAotICAgIFFQYWludGVyKiBwID0gbV9kYXRh
LT5wKCk7CisgICAgUVBhaW50ZXIqIHAgPSBwbGF0Zm9ybVByaXZhdGUoKS0+cCgpOwogCiAgICAg
Y29uc3QgYm9vbCBhbnRpQWxpYXMgPSBwLT50ZXN0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFs
aWFzaW5nKTsKICAgICBwLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHNo
b3VsZEFudGlhbGlhcyk7CiAKLSAgICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgeworICAgIGlm
IChwbGF0Zm9ybVByaXZhdGUoKS0+aGFzU2hhZG93KCkpIHsKICAgICAgICAgcC0+c2F2ZSgpOwot
ICAgICAgICBwLT50cmFuc2xhdGUobV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkpOworICAgICAgICBw
LT50cmFuc2xhdGUocGxhdGZvcm1Qcml2YXRlKCktPnNoYWRvdy5vZmZzZXQoKSk7CiAgICAgICAg
IGlmIChwLT5icnVzaCgpLnN0eWxlKCkgIT0gUXQ6Ok5vQnJ1c2gpCi0gICAgICAgICAgICBwLT5z
ZXRCcnVzaChRQnJ1c2gobV9kYXRhLT5zaGFkb3cubV9jb2xvcikpOworICAgICAgICAgICAgcC0+
c2V0QnJ1c2goUUJydXNoKHBsYXRmb3JtUHJpdmF0ZSgpLT5zaGFkb3cubV9jb2xvcikpOwogICAg
ICAgICBRUGVuIHBlbihwLT5wZW4oKSk7CiAgICAgICAgIGlmIChwZW4uc3R5bGUoKSAhPSBRdDo6
Tm9QZW4pIHsKLSAgICAgICAgICAgIHBlbi5zZXRDb2xvcihtX2RhdGEtPnNoYWRvdy5tX2NvbG9y
KTsKKyAgICAgICAgICAgIHBlbi5zZXRDb2xvcihwbGF0Zm9ybVByaXZhdGUoKS0+c2hhZG93Lm1f
Y29sb3IpOwogICAgICAgICAgICAgcC0+c2V0UGVuKHBlbik7CiAgICAgICAgIH0KICAgICAgICAg
cC0+ZHJhd0NvbnZleFBvbHlnb24ocG9seWdvbik7CkBAIC01MDEsNyArNTAwLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKAogICAgICAgICBwYXRoLmxpbmVUbyhw
b2ludHNbaV0pOwogICAgIHBhdGguc2V0RmlsbFJ1bGUoUXQ6OldpbmRpbmdGaWxsKTsKIAotICAg
IFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CisgICAgUVBhaW50ZXIqIHAgPSBwbGF0Zm9ybVBy
aXZhdGUoKS0+cCgpOwogCiAgICAgYm9vbCBwYWludGVyV2FzQW50aWFsaWFzZWQgPSBwLT50ZXN0
UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nKTsKIApAQCAtNTE5LDExICs1MTgsMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgp
OwotICAgIFFQYWludGVyUGF0aCYgcGF0aCA9IG1fZGF0YS0+Y3VycmVudFBhdGg7IC8vIEF2b2lk
IGRldGFjaGluZyB0aGUgUVBhaW50ZXJQYXRoCisgICAgUVBhaW50ZXIqIHAgPSBwbGF0Zm9ybVBy
aXZhdGUoKS0+cCgpOworICAgIFFQYWludGVyUGF0aCYgcGF0aCA9IHBsYXRmb3JtUHJpdmF0ZSgp
LT5jdXJyZW50UGF0aDsgLy8gQXZvaWQgZGV0YWNoaW5nIHRoZSBRUGFpbnRlclBhdGgKICAgICBw
YXRoLnNldEZpbGxSdWxlKHRvUXRGaWxsUnVsZShmaWxsUnVsZSgpKSk7CiAKLSAgICBpZiAobV9k
YXRhLT5oYXNTaGFkb3coKSkgeworICAgIGlmIChwbGF0Zm9ybVByaXZhdGUoKS0+aGFzU2hhZG93
KCkpIHsKICAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOwog
ICAgICAgICBpZiAoc2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdwog
ICAgICAgICAgICAgJiYgIW1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybiAmJiAhbV9jb21tb24t
PnN0YXRlLmZpbGxHcmFkaWVudCkKQEAgLTU0Nyw3ICs1NDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFBhdGgoKQogICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBz
aGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgcGF0aC5jb250cm9sUG9pbnRSZWN0KCkpOwogICAg
ICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2Up
OwotICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxQYXRoKHBhdGgsIFFDb2xvciht
X2RhdGEtPnNoYWRvdy5tX2NvbG9yKSk7CisgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+
ZmlsbFBhdGgocGF0aCwgUUNvbG9yKHBsYXRmb3JtUHJpdmF0ZSgpLT5zaGFkb3cubV9jb2xvcikp
OwogICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIocCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTU2Myw3ICs1NjIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFBhdGgoKQogICAgIH0gZWxzZQogICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBwLT5icnVz
aCgpKTsKIAotICAgIG1fZGF0YS0+Y2xlYXJDdXJyZW50UGF0aCgpOworICAgIHBsYXRmb3JtUHJp
dmF0ZSgpLT5jbGVhckN1cnJlbnRQYXRoKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoKCkKQEAgLTU3MSwxOSArNTcwLDE5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoKCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOworICAgIFFQYWludGVyKiBwID0gcGxh
dGZvcm1Qcml2YXRlKCktPnAoKTsKICAgICBRUGVuIHBlbihwLT5wZW4oKSk7Ci0gICAgUVBhaW50
ZXJQYXRoJiBwYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aDsgLy8gQXZvaWQgZGV0YWNoaW5nIHRo
ZSBRUGFpbnRlclBhdGgKKyAgICBRUGFpbnRlclBhdGgmIHBhdGggPSBwbGF0Zm9ybVByaXZhdGUo
KS0+Y3VycmVudFBhdGg7IC8vIEF2b2lkIGRldGFjaGluZyB0aGUgUVBhaW50ZXJQYXRoCiAgICAg
cGF0aC5zZXRGaWxsUnVsZSh0b1F0RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOwogCi0gICAgaWYgKG1f
ZGF0YS0+aGFzU2hhZG93KCkpIHsKKyAgICBpZiAocGxhdGZvcm1Qcml2YXRlKCktPmhhc1NoYWRv
dygpKSB7CiAgICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsK
IAogICAgICAgICBpZiAoc2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRv
dwogICAgICAgICAgICAgJiYgIW1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuICYmICFtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIFFQZW4g
c2hhZG93UGVuKHBlbik7Ci0gICAgICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3IobV9kYXRhLT5z
aGFkb3cubV9jb2xvcik7CisgICAgICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3IocGxhdGZvcm1Q
cml2YXRlKCktPnNoYWRvdy5tX2NvbG9yKTsKICAgICAgICAgICAgIFFQb2ludEYgb2Zmc2V0ID0g
c2hhZG93LT5vZmZzZXQoKTsKICAgICAgICAgICAgIGNvbnN0IFFUcmFuc2Zvcm0gdHJhbnNmb3Jt
ID0gcC0+dHJhbnNmb3JtKCk7CiAgICAgICAgICAgICBpZiAodHJhbnNmb3JtLmlzU2NhbGluZygp
KSB7CkBAIC02MDQsNyArNjAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgo
KQogICAgICAgICAgICAgYm91bmRpbmdSZWN0LmluZmxhdGUocGVuLm1pdGVyTGltaXQoKSArIHBl
bi53aWR0aEYoKSk7CiAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRv
dy0+YmVnaW5TaGFkb3dMYXllcihwLCBib3VuZGluZ1JlY3QpOwogICAgICAgICAgICAgaWYgKHNo
YWRvd1BhaW50ZXIpIHsKLSAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5
KHN0YXRpY19jYXN0PHFyZWFsPihtX2RhdGEtPnNoYWRvdy5tX2NvbG9yLmFscGhhKCkpIC8gMjU1
KTsKKyAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0
PHFyZWFsPihwbGF0Zm9ybVByaXZhdGUoKS0+c2hhZG93Lm1fY29sb3IuYWxwaGEoKSkgLyAyNTUp
OwogICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgocGF0aCwgcGVuKTsK
ICAgICAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHApOwogICAgICAgICAgICAg
fQpAQCAtNjI0LDcgKzYyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkK
ICAgICAgICAgcC0+c3Ryb2tlUGF0aChwYXRoLCBwZW4pOwogICAgIH0gZWxzZQogICAgICAgICBw
LT5zdHJva2VQYXRoKHBhdGgsIHBlbik7Ci0gICAgbV9kYXRhLT5jbGVhckN1cnJlbnRQYXRoKCk7
CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPmNsZWFyQ3VycmVudFBhdGgoKTsKIH0KIAogc3RhdGlj
IGlubGluZSB2b2lkIGRyYXdSZXBlYXRQYXR0ZXJuKFFQYWludGVyKiBwLCBRUGl4bWFwKiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBib29sIHJlcGVhdFgsIGNvbnN0IGJvb2wg
cmVwZWF0WSkKQEAgLTY5OSw3ICs2OTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QoY29uc3QgRmxvCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKKyAgICBRUGFpbnRlciogcCA9IHBs
YXRmb3JtUHJpdmF0ZSgpLT5wKCk7CiAgICAgUVJlY3RGIG5vcm1hbGl6ZWRSZWN0ID0gcmVjdC5u
b3JtYWxpemVkKCk7CiAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygp
OwogCkBAIC03MDcsNyArNzA2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsbwogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwogICAgICAgICBRQnJ1c2gg
YnJ1c2gobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
YWZmaW5lKSk7CiAgICAgICAgIFFQaXhtYXAqIGltYWdlID0gbV9jb21tb24tPnN0YXRlLmZpbGxQ
YXR0ZXJuLT50aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICAg
ICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBtX2RhdGEtPmhhc1NoYWRvdygpID8gc2hhZG93
LT5iZWdpblNoYWRvd0xheWVyKHAsIG5vcm1hbGl6ZWRSZWN0KSA6IDA7CisgICAgICAgIFFQYWlu
dGVyKiBzaGFkb3dQYWludGVyID0gcGxhdGZvcm1Qcml2YXRlKCktPmhhc1NoYWRvdygpID8gc2hh
ZG93LT5iZWdpblNoYWRvd0xheWVyKHAsIG5vcm1hbGl6ZWRSZWN0KSA6IDA7CiAgICAgICAgIGlm
IChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihzaGFkb3dQ
YWludGVyLCBpbWFnZSwgbm9ybWFsaXplZFJlY3QsIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVy
bi0+cmVwZWF0WCgpLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CiAg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNv
bXBvc2l0aW9uTW9kZV9Tb3VyY2VJbik7CkBAIC03MTgsNyArNzE3LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIH0gZWxzZSBpZiAobV9jb21tb24tPnN0
YXRlLmZpbGxHcmFkaWVudCkgewogICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fY29tbW9uLT5zdGF0
ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAgICAgIGJydXNoLnNldFRy
YW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNm
b3JtKCkpOwotICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IG1fZGF0YS0+aGFzU2hh
ZG93KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgbm9ybWFsaXplZFJlY3QpIDogMDsK
KyAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBwbGF0Zm9ybVByaXZhdGUoKS0+aGFz
U2hhZG93KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgbm9ybWFsaXplZFJlY3QpIDog
MDsKICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBicnVzaCk7CiAgICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3Vy
Y2VJbik7CkBAIC03MjcsNyArNzI2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsbwogICAgICAgICB9CiAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0
LCBicnVzaCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fZGF0YS0+aGFzU2hhZG93KCkp
IHsKKyAgICAgICAgaWYgKHBsYXRmb3JtUHJpdmF0ZSgpLT5oYXNTaGFkb3coKSkgewogICAgICAg
ICAgICAgaWYgKHNoYWRvdy0+bV90eXBlID09IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cpIHsK
ICAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5T
aGFkb3dMYXllcihwLCBub3JtYWxpemVkUmVjdCk7CiAgICAgICAgICAgICAgICAgaWYgKHNoYWRv
d1BhaW50ZXIpIHsKQEAgLTc2MCwxMSArNzU5LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG8KICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFjb2xvci5p
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+c29saWRDb2xvci5zZXRD
b2xvcihjb2xvcik7Ci0gICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKKyAgICBwbGF0Zm9y
bVByaXZhdGUoKS0+c29saWRDb2xvci5zZXRDb2xvcihjb2xvcik7CisgICAgUVBhaW50ZXIqIHAg
PSBwbGF0Zm9ybVByaXZhdGUoKS0+cCgpOwogICAgIFFSZWN0RiBub3JtYWxpemVkUmVjdCA9IHJl
Y3Qubm9ybWFsaXplZCgpOwogCi0gICAgaWYgKG1fZGF0YS0+aGFzU2hhZG93KCkpIHsKKyAgICBp
ZiAocGxhdGZvcm1Qcml2YXRlKCktPmhhc1NoYWRvdygpKSB7CiAgICAgICAgIENvbnRleHRTaGFk
b3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKIAogICAgICAgICBpZiAoc2hhZG93LT5tX3R5
cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdykgewpAQCAtNzgwLDcgKzc3OSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICAgICAgfQogICAgIH0K
IAotICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBtX2RhdGEtPnNvbGlkQ29sb3IpOwor
ICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBwbGF0Zm9ybVByaXZhdGUoKS0+c29saWRD
b2xvcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9w
UmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJp
Z2h0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKQEAgLTc5MCwy
MCArNzg5LDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY28KIAog
ICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnQsIHRv
cFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7Ci0gICAgUVBhaW50ZXIqIHAgPSBtX2Rh
dGEtPnAoKTsKLSAgICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgeworICAgIFFQYWludGVyKiBw
ID0gcGxhdGZvcm1Qcml2YXRlKCktPnAoKTsKKyAgICBpZiAocGxhdGZvcm1Qcml2YXRlKCktPmhh
c1NoYWRvdygpKSB7CiAgICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFk
b3coKTsKIAogICAgICAgICBpZiAoc2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1
clNoYWRvdykgewogICAgICAgICAgICAgLy8gV2UgZG8gbm90IG5lZWQgYW55IGxheWVyIGZvciBz
aW1wbGUgc2hhZG93LgotICAgICAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9m
ZnNldCgpKTsKLSAgICAgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFD
b2xvcihtX2RhdGEtPnNoYWRvdy5tX2NvbG9yKSk7Ci0gICAgICAgICAgICBwLT50cmFuc2xhdGUo
LW1fZGF0YS0+c2hhZG93Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShwbGF0
Zm9ybVByaXZhdGUoKS0+c2hhZG93Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIHAtPmZpbGxQYXRo
KHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihwbGF0Zm9ybVByaXZhdGUoKS0+c2hhZG93Lm1f
Y29sb3IpKTsKKyAgICAgICAgICAgIHAtPnRyYW5zbGF0ZSgtcGxhdGZvcm1Qcml2YXRlKCktPnNo
YWRvdy5vZmZzZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBRUGFpbnRlciog
c2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihwLCByZWN0KTsKICAgICAg
ICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsK
LSAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0
aCgpLCBRQ29sb3IobV9kYXRhLT5zaGFkb3cubV9jb2xvcikpOworICAgICAgICAgICAgICAgIHNo
YWRvd1BhaW50ZXItPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihwbGF0Zm9y
bVByaXZhdGUoKS0+c2hhZG93Lm1fY29sb3IpKTsKICAgICAgICAgICAgICAgICBzaGFkb3ctPmVu
ZFNoYWRvd0xheWVyKHApOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04MTMsMzEgKzgx
MiwzMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQogewotICAgIG1fZGF0YS0+Y2xlYXJDdXJyZW50
UGF0aCgpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jbGVhckN1cnJlbnRQYXRoKCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAg
aWYgKCFtX2RhdGEtPmN1cnJlbnRQYXRoLmVsZW1lbnRDb3VudCgpKSB7Ci0gICAgICAgIG1fZGF0
YS0+Y3VycmVudFBhdGggPSBwYXRoLnBsYXRmb3JtUGF0aCgpOworICAgIGlmICghcGxhdGZvcm1Q
cml2YXRlKCktPmN1cnJlbnRQYXRoLmVsZW1lbnRDb3VudCgpKSB7CisgICAgICAgIHBsYXRmb3Jt
UHJpdmF0ZSgpLT5jdXJyZW50UGF0aCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgbV9kYXRhLT5jdXJyZW50UGF0aC5hZGRQYXRoKHBhdGgucGxhdGZv
cm1QYXRoKCkpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jdXJyZW50UGF0aC5hZGRQYXRoKHBh
dGgucGxhdGZvcm1QYXRoKCkpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDo6aW5UcmFuc3Bh
cmVuY3lMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bGF5ZXJDb3VudDsKKyAg
ICByZXR1cm4gcGxhdGZvcm1Qcml2YXRlKCktPmxheWVyQ291bnQ7CiB9CiAKIFBsYXRmb3JtUGF0
aCogR3JhcGhpY3NDb250ZXh0OjpjdXJyZW50UGF0aCgpCiB7Ci0gICAgcmV0dXJuICZtX2RhdGEt
PmN1cnJlbnRQYXRoOworICAgIHJldHVybiAmcGxhdGZvcm1Qcml2YXRlKCktPmN1cnJlbnRQYXRo
OwogfQogCiBDb250ZXh0U2hhZG93KiBHcmFwaGljc0NvbnRleHQ6OmNvbnRleHRTaGFkb3coKQog
ewotICAgIHJldHVybiAmbV9kYXRhLT5zaGFkb3c7CisgICAgcmV0dXJuICZwbGF0Zm9ybVByaXZh
dGUoKS0+c2hhZG93OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCkBAIC04NDUsNyArODQ0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgRmxvYXRSZQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZGF0YS0+cCgpLT5zZXRDbGlwUmVjdChyZWN0LCBRdDo6SW50ZXJzZWN0
Q2xpcCk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPnAoKS0+c2V0Q2xpcFJlY3QocmVjdCwgUXQ6
OkludGVyc2VjdENsaXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoV2lu
ZFJ1bGUgY2xpcFJ1bGUpCkBAIC04NTMsOCArODUyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKFdpbmRSdWxlIAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7Ci0gICAgUVBhaW50ZXJQ
YXRoIG5ld1BhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoOworICAgIFFQYWludGVyKiBwID0gcGxh
dGZvcm1Qcml2YXRlKCktPnAoKTsKKyAgICBRUGFpbnRlclBhdGggbmV3UGF0aCA9IHBsYXRmb3Jt
UHJpdmF0ZSgpLT5jdXJyZW50UGF0aDsKICAgICBuZXdQYXRoLnNldEZpbGxSdWxlKGNsaXBSdWxl
ID09IFJVTEVfRVZFTk9ERCA/IFF0OjpPZGRFdmVuRmlsbCA6IFF0OjpXaW5kaW5nRmlsbCk7CiAg
ICAgcC0+c2V0Q2xpcFBhdGgobmV3UGF0aCwgUXQ6OkludGVyc2VjdENsaXApOwogfQpAQCAtODY2
LDkgKzg2NSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnMKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CisgICAgUVBhaW50ZXIqIHAg
PSBwbGF0Zm9ybVByaXZhdGUoKS0+cCgpOwogICAgIGNvbnN0IGJvb2wgYW50aUFsaWFzID0gcC0+
dGVzdFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZyk7Ci0gICAgcC0+c2V0UmVuZGVy
SGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBtX2RhdGEtPmFudGlBbGlhc2luZ0ZvclJlY3Rz
QW5kTGluZXMpOworICAgIHAtPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywg
cGxhdGZvcm1Qcml2YXRlKCktPmFudGlBbGlhc2luZ0ZvclJlY3RzQW5kTGluZXMpOwogCiAgICAg
Y29uc3QgUUJydXNoIG9sZEJydXNoID0gcC0+YnJ1c2goKTsKIApAQCAtODk4LDkgKzg5Nyw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnMKICAgICBpZiAoIXJlY3Rz
LnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAo
KTsKKyAgICBRUGFpbnRlciogcCA9IHBsYXRmb3JtUHJpdmF0ZSgpLT5wKCk7CiAgICAgY29uc3Qg
Ym9vbCBhbnRpQWxpYXMgPSBwLT50ZXN0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5n
KTsKLSAgICBwLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIG1fZGF0YS0+
YW50aUFsaWFzaW5nRm9yUmVjdHNBbmRMaW5lcyk7CisgICAgcC0+c2V0UmVuZGVySGludChRUGFp
bnRlcjo6QW50aWFsaWFzaW5nLCBwbGF0Zm9ybVByaXZhdGUoKS0+YW50aUFsaWFzaW5nRm9yUmVj
dHNBbmRMaW5lcyk7CiAKICAgICBjb25zdCBRUGVuIG9sZFBlbiA9IHAtPnBlbigpOwogICAgIGNv
bnN0IFFCcnVzaCBvbGRCcnVzaCA9IHAtPmJydXNoKCk7CkBAIC05MzksNyArOTM4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjbwogICAgIC8vIElmIHBhaW50ZW5n
aW5lIHR5cGUgaXMgWDExIHRvIGF2b2lkIGFydGlmYWN0cwogICAgIC8vIGxpa2UgYnVnIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjI0OAogI2lmIGRlZmluZWQoUV9X
U19YMTEpCi0gICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKKyAgICBRUGFpbnRlciogcCA9
IHBsYXRmb3JtUHJpdmF0ZSgpLT5wKCk7CiAgICAgaWYgKHAtPnBhaW50RW5naW5lKCktPnR5cGUo
KSA9PSBRUGFpbnRFbmdpbmU6OlgxMSkgewogICAgICAgICAvLyBJZiBzdHJva2UgdGhpY2tuZXNz
IGlzIG9kZCB3ZSBuZWVkIGRlY3JlYXNlIFkgY29vcmRpbmF0ZSBieSAxIHBpeGVsLAogICAgICAg
ICAvLyBiZWNhdXNlIGluc2lkZSBtZXRob2QgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKC4u
LiksIHdoaWNoCkBAIC0xMDAyLDIwICsxMDAxLDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVNoYWRvdygKICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3Mg
Y29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CiAgICAg
ICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUg
b3Bwb3NpdGUgWSBheGlzCiAgICAgICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dPZmZzZXQgPSBG
bG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIG1fZGF0YS0+
c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgo
KSwgLXNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgcGxhdGZvcm1Qcml2YXRlKCktPnNoYWRvdyA9
IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXpl
LmhlaWdodCgpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250
ZXh0U2hhZG93KGNvbG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKSk7CisgICAgICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93
KGNvbG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CiAg
ICAgfQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCiB7
Ci0gICAgbV9kYXRhLT5zaGFkb3cuY2xlYXIoKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+c2hh
ZG93LmNsZWFyKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwdXNoVHJhbnNwYXJlbmN5
TGF5ZXJJbnRlcm5hbChjb25zdCBRUmVjdCAmcmVjdCwgcXJlYWwgb3BhY2l0eSwgUVBpeG1hcCYg
YWxwaGFNYXNrKQogewotICAgbV9kYXRhLT5sYXllcnMucHVzaChuZXcgVHJhbnNwYXJlbmN5TGF5
ZXIobV9kYXRhLT5wKCksIG1fZGF0YS0+cCgpLT50cmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3QpLCAx
LjAsIGFscGhhTWFzaykpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5sYXllcnMucHVzaChuZXcg
VHJhbnNwYXJlbmN5TGF5ZXIocGxhdGZvcm1Qcml2YXRlKCktPnAoKSwgcGxhdGZvcm1Qcml2YXRl
KCktPnAoKS0+dHJhbnNmb3JtKCkubWFwUmVjdChyZWN0KSwgMS4wLCBhbHBoYU1hc2spKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkKQEAgLTEwMjUsMTIgKzEwMjQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2lu
VHJhbnNwYXJlbmN5TAogCiAgICAgaW50IHgsIHksIHcsIGg7CiAgICAgeCA9IHkgPSAwOwotICAg
IFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CisgICAgUVBhaW50ZXIqIHAgPSBwbGF0Zm9ybVBy
aXZhdGUoKS0+cCgpOwogICAgIGNvbnN0IFFQYWludERldmljZSogZGV2aWNlID0gcC0+ZGV2aWNl
KCk7CiAgICAgdyA9IGRldmljZS0+d2lkdGgoKTsKICAgICBoID0gZGV2aWNlLT5oZWlnaHQoKTsK
IAotICAgIFFSZWN0RiBjbGlwID0gbV9kYXRhLT5jbGlwQm91bmRpbmdSZWN0KCk7CisgICAgUVJl
Y3RGIGNsaXAgPSBwbGF0Zm9ybVByaXZhdGUoKS0+Y2xpcEJvdW5kaW5nUmVjdCgpOwogICAgIFFS
ZWN0RiBkZXZpY2VDbGlwID0gcC0+dHJhbnNmb3JtKCkubWFwUmVjdChjbGlwKTsKICAgICB4ID0g
aW50KHFCb3VuZChxcmVhbCgwKSwgZGV2aWNlQ2xpcC54KCksIChxcmVhbCl3KSk7CiAgICAgeSA9
IGludChxQm91bmQocXJlYWwoMCksIGRldmljZUNsaXAueSgpLCAocXJlYWwpaCkpOwpAQCAtMTAz
OCw4ICsxMDM3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TAog
ICAgIGggPSBpbnQocUJvdW5kKHFyZWFsKDApLCBkZXZpY2VDbGlwLmhlaWdodCgpLCAocXJlYWwp
aCkgKyAyKTsKIAogICAgIFFQaXhtYXAgZW1wdHlBbHBoYU1hc2s7Ci0gICAgbV9kYXRhLT5sYXll
cnMucHVzaChuZXcgVHJhbnNwYXJlbmN5TGF5ZXIobV9kYXRhLT5wKCksIFFSZWN0KHgsIHksIHcs
IGgpLCBvcGFjaXR5LCBlbXB0eUFscGhhTWFzaykpOwotICAgICsrbV9kYXRhLT5sYXllckNvdW50
OworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5sYXllcnMucHVzaChuZXcgVHJhbnNwYXJlbmN5TGF5
ZXIocGxhdGZvcm1Qcml2YXRlKCktPnAoKSwgUVJlY3QoeCwgeSwgdywgaCksIG9wYWNpdHksIGVt
cHR5QWxwaGFNYXNrKSk7CisgICAgKytwbGF0Zm9ybVByaXZhdGUoKS0+bGF5ZXJDb3VudDsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKQEAgLTEwNDcs
MTYgKzEwNDYsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheQog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRyYW5z
cGFyZW5jeUxheWVyKiBsYXllciA9IG1fZGF0YS0+bGF5ZXJzLnBvcCgpOworICAgIFRyYW5zcGFy
ZW5jeUxheWVyKiBsYXllciA9IHBsYXRmb3JtUHJpdmF0ZSgpLT5sYXllcnMucG9wKCk7CiAgICAg
aWYgKCFsYXllci0+YWxwaGFNYXNrLmlzTnVsbCgpKSB7CiAgICAgICAgIGxheWVyLT5wYWludGVy
LnJlc2V0VHJhbnNmb3JtKCk7CiAgICAgICAgIGxheWVyLT5wYWludGVyLnNldENvbXBvc2l0aW9u
TW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOwogICAgICAgICBs
YXllci0+cGFpbnRlci5kcmF3UGl4bWFwKFFQb2ludCgpLCBsYXllci0+YWxwaGFNYXNrKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgLS1tX2RhdGEtPmxheWVyQ291bnQ7IC8vIHNlZSB0aGUgY29tbWVu
dCBmb3IgbGF5ZXJDb3VudAorICAgICAgICAtLXBsYXRmb3JtUHJpdmF0ZSgpLT5sYXllckNvdW50
OyAvLyBzZWUgdGhlIGNvbW1lbnQgZm9yIGxheWVyQ291bnQKICAgICBsYXllci0+cGFpbnRlci5l
bmQoKTsKIAotICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CisgICAgUVBhaW50ZXIqIHAg
PSBwbGF0Zm9ybVByaXZhdGUoKS0+cCgpOwogICAgIHAtPnNhdmUoKTsKICAgICBwLT5yZXNldFRy
YW5zZm9ybSgpOwogICAgIHAtPnNldE9wYWNpdHkobGF5ZXItPm9wYWNpdHkpOwpAQCAtMTA3MSw3
ICsxMDcwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbAogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFFQYWludGVy
KiBwID0gbV9kYXRhLT5wKCk7CisgICAgUVBhaW50ZXIqIHAgPSBwbGF0Zm9ybVByaXZhdGUoKS0+
cCgpOwogICAgIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGUgY3VycmVudENvbXBvc2l0aW9uTW9k
ZSA9IHAtPmNvbXBvc2l0aW9uTW9kZSgpOwogICAgIGlmIChwLT5wYWludEVuZ2luZSgpLT5oYXNG
ZWF0dXJlKFFQYWludEVuZ2luZTo6UG9ydGVyRHVmZikpCiAgICAgICAgIHAtPnNldENvbXBvc2l0
aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7CkBAIC0xMDg4LDcgKzEw
ODcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGCiAgICAgUVBh
aW50ZXJQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRSZWN0KHJlY3QpOwogICAgIHNldFN0cm9rZVRo
aWNrbmVzcyh3aWR0aCk7Ci0gICAgbV9kYXRhLT5jdXJyZW50UGF0aCA9IHBhdGg7CisgICAgcGxh
dGZvcm1Qcml2YXRlKCktPmN1cnJlbnRQYXRoID0gcGF0aDsKIAogICAgIHN0cm9rZVBhdGgoKTsK
IH0KQEAgLTEwOTgsNyArMTA5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2Fw
KExpbmVDYXAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOworICAgIFFQYWludGVyKiBwID0gcGxhdGZv
cm1Qcml2YXRlKCktPnAoKTsKICAgICBRUGVuIG5QZW4gPSBwLT5wZW4oKTsKICAgICBuUGVuLnNl
dENhcFN0eWxlKHRvUXRMaW5lQ2FwKGxjKSk7CiAgICAgcC0+c2V0UGVuKG5QZW4pOwpAQCAtMTEw
Niw3ICsxMTA1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcAog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNo
ZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsK
KyAgICBRUGFpbnRlciogcCA9IHBsYXRmb3JtUHJpdmF0ZSgpLT5wKCk7CiAgICAgUVBlbiBwZW4g
PSBwLT5wZW4oKTsKICAgICB1bnNpZ25lZCBkYXNoTGVuZ3RoID0gZGFzaGVzLnNpemUoKTsKICAg
ICBpZiAoZGFzaExlbmd0aCkgewpAQCAtMTEzMSw3ICsxMTMwLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVKb2luKExpbmVKbwogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CisgICAgUVBh
aW50ZXIqIHAgPSBwbGF0Zm9ybVByaXZhdGUoKS0+cCgpOwogICAgIFFQZW4gblBlbiA9IHAtPnBl
bigpOwogICAgIG5QZW4uc2V0Sm9pblN0eWxlKHRvUXRMaW5lSm9pbihsaikpOwogICAgIHAtPnNl
dFBlbihuUGVuKTsKQEAgLTExNDIsNyArMTE0MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRNaXRlckxpbWl0KGZsb2EKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOworICAgIFFQYWludGVyKiBw
ID0gcGxhdGZvcm1Qcml2YXRlKCktPnAoKTsKICAgICBRUGVuIG5QZW4gPSBwLT5wZW4oKTsKICAg
ICBuUGVuLnNldE1pdGVyTGltaXQobGltaXQpOwogICAgIHAtPnNldFBlbihuUGVuKTsKQEAgLTEx
NTIsNyArMTE1MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShmbG9hdCBvcGEK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgUVBh
aW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKKyAgICBRUGFpbnRlciogcCA9IHBsYXRmb3JtUHJpdmF0
ZSgpLT5wKCk7CiAgICAgcC0+c2V0T3BhY2l0eShvcGFjaXR5KTsKIH0KIApAQCAtMTE2MSw4ICsx
MTYwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdAogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2RhdGEt
PnAoKS0+cGFpbnRFbmdpbmUoKS0+aGFzRmVhdHVyZShRUGFpbnRFbmdpbmU6OlBvcnRlckR1ZmYp
KQotICAgICAgICBtX2RhdGEtPnAoKS0+c2V0Q29tcG9zaXRpb25Nb2RlKHRvUXRDb21wb3NpdGlv
bk1vZGUob3ApKTsKKyAgICBpZiAocGxhdGZvcm1Qcml2YXRlKCktPnAoKS0+cGFpbnRFbmdpbmUo
KS0+aGFzRmVhdHVyZShRUGFpbnRFbmdpbmU6OlBvcnRlckR1ZmYpKQorICAgICAgICBwbGF0Zm9y
bVByaXZhdGUoKS0+cCgpLT5zZXRDb21wb3NpdGlvbk1vZGUodG9RdENvbXBvc2l0aW9uTW9kZShv
cCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQpA
QCAtMTE3MCw3ICsxMTY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0
aCYgcAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fZGF0YS0+cCgpLT5zZXRDbGlwUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRdDo6SW50ZXJz
ZWN0Q2xpcCk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPnAoKS0+c2V0Q2xpcFBhdGgocGF0aC5w
bGF0Zm9ybVBhdGgoKSwgUXQ6OkludGVyc2VjdENsaXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMTE4MCw3ICsxMTc5LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUAogCiAgICAgUVBhaW50ZXJQ
YXRoIGNsaXBQYXRoID0gcGF0aC5wbGF0Zm9ybVBhdGgoKTsKICAgICBjbGlwUGF0aC5zZXRGaWxs
UnVsZShRdDo6V2luZGluZ0ZpbGwpOwotICAgIG1fZGF0YS0+cCgpLT5zZXRDbGlwUGF0aChjbGlw
UGF0aCwgUXQ6OkludGVyc2VjdENsaXApOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5wKCktPnNl
dENsaXBQYXRoKGNsaXBQYXRoLCBRdDo6SW50ZXJzZWN0Q2xpcCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0xMTg4LDEyICsxMTg3LDEy
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBRUGFpbnRlciogcCA9IG1f
ZGF0YS0+cCgpOworICAgIFFQYWludGVyKiBwID0gcGxhdGZvcm1Qcml2YXRlKCktPnAoKTsKICAg
ICBRUGFpbnRlclBhdGggY2xpcHBlZE91dCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7CiAgICAgUVBh
aW50ZXJQYXRoIG5ld0NsaXA7CiAgICAgbmV3Q2xpcC5zZXRGaWxsUnVsZShRdDo6T2RkRXZlbkZp
bGwpOwogICAgIGlmIChwLT5oYXNDbGlwcGluZygpKSB7Ci0gICAgICAgIG5ld0NsaXAuYWRkUmVj
dChtX2RhdGEtPmNsaXBCb3VuZGluZ1JlY3QoKSk7CisgICAgICAgIG5ld0NsaXAuYWRkUmVjdChw
bGF0Zm9ybVByaXZhdGUoKS0+Y2xpcEJvdW5kaW5nUmVjdCgpKTsKICAgICAgICAgbmV3Q2xpcC5h
ZGRQYXRoKGNsaXBwZWRPdXQpOwogICAgICAgICBwLT5zZXRDbGlwUGF0aChuZXdDbGlwLCBRdDo6
SW50ZXJzZWN0Q2xpcCk7CiAgICAgfSBlbHNlIHsKQEAgLTEyMDksMTEgKzEyMDgsMTEgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LAogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+cCgpLT50cmFuc2xhdGUo
eCwgeSk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPnAoKS0+dHJhbnNsYXRlKHgsIHkpOwogCi0g
ICAgaWYgKCFtX2RhdGEtPmN1cnJlbnRQYXRoLmlzRW1wdHkoKSkgeworICAgIGlmICghcGxhdGZv
cm1Qcml2YXRlKCktPmN1cnJlbnRQYXRoLmlzRW1wdHkoKSkgewogICAgICAgICBRVHJhbnNmb3Jt
IG1hdHJpeDsKLSAgICAgICAgbV9kYXRhLT5jdXJyZW50UGF0aCA9IG1fZGF0YS0+Y3VycmVudFBh
dGggKiBtYXRyaXgudHJhbnNsYXRlKC14LCAteSk7CisgICAgICAgIHBsYXRmb3JtUHJpdmF0ZSgp
LT5jdXJyZW50UGF0aCA9IHBsYXRmb3JtUHJpdmF0ZSgpLT5jdXJyZW50UGF0aCAqIG1hdHJpeC50
cmFuc2xhdGUoLXgsIC15KTsKICAgICAgICAgbV9jb21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm0u
dHJhbnNsYXRlKHgsIHkpOwogICAgIH0KIH0KQEAgLTEyMjMsMTEgKzEyMjIsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYQogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+cCgpLT5yb3RhdGUoMTgwIC8g
TV9QSSpyYWRpYW5zKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+cCgpLT5yb3RhdGUoMTgwIC8g
TV9QSSpyYWRpYW5zKTsKIAotICAgIGlmICghbV9kYXRhLT5jdXJyZW50UGF0aC5pc0VtcHR5KCkp
IHsKKyAgICBpZiAoIXBsYXRmb3JtUHJpdmF0ZSgpLT5jdXJyZW50UGF0aC5pc0VtcHR5KCkpIHsK
ICAgICAgICAgUVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVudFBhdGgg
PSBtX2RhdGEtPmN1cnJlbnRQYXRoICogbWF0cml4LnJvdGF0ZSgtMTgwIC8gTV9QSSpyYWRpYW5z
KTsKKyAgICAgICAgcGxhdGZvcm1Qcml2YXRlKCktPmN1cnJlbnRQYXRoID0gcGxhdGZvcm1Qcml2
YXRlKCktPmN1cnJlbnRQYXRoICogbWF0cml4LnJvdGF0ZSgtMTgwIC8gTV9QSSpyYWRpYW5zKTsK
ICAgICAgICAgbV9jb21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm0ucm90YXRlKHJhZGlhbnMpOwog
ICAgIH0KIH0KQEAgLTEyMzcsMTEgKzEyMzYsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNj
YWxlKGNvbnN0IEZsb2F0UwogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZGF0YS0+cCgpLT5zY2FsZShzLndpZHRoKCksIHMuaGVpZ2h0KCkpOwor
ICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5wKCktPnNjYWxlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7
CiAKLSAgICBpZiAoIW1fZGF0YS0+Y3VycmVudFBhdGguaXNFbXB0eSgpKSB7CisgICAgaWYgKCFw
bGF0Zm9ybVByaXZhdGUoKS0+Y3VycmVudFBhdGguaXNFbXB0eSgpKSB7CiAgICAgICAgIFFUcmFu
c2Zvcm0gbWF0cml4OwotICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gbV9kYXRhLT5jdXJy
ZW50UGF0aCAqIG1hdHJpeC5zY2FsZSgxIC8gcy53aWR0aCgpLCAxIC8gcy5oZWlnaHQoKSk7Cisg
ICAgICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jdXJyZW50UGF0aCA9IHBsYXRmb3JtUHJpdmF0ZSgp
LT5jdXJyZW50UGF0aCAqIG1hdHJpeC5zY2FsZSgxIC8gcy53aWR0aCgpLCAxIC8gcy5oZWlnaHQo
KSk7CiAgICAgICAgIG1fY29tbW9uLT5zdGF0ZS5wYXRoVHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9y
bShzLndpZHRoKCksIHMuaGVpZ2h0KCkpOwogICAgIH0KIH0KQEAgLTEyNTEsMTEgKzEyNTAsMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UgogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFFQYWludGVyKiBwID0gbV9k
YXRhLT5wKCk7CisgICAgUVBhaW50ZXIqIHAgPSBwbGF0Zm9ybVByaXZhdGUoKS0+cCgpOwogICAg
IFFQYWludGVyUGF0aCBuZXdDbGlwOwogICAgIG5ld0NsaXAuc2V0RmlsbFJ1bGUoUXQ6Ok9kZEV2
ZW5GaWxsKTsKICAgICBpZiAocC0+aGFzQ2xpcHBpbmcoKSkgewotICAgICAgICBuZXdDbGlwLmFk
ZFJlY3QobV9kYXRhLT5jbGlwQm91bmRpbmdSZWN0KCkpOworICAgICAgICBuZXdDbGlwLmFkZFJl
Y3QocGxhdGZvcm1Qcml2YXRlKCktPmNsaXBCb3VuZGluZ1JlY3QoKSk7CiAgICAgICAgIG5ld0Ns
aXAuYWRkUmVjdChRUmVjdChyZWN0KSk7CiAgICAgICAgIHAtPnNldENsaXBQYXRoKG5ld0NsaXAs
IFF0OjpJbnRlcnNlY3RDbGlwKTsKICAgICB9IGVsc2UgewpAQCAtMTI4Niw3ICsxMjg1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwogCiAgICAgcGF0aC5zZXRG
aWxsUnVsZShRdDo6T2RkRXZlbkZpbGwpOwogCi0gICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAo
KTsKKyAgICBRUGFpbnRlciogcCA9IHBsYXRmb3JtUHJpdmF0ZSgpLT5wKCk7CiAKICAgICBjb25z
dCBib29sIGFudGlBbGlhcyA9IHAtPnRlc3RSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNp
bmcpOwogICAgIHAtPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7
CkBAIC0xMjk5LDE0ICsxMjk4LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0o
Y29uc3QgQWYKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2RhdGEtPnAoKS0+c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cnVlKTsKKyAg
ICBwbGF0Zm9ybVByaXZhdGUoKS0+cCgpLT5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0sIHRy
dWUpOwogCiAgICAgLy8gVHJhbnNmb3JtYXRpb25zIHRvIHRoZSBjb250ZXh0IHNob3VsZG4ndCB0
cmFuc2Zvcm0gdGhlIGN1cnJlbnRQYXRoLgogICAgIC8vIFdlIGhhdmUgdG8gdW5kbyBldmVyeSBj
aGFuZ2UgbWFkZSB0byB0aGUgY29udGV4dCBmcm9tIHRoZSBjdXJyZW50UGF0aAogICAgIC8vIHRv
IGF2b2lkIHdyb25nIGRyYXdpbmdzLgotICAgIGlmICghbV9kYXRhLT5jdXJyZW50UGF0aC5pc0Vt
cHR5KCkgJiYgdHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgaWYgKCFwbGF0Zm9ybVBy
aXZhdGUoKS0+Y3VycmVudFBhdGguaXNFbXB0eSgpICYmIHRyYW5zZm9ybS5pc0ludmVydGlibGUo
KSkgewogICAgICAgICBRVHJhbnNmb3JtIG1hdHJpeCA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0g
ICAgICAgIG1fZGF0YS0+Y3VycmVudFBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoICogbWF0cml4
OworICAgICAgICBwbGF0Zm9ybVByaXZhdGUoKS0+Y3VycmVudFBhdGggPSBwbGF0Zm9ybVByaXZh
dGUoKS0+Y3VycmVudFBhdGggKiBtYXRyaXg7CiAgICAgICAgIG1fY29tbW9uLT5zdGF0ZS5wYXRo
VHJhbnNmb3JtLm11bHRpcGx5KHRyYW5zZm9ybS50b1RyYW5zZm9ybWF0aW9uTWF0cml4KCkpOwog
ICAgIH0KIH0KQEAgLTEzMjEsMTAgKzEzMjAsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU3Ryb2tlQwogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlz
VmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAo
KTsKKyAgICBRUGFpbnRlciogcCA9IHBsYXRmb3JtUHJpdmF0ZSgpLT5wKCk7CiAgICAgUVBlbiBu
ZXdQZW4ocC0+cGVuKCkpOwotICAgIG1fZGF0YS0+c29saWRDb2xvci5zZXRDb2xvcihjb2xvcik7
Ci0gICAgbmV3UGVuLnNldEJydXNoKG1fZGF0YS0+c29saWRDb2xvcik7CisgICAgcGxhdGZvcm1Q
cml2YXRlKCktPnNvbGlkQ29sb3Iuc2V0Q29sb3IoY29sb3IpOworICAgIG5ld1Blbi5zZXRCcnVz
aChwbGF0Zm9ybVByaXZhdGUoKS0+c29saWRDb2xvcik7CiAgICAgcC0+c2V0UGVuKG5ld1Blbik7
CiB9CiAKQEAgLTEzMzIsNyArMTMzMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVN0cm9rZVMKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKKyAgICBRUGFpbnRlciogcCA9IHBs
YXRmb3JtUHJpdmF0ZSgpLT5wKCk7CiAgICAgUVBlbiBuZXdQZW4ocC0+cGVuKCkpOwogICAgIG5l
d1Blbi5zZXRTdHlsZSh0b1FQZW5TdHlsZShzdHJva2VTdHlsZSkpOwogICAgIHAtPnNldFBlbihu
ZXdQZW4pOwpAQCAtMTM0Miw3ICsxMzQxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU3Ryb2tlVAogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOworICAgIFFQYWludGVyKiBwID0g
cGxhdGZvcm1Qcml2YXRlKCktPnAoKTsKICAgICBRUGVuIG5ld1BlbihwLT5wZW4oKSk7CiAgICAg
bmV3UGVuLnNldFdpZHRoRih0aGlja25lc3MpOwogICAgIHAtPnNldFBlbihuZXdQZW4pOwpAQCAt
MTM1MCwxOCArMTM0OSwxOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJv
a2VUCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBD
b2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKK3ByaW50Zigic2V0RmlsbENv
bG9yUXRcbiIpOwogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5zb2xpZENvbG9yLnNldENvbG9yKGNv
bG9yKTsKLSAgICBtX2RhdGEtPnAoKS0+c2V0QnJ1c2gobV9kYXRhLT5zb2xpZENvbG9yKTsKKyAg
ICBwbGF0Zm9ybVByaXZhdGUoKS0+c29saWRDb2xvci5zZXRDb2xvcihjb2xvcik7CisgICAgcGxh
dGZvcm1Qcml2YXRlKCktPnAoKS0+c2V0QnJ1c2gocGxhdGZvcm1Qcml2YXRlKCktPnNvbGlkQ29s
b3IpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxp
YXMoYm9vbCBlbmFibGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIG1fZGF0YS0+cCgpLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxp
YXNpbmcsIGVuYWJsZSk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPnAoKS0+c2V0UmVuZGVySGlu
dChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBlbmFibGUpOwogfQogCiAjaWZkZWYgUV9XU19XSU4K
QEAgLTE0NDAsNyArMTQ0MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93
c0NvbnQKICAgICAgICAgICAgIEFTU0VSVChpbmZvLmJtQml0c1BpeGVsID09IDMyKTsKIAogICAg
ICAgICAgICAgUVBpeG1hcCBwaXhtYXAgPSBRUGl4bWFwOjpmcm9tV2luSEJJVE1BUChiaXRtYXAs
IHN1cHBvcnRBbHBoYUJsZW5kID8gUVBpeG1hcDo6UHJlbXVsdGlwbGllZEFscGhhIDogUVBpeG1h
cDo6Tm9BbHBoYSk7Ci0gICAgICAgICAgICBtX2RhdGEtPnAoKS0+ZHJhd1BpeG1hcChkc3RSZWN0
LCBwaXhtYXApOworICAgICAgICAgICAgcGxhdGZvcm1Qcml2YXRlKCktPnAoKS0+ZHJhd1BpeG1h
cChkc3RSZWN0LCBwaXhtYXApOwogCiAgICAgICAgICAgICA6OkRlbGV0ZU9iamVjdChiaXRtYXAp
OwogICAgICAgICB9CkBAIC0xNDUyLDEzICsxNDUyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpyZWxlYXNlV2luZG93c0NvbnQKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKIHsKLSAgICBt
X2RhdGEtPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBxdWFsaXR5OworICAgIHBsYXRmb3Jt
UHJpdmF0ZSgpLT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsKIAogICAgIHN3
aXRjaCAocXVhbGl0eSkgewogICAgIGNhc2UgSW50ZXJwb2xhdGlvbk5vbmU6CiAgICAgY2FzZSBJ
bnRlcnBvbGF0aW9uTG93OgogICAgICAgICAvLyB1c2UgbmVhcmVzdC1uZWlnYm9yCi0gICAgICAg
IG1fZGF0YS0+cCgpLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpTbW9vdGhQaXhtYXBUcmFuc2Zv
cm0sIGZhbHNlKTsKKyAgICAgICAgcGxhdGZvcm1Qcml2YXRlKCktPnAoKS0+c2V0UmVuZGVySGlu
dChRUGFpbnRlcjo6U21vb3RoUGl4bWFwVHJhbnNmb3JtLCBmYWxzZSk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBJbnRlcnBvbGF0aW9uRGVmYXVsdDoKQEAgLTE0NjYsMTkgKzE0NjYsMTkg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdAogICAgIGNhc2UgSW50
ZXJwb2xhdGlvbkhpZ2g6CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gdXNlIHRoZSBmaWx0ZXIK
LSAgICAgICAgbV9kYXRhLT5wKCktPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OlNtb290aFBpeG1h
cFRyYW5zZm9ybSwgdHJ1ZSk7CisgICAgICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5wKCktPnNldFJl
bmRlckhpbnQoUVBhaW50ZXI6OlNtb290aFBpeG1hcFRyYW5zZm9ybSwgdHJ1ZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH07CiB9CiAKIEludGVycG9sYXRpb25RdWFsaXR5IEdyYXBoaWNzQ29udGV4
dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0
YS0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICByZXR1cm4gcGxhdGZvcm1Qcml2YXRl
KCktPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
Ojp0YWtlT3duZXJzaGlwT2ZQbGF0Zm9ybUNvbnRleHQoKQogewotICAgIG1fZGF0YS0+dGFrZU93
bmVyc2hpcE9mUGxhdGZvcm1Db250ZXh0KCk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPnRha2VP
d25lcnNoaXBPZlBsYXRmb3JtQ29udGV4dCgpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZS5oCShyZXZpc2lvbiA3MjkwOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsMTAgKzM4LDExIEBAIGNsYXNzIFBsYXRmb3JtQ29udGV4dFNraWE7CiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIC8vIFRoaXMgY2xhc3MganVzdCBob2xkcyBvbnRvIGEgUGxhdGZvcm1D
b250ZXh0U2tpYSBmb3IgR3JhcGhpY3NDb250ZXh0LgotY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSwgcHVibGljIEdyYXBoaWNzQ29u
dGV4dFByaXZhdGUgewogcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQpCi0gICAgICAgIDogbV9jb250
ZXh0KHBsYXRmb3JtQ29udGV4dCkgeyB9CisgICAgICAgIDogR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSgpCisgICAgICAgICwgbV9jb250ZXh0KHBsYXRmb3JtQ29udGV4dCkgeyB9CiAKICAgICBQbGF0
Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250
ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDcyOTA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsMjIg
KzIyMCwyMCBAQCB2b2lkIGFkZENvcm5lckFyYyhTa1BhdGgqIHBhdGgsIGNvbnN0IFNrCiAvLyBU
aGlzIG1heSBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgcG9pbnRlciB0byBjcmVhdGUgYSBncmFwaGlj
cyBjb250ZXh0IHRoYXQgaGFzCiAvLyBubyBwYWludGluZy4KIEdyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBnYykKLSAgICA6IG1fY29tbW9u
KGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGdjKSkKKyAgICA6IG1fY29tbW9uKG5ldyBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoZ2MpKQogewogICAgIHNldFBhaW50aW5nRGlzYWJsZWQo
IWdjIHx8ICFwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkpOwogfQogCiBHcmFwaGljc0NvbnRl
eHQ6On5HcmFwaGljc0NvbnRleHQoKQogewotICAgIGRlbGV0ZSBtX2RhdGE7Ci0gICAgdGhpcy0+
ZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOworICAgIGRlbGV0ZSBwbGF0
Zm9ybVByaXZhdGUoKTsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIXBhaW50aW5nRGlz
YWJsZWQoKSk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+Y29udGV4dCgpOworICAgIHJldHVybiBwbGF0
Zm9ybVByaXZhdGUoKS0+Y29udGV4dCgpOwogfQogCiAvLyBTdGF0ZSBzYXZpbmcgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dENHV2luLmNwcAkocmV2aXNpb24gNzI5MDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDEzICs2MiwxMiBAQCBzdGF0aWMgQ0dDb250ZXh0UmVmIENHQ29udGV4dFdpdGhIREMoSERDCiB9
CiAKIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxw
aGEpCi0gICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAg
LCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShDR0NvbnRleHRXaXRo
SERDKGhkYywgaGFzQWxwaGEpKSkKKyAgICA6IG1fY29tbW9uKG5ldyBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0V2l0aEhEQyhoZGMsIGhhc0FscGhhKSkpCiB7Ci0gICAg
Q0dDb250ZXh0UmVsZWFzZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpKTsKLSAgICBtX2RhdGEt
Pm1faGRjID0gaGRjOwotICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIW1fZGF0YS0+bV9jZ0NvbnRl
eHQpOwotICAgIGlmIChtX2RhdGEtPm1fY2dDb250ZXh0KSB7CisgICAgQ0dDb250ZXh0UmVsZWFz
ZShwbGF0Zm9ybVByaXZhdGUoKS0+bV9jZ0NvbnRleHQuZ2V0KCkpOworICAgIHBsYXRmb3JtUHJp
dmF0ZSgpLT5tX2hkYyA9IGhkYzsKKyAgICBzZXRQYWludGluZ0Rpc2FibGVkKCFwbGF0Zm9ybVBy
aXZhdGUoKS0+bV9jZ0NvbnRleHQpOworICAgIGlmIChwbGF0Zm9ybVByaXZhdGUoKS0+bV9jZ0Nv
bnRleHQpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5j
IHdpdGggb3VyIHN0YXRlLgogICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3Io
KSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Io
c3Ryb2tlQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJHQik7CkBAIC03OSw5ICs3OCw5IEBAIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMKIC8vIHN1aXRhYmxlIGZvciBh
bGwgY2xpZW50cz8KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQo
SERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCwg
Ym9vbCBtYXlDcmVhdGVCaXRtYXApCiB7Ci0gICAgYm9vbCBjcmVhdGVkQml0bWFwID0gbWF5Q3Jl
YXRlQml0bWFwICYmICghbV9kYXRhLT5tX2hkYyB8fCBpblRyYW5zcGFyZW5jeUxheWVyKCkpOwor
ICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1heUNyZWF0ZUJpdG1hcCAmJiAoIXBsYXRmb3JtUHJp
dmF0ZSgpLT5tX2hkYyB8fCBpblRyYW5zcGFyZW5jeUxheWVyKCkpOwogICAgIGlmICghY3JlYXRl
ZEJpdG1hcCkgewotICAgICAgICBtX2RhdGEtPnJlc3RvcmUoKTsKKyAgICAgICAgcGxhdGZvcm1Q
cml2YXRlKCktPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAzLDcg
KzEwMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnQKICAgICBD
R0NvbG9yU3BhY2VSZWxlYXNlKGRldmljZVJHQik7CiAKICAgICBDR0ltYWdlUmVmIGltYWdlID0g
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dCk7Ci0gICAgQ0dDb250ZXh0
RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCksIGRzdFJlY3QsIGltYWdlKTsKKyAg
ICBDR0NvbnRleHREcmF3SW1hZ2UocGxhdGZvcm1Qcml2YXRlKCktPm1fY2dDb250ZXh0LmdldCgp
LCBkc3RSZWN0LCBpbWFnZSk7CiAgICAgCiAgICAgLy8gRGVsZXRlIGFsbCBvdXIganVuay4KICAg
ICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7CkBAIC0xMjEsNyArMTIwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKAogICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRl
clJlZj4gZGF0YVByb3ZpZGVyKEFkb3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0
YShpbWFnZURhdGEuZ2V0KCkpKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZShB
ZG9wdENGLCBDR0ltYWdlQ3JlYXRlKGltYWdlLT5zaXplKCkud2lkdGgoKSwgaW1hZ2UtPnNpemUo
KS5oZWlnaHQoKSwgOCwgMzIsIGltYWdlLT5ieXRlc1BlclJvdygpLCBkZXZpY2VSR0IuZ2V0KCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFGaXJzdCwgZGF0YVBy
b3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAg
Q0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCksIENHUmVjdE1ha2Uo
cG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXplKCkud2lkdGgoKSwgaW1hZ2UtPnNpemUo
KS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAorICAgIENHQ29udGV4dERyYXdJbWFnZShw
bGF0Zm9ybVByaXZhdGUoKS0+bV9jZ0NvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgp
LCBwb2ludC55KCksIGltYWdlLT5zaXplKCkud2lkdGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQo
KSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhp
Y3NDb250ZXh0V2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCShyZXZpc2lvbiA3MjkwOCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODIsMTAgKzE4MiwxMSBAQCBlbnVtIEFscGhhUGFpbnRUeXBlIHsK
ICAgICBBbHBoYVBhaW50T3RoZXIsCiB9OwogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGF0YSB7Citj
bGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlRGF0YSwgcHVibGljIEdyYXBoaWNzQ29udGV4dFByaXZhdGUgewog
cHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShIREMgZGMpCi0gICAg
ICAgIDogbV9kYyhkYykKKyAgICAgICAgOiBHcmFwaGljc0NvbnRleHRQcml2YXRlKCkKKyAgICAg
ICAgLCBtX2RjKGRjKQogICAgIHsKICAgICB9CiAgICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZSgpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29u
dGV4dFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dy
YXBoaWNzQ29udGV4dFd4LmNwcAkocmV2aXNpb24gNzI5MDgpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQs
NyArODQsNyBAQCBzdGF0aWMgaW50IHN0cm9rZVN0eWxlVG9XeFBlblN0eWxlKGludCBwCiAgICAg
cmV0dXJuIHd4U09MSUQ7CiB9CiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgOiBwdWJsaWMgR3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSB7CiBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKCk7CiAgICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpOwpAQCAtMTAx
LDYgKzEwMSw3IEBAIHB1YmxpYzoKIH07CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkgOgorICAgIEdyYXBoaWNzQ29udGV4
dFByaXZhdGUoKQogICAgIGNvbnRleHQoMCksCiAgICAgbXN3RENTdGF0ZUlEKDApLAogICAgIGd0
a0N1cnJlbnRDbGlwUmduKHd4UmVnaW9uKCkpLApAQCAtMTE0LDggKzExNSw3IEBAIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWMKIAogCiBHcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IG1f
Y29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQorICAgIDogbV9jb21tb24obmV3IEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSkKIHsgICAgCiAgICAgc2V0UGFpbnRpbmdEaXNhYmxl
ZCghY29udGV4dCk7CiAgICAgaWYgKGNvbnRleHQpIHsKQEAgLTEyNCw0OCArMTI0LDQ4IEBAIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3IKICAgICAgICAgc2V0UGxhdGZv
cm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICB9
CiAjaWYgVVNFKFdYR0MpCi0gICAgbV9kYXRhLT5jb250ZXh0ID0gKHd4R0NEQyopY29udGV4dDsK
LSAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBtX2RhdGEtPmNvbnRleHQtPkdldEdyYXBoaWNz
Q29udGV4dCgpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jb250ZXh0ID0gKHd4R0NEQyopY29u
dGV4dDsKKyAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBwbGF0Zm9ybVByaXZhdGUoKS0+Y29u
dGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7CiAgICAgaWYgKGdjKQotICAgICAgICBtX2RhdGEt
PmN1cnJlbnRQYXRoID0gZ2MtPkNyZWF0ZVBhdGgoKTsKKyAgICAgICAgcGxhdGZvcm1Qcml2YXRl
KCktPmN1cnJlbnRQYXRoID0gZ2MtPkNyZWF0ZVBhdGgoKTsKICNlbHNlCi0gICAgbV9kYXRhLT5j
b250ZXh0ID0gKHd4V2luZG93REMqKWNvbnRleHQ7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPmNv
bnRleHQgPSAod3hXaW5kb3dEQyopY29udGV4dDsKICNlbmRpZgogfQogCiBHcmFwaGljc0NvbnRl
eHQ6On5HcmFwaGljc0NvbnRleHQoKQogewogICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2
YXRlKG1fY29tbW9uKTsKLSAgICBkZWxldGUgbV9kYXRhOworICAgIGRlbGV0ZSBwbGF0Zm9ybVBy
aXZhdGUoKTsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiltX2RhdGEtPmNvbnRleHQ7CisgICAgcmV0dXJuIChQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCopcGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQ7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fZGF0YS0+Y29udGV4dCkKKyAg
ICBpZiAocGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQpCiAgICAgewogI2lmIFVTRShXWEdDKQot
ICAgICAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBtX2RhdGEtPmNvbnRleHQtPkdldEdyYXBo
aWNzQ29udGV4dCgpOworICAgICAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBwbGF0Zm9ybVBy
aXZhdGUoKS0+Y29udGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7CiAgICAgICAgIGdjLT5QdXNo
U3RhdGUoKTsKICNlbHNlCiAgICAgLy8gd2hlbiBldmVyeXRoaW5nIGlzIHdvcmtpbmcgd2l0aCBV
U0VfV1hHQywgd2UgY2FuIHJlbW92ZSB0aGlzCiAgICAgI2lmIF9fV1hNQUNfXwogICAgICAgICBD
R0NvbnRleHRSZWYgY29udGV4dDsKLSAgICAgICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0gbV9k
YXRhLT5jb250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgd3hHcmFwaGljc0Nv
bnRleHQqIGdjID0gcGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQtPkdldEdyYXBoaWNzQ29udGV4
dCgpOwogICAgICAgICBpZiAoZ2MpCiAgICAgICAgICAgICBjb250ZXh0ID0gKENHQ29udGV4dFJl
ZilnYy0+R2V0TmF0aXZlQ29udGV4dCgpOwogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAg
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgI2VsaWYgX19XWE1TV19fCi0g
ICAgICAgIEhEQyBkYyA9IChIREMpbV9kYXRhLT5jb250ZXh0LT5HZXRIREMoKTsKLSAgICAgICAg
bV9kYXRhLT5tc3dEQ1N0YXRlSUQgPSA6OlNhdmVEQyhkYyk7CisgICAgICAgIEhEQyBkYyA9IChI
REMpcGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQtPkdldEhEQygpOworICAgICAgICBwbGF0Zm9y
bVByaXZhdGUoKS0+bXN3RENTdGF0ZUlEID0gOjpTYXZlREMoZGMpOwogICAgICNlbGlmIF9fV1hH
VEtfXwotICAgICAgICBtX2RhdGEtPmd0a0N1cnJlbnRDbGlwUmduID0gbV9kYXRhLT5jb250ZXh0
LT5tX2N1cnJlbnRDbGlwcGluZ1JlZ2lvbjsKLSAgICAgICAgbV9kYXRhLT5ndGtQYWludENsaXBS
Z24gPSBtX2RhdGEtPmNvbnRleHQtPm1fcGFpbnRDbGlwcGluZ1JlZ2lvbjsKKyAgICAgICAgcGxh
dGZvcm1Qcml2YXRlKCktPmd0a0N1cnJlbnRDbGlwUmduID0gcGxhdGZvcm1Qcml2YXRlKCktPmNv
bnRleHQtPm1fY3VycmVudENsaXBwaW5nUmVnaW9uOworICAgICAgICBwbGF0Zm9ybVByaXZhdGUo
KS0+Z3RrUGFpbnRDbGlwUmduID0gcGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQtPm1fcGFpbnRD
bGlwcGluZ1JlZ2lvbjsKICAgICAjZW5kaWYKICNlbmRpZiAvLyBfX1dYTUFDX18KICAgICB9CkBA
IC0xNzMsMjUgKzE3MywyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3Rh
dGUoCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCiB7Ci0g
ICAgaWYgKG1fZGF0YS0+Y29udGV4dCkKKyAgICBpZiAocGxhdGZvcm1Qcml2YXRlKCktPmNvbnRl
eHQpCiAgICAgewogI2lmIFVTRShXWEdDKQotICAgICAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2Mg
PSBtX2RhdGEtPmNvbnRleHQtPkdldEdyYXBoaWNzQ29udGV4dCgpOworICAgICAgICB3eEdyYXBo
aWNzQ29udGV4dCogZ2MgPSBwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+R2V0R3JhcGhpY3ND
b250ZXh0KCk7CiAgICAgICAgIGdjLT5Qb3BTdGF0ZSgpOwogI2Vsc2UKICAgICAjaWYgX19XWE1B
Q19fCiAgICAgICAgIENHQ29udGV4dFJlZiBjb250ZXh0OwotICAgICAgICB3eEdyYXBoaWNzQ29u
dGV4dCogZ2MgPSBtX2RhdGEtPmNvbnRleHQtPkdldEdyYXBoaWNzQ29udGV4dCgpOworICAgICAg
ICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+R2V0
R3JhcGhpY3NDb250ZXh0KCk7CiAgICAgICAgIGlmIChnYykKICAgICAgICAgICAgIGNvbnRleHQg
PSAoQ0dDb250ZXh0UmVmKWdjLT5HZXROYXRpdmVDb250ZXh0KCk7CiAgICAgICAgIGlmIChjb250
ZXh0KQogICAgICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsgCiAgICAg
I2VsaWYgX19XWE1TV19fCi0gICAgICAgIEhEQyBkYyA9IChIREMpbV9kYXRhLT5jb250ZXh0LT5H
ZXRIREMoKTsKLSAgICAgICAgOjpSZXN0b3JlREMoZGMsIG1fZGF0YS0+bXN3RENTdGF0ZUlEKTsK
KyAgICAgICAgSERDIGRjID0gKEhEQylwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+R2V0SERD
KCk7CisgICAgICAgIDo6UmVzdG9yZURDKGRjLCBwbGF0Zm9ybVByaXZhdGUoKS0+bXN3RENTdGF0
ZUlEKTsKICAgICAjZWxpZiBfX1dYR1RLX18KLSAgICAgICAgbV9kYXRhLT5jb250ZXh0LT5tX2N1
cnJlbnRDbGlwcGluZ1JlZ2lvbiA9IG1fZGF0YS0+Z3RrQ3VycmVudENsaXBSZ247Ci0gICAgICAg
IG1fZGF0YS0+Y29udGV4dC0+bV9wYWludENsaXBwaW5nUmVnaW9uID0gbV9kYXRhLT5ndGtQYWlu
dENsaXBSZ247CisgICAgICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jb250ZXh0LT5tX2N1cnJlbnRD
bGlwcGluZ1JlZ2lvbiA9IHBsYXRmb3JtUHJpdmF0ZSgpLT5ndGtDdXJyZW50Q2xpcFJnbjsKKyAg
ICAgICAgcGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQtPm1fcGFpbnRDbGlwcGluZ1JlZ2lvbiA9
IHBsYXRmb3JtUHJpdmF0ZSgpLT5ndGtQYWludENsaXBSZ247CiAgICAgI2VuZGlmCiAKICNlbmRp
ZiAvLyBVU0VfV1hHQyAKQEAgLTIwNCw4ICsyMDQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1JlY3QoY29uc3QgSW50CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9kYXRhLT5jb250ZXh0LT5TZXRQZW4od3hQZW4oc3Ryb2tlQ29sb3Io
KSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlVG9XeFBlblN0eWxlKHN0cm9rZVN0eWxl
KCkpKSk7Ci0gICAgbV9kYXRhLT5jb250ZXh0LT5EcmF3UmVjdGFuZ2xlKHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUo
KS0+Y29udGV4dC0+U2V0UGVuKHd4UGVuKHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygp
LCBzdHJva2VTdHlsZVRvV3hQZW5TdHlsZShzdHJva2VTdHlsZSgpKSkpOworICAgIHBsYXRmb3Jt
UHJpdmF0ZSgpLT5jb250ZXh0LT5EcmF3UmVjdGFuZ2xlKHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIH0KIAogLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8g
ZHJhdyBib3JkZXJzLgpAQCAtMjE3LDggKzIxNyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZShjb25zdCBJbnQKICAgICBGbG9hdFBvaW50IHAxID0gcG9pbnQxOwogICAgIEZsb2F0
UG9pbnQgcDIgPSBwb2ludDI7CiAgICAgCi0gICAgbV9kYXRhLT5jb250ZXh0LT5TZXRQZW4od3hQ
ZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlVG9XeFBlblN0
eWxlKHN0cm9rZVN0eWxlKCkpKSk7Ci0gICAgbV9kYXRhLT5jb250ZXh0LT5EcmF3TGluZShwb2lu
dDEueCgpLCBwb2ludDEueSgpLCBwb2ludDIueCgpLCBwb2ludDIueSgpKTsKKyAgICBwbGF0Zm9y
bVByaXZhdGUoKS0+Y29udGV4dC0+U2V0UGVuKHd4UGVuKHN0cm9rZUNvbG9yKCksIHN0cm9rZVRo
aWNrbmVzcygpLCBzdHJva2VTdHlsZVRvV3hQZW5TdHlsZShzdHJva2VTdHlsZSgpKSkpOworICAg
IHBsYXRmb3JtUHJpdmF0ZSgpLT5jb250ZXh0LT5EcmF3TGluZShwb2ludDEueCgpLCBwb2ludDEu
eSgpLCBwb2ludDIueCgpLCBwb2ludDIueSgpKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25s
eSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCkBAIC0yMjcs
OCArMjI3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IAogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+
Y29udGV4dC0+U2V0UGVuKHd4UGVuKHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBz
dHJva2VTdHlsZVRvV3hQZW5TdHlsZShzdHJva2VTdHlsZSgpKSkpOwotICAgIG1fZGF0YS0+Y29u
dGV4dC0+RHJhd0VsbGlwc2UocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jb250ZXh0LT5TZXRQZW4od3hQZW4o
c3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlVG9XeFBlblN0eWxl
KHN0cm9rZVN0eWxlKCkpKSk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQtPkRyYXdF
bGxpcHNlKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0
LCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3BhbikKQEAgLTIzNiw4ICsyMzYsOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEluCiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fZGF0YS0+Y29udGV4dC0+U2V0
UGVuKHd4UGVuKHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZVRv
V3hQZW5TdHlsZShzdHJva2VTdHlsZSgpKSkpOwotICAgIG1fZGF0YS0+Y29udGV4dC0+RHJhd0Vs
bGlwdGljQXJjKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4pOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jb250ZXh0
LT5TZXRQZW4od3hQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0
eWxlVG9XeFBlblN0eWxlKHN0cm9rZVN0eWxlKCkpKSk7CisgICAgcGxhdGZvcm1Qcml2YXRlKCkt
PmNvbnRleHQtPkRyYXdFbGxpcHRpY0FyYyhyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSwgc3RhcnRBbmdsZSwgYW5nbGVTcGFuKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9h
dFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQpAQCAtMjUxLDggKzI1MSw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICB3eFBvaW50KiBw
b2x5Z29uID0gbmV3IHd4UG9pbnRbbnBvaW50c107CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBucG9pbnRzOyBpKyspCiAgICAgICAgIHBvbHlnb25baV0gPSB3eFBvaW50KHBvaW50c1tpXS54
KCksIHBvaW50c1tpXS55KCkpOwotICAgIG1fZGF0YS0+Y29udGV4dC0+U2V0UGVuKHd4UGVuKHN0
cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZVRvV3hQZW5TdHlsZShz
dHJva2VTdHlsZSgpKSkpOwotICAgIG1fZGF0YS0+Y29udGV4dC0+RHJhd1BvbHlnb24oKGludClu
cG9pbnRzLCBwb2x5Z29uKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+U2V0UGVu
KHd4UGVuKHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZVRvV3hQ
ZW5TdHlsZShzdHJva2VTdHlsZSgpKSkpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jb250ZXh0
LT5EcmF3UG9seWdvbigoaW50KW5wb2ludHMsIHBvbHlnb24pOwogICAgIGRlbGV0ZSBbXSBwb2x5
Z29uOwogfQogCkBAIC0yNzQsOSArMjc0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsbwogCiAgICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIAotICAgIG1fZGF0YS0+
Y29udGV4dC0+U2V0UGVuKCp3eFRSQU5TUEFSRU5UX1BFTik7Ci0gICAgbV9kYXRhLT5jb250ZXh0
LT5TZXRCcnVzaCh3eEJydXNoKGNvbG9yKSk7Ci0gICAgbV9kYXRhLT5jb250ZXh0LT5EcmF3UmVj
dGFuZ2xlKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
KyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+U2V0UGVuKCp3eFRSQU5TUEFSRU5UX1BF
Tik7CisgICAgcGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQtPlNldEJydXNoKHd4QnJ1c2goY29s
b3IpKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+RHJhd1JlY3RhbmdsZShyZWN0
LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAKICAgICByZXN0
b3JlUGxhdGZvcm1TdGF0ZSgpOwogfQpAQCAtMzA0LDcgKzMwNCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnMKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAo
Y29uc3QgRmxvYXRSZWN0JiByKQogewotICAgIHd4V2luZG93REMqIHdpbmRjID0gZHluYW1pY19j
YXN0PHd4V2luZG93REMqPihtX2RhdGEtPmNvbnRleHQpOworICAgIHd4V2luZG93REMqIHdpbmRj
ID0gZHluYW1pY19jYXN0PHd4V2luZG93REMqPihwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dCk7
CiAgICAgd3hQb2ludCBwb3MoMCwgMCk7CiAKICAgICBpZiAod2luZGMpIHsKQEAgLTMyNCw3ICsz
MjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBtX2RhdGEtPmNvbnRleHQtPlNldENsaXBwaW5nUmVnaW9uKHIueCgp
IC0gcG9zLngsIHIueSgpIC0gcG9zLnksIHIud2lkdGgoKSArIHBvcy54LCByLmhlaWdodCgpICsg
cG9zLnkpOworICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jb250ZXh0LT5TZXRDbGlwcGluZ1JlZ2lv
bihyLngoKSAtIHBvcy54LCByLnkoKSAtIHBvcy55LCByLndpZHRoKCkgKyBwb3MueCwgci5oZWln
aHQoKSArIHBvcy55KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3Qg
UGF0aCYpCkBAIC0zNDgsMjMgKzM0OCwyMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KGNvCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFBvaW50IGVuZFBvaW50ID0g
b3JpZ2luICsgSW50U2l6ZSh3aWR0aCwgMCk7Ci0gICAgbV9kYXRhLT5jb250ZXh0LT5TZXRQZW4o
d3hQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHd4U09MSUQpKTsKLSAgICBt
X2RhdGEtPmNvbnRleHQtPkRyYXdMaW5lKG9yaWdpbi54KCksIG9yaWdpbi55KCksIGVuZFBvaW50
LngoKSwgZW5kUG9pbnQueSgpKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+U2V0
UGVuKHd4UGVuKHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCB3eFNPTElEKSk7Cisg
ICAgcGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQtPkRyYXdMaW5lKG9yaWdpbi54KCksIG9yaWdp
bi55KCksIGVuZFBvaW50LngoKSwgZW5kUG9pbnQueSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGlu
dCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQogewogICAgIHN3aXRjaCAoc3R5
bGUpIHsKICAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgotICAgICAgICBt
X2RhdGEtPmNvbnRleHQtPlNldFBlbih3eFBlbigqd3hSRUQsIDIsIHd4TE9OR19EQVNIKSk7Cisg
ICAgICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jb250ZXh0LT5TZXRQZW4od3hQZW4oKnd4UkVELCAy
LCB3eExPTkdfREFTSCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRleHRDaGVja2luZ0dy
YW1tYXJMaW5lU3R5bGU6Ci0gICAgICAgIG1fZGF0YS0+Y29udGV4dC0+U2V0UGVuKHd4UGVuKCp3
eEdSRUVOLCAyLCB3eExPTkdfREFTSCkpOworICAgICAgICBwbGF0Zm9ybVByaXZhdGUoKS0+Y29u
dGV4dC0+U2V0UGVuKHd4UGVuKCp3eEdSRUVOLCAyLCB3eExPTkdfREFTSCkpOwogICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fZGF0YS0+
Y29udGV4dC0+RHJhd0xpbmUob3JpZ2luLngoKSwgb3JpZ2luLnkoKSwgb3JpZ2luLngoKSArIHdp
ZHRoLCBvcmlnaW4ueSgpKTsKKyAgICBwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+RHJhd0xp
bmUob3JpZ2luLngoKSwgb3JpZ2luLnkoKSwgb3JpZ2luLngoKSArIHdpZHRoLCBvcmlnaW4ueSgp
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYpIApAQCAtMzgw
LDcgKzM4MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFAKIEFm
ZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7IAogI2lmIFVT
RShXWEdDKQotICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0YS0+Y29udGV4dC0+R2V0
R3JhcGhpY3NDb250ZXh0KCk7CisgICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0gcGxhdGZvcm1Q
cml2YXRlKCktPmNvbnRleHQtPkdldEdyYXBoaWNzQ29udGV4dCgpOwogICAgIGlmIChnYykgewog
ICAgICAgICB3eEdyYXBoaWNzTWF0cml4IG1hdHJpeCA9IGdjLT5HZXRUcmFuc2Zvcm0oKTsKICAg
ICAgICAgZG91YmxlIGEsIGIsIGMsIGQsIGUsIGY7CkBAIC0zOTQsOCArMzk0LDggQEAgQWZmaW5l
VHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnRyYW5zbGF0ZShmbG9hdCB0eCwgZmxvYXQgdHkpIAogeyAKICNpZiBVU0UoV1hHQykKLSAgICBp
ZiAobV9kYXRhLT5jb250ZXh0KSB7Ci0gICAgICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1f
ZGF0YS0+Y29udGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKHBsYXRmb3JtUHJp
dmF0ZSgpLT5jb250ZXh0KSB7CisgICAgICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IHBsYXRm
b3JtUHJpdmF0ZSgpLT5jb250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsKICAgICAgICAgZ2Mt
PlRyYW5zbGF0ZSh0eCwgdHkpOwogICAgIH0KICNlbmRpZgpAQCAtNDA0LDggKzQwNCw4IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgdHgKIHZvaWQgR3JhcGhpY3NDb250
ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGUpIAogeyAKICNpZiBVU0UoV1hHQykKLSAgICBpZiAobV9k
YXRhLT5jb250ZXh0KSB7Ci0gICAgICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0YS0+
Y29udGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKHBsYXRmb3JtUHJpdmF0ZSgp
LT5jb250ZXh0KSB7CisgICAgICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IHBsYXRmb3JtUHJp
dmF0ZSgpLT5jb250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsKICAgICAgICAgZ2MtPlJvdGF0
ZShhbmdsZSk7CiAgICAgfQogI2VuZGlmCkBAIC00MTQsOCArNDE0LDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpIAogeyAKICNpZiBVU0UoV1hHQykKLSAgICBpZiAobV9k
YXRhLT5jb250ZXh0KSB7Ci0gICAgICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0YS0+
Y29udGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKHBsYXRmb3JtUHJpdmF0ZSgp
LT5jb250ZXh0KSB7CisgICAgICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IHBsYXRmb3JtUHJp
dmF0ZSgpLT5jb250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsKICAgICAgICAgZ2MtPlNjYWxl
KHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICB9CiAjZW5kaWYKQEAgLTQyOSwx
NCArNDI5LDE0IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2UKICAg
ICB3eENvb3JkIHggPSAod3hDb29yZClmcmVjdC54KCk7CiAgICAgd3hDb29yZCB5ID0gKHd4Q29v
cmQpZnJlY3QueSgpOwogCi0gICAgeCA9IG1fZGF0YS0+Y29udGV4dC0+TG9naWNhbFRvRGV2aWNl
WCh4KTsKLSAgICB5ID0gbV9kYXRhLT5jb250ZXh0LT5Mb2dpY2FsVG9EZXZpY2VZKHkpOworICAg
IHggPSBwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+TG9naWNhbFRvRGV2aWNlWCh4KTsKKyAg
ICB5ID0gcGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQtPkxvZ2ljYWxUb0RldmljZVkoeSk7CiAg
ICAgcmVzdWx0LnNldFgoKGZsb2F0KXgpOwogICAgIHJlc3VsdC5zZXRZKChmbG9hdCl5KTsKICAg
ICB4ID0gKHd4Q29vcmQpZnJlY3Qud2lkdGgoKTsKICAgICB5ID0gKHd4Q29vcmQpZnJlY3QuaGVp
Z2h0KCk7Ci0gICAgeCA9IG1fZGF0YS0+Y29udGV4dC0+TG9naWNhbFRvRGV2aWNlWFJlbCh4KTsK
LSAgICB5ID0gbV9kYXRhLT5jb250ZXh0LT5Mb2dpY2FsVG9EZXZpY2VZUmVsKHkpOworICAgIHgg
PSBwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+TG9naWNhbFRvRGV2aWNlWFJlbCh4KTsKKyAg
ICB5ID0gcGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQtPkxvZ2ljYWxUb0RldmljZVlSZWwoeSk7
CiAgICAgcmVzdWx0LnNldFdpZHRoKChmbG9hdCl4KTsKICAgICByZXN1bHQuc2V0SGVpZ2h0KChm
bG9hdCl5KTsKICAgICByZXR1cm4gcmVzdWx0OyAKQEAgLTQ0OSwxMiArNDQ5LDEyIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnMKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKLSAgICBp
ZiAobV9kYXRhLT5jb250ZXh0KQorICAgIGlmIChwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dCkK
ICAgICB7CiAjaWYgd3hDSEVDS19WRVJTSU9OKDIsOSwwKQotICAgICAgICBtX2RhdGEtPmNvbnRl
eHQtPlNldExvZ2ljYWxGdW5jdGlvbihzdGF0aWNfY2FzdDx3eFJhc3Rlck9wZXJhdGlvbk1vZGU+
KGdldFd4Q29tcG9zaXRpbmdPcGVyYXRpb24ob3AsIGZhbHNlKSkpOworICAgICAgICBwbGF0Zm9y
bVByaXZhdGUoKS0+Y29udGV4dC0+U2V0TG9naWNhbEZ1bmN0aW9uKHN0YXRpY19jYXN0PHd4UmFz
dGVyT3BlcmF0aW9uTW9kZT4oZ2V0V3hDb21wb3NpdGluZ09wZXJhdGlvbihvcCwgZmFsc2UpKSk7
CiAjZWxzZQotICAgICAgICBtX2RhdGEtPmNvbnRleHQtPlNldExvZ2ljYWxGdW5jdGlvbihnZXRX
eENvbXBvc2l0aW5nT3BlcmF0aW9uKG9wLCBmYWxzZSkpOworICAgICAgICBwbGF0Zm9ybVByaXZh
dGUoKS0+Y29udGV4dC0+U2V0TG9naWNhbEZ1bmN0aW9uKGdldFd4Q29tcG9zaXRpbmdPcGVyYXRp
b24ob3AsIGZhbHNlKSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC00NjIsOSArNDYyLDkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luUGF0aCgpCiB7CiAjaWYgVVNFKFdYR0MpCi0gICAgd3hHcmFwaGljc0NvbnRleHQq
IGdjID0gbV9kYXRhLT5jb250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsKKyAgICB3eEdyYXBo
aWNzQ29udGV4dCogZ2MgPSBwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+R2V0R3JhcGhpY3ND
b250ZXh0KCk7CiAgICAgaWYgKGdjKQotICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gZ2Mt
PkNyZWF0ZVBhdGgoKTsKKyAgICAgICAgcGxhdGZvcm1Qcml2YXRlKCktPmN1cnJlbnRQYXRoID0g
Z2MtPkNyZWF0ZVBhdGgoKTsKICNlbmRpZgogfQogCkBAIC00NzIsNyArNDcyLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0aAogewogI2lmIFVTRShXWEdDKQogICAg
IGlmIChwYXRoLnBsYXRmb3JtUGF0aCgpKQotICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoLkFk
ZFBhdGgoKnBhdGgucGxhdGZvcm1QYXRoKCkpOworICAgICAgICBwbGF0Zm9ybVByaXZhdGUoKS0+
Y3VycmVudFBhdGguQWRkUGF0aCgqcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAjZW5kaWYKIH0KIApA
QCAtNDgxLDggKzQ4MSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9r
ZUMKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9kYXRhLT5jb250ZXh0KQotICAgICAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBlbih3eFBl
bihjb2xvciwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlVG9XeFBlblN0eWxlKHN0cm9r
ZVN0eWxlKCkpKSk7CisgICAgaWYgKHBsYXRmb3JtUHJpdmF0ZSgpLT5jb250ZXh0KQorICAgICAg
ICBwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+U2V0UGVuKHd4UGVuKGNvbG9yLCBzdHJva2VU
aGlja25lc3MoKSwgc3Ryb2tlU3R5bGVUb1d4UGVuU3R5bGUoc3Ryb2tlU3R5bGUoKSkpKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKGZsb2F0
IHRoaWNrbmVzcykKQEAgLTQ5MCw4ICs0OTAsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VUCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIGlmIChtX2RhdGEtPmNvbnRleHQpCi0gICAgICAgIG1fZGF0YS0+Y29u
dGV4dC0+U2V0UGVuKHd4UGVuKHN0cm9rZUNvbG9yKCksIHRoaWNrbmVzcywgc3Ryb2tlU3R5bGVU
b1d4UGVuU3R5bGUoc3Ryb2tlU3R5bGUoKSkpKTsKKyAgICBpZiAocGxhdGZvcm1Qcml2YXRlKCkt
PmNvbnRleHQpCisgICAgICAgIHBsYXRmb3JtUHJpdmF0ZSgpLT5jb250ZXh0LT5TZXRQZW4od3hQ
ZW4oc3Ryb2tlQ29sb3IoKSwgdGhpY2tuZXNzLCBzdHJva2VTdHlsZVRvV3hQZW5TdHlsZShzdHJv
a2VTdHlsZSgpKSkpOwogCiB9CiAKQEAgLTUwMCw4ICs1MDAsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChtX2RhdGEtPmNvbnRleHQpCi0gICAgICAgIG1f
ZGF0YS0+Y29udGV4dC0+U2V0QnJ1c2god3hCcnVzaChjb2xvcikpOworICAgIGlmIChwbGF0Zm9y
bVByaXZhdGUoKS0+Y29udGV4dCkKKyAgICAgICAgcGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQt
PlNldEJydXNoKHd4QnJ1c2goY29sb3IpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNv
bmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKQEAgLTUxMCw3ICs1MTAs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmCiAgICAgICAgIHJl
dHVybjsKIAogI2lmIFVTRShXWEdDKQotICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0
YS0+Y29udGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7CisgICAgd3hHcmFwaGljc0NvbnRleHQq
IGdjID0gcGxhdGZvcm1Qcml2YXRlKCktPmNvbnRleHQtPkdldEdyYXBoaWNzQ29udGV4dCgpOwog
ICAgIGlmIChnYykKICAgICAgICAgZ2MtPkNvbmNhdFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogI2Vu
ZGlmCkBAIC01MzYsMTggKzUzNiwxOCBAQCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0Nv
bnRleHQ6OmltCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogewogI2lmIFVTRShX
WEdDKQotICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0YS0+Y29udGV4dC0+R2V0R3Jh
cGhpY3NDb250ZXh0KCk7CisgICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0gcGxhdGZvcm1Qcml2
YXRlKCktPmNvbnRleHQtPkdldEdyYXBoaWNzQ29udGV4dCgpOwogICAgIGlmIChnYykKLSAgICAg
ICAgZ2MtPkZpbGxQYXRoKG1fZGF0YS0+Y3VycmVudFBhdGgpOworICAgICAgICBnYy0+RmlsbFBh
dGgocGxhdGZvcm1Qcml2YXRlKCktPmN1cnJlbnRQYXRoKTsKICNlbmRpZgogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiB7CiAjaWYgVVNFKFdYR0MpCi0gICAgd3hHcmFw
aGljc0NvbnRleHQqIGdjID0gbV9kYXRhLT5jb250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsK
KyAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBwbGF0Zm9ybVByaXZhdGUoKS0+Y29udGV4dC0+
R2V0R3JhcGhpY3NDb250ZXh0KCk7CiAgICAgaWYgKGdjKQotICAgICAgICBnYy0+U3Ryb2tlUGF0
aChtX2RhdGEtPmN1cnJlbnRQYXRoKTsKKyAgICAgICAgZ2MtPlN0cm9rZVBhdGgocGxhdGZvcm1Q
cml2YXRlKCktPmN1cnJlbnRQYXRoKTsKICNlbmRpZgogfQogCkBAIC02ODEsNyArNjgxLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udAogICAgICAgICAgICAgaWYg
KHN1cHBvcnRBbHBoYUJsZW5kKQogICAgICAgICAgICAgICAgIGJtcC5Vc2VBbHBoYSgpOwogI2Vu
ZGlmCi0gICAgICAgICAgICBtX2RhdGEtPmNvbnRleHQtPkRyYXdCaXRtYXAoYm1wLCBkc3RSZWN0
LngoKSwgZHN0UmVjdC55KCksIHN1cHBvcnRBbHBoYUJsZW5kKTsKKyAgICAgICAgICAgIHBsYXRm
b3JtUHJpdmF0ZSgpLT5jb250ZXh0LT5EcmF3Qml0bWFwKGJtcCwgZHN0UmVjdC54KCksIGRzdFJl
Y3QueSgpLCBzdXBwb3J0QWxwaGFCbGVuZCk7CiAKICAgICAgICAgICAgIDo6RGVsZXRlT2JqZWN0
KGJpdG1hcCk7CiAgICAgICAgIH0K
</data>
<flag name="review"
          id="65904"
          type_id="1"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75370</attachid>
            <date>2010-12-02 06:29:00 -0800</date>
            <delta_ts>2010-12-06 12:32:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>mergeCommonAndData_v1.3.patch</filename>
            <type>text/plain</type>
            <size>53776</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzEyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE2IEBACisyMDEwLTEyLTAyICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBH
cmFwaGljc0NvbnRleHQ6IE1lcmdlIG1fY29tbW9uIGFuZCBtX2RhdGEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTE0CisKKyAgICAgICAgTW92ZSBk
YXRhIG1lbWJlcnMgZnJvbSBHcmFwaGljc0NvbnRleHRQcml2YXRlIGludG8gR3JhcGhpY3NDb250
ZXh0LiBTbyB0aGUgbV9jb21tb24gbWVtYmVyIGJlY2FtZSB1bm5lY2Vzc2FyeS4KKyAgICAgICAg
SXQgaXMgcmVtb3ZlZC4KKworICAgICAgICBObyBuZXcgdGVzdCBpcyBuZWVkZWQsIGJlY2F1c2Ug
dGhpcyBpcyBhIHJlZmFjdG9yaW5nLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0U2hh
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNvbG9yU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9y
U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRp
YWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxp
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGluZ0NvbnRyb2xUaW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFVwZGF0aW5nQ29udHJvbFRpbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGFpbnRpbmdEaXNhYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBhaW50aW5nRGlzYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0UGxhdGZvcm1GaWxsKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBsYXRm
b3JtU3Ryb2tlKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdQYXRoU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OmZpbGxDdXJyZW50Q2Fpcm9QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OnN0cm9r
ZUN1cnJlbnRDYWlyb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3Jh
cGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmdldEFscGhhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhp
Y3NDb250ZXh0SGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3Jh
cGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhp
Y3NDb250ZXh0T3BlblZHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fdXBkYXRpbmdDb250cm9s
VGludHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojph
ZGRJbm5lclJvdW5kZWRSZWN0Q2xpcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp+
R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRl
eHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRl
eHQpOgorCiAyMDEwLTEwLTI2ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzMxMTUpCisrKyBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzky
Miw3ICszOTIyLDcgQEAKIAkJQThGNEZCOTYwQzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1
cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QThGNEZCOTUwQzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwICovOyB9Owog
CQlBOEY1QzBCODBGOTI4NUFDMDA5OEUwNkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjVDMEI2MEY5Mjg1
QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oICovOyB9OwogCQlBOEY1QzBCOTBG
OTI4NUFDMDA5OEUwNkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGNUMwQjcwRjkyODVBQzAwOThFMDZC
IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAqLzsgfTsKLQkJQThGQTZFNUQwRTRDRkRFRDAw
RDVDRjQ5IC8qIFBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi87IH07CisJ
CUE4RkE2RTVEMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyog
UGF0dGVybi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUE4RkE2RTVFMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0
OSAvKiBQYXR0ZXJuLmNwcCAqLzsgfTsKIAkJQTlDNkU0RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERP
TU1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE5QzZFNEUxMEQ3NDVFMDUwMDY0NDJFOSAvKiBET01NaW1lVHlwZS5jcHAgKi87IH07CiAJ
CUE5QzZFNEU0MEQ3NDVFMDUwMDY0NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlDNkU0RTIwRDc0NUUwNTAwNjQ0MkU5
IC8qIERPTU1pbWVUeXBlLmggKi87IH07CkBAIC0yMTQ5Niw3ICsyMTQ5Niw2IEBACiAJCQlpc2Eg
PSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJC
MTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldl
YkNvcmUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKLQkJCWRl
dmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAx
OwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiA3MzExNSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgogI2luY2x1
ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKQEAgLTc0LDIyICs3MywxMiBAQCBwcml2YXRlOgogICAgIGludCBtX29mZnNldDsK
IH07CiAKLUdyYXBoaWNzQ29udGV4dFByaXZhdGUqIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSgpCi17Ci0gICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHRQ
cml2YXRlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4
dFByaXZhdGUoR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZGVsZXRlTWUpCi17Ci0gICAgZGVsZXRl
IGRlbGV0ZU1lOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb21tb24tPnN0
YWNrLmFwcGVuZChtX2NvbW1vbi0+c3RhdGUpOworICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUp
OwogCiAgICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIH0KQEAgLTk5LDEyMCArODgsMTIwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9jb21tb24tPnN0YWNrLmlzRW1wdHkoKSkg
ewotICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3Jl
KCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIG1fc3Rh
Y2sgaXMgZW1wdHkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1vbi0+c3Rh
dGUgPSBtX2NvbW1vbi0+c3RhY2subGFzdCgpOwotICAgIG1fY29tbW9uLT5zdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgbV9zdGF0ZSA9IG1fc3RhY2subGFzdCgpOworICAgIG1fc3RhY2sucmVtb3Zl
TGFzdCgpOwogCiAgICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiB7Ci0gICAgbV9j
b21tb24tPnN0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKKyAgICBtX3N0YXRlLnN0
cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVz
cyh0aGlja25lc3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlU3R5bGUo
Y29uc3QgU3Ryb2tlU3R5bGUmIHN0eWxlKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VT
dHlsZSA9IHN0eWxlOworICAgIG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsKICAgICBzZXRQ
bGF0Zm9ybVN0cm9rZVN0eWxlKHN0eWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQog
ewotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwotICAgIG1fY29tbW9u
LT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLSAgICBtX2NvbW1vbi0+c3Rh
dGUuc3Ryb2tlR3JhZGllbnQuY2xlYXIoKTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0
dGVybi5jbGVhcigpOworICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKKyAgICBtX3N0
YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQuY2xlYXIoKTsKKyAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uY2xlYXIoKTsKICAgICBz
ZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1
ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7Ci0gICAgbV9j
b21tb24tPnN0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKLSAgICBtX2NvbW1vbi0+c3RhdGUu
c2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd0NvbG9yID0gY29s
b3I7CisgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9zdGF0ZS5zaGFk
b3dCbHVyID0gYmx1cjsKKyAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7CiAgICAgc2V0
UGxhdGZvcm1TaGFkb3cob2Zmc2V0LCBibHVyLCBjb2xvciwgY29sb3JTcGFjZSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRl
LnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwotICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dC
bHVyID0gMDsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOworICAg
IG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7CisgICAgbV9zdGF0ZS5zaGFkb3dC
bHVyID0gMDsKKyAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsKICAgICBjbGVhclBs
YXRmb3JtU2hhZG93KCk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxv
YXRTaXplJiBvZmZzZXQsIGZsb2F0JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CiB7Ci0gICAg
b2Zmc2V0ID0gbV9jb21tb24tPnN0YXRlLnNoYWRvd09mZnNldDsKLSAgICBibHVyID0gbV9jb21t
b24tPnN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgY29sb3IgPSBtX2NvbW1vbi0+c3RhdGUuc2hhZG93
Q29sb3I7CisgICAgb2Zmc2V0ID0gbV9zdGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAgYmx1ciA9IG1f
c3RhdGUuc2hhZG93Qmx1cjsKKyAgICBjb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CiAKICAg
ICByZXR1cm4gY29sb3IuaXNWYWxpZCgpICYmIGNvbG9yLmFscGhhKCkgJiYgKGJsdXIgfHwgb2Zm
c2V0LndpZHRoKCkgfHwgb2Zmc2V0LmhlaWdodCgpKTsKIH0KIAogZmxvYXQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VUaGlja25lc3MoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzOworICAgIHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzczsK
IH0KIAogU3Ryb2tlU3R5bGUgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VTdHlsZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VTdHlsZTsKKyAgICByZXR1cm4gbV9z
dGF0ZS5zdHJva2VTdHlsZTsKIH0KIAogQ29sb3IgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VDb2xv
cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvcjsKKyAg
ICByZXR1cm4gbV9zdGF0ZS5zdHJva2VDb2xvcjsKIH0KIAogQ29sb3JTcGFjZSBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZUNvbG9yU3BhY2UoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+
c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJva2VDb2xvclNw
YWNlOwogfQogCiBXaW5kUnVsZSBHcmFwaGljc0NvbnRleHQ6OmZpbGxSdWxlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlOworICAgIHJldHVybiBtX3N0YXRl
LmZpbGxSdWxlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUoV2luZFJ1
bGUgZmlsbFJ1bGUpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7
CisgICAgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKLSAgICBtX2Nv
bW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotICAgIG1fY29tbW9uLT5z
dGF0ZS5maWxsR3JhZGllbnQuY2xlYXIoKTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRl
cm4uY2xlYXIoKTsKKyAgICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9yOworICAgIG1fc3RhdGUu
ZmlsbENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LmNs
ZWFyKCk7CisgICAgbV9zdGF0ZS5maWxsUGF0dGVybi5jbGVhcigpOwogICAgIHNldFBsYXRmb3Jt
RmlsbENvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAogQ29sb3IgR3JhcGhpY3NDb250ZXh0
OjpmaWxsQ29sb3IoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuZmlsbENv
bG9yOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxDb2xvcjsKIH0KIAogQ29sb3JTcGFjZSBHcmFw
aGljc0NvbnRleHQ6OmZpbGxDb2xvclNwYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21t
b24tPnN0YXRlLmZpbGxDb2xvclNwYWNlOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxDb2xvclNw
YWNlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKGJvb2wg
YikKIHsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc2hvdWxkQW50aWFsaWFzID0gYjsKKyAgICBtX3N0
YXRlLnNob3VsZEFudGlhbGlhcyA9IGI7CiAgICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMo
Yik7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc2hvdWxkQW50aWFsaWFzOworICAgIHJldHVy
biBtX3N0YXRlLnNob3VsZEFudGlhbGlhczsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFN0cm9rZVBhdHRlcm4oUGFzc1JlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuKQpAQCAtMjIyLDkgKzIx
MSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFAKICAgICAgICAg
c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQuY2xl
YXIoKTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybiA9IHBhdHRlcm47Ci0gICAg
c2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLmdl
dCgpKTsKKyAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmNsZWFyKCk7CisgICAgbV9zdGF0ZS5z
dHJva2VQYXR0ZXJuID0gcGF0dGVybjsKKyAgICBzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4obV9z
dGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dEZpbGxQYXR0ZXJuKFBhc3NSZWZQdHI8UGF0dGVybj4gcGF0dGVybikKQEAgLTIzNCw5ICsyMjMs
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4oUGFzCiAgICAgICAgIHNl
dEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuY2xlYXIoKTsK
LSAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4gPSBwYXR0ZXJuOwotICAgIHNldFBsYXRm
b3JtRmlsbFBhdHRlcm4obV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKTsKKyAgICBt
X3N0YXRlLmZpbGxHcmFkaWVudC5jbGVhcigpOworICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBw
YXR0ZXJuOworICAgIHNldFBsYXRmb3JtRmlsbFBhdHRlcm4obV9zdGF0ZS5maWxsUGF0dGVybi5n
ZXQoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChQYXNz
UmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCkKQEAgLTI0Niw5ICsyMzUsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQoCiAgICAgICAgIHNldFN0cm9rZUNvbG9yKENv
bG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50ID0gZ3JhZGllbnQ7Ci0gICAgbV9j
b21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4uY2xlYXIoKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9r
ZUdyYWRpZW50KG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKSk7CisgICAgbV9z
dGF0ZS5zdHJva2VHcmFkaWVudCA9IGdyYWRpZW50OworICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVy
bi5jbGVhcigpOworICAgIHNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQobV9zdGF0ZS5zdHJva2VH
cmFkaWVudC5nZXQoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGll
bnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQpCkBAIC0yNTgsNTUgKzI0Nyw1NSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFBhCiAgICAgICAgIHNldEZpbGxD
b2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQgPSBncmFkaWVudDsKLSAg
ICBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uY2xlYXIoKTsKLSAgICBzZXRQbGF0Zm9ybUZp
bGxHcmFkaWVudChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKKyAgICBtX3N0
YXRlLmZpbGxHcmFkaWVudCA9IGdyYWRpZW50OworICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4uY2xl
YXIoKTsKKyAgICBzZXRQbGF0Zm9ybUZpbGxHcmFkaWVudChtX3N0YXRlLmZpbGxHcmFkaWVudC5n
ZXQoKSk7CiB9CiAKIEdyYWRpZW50KiBHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCk7Cisg
ICAgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOwogfQogCiBHcmFkaWVudCogR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29t
bW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudC5nZXQoKTsKIH0KIAogUGF0dGVybiogR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
dGVybigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi5n
ZXQoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKTsKIH0KIAogUGF0dGVy
biogR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXR0ZXJuKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7CisgICAgcmV0dXJuIG1fc3RhdGUu
c3Ryb2tlUGF0dGVybi5nZXQoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgaWdub3JlVHJhbnNmb3JtcykKIHsKLSAgICBtX2NvbW1v
bi0+c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBpZ25vcmVUcmFuc2Zvcm1zOworICAg
IG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBpZ25vcmVUcmFuc2Zvcm1zOwogfQog
CiBib29sIEdyYXBoaWNzQ29udGV4dDo6dXBkYXRpbmdDb250cm9sVGludHMoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2NvbW1vbi0+bV91cGRhdGluZ0NvbnRyb2xUaW50czsKKyAgICByZXR1cm4g
bV91cGRhdGluZ0NvbnRyb2xUaW50czsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVw
ZGF0aW5nQ29udHJvbFRpbnRzKGJvb2wgYikKIHsKICAgICBzZXRQYWludGluZ0Rpc2FibGVkKGIp
OwotICAgIG1fY29tbW9uLT5tX3VwZGF0aW5nQ29udHJvbFRpbnRzID0gYjsKKyAgICBtX3VwZGF0
aW5nQ29udHJvbFRpbnRzID0gYjsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBhaW50
aW5nRGlzYWJsZWQoYm9vbCBmKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5wYWludGluZ0Rpc2Fi
bGVkID0gZjsKKyAgICBtX3N0YXRlLnBhaW50aW5nRGlzYWJsZWQgPSBmOwogfQogCiBib29sIEdy
YXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
Y29tbW9uLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkOworICAgIHJldHVybiBtX3N0YXRlLnBhaW50
aW5nRGlzYWJsZWQ7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2Uq
IGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIHAsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wKQpAQCAtNTI4LDEyICs1MTcsMTIgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKAogCiBpbnQgR3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJh
d2luZ01vZGUoKQogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUudGV4dERyYXdpbmdNb2Rl
OworICAgIHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFRleHREcmF3aW5nTW9kZShpbnQgbW9kZSkKIHsKLSAgICBtX2NvbW1vbi0+
c3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9kZTsKKyAgICBtX3N0YXRlLnRleHREcmF3aW5nTW9k
ZSA9IG1vZGU7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKG1vZGUpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA3MzExNSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDkgKzMwLDExIEBACiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkRh
c2hBcnJheS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYWRpZW50Lmgi
CiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0
aC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
QEAgLTEyMiwxMiArMTI0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERyYXdp
bmdCdWZmZXI7CiAgICAgY2xhc3MgRm9udDsKICAgICBjbGFzcyBHZW5lcmF0b3I7Ci0gICAgY2xh
c3MgR3JhZGllbnQ7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwot
ICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFByaXZhdGU7CiAgICAgY2xhc3MgSW1hZ2VCdWZmZXI7
CiAgICAgY2xhc3MgS1VSTDsKLSAgICBjbGFzcyBQYXR0ZXJuOwogICAgIGNsYXNzIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFRleHRSdW47CiAKQEAgLTE1Miw2ICsxNTEsNTUg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRlcnBvbGF0aW9uSGlnaAogICAgIH07
CiAKKyAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgeworICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZSgpCisgICAgICAgICAgICA6IHRleHREcmF3aW5nTW9kZShjVGV4dEZpbGwpCisg
ICAgICAgICAgICAsIHN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKQorICAgICAgICAgICAgLCBzdHJv
a2VUaGlja25lc3MoMCkKKyAgICAgICAgICAgICwgc3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKQor
ICAgICAgICAgICAgLCBzdHJva2VDb2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0IpCisgICAg
ICAgICAgICAsIGZpbGxSdWxlKFJVTEVfTk9OWkVSTykKKyAgICAgICAgICAgICwgZmlsbENvbG9y
KENvbG9yOjpibGFjaykKKyAgICAgICAgICAgICwgZmlsbENvbG9yU3BhY2UoQ29sb3JTcGFjZURl
dmljZVJHQikKKyAgICAgICAgICAgICwgc2hvdWxkQW50aWFsaWFzKHRydWUpCisgICAgICAgICAg
ICAsIHBhaW50aW5nRGlzYWJsZWQoZmFsc2UpCisgICAgICAgICAgICAsIHNoYWRvd0JsdXIoMCkK
KyAgICAgICAgICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCisjaWYgUExBVEZP
Uk0oQ0FJUk8pCisgICAgICAgICAgICAsIGdsb2JhbEFscGhhKDEpCisjZW5kaWYKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgaW50IHRleHREcmF3aW5nTW9kZTsKKyAgICAgICAgCisg
ICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlOworICAgICAgICBmbG9hdCBzdHJva2VUaGlj
a25lc3M7CisgICAgICAgIENvbG9yIHN0cm9rZUNvbG9yOworICAgICAgICBDb2xvclNwYWNlIHN0
cm9rZUNvbG9yU3BhY2U7CisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQ7
CisgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0ZXJuOworICAgICAgICAKKyAgICAg
ICAgV2luZFJ1bGUgZmlsbFJ1bGU7CisgICAgICAgIENvbG9yIGZpbGxDb2xvcjsKKyAgICAgICAg
Q29sb3JTcGFjZSBmaWxsQ29sb3JTcGFjZTsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBmaWxs
R3JhZGllbnQ7CisgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBmaWxsUGF0dGVybjsKKworICAgICAg
ICBib29sIHNob3VsZEFudGlhbGlhczsKKworICAgICAgICBib29sIHBhaW50aW5nRGlzYWJsZWQ7
CisgICAgICAgIAorICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgICAgICBmbG9h
dCBzaGFkb3dCbHVyOworICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsKKworICAgICAgICBib29s
IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworI2lmIFBMQVRGT1JNKENBSVJPKQorICAgICAgICBm
bG9hdCBnbG9iYWxBbHBoYTsKKyNlbmRpZgorICAgIH07CisKICAgICBjbGFzcyBHcmFwaGljc0Nv
bnRleHQgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CkBAIC00NDEsMTEgKzQ4OSwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRv
UGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ry
b2tlV2lkdGgsIGNvbnN0IFN0cm9rZVN0eWxlJik7CiAKLSAgICAgICAgc3RhdGljIEdyYXBoaWNz
Q29udGV4dFByaXZhdGUqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKTsKLSAgICAgICAg
c3RhdGljIHZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUoR3JhcGhpY3NDb250ZXh0
UHJpdmF0ZSopOworICAgICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0
YTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBtX2NvbW1vbjsKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGE7IC8vIERlcHJlY2F0ZWQ7IG1f
Y29tbW1vbiBjYW4ganVzdCBiZSBkb3duY2FzdGVkLiBUbyBiZSByZW1vdmVkLgorICAgICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOworICAgICAgICBWZWN0b3I8R3JhcGhpY3NDb250
ZXh0U3RhdGU+IG1fc3RhY2s7CisgICAgICAgIGJvb2wgbV91cGRhdGluZ0NvbnRyb2xUaW50czsK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAkocmV2aXNpb24gNzMx
MTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdyYXBoaWNzQ29udGV4dFByaXZhdGVfaAot
I2RlZmluZSBHcmFwaGljc0NvbnRleHRQcml2YXRlX2gKLQotI2luY2x1ZGUgIkdyYWRpZW50Lmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewot
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSgpCi0gICAgICAgICAgICA6IHRleHREcmF3aW5n
TW9kZShjVGV4dEZpbGwpCi0gICAgICAgICAgICAsIHN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKQot
ICAgICAgICAgICAgLCBzdHJva2VUaGlja25lc3MoMCkKLSAgICAgICAgICAgICwgc3Ryb2tlQ29s
b3IoQ29sb3I6OmJsYWNrKQotICAgICAgICAgICAgLCBzdHJva2VDb2xvclNwYWNlKENvbG9yU3Bh
Y2VEZXZpY2VSR0IpCi0gICAgICAgICAgICAsIGZpbGxSdWxlKFJVTEVfTk9OWkVSTykKLSAgICAg
ICAgICAgICwgZmlsbENvbG9yKENvbG9yOjpibGFjaykKLSAgICAgICAgICAgICwgZmlsbENvbG9y
U3BhY2UoQ29sb3JTcGFjZURldmljZVJHQikKLSAgICAgICAgICAgICwgc2hvdWxkQW50aWFsaWFz
KHRydWUpCi0gICAgICAgICAgICAsIHBhaW50aW5nRGlzYWJsZWQoZmFsc2UpCi0gICAgICAgICAg
ICAsIHNoYWRvd0JsdXIoMCkKLSAgICAgICAgICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
ZmFsc2UpCi0jaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgICAgICAsIGdsb2JhbEFscGhhKDEp
Ci0jZW5kaWYKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHRleHREcmF3aW5n
TW9kZTsKLSAgICAgICAgCi0gICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlOwotICAgICAg
ICBmbG9hdCBzdHJva2VUaGlja25lc3M7Ci0gICAgICAgIENvbG9yIHN0cm9rZUNvbG9yOwotICAg
ICAgICBDb2xvclNwYWNlIHN0cm9rZUNvbG9yU3BhY2U7Ci0gICAgICAgIFJlZlB0cjxHcmFkaWVu
dD4gc3Ryb2tlR3JhZGllbnQ7Ci0gICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0ZXJu
OwotICAgICAgICAKLSAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGU7Ci0gICAgICAgIENvbG9yIGZp
bGxDb2xvcjsKLSAgICAgICAgQ29sb3JTcGFjZSBmaWxsQ29sb3JTcGFjZTsKLSAgICAgICAgUmVm
UHRyPEdyYWRpZW50PiBmaWxsR3JhZGllbnQ7Ci0gICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBmaWxs
UGF0dGVybjsKLQotICAgICAgICBib29sIHNob3VsZEFudGlhbGlhczsKLQotICAgICAgICBib29s
IHBhaW50aW5nRGlzYWJsZWQ7Ci0gICAgICAgIAotICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zm
c2V0OwotICAgICAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAgICAgICBDb2xvciBzaGFkb3dDb2xv
cjsKLQotICAgICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotI2lmIFBMQVRGT1JN
KENBSVJPKQotICAgICAgICBmbG9hdCBnbG9iYWxBbHBoYTsKLSNlbmRpZgotICAgIH07Ci0KLSAg
ICBjbGFzcyBHcmFwaGljc0NvbnRleHRQcml2YXRlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFByaXZhdGUoKQotICAgICAgICAgICAg
OiBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQot
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBzdGF0ZTsKLSAgICAgICAgVmVjdG9yPEdyYXBo
aWNzQ29udGV4dFN0YXRlPiBzdGFjazsKLSAgICAgICAgYm9vbCBtX3VwZGF0aW5nQ29udHJvbFRp
bnRzOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdyYXBo
aWNzQ29udGV4dFByaXZhdGVfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDczMTE1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlQ2Fpcm8uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAj
aW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKQEAgLTc1LDQyICs3NCw0MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
c2V0Q29sb3IoY2Fpcm9fdCogY3IsCiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCByZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQbGF0Zm9y
bUZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjYWlyb190KiBjciwgR3JhcGhpY3NDb250
ZXh0UHJpdmF0ZSogZ2NwKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBsYXRmb3JtRmlsbChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNhaXJvX3QqIGNyKQogewogICAgIGNhaXJvX3BhdHRlcm5f
dCogcGF0dGVybiA9IDA7CiAgICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgaWYgKGdjcC0+c3RhdGUu
ZmlsbFBhdHRlcm4pIHsKKyAgICBpZiAoY29udGV4dC0+bV9zdGF0ZS5maWxsUGF0dGVybikgewog
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAgICBwYXR0ZXJuID0gZ2NwLT5z
dGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSk7CisgICAgICAg
IHBhdHRlcm4gPSBjb250ZXh0LT5tX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oYWZmaW5lKTsKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7Ci0g
ICAgfSBlbHNlIGlmIChnY3AtPnN0YXRlLmZpbGxHcmFkaWVudCkKLSAgICAgICAgY2Fpcm9fc2V0
X3NvdXJjZShjciwgZ2NwLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7
CisgICAgfSBlbHNlIGlmIChjb250ZXh0LT5tX3N0YXRlLmZpbGxHcmFkaWVudCkKKyAgICAgICAg
Y2Fpcm9fc2V0X3NvdXJjZShjciwgY29udGV4dC0+bV9zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRm
b3JtR3JhZGllbnQoKSk7CiAgICAgZWxzZQogICAgICAgICBzZXRDb2xvcihjciwgY29udGV4dC0+
ZmlsbENvbG9yKCkpOwogICAgIGNhaXJvX2NsaXBfcHJlc2VydmUoY3IpOwotICAgIGNhaXJvX3Bh
aW50X3dpdGhfYWxwaGEoY3IsIGdjcC0+c3RhdGUuZ2xvYmFsQWxwaGEpOworICAgIGNhaXJvX3Bh
aW50X3dpdGhfYWxwaGEoY3IsIGNvbnRleHQtPm1fc3RhdGUuZ2xvYmFsQWxwaGEpOwogICAgIGNh
aXJvX3Jlc3RvcmUoY3IpOwogICAgIGlmIChwYXR0ZXJuKQogICAgICAgICBjYWlyb19wYXR0ZXJu
X2Rlc3Ryb3kocGF0dGVybik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQbGF0Zm9ybVN0
cm9rZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNhaXJvX3QqIGNyLCBHcmFwaGljc0NvbnRl
eHRQcml2YXRlKiBnY3ApCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGxhdGZvcm1TdHJva2UoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjYWlyb190KiBjcikKIHsKICAgICBjYWlyb19wYXR0ZXJu
X3QqIHBhdHRlcm4gPSAwOwogICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGlmIChnY3AtPnN0YXRl
LnN0cm9rZVBhdHRlcm4pIHsKKyAgICBpZiAoY29udGV4dC0+bV9zdGF0ZS5zdHJva2VQYXR0ZXJu
KSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgIHBhdHRlcm4gPSBn
Y3AtPnN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpOwor
ICAgICAgICBwYXR0ZXJuID0gY29udGV4dC0+bV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQ
bGF0Zm9ybVBhdHRlcm4oYWZmaW5lKTsKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0
dGVybik7Ci0gICAgfSBlbHNlIGlmIChnY3AtPnN0YXRlLnN0cm9rZUdyYWRpZW50KQotICAgICAg
ICBjYWlyb19zZXRfc291cmNlKGNyLCBnY3AtPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9y
bUdyYWRpZW50KCkpOworICAgIH0gZWxzZSBpZiAoY29udGV4dC0+bV9zdGF0ZS5zdHJva2VHcmFk
aWVudCkKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgY29udGV4dC0+bV9zdGF0ZS5zdHJv
a2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKICAgICBlbHNlICB7Ci0gICAgICAgIENv
bG9yIHN0cm9rZUNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb250ZXh0LT5zdHJva2VD
b2xvcigpLnJnYigpLCBjb250ZXh0LT5zdHJva2VDb2xvcigpLmFscGhhKCkgLyAyNTUuZiAqIGdj
cC0+c3RhdGUuZ2xvYmFsQWxwaGEpOworICAgICAgICBDb2xvciBzdHJva2VDb2xvciA9IGNvbG9y
V2l0aE92ZXJyaWRlQWxwaGEoY29udGV4dC0+c3Ryb2tlQ29sb3IoKS5yZ2IoKSwgY29udGV4dC0+
c3Ryb2tlQ29sb3IoKS5hbHBoYSgpIC8gMjU1LmYgKiBjb250ZXh0LT5tX3N0YXRlLmdsb2JhbEFs
cGhhKTsKICAgICAgICAgc2V0Q29sb3IoY3IsIHN0cm9rZUNvbG9yKTsKICAgICB9Ci0gICAgaWYg
KGdjcC0+c3RhdGUuZ2xvYmFsQWxwaGEgPCAxLjBmICYmIChnY3AtPnN0YXRlLnN0cm9rZVBhdHRl
cm4gfHwgZ2NwLT5zdGF0ZS5zdHJva2VHcmFkaWVudCkpIHsKKyAgICBpZiAoY29udGV4dC0+bV9z
dGF0ZS5nbG9iYWxBbHBoYSA8IDEuMGYgJiYgKGNvbnRleHQtPm1fc3RhdGUuc3Ryb2tlUGF0dGVy
biB8fCBjb250ZXh0LT5tX3N0YXRlLnN0cm9rZUdyYWRpZW50KSkgewogICAgICAgICBjYWlyb19w
dXNoX2dyb3VwKGNyKTsKLSAgICAgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjciwgZ2NwLT5z
dGF0ZS5nbG9iYWxBbHBoYSk7CisgICAgICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY3IsIGNv
bnRleHQtPm1fc3RhdGUuZ2xvYmFsQWxwaGEpOwogICAgICAgICBjYWlyb19wb3BfZ3JvdXBfdG9f
c291cmNlKGNyKTsKICAgICB9CiAgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNyKTsKQEAgLTE0
Miw3ICsxNDEsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgeyAKICAgICBGaWxsQW5kU3Ryb2tl
ID0gRmlsbCArIFN0cm9rZQogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogY29udGV4
dFByaXZhdGUsIFBhdGhEcmF3aW5nU3R5bGUgZHJhd2luZ1N0eWxlKQorc3RhdGljIGlubGluZSB2
b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUGF0aERyYXdpbmdT
dHlsZSBkcmF3aW5nU3R5bGUpCiB7CiAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4
dC0+Y29udGV4dFNoYWRvdygpOwogICAgIEFTU0VSVChzaGFkb3cpOwpAQCAtMTc4LDMyICsxNzcs
MzIgQEAgc3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaQogICAgIGNhaXJv
X2FwcGVuZF9wYXRoKHNoYWRvd0NvbnRleHQsIHBhdGgpOwogCiAgICAgaWYgKGRyYXdpbmdTdHls
ZSAmIEZpbGwpCi0gICAgICAgIHNldFBsYXRmb3JtRmlsbChjb250ZXh0LCBzaGFkb3dDb250ZXh0
LCBjb250ZXh0UHJpdmF0ZSk7CisgICAgICAgIHNldFBsYXRmb3JtRmlsbChjb250ZXh0LCBzaGFk
b3dDb250ZXh0KTsKICAgICBpZiAoZHJhd2luZ1N0eWxlICYgU3Ryb2tlKQotICAgICAgICBzZXRQ
bGF0Zm9ybVN0cm9rZShjb250ZXh0LCBzaGFkb3dDb250ZXh0LCBjb250ZXh0UHJpdmF0ZSk7Cisg
ICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIHNoYWRvd0NvbnRleHQpOwogCiAgICAg
c2hhZG93LT5lbmRTaGFkb3dMYXllcihjYWlyb0NvbnRleHQpOwogfQogCi1zdGF0aWMgdm9pZCBm
aWxsQ3VycmVudENhaXJvUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29u
dGV4dFByaXZhdGUqIGdjcCwgY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQorc3RhdGljIHZvaWQgZmls
bEN1cnJlbnRDYWlyb1BhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjYWlyb190KiBjYWly
b0NvbnRleHQpCiB7CiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjYWlyb0NvbnRleHQsIGNvbnRl
eHQtPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9fRklMTF9SVUxFX0VWRU5fT0RE
IDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOwotICAgIGRyYXdQYXRoU2hhZG93KGNvbnRleHQs
IGdjcCwgRmlsbCk7CisgICAgZHJhd1BhdGhTaGFkb3coY29udGV4dCwgRmlsbCk7CiAKLSAgICBz
ZXRQbGF0Zm9ybUZpbGwoY29udGV4dCwgY2Fpcm9Db250ZXh0LCBnY3ApOworICAgIHNldFBsYXRm
b3JtRmlsbChjb250ZXh0LCBjYWlyb0NvbnRleHQpOwogICAgIGNhaXJvX25ld19wYXRoKGNhaXJv
Q29udGV4dCk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBnY3AsIGNhaXJvX3Qq
IGNhaXJvQ29udGV4dCkKK3N0YXRpYyB2b2lkIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQogewotICAgIGRyYXdQ
YXRoU2hhZG93KGNvbnRleHQsIGdjcCwgU3Ryb2tlKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZShj
b250ZXh0LCBjYWlyb0NvbnRleHQsIGdjcCk7CisgICAgZHJhd1BhdGhTaGFkb3coY29udGV4dCwg
U3Ryb2tlKTsKKyAgICBzZXRQbGF0Zm9ybVN0cm9rZShjb250ZXh0LCBjYWlyb0NvbnRleHQpOwog
ICAgIGNhaXJvX25ld19wYXRoKGNhaXJvQ29udGV4dCk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDo6
R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjcikKLSAgICA6IG1fY29t
bW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQorICAgIDogbV9kYXRhKG5ldyBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUpCisgICAgLCBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNl
KQogewogICAgIG1fZGF0YS0+Y3IgPSBjYWlyb19yZWZlcmVuY2UoY3IpOwogICAgIG1fZGF0YS0+
c3luY0NvbnRleHQoY3IpOwpAQCAtMjEyLDcgKzIxMSw2IEBAIEdyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0KFBsYXRmb3IKIAogR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0
KCkKIHsKLSAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiAgICAg
ZGVsZXRlIG1fZGF0YTsKIH0KIApAQCAtNTM4LDcgKzUzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKIAogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsK
ICAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsIHBhdGgucGxhdGZvcm1QYXRoKCktPmNvbnRl
eHQoKSk7Ci0gICAgZmlsbEN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9jb21tb24sIGNyKTsKKyAg
ICBmaWxsQ3VycmVudENhaXJvUGF0aCh0aGlzLCBjcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC01NDgsNyArNTQ2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUAogCiAgICAgY2Fpcm9fdCogY3Ig
PSBtX2RhdGEtPmNyOwogICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0aC5wbGF0Zm9y
bVBhdGgoKS0+Y29udGV4dCgpKTsKLSAgICBzdHJva2VDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIG1f
Y29tbW9uLCBjcik7CisgICAgc3Ryb2tlQ3VycmVudENhaXJvUGF0aCh0aGlzLCBjcik7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBA
IC01NTksNyArNTU3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZs
bwogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKICAgICBjYWlyb19zYXZlKGNyKTsKICAg
ICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKLSAgICBmaWxsQ3VycmVudENhaXJvUGF0aCh0aGlzLCBtX2NvbW1vbiwg
Y3IpOworICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIGNyKTsKICAgICBjYWlyb19yZXN0
b3JlKGNyKTsKIH0KIApAQCAtODM2LDEwICs4MzQsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFkZElubmVyUm91bmRlZFJlYwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hh
ZG93KEZsb2F0U2l6ZSBjb25zdCYgc2l6ZSwgZmxvYXQgYmx1ciwgQ29sb3IgY29uc3QmIGNvbG9y
LCBDb2xvclNwYWNlKQogewogICAgIC8vIENhaXJvIGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dzIG5h
dGl2ZWx5LCB0aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyogZnVuY3Rpb25zCi0g
ICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgIGlm
IChtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CiAgICAgICAgIC8vIE1lYW5pbmcg
dGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dAogICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5k
IEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICBtX2NvbW1vbi0+c3Rh
dGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkp
OworICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzaXplLndpZHRoKCks
IC1zaXplLmhlaWdodCgpKTsKICAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93
KGNvbG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSkpOwog
ICAgIH0gZWxzZQogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3Is
IGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKQEAgLTkwMiw3
ICs5MDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGCiAgICAg
Y2Fpcm9fc2F2ZShjcik7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgY2Fpcm9fc2V0X2xpbmVfd2lk
dGgoY3IsIHdpZHRoKTsKLSAgICBzdHJva2VDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIG1fY29tbW9u
LCBjcik7CisgICAgc3Ryb2tlQ3VycmVudENhaXJvUGF0aCh0aGlzLCBjcik7CiAgICAgY2Fpcm9f
cmVzdG9yZShjcik7CiB9CiAKQEAgLTk2MSwxMiArOTU5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2EKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhh
KGZsb2F0IGFscGhhKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5nbG9iYWxBbHBoYSA9IGFscGhh
OworICAgIG1fc3RhdGUuZ2xvYmFsQWxwaGEgPSBhbHBoYTsKIH0KIAogZmxvYXQgR3JhcGhpY3ND
b250ZXh0OjpnZXRBbHBoYSgpCiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5nbG9iYWxB
bHBoYTsKKyAgICByZXR1cm4gbV9zdGF0ZS5nbG9iYWxBbHBoYTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCShyZXZpc2lvbiA3MzExNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgpAQCAtMTA4LDggKzEwNyw4IEBAIENH
Q29sb3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xvclNwYWNlUmVmKCkKIH0KIAogR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKLSAgICA6IG1fY29t
bW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCkpCisgICAgOiBtX2RhdGEobmV3
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQpKQorICAgICwgbV91cGRh
dGluZ0NvbnRyb2xUaW50cyhmYWxzZSkKIHsKICAgICBzZXRQYWludGluZ0Rpc2FibGVkKCFjZ0Nv
bnRleHQpOwogICAgIGlmIChjZ0NvbnRleHQpIHsKQEAgLTEyMSw3ICsxMjAsNiBAQCBHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChDR0NvbnRlCiAKIEdyYXBoaWNzQ29udGV4dDo6fkdy
YXBoaWNzQ29udGV4dCgpCiB7Ci0gICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9j
b21tb24pOwogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKQEAgLTQ1Miw3ICs0NTAsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuCiB7CiAgICAgQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgUmV0YWluUHRyPENHUGF0dGVy
blJlZj4gcGxhdGZvcm1QYXR0ZXJuKEFkb3B0Q0YsIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0
ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsKKyAgICBSZXRhaW5QdHI8Q0dQ
YXR0ZXJuUmVmPiBwbGF0Zm9ybVBhdHRlcm4oQWRvcHRDRiwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
LT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0
dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC00NjcsNyArNDY1LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogewogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IHBs
YXRmb3JtUGF0dGVybihBZG9wdENGLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0
ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkpOworICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+
IHBsYXRmb3JtUGF0dGVybihBZG9wdENGLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0
Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAg
ICAgcmV0dXJuOwogCkBAIC01MTEsNyArNTA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXRoKGNvbnN0IFBhdAogICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSA9IG1fY29tbW9uLT5zdGF0ZTsKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUgPSBtX3N0YXRlOwogCiAgICAgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCB8fCBzdGF0
ZS5zdHJva2VHcmFkaWVudCkgewogICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBvcHRpbWl6
ZWQgd2F5IHRvIGZpbGwgJiBzdHJva2UgYSBwYXRoIHVzaW5nIGdyYWRpZW50cwpAQCAtNTUyLDE5
ICs1NTAsMTkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogICAg
IENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRl
eHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxs
R3JhZGllbnQpIHsKKyAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKICAgICAgICAgQ0dD
b250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVM
RV9FVkVOT0REKQogICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAgICBDR0Nv
bnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+Z3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFk
aWVudC0+cGFpbnQodGhpcyk7CisgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBt
X3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAg
bV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KHRoaXMpOwogICAgICAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1f
Y29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikK
ICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogICAgIGZpbGxQYXRoV2l0aEZpbGxSdWxlKGNv
bnRleHQsIGZpbGxSdWxlKCkpOwogfQpAQCAtNTc5LDE3ICs1NzcsMTcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUAogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250
ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkp
OwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmICht
X3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29u
dGV4dCk7CiAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRl
eHQpOwogICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5ncmFkaWVu
dFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGll
bnQtPnBhaW50KHRoaXMpOworICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9z
dGF0ZS5zdHJva2VHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAg
bV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQodGhpcyk7CiAgICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
bV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlUGF0
dGVybikKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAgICAgQ0dDb250ZXh0U3Ryb2tl
UGF0aChjb250ZXh0KTsKIH0KQEAgLTYwMSwxNiArNTk5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCkg
eworICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgewogICAgICAgICBDR0NvbnRleHRTYXZl
R1N0YXRlKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHJl
Y3QpOwotICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9jb21tb24tPnN0YXRl
LmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgbV9jb21t
b24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQodGhpcyk7CisgICAgICAgIENHQ29udGV4dENv
bmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KHRoaXMpOwogICAg
ICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAobV9z
dGF0ZS5maWxsUGF0dGVybikKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogICAgIENHQ29u
dGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOwogfQpAQCAtNzQwLDcgKzczOCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdygKICAgICBDR0Zsb2F0IGJsdXJSYWRp
dXMgPSBibHVyOwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAKLSAgICBpZiAoIW1fY29tbW9uLT5zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykgewor
ICAgIGlmICghbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICBDR0Fm
ZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gd2tHZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQp
OwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0u
YSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTgxNSwxOCArODEzLDE4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEYKIAogICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9jb21tb24t
PnN0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQp
IHsKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgc2V0U3Ry
b2tlVGhpY2tuZXNzKGxpbmVXaWR0aCk7CiAgICAgICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4
dCwgcik7CiAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRl
eHQpOwogICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAgICBtX2NvbW1vbi0+
c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KHRoaXMpOworICAgICAgICBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50LT5wYWludCh0aGlzKTsKICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShj
b250ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2NvbW1vbi0+c3Rh
dGUuc3Ryb2tlUGF0dGVybikKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQogICAgICAg
ICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKICAgICBDR0NvbnRleHRTdHJva2VSZWN0V2l0aFdpZHRo
KGNvbnRleHQsIHIsIGxpbmVXaWR0aCk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkocmV2aXNp
b24gNzMxMTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29u
dGV4dEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTUgKzYzLDE0IEBAIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWMKIH0KIAogR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi0gICAgOiBt
X2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgLCBtX2RhdGEobmV3
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjb250ZXh0KSkKKyAgICA6IG1fZGF0YShu
ZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNvbnRleHQpKQorICAgICwgbV91cGRh
dGluZ0NvbnRyb2xUaW50cyhmYWxzZSkKIHsKICAgICBzZXRQYWludGluZ0Rpc2FibGVkKCFjb250
ZXh0KTsKIH0KIAogR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKIHsKLSAgICBk
ZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiAgICAgZGVsZXRlIG1fZGF0
YTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3ND
b250ZXh0T3BlblZHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwCShyZXZpc2lvbiA3MzExNSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKICNpbmNsdWRlICJQYWludGVyT3BlblZHLmgiCkBAIC01MCwxNSArNDksMTQgQEAg
cHVibGljOgogfTsKIAogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoU3VyZmFjZU9w
ZW5WRyogc3VyZmFjZSkKLSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZh
dGUoKSkKICAgICAsIG1fZGF0YShzdXJmYWNlID8gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZShzdXJmYWNlKSA6IDApCisgICAgLCBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNl
KQogewogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIXN1cmZhY2UpOwogfQogCiBHcmFwaGljc0Nv
bnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewotICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQ
cml2YXRlKG1fY29tbW9uKTsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCkBAIC0xNDgsNyArMTQ2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogICAgIGJlZ2lu
UGF0aCgpOwogICAgIGFkZFBhdGgocGF0aCk7CiAKLSAgICBtX2RhdGEtPmRyYXdQYXRoKFZHX0ZJ
TExfUEFUSCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAgICBtX2RhdGEtPmRyYXdQYXRo
KFZHX0ZJTExfUEFUSCwgbV9zdGF0ZS5maWxsUnVsZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0xNjAsNyArMTU4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUAogICAgIGJlZ2luUGF0aCgpOwog
ICAgIGFkZFBhdGgocGF0aCk7CiAKLSAgICBtX2RhdGEtPmRyYXdQYXRoKFZHX1NUUk9LRV9QQVRI
LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAgIG1fZGF0YS0+ZHJhd1BhdGgoVkdfU1RS
T0tFX1BBVEgsIG1fc3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNDA4LDcgKzQwNiw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHAKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBh
aW50ZXJPcGVuVkc6OkludGVyc2VjdENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7Cisg
ICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpJbnRlcnNlY3RDbGlwLCBt
X3N0YXRlLmZpbGxSdWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAo
Y29uc3QgUGF0aCYgcGF0aCkKQEAgLTQyMSw3ICs0MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcE91dChjb25zdCBQYXRoCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpT
dWJ0cmFjdENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRhLT5jbGlw
UGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpTdWJ0cmFjdENsaXAsIG1fc3RhdGUuZmlsbFJ1bGUp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2Fs
ZUZhY3RvcnMpCkBAIC00NTUsNyArNDUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXQoY29uc3QgSW50UgogCiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkUmVjdChyZWN0KTsK
LSAgICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OlN1YnRyYWN0Q2xpcCwg
bV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAgICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBh
aW50ZXJPcGVuVkc6OlN1YnRyYWN0Q2xpcCwgbV9zdGF0ZS5maWxsUnVsZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKQEAgLTQ3OCw3ICs0NzYsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiAgICAgcGF0aC5hZGRFbGxpcHNl
KEZsb2F0UmVjdChyZWN0LngoKSArIHRoaWNrbmVzcywgcmVjdC55KCkgKyB0aGlja25lc3MsCiAg
ICAgICAgIHJlY3Qud2lkdGgoKSAtICh0aGlja25lc3MgKiAyKSwgcmVjdC5oZWlnaHQoKSAtICh0
aGlja25lc3MgKiAyKSkpOwogCi0gICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3Bl
blZHOjpJbnRlcnNlY3RDbGlwLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAgIG1fZGF0
YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6SW50ZXJzZWN0Q2xpcCwgbV9zdGF0ZS5m
aWxsUnVsZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm1hdGlvbikKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShyZXZpc2lvbiA3MzExNSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5o
IgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTI1NCw4
ICsyNTMsOCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljCiB9CiAK
IEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBwYWludGVyKQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgp
KQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUocGFpbnRl
ciwgZmlsbENvbG9yKCkpKQorICAgIDogbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUocGFpbnRlciwgZmlsbENvbG9yKCkpKQorICAgICwgbV91cGRhdGluZ0NvbnRyb2xU
aW50cyhmYWxzZSkKIHsKICAgICBzZXRQYWludGluZ0Rpc2FibGVkKCFwYWludGVyKTsKIApAQCAt
Mjc2LDcgKzI3NSw2IEBAIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiAgICAg
d2hpbGUgKCFtX2RhdGEtPmxheWVycy5pc0VtcHR5KCkpCiAgICAgICAgIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCk7CiAKLSAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7
CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIApAQCAtNTEwLDcgKzUwOCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICBpZiAobV9kYXRhLT5oYXNTaGFkb3co
KSkgewogICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CiAg
ICAgICAgIGlmIChzaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93Ci0g
ICAgICAgICAgICAmJiAhbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuICYmICFtX2NvbW1vbi0+
c3RhdGUuZmlsbEdyYWRpZW50KQorICAgICAgICAgICAgJiYgIW1fc3RhdGUuZmlsbFBhdHRlcm4g
JiYgIW1fc3RhdGUuZmlsbEdyYWRpZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBRUG9pbnRG
IG9mZnNldCA9IHNoYWRvdy0+b2Zmc2V0KCk7CiAgICAgICAgICAgICBjb25zdCBRVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0gPSBwLT50cmFuc2Zvcm0oKTsKQEAgLTUzNywxMiArNTM1LDEyIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICAgICAgfQogCiAgICAgfQot
ICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4pIHsKKyAgICBpZiAobV9zdGF0ZS5m
aWxsUGF0dGVybikgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAgICBw
LT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVzaChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRl
cm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKSk7Ci0gICAgfSBlbHNlIGlmIChtX2Nv
bW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7Ci0gICAgICAgIFFCcnVzaCBicnVzaCgqbV9jb21t
b24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKLSAgICAgICAgYnJ1
c2guc2V0VHJhbnNmb3JtKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgUUJydXNo
KG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKSk7Cisg
ICAgfSBlbHNlIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgeworICAgICAgICBRQnJ1c2ggYnJ1
c2goKm1fc3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBi
cnVzaC5zZXRUcmFuc2Zvcm0obV9zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0oKSk7CiAgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgYnJ1c2gpOwogICAg
IH0gZWxzZQogICAgICAgICBwLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIHAtPmJydXNoKCkpOwpA
QCAtNTYyLDcgKzU2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0
IFAKICAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOwogCiAg
ICAgICAgIGlmIChzaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93Ci0g
ICAgICAgICAgICAmJiAhbV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4gJiYgIW1fY29tbW9u
LT5zdGF0ZS5zdHJva2VHcmFkaWVudCkKKyAgICAgICAgICAgICYmICFtX3N0YXRlLnN0cm9rZVBh
dHRlcm4gJiYgIW1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpCiAgICAgICAgIHsKICAgICAgICAgICAg
IFFQZW4gc2hhZG93UGVuKHBlbik7CiAgICAgICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3IobV9k
YXRhLT5zaGFkb3cubV9jb2xvcik7CkBAIC01OTMsMTQgKzU5MSwxNCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
bV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4pIHsKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VQ
YXR0ZXJuKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgIHBlbi5z
ZXRCcnVzaChRQnJ1c2gobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRm
b3JtUGF0dGVybihhZmZpbmUpKSk7CisgICAgICAgIHBlbi5zZXRCcnVzaChRQnJ1c2gobV9zdGF0
ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkpOwogICAgICAg
ICBwLT5zZXRQZW4ocGVuKTsKICAgICAgICAgcC0+c3Ryb2tlUGF0aChwbGF0Zm9ybVBhdGgsIHBl
bik7Ci0gICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKLSAg
ICAgICAgUUJydXNoIGJydXNoKCptX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRm
b3JtR3JhZGllbnQoKSk7Ci0gICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX2NvbW1vbi0+c3Rh
dGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgfSBlbHNl
IGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgICAgIFFCcnVzaCBicnVzaCgqbV9z
dGF0ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJ1c2gu
c2V0VHJhbnNmb3JtKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0oKSk7CiAgICAgICAgIHBlbi5zZXRCcnVzaChicnVzaCk7CiAgICAgICAgIHAtPnNldFBlbihw
ZW4pOwogICAgICAgICBwLT5zdHJva2VQYXRoKHBsYXRmb3JtUGF0aCwgcGVuKTsKQEAgLTY4NCwy
MSArNjgyLDIxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAg
ICBRUmVjdEYgbm9ybWFsaXplZFJlY3QgPSByZWN0Lm5vcm1hbGl6ZWQoKTsKICAgICBDb250ZXh0
U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CiAKLSAgICBpZiAobV9jb21tb24tPnN0
YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKICAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKLSAgICAgICAgUUJydXNoIGJydXNoKG1fY29tbW9u
LT5zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpOwotICAg
ICAgICBRUGl4bWFwKiBpbWFnZSA9IG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+dGlsZUlt
YWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIFFCcnVzaCBicnVz
aChtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSk7Cisg
ICAgICAgIFFQaXhtYXAqIGltYWdlID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+dGlsZUltYWdlKCkt
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQ
YWludGVyID0gbV9kYXRhLT5oYXNTaGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihw
LCBub3JtYWxpemVkUmVjdCkgOiAwOwogICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewotICAg
ICAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4oc2hhZG93UGFpbnRlciwgaW1hZ2UsIG5vcm1hbGl6
ZWRSZWN0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9jb21tb24t
PnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOworICAgICAgICAgICAgZHJhd1JlcGVhdFBh
dHRlcm4oc2hhZG93UGFpbnRlciwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLmZpbGxQ
YXR0ZXJuLT5yZXBlYXRYKCksIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CiAgICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBv
c2l0aW9uTW9kZV9Tb3VyY2VJbik7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVj
dChub3JtYWxpemVkUmVjdCwgc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRvdy0+
ZW5kU2hhZG93TGF5ZXIocCk7CiAgICAgICAgIH0KLSAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4o
cCwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJl
cGVhdFgoKSwgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwotICAgIH0g
ZWxzZSBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCkgewotICAgICAgICBRQnJ1c2gg
YnJ1c2goKm1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7
Ci0gICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50
LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihw
LCBpbWFnZSwgbm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwg
bV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKKyAgICB9IGVsc2UgaWYgKG1fc3RhdGUu
ZmlsbEdyYWRpZW50KSB7CisgICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5maWxsR3JhZGll
bnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX3N0
YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKICAgICAgICAgUVBh
aW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBtX2RhdGEtPmhhc1NoYWRvdygpID8gc2hhZG93LT5iZWdp
blNoYWRvd0xheWVyKHAsIG5vcm1hbGl6ZWRSZWN0KSA6IDA7CiAgICAgICAgIGlmIChzaGFkb3dQ
YWludGVyKSB7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVk
UmVjdCwgYnJ1c2gpOwpAQCAtOTYwLDEwICs5NTgsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU2hhZG93KAogICAgIC8vIFF0IGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dzIG5h
dGl2ZWx5LCB0aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyoKICAgICAvLyBmdW5j
dGlvbnMKIAotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
IHsKKyAgICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICAv
LyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBh
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQKICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNp
bmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgbV9j
b21tb24tPnN0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXpl
LmhlaWdodCgpKTsKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6
ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29u
dGV4dFNoYWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVp
Z2h0KCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRT
aGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDczMTE1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiR0xFUzJDYW52YXMuaCIKICNpbmNsdWRlICJHcmFk
aWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKQEAg
LTIyMCw4ICsyMTksOCBAQCB2b2lkIGFkZENvcm5lckFyYyhTa1BhdGgqIHBhdGgsIGNvbnN0IFNr
CiAvLyBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgcG9pbnRlciB0byBjcmVhdGUgYSBn
cmFwaGljcyBjb250ZXh0IHRoYXQgaGFzCiAvLyBubyBwYWludGluZy4KIEdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBnYykKLSAgICA6IG1f
Y29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGdjKSkKKyAgICA6IG1fZGF0YShuZXcgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGdjKSkKKyAgICAsIG1fdXBkYXRpbmdDb250cm9s
VGludHMoZmFsc2UpCiB7CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxlZCghZ2MgfHwgIXBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKSk7CiB9CkBAIC0yMjksNyArMjI4LDYgQEAgR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcgogR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3ND
b250ZXh0KCkKIHsKICAgICBkZWxldGUgbV9kYXRhOwotICAgIHRoaXMtPmRlc3Ryb3lHcmFwaGlj
c0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQq
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKQEAgLTc0Miw3ICs3NDAs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0CiAKICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOwogCi0gICAgY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9jb21tb24tPnN0YXRlOworICAgIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgcGF0aC5zZXRGaWxsVHlw
ZShzdGF0ZS5maWxsUnVsZSA9PSBSVUxFX0VWRU5PREQgPwogICAgICAgICBTa1BhdGg6OmtFdmVu
T2RkX0ZpbGxUeXBlIDogU2tQYXRoOjprV2luZGluZ19GaWxsVHlwZSk7CiAKQEAgLTEwNzEsNyAr
MTA2OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdygKIAogICAg
IC8vIFRPRE8odGMpOiBUaGlzIHN0aWxsIGRvZXMgbm90IGFkZHJlc3MgdGhlIGlzc3VlIHRoYXQg
c2hhZG93cwogICAgIC8vIHdpdGhpbiBjYW52YXMgZWxlbWVudHMgc2hvdWxkIGlnbm9yZSB0cmFu
c2Zvcm1zLgotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
ICB7CisgICAgaWYgKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpICB7CiAgICAgICAg
IC8vIEN1cnJlbnRseSBvbmx5IHRoZSBHcmFwaGljc0NvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRo
ZQogICAgICAgICAvLyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IGZvciBIVE1MQ2FudmFzRWxlbWVu
dCBoYXZlIHNoYWRvd3MgaWdub3JlCiAgICAgICAgIC8vIFRyYW5zZm9ybXMuIFNvIHdpdGggdGhp
cyBmbGFnIHNldCwgd2Uga25vdyB0aGlzIHN0YXRlIGlzIGFzc29jaWF0ZWQKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dp
bi5jcHAJKHJldmlzaW9uIDczMTE1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw4ICs2Miw4IEBA
IHN0YXRpYyBDR0NvbnRleHRSZWYgQ0dDb250ZXh0V2l0aEhEQyhIREMKIH0KIAogR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKLSAgICA6IG1f
Y29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNB
bHBoYSkpKQorICAgIDogbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUo
Q0dDb250ZXh0V2l0aEhEQyhoZGMsIGhhc0FscGhhKSkpCisgICAgLCBtX3VwZGF0aW5nQ29udHJv
bFRpbnRzKGZhbHNlKQogewogICAgIENHQ29udGV4dFJlbGVhc2UobV9kYXRhLT5tX2NnQ29udGV4
dC5nZXQoKSk7CiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5j
cHAJKHJldmlzaW9uIDczMTE1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw4IEBA
IHN0YXRpYyBjYWlyb190KiBjcmVhdGVDYWlyb0NvbnRleHRXaXRoSEQKIH0KIAogR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGRjLCBib29sIGhhc0FscGhhKQotICAgIDogbV9j
b21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKG5ldyBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCisgICAgOiBtX2RhdGEobmV3IEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSkKKyAgICAsIG1fdXBkYXRpbmdDb250cm9sVGludHMoZmFs
c2UpCiB7CiAgICAgaWYgKGRjKSB7CiAgICAgICAgIG1fZGF0YS0+Y3IgPSBjcmVhdGVDYWlyb0Nv
bnRleHRXaXRoSERDKGRjLCBoYXNBbHBoYSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAkocmV2aXNp
b24gNzMxMTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29u
dGV4dFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUg
IkdESUV4dHJhcy5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhZGll
bnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1QYXRo
V2luQ0UuaCIKQEAgLTU4MiwxNCArNTgxLDEzIEBAIHByaXZhdGU6CiAKIAogR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGRjKQotOiBtX2Nv
bW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0sIG1fZGF0YShuZXcgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGRjKSkKKyAgICA6IG1fZGF0YShuZXcgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKGRjKSkKKyAgICAsIG1fdXBkYXRpbmdDb250cm9sVGludHMo
ZmFsc2UpCiB7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiB7Ci0g
ICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogICAgIGRlbGV0ZSBt
X2RhdGE7CiB9CiAKQEAgLTEzMzEsOCArMTMyOSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aChjb25zdCBQYXQKICAgICBiZWdpblBhdGgoKTsKICAgICBhZGRQYXRoKHBhdGgpOwog
Ci0gICAgQ29sb3IgYyA9IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQKLSAgICAgICAgPyBn
cmFkaWVudEF2ZXJhZ2VDb2xvcihtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKQor
ICAgIENvbG9yIGMgPSBtX3N0YXRlLmZpbGxHcmFkaWVudAorICAgICAgICA/IGdyYWRpZW50QXZl
cmFnZUNvbG9yKG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKQogICAgICAgICA6IGZpbGxDb2xv
cigpOwogCiAgICAgaWYgKCFjLmFscGhhKCkgfHwgIW1fZGF0YS0+bV9vcGFjaXR5KQpAQCAtMTUx
Miw4ICsxNTEwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwog
ewogICAgIHNhdmVQbGF0Zm9ybVN0YXRlKCk7CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLmZp
bGxHcmFkaWVudCkKLSAgICAgICAgZmlsbFJlY3QocmVjdCwgbV9jb21tb24tPnN0YXRlLmZpbGxH
cmFkaWVudC5nZXQoKSk7CisgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KQorICAgICAgICBm
aWxsUmVjdChyZWN0LCBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7CiAgICAgZWxzZQogICAg
ICAgICBmaWxsUmVjdChyZWN0LCBmaWxsQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250
ZXh0V3guY3BwCShyZXZpc2lvbiA3MzExNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsOCArMTE0LDgg
QEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpYwogCiAKIEdyYXBoaWNz
Q29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
KQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwg
bV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCisgICAgOiBtX2RhdGEo
bmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSkKKyAgICAsIG1fdXBkYXRpbmdDb250
cm9sVGludHMoZmFsc2UpCiB7ICAgIAogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNvbnRleHQp
OwogICAgIGlmIChjb250ZXh0KSB7CkBAIC0xMzUsNyArMTM1LDYgQEAgR3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcgogCiBHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0Nv
bnRleHQoKQogewotICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsK
ICAgICBkZWxldGUgbV9kYXRhOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75729</attachid>
            <date>2010-12-06 12:32:37 -0800</date>
            <delta_ts>2010-12-06 14:26:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>mergeCommonAndData_v1.5.patch</filename>
            <type>text/plain</type>
            <size>54980</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzM3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI1IEBACisyMDEwLTEyLTA2ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBH
cmFwaGljc0NvbnRleHQ6IE1lcmdlIG1fY29tbW9uIGFuZCBtX2RhdGEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTE0CisKKyAgICAgICAgTW92ZSBk
YXRhIG1lbWJlcnMgZnJvbSBHcmFwaGljc0NvbnRleHRQcml2YXRlIGludG8gR3JhcGhpY3NDb250
ZXh0LiBTbyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybS5oCisgICAgICAgIGFuZCAgbV9jb21tb24g
bWVtYmVyIGJlY2FtZSB1bm5lY2Vzc2FyeS4gVGhleSBhcmUgcmVtb3ZlZC4KKyAgICAgICAgQWRk
IHR3byB2aXJ0dWFsIG1ldGhvZHMgdG8gR3JhcGhpY3NDb250ZXh0OiBwbGF0Zm9ybUluaXQoKSBh
bmQgcGxhdGZvcm1EZXN0cm95KCksIHdoaWNoCisgICAgICAgIG1ha2UgdGhlIGNvbnN0cnVjdG9y
IG9mIEdyYXBoaWNzQ29udGV4dCBjbGVhcmVyLgorICAgICAgICBCZXNpZGVzIGFkZCBhIGdldHRl
ciB0byB0aGUgcHJpdmF0ZSBHcmFwaGljc0NvbnRleHQ6Om1fc3RhdGUgbWVtYmVyLCBiZWNhdXNl
IHNvbWUgaW5saW5lCisgICAgICAgIGZ1bmN0aW9ucyBpbiBjYWlybyBuZWVkIGl0LgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0IGlzIG5lZWRlZCwgYmVjYXVzZSB0aGlzIGlzIGEgcmVmYWN0b3Jpbmcu
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
VGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0
cm9rZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEdyYWRp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlR3JhZGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnVwZGF0aW5nQ29udHJvbFRpbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VXBkYXRpbmdDb250cm9sVGlu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQYWludGluZ0Rpc2Fi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRleHREcmF3aW5nTW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFRleHREcmF3aW5nTW9kZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQcml2YXRlOjpHcmFwaGljc0Nv
bnRleHRQcml2YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQbGF0Zm9ybUZpbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0UGxhdGZvcm1TdHJva2UpOgorICAgICAgICAoV2ViQ29yZTo6
ZHJhd1BhdGhTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEN1cnJlbnRDYWlyb1BhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6c3Ryb2tlQ3VycmVudENhaXJvUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRBbHBoYSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFk
b3cpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tp
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29u
dGV4dFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1J
bml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95
KToKKwogMjAxMC0xMi0wNiAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM5MjAs
NyArMzkyMCw3IEBACiAJCUE4RjRGQjk2MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBw
b3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
RjRGQjk1MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmNwcCAqLzsgfTsKIAkJ
QThGNUMwQjgwRjkyODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY1QzBCNjBGOTI4NUFD
MDA5OEUwNkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLzsgfTsKIAkJQThGNUMwQjkwRjky
ODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjVDMEI3MEY5Mjg1QUMwMDk4RTA2QiAv
KiBSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgKi87IH07Ci0JCUE4RkE2RTVEMEU0Q0ZERUQwMEQ1
Q0Y0OSAvKiBQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovOyB9OworCQlB
OEZBNkU1RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBh
dHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlBOEZBNkU1RTBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEZBNkU1QzBFNENGREVEMDBENUNGNDkg
LyogUGF0dGVybi5jcHAgKi87IH07CiAJCUE5QzZFNEUzMEQ3NDVFMDUwMDY0NDJFOSAvKiBET01N
aW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOUM2RTRFMTBENzQ1RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuY3BwICovOyB9OwogCQlB
OUM2RTRFNDBENzQ1RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUyMEQ3NDVFMDUwMDY0NDJFOSAv
KiBET01NaW1lVHlwZS5oICovOyB9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDYgQEAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJGb250LmgiCiAj
aW5jbHVkZSAiR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC03
NCwxNCArNzMsMTQgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9vZmZzZXQ7CiB9OwogCi1HcmFwaGlj
c0NvbnRleHRQcml2YXRlKiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dFBy
aXZhdGUoKQorR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KQogewotICAgIHJldHVybiBuZXcgR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZTsKKyAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4
dFByaXZhdGUoR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZGVsZXRlTWUpCitHcmFwaGljc0NvbnRl
eHQ6On5HcmFwaGljc0NvbnRleHQoKQogewotICAgIGRlbGV0ZSBkZWxldGVNZTsKKyAgICBwbGF0
Zm9ybURlc3Ryb3koKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQpAQCAtODks
NyArODgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb21tb24tPnN0YWNrLmFwcGVu
ZChtX2NvbW1vbi0+c3RhdGUpOworICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUpOwogCiAgICAg
c2F2ZVBsYXRmb3JtU3RhdGUoKTsKIH0KQEAgLTk5LDEyMCArOTgsMTI1IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpyZXN0b3JlKCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9jb21tb24tPnN0YWNrLmlzRW1wdHkoKSkgewotICAgICAg
ICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sg
aXMgZW1wdHkiKTsKKyAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIG1fc3RhY2sgaXMgZW1w
dHkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1vbi0+c3RhdGUgPSBtX2Nv
bW1vbi0+c3RhY2subGFzdCgpOwotICAgIG1fY29tbW9uLT5zdGFjay5yZW1vdmVMYXN0KCk7Cisg
ICAgbV9zdGF0ZSA9IG1fc3RhY2subGFzdCgpOworICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOwog
CiAgICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiB7Ci0gICAgbV9jb21tb24tPnN0
YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKKyAgICBtX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcyA9IHRoaWNrbmVzczsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyh0aGlja25l
c3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlU3R5bGUoY29uc3QgU3Ry
b2tlU3R5bGUmIHN0eWxlKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VTdHlsZSA9IHN0
eWxlOworICAgIG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsKICAgICBzZXRQbGF0Zm9ybVN0
cm9rZVN0eWxlKHN0eWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNv
bG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewotICAgIG1f
Y29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwotICAgIG1fY29tbW9uLT5zdGF0ZS5z
dHJva2VDb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
R3JhZGllbnQuY2xlYXIoKTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5jbGVh
cigpOworICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKKyAgICBtX3N0YXRlLnN0cm9r
ZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuY2xl
YXIoKTsKKyAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uY2xlYXIoKTsKICAgICBzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7Ci0gICAgbV9jb21tb24tPnN0
YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Qmx1
ciA9IGJsdXI7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7CisgICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0g
Ymx1cjsKKyAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7CiAgICAgc2V0UGxhdGZvcm1T
aGFkb3cob2Zmc2V0LCBibHVyLCBjb2xvciwgY29sb3JTcGFjZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclNoYWRvdygpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd09m
ZnNldCA9IEZsb2F0U2l6ZSgpOwotICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dCbHVyID0gMDsK
LSAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOworICAgIG1fc3RhdGUu
c2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7CisgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsK
KyAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsKICAgICBjbGVhclBsYXRmb3JtU2hh
ZG93KCk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXplJiBv
ZmZzZXQsIGZsb2F0JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CiB7Ci0gICAgb2Zmc2V0ID0g
bV9jb21tb24tPnN0YXRlLnNoYWRvd09mZnNldDsKLSAgICBibHVyID0gbV9jb21tb24tPnN0YXRl
LnNoYWRvd0JsdXI7Ci0gICAgY29sb3IgPSBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Q29sb3I7Cisg
ICAgb2Zmc2V0ID0gbV9zdGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAgYmx1ciA9IG1fc3RhdGUuc2hh
ZG93Qmx1cjsKKyAgICBjb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CiAKICAgICByZXR1cm4g
Y29sb3IuaXNWYWxpZCgpICYmIGNvbG9yLmFscGhhKCkgJiYgKGJsdXIgfHwgb2Zmc2V0LndpZHRo
KCkgfHwgb2Zmc2V0LmhlaWdodCgpKTsKIH0KIAogZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VUaGlja25lc3MoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
VGhpY2tuZXNzOworICAgIHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzczsKIH0KIAogU3Ry
b2tlU3R5bGUgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VTdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VTdHlsZTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJv
a2VTdHlsZTsKIH0KIAogQ29sb3IgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VDb2xvcigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvcjsKKyAgICByZXR1cm4g
bV9zdGF0ZS5zdHJva2VDb2xvcjsKIH0KIAogQ29sb3JTcGFjZSBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUNvbG9yU3BhY2UoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ry
b2tlQ29sb3JTcGFjZTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJva2VDb2xvclNwYWNlOwogfQog
CiBXaW5kUnVsZSBHcmFwaGljc0NvbnRleHQ6OmZpbGxSdWxlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxSdWxl
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1
bGUpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7CisgICAgbV9z
dGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewot
ICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKLSAgICBtX2NvbW1vbi0+c3Rh
dGUuZmlsbENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxs
R3JhZGllbnQuY2xlYXIoKTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uY2xlYXIo
KTsKKyAgICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9yOworICAgIG1fc3RhdGUuZmlsbENvbG9y
U3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LmNsZWFyKCk7Cisg
ICAgbV9zdGF0ZS5maWxsUGF0dGVybi5jbGVhcigpOwogICAgIHNldFBsYXRmb3JtRmlsbENvbG9y
KGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAogQ29sb3IgR3JhcGhpY3NDb250ZXh0OjpmaWxsQ29s
b3IoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yOworICAg
IHJldHVybiBtX3N0YXRlLmZpbGxDb2xvcjsKIH0KIAogQ29sb3JTcGFjZSBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxDb2xvclNwYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRl
LmZpbGxDb2xvclNwYWNlOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxDb2xvclNwYWNlOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgYikKIHsKLSAg
ICBtX2NvbW1vbi0+c3RhdGUuc2hvdWxkQW50aWFsaWFzID0gYjsKKyAgICBtX3N0YXRlLnNob3Vs
ZEFudGlhbGlhcyA9IGI7CiAgICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYik7CiB9CiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMoKSBjb25zdAogewotICAgIHJl
dHVybiBtX2NvbW1vbi0+c3RhdGUuc2hvdWxkQW50aWFsaWFzOworICAgIHJldHVybiBtX3N0YXRl
LnNob3VsZEFudGlhbGlhczsKK30KKworR3JhcGhpY3NDb250ZXh0U3RhdGUgR3JhcGhpY3NDb250
ZXh0OjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGU7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFBhc3NSZWZQdHI8UGF0dGVybj4gcGF0dGVy
bikKQEAgLTIyMiw5ICsyMjYsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0
dGVybihQCiAgICAgICAgIHNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURl
dmljZVJHQik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9jb21tb24tPnN0YXRlLnN0
cm9rZUdyYWRpZW50LmNsZWFyKCk7Ci0gICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4g
PSBwYXR0ZXJuOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlUGF0dGVybihtX2NvbW1vbi0+c3RhdGUu
c3Ryb2tlUGF0dGVybi5nZXQoKSk7CisgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5jbGVhcigp
OworICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IHBhdHRlcm47CisgICAgc2V0UGxhdGZvcm1T
dHJva2VQYXR0ZXJuKG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4p
CkBAIC0yMzQsOSArMjM4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJu
KFBhcwogICAgICAgICBzZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbEdy
YWRpZW50LmNsZWFyKCk7Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuID0gcGF0dGVy
bjsKLSAgICBzZXRQbGF0Zm9ybUZpbGxQYXR0ZXJuKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVy
bi5nZXQoKSk7CisgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQuY2xlYXIoKTsKKyAgICBtX3N0YXRl
LmZpbGxQYXR0ZXJuID0gcGF0dGVybjsKKyAgICBzZXRQbGF0Zm9ybUZpbGxQYXR0ZXJuKG1fc3Rh
dGUuZmlsbFBhdHRlcm4uZ2V0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ry
b2tlR3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQpCkBAIC0yNDYsOSArMjUw
LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KAogICAgICAgICBz
ZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudCA9IGdy
YWRpZW50OwotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLmNsZWFyKCk7Ci0gICAg
c2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQu
Z2V0KCkpOworICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBncmFkaWVudDsKKyAgICBtX3N0
YXRlLnN0cm9rZVBhdHRlcm4uY2xlYXIoKTsKKyAgICBzZXRQbGF0Zm9ybVN0cm9rZUdyYWRpZW50
KG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0RmlsbEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50KQpAQCAtMjU4
LDU1ICsyNjIsNTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChQYQog
ICAgICAgICBzZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50
ID0gZ3JhZGllbnQ7Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLmNsZWFyKCk7Ci0g
ICAgc2V0UGxhdGZvcm1GaWxsR3JhZGllbnQobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5n
ZXQoKSk7CisgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBncmFkaWVudDsKKyAgICBtX3N0YXRl
LmZpbGxQYXR0ZXJuLmNsZWFyKCk7CisgICAgc2V0UGxhdGZvcm1GaWxsR3JhZGllbnQobV9zdGF0
ZS5maWxsR3JhZGllbnQuZ2V0KCkpOwogfQogCiBHcmFkaWVudCogR3JhcGhpY3NDb250ZXh0Ojpm
aWxsR3JhZGllbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuZmlsbEdy
YWRpZW50LmdldCgpOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKTsKIH0K
IAogR3JhZGllbnQqIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlR3JhZGllbnQoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCk7CisgICAgcmV0
dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCk7CiB9CiAKIFBhdHRlcm4qIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdHRlcm4oKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3Rh
dGUuZmlsbFBhdHRlcm4uZ2V0KCk7CisgICAgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0
KCk7CiB9CiAKIFBhdHRlcm4qIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0dGVybigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOworICAg
IHJldHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIGlnbm9yZVRyYW5zZm9ybXMp
CiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gaWdub3Jl
VHJhbnNmb3JtczsKKyAgICBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gaWdub3Jl
VHJhbnNmb3JtczsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OnVwZGF0aW5nQ29udHJvbFRp
bnRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPm1fdXBkYXRpbmdDb250cm9sVGlu
dHM7CisgICAgcmV0dXJuIG1fdXBkYXRpbmdDb250cm9sVGludHM7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRVcGRhdGluZ0NvbnRyb2xUaW50cyhib29sIGIpCiB7CiAgICAgc2V0UGFp
bnRpbmdEaXNhYmxlZChiKTsKLSAgICBtX2NvbW1vbi0+bV91cGRhdGluZ0NvbnRyb2xUaW50cyA9
IGI7CisgICAgbV91cGRhdGluZ0NvbnRyb2xUaW50cyA9IGI7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQYWludGluZ0Rpc2FibGVkKGJvb2wgZikKIHsKLSAgICBtX2NvbW1vbi0+c3Rh
dGUucGFpbnRpbmdEaXNhYmxlZCA9IGY7CisgICAgbV9zdGF0ZS5wYWludGluZ0Rpc2FibGVkID0g
ZjsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OnBhaW50aW5nRGlzYWJsZWQoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZDsKKyAgICByZXR1
cm4gbV9zdGF0ZS5wYWludGluZ0Rpc2FibGVkOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0
IEludFBvaW50JiBwLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKQEAgLTUyOCwxMiArNTMyLDEyIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcigKIAogVGV4dERyYXdpbmdN
b2RlRmxhZ3MgR3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJhd2luZ01vZGUoKSBjb25zdAogewotICAg
IHJldHVybiBtX2NvbW1vbi0+c3RhdGUudGV4dERyYXdpbmdNb2RlOworICAgIHJldHVybiBtX3N0
YXRlLnRleHREcmF3aW5nTW9kZTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFRleHRE
cmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQogewotICAgIG1fY29tbW9uLT5z
dGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOworICAgIG1fc3RhdGUudGV4dERyYXdpbmdNb2Rl
ID0gbW9kZTsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgc2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUobW9kZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDczMzYwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRGFz
aEFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhZGllbnQuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQYXRo
LmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpA
QCAtMTE3LDEyICsxMTksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRHJhd2lu
Z0J1ZmZlcjsKICAgICBjbGFzcyBGb250OwogICAgIGNsYXNzIEdlbmVyYXRvcjsKLSAgICBjbGFz
cyBHcmFkaWVudDsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7Ci0g
ICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsKICAgICBjbGFzcyBJbWFnZUJ1ZmZlcjsK
ICAgICBjbGFzcyBLVVJMOwotICAgIGNsYXNzIFBhdHRlcm47CiAgICAgY2xhc3MgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgVGV4dFJ1bjsKIApAQCAtMTQ5LDEwICsxNDgsNjIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRlcnBvbGF0aW9uSGlnaAogICAgIH07
CiAKKyAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgeworICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZSgpCisgICAgICAgICAgICA6IHRleHREcmF3aW5nTW9kZShUZXh0TW9kZUZpbGwp
CisgICAgICAgICAgICAsIHN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKQorICAgICAgICAgICAgLCBz
dHJva2VUaGlja25lc3MoMCkKKyAgICAgICAgICAgICwgc3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNr
KQorICAgICAgICAgICAgLCBzdHJva2VDb2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0IpCisg
ICAgICAgICAgICAsIGZpbGxSdWxlKFJVTEVfTk9OWkVSTykKKyAgICAgICAgICAgICwgZmlsbENv
bG9yKENvbG9yOjpibGFjaykKKyAgICAgICAgICAgICwgZmlsbENvbG9yU3BhY2UoQ29sb3JTcGFj
ZURldmljZVJHQikKKyAgICAgICAgICAgICwgc2hvdWxkQW50aWFsaWFzKHRydWUpCisgICAgICAg
ICAgICAsIHBhaW50aW5nRGlzYWJsZWQoZmFsc2UpCisgICAgICAgICAgICAsIHNoYWRvd0JsdXIo
MCkKKyAgICAgICAgICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCisjaWYgUExB
VEZPUk0oQ0FJUk8pCisgICAgICAgICAgICAsIGdsb2JhbEFscGhhKDEpCisjZW5kaWYKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgaW50IHRleHREcmF3aW5nTW9kZTsKKyAgICAgICAg
CisgICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlOworICAgICAgICBmbG9hdCBzdHJva2VU
aGlja25lc3M7CisgICAgICAgIENvbG9yIHN0cm9rZUNvbG9yOworICAgICAgICBDb2xvclNwYWNl
IHN0cm9rZUNvbG9yU3BhY2U7CisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGll
bnQ7CisgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0ZXJuOworICAgICAgICAKKyAg
ICAgICAgV2luZFJ1bGUgZmlsbFJ1bGU7CisgICAgICAgIENvbG9yIGZpbGxDb2xvcjsKKyAgICAg
ICAgQ29sb3JTcGFjZSBmaWxsQ29sb3JTcGFjZTsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBm
aWxsR3JhZGllbnQ7CisgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBmaWxsUGF0dGVybjsKKworICAg
ICAgICBib29sIHNob3VsZEFudGlhbGlhczsKKworICAgICAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQ7CisgICAgICAgIAorICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgICAgICBm
bG9hdCBzaGFkb3dCbHVyOworICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsKKworICAgICAgICBi
b29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworI2lmIFBMQVRGT1JNKENBSVJPKQorICAgICAg
ICBmbG9hdCBnbG9iYWxBbHBoYTsKKyNlbmRpZgorICAgIH07CisKICAgICBjbGFzcyBHcmFwaGlj
c0NvbnRleHQgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgICAgIH5HcmFwaGlj
c0NvbnRleHQoKTsKKyAgICAgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKICNpZiAhT1MoV0lOQ0Up
IHx8IFBMQVRGT1JNKFFUKQogICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZv
cm1Db250ZXh0KCkgY29uc3Q7CkBAIC0xODksNiArMjQwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sKTsKICAgICAgICAgYm9vbCBz
aG91bGRBbnRpYWxpYXMoKSBjb25zdDsKIAorICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBz
dGF0ZSgpIGNvbnN0OworCiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgICAgIHZvaWQgYXBwbHlTdHJv
a2VQYXR0ZXJuKCk7CiAgICAgICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOwpAQCAtNDM4LDEx
ICs0OTEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyB2b2lkIGFk
anVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIs
IGZsb2F0IHN0cm9rZVdpZHRoLCBjb25zdCBTdHJva2VTdHlsZSYpOwogCi0gICAgICAgIHN0YXRp
YyBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCk7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKEdyYXBo
aWNzQ29udGV4dFByaXZhdGUqKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBtX2RhdGE7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogbV9jb21tb247
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9kYXRhOyAvLyBEZXBy
ZWNhdGVkOyBtX2NvbW1tb24gY2FuIGp1c3QgYmUgZG93bmNhc3RlZC4gVG8gYmUgcmVtb3ZlZC4K
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKKyAgICAgICAgVmVjdG9yPEdy
YXBoaWNzQ29udGV4dFN0YXRlPiBtX3N0YWNrOworICAgICAgICBib29sIG1fdXBkYXRpbmdDb250
cm9sVGludHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgJKHJl
dmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDUzICszNCw1MSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewogICAgICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZSgpCi0gICAgICAgICAgICA6IHN0cm9rZVRoaWNrbmVzcygwKQot
ICAgICAgICAgICAgLCBzaGFkb3dCbHVyKDApCi0jaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAg
ICAgICAsIGdsb2JhbEFscGhhKDEpCi0jZW5kaWYKLSAgICAgICAgICAgICwgdGV4dERyYXdpbmdN
b2RlKFRleHRNb2RlRmlsbCkKLSAgICAgICAgICAgICwgc3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNr
KQotICAgICAgICAgICAgLCBmaWxsQ29sb3IoQ29sb3I6OmJsYWNrKQorICAgICAgICAgICAgOiB0
ZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKQogICAgICAgICAgICAgLCBzdHJva2VTdHlsZShTb2xp
ZFN0cm9rZSkKLSAgICAgICAgICAgICwgZmlsbFJ1bGUoUlVMRV9OT05aRVJPKQorICAgICAgICAg
ICAgLCBzdHJva2VUaGlja25lc3MoMCkKKyAgICAgICAgICAgICwgc3Ryb2tlQ29sb3IoQ29sb3I6
OmJsYWNrKQogICAgICAgICAgICAgLCBzdHJva2VDb2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VS
R0IpCisgICAgICAgICAgICAsIGZpbGxSdWxlKFJVTEVfTk9OWkVSTykKKyAgICAgICAgICAgICwg
ZmlsbENvbG9yKENvbG9yOjpibGFjaykKICAgICAgICAgICAgICwgZmlsbENvbG9yU3BhY2UoQ29s
b3JTcGFjZURldmljZVJHQikKICAgICAgICAgICAgICwgc2hvdWxkQW50aWFsaWFzKHRydWUpCiAg
ICAgICAgICAgICAsIHBhaW50aW5nRGlzYWJsZWQoZmFsc2UpCisgICAgICAgICAgICAsIHNoYWRv
d0JsdXIoMCkKICAgICAgICAgICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCisj
aWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgICAgICAsIGdsb2JhbEFscGhhKDEpCisjZW5kaWYK
ICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgaW50IHRleHREcmF3aW5nTW9kZTsKKyAg
ICAgICAgCisgICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlOworICAgICAgICBmbG9hdCBz
dHJva2VUaGlja25lc3M7CisgICAgICAgIENvbG9yIHN0cm9rZUNvbG9yOworICAgICAgICBDb2xv
clNwYWNlIHN0cm9rZUNvbG9yU3BhY2U7CiAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tl
R3JhZGllbnQ7CiAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0ZXJuOwogICAgICAg
ICAKKyAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGU7CisgICAgICAgIENvbG9yIGZpbGxDb2xvcjsK
KyAgICAgICAgQ29sb3JTcGFjZSBmaWxsQ29sb3JTcGFjZTsKICAgICAgICAgUmVmUHRyPEdyYWRp
ZW50PiBmaWxsR3JhZGllbnQ7CiAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBmaWxsUGF0dGVybjsK
IAotICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgICAgICBib29sIHNob3VsZEFu
dGlhbGlhczsKIAotICAgICAgICBmbG9hdCBzdHJva2VUaGlja25lc3M7CisgICAgICAgIGJvb2wg
cGFpbnRpbmdEaXNhYmxlZDsKKyAgICAgICAgCisgICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZz
ZXQ7CiAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXI7CisgICAgICAgIENvbG9yIHNoYWRvd0NvbG9y
OwogCisgICAgICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAjaWYgUExBVEZPUk0o
Q0FJUk8pCiAgICAgICAgIGZsb2F0IGdsb2JhbEFscGhhOwogI2VuZGlmCi0gICAgICAgIFRleHRE
cmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZTsKLQotICAgICAgICBDb2xvciBzdHJva2VD
b2xvcjsKLSAgICAgICAgQ29sb3IgZmlsbENvbG9yOwotICAgICAgICBDb2xvciBzaGFkb3dDb2xv
cjsKLQotICAgICAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZTsKLSAgICAgICAgV2luZFJ1bGUg
ZmlsbFJ1bGU7Ci0KLSAgICAgICAgQ29sb3JTcGFjZSBzdHJva2VDb2xvclNwYWNlOwotICAgICAg
ICBDb2xvclNwYWNlIGZpbGxDb2xvclNwYWNlOwotCi0gICAgICAgIGJvb2wgc2hvdWxkQW50aWFs
aWFzOwotICAgICAgICBib29sIHBhaW50aW5nRGlzYWJsZWQ7Ci0gICAgICAgIGJvb2wgc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgfTsKIAogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBy
aXZhdGUgOiBwdWJsaWMgTm9uY29weWFibGUgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlz
aW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2
YXRlLmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTY4LDQyICs2Nyw0MiBAQCB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBz
ZXRQbGF0Zm9ybUZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjYWlyb190KiBjciwgR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBsYXRmb3Jt
RmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNhaXJvX3QqIGNyKQogewogICAgIGNhaXJv
X3BhdHRlcm5fdCogcGF0dGVybiA9IDA7CiAgICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgaWYgKGdj
cC0+c3RhdGUuZmlsbFBhdHRlcm4pIHsKKyAgICBpZiAoc3RhdGUoKS5maWxsUGF0dGVybikgewog
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAgICBwYXR0ZXJuID0gZ2NwLT5z
dGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSk7CisgICAgICAg
IHBhdHRlcm4gPSBzdGF0ZSgpLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZm
aW5lKTsKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7CiAgICAgfSBlbHNl
IGlmIChnY3AtPnN0YXRlLmZpbGxHcmFkaWVudCkKLSAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShj
ciwgZ2NwLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAg
IGNhaXJvX3NldF9zb3VyY2UoY3IsIHN0YXRlKCkuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRp
ZW50KCkpOwogICAgIGVsc2UKICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29u
dGV4dC0+ZmlsbENvbG9yKCkpOwogICAgIGNhaXJvX2NsaXBfcHJlc2VydmUoY3IpOwotICAgIGNh
aXJvX3BhaW50X3dpdGhfYWxwaGEoY3IsIGdjcC0+c3RhdGUuZ2xvYmFsQWxwaGEpOworICAgIGNh
aXJvX3BhaW50X3dpdGhfYWxwaGEoY3IsIHN0YXRlKCkuZ2xvYmFsQWxwaGEpOwogICAgIGNhaXJv
X3Jlc3RvcmUoY3IpOwogICAgIGlmIChwYXR0ZXJuKQogICAgICAgICBjYWlyb19wYXR0ZXJuX2Rl
c3Ryb3kocGF0dGVybik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQbGF0Zm9ybVN0cm9r
ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNhaXJvX3QqIGNyLCBHcmFwaGljc0NvbnRleHRQ
cml2YXRlKiBnY3ApCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGxhdGZvcm1TdHJva2UoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjYWlyb190KiBjcikKIHsKICAgICBjYWlyb19wYXR0ZXJuX3Qq
IHBhdHRlcm4gPSAwOwogICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGlmIChnY3AtPnN0YXRlLnN0
cm9rZVBhdHRlcm4pIHsKKyAgICBpZiAoc3RhdGUoKS5zdHJva2VQYXR0ZXJuKSB7CiAgICAgICAg
IEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgIHBhdHRlcm4gPSBnY3AtPnN0YXRlLnN0
cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpOworICAgICAgICBwYXR0
ZXJuID0gc3RhdGUoKS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5l
KTsKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7Ci0gICAgfSBlbHNlIGlm
IChnY3AtPnN0YXRlLnN0cm9rZUdyYWRpZW50KQotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNy
LCBnY3AtPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgIH0g
ZWxzZSBpZiAoc3RhdGUoKS5zdHJva2VHcmFkaWVudCkKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJj
ZShjciwgc3RhdGUoKS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKICAgICBl
bHNlICB7Ci0gICAgICAgIENvbG9yIHN0cm9rZUNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBo
YShjb250ZXh0LT5zdHJva2VDb2xvcigpLnJnYigpLCBjb250ZXh0LT5zdHJva2VDb2xvcigpLmFs
cGhhKCkgLyAyNTUuZiAqIGdjcC0+c3RhdGUuZ2xvYmFsQWxwaGEpOworICAgICAgICBDb2xvciBz
dHJva2VDb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29udGV4dC0+c3Ryb2tlQ29sb3Io
KS5yZ2IoKSwgY29udGV4dC0+c3Ryb2tlQ29sb3IoKS5hbHBoYSgpIC8gMjU1LmYgKiBzdGF0ZSgp
Lmdsb2JhbEFscGhhKTsKICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgc3Ryb2tl
Q29sb3IpOwogICAgIH0KLSAgICBpZiAoZ2NwLT5zdGF0ZS5nbG9iYWxBbHBoYSA8IDEuMGYgJiYg
KGdjcC0+c3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBnY3AtPnN0YXRlLnN0cm9rZUdyYWRpZW50KSkg
eworICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhIDwgMS4wZiAmJiAoc3RhdGUoKS5zdHJva2VQ
YXR0ZXJuIHx8IHN0YXRlKCkuc3Ryb2tlR3JhZGllbnQpKSB7CiAgICAgICAgIGNhaXJvX3B1c2hf
Z3JvdXAoY3IpOwotICAgICAgICBjYWlyb19wYWludF93aXRoX2FscGhhKGNyLCBnY3AtPnN0YXRl
Lmdsb2JhbEFscGhhKTsKKyAgICAgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjciwgc3RhdGUo
KS5nbG9iYWxBbHBoYSk7CiAgICAgICAgIGNhaXJvX3BvcF9ncm91cF90b19zb3VyY2UoY3IpOwog
ICAgIH0KICAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY3IpOwpAQCAtMTM1LDcgKzEzNCw3IEBA
IGVudW0gUGF0aERyYXdpbmdTdHlsZSB7IAogICAgIEZpbGxBbmRTdHJva2UgPSBGaWxsICsgU3Ry
b2tlCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBjb250ZXh0UHJpdmF0ZSwgUGF0
aERyYXdpbmdTdHlsZSBkcmF3aW5nU3R5bGUpCitzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhT
aGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBQYXRoRHJhd2luZ1N0eWxlIGRyYXdpbmdT
dHlsZSkKIHsKICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0LT5jb250ZXh0U2hh
ZG93KCk7CiAgICAgQVNTRVJUKHNoYWRvdyk7CkBAIC0xNzEsNDEgKzE3MCwzOSBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpCiAgICAgY2Fpcm9fYXBwZW5kX3BhdGgo
c2hhZG93Q29udGV4dCwgcGF0aCk7CiAKICAgICBpZiAoZHJhd2luZ1N0eWxlICYgRmlsbCkKLSAg
ICAgICAgc2V0UGxhdGZvcm1GaWxsKGNvbnRleHQsIHNoYWRvd0NvbnRleHQsIGNvbnRleHRQcml2
YXRlKTsKKyAgICAgICAgc2V0UGxhdGZvcm1GaWxsKGNvbnRleHQsIHNoYWRvd0NvbnRleHQpOwog
ICAgIGlmIChkcmF3aW5nU3R5bGUgJiBTdHJva2UpCi0gICAgICAgIHNldFBsYXRmb3JtU3Ryb2tl
KGNvbnRleHQsIHNoYWRvd0NvbnRleHQsIGNvbnRleHRQcml2YXRlKTsKKyAgICAgICAgc2V0UGxh
dGZvcm1TdHJva2UoY29udGV4dCwgc2hhZG93Q29udGV4dCk7CiAKICAgICBzaGFkb3ctPmVuZFNo
YWRvd0xheWVyKGNhaXJvQ29udGV4dCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbGxDdXJyZW50Q2Fp
cm9QYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSog
Z2NwLCBjYWlyb190KiBjYWlyb0NvbnRleHQpCitzdGF0aWMgdm9pZCBmaWxsQ3VycmVudENhaXJv
UGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKIHsK
ICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNhaXJvQ29udGV4dCwgY29udGV4dC0+ZmlsbFJ1bGUo
KSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxM
X1JVTEVfV0lORElORyk7Ci0gICAgZHJhd1BhdGhTaGFkb3coY29udGV4dCwgZ2NwLCBGaWxsKTsK
KyAgICBkcmF3UGF0aFNoYWRvdyhjb250ZXh0LCBGaWxsKTsKIAotICAgIHNldFBsYXRmb3JtRmls
bChjb250ZXh0LCBjYWlyb0NvbnRleHQsIGdjcCk7CisgICAgc2V0UGxhdGZvcm1GaWxsKGNvbnRl
eHQsIGNhaXJvQ29udGV4dCk7CiAgICAgY2Fpcm9fbmV3X3BhdGgoY2Fpcm9Db250ZXh0KTsKIH0K
IAotc3RhdGljIHZvaWQgc3Ryb2tlQ3VycmVudENhaXJvUGF0aChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGdjcCwgY2Fpcm9fdCogY2Fpcm9Db250ZXh0
KQorc3RhdGljIHZvaWQgc3Ryb2tlQ3VycmVudENhaXJvUGF0aChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsICBjYWlyb190KiBjYWlyb0NvbnRleHQpCiB7Ci0gICAgZHJhd1BhdGhTaGFkb3coY29u
dGV4dCwgZ2NwLCBTdHJva2UpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIGNhaXJv
Q29udGV4dCwgZ2NwKTsKKyAgICBkcmF3UGF0aFNoYWRvdyhjb250ZXh0LCBTdHJva2UpOworICAg
IHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIGNhaXJvQ29udGV4dCk7CiAgICAgY2Fpcm9fbmV3
X3BhdGgoY2Fpcm9Db250ZXh0KTsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRl
eHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNyKQotICAgIDogbV9jb21tb24oY3JlYXRlR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0KiBjcikKIHsKKyAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOwogICAgIG1fZGF0YS0+Y3IgPSBjYWlyb19yZWZlcmVuY2UoY3Ip
OwogICAgIG1fZGF0YS0+c3luY0NvbnRleHQoY3IpOwogICAgIHNldFBhaW50aW5nRGlzYWJsZWQo
IWNyKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQogewotICAgIGRlc3Ryb3lHcmFwaGljc0Nv
bnRleHRQcml2YXRlKG1fY29tbW9uKTsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCkBAIC01MzEs
NyArNTI4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogCiAg
ICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwogICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChj
ciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsKLSAgICBmaWxsQ3VycmVudENhaXJv
UGF0aCh0aGlzLCBtX2NvbW1vbiwgY3IpOworICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHRoaXMs
IGNyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKQEAgLTU0MSw3ICs1MzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0
aChjb25zdCBQCiAKICAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CiAgICAgc2V0UGF0aE9u
Q2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCkpOwotICAgIHN0
cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9jb21tb24sIGNyKTsKKyAgICBzdHJva2VDdXJy
ZW50Q2Fpcm9QYXRoKHRoaXMsIGNyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTU1Miw3ICs1NDksNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEt
PmNyOwogICAgIGNhaXJvX3NhdmUoY3IpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54
KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIGZpbGxDdXJy
ZW50Q2Fpcm9QYXRoKHRoaXMsIG1fY29tbW9uLCBjcik7CisgICAgZmlsbEN1cnJlbnRDYWlyb1Bh
dGgodGhpcywgY3IpOwogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCkBAIC04MjksMTAgKzgy
NiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coRmxvYXRTaXplIGNvbnN0JiBzaXplLCBm
bG9hdCBibHVyLCBDb2xvciBjb25zdCYgY29sb3IsIENvbG9yU3BhY2UpCiB7CiAgICAgLy8gQ2Fp
cm8gZG9lc24ndCBzdXBwb3J0IHNoYWRvd3MgbmF0aXZlbHksIHRoZXkgYXJlIGRyYXduIG1hbnVh
bGx5IGluIHRoZSBkcmF3KiBmdW5jdGlvbnMKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgaWYgKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMpIHsKICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBp
cyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CiAgICAgICAgIC8vIFdl
IGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUg
WSBheGlzCi0gICAgICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUo
c2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zm
c2V0ID0gRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOwogICAgICAgICBt
X2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXpl
LndpZHRoKCksIC1zaXplLmhlaWdodCgpKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fZGF0YS0+
c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSkpOwpAQCAtODk1LDcgKzg5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEYKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBjYWlyb19y
ZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjciwgd2lkdGgpOwotICAgIHN0cm9rZUN1
cnJlbnRDYWlyb1BhdGgodGhpcywgbV9jb21tb24sIGNyKTsKKyAgICBzdHJva2VDdXJyZW50Q2Fp
cm9QYXRoKHRoaXMsIGNyKTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIApAQCAtOTU0LDEy
ICs5NTEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCiB7Ci0gICAgbV9jb21t
b24tPnN0YXRlLmdsb2JhbEFscGhhID0gYWxwaGE7CisgICAgbV9zdGF0ZS5nbG9iYWxBbHBoYSA9
IGFscGhhOwogfQogCiBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmdldEFscGhhKCkKIHsKLSAgICBy
ZXR1cm4gbV9jb21tb24tPnN0YXRlLmdsb2JhbEFscGhhOworICAgIHJldHVybiBtX3N0YXRlLmds
b2JhbEFscGhhOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDczMzYwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
ICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVDRy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQ
YXRoLmgiCkBAIC0xMDcsMTAgKzEwNiw5IEBAIENHQ29sb3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xv
clNwYWNlUmVmKCkKICNlbmRpZgogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dChDR0NvbnRleHRSZWYgY2dDb250ZXh0KQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3ND
b250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUoY2dDb250ZXh0KSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQo
Q0dDb250ZXh0UmVmIGNnQ29udGV4dCkKIHsKKyAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxlZCgh
Y2dDb250ZXh0KTsKICAgICBpZiAoY2dDb250ZXh0KSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KQEAgLTExOSw5ICsxMTcs
OCBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChDR0NvbnRlCiAgICAgfQogfQog
Ci1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0gICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZh
dGUobV9jb21tb24pOwogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKQEAgLTQ1Miw3ICs0NDksNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuCiB7CiAgICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgUmV0YWluUHRyPENH
UGF0dGVyblJlZj4gcGxhdGZvcm1QYXR0ZXJuKEFkb3B0Q0YsIG1fY29tbW9uLT5zdGF0ZS5zdHJv
a2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsKKyAgICBSZXRhaW5Q
dHI8Q0dQYXR0ZXJuUmVmPiBwbGF0Zm9ybVBhdHRlcm4oQWRvcHRDRiwgbV9zdGF0ZS5zdHJva2VQ
YXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsKICAgICBpZiAoIXBsYXRm
b3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC00NjcsNyArNDY0LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogewogICAgIENHQ29udGV4dFJlZiBj
Z0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIFJldGFpblB0cjxDR1BhdHRlcm5S
ZWY+IHBsYXRmb3JtUGF0dGVybihBZG9wdENGLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4t
PmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkpOworICAgIFJldGFpblB0cjxDR1BhdHRl
cm5SZWY+IHBsYXRmb3JtUGF0dGVybihBZG9wdENGLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVh
dGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC01MTEsNyArNTA4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdQYXRoKGNvbnN0IFBhdAogICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSA9IG1fY29tbW9uLT5zdGF0ZTsKKyAgICBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogCiAgICAgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCB8
fCBzdGF0ZS5zdHJva2VHcmFkaWVudCkgewogICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBv
cHRpbWl6ZWQgd2F5IHRvIGZpbGwgJiBzdHJva2UgYSBwYXRoIHVzaW5nIGdyYWRpZW50cwpAQCAt
NTUyLDE5ICs1NDksMTkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBh
dAogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRo
KGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0
ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKICAgICAg
ICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgaWYgKGZpbGxSdWxlKCkg
PT0gUlVMRV9FVkVOT0REKQogICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAg
ICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVu
dC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgbV9jb21tb24tPnN0YXRlLmZp
bGxHcmFkaWVudC0+cGFpbnQodGhpcyk7CisgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250
ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KHRoaXMpOwogICAgICAgICBDR0NvbnRl
eHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAobV9zdGF0ZS5maWxsUGF0
dGVybikKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogICAgIGZpbGxQYXRoV2l0aEZpbGxS
dWxlKGNvbnRleHQsIGZpbGxSdWxlKCkpOwogfQpAQCAtNTc5LDE3ICs1NzYsMTcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUAogICAgIENHQ29udGV4dEJlZ2luUGF0
aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1Q
YXRoKCkpOwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAg
IGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CiAgICAgICAgIENHQ29udGV4dFNhdmVHU3Rh
dGUoY29udGV4dCk7CiAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRo
KGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAgICBDR0Nv
bnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5n
cmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
R3JhZGllbnQtPnBhaW50KHRoaXMpOworICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4
dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQodGhpcyk7CiAgICAgICAgIENHQ29u
dGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKG1fc3RhdGUuc3Ry
b2tlUGF0dGVybikKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAgICAgQ0dDb250ZXh0
U3Ryb2tlUGF0aChjb250ZXh0KTsKIH0KQEAgLTYwMSwxNiArNTk4LDE2IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxHcmFk
aWVudCkgeworICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgewogICAgICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRl
eHQsIHJlY3QpOwotICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9jb21tb24t
PnN0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAgICAgICAg
bV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQodGhpcyk7CisgICAgICAgIENHQ29u
dGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KHRoaXMp
OwogICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybikKKyAgICBp
ZiAobV9zdGF0ZS5maWxsUGF0dGVybikKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogICAg
IENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOwogfQpAQCAtNzQwLDcgKzczNyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdygKICAgICBDR0Zsb2F0IGJs
dXJSYWRpdXMgPSBibHVyOwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7CiAKLSAgICBpZiAoIW1fY29tbW9uLT5zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cykgeworICAgIGlmICghbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAgICAg
ICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gd2tHZXRVc2VyVG9CYXNlQ1RNKGNv
bnRleHQpOwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jh
c2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTgxNSwxOCAr
ODEyLDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEYKIAogICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9j
b21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQpIHsKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAg
c2V0U3Ryb2tlVGhpY2tuZXNzKGxpbmVXaWR0aCk7CiAgICAgICAgIENHQ29udGV4dEFkZFJlY3Qo
Y29udGV4dCwgcik7CiAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRo
KGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAgICBtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KHRoaXMpOworICAgICAgICBtX3N0YXRl
LnN0cm9rZUdyYWRpZW50LT5wYWludCh0aGlzKTsKICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdT
dGF0ZShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2NvbW1v
bi0+c3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQog
ICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKICAgICBDR0NvbnRleHRTdHJva2VSZWN0V2l0
aFdpZHRoKGNvbnRleHQsIHIsIGxpbmVXaWR0aCk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAko
cmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBo
aWNzQ29udGV4dEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTYgKzYyLDE0IEBAIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWMKIHsKIH0KIAotR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
Ci0gICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgLCBt
X2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjb250ZXh0KSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpCiB7CisgICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZShjb250ZXh0KTsKICAgICBzZXRQYWludGluZ0Rpc2FibGVkKCFjb250ZXh0KTsKIH0KIAotR3Jh
cGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybURlc3Ryb3koKQogewotICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1f
Y29tbW9uKTsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5j
cHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcv
R3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIktV
UkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhaW50ZXJPcGVu
VkcuaCIKQEAgLTQ5LDE2ICs0OCwxNCBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHQoU3VyZmFjZU9wZW5WRyogc3VyZmFjZSkKLSAgICA6IG1f
Y29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShzdXJm
YWNlID8gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdXJmYWNlKSA6IDApCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFN1cmZhY2VPcGVuVkcqIHN1cmZhY2Up
CiB7CisgICAgbV9kYXRhID0gc3VyZmFjZSA/IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUoc3VyZmFjZSkgOiAwOwogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIXN1cmZhY2UpOwog
fQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0gICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFBy
aXZhdGUobV9jb21tb24pOwogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKQEAgLTE0NCw3ICsxNDEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5kcmF3UGF0
aChwYXRoLCBWR19GSUxMX1BBVEgsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9k
YXRhLT5kcmF3UGF0aChwYXRoLCBWR19GSUxMX1BBVEgsIG1fc3RhdGUuZmlsbFJ1bGUpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAt
MTUyLDcgKzE0OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Rh
dGEtPmRyYXdQYXRoKHBhdGgsIFZHX1NUUk9LRV9QQVRILCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1
bGUpOworICAgIG1fZGF0YS0+ZHJhd1BhdGgocGF0aCwgVkdfU1RST0tFX1BBVEgsIG1fc3RhdGUu
ZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQpAQCAtMzgwLDcgKzM3Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IFBhdGgmIHAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OkludGVy
c2VjdENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRhLT5jbGlwUGF0
aChwYXRoLCBQYWludGVyT3BlblZHOjpJbnRlcnNlY3RDbGlwLCBtX3N0YXRlLmZpbGxSdWxlKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCkK
QEAgLTM5Myw3ICszOTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQ
YXRoCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpTdWJ0cmFjdENsaXAsIG1fY29t
bW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVy
T3BlblZHOjpTdWJ0cmFjdENsaXAsIG1fc3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZUZhY3RvcnMpCkBAIC00Mjcs
NyArNDI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UgogCiAg
ICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkUmVjdChyZWN0KTsKLSAgICBtX2RhdGEtPmNsaXBQ
YXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OlN1YnRyYWN0Q2xpcCwgbV9jb21tb24tPnN0YXRlLmZp
bGxSdWxlKTsKKyAgICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OlN1YnRy
YWN0Q2xpcCwgbV9zdGF0ZS5maWxsUnVsZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVy
KiBpbWFnZUJ1ZmZlcikKQEAgLTQ1MCw3ICs0NDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YWRkSW5uZXJSb3VuZGVkUmVjCiAgICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0UmVjdChyZWN0Lngo
KSArIHRoaWNrbmVzcywgcmVjdC55KCkgKyB0aGlja25lc3MsCiAgICAgICAgIHJlY3Qud2lkdGgo
KSAtICh0aGlja25lc3MgKiAyKSwgcmVjdC5oZWlnaHQoKSAtICh0aGlja25lc3MgKiAyKSkpOwog
Ci0gICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpJbnRlcnNlY3RDbGlw
LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAgIG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwg
UGFpbnRlck9wZW5WRzo6SW50ZXJzZWN0Q2xpcCwgbV9zdGF0ZS5maWxsUnVsZSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm1hdGlvbikKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0UXQuY3BwCShyZXZpc2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgogI2luY2x1ZGUgIkZsb2F0
Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTIyNCw3ICsyMjMsNiBAQCBwcml2YXRl
OgogICAgIGJvb2wgcGxhdGZvcm1Db250ZXh0SXNPd25lZDsKIH07CiAKLQogR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUVBhaW50
ZXIqIHAsIGNvbnN0IFFDb2xvciYgaW5pdGlhbFNvbGlkQ29sb3IpCiAgICAgOiBhbnRpQWxpYXNp
bmdGb3JSZWN0c0FuZExpbmVzKGZhbHNlKQogICAgICwgbGF5ZXJDb3VudCgwKQpAQCAtMjUzLDEw
ICsyNTEsMTAgQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpYwogICAg
IGRlbGV0ZSBkZXZpY2U7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwYWludGVyKQotICAgIDogbV9jb21tb24oY3JlYXRlR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUocGFpbnRlciwgZmlsbENvbG9yKCkpKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGFpbnRlcikKIHsKKyAg
ICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKHBhaW50ZXIsIGZp
bGxDb2xvcigpKTsKKwogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIXBhaW50ZXIpOwogCiAgICAg
aWYgKCFwYWludGVyKQpAQCAtMjcxLDEyICsyNjksMTEgQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFw
aGljc0NvbnRleHQoUGxhdGZvcgogICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwogfQogCi1HcmFw
aGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtRGVzdHJveSgpCiB7CiAgICAgd2hpbGUgKCFtX2RhdGEtPmxheWVycy5pc0VtcHR5KCkp
CiAgICAgICAgIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAKLSAgICBkZXN0cm95R3JhcGhpY3ND
b250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIApAQCAtNTEw
LDcgKzUwNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAg
ICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgewogICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFk
b3cgPSBjb250ZXh0U2hhZG93KCk7CiAgICAgICAgIGlmIChzaGFkb3ctPm1fdHlwZSAhPSBDb250
ZXh0U2hhZG93OjpCbHVyU2hhZG93Ci0gICAgICAgICAgICAmJiAhbV9jb21tb24tPnN0YXRlLmZp
bGxQYXR0ZXJuICYmICFtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KQorICAgICAgICAgICAg
JiYgIW1fc3RhdGUuZmlsbFBhdHRlcm4gJiYgIW1fc3RhdGUuZmlsbEdyYWRpZW50KQogICAgICAg
ICB7CiAgICAgICAgICAgICBRUG9pbnRGIG9mZnNldCA9IHNoYWRvdy0+b2Zmc2V0KCk7CiAgICAg
ICAgICAgICBjb25zdCBRVHJhbnNmb3JtJiB0cmFuc2Zvcm0gPSBwLT50cmFuc2Zvcm0oKTsKQEAg
LTUzNywxMiArNTM0LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQ
YXQKICAgICAgICAgfQogCiAgICAgfQotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRl
cm4pIHsKKyAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikgewogICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gYWZmaW5lOwotICAgICAgICBwLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVzaCht
X2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUp
KSk7Ci0gICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7Ci0gICAg
ICAgIFFCcnVzaCBicnVzaCgqbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1H
cmFkaWVudCgpKTsKLSAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fY29tbW9uLT5zdGF0ZS5m
aWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIHAtPmZpbGxQ
YXRoKHBsYXRmb3JtUGF0aCwgUUJydXNoKG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRm
b3JtUGF0dGVybihhZmZpbmUpKSk7CisgICAgfSBlbHNlIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVu
dCkgeworICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fc3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9y
bUdyYWRpZW50KCkpOworICAgICAgICBicnVzaC5zZXRUcmFuc2Zvcm0obV9zdGF0ZS5maWxsR3Jh
ZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgICAgIHAtPmZpbGxQYXRoKHBs
YXRmb3JtUGF0aCwgYnJ1c2gpOwogICAgIH0gZWxzZQogICAgICAgICBwLT5maWxsUGF0aChwbGF0
Zm9ybVBhdGgsIHAtPmJydXNoKCkpOwpAQCAtNTYyLDcgKzU1OSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93
ID0gY29udGV4dFNoYWRvdygpOwogCiAgICAgICAgIGlmIChzaGFkb3ctPm1fdHlwZSAhPSBDb250
ZXh0U2hhZG93OjpCbHVyU2hhZG93Ci0gICAgICAgICAgICAmJiAhbV9jb21tb24tPnN0YXRlLnN0
cm9rZVBhdHRlcm4gJiYgIW1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudCkKKyAgICAgICAg
ICAgICYmICFtX3N0YXRlLnN0cm9rZVBhdHRlcm4gJiYgIW1fc3RhdGUuc3Ryb2tlR3JhZGllbnQp
CiAgICAgICAgIHsKICAgICAgICAgICAgIFFQZW4gc2hhZG93UGVuKHBlbik7CiAgICAgICAgICAg
ICBzaGFkb3dQZW4uc2V0Q29sb3IobV9kYXRhLT5zaGFkb3cubV9jb2xvcik7CkBAIC01OTMsMTQg
KzU5MCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4pIHsK
KyAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9y
bSBhZmZpbmU7Ci0gICAgICAgIHBlbi5zZXRCcnVzaChRQnJ1c2gobV9jb21tb24tPnN0YXRlLnN0
cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKSk7CisgICAgICAgIHBl
bi5zZXRCcnVzaChRQnJ1c2gobV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oYWZmaW5lKSkpOwogICAgICAgICBwLT5zZXRQZW4ocGVuKTsKICAgICAgICAgcC0+c3Ry
b2tlUGF0aChwbGF0Zm9ybVBhdGgsIHBlbik7Ci0gICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+c3Rh
dGUuc3Ryb2tlR3JhZGllbnQpIHsKLSAgICAgICAgUUJydXNoIGJydXNoKCptX2NvbW1vbi0+c3Rh
dGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7Ci0gICAgICAgIGJydXNoLnNl
dFRyYW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgfSBlbHNlIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7Cisg
ICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFk
aWVudCgpKTsKKyAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgICAgIHBlbi5zZXRCcnVzaChicnVz
aCk7CiAgICAgICAgIHAtPnNldFBlbihwZW4pOwogICAgICAgICBwLT5zdHJva2VQYXRoKHBsYXRm
b3JtUGF0aCwgcGVuKTsKQEAgLTY4NCwyMSArNjgxLDIxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBRUmVjdEYgbm9ybWFsaXplZFJlY3QgPSByZWN0Lm5v
cm1hbGl6ZWQoKTsKICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7
CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgaWYgKG1fc3Rh
dGUuZmlsbFBhdHRlcm4pIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKLSAgICAg
ICAgUUJydXNoIGJydXNoKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKGFmZmluZSkpOwotICAgICAgICBRUGl4bWFwKiBpbWFnZSA9IG1fY29tbW9uLT5z
dGF0ZS5maWxsUGF0dGVybi0+dGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgICAgIFFCcnVzaCBicnVzaChtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0
Zm9ybVBhdHRlcm4oYWZmaW5lKSk7CisgICAgICAgIFFQaXhtYXAqIGltYWdlID0gbV9zdGF0ZS5m
aWxsUGF0dGVybi0+dGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAg
ICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gbV9kYXRhLT5oYXNTaGFkb3coKSA/IHNo
YWRvdy0+YmVnaW5TaGFkb3dMYXllcihwLCBub3JtYWxpemVkUmVjdCkgOiAwOwogICAgICAgICBp
ZiAoc2hhZG93UGFpbnRlcikgewotICAgICAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4oc2hhZG93
UGFpbnRlciwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRl
cm4tPnJlcGVhdFgoKSwgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwor
ICAgICAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4oc2hhZG93UGFpbnRlciwgaW1hZ2UsIG5vcm1h
bGl6ZWRSZWN0LCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRYKCksIG1fc3RhdGUuZmlsbFBh
dHRlcm4tPnJlcGVhdFkoKSk7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3Np
dGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VJbik7CiAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgc2hhZG93LT5tX2NvbG9y
KTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIocCk7CiAgICAgICAgIH0KLSAg
ICAgICAgZHJhd1JlcGVhdFBhdHRlcm4ocCwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX2NvbW1v
bi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRZKCkpOwotICAgIH0gZWxzZSBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxHcmFk
aWVudCkgewotICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGll
bnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7Ci0gICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX2Nv
bW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOworICAg
ICAgICBkcmF3UmVwZWF0UGF0dGVybihwLCBpbWFnZSwgbm9ybWFsaXplZFJlY3QsIG1fc3RhdGUu
ZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WSgpKTsK
KyAgICB9IGVsc2UgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgICAgIFFCcnVzaCBi
cnVzaCgqbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAg
IGJydXNoLnNldFRyYW5zZm9ybShtX3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRy
YW5zZm9ybSgpKTsKICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBtX2RhdGEtPmhh
c1NoYWRvdygpID8gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHAsIG5vcm1hbGl6ZWRSZWN0KSA6
IDA7CiAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgYnJ1c2gpOwpAQCAtOTYwLDEwICs5NTcsMTAg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KAogICAgIC8vIFF0IGRv
ZXNuJ3Qgc3VwcG9ydCBzaGFkb3dzIG5hdGl2ZWx5LCB0aGV5IGFyZSBkcmF3biBtYW51YWxseSBp
biB0aGUgZHJhdyoKICAgICAvLyBmdW5jdGlvbnMKIAotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUu
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcykgewogICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250
ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKICAgICAgICAg
Ly8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBv
c2l0ZSBZIGF4aXMKLSAgICAgICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0
U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9zdGF0ZS5zaGFk
b3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7CiAgICAg
ICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXpl
KHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBt
X2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDcz
MzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNr
aWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiR0xFUzJD
YW52YXMuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJOYXRpdmVJbWFnZVNraWEuaCIKQEAgLTIxOSwxNyArMjE4LDE1IEBAIHZvaWQgYWRkQ29ybmVy
QXJjKFNrUGF0aCogcGF0aCwgY29uc3QgU2sKIAogLy8gVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGgg
YSBOVUxMIHBvaW50ZXIgdG8gY3JlYXRlIGEgZ3JhcGhpY3MgY29udGV4dCB0aGF0IGhhcwogLy8g
bm8gcGFpbnRpbmcuCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCogZ2MpCi0gICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQ
cml2YXRlKCkpCi0gICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZShnYykpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiBnYykKIHsKKyAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKGdjKTsKICAgICBzZXRQYWludGluZ0Rpc2FibGVkKCFnYyB8fCAhcGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250
ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQogewogICAgIGRl
bGV0ZSBtX2RhdGE7Ci0gICAgdGhpcy0+ZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9j
b21tb24pOwogfQogCiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdApAQCAtNzQyLDcgKzczOSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVw
YXJlRm9yU29mdHdhcmVEcmF3KCk7CiAKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUgPSBtX2NvbW1vbi0+c3RhdGU7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlID0gbV9zdGF0ZTsKICAgICBwYXRoLnNldEZpbGxUeXBlKHN0YXRlLmZpbGxSdWxlID09
IFJVTEVfRVZFTk9ERCA/CiAgICAgICAgIFNrUGF0aDo6a0V2ZW5PZGRfRmlsbFR5cGUgOiBTa1Bh
dGg6OmtXaW5kaW5nX0ZpbGxUeXBlKTsKIApAQCAtMTA3MSw3ICsxMDY4LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KAogCiAgICAgLy8gVE9ETyh0Yyk6IFRoaXMg
c3RpbGwgZG9lcyBub3QgYWRkcmVzcyB0aGUgaXNzdWUgdGhhdCBzaGFkb3dzCiAgICAgLy8gd2l0
aGluIGNhbnZhcyBlbGVtZW50cyBzaG91bGQgaWdub3JlIHRyYW5zZm9ybXMuCi0gICAgaWYgKG1f
Y29tbW9uLT5zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgIHsKKyAgICBpZiAobV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgIHsKICAgICAgICAgLy8gQ3VycmVudGx5IG9ubHkg
dGhlIEdyYXBoaWNzQ29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlCiAgICAgICAgIC8vIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQgZm9yIEhUTUxDYW52YXNFbGVtZW50IGhhdmUgc2hhZG93cyBpZ25v
cmUKICAgICAgICAgLy8gVHJhbnNmb3Jtcy4gU28gd2l0aCB0aGlzIGZsYWcgc2V0LCB3ZSBrbm93
IHRoaXMgc3RhdGUgaXMgYXNzb2NpYXRlZApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkocmV2aXNpb24gNzMz
NjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDEwICs2MSw5IEBAIHN0YXRpYyBDR0NvbnRleHRS
ZWYgQ0dDb250ZXh0V2l0aEhEQyhIREMKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAotR3JhcGhp
Y3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKLSAgICA6
IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShu
ZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKENHQ29udGV4dFdpdGhIREMoaGRjLCBo
YXNBbHBoYSkpKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBi
b29sIGhhc0FscGhhKQogeworICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUoQ0dDb250ZXh0V2l0aEhEQyhoZGMsIGhhc0FscGhhKSk7CiAgICAgQ0dDb250ZXh0
UmVsZWFzZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpKTsKICAgICBtX2RhdGEtPm1faGRjID0g
aGRjOwogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIW1fZGF0YS0+bV9jZ0NvbnRleHQpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dENhaXJvV2luLmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDEwICs2NCwxMCBAQCBzdGF0aWMgY2Fpcm9fdCogY3JlYXRlQ2Fpcm9Db250ZXh0V2l0
aEhECiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0KEhEQyBkYywgYm9vbCBoYXNBbHBoYSkKLSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBo
aWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgZGMs
IGJvb2wgaGFzQWxwaGEpCiB7CisgICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTsKKwogICAgIGlmIChkYykgewogICAgICAgICBtX2RhdGEtPmNyID0gY3JlYXRl
Q2Fpcm9Db250ZXh0V2l0aEhEQyhkYywgaGFzQWxwaGEpOwogICAgICAgICBtX2RhdGEtPm1faGRj
ID0gZGM7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29u
dGV4dFdpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkdESUV4dHJhcy5oIgogI2luY2x1
ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNs
dWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1QYXRoV2luQ0UuaCIKQEAgLTU4MCwxNSAr
NTc5LDEzIEBAIHByaXZhdGU6CiB9OwogCiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBkYykKLTogbV9jb21tb24oY3JlYXRlR3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSgpKQotLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZShkYykpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBkYykKIHsKKyAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKGRjKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250
ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQogewotICAgIGRl
c3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKICAgICBkZWxldGUgbV9kYXRh
OwogfQogCkBAIC0xMzE2LDggKzEzMTMsOCBAQCBDb2xvciBncmFkaWVudEF2ZXJhZ2VDb2xvcihj
b25zdCBHcmFkaWVuCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewotICAgIENvbG9yIGMgPSBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50Ci0g
ICAgICAgID8gZ3JhZGllbnRBdmVyYWdlQ29sb3IobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVu
dC5nZXQoKSkKKyAgICBDb2xvciBjID0gbV9zdGF0ZS5maWxsR3JhZGllbnQKKyAgICAgICAgPyBn
cmFkaWVudEF2ZXJhZ2VDb2xvcihtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSkKICAgICAgICAg
OiBmaWxsQ29sb3IoKTsKIAogICAgIGlmICghYy5hbHBoYSgpIHx8ICFtX2RhdGEtPm1fb3BhY2l0
eSkKQEAgLTE0ODcsOCArMTQ4NCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG8KIHsKICAgICBzYXZlUGxhdGZvcm1TdGF0ZSgpOwogCi0gICAgaWYgKG1fY29tbW9u
LT5zdGF0ZS5maWxsR3JhZGllbnQpCi0gICAgICAgIGZpbGxSZWN0KHJlY3QsIG1fY29tbW9uLT5z
dGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOworICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkK
KyAgICAgICAgZmlsbFJlY3QocmVjdCwgbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOwogICAg
IGVsc2UKICAgICAgICAgZmlsbFJlY3QocmVjdCwgZmlsbENvbG9yKCksIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29u
dGV4dFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dy
YXBoaWNzQ29udGV4dFd4LmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEy
LDExICsxMTIsMTEgQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpYwog
fQogCiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0KQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZSgpKQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUp
Ci17ICAgIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOwogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNvbnRleHQpOworCiAg
ICAgaWYgKGNvbnRleHQpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0
cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgogICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihm
aWxsQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJHQik7CkBAIC0xMjksOSArMTI5LDggQEAgR3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcgogI2VuZGlmCiB9CiAKLUdyYXBo
aWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1EZXN0cm95KCkKIHsKLSAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2Nv
bW1vbik7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75737</attachid>
            <date>2010-12-06 14:26:58 -0800</date>
            <delta_ts>2010-12-07 04:51:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>mergeCommonAndData_v1.6.patch</filename>
            <type>text/plain</type>
            <size>55061</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI0IEBACisyMDEwLTEyLTA2ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBH
cmFwaGljc0NvbnRleHQ6IE1lcmdlIG1fY29tbW9uIGFuZCBtX2RhdGEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTE0CisKKyAgICAgICAgTW92ZSBk
YXRhIG1lbWJlcnMgZnJvbSBHcmFwaGljc0NvbnRleHRQcml2YXRlIGludG8gR3JhcGhpY3NDb250
ZXh0LiBTbyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybS5oCisgICAgICAgIGFuZCAgbV9jb21tb24g
bWVtYmVyIGJlY2FtZSB1bm5lY2Vzc2FyeS4gVGhleSBhcmUgcmVtb3ZlZC4KKyAgICAgICAgQWRk
IHR3byB2aXJ0dWFsIG1ldGhvZHMgdG8gR3JhcGhpY3NDb250ZXh0OiBwbGF0Zm9ybUluaXQoKSBh
bmQgcGxhdGZvcm1EZXN0cm95KCksIHdoaWNoCisgICAgICAgIG1ha2UgdGhlIGNvbnN0cnVjdG9y
IG9mIEdyYXBoaWNzQ29udGV4dCBjbGVhcmVyLgorICAgICAgICBCZXNpZGVzIGFkZCBhIGdldHRl
ciB0byB0aGUgcHJpdmF0ZSBHcmFwaGljc0NvbnRleHQ6Om1fc3RhdGUgbWVtYmVyLCBiZWNhdXNl
IHNvbWUgaW5saW5lCisgICAgICAgIGZ1bmN0aW9ucyBpbiBjYWlybyBuZWVkIGl0LgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0IGlzIG5lZWRlZCwgYmVjYXVzZSB0aGlzIGlzIGEgcmVmYWN0b3Jpbmcu
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
VGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0
cm9rZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEdyYWRp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlR3JhZGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnVwZGF0aW5nQ29udHJvbFRpbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VXBkYXRpbmdDb250cm9sVGlu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQYWludGluZ0Rpc2Fi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRleHREcmF3aW5nTW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFRleHREcmF3aW5nTW9kZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGxhdGZvcm1GaWxsKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldFBsYXRmb3JtU3Ryb2tlKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdQYXRoU2hh
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxDdXJyZW50Q2Fpcm9QYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OnN0cm9rZUN1cnJlbnRDYWlyb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Z2V0QWxwaGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlT
dHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlG
aWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3Jh
cGhpY3NDb250ZXh0T3BlblZHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6CisKIDIwMTAt
MTItMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgWWV0IHVu
cmV2aWV3ZWQgYW5vdGhlciBMZW9wYXJkIGJ1aWxkIGZpeCBmb3IgcjczMzgwLgpJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczMzYwKQor
KysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTM5MjAsNyArMzkyMCw3IEBACiAJCUE4RjRGQjk2MEMxNjlFODUwMDJBRkVENSAvKiBT
VkdSZW5kZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4RjRGQjk1MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmNw
cCAqLzsgfTsKIAkJQThGNUMwQjgwRjkyODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY1
QzBCNjBGOTI4NUFDMDA5OEUwNkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLzsgfTsKIAkJ
QThGNUMwQjkwRjkyODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjVDMEI3MEY5Mjg1
QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgKi87IH07Ci0JCUE4RkE2RTVE
MEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5o
ICovOyB9OworCQlBOEZBNkU1RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUIwRTRDRkRFRDAw
RDVDRjQ5IC8qIFBhdHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBOEZBNkU1RTBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEZBNkU1QzBFNENG
REVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi87IH07CiAJCUE5QzZFNEUzMEQ3NDVFMDUwMDY0
NDJFOSAvKiBET01NaW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOUM2RTRFMTBENzQ1RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuY3Bw
ICovOyB9OwogCQlBOUM2RTRFNDBENzQ1RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUyMEQ3NDVF
MDUwMDY0NDJFOSAvKiBET01NaW1lVHlwZS5oICovOyB9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CkBAIC03NCwxNCArNzMsMTQgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9vZmZzZXQ7CiB9
OwogCi1HcmFwaGljc0NvbnRleHRQcml2YXRlKiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUdyYXBo
aWNzQ29udGV4dFByaXZhdGUoKQorR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KQogewotICAgIHJl
dHVybiBuZXcgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsKKyAgICBwbGF0Zm9ybUluaXQocGxhdGZv
cm1HcmFwaGljc0NvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGVzdHJveUdy
YXBoaWNzQ29udGV4dFByaXZhdGUoR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZGVsZXRlTWUpCitH
cmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewotICAgIGRlbGV0ZSBkZWxldGVN
ZTsKKyAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNh
dmUoKQpAQCAtODksNyArODgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb21tb24t
PnN0YWNrLmFwcGVuZChtX2NvbW1vbi0+c3RhdGUpOworICAgIG1fc3RhY2suYXBwZW5kKG1fc3Rh
dGUpOwogCiAgICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIH0KQEAgLTk5LDEyMCArOTgsMTI1IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9jb21tb24tPnN0YWNrLmlzRW1wdHko
KSkgewotICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIG1f
c3RhY2sgaXMgZW1wdHkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1vbi0+
c3RhdGUgPSBtX2NvbW1vbi0+c3RhY2subGFzdCgpOwotICAgIG1fY29tbW9uLT5zdGFjay5yZW1v
dmVMYXN0KCk7CisgICAgbV9zdGF0ZSA9IG1fc3RhY2subGFzdCgpOworICAgIG1fc3RhY2sucmVt
b3ZlTGFzdCgpOwogCiAgICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiB7Ci0gICAg
bV9jb21tb24tPnN0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKKyAgICBtX3N0YXRl
LnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNr
bmVzcyh0aGlja25lc3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlU3R5
bGUoY29uc3QgU3Ryb2tlU3R5bGUmIHN0eWxlKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJv
a2VTdHlsZSA9IHN0eWxlOworICAgIG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsKICAgICBz
ZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKHN0eWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
KQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwotICAgIG1fY29t
bW9uLT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLSAgICBtX2NvbW1vbi0+
c3RhdGUuc3Ryb2tlR3JhZGllbnQuY2xlYXIoKTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
UGF0dGVybi5jbGVhcigpOworICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKKyAgICBt
X3N0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fc3RhdGUuc3Ryb2tl
R3JhZGllbnQuY2xlYXIoKTsKKyAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uY2xlYXIoKTsKICAg
ICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQg
Ymx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7Ci0gICAg
bV9jb21tb24tPnN0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKLSAgICBtX2NvbW1vbi0+c3Rh
dGUuc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd0NvbG9yID0g
Y29sb3I7CisgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9zdGF0ZS5z
aGFkb3dCbHVyID0gYmx1cjsKKyAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7CiAgICAg
c2V0UGxhdGZvcm1TaGFkb3cob2Zmc2V0LCBibHVyLCBjb2xvciwgY29sb3JTcGFjZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCiB7Ci0gICAgbV9jb21tb24tPnN0
YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwotICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFk
b3dCbHVyID0gMDsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOwor
ICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7CisgICAgbV9zdGF0ZS5zaGFk
b3dCbHVyID0gMDsKKyAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsKICAgICBjbGVh
clBsYXRmb3JtU2hhZG93KCk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3co
RmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CiB7Ci0g
ICAgb2Zmc2V0ID0gbV9jb21tb24tPnN0YXRlLnNoYWRvd09mZnNldDsKLSAgICBibHVyID0gbV9j
b21tb24tPnN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgY29sb3IgPSBtX2NvbW1vbi0+c3RhdGUuc2hh
ZG93Q29sb3I7CisgICAgb2Zmc2V0ID0gbV9zdGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAgYmx1ciA9
IG1fc3RhdGUuc2hhZG93Qmx1cjsKKyAgICBjb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CiAK
ICAgICByZXR1cm4gY29sb3IuaXNWYWxpZCgpICYmIGNvbG9yLmFscGhhKCkgJiYgKGJsdXIgfHwg
b2Zmc2V0LndpZHRoKCkgfHwgb2Zmc2V0LmhlaWdodCgpKTsKIH0KIAogZmxvYXQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VUaGlja25lc3MoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzOworICAgIHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNrbmVz
czsKIH0KIAogU3Ryb2tlU3R5bGUgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VTdHlsZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VTdHlsZTsKKyAgICByZXR1cm4g
bV9zdGF0ZS5zdHJva2VTdHlsZTsKIH0KIAogQ29sb3IgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VD
b2xvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvcjsK
KyAgICByZXR1cm4gbV9zdGF0ZS5zdHJva2VDb2xvcjsKIH0KIAogQ29sb3JTcGFjZSBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZUNvbG9yU3BhY2UoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1v
bi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJva2VDb2xv
clNwYWNlOwogfQogCiBXaW5kUnVsZSBHcmFwaGljc0NvbnRleHQ6OmZpbGxSdWxlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlOworICAgIHJldHVybiBtX3N0
YXRlLmZpbGxSdWxlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUoV2lu
ZFJ1bGUgZmlsbFJ1bGUpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlID0gZmlsbFJ1
bGU7CisgICAgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKLSAgICBt
X2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotICAgIG1fY29tbW9u
LT5zdGF0ZS5maWxsR3JhZGllbnQuY2xlYXIoKTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbFBh
dHRlcm4uY2xlYXIoKTsKKyAgICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9yOworICAgIG1fc3Rh
dGUuZmlsbENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50
LmNsZWFyKCk7CisgICAgbV9zdGF0ZS5maWxsUGF0dGVybi5jbGVhcigpOwogICAgIHNldFBsYXRm
b3JtRmlsbENvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAogQ29sb3IgR3JhcGhpY3NDb250
ZXh0OjpmaWxsQ29sb3IoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuZmls
bENvbG9yOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxDb2xvcjsKIH0KIAogQ29sb3JTcGFjZSBH
cmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvclNwYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9j
b21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxDb2xv
clNwYWNlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKGJv
b2wgYikKIHsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc2hvdWxkQW50aWFsaWFzID0gYjsKKyAgICBt
X3N0YXRlLnNob3VsZEFudGlhbGlhcyA9IGI7CiAgICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxp
YXMoYik7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMoKSBjb25z
dAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc2hvdWxkQW50aWFsaWFzOworICAgIHJl
dHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhczsKK30KKworR3JhcGhpY3NDb250ZXh0U3RhdGUg
R3JhcGhpY3NDb250ZXh0OjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGU7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFBhc3NSZWZQdHI8UGF0
dGVybj4gcGF0dGVybikKQEAgLTIyMiw5ICsyMjYsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0U3Ryb2tlUGF0dGVybihQCiAgICAgICAgIHNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjaywg
Q29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9jb21t
b24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LmNsZWFyKCk7Ci0gICAgbV9jb21tb24tPnN0YXRlLnN0
cm9rZVBhdHRlcm4gPSBwYXR0ZXJuOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlUGF0dGVybihtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSk7CisgICAgbV9zdGF0ZS5zdHJva2VHcmFk
aWVudC5jbGVhcigpOworICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IHBhdHRlcm47CisgICAg
c2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihQYXNzUmVmUHRyPFBhdHRl
cm4+IHBhdHRlcm4pCkBAIC0yMzQsOSArMjM4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dEZpbGxQYXR0ZXJuKFBhcwogICAgICAgICBzZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1vbi0+
c3RhdGUuZmlsbEdyYWRpZW50LmNsZWFyKCk7Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0
ZXJuID0gcGF0dGVybjsKLSAgICBzZXRQbGF0Zm9ybUZpbGxQYXR0ZXJuKG1fY29tbW9uLT5zdGF0
ZS5maWxsUGF0dGVybi5nZXQoKSk7CisgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQuY2xlYXIoKTsK
KyAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gcGF0dGVybjsKKyAgICBzZXRQbGF0Zm9ybUZpbGxQ
YXR0ZXJuKG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQpCkBA
IC0yNDYsOSArMjUwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50
KAogICAgICAgICBzZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VH
cmFkaWVudCA9IGdyYWRpZW50OwotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLmNs
ZWFyKCk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChtX2NvbW1vbi0+c3RhdGUuc3Ry
b2tlR3JhZGllbnQuZ2V0KCkpOworICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBncmFkaWVu
dDsKKyAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uY2xlYXIoKTsKKyAgICBzZXRQbGF0Zm9ybVN0
cm9rZUdyYWRpZW50KG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCkpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+IGdyYWRp
ZW50KQpAQCAtMjU4LDU1ICsyNjIsNTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxH
cmFkaWVudChQYQogICAgICAgICBzZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1vbi0+c3RhdGUu
ZmlsbEdyYWRpZW50ID0gZ3JhZGllbnQ7Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJu
LmNsZWFyKCk7Ci0gICAgc2V0UGxhdGZvcm1GaWxsR3JhZGllbnQobV9jb21tb24tPnN0YXRlLmZp
bGxHcmFkaWVudC5nZXQoKSk7CisgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBncmFkaWVudDsK
KyAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuLmNsZWFyKCk7CisgICAgc2V0UGxhdGZvcm1GaWxsR3Jh
ZGllbnQobV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOwogfQogCiBHcmFkaWVudCogR3JhcGhp
Y3NDb250ZXh0OjpmaWxsR3JhZGllbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+
c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxHcmFkaWVu
dC5nZXQoKTsKIH0KIAogR3JhZGllbnQqIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlR3JhZGllbnQo
KSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0
KCk7CisgICAgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCk7CiB9CiAKIFBhdHRl
cm4qIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdHRlcm4oKSBjb25zdAogewotICAgIHJldHVybiBt
X2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCk7CisgICAgcmV0dXJuIG1fc3RhdGUuZmls
bFBhdHRlcm4uZ2V0KCk7CiB9CiAKIFBhdHRlcm4qIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0
dGVybigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJu
LmdldCgpOworICAgIHJldHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIGlnbm9y
ZVRyYW5zZm9ybXMpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zID0gaWdub3JlVHJhbnNmb3JtczsKKyAgICBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zID0gaWdub3JlVHJhbnNmb3JtczsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OnVwZGF0
aW5nQ29udHJvbFRpbnRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPm1fdXBkYXRp
bmdDb250cm9sVGludHM7CisgICAgcmV0dXJuIG1fdXBkYXRpbmdDb250cm9sVGludHM7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVcGRhdGluZ0NvbnRyb2xUaW50cyhib29sIGIpCiB7
CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxlZChiKTsKLSAgICBtX2NvbW1vbi0+bV91cGRhdGluZ0Nv
bnRyb2xUaW50cyA9IGI7CisgICAgbV91cGRhdGluZ0NvbnRyb2xUaW50cyA9IGI7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQYWludGluZ0Rpc2FibGVkKGJvb2wgZikKIHsKLSAgICBt
X2NvbW1vbi0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCA9IGY7CisgICAgbV9zdGF0ZS5wYWludGlu
Z0Rpc2FibGVkID0gZjsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OnBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUucGFpbnRpbmdEaXNhYmxl
ZDsKKyAgICByZXR1cm4gbV9zdGF0ZS5wYWludGluZ0Rpc2FibGVkOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEludFBvaW50JiBwLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKQEAgLTUyOCwx
MiArNTMyLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcigKIAog
VGV4dERyYXdpbmdNb2RlRmxhZ3MgR3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJhd2luZ01vZGUoKSBj
b25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUudGV4dERyYXdpbmdNb2RlOworICAg
IHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQogewotICAg
IG1fY29tbW9uLT5zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOworICAgIG1fc3RhdGUudGV4
dERyYXdpbmdNb2RlID0gbW9kZTsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAgICAgc2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUobW9kZSk7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDcz
MzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAj
aW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlRleHREaXJl
Y3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgpAQCAtMTE3LDEyICsxMTksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgRHJhd2luZ0J1ZmZlcjsKICAgICBjbGFzcyBGb250OwogICAgIGNsYXNzIEdlbmVyYXRv
cjsKLSAgICBjbGFzcyBHcmFkaWVudDsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU7Ci0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsKICAgICBjbGFzcyBJ
bWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBLVVJMOwotICAgIGNsYXNzIFBhdHRlcm47CiAgICAgY2xh
c3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgVGV4dFJ1bjsKIApAQCAtMTQ5
LDEwICsxNDgsNjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRlcnBvbGF0aW9u
SGlnaAogICAgIH07CiAKKyAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgeworICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZSgpCisgICAgICAgICAgICA6IHRleHREcmF3aW5nTW9kZShU
ZXh0TW9kZUZpbGwpCisgICAgICAgICAgICAsIHN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKQorICAg
ICAgICAgICAgLCBzdHJva2VUaGlja25lc3MoMCkKKyAgICAgICAgICAgICwgc3Ryb2tlQ29sb3Io
Q29sb3I6OmJsYWNrKQorICAgICAgICAgICAgLCBzdHJva2VDb2xvclNwYWNlKENvbG9yU3BhY2VE
ZXZpY2VSR0IpCisgICAgICAgICAgICAsIGZpbGxSdWxlKFJVTEVfTk9OWkVSTykKKyAgICAgICAg
ICAgICwgZmlsbENvbG9yKENvbG9yOjpibGFjaykKKyAgICAgICAgICAgICwgZmlsbENvbG9yU3Bh
Y2UoQ29sb3JTcGFjZURldmljZVJHQikKKyAgICAgICAgICAgICwgc2hvdWxkQW50aWFsaWFzKHRy
dWUpCisgICAgICAgICAgICAsIHBhaW50aW5nRGlzYWJsZWQoZmFsc2UpCisgICAgICAgICAgICAs
IHNoYWRvd0JsdXIoMCkKKyAgICAgICAgICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFs
c2UpCisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgICAgICAsIGdsb2JhbEFscGhhKDEpCisj
ZW5kaWYKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaW50IHRleHREcmF3aW5nTW9k
ZTsKKyAgICAgICAgCisgICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlOworICAgICAgICBm
bG9hdCBzdHJva2VUaGlja25lc3M7CisgICAgICAgIENvbG9yIHN0cm9rZUNvbG9yOworICAgICAg
ICBDb2xvclNwYWNlIHN0cm9rZUNvbG9yU3BhY2U7CisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4g
c3Ryb2tlR3JhZGllbnQ7CisgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0ZXJuOwor
ICAgICAgICAKKyAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGU7CisgICAgICAgIENvbG9yIGZpbGxD
b2xvcjsKKyAgICAgICAgQ29sb3JTcGFjZSBmaWxsQ29sb3JTcGFjZTsKKyAgICAgICAgUmVmUHRy
PEdyYWRpZW50PiBmaWxsR3JhZGllbnQ7CisgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBmaWxsUGF0
dGVybjsKKworICAgICAgICBib29sIHNob3VsZEFudGlhbGlhczsKKworICAgICAgICBib29sIHBh
aW50aW5nRGlzYWJsZWQ7CisgICAgICAgIAorICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0
OworICAgICAgICBmbG9hdCBzaGFkb3dCbHVyOworICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsK
KworICAgICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworI2lmIFBMQVRGT1JNKENB
SVJPKQorICAgICAgICBmbG9hdCBnbG9iYWxBbHBoYTsKKyNlbmRpZgorICAgIH07CisKICAgICBj
bGFzcyBHcmFwaGljc0NvbnRleHQgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoK
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAg
ICAgIH5HcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0
KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKICNp
ZiAhT1MoV0lOQ0UpIHx8IFBMQVRGT1JNKFFUKQogICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CkBAIC0xODksNiArMjQwLDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sKTsKICAg
ICAgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMoKSBjb25zdDsKIAorICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZSBzdGF0ZSgpIGNvbnN0OworCiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgICAgIHZv
aWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAgICAgICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigp
OwpAQCAtNDM4LDExICs0OTEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0
YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxv
YXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBjb25zdCBTdHJva2VTdHlsZSYpOwogCi0g
ICAgICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBjcmVhdGVHcmFwaGljc0NvbnRl
eHRQcml2YXRlKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQ
cml2YXRlKEdyYXBoaWNzQ29udGV4dFByaXZhdGUqKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGE7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSogbV9jb21tb247Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9k
YXRhOyAvLyBEZXByZWNhdGVkOyBtX2NvbW1tb24gY2FuIGp1c3QgYmUgZG93bmNhc3RlZC4gVG8g
YmUgcmVtb3ZlZC4KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKKyAgICAg
ICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBtX3N0YWNrOworICAgICAgICBib29sIG1f
dXBkYXRpbmdDb250cm9sVGludHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQ
cml2YXRlLmgJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDUzICszNCw1MSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUg
ewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSgpCi0gICAgICAgICAgICA6IHN0cm9rZVRo
aWNrbmVzcygwKQotICAgICAgICAgICAgLCBzaGFkb3dCbHVyKDApCi0jaWYgUExBVEZPUk0oQ0FJ
Uk8pCi0gICAgICAgICAgICAsIGdsb2JhbEFscGhhKDEpCi0jZW5kaWYKLSAgICAgICAgICAgICwg
dGV4dERyYXdpbmdNb2RlKFRleHRNb2RlRmlsbCkKLSAgICAgICAgICAgICwgc3Ryb2tlQ29sb3Io
Q29sb3I6OmJsYWNrKQotICAgICAgICAgICAgLCBmaWxsQ29sb3IoQ29sb3I6OmJsYWNrKQorICAg
ICAgICAgICAgOiB0ZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKQogICAgICAgICAgICAgLCBzdHJv
a2VTdHlsZShTb2xpZFN0cm9rZSkKLSAgICAgICAgICAgICwgZmlsbFJ1bGUoUlVMRV9OT05aRVJP
KQorICAgICAgICAgICAgLCBzdHJva2VUaGlja25lc3MoMCkKKyAgICAgICAgICAgICwgc3Ryb2tl
Q29sb3IoQ29sb3I6OmJsYWNrKQogICAgICAgICAgICAgLCBzdHJva2VDb2xvclNwYWNlKENvbG9y
U3BhY2VEZXZpY2VSR0IpCisgICAgICAgICAgICAsIGZpbGxSdWxlKFJVTEVfTk9OWkVSTykKKyAg
ICAgICAgICAgICwgZmlsbENvbG9yKENvbG9yOjpibGFjaykKICAgICAgICAgICAgICwgZmlsbENv
bG9yU3BhY2UoQ29sb3JTcGFjZURldmljZVJHQikKICAgICAgICAgICAgICwgc2hvdWxkQW50aWFs
aWFzKHRydWUpCiAgICAgICAgICAgICAsIHBhaW50aW5nRGlzYWJsZWQoZmFsc2UpCisgICAgICAg
ICAgICAsIHNoYWRvd0JsdXIoMCkKICAgICAgICAgICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoZmFsc2UpCisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgICAgICAsIGdsb2JhbEFscGhh
KDEpCisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgaW50IHRleHREcmF3
aW5nTW9kZTsKKyAgICAgICAgCisgICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlOworICAg
ICAgICBmbG9hdCBzdHJva2VUaGlja25lc3M7CisgICAgICAgIENvbG9yIHN0cm9rZUNvbG9yOwor
ICAgICAgICBDb2xvclNwYWNlIHN0cm9rZUNvbG9yU3BhY2U7CiAgICAgICAgIFJlZlB0cjxHcmFk
aWVudD4gc3Ryb2tlR3JhZGllbnQ7CiAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0
ZXJuOwogICAgICAgICAKKyAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGU7CisgICAgICAgIENvbG9y
IGZpbGxDb2xvcjsKKyAgICAgICAgQ29sb3JTcGFjZSBmaWxsQ29sb3JTcGFjZTsKICAgICAgICAg
UmVmUHRyPEdyYWRpZW50PiBmaWxsR3JhZGllbnQ7CiAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBm
aWxsUGF0dGVybjsKIAotICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgICAgICBi
b29sIHNob3VsZEFudGlhbGlhczsKIAotICAgICAgICBmbG9hdCBzdHJva2VUaGlja25lc3M7Cisg
ICAgICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZDsKKyAgICAgICAgCisgICAgICAgIEZsb2F0U2l6
ZSBzaGFkb3dPZmZzZXQ7CiAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXI7CisgICAgICAgIENvbG9y
IHNoYWRvd0NvbG9yOwogCisgICAgICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAj
aWYgUExBVEZPUk0oQ0FJUk8pCiAgICAgICAgIGZsb2F0IGdsb2JhbEFscGhhOwogI2VuZGlmCi0g
ICAgICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZTsKLQotICAgICAgICBD
b2xvciBzdHJva2VDb2xvcjsKLSAgICAgICAgQ29sb3IgZmlsbENvbG9yOwotICAgICAgICBDb2xv
ciBzaGFkb3dDb2xvcjsKLQotICAgICAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZTsKLSAgICAg
ICAgV2luZFJ1bGUgZmlsbFJ1bGU7Ci0KLSAgICAgICAgQ29sb3JTcGFjZSBzdHJva2VDb2xvclNw
YWNlOwotICAgICAgICBDb2xvclNwYWNlIGZpbGxDb2xvclNwYWNlOwotCi0gICAgICAgIGJvb2wg
c2hvdWxkQW50aWFsaWFzOwotICAgICAgICBib29sIHBhaW50aW5nRGlzYWJsZWQ7Ci0gICAgICAg
IGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgfTsKIAogICAgIGNsYXNzIEdyYXBo
aWNzQ29udGV4dFByaXZhdGUgOiBwdWJsaWMgTm9uY29weWFibGUgewpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYg
QEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTY4LDQyICs2Nyw0NiBA
QCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBzZXRQbGF0Zm9ybUZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjYWly
b190KiBjciwgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwKQorc3RhdGljIGlubGluZSB2b2lk
IHNldFBsYXRmb3JtRmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNhaXJvX3QqIGNyKQog
ewogICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IDA7CiAgICAgY2Fpcm9fc2F2ZShjcik7
Ci0gICAgaWYgKGdjcC0+c3RhdGUuZmlsbFBhdHRlcm4pIHsKKyAgICAKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZSBzdGF0ZSA9IGNvbnRleHQtPnN0YXRlKCk7CisgICAgaWYgKHN0YXRlLmZpbGxQ
YXR0ZXJuKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgIHBhdHRl
cm4gPSBnY3AtPnN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5l
KTsKKyAgICAgICAgcGF0dGVybiA9IHN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oYWZmaW5lKTsKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7Ci0g
ICAgfSBlbHNlIGlmIChnY3AtPnN0YXRlLmZpbGxHcmFkaWVudCkKLSAgICAgICAgY2Fpcm9fc2V0
X3NvdXJjZShjciwgZ2NwLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7
CisgICAgfSBlbHNlIGlmIChzdGF0ZS5maWxsR3JhZGllbnQpCisgICAgICAgIGNhaXJvX3NldF9z
b3VyY2UoY3IsIHN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKICAgICBl
bHNlCiAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbnRleHQtPmZpbGxDb2xv
cigpKTsKICAgICBjYWlyb19jbGlwX3ByZXNlcnZlKGNyKTsKLSAgICBjYWlyb19wYWludF93aXRo
X2FscGhhKGNyLCBnY3AtPnN0YXRlLmdsb2JhbEFscGhhKTsKKyAgICBjYWlyb19wYWludF93aXRo
X2FscGhhKGNyLCBzdGF0ZS5nbG9iYWxBbHBoYSk7CiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiAg
ICAgaWYgKHBhdHRlcm4pCiAgICAgICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShwYXR0ZXJuKTsK
IH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY2Fpcm9fdCogY3IsIEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGdjcCkKK3N0
YXRpYyBpbmxpbmUgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZShHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNhaXJvX3QqIGNyKQogewogICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IDA7CiAg
ICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgaWYgKGdjcC0+c3RhdGUuc3Ryb2tlUGF0dGVybikgewor
ICAgIAorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRlID0gY29udGV4dC0+c3RhdGUoKTsK
KyAgICBpZiAoc3RhdGUuc3Ryb2tlUGF0dGVybikgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
YWZmaW5lOwotICAgICAgICBwYXR0ZXJuID0gZ2NwLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVh
dGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKTsKKyAgICAgICAgcGF0dGVybiA9IHN0YXRlLnN0cm9r
ZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpOwogICAgICAgICBjYWlyb19z
ZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKLSAgICB9IGVsc2UgaWYgKGdjcC0+c3RhdGUuc3Ryb2tl
R3JhZGllbnQpCi0gICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIGdjcC0+c3RhdGUuc3Ryb2tl
R3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgfSBlbHNlIGlmIChzdGF0ZS5zdHJv
a2VHcmFkaWVudCkKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAgZWxzZSAgewotICAgICAgICBDb2xvciBz
dHJva2VDb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29udGV4dC0+c3Ryb2tlQ29sb3Io
KS5yZ2IoKSwgY29udGV4dC0+c3Ryb2tlQ29sb3IoKS5hbHBoYSgpIC8gMjU1LmYgKiBnY3AtPnN0
YXRlLmdsb2JhbEFscGhhKTsKKyAgICAgICAgQ29sb3Igc3Ryb2tlQ29sb3IgPSBjb2xvcldpdGhP
dmVycmlkZUFscGhhKGNvbnRleHQtPnN0cm9rZUNvbG9yKCkucmdiKCksIGNvbnRleHQtPnN0cm9r
ZUNvbG9yKCkuYWxwaGEoKSAvIDI1NS5mICogc3RhdGUuZ2xvYmFsQWxwaGEpOwogICAgICAgICBz
ZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBzdHJva2VDb2xvcik7CiAgICAgfQotICAgIGlmIChn
Y3AtPnN0YXRlLmdsb2JhbEFscGhhIDwgMS4wZiAmJiAoZ2NwLT5zdGF0ZS5zdHJva2VQYXR0ZXJu
IHx8IGdjcC0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpKSB7CisgICAgaWYgKHN0YXRlLmdsb2JhbEFs
cGhhIDwgMS4wZiAmJiAoc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBzdGF0ZS5zdHJva2VHcmFkaWVu
dCkpIHsKICAgICAgICAgY2Fpcm9fcHVzaF9ncm91cChjcik7Ci0gICAgICAgIGNhaXJvX3BhaW50
X3dpdGhfYWxwaGEoY3IsIGdjcC0+c3RhdGUuZ2xvYmFsQWxwaGEpOworICAgICAgICBjYWlyb19w
YWludF93aXRoX2FscGhhKGNyLCBzdGF0ZS5nbG9iYWxBbHBoYSk7CiAgICAgICAgIGNhaXJvX3Bv
cF9ncm91cF90b19zb3VyY2UoY3IpOwogICAgIH0KICAgICBjYWlyb19zdHJva2VfcHJlc2VydmUo
Y3IpOwpAQCAtMTM1LDcgKzEzOCw3IEBAIGVudW0gUGF0aERyYXdpbmdTdHlsZSB7IAogICAgIEZp
bGxBbmRTdHJva2UgPSBGaWxsICsgU3Ryb2tlCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJh
d1BhdGhTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2
YXRlKiBjb250ZXh0UHJpdmF0ZSwgUGF0aERyYXdpbmdTdHlsZSBkcmF3aW5nU3R5bGUpCitzdGF0
aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBQ
YXRoRHJhd2luZ1N0eWxlIGRyYXdpbmdTdHlsZSkKIHsKICAgICBDb250ZXh0U2hhZG93KiBzaGFk
b3cgPSBjb250ZXh0LT5jb250ZXh0U2hhZG93KCk7CiAgICAgQVNTRVJUKHNoYWRvdyk7CkBAIC0x
NzEsNDEgKzE3NCwzOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhp
CiAgICAgY2Fpcm9fYXBwZW5kX3BhdGgoc2hhZG93Q29udGV4dCwgcGF0aCk7CiAKICAgICBpZiAo
ZHJhd2luZ1N0eWxlICYgRmlsbCkKLSAgICAgICAgc2V0UGxhdGZvcm1GaWxsKGNvbnRleHQsIHNo
YWRvd0NvbnRleHQsIGNvbnRleHRQcml2YXRlKTsKKyAgICAgICAgc2V0UGxhdGZvcm1GaWxsKGNv
bnRleHQsIHNoYWRvd0NvbnRleHQpOwogICAgIGlmIChkcmF3aW5nU3R5bGUgJiBTdHJva2UpCi0g
ICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIHNoYWRvd0NvbnRleHQsIGNvbnRleHRQ
cml2YXRlKTsKKyAgICAgICAgc2V0UGxhdGZvcm1TdHJva2UoY29udGV4dCwgc2hhZG93Q29udGV4
dCk7CiAKICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGNhaXJvQ29udGV4dCk7CiB9CiAKLXN0
YXRpYyB2b2lkIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwLCBjYWlyb190KiBjYWlyb0NvbnRleHQpCitzdGF0
aWMgdm9pZCBmaWxsQ3VycmVudENhaXJvUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNh
aXJvX3QqIGNhaXJvQ29udGV4dCkKIHsKICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNhaXJvQ29u
dGV4dCwgY29udGV4dC0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JV
TEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7Ci0gICAgZHJhd1BhdGhTaGFk
b3coY29udGV4dCwgZ2NwLCBGaWxsKTsKKyAgICBkcmF3UGF0aFNoYWRvdyhjb250ZXh0LCBGaWxs
KTsKIAotICAgIHNldFBsYXRmb3JtRmlsbChjb250ZXh0LCBjYWlyb0NvbnRleHQsIGdjcCk7Cisg
ICAgc2V0UGxhdGZvcm1GaWxsKGNvbnRleHQsIGNhaXJvQ29udGV4dCk7CiAgICAgY2Fpcm9fbmV3
X3BhdGgoY2Fpcm9Db250ZXh0KTsKIH0KIAotc3RhdGljIHZvaWQgc3Ryb2tlQ3VycmVudENhaXJv
UGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGdj
cCwgY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQorc3RhdGljIHZvaWQgc3Ryb2tlQ3VycmVudENhaXJv
UGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsICBjYWlyb190KiBjYWlyb0NvbnRleHQpCiB7
Ci0gICAgZHJhd1BhdGhTaGFkb3coY29udGV4dCwgZ2NwLCBTdHJva2UpOwotICAgIHNldFBsYXRm
b3JtU3Ryb2tlKGNvbnRleHQsIGNhaXJvQ29udGV4dCwgZ2NwKTsKKyAgICBkcmF3UGF0aFNoYWRv
dyhjb250ZXh0LCBTdHJva2UpOworICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIGNhaXJv
Q29udGV4dCk7CiAgICAgY2Fpcm9fbmV3X3BhdGgoY2Fpcm9Db250ZXh0KTsKIH0KIAotR3JhcGhp
Y3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNyKQot
ICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9k
YXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjcikKIHsKKyAgICBt
X2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwogICAgIG1fZGF0YS0+
Y3IgPSBjYWlyb19yZWZlcmVuY2UoY3IpOwogICAgIG1fZGF0YS0+c3luY0NvbnRleHQoY3IpOwog
ICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNyKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3Jh
cGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQog
ewotICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKICAgICBkZWxl
dGUgbV9kYXRhOwogfQogCkBAIC01MzEsNyArNTMyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKGNvbnN0IFBhdAogCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwogICAg
IHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgp
KTsKLSAgICBmaWxsQ3VycmVudENhaXJvUGF0aCh0aGlzLCBtX2NvbW1vbiwgY3IpOworICAgIGZp
bGxDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIGNyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTU0MSw3ICs1NDIsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAKICAgICBjYWlyb190KiBjciA9IG1f
ZGF0YS0+Y3I7CiAgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0
aCgpLT5jb250ZXh0KCkpOwotICAgIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9jb21t
b24sIGNyKTsKKyAgICBzdHJva2VDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIGNyKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTU1
Miw3ICs1NTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAg
ICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwogICAgIGNhaXJvX3NhdmUoY3IpOwogICAgIGNh
aXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOwotICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIG1fY29tbW9uLCBjcik7
CisgICAgZmlsbEN1cnJlbnRDYWlyb1BhdGgodGhpcywgY3IpOwogICAgIGNhaXJvX3Jlc3RvcmUo
Y3IpOwogfQogCkBAIC04MjksMTAgKzgzMCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRk
SW5uZXJSb3VuZGVkUmVjCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3co
RmxvYXRTaXplIGNvbnN0JiBzaXplLCBmbG9hdCBibHVyLCBDb2xvciBjb25zdCYgY29sb3IsIENv
bG9yU3BhY2UpCiB7CiAgICAgLy8gQ2Fpcm8gZG9lc24ndCBzdXBwb3J0IHNoYWRvd3MgbmF0aXZl
bHksIHRoZXkgYXJlIGRyYXduIG1hbnVhbGx5IGluIHRoZSBkcmF3KiBmdW5jdGlvbnMKLSAgICBp
ZiAobV9jb21tb24tPnN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgaWYgKG1f
c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKICAgICAgICAgLy8gTWVhbmluZyB0aGF0
IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJp
bmdDb250ZXh0CiAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRN
TDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCi0gICAgICAgIG1fY29tbW9uLT5zdGF0ZS5z
aGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNp
emUuaGVpZ2h0KCkpOwogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29s
b3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1
ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwpAQCAtODk1LDcgKzg5
Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEYKICAgICBjYWly
b19zYXZlKGNyKTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICBjYWlyb19zZXRfbGluZV93aWR0aChj
ciwgd2lkdGgpOwotICAgIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9jb21tb24sIGNy
KTsKKyAgICBzdHJva2VDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIGNyKTsKICAgICBjYWlyb19yZXN0
b3JlKGNyKTsKIH0KIApAQCAtOTU0LDEyICs5NTUsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldE1pdGVyTGltaXQoZmxvYQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxv
YXQgYWxwaGEpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLmdsb2JhbEFscGhhID0gYWxwaGE7Cisg
ICAgbV9zdGF0ZS5nbG9iYWxBbHBoYSA9IGFscGhhOwogfQogCiBmbG9hdCBHcmFwaGljc0NvbnRl
eHQ6OmdldEFscGhhKCkKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLmdsb2JhbEFscGhh
OworICAgIHJldHVybiBtX3N0YXRlLmdsb2JhbEFscGhhOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYXRoLmgiCkBAIC0xMDcsMTAgKzEwNiw5IEBAIENHQ29s
b3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xvclNwYWNlUmVmKCkKICNlbmRpZgogfQogCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChDR0NvbnRleHRSZWYgY2dDb250ZXh0KQotICAgIDog
bV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKG5l
dyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoY2dDb250ZXh0KSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKIHsKKyAgICBt
X2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7CiAg
ICAgc2V0UGFpbnRpbmdEaXNhYmxlZCghY2dDb250ZXh0KTsKICAgICBpZiAoY2dDb250ZXh0KSB7
CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91
ciBzdGF0ZS4KQEAgLTExOSw5ICsxMTcsOCBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29u
dGV4dChDR0NvbnRlCiAgICAgfQogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRl
eHQoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0gICAgZGVz
dHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogICAgIGRlbGV0ZSBtX2RhdGE7
CiB9CiAKQEAgLTQ1Miw3ICs0NDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJv
a2VQYXR0ZXJuCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dCgpOwogCi0gICAgUmV0YWluUHRyPENHUGF0dGVyblJlZj4gcGxhdGZvcm1QYXR0ZXJuKEFkb3B0
Q0YsIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
Z2V0Q1RNKCkpKTsKKyAgICBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBwbGF0Zm9ybVBhdHRlcm4o
QWRvcHRDRiwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0
Q1RNKCkpKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBA
IC00NjcsNyArNDY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4o
KQogewogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAot
ICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IHBsYXRmb3JtUGF0dGVybihBZG9wdENGLCBtX2Nv
bW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkp
OworICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IHBsYXRmb3JtUGF0dGVybihBZG9wdENGLCBt
X3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsKICAg
ICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC01MTEsNyArNTA4
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdAogICAgICAgICBy
ZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwot
ICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fY29tbW9uLT5zdGF0ZTsK
KyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogCiAgICAg
aWYgKHN0YXRlLmZpbGxHcmFkaWVudCB8fCBzdGF0ZS5zdHJva2VHcmFkaWVudCkgewogICAgICAg
ICAvLyBXZSBkb24ndCBoYXZlIGFueSBvcHRpbWl6ZWQgd2F5IHRvIGZpbGwgJiBzdHJva2UgYSBw
YXRoIHVzaW5nIGdyYWRpZW50cwpAQCAtNTUyLDE5ICs1NDksMTkgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0
KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwog
Ci0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAobV9zdGF0
ZS5maWxsR3JhZGllbnQpIHsKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsK
ICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKQogICAgICAgICAgICAgQ0dD
b250ZXh0RU9DbGlwKGNvbnRleHQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGNvbnRleHQpOwotICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9j
b21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAg
ICAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQodGhpcyk7CisgICAgICAg
IENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGll
bnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50
KHRoaXMpOwogICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybikK
KyAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigp
OwogICAgIGZpbGxQYXRoV2l0aEZpbGxSdWxlKGNvbnRleHQsIGZpbGxSdWxlKCkpOwogfQpAQCAt
NTc5LDE3ICs1NzYsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3Qg
UAogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRo
KGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0
ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CiAg
ICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAgIENHQ29udGV4dFJl
cGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRDbGlw
KGNvbnRleHQpOwotICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9jb21tb24t
PnN0YXRlLnN0cm9rZUdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAg
ICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KHRoaXMpOworICAgICAgICBD
R0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+Z3JhZGll
bnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFp
bnQodGhpcyk7CiAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRl
cm4pCisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlUGF0dGVybikKICAgICAgICAgYXBwbHlTdHJva2VQ
YXR0ZXJuKCk7CiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKIH0KQEAgLTYwMSwx
NiArNTk4LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KIAog
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAo
bV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCkgeworICAgIGlmIChtX3N0YXRlLmZpbGxHcmFk
aWVudCkgewogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBD
R0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHJlY3QpOwotICAgICAgICBDR0NvbnRleHRDb25j
YXRDVE0oY29udGV4dCwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGFp
bnQodGhpcyk7CisgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZp
bGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgbV9zdGF0ZS5m
aWxsR3JhZGllbnQtPnBhaW50KHRoaXMpOwogICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRl
KGNvbnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fY29tbW9uLT5z
dGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKICAgICAgICAg
YXBwbHlGaWxsUGF0dGVybigpOwogICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3Qp
OwogfQpAQCAtNzQwLDcgKzczNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVNoYWRvdygKICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMgPSBibHVyOwogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIW1fY29tbW9uLT5zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgIGlmICghbV9zdGF0ZS5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcykgewogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RN
ID0gd2tHZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVz
ZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJU
b0Jhc2VDVE0uYjsKQEAgLTgxNSwxOCArODEyLDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VSZWN0KGNvbnN0IEYKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50KSB7Cisg
ICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdT
dGF0ZShjb250ZXh0KTsKICAgICAgICAgc2V0U3Ryb2tlVGhpY2tuZXNzKGxpbmVXaWR0aCk7CiAg
ICAgICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4dCwgcik7CiAgICAgICAgIENHQ29udGV4dFJl
cGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRDbGlw
KGNvbnRleHQpOwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50
KHRoaXMpOworICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCh0aGlzKTsKICAg
ICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICBpZiAo
bV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQogICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKICAg
ICBDR0NvbnRleHRTdHJva2VSZWN0V2l0aFdpZHRoKGNvbnRleHQsIHIsIGxpbmVXaWR0aCk7CiB9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhh
aWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dy
YXBoaWNzQ29udGV4dEhhaWt1LmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjIsMTYgKzYyLDE0IEBAIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdy
YXBoaWMKIHsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi0gICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0Nv
bnRleHRQcml2YXRlKCkpCi0gICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZShjb250ZXh0KSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7CisgICAgbV9kYXRhID0gbmV3IEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjb250ZXh0KTsKICAgICBzZXRQYWludGluZ0Rpc2Fi
bGVkKCFjb250ZXh0KTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQogewotICAgIGRlc3Ryb3lH
cmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKICAgICBkZWxldGUgbV9kYXRhOwogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRP
cGVuVkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZn
L0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlBhaW50ZXJPcGVuVkcuaCIKQEAgLTQ5LDE2ICs0OCwxNCBAQCBwdWJsaWM6
CiAgICAgfQogfTsKIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoU3VyZmFjZU9w
ZW5WRyogc3VyZmFjZSkKLSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZh
dGUoKSkKLSAgICAsIG1fZGF0YShzdXJmYWNlID8gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZShzdXJmYWNlKSA6IDApCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0
KFN1cmZhY2VPcGVuVkcqIHN1cmZhY2UpCiB7CisgICAgbV9kYXRhID0gc3VyZmFjZSA/IG5ldyBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3VyZmFjZSkgOiAwOwogICAgIHNldFBhaW50
aW5nRGlzYWJsZWQoIXN1cmZhY2UpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0Nv
bnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0gICAg
ZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogICAgIGRlbGV0ZSBtX2Rh
dGE7CiB9CiAKQEAgLTE0NCw3ICsxNDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgoY29uc3QgUGF0CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9kYXRhLT5kcmF3UGF0aChwYXRoLCBWR19GSUxMX1BBVEgsIG1fY29tbW9uLT5z
dGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRhLT5kcmF3UGF0aChwYXRoLCBWR19GSUxMX1BBVEgs
IG1fc3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMTUyLDcgKzE0OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPmRyYXdQYXRoKHBhdGgsIFZHX1NUUk9LRV9QQVRI
LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAgIG1fZGF0YS0+ZHJhd1BhdGgocGF0aCwg
VkdfU1RST0tFX1BBVEgsIG1fc3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMzgwLDcgKzM3Nyw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHAKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPmNsaXBQYXRoKHBh
dGgsIFBhaW50ZXJPcGVuVkc6OkludGVyc2VjdENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVs
ZSk7CisgICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpJbnRlcnNlY3RD
bGlwLCBtX3N0YXRlLmZpbGxSdWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZh
c0NsaXAoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM5Myw3ICszOTAsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3Bl
blZHOjpTdWJ0cmFjdENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRh
LT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpTdWJ0cmFjdENsaXAsIG1fc3RhdGUuZmls
bFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXpl
JiBzY2FsZUZhY3RvcnMpCkBAIC00MjcsNyArNDI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBPdXQoY29uc3QgSW50UgogCiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkUmVjdChy
ZWN0KTsKLSAgICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OlN1YnRyYWN0
Q2xpcCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAgICBtX2RhdGEtPmNsaXBQYXRoKHBh
dGgsIFBhaW50ZXJPcGVuVkc6OlN1YnRyYWN0Q2xpcCwgbV9zdGF0ZS5maWxsUnVsZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKQEAgLTQ1MCw3ICs0NDcsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiAgICAgcGF0aC5hZGRF
bGxpcHNlKEZsb2F0UmVjdChyZWN0LngoKSArIHRoaWNrbmVzcywgcmVjdC55KCkgKyB0aGlja25l
c3MsCiAgICAgICAgIHJlY3Qud2lkdGgoKSAtICh0aGlja25lc3MgKiAyKSwgcmVjdC5oZWlnaHQo
KSAtICh0aGlja25lc3MgKiAyKSkpOwogCi0gICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWlu
dGVyT3BlblZHOjpJbnRlcnNlY3RDbGlwLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAg
IG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6SW50ZXJzZWN0Q2xpcCwgbV9z
dGF0ZS5maWxsUnVsZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm1hdGlvbikKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShyZXZpc2lvbiA3
MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAiQ29udGV4dFNo
YWRvdy5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZvbnQuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAg
LTIyNCw3ICsyMjMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgcGxhdGZvcm1Db250ZXh0SXNPd25l
ZDsKIH07CiAKLQogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUoUVBhaW50ZXIqIHAsIGNvbnN0IFFDb2xvciYgaW5pdGlhbFNvbGlk
Q29sb3IpCiAgICAgOiBhbnRpQWxpYXNpbmdGb3JSZWN0c0FuZExpbmVzKGZhbHNlKQogICAgICwg
bGF5ZXJDb3VudCgwKQpAQCAtMjUzLDEwICsyNTEsMTAgQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjp+R3JhcGhpYwogICAgIGRlbGV0ZSBkZXZpY2U7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwYWludGVyKQot
ICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9k
YXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUocGFpbnRlciwgZmlsbENvbG9y
KCkpKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogcGFpbnRlcikKIHsKKyAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKHBhaW50ZXIsIGZpbGxDb2xvcigpKTsKKwogICAgIHNldFBhaW50aW5nRGlz
YWJsZWQoIXBhaW50ZXIpOwogCiAgICAgaWYgKCFwYWludGVyKQpAQCAtMjcxLDEyICsyNjksMTEg
QEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcgogICAgIHBhaW50ZXIt
PnNldFBlbihwZW4pOwogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiAgICAgd2hpbGUgKCFt
X2RhdGEtPmxheWVycy5pc0VtcHR5KCkpCiAgICAgICAgIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
CiAKLSAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiAgICAgZGVs
ZXRlIG1fZGF0YTsKIH0KIApAQCAtNTEwLDcgKzUwNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgewogICAg
ICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CiAgICAgICAgIGlm
IChzaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93Ci0gICAgICAgICAg
ICAmJiAhbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuICYmICFtX2NvbW1vbi0+c3RhdGUuZmls
bEdyYWRpZW50KQorICAgICAgICAgICAgJiYgIW1fc3RhdGUuZmlsbFBhdHRlcm4gJiYgIW1fc3Rh
dGUuZmlsbEdyYWRpZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBRUG9pbnRGIG9mZnNldCA9
IHNoYWRvdy0+b2Zmc2V0KCk7CiAgICAgICAgICAgICBjb25zdCBRVHJhbnNmb3JtJiB0cmFuc2Zv
cm0gPSBwLT50cmFuc2Zvcm0oKTsKQEAgLTUzNywxMiArNTM0LDEyIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICAgICAgfQogCiAgICAgfQotICAgIGlmICht
X2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4pIHsKKyAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVy
bikgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAgICBwLT5maWxsUGF0
aChwbGF0Zm9ybVBhdGgsIFFCcnVzaChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0
ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKSk7Ci0gICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+c3Rh
dGUuZmlsbEdyYWRpZW50KSB7Ci0gICAgICAgIFFCcnVzaCBicnVzaCgqbV9jb21tb24tPnN0YXRl
LmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKLSAgICAgICAgYnJ1c2guc2V0VHJh
bnNmb3JtKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0oKSk7CisgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgUUJydXNoKG1fc3RhdGUu
ZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKSk7CisgICAgfSBlbHNl
IGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgeworICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fc3Rh
dGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBicnVzaC5zZXRU
cmFuc2Zvcm0obV9zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7
CiAgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgYnJ1c2gpOwogICAgIH0gZWxzZQog
ICAgICAgICBwLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIHAtPmJydXNoKCkpOwpAQCAtNTYyLDcg
KzU1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICAg
ICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOwogCiAgICAgICAgIGlm
IChzaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93Ci0gICAgICAgICAg
ICAmJiAhbV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4gJiYgIW1fY29tbW9uLT5zdGF0ZS5z
dHJva2VHcmFkaWVudCkKKyAgICAgICAgICAgICYmICFtX3N0YXRlLnN0cm9rZVBhdHRlcm4gJiYg
IW1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIFFQZW4gc2hh
ZG93UGVuKHBlbik7CiAgICAgICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3IobV9kYXRhLT5zaGFk
b3cubV9jb2xvcik7CkBAIC01OTMsMTQgKzU5MCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUGF0aChjb25zdCBQCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9jb21tb24t
PnN0YXRlLnN0cm9rZVBhdHRlcm4pIHsKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7
CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgIHBlbi5zZXRCcnVzaChR
QnJ1c2gobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihhZmZpbmUpKSk7CisgICAgICAgIHBlbi5zZXRCcnVzaChRQnJ1c2gobV9zdGF0ZS5zdHJva2VQ
YXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkpOwogICAgICAgICBwLT5zZXRQ
ZW4ocGVuKTsKICAgICAgICAgcC0+c3Ryb2tlUGF0aChwbGF0Zm9ybVBhdGgsIHBlbik7Ci0gICAg
fSBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKLSAgICAgICAgUUJy
dXNoIGJydXNoKCptX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGll
bnQoKSk7Ci0gICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
R3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgfSBlbHNlIGlmIChtX3N0
YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJ1c2guc2V0VHJhbnNm
b3JtKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAg
ICAgICAgIHBlbi5zZXRCcnVzaChicnVzaCk7CiAgICAgICAgIHAtPnNldFBlbihwZW4pOwogICAg
ICAgICBwLT5zdHJva2VQYXRoKHBsYXRmb3JtUGF0aCwgcGVuKTsKQEAgLTY4NCwyMSArNjgxLDIx
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBRUmVjdEYg
bm9ybWFsaXplZFJlY3QgPSByZWN0Lm5vcm1hbGl6ZWQoKTsKICAgICBDb250ZXh0U2hhZG93KiBz
aGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxQ
YXR0ZXJuKSB7CisgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKICAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGFmZmluZTsKLSAgICAgICAgUUJydXNoIGJydXNoKG1fY29tbW9uLT5zdGF0ZS5m
aWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpOwotICAgICAgICBRUGl4
bWFwKiBpbWFnZSA9IG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+dGlsZUltYWdlKCktPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIFFCcnVzaCBicnVzaChtX3N0YXRl
LmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSk7CisgICAgICAgIFFQ
aXhtYXAqIGltYWdlID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+dGlsZUltYWdlKCktPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0g
bV9kYXRhLT5oYXNTaGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihwLCBub3JtYWxp
emVkUmVjdCkgOiAwOwogICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewotICAgICAgICAgICAg
ZHJhd1JlcGVhdFBhdHRlcm4oc2hhZG93UGFpbnRlciwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBt
X2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9jb21tb24tPnN0YXRlLmZp
bGxQYXR0ZXJuLT5yZXBlYXRZKCkpOworICAgICAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4oc2hh
ZG93UGFpbnRlciwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5y
ZXBlYXRYKCksIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CiAgICAgICAgICAgICBz
aGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9k
ZV9Tb3VyY2VJbik7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxp
emVkUmVjdCwgc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93
TGF5ZXIocCk7CiAgICAgICAgIH0KLSAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4ocCwgaW1hZ2Us
IG5vcm1hbGl6ZWRSZWN0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwg
bV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwotICAgIH0gZWxzZSBpZiAo
bV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCkgewotICAgICAgICBRQnJ1c2ggYnJ1c2goKm1f
Y29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7Ci0gICAgICAg
IGJydXNoLnNldFRyYW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVu
dFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihwLCBpbWFnZSwg
bm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9zdGF0ZS5m
aWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKKyAgICB9IGVsc2UgaWYgKG1fc3RhdGUuZmlsbEdyYWRp
ZW50KSB7CisgICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRm
b3JtR3JhZGllbnQoKSk7CisgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX3N0YXRlLmZpbGxH
cmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKICAgICAgICAgUVBhaW50ZXIqIHNo
YWRvd1BhaW50ZXIgPSBtX2RhdGEtPmhhc1NoYWRvdygpID8gc2hhZG93LT5iZWdpblNoYWRvd0xh
eWVyKHAsIG5vcm1hbGl6ZWRSZWN0KSA6IDA7CiAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7
CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgYnJ1
c2gpOwpAQCAtOTYwLDEwICs5NTcsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtU2hhZG93KAogICAgIC8vIFF0IGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dzIG5hdGl2ZWx5LCB0
aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyoKICAgICAvLyBmdW5jdGlvbnMKIAot
ICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICBp
ZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICAvLyBNZWFuaW5n
IHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQKICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFu
ZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgbV9jb21tb24tPnN0
YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgp
KTsKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgp
LCAtc2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRv
dyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29s
b3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250
ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw2IEBACiAjaW5jbHVkZSAiR0xFUzJDYW52YXMuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKQEAgLTIxOSwxNyAr
MjE4LDE1IEBAIHZvaWQgYWRkQ29ybmVyQXJjKFNrUGF0aCogcGF0aCwgY29uc3QgU2sKIAogLy8g
VGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggYSBOVUxMIHBvaW50ZXIgdG8gY3JlYXRlIGEgZ3JhcGhp
Y3MgY29udGV4dCB0aGF0IGhhcwogLy8gbm8gcGFpbnRpbmcuCi1HcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogZ2MpCi0gICAgOiBtX2NvbW1v
bihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgLCBtX2RhdGEobmV3IEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShnYykpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBnYykKIHsKKyAgICBtX2RhdGEgPSBu
ZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGdjKTsKICAgICBzZXRQYWludGluZ0Rp
c2FibGVkKCFnYyB8fCAhcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpKTsKIH0KIAotR3JhcGhp
Y3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0
Zm9ybURlc3Ryb3koKQogewogICAgIGRlbGV0ZSBtX2RhdGE7Ci0gICAgdGhpcy0+ZGVzdHJveUdy
YXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogfQogCiBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdApAQCAtNzQyLDcg
KzczOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKIAogICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CiAKLSAgICBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX2NvbW1vbi0+c3RhdGU7CisgICAgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBwYXRoLnNldEZp
bGxUeXBlKHN0YXRlLmZpbGxSdWxlID09IFJVTEVfRVZFTk9ERCA/CiAgICAgICAgIFNrUGF0aDo6
a0V2ZW5PZGRfRmlsbFR5cGUgOiBTa1BhdGg6OmtXaW5kaW5nX0ZpbGxUeXBlKTsKIApAQCAtMTA3
MSw3ICsxMDY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KAog
CiAgICAgLy8gVE9ETyh0Yyk6IFRoaXMgc3RpbGwgZG9lcyBub3QgYWRkcmVzcyB0aGUgaXNzdWUg
dGhhdCBzaGFkb3dzCiAgICAgLy8gd2l0aGluIGNhbnZhcyBlbGVtZW50cyBzaG91bGQgaWdub3Jl
IHRyYW5zZm9ybXMuCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcykgIHsKKyAgICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgIHsKICAg
ICAgICAgLy8gQ3VycmVudGx5IG9ubHkgdGhlIEdyYXBoaWNzQ29udGV4dCBhc3NvY2lhdGVkIHdp
dGggdGhlCiAgICAgICAgIC8vIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgZm9yIEhUTUxDYW52YXNF
bGVtZW50IGhhdmUgc2hhZG93cyBpZ25vcmUKICAgICAgICAgLy8gVHJhbnNmb3Jtcy4gU28gd2l0
aCB0aGlzIGZsYWcgc2V0LCB3ZSBrbm93IHRoaXMgc3RhdGUgaXMgYXNzb2NpYXRlZApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dENHV2luLmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDEwICs2
MSw5IEBAIHN0YXRpYyBDR0NvbnRleHRSZWYgQ0dDb250ZXh0V2l0aEhEQyhIREMKICAgICByZXR1
cm4gY29udGV4dDsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhk
YywgYm9vbCBoYXNBbHBoYSkKLSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFBy
aXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNBbHBoYSkpKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQogeworICAgIG1fZGF0YSA9IG5l
dyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0V2l0aEhEQyhoZGMsIGhh
c0FscGhhKSk7CiAgICAgQ0dDb250ZXh0UmVsZWFzZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgp
KTsKICAgICBtX2RhdGEtPm1faGRjID0gaGRjOwogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIW1f
ZGF0YS0+bV9jZ0NvbnRleHQpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAkocmV2aXNpb24gNzMz
NjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWly
b1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDEwICs2NCwxMCBAQCBzdGF0aWMgY2Fpcm9f
dCogY3JlYXRlQ2Fpcm9Db250ZXh0V2l0aEhECiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLUdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBkYywgYm9vbCBoYXNBbHBoYSkKLSAg
ICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0
YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtSW5pdChIREMgZGMsIGJvb2wgaGFzQWxwaGEpCiB7CisgICAgbV9kYXRhID0g
bmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKKwogICAgIGlmIChkYykgewogICAg
ICAgICBtX2RhdGEtPmNyID0gY3JlYXRlQ2Fpcm9Db250ZXh0V2l0aEhEQyhkYywgaGFzQWxwaGEp
OwogICAgICAgICBtX2RhdGEtPm1faGRjID0gZGM7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAkocmV2
aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNz
Q29udGV4dFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1
ZGUgIkdESUV4dHJhcy5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3Jh
ZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Q
YXRoV2luQ0UuaCIKQEAgLTU4MCwxNSArNTc5LDEzIEBAIHByaXZhdGU6CiB9OwogCiAKLUdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBkYykK
LTogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotLCBtX2RhdGEobmV3
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShkYykpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBkYykKIHsKKyAgICBtX2Rh
dGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGRjKTsKIH0KIAotR3JhcGhp
Y3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0
Zm9ybURlc3Ryb3koKQogewotICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29t
bW9uKTsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCkBAIC0xMzE2LDggKzEzMTMsOCBAQCBDb2xv
ciBncmFkaWVudEF2ZXJhZ2VDb2xvcihjb25zdCBHcmFkaWVuCiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENvbG9yIGMgPSBtX2NvbW1v
bi0+c3RhdGUuZmlsbEdyYWRpZW50Ci0gICAgICAgID8gZ3JhZGllbnRBdmVyYWdlQ29sb3IobV9j
b21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSkKKyAgICBDb2xvciBjID0gbV9zdGF0ZS5m
aWxsR3JhZGllbnQKKyAgICAgICAgPyBncmFkaWVudEF2ZXJhZ2VDb2xvcihtX3N0YXRlLmZpbGxH
cmFkaWVudC5nZXQoKSkKICAgICAgICAgOiBmaWxsQ29sb3IoKTsKIAogICAgIGlmICghYy5hbHBo
YSgpIHx8ICFtX2RhdGEtPm1fb3BhY2l0eSkKQEAgLTE0ODcsOCArMTQ4NCw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KIHsKICAgICBzYXZlUGxhdGZvcm1TdGF0
ZSgpOwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQpCi0gICAgICAgIGZp
bGxSZWN0KHJlY3QsIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOworICAgIGlm
IChtX3N0YXRlLmZpbGxHcmFkaWVudCkKKyAgICAgICAgZmlsbFJlY3QocmVjdCwgbV9zdGF0ZS5m
aWxsR3JhZGllbnQuZ2V0KCkpOwogICAgIGVsc2UKICAgICAgICAgZmlsbFJlY3QocmVjdCwgZmls
bENvbG9yKCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkocmV2aXNpb24gNzMz
NjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDExICsxMTIsMTEgQEAgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjp+R3JhcGhpYwogfQogCiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotICAgIDogbV9jb21tb24o
Y3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCi17ICAgIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX2Rh
dGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwogICAgIHNldFBhaW50aW5n
RGlzYWJsZWQoIWNvbnRleHQpOworCiAgICAgaWYgKGNvbnRleHQpIHsKICAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgogICAgICAg
ICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJHQik7
CkBAIC0xMjksOSArMTI5LDggQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxh
dGZvcgogI2VuZGlmCiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAgICBkZXN0cm95R3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAo=
</data>
<flag name="review"
          id="66562"
          type_id="1"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75799</attachid>
            <date>2010-12-07 04:51:27 -0800</date>
            <delta_ts>2010-12-07 05:59:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>mergeCommonAndData_v1.7.patch</filename>
            <type>text/plain</type>
            <size>56954</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIzIEBACisyMDEwLTEyLTA3ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBH
cmFwaGljc0NvbnRleHQ6IE1lcmdlIG1fY29tbW9uIGFuZCBtX2RhdGEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTE0CisKKyAgICAgICAgTW92ZSBk
YXRhIG1lbWJlcnMgZnJvbSBHcmFwaGljc0NvbnRleHRQcml2YXRlIGludG8gR3JhcGhpY3NDb250
ZXh0LiBTbyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybS5oCisgICAgICAgIGFuZCAgbV9jb21tb24g
bWVtYmVyIGJlY2FtZSB1bm5lY2Vzc2FyeS4gVGhleSBhcmUgcmVtb3ZlZC4KKyAgICAgICAgQWRk
IHR3byB2aXJ0dWFsIG1ldGhvZHMgdG8gR3JhcGhpY3NDb250ZXh0OiBwbGF0Zm9ybUluaXQoKSBh
bmQgcGxhdGZvcm1EZXN0cm95KCksIHdoaWNoCisgICAgICAgIG1ha2UgdGhlIGNvbnN0cnVjdG9y
IG9mIEdyYXBoaWNzQ29udGV4dCBjbGVhcmVyLgorICAgICAgICBCZXNpZGVzIGFkZCBhIGdldHRl
ciB0byB0aGUgcHJpdmF0ZSBHcmFwaGljc0NvbnRleHQ6Om1fc3RhdGUgbWVtYmVyLCBiZWNhdXNl
IHNvbWUgaW5saW5lCisgICAgICAgIGZ1bmN0aW9ucyBpbiBjYWlybyBuZWVkIGl0LgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0IGlzIG5lZWRlZCwgYmVjYXVzZSB0aGlzIGlzIGEgcmVmYWN0b3Jpbmcu
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
VGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0
cm9rZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEdyYWRp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlR3JhZGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnVwZGF0aW5nQ29udHJvbFRpbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VXBkYXRpbmdDb250cm9sVGlu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQYWludGluZ0Rpc2Fi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRleHREcmF3aW5nTW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFRleHREcmF3aW5nTW9kZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQbGF0Zm9ybUZpbGwpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0UGxhdGZvcm1TdHJva2UpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1BhdGhT
aGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEN1cnJlbnRDYWlyb1BhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6c3Ryb2tlQ3VycmVudENhaXJvUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpnZXRBbHBoYSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBs
eVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBs
eUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Bh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9H
cmFwaGljc0NvbnRleHRPcGVuVkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KToKKwogMjAx
MC0xMi0wNyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM5MjAsNyArMzky
MCw3IEBACiAJCUE4RjRGQjk2MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjRGQjk1
MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmNwcCAqLzsgfTsKIAkJQThGNUMw
QjgwRjkyODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY1QzBCNjBGOTI4NUFDMDA5OEUw
NkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLzsgfTsKIAkJQThGNUMwQjkwRjkyODVBQzAw
OThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjVDMEI3MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5k
ZXJTVkdNb2RlbE9iamVjdC5jcHAgKi87IH07Ci0JCUE4RkE2RTVEMEU0Q0ZERUQwMEQ1Q0Y0OSAv
KiBQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovOyB9OworCQlBOEZBNkU1
RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBOEZB
NkU1RTBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0
dGVybi5jcHAgKi87IH07CiAJCUE5QzZFNEUzMEQ3NDVFMDUwMDY0NDJFOSAvKiBET01NaW1lVHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2
RTRFMTBENzQ1RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuY3BwICovOyB9OwogCQlBOUM2RTRF
NDBENzQ1RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUyMEQ3NDVFMDUwMDY0NDJFOSAvKiBET01N
aW1lVHlwZS5oICovOyB9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYg
QEAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVk
ZSAiR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC03NCwxNCAr
NzMsMTQgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9vZmZzZXQ7CiB9OwogCi1HcmFwaGljc0NvbnRl
eHRQcml2YXRlKiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUo
KQorR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KQogewotICAgIHJldHVybiBuZXcgR3JhcGhpY3ND
b250ZXh0UHJpdmF0ZTsKKyAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZh
dGUoR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZGVsZXRlTWUpCitHcmFwaGljc0NvbnRleHQ6On5H
cmFwaGljc0NvbnRleHQoKQogewotICAgIGRlbGV0ZSBkZWxldGVNZTsKKyAgICBwbGF0Zm9ybURl
c3Ryb3koKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQpAQCAtODksNyArODgs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb21tb24tPnN0YWNrLmFwcGVuZChtX2Nv
bW1vbi0+c3RhdGUpOworICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUpOwogCiAgICAgc2F2ZVBs
YXRmb3JtU3RhdGUoKTsKIH0KQEAgLTk5LDEyMCArOTgsMTI1IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpyZXN0b3JlKCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV9jb21tb24tPnN0YWNrLmlzRW1wdHkoKSkgeworICAgIGlmIChtX3N0
YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBtX2NvbW1vbi0+c3RhdGUgPSBtX2NvbW1vbi0+c3RhY2subGFzdCgpOwotICAgIG1f
Y29tbW9uLT5zdGFjay5yZW1vdmVMYXN0KCk7CisgICAgbV9zdGF0ZSA9IG1fc3RhY2subGFzdCgp
OworICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOwogCiAgICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUo
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0
aGlja25lc3MpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNr
bmVzczsKKyAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKICAgICBzZXRQ
bGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0U3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmIHN0eWxlKQogewotICAgIG1f
Y29tbW9uLT5zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOworICAgIG1fc3RhdGUuc3Ryb2tlU3R5
bGUgPSBzdHlsZTsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKHN0eWxlKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvciA9
IGNvbG9yOwotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gY29sb3JTcGFj
ZTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQuY2xlYXIoKTsKLSAgICBtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5jbGVhcigpOworICAgIG1fc3RhdGUuc3Ryb2tlQ29s
b3IgPSBjb2xvcjsKKyAgICBtX3N0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwor
ICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuY2xlYXIoKTsKKyAgICBtX3N0YXRlLnN0cm9rZVBh
dHRlcm4uY2xlYXIoKTsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbG9yLCBjb2xvclNw
YWNlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNp
emUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsK
LSAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAgbV9jb21tb24tPnN0
YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7CisgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZz
ZXQ7CisgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKKyAgICBtX3N0YXRlLnNoYWRvd0Nv
bG9yID0gY29sb3I7CiAgICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zmc2V0LCBibHVyLCBjb2xvciwg
Y29sb3JTcGFjZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCiB7
Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwotICAgIG1f
Y29tbW9uLT5zdGF0ZS5zaGFkb3dCbHVyID0gMDsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93
Q29sb3IgPSBDb2xvcigpOworICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7
CisgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsKKyAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0g
Q29sb3IoKTsKICAgICBjbGVhclBsYXRmb3JtU2hhZG93KCk7CiB9CiAKIGJvb2wgR3JhcGhpY3ND
b250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0JiBibHVyLCBDb2xvciYg
Y29sb3IpIGNvbnN0CiB7Ci0gICAgb2Zmc2V0ID0gbV9jb21tb24tPnN0YXRlLnNoYWRvd09mZnNl
dDsKLSAgICBibHVyID0gbV9jb21tb24tPnN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgY29sb3IgPSBt
X2NvbW1vbi0+c3RhdGUuc2hhZG93Q29sb3I7CisgICAgb2Zmc2V0ID0gbV9zdGF0ZS5zaGFkb3dP
ZmZzZXQ7CisgICAgYmx1ciA9IG1fc3RhdGUuc2hhZG93Qmx1cjsKKyAgICBjb2xvciA9IG1fc3Rh
dGUuc2hhZG93Q29sb3I7CiAKICAgICByZXR1cm4gY29sb3IuaXNWYWxpZCgpICYmIGNvbG9yLmFs
cGhhKCkgJiYgKGJsdXIgfHwgb2Zmc2V0LndpZHRoKCkgfHwgb2Zmc2V0LmhlaWdodCgpKTsKIH0K
IAogZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VUaGlja25lc3MoKSBjb25zdAogewotICAg
IHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlVGhpY2tuZXNzOworICAgIHJldHVybiBtX3N0
YXRlLnN0cm9rZVRoaWNrbmVzczsKIH0KIAogU3Ryb2tlU3R5bGUgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VTdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VT
dHlsZTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJva2VTdHlsZTsKIH0KIAogQ29sb3IgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VDb2xvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5z
dGF0ZS5zdHJva2VDb2xvcjsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJva2VDb2xvcjsKIH0KIAog
Q29sb3JTcGFjZSBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNvbG9yU3BhY2UoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZTsKKyAgICByZXR1cm4g
bV9zdGF0ZS5zdHJva2VDb2xvclNwYWNlOwogfQogCiBXaW5kUnVsZSBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSdWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLmZpbGxSdWxl
OworICAgIHJldHVybiBtX3N0YXRlLmZpbGxSdWxlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRl
LmZpbGxSdWxlID0gZmlsbFJ1bGU7CisgICAgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29s
b3IgPSBjb2xvcjsKLSAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2UgPSBjb2xvclNw
YWNlOwotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuY2xlYXIoKTsKLSAgICBtX2Nv
bW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uY2xlYXIoKTsKKyAgICBtX3N0YXRlLmZpbGxDb2xvciA9
IGNvbG9yOworICAgIG1fc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1f
c3RhdGUuZmlsbEdyYWRpZW50LmNsZWFyKCk7CisgICAgbV9zdGF0ZS5maWxsUGF0dGVybi5jbGVh
cigpOwogICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAog
Q29sb3IgR3JhcGhpY3NDb250ZXh0OjpmaWxsQ29sb3IoKSBjb25zdAogewotICAgIHJldHVybiBt
X2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxDb2xvcjsK
IH0KIAogQ29sb3JTcGFjZSBHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvclNwYWNlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlOworICAgIHJldHVy
biBtX3N0YXRlLmZpbGxDb2xvclNwYWNlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U2hvdWxkQW50aWFsaWFzKGJvb2wgYikKIHsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc2hvdWxkQW50
aWFsaWFzID0gYjsKKyAgICBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9IGI7CiAgICAgc2V0UGxh
dGZvcm1TaG91bGRBbnRpYWxpYXMoYik7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpzaG91
bGRBbnRpYWxpYXMoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc2hvdWxk
QW50aWFsaWFzOworICAgIHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhczsKK30KKworY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dDo6c3RhdGUoKQoreworICAg
IHJldHVybiBtX3N0YXRlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0
dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4pCkBAIC0yMjIsOSArMjI2LDkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUAogICAgICAgICBzZXRTdHJva2VD
b2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC5jbGVhcigpOwotICAg
IG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuID0gcGF0dGVybjsKLSAgICBzZXRQbGF0Zm9y
bVN0cm9rZVBhdHRlcm4obV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworICAg
IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuY2xlYXIoKTsKKyAgICBtX3N0YXRlLnN0cm9rZVBhdHRl
cm4gPSBwYXR0ZXJuOworICAgIHNldFBsYXRmb3JtU3Ryb2tlUGF0dGVybihtX3N0YXRlLnN0cm9r
ZVBhdHRlcm4uZ2V0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRl
cm4oUGFzc1JlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuKQpAQCAtMjM0LDkgKzIzOCw5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihQYXMKICAgICAgICAgc2V0RmlsbENvbG9y
KENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5jbGVhcigpOwotICAgIG1fY29t
bW9uLT5zdGF0ZS5maWxsUGF0dGVybiA9IHBhdHRlcm47Ci0gICAgc2V0UGxhdGZvcm1GaWxsUGF0
dGVybihtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOworICAgIG1fc3RhdGUuZmls
bEdyYWRpZW50LmNsZWFyKCk7CisgICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IHBhdHRlcm47Cisg
ICAgc2V0UGxhdGZvcm1GaWxsUGF0dGVybihtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KFBhc3NSZWZQdHI8R3Jh
ZGllbnQ+IGdyYWRpZW50KQpAQCAtMjQ2LDkgKzI1MCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRTdHJva2VHcmFkaWVudCgKICAgICAgICAgc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNr
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBncmFkaWVudDsKLSAgICBtX2NvbW1vbi0+c3Rh
dGUuc3Ryb2tlUGF0dGVybi5jbGVhcigpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQo
bV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsKKyAgICBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50ID0gZ3JhZGllbnQ7CisgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmNsZWFyKCk7
CisgICAgc2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChtX3N0YXRlLnN0cm9rZUdyYWRpZW50Lmdl
dCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChQYXNzUmVm
UHRyPEdyYWRpZW50PiBncmFkaWVudCkKQEAgLTI1OCw1NSArMjYyLDU1IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQoUGEKICAgICAgICAgc2V0RmlsbENvbG9yKENvbG9y
OjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCA9IGdyYWRpZW50OwotICAgIG1fY29tbW9u
LT5zdGF0ZS5maWxsUGF0dGVybi5jbGVhcigpOwotICAgIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50
KG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOworICAgIG1fc3RhdGUuZmlsbEdy
YWRpZW50ID0gZ3JhZGllbnQ7CisgICAgbV9zdGF0ZS5maWxsUGF0dGVybi5jbGVhcigpOworICAg
IHNldFBsYXRmb3JtRmlsbEdyYWRpZW50KG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKIH0K
IAogR3JhZGllbnQqIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEdyYWRpZW50KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKTsKKyAgICByZXR1cm4g
bV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCk7CiB9CiAKIEdyYWRpZW50KiBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZUdyYWRpZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRl
LnN0cm9rZUdyYWRpZW50LmdldCgpOworICAgIHJldHVybiBtX3N0YXRlLnN0cm9rZUdyYWRpZW50
LmdldCgpOwogfQogCiBQYXR0ZXJuKiBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLmdldCgpOworICAg
IHJldHVybiBtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpOwogfQogCiBQYXR0ZXJuKiBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4oKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+
c3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0
ZXJuLmdldCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoYm9vbCBpZ25vcmVUcmFuc2Zvcm1zKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGlnbm9yZVRyYW5zZm9ybXM7CisgICAgbV9zdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGlnbm9yZVRyYW5zZm9ybXM7CiB9CiAKIGJvb2wgR3Jh
cGhpY3NDb250ZXh0Ojp1cGRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fY29tbW9uLT5tX3VwZGF0aW5nQ29udHJvbFRpbnRzOworICAgIHJldHVybiBtX3VwZGF0aW5n
Q29udHJvbFRpbnRzOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXBkYXRpbmdDb250
cm9sVGludHMoYm9vbCBiKQogewogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoYik7Ci0gICAgbV9j
b21tb24tPm1fdXBkYXRpbmdDb250cm9sVGludHMgPSBiOworICAgIG1fdXBkYXRpbmdDb250cm9s
VGludHMgPSBiOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGFpbnRpbmdEaXNhYmxl
ZChib29sIGYpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQgPSBmOwor
ICAgIG1fc3RhdGUucGFpbnRpbmdEaXNhYmxlZCA9IGY7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250
ZXh0OjpwYWludGluZ0Rpc2FibGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0
YXRlLnBhaW50aW5nRGlzYWJsZWQ7CisgICAgcmV0dXJuIG1fc3RhdGUucGFpbnRpbmdEaXNhYmxl
ZDsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgcCwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3ApCkBAIC01MjgsMTIgKzUzMiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cFRvSW1hZ2VCdWZmZXIoCiAKIFRleHREcmF3aW5nTW9kZUZsYWdzIEdyYXBoaWNzQ29udGV4dDo6
dGV4dERyYXdpbmdNb2RlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnRl
eHREcmF3aW5nTW9kZTsKKyAgICByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgbW9kZSkKIHsKLSAgICBtX2NvbW1vbi0+c3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9k
ZTsKKyAgICBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdN
b2RlKG1vZGUpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCShyZXZpc2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDExIEBACiAjaW5jbHVk
ZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIK
ICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTExNywxMiArMTE5LDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERyYXdpbmdCdWZmZXI7CiAgICAgY2xhc3MgRm9udDsK
ICAgICBjbGFzcyBHZW5lcmF0b3I7Ci0gICAgY2xhc3MgR3JhZGllbnQ7CiAgICAgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBy
aXZhdGU7CiAgICAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAgICAgY2xhc3MgS1VSTDsKLSAgICBjbGFz
cyBQYXR0ZXJuOwogICAgIGNsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNz
IFRleHRSdW47CiAKQEAgLTE0OSwxMSArMTQ4LDY1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgSW50ZXJwb2xhdGlvbkhpZ2gKICAgICB9OwogCisgICAgc3RydWN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoKQorICAgICAgICAgICAg
OiBzdHJva2VUaGlja25lc3MoMCkKKyAgICAgICAgICAgICwgc2hhZG93Qmx1cigwKQorI2lmIFBM
QVRGT1JNKENBSVJPKQorICAgICAgICAgICAgLCBnbG9iYWxBbHBoYSgxKQorI2VuZGlmCisgICAg
ICAgICAgICAsIHRleHREcmF3aW5nTW9kZShUZXh0TW9kZUZpbGwpCisgICAgICAgICAgICAsIHN0
cm9rZUNvbG9yKENvbG9yOjpibGFjaykKKyAgICAgICAgICAgICwgZmlsbENvbG9yKENvbG9yOjpi
bGFjaykKKyAgICAgICAgICAgICwgc3Ryb2tlU3R5bGUoU29saWRTdHJva2UpCisgICAgICAgICAg
ICAsIGZpbGxSdWxlKFJVTEVfTk9OWkVSTykKKyAgICAgICAgICAgICwgc3Ryb2tlQ29sb3JTcGFj
ZShDb2xvclNwYWNlRGV2aWNlUkdCKQorICAgICAgICAgICAgLCBmaWxsQ29sb3JTcGFjZShDb2xv
clNwYWNlRGV2aWNlUkdCKQorICAgICAgICAgICAgLCBzaG91bGRBbnRpYWxpYXModHJ1ZSkKKyAg
ICAgICAgICAgICwgcGFpbnRpbmdEaXNhYmxlZChmYWxzZSkKKyAgICAgICAgICAgICwgc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQ7CisgICAgICAgIFJlZlB0cjxQYXR0ZXJu
PiBzdHJva2VQYXR0ZXJuOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBmaWxs
R3JhZGllbnQ7CisgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBmaWxsUGF0dGVybjsKKworICAgICAg
ICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworCisgICAgICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVz
czsKKyAgICAgICAgZmxvYXQgc2hhZG93Qmx1cjsKKworI2lmIFBMQVRGT1JNKENBSVJPKQorICAg
ICAgICBmbG9hdCBnbG9iYWxBbHBoYTsKKyNlbmRpZgorICAgICAgICBUZXh0RHJhd2luZ01vZGVG
bGFncyB0ZXh0RHJhd2luZ01vZGU7CisKKyAgICAgICAgQ29sb3Igc3Ryb2tlQ29sb3I7CisgICAg
ICAgIENvbG9yIGZpbGxDb2xvcjsKKyAgICAgICAgQ29sb3Igc2hhZG93Q29sb3I7CisKKyAgICAg
ICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGU7CisgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlOwor
CisgICAgICAgIENvbG9yU3BhY2Ugc3Ryb2tlQ29sb3JTcGFjZTsKKyAgICAgICAgQ29sb3JTcGFj
ZSBmaWxsQ29sb3JTcGFjZTsKKworICAgICAgICBib29sIHNob3VsZEFudGlhbGlhczsKKyAgICAg
ICAgYm9vbCBwYWludGluZ0Rpc2FibGVkOworICAgICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOworICAgIH07CisKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQgOiBwdWJsaWMgTm9u
Y29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0Kik7CiAgICAgICAgIH5HcmFwaGljc0NvbnRleHQoKTsKIAorICAgICAg
ICB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOworICAgICAgICB2
b2lkIHBsYXRmb3JtRGVzdHJveSgpOworCiAjaWYgIU9TKFdJTkNFKSB8fCBQTEFURk9STShRVCkK
ICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
OwogI2VuZGlmCkBAIC0xODksNiArMjQyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sKTsKICAgICAgICAgYm9vbCBzaG91bGRBbnRp
YWxpYXMoKSBjb25zdDsKIAorICAgICAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUoKTsKKwogI2lmIFBMQVRGT1JNKENHKQogICAgICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVy
bigpOwogICAgICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKTsKQEAgLTMzOCw3ICszOTMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcmVsZWFzZVdpbmRvd3NDb250ZXh0
KEhEQywgY29uc3QgSW50UmVjdCYsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQgPSBmYWxzZSwgYm9v
bCBtYXlDcmVhdGVCaXRtYXAgPSB0cnVlKTsgICAgLy8gVGhlIHBhc3NlZCBpbiBIREMgc2hvdWxk
IGJlIHRoZSBvbmUgaGFuZGVkIGJhY2sgYnkgZ2V0V2luZG93c0NvbnRleHQuCiAgICAgICAgIHZv
aWQgZHJhd1JvdW5kQ29ybmVyKGJvb2wgbmV3Q2xpcCwgUkVDVCBjbGlwUmVjdCwgUkVDVCByZWN0
V2luLCBIREMgZGMsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAjZWxpZiBQTEFURk9STShXSU4p
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dChIREMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8v
IEZJWE1FOiBUbyBiZSByZW1vdmVkLgorICAgICAgICB2b2lkIHBsYXRmb3JtSW5pdChIREMsIGJv
b2wgaGFzQWxwaGEgPSBmYWxzZSk7CiAgICAgICAgIGJvb2wgaW5UcmFuc3BhcmVuY3lMYXllcigp
IGNvbnN0OwogICAgICAgICBIREMgZ2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYsIGJv
b2wgc3VwcG9ydEFscGhhQmxlbmQgPSB0cnVlLCBib29sIG1heUNyZWF0ZUJpdG1hcCA9IHRydWUp
OyAvLyBUaGUgcGFzc2VkIGluIHJlY3QgaXMgdXNlZCB0byBjcmVhdGUgYSBiaXRtYXAgZm9yIGNv
bXBvc2l0aW5nIGluc2lkZSB0cmFuc3BhcmVuY3kgbGF5ZXJzLgogICAgICAgICB2b2lkIHJlbGVh
c2VXaW5kb3dzQ29udGV4dChIREMsIGNvbnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJs
ZW5kID0gdHJ1ZSwgYm9vbCBtYXlDcmVhdGVCaXRtYXAgPSB0cnVlKTsgICAgLy8gVGhlIHBhc3Nl
ZCBpbiBIREMgc2hvdWxkIGJlIHRoZSBvbmUgaGFuZGVkIGJhY2sgYnkgZ2V0V2luZG93c0NvbnRl
eHQuCkBAIC00MzgsMTEgKzQ5MywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
c3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBG
bG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFN0cm9rZVN0eWxlJik7CiAK
LSAgICAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGNyZWF0ZUdyYXBoaWNzQ29u
dGV4dFByaXZhdGUoKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4
dFByaXZhdGUoR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSopOworICAgICAgICBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHRQcml2
YXRlKiBtX2NvbW1vbjsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBt
X2RhdGE7IC8vIERlcHJlY2F0ZWQ7IG1fY29tbW1vbiBjYW4ganVzdCBiZSBkb3duY2FzdGVkLiBU
byBiZSByZW1vdmVkLgorICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOworICAg
ICAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGU+IG1fc3RhY2s7CisgICAgICAgIGJvb2wg
bV91cGRhdGluZ0NvbnRyb2xUaW50czsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dFByaXZhdGUuaAkocmV2aXNpb24gNzM0MzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBH
cmFwaGljc0NvbnRleHRQcml2YXRlX2gKLSNkZWZpbmUgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZV9o
Ci0KLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIlBhdHRlcm4uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgc3RydWN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoKQot
ICAgICAgICAgICAgOiBzdHJva2VUaGlja25lc3MoMCkKLSAgICAgICAgICAgICwgc2hhZG93Qmx1
cigwKQotI2lmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICAgICAgLCBnbG9iYWxBbHBoYSgxKQot
I2VuZGlmCi0gICAgICAgICAgICAsIHRleHREcmF3aW5nTW9kZShUZXh0TW9kZUZpbGwpCi0gICAg
ICAgICAgICAsIHN0cm9rZUNvbG9yKENvbG9yOjpibGFjaykKLSAgICAgICAgICAgICwgZmlsbENv
bG9yKENvbG9yOjpibGFjaykKLSAgICAgICAgICAgICwgc3Ryb2tlU3R5bGUoU29saWRTdHJva2Up
Ci0gICAgICAgICAgICAsIGZpbGxSdWxlKFJVTEVfTk9OWkVSTykKLSAgICAgICAgICAgICwgc3Ry
b2tlQ29sb3JTcGFjZShDb2xvclNwYWNlRGV2aWNlUkdCKQotICAgICAgICAgICAgLCBmaWxsQ29s
b3JTcGFjZShDb2xvclNwYWNlRGV2aWNlUkdCKQotICAgICAgICAgICAgLCBzaG91bGRBbnRpYWxp
YXModHJ1ZSkKLSAgICAgICAgICAgICwgcGFpbnRpbmdEaXNhYmxlZChmYWxzZSkKLSAgICAgICAg
ICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQ7Ci0gICAgICAgIFJl
ZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0ZXJuOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPEdy
YWRpZW50PiBmaWxsR3JhZGllbnQ7Ci0gICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBmaWxsUGF0dGVy
bjsKLQotICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotCi0gICAgICAgIGZsb2F0IHN0
cm9rZVRoaWNrbmVzczsKLSAgICAgICAgZmxvYXQgc2hhZG93Qmx1cjsKLQotI2lmIFBMQVRGT1JN
KENBSVJPKQotICAgICAgICBmbG9hdCBnbG9iYWxBbHBoYTsKLSNlbmRpZgotICAgICAgICBUZXh0
RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGU7Ci0KLSAgICAgICAgQ29sb3Igc3Ryb2tl
Q29sb3I7Ci0gICAgICAgIENvbG9yIGZpbGxDb2xvcjsKLSAgICAgICAgQ29sb3Igc2hhZG93Q29s
b3I7Ci0KLSAgICAgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGU7Ci0gICAgICAgIFdpbmRSdWxl
IGZpbGxSdWxlOwotCi0gICAgICAgIENvbG9yU3BhY2Ugc3Ryb2tlQ29sb3JTcGFjZTsKLSAgICAg
ICAgQ29sb3JTcGFjZSBmaWxsQ29sb3JTcGFjZTsKLQotICAgICAgICBib29sIHNob3VsZEFudGlh
bGlhczsKLSAgICAgICAgYm9vbCBwYWludGluZ0Rpc2FibGVkOwotICAgICAgICBib29sIHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgIH07Ci0KLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQ
cml2YXRlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dFByaXZhdGUoKQotICAgICAgICAgICAgOiBtX3VwZGF0aW5nQ29udHJvbFRpbnRz
KGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZSBzdGF0ZTsKLSAgICAgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBzdGFjazsK
LSAgICAgICAgYm9vbCBtX3VwZGF0aW5nQ29udHJvbFRpbnRzOwotICAgIH07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdyYXBoaWNzQ29udGV4dFByaXZhdGVfaApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTY4
LDQyICs2Nyw0NiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQbGF0Zm9ybUZpbGwoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjYWlyb190KiBjciwgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwKQorc3RhdGlj
IGlubGluZSB2b2lkIHNldFBsYXRmb3JtRmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNh
aXJvX3QqIGNyKQogewogICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IDA7CiAgICAgY2Fp
cm9fc2F2ZShjcik7Ci0gICAgaWYgKGdjcC0+c3RhdGUuZmlsbFBhdHRlcm4pIHsKKyAgICAKKyAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZSBzdGF0ZSA9IGNvbnRleHQtPnN0YXRlKCk7CisgICAgaWYg
KHN0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7Ci0g
ICAgICAgIHBhdHRlcm4gPSBnY3AtPnN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oYWZmaW5lKTsKKyAgICAgICAgcGF0dGVybiA9IHN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVh
dGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKTsKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwg
cGF0dGVybik7Ci0gICAgfSBlbHNlIGlmIChnY3AtPnN0YXRlLmZpbGxHcmFkaWVudCkKLSAgICAg
ICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgZ2NwLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3Jt
R3JhZGllbnQoKSk7CisgICAgfSBlbHNlIGlmIChzdGF0ZS5maWxsR3JhZGllbnQpCisgICAgICAg
IGNhaXJvX3NldF9zb3VyY2UoY3IsIHN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVu
dCgpKTsKICAgICBlbHNlCiAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbnRl
eHQtPmZpbGxDb2xvcigpKTsKICAgICBjYWlyb19jbGlwX3ByZXNlcnZlKGNyKTsKLSAgICBjYWly
b19wYWludF93aXRoX2FscGhhKGNyLCBnY3AtPnN0YXRlLmdsb2JhbEFscGhhKTsKKyAgICBjYWly
b19wYWludF93aXRoX2FscGhhKGNyLCBzdGF0ZS5nbG9iYWxBbHBoYSk7CiAgICAgY2Fpcm9fcmVz
dG9yZShjcik7CiAgICAgaWYgKHBhdHRlcm4pCiAgICAgICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJv
eShwYXR0ZXJuKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY2Fpcm9fdCogY3IsIEdyYXBoaWNzQ29udGV4dFByaXZh
dGUqIGdjcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZShHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNhaXJvX3QqIGNyKQogewogICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0
dGVybiA9IDA7CiAgICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgaWYgKGdjcC0+c3RhdGUuc3Ryb2tl
UGF0dGVybikgeworICAgIAorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRlID0gY29udGV4
dC0+c3RhdGUoKTsKKyAgICBpZiAoc3RhdGUuc3Ryb2tlUGF0dGVybikgewogICAgICAgICBBZmZp
bmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAgICBwYXR0ZXJuID0gZ2NwLT5zdGF0ZS5zdHJva2VQ
YXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKTsKKyAgICAgICAgcGF0dGVybiA9
IHN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpOwogICAg
ICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKLSAgICB9IGVsc2UgaWYgKGdjcC0+
c3RhdGUuc3Ryb2tlR3JhZGllbnQpCi0gICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIGdjcC0+
c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgfSBlbHNlIGlm
IChzdGF0ZS5zdHJva2VHcmFkaWVudCkKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgc3Rh
dGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAgZWxzZSAgewotICAg
ICAgICBDb2xvciBzdHJva2VDb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29udGV4dC0+
c3Ryb2tlQ29sb3IoKS5yZ2IoKSwgY29udGV4dC0+c3Ryb2tlQ29sb3IoKS5hbHBoYSgpIC8gMjU1
LmYgKiBnY3AtPnN0YXRlLmdsb2JhbEFscGhhKTsKKyAgICAgICAgQ29sb3Igc3Ryb2tlQ29sb3Ig
PSBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbnRleHQtPnN0cm9rZUNvbG9yKCkucmdiKCksIGNv
bnRleHQtPnN0cm9rZUNvbG9yKCkuYWxwaGEoKSAvIDI1NS5mICogc3RhdGUuZ2xvYmFsQWxwaGEp
OwogICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBzdHJva2VDb2xvcik7CiAgICAg
fQotICAgIGlmIChnY3AtPnN0YXRlLmdsb2JhbEFscGhhIDwgMS4wZiAmJiAoZ2NwLT5zdGF0ZS5z
dHJva2VQYXR0ZXJuIHx8IGdjcC0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpKSB7CisgICAgaWYgKHN0
YXRlLmdsb2JhbEFscGhhIDwgMS4wZiAmJiAoc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBzdGF0ZS5z
dHJva2VHcmFkaWVudCkpIHsKICAgICAgICAgY2Fpcm9fcHVzaF9ncm91cChjcik7Ci0gICAgICAg
IGNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY3IsIGdjcC0+c3RhdGUuZ2xvYmFsQWxwaGEpOworICAg
ICAgICBjYWlyb19wYWludF93aXRoX2FscGhhKGNyLCBzdGF0ZS5nbG9iYWxBbHBoYSk7CiAgICAg
ICAgIGNhaXJvX3BvcF9ncm91cF90b19zb3VyY2UoY3IpOwogICAgIH0KICAgICBjYWlyb19zdHJv
a2VfcHJlc2VydmUoY3IpOwpAQCAtMTM1LDcgKzEzOCw3IEBAIGVudW0gUGF0aERyYXdpbmdTdHls
ZSB7IAogICAgIEZpbGxBbmRTdHJva2UgPSBGaWxsICsgU3Ryb2tlCiB9OwogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGlj
c0NvbnRleHRQcml2YXRlKiBjb250ZXh0UHJpdmF0ZSwgUGF0aERyYXdpbmdTdHlsZSBkcmF3aW5n
U3R5bGUpCitzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBQYXRoRHJhd2luZ1N0eWxlIGRyYXdpbmdTdHlsZSkKIHsKICAgICBDb250ZXh0
U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0LT5jb250ZXh0U2hhZG93KCk7CiAgICAgQVNTRVJUKHNo
YWRvdyk7CkBAIC0xNzEsNDEgKzE3NCwzOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhT
aGFkb3coR3JhcGhpCiAgICAgY2Fpcm9fYXBwZW5kX3BhdGgoc2hhZG93Q29udGV4dCwgcGF0aCk7
CiAKICAgICBpZiAoZHJhd2luZ1N0eWxlICYgRmlsbCkKLSAgICAgICAgc2V0UGxhdGZvcm1GaWxs
KGNvbnRleHQsIHNoYWRvd0NvbnRleHQsIGNvbnRleHRQcml2YXRlKTsKKyAgICAgICAgc2V0UGxh
dGZvcm1GaWxsKGNvbnRleHQsIHNoYWRvd0NvbnRleHQpOwogICAgIGlmIChkcmF3aW5nU3R5bGUg
JiBTdHJva2UpCi0gICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIHNoYWRvd0NvbnRl
eHQsIGNvbnRleHRQcml2YXRlKTsKKyAgICAgICAgc2V0UGxhdGZvcm1TdHJva2UoY29udGV4dCwg
c2hhZG93Q29udGV4dCk7CiAKICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGNhaXJvQ29udGV4
dCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwLCBjYWlyb190KiBjYWlyb0Nv
bnRleHQpCitzdGF0aWMgdm9pZCBmaWxsQ3VycmVudENhaXJvUGF0aChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKIHsKICAgICBjYWlyb19zZXRfZmlsbF9y
dWxlKGNhaXJvQ29udGV4dCwgY29udGV4dC0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBD
QUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7Ci0gICAg
ZHJhd1BhdGhTaGFkb3coY29udGV4dCwgZ2NwLCBGaWxsKTsKKyAgICBkcmF3UGF0aFNoYWRvdyhj
b250ZXh0LCBGaWxsKTsKIAotICAgIHNldFBsYXRmb3JtRmlsbChjb250ZXh0LCBjYWlyb0NvbnRl
eHQsIGdjcCk7CisgICAgc2V0UGxhdGZvcm1GaWxsKGNvbnRleHQsIGNhaXJvQ29udGV4dCk7CiAg
ICAgY2Fpcm9fbmV3X3BhdGgoY2Fpcm9Db250ZXh0KTsKIH0KIAotc3RhdGljIHZvaWQgc3Ryb2tl
Q3VycmVudENhaXJvUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dFByaXZhdGUqIGdjcCwgY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQorc3RhdGljIHZvaWQgc3Ryb2tl
Q3VycmVudENhaXJvUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsICBjYWlyb190KiBjYWly
b0NvbnRleHQpCiB7Ci0gICAgZHJhd1BhdGhTaGFkb3coY29udGV4dCwgZ2NwLCBTdHJva2UpOwot
ICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIGNhaXJvQ29udGV4dCwgZ2NwKTsKKyAgICBk
cmF3UGF0aFNoYWRvdyhjb250ZXh0LCBTdHJva2UpOworICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNv
bnRleHQsIGNhaXJvQ29udGV4dCk7CiAgICAgY2Fpcm9fbmV3X3BhdGgoY2Fpcm9Db250ZXh0KTsK
IH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIGNyKQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgp
KQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBj
cikKIHsKKyAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwog
ICAgIG1fZGF0YS0+Y3IgPSBjYWlyb19yZWZlcmVuY2UoY3IpOwogICAgIG1fZGF0YS0+c3luY0Nv
bnRleHQoY3IpOwogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNyKTsKIH0KIAotR3JhcGhpY3ND
b250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bURlc3Ryb3koKQogewotICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9u
KTsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCkBAIC01MzEsNyArNTMyLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogCiAgICAgY2Fpcm9fdCogY3IgPSBtX2Rh
dGEtPmNyOwogICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0aC5wbGF0Zm9ybVBhdGgo
KS0+Y29udGV4dCgpKTsKLSAgICBmaWxsQ3VycmVudENhaXJvUGF0aCh0aGlzLCBtX2NvbW1vbiwg
Y3IpOworICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIGNyKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTU0MSw3ICs1NDIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAKICAgICBjYWly
b190KiBjciA9IG1fZGF0YS0+Y3I7CiAgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRo
LnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCkpOwotICAgIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgo
dGhpcywgbV9jb21tb24sIGNyKTsKKyAgICBzdHJva2VDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIGNy
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKQEAgLTU1Miw3ICs1NTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwogICAgIGNhaXJvX3NhdmUo
Y3IpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIG1f
Y29tbW9uLCBjcik7CisgICAgZmlsbEN1cnJlbnRDYWlyb1BhdGgodGhpcywgY3IpOwogICAgIGNh
aXJvX3Jlc3RvcmUoY3IpOwogfQogCkBAIC04MjksMTAgKzgzMCwxMCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TaGFkb3coRmxvYXRTaXplIGNvbnN0JiBzaXplLCBmbG9hdCBibHVyLCBDb2xvciBjb25z
dCYgY29sb3IsIENvbG9yU3BhY2UpCiB7CiAgICAgLy8gQ2Fpcm8gZG9lc24ndCBzdXBwb3J0IHNo
YWRvd3MgbmF0aXZlbHksIHRoZXkgYXJlIGRyYXduIG1hbnVhbGx5IGluIHRoZSBkcmF3KiBmdW5j
dGlvbnMKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7
CisgICAgaWYgKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKICAgICAgICAgLy8g
TWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBD
YW52YXNSZW5kZXJpbmdDb250ZXh0CiAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5j
ZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCi0gICAgICAgIG1fY29t
bW9uLT5zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHNpemUu
d2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOwogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRl
eHRTaGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdo
dCgpKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRv
dyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwpA
QCAtODk1LDcgKzg5Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0
IEYKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgp
LCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICBjYWlyb19zZXRf
bGluZV93aWR0aChjciwgd2lkdGgpOwotICAgIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcywg
bV9jb21tb24sIGNyKTsKKyAgICBzdHJva2VDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIGNyKTsKICAg
ICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIApAQCAtOTU0LDEyICs5NTUsMTIgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0QWxwaGEoZmxvYXQgYWxwaGEpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLmdsb2JhbEFscGhh
ID0gYWxwaGE7CisgICAgbV9zdGF0ZS5nbG9iYWxBbHBoYSA9IGFscGhhOwogfQogCiBmbG9hdCBH
cmFwaGljc0NvbnRleHQ6OmdldEFscGhhKCkKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRl
Lmdsb2JhbEFscGhhOworICAgIHJldHVybiBtX3N0YXRlLmdsb2JhbEFscGhhOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDYgQEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZl
cnNpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYXRoLmgiCkBAIC0xMDcsMTAgKzEw
Niw5IEBAIENHQ29sb3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xvclNwYWNlUmVmKCkKICNlbmRpZgog
fQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChDR0NvbnRleHRSZWYgY2dDb250
ZXh0KQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAg
ICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoY2dDb250ZXh0KSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCkKIHsKKyAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNn
Q29udGV4dCk7CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxlZCghY2dDb250ZXh0KTsKICAgICBpZiAo
Y2dDb250ZXh0KSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4g
c3luYyB3aXRoIG91ciBzdGF0ZS4KQEAgLTExOSw5ICsxMTcsOCBAQCBHcmFwaGljc0NvbnRleHQ6
OkdyYXBoaWNzQ29udGV4dChDR0NvbnRlCiAgICAgfQogfQogCi1HcmFwaGljc0NvbnRleHQ6On5H
cmFwaGljc0NvbnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgp
CiB7Ci0gICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogICAgIGRl
bGV0ZSBtX2RhdGE7CiB9CiAKQEAgLTQ1Miw3ICs0NDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6YXBwbHlTdHJva2VQYXR0ZXJuCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBs
YXRmb3JtQ29udGV4dCgpOwogCi0gICAgUmV0YWluUHRyPENHUGF0dGVyblJlZj4gcGxhdGZvcm1Q
YXR0ZXJuKEFkb3B0Q0YsIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0
Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsKKyAgICBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBwbGF0
Zm9ybVBhdHRlcm4oQWRvcHRDRiwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oZ2V0Q1RNKCkpKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAg
cmV0dXJuOwogCkBAIC00NjcsNyArNDY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5
RmlsbFBhdHRlcm4oKQogewogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNv
bnRleHQoKTsKIAotICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IHBsYXRmb3JtUGF0dGVybihB
ZG9wdENGLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihnZXRDVE0oKSkpOworICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IHBsYXRmb3JtUGF0dGVy
bihBZG9wdENGLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0
Q1RNKCkpKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBA
IC01MTEsNyArNTA4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBh
dAogICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fY29t
bW9uLT5zdGF0ZTsKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0
YXRlOwogCiAgICAgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCB8fCBzdGF0ZS5zdHJva2VHcmFkaWVu
dCkgewogICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBvcHRpbWl6ZWQgd2F5IHRvIGZpbGwg
JiBzdHJva2UgYSBwYXRoIHVzaW5nIGdyYWRpZW50cwpAQCAtNTUyLDE5ICs1NDksMTkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogICAgIENHQ29udGV4dEJlZ2lu
UGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZv
cm1QYXRoKCkpOwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAg
ICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0
ZShjb250ZXh0KTsKICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKQogICAg
ICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0o
Y29udGV4dCwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5z
Zm9ybSgpKTsKLSAgICAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQodGhp
cyk7CisgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFk
aWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgbV9zdGF0ZS5maWxsR3Jh
ZGllbnQtPnBhaW50KHRoaXMpOwogICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRl
eHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5m
aWxsUGF0dGVybikKKyAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKICAgICAgICAgYXBwbHlG
aWxsUGF0dGVybigpOwogICAgIGZpbGxQYXRoV2l0aEZpbGxSdWxlKGNvbnRleHQsIGZpbGxSdWxl
KCkpOwogfQpAQCAtNTc5LDE3ICs1NzYsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVBhdGgoY29uc3QgUAogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0Nv
bnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogCi0gICAgaWYgKG1f
Y29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChtX3N0YXRlLnN0cm9rZUdy
YWRpZW50KSB7CiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAg
IENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICBD
R0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4
dCwgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3Jt
KCkpOwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KHRoaXMp
OworICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFk
aWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VH
cmFkaWVudC0+cGFpbnQodGhpcyk7CiAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29u
dGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRl
LnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlUGF0dGVybikKICAgICAgICAg
YXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsK
IH0KQEAgLTYwMSwxNiArNTk4LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG8KIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCkgeworICAgIGlmIChtX3N0
YXRlLmZpbGxHcmFkaWVudCkgewogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQp
OwogICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHJlY3QpOwotICAgICAgICBD
R0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxH
cmFkaWVudC0+cGFpbnQodGhpcyk7CisgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0
LCBtX3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAg
ICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KHRoaXMpOwogICAgICAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVy
bikKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogICAgIENHQ29udGV4dEZpbGxSZWN0KGNv
bnRleHQsIHJlY3QpOwogfQpAQCAtNzQwLDcgKzczNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVNoYWRvdygKICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMgPSBibHVyOwogICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIW1f
Y29tbW9uLT5zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgIGlmICghbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB1
c2VyVG9CYXNlQ1RNID0gd2tHZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogCiAgICAgICAgIENH
RmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0uYSArIHVzZXJUb0Jhc2VD
VE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTgxNSwxOCArODEyLDE4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEYKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZUdy
YWRpZW50KSB7CisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKICAgICAgICAgQ0dD
b250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgc2V0U3Ryb2tlVGhpY2tuZXNzKGxp
bmVXaWR0aCk7CiAgICAgICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4dCwgcik7CiAgICAgICAg
IENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICBD
R0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3Jh
ZGllbnQtPnBhaW50KHRoaXMpOworICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWlu
dCh0aGlzKTsKICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVy
bikKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQogICAgICAgICBhcHBseVN0cm9rZVBh
dHRlcm4oKTsKICAgICBDR0NvbnRleHRTdHJva2VSZWN0V2l0aFdpZHRoKGNvbnRleHQsIHIsIGxp
bmVXaWR0aCk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBo
aWNzQ29udGV4dEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjIsMTYgKzYyLDE0IEBAIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZTo6fkdyYXBoaWMKIHsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRl
eHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi0gICAgOiBtX2NvbW1vbihjcmVh
dGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZShjb250ZXh0KSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0
Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7CisgICAgbV9kYXRh
ID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjb250ZXh0KTsKICAgICBzZXRQ
YWludGluZ0Rpc2FibGVkKCFjb250ZXh0KTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhp
Y3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQogewot
ICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKICAgICBkZWxldGUg
bV9kYXRhOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFw
aGljc0NvbnRleHRPcGVuVkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAJKHJldmlzaW9uIDczMzYwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZH
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhaW50ZXJPcGVuVkcuaCIKQEAgLTQ5LDE2ICs0OCwx
NCBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRl
eHQoU3VyZmFjZU9wZW5WRyogc3VyZmFjZSkKLSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNz
Q29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShzdXJmYWNlID8gbmV3IEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZShzdXJmYWNlKSA6IDApCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Jbml0KFN1cmZhY2VPcGVuVkcqIHN1cmZhY2UpCiB7CisgICAgbV9kYXRhID0gc3Vy
ZmFjZSA/IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3VyZmFjZSkgOiAwOwog
ICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIXN1cmZhY2UpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6
On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJv
eSgpCiB7Ci0gICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogICAg
IGRlbGV0ZSBtX2RhdGE7CiB9CiAKQEAgLTE0NCw3ICsxNDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5kcmF3UGF0aChwYXRoLCBWR19GSUxMX1BBVEgs
IG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRhLT5kcmF3UGF0aChwYXRoLCBW
R19GSUxMX1BBVEgsIG1fc3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMTUyLDcgKzE0OSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPmRyYXdQYXRoKHBhdGgsIFZH
X1NUUk9LRV9QQVRILCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAgIG1fZGF0YS0+ZHJh
d1BhdGgocGF0aCwgVkdfU1RST0tFX1BBVEgsIG1fc3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMzgw
LDcgKzM3Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHAKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEt
PmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OkludGVyc2VjdENsaXAsIG1fY29tbW9uLT5z
dGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZH
OjpJbnRlcnNlY3RDbGlwLCBtX3N0YXRlLmZpbGxSdWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM5Myw3ICszOTAsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoCiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5jbGlwUGF0aChwYXRo
LCBQYWludGVyT3BlblZHOjpTdWJ0cmFjdENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7
CisgICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpTdWJ0cmFjdENsaXAs
IG1fc3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzY2FsZUZhY3RvcnMpCkBAIC00MjcsNyArNDI0LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UgogCiAgICAgUGF0aCBwYXRoOwogICAgIHBh
dGguYWRkUmVjdChyZWN0KTsKLSAgICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVu
Vkc6OlN1YnRyYWN0Q2xpcCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAgICBtX2RhdGEt
PmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OlN1YnRyYWN0Q2xpcCwgbV9zdGF0ZS5maWxs
UnVsZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKQEAgLTQ1
MCw3ICs0NDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiAg
ICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0UmVjdChyZWN0LngoKSArIHRoaWNrbmVzcywgcmVjdC55
KCkgKyB0aGlja25lc3MsCiAgICAgICAgIHJlY3Qud2lkdGgoKSAtICh0aGlja25lc3MgKiAyKSwg
cmVjdC5oZWlnaHQoKSAtICh0aGlja25lc3MgKiAyKSkpOwogCi0gICAgbV9kYXRhLT5jbGlwUGF0
aChwYXRoLCBQYWludGVyT3BlblZHOjpJbnRlcnNlY3RDbGlwLCBtX2NvbW1vbi0+c3RhdGUuZmls
bFJ1bGUpOworICAgIG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6SW50ZXJz
ZWN0Q2xpcCwgbV9zdGF0ZS5maWxsUnVsZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
b25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm1hdGlvbikKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3Bw
CShyZXZpc2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVk
ZSAiQ29udGV4dFNoYWRvdy5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1
ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBhdGguaCIKQEAgLTIyNCw3ICsyMjMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgcGxhdGZvcm1D
b250ZXh0SXNPd25lZDsKIH07CiAKLQogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUVBhaW50ZXIqIHAsIGNvbnN0IFFDb2xvciYg
aW5pdGlhbFNvbGlkQ29sb3IpCiAgICAgOiBhbnRpQWxpYXNpbmdGb3JSZWN0c0FuZExpbmVzKGZh
bHNlKQogICAgICwgbGF5ZXJDb3VudCgwKQpAQCAtMjUzLDEwICsyNTEsMTAgQEAgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpYwogICAgIGRlbGV0ZSBkZXZpY2U7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBwYWludGVyKQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgp
KQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUocGFpbnRl
ciwgZmlsbENvbG9yKCkpKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCogcGFpbnRlcikKIHsKKyAgICBtX2RhdGEgPSBuZXcgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKHBhaW50ZXIsIGZpbGxDb2xvcigpKTsKKwogICAgIHNl
dFBhaW50aW5nRGlzYWJsZWQoIXBhaW50ZXIpOwogCiAgICAgaWYgKCFwYWludGVyKQpAQCAtMjcx
LDEyICsyNjksMTEgQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcgog
ICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGlj
c0NvbnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiAg
ICAgd2hpbGUgKCFtX2RhdGEtPmxheWVycy5pc0VtcHR5KCkpCiAgICAgICAgIGVuZFRyYW5zcGFy
ZW5jeUxheWVyKCk7CiAKLSAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1v
bik7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIApAQCAtNTEwLDcgKzUwNyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICBpZiAobV9kYXRhLT5oYXNTaGFk
b3coKSkgewogICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7
CiAgICAgICAgIGlmIChzaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93
Ci0gICAgICAgICAgICAmJiAhbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuICYmICFtX2NvbW1v
bi0+c3RhdGUuZmlsbEdyYWRpZW50KQorICAgICAgICAgICAgJiYgIW1fc3RhdGUuZmlsbFBhdHRl
cm4gJiYgIW1fc3RhdGUuZmlsbEdyYWRpZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBRUG9p
bnRGIG9mZnNldCA9IHNoYWRvdy0+b2Zmc2V0KCk7CiAgICAgICAgICAgICBjb25zdCBRVHJhbnNm
b3JtJiB0cmFuc2Zvcm0gPSBwLT50cmFuc2Zvcm0oKTsKQEAgLTUzNywxMiArNTM0LDEyIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICAgICAgfQogCiAgICAg
fQotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4pIHsKKyAgICBpZiAobV9zdGF0
ZS5maWxsUGF0dGVybikgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAg
ICBwLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVzaChtX2NvbW1vbi0+c3RhdGUuZmlsbFBh
dHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKSk7Ci0gICAgfSBlbHNlIGlmICht
X2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7Ci0gICAgICAgIFFCcnVzaCBicnVzaCgqbV9j
b21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKLSAgICAgICAg
YnJ1c2guc2V0VHJhbnNmb3JtKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgUUJy
dXNoKG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKSk7
CisgICAgfSBlbHNlIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgeworICAgICAgICBRQnJ1c2gg
YnJ1c2goKm1fc3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAg
ICBicnVzaC5zZXRUcmFuc2Zvcm0obV9zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0oKSk7CiAgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgYnJ1c2gpOwog
ICAgIH0gZWxzZQogICAgICAgICBwLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIHAtPmJydXNoKCkp
OwpAQCAtNTYyLDcgKzU1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNv
bnN0IFAKICAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOwog
CiAgICAgICAgIGlmIChzaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93
Ci0gICAgICAgICAgICAmJiAhbV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4gJiYgIW1fY29t
bW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudCkKKyAgICAgICAgICAgICYmICFtX3N0YXRlLnN0cm9r
ZVBhdHRlcm4gJiYgIW1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIFFQZW4gc2hhZG93UGVuKHBlbik7CiAgICAgICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3Io
bV9kYXRhLT5zaGFkb3cubV9jb2xvcik7CkBAIC01OTMsMTQgKzU5MCwxNCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4pIHsKKyAgICBpZiAobV9zdGF0ZS5zdHJv
a2VQYXR0ZXJuKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgIHBl
bi5zZXRCcnVzaChRQnJ1c2gobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBs
YXRmb3JtUGF0dGVybihhZmZpbmUpKSk7CisgICAgICAgIHBlbi5zZXRCcnVzaChRQnJ1c2gobV9z
dGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkpOwogICAg
ICAgICBwLT5zZXRQZW4ocGVuKTsKICAgICAgICAgcC0+c3Ryb2tlUGF0aChwbGF0Zm9ybVBhdGgs
IHBlbik7Ci0gICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsK
LSAgICAgICAgUUJydXNoIGJydXNoKCptX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBs
YXRmb3JtR3JhZGllbnQoKSk7Ci0gICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX2NvbW1vbi0+
c3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgfSBl
bHNlIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgICAgIFFCcnVzaCBicnVzaCgq
bV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJ1
c2guc2V0VHJhbnNmb3JtKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0oKSk7CiAgICAgICAgIHBlbi5zZXRCcnVzaChicnVzaCk7CiAgICAgICAgIHAtPnNldFBl
bihwZW4pOwogICAgICAgICBwLT5zdHJva2VQYXRoKHBsYXRmb3JtUGF0aCwgcGVuKTsKQEAgLTY4
NCwyMSArNjgxLDIxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8K
ICAgICBRUmVjdEYgbm9ybWFsaXplZFJlY3QgPSByZWN0Lm5vcm1hbGl6ZWQoKTsKICAgICBDb250
ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CiAKLSAgICBpZiAobV9jb21tb24t
PnN0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKICAg
ICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKLSAgICAgICAgUUJydXNoIGJydXNoKG1fY29t
bW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpOwot
ICAgICAgICBRUGl4bWFwKiBpbWFnZSA9IG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+dGls
ZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIFFCcnVzaCBi
cnVzaChtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSk7
CisgICAgICAgIFFQaXhtYXAqIGltYWdlID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+dGlsZUltYWdl
KCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIFFQYWludGVyKiBzaGFk
b3dQYWludGVyID0gbV9kYXRhLT5oYXNTaGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXll
cihwLCBub3JtYWxpemVkUmVjdCkgOiAwOwogICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewot
ICAgICAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4oc2hhZG93UGFpbnRlciwgaW1hZ2UsIG5vcm1h
bGl6ZWRSZWN0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9jb21t
b24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOworICAgICAgICAgICAgZHJhd1JlcGVh
dFBhdHRlcm4oc2hhZG93UGFpbnRlciwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLmZp
bGxQYXR0ZXJuLT5yZXBlYXRYKCksIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CiAg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNv
bXBvc2l0aW9uTW9kZV9Tb3VyY2VJbik7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxs
UmVjdChub3JtYWxpemVkUmVjdCwgc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRv
dy0+ZW5kU2hhZG93TGF5ZXIocCk7CiAgICAgICAgIH0KLSAgICAgICAgZHJhd1JlcGVhdFBhdHRl
cm4ocCwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4t
PnJlcGVhdFgoKSwgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwotICAg
IH0gZWxzZSBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCkgewotICAgICAgICBRQnJ1
c2ggYnJ1c2goKm1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQo
KSk7Ci0gICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRp
ZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICBkcmF3UmVwZWF0UGF0dGVy
bihwLCBpbWFnZSwgbm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgo
KSwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKKyAgICB9IGVsc2UgaWYgKG1fc3Rh
dGUuZmlsbEdyYWRpZW50KSB7CisgICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5maWxsR3Jh
ZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybSht
X3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKICAgICAgICAg
UVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBtX2RhdGEtPmhhc1NoYWRvdygpID8gc2hhZG93LT5i
ZWdpblNoYWRvd0xheWVyKHAsIG5vcm1hbGl6ZWRSZWN0KSA6IDA7CiAgICAgICAgIGlmIChzaGFk
b3dQYWludGVyKSB7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxp
emVkUmVjdCwgYnJ1c2gpOwpAQCAtOTYwLDEwICs5NTcsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hhZG93KAogICAgIC8vIFF0IGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dz
IG5hdGl2ZWx5LCB0aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyoKICAgICAvLyBm
dW5jdGlvbnMKIAotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpIHsKKyAgICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAgICAg
ICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0
aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0
IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAg
bV9jb21tb24tPnN0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1z
aXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUo
c2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0g
Q29udGV4dFNoYWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUu
aGVpZ2h0KCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRl
eHRTaGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRl
eHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiR0xFUzJDYW52YXMuaCIKICNpbmNsdWRlICJH
cmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIK
QEAgLTIxOSwxNyArMjE4LDE1IEBAIHZvaWQgYWRkQ29ybmVyQXJjKFNrUGF0aCogcGF0aCwgY29u
c3QgU2sKIAogLy8gVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggYSBOVUxMIHBvaW50ZXIgdG8gY3Jl
YXRlIGEgZ3JhcGhpY3MgY29udGV4dCB0aGF0IGhhcwogLy8gbm8gcGFpbnRpbmcuCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogZ2MpCi0g
ICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgLCBtX2Rh
dGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShnYykpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBnYykKIHsKKyAg
ICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGdjKTsKICAgICBz
ZXRQYWludGluZ0Rpc2FibGVkKCFnYyB8fCAhcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpKTsK
IH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQogewogICAgIGRlbGV0ZSBtX2RhdGE7Ci0gICAgdGhp
cy0+ZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogfQogCiBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dApAQCAtNzQyLDcgKzczOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25z
dCBQYXQKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7
CiAKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX2NvbW1vbi0+c3Rh
dGU7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAg
ICBwYXRoLnNldEZpbGxUeXBlKHN0YXRlLmZpbGxSdWxlID09IFJVTEVfRVZFTk9ERCA/CiAgICAg
ICAgIFNrUGF0aDo6a0V2ZW5PZGRfRmlsbFR5cGUgOiBTa1BhdGg6OmtXaW5kaW5nX0ZpbGxUeXBl
KTsKIApAQCAtMTA3MSw3ICsxMDY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtU2hhZG93KAogCiAgICAgLy8gVE9ETyh0Yyk6IFRoaXMgc3RpbGwgZG9lcyBub3QgYWRkcmVz
cyB0aGUgaXNzdWUgdGhhdCBzaGFkb3dzCiAgICAgLy8gd2l0aGluIGNhbnZhcyBlbGVtZW50cyBz
aG91bGQgaWdub3JlIHRyYW5zZm9ybXMuCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykgIHsKKyAgICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcykgIHsKICAgICAgICAgLy8gQ3VycmVudGx5IG9ubHkgdGhlIEdyYXBoaWNzQ29udGV4dCBh
c3NvY2lhdGVkIHdpdGggdGhlCiAgICAgICAgIC8vIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgZm9y
IEhUTUxDYW52YXNFbGVtZW50IGhhdmUgc2hhZG93cyBpZ25vcmUKICAgICAgICAgLy8gVHJhbnNm
b3Jtcy4gU28gd2l0aCB0aGlzIGZsYWcgc2V0LCB3ZSBrbm93IHRoaXMgc3RhdGUgaXMgYXNzb2Np
YXRlZApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dENHV2luLmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDEwICs2MSw5IEBAIHN0YXRpYyBDR0NvbnRleHRSZWYgQ0dDb250ZXh0V2l0aEhEQyhI
REMKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0Nv
bnRleHQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKLSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBo
aWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNBbHBoYSkpKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQogeworICAg
IG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0V2l0
aEhEQyhoZGMsIGhhc0FscGhhKSk7CiAgICAgQ0dDb250ZXh0UmVsZWFzZShtX2RhdGEtPm1fY2dD
b250ZXh0LmdldCgpKTsKICAgICBtX2RhdGEtPm1faGRjID0gaGRjOwogICAgIHNldFBhaW50aW5n
RGlzYWJsZWQoIW1fZGF0YS0+bV9jZ0NvbnRleHQpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAko
cmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDEwICs2NCwxMCBAQCBz
dGF0aWMgY2Fpcm9fdCogY3JlYXRlQ2Fpcm9Db250ZXh0V2l0aEhECiAgICAgcmV0dXJuIGNvbnRl
eHQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBkYywgYm9vbCBo
YXNBbHBoYSkKLSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkK
LSAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgZGMsIGJvb2wgaGFzQWxwaGEpCiB7Cisg
ICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKKwogICAgIGlm
IChkYykgewogICAgICAgICBtX2RhdGEtPmNyID0gY3JlYXRlQ2Fpcm9Db250ZXh0V2l0aEhEQyhk
YywgaGFzQWxwaGEpOwogICAgICAgICBtX2RhdGEtPm1faGRjID0gZGM7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdp
bkNFLmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NiBAQAogI2luY2x1ZGUgIkdESUV4dHJhcy5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAj
aW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1QYXRoV2luQ0UuaCIKQEAgLTU4MCwxNSArNTc5LDEzIEBAIHByaXZhdGU6CiB9
OwogCiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBkYykKLTogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQot
LCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShkYykpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBkYykK
IHsKKyAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGRjKTsK
IH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQogewotICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQ
cml2YXRlKG1fY29tbW9uKTsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCkBAIC0xMzE2LDggKzEz
MTMsOCBAQCBDb2xvciBncmFkaWVudEF2ZXJhZ2VDb2xvcihjb25zdCBHcmFkaWVuCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENvbG9y
IGMgPSBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50Ci0gICAgICAgID8gZ3JhZGllbnRBdmVy
YWdlQ29sb3IobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSkKKyAgICBDb2xvciBj
ID0gbV9zdGF0ZS5maWxsR3JhZGllbnQKKyAgICAgICAgPyBncmFkaWVudEF2ZXJhZ2VDb2xvciht
X3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSkKICAgICAgICAgOiBmaWxsQ29sb3IoKTsKIAogICAg
IGlmICghYy5hbHBoYSgpIHx8ICFtX2RhdGEtPm1fb3BhY2l0eSkKQEAgLTE0ODcsOCArMTQ4NCw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KIHsKICAgICBzYXZl
UGxhdGZvcm1TdGF0ZSgpOwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQp
Ci0gICAgICAgIGZpbGxSZWN0KHJlY3QsIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0
KCkpOworICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkKKyAgICAgICAgZmlsbFJlY3QocmVj
dCwgbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOwogICAgIGVsc2UKICAgICAgICAgZmlsbFJl
Y3QocmVjdCwgZmlsbENvbG9yKCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAko
cmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNz
Q29udGV4dFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDExICsxMTIsMTEgQEAgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpYwogfQogCiAKLUdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotICAg
IDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRh
KG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCi17ICAgIAordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwogICAg
IHNldFBhaW50aW5nRGlzYWJsZWQoIWNvbnRleHQpOworCiAgICAgaWYgKGNvbnRleHQpIHsKICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0
YXRlLgogICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSwgQ29sb3JTcGFj
ZURldmljZVJHQik7CkBAIC0xMjksOSArMTI5LDggQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGlj
c0NvbnRleHQoUGxhdGZvcgogI2VuZGlmCiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNz
Q29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAg
ICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiAgICAgZGVsZXRlIG1f
ZGF0YTsKIH0KIAo=
</data>
<flag name="review"
          id="66640"
          type_id="1"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75806</attachid>
            <date>2010-12-07 05:59:56 -0800</date>
            <delta_ts>2010-12-10 07:01:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>mergeCommonAndData_v1.7.patch</filename>
            <type>text/plain</type>
            <size>57064</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIzIEBACisyMDEwLTEyLTA3ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBH
cmFwaGljc0NvbnRleHQ6IE1lcmdlIG1fY29tbW9uIGFuZCBtX2RhdGEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTE0CisKKyAgICAgICAgTW92ZSBk
YXRhIG1lbWJlcnMgZnJvbSBHcmFwaGljc0NvbnRleHRQcml2YXRlIGludG8gR3JhcGhpY3NDb250
ZXh0LiBTbyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybS5oCisgICAgICAgIGFuZCBtX2NvbW1vbiBi
ZWNhbWUgdW5uZWNlc3NhcnkuIFRoZXkgYXJlIHJlbW92ZWQuCisgICAgICAgIEFkZCB0d28gbWV0
aG9kcyB0byBHcmFwaGljc0NvbnRleHQ6IHBsYXRmb3JtSW5pdCgpIGFuZCBwbGF0Zm9ybURlc3Ry
b3koKSwgd2hpY2gKKyAgICAgICAgbWFrZSB0aGUgY29uc3RydWN0b3Igb2YgR3JhcGhpY3NDb250
ZXh0IGNsZWFyZXIuCisgICAgICAgIEJlc2lkZXMgYWRkIGEgZ2V0dGVyIHRvIHRoZSBwcml2YXRl
IEdyYXBoaWNzQ29udGV4dDo6bV9zdGF0ZSBtZW1iZXIsIGJlY2F1c2Ugc29tZSBpbmxpbmUKKyAg
ICAgICAgZnVuY3Rpb25zIGluIGNhaXJvIG5lZWQgaXQuCisKKyAgICAgICAgTm8gbmV3IHRlc3Qg
aXMgbmVlZGVkLCBiZWNhdXNlIHRoaXMgaXMgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VUaGlja25lc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpnZXRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQ29sb3JTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsR3JhZGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6dXBkYXRpbmdDb250cm9sVGludHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRVcGRhdGluZ0NvbnRyb2xUaW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBhaW50aW5nRGlzYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNldFBsYXRmb3JtRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQbGF0
Zm9ybVN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0aFNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsQ3VycmVudENhaXJvUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpzdHJv
a2VDdXJyZW50Q2Fpcm9QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZv
cm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmdldEFscGhhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRl
eHRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
SW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJv
eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9w
ZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkSW5u
ZXJSb3VuZGVkUmVjdENsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1E
ZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0Q2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUluaXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNz
Q29udGV4dFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1E
ZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOgorCiAyMDEwLTEyLTA3ICBQYXRyaWNr
IEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFu
ZHJlYXMgS2xpbmcuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzkyMCw3ICszOTIwLDcgQEAKIAkJQThGNEZC
OTYwQzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGNEZCOTUwQzE2OUU4NTAwMkFGRUQ1
IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwICovOyB9OwogCQlBOEY1QzBCODBGOTI4NUFDMDA5OEUw
NkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjVDMEI2MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdN
b2RlbE9iamVjdC5oICovOyB9OwogCQlBOEY1QzBCOTBGOTI4NUFDMDA5OEUwNkIgLyogUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThGNUMwQjcwRjkyODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0
LmNwcCAqLzsgfTsKLQkJQThGQTZFNUQwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RkE2RTVCMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi87IH07CisJCUE4RkE2RTVEMEU0Q0ZERUQwMEQ1Q0Y0
OSAvKiBQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4RkE2RTVFMEU0Q0ZERUQwMEQ1
Q0Y0OSAvKiBQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLzsgfTsK
IAkJQTlDNkU0RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUxMEQ3NDVFMDUwMDY0
NDJFOSAvKiBET01NaW1lVHlwZS5jcHAgKi87IH07CiAJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0NDJF
OSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTlDNkU0RTIwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmggKi87IH07
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3Bw
CShyZXZpc2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkJp
ZGlSZXNvbHZlci5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHZW5lcmF0b3IuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTc0LDE0ICs3MywxNCBAQCBwcml2YXRl
OgogICAgIGludCBtX29mZnNldDsKIH07CiAKLUdyYXBoaWNzQ29udGV4dFByaXZhdGUqIEdyYXBo
aWNzQ29udGV4dDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpCitHcmFwaGljc0NvbnRl
eHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1HcmFw
aGljc0NvbnRleHQpCiB7Ci0gICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHRQcml2YXRlOwor
ICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShHcmFwaGljc0NvbnRl
eHRQcml2YXRlKiBkZWxldGVNZSkKK0dyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgp
CiB7Ci0gICAgZGVsZXRlIGRlbGV0ZU1lOworICAgIHBsYXRmb3JtRGVzdHJveSgpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCkBAIC04OSw3ICs4OCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzYXZlKCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2NvbW1vbi0+c3RhY2suYXBwZW5kKG1fY29tbW9uLT5zdGF0ZSk7Cisg
ICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7CiAKICAgICBzYXZlUGxhdGZvcm1TdGF0ZSgpOwog
fQpAQCAtOTksMTIwICs5OCwxMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X2NvbW1vbi0+c3RhY2suaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKSB7
CiAgICAgICAgIExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUo
KSBzdGFjayBpcyBlbXB0eSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY29tbW9u
LT5zdGF0ZSA9IG1fY29tbW9uLT5zdGFjay5sYXN0KCk7Ci0gICAgbV9jb21tb24tPnN0YWNrLnJl
bW92ZUxhc3QoKTsKKyAgICBtX3N0YXRlID0gbV9zdGFjay5sYXN0KCk7CisgICAgbV9zdGFjay5y
ZW1vdmVMYXN0KCk7CiAKICAgICByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKIHsKLSAg
ICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlVGhpY2tuZXNzID0gdGhpY2tuZXNzOworICAgIG1fc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzID0gdGhpY2tuZXNzOwogICAgIHNldFBsYXRmb3JtU3Ryb2tlVGhp
Y2tuZXNzKHRoaWNrbmVzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VT
dHlsZShjb25zdCBTdHJva2VTdHlsZSYgc3R5bGUpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLnN0
cm9rZVN0eWxlID0gc3R5bGU7CisgICAgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOwogICAg
IHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3R5bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yID0gY29sb3I7Ci0gICAgbV9j
b21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotICAgIG1fY29tbW9u
LT5zdGF0ZS5zdHJva2VHcmFkaWVudC5jbGVhcigpOwotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJv
a2VQYXR0ZXJuLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOworICAg
IG1fc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CisgICAgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudC5jbGVhcigpOworICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5jbGVhcigpOwog
ICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29sb3IsIGNvbG9yU3BhY2UpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9h
dCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKLSAg
ICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93T2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fY29tbW9uLT5z
dGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Q29sb3Ig
PSBjb2xvcjsKKyAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKKyAgICBtX3N0YXRl
LnNoYWRvd0JsdXIgPSBibHVyOworICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBjb2xvcjsKICAg
ICBzZXRQbGF0Zm9ybVNoYWRvdyhvZmZzZXQsIGJsdXIsIGNvbG9yLCBjb2xvclNwYWNlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKIHsKLSAgICBtX2NvbW1vbi0+
c3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNo
YWRvd0JsdXIgPSAwOwotICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dDb2xvciA9IENvbG9yKCk7
CisgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKKyAgICBtX3N0YXRlLnNo
YWRvd0JsdXIgPSAwOworICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOwogICAgIGNs
ZWFyUGxhdGZvcm1TaGFkb3coKTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRv
dyhGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQmIGJsdXIsIENvbG9yJiBjb2xvcikgY29uc3QKIHsK
LSAgICBvZmZzZXQgPSBtX2NvbW1vbi0+c3RhdGUuc2hhZG93T2Zmc2V0OwotICAgIGJsdXIgPSBt
X2NvbW1vbi0+c3RhdGUuc2hhZG93Qmx1cjsKLSAgICBjb2xvciA9IG1fY29tbW9uLT5zdGF0ZS5z
aGFkb3dDb2xvcjsKKyAgICBvZmZzZXQgPSBtX3N0YXRlLnNoYWRvd09mZnNldDsKKyAgICBibHVy
ID0gbV9zdGF0ZS5zaGFkb3dCbHVyOworICAgIGNvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsK
IAogICAgIHJldHVybiBjb2xvci5pc1ZhbGlkKCkgJiYgY29sb3IuYWxwaGEoKSAmJiAoYmx1ciB8
fCBvZmZzZXQud2lkdGgoKSB8fCBvZmZzZXQuaGVpZ2h0KCkpOwogfQogCiBmbG9hdCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVRoaWNrbmVzcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9u
LT5zdGF0ZS5zdHJva2VUaGlja25lc3M7CisgICAgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzOwogfQogCiBTdHJva2VTdHlsZSBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVN0eWxlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnN0cm9rZVN0eWxlOworICAgIHJldHVy
biBtX3N0YXRlLnN0cm9rZVN0eWxlOwogfQogCiBDb2xvciBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZUNvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9y
OworICAgIHJldHVybiBtX3N0YXRlLnN0cm9rZUNvbG9yOwogfQogCiBDb2xvclNwYWNlIEdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlQ29sb3JTcGFjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29t
bW9uLT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlOworICAgIHJldHVybiBtX3N0YXRlLnN0cm9rZUNv
bG9yU3BhY2U7CiB9CiAKIFdpbmRSdWxlIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJ1bGUoKSBjb25z
dAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGU7CisgICAgcmV0dXJuIG1f
c3RhdGUuZmlsbFJ1bGU7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVsZShX
aW5kUnVsZSBmaWxsUnVsZSkKIHsKLSAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUgPSBmaWxs
UnVsZTsKKyAgICBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvciA9IGNvbG9yOwotICAg
IG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7Ci0gICAgbV9jb21t
b24tPnN0YXRlLmZpbGxHcmFkaWVudC5jbGVhcigpOwotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxs
UGF0dGVybi5jbGVhcigpOworICAgIG1fc3RhdGUuZmlsbENvbG9yID0gY29sb3I7CisgICAgbV9z
dGF0ZS5maWxsQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CisgICAgbV9zdGF0ZS5maWxsR3JhZGll
bnQuY2xlYXIoKTsKKyAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuLmNsZWFyKCk7CiAgICAgc2V0UGxh
dGZvcm1GaWxsQ29sb3IoY29sb3IsIGNvbG9yU3BhY2UpOwogfQogCiBDb2xvciBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxDb2xvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5m
aWxsQ29sb3I7CisgICAgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9yOwogfQogCiBDb2xvclNwYWNl
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9yU3BhY2UoKSBjb25zdAogewotICAgIHJldHVybiBt
X2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2U7CisgICAgcmV0dXJuIG1fc3RhdGUuZmlsbENv
bG9yU3BhY2U7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMo
Ym9vbCBiKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSBiOworICAg
IG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gYjsKICAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlh
bGlhcyhiKTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OnNob3VsZEFudGlhbGlhcygpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5zaG91bGRBbnRpYWxpYXM7CisgICAg
cmV0dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzOworfQorCitjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0OjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3RhdGU7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFBhc3NS
ZWZQdHI8UGF0dGVybj4gcGF0dGVybikKQEAgLTIyMiw5ICsyMjYsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihQCiAgICAgICAgIHNldFN0cm9rZUNvbG9yKENvbG9y
OjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LmNsZWFyKCk7Ci0gICAgbV9jb21tb24t
PnN0YXRlLnN0cm9rZVBhdHRlcm4gPSBwYXR0ZXJuOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlUGF0
dGVybihtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSk7CisgICAgbV9zdGF0ZS5z
dHJva2VHcmFkaWVudC5jbGVhcigpOworICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IHBhdHRl
cm47CisgICAgc2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5n
ZXQoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihQYXNzUmVm
UHRyPFBhdHRlcm4+IHBhdHRlcm4pCkBAIC0yMzQsOSArMjM4LDkgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldEZpbGxQYXR0ZXJuKFBhcwogICAgICAgICBzZXRGaWxsQ29sb3IoQ29sb3I6OmJs
YWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBt
X2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmNsZWFyKCk7Ci0gICAgbV9jb21tb24tPnN0YXRl
LmZpbGxQYXR0ZXJuID0gcGF0dGVybjsKLSAgICBzZXRQbGF0Zm9ybUZpbGxQYXR0ZXJuKG1fY29t
bW9uLT5zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSk7CisgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQu
Y2xlYXIoKTsKKyAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gcGF0dGVybjsKKyAgICBzZXRQbGF0
Zm9ybUZpbGxQYXR0ZXJuKG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3Jh
ZGllbnQpCkBAIC0yNDYsOSArMjUwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9r
ZUdyYWRpZW50KAogICAgICAgICBzZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY29tbW9uLT5zdGF0
ZS5zdHJva2VHcmFkaWVudCA9IGdyYWRpZW50OwotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQ
YXR0ZXJuLmNsZWFyKCk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChtX2NvbW1vbi0+
c3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCkpOworICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQg
PSBncmFkaWVudDsKKyAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uY2xlYXIoKTsKKyAgICBzZXRQ
bGF0Zm9ybVN0cm9rZUdyYWRpZW50KG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGll
bnQ+IGdyYWRpZW50KQpAQCAtMjU4LDU1ICsyNjIsNTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldEZpbGxHcmFkaWVudChQYQogICAgICAgICBzZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBD
b2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1v
bi0+c3RhdGUuZmlsbEdyYWRpZW50ID0gZ3JhZGllbnQ7Ci0gICAgbV9jb21tb24tPnN0YXRlLmZp
bGxQYXR0ZXJuLmNsZWFyKCk7Ci0gICAgc2V0UGxhdGZvcm1GaWxsR3JhZGllbnQobV9jb21tb24t
PnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7CisgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBn
cmFkaWVudDsKKyAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuLmNsZWFyKCk7CisgICAgc2V0UGxhdGZv
cm1GaWxsR3JhZGllbnQobV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOwogfQogCiBHcmFkaWVu
dCogR3JhcGhpY3NDb250ZXh0OjpmaWxsR3JhZGllbnQoKSBjb25zdAogewotICAgIHJldHVybiBt
X2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOworICAgIHJldHVybiBtX3N0YXRlLmZp
bGxHcmFkaWVudC5nZXQoKTsKIH0KIAogR3JhZGllbnQqIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
R3JhZGllbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3Jh
ZGllbnQuZ2V0KCk7CisgICAgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCk7CiB9
CiAKIFBhdHRlcm4qIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdHRlcm4oKSBjb25zdAogewotICAg
IHJldHVybiBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCk7CisgICAgcmV0dXJuIG1f
c3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCk7CiB9CiAKIFBhdHRlcm4qIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUGF0dGVybigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJv
a2VQYXR0ZXJuLmdldCgpOworICAgIHJldHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhi
b29sIGlnbm9yZVRyYW5zZm9ybXMpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zID0gaWdub3JlVHJhbnNmb3JtczsKKyAgICBtX3N0YXRlLnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zID0gaWdub3JlVHJhbnNmb3JtczsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRl
eHQ6OnVwZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24t
Pm1fdXBkYXRpbmdDb250cm9sVGludHM7CisgICAgcmV0dXJuIG1fdXBkYXRpbmdDb250cm9sVGlu
dHM7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVcGRhdGluZ0NvbnRyb2xUaW50cyhi
b29sIGIpCiB7CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxlZChiKTsKLSAgICBtX2NvbW1vbi0+bV91
cGRhdGluZ0NvbnRyb2xUaW50cyA9IGI7CisgICAgbV91cGRhdGluZ0NvbnRyb2xUaW50cyA9IGI7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQYWludGluZ0Rpc2FibGVkKGJvb2wgZikK
IHsKLSAgICBtX2NvbW1vbi0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCA9IGY7CisgICAgbV9zdGF0
ZS5wYWludGluZ0Rpc2FibGVkID0gZjsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OnBhaW50
aW5nRGlzYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUucGFpbnRp
bmdEaXNhYmxlZDsKKyAgICByZXR1cm4gbV9zdGF0ZS5wYWludGluZ0Rpc2FibGVkOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50JiBwLCBDb21wb3NpdGVPcGVyYXRvciBvcCkK
QEAgLTUyOCwxMiArNTMyLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1
ZmZlcigKIAogVGV4dERyYXdpbmdNb2RlRmxhZ3MgR3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJhd2lu
Z01vZGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUudGV4dERyYXdpbmdN
b2RlOworICAgIHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2Rl
KQogewotICAgIG1fY29tbW9uLT5zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOworICAgIG1f
c3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9kZTsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAgICAgc2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUobW9kZSk7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJl
dmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJDb2xvclNw
YWNlLmgiCiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUg
IlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgpAQCAtMTE3LDEyICsxMTksOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgRHJhd2luZ0J1ZmZlcjsKICAgICBjbGFzcyBGb250OwogICAgIGNsYXNz
IEdlbmVyYXRvcjsKLSAgICBjbGFzcyBHcmFkaWVudDsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU7Ci0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsKICAg
ICBjbGFzcyBJbWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBLVVJMOwotICAgIGNsYXNzIFBhdHRlcm47
CiAgICAgY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgVGV4dFJ1bjsK
IApAQCAtMTQ5LDYgKzE0OCw1NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEludGVy
cG9sYXRpb25IaWdoCiAgICAgfTsKIAorICAgIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKCkKKyAgICAgICAgICAgIDogc3Ryb2tlVGhp
Y2tuZXNzKDApCisgICAgICAgICAgICAsIHNoYWRvd0JsdXIoMCkKKyNpZiBQTEFURk9STShDQUlS
TykKKyAgICAgICAgICAgICwgZ2xvYmFsQWxwaGEoMSkKKyNlbmRpZgorICAgICAgICAgICAgLCB0
ZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVGaWxsKQorICAgICAgICAgICAgLCBzdHJva2VDb2xvcihD
b2xvcjo6YmxhY2spCisgICAgICAgICAgICAsIGZpbGxDb2xvcihDb2xvcjo6YmxhY2spCisgICAg
ICAgICAgICAsIHN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKQorICAgICAgICAgICAgLCBmaWxsUnVs
ZShSVUxFX05PTlpFUk8pCisgICAgICAgICAgICAsIHN0cm9rZUNvbG9yU3BhY2UoQ29sb3JTcGFj
ZURldmljZVJHQikKKyAgICAgICAgICAgICwgZmlsbENvbG9yU3BhY2UoQ29sb3JTcGFjZURldmlj
ZVJHQikKKyAgICAgICAgICAgICwgc2hvdWxkQW50aWFsaWFzKHRydWUpCisgICAgICAgICAgICAs
IHBhaW50aW5nRGlzYWJsZWQoZmFsc2UpCisgICAgICAgICAgICAsIHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZWZQdHI8R3Jh
ZGllbnQ+IHN0cm9rZUdyYWRpZW50OworICAgICAgICBSZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0
dGVybjsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50Owor
ICAgICAgICBSZWZQdHI8UGF0dGVybj4gZmlsbFBhdHRlcm47CisKKyAgICAgICAgRmxvYXRTaXpl
IHNoYWRvd09mZnNldDsKKworICAgICAgICBmbG9hdCBzdHJva2VUaGlja25lc3M7CisgICAgICAg
IGZsb2F0IHNoYWRvd0JsdXI7CisKKyNpZiBQTEFURk9STShDQUlSTykKKyAgICAgICAgZmxvYXQg
Z2xvYmFsQWxwaGE7CisjZW5kaWYKKyAgICAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERy
YXdpbmdNb2RlOworCisgICAgICAgIENvbG9yIHN0cm9rZUNvbG9yOworICAgICAgICBDb2xvciBm
aWxsQ29sb3I7CisgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yOworCisgICAgICAgIFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlOworICAgICAgICBXaW5kUnVsZSBmaWxsUnVsZTsKKworICAgICAgICBD
b2xvclNwYWNlIHN0cm9rZUNvbG9yU3BhY2U7CisgICAgICAgIENvbG9yU3BhY2UgZmlsbENvbG9y
U3BhY2U7CisKKyAgICAgICAgYm9vbCBzaG91bGRBbnRpYWxpYXM7CisgICAgICAgIGJvb2wgcGFp
bnRpbmdEaXNhYmxlZDsKKyAgICAgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAg
ICB9OworCiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0IDogcHVibGljIE5vbmNvcHlhYmxlIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCopOwpAQCAtMTg5LDYgKzIzOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCk7CiAgICAgICAgIGJvb2wgc2hvdWxkQW50aWFs
aWFzKCkgY29uc3Q7CiAKKyAgICAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
KCkgY29uc3Q7CisKICNpZiBQTEFURk9STShDRykKICAgICAgICAgdm9pZCBhcHBseVN0cm9rZVBh
dHRlcm4oKTsKICAgICAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCk7CkBAIC0zMzgsNyArMzkw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJlbGVhc2VXaW5kb3dzQ29u
dGV4dChIREMsIGNvbnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kID0gZmFsc2Us
IGJvb2wgbWF5Q3JlYXRlQml0bWFwID0gdHJ1ZSk7ICAgIC8vIFRoZSBwYXNzZWQgaW4gSERDIHNo
b3VsZCBiZSB0aGUgb25lIGhhbmRlZCBiYWNrIGJ5IGdldFdpbmRvd3NDb250ZXh0LgogICAgICAg
ICB2b2lkIGRyYXdSb3VuZENvcm5lcihib29sIG5ld0NsaXAsIFJFQ1QgY2xpcFJlY3QsIFJFQ1Qg
cmVjdFdpbiwgSERDIGRjLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogI2VsaWYgUExBVEZPUk0o
V0lOKQotICAgICAgICBHcmFwaGljc0NvbnRleHQoSERDLCBib29sIGhhc0FscGhhID0gZmFsc2Up
OyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4KKyAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoSERD
LCBib29sIGhhc0FscGhhID0gZmFsc2UpOwogICAgICAgICBib29sIGluVHJhbnNwYXJlbmN5TGF5
ZXIoKSBjb25zdDsKICAgICAgICAgSERDIGdldFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3Qm
LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kID0gdHJ1ZSwgYm9vbCBtYXlDcmVhdGVCaXRtYXAgPSB0
cnVlKTsgLy8gVGhlIHBhc3NlZCBpbiByZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGEgYml0bWFwIGZv
ciBjb21wb3NpdGluZyBpbnNpZGUgdHJhbnNwYXJlbmN5IGxheWVycy4KICAgICAgICAgdm9pZCBy
ZWxlYXNlV2luZG93c0NvbnRleHQoSERDLCBjb25zdCBJbnRSZWN0JiwgYm9vbCBzdXBwb3J0QWxw
aGFCbGVuZCA9IHRydWUsIGJvb2wgbWF5Q3JlYXRlQml0bWFwID0gdHJ1ZSk7ICAgIC8vIFRoZSBw
YXNzZWQgaW4gSERDIHNob3VsZCBiZSB0aGUgb25lIGhhbmRlZCBiYWNrIGJ5IGdldFdpbmRvd3ND
b250ZXh0LgpAQCAtNDE1LDYgKzQ2Nyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBtYXJrRGlydHlSZWN0KGNvbnN0IEludFJlY3QmKTsgLy8gSGludHMgdGhhdCBhIHBvcnRp
b24gb2YgdGhlIGJhY2tpbmcgc3RvcmUgaXMgZGlydHkuCiAKICAgICBwcml2YXRlOgorICAgICAg
ICB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOworICAgICAgICB2
b2lkIHBsYXRmb3JtRGVzdHJveSgpOworCiAgICAgICAgIHZvaWQgc2F2ZVBsYXRmb3JtU3RhdGUo
KTsKICAgICAgICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwogCkBAIC00MzgsMTEgKzQ5
MywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIHZvaWQgYWRqdXN0
TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxv
YXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFN0cm9rZVN0eWxlJik7CiAKLSAgICAgICAgc3RhdGljIEdy
YXBoaWNzQ29udGV4dFByaXZhdGUqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKTsKLSAg
ICAgICAgc3RhdGljIHZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUoR3JhcGhpY3ND
b250ZXh0UHJpdmF0ZSopOworICAgICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUq
IG1fZGF0YTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBtX2NvbW1vbjsKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGE7IC8vIERlcHJlY2F0
ZWQ7IG1fY29tbW1vbiBjYW4ganVzdCBiZSBkb3duY2FzdGVkLiBUbyBiZSByZW1vdmVkLgorICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOworICAgICAgICBWZWN0b3I8R3JhcGhp
Y3NDb250ZXh0U3RhdGU+IG1fc3RhY2s7CisgICAgICAgIGJvb2wgbV91cGRhdGluZ0NvbnRyb2xU
aW50czsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAkocmV2aXNp
b24gNzM0MzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFBy
aXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHcmFwaGljc0NvbnRleHRQcml2
YXRlX2gKLSNkZWZpbmUgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZV9oCi0KLSNpbmNsdWRlICJHcmFk
aWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBhdHRlcm4u
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoKQotICAgICAgICAgICAgOiBzdHJv
a2VUaGlja25lc3MoMCkKLSAgICAgICAgICAgICwgc2hhZG93Qmx1cigwKQotI2lmIFBMQVRGT1JN
KENBSVJPKQotICAgICAgICAgICAgLCBnbG9iYWxBbHBoYSgxKQotI2VuZGlmCi0gICAgICAgICAg
ICAsIHRleHREcmF3aW5nTW9kZShUZXh0TW9kZUZpbGwpCi0gICAgICAgICAgICAsIHN0cm9rZUNv
bG9yKENvbG9yOjpibGFjaykKLSAgICAgICAgICAgICwgZmlsbENvbG9yKENvbG9yOjpibGFjaykK
LSAgICAgICAgICAgICwgc3Ryb2tlU3R5bGUoU29saWRTdHJva2UpCi0gICAgICAgICAgICAsIGZp
bGxSdWxlKFJVTEVfTk9OWkVSTykKLSAgICAgICAgICAgICwgc3Ryb2tlQ29sb3JTcGFjZShDb2xv
clNwYWNlRGV2aWNlUkdCKQotICAgICAgICAgICAgLCBmaWxsQ29sb3JTcGFjZShDb2xvclNwYWNl
RGV2aWNlUkdCKQotICAgICAgICAgICAgLCBzaG91bGRBbnRpYWxpYXModHJ1ZSkKLSAgICAgICAg
ICAgICwgcGFpbnRpbmdEaXNhYmxlZChmYWxzZSkKLSAgICAgICAgICAgICwgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZlB0
cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQ7Ci0gICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJv
a2VQYXR0ZXJuOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBmaWxsR3JhZGll
bnQ7Ci0gICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBmaWxsUGF0dGVybjsKLQotICAgICAgICBGbG9h
dFNpemUgc2hhZG93T2Zmc2V0OwotCi0gICAgICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzczsKLSAg
ICAgICAgZmxvYXQgc2hhZG93Qmx1cjsKLQotI2lmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICBm
bG9hdCBnbG9iYWxBbHBoYTsKLSNlbmRpZgotICAgICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0
ZXh0RHJhd2luZ01vZGU7Ci0KLSAgICAgICAgQ29sb3Igc3Ryb2tlQ29sb3I7Ci0gICAgICAgIENv
bG9yIGZpbGxDb2xvcjsKLSAgICAgICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0KLSAgICAgICAgU3Ry
b2tlU3R5bGUgc3Ryb2tlU3R5bGU7Ci0gICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlOwotCi0gICAg
ICAgIENvbG9yU3BhY2Ugc3Ryb2tlQ29sb3JTcGFjZTsKLSAgICAgICAgQ29sb3JTcGFjZSBmaWxs
Q29sb3JTcGFjZTsKLQotICAgICAgICBib29sIHNob3VsZEFudGlhbGlhczsKLSAgICAgICAgYm9v
bCBwYWludGluZ0Rpc2FibGVkOwotICAgICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
OwotICAgIH07Ci0KLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQcml2YXRlIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFByaXZhdGUo
KQotICAgICAgICAgICAgOiBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNlKQotICAgICAgICB7
Ci0gICAgICAgIH0KLQotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBzdGF0ZTsKLSAgICAg
ICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBzdGFjazsKLSAgICAgICAgYm9vbCBtX3Vw
ZGF0aW5nQ29udHJvbFRpbnRzOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEdyYXBoaWNzQ29udGV4dFByaXZhdGVfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJ
KHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTY4LDQyICs2Nyw0NiBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBzZXRQbGF0Zm9ybUZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjYWlyb190KiBj
ciwgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBs
YXRmb3JtRmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNhaXJvX3QqIGNyKQogewogICAg
IGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IDA7CiAgICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAg
aWYgKGdjcC0+c3RhdGUuZmlsbFBhdHRlcm4pIHsKKyAgICAKKyAgICBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUgPSBjb250ZXh0LT5zdGF0ZSgpOworICAgIGlmIChzdGF0ZS5maWxs
UGF0dGVybikgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAgICBwYXR0
ZXJuID0gZ2NwLT5zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmlu
ZSk7CisgICAgICAgIHBhdHRlcm4gPSBzdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1Q
YXR0ZXJuKGFmZmluZSk7CiAgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdHRlcm4pOwot
ICAgIH0gZWxzZSBpZiAoZ2NwLT5zdGF0ZS5maWxsR3JhZGllbnQpCi0gICAgICAgIGNhaXJvX3Nl
dF9zb3VyY2UoY3IsIGdjcC0+c3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkp
OworICAgIH0gZWxzZSBpZiAoc3RhdGUuZmlsbEdyYWRpZW50KQorICAgICAgICBjYWlyb19zZXRf
c291cmNlKGNyLCBzdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAg
ZWxzZQogICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb250ZXh0LT5maWxsQ29s
b3IoKSk7CiAgICAgY2Fpcm9fY2xpcF9wcmVzZXJ2ZShjcik7Ci0gICAgY2Fpcm9fcGFpbnRfd2l0
aF9hbHBoYShjciwgZ2NwLT5zdGF0ZS5nbG9iYWxBbHBoYSk7CisgICAgY2Fpcm9fcGFpbnRfd2l0
aF9hbHBoYShjciwgc3RhdGUuZ2xvYmFsQWxwaGEpOwogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwog
ICAgIGlmIChwYXR0ZXJuKQogICAgICAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3kocGF0dGVybik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZShHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNhaXJvX3QqIGNyLCBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBnY3ApCitz
dGF0aWMgaW5saW5lIHZvaWQgc2V0UGxhdGZvcm1TdHJva2UoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjYWlyb190KiBjcikKIHsKICAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSAwOwog
ICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGlmIChnY3AtPnN0YXRlLnN0cm9rZVBhdHRlcm4pIHsK
KyAgICAKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBjb250ZXh0LT5z
dGF0ZSgpOworICAgIGlmIChzdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CiAgICAgICAgIEFmZmluZVRy
YW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgIHBhdHRlcm4gPSBnY3AtPnN0YXRlLnN0cm9rZVBhdHRl
cm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpOworICAgICAgICBwYXR0ZXJuID0gc3Rh
dGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSk7CiAgICAgICAg
IGNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdHRlcm4pOwotICAgIH0gZWxzZSBpZiAoZ2NwLT5zdGF0
ZS5zdHJva2VHcmFkaWVudCkKLSAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgZ2NwLT5zdGF0
ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICB9IGVsc2UgaWYgKHN0
YXRlLnN0cm9rZUdyYWRpZW50KQorICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZS5z
dHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKICAgICBlbHNlICB7Ci0gICAgICAg
IENvbG9yIHN0cm9rZUNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb250ZXh0LT5zdHJv
a2VDb2xvcigpLnJnYigpLCBjb250ZXh0LT5zdHJva2VDb2xvcigpLmFscGhhKCkgLyAyNTUuZiAq
IGdjcC0+c3RhdGUuZ2xvYmFsQWxwaGEpOworICAgICAgICBDb2xvciBzdHJva2VDb2xvciA9IGNv
bG9yV2l0aE92ZXJyaWRlQWxwaGEoY29udGV4dC0+c3Ryb2tlQ29sb3IoKS5yZ2IoKSwgY29udGV4
dC0+c3Ryb2tlQ29sb3IoKS5hbHBoYSgpIC8gMjU1LmYgKiBzdGF0ZS5nbG9iYWxBbHBoYSk7CiAg
ICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIHN0cm9rZUNvbG9yKTsKICAgICB9Ci0g
ICAgaWYgKGdjcC0+c3RhdGUuZ2xvYmFsQWxwaGEgPCAxLjBmICYmIChnY3AtPnN0YXRlLnN0cm9r
ZVBhdHRlcm4gfHwgZ2NwLT5zdGF0ZS5zdHJva2VHcmFkaWVudCkpIHsKKyAgICBpZiAoc3RhdGUu
Z2xvYmFsQWxwaGEgPCAxLjBmICYmIChzdGF0ZS5zdHJva2VQYXR0ZXJuIHx8IHN0YXRlLnN0cm9r
ZUdyYWRpZW50KSkgewogICAgICAgICBjYWlyb19wdXNoX2dyb3VwKGNyKTsKLSAgICAgICAgY2Fp
cm9fcGFpbnRfd2l0aF9hbHBoYShjciwgZ2NwLT5zdGF0ZS5nbG9iYWxBbHBoYSk7CisgICAgICAg
IGNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY3IsIHN0YXRlLmdsb2JhbEFscGhhKTsKICAgICAgICAg
Y2Fpcm9fcG9wX2dyb3VwX3RvX3NvdXJjZShjcik7CiAgICAgfQogICAgIGNhaXJvX3N0cm9rZV9w
cmVzZXJ2ZShjcik7CkBAIC0xMzUsNyArMTM4LDcgQEAgZW51bSBQYXRoRHJhd2luZ1N0eWxlIHsg
CiAgICAgRmlsbEFuZFN0cm9rZSA9IEZpbGwgKyBTdHJva2UKIH07CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBkcmF3UGF0aFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29u
dGV4dFByaXZhdGUqIGNvbnRleHRQcml2YXRlLCBQYXRoRHJhd2luZ1N0eWxlIGRyYXdpbmdTdHls
ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UGF0aFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIFBhdGhEcmF3aW5nU3R5bGUgZHJhd2luZ1N0eWxlKQogewogICAgIENvbnRleHRTaGFk
b3cqIHNoYWRvdyA9IGNvbnRleHQtPmNvbnRleHRTaGFkb3coKTsKICAgICBBU1NFUlQoc2hhZG93
KTsKQEAgLTE3MSw0MSArMTc0LDM5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UGF0aFNoYWRv
dyhHcmFwaGkKICAgICBjYWlyb19hcHBlbmRfcGF0aChzaGFkb3dDb250ZXh0LCBwYXRoKTsKIAog
ICAgIGlmIChkcmF3aW5nU3R5bGUgJiBGaWxsKQotICAgICAgICBzZXRQbGF0Zm9ybUZpbGwoY29u
dGV4dCwgc2hhZG93Q29udGV4dCwgY29udGV4dFByaXZhdGUpOworICAgICAgICBzZXRQbGF0Zm9y
bUZpbGwoY29udGV4dCwgc2hhZG93Q29udGV4dCk7CiAgICAgaWYgKGRyYXdpbmdTdHlsZSAmIFN0
cm9rZSkKLSAgICAgICAgc2V0UGxhdGZvcm1TdHJva2UoY29udGV4dCwgc2hhZG93Q29udGV4dCwg
Y29udGV4dFByaXZhdGUpOworICAgICAgICBzZXRQbGF0Zm9ybVN0cm9rZShjb250ZXh0LCBzaGFk
b3dDb250ZXh0KTsKIAogICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY2Fpcm9Db250ZXh0KTsK
IH0KIAotc3RhdGljIHZvaWQgZmlsbEN1cnJlbnRDYWlyb1BhdGgoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBnY3AsIGNhaXJvX3QqIGNhaXJvQ29udGV4
dCkKK3N0YXRpYyB2b2lkIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQogewogICAgIGNhaXJvX3NldF9maWxsX3J1bGUo
Y2Fpcm9Db250ZXh0LCBjb250ZXh0LT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCA/IENBSVJP
X0ZJTExfUlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVMRV9XSU5ESU5HKTsKLSAgICBkcmF3
UGF0aFNoYWRvdyhjb250ZXh0LCBnY3AsIEZpbGwpOworICAgIGRyYXdQYXRoU2hhZG93KGNvbnRl
eHQsIEZpbGwpOwogCi0gICAgc2V0UGxhdGZvcm1GaWxsKGNvbnRleHQsIGNhaXJvQ29udGV4dCwg
Z2NwKTsKKyAgICBzZXRQbGF0Zm9ybUZpbGwoY29udGV4dCwgY2Fpcm9Db250ZXh0KTsKICAgICBj
YWlyb19uZXdfcGF0aChjYWlyb0NvbnRleHQpOwogfQogCi1zdGF0aWMgdm9pZCBzdHJva2VDdXJy
ZW50Q2Fpcm9QYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZSogZ2NwLCBjYWlyb190KiBjYWlyb0NvbnRleHQpCitzdGF0aWMgdm9pZCBzdHJva2VDdXJy
ZW50Q2Fpcm9QYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgIGNhaXJvX3QqIGNhaXJvQ29u
dGV4dCkKIHsKLSAgICBkcmF3UGF0aFNoYWRvdyhjb250ZXh0LCBnY3AsIFN0cm9rZSk7Ci0gICAg
c2V0UGxhdGZvcm1TdHJva2UoY29udGV4dCwgY2Fpcm9Db250ZXh0LCBnY3ApOworICAgIGRyYXdQ
YXRoU2hhZG93KGNvbnRleHQsIFN0cm9rZSk7CisgICAgc2V0UGxhdGZvcm1TdHJva2UoY29udGV4
dCwgY2Fpcm9Db250ZXh0KTsKICAgICBjYWlyb19uZXdfcGF0aChjYWlyb0NvbnRleHQpOwogfQog
Ci1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCogY3IpCi0gICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0g
ICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNyKQog
eworICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiAgICAg
bV9kYXRhLT5jciA9IGNhaXJvX3JlZmVyZW5jZShjcik7CiAgICAgbV9kYXRhLT5zeW5jQ29udGV4
dChjcik7CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxlZCghY3IpOwogfQogCi1HcmFwaGljc0NvbnRl
eHQ6On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVz
dHJveSgpCiB7Ci0gICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwog
ICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKQEAgLTUzMSw3ICs1MzIsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0CiAKICAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y3I7CiAgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5j
b250ZXh0KCkpOwotICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIG1fY29tbW9uLCBjcik7
CisgICAgZmlsbEN1cnJlbnRDYWlyb1BhdGgodGhpcywgY3IpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtNTQxLDcgKzU0Miw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKIAogICAgIGNhaXJvX3Qq
IGNyID0gbV9kYXRhLT5jcjsKICAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsIHBhdGgucGxh
dGZvcm1QYXRoKCktPmNvbnRleHQoKSk7Ci0gICAgc3Ryb2tlQ3VycmVudENhaXJvUGF0aCh0aGlz
LCBtX2NvbW1vbiwgY3IpOworICAgIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcywgY3IpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQpAQCAtNTUyLDcgKzU1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBGbG8KICAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CiAgICAgY2Fpcm9fc2F2ZShjcik7
CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZmlsbEN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9jb21t
b24sIGNyKTsKKyAgICBmaWxsQ3VycmVudENhaXJvUGF0aCh0aGlzLCBjcik7CiAgICAgY2Fpcm9f
cmVzdG9yZShjcik7CiB9CiAKQEAgLTgyOSwxMCArODMwLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjphZGRJbm5lclJvdW5kZWRSZWMKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVNoYWRvdyhGbG9hdFNpemUgY29uc3QmIHNpemUsIGZsb2F0IGJsdXIsIENvbG9yIGNvbnN0JiBj
b2xvciwgQ29sb3JTcGFjZSkKIHsKICAgICAvLyBDYWlybyBkb2Vzbid0IHN1cHBvcnQgc2hhZG93
cyBuYXRpdmVseSwgdGhleSBhcmUgZHJhd24gbWFudWFsbHkgaW4gdGhlIGRyYXcqIGZ1bmN0aW9u
cwotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAg
ICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICAvLyBNZWFu
aW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQKICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENH
IGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgbV9jb21tb24t
PnN0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0
aCgpLCAtc2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNo
YWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkp
KTsKICAgICB9IGVsc2UKICAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNv
bG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CkBAIC04
OTUsNyArODk2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRgog
ICAgIGNhaXJvX3NhdmUoY3IpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJl
Y3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogICAgIGNhaXJvX3NldF9saW5l
X3dpZHRoKGNyLCB3aWR0aCk7Ci0gICAgc3Ryb2tlQ3VycmVudENhaXJvUGF0aCh0aGlzLCBtX2Nv
bW1vbiwgY3IpOworICAgIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcywgY3IpOwogICAgIGNh
aXJvX3Jlc3RvcmUoY3IpOwogfQogCkBAIC05NTQsMTIgKzk1NSwxMiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRB
bHBoYShmbG9hdCBhbHBoYSkKIHsKLSAgICBtX2NvbW1vbi0+c3RhdGUuZ2xvYmFsQWxwaGEgPSBh
bHBoYTsKKyAgICBtX3N0YXRlLmdsb2JhbEFscGhhID0gYWxwaGE7CiB9CiAKIGZsb2F0IEdyYXBo
aWNzQ29udGV4dDo6Z2V0QWxwaGEoKQogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuZ2xv
YmFsQWxwaGE7CisgICAgcmV0dXJuIG1fc3RhdGUuZ2xvYmFsQWxwaGE7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Igb3Ap
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBA
QAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTEwNywxMCArMTA2LDkg
QEAgQ0dDb2xvclNwYWNlUmVmIGxpbmVhclJHQkNvbG9yU3BhY2VSZWYoKQogI2VuZGlmCiB9CiAK
LUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KENHQ29udGV4dFJlZiBjZ0NvbnRleHQp
Ci0gICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgLCBt
X2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQpKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChDR0NvbnRleHRSZWYgY2dDb250ZXh0KQog
eworICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoY2dDb250
ZXh0KTsKICAgICBzZXRQYWludGluZ0Rpc2FibGVkKCFjZ0NvbnRleHQpOwogICAgIGlmIChjZ0Nv
bnRleHQpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5j
IHdpdGggb3VyIHN0YXRlLgpAQCAtMTE5LDkgKzExNyw4IEBAIEdyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0KENHQ29udGUKICAgICB9CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6fkdyYXBo
aWNzQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKIHsK
LSAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiAgICAgZGVsZXRl
IG1fZGF0YTsKIH0KIApAQCAtNDUyLDcgKzQ0OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojph
cHBseVN0cm9rZVBhdHRlcm4KIHsKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKLSAgICBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBwbGF0Zm9ybVBhdHRl
cm4oQWRvcHRDRiwgbV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3Jt
UGF0dGVybihnZXRDVE0oKSkpOworICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IHBsYXRmb3Jt
UGF0dGVybihBZG9wdENGLCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihnZXRDVE0oKSkpOwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQogICAgICAgICByZXR1
cm47CiAKQEAgLTQ2Nyw3ICs0NjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxs
UGF0dGVybigpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dCgpOwogCi0gICAgUmV0YWluUHRyPENHUGF0dGVyblJlZj4gcGxhdGZvcm1QYXR0ZXJuKEFkb3B0
Q0YsIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdl
dENUTSgpKSk7CisgICAgUmV0YWluUHRyPENHUGF0dGVyblJlZj4gcGxhdGZvcm1QYXR0ZXJuKEFk
b3B0Q0YsIG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0o
KSkpOwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKQEAgLTUx
MSw3ICs1MDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0CiAg
ICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9jb21tb24t
PnN0YXRlOworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7
CiAKICAgICBpZiAoc3RhdGUuZmlsbEdyYWRpZW50IHx8IHN0YXRlLnN0cm9rZUdyYWRpZW50KSB7
CiAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IG9wdGltaXplZCB3YXkgdG8gZmlsbCAmIHN0
cm9rZSBhIHBhdGggdXNpbmcgZ3JhZGllbnRzCkBAIC01NTIsMTkgKzU0OSwxOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0CiAgICAgQ0dDb250ZXh0QmVnaW5QYXRo
KGNvbnRleHQpOwogICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBh
dGgoKSk7CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCkgeworICAgIGlm
IChtX3N0YXRlLmZpbGxHcmFkaWVudCkgewogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNv
bnRleHQpOwogICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpCiAgICAgICAg
ICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IENHQ29udGV4dENsaXAoY29udGV4dCk7Ci0gICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250
ZXh0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3Jt
KCkpOwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5wYWludCh0aGlzKTsK
KyAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50
LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVu
dC0+cGFpbnQodGhpcyk7CiAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxQ
YXR0ZXJuKQorICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQogICAgICAgICBhcHBseUZpbGxQ
YXR0ZXJuKCk7CiAgICAgZmlsbFBhdGhXaXRoRmlsbFJ1bGUoY29udGV4dCwgZmlsbFJ1bGUoKSk7
CiB9CkBAIC01NzksMTcgKzU3NiwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0
aChjb25zdCBQCiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAgIENHQ29udGV4
dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAKLSAgICBpZiAobV9jb21t
b24tPnN0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQpIHsKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgQ0dD
b250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgIENHQ29u
dGV4dENsaXAoY29udGV4dCk7Ci0gICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBt
X2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7
Ci0gICAgICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQodGhpcyk7Cisg
ICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50
LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRp
ZW50LT5wYWludCh0aGlzKTsKICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ry
b2tlUGF0dGVybikKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQogICAgICAgICBhcHBs
eVN0cm9rZVBhdHRlcm4oKTsKICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwogfQpA
QCAtNjAxLDE2ICs1OTgsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0
IEZsbwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAot
ICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKG1fc3RhdGUu
ZmlsbEdyYWRpZW50KSB7CiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAg
ICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcmVjdCk7Ci0gICAgICAgIENHQ29u
dGV4dENvbmNhdENUTShjb250ZXh0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFk
aWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRp
ZW50LT5wYWludCh0aGlzKTsKKyAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1f
c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICBt
X3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQodGhpcyk7CiAgICAgICAgIENHQ29udGV4dFJlc3Rv
cmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9j
b21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQog
ICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4
dCwgcmVjdCk7CiB9CkBAIC03NDAsNyArNzM3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU2hhZG93KAogICAgIENHRmxvYXQgYmx1clJhZGl1cyA9IGJsdXI7CiAgICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmICghbV9jb21t
b24tPnN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgaWYgKCFtX3N0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CiAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJU
b0Jhc2VDVE0gPSB3a0dldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CiAKICAgICAgICAgQ0dGbG9h
dCBBID0gdXNlclRvQmFzZUNUTS5hICogdXNlclRvQmFzZUNUTS5hICsgdXNlclRvQmFzZUNUTS5i
ICogdXNlclRvQmFzZUNUTS5iOwpAQCAtODE1LDE4ICs4MTIsMTggQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRgogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGll
bnQpIHsKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgewogICAgICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBzZXRTdHJva2VUaGlja25lc3MobGluZVdp
ZHRoKTsKICAgICAgICAgQ0dDb250ZXh0QWRkUmVjdChjb250ZXh0LCByKTsKICAgICAgICAgQ0dD
b250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgIENHQ29u
dGV4dENsaXAoY29udGV4dCk7Ci0gICAgICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVu
dC0+cGFpbnQodGhpcyk7CisgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KHRo
aXMpOwogICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuKQor
ICAgIGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCiAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVy
bigpOwogICAgIENHQ29udGV4dFN0cm9rZVJlY3RXaXRoV2lkdGgoY29udGV4dCwgciwgbGluZVdp
ZHRoKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3ND
b250ZXh0SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCShyZXZpc2lvbiA3MzM2MCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MiwxNiArNjIsMTQgQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOjp+R3JhcGhpYwogewogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IG1fY29tbW9uKGNyZWF0ZUdy
YXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKGNvbnRleHQpKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
SW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKKyAgICBtX2RhdGEgPSBu
ZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNvbnRleHQpOwogICAgIHNldFBhaW50
aW5nRGlzYWJsZWQoIWNvbnRleHQpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0Nv
bnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0gICAg
ZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogICAgIGRlbGV0ZSBtX2Rh
dGE7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNz
Q29udGV4dE9wZW5WRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiUGFpbnRlck9wZW5WRy5oIgpAQCAtNDksMTYgKzQ4LDE0IEBA
IHB1YmxpYzoKICAgICB9CiB9OwogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChT
dXJmYWNlT3BlblZHKiBzdXJmYWNlKQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250
ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKHN1cmZhY2UgPyBuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKHN1cmZhY2UpIDogMCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0
Zm9ybUluaXQoU3VyZmFjZU9wZW5WRyogc3VyZmFjZSkKIHsKKyAgICBtX2RhdGEgPSBzdXJmYWNl
ID8gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdXJmYWNlKSA6IDA7CiAgICAg
c2V0UGFpbnRpbmdEaXNhYmxlZCghc3VyZmFjZSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6fkdy
YXBoaWNzQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkK
IHsKLSAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiAgICAgZGVs
ZXRlIG1fZGF0YTsKIH0KIApAQCAtMTQ0LDcgKzE0MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2RhdGEtPmRyYXdQYXRoKHBhdGgsIFZHX0ZJTExfUEFUSCwgbV9j
b21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAgICBtX2RhdGEtPmRyYXdQYXRoKHBhdGgsIFZHX0ZJ
TExfUEFUSCwgbV9zdGF0ZS5maWxsUnVsZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0xNTIsNyArMTQ5LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUAogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+ZHJhd1BhdGgocGF0aCwgVkdfU1RS
T0tFX1BBVEgsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRhLT5kcmF3UGF0
aChwYXRoLCBWR19TVFJPS0VfUEFUSCwgbV9zdGF0ZS5maWxsUnVsZSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0zODAsNyAr
Mzc3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYgcAogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+Y2xp
cFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6SW50ZXJzZWN0Q2xpcCwgbV9jb21tb24tPnN0YXRl
LmZpbGxSdWxlKTsKKyAgICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6Oklu
dGVyc2VjdENsaXAsIG1fc3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzkzLDcgKzM5MCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBh
aW50ZXJPcGVuVkc6OlN1YnRyYWN0Q2xpcCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAg
ICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OlN1YnRyYWN0Q2xpcCwgbV9z
dGF0ZS5maWxsUnVsZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBG
bG9hdFNpemUmIHNjYWxlRmFjdG9ycykKQEAgLTQyNyw3ICs0MjQsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSCiAKICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5h
ZGRSZWN0KHJlY3QpOwotICAgIG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6
U3VidHJhY3RDbGlwLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAgIG1fZGF0YS0+Y2xp
cFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6U3VidHJhY3RDbGlwLCBtX3N0YXRlLmZpbGxSdWxl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQpAQCAtNDUwLDcg
KzQ0Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWMKICAgICBw
YXRoLmFkZEVsbGlwc2UoRmxvYXRSZWN0KHJlY3QueCgpICsgdGhpY2tuZXNzLCByZWN0LnkoKSAr
IHRoaWNrbmVzcywKICAgICAgICAgcmVjdC53aWR0aCgpIC0gKHRoaWNrbmVzcyAqIDIpLCByZWN0
LmhlaWdodCgpIC0gKHRoaWNrbmVzcyAqIDIpKSk7CiAKLSAgICBtX2RhdGEtPmNsaXBQYXRoKHBh
dGgsIFBhaW50ZXJPcGVuVkc6OkludGVyc2VjdENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVs
ZSk7CisgICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpJbnRlcnNlY3RD
bGlwLCBtX3N0YXRlLmZpbGxSdWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybWF0aW9uKQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHJl
dmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlICJD
b250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAi
Rm9udC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0
aC5oIgpAQCAtMjI0LDcgKzIyMyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwbGF0Zm9ybUNvbnRl
eHRJc093bmVkOwogfTsKIAotCiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShRUGFpbnRlciogcCwgY29uc3QgUUNvbG9yJiBpbml0
aWFsU29saWRDb2xvcikKICAgICA6IGFudGlBbGlhc2luZ0ZvclJlY3RzQW5kTGluZXMoZmFsc2Up
CiAgICAgLCBsYXllckNvdW50KDApCkBAIC0yNTMsMTAgKzI1MSwxMCBAQCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljCiAgICAgZGVsZXRlIGRldmljZTsKIH0KIAotR3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBh
aW50ZXIpCi0gICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0g
ICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShwYWludGVyLCBm
aWxsQ29sb3IoKSkpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBwYWludGVyKQogeworICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUocGFpbnRlciwgZmlsbENvbG9yKCkpOworCiAgICAgc2V0UGFp
bnRpbmdEaXNhYmxlZCghcGFpbnRlcik7CiAKICAgICBpZiAoIXBhaW50ZXIpCkBAIC0yNzEsMTIg
KzI2OSwxMSBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9yCiAgICAg
cGFpbnRlci0+c2V0UGVuKHBlbik7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29u
dGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKIHsKICAgICB3
aGlsZSAoIW1fZGF0YS0+bGF5ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKIAotICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsK
ICAgICBkZWxldGUgbV9kYXRhOwogfQogCkBAIC01MTAsNyArNTA3LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogICAgIGlmIChtX2RhdGEtPmhhc1NoYWRvdygp
KSB7CiAgICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKICAg
ICAgICAgaWYgKHNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cKLSAg
ICAgICAgICAgICYmICFtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4gJiYgIW1fY29tbW9uLT5z
dGF0ZS5maWxsR3JhZGllbnQpCisgICAgICAgICAgICAmJiAhbV9zdGF0ZS5maWxsUGF0dGVybiAm
JiAhbV9zdGF0ZS5maWxsR3JhZGllbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIFFQb2ludEYg
b2Zmc2V0ID0gc2hhZG93LT5vZmZzZXQoKTsKICAgICAgICAgICAgIGNvbnN0IFFUcmFuc2Zvcm0m
IHRyYW5zZm9ybSA9IHAtPnRyYW5zZm9ybSgpOwpAQCAtNTM3LDEyICs1MzQsMTIgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogICAgICAgICB9CiAKICAgICB9Ci0g
ICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybikgeworICAgIGlmIChtX3N0YXRlLmZp
bGxQYXR0ZXJuKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgIHAt
PmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgUUJydXNoKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVy
bi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpKTsKLSAgICB9IGVsc2UgaWYgKG1fY29t
bW9uLT5zdGF0ZS5maWxsR3JhZGllbnQpIHsKLSAgICAgICAgUUJydXNoIGJydXNoKCptX2NvbW1v
bi0+c3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwotICAgICAgICBicnVz
aC5zZXRUcmFuc2Zvcm0obV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgcC0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBRQnJ1c2go
bV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpKTsKKyAg
ICB9IGVsc2UgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgICAgIFFCcnVzaCBicnVz
aCgqbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGJy
dXNoLnNldFRyYW5zZm9ybShtX3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5z
Zm9ybSgpKTsKICAgICAgICAgcC0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBicnVzaCk7CiAgICAg
fSBlbHNlCiAgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgcC0+YnJ1c2goKSk7CkBA
IC01NjIsNyArNTU5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3Qg
UAogICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CiAKICAg
ICAgICAgaWYgKHNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cKLSAg
ICAgICAgICAgICYmICFtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybiAmJiAhbV9jb21tb24t
PnN0YXRlLnN0cm9rZUdyYWRpZW50KQorICAgICAgICAgICAgJiYgIW1fc3RhdGUuc3Ryb2tlUGF0
dGVybiAmJiAhbV9zdGF0ZS5zdHJva2VHcmFkaWVudCkKICAgICAgICAgewogICAgICAgICAgICAg
UVBlbiBzaGFkb3dQZW4ocGVuKTsKICAgICAgICAgICAgIHNoYWRvd1Blbi5zZXRDb2xvcihtX2Rh
dGEtPnNoYWRvdy5tX2NvbG9yKTsKQEAgLTU5MywxNCArNTkwLDE0IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICht
X2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybikgeworICAgIGlmIChtX3N0YXRlLnN0cm9rZVBh
dHRlcm4pIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKLSAgICAgICAgcGVuLnNl
dEJydXNoKFFCcnVzaChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKGFmZmluZSkpKTsKKyAgICAgICAgcGVuLnNldEJydXNoKFFCcnVzaChtX3N0YXRl
LnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKSk7CiAgICAgICAg
IHAtPnNldFBlbihwZW4pOwogICAgICAgICBwLT5zdHJva2VQYXRoKHBsYXRmb3JtUGF0aCwgcGVu
KTsKLSAgICB9IGVsc2UgaWYgKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudCkgewotICAg
ICAgICBRQnJ1c2ggYnJ1c2goKm1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZv
cm1HcmFkaWVudCgpKTsKLSAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fY29tbW9uLT5zdGF0
ZS5zdHJva2VHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICB9IGVsc2Ug
aWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICAgICAgUUJydXNoIGJydXNoKCptX3N0
YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBicnVzaC5z
ZXRUcmFuc2Zvcm0obV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9y
bSgpKTsKICAgICAgICAgcGVuLnNldEJydXNoKGJydXNoKTsKICAgICAgICAgcC0+c2V0UGVuKHBl
bik7CiAgICAgICAgIHAtPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBwZW4pOwpAQCAtNjg0LDIx
ICs2ODEsMjEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAg
IFFSZWN0RiBub3JtYWxpemVkUmVjdCA9IHJlY3Qubm9ybWFsaXplZCgpOwogICAgIENvbnRleHRT
aGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKIAotICAgIGlmIChtX2NvbW1vbi0+c3Rh
dGUuZmlsbFBhdHRlcm4pIHsKKyAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikgewogICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAgICBRQnJ1c2ggYnJ1c2gobV9jb21tb24t
PnN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSk7Ci0gICAg
ICAgIFFQaXhtYXAqIGltYWdlID0gbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT50aWxlSW1h
Z2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgUUJydXNoIGJydXNo
KG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKTsKKyAg
ICAgICAgUVBpeG1hcCogaW1hZ2UgPSBtX3N0YXRlLmZpbGxQYXR0ZXJuLT50aWxlSW1hZ2UoKS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1Bh
aW50ZXIgPSBtX2RhdGEtPmhhc1NoYWRvdygpID8gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHAs
IG5vcm1hbGl6ZWRSZWN0KSA6IDA7CiAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7Ci0gICAg
ICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihzaGFkb3dQYWludGVyLCBpbWFnZSwgbm9ybWFsaXpl
ZFJlY3QsIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WCgpLCBtX2NvbW1vbi0+
c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CisgICAgICAgICAgICBkcmF3UmVwZWF0UGF0
dGVybihzaGFkb3dQYWludGVyLCBpbWFnZSwgbm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuZmlsbFBh
dHRlcm4tPnJlcGVhdFgoKSwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKICAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9z
aXRpb25Nb2RlX1NvdXJjZUluKTsKICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0
KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAgICAgc2hhZG93LT5l
bmRTaGFkb3dMYXllcihwKTsKICAgICAgICAgfQotICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihw
LCBpbWFnZSwgbm9ybWFsaXplZFJlY3QsIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+cmVw
ZWF0WCgpLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7Ci0gICAgfSBl
bHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7Ci0gICAgICAgIFFCcnVzaCBi
cnVzaCgqbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsK
LSAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQt
PmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIGRyYXdSZXBlYXRQYXR0ZXJuKHAs
IGltYWdlLCBub3JtYWxpemVkUmVjdCwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WCgpLCBt
X3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOworICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5m
aWxsR3JhZGllbnQpIHsKKyAgICAgICAgUUJydXNoIGJydXNoKCptX3N0YXRlLmZpbGxHcmFkaWVu
dC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fc3Rh
dGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwogICAgICAgICBRUGFp
bnRlciogc2hhZG93UGFpbnRlciA9IG1fZGF0YS0+aGFzU2hhZG93KCkgPyBzaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIocCwgbm9ybWFsaXplZFJlY3QpIDogMDsKICAgICAgICAgaWYgKHNoYWRvd1Bh
aW50ZXIpIHsKICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRS
ZWN0LCBicnVzaCk7CkBAIC05NjAsMTAgKzk1NywxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TaGFkb3coCiAgICAgLy8gUXQgZG9lc24ndCBzdXBwb3J0IHNoYWRvd3MgbmF0
aXZlbHksIHRoZXkgYXJlIGRyYXduIG1hbnVhbGx5IGluIHRoZSBkcmF3KgogICAgIC8vIGZ1bmN0
aW9ucwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykg
eworICAgIGlmIChtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CiAgICAgICAgIC8v
IE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dAogICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2lu
Y2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICBtX2Nv
bW1vbi0+c3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUu
aGVpZ2h0KCkpOworICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzaXpl
LndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKICAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250
ZXh0U2hhZG93KGNvbG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWln
aHQoKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNo
YWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNr
aWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFw
aGljc0NvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJHTEVTMkNhbnZhcy5oIgogI2luY2x1ZGUgIkdyYWRp
ZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgpAQCAt
MjE5LDE3ICsyMTgsMTUgQEAgdm9pZCBhZGRDb3JuZXJBcmMoU2tQYXRoKiBwYXRoLCBjb25zdCBT
awogCiAvLyBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgcG9pbnRlciB0byBjcmVhdGUg
YSBncmFwaGljcyBjb250ZXh0IHRoYXQgaGFzCiAvLyBubyBwYWludGluZy4KLUdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBnYykKLSAgICA6
IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShu
ZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGdjKSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGdjKQogeworICAgIG1f
ZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoZ2MpOwogICAgIHNldFBh
aW50aW5nRGlzYWJsZWQoIWdjIHx8ICFwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkpOwogfQog
Ci1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiAgICAgZGVsZXRlIG1fZGF0YTsKLSAgICB0aGlzLT5k
ZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiB9CiAKIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CkBA
IC03NDIsNyArNzM5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBh
dAogCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKIAot
ICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fY29tbW9uLT5zdGF0ZTsK
KyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIHBh
dGguc2V0RmlsbFR5cGUoc3RhdGUuZmlsbFJ1bGUgPT0gUlVMRV9FVkVOT0REID8KICAgICAgICAg
U2tQYXRoOjprRXZlbk9kZF9GaWxsVHlwZSA6IFNrUGF0aDo6a1dpbmRpbmdfRmlsbFR5cGUpOwog
CkBAIC0xMDcxLDcgKzEwNjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aGFkb3coCiAKICAgICAvLyBUT0RPKHRjKTogVGhpcyBzdGlsbCBkb2VzIG5vdCBhZGRyZXNzIHRo
ZSBpc3N1ZSB0aGF0IHNoYWRvd3MKICAgICAvLyB3aXRoaW4gY2FudmFzIGVsZW1lbnRzIHNob3Vs
ZCBpZ25vcmUgdHJhbnNmb3Jtcy4KLSAgICBpZiAobV9jb21tb24tPnN0YXRlLnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKSAgeworICAgIGlmIChtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KSAgewogICAgICAgICAvLyBDdXJyZW50bHkgb25seSB0aGUgR3JhcGhpY3NDb250ZXh0IGFzc29j
aWF0ZWQgd2l0aCB0aGUKICAgICAgICAgLy8gQ2FudmFzUmVuZGVyaW5nQ29udGV4dCBmb3IgSFRN
TENhbnZhc0VsZW1lbnQgaGF2ZSBzaGFkb3dzIGlnbm9yZQogICAgICAgICAvLyBUcmFuc2Zvcm1z
LiBTbyB3aXRoIHRoaXMgZmxhZyBzZXQsIHdlIGtub3cgdGhpcyBzdGF0ZSBpcyBhc3NvY2lhdGVk
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0Q0dXaW4uY3BwCShyZXZpc2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjEsMTAgKzYxLDkgQEAgc3RhdGljIENHQ29udGV4dFJlZiBDR0NvbnRleHRXaXRoSERDKEhEQwog
ICAgIHJldHVybiBjb250ZXh0OwogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dChIREMgaGRjLCBib29sIGhhc0FscGhhKQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3ND
b250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUoQ0dDb250ZXh0V2l0aEhEQyhoZGMsIGhhc0FscGhhKSkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiB7CisgICAgbV9k
YXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShDR0NvbnRleHRXaXRoSERD
KGhkYywgaGFzQWxwaGEpKTsKICAgICBDR0NvbnRleHRSZWxlYXNlKG1fZGF0YS0+bV9jZ0NvbnRl
eHQuZ2V0KCkpOwogICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7CiAgICAgc2V0UGFpbnRpbmdEaXNh
YmxlZCghbV9kYXRhLT5tX2NnQ29udGV4dCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCShyZXZp
c2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dENhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTAgKzY0LDEwIEBAIHN0YXRp
YyBjYWlyb190KiBjcmVhdGVDYWlyb0NvbnRleHRXaXRoSEQKICAgICByZXR1cm4gY29udGV4dDsK
IH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGRjLCBib29sIGhhc0Fs
cGhhKQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAg
ICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBkYywgYm9vbCBoYXNBbHBoYSkKIHsKKyAgICBt
X2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOworCiAgICAgaWYgKGRj
KSB7CiAgICAgICAgIG1fZGF0YS0+Y3IgPSBjcmVhdGVDYWlyb0NvbnRleHRXaXRoSERDKGRjLCBo
YXNBbHBoYSk7CiAgICAgICAgIG1fZGF0YS0+bV9oZGMgPSBkYzsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0Uu
Y3BwCShyZXZpc2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
R3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBA
CiAjaW5jbHVkZSAiR0RJRXh0cmFzLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNs
dWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVBhdGhXaW5DRS5oIgpAQCAtNTgwLDE1ICs1NzksMTMgQEAgcHJpdmF0ZToKIH07CiAK
IAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqIGRjKQotOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0sIG1f
ZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGRjKSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGRjKQogewor
ICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoZGMpOwogfQog
Ci1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0gICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZh
dGUobV9jb21tb24pOwogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKQEAgLTEzMTYsOCArMTMxMyw4
IEBAIENvbG9yIGdyYWRpZW50QXZlcmFnZUNvbG9yKGNvbnN0IEdyYWRpZW4KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgQ29sb3IgYyA9
IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQKLSAgICAgICAgPyBncmFkaWVudEF2ZXJhZ2VD
b2xvcihtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKQorICAgIENvbG9yIGMgPSBt
X3N0YXRlLmZpbGxHcmFkaWVudAorICAgICAgICA/IGdyYWRpZW50QXZlcmFnZUNvbG9yKG1fc3Rh
dGUuZmlsbEdyYWRpZW50LmdldCgpKQogICAgICAgICA6IGZpbGxDb2xvcigpOwogCiAgICAgaWYg
KCFjLmFscGhhKCkgfHwgIW1fZGF0YS0+bV9vcGFjaXR5KQpAQCAtMTQ4Nyw4ICsxNDg0LDggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogewogICAgIHNhdmVQbGF0
Zm9ybVN0YXRlKCk7CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCkKLSAg
ICAgICAgZmlsbFJlY3QocmVjdCwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7
CisgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KQorICAgICAgICBmaWxsUmVjdChyZWN0LCBt
X3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7CiAgICAgZWxzZQogICAgICAgICBmaWxsUmVjdChy
ZWN0LCBmaWxsQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCShyZXZp
c2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250
ZXh0V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTEgKzExMiwxMSBAQCBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljCiB9CiAKIAotR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi0gICAgOiBt
X2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgLCBtX2RhdGEobmV3
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSkKLXsgICAgCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorewor
ICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiAgICAgc2V0
UGFpbnRpbmdEaXNhYmxlZCghY29udGV4dCk7CisKICAgICBpZiAoY29udGV4dCkgewogICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUu
CiAgICAgICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKQEAgLTEyOSw5ICsxMjksOCBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29u
dGV4dChQbGF0Zm9yCiAjZW5kaWYKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250
ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQogewotICAgIGRl
c3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKICAgICBkZWxldGUgbV9kYXRh
OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76191</attachid>
            <date>2010-12-10 07:01:46 -0800</date>
            <delta_ts>2010-12-10 07:24:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>mergeCommonAndData_v2.0.patch</filename>
            <type>text/plain</type>
            <size>56489</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzcyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI1IEBACisyMDEwLTEyLTEwICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBH
cmFwaGljc0NvbnRleHQ6IE1lcmdlIG1fY29tbW9uIGFuZCBtX2RhdGEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTE0CisKKyAgICAgICAgTW92ZSBk
YXRhIG1lbWJlcnMgZnJvbSBHcmFwaGljc0NvbnRleHRQcml2YXRlIGludG8gR3JhcGhpY3NDb250
ZXh0LiBTbyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybS5oCisgICAgICAgIGFuZCBtX2NvbW1vbiBi
ZWNhbWUgdW5uZWNlc3NhcnkuIFRoZXkgYXJlIHJlbW92ZWQuCisgICAgICAgIEFkZCB0d28gbWV0
aG9kcyB0byBHcmFwaGljc0NvbnRleHQ6IHBsYXRmb3JtSW5pdCgpIGFuZCBwbGF0Zm9ybURlc3Ry
b3koKSwgd2hpY2gKKyAgICAgICAgbWFrZSB0aGUgY29uc3RydWN0b3Igb2YgR3JhcGhpY3NDb250
ZXh0IGNsZWFyZXIuCisgICAgICAgIEJlc2lkZXMgYWRkIGEgZ2V0dGVyIHRvIHRoZSBwcml2YXRl
IEdyYXBoaWNzQ29udGV4dDo6bV9zdGF0ZSBtZW1iZXIsIGJlY2F1c2Ugc29tZSBpbmxpbmUKKyAg
ICAgICAgZnVuY3Rpb25zIGluIGNhaXJvIG5lZWQgaXQuCisKKyAgICAgICAgTm8gbmV3IHRlc3Qg
aXMgbmVlZGVkLCBiZWNhdXNlIHRoaXMgaXMgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VUaGlja25lc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpnZXRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQ29sb3JTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsR3JhZGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6dXBkYXRpbmdDb250cm9sVGludHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRVcGRhdGluZ0NvbnRyb2xUaW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBhaW50aW5nRGlzYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNldFBsYXRmb3JtRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQbGF0
Zm9ybVN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0aFNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsQ3VycmVudENhaXJvUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpzdHJv
a2VDdXJyZW50Q2Fpcm9QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZv
cm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmdldEFscGhhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRl
eHRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
SW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJv
eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9w
ZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkSW5u
ZXJSb3VuZGVkUmVjdENsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1E
ZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Jbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0Q2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFw
aGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bUluaXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4
dFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1J
bml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOgorCiAyMDEwLTEyLTEwICBKb2NlbHluIFR1cmNv
dHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
bm9ib2R5LCBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzkyMCw3ICszOTIwLDcgQEAKIAkJ
QThGNEZCOTYwQzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGNEZCOTUwQzE2OUU4NTAw
MkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwICovOyB9OwogCQlBOEY1QzBCODBGOTI4NUFD
MDA5OEUwNkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjVDMEI2MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5k
ZXJTVkdNb2RlbE9iamVjdC5oICovOyB9OwogCQlBOEY1QzBCOTBGOTI4NUFDMDA5OEUwNkIgLyog
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThGNUMwQjcwRjkyODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVs
T2JqZWN0LmNwcCAqLzsgfTsKLQkJQThGQTZFNUQwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RkE2RTVC
MEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi87IH07CisJCUE4RkE2RTVEMEU0Q0ZERUQw
MEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4RkE2RTVFMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAq
LzsgfTsKIAkJQTlDNkU0RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUxMEQ3NDVF
MDUwMDY0NDJFOSAvKiBET01NaW1lVHlwZS5jcHAgKi87IH07CiAJCUE5QzZFNEU0MEQ3NDVFMDUw
MDY0NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTlDNkU0RTIwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmgg
Ki87IH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwCShyZXZpc2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1
ZGUgIkJpZGlSZXNvbHZlci5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHZW5lcmF0
b3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTc0LDE0ICs3MywxNSBAQCBw
cml2YXRlOgogICAgIGludCBtX29mZnNldDsKIH07CiAKLUdyYXBoaWNzQ29udGV4dFByaXZhdGUq
IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpCitHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZv
cm1HcmFwaGljc0NvbnRleHQpCisgICAgOiBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNlKQog
ewotICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsKKyAgICBwbGF0Zm9ybUlu
aXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUoR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZGVs
ZXRlTWUpCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewotICAgIGRlbGV0
ZSBkZWxldGVNZTsKKyAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNhdmUoKQpAQCAtODksNyArODksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2
ZSgpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9jb21tb24tPnN0YWNrLmFwcGVuZChtX2NvbW1vbi0+c3RhdGUpOworICAgIG1fc3RhY2suYXBw
ZW5kKG1fc3RhdGUpOwogCiAgICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIH0KQEAgLTk5LDEyMCAr
OTksMTI1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9jb21tb24tPnN0YWNr
LmlzRW1wdHkoKSkgeworICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBMT0df
RVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1w
dHkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1vbi0+c3RhdGUgPSBtX2Nv
bW1vbi0+c3RhY2subGFzdCgpOwotICAgIG1fY29tbW9uLT5zdGFjay5yZW1vdmVMYXN0KCk7Cisg
ICAgbV9zdGF0ZSA9IG1fc3RhY2subGFzdCgpOworICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOwog
CiAgICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiB7Ci0gICAgbV9jb21tb24tPnN0
YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKKyAgICBtX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcyA9IHRoaWNrbmVzczsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyh0aGlja25l
c3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlU3R5bGUoY29uc3QgU3Ry
b2tlU3R5bGUmIHN0eWxlKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VTdHlsZSA9IHN0
eWxlOworICAgIG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsKICAgICBzZXRQbGF0Zm9ybVN0
cm9rZVN0eWxlKHN0eWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNv
bG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewotICAgIG1f
Y29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwotICAgIG1fY29tbW9uLT5zdGF0ZS5z
dHJva2VDb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
R3JhZGllbnQuY2xlYXIoKTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5jbGVh
cigpOworICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKKyAgICBtX3N0YXRlLnN0cm9r
ZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuY2xl
YXIoKTsKKyAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uY2xlYXIoKTsKICAgICBzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7Ci0gICAgbV9jb21tb24tPnN0
YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Qmx1
ciA9IGJsdXI7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7CisgICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0g
Ymx1cjsKKyAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7CiAgICAgc2V0UGxhdGZvcm1T
aGFkb3cob2Zmc2V0LCBibHVyLCBjb2xvciwgY29sb3JTcGFjZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclNoYWRvdygpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd09m
ZnNldCA9IEZsb2F0U2l6ZSgpOwotICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dCbHVyID0gMDsK
LSAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOworICAgIG1fc3RhdGUu
c2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7CisgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsK
KyAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsKICAgICBjbGVhclBsYXRmb3JtU2hh
ZG93KCk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXplJiBv
ZmZzZXQsIGZsb2F0JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CiB7Ci0gICAgb2Zmc2V0ID0g
bV9jb21tb24tPnN0YXRlLnNoYWRvd09mZnNldDsKLSAgICBibHVyID0gbV9jb21tb24tPnN0YXRl
LnNoYWRvd0JsdXI7Ci0gICAgY29sb3IgPSBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Q29sb3I7Cisg
ICAgb2Zmc2V0ID0gbV9zdGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAgYmx1ciA9IG1fc3RhdGUuc2hh
ZG93Qmx1cjsKKyAgICBjb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CiAKICAgICByZXR1cm4g
Y29sb3IuaXNWYWxpZCgpICYmIGNvbG9yLmFscGhhKCkgJiYgKGJsdXIgfHwgb2Zmc2V0LndpZHRo
KCkgfHwgb2Zmc2V0LmhlaWdodCgpKTsKIH0KIAogZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VUaGlja25lc3MoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
VGhpY2tuZXNzOworICAgIHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzczsKIH0KIAogU3Ry
b2tlU3R5bGUgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VTdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VTdHlsZTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJv
a2VTdHlsZTsKIH0KIAogQ29sb3IgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VDb2xvcigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvcjsKKyAgICByZXR1cm4g
bV9zdGF0ZS5zdHJva2VDb2xvcjsKIH0KIAogQ29sb3JTcGFjZSBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUNvbG9yU3BhY2UoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ry
b2tlQ29sb3JTcGFjZTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJva2VDb2xvclNwYWNlOwogfQog
CiBXaW5kUnVsZSBHcmFwaGljc0NvbnRleHQ6OmZpbGxSdWxlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxSdWxl
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1
bGUpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7CisgICAgbV9z
dGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewot
ICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKLSAgICBtX2NvbW1vbi0+c3Rh
dGUuZmlsbENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxs
R3JhZGllbnQuY2xlYXIoKTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uY2xlYXIo
KTsKKyAgICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9yOworICAgIG1fc3RhdGUuZmlsbENvbG9y
U3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LmNsZWFyKCk7Cisg
ICAgbV9zdGF0ZS5maWxsUGF0dGVybi5jbGVhcigpOwogICAgIHNldFBsYXRmb3JtRmlsbENvbG9y
KGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAogQ29sb3IgR3JhcGhpY3NDb250ZXh0OjpmaWxsQ29s
b3IoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yOworICAg
IHJldHVybiBtX3N0YXRlLmZpbGxDb2xvcjsKIH0KIAogQ29sb3JTcGFjZSBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxDb2xvclNwYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRl
LmZpbGxDb2xvclNwYWNlOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxDb2xvclNwYWNlOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgYikKIHsKLSAg
ICBtX2NvbW1vbi0+c3RhdGUuc2hvdWxkQW50aWFsaWFzID0gYjsKKyAgICBtX3N0YXRlLnNob3Vs
ZEFudGlhbGlhcyA9IGI7CiAgICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYik7CiB9CiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMoKSBjb25zdAogewotICAgIHJl
dHVybiBtX2NvbW1vbi0+c3RhdGUuc2hvdWxkQW50aWFsaWFzOworICAgIHJldHVybiBtX3N0YXRl
LnNob3VsZEFudGlhbGlhczsKK30KKworY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIEdyYXBo
aWNzQ29udGV4dDo6c3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+
IHBhdHRlcm4pCkBAIC0yMjIsOSArMjI3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0
cm9rZVBhdHRlcm4oUAogICAgICAgICBzZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY29tbW9uLT5z
dGF0ZS5zdHJva2VHcmFkaWVudC5jbGVhcigpOwotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQ
YXR0ZXJuID0gcGF0dGVybjsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4obV9jb21tb24t
PnN0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQu
Y2xlYXIoKTsKKyAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBwYXR0ZXJuOworICAgIHNldFBs
YXRmb3JtU3Ryb2tlUGF0dGVybihtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4oUGFzc1JlZlB0cjxQYXR0ZXJuPiBw
YXR0ZXJuKQpAQCAtMjM0LDkgKzIzOSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxs
UGF0dGVybihQYXMKICAgICAgICAgc2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFj
ZURldmljZVJHQik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9jb21tb24tPnN0YXRl
LmZpbGxHcmFkaWVudC5jbGVhcigpOwotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybiA9
IHBhdHRlcm47Ci0gICAgc2V0UGxhdGZvcm1GaWxsUGF0dGVybihtX2NvbW1vbi0+c3RhdGUuZmls
bFBhdHRlcm4uZ2V0KCkpOworICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LmNsZWFyKCk7CisgICAg
bV9zdGF0ZS5maWxsUGF0dGVybiA9IHBhdHRlcm47CisgICAgc2V0UGxhdGZvcm1GaWxsUGF0dGVy
bihtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZUdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50KQpAQCAtMjQ2
LDkgKzI1MSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudCgKICAg
ICAgICAgc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGll
bnQgPSBncmFkaWVudDsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5jbGVhcigp
OwotICAgIHNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQobV9jb21tb24tPnN0YXRlLnN0cm9rZUdy
YWRpZW50LmdldCgpKTsKKyAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gZ3JhZGllbnQ7Cisg
ICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmNsZWFyKCk7CisgICAgc2V0UGxhdGZvcm1TdHJva2VH
cmFkaWVudChtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCkK
QEAgLTI1OCw1NSArMjYzLDU1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGll
bnQoUGEKICAgICAgICAgc2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmlj
ZVJHQik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxH
cmFkaWVudCA9IGdyYWRpZW50OwotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi5jbGVh
cigpOwotICAgIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50KG1fY29tbW9uLT5zdGF0ZS5maWxsR3Jh
ZGllbnQuZ2V0KCkpOworICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gZ3JhZGllbnQ7CisgICAg
bV9zdGF0ZS5maWxsUGF0dGVybi5jbGVhcigpOworICAgIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50
KG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKIH0KIAogR3JhZGllbnQqIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbEdyYWRpZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRl
LmZpbGxHcmFkaWVudC5nZXQoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0
KCk7CiB9CiAKIEdyYWRpZW50KiBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUdyYWRpZW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpOwor
ICAgIHJldHVybiBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpOwogfQogCiBQYXR0ZXJuKiBH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21t
b24tPnN0YXRlLmZpbGxQYXR0ZXJuLmdldCgpOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxQYXR0
ZXJuLmdldCgpOwogfQogCiBQYXR0ZXJuKiBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4o
KSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQo
KTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBpZ25vcmVUcmFu
c2Zvcm1zKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9
IGlnbm9yZVRyYW5zZm9ybXM7CisgICAgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9
IGlnbm9yZVRyYW5zZm9ybXM7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0Ojp1cGRhdGluZ0Nv
bnRyb2xUaW50cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5tX3VwZGF0aW5nQ29u
dHJvbFRpbnRzOworICAgIHJldHVybiBtX3VwZGF0aW5nQ29udHJvbFRpbnRzOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0VXBkYXRpbmdDb250cm9sVGludHMoYm9vbCBiKQogewogICAg
IHNldFBhaW50aW5nRGlzYWJsZWQoYik7Ci0gICAgbV9jb21tb24tPm1fdXBkYXRpbmdDb250cm9s
VGludHMgPSBiOworICAgIG1fdXBkYXRpbmdDb250cm9sVGludHMgPSBiOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGFpbnRpbmdEaXNhYmxlZChib29sIGYpCiB7Ci0gICAgbV9jb21t
b24tPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQgPSBmOworICAgIG1fc3RhdGUucGFpbnRpbmdEaXNh
YmxlZCA9IGY7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQ7Cisg
ICAgcmV0dXJuIG1fc3RhdGUucGFpbnRpbmdEaXNhYmxlZDsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBjb25zdCBJbnRQb2ludCYgcCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC01MjgsMTIgKzUz
MywxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoCiAKIFRleHRE
cmF3aW5nTW9kZUZsYWdzIEdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnRleHREcmF3aW5nTW9kZTsKKyAgICByZXR1
cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKIHsKLSAgICBtX2Nv
bW1vbi0+c3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9kZTsKKyAgICBtX3N0YXRlLnRleHREcmF3
aW5nTW9kZSA9IG1vZGU7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKG1vZGUpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA3MzM2MCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDkgKzMwLDExIEBACiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1
ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYWRp
ZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KQEAgLTExNywxMiArMTE5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IERyYXdpbmdCdWZmZXI7CiAgICAgY2xhc3MgRm9udDsKICAgICBjbGFzcyBHZW5lcmF0b3I7Ci0g
ICAgY2xhc3MgR3JhZGllbnQ7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOwotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFByaXZhdGU7CiAgICAgY2xhc3MgSW1hZ2VC
dWZmZXI7CiAgICAgY2xhc3MgS1VSTDsKLSAgICBjbGFzcyBQYXR0ZXJuOwogICAgIGNsYXNzIFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFRleHRSdW47CiAKQEAgLTE0OSw2ICsx
NDgsNTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRlcnBvbGF0aW9uSGlnaAog
ICAgIH07CiAKKyAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgeworICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZSgpCisgICAgICAgICAgICA6IHN0cm9rZVRoaWNrbmVzcygwKQorICAg
ICAgICAgICAgLCBzaGFkb3dCbHVyKDApCisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgICAg
ICAsIGdsb2JhbEFscGhhKDEpCisjZW5kaWYKKyAgICAgICAgICAgICwgdGV4dERyYXdpbmdNb2Rl
KFRleHRNb2RlRmlsbCkKKyAgICAgICAgICAgICwgc3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKQor
ICAgICAgICAgICAgLCBmaWxsQ29sb3IoQ29sb3I6OmJsYWNrKQorICAgICAgICAgICAgLCBzdHJv
a2VTdHlsZShTb2xpZFN0cm9rZSkKKyAgICAgICAgICAgICwgZmlsbFJ1bGUoUlVMRV9OT05aRVJP
KQorICAgICAgICAgICAgLCBzdHJva2VDb2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0IpCisg
ICAgICAgICAgICAsIGZpbGxDb2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0IpCisgICAgICAg
ICAgICAsIHNob3VsZEFudGlhbGlhcyh0cnVlKQorICAgICAgICAgICAgLCBwYWludGluZ0Rpc2Fi
bGVkKGZhbHNlKQorICAgICAgICAgICAgLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VH
cmFkaWVudDsKKyAgICAgICAgUmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47CisgICAgICAg
IAorICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsKKyAgICAgICAgUmVmUHRy
PFBhdHRlcm4+IGZpbGxQYXR0ZXJuOworCisgICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7
CisKKyAgICAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzOworICAgICAgICBmbG9hdCBzaGFkb3dC
bHVyOworCisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgIGZsb2F0IGdsb2JhbEFscGhhOwor
I2VuZGlmCisgICAgICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZTsKKwor
ICAgICAgICBDb2xvciBzdHJva2VDb2xvcjsKKyAgICAgICAgQ29sb3IgZmlsbENvbG9yOworICAg
ICAgICBDb2xvciBzaGFkb3dDb2xvcjsKKworICAgICAgICBTdHJva2VTdHlsZSBzdHJva2VTdHls
ZTsKKyAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGU7CisKKyAgICAgICAgQ29sb3JTcGFjZSBzdHJv
a2VDb2xvclNwYWNlOworICAgICAgICBDb2xvclNwYWNlIGZpbGxDb2xvclNwYWNlOworCisgICAg
ICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzOworICAgICAgICBib29sIHBhaW50aW5nRGlzYWJsZWQ7
CisgICAgICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgfTsKKwogICAgIGNs
YXNzIEdyYXBoaWNzQ29udGV4dCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgog
ICAgICAgICBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsKQEAgLTE4
OSw2ICsyMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0U2hvdWxk
QW50aWFsaWFzKGJvb2wpOwogICAgICAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0Owog
CisgICAgICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0OworCiAj
aWYgUExBVEZPUk0oQ0cpCiAgICAgICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAgICAg
ICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOwpAQCAtNDE1LDYgKzQ2NywxMyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgbWFya0RpcnR5UmVjdChjb25zdCBJbnRSZWN0Jik7
IC8vIEhpbnRzIHRoYXQgYSBwb3J0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlIGlzIGRpcnR5Lgog
CiAgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqKTsKKyAgICAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKKworI2VsaWYgUExB
VEZPUk0oV0lOKQorICAgICAgICB2b2lkIHBsYXRmb3JtSW5pdChIREMsIGJvb2wgaGFzQWxwaGEg
PSBmYWxzZSk7CisjZW5kaWYKKwogICAgICAgICB2b2lkIHNhdmVQbGF0Zm9ybVN0YXRlKCk7CiAg
ICAgICAgIHZvaWQgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKIApAQCAtNDM4LDExICs0OTcsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyB2b2lkIGFkanVzdExpbmVU
b1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0
cm9rZVdpZHRoLCBjb25zdCBTdHJva2VTdHlsZSYpOwogCi0gICAgICAgIHN0YXRpYyBHcmFwaGlj
c0NvbnRleHRQcml2YXRlKiBjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCk7Ci0gICAgICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKEdyYXBoaWNzQ29udGV4
dFByaXZhdGUqKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2Rh
dGE7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogbV9jb21tb247Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9kYXRhOyAvLyBEZXByZWNhdGVkOyBt
X2NvbW1tb24gY2FuIGp1c3QgYmUgZG93bmNhc3RlZC4gVG8gYmUgcmVtb3ZlZC4KKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKKyAgICAgICAgVmVjdG9yPEdyYXBoaWNzQ29u
dGV4dFN0YXRlPiBtX3N0YWNrOworICAgICAgICBib29sIG1fdXBkYXRpbmdDb250cm9sVGludHM7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgJKHJldmlzaW9uIDcz
NDMyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZV9o
Ci0jZGVmaW5lIEdyYXBoaWNzQ29udGV4dFByaXZhdGVfaAotCi0jaW5jbHVkZSAiR3JhZGllbnQu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKCkKLSAgICAgICAgICAgIDogc3Ryb2tlVGhp
Y2tuZXNzKDApCi0gICAgICAgICAgICAsIHNoYWRvd0JsdXIoMCkKLSNpZiBQTEFURk9STShDQUlS
TykKLSAgICAgICAgICAgICwgZ2xvYmFsQWxwaGEoMSkKLSNlbmRpZgotICAgICAgICAgICAgLCB0
ZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVGaWxsKQotICAgICAgICAgICAgLCBzdHJva2VDb2xvcihD
b2xvcjo6YmxhY2spCi0gICAgICAgICAgICAsIGZpbGxDb2xvcihDb2xvcjo6YmxhY2spCi0gICAg
ICAgICAgICAsIHN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKQotICAgICAgICAgICAgLCBmaWxsUnVs
ZShSVUxFX05PTlpFUk8pCi0gICAgICAgICAgICAsIHN0cm9rZUNvbG9yU3BhY2UoQ29sb3JTcGFj
ZURldmljZVJHQikKLSAgICAgICAgICAgICwgZmlsbENvbG9yU3BhY2UoQ29sb3JTcGFjZURldmlj
ZVJHQikKLSAgICAgICAgICAgICwgc2hvdWxkQW50aWFsaWFzKHRydWUpCi0gICAgICAgICAgICAs
IHBhaW50aW5nRGlzYWJsZWQoZmFsc2UpCi0gICAgICAgICAgICAsIHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8R3Jh
ZGllbnQ+IHN0cm9rZUdyYWRpZW50OwotICAgICAgICBSZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0
dGVybjsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50Owot
ICAgICAgICBSZWZQdHI8UGF0dGVybj4gZmlsbFBhdHRlcm47Ci0KLSAgICAgICAgRmxvYXRTaXpl
IHNoYWRvd09mZnNldDsKLQotICAgICAgICBmbG9hdCBzdHJva2VUaGlja25lc3M7Ci0gICAgICAg
IGZsb2F0IHNoYWRvd0JsdXI7Ci0KLSNpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAgZmxvYXQg
Z2xvYmFsQWxwaGE7Ci0jZW5kaWYKLSAgICAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERy
YXdpbmdNb2RlOwotCi0gICAgICAgIENvbG9yIHN0cm9rZUNvbG9yOwotICAgICAgICBDb2xvciBm
aWxsQ29sb3I7Ci0gICAgICAgIENvbG9yIHNoYWRvd0NvbG9yOwotCi0gICAgICAgIFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlOwotICAgICAgICBXaW5kUnVsZSBmaWxsUnVsZTsKLQotICAgICAgICBD
b2xvclNwYWNlIHN0cm9rZUNvbG9yU3BhY2U7Ci0gICAgICAgIENvbG9yU3BhY2UgZmlsbENvbG9y
U3BhY2U7Ci0KLSAgICAgICAgYm9vbCBzaG91bGRBbnRpYWxpYXM7Ci0gICAgICAgIGJvb2wgcGFp
bnRpbmdEaXNhYmxlZDsKLSAgICAgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKLSAg
ICB9OwotCi0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSA6IHB1YmxpYyBOb25jb3B5
YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICBHcmFwaGljc0NvbnRleHRQcml2YXRlKCkKLSAg
ICAgICAgICAgIDogbV91cGRhdGluZ0NvbnRyb2xUaW50cyhmYWxzZSkKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgc3RhdGU7Ci0gICAgICAgIFZl
Y3RvcjxHcmFwaGljc0NvbnRleHRTdGF0ZT4gc3RhY2s7Ci0gICAgICAgIGJvb2wgbV91cGRhdGlu
Z0NvbnRyb2xUaW50czsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBHcmFwaGljc0NvbnRleHRQcml2YXRlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZp
c2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZS5oIgogI2luY2x1ZGUgIk93blB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC02OCw0MiArNjcsNDYgQEAgdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIHZvaWQg
c2V0UGxhdGZvcm1GaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY2Fpcm9fdCogY3IsIEdy
YXBoaWNzQ29udGV4dFByaXZhdGUqIGdjcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQbGF0Zm9y
bUZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjYWlyb190KiBjcikKIHsKICAgICBjYWly
b19wYXR0ZXJuX3QqIHBhdHRlcm4gPSAwOwogICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGlmIChn
Y3AtPnN0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgCisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlID0gY29udGV4dC0+c3RhdGUoKTsKKyAgICBpZiAoc3RhdGUuZmlsbFBhdHRl
cm4pIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKLSAgICAgICAgcGF0dGVybiA9
IGdjcC0+c3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpOwor
ICAgICAgICBwYXR0ZXJuID0gc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihhZmZpbmUpOwogICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKLSAgICB9
IGVsc2UgaWYgKGdjcC0+c3RhdGUuZmlsbEdyYWRpZW50KQotICAgICAgICBjYWlyb19zZXRfc291
cmNlKGNyLCBnY3AtPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAg
ICB9IGVsc2UgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCkKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJj
ZShjciwgc3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwogICAgIGVsc2UK
ICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29udGV4dC0+ZmlsbENvbG9yKCkp
OwogICAgIGNhaXJvX2NsaXBfcHJlc2VydmUoY3IpOwotICAgIGNhaXJvX3BhaW50X3dpdGhfYWxw
aGEoY3IsIGdjcC0+c3RhdGUuZ2xvYmFsQWxwaGEpOworICAgIGNhaXJvX3BhaW50X3dpdGhfYWxw
aGEoY3IsIHN0YXRlLmdsb2JhbEFscGhhKTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKICAgICBp
ZiAocGF0dGVybikKICAgICAgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHBhdHRlcm4pOwogfQog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGxhdGZvcm1TdHJva2UoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjYWlyb190KiBjciwgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwKQorc3RhdGlj
IGlubGluZSB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y2Fpcm9fdCogY3IpCiB7CiAgICAgY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuID0gMDsKICAgICBj
YWlyb19zYXZlKGNyKTsKLSAgICBpZiAoZ2NwLT5zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CisgICAg
CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gY29udGV4dC0+c3RhdGUo
KTsKKyAgICBpZiAoc3RhdGUuc3Ryb2tlUGF0dGVybikgewogICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gYWZmaW5lOwotICAgICAgICBwYXR0ZXJuID0gZ2NwLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLT5j
cmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKTsKKyAgICAgICAgcGF0dGVybiA9IHN0YXRlLnN0
cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpOwogICAgICAgICBjYWly
b19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKLSAgICB9IGVsc2UgaWYgKGdjcC0+c3RhdGUuc3Ry
b2tlR3JhZGllbnQpCi0gICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIGdjcC0+c3RhdGUuc3Ry
b2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgfSBlbHNlIGlmIChzdGF0ZS5z
dHJva2VHcmFkaWVudCkKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgc3RhdGUuc3Ryb2tl
R3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAgZWxzZSAgewotICAgICAgICBDb2xv
ciBzdHJva2VDb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29udGV4dC0+c3Ryb2tlQ29s
b3IoKS5yZ2IoKSwgY29udGV4dC0+c3Ryb2tlQ29sb3IoKS5hbHBoYSgpIC8gMjU1LmYgKiBnY3At
PnN0YXRlLmdsb2JhbEFscGhhKTsKKyAgICAgICAgQ29sb3Igc3Ryb2tlQ29sb3IgPSBjb2xvcldp
dGhPdmVycmlkZUFscGhhKGNvbnRleHQtPnN0cm9rZUNvbG9yKCkucmdiKCksIGNvbnRleHQtPnN0
cm9rZUNvbG9yKCkuYWxwaGEoKSAvIDI1NS5mICogc3RhdGUuZ2xvYmFsQWxwaGEpOwogICAgICAg
ICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBzdHJva2VDb2xvcik7CiAgICAgfQotICAgIGlm
IChnY3AtPnN0YXRlLmdsb2JhbEFscGhhIDwgMS4wZiAmJiAoZ2NwLT5zdGF0ZS5zdHJva2VQYXR0
ZXJuIHx8IGdjcC0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpKSB7CisgICAgaWYgKHN0YXRlLmdsb2Jh
bEFscGhhIDwgMS4wZiAmJiAoc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBzdGF0ZS5zdHJva2VHcmFk
aWVudCkpIHsKICAgICAgICAgY2Fpcm9fcHVzaF9ncm91cChjcik7Ci0gICAgICAgIGNhaXJvX3Bh
aW50X3dpdGhfYWxwaGEoY3IsIGdjcC0+c3RhdGUuZ2xvYmFsQWxwaGEpOworICAgICAgICBjYWly
b19wYWludF93aXRoX2FscGhhKGNyLCBzdGF0ZS5nbG9iYWxBbHBoYSk7CiAgICAgICAgIGNhaXJv
X3BvcF9ncm91cF90b19zb3VyY2UoY3IpOwogICAgIH0KICAgICBjYWlyb19zdHJva2VfcHJlc2Vy
dmUoY3IpOwpAQCAtMTM1LDcgKzEzOCw3IEBAIGVudW0gUGF0aERyYXdpbmdTdHlsZSB7IAogICAg
IEZpbGxBbmRTdHJva2UgPSBGaWxsICsgU3Ryb2tlCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQg
ZHJhd1BhdGhTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQ
cml2YXRlKiBjb250ZXh0UHJpdmF0ZSwgUGF0aERyYXdpbmdTdHlsZSBkcmF3aW5nU3R5bGUpCitz
dGF0aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBQYXRoRHJhd2luZ1N0eWxlIGRyYXdpbmdTdHlsZSkKIHsKICAgICBDb250ZXh0U2hhZG93KiBz
aGFkb3cgPSBjb250ZXh0LT5jb250ZXh0U2hhZG93KCk7CiAgICAgQVNTRVJUKHNoYWRvdyk7CkBA
IC0xNzEsNDEgKzE3NCwzOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3Jh
cGhpCiAgICAgY2Fpcm9fYXBwZW5kX3BhdGgoc2hhZG93Q29udGV4dCwgcGF0aCk7CiAKICAgICBp
ZiAoZHJhd2luZ1N0eWxlICYgRmlsbCkKLSAgICAgICAgc2V0UGxhdGZvcm1GaWxsKGNvbnRleHQs
IHNoYWRvd0NvbnRleHQsIGNvbnRleHRQcml2YXRlKTsKKyAgICAgICAgc2V0UGxhdGZvcm1GaWxs
KGNvbnRleHQsIHNoYWRvd0NvbnRleHQpOwogICAgIGlmIChkcmF3aW5nU3R5bGUgJiBTdHJva2Up
Ci0gICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIHNoYWRvd0NvbnRleHQsIGNvbnRl
eHRQcml2YXRlKTsKKyAgICAgICAgc2V0UGxhdGZvcm1TdHJva2UoY29udGV4dCwgc2hhZG93Q29u
dGV4dCk7CiAKICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGNhaXJvQ29udGV4dCk7CiB9CiAK
LXN0YXRpYyB2b2lkIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwLCBjYWlyb190KiBjYWlyb0NvbnRleHQpCitz
dGF0aWMgdm9pZCBmaWxsQ3VycmVudENhaXJvUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKIHsKICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNhaXJv
Q29udGV4dCwgY29udGV4dC0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxM
X1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7Ci0gICAgZHJhd1BhdGhT
aGFkb3coY29udGV4dCwgZ2NwLCBGaWxsKTsKKyAgICBkcmF3UGF0aFNoYWRvdyhjb250ZXh0LCBG
aWxsKTsKIAotICAgIHNldFBsYXRmb3JtRmlsbChjb250ZXh0LCBjYWlyb0NvbnRleHQsIGdjcCk7
CisgICAgc2V0UGxhdGZvcm1GaWxsKGNvbnRleHQsIGNhaXJvQ29udGV4dCk7CiAgICAgY2Fpcm9f
bmV3X3BhdGgoY2Fpcm9Db250ZXh0KTsKIH0KIAotc3RhdGljIHZvaWQgc3Ryb2tlQ3VycmVudENh
aXJvUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFByaXZhdGUq
IGdjcCwgY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQorc3RhdGljIHZvaWQgc3Ryb2tlQ3VycmVudENh
aXJvUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsICBjYWlyb190KiBjYWlyb0NvbnRleHQp
CiB7Ci0gICAgZHJhd1BhdGhTaGFkb3coY29udGV4dCwgZ2NwLCBTdHJva2UpOwotICAgIHNldFBs
YXRmb3JtU3Ryb2tlKGNvbnRleHQsIGNhaXJvQ29udGV4dCwgZ2NwKTsKKyAgICBkcmF3UGF0aFNo
YWRvdyhjb250ZXh0LCBTdHJva2UpOworICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIGNh
aXJvQ29udGV4dCk7CiAgICAgY2Fpcm9fbmV3X3BhdGgoY2Fpcm9Db250ZXh0KTsKIH0KIAotR3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNy
KQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwg
bV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjcikKIHsKKyAg
ICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwogICAgIG1fZGF0
YS0+Y3IgPSBjYWlyb19yZWZlcmVuY2UoY3IpOwogICAgIG1fZGF0YS0+c3luY0NvbnRleHQoY3Ip
OwogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNyKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+
R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3ko
KQogewotICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKICAgICBk
ZWxldGUgbV9kYXRhOwogfQogCkBAIC01MzEsNyArNTMyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwog
ICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4
dCgpKTsKLSAgICBmaWxsQ3VycmVudENhaXJvUGF0aCh0aGlzLCBtX2NvbW1vbiwgY3IpOworICAg
IGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIGNyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTU0MSw3ICs1NDIsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAKICAgICBjYWlyb190KiBjciA9
IG1fZGF0YS0+Y3I7CiAgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3Jt
UGF0aCgpLT5jb250ZXh0KCkpOwotICAgIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9j
b21tb24sIGNyKTsKKyAgICBzdHJva2VDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIGNyKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAg
LTU1Miw3ICs1NTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
CiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwogICAgIGNhaXJvX3NhdmUoY3IpOwogICAg
IGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpOwotICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIG1fY29tbW9uLCBj
cik7CisgICAgZmlsbEN1cnJlbnRDYWlyb1BhdGgodGhpcywgY3IpOwogICAgIGNhaXJvX3Jlc3Rv
cmUoY3IpOwogfQogCkBAIC04MjksMTAgKzgzMCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YWRkSW5uZXJSb3VuZGVkUmVjCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFk
b3coRmxvYXRTaXplIGNvbnN0JiBzaXplLCBmbG9hdCBibHVyLCBDb2xvciBjb25zdCYgY29sb3Is
IENvbG9yU3BhY2UpCiB7CiAgICAgLy8gQ2Fpcm8gZG9lc24ndCBzdXBwb3J0IHNoYWRvd3MgbmF0
aXZlbHksIHRoZXkgYXJlIGRyYXduIG1hbnVhbGx5IGluIHRoZSBkcmF3KiBmdW5jdGlvbnMKLSAg
ICBpZiAobV9jb21tb24tPnN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgaWYg
KG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKICAgICAgICAgLy8gTWVhbmluZyB0
aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0CiAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQg
SFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCi0gICAgICAgIG1fY29tbW9uLT5zdGF0
ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7
CisgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHNpemUud2lkdGgoKSwg
LXNpemUuaGVpZ2h0KCkpOwogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3co
Y29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwg
Ymx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwpAQCAtODk1LDcg
Kzg5Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEYKICAgICBj
YWlyb19zYXZlKGNyKTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICBjYWlyb19zZXRfbGluZV93aWR0
aChjciwgd2lkdGgpOwotICAgIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9jb21tb24s
IGNyKTsKKyAgICBzdHJva2VDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIGNyKTsKICAgICBjYWlyb19y
ZXN0b3JlKGNyKTsKIH0KIApAQCAtOTU0LDEyICs5NTUsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldE1pdGVyTGltaXQoZmxvYQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEo
ZmxvYXQgYWxwaGEpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLmdsb2JhbEFscGhhID0gYWxwaGE7
CisgICAgbV9zdGF0ZS5nbG9iYWxBbHBoYSA9IGFscGhhOwogfQogCiBmbG9hdCBHcmFwaGljc0Nv
bnRleHQ6OmdldEFscGhhKCkKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLmdsb2JhbEFs
cGhhOworICAgIHJldHVybiBtX3N0YXRlLmdsb2JhbEFscGhhOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYXRoLmgiCkBAIC0xMDcsMTAgKzEwNiw5IEBAIENH
Q29sb3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xvclNwYWNlUmVmKCkKICNlbmRpZgogfQogCi1HcmFw
aGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChDR0NvbnRleHRSZWYgY2dDb250ZXh0KQotICAg
IDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRh
KG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoY2dDb250ZXh0KSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKIHsKKyAg
ICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7
CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxlZCghY2dDb250ZXh0KTsKICAgICBpZiAoY2dDb250ZXh0
KSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRo
IG91ciBzdGF0ZS4KQEAgLTExOSw5ICsxMTcsOCBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dChDR0NvbnRlCiAgICAgfQogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0Nv
bnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0gICAg
ZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogICAgIGRlbGV0ZSBtX2Rh
dGE7CiB9CiAKQEAgLTQ1Miw3ICs0NDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlT
dHJva2VQYXR0ZXJuCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOwogCi0gICAgUmV0YWluUHRyPENHUGF0dGVyblJlZj4gcGxhdGZvcm1QYXR0ZXJuKEFk
b3B0Q0YsIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oZ2V0Q1RNKCkpKTsKKyAgICBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBwbGF0Zm9ybVBhdHRl
cm4oQWRvcHRDRiwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
Z2V0Q1RNKCkpKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwog
CkBAIC00NjcsNyArNDY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRl
cm4oKQogewogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsK
IAotICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IHBsYXRmb3JtUGF0dGVybihBZG9wdENGLCBt
X2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0o
KSkpOworICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IHBsYXRmb3JtUGF0dGVybihBZG9wdENG
LCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsK
ICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC01MTEsNyAr
NTA4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdAogICAgICAg
ICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fY29tbW9uLT5zdGF0
ZTsKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogCiAg
ICAgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCB8fCBzdGF0ZS5zdHJva2VHcmFkaWVudCkgewogICAg
ICAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBvcHRpbWl6ZWQgd2F5IHRvIGZpbGwgJiBzdHJva2Ug
YSBwYXRoIHVzaW5nIGdyYWRpZW50cwpAQCAtNTUyLDE5ICs1NDksMTkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250
ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkp
OwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAobV9z
dGF0ZS5maWxsR3JhZGllbnQpIHsKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0
KTsKICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKQogICAgICAgICAgICAg
Q0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBDR0Nv
bnRleHRDbGlwKGNvbnRleHQpOwotICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwg
bV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsK
LSAgICAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQodGhpcyk7CisgICAg
ICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudC0+Z3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBh
aW50KHRoaXMpOwogICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVy
bikKKyAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKICAgICAgICAgYXBwbHlGaWxsUGF0dGVy
bigpOwogICAgIGZpbGxQYXRoV2l0aEZpbGxSdWxlKGNvbnRleHQsIGZpbGxSdWxlKCkpOwogfQpA
QCAtNTc5LDE3ICs1NzYsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29u
c3QgUAogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQ
YXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogCi0gICAgaWYgKG1fY29tbW9uLT5z
dGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7
CiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAgIENHQ29udGV4
dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRD
bGlwKGNvbnRleHQpOwotICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9jb21t
b24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAg
ICAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KHRoaXMpOworICAgICAg
ICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+Z3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+
cGFpbnQodGhpcyk7CiAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZVBh
dHRlcm4pCisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlUGF0dGVybikKICAgICAgICAgYXBwbHlTdHJv
a2VQYXR0ZXJuKCk7CiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKIH0KQEAgLTYw
MSwxNiArNTk4LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8K
IAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBp
ZiAobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCkgeworICAgIGlmIChtX3N0YXRlLmZpbGxH
cmFkaWVudCkgewogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHJlY3QpOwotICAgICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRT
cGFjZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+
cGFpbnQodGhpcyk7CisgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRl
LmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgbV9zdGF0
ZS5maWxsR3JhZGllbnQtPnBhaW50KHRoaXMpOwogICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fY29tbW9u
LT5zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKICAgICAg
ICAgYXBwbHlGaWxsUGF0dGVybigpOwogICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJl
Y3QpOwogfQpAQCAtNzQwLDcgKzczNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVNoYWRvdygKICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMgPSBibHVyOwogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIW1fY29tbW9uLT5z
dGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgIGlmICghbV9zdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNl
Q1RNID0gd2tHZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogCiAgICAgICAgIENHRmxvYXQgQSA9
IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVz
ZXJUb0Jhc2VDVE0uYjsKQEAgLTgxNSwxOCArODEyLDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VSZWN0KGNvbnN0IEYKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50KSB7
CisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKICAgICAgICAgQ0dDb250ZXh0U2F2
ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgc2V0U3Ryb2tlVGhpY2tuZXNzKGxpbmVXaWR0aCk7
CiAgICAgICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4dCwgcik7CiAgICAgICAgIENHQ29udGV4
dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRD
bGlwKGNvbnRleHQpOwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBh
aW50KHRoaXMpOworICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCh0aGlzKTsK
ICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICBp
ZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQogICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsK
ICAgICBDR0NvbnRleHRTdHJva2VSZWN0V2l0aFdpZHRoKGNvbnRleHQsIHIsIGxpbmVXaWR0aCk7
CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4
dEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjIsMTYgKzYyLDE0IEBAIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
fkdyYXBoaWMKIHsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi0gICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGlj
c0NvbnRleHRQcml2YXRlKCkpCi0gICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZShjb250ZXh0KSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQo
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7CisgICAgbV9kYXRhID0gbmV3IEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjb250ZXh0KTsKICAgICBzZXRQYWludGluZ0Rp
c2FibGVkKCFjb250ZXh0KTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQogewotICAgIGRlc3Ry
b3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKICAgICBkZWxldGUgbV9kYXRhOwog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRl
eHRPcGVuVkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIlBhaW50ZXJPcGVuVkcuaCIKQEAgLTQ5LDE2ICs0OCwxNCBAQCBwdWJs
aWM6CiAgICAgfQogfTsKIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoU3VyZmFj
ZU9wZW5WRyogc3VyZmFjZSkKLSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFBy
aXZhdGUoKSkKLSAgICAsIG1fZGF0YShzdXJmYWNlID8gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZShzdXJmYWNlKSA6IDApCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1J
bml0KFN1cmZhY2VPcGVuVkcqIHN1cmZhY2UpCiB7CisgICAgbV9kYXRhID0gc3VyZmFjZSA/IG5l
dyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3VyZmFjZSkgOiAwOwogICAgIHNldFBh
aW50aW5nRGlzYWJsZWQoIXN1cmZhY2UpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGlj
c0NvbnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0g
ICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogICAgIGRlbGV0ZSBt
X2RhdGE7CiB9CiAKQEAgLTE0NCw3ICsxNDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgoY29uc3QgUGF0CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9kYXRhLT5kcmF3UGF0aChwYXRoLCBWR19GSUxMX1BBVEgsIG1fY29tbW9u
LT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRhLT5kcmF3UGF0aChwYXRoLCBWR19GSUxMX1BB
VEgsIG1fc3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMTUyLDcgKzE0OSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPmRyYXdQYXRoKHBhdGgsIFZHX1NUUk9LRV9Q
QVRILCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAgIG1fZGF0YS0+ZHJhd1BhdGgocGF0
aCwgVkdfU1RST0tFX1BBVEgsIG1fc3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMzgwLDcgKzM3Nyw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHAKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPmNsaXBQYXRo
KHBhdGgsIFBhaW50ZXJPcGVuVkc6OkludGVyc2VjdENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxs
UnVsZSk7CisgICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpJbnRlcnNl
Y3RDbGlwLCBtX3N0YXRlLmZpbGxSdWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNh
bnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM5Myw3ICszOTAsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVy
T3BlblZHOjpTdWJ0cmFjdENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9k
YXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpTdWJ0cmFjdENsaXAsIG1fc3RhdGUu
ZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzY2FsZUZhY3RvcnMpCkBAIC00MjcsNyArNDI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBPdXQoY29uc3QgSW50UgogCiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkUmVj
dChyZWN0KTsKLSAgICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OlN1YnRy
YWN0Q2xpcCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAgICBtX2RhdGEtPmNsaXBQYXRo
KHBhdGgsIFBhaW50ZXJPcGVuVkc6OlN1YnRyYWN0Q2xpcCwgbV9zdGF0ZS5maWxsUnVsZSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKQEAgLTQ1MCw3ICs0NDcs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiAgICAgcGF0aC5h
ZGRFbGxpcHNlKEZsb2F0UmVjdChyZWN0LngoKSArIHRoaWNrbmVzcywgcmVjdC55KCkgKyB0aGlj
a25lc3MsCiAgICAgICAgIHJlY3Qud2lkdGgoKSAtICh0aGlja25lc3MgKiAyKSwgcmVjdC5oZWln
aHQoKSAtICh0aGlja25lc3MgKiAyKSkpOwogCi0gICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQ
YWludGVyT3BlblZHOjpJbnRlcnNlY3RDbGlwLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOwor
ICAgIG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6SW50ZXJzZWN0Q2xpcCwg
bV9zdGF0ZS5maWxsUnVsZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm1hdGlvbikKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShyZXZpc2lv
biA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAiQ29udGV4
dFNoYWRvdy5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZvbnQu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIK
QEAgLTIyNCw3ICsyMjMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgcGxhdGZvcm1Db250ZXh0SXNP
d25lZDsKIH07CiAKLQogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUoUVBhaW50ZXIqIHAsIGNvbnN0IFFDb2xvciYgaW5pdGlhbFNv
bGlkQ29sb3IpCiAgICAgOiBhbnRpQWxpYXNpbmdGb3JSZWN0c0FuZExpbmVzKGZhbHNlKQogICAg
ICwgbGF5ZXJDb3VudCgwKQpAQCAtMjUzLDEwICsyNTEsMTAgQEAgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjp+R3JhcGhpYwogICAgIGRlbGV0ZSBkZXZpY2U7CiB9CiAKLUdyYXBoaWNz
Q29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwYWludGVy
KQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwg
bV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUocGFpbnRlciwgZmlsbENv
bG9yKCkpKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCogcGFpbnRlcikKIHsKKyAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKHBhaW50ZXIsIGZpbGxDb2xvcigpKTsKKwogICAgIHNldFBhaW50aW5n
RGlzYWJsZWQoIXBhaW50ZXIpOwogCiAgICAgaWYgKCFwYWludGVyKQpAQCAtMjcxLDEyICsyNjks
MTEgQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcgogICAgIHBhaW50
ZXItPnNldFBlbihwZW4pOwogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQo
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiAgICAgd2hpbGUg
KCFtX2RhdGEtPmxheWVycy5pc0VtcHR5KCkpCiAgICAgICAgIGVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7CiAKLSAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiAgICAg
ZGVsZXRlIG1fZGF0YTsKIH0KIApAQCAtNTEwLDcgKzUwNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgewog
ICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CiAgICAgICAg
IGlmIChzaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93Ci0gICAgICAg
ICAgICAmJiAhbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuICYmICFtX2NvbW1vbi0+c3RhdGUu
ZmlsbEdyYWRpZW50KQorICAgICAgICAgICAgJiYgIW1fc3RhdGUuZmlsbFBhdHRlcm4gJiYgIW1f
c3RhdGUuZmlsbEdyYWRpZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBRUG9pbnRGIG9mZnNl
dCA9IHNoYWRvdy0+b2Zmc2V0KCk7CiAgICAgICAgICAgICBjb25zdCBRVHJhbnNmb3JtJiB0cmFu
c2Zvcm0gPSBwLT50cmFuc2Zvcm0oKTsKQEAgLTUzNywxMiArNTM0LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICAgICAgfQogCiAgICAgfQotICAgIGlm
IChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4pIHsKKyAgICBpZiAobV9zdGF0ZS5maWxsUGF0
dGVybikgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAgICBwLT5maWxs
UGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVzaChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPmNy
ZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKSk7Ci0gICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+
c3RhdGUuZmlsbEdyYWRpZW50KSB7Ci0gICAgICAgIFFCcnVzaCBicnVzaCgqbV9jb21tb24tPnN0
YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKLSAgICAgICAgYnJ1c2guc2V0
VHJhbnNmb3JtKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0oKSk7CisgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgUUJydXNoKG1fc3Rh
dGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKSk7CisgICAgfSBl
bHNlIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgeworICAgICAgICBRQnJ1c2ggYnJ1c2goKm1f
c3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBicnVzaC5z
ZXRUcmFuc2Zvcm0obV9zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0o
KSk7CiAgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgYnJ1c2gpOwogICAgIH0gZWxz
ZQogICAgICAgICBwLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIHAtPmJydXNoKCkpOwpAQCAtNTYy
LDcgKzU1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAg
ICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOwogCiAgICAgICAg
IGlmIChzaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93Ci0gICAgICAg
ICAgICAmJiAhbV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4gJiYgIW1fY29tbW9uLT5zdGF0
ZS5zdHJva2VHcmFkaWVudCkKKyAgICAgICAgICAgICYmICFtX3N0YXRlLnN0cm9rZVBhdHRlcm4g
JiYgIW1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIFFQZW4g
c2hhZG93UGVuKHBlbik7CiAgICAgICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3IobV9kYXRhLT5z
aGFkb3cubV9jb2xvcik7CkBAIC01OTMsMTQgKzU5MCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9jb21t
b24tPnN0YXRlLnN0cm9rZVBhdHRlcm4pIHsKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJu
KSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgIHBlbi5zZXRCcnVz
aChRQnJ1c2gobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihhZmZpbmUpKSk7CisgICAgICAgIHBlbi5zZXRCcnVzaChRQnJ1c2gobV9zdGF0ZS5zdHJv
a2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkpOwogICAgICAgICBwLT5z
ZXRQZW4ocGVuKTsKICAgICAgICAgcC0+c3Ryb2tlUGF0aChwbGF0Zm9ybVBhdGgsIHBlbik7Ci0g
ICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKLSAgICAgICAg
UUJydXNoIGJydXNoKCptX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3Jh
ZGllbnQoKSk7Ci0gICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuc3Ry
b2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgfSBlbHNlIGlmICht
X3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5z
dHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJ1c2guc2V0VHJh
bnNmb3JtKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7
CiAgICAgICAgIHBlbi5zZXRCcnVzaChicnVzaCk7CiAgICAgICAgIHAtPnNldFBlbihwZW4pOwog
ICAgICAgICBwLT5zdHJva2VQYXRoKHBsYXRmb3JtUGF0aCwgcGVuKTsKQEAgLTY4NCwyMSArNjgx
LDIxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBRUmVj
dEYgbm9ybWFsaXplZFJlY3QgPSByZWN0Lm5vcm1hbGl6ZWQoKTsKICAgICBDb250ZXh0U2hhZG93
KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLmZp
bGxQYXR0ZXJuKSB7CisgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKICAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIGFmZmluZTsKLSAgICAgICAgUUJydXNoIGJydXNoKG1fY29tbW9uLT5zdGF0
ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpOwotICAgICAgICBR
UGl4bWFwKiBpbWFnZSA9IG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+dGlsZUltYWdlKCkt
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIFFCcnVzaCBicnVzaChtX3N0
YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSk7CisgICAgICAg
IFFQaXhtYXAqIGltYWdlID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+dGlsZUltYWdlKCktPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVy
ID0gbV9kYXRhLT5oYXNTaGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihwLCBub3Jt
YWxpemVkUmVjdCkgOiAwOwogICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewotICAgICAgICAg
ICAgZHJhd1JlcGVhdFBhdHRlcm4oc2hhZG93UGFpbnRlciwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0
LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9jb21tb24tPnN0YXRl
LmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOworICAgICAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4o
c2hhZG93UGFpbnRlciwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLmZpbGxQYXR0ZXJu
LT5yZXBlYXRYKCksIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CiAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9u
TW9kZV9Tb3VyY2VJbik7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3Jt
YWxpemVkUmVjdCwgc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hh
ZG93TGF5ZXIocCk7CiAgICAgICAgIH0KLSAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4ocCwgaW1h
Z2UsIG5vcm1hbGl6ZWRSZWN0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgo
KSwgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwotICAgIH0gZWxzZSBp
ZiAobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCkgewotICAgICAgICBRQnJ1c2ggYnJ1c2go
Km1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7Ci0gICAg
ICAgIGJydXNoLnNldFRyYW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFk
aWVudFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihwLCBpbWFn
ZSwgbm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9zdGF0
ZS5maWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKKyAgICB9IGVsc2UgaWYgKG1fc3RhdGUuZmlsbEdy
YWRpZW50KSB7CisgICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBs
YXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX3N0YXRlLmZp
bGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKICAgICAgICAgUVBhaW50ZXIq
IHNoYWRvd1BhaW50ZXIgPSBtX2RhdGEtPmhhc1NoYWRvdygpID8gc2hhZG93LT5iZWdpblNoYWRv
d0xheWVyKHAsIG5vcm1hbGl6ZWRSZWN0KSA6IDA7CiAgICAgICAgIGlmIChzaGFkb3dQYWludGVy
KSB7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwg
YnJ1c2gpOwpAQCAtOTYwLDEwICs5NTcsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU2hhZG93KAogICAgIC8vIFF0IGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dzIG5hdGl2ZWx5
LCB0aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyoKICAgICAvLyBmdW5jdGlvbnMK
IAotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAg
ICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICAvLyBNZWFu
aW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQKICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENH
IGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgbV9jb21tb24t
PnN0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0
aCgpLCAtc2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNo
YWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkp
KTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3co
Y29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw2IEBACiAjaW5jbHVkZSAiR0xFUzJDYW52YXMuaCIKICNpbmNsdWRlICJHcmFkaWVudC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKQEAgLTIxOSwx
NyArMjE4LDE1IEBAIHZvaWQgYWRkQ29ybmVyQXJjKFNrUGF0aCogcGF0aCwgY29uc3QgU2sKIAog
Ly8gVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggYSBOVUxMIHBvaW50ZXIgdG8gY3JlYXRlIGEgZ3Jh
cGhpY3MgY29udGV4dCB0aGF0IGhhcwogLy8gbm8gcGFpbnRpbmcuCi1HcmFwaGljc0NvbnRleHQ6
OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogZ2MpCi0gICAgOiBtX2Nv
bW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgLCBtX2RhdGEobmV3IEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShnYykpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBnYykKIHsKKyAgICBtX2RhdGEg
PSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGdjKTsKICAgICBzZXRQYWludGlu
Z0Rpc2FibGVkKCFnYyB8fCAhcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpKTsKIH0KIAotR3Jh
cGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybURlc3Ryb3koKQogewogICAgIGRlbGV0ZSBtX2RhdGE7Ci0gICAgdGhpcy0+ZGVzdHJv
eUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogfQogCiBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdApAQCAtNzQy
LDcgKzczOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKIAog
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CiAKLSAgICBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX2NvbW1vbi0+c3RhdGU7CisgICAg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBwYXRoLnNl
dEZpbGxUeXBlKHN0YXRlLmZpbGxSdWxlID09IFJVTEVfRVZFTk9ERCA/CiAgICAgICAgIFNrUGF0
aDo6a0V2ZW5PZGRfRmlsbFR5cGUgOiBTa1BhdGg6OmtXaW5kaW5nX0ZpbGxUeXBlKTsKIApAQCAt
MTA3MSw3ICsxMDY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93
KAogCiAgICAgLy8gVE9ETyh0Yyk6IFRoaXMgc3RpbGwgZG9lcyBub3QgYWRkcmVzcyB0aGUgaXNz
dWUgdGhhdCBzaGFkb3dzCiAgICAgLy8gd2l0aGluIGNhbnZhcyBlbGVtZW50cyBzaG91bGQgaWdu
b3JlIHRyYW5zZm9ybXMuCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dzSWdub3JlVHJh
bnNmb3JtcykgIHsKKyAgICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgIHsK
ICAgICAgICAgLy8gQ3VycmVudGx5IG9ubHkgdGhlIEdyYXBoaWNzQ29udGV4dCBhc3NvY2lhdGVk
IHdpdGggdGhlCiAgICAgICAgIC8vIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgZm9yIEhUTUxDYW52
YXNFbGVtZW50IGhhdmUgc2hhZG93cyBpZ25vcmUKICAgICAgICAgLy8gVHJhbnNmb3Jtcy4gU28g
d2l0aCB0aGlzIGZsYWcgc2V0LCB3ZSBrbm93IHRoaXMgc3RhdGUgaXMgYXNzb2NpYXRlZApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dENHV2luLmNwcAkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkg
KzYyLDE0IEBAIHN0YXRpYyBDR0NvbnRleHRSZWYgQ0dDb250ZXh0V2l0aEhEQyhIREMKIH0KIAog
R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkK
LSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1f
ZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKENHQ29udGV4dFdpdGhIREMo
aGRjLCBoYXNBbHBoYSkpKQorICAgIDogbV91cGRhdGluZ0NvbnRyb2xUaW50cyhmYWxzZSkKIHsK
KyAgICBwbGF0Zm9ybUluaXQoaGRjLCBoYXNBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKK3sKKyAgICBtX2RhdGEg
PSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKENHQ29udGV4dFdpdGhIREMoaGRj
LCBoYXNBbHBoYSkpOwogICAgIENHQ29udGV4dFJlbGVhc2UobV9kYXRhLT5tX2NnQ29udGV4dC5n
ZXQoKSk7CiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKICAgICBzZXRQYWludGluZ0Rpc2FibGVk
KCFtX2RhdGEtPm1fY2dDb250ZXh0KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAJKHJldmlzaW9u
IDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
Q2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw5ICs2NSwxNSBAQCBzdGF0aWMgY2Fp
cm9fdCogY3JlYXRlQ2Fpcm9Db250ZXh0V2l0aEhECiB9CiAKIEdyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0KEhEQyBkYywgYm9vbCBoYXNBbHBoYSkKLSAgICA6IG1fY29tbW9uKGNyZWF0
ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlKQorICAgIDogbV91cGRhdGluZ0NvbnRyb2xUaW50cyhmYWxzZSkK
IHsKKyAgICBwbGF0Zm9ybUluaXQoZGMsIGhhc0FscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnBsYXRmb3JtSW5pdChIREMgZGMsIGJvb2wgaGFzQWxwaGEpCit7CisgICAgbV9kYXRh
ID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKKwogICAgIGlmIChkYykgewog
ICAgICAgICBtX2RhdGEtPmNyID0gY3JlYXRlQ2Fpcm9Db250ZXh0V2l0aEhEQyhkYywgaGFzQWxw
aGEpOwogICAgICAgICBtX2RhdGEtPm1faGRjID0gZGM7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAko
cmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBo
aWNzQ29udGV4dFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lu
Y2x1ZGUgIkdESUV4dHJhcy5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAi
R3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1QYXRoV2luQ0UuaCIKQEAgLTU4MCwxNSArNTc5LDEzIEBAIHByaXZhdGU6CiB9OwogCiAKLUdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBk
YykKLTogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotLCBtX2RhdGEo
bmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShkYykpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBkYykKIHsKKyAgICBt
X2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGRjKTsKIH0KIAotR3Jh
cGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybURlc3Ryb3koKQogewotICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1f
Y29tbW9uKTsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCkBAIC0xMzE2LDggKzEzMTMsOCBAQCBD
b2xvciBncmFkaWVudEF2ZXJhZ2VDb2xvcihjb25zdCBHcmFkaWVuCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENvbG9yIGMgPSBtX2Nv
bW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50Ci0gICAgICAgID8gZ3JhZGllbnRBdmVyYWdlQ29sb3Io
bV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSkKKyAgICBDb2xvciBjID0gbV9zdGF0
ZS5maWxsR3JhZGllbnQKKyAgICAgICAgPyBncmFkaWVudEF2ZXJhZ2VDb2xvcihtX3N0YXRlLmZp
bGxHcmFkaWVudC5nZXQoKSkKICAgICAgICAgOiBmaWxsQ29sb3IoKTsKIAogICAgIGlmICghYy5h
bHBoYSgpIHx8ICFtX2RhdGEtPm1fb3BhY2l0eSkKQEAgLTE0ODcsOCArMTQ4NCw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KIHsKICAgICBzYXZlUGxhdGZvcm1T
dGF0ZSgpOwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQpCi0gICAgICAg
IGZpbGxSZWN0KHJlY3QsIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOworICAg
IGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkKKyAgICAgICAgZmlsbFJlY3QocmVjdCwgbV9zdGF0
ZS5maWxsR3JhZGllbnQuZ2V0KCkpOwogICAgIGVsc2UKICAgICAgICAgZmlsbFJlY3QocmVjdCwg
ZmlsbENvbG9yKCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkocmV2aXNpb24g
NzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDExICsxMTIsMTEgQEAgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpYwogfQogCiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhp
Y3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotICAgIDogbV9jb21t
b24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKG5ldyBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCi17ICAgIAordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBt
X2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwogICAgIHNldFBhaW50
aW5nRGlzYWJsZWQoIWNvbnRleHQpOworCiAgICAgaWYgKGNvbnRleHQpIHsKICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgogICAg
ICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJH
Qik7CkBAIC0xMjksOSArMTI5LDggQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQo
UGxhdGZvcgogI2VuZGlmCiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAgICBkZXN0cm95
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76193</attachid>
            <date>2010-12-10 07:24:30 -0800</date>
            <delta_ts>2010-12-10 07:29:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>mergeCommonAndData_v2.0.patch</filename>
            <type>text/plain</type>
            <size>56487</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzcyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI1IEBACisyMDEwLTEyLTEwICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBH
cmFwaGljc0NvbnRleHQ6IE1lcmdlIG1fY29tbW9uIGFuZCBtX2RhdGEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTE0CisKKyAgICAgICAgTW92ZSBk
YXRhIG1lbWJlcnMgZnJvbSBHcmFwaGljc0NvbnRleHRQcml2YXRlIGludG8gR3JhcGhpY3NDb250
ZXh0LiBTbyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybS5oCisgICAgICAgIGFuZCBtX2NvbW1vbiBi
ZWNhbWUgdW5uZWNlc3NhcnkuIFRoZXkgYXJlIHJlbW92ZWQuCisgICAgICAgIEFkZCB0d28gbWV0
aG9kcyB0byBHcmFwaGljc0NvbnRleHQ6IHBsYXRmb3JtSW5pdCgpIGFuZCBwbGF0Zm9ybURlc3Ry
b3koKSwgd2hpY2gKKyAgICAgICAgbWFrZSB0aGUgY29uc3RydWN0b3Igb2YgR3JhcGhpY3NDb250
ZXh0IGNsZWFyZXIuCisgICAgICAgIEJlc2lkZXMgYWRkIGEgZ2V0dGVyIHRvIHRoZSBwcml2YXRl
IEdyYXBoaWNzQ29udGV4dDo6bV9zdGF0ZSBtZW1iZXIsIGJlY2F1c2Ugc29tZSBpbmxpbmUKKyAg
ICAgICAgZnVuY3Rpb25zIGluIGNhaXJvIG5lZWQgaXQuCisKKyAgICAgICAgTm8gbmV3IHRlc3Qg
aXMgbmVlZGVkLCBiZWNhdXNlIHRoaXMgaXMgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VUaGlja25lc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpnZXRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQ29sb3JTcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsR3JhZGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6dXBkYXRpbmdDb250cm9sVGludHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRVcGRhdGluZ0NvbnRyb2xUaW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBhaW50aW5nRGlzYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNldFBsYXRmb3JtRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQbGF0
Zm9ybVN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0aFNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsQ3VycmVudENhaXJvUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpzdHJv
a2VDdXJyZW50Q2Fpcm9QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZv
cm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmdldEFscGhhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRl
eHRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
SW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJv
eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9w
ZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkSW5u
ZXJSb3VuZGVkUmVjdENsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1E
ZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Jbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0Q2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFw
aGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bUluaXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4
dFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1J
bml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOgorCiAyMDEwLTEyLTEwICBKb2NlbHluIFR1cmNv
dHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
bm9ib2R5LCBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gNzMzNjApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzkyMCw3ICszOTIwLDcgQEAKIAkJ
QThGNEZCOTYwQzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGNEZCOTUwQzE2OUU4NTAw
MkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwICovOyB9OwogCQlBOEY1QzBCODBGOTI4NUFD
MDA5OEUwNkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjVDMEI2MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5k
ZXJTVkdNb2RlbE9iamVjdC5oICovOyB9OwogCQlBOEY1QzBCOTBGOTI4NUFDMDA5OEUwNkIgLyog
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThGNUMwQjcwRjkyODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVs
T2JqZWN0LmNwcCAqLzsgfTsKLQkJQThGQTZFNUQwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RkE2RTVC
MEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi87IH07CisJCUE4RkE2RTVEMEU0Q0ZERUQw
MEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4RkE2RTVFMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAq
LzsgfTsKIAkJQTlDNkU0RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUxMEQ3NDVF
MDUwMDY0NDJFOSAvKiBET01NaW1lVHlwZS5jcHAgKi87IH07CiAJCUE5QzZFNEU0MEQ3NDVFMDUw
MDY0NDJFOSAvKiBET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTlDNkU0RTIwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmgg
Ki87IH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwCShyZXZpc2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1
ZGUgIkJpZGlSZXNvbHZlci5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHZW5lcmF0
b3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTc0LDE0ICs3MywxNSBAQCBw
cml2YXRlOgogICAgIGludCBtX29mZnNldDsKIH07CiAKLUdyYXBoaWNzQ29udGV4dFByaXZhdGUq
IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpCitHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZv
cm1HcmFwaGljc0NvbnRleHQpCisgICAgOiBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNlKQog
ewotICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsKKyAgICBwbGF0Zm9ybUlu
aXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUoR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZGVs
ZXRlTWUpCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewotICAgIGRlbGV0
ZSBkZWxldGVNZTsKKyAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNhdmUoKQpAQCAtODksNyArODksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2
ZSgpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9jb21tb24tPnN0YWNrLmFwcGVuZChtX2NvbW1vbi0+c3RhdGUpOworICAgIG1fc3RhY2suYXBw
ZW5kKG1fc3RhdGUpOwogCiAgICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIH0KQEAgLTk5LDEyMCAr
OTksMTI1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9jb21tb24tPnN0YWNr
LmlzRW1wdHkoKSkgeworICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBMT0df
RVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1w
dHkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1vbi0+c3RhdGUgPSBtX2Nv
bW1vbi0+c3RhY2subGFzdCgpOwotICAgIG1fY29tbW9uLT5zdGFjay5yZW1vdmVMYXN0KCk7Cisg
ICAgbV9zdGF0ZSA9IG1fc3RhY2subGFzdCgpOworICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOwog
CiAgICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiB7Ci0gICAgbV9jb21tb24tPnN0
YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKKyAgICBtX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcyA9IHRoaWNrbmVzczsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyh0aGlja25l
c3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlU3R5bGUoY29uc3QgU3Ry
b2tlU3R5bGUmIHN0eWxlKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VTdHlsZSA9IHN0
eWxlOworICAgIG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsKICAgICBzZXRQbGF0Zm9ybVN0
cm9rZVN0eWxlKHN0eWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNv
bG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewotICAgIG1f
Y29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwotICAgIG1fY29tbW9uLT5zdGF0ZS5z
dHJva2VDb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
R3JhZGllbnQuY2xlYXIoKTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5jbGVh
cigpOworICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKKyAgICBtX3N0YXRlLnN0cm9r
ZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuY2xl
YXIoKTsKKyAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uY2xlYXIoKTsKICAgICBzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7Ci0gICAgbV9jb21tb24tPnN0
YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Qmx1
ciA9IGJsdXI7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7CisgICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0g
Ymx1cjsKKyAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7CiAgICAgc2V0UGxhdGZvcm1T
aGFkb3cob2Zmc2V0LCBibHVyLCBjb2xvciwgY29sb3JTcGFjZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclNoYWRvdygpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd09m
ZnNldCA9IEZsb2F0U2l6ZSgpOwotICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dCbHVyID0gMDsK
LSAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOworICAgIG1fc3RhdGUu
c2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7CisgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsK
KyAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsKICAgICBjbGVhclBsYXRmb3JtU2hh
ZG93KCk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXplJiBv
ZmZzZXQsIGZsb2F0JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CiB7Ci0gICAgb2Zmc2V0ID0g
bV9jb21tb24tPnN0YXRlLnNoYWRvd09mZnNldDsKLSAgICBibHVyID0gbV9jb21tb24tPnN0YXRl
LnNoYWRvd0JsdXI7Ci0gICAgY29sb3IgPSBtX2NvbW1vbi0+c3RhdGUuc2hhZG93Q29sb3I7Cisg
ICAgb2Zmc2V0ID0gbV9zdGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAgYmx1ciA9IG1fc3RhdGUuc2hh
ZG93Qmx1cjsKKyAgICBjb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CiAKICAgICByZXR1cm4g
Y29sb3IuaXNWYWxpZCgpICYmIGNvbG9yLmFscGhhKCkgJiYgKGJsdXIgfHwgb2Zmc2V0LndpZHRo
KCkgfHwgb2Zmc2V0LmhlaWdodCgpKTsKIH0KIAogZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VUaGlja25lc3MoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
VGhpY2tuZXNzOworICAgIHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzczsKIH0KIAogU3Ry
b2tlU3R5bGUgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VTdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VTdHlsZTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJv
a2VTdHlsZTsKIH0KIAogQ29sb3IgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VDb2xvcigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvcjsKKyAgICByZXR1cm4g
bV9zdGF0ZS5zdHJva2VDb2xvcjsKIH0KIAogQ29sb3JTcGFjZSBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUNvbG9yU3BhY2UoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ry
b2tlQ29sb3JTcGFjZTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJva2VDb2xvclNwYWNlOwogfQog
CiBXaW5kUnVsZSBHcmFwaGljc0NvbnRleHQ6OmZpbGxSdWxlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxSdWxl
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1
bGUpCiB7Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7CisgICAgbV9z
dGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewot
ICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKLSAgICBtX2NvbW1vbi0+c3Rh
dGUuZmlsbENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxs
R3JhZGllbnQuY2xlYXIoKTsKLSAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uY2xlYXIo
KTsKKyAgICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9yOworICAgIG1fc3RhdGUuZmlsbENvbG9y
U3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LmNsZWFyKCk7Cisg
ICAgbV9zdGF0ZS5maWxsUGF0dGVybi5jbGVhcigpOwogICAgIHNldFBsYXRmb3JtRmlsbENvbG9y
KGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAogQ29sb3IgR3JhcGhpY3NDb250ZXh0OjpmaWxsQ29s
b3IoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yOworICAg
IHJldHVybiBtX3N0YXRlLmZpbGxDb2xvcjsKIH0KIAogQ29sb3JTcGFjZSBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxDb2xvclNwYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRl
LmZpbGxDb2xvclNwYWNlOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxDb2xvclNwYWNlOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgYikKIHsKLSAg
ICBtX2NvbW1vbi0+c3RhdGUuc2hvdWxkQW50aWFsaWFzID0gYjsKKyAgICBtX3N0YXRlLnNob3Vs
ZEFudGlhbGlhcyA9IGI7CiAgICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYik7CiB9CiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMoKSBjb25zdAogewotICAgIHJl
dHVybiBtX2NvbW1vbi0+c3RhdGUuc2hvdWxkQW50aWFsaWFzOworICAgIHJldHVybiBtX3N0YXRl
LnNob3VsZEFudGlhbGlhczsKK30KKworY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIEdyYXBo
aWNzQ29udGV4dDo6c3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+
IHBhdHRlcm4pCkBAIC0yMjIsOSArMjI3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0
cm9rZVBhdHRlcm4oUAogICAgICAgICBzZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY29tbW9uLT5z
dGF0ZS5zdHJva2VHcmFkaWVudC5jbGVhcigpOwotICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQ
YXR0ZXJuID0gcGF0dGVybjsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4obV9jb21tb24t
PnN0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQu
Y2xlYXIoKTsKKyAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBwYXR0ZXJuOworICAgIHNldFBs
YXRmb3JtU3Ryb2tlUGF0dGVybihtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4oUGFzc1JlZlB0cjxQYXR0ZXJuPiBw
YXR0ZXJuKQpAQCAtMjM0LDkgKzIzOSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxs
UGF0dGVybihQYXMKICAgICAgICAgc2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFj
ZURldmljZVJHQik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9jb21tb24tPnN0YXRl
LmZpbGxHcmFkaWVudC5jbGVhcigpOwotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybiA9
IHBhdHRlcm47Ci0gICAgc2V0UGxhdGZvcm1GaWxsUGF0dGVybihtX2NvbW1vbi0+c3RhdGUuZmls
bFBhdHRlcm4uZ2V0KCkpOworICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LmNsZWFyKCk7CisgICAg
bV9zdGF0ZS5maWxsUGF0dGVybiA9IHBhdHRlcm47CisgICAgc2V0UGxhdGZvcm1GaWxsUGF0dGVy
bihtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZUdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50KQpAQCAtMjQ2
LDkgKzI1MSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudCgKICAg
ICAgICAgc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGll
bnQgPSBncmFkaWVudDsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5jbGVhcigp
OwotICAgIHNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQobV9jb21tb24tPnN0YXRlLnN0cm9rZUdy
YWRpZW50LmdldCgpKTsKKyAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gZ3JhZGllbnQ7Cisg
ICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmNsZWFyKCk7CisgICAgc2V0UGxhdGZvcm1TdHJva2VH
cmFkaWVudChtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCkK
QEAgLTI1OCw1NSArMjYzLDU1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGll
bnQoUGEKICAgICAgICAgc2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmlj
ZVJHQik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9jb21tb24tPnN0YXRlLmZpbGxH
cmFkaWVudCA9IGdyYWRpZW50OwotICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi5jbGVh
cigpOwotICAgIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50KG1fY29tbW9uLT5zdGF0ZS5maWxsR3Jh
ZGllbnQuZ2V0KCkpOworICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gZ3JhZGllbnQ7CisgICAg
bV9zdGF0ZS5maWxsUGF0dGVybi5jbGVhcigpOworICAgIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50
KG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKIH0KIAogR3JhZGllbnQqIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbEdyYWRpZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRl
LmZpbGxHcmFkaWVudC5nZXQoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0
KCk7CiB9CiAKIEdyYWRpZW50KiBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUdyYWRpZW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpOwor
ICAgIHJldHVybiBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpOwogfQogCiBQYXR0ZXJuKiBH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21t
b24tPnN0YXRlLmZpbGxQYXR0ZXJuLmdldCgpOworICAgIHJldHVybiBtX3N0YXRlLmZpbGxQYXR0
ZXJuLmdldCgpOwogfQogCiBQYXR0ZXJuKiBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4o
KSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQo
KTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBpZ25vcmVUcmFu
c2Zvcm1zKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9
IGlnbm9yZVRyYW5zZm9ybXM7CisgICAgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9
IGlnbm9yZVRyYW5zZm9ybXM7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0Ojp1cGRhdGluZ0Nv
bnRyb2xUaW50cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5tX3VwZGF0aW5nQ29u
dHJvbFRpbnRzOworICAgIHJldHVybiBtX3VwZGF0aW5nQ29udHJvbFRpbnRzOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0VXBkYXRpbmdDb250cm9sVGludHMoYm9vbCBiKQogewogICAg
IHNldFBhaW50aW5nRGlzYWJsZWQoYik7Ci0gICAgbV9jb21tb24tPm1fdXBkYXRpbmdDb250cm9s
VGludHMgPSBiOworICAgIG1fdXBkYXRpbmdDb250cm9sVGludHMgPSBiOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGFpbnRpbmdEaXNhYmxlZChib29sIGYpCiB7Ci0gICAgbV9jb21t
b24tPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQgPSBmOworICAgIG1fc3RhdGUucGFpbnRpbmdEaXNh
YmxlZCA9IGY7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQ7Cisg
ICAgcmV0dXJuIG1fc3RhdGUucGFpbnRpbmdEaXNhYmxlZDsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBjb25zdCBJbnRQb2ludCYgcCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC01MjgsMTIgKzUz
MywxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoCiAKIFRleHRE
cmF3aW5nTW9kZUZsYWdzIEdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnRleHREcmF3aW5nTW9kZTsKKyAgICByZXR1
cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKIHsKLSAgICBtX2Nv
bW1vbi0+c3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9kZTsKKyAgICBtX3N0YXRlLnRleHREcmF3
aW5nTW9kZSA9IG1vZGU7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKG1vZGUpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA3MzM2MCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDkgKzMwLDExIEBACiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1
ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYWRp
ZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KQEAgLTExNywxMiArMTE5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IERyYXdpbmdCdWZmZXI7CiAgICAgY2xhc3MgRm9udDsKICAgICBjbGFzcyBHZW5lcmF0b3I7Ci0g
ICAgY2xhc3MgR3JhZGllbnQ7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOwotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFByaXZhdGU7CiAgICAgY2xhc3MgSW1hZ2VC
dWZmZXI7CiAgICAgY2xhc3MgS1VSTDsKLSAgICBjbGFzcyBQYXR0ZXJuOwogICAgIGNsYXNzIFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFRleHRSdW47CiAKQEAgLTE0OSw2ICsx
NDgsNTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRlcnBvbGF0aW9uSGlnaAog
ICAgIH07CiAKKyAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgeworICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZSgpCisgICAgICAgICAgICA6IHN0cm9rZVRoaWNrbmVzcygwKQorICAg
ICAgICAgICAgLCBzaGFkb3dCbHVyKDApCisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgICAg
ICAsIGdsb2JhbEFscGhhKDEpCisjZW5kaWYKKyAgICAgICAgICAgICwgdGV4dERyYXdpbmdNb2Rl
KFRleHRNb2RlRmlsbCkKKyAgICAgICAgICAgICwgc3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKQor
ICAgICAgICAgICAgLCBmaWxsQ29sb3IoQ29sb3I6OmJsYWNrKQorICAgICAgICAgICAgLCBzdHJv
a2VTdHlsZShTb2xpZFN0cm9rZSkKKyAgICAgICAgICAgICwgZmlsbFJ1bGUoUlVMRV9OT05aRVJP
KQorICAgICAgICAgICAgLCBzdHJva2VDb2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0IpCisg
ICAgICAgICAgICAsIGZpbGxDb2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0IpCisgICAgICAg
ICAgICAsIHNob3VsZEFudGlhbGlhcyh0cnVlKQorICAgICAgICAgICAgLCBwYWludGluZ0Rpc2Fi
bGVkKGZhbHNlKQorICAgICAgICAgICAgLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VH
cmFkaWVudDsKKyAgICAgICAgUmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47CisgICAgICAg
IAorICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsKKyAgICAgICAgUmVmUHRy
PFBhdHRlcm4+IGZpbGxQYXR0ZXJuOworCisgICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7
CisKKyAgICAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzOworICAgICAgICBmbG9hdCBzaGFkb3dC
bHVyOworCisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgIGZsb2F0IGdsb2JhbEFscGhhOwor
I2VuZGlmCisgICAgICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZTsKKwor
ICAgICAgICBDb2xvciBzdHJva2VDb2xvcjsKKyAgICAgICAgQ29sb3IgZmlsbENvbG9yOworICAg
ICAgICBDb2xvciBzaGFkb3dDb2xvcjsKKworICAgICAgICBTdHJva2VTdHlsZSBzdHJva2VTdHls
ZTsKKyAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGU7CisKKyAgICAgICAgQ29sb3JTcGFjZSBzdHJv
a2VDb2xvclNwYWNlOworICAgICAgICBDb2xvclNwYWNlIGZpbGxDb2xvclNwYWNlOworCisgICAg
ICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzOworICAgICAgICBib29sIHBhaW50aW5nRGlzYWJsZWQ7
CisgICAgICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgfTsKKwogICAgIGNs
YXNzIEdyYXBoaWNzQ29udGV4dCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgog
ICAgICAgICBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsKQEAgLTE4
OSw2ICsyMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0U2hvdWxk
QW50aWFsaWFzKGJvb2wpOwogICAgICAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0Owog
CisgICAgICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0OworCiAj
aWYgUExBVEZPUk0oQ0cpCiAgICAgICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAgICAg
ICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOwpAQCAtNDE1LDYgKzQ2NywxMyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgbWFya0RpcnR5UmVjdChjb25zdCBJbnRSZWN0Jik7
IC8vIEhpbnRzIHRoYXQgYSBwb3J0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlIGlzIGRpcnR5Lgog
CiAgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqKTsKKyAgICAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKKworI2lmIFBMQVRG
T1JNKFdJTikKKyAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoSERDLCBib29sIGhhc0FscGhhID0g
ZmFsc2UpOworI2VuZGlmCisKICAgICAgICAgdm9pZCBzYXZlUGxhdGZvcm1TdGF0ZSgpOwogICAg
ICAgICB2b2lkIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7CiAKQEAgLTQzOCwxMSArNDk3LDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9Q
aXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJv
a2VXaWR0aCwgY29uc3QgU3Ryb2tlU3R5bGUmKTsKIAotICAgICAgICBzdGF0aWMgR3JhcGhpY3ND
b250ZXh0UHJpdmF0ZSogY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpOwotICAgICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShHcmFwaGljc0NvbnRleHRQ
cml2YXRlKik7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9kYXRh
OwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIG1fY29tbW9uOwotICAgICAgICBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YTsgLy8gRGVwcmVjYXRlZDsgbV9j
b21tbW9uIGNhbiBqdXN0IGJlIGRvd25jYXN0ZWQuIFRvIGJlIHJlbW92ZWQuCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisgICAgICAgIFZlY3RvcjxHcmFwaGljc0NvbnRl
eHRTdGF0ZT4gbV9zdGFjazsKKyAgICAgICAgYm9vbCBtX3VwZGF0aW5nQ29udHJvbFRpbnRzOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiA3MzQz
MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdyYXBoaWNzQ29udGV4dFByaXZhdGVfaAot
I2RlZmluZSBHcmFwaGljc0NvbnRleHRQcml2YXRlX2gKLQotI2luY2x1ZGUgIkdyYWRpZW50Lmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewot
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSgpCi0gICAgICAgICAgICA6IHN0cm9rZVRoaWNr
bmVzcygwKQotICAgICAgICAgICAgLCBzaGFkb3dCbHVyKDApCi0jaWYgUExBVEZPUk0oQ0FJUk8p
Ci0gICAgICAgICAgICAsIGdsb2JhbEFscGhhKDEpCi0jZW5kaWYKLSAgICAgICAgICAgICwgdGV4
dERyYXdpbmdNb2RlKFRleHRNb2RlRmlsbCkKLSAgICAgICAgICAgICwgc3Ryb2tlQ29sb3IoQ29s
b3I6OmJsYWNrKQotICAgICAgICAgICAgLCBmaWxsQ29sb3IoQ29sb3I6OmJsYWNrKQotICAgICAg
ICAgICAgLCBzdHJva2VTdHlsZShTb2xpZFN0cm9rZSkKLSAgICAgICAgICAgICwgZmlsbFJ1bGUo
UlVMRV9OT05aRVJPKQotICAgICAgICAgICAgLCBzdHJva2VDb2xvclNwYWNlKENvbG9yU3BhY2VE
ZXZpY2VSR0IpCi0gICAgICAgICAgICAsIGZpbGxDb2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VS
R0IpCi0gICAgICAgICAgICAsIHNob3VsZEFudGlhbGlhcyh0cnVlKQotICAgICAgICAgICAgLCBw
YWludGluZ0Rpc2FibGVkKGZhbHNlKQotICAgICAgICAgICAgLCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcyhmYWxzZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPEdyYWRp
ZW50PiBzdHJva2VHcmFkaWVudDsKLSAgICAgICAgUmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRl
cm47Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsKLSAg
ICAgICAgUmVmUHRyPFBhdHRlcm4+IGZpbGxQYXR0ZXJuOwotCi0gICAgICAgIEZsb2F0U2l6ZSBz
aGFkb3dPZmZzZXQ7Ci0KLSAgICAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzOwotICAgICAgICBm
bG9hdCBzaGFkb3dCbHVyOwotCi0jaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIGZsb2F0IGds
b2JhbEFscGhhOwotI2VuZGlmCi0gICAgICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3
aW5nTW9kZTsKLQotICAgICAgICBDb2xvciBzdHJva2VDb2xvcjsKLSAgICAgICAgQ29sb3IgZmls
bENvbG9yOwotICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLQotICAgICAgICBTdHJva2VTdHls
ZSBzdHJva2VTdHlsZTsKLSAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGU7Ci0KLSAgICAgICAgQ29s
b3JTcGFjZSBzdHJva2VDb2xvclNwYWNlOwotICAgICAgICBDb2xvclNwYWNlIGZpbGxDb2xvclNw
YWNlOwotCi0gICAgICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzOwotICAgICAgICBib29sIHBhaW50
aW5nRGlzYWJsZWQ7Ci0gICAgICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAg
fTsKLQotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFByaXZhdGUgOiBwdWJsaWMgTm9uY29weWFi
bGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpCi0gICAg
ICAgICAgICA6IG1fdXBkYXRpbmdDb250cm9sVGludHMoZmFsc2UpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRlOwotICAgICAgICBWZWN0
b3I8R3JhcGhpY3NDb250ZXh0U3RhdGU+IHN0YWNrOwotICAgICAgICBib29sIG1fdXBkYXRpbmdD
b250cm9sVGludHM7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gR3JhcGhpY3NDb250ZXh0UHJpdmF0ZV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNp
b24gNzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZh
dGUuaCIKICNpbmNsdWRlICJPd25QdHJDYWlyby5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtNjgsNDIgKzY3LDQ2IEBAIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSB2b2lkIHNl
dFBsYXRmb3JtRmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNhaXJvX3QqIGNyLCBHcmFw
aGljc0NvbnRleHRQcml2YXRlKiBnY3ApCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGxhdGZvcm1G
aWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY2Fpcm9fdCogY3IpCiB7CiAgICAgY2Fpcm9f
cGF0dGVybl90KiBwYXR0ZXJuID0gMDsKICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICBpZiAoZ2Nw
LT5zdGF0ZS5maWxsUGF0dGVybikgeworICAgIAorICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSA9IGNvbnRleHQtPnN0YXRlKCk7CisgICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJu
KSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgIHBhdHRlcm4gPSBn
Y3AtPnN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKTsKKyAg
ICAgICAgcGF0dGVybiA9IHN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
YWZmaW5lKTsKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7Ci0gICAgfSBl
bHNlIGlmIChnY3AtPnN0YXRlLmZpbGxHcmFkaWVudCkKLSAgICAgICAgY2Fpcm9fc2V0X3NvdXJj
ZShjciwgZ2NwLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAg
fSBlbHNlIGlmIChzdGF0ZS5maWxsR3JhZGllbnQpCisgICAgICAgIGNhaXJvX3NldF9zb3VyY2Uo
Y3IsIHN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKICAgICBlbHNlCiAg
ICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbnRleHQtPmZpbGxDb2xvcigpKTsK
ICAgICBjYWlyb19jbGlwX3ByZXNlcnZlKGNyKTsKLSAgICBjYWlyb19wYWludF93aXRoX2FscGhh
KGNyLCBnY3AtPnN0YXRlLmdsb2JhbEFscGhhKTsKKyAgICBjYWlyb19wYWludF93aXRoX2FscGhh
KGNyLCBzdGF0ZS5nbG9iYWxBbHBoYSk7CiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiAgICAgaWYg
KHBhdHRlcm4pCiAgICAgICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShwYXR0ZXJuKTsKIH0KIAot
c3RhdGljIGlubGluZSB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY2Fpcm9fdCogY3IsIEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGdjcCkKK3N0YXRpYyBp
bmxpbmUgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNh
aXJvX3QqIGNyKQogewogICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IDA7CiAgICAgY2Fp
cm9fc2F2ZShjcik7Ci0gICAgaWYgKGdjcC0+c3RhdGUuc3Ryb2tlUGF0dGVybikgeworICAgIAor
ICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IGNvbnRleHQtPnN0YXRlKCk7
CisgICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3Jt
IGFmZmluZTsKLSAgICAgICAgcGF0dGVybiA9IGdjcC0+c3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3Jl
YXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSk7CisgICAgICAgIHBhdHRlcm4gPSBzdGF0ZS5zdHJv
a2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKTsKICAgICAgICAgY2Fpcm9f
c2V0X3NvdXJjZShjciwgcGF0dGVybik7Ci0gICAgfSBlbHNlIGlmIChnY3AtPnN0YXRlLnN0cm9r
ZUdyYWRpZW50KQotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBnY3AtPnN0YXRlLnN0cm9r
ZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgIH0gZWxzZSBpZiAoc3RhdGUuc3Ry
b2tlR3JhZGllbnQpCisgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHN0YXRlLnN0cm9rZUdy
YWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwogICAgIGVsc2UgIHsKLSAgICAgICAgQ29sb3Ig
c3Ryb2tlQ29sb3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbnRleHQtPnN0cm9rZUNvbG9y
KCkucmdiKCksIGNvbnRleHQtPnN0cm9rZUNvbG9yKCkuYWxwaGEoKSAvIDI1NS5mICogZ2NwLT5z
dGF0ZS5nbG9iYWxBbHBoYSk7CisgICAgICAgIENvbG9yIHN0cm9rZUNvbG9yID0gY29sb3JXaXRo
T3ZlcnJpZGVBbHBoYShjb250ZXh0LT5zdHJva2VDb2xvcigpLnJnYigpLCBjb250ZXh0LT5zdHJv
a2VDb2xvcigpLmFscGhhKCkgLyAyNTUuZiAqIHN0YXRlLmdsb2JhbEFscGhhKTsKICAgICAgICAg
c2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgc3Ryb2tlQ29sb3IpOwogICAgIH0KLSAgICBpZiAo
Z2NwLT5zdGF0ZS5nbG9iYWxBbHBoYSA8IDEuMGYgJiYgKGdjcC0+c3RhdGUuc3Ryb2tlUGF0dGVy
biB8fCBnY3AtPnN0YXRlLnN0cm9rZUdyYWRpZW50KSkgeworICAgIGlmIChzdGF0ZS5nbG9iYWxB
bHBoYSA8IDEuMGYgJiYgKHN0YXRlLnN0cm9rZVBhdHRlcm4gfHwgc3RhdGUuc3Ryb2tlR3JhZGll
bnQpKSB7CiAgICAgICAgIGNhaXJvX3B1c2hfZ3JvdXAoY3IpOwotICAgICAgICBjYWlyb19wYWlu
dF93aXRoX2FscGhhKGNyLCBnY3AtPnN0YXRlLmdsb2JhbEFscGhhKTsKKyAgICAgICAgY2Fpcm9f
cGFpbnRfd2l0aF9hbHBoYShjciwgc3RhdGUuZ2xvYmFsQWxwaGEpOwogICAgICAgICBjYWlyb19w
b3BfZ3JvdXBfdG9fc291cmNlKGNyKTsKICAgICB9CiAgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZl
KGNyKTsKQEAgLTEzNSw3ICsxMzgsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgeyAKICAgICBG
aWxsQW5kU3Ryb2tlID0gRmlsbCArIFN0cm9rZQogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIGRy
YXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZSogY29udGV4dFByaXZhdGUsIFBhdGhEcmF3aW5nU3R5bGUgZHJhd2luZ1N0eWxlKQorc3Rh
dGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
UGF0aERyYXdpbmdTdHlsZSBkcmF3aW5nU3R5bGUpCiB7CiAgICAgQ29udGV4dFNoYWRvdyogc2hh
ZG93ID0gY29udGV4dC0+Y29udGV4dFNoYWRvdygpOwogICAgIEFTU0VSVChzaGFkb3cpOwpAQCAt
MTcxLDQxICsxNzQsMzkgQEAgc3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBo
aQogICAgIGNhaXJvX2FwcGVuZF9wYXRoKHNoYWRvd0NvbnRleHQsIHBhdGgpOwogCiAgICAgaWYg
KGRyYXdpbmdTdHlsZSAmIEZpbGwpCi0gICAgICAgIHNldFBsYXRmb3JtRmlsbChjb250ZXh0LCBz
aGFkb3dDb250ZXh0LCBjb250ZXh0UHJpdmF0ZSk7CisgICAgICAgIHNldFBsYXRmb3JtRmlsbChj
b250ZXh0LCBzaGFkb3dDb250ZXh0KTsKICAgICBpZiAoZHJhd2luZ1N0eWxlICYgU3Ryb2tlKQot
ICAgICAgICBzZXRQbGF0Zm9ybVN0cm9rZShjb250ZXh0LCBzaGFkb3dDb250ZXh0LCBjb250ZXh0
UHJpdmF0ZSk7CisgICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlKGNvbnRleHQsIHNoYWRvd0NvbnRl
eHQpOwogCiAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcihjYWlyb0NvbnRleHQpOwogfQogCi1z
dGF0aWMgdm9pZCBmaWxsQ3VycmVudENhaXJvUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGdjcCwgY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQorc3Rh
dGljIHZvaWQgZmlsbEN1cnJlbnRDYWlyb1BhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
YWlyb190KiBjYWlyb0NvbnRleHQpCiB7CiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjYWlyb0Nv
bnRleHQsIGNvbnRleHQtPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9fRklMTF9S
VUxFX0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOwotICAgIGRyYXdQYXRoU2hh
ZG93KGNvbnRleHQsIGdjcCwgRmlsbCk7CisgICAgZHJhd1BhdGhTaGFkb3coY29udGV4dCwgRmls
bCk7CiAKLSAgICBzZXRQbGF0Zm9ybUZpbGwoY29udGV4dCwgY2Fpcm9Db250ZXh0LCBnY3ApOwor
ICAgIHNldFBsYXRmb3JtRmlsbChjb250ZXh0LCBjYWlyb0NvbnRleHQpOwogICAgIGNhaXJvX25l
d19wYXRoKGNhaXJvQ29udGV4dCk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0cm9rZUN1cnJlbnRDYWly
b1BhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBn
Y3AsIGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKK3N0YXRpYyB2b2lkIHN0cm9rZUN1cnJlbnRDYWly
b1BhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQog
ewotICAgIGRyYXdQYXRoU2hhZG93KGNvbnRleHQsIGdjcCwgU3Ryb2tlKTsKLSAgICBzZXRQbGF0
Zm9ybVN0cm9rZShjb250ZXh0LCBjYWlyb0NvbnRleHQsIGdjcCk7CisgICAgZHJhd1BhdGhTaGFk
b3coY29udGV4dCwgU3Ryb2tlKTsKKyAgICBzZXRQbGF0Zm9ybVN0cm9rZShjb250ZXh0LCBjYWly
b0NvbnRleHQpOwogICAgIGNhaXJvX25ld19wYXRoKGNhaXJvQ29udGV4dCk7CiB9CiAKLUdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjcikK
LSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1f
ZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY3IpCiB7CisgICAg
bV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKICAgICBtX2RhdGEt
PmNyID0gY2Fpcm9fcmVmZXJlbmNlKGNyKTsKICAgICBtX2RhdGEtPnN5bmNDb250ZXh0KGNyKTsK
ICAgICBzZXRQYWludGluZ0Rpc2FibGVkKCFjcik7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6fkdy
YXBoaWNzQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkK
IHsKLSAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiAgICAgZGVs
ZXRlIG1fZGF0YTsKIH0KIApAQCAtNTMxLDcgKzUzMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aChjb25zdCBQYXQKIAogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKICAg
ICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsIHBhdGgucGxhdGZvcm1QYXRoKCktPmNvbnRleHQo
KSk7Ci0gICAgZmlsbEN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9jb21tb24sIGNyKTsKKyAgICBm
aWxsQ3VycmVudENhaXJvUGF0aCh0aGlzLCBjcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC01NDEsNyArNTQyLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUAogCiAgICAgY2Fpcm9fdCogY3IgPSBt
X2RhdGEtPmNyOwogICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0aC5wbGF0Zm9ybVBh
dGgoKS0+Y29udGV4dCgpKTsKLSAgICBzdHJva2VDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIG1fY29t
bW9uLCBjcik7CisgICAgc3Ryb2tlQ3VycmVudENhaXJvUGF0aCh0aGlzLCBjcik7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC01
NTIsNyArNTUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwog
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBj
YWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKLSAgICBmaWxsQ3VycmVudENhaXJvUGF0aCh0aGlzLCBtX2NvbW1vbiwgY3Ip
OworICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIGNyKTsKICAgICBjYWlyb19yZXN0b3Jl
KGNyKTsKIH0KIApAQCAtODI5LDEwICs4MzAsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFk
ZElubmVyUm91bmRlZFJlYwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93
KEZsb2F0U2l6ZSBjb25zdCYgc2l6ZSwgZmxvYXQgYmx1ciwgQ29sb3IgY29uc3QmIGNvbG9yLCBD
b2xvclNwYWNlKQogewogICAgIC8vIENhaXJvIGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dzIG5hdGl2
ZWx5LCB0aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyogZnVuY3Rpb25zCi0gICAg
aWYgKG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgIGlmICht
X3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CiAgICAgICAgIC8vIE1lYW5pbmcgdGhh
dCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dAogICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhU
TUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUu
c2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOwor
ICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1z
aXplLmhlaWdodCgpKTsKICAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNv
bG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSkpOwogICAg
IH0gZWxzZQogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3IsIGJs
dXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKQEAgLTg5NSw3ICs4
OTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGCiAgICAgY2Fp
cm9fc2F2ZShjcik7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgo
Y3IsIHdpZHRoKTsKLSAgICBzdHJva2VDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIG1fY29tbW9uLCBj
cik7CisgICAgc3Ryb2tlQ3VycmVudENhaXJvUGF0aCh0aGlzLCBjcik7CiAgICAgY2Fpcm9fcmVz
dG9yZShjcik7CiB9CiAKQEAgLTk1NCwxMiArOTU1LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRNaXRlckxpbWl0KGZsb2EKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZs
b2F0IGFscGhhKQogewotICAgIG1fY29tbW9uLT5zdGF0ZS5nbG9iYWxBbHBoYSA9IGFscGhhOwor
ICAgIG1fc3RhdGUuZ2xvYmFsQWxwaGEgPSBhbHBoYTsKIH0KIAogZmxvYXQgR3JhcGhpY3NDb250
ZXh0OjpnZXRBbHBoYSgpCiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5nbG9iYWxBbHBo
YTsKKyAgICByZXR1cm4gbV9zdGF0ZS5nbG9iYWxBbHBoYTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwCShyZXZpc2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNs
dWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgpAQCAtMTA3LDEwICsxMDYsOSBAQCBDR0Nv
bG9yU3BhY2VSZWYgbGluZWFyUkdCQ29sb3JTcGFjZVJlZigpCiAjZW5kaWYKIH0KIAotR3JhcGhp
Y3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKLSAgICA6
IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShu
ZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCiB7CisgICAg
bV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQpOwog
ICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNnQ29udGV4dCk7CiAgICAgaWYgKGNnQ29udGV4dCkg
ewogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMgd2l0aCBv
dXIgc3RhdGUuCkBAIC0xMTksOSArMTE3LDggQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0Nv
bnRleHQoQ0dDb250ZQogICAgIH0KIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250
ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQogewotICAgIGRl
c3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKICAgICBkZWxldGUgbV9kYXRh
OwogfQogCkBAIC00NTIsNyArNDQ5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ry
b2tlUGF0dGVybgogewogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKIAotICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IHBsYXRmb3JtUGF0dGVybihBZG9w
dENGLCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJu
KGdldENUTSgpKSk7CisgICAgUmV0YWluUHRyPENHUGF0dGVyblJlZj4gcGxhdGZvcm1QYXR0ZXJu
KEFkb3B0Q0YsIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdl
dENUTSgpKSk7CiAgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApA
QCAtNDY3LDcgKzQ2NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJu
KCkKIHsKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAK
LSAgICBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBwbGF0Zm9ybVBhdHRlcm4oQWRvcHRDRiwgbV9j
b21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkp
KTsKKyAgICBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBwbGF0Zm9ybVBhdHRlcm4oQWRvcHRDRiwg
bV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSk7CiAg
ICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApAQCAtNTExLDcgKzUw
OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXQKICAgICAgICAg
cmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsK
LSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX2NvbW1vbi0+c3RhdGU7
CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIAogICAg
IGlmIChzdGF0ZS5maWxsR3JhZGllbnQgfHwgc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKICAgICAg
ICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgb3B0aW1pemVkIHdheSB0byBmaWxsICYgc3Ryb2tlIGEg
cGF0aCB1c2luZyBncmFkaWVudHMKQEAgLTU1MiwxOSArNTQ5LDE5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4
dCk7CiAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsK
IAotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKG1fc3Rh
dGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7
CiAgICAgICAgIGlmIChmaWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkKICAgICAgICAgICAgIENH
Q29udGV4dEVPQ2xpcChjb250ZXh0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgQ0dDb250
ZXh0Q2xpcChjb250ZXh0KTsKLSAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1f
Y29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7Ci0g
ICAgICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KHRoaXMpOworICAgICAg
ICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWlu
dCh0aGlzKTsKICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4p
CisgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4o
KTsKICAgICBmaWxsUGF0aFdpdGhGaWxsUnVsZShjb250ZXh0LCBmaWxsUnVsZSgpKTsKIH0KQEAg
LTU3OSwxNyArNTc2LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0
IFAKICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0QWRkUGF0
aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKIAotICAgIGlmIChtX2NvbW1vbi0+c3Rh
dGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgewog
ICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRS
ZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xp
cChjb250ZXh0KTsKLSAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fY29tbW9u
LT5zdGF0ZS5zdHJva2VHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAgICAg
ICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCh0aGlzKTsKKyAgICAgICAg
Q0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBh
aW50KHRoaXMpOwogICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0
ZXJuKQorICAgIGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCiAgICAgICAgIGFwcGx5U3Ryb2tl
UGF0dGVybigpOwogICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9CkBAIC02MDEs
MTYgKzU5OCwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAK
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYg
KG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAobV9zdGF0ZS5maWxsR3Jh
ZGllbnQpIHsKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAg
Q0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByZWN0KTsKLSAgICAgICAgQ0dDb250ZXh0Q29u
Y2F0Q1RNKGNvbnRleHQsIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBh
aW50KHRoaXMpOworICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5m
aWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIG1fc3RhdGUu
ZmlsbEdyYWRpZW50LT5wYWludCh0aGlzKTsKICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2NvbW1vbi0+
c3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCiAgICAgICAg
IGFwcGx5RmlsbFBhdHRlcm4oKTsKICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCByZWN0
KTsKIH0KQEAgLTc0MCw3ICs3MzcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaGFkb3coCiAgICAgQ0dGbG9hdCBibHVyUmFkaXVzID0gYmx1cjsKICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKCFtX2NvbW1vbi0+c3Rh
dGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICBpZiAoIW1fc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpIHsKICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNU
TSA9IHdrR2V0VXNlclRvQmFzZUNUTShjb250ZXh0KTsKIAogICAgICAgICBDR0Zsb2F0IEEgPSB1
c2VyVG9CYXNlQ1RNLmEgKiB1c2VyVG9CYXNlQ1RNLmEgKyB1c2VyVG9CYXNlQ1RNLmIgKiB1c2Vy
VG9CYXNlQ1RNLmI7CkBAIC04MTUsMTggKzgxMiwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUmVjdChjb25zdCBGCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudCkgewor
ICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CiAgICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7CiAgICAgICAgIHNldFN0cm9rZVRoaWNrbmVzcyhsaW5lV2lkdGgpOwog
ICAgICAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIHIpOwogICAgICAgICBDR0NvbnRleHRS
ZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xp
cChjb250ZXh0KTsKLSAgICAgICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWlu
dCh0aGlzKTsKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQodGhpcyk7CiAg
ICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYg
KG1fc3RhdGUuc3Ryb2tlUGF0dGVybikKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAg
ICAgQ0dDb250ZXh0U3Ryb2tlUmVjdFdpdGhXaWR0aChjb250ZXh0LCByLCBsaW5lV2lkdGgpOwog
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRI
YWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9H
cmFwaGljc0NvbnRleHRIYWlrdS5jcHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDE2ICs2MiwxNCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5H
cmFwaGljCiB7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3ND
b250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUoY29udGV4dCkpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogeworICAgIG1fZGF0YSA9IG5ldyBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoY29udGV4dCk7CiAgICAgc2V0UGFpbnRpbmdEaXNh
YmxlZCghY29udGV4dCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAgICBkZXN0cm95
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0K
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0
T3BlblZHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52
Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwCShyZXZpc2lvbiA3MzM2MCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
IAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dFByaXZhdGUuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJQYWludGVyT3BlblZHLmgiCkBAIC00OSwxNiArNDgsMTQgQEAgcHVibGlj
OgogICAgIH0KIH07CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFN1cmZhY2VP
cGVuVkcqIHN1cmZhY2UpCi0gICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2
YXRlKCkpCi0gICAgLCBtX2RhdGEoc3VyZmFjZSA/IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUoc3VyZmFjZSkgOiAwKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5p
dChTdXJmYWNlT3BlblZHKiBzdXJmYWNlKQogeworICAgIG1fZGF0YSA9IHN1cmZhY2UgPyBuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKHN1cmZhY2UpIDogMDsKICAgICBzZXRQYWlu
dGluZ0Rpc2FibGVkKCFzdXJmYWNlKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3ND
b250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQogewotICAg
IGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKICAgICBkZWxldGUgbV9k
YXRhOwogfQogCkBAIC0xNDQsNyArMTQxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKGNvbnN0IFBhdAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fZGF0YS0+ZHJhd1BhdGgocGF0aCwgVkdfRklMTF9QQVRILCBtX2NvbW1vbi0+
c3RhdGUuZmlsbFJ1bGUpOworICAgIG1fZGF0YS0+ZHJhd1BhdGgocGF0aCwgVkdfRklMTF9QQVRI
LCBtX3N0YXRlLmZpbGxSdWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTE1Miw3ICsxNDksNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5kcmF3UGF0aChwYXRoLCBWR19TVFJPS0VfUEFU
SCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAgICBtX2RhdGEtPmRyYXdQYXRoKHBhdGgs
IFZHX1NUUk9LRV9QQVRILCBtX3N0YXRlLmZpbGxSdWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTM4MCw3ICszNzcsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwCiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5jbGlwUGF0aChw
YXRoLCBQYWludGVyT3BlblZHOjpJbnRlcnNlY3RDbGlwLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1
bGUpOworICAgIG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6SW50ZXJzZWN0
Q2xpcCwgbV9zdGF0ZS5maWxsUnVsZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52
YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zOTMsNyArMzkwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9w
ZW5WRzo6U3VidHJhY3RDbGlwLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOworICAgIG1fZGF0
YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6U3VidHJhY3RDbGlwLCBtX3N0YXRlLmZp
bGxSdWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYgc2NhbGVGYWN0b3JzKQpAQCAtNDI3LDcgKzQyNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KGNvbnN0IEludFIKIAogICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJlY3Qo
cmVjdCk7Ci0gICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpTdWJ0cmFj
dENsaXAsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRhLT5jbGlwUGF0aChw
YXRoLCBQYWludGVyT3BlblZHOjpTdWJ0cmFjdENsaXAsIG1fc3RhdGUuZmlsbFJ1bGUpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCkBAIC00NTAsNyArNDQ3LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwogICAgIHBhdGguYWRk
RWxsaXBzZShGbG9hdFJlY3QocmVjdC54KCkgKyB0aGlja25lc3MsIHJlY3QueSgpICsgdGhpY2tu
ZXNzLAogICAgICAgICByZWN0LndpZHRoKCkgLSAodGhpY2tuZXNzICogMiksIHJlY3QuaGVpZ2h0
KCkgLSAodGhpY2tuZXNzICogMikpKTsKIAotICAgIG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFp
bnRlck9wZW5WRzo6SW50ZXJzZWN0Q2xpcCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAg
ICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OkludGVyc2VjdENsaXAsIG1f
c3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtYXRpb24pCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24g
NzMzNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgIkNvbnRleHRT
aGFkb3cuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGb250Lmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCkBA
IC0yMjQsNyArMjIzLDYgQEAgcHJpdmF0ZToKICAgICBib29sIHBsYXRmb3JtQ29udGV4dElzT3du
ZWQ7CiB9OwogCi0KIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlKFFQYWludGVyKiBwLCBjb25zdCBRQ29sb3ImIGluaXRpYWxTb2xp
ZENvbG9yKQogICAgIDogYW50aUFsaWFzaW5nRm9yUmVjdHNBbmRMaW5lcyhmYWxzZSkKICAgICAs
IGxheWVyQ291bnQoMCkKQEAgLTI1MywxMCArMjUxLDEwIEBAIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6fkdyYXBoaWMKICAgICBkZWxldGUgZGV2aWNlOwogfQogCi1HcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGFpbnRlcikK
LSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1f
ZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKHBhaW50ZXIsIGZpbGxDb2xv
cigpKSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqIHBhaW50ZXIpCiB7CisgICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShwYWludGVyLCBmaWxsQ29sb3IoKSk7CisKICAgICBzZXRQYWludGluZ0Rp
c2FibGVkKCFwYWludGVyKTsKIAogICAgIGlmICghcGFpbnRlcikKQEAgLTI3MSwxMiArMjY5LDEx
IEBAIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3IKICAgICBwYWludGVy
LT5zZXRQZW4ocGVuKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQogewogICAgIHdoaWxlICgh
bV9kYXRhLT5sYXllcnMuaXNFbXB0eSgpKQogICAgICAgICBlbmRUcmFuc3BhcmVuY3lMYXllcigp
OwogCi0gICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogICAgIGRl
bGV0ZSBtX2RhdGE7CiB9CiAKQEAgLTUxMCw3ICs1MDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFBhdGgoY29uc3QgUGF0CiAgICAgaWYgKG1fZGF0YS0+aGFzU2hhZG93KCkpIHsKICAg
ICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOwogICAgICAgICBp
ZiAoc2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdwotICAgICAgICAg
ICAgJiYgIW1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybiAmJiAhbV9jb21tb24tPnN0YXRlLmZp
bGxHcmFkaWVudCkKKyAgICAgICAgICAgICYmICFtX3N0YXRlLmZpbGxQYXR0ZXJuICYmICFtX3N0
YXRlLmZpbGxHcmFkaWVudCkKICAgICAgICAgewogICAgICAgICAgICAgUVBvaW50RiBvZmZzZXQg
PSBzaGFkb3ctPm9mZnNldCgpOwogICAgICAgICAgICAgY29uc3QgUVRyYW5zZm9ybSYgdHJhbnNm
b3JtID0gcC0+dHJhbnNmb3JtKCk7CkBAIC01MzcsMTIgKzUzNCwxMiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0CiAgICAgICAgIH0KIAogICAgIH0KLSAgICBpZiAo
bV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRl
cm4pIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKLSAgICAgICAgcC0+ZmlsbFBh
dGgocGxhdGZvcm1QYXRoLCBRQnJ1c2gobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVh
dGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkpOwotICAgIH0gZWxzZSBpZiAobV9jb21tb24tPnN0
YXRlLmZpbGxHcmFkaWVudCkgewotICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fY29tbW9uLT5zdGF0
ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7Ci0gICAgICAgIGJydXNoLnNldFRy
YW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNm
b3JtKCkpOworICAgICAgICBwLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVzaChtX3N0YXRl
LmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkpOworICAgIH0gZWxz
ZSBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICAgICAgUUJydXNoIGJydXNoKCptX3N0
YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJ1c2guc2V0
VHJhbnNmb3JtKG1fc3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkp
OwogICAgICAgICBwLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIGJydXNoKTsKICAgICB9IGVsc2UK
ICAgICAgICAgcC0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBwLT5icnVzaCgpKTsKQEAgLTU2Miw3
ICs1NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAg
ICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKIAogICAgICAgICBp
ZiAoc2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdwotICAgICAgICAg
ICAgJiYgIW1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuICYmICFtX2NvbW1vbi0+c3RhdGUu
c3Ryb2tlR3JhZGllbnQpCisgICAgICAgICAgICAmJiAhbV9zdGF0ZS5zdHJva2VQYXR0ZXJuICYm
ICFtX3N0YXRlLnN0cm9rZUdyYWRpZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBRUGVuIHNo
YWRvd1BlbihwZW4pOwogICAgICAgICAgICAgc2hhZG93UGVuLnNldENvbG9yKG1fZGF0YS0+c2hh
ZG93Lm1fY29sb3IpOwpAQCAtNTkzLDE0ICs1OTAsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVBhdGgoY29uc3QgUAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fY29tbW9u
LT5zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlUGF0dGVybikg
ewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAgICBwZW4uc2V0QnJ1c2go
UUJydXNoKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oYWZmaW5lKSkpOworICAgICAgICBwZW4uc2V0QnJ1c2goUUJydXNoKG1fc3RhdGUuc3Ryb2tl
UGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpKTsKICAgICAgICAgcC0+c2V0
UGVuKHBlbik7CiAgICAgICAgIHAtPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBwZW4pOwotICAg
IH0gZWxzZSBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50KSB7Ci0gICAgICAgIFFC
cnVzaCBicnVzaCgqbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRp
ZW50KCkpOwotICAgICAgICBicnVzaC5zZXRUcmFuc2Zvcm0obV9jb21tb24tPnN0YXRlLnN0cm9r
ZUdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOworICAgIH0gZWxzZSBpZiAobV9z
dGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fc3RhdGUuc3Ry
b2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGJydXNoLnNldFRyYW5z
Zm9ybShtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwog
ICAgICAgICBwZW4uc2V0QnJ1c2goYnJ1c2gpOwogICAgICAgICBwLT5zZXRQZW4ocGVuKTsKICAg
ICAgICAgcC0+c3Ryb2tlUGF0aChwbGF0Zm9ybVBhdGgsIHBlbik7CkBAIC02ODQsMjEgKzY4MSwy
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgUVJlY3RG
IG5vcm1hbGl6ZWRSZWN0ID0gcmVjdC5ub3JtYWxpemVkKCk7CiAgICAgQ29udGV4dFNoYWRvdyog
c2hhZG93ID0gY29udGV4dFNoYWRvdygpOwogCi0gICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxs
UGF0dGVybikgeworICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgIFFCcnVzaCBicnVzaChtX2NvbW1vbi0+c3RhdGUu
ZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKTsKLSAgICAgICAgUVBp
eG1hcCogaW1hZ2UgPSBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPnRpbGVJbWFnZSgpLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBRQnJ1c2ggYnJ1c2gobV9zdGF0
ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpOworICAgICAgICBR
UGl4bWFwKiBpbWFnZSA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPnRpbGVJbWFnZSgpLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9
IG1fZGF0YS0+aGFzU2hhZG93KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgbm9ybWFs
aXplZFJlY3QpIDogMDsKICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKLSAgICAgICAgICAg
IGRyYXdSZXBlYXRQYXR0ZXJuKHNoYWRvd1BhaW50ZXIsIGltYWdlLCBub3JtYWxpemVkUmVjdCwg
bV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRYKCksIG1fY29tbW9uLT5zdGF0ZS5m
aWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKKyAgICAgICAgICAgIGRyYXdSZXBlYXRQYXR0ZXJuKHNo
YWRvd1BhaW50ZXIsIGltYWdlLCBub3JtYWxpemVkUmVjdCwgbV9zdGF0ZS5maWxsUGF0dGVybi0+
cmVwZWF0WCgpLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwogICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1v
ZGVfU291cmNlSW4pOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFs
aXplZFJlY3QsIHNoYWRvdy0+bV9jb2xvcik7CiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRv
d0xheWVyKHApOwogICAgICAgICB9Ci0gICAgICAgIGRyYXdSZXBlYXRQYXR0ZXJuKHAsIGltYWdl
LCBub3JtYWxpemVkUmVjdCwgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRYKCks
IG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKLSAgICB9IGVsc2UgaWYg
KG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQpIHsKLSAgICAgICAgUUJydXNoIGJydXNoKCpt
X2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwotICAgICAg
ICBicnVzaC5zZXRUcmFuc2Zvcm0obV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGll
bnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4ocCwgaW1hZ2Us
IG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRYKCksIG1fc3RhdGUu
ZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CisgICAgfSBlbHNlIGlmIChtX3N0YXRlLmZpbGxHcmFk
aWVudCkgeworICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fc3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0
Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBicnVzaC5zZXRUcmFuc2Zvcm0obV9zdGF0ZS5maWxs
R3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgICAgIFFQYWludGVyKiBz
aGFkb3dQYWludGVyID0gbV9kYXRhLT5oYXNTaGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dM
YXllcihwLCBub3JtYWxpemVkUmVjdCkgOiAwOwogICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikg
ewogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIGJy
dXNoKTsKQEAgLTk2MCwxMCArOTU3LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVNoYWRvdygKICAgICAvLyBRdCBkb2Vzbid0IHN1cHBvcnQgc2hhZG93cyBuYXRpdmVseSwg
dGhleSBhcmUgZHJhd24gbWFudWFsbHkgaW4gdGhlIGRyYXcqCiAgICAgLy8gZnVuY3Rpb25zCiAK
LSAgICBpZiAobV9jb21tb24tPnN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAg
aWYgKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKICAgICAgICAgLy8gTWVhbmlu
ZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0CiAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBh
bmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCi0gICAgICAgIG1fY29tbW9uLT5z
dGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQo
KSk7CisgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHNpemUud2lkdGgo
KSwgLXNpemUuaGVpZ2h0KCkpOwogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFk
b3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNv
bG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29u
dGV4dFNraWEuY3BwCShyZXZpc2lvbiA3MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyAr
MzcsNiBAQAogI2luY2x1ZGUgIkdMRVMyQ2FudmFzLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCkBAIC0yMTksMTcg
KzIxOCwxNSBAQCB2b2lkIGFkZENvcm5lckFyYyhTa1BhdGgqIHBhdGgsIGNvbnN0IFNrCiAKIC8v
IFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBwb2ludGVyIHRvIGNyZWF0ZSBhIGdyYXBo
aWNzIGNvbnRleHQgdGhhdCBoYXMKIC8vIG5vIHBhaW50aW5nLgotR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGdjKQotICAgIDogbV9jb21t
b24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKG5ldyBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoZ2MpKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogZ2MpCiB7CisgICAgbV9kYXRhID0g
bmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShnYyk7CiAgICAgc2V0UGFpbnRpbmdE
aXNhYmxlZCghZ2MgfHwgIXBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSk7CiB9CiAKLUdyYXBo
aWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1EZXN0cm95KCkKIHsKICAgICBkZWxldGUgbV9kYXRhOwotICAgIHRoaXMtPmRlc3Ryb3lH
cmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKQEAgLTc0Miw3
ICs3MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0CiAKICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOwogCi0gICAgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9jb21tb24tPnN0YXRlOworICAgIGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgcGF0aC5zZXRG
aWxsVHlwZShzdGF0ZS5maWxsUnVsZSA9PSBSVUxFX0VWRU5PREQgPwogICAgICAgICBTa1BhdGg6
OmtFdmVuT2RkX0ZpbGxUeXBlIDogU2tQYXRoOjprV2luZGluZ19GaWxsVHlwZSk7CiAKQEAgLTEw
NzEsNyArMTA2OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdygK
IAogICAgIC8vIFRPRE8odGMpOiBUaGlzIHN0aWxsIGRvZXMgbm90IGFkZHJlc3MgdGhlIGlzc3Vl
IHRoYXQgc2hhZG93cwogICAgIC8vIHdpdGhpbiBjYW52YXMgZWxlbWVudHMgc2hvdWxkIGlnbm9y
ZSB0cmFuc2Zvcm1zLgotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMpICB7CisgICAgaWYgKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpICB7CiAg
ICAgICAgIC8vIEN1cnJlbnRseSBvbmx5IHRoZSBHcmFwaGljc0NvbnRleHQgYXNzb2NpYXRlZCB3
aXRoIHRoZQogICAgICAgICAvLyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IGZvciBIVE1MQ2FudmFz
RWxlbWVudCBoYXZlIHNoYWRvd3MgaWdub3JlCiAgICAgICAgIC8vIFRyYW5zZm9ybXMuIFNvIHdp
dGggdGhpcyBmbGFnIHNldCwgd2Uga25vdyB0aGlzIHN0YXRlIGlzIGFzc29jaWF0ZWQKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRDR1dpbi5jcHAJKHJldmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2
MiwxNCBAQCBzdGF0aWMgQ0dDb250ZXh0UmVmIENHQ29udGV4dFdpdGhIREMoSERDCiB9CiAKIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCi0g
ICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgLCBtX2Rh
dGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShDR0NvbnRleHRXaXRoSERDKGhk
YywgaGFzQWxwaGEpKSkKKyAgICA6IG1fdXBkYXRpbmdDb250cm9sVGludHMoZmFsc2UpCiB7Cisg
ICAgcGxhdGZvcm1Jbml0KGhkYywgaGFzQWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCit7CisgICAgbV9kYXRhID0g
bmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShDR0NvbnRleHRXaXRoSERDKGhkYywg
aGFzQWxwaGEpKTsKICAgICBDR0NvbnRleHRSZWxlYXNlKG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0
KCkpOwogICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxlZCgh
bV9kYXRhLT5tX2NnQ29udGV4dCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCShyZXZpc2lvbiA3
MzM2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENh
aXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOSArNjUsMTUgQEAgc3RhdGljIGNhaXJv
X3QqIGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIRAogfQogCiBHcmFwaGljc0NvbnRleHQ6OkdyYXBo
aWNzQ29udGV4dChIREMgZGMsIGJvb2wgaGFzQWxwaGEpCi0gICAgOiBtX2NvbW1vbihjcmVhdGVH
cmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSkKKyAgICA6IG1fdXBkYXRpbmdDb250cm9sVGludHMoZmFsc2UpCiB7
CisgICAgcGxhdGZvcm1Jbml0KGRjLCBoYXNBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUluaXQoSERDIGRjLCBib29sIGhhc0FscGhhKQoreworICAgIG1fZGF0YSA9
IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CisKICAgICBpZiAoZGMpIHsKICAg
ICAgICAgbV9kYXRhLT5jciA9IGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoZGMsIGhhc0FscGhh
KTsKICAgICAgICAgbV9kYXRhLT5tX2hkYyA9IGRjOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAJKHJl
dmlzaW9uIDczMzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGlj
c0NvbnRleHRXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNs
dWRlICJHRElFeHRyYXMuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdy
YWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
UGF0aFdpbkNFLmgiCkBAIC01ODAsMTUgKzU3OSwxMyBAQCBwcml2YXRlOgogfTsKIAogCi1HcmFw
aGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogZGMp
Ci06IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSwgbV9kYXRhKG5l
dyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoZGMpKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogZGMpCiB7CisgICAgbV9k
YXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShkYyk7CiB9CiAKLUdyYXBo
aWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1EZXN0cm95KCkKIHsKLSAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2Nv
bW1vbik7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIApAQCAtMTMxNiw4ICsxMzEzLDggQEAgQ29s
b3IgZ3JhZGllbnRBdmVyYWdlQ29sb3IoY29uc3QgR3JhZGllbgogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBDb2xvciBjID0gbV9jb21t
b24tPnN0YXRlLmZpbGxHcmFkaWVudAotICAgICAgICA/IGdyYWRpZW50QXZlcmFnZUNvbG9yKG1f
Y29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpCisgICAgQ29sb3IgYyA9IG1fc3RhdGUu
ZmlsbEdyYWRpZW50CisgICAgICAgID8gZ3JhZGllbnRBdmVyYWdlQ29sb3IobV9zdGF0ZS5maWxs
R3JhZGllbnQuZ2V0KCkpCiAgICAgICAgIDogZmlsbENvbG9yKCk7CiAKICAgICBpZiAoIWMuYWxw
aGEoKSB8fCAhbV9kYXRhLT5tX29wYWNpdHkpCkBAIC0xNDg3LDggKzE0ODQsOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiB7CiAgICAgc2F2ZVBsYXRmb3JtU3Rh
dGUoKTsKIAotICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KQotICAgICAgICBm
aWxsUmVjdChyZWN0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKKyAgICBp
ZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpCisgICAgICAgIGZpbGxSZWN0KHJlY3QsIG1fc3RhdGUu
ZmlsbEdyYWRpZW50LmdldCgpKTsKICAgICBlbHNlCiAgICAgICAgIGZpbGxSZWN0KHJlY3QsIGZp
bGxDb2xvcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHJldmlzaW9uIDcz
MzYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMSArMTEyLDExIEBAIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWMKIH0KIAogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IG1fY29tbW9u
KGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQoteyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgbV9k
YXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKICAgICBzZXRQYWludGlu
Z0Rpc2FibGVkKCFjb250ZXh0KTsKKwogICAgIGlmIChjb250ZXh0KSB7CiAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KICAgICAg
ICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmlsbENvbG9yKCksIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwpAQCAtMTI5LDkgKzEyOSw4IEBAIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBs
YXRmb3IKICNlbmRpZgogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0gICAgZGVzdHJveUdy
YXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24pOwogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAK
</data>
<flag name="review"
          id="67093"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>