<?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>55571</bug_id>
          
          <creation_ts>2011-03-02 05:08:59 -0800</creation_ts>
          <short_desc>[Refactoring] Auto correction panel should be handled by its own class.</short_desc>
          <delta_ts>2011-04-08 17:18:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>57088</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>buildbot</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>jberlin</cc>
    
    <cc>jiapu.mail</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>360738</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-02 05:08:59 -0800</bug_when>
    <thetext>As code inside SUPPORT_AUTOCORRECTION_PANEL grows,
Editor code is hard to edit without breaking the autocorrection-enabled build.
I think it would be great if these code and its ifdef is under separate class namely
AutoCorrectionPanelController or such. And I&apos;m thinking to do that refactoring.

Jia, what do you think about that? Is it OK to do it now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368292</commentid>
    <comment_count>1</comment_count>
      <attachid>85922</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-16 04:42:32 -0700</bug_when>
    <thetext>Created attachment 85922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368293</commentid>
    <comment_count>2</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-16 04:45:41 -0700</bug_when>
    <thetext>This can be compiled with SUPPORT_AUTOCORRECTION_PANEL=1. 
(with small modification on WebKit/mac layer for hiding missing API.)

For me, localizing correction panel related code into single class helps simplifying Editor code and 
will make coming work easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368299</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-03-16 04:57:29 -0700</bug_when>
    <thetext>Attachment 85922 did not build on qt:
Build output: http://queues.webkit.org/results/8181966</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368300</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-16 05:04:24 -0700</bug_when>
    <thetext>Attachment 85922 did not build on chromium:
Build output: http://queues.webkit.org/results/8189068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368311</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-16 05:45:11 -0700</bug_when>
    <thetext>Attachment 85922 did not build on win:
Build output: http://queues.webkit.org/results/8156016</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368351</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-16 09:27:10 -0700</bug_when>
    <thetext>Attachment 85922 did not build on mac:
Build output: http://queues.webkit.org/results/8188208</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368357</commentid>
    <comment_count>7</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-03-16 09:43:56 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; As code inside SUPPORT_AUTOCORRECTION_PANEL grows,
&gt; Editor code is hard to edit without breaking the autocorrection-enabled build.
&gt; I think it would be great if these code and its ifdef is under separate class namely
&gt; AutoCorrectionPanelController or such. And I&apos;m thinking to do that refactoring.
&gt; 
&gt; Jia, what do you think about that? Is it OK to do it now?

Morita, I appreciate you doing this refactoring. I will try to have a look at your patch in a day or two. I&apos;d like to apply the patch myself and run a few tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368456</commentid>
    <comment_count>8</comment_count>
      <attachid>85922</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-16 12:35:11 -0700</bug_when>
    <thetext>Comment on attachment 85922
Patch

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

&gt; Source/WebCore/editing/CorrectionPanelController.cpp:81
&gt; +CorrectionPanelController::~CorrectionPanelController()
&gt; +{
&gt; +#if SUPPORT_AUTOCORRECTION_PANEL
&gt; +    dismissCorrectionPanel(ReasonForDismissingCorrectionPanelIgnored);
&gt; +#endif
&gt; +}

It might be better to have EmptyCorrectionPanelController so that we don&apos;t have to put if-endif in all of these functions.

&gt; Source/WebCore/editing/Editor.cpp:-2298
&gt; -#if SUPPORT_AUTOCORRECTION_PANEL
&gt;      // If this checking is only for showing correction panel, we shouldn&apos;t bother to mark misspellings.
&gt;      if (shouldShowCorrectionPanel)
&gt;          shouldMarkSpelling = false;
&gt; -#endif

Why is it safe to remove this if-endif?

&gt; Source/WebCore/editing/Editor.cpp:-3521
&gt; -#if SUPPORT_AUTOCORRECTION_PANEL
&gt;          // Don&apos;t check spelling and grammar if the change of selection is triggered by spelling correction itself.
&gt;          shouldCheckSpellingAndGrammar = !(options &amp; SelectionController::SpellCorrectionTriggered);
&gt; -#endif

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368588</commentid>
    <comment_count>9</comment_count>
      <attachid>85922</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-03-16 15:30:10 -0700</bug_when>
    <thetext>Comment on attachment 85922
Patch

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

&gt; Source/WebCore/editing/CorrectionPanelController.h:72
&gt; +class CorrectionPanelController {

We probably should call it SpellingCorrectionController, since it does more than just managing the panel UI. For instance, it also monitor undone autocorrection, and manager markers accordingly.

&gt; Source/WebCore/editing/CorrectionPanelController.h:85
&gt; +    void unappliedSpellCorrection(const VisibleSelection&amp; selectionOfCorrected, const String&amp; corrected, const String&amp; correction);
&gt; +    void appliedEditing(PassRefPtr&lt;EditCommand&gt;);

Shall we call them respondToUnappliedSpellCorrection() and respondToAppliedEditing()?

&gt; Source/WebCore/editing/Editor.cpp:1061
&gt;  Editor::~Editor()

I suppose we could remove the empty destructor now.

&gt; Source/WebCore/editing/Editor.cpp:2490
&gt; -void Editor::applyCorrectionPanelInfo(const Vector&lt;DocumentMarker::MarkerType&gt;&amp; markerTypesToAdd)
&gt; +void Editor::prepareEditingWord(bool doNotRemoveIfSelectionAtWordBoundary)

Given the new function name, the argument name isn&apos;t very clear anymore. The purpose of this function is to remove markers on the word we are about to edit and that we have just edited. The argument indicates whether we want to handle a word if the selection is on word boundary. Maybe we could name it updateMarkersForWordsAffectedByEditing(bool onlyHandleWordsContainingSelection). We could also remove removeSpellAndCorrectionMarkersFromWordsToBeEdited(), since all prepareEditingWord() does is to call removeSpellAndCorrectionMarkersFromWordsToBeEdited().

&gt;&gt; Source/WebCore/editing/Editor.cpp:-3521
&gt;&gt; -#endif
&gt; 
&gt; Ditto.

I&apos;m almost certain we shouldn&apos;t remove this #if. It will change the behavior on current Mac OS X.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368599</commentid>
    <comment_count>10</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-03-16 15:41:44 -0700</bug_when>
    <thetext>
&gt; 
&gt; &gt;&gt; Source/WebCore/editing/Editor.cpp:-3521
&gt; &gt;&gt; -#endif
&gt; &gt; 
&gt; &gt; Ditto.
&gt; 
&gt; I&apos;m almost certain we shouldn&apos;t remove this #if. It will change the behavior on current Mac OS X.

Ah, I take it back. SelectionController::SpellCorrectionTriggered won&apos;t get set if SUPPORT_AUTOCORRECTION_PANEL isn&apos;t true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368915</commentid>
    <comment_count>11</comment_count>
      <attachid>86040</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-17 00:40:02 -0700</bug_when>
    <thetext>Created attachment 86040
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368920</commentid>
    <comment_count>12</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-17 00:49:00 -0700</bug_when>
    <thetext>Ryoske, Jia, 
Thank you for quick feedback! 
I updated the patch to address that.

(In reply to comment #8)
&gt; (From update of attachment 85922 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85922&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/CorrectionPanelController.cpp:81
&gt; &gt; +CorrectionPanelController::~CorrectionPanelController()
&gt; &gt; +{
&gt; &gt; +#if SUPPORT_AUTOCORRECTION_PANEL
&gt; &gt; +    dismissCorrectionPanel(ReasonForDismissingCorrectionPanelIgnored);
&gt; &gt; +#endif
&gt; &gt; +}
&gt; 
&gt; It might be better to have EmptyCorrectionPanelController so that we don&apos;t have to put if-endif in all of these functions.
Makes sense, On the other hand, introducing virtual controller interface doesn&apos;t look usual in WebCore.
So I change it to return NULL if auto-correction is not enabled
(see SpellingCorrectioController::create()). 
But I&apos;m not sure which is the wright way. What do you think?

&gt; &gt; Source/WebCore/editing/Editor.cpp:-2298
&gt; &gt; -#if SUPPORT_AUTOCORRECTION_PANEL
&gt; &gt;      // If this checking is only for showing correction panel, we shouldn&apos;t bother to mark misspellings.
&gt; &gt;      if (shouldShowCorrectionPanel)
&gt; &gt;          shouldMarkSpelling = false;
&gt; &gt; -#endif
&gt; 
&gt; Why is it safe to remove this if-endif?
&gt; 
shouldShowCorrectionPanel never goes true unless SUPPORT_AUTOCORRECTION_PANEL.

&gt; &gt; Source/WebCore/editing/Editor.cpp:-3521
&gt; &gt; -#if SUPPORT_AUTOCORRECTION_PANEL
&gt; &gt;          // Don&apos;t check spelling and grammar if the change of selection is triggered by spelling correction itself.
&gt; &gt;          shouldCheckSpellingAndGrammar = !(options &amp; SelectionController::SpellCorrectionTriggered);
&gt; &gt; -#endif
&gt; 
&gt; Ditto.
SelectionController::SpellCorrectionTriggered is only passed from SpellingCorrectionControlller.
thus only available when SUPPORT_AUTOCORRECTION_PANEL is given.

----

(In reply to comment #9)
&gt; (From update of attachment 85922 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85922&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/CorrectionPanelController.h:72
&gt; &gt; +class CorrectionPanelController {
&gt; 
&gt; We probably should call it SpellingCorrectionController, since it does more than just managing the panel UI. For instance, it also monitor undone autocorrection, and manager markers accordingly.
&gt; 
It makes sense. I renamed it.

&gt; &gt; Source/WebCore/editing/CorrectionPanelController.h:85
&gt; &gt; +    void unappliedSpellCorrection(const VisibleSelection&amp; selectionOfCorrected, const String&amp; corrected, const String&amp; correction);
&gt; &gt; +    void appliedEditing(PassRefPtr&lt;EditCommand&gt;);
&gt; 
&gt; Shall we call them respondToUnappliedSpellCorrection() and respondToAppliedEditing()?
Sure. Renamed.

&gt; 
&gt; &gt; Source/WebCore/editing/Editor.cpp:1061
&gt; &gt;  Editor::~Editor()
&gt; 
&gt; I suppose we could remove the empty destructor now.
We need this because we moved #include for the controller to Editor.cpp 
to save the compilation time. (The destructor need to be on Editor.cpp in this case.)

&gt; 
&gt; &gt; Source/WebCore/editing/Editor.cpp:2490
&gt; &gt; -void Editor::applyCorrectionPanelInfo(const Vector&lt;DocumentMarker::MarkerType&gt;&amp; markerTypesToAdd)
&gt; &gt; +void Editor::prepareEditingWord(bool doNotRemoveIfSelectionAtWordBoundary)
&gt; 
&gt; Given the new function name, the argument name isn&apos;t very clear anymore. The purpose of this function is to remove markers on the word we are about to edit and that we have just edited. The argument indicates whether we want to handle a word if the selection is on word boundary. Maybe we could name it updateMarkersForWordsAffectedByEditing(bool onlyHandleWordsContainingSelection). We could also remove removeSpellAndCorrectionMarkersFromWordsToBeEdited(), since all prepareEditingWord() does is to call removeSpellAndCorrectionMarkersFromWordsToBeEdited().
&gt; 
Renamed and made the two functions into one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368922</commentid>
    <comment_count>13</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-03-17 00:52:36 -0700</bug_when>
    <thetext>Attachment 86040 did not build on qt:
Build output: http://queues.webkit.org/results/8195052</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368923</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-17 00:56:31 -0700</bug_when>
    <thetext>Attachment 86040 did not build on chromium:
Build output: http://queues.webkit.org/results/8193455</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368924</commentid>
    <comment_count>15</comment_count>
      <attachid>86040</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-17 01:04:25 -0700</bug_when>
    <thetext>Comment on attachment 86040
Patch

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

&gt; Source/WebCore/editing/Editor.cpp:1058
&gt; +    , m_spellingCorrector(SpellingCorrectionController::create(frame))

Can we have if-def here instead?  It seems odd that create() returns 0 if correction controller is not supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368928</commentid>
    <comment_count>16</comment_count>
      <attachid>86040</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-17 01:12:19 -0700</bug_when>
    <thetext>Comment on attachment 86040
Patch

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

&gt;&gt; Source/WebCore/editing/Editor.cpp:1058
&gt;&gt; +    , m_spellingCorrector(SpellingCorrectionController::create(frame))
&gt; 
&gt; Can we have if-def here instead?  It seems odd that create() returns 0 if correction controller is not supported.

On second thought, maybe it&apos;s better to have all if-defs in one file.  I&apos;d like to hear other contributors&apos; opinions here.

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:78
&gt; +SpellingCorrectionController* SpellingCorrectionController::create(Frame* frame)
&gt; +{
&gt; +#if SUPPORT_AUTOCORRECTION_PANEL
&gt; +    return new SpellingCorrectionController(frame);
&gt; +#else
&gt; +    UNUSED_PARAM(frame);
&gt; +    return 0;
&gt; +#endif
&gt; +}

This function should return PassOwnPtr and you should be calling adoptPtr(new SpellingCorrectionController(frame)).  I&apos;m still not happy about the fact all these member functions will be linked in non-Lion WebKit even though they&apos;re never called in practice because they are referenced in Editor.cpp.  You should really consider adding EmptySpellingCorrectionController or come up with a clever solution to avoid this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368945</commentid>
    <comment_count>17</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-17 01:54:10 -0700</bug_when>
    <thetext>Attachment 86040 did not build on win:
Build output: http://queues.webkit.org/results/8191493</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368987</commentid>
    <comment_count>18</comment_count>
      <attachid>86044</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-17 04:30:18 -0700</bug_when>
    <thetext>Created attachment 86044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368990</commentid>
    <comment_count>19</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-17 04:32:17 -0700</bug_when>
    <thetext>This is just for fixing build break ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368998</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-17 04:46:21 -0700</bug_when>
    <thetext>Attachment 86044 did not build on chromium:
Build output: http://queues.webkit.org/results/8189597</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369016</commentid>
    <comment_count>21</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-17 05:19:48 -0700</bug_when>
    <thetext>Attachment 86044 did not build on win:
Build output: http://queues.webkit.org/results/8189605</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371191</commentid>
    <comment_count>22</comment_count>
      <attachid>86416</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-21 21:32:02 -0700</bug_when>
    <thetext>Created attachment 86416
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371194</commentid>
    <comment_count>23</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-21 21:37:48 -0700</bug_when>
    <thetext>&gt; I&apos;m still not happy about the fact all these member functions will be linked in non-Lion WebKit even though they&apos;re never called in practice because they are referenced in Editor.cpp.  You should really consider adding EmptySpellingCorrectionController or come up with a clever solution to avoid this.

Well, I just returned back to the if/endif way. 
Instead of scattering if/endif blocks, This change embrace all codebase in single block 
at SpellingCorrectionController.cpp , and put empty implementations into the else/endif part.
I gave up EmptySpellingCorrectionController because runtime polymorphism doesn&apos;t help us 
from build breakages unless the alternative code path is compiled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371197</commentid>
    <comment_count>24</comment_count>
      <attachid>86416</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-21 21:58:44 -0700</bug_when>
    <thetext>Comment on attachment 86416
Patch

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

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:456
&gt; +#else
&gt; +
&gt; +SpellingCorrectionController::SpellingCorrectionController(Frame*) {}
&gt; +SpellingCorrectionController::~SpellingCorrectionController() {}
&gt; +void SpellingCorrectionController::startCorrectionPanelTimer(CorrectionPanelInfo::PanelType) {}
&gt; +void SpellingCorrectionController::stopCorrectionPanelTimer() {}
&gt; +void SpellingCorrectionController::dismiss(ReasonForDismissingCorrectionPanel) {}
&gt; +void SpellingCorrectionController::show(PassRefPtr&lt;Range&gt;, const String&amp;) {}
&gt; +void SpellingCorrectionController::applyCorrectionPanelInfo(const Vector&lt;DocumentMarker::MarkerType&gt;&amp;) {}
&gt; +bool SpellingCorrectionController::applyAutocorrectionBeforeTypingIfAppropriate() { return false; }
&gt; +void SpellingCorrectionController::respondToUnappliedSpellCorrection(const VisibleSelection&amp;, const String&amp;, const String&amp;) {}
&gt; +void SpellingCorrectionController::respondToAppliedEditing(PassRefPtr&lt;EditCommand&gt;) {}
&gt; +void SpellingCorrectionController::respondToChangedSelection(const VisibleSelection&amp;) {}
&gt; +void SpellingCorrectionController::stopPendingCorrection(const VisibleSelection&amp;) {}
&gt; +void SpellingCorrectionController::applyPendingCorrection(const VisibleSelection&amp;) {}
&gt; +void SpellingCorrectionController::handleCorrectionPanelResult(const String&amp;) {}
&gt; +void SpellingCorrectionController::handleCancelOperation() {}
&gt; +void SpellingCorrectionController::markRevsersed(PassRefPtr&lt;Range&gt;) {}
&gt; +void SpellingCorrectionController::recordAutocorrectionResponseReversed(const String&amp;, PassRefPtr&lt;Range&gt;) {}
&gt; +bool SpellingCorrectionController::hasPendingCorrection() const { return false; }
&gt; +bool SpellingCorrectionController::isSpellingMarkerAllowed(PassRefPtr&lt;Range&gt;) const { return true; }
&gt; +bool SpellingCorrectionController::isShowingCorrectionPanel() { return false; }
&gt; +bool SpellingCorrectionController::isAutomaticSpellingCorrectionEnabled() { return false; }
&gt; +
&gt; +#endif

Can we put this in the header line so that compiler can optimize away the function calls?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371202</commentid>
    <comment_count>25</comment_count>
      <attachid>86419</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-21 22:14:40 -0700</bug_when>
    <thetext>Created attachment 86419
Updated to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371218</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-21 22:30:56 -0700</bug_when>
    <thetext>Attachment 86419 did not build on chromium:
Build output: http://queues.webkit.org/results/8228005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371224</commentid>
    <comment_count>27</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-21 22:38:49 -0700</bug_when>
    <thetext>Attachment 86419 did not build on win:
Build output: http://queues.webkit.org/results/8222095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371227</commentid>
    <comment_count>28</comment_count>
      <attachid>86423</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-21 22:45:54 -0700</bug_when>
    <thetext>Created attachment 86423
Fixing the build break</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372029</commentid>
    <comment_count>29</comment_count>
      <attachid>86423</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-23 01:58:25 -0700</bug_when>
    <thetext>Comment on attachment 86423
Fixing the build break

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

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:25352
&gt; +				A7005CCC1330C4BA000CC0BA /* SpellingCorrectionController.cpp in Sources */,

This one is out of order.

&gt; Source/WebCore/editing/Editor.cpp:1056
&gt; +    , m_spellingCorrector(new SpellingCorrectionController(frame))

We should call adoptPtr here.

&gt; Source/WebCore/editing/Editor.cpp:2417
&gt; +    if (!m_spellingCorrector-&gt;isAutomaticSpellingCorrectionEnabled())
&gt;          return;

Why are you adding this line to removeSpellAndCorrectionMarkersFromWordsToBeEdited/updateMarkersForWordsAffectedByEditing?

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:86
&gt; +    if (isAutomaticSpellingCorrectionEnabled()) {

I know you&apos;re just copying but I&apos;d prefer an early exist over a nested if.

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:89
&gt; +        if (type == CorrectionPanelInfo::PanelTypeCorrection)
&gt; +            // If type is PanelTypeReversion, then the new range has been set. So we shouldn&apos;t clear it.
&gt; +            m_correctionPanelInfo.rangeToBeReplaced.clear();

Need curly brackets here since comment + statement occupies 2 lines.

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:105
&gt; +    if (currentSelection != oldSelection) {

Ditto about early exit.

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:135
&gt; +    return !(m_frame-&gt;document()-&gt;markers()-&gt;hasMarkers(misspellingRange.get(), DocumentMarker::SpellCheckingExemption));

I don&apos;t think you need parenthesis before !

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:186
&gt; +    RefPtr&lt;Range&gt; correctionStartOffsetInParagraphAsRange = Range::create(paragraphRangeContainingCorrection-&gt;startContainer(ec)-&gt;document(), paragraphRangeContainingCorrection-&gt;startPosition(), paragraphRangeContainingCorrection-&gt;startPosition());

Wow! this is a really long statement.  Maybe the variable name is too verbose.

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:215
&gt; +        if (m_correctionPanelInfo.panelType == CorrectionPanelInfo::PanelTypeReversion)
&gt; +            markers-&gt;addMarker(replacementRange.get(), markerTypesToAdd[i]);
&gt; +        else
&gt; +            markers-&gt;addMarker(replacementRange.get(), markerTypesToAdd[i], m_correctionPanelInfo.replacedString);

I know you&apos;re just copying but it seems silly to check this condition in each iteration.  We should just do:

String description;
if (m_correctionPanelInfo.panelType == CorrectionPanelInfo::PanelTypeReversion)
    description = m_correctionPanelInfo.replacedString;
for (size_t i = 0; i &lt; size; ++i)
    markers-&gt;addMarker(replacementRange.get(), markerTypesToAdd[i], description);

Also, I&apos;m surprised to learn that addMarker takes String instead of const String&amp;.  It&apos;s probably a bug.

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:313
&gt; +        } else {
&gt; +            if (!m_correctionPanelIsDismissedByEditor)

It seems like this should just be a single &quot;else if&quot;.

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:365
&gt; +        if (((marker.type == DocumentMarker::Replacement &amp;&amp; !marker.description.isNull()) || marker.type == DocumentMarker::Spelling) &amp;&amp; static_cast&lt;int&gt;(marker.endOffset) == endOffset) {

This condition seems too long to fit in one line. Maybe split it into two lines or extract an inline function?

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:383
&gt; +void SpellingCorrectionController::respondToAppliedEditing(PassRefPtr&lt;EditCommand&gt; cmd)

Please spell out &quot;command&quot;.

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:454
&gt; +SpellingCorrectionController::SpellingCorrectionController(Frame*) {}
&gt; +SpellingCorrectionController::~SpellingCorrectionController() {}
&gt; +void SpellingCorrectionController::startCorrectionPanelTimer(CorrectionPanelInfo::PanelType) {}
&gt; +void SpellingCorrectionController::stopCorrectionPanelTimer() {}
&gt; +void SpellingCorrectionController::dismiss(ReasonForDismissingCorrectionPanel) {}
&gt; +void SpellingCorrectionController::show(PassRefPtr&lt;Range&gt;, const String&amp;) {}
&gt; +void SpellingCorrectionController::applyCorrectionPanelInfo(const Vector&lt;DocumentMarker::MarkerType&gt;&amp;) {}
&gt; +bool SpellingCorrectionController::applyAutocorrectionBeforeTypingIfAppropriate() { return false; }
&gt; +void SpellingCorrectionController::respondToUnappliedSpellCorrection(const VisibleSelection&amp;, const String&amp;, const String&amp;) {}
&gt; +void SpellingCorrectionController::respondToAppliedEditing(PassRefPtr&lt;EditCommand&gt;) {}
&gt; +void SpellingCorrectionController::respondToChangedSelection(const VisibleSelection&amp;) {}
&gt; +void SpellingCorrectionController::stopPendingCorrection(const VisibleSelection&amp;) {}
&gt; +void SpellingCorrectionController::applyPendingCorrection(const VisibleSelection&amp;) {}
&gt; +void SpellingCorrectionController::handleCorrectionPanelResult(const String&amp;) {}
&gt; +void SpellingCorrectionController::handleCancelOperation() {}
&gt; +void SpellingCorrectionController::markRevsersed(PassRefPtr&lt;Range&gt;) {}
&gt; +void SpellingCorrectionController::recordAutocorrectionResponseReversed(const String&amp;, PassRefPtr&lt;Range&gt;) {}
&gt; +bool SpellingCorrectionController::hasPendingCorrection() const { return false; }
&gt; +bool SpellingCorrectionController::isSpellingMarkerAllowed(PassRefPtr&lt;Range&gt;) const { return true; }
&gt; +bool SpellingCorrectionController::isShowingCorrectionPanel() { return false; }
&gt; +bool SpellingCorrectionController::isAutomaticSpellingCorrectionEnabled() { return false; }

I still think we should put this in the header to take the advantage of optimizing compilers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372215</commentid>
    <comment_count>30</comment_count>
      <attachid>86423</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-03-23 09:54:51 -0700</bug_when>
    <thetext>Comment on attachment 86423
Fixing the build break

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

&gt;&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:186
&gt;&gt; +    RefPtr&lt;Range&gt; correctionStartOffsetInParagraphAsRange = Range::create(paragraphRangeContainingCorrection-&gt;startContainer(ec)-&gt;document(), paragraphRangeContainingCorrection-&gt;startPosition(), paragraphRangeContainingCorrection-&gt;startPosition());
&gt; 
&gt; Wow! this is a really long statement.  Maybe the variable name is too verbose.

Huh, now looking back at the code myself, it seems we could shed the &quot;ContainingCorrection&quot; part from &quot;paragraphRangeContainingCorrection&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372690</commentid>
    <comment_count>31</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-03-23 23:26:09 -0700</bug_when>
    <thetext>Morita, I have landed a patch for bug 56055, which is likely to cause some conflict with your latest patch. But none of them is difficult to resolve. I have:
1. removed EditorClient::isShowingCorrectionPanel(), Editor::isShowingCorrectionPanel().
2. dropped Editor* argument in EditorClient::showCorrectionPanel().
3. added EditorClient::dismissCorrectionPanelSoon(), Editor::dismissCorrectionPanelSoon().
4. removed Editor::handleCancelOperation().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372696</commentid>
    <comment_count>32</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-23 23:35:54 -0700</bug_when>
    <thetext>Hi Jia, thank you kindly for letting me know this.
I&apos;ll update my local working copy.
It doesn&apos;t look hard to do it, as you mentioned. 

(In reply to comment #31)
&gt; Morita, I have landed a patch for bug 56055, which is likely to cause some conflict with your latest patch. But none of them is difficult to resolve. I have:
&gt; 1. removed EditorClient::isShowingCorrectionPanel(), Editor::isShowingCorrectionPanel().
&gt; 2. dropped Editor* argument in EditorClient::showCorrectionPanel().
&gt; 3. added EditorClient::dismissCorrectionPanelSoon(), Editor::dismissCorrectionPanelSoon().
&gt; 4. removed Editor::handleCancelOperation().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373326</commentid>
    <comment_count>33</comment_count>
      <attachid>86887</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-24 22:50:22 -0700</bug_when>
    <thetext>Created attachment 86887
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373327</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-24 22:51:54 -0700</bug_when>
    <thetext>Attachment 86887 did not pass style-queue:

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

Source/WebCore/editing/SpellingCorrectionController.h:74:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373330</commentid>
    <comment_count>35</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-03-24 22:56:54 -0700</bug_when>
    <thetext>Hi Ryosuke, Jia, thank you for taking care of this.
I update the patch for address your feedback.

(The style error is a false positive. it mis-recognized a macro to a function.)

(In reply to comment #29)
&gt; (From update of attachment 86423 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86423&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:25352
&gt; &gt; +				A7005CCC1330C4BA000CC0BA /* SpellingCorrectionController.cpp in Sources */,
&gt; 
&gt; This one is out of order.
Fixed.

&gt; 
&gt; &gt; Source/WebCore/editing/Editor.cpp:1056
&gt; &gt; +    , m_spellingCorrector(new SpellingCorrectionController(frame))
&gt; 
&gt; We should call adoptPtr here.
Fixed.

&gt; 
&gt; &gt; Source/WebCore/editing/Editor.cpp:2417
&gt; &gt; +    if (!m_spellingCorrector-&gt;isAutomaticSpellingCorrectionEnabled())
&gt; &gt;          return;
&gt; 
&gt; Why are you adding this line to removeSpellAndCorrectionMarkersFromWordsToBeEdited/updateMarkersForWordsAffectedByEditing?
&gt; 
&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.cpp:86
&gt; &gt; +    if (isAutomaticSpellingCorrectionEnabled()) {
&gt; 
&gt; I know you&apos;re just copying but I&apos;d prefer an early exist over a nested if.
Changed to early-exist style.

&gt; 
&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.cpp:89
&gt; &gt; +        if (type == CorrectionPanelInfo::PanelTypeCorrection)
&gt; &gt; +            // If type is PanelTypeReversion, then the new range has been set. So we shouldn&apos;t clear it.
&gt; &gt; +            m_correctionPanelInfo.rangeToBeReplaced.clear();
&gt; 
&gt; Need curly brackets here since comment + statement occupies 2 lines.
Moved comment outside the if block

&gt; 
&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.cpp:105
&gt; &gt; +    if (currentSelection != oldSelection) {
&gt; 
&gt; Ditto about early exit.
Fixed.

&gt; 
&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.cpp:135
&gt; &gt; +    return !(m_frame-&gt;document()-&gt;markers()-&gt;hasMarkers(misspellingRange.get(), DocumentMarker::SpellCheckingExemption));
&gt; 
&gt; I don&apos;t think you need parenthesis before !
Removed the parenthesis.

&gt; 
&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.cpp:186
&gt; &gt; +    RefPtr&lt;Range&gt; correctionStartOffsetInParagraphAsRange = Range::create(paragraphRangeContainingCorrection-&gt;startContainer(ec)-&gt;document(), paragraphRangeContainingCorrection-&gt;startPosition(), paragraphRangeContainingCorrection-&gt;startPosition());
&gt; 
&gt; Wow! this is a really long statement.  Maybe the variable name is too verbose.
Made some variable names shorter, as Jia suggested.

&gt; 
&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.cpp:215
&gt; &gt; +        if (m_correctionPanelInfo.panelType == CorrectionPanelInfo::PanelTypeReversion)
&gt; &gt; +            markers-&gt;addMarker(replacementRange.get(), markerTypesToAdd[i]);
&gt; &gt; +        else
&gt; &gt; +            markers-&gt;addMarker(replacementRange.get(), markerTypesToAdd[i], m_correctionPanelInfo.replacedString);
&gt; 
&gt; I know you&apos;re just copying but it seems silly to check this condition in each iteration.  We should just do:
&gt; 
&gt; String description;
&gt; if (m_correctionPanelInfo.panelType == CorrectionPanelInfo::PanelTypeReversion)
&gt;     description = m_correctionPanelInfo.replacedString;
&gt; for (size_t i = 0; i &lt; size; ++i)
&gt;     markers-&gt;addMarker(replacementRange.get(), markerTypesToAdd[i], description);
&gt; 
Fixed.

&gt; Also, I&apos;m surprised to learn that addMarker takes String instead of const String&amp;.  It&apos;s probably a bug.
This fix will be done by my upcoming DocumentMarkerController refactoring.

&gt; 
&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.cpp:313
&gt; &gt; +        } else {
&gt; &gt; +            if (!m_correctionPanelIsDismissedByEditor)
&gt; 
&gt; It seems like this should just be a single &quot;else if&quot;.
Fixed.

&gt; 
&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.cpp:365
&gt; &gt; +        if (((marker.type == DocumentMarker::Replacement &amp;&amp; !marker.description.isNull()) || marker.type == DocumentMarker::Spelling) &amp;&amp; static_cast&lt;int&gt;(marker.endOffset) == endOffset) {
&gt; 
&gt; This condition seems too long to fit in one line. Maybe split it into two lines or extract an inline function?
Divided the line.

&gt; 
&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.cpp:383
&gt; &gt; +void SpellingCorrectionController::respondToAppliedEditing(PassRefPtr&lt;EditCommand&gt; cmd)
&gt; 
&gt; Please spell out &quot;command&quot;.
Done.

&gt; 
&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.cpp:454
&gt; &gt; +SpellingCorrectionController::SpellingCorrectionController(Frame*) {}
&gt; &gt; +SpellingCorrectionController::~SpellingCorrectionController() {}
&gt; &gt; +void SpellingCorrectionController::startCorrectionPanelTimer(CorrectionPanelInfo::PanelType) {}
&gt; &gt; +void SpellingCorrectionController::stopCorrectionPanelTimer() {}
&gt; &gt; +void SpellingCorrectionController::dismiss(ReasonForDismissingCorrectionPanel) {}
&gt; &gt; +void SpellingCorrectionController::show(PassRefPtr&lt;Range&gt;, const String&amp;) {}
&gt; &gt; +void SpellingCorrectionController::applyCorrectionPanelInfo(const Vector&lt;DocumentMarker::MarkerType&gt;&amp;) {}
&gt; &gt; +bool SpellingCorrectionController::applyAutocorrectionBeforeTypingIfAppropriate() { return false; }
&gt; &gt; +void SpellingCorrectionController::respondToUnappliedSpellCorrection(const VisibleSelection&amp;, const String&amp;, const String&amp;) {}
&gt; &gt; +void SpellingCorrectionController::respondToAppliedEditing(PassRefPtr&lt;EditCommand&gt;) {}
&gt; &gt; +void SpellingCorrectionController::respondToChangedSelection(const VisibleSelection&amp;) {}
&gt; &gt; +void SpellingCorrectionController::stopPendingCorrection(const VisibleSelection&amp;) {}
&gt; &gt; +void SpellingCorrectionController::applyPendingCorrection(const VisibleSelection&amp;) {}
&gt; &gt; +void SpellingCorrectionController::handleCorrectionPanelResult(const String&amp;) {}
&gt; &gt; +void SpellingCorrectionController::handleCancelOperation() {}
&gt; &gt; +void SpellingCorrectionController::markRevsersed(PassRefPtr&lt;Range&gt;) {}
&gt; &gt; +void SpellingCorrectionController::recordAutocorrectionResponseReversed(const String&amp;, PassRefPtr&lt;Range&gt;) {}
&gt; &gt; +bool SpellingCorrectionController::hasPendingCorrection() const { return false; }
&gt; &gt; +bool SpellingCorrectionController::isSpellingMarkerAllowed(PassRefPtr&lt;Range&gt;) const { return true; }
&gt; &gt; +bool SpellingCorrectionController::isShowingCorrectionPanel() { return false; }
&gt; &gt; +bool SpellingCorrectionController::isAutomaticSpellingCorrectionEnabled() { return false; }
&gt; 
&gt; I still think we should put this in the header to take the advantage of optimizing compilers.
Tried to put this inline. 
Please see SpellingCorrectionController.h.
Although it might not be a typical webkit way, I think it&apos;s worth to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373345</commentid>
    <comment_count>36</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-24 23:25:18 -0700</bug_when>
    <thetext>Attachment 86887 did not build on win:
Build output: http://queues.webkit.org/results/8233935</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374197</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-27 12:28:05 -0700</bug_when>
    <thetext>Attachment 86887 did not build on chromium:
Build output: http://queues.webkit.org/results/8271229</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378530</commentid>
    <comment_count>38</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-03 04:13:02 -0700</bug_when>
    <thetext>Could fix the build?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380637</commentid>
    <comment_count>39</comment_count>
      <attachid>88469</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-06 11:07:11 -0700</bug_when>
    <thetext>Created attachment 88469
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380640</commentid>
    <comment_count>40</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-06 11:08:07 -0700</bug_when>
    <thetext>&gt; Could fix the build?
I&apos;m sorry for my slow response.
I just updated the patch to fix build break and catchup ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380642</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-06 11:09:46 -0700</bug_when>
    <thetext>Attachment 88469 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1

Source/WebCore/editing/SpellingCorrectionController.h:75:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380763</commentid>
    <comment_count>42</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-04-06 13:16:16 -0700</bug_when>
    <thetext>Attachment 88469 did not build on win:
Build output: http://queues.webkit.org/results/8344336</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380789</commentid>
    <comment_count>43</comment_count>
      <attachid>88504</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-06 13:48:18 -0700</bug_when>
    <thetext>Created attachment 88504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380792</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-06 13:51:15 -0700</bug_when>
    <thetext>Attachment 88504 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1

Source/WebCore/editing/SpellingCorrectionController.h:75:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381387</commentid>
    <comment_count>45</comment_count>
      <attachid>88648</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-07 09:04:32 -0700</bug_when>
    <thetext>Created attachment 88648
Updated to Tot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381391</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-07 09:06:30 -0700</bug_when>
    <thetext>Attachment 88648 did not pass style-queue:

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

Source/WebCore/editing/SpellingCorrectionController.h:75:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381565</commentid>
    <comment_count>47</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-04-07 12:16:24 -0700</bug_when>
    <thetext>In both WebKit and WK2, we need to replace &lt;WebCore/CorrectionPanelInfo.h&gt; with &lt;WebCore/SpellingCorrectionController.h&gt;. Also, this patch seems change the behavior of undoing autocorrection on lion. I will take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381651</commentid>
    <comment_count>48</comment_count>
      <attachid>88686</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-07 13:40:01 -0700</bug_when>
    <thetext>Created attachment 88686
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381654</commentid>
    <comment_count>49</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-07 13:41:30 -0700</bug_when>
    <thetext>Hi Jia, thanks much for your corporation!

&gt; In both WebKit and WK2, we need to replace &lt;WebCore/CorrectionPanelInfo.h&gt; with &lt;WebCore/SpellingCorrectionController.h&gt;. Also, this patch seems change the behavior of undoing autocorrection on lion. I will take a look.
I fixed inclusion lines, and some outdated/wrong part of the patch.
Could you try updated one when you have time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381658</commentid>
    <comment_count>50</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-07 13:43:35 -0700</bug_when>
    <thetext>Attachment 88686 did not pass style-queue:

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

Source/WebCore/editing/SpellingCorrectionController.h:75:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381802</commentid>
    <comment_count>51</comment_count>
      <attachid>88686</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-04-07 15:51:30 -0700</bug_when>
    <thetext>Comment on attachment 88686
Patch

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

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:159
&gt; +void SpellingCorrectionController::show(PassRefPtr&lt;Range&gt; rangeToReplace, const String&amp; replacement)
&gt; +{
&gt; +    FloatRect boundingBox = windowRectForRange(rangeToReplace.get());
&gt; +    if (boundingBox.isEmpty())
&gt; +        return;
&gt; +    m_correctionPanelInfo.rangeToBeReplaced = rangeToReplace;

After this assignment, rangeToReplace has a null pointer.

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:160
&gt; +    m_correctionPanelInfo.replacedString = plainText(rangeToReplace.get());

Now the return value of plainText() will be an empty string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381816</commentid>
    <comment_count>52</comment_count>
      <attachid>88686</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-07 16:10:14 -0700</bug_when>
    <thetext>Comment on attachment 88686
Patch

Need a new patch with the problem Jia Pu pointed out fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381829</commentid>
    <comment_count>53</comment_count>
      <attachid>88728</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-07 16:30:36 -0700</bug_when>
    <thetext>Created attachment 88728
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381831</commentid>
    <comment_count>54</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-07 16:33:12 -0700</bug_when>
    <thetext>Jia, Darin, thank you for your responsive investigation!
I updated the patch, Could you have  another try ?
Thanks in advance.

&gt; 
&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.cpp:159
&gt; &gt; +void SpellingCorrectionController::show(PassRefPtr&lt;Range&gt; rangeToReplace, const String&amp; replacement)
&gt; &gt; +{
&gt; &gt; +    FloatRect boundingBox = windowRectForRange(rangeToReplace.get());
&gt; &gt; +    if (boundingBox.isEmpty())
&gt; &gt; +        return;
&gt; &gt; +    m_correctionPanelInfo.rangeToBeReplaced = rangeToReplace;
&gt; 
&gt; After this assignment, rangeToReplace has a null pointer.
I trapped PassRefPtr trap... Fixed.

&gt; 
&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.cpp:160
&gt; &gt; +    m_correctionPanelInfo.replacedString = plainText(rangeToReplace.get());
&gt; 
&gt; Now the return value of plainText() will be an empty string.
Fixed by above change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381832</commentid>
    <comment_count>55</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-04-07 16:34:30 -0700</bug_when>
    <thetext>(In reply to comment #54)
&gt; Jia, Darin, thank you for your responsive investigation!
&gt; I updated the patch, Could you have  another try ?

There&apos;s one remaining issue related to undoing autocorrection. I&apos;m trying to figure out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381833</commentid>
    <comment_count>56</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-07 16:34:51 -0700</bug_when>
    <thetext>Attachment 88728 did not pass style-queue:

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

Source/WebCore/editing/SpellingCorrectionController.h:75:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381875</commentid>
    <comment_count>57</comment_count>
      <attachid>88728</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-04-07 17:23:58 -0700</bug_when>
    <thetext>Comment on attachment 88728
Patch

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

&gt; Source/WebCore/editing/SpellingCorrectionController.cpp:363
&gt; +bool SpellingCorrectionController::shouldRemoveMarkersUponEditing()
&gt; +{
&gt; +    return REMOVE_MARKERS_UPON_EDITING &amp;&amp; m_correctionPanelInfo.isActive;

On platforms where REMOVE_MARKERS_UPON_EDITING is true, if an editing action changes a word that bears a spelling, grammar or autocorrection marker, we always want to remove it. It is not related to whether the correction panel is active. So this function should return true as long as REMOVE_MARKERS_UPON_EDITING is true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381894</commentid>
    <comment_count>58</comment_count>
      <attachid>88745</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-07 17:55:59 -0700</bug_when>
    <thetext>Created attachment 88745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381897</commentid>
    <comment_count>59</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-07 17:57:33 -0700</bug_when>
    <thetext>
&gt; On platforms where REMOVE_MARKERS_UPON_EDITING is true, if an editing action changes a word that bears a spelling, grammar or autocorrection marker, we always want to remove it. It is not related to whether the correction panel is active. So this function should return true as long as REMOVE_MARKERS_UPON_EDITING is true.
Hi Jia, Thanks for your patient debugging!
I just fixed the pointed problem, praying this works...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381898</commentid>
    <comment_count>60</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-07 17:58:41 -0700</bug_when>
    <thetext>Attachment 88745 did not pass style-queue:

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

Source/WebCore/editing/SpellingCorrectionController.h:75:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382260</commentid>
    <comment_count>61</comment_count>
      <attachid>88745</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-04-08 08:53:06 -0700</bug_when>
    <thetext>Comment on attachment 88745
Patch

This latest patch seems fine on my part. Thanks, Morita.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382364</commentid>
    <comment_count>62</comment_count>
      <attachid>88745</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-08 10:40:10 -0700</bug_when>
    <thetext>Comment on attachment 88745
Patch

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

&gt; Source/WebCore/editing/Editor.cpp:-3546
&gt;          bool shouldCheckSpellingAndGrammar = true;
&gt; -#if SUPPORT_AUTOCORRECTION_PANEL
&gt;          // Don&apos;t check spelling and grammar if the change of selection is triggered by spelling correction itself.
&gt;          shouldCheckSpellingAndGrammar = !(options &amp; SelectionController::SpellCorrectionTriggered);
&gt; -#endif

Since we are removing this #if, we should combine the definition and initialization into a single line.

&gt; Source/WebCore/editing/SpellingCorrectionController.h:77
&gt; +#define UNLESS_ENABLED(functionBody) functionBody

I think you should just put the braces here in the macro so we can use ( ) instead of ({ }) around all those function bodies.

&gt; Source/WebCore/editing/SpellingCorrectionController.h:80
&gt; +class SpellingCorrectionController {

This class should be marked noncopyable.

&gt; Source/WebCore/editing/SpellingCorrectionController.h:83
&gt; +    SpellingCorrectionController(Frame*) UNLESS_ENABLED({})
&gt; +    ~SpellingCorrectionController() UNLESS_ENABLED({})

This technique with all the macros on each function seems a little ugly to me, but I have no better suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382492</commentid>
    <comment_count>63</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-08 13:09:29 -0700</bug_when>
    <thetext>Hi Darin, thank you for reviewing!
I&apos;ll land this after addressing you feedback.

&gt; &gt; Source/WebCore/editing/SpellingCorrectionController.h:83
&gt; &gt; +    SpellingCorrectionController(Frame*) UNLESS_ENABLED({})
&gt; &gt; +    ~SpellingCorrectionController() UNLESS_ENABLED({})
&gt; 
&gt; This technique with all the macros on each function seems a little ugly to me, but I have no better suggestion.
I have same impression. One possible idea is to provide empty abstract class.
But it will have some performance penalty and I just gave it up at this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382561</commentid>
    <comment_count>64</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-08 14:21:54 -0700</bug_when>
    <thetext>Committed r83344: &lt;http://trac.webkit.org/changeset/83344&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382572</commentid>
    <comment_count>65</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-08 14:52:59 -0700</bug_when>
    <thetext>This has broken Windows and Leopard so far. Not sure why it didn&apos;t break Win EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382580</commentid>
    <comment_count>66</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-08 15:04:09 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/83344 might have broken Windows Release (Build), Windows Debug (Build), and WinCE Release (Build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382618</commentid>
    <comment_count>67</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-08 15:56:08 -0700</bug_when>
    <thetext>(In reply to comment #64)
&gt; Committed r83344: &lt;http://trac.webkit.org/changeset/83344&gt;

Why is the UNLESS_ENABLED macro ok? Why should we be compiling this code with empty stubs for features that are not enabled? Why not compile it out instead of potentially adding runtime overhead and introducing subtle bugs because someone calls something that is not enabled and it doesn&apos;t fail at compile-time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382668</commentid>
    <comment_count>68</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-08 17:18:58 -0700</bug_when>
    <thetext>&gt; Why is the UNLESS_ENABLED macro ok? Why should we be compiling this code with empty stubs for features that are not enabled? Why not compile it out instead of potentially adding runtime overhead and introducing subtle bugs because someone calls something that is not enabled and it doesn&apos;t fail at compile-time?
So how about to use caller side macro like RUN_IF_AUTOCORRECTION_ENABLED() ?
That would be:
IF_AUTOCORRECTION_ENABLED(m_spellingCorrector-&gt;someMethod());

The point is to minimize the number of ifdefs. 
#if/#endif pairs occupy two additional lines, it&apos;s makes reading/changing code really hard.
In editor, there is so meny ifdefs. I don&apos;t want any more.

This is important especially for Editor because editor-related ifdefs are large number of small chunks,
that is different from typical flags like SVG, which has large, smal number of blocks.

For more long term goal, I&apos;d like to factor the Editor class into more meaningful group of classes
like spell checking, command execution, text composition, etc.
This is a part of such refactoring.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85922</attachid>
            <date>2011-03-16 04:42:32 -0700</date>
            <delta_ts>2011-03-17 00:39:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55571-20110316204229.patch</filename>
            <type>text/plain</type>
            <size>85056</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODEyMzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlNGI4NGE2MzhjNjUwYzM2
MGQ2M2UxZWQ5ZmM1NTVmZDkwNDNiNTg5Li44NTI2ZGQyNmJjMmNmOWI1NjBlMDY0M2QwODdiMTc2
ZDVkYmUzYTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTEtMDMtMTYgIE1PUklU
QSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1JlZmFjdG9yaW5nXSBBdXRvIGNvcnJlY3Rpb24gcGFu
ZWwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgaXRzIG93biBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NTcxCisKKyAgICAgICAgRXh0cmFjdGVk
IGNvZGUgaW5zaWRlIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwgaW50bworICAgICAgICBD
b3JyZWN0aW9uUGFuZWxDb250cm9sbGVyIGNsYXNzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywg
bm8gYmVoYXZpb3IgY2hhZ25lLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcv
Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
bWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjptYXJrZXJU
eXBlc0ZvclJlcGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbENv
bnRyb2xsZXI6OkNvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlcjo6fkNvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlcjo6c3RhcnRDb3JyZWN0
aW9uUGFuZWxUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxDb250cm9s
bGVyOjpzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29ycmVj
dGlvblBhbmVsQ29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlcjo6aGFzUGVuZGlu
Z0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsQ29udHJvbGxl
cjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29ycmVjdGlv
blBhbmVsQ29udHJvbGxlcjo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb3JyZWN0aW9uUGFuZWxDb250cm9sbGVyOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlcjo6ZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxDb250cm9sbGVyOjph
cHBseUNvcnJlY3Rpb25QYW5lbEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6Q29ycmVjdGlvblBh
bmVsQ29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlcjo6dW5hcHBs
aWVkU3BlbGxDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbENv
bnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXI6OmlzQXV0b21hdGlj
U3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb3JyZWN0aW9u
UGFuZWxDb250cm9sbGVyOjp3aW5kb3dSZWN0Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxDb250cm9sbGVyOjphcHBsaWVkRWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxDb250cm9sbGVyOjpjbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlcjo6dGV4dENoZWNr
ZXIpOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBlZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
aWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6On5FZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBy
ZXBhcmVFZGl0aW5nV29yZCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAg
KiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAqIGVkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpp
bnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVs
bGluZ3NBZnRlclR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxl
dGVLZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndhcmRE
ZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisgICAg
ICAgIChXZWJDb3JlOjppc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKToKKyAgICAgICAgKiBs
b2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVu
dDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgICogcGFnZS9FZGl0b3JDbGllbnQuaDoK
KwogMjAxMS0wMy0xNiAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCmluZGV4IGY4OGIwZGVkMGM1NWM5Zjk5MDZiZTg3ODk3NzNkNzA5ODliNmU1NTIuLjM3ZGUy
NWMzMTc5MWFhMGZmYmExNzRjMjZiZGRjMGE2NjM4ZTEyZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CkBAIC03NDUsNyArNzQ1LDYgQEAgX19aTjdXZWJDb3JlNkVkaXRvcjI0aXNTZWxlY3Rpb25Vbmdy
YW1tYXRpY2FsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNmRlY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYK
IF9fWk43V2ViQ29yZTZFZGl0b3IyNndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkRVJLTjNXVEY2
U3RyaW5nRVJLTlMxXzZWZWN0b3JJUzJfTG0wRUVFCi1fX1pON1dlYkNvcmU2RWRpdG9yMjdoYW5k
bGVDb3JyZWN0aW9uUGFuZWxSZXN1bHRFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2RWRp
dG9yMjljYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9y
MjljYW5JbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMzBh
cHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb25FUE5TXzE5Q1NTU3R5bGVEZWNsYXJhdGlvbkVO
U18xMEVkaXRBY3Rpb25FCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYzljZjliMzgyYzI0YmMyZWVlYjkzYjc0NjdjMjRhNDcyMTQ2
NTMzMC4uYjE3NzRhMDU1NGRhN2QyODNlODcyNDkxZTE5ZDE0OGRjODdmMmYzZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzE4
Miw2ICszMTgyLDggQEAKIAkJQTYyMkE4RkMxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1
cml0eUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTYyMkE4RjYxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwICov
OyB9OwogCQlBNjIyQThGRDEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTYyMkE4Rjcx
MjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCAqLzsgfTsKIAkJQTYyMkE4
RkYxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyog
R2VuZXJpY0JpbmRpbmcuaCAqLzsgfTsKKwkJQTcwMDVDQ0MxMzMwQzRCQTAwMENDMEJBIC8qIENv
cnJlY3Rpb25QYW5lbENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIENvcnJlY3Rpb25Q
YW5lbENvbnRyb2xsZXIuY3BwICovOyB9OworCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyog
Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIENvcnJlY3Rpb25Q
YW5lbENvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNzE1MUJEODEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTUxQkQ3
MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTg3NjBFMEIyQTEyMDEwMEExNkVD
RSAvKiBEcmFnQWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTcxODc2MEQwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTcxODc4OTAwQjJE
MDRBQzAwQTE2RUNFIC8qIERyYWdDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxODc4OEYwQjJEMDRBQzAwQTE2RUNFIC8qIERy
YWdDb250cm9sbGVyTWFjLm1tICovOyB9OwpAQCAtNDc3Niw3ICs0Nzc4LDYgQEAKIAkJQjc3NkQ0
M0QxMTA0NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyog
UHJpbnRDb250ZXh0LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8qIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCODg1RThEMjExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDUxMUUwNkREMjAw
OUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0
IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKCk7IH07IH07Ci0JCUI4QTZBNkQ1MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0
aW9uUGFuZWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCOEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUI4REJEQjRC
MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ3MTMwQjBGOEEwMEY1Q0RC
MSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKIAkJQjhEQkRCNEMxMzBCMEY4QTAw
RjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxl
Y3Rpb25Db21tYW5kLmggKi87IH07CiAJCUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKQEAgLTk2NjYsNiArOTY2Nyw4IEBACiAJCUE2MjJBOEY2
MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwOyBwYXRoID0g
Z2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTYyMkE4RjcxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQmluZGluZ1NlY3VyaXR5QmFzZS5oOyBw
YXRoID0gZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE2MjJBOEY5MTIyQzQ0QTYwMEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW5lcmljQmluZGluZy5oOyBwYXRoID0g
Z2VuZXJpYy9HZW5lcmljQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
NzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3JyZWN0aW9uUGFuZWxDb250
cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTcwMDVDQ0IxMzMwQzRC
QTAwMENDMEJBIC8qIENvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNzE1MUJENzEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNr
ZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNrZXJD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxODc2MEQwQjJBMTIwMTAw
QTE2RUNFIC8qIERyYWdBY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERyYWdBY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTg3ODhGMEIy
RDA0QUMwMEExNkVDRSAvKiBEcmFnQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTExNjYsNyArMTExNjksNiBAQAogCQlCNzc2RDQzQzExMDQ1Mjc1
MDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFByaW50Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUI4ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg4
NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjhBNkE2RDQxMjdCMzM4
RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29ycmVjdGlvblBhbmVsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCOERCREI0NzEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXRTZWxlY3Rpb25Db21t
YW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDgxMzBCMEY4QTAw
RjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2V0U2VsZWN0aW9uQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDM3LDcg
KzE1NDM5LDggQEAKIAkJCQk5MzMwOUQ4QzA5OUU2NDkxMDA1NkU1ODEgLyogQnJlYWtCbG9ja3F1
b3RlQ29tbWFuZC5oICovLAogCQkJCTkzMzA5RDhEMDk5RTY0OTEwMDU2RTU4MSAvKiBDb21wb3Np
dGVFZGl0Q29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEOEUwOTlFNjQ5MTAwNTZFNTgxIC8qIENv
bXBvc2l0ZUVkaXRDb21tYW5kLmggKi8sCi0JCQkJQjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8q
IENvcnJlY3Rpb25QYW5lbEluZm8uaCAqLywKKwkJCQlBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEg
LyogQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlci5jcHAgKi8sCisJCQkJQTcwMDVDQ0IxMzMwQzRC
QTAwMENDMEJBIC8qIENvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIuaCAqLywKIAkJCQlEMEIwNTU2
NzA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQuY3BwICovLAogCQkJCUQwQjA1
NTY2MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5oICovLAogCQkJCTFDNEM4
RjYzMEFEODY1NUQwMDk0NzVDRSAvKiBEZWxldGVCdXR0b24uY3BwICovLApAQCAtMTk4MzksNyAr
MTk4NDIsNiBAQAogCQkJCTkzNTIwODgyMDlCRDQ1RTkwMEYyMDM4RCAvKiBDb29raWVKYXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTdFRTY4NDY0MTJEMjZFMzgwMEU3OTQxNSAvKiBDb29raWVTdG9y
YWdlQ0ZOZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNkZENDg4MEY2NzZFNTcwMDA5Mjg3MyAv
KiBDb29yZGluYXRlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjhBNkE2RDUxMjdCMzM4RDAwODY3
M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2RDA0
MEExOTg5Q0EwMDdGQjhDNSAvKiBDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjk3
OTBFODIwNjkyMDBCMjU5NjUgLyogQ291bnRlckNvbnRlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDNUVCOTUxMEU4MjA1NkIwMEIyNTk2NSAvKiBDb3VudGVyRGlyZWN0aXZlcy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yMjY4MCw2ICsyMjY4Miw3IEBACiAJCQkJMzE5NDYyMDQxMzAyMkJGMTAwNEJC
M0Y4IC8qIERPTVdlYktpdEFuaW1hdGlvbkxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOUU2
OUIzMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTMxOUU2OUI2MTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyogQ29ycmVjdGlvblBh
bmVsQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTM0OCw2ICsyNTM1MSw3IEBACiAJ
CQkJMzE5RTY4ODcxMzI3QzkxMTAwNEFDOTFBIC8qIEpTV2ViS2l0QW5pbWF0aW9uQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTMxOUU2OUIyMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRB
bmltYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE5RTY5QjUxMzI5OUJCRDAwNEFDOTFB
IC8qIFdlYktpdEFuaW1hdGlvbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTcwMDVDQ0Mx
MzMwQzRCQTAwMENDMEJBIC8qIENvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5l
bENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxD
b250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzA2ZmM4MWFjNzkwOGIwMWNlMTVmYjdjMjQ4MDVk
YzI1MDBjMDBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db3Jy
ZWN0aW9uUGFuZWxDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDQ1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb3Jy
ZWN0aW9uUGFuZWxDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVu
dC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVk
ZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgorI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xp
ZW50LmgiCisjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCisjaW5jbHVkZSAiVGV4dEl0
ZXJhdG9yLmgiCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIK
KyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworc3RhdGljIGNvbnN0
IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yQXV0b2Nv
cnJlY3Rpb24oKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbiwgKCkpOworICAg
IGlmIChtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICBt
YXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQpOworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1
bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7CisgICAgICAgIG1hcmtlclR5cGVzRm9y
QXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0
aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb247Cit9
CisKK3N0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJr
ZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3Rv
cjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQs
ICgpKTsKKyAgICBpZiAobWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50KTsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5hcHBlbmQoRG9j
dW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgIH0KKyAgICByZXR1cm4g
bWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudDsKK30KKworQ29ycmVjdGlvblBhbmVsQ29udHJvbGxl
cjo6Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlcihGcmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1l
KGZyYW1lKQorICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAmQ29ycmVjdGlvblBh
bmVsQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCkKK3sKK30KKworQ29ycmVj
dGlvblBhbmVsQ29udHJvbGxlcjo6fkNvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIoKQoreworI2lm
IFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVs
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyNlbmRpZgorfQor
Cit2b2lkIENvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXI6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGlt
ZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUpCit7CisjaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAorICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1l
ckludGVydmFsID0gMC4zOworICAgIGlmIChpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVu
YWJsZWQoKSkgeworICAgICAgICBpZiAodHlwZSA9PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVDb3JyZWN0aW9uKQorICAgICAgICAgICAgLy8gSWYgdHlwZSBpcyBQYW5lbFR5cGVSZXZl
cnNpb24sIHRoZW4gdGhlIG5ldyByYW5nZSBoYXMgYmVlbiBzZXQuIFNvIHdlIHNob3VsZG4ndCBj
bGVhciBpdC4KKyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC5jbGVhcigpOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlID0g
dHlwZTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVj
dGlvblBhbmVsVGltZXJJbnRlcnZhbCk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
dHlwZSk7CisjZW5kaWYKK30KKwordm9pZCBDb3JyZWN0aW9uUGFuZWxDb250cm9sbGVyOjpzdG9w
Q29ycmVjdGlvblBhbmVsVGltZXIoKQoreworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKKyAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsKKyAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKKyNlbmRpZgorfQorCit2b2lkIENv
cnJlY3Rpb25QYW5lbENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCit7CisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTAorICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rp
b24gYmVmb3JlIHdlIGNhbGwgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4K
KyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpKTsKKyAgICBpZiAoY3VycmVudFNlbGVjdGlvbiAhPSBvbGRTZWxlY3Rp
b24pIHsKKyAgICAgICAgc3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CisgICAgICAgIGRpc21p
c3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9y
ZWQpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7CisjZW5k
aWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorfQorCit2b2lkIENvcnJlY3Rpb25Q
YW5lbENvbnRyb2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCit7CisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTAorICAgIC8vIEFwcGx5IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5leHQg
cm91bmQgb2Ygc3BlbGwgY2hlY2tpbmcuCisgICAgYm9vbCBkb0FwcGx5Q29ycmVjdGlvbiA9IHRy
dWU7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb25BZnRl
clR5cGluZy52aXNpYmxlU3RhcnQoKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3Jk
ID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBMZWZ0V29y
ZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBSaWdodFdvcmRJZk9u
Qm91bmRhcnkpKTsKKyAgICBpZiAoY3VycmVudFdvcmQudmlzaWJsZUVuZCgpID09IHN0YXJ0T2ZT
ZWxlY3Rpb24pIHsKKyAgICAgICAgU3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0KGN1cnJlbnRX
b3JkLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBpZiAod29yZFRleHQubGVu
Z3RoKCkgPiAwICYmIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIod29yZFRleHRbd29yZFRl
eHQubGVuZ3RoKCkgLSAxXSkpCisgICAgICAgICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNl
OworICAgIH0KKyAgICBpZiAoZG9BcHBseUNvcnJlY3Rpb24pCisgICAgICAgIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKTsK
KyAgICBlbHNlCisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNl
ZC5jbGVhcigpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcp
OworI2VuZGlmCit9CisKK2Jvb2wgQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlcjo6aGFzUGVuZGlu
Z0NvcnJlY3Rpb24oKSBjb25zdAoreworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwK
KyAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkOworI2Vs
c2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworYm9vbCBDb3JyZWN0aW9uUGFuZWxD
b250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNz
cGVsbGluZ1JhbmdlKSBjb25zdAoreworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwK
KyAgICByZXR1cm4gIShtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmhhc01hcmtlcnMo
bWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVt
cHRpb24pKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgQ29y
cmVjdGlvblBhbmVsQ29udHJvbGxlcjo6c2hvd0NvcnJlY3Rpb25QYW5lbChQYXNzUmVmUHRyPFJh
bmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKK3sKKyNpZiBT
VVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0g
d2luZG93UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBpZiAoYm91bmRp
bmdCb3guaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gcmFuZ2VUb1JlcGxhY2U7CisgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgp
KTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNl
bWVudDsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOworICAgIGNs
aWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5
cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHJl
cGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpLCB0aGlzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHJhbmdlVG9SZXBsYWNlKTsKKyAgICBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnQpOworI2Vu
ZGlmCit9CisKK3ZvaWQgQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlcjo6aGFuZGxlQ2FuY2VsT3Bl
cmF0aW9uKCkKK3sKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgaWYgKCFt
X2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKKyAgICBpZiAoY2xpZW50KCkpCisg
ICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpOworI2VuZGlmCit9CisKK3ZvaWQgQ29ycmVjdGlv
blBhbmVsQ29udHJvbGxlcjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCit7CisjaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAorICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZl
ID0gZmFsc2U7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1
ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlv
blBhbmVsKHJlYXNvbkZvckRpc21pc3NpbmcpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVh
c29uRm9yRGlzbWlzc2luZyk7CisjZW5kaWYKK30KKwordm9pZCBDb3JyZWN0aW9uUGFuZWxDb250
cm9sbGVyOjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKK3sKKyNpZiBTVVBQT1JUX0FVVE9D
T1JSRUNUSU9OX1BBTkVMCisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Cisg
ICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0
RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdy
YXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24o
KSkpOworCisgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRv
QmVSZXBsYWNlZCwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgorICAgIC8v
IEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiBy
YW5nZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KKyAgICAvLyBTbyBiZWZvcmUg
d2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQKKyAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3Rh
cnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlv
blN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKKyAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBv
cmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFu
Z2UKKyAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhl
IHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkLgorICAgIFJlZlB0cjxSYW5nZT4g
Y29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShw
YXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRv
Y3VtZW50KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRp
b24oKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigp
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCk7CisgICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5Q
YXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQu
Y29udGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRl
T2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24g
c28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFj
ZS4KKyAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5n
ZXQoKSk7CisKKyAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhp
cyBtZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgorICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOworICAgIGFwcGx5Q29tbWFuZChTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykpOworICAgIHNldEVuZChwYXJhZ3JhcGhS
YW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2Vs
ZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0g
VGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
LmdldCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSk7CisgICAgU3RyaW5nIG5ld1RleHQg
PSBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7CisKKyAgICAvLyBDaGVjayB0byBz
ZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVkLgorICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIHNpemVfdCBzaXplID0g
bWFya2VyVHlwZXNUb0FkZC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPT0g
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKQorICAgICAgICAgICAgbWFy
a2Vycy0+YWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGVzVG9BZGRb
aV0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFj
ZW1lbnRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZXNUb0FkZFtpXSwgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJlcGxhY2VkU3RyaW5nKTsKKyAgICB9CisjZWxzZSAvLyBTVVBQT1JUX0FVVE9DT1JSRUNU
SU9OX1BBTkVMCisgICAgVU5VU0VEX1BBUkFNKG1hcmtlclR5cGVzVG9BZGQpOworI2VuZGlmIC8v
IFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKK30KKworYm9vbCBDb3JyZWN0aW9uUGFuZWxD
b250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgp
Cit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwg
IW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rp
b24oKS5zdGFydCgpOworCisgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7CisgICAgICAgIGRpc21p
c3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2Vw
dGVkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKyAgICAKKyAgICAvLyBQZW5kaW5n
IGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5cyBiZSB3aGVyZSBjYXJldCBpcy4gQnV0IGluIGNhc2Ug
dGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIHdlIHN0aWxsIHdhbnQgdG8gZGlzbWlzcyB0aGUgcGFu
ZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhlIGNvcnJlY3Rpb24uCisgICAgQVNTRVJUKG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBv
c2l0aW9uKTsKKyAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdD
b3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ29y
cmVjdGlvblBhbmVsQ29udHJvbGxlcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJl
Y3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQoreworI2lmIFNVUFBPUlRfQVVUT0NPUlJF
Q1RJT05fUEFORUwKKyAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShF
ZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlv
bik7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisgICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgU2VsZWN0
aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpDbGVhclR5
cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVk
KTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1
bWVudCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFt
ZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmVuZCgpKTsKKworICAgIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAg
ICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmcpOworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50KTsKKyAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyNlbHNlIC8vIFNVUFBPUlRf
QVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uT2ZDb3JyZWN0
ZWQpOworICAgIFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOworICAgIFVOVVNFRF9QQVJBTShjb3Jy
ZWN0aW9uKTsKKyNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCit9CisKK3Zv
aWQgQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChU
aW1lcjxDb3JyZWN0aW9uUGFuZWxDb250cm9sbGVyPiopCit7CisjaWYgU1VQUE9SVF9BVVRPQ09S
UkVDVElPTl9QQU5FTAorICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9
IGZhbHNlOworICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSkgewor
ICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbjogeworICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2Vs
ZWN0aW9uKCkpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9uLnN0YXJ0
KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBz
dGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworICAgICAgICBWaXNpYmxl
U2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0KTsKKyAg
ICAgICAgbV9mcmFtZS0+ZWRpdG9yKCktPm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoRWRpdG9yOjpNYXJrU3BlbGxpbmcgfCBFZGl0b3I6OlNob3dDb3JyZWN0aW9uUGFu
ZWwsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgMCk7CisgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJl
dmVyc2lvbjogeworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVl
OworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRl
eHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAg
ICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIGlmICghYm91bmRp
bmdCb3guaXNFbXB0eSgpKQorICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFu
ZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPigpLCB0aGlzKTsKKyAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdn
ZXN0aW9uczogeworICAgICAgICBpZiAocGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vk
U3RyaW5nKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0
ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmFuZ2VUb0JlUmVwbGFjZWQpLnBhcmFncmFwaFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBWZWN0
b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nl
c0ZvcldvcmQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBwYXJhZ3JhcGhU
ZXh0LCBzdWdnZXN0aW9ucyk7CisgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVh
cigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRvcFN1
Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJzdCgpOworICAgICAgICBzdWdnZXN0aW9ucy5yZW1v
dmUoMCk7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Cisg
ICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBpZiAoIWJv
dW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlv
blBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHRvcFN1Z2dlc3Rpb24sIHN1Z2dlc3Rp
b25zLCB0aGlzKTsKKyAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorfQorCit2
b2lkIENvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXI6OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3Vs
dChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit7CisgICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2Ug
PSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCk7CisgICAgaWYg
KCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gcmVwbGFjZWRSYW5nZS0+
b3duZXJEb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgY3VycmVudFdv
cmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdl
dCgpKTsKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdvcmQgd2UgYXJlIGFib3V0IHRvIGNv
cnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVyIGZpcmluZyBhbmQgY2FsbGJhY2sg
YmVpbmcgdHJpZ2dlcmVkLgorICAgIGlmIChjdXJyZW50V29yZCAhPSBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZWRTdHJpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworCisgICAgc3dpdGNoIChtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucGFuZWxUeXBlKSB7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVDb3JyZWN0aW9uOgorICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkgeworICAg
ICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gY29ycmVj
dGlvbjsKKyAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJrZXJUeXBlc0Zv
ckF1dG9jb3JyZWN0aW9uKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFt
X2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IpCisgICAgICAgICAgICAgICAgcmVw
bGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRN
YXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lv
bjoKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2Vz
dGlvbnM6CisgICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOworICAg
ICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1l
bnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK2Jvb2wgQ29ycmVj
dGlvblBhbmVsQ29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVk
KCkKK3sKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZCgpOworfQorCitGbG9hdFJlY3QgQ29ycmVjdGlvblBhbmVsQ29u
dHJvbGxlcjo6d2luZG93UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkgY29uc3QKK3sK
KyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgcmV0dXJuIHZpZXcg
PyB2aWV3LT5jb250ZW50c1RvV2luZG93KEludFJlY3QocmFuZ2UtPmJvdW5kaW5nUmVjdCgpKSkg
OiBGbG9hdFJlY3QoKTsKK30gICAgICAgIAorCit2b2lkIENvcnJlY3Rpb25QYW5lbENvbnRyb2xs
ZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xk
U2VsZWN0aW9uKQoreworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICBWaXNp
YmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpKTsKKyAgICAvLyBXaGVuIHVzZXIgbW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRv
Y29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hvdyB0aGUgcGFuZWwKKyAgICAvLyBjb250
YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29ycmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBjYW4g
cXVpY2tseSByZXZlcnQgdGhlCisgICAgLy8gdW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJl
LCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVsIHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0Cisg
ICAgLy8gdGhlIG5ldyBjYXJldCBwb3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgd29yZC4KKyAg
ICBpZiAoIWN1cnJlbnRTZWxlY3Rpb24uaXNDYXJldCgpIHx8IGN1cnJlbnRTZWxlY3Rpb24gPT0g
b2xkU2VsZWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBWaXNpYmxlUG9zaXRpb24gc2Vs
ZWN0aW9uUG9zaXRpb24gPSBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0KCk7CisgICAgVmlzaWJsZVBv
c2l0aW9uIGVuZFBvc2l0aW9uT2ZXb3JkID0gZW5kT2ZXb3JkKHNlbGVjdGlvblBvc2l0aW9uLCBM
ZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgaWYgKHNlbGVjdGlvblBvc2l0aW9uICE9IGVuZFBv
c2l0aW9uT2ZXb3JkKQorICAgICAgICByZXR1cm47CisKKyAgICBQb3NpdGlvbiBwb3NpdGlvbiA9
IGVuZFBvc2l0aW9uT2ZXb3JkLmRlZXBFcXVpdmFsZW50KCk7CisgICAgaWYgKHBvc2l0aW9uLmFu
Y2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQorICAgICAg
ICByZXR1cm47CisKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwor
ICAgIGludCBlbmRPZmZzZXQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKKyAg
ICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCktPm1hcmtlcnNGb3JOb2RlKG5vZGUpOworICAgIHNpemVfdCBtYXJrZXJDb3VudCA9IG1h
cmtlcnMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyQ291bnQ7ICsr
aSkgeworICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyID0gbWFya2Vyc1tpXTsK
KyAgICAgICAgaWYgKCgobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
ICYmICFtYXJrZXIuZGVzY3JpcHRpb24uaXNOdWxsKCkpIHx8IG1hcmtlci50eXBlID09IERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZykgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXIuZW5kT2Zmc2V0
KSA9PSBlbmRPZmZzZXQpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3RhcnRPZmZz
ZXQsIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQpOworICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRX
b3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoY3VycmVu
dFdvcmQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmFuZ2VUb0JlUmVwbGFjZWQgPSB3b3JkUmFuZ2U7CisgICAgICAgICAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7CisgICAgICAgICAgICAg
ICAgaWYgKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykKKyAgICAgICAg
ICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZv
OjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3Ry
aW5nID0gbWFya2VyLmRlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgICAgICBzdGFydENvcnJl
Y3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24pOwor
I2VuZGlmIC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKK30KKwordm9pZCBDb3JyZWN0
aW9uUGFuZWxDb250cm9sbGVyOjphcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5k
PiBjbWQpCit7CisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIGlmIChjbWQt
PmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNtZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25J
bmRpY2F0b3IoKSkKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1v
dmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGNtZCk7CisjZW5kaWYKK30KKworRWRpdG9yQ2xpZW50KiBDb3JyZWN0
aW9uUGFuZWxDb250cm9sbGVyOjpjbGllbnQoKQoreworICAgIHJldHVybiBtX2ZyYW1lLT5wYWdl
KCkgPyBtX2ZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogMDsKK30KKworVGV4dENoZWNr
ZXJDbGllbnQqIENvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKK3sKKyAg
ICBpZiAoRWRpdG9yQ2xpZW50KiBvd25lciA9IGNsaWVudCgpKQorICAgICAgICByZXR1cm4gb3du
ZXItPnRleHRDaGVja2VyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29ycmVjdGlvblBhbmVs
Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxDb250
cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOGNmZmQ4MTYxOThmMjliOTdmYWUyZjM1N2Q3YmUwMmQ2N2Fm
ZjBmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29ycmVjdGlv
blBhbmVsQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENv
cnJlY3Rpb25QYW5lbENvbnRyb2xsZXJfaAorI2RlZmluZSBDb3JyZWN0aW9uUGFuZWxDb250cm9s
bGVyX2gKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkKKy8vIFNvbWUgcGxhdGZvcm1zIHByb3ZpZGUgVUkgZm9yIHN1Z2dlc3Rp
bmcgYXV0b2NvcnJlY3Rpb24uCisjZGVmaW5lIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwg
MQorLy8gU29tZSBwbGF0Zm9ybXMgdXNlIHNwZWxsaW5nIGFuZCBhdXRvY29ycmVjdGlvbiBtYXJr
ZXJzIHRvIHByb3ZpZGUgdmlzdWFsIGN1ZS4KKy8vIE9uIHN1Y2ggcGxhdGZvcm0sIGlmIHdvcmQg
d2l0aCBtYXJrZXIgaXMgZWRpdGVkLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbWFya2VyLgorI2Rl
ZmluZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMQorI2Vsc2UKKyNkZWZpbmUgU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTCAwCisjZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJ
VElORyAwCisjZW5kaWYgLy8gI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKworI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVkaXRvckNsaWVudDsKK2NsYXNz
IEVkaXRDb21tYW5kOworY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CitjbGFzcyBWaXNpYmxlU2Vs
ZWN0aW9uOworCitzdHJ1Y3QgQ29ycmVjdGlvblBhbmVsSW5mbyB7CisgICAgZW51bSBQYW5lbFR5
cGUgeworICAgICAgICBQYW5lbFR5cGVDb3JyZWN0aW9uID0gMCwKKyAgICAgICAgUGFuZWxUeXBl
UmV2ZXJzaW9uLAorICAgICAgICBQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zCisgICAgfTsK
KworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQ7CisgICAgU3RyaW5nIHJlcGxh
Y2VkU3RyaW5nOworICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZzsKKyAgICBQYW5lbFR5cGUg
cGFuZWxUeXBlOworICAgIGJvb2wgaXNBY3RpdmU7Cit9OworCitlbnVtIFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWwgeworICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWxDYW5jZWxsZWQgPSAwLAorICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWxJZ25vcmVkLAorICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRl
ZAorfTsKKworY2xhc3MgQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAg
Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlcihGcmFtZSopOworICAgIH5Db3JyZWN0aW9uUGFuZWxD
b250cm9sbGVyKCk7CisKKyAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlKTsKKyAgICB2b2lkIHN0b3BDb3JyZWN0aW9uUGFuZWxU
aW1lcigpOworICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsKTsKKyAgICB2b2lkIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhj
b25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc1RvQWRk
KTsKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdhcyBhcHBsaWVkLCBmYWxzZSBv
dGhlcndpc2UuCisgICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHBy
b3ByaWF0ZSgpOworCisgICAgdm9pZCB1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVj
dGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOworICAgIHZvaWQgYXBwbGllZEVkaXRpbmco
UGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pOworCisgICAgdm9pZCBoYW5kbGVDb3JyZWN0aW9uUGFu
ZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKKyAgICB2b2lkIGhhbmRsZUNhbmNl
bE9wZXJhdGlvbigpOworICAgIHZvaWQgY29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxD
b3JyZWN0aW9uUGFuZWxDb250cm9sbGVyPiopOworICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pOworICAgIHZvaWQg
c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlv
bik7CisgICAgdm9pZCBhcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsKKyAgICB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwo
UGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnQpOworCisgICAgYm9vbCBoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0OworICAgIGJvb2wg
aXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5n
ZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRWRpdG9yQ2xpZW50KiBjbGllbnQoKTsKKyAgICBU
ZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKTsKKyAgICBib29sIGlzQXV0b21hdGljU3Bl
bGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0Rm9yUmFu
Z2UoY29uc3QgUmFuZ2UqKSBjb25zdDsKKworICAgIEVkaXRvckNsaWVudCogbV9jbGllbnQ7Cisg
ICAgRnJhbWUqIG1fZnJhbWU7CisKKyAgICBUaW1lcjxDb3JyZWN0aW9uUGFuZWxDb250cm9sbGVy
PiBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyOworICAgIENvcnJlY3Rpb25QYW5lbEluZm8gbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvOworICAgIGJvb2wgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5
RWRpdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ29ycmVj
dGlvblBhbmVsQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvcnJlY3Rpb25QYW5lbEluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29ycmVjdGlv
blBhbmVsSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjA5OWUxNjJmYTcy
ZjdmMTM5ZDYzZmMxMzc4YzRiNGIzM2YzZmU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29ycmVjdGlvblBhbmVs
SW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBD
b3JyZWN0aW9uUGFuZWxJbmZvX2gKLSNkZWZpbmUgQ29ycmVjdGlvblBhbmVsSW5mb19oCi0KLSNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpCi0vLyBTb21lIHBsYXRmb3JtcyBwcm92aWRlIFVJIGZvciBzdWdnZXN0aW5nIGF1dG9jb3Jy
ZWN0aW9uLgotI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDEKLS8vIFNvbWUg
cGxhdGZvcm1zIHVzZSBzcGVsbGluZyBhbmQgYXV0b2NvcnJlY3Rpb24gbWFya2VycyB0byBwcm92
aWRlIHZpc3VhbCBjdWUuCi0vLyBPbiBzdWNoIHBsYXRmb3JtLCBpZiB3b3JkIHdpdGggbWFya2Vy
IGlzIGVkaXRlZCwgd2UgbmVlZCB0byByZW1vdmUgdGhlIG1hcmtlci4KLSNkZWZpbmUgUkVNT1ZF
X01BUktFUlNfVVBPTl9FRElUSU5HIDEKLSNlbHNlCi0jZGVmaW5lIFNVUFBPUlRfQVVUT0NPUlJF
Q1RJT05fUEFORUwgMAotI2RlZmluZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMAotI2Vu
ZGlmIC8vICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCi0KLSNpbmNsdWRlICJSYW5nZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0cnVjdCBDb3JyZWN0aW9uUGFuZWxJbmZvIHsKLSAgICBlbnVtIFBhbmVsVHlwZSB7Ci0g
ICAgICAgIFBhbmVsVHlwZUNvcnJlY3Rpb24gPSAwLAotICAgICAgICBQYW5lbFR5cGVSZXZlcnNp
b24sCi0gICAgICAgIFBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMKLSAgICB9OwotCi0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZDsKLSAgICBTdHJpbmcgcmVwbGFjZWRTdHJp
bmc7Ci0gICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwotICAgIFBhbmVsVHlwZSBwYW5lbFR5
cGU7Ci0gICAgYm9vbCBpc0FjdGl2ZTsKLX07Ci0KLWVudW0gUmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbCB7Ci0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENh
bmNlbGxlZCA9IDAsCi0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9y
ZWQsCi0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkCi19Owot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ29ycmVjdGlvblBhbmVsSW5mb19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggODgwNzk2NTA2OGE0MzkxMGE5YWQ5MzY1
MWUxNDYyZWNjOGU5Y2Y5YS4uMTk4M2ZhZDdmYjJiZTE4YzlmN2UxY2FiYTYxYjY4ZjdhNjZiZGJh
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkRXZlbnQuaCIK
ICNpbmNsdWRlICJDb21wb3NpdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiQ29ycmVjdGlvblBhbmVs
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNyZWF0ZUxpbmtDb21tYW5kLmgiCiAjaW5jbHVkZSAi
RGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQuaCIKQEAgLTk0LDM1ICs5NSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2lu
ZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKLXsK
LSAgICAvLyBUaGVzZSBhcmUgY2hhcmFjdGVycyB0aGF0IGNhbiBiZWhhdmUgYXMgd29yZCBib3Vu
ZGFyaWVzLCBidXQgY2FuIGFwcGVhciB3aXRoaW4gd29yZHMuCi0gICAgLy8gSWYgdGhleSBhcmUg
anVzdCB0eXBlZCwgaS5lLiBpZiB0aGV5IGFyZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGNh
cmV0LCB3ZSB3YW50IHRvIGRlbGF5IHRleHQgY2hlY2tpbmcgdW50aWwgdGhlIG5leHQgY2hhcmFj
dGVyIGhhcyBiZWVuIHR5cGVkLgotICAgIC8vIEZJWE1FOiB0aGlzIGlzIHJlcXVpcmVkIHVudGls
IDY4NTMwMjcgaXMgZml4ZWQgYW5kIHRleHQgY2hlY2tpbmcgY2FuIGRvIHRoaXMgZm9yIHVzLgot
ICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0ZXIgPT0gcmlnaHRTaW5nbGVR
dW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5jdHVhdGlvbkdlcnNoYXlpbTsK
LX0KLQotc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1h
cmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
VmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JBdXRvQ29y
cmVjdGlvbiwgKCkpOwotICAgIGlmIChtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmlzRW1w
dHkoKSkgewotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1
bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3Jy
ZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7Ci0gICAg
ICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpT
cGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcmtlclR5cGVzRm9y
QXV0b0NvcnJlY3Rpb247Ci19Ci0KLXN0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5
cGVzRm9yUmVwbGFjZW1lbnQsICgpKTsKLSAgICBpZiAobWFya2VyVHlwZXNGb3JSZXBsYWNlbWVu
dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5hcHBlbmQo
RG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JSZXBs
YWNlbWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwot
ICAgIH0KLSAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudDsKLX0KLQogLy8gV2hl
biBhbiBldmVudCBoYW5kbGVyIGhhcyBtb3ZlZCB0aGUgc2VsZWN0aW9uIG91dHNpZGUgb2YgYSB0
ZXh0IGNvbnRyb2wKIC8vIHdlIHNob3VsZCB1c2UgdGhlIHRhcmdldCBjb250cm9sJ3Mgc2VsZWN0
aW9uIGZvciB0aGlzIGVkaXRpbmcgb3BlcmF0aW9uLgogVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6
OnNlbGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQpAQCAtNTE4LDQ4ICs0OTAsNyBAQCB2
b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBvbGRTZWxlY3Rpb24pCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpOwogICAgIG1fZGVsZXRlQnV0dG9uQ29udHJvbGxl
ci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwotCi0jaWYgU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVj
dGlvbihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgIC8vIFdoZW4gdXNl
ciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2Vz
LCB3ZSBzaG93IHRoZSBwYW5lbAotICAgIC8vIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHByZS1j
b3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJldmVydCB0aGUKLSAgICAv
LyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24gcGFu
ZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKLSAgICAvLyB0aGUgbmV3IGNhcmV0IHBvc2l0
aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgotICAgIGlmICghY3VycmVudFNlbGVjdGlvbi5p
c0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlvbiA9IGN1cnJlbnRT
ZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25PZldvcmQg
PSBlbmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAg
ICBpZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRpb25PZldvcmQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVx
dWl2YWxlbnQoKTsKLSAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIG5v
ZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgaW50IGVuZE9mZnNldCA9IHBvc2l0
aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4g
bWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUobm9k
ZSk7Ci0gICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IERvY3Vt
ZW50TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAgICBpZiAoKChtYXJrZXIudHlw
ZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgJiYgIW1hcmtlci5kZXNjcmlwdGlvbi5p
c051bGwoKSkgfHwgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBz
dGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQpID09IGVuZE9mZnNldCkgewotICAgICAg
ICAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGZyYW1lKCktPmRv
Y3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCwgbm9kZSwgbWFya2VyLmVuZE9mZnNl
dCk7Ci0gICAgICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdl
LmdldCgpKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50V29yZC5sZW5ndGgoKSkgewotICAgICAg
ICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRS
YW5nZTsKLSAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJp
bmcgPSBjdXJyZW50V29yZDsKLSAgICAgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9j
dW1lbnRNYXJrZXI6OlNwZWxsaW5nKQotICAgICAgICAgICAgICAgICAgICBzdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2Vz
dGlvbnMpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb247
Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAv
LyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgbV9jb3JyZWN0aW9uUGFuZWwtPnJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6
OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdT
ZWxlY3Rpb24pCkBAIC0xMDYyLDEwICs5OTMsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRp
bmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQogICAgIGRpc3BhdGNoRWRpdGFibGVDb250
ZW50Q2hhbmdlZEV2ZW50cygqY21kKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlv
bihjbWQtPmVuZGluZ1NlbGVjdGlvbigpKTsKIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKLSAgICBpZiAoY21kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjbWQtPnNob3VsZFJl
dGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbklu
ZGljYXRvcik7Ci0jZW5kaWYKKyAgICBtX2NvcnJlY3Rpb25QYW5lbC0+YXBwbGllZEVkaXRpbmco
Y21kKTsKIAogICAgIC8vIERvbid0IGNsZWFyIHRoZSB0eXBpbmcgc3R5bGUgd2l0aCB0aGlzIHNl
bGVjdGlvbiBjaGFuZ2UuICBXZSBkbyB0aG9zZSB0aGluZ3MgZWxzZXdoZXJlIGlmIG5lY2Vzc2Fy
eS4KICAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCBmYWxzZSwg
ZmFsc2UpOwpAQCAtMTEyNSwxNiArMTA1MywxMyBAQCBFZGl0b3I6OkVkaXRvcihGcmFtZSogZnJh
bWUpCiAgICAgLCBtX3Nob3VsZFN0eWxlV2l0aENTUyhmYWxzZSkKICAgICAsIG1fa2lsbFJpbmco
YWRvcHRQdHIobmV3IEtpbGxSaW5nKSkKICAgICAsIG1fc3BlbGxDaGVja2VyKG5ldyBTcGVsbENo
ZWNrZXIoZnJhbWUsIGZyYW1lLT5wYWdlKCkgPyBmcmFtZS0+cGFnZSgpLT5lZGl0b3JDbGllbnQo
KS0+dGV4dENoZWNrZXIoKSA6IDApKQotICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlz
LCAmRWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKQorICAgICwgbV9jb3JyZWN0aW9u
UGFuZWwobmV3IENvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIoZnJhbWUpKQogICAgICwgbV9hcmVN
YXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkKGZhbHNlKQogewogfQogCiBFZGl0b3I6On5FZGl0
b3IoKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBkaXNtaXNzQ29y
cmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsK
LSNlbmRpZgogfQogCiB2b2lkIEVkaXRvcjo6Y2xlYXIoKQpAQCAtMTE3OSw3ICsxMTA0LDcgQEAg
Ym9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJp
bmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAodGV4dC5sZW5ndGgoKSA9PSAxICYmIGlz
UHVuY3QodGV4dFswXSkgJiYgIWlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIodGV4dFswXSkp
CiAgICAgICAgIHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlvbiA9IHRydWU7CiAK
LSAgICBib29sIGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCA9IHNob3VsZENvbnNpZGVyQXBwbHlp
bmdBdXRvY29ycmVjdGlvbiAmJiBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHBy
b3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25XYXNBcHBsaWVkID0gc2hvdWxkQ29u
c2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0aW9uICYmIG1fY29ycmVjdGlvblBhbmVsLT5hcHBseUF1
dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogCiAgICAgLy8gR2V0IHRo
ZSBzZWxlY3Rpb24gdG8gdXNlIGZvciB0aGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcyBpbnNl
cnRUZXh0LgogICAgIC8vIElmIHRoZSBldmVudCBoYW5kbGVyIGNoYW5nZWQgdGhlIHNlbGVjdGlv
biwgd2UgbWF5IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IHNlbGVjdGlvbgpAQCAtMTIxNSw3ICsx
MTQwLDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYgKCFzaG91bGRJ
bnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IGFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBw
bGllZCA9IG1fY29ycmVjdGlvblBhbmVsLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5n
SWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhtX2Zy
YW1lLT5kb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6
OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7CiAgICAgcmV2ZWFsU2VsZWN0aW9u
QWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKQEAgLTEyMzMsNyArMTE1OCw3IEBAIGJvb2wgRWRp
dG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4
dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGJv
b2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlw
aW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBt
X2NvcnJlY3Rpb25QYW5lbC0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9w
cmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IobV9m
cmFtZS0+ZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBpbmdDb21tYW5k
OjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDApOwogICAgIHJldmVhbFNlbGVjdGlv
bkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCkBAIC0yMDYwLDI0ICsxOTg1LDggQEAgdm9pZCBF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24gJm1vdmluZ1NlbGVjdGkKIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCiB7CisgICAgbV9jb3JyZWN0aW9uUGFu
ZWwtPmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwogI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAg
IC8vIEFwcGx5IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5leHQgcm91bmQgb2Ygc3Bl
bGwgY2hlY2tpbmcuCi0gICAgYm9vbCBkb0FwcGx5Q29ycmVjdGlvbiA9IHRydWU7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb25BZnRlclR5cGluZy52aXNp
YmxlU3RhcnQoKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3JkID0gVmlzaWJsZVNl
bGVjdGlvbihzdGFydE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFy
eSksIGVuZE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsK
LSAgICBpZiAoY3VycmVudFdvcmQudmlzaWJsZUVuZCgpID09IHN0YXJ0T2ZTZWxlY3Rpb24pIHsK
LSAgICAgICAgU3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0KGN1cnJlbnRXb3JkLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpOwotICAgICAgICBpZiAod29yZFRleHQubGVuZ3RoKCkgPiAwICYm
IGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIod29yZFRleHRbd29yZFRleHQubGVuZ3RoKCkg
LSAxXSkpCi0gICAgICAgICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNlOwotICAgIH0KLSAg
ICBpZiAoZG9BcHBseUNvcnJlY3Rpb24pCi0gICAgICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwo
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwotI2VuZGlmCiAg
ICAgVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gMDsKICAgICBpZiAo
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgdGV4dENoZWNraW5n
T3B0aW9ucyB8PSBNYXJrU3BlbGxpbmc7CkBAIC0yMTA0LDcgKzIwMTMsNiBAQCB2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmd29yZFN0YXJ0LAogICAgIH0KIAogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9u
QWZ0ZXJUeXBpbmcpOwogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjE5LDcgKzIxMjcsNyBAQCB2b2lkIEVkaXRvcjo6
bWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogdm9pZCBF
ZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNr
aW5nT3B0aW9ucyB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBSYW5nZSogc3BlbGxpbmdSYW5nZSwgUmFu
Z2UqIGdyYW1tYXJSYW5nZSkKIHsKICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgcGVuZGluZyBh
dXRvY29ycmVjdGlvbiBhdCB0aGlzIG1vbWVudC4KLSAgICBBU1NFUlQoIW1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCk7CisgICAgQVNTRVJUKCFtX2NvcnJlY3Rpb25QYW5l
bC0+aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSk7CiAKICAgICBib29sIHNob3VsZE1hcmtTcGVsbGlu
ZyA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBNYXJrU3BlbGxpbmc7CiAgICAgYm9vbCBzaG91bGRN
YXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBNYXJrR3JhbW1hcjsKQEAgLTIyOTEs
MTEgKzIxOTksOSBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAgIH0KICAgICB0ZXh0Q2hl
Y2tlcigpLT5jaGVja1RleHRPZlBhcmFncmFwaChwYXJhZ3JhcGgudGV4dENoYXJhY3RlcnMoKSwg
cGFyYWdyYXBoLnRleHRMZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7CiAKLSNpZiBT
VVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgLy8gSWYgdGhpcyBjaGVja2luZyBpcyBv
bmx5IGZvciBzaG93aW5nIGNvcnJlY3Rpb24gcGFuZWwsIHdlIHNob3VsZG4ndCBib3RoZXIgdG8g
bWFyayBtaXNzcGVsbGluZ3MuCiAgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpCiAg
ICAgICAgIHNob3VsZE1hcmtTcGVsbGluZyA9IGZhbHNlOwotI2VuZGlmCiAKICAgICBpbnQgb2Zm
c2V0RHVlVG9SZXBsYWNlbWVudCA9IDA7CiAKQEAgLTIzMTQsMTAgKzIyMjAsOCBAQCB2b2lkIEVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tp
bmdPcHRpb25zIHRleHRDaAogICAgICAgICBpZiAoc2hvdWxkTWFya1NwZWxsaW5nICYmIHJlc3Vs
dC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0TG9jYXRpb24gPj0g
c3BlbGxpbmdQYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpICYmIHJlc3VsdExvY2F0aW9uICsgcmVz
dWx0TGVuZ3RoIDw9IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgIXJlc3VsdEVuZHNBdEFtYmln
dW91c0JvdW5kYXJ5KSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiBy
ZXN1bHRMb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxp
bmdSYW5nZSA9IHNwZWxsaW5nUGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXN1
bHRMZW5ndGgpOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICAgICAgICAg
IGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmhhc01hcmtlcnMobWlzc3BlbGxp
bmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pKQor
ICAgICAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbC0+aXNTcGVsbGluZ01hcmtlckFsbG93
ZWQobWlzc3BlbGxpbmdSYW5nZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0jZW5kaWYg
Ly8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICAgICAgbWlzc3BlbGxpbmdS
YW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtl
cihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAg
ICAgICB9IGVsc2UgaWYgKHNob3VsZE1hcmtHcmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0
Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBncmFtbWFyUGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3Zl
cnMocmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCkpIHsKICAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49IDApOwpAQCAtMjM4MCwxNCArMjI4
NCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiAgICAgICAgICAgICBpZiAoc2hvdWxkU2hv
d0NvcnJlY3Rpb25QYW5lbCkgewogICAgICAgICAgICAgICAgIGlmIChyZXN1bHRMb2NhdGlvbiAr
IHJlc3VsdExlbmd0aCA9PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIG9ubHkgc2hvdyB0aGUgY29ycmVjdGlvbiBwYW5lbCBvbiB0aGUgbGFzdCB3
b3JkLgotICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dS
ZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCA9IHJhbmdlVG9SZXBsYWNlOwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkp
OwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRT
dHJpbmcgPSByZXN1bHQtPnJlcGxhY2VtZW50OwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjbGll
bnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBl
LCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCByZXN1
bHQtPnJlcGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpLCB0aGlzKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWwtPnNob3dDb3JyZWN0aW9uUGFuZWwocmFuZ2VUb1JlcGxh
Y2UsIHJlc3VsdC0+cmVwbGFjZW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBj
YWxsZWQgZm9yIHNob3dpbmcgY29ycmVjdGlvbiBwYW5lbCwgd2UgaWdub3JlIG90aGVyIGNvcnJl
Y3Rpb24gb3IgcmVwbGFjZW1lbnQuCkBAIC0yNDk5LDExNyArMjM5NiwxOSBAQCB2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c3BlbGxpbmdTZWxlYwogI2VuZGlmCiB9CiAKLXZvaWQgRWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxU
aW1lckZpcmVkKFRpbWVyPEVkaXRvcj4qKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsK
LSAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNl
IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKLSAgICAgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
KTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxl
Y3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldv
cmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7Ci0gICAgICAgIG1h
cmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoTWFya1NwZWxsaW5nIHwgU2hv
d0NvcnJlY3Rpb25QYW5lbCwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
LCAwKTsKLSAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlUmV2ZXJzaW9uOiB7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0
cmluZyA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQu
Z2V0KCkpOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFu
Z2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAg
ICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+c2hv
d0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGlu
Z0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcsIFZlY3RvcjxTdHJpbmc+KCksIHRoaXMpOwotICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOiB7Ci0gICAgICAgIGlmIChwbGFpblRleHQobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKSAhPSBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgU3RyaW5n
IHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7
Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICB0ZXh0Q2hlY2tl
cigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJp
bmcsIHBhcmFncmFwaFRleHQsIHN1Z2dlc3Rpb25zKTsKLSAgICAgICAgaWYgKHN1Z2dlc3Rpb25z
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7Ci0gICAgICAgIHN1
Z2dlc3Rpb25zLnJlbW92ZSgwKTsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZv
clJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0g
ICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQotICAgICAgICAgICAgY2xpZW50KCkt
PnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91
bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgdG9wU3VnZ2Vz
dGlvbiwgc3VnZ2VzdGlvbnMsIHRoaXMpOwotICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
I2VuZGlmCi19Ci0KLXZvaWQgRWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29u
c3QgU3RyaW5nJiBjb3JyZWN0aW9uKQordm9pZCBFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVs
VGltZXIoKQogewotICAgIFJhbmdlKiByZXBsYWNlZFJhbmdlID0gbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpOwotICAgIGlmICghcmVwbGFjZWRSYW5nZSB8fCBt
X2ZyYW1lLT5kb2N1bWVudCgpICE9IHJlcGxhY2VkUmFuZ2UtPm93bmVyRG9jdW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgLy8gQ2hlY2sg
dG8gc2VlIGlmIHRoZSB3b3JkIHdlIGFyZSBhYm91dCB0byBjb3JyZWN0IGhhcyBiZWVuIGNoYW5n
ZWQgYmV0d2VlbiB0aW1lciBmaXJpbmcgYW5kIGNhbGxiYWNrIGJlaW5nIHRyaWdnZXJlZC4KLSAg
ICBpZiAoY3VycmVudFdvcmQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5n
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUg
PSBmYWxzZTsKLQotICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSkg
ewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbjoKLSAg
ICAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247Ci0gICAgICAgICAgICBh
cHBseUNvcnJlY3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJc0Rp
c21pc3NlZEJ5RWRpdG9yKQotICAgICAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlZFN0cmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246Ci0gICAgY2FzZSBDb3JyZWN0
aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgotICAgICAgICBpZiAo
Y29ycmVjdGlvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKLSAgICAgICAgICAgIGFwcGx5Q29ycmVj
dGlvblBhbmVsSW5mbyhtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC5jbGVhcigpOworICAgIG1fY29ycmVjdGlvblBhbmVsLT5zdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pOwog
fQogCi12b2lkIEVkaXRvcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSkKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BB
TkVMCi0gICAgY29uc3QgZG91YmxlIGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwgPSAwLjM7
Ci0gICAgaWYgKGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKSB7Ci0gICAg
ICAgIGlmICh0eXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24p
Ci0gICAgICAgICAgICAvLyBJZiB0eXBlIGlzIFBhbmVsVHlwZVJldmVyc2lvbiwgdGhlbiB0aGUg
bmV3IHJhbmdlIGhhcyBiZWVuIHNldC4gU28gd2Ugc2hvdWxkbid0IGNsZWFyIGl0LgotICAgICAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0g
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPSB0eXBlOwotICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0YXJ0T25lU2hvdChjb3JyZWN0aW9uUGFuZWxUaW1lcklu
dGVydmFsKTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSNlbmRpZgot
fQotCi12b2lkIEVkaXRvcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKK3ZvaWQgRWRpdG9y
OjpoYW5kbGVDYW5jZWxPcGVyYXRpb24oKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKLSAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsKLSAgICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSNlbmRpZgorICAgIG1fY29y
cmVjdGlvblBhbmVsLT5oYW5kbGVDYW5jZWxPcGVyYXRpb24oKTsKIH0KIAotdm9pZCBFZGl0b3I6
OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCit2b2lkIEVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3Jy
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25z
dCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQogewotI2lmIFNV
UFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5m
by5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSA9IGZhbHNlOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPmRp
c21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENh
bmNlbGxlZCk7Ci0jZW5kaWYKKyAgICBtX2NvcnJlY3Rpb25QYW5lbC0+dW5hcHBsaWVkU3BlbGxD
b3JyZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwog
fQogCiBib29sIEVkaXRvcjo6aXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCkKQEAgLTI2MjEsMTkg
KzI0MjAsNiBAQCBib29sIEVkaXRvcjo6aXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKLXsK
LSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgaWYgKCFtX2NvcnJlY3Rpb25Q
YW5lbEluZm8uaXNBY3RpdmUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvcnJlY3Rpb25QYW5l
bEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2Vk
QnlFZGl0b3IgPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPmRp
c21pc3NDb3JyZWN0aW9uUGFuZWwocmVhc29uRm9yRGlzbWlzc2luZyk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLSNlbmRpZgotfQogdm9pZCBFZGl0b3I6
OnJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKGJvb2wg
ZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KQogewogICAgIC8vIFdlIHdhbnQg
dG8gcmVtb3ZlIHRoZSBtYXJrZXJzIGZyb20gYSB3b3JkIGlmIGFuIGVkaXRpbmcgY29tbWFuZCB3
aWxsIGNoYW5nZSB0aGUgd29yZC4gVGhpcyBjYW4gaGFwcGVuIGluIG9uZSBvZgpAQCAtMjcwMSwx
MDAgKzI0ODcsMTQgQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtl
cnNGcm9tV29yZHNUb0JlRWRpdGVkKGJvb2wgZG9Ob3RSZW1vdmUKICAgICBkb2N1bWVudC0+bWFy
a2VycygpLT5jbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2Uod29yZFJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogfQogCi12b2lkIEVkaXRv
cjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpCit2b2lkIEVkaXRvcjo6cHJlcGFyZUVkaXRp
bmdXb3JkKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KQogewotI2lm
IFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9u
ZVJhbmdlKGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldFN0YXJ0
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3Jh
cGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9u
KCkpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQo
KSwgZW5kT2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LT5lbmRQb3NpdGlvbigpKSk7Ci0KLSAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0
IHJhbmdlIHJhbmdlVG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQg
cmFuZ2UuCi0gICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwg
dGhlIHZhbHVlIG9mIHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5vdCB2YWxpZCBhbnltb3JlLgotICAg
IC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0
b3JlIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZAotICAgIC8vIHJlbGF0
aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdl
IHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAotICAgIC8vIHRvIHN0b3JlIHRo
aXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJz
dCBjcmVhdGUgYSByYW5nZQotICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBh
cmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQuCi0gICAg
UmVmUHRyPFJhbmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29u
dGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlv
bi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5z
dGFydFBvc2l0aW9uKCkpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9z
aXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICBjb3JyZWN0aW9u
U3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5n
ZVRvQmVSZXBsYWNlZC5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJl
cGxhY2VkLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwotICAgIGlmIChlYykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBvZiBh
dXRvY29ycmVjdGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBsYWNl
bWVudCB0b29rIHBsYWNlLgotICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFw
aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGhBc1JhbmdlLmdldCgpKTsKLQotICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhl
IGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5n
ZSBhcm91bmQuCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgYXBw
bHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVSZXBs
YWNlZCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7Ci0gICAgc2V0
RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlcGxh
Y2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlQ29udGFp
bmluZ0NvcnJlY3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoLCAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKTsKLSAgICBT
dHJpbmcgbmV3VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKLQotICAg
IC8vIENoZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCi0gICAgaWYgKG5ld1Rl
eHQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNl
bWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAg
c2l6ZV90IHNpemUgPSBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnBhbmVsVHlwZSA9PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24pCi0g
ICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgbWFy
a2VyVHlwZXNUb0FkZFtpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hcmtlcnMtPmFk
ZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlc1RvQWRkW2ldLCBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpOwotICAgIH0KLSNlbHNlIC8vIFNVUFBP
UlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBVTlVTRURfUEFSQU0obWFya2VyVHlwZXNUb0Fk
ZCk7Ci0jZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotfQotCi1ib29sIEVk
aXRvcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQotewot
ICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkIHx8ICFtX2Nv
cnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlICE9IENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBv
c2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCku
c3RhcnQoKTsKLQotICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbikgewotICAgICAgICBkaXNtaXNzQ29y
cmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0gICAgCi0gICAgLy8gUGVuZGluZyBjb3Jy
ZWN0aW9uIHNob3VsZCBhbHdheXMgYmUgd2hlcmUgY2FyZXQgaXMuIEJ1dCBpbiBjYXNlIHRoaXMg
aXMgbm90IGFsd2F5cyB0cnVlLCB3ZSBzdGlsbCB3YW50IHRvIGRpc21pc3MgdGhlIHBhbmVsIHdp
dGhvdXQgYWNjZXB0aW5nIHRoZSBjb3JyZWN0aW9uLgotICAgIEFTU0VSVChtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlv
bik7Ci0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsSWdub3JlZCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEVkaXRvcjo6
dW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0aW9uKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBjbGllbnQo
KS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0
aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7Ci0gICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVj
dGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBp
bmcgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpDbGVhclR5cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bigpLmVuZCgpKTsKKyNpZiBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcKKyAgICByZW1vdmVT
cGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChkb05vdFJlbW92ZUlm
U2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9Ob3RS
ZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KTsKKyNlbmRpZgogCi0gICAgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
OwotICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyk7Ci0gICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotI2Vsc2UgLy8gU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25PZkNv
cnJlY3RlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGNvcnJlY3Rpb24pOwotI2VuZGlmIC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKIH0K
IAogUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50
JiB3aW5kb3dQb2ludCkKQEAgLTM0OTEsMTQgKzMxOTEsNyBAQCB2b2lkIEVkaXRvcjo6c2V0TWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sIGZsYWcpCiAKIHZvaWQgRWRpdG9yOjpy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbiwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQog
ewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICAvLyBNYWtlIHN1cmUgdGhl
cmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50
U2VsZWN0aW9uKGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7Ci0gICAgaWYgKGN1
cnJlbnRTZWxlY3Rpb24gIT0gb2xkU2VsZWN0aW9uKSB7Ci0gICAgICAgIHN0b3BDb3JyZWN0aW9u
UGFuZWxUaW1lcigpOwotICAgICAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKLSAgICB9Ci0jZW5kaWYgLy8gU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIG1fY29ycmVjdGlvblBhbmVsLT5zdG9wUGVuZGlu
Z0NvcnJlY3Rpb24ob2xkU2VsZWN0aW9uKTsKIAogICAgIGJvb2wgY2xvc2VUeXBpbmcgPSBvcHRp
b25zICYgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmc7CiAgICAgYm9vbCBpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHRoaXMtPmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKCk7CkBAIC0zNTE1LDEwICszMjA4LDggQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBT
ZWwKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1t
YXIgPSB0cnVlOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAgLy8g
RG9uJ3QgY2hlY2sgc3BlbGxpbmcgYW5kIGdyYW1tYXIgaWYgdGhlIGNoYW5nZSBvZiBzZWxlY3Rp
b24gaXMgdHJpZ2dlcmVkIGJ5IHNwZWxsaW5nIGNvcnJlY3Rpb24gaXRzZWxmLgogICAgICAgICBz
aG91bGRDaGVja1NwZWxsaW5nQW5kR3JhbW1hciA9ICEob3B0aW9ucyAmIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0jZW5kaWYKIAogICAgICAgICAvLyBX
aGVuIHR5cGluZyB3ZSBjaGVjayBzcGVsbGluZyBlbHNld2hlcmUsIHNvIGRvbid0IHJlZG8gaXQg
aGVyZS4KICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNoYW5nZSBpbiBzZWxlY3Rpb24gcmVzdWx0
aW5nIGZyb20gYSBkZWxldGUgb3BlcmF0aW9uLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXgg
ZTFhNzExOTI0NWU4M2JlZDEwZDczZDIwNWVmZTIxNTQwODVjNTY5ZS4uNWQ1YTA2YmYzNzE1NmUz
OGUwNWRkZDdkODZmZmFhMGRmOTkxZTgxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0y
OCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCIKICNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkNvcnJlY3Rpb25QYW5lbEluZm8uaCIKICNpbmNsdWRl
ICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIkVkaXRBY3Rpb24uaCIKICNpbmNsdWRlICJF
ZGl0aW5nQmVoYXZpb3IuaCIKQEAgLTUwLDYgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0
aW9uOwogY2xhc3MgQ2xpcGJvYXJkOworY2xhc3MgQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlcjsK
IGNsYXNzIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI7CiBjbGFzcyBFZGl0Q29tbWFuZDsKIGNsYXNz
IEVkaXRvckNsaWVudDsKQEAgLTMyMSw5ICszMjEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRU
b0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBwcmVwZW5kKTsKIAogICAgIHZvaWQgaGFuZGxlQ2FuY2Vs
T3BlcmF0aW9uKCk7Ci0gICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSk7CisgICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKCk7CisKICAgICAvLyBJZiB1c2VyIGNvbmZpcm1lZCBhIGNvcnJlY3Rpb24gaW4gdGhlIGNv
cnJlY3Rpb24gcGFuZWwsIGNvcnJlY3Rpb24gaGFzIG5vbi16ZXJvIGxlbmd0aCwgb3RoZXJ3aXNl
IGl0IG1lYW5zIHRoYXQgdXNlciBoYXMgZGlzbWlzc2VkIHRoZSBwYW5lbC4KLSAgICB2b2lkIGhh
bmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogICAg
IGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAKICAgICB2b2lkIHBhc3RlQXNGcmFn
bWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9v
bCBtYXRjaFN0eWxlKTsKQEAgLTM4MCw2ICszODAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHNl
bGVjdGlvblN0YXJ0SGFzU3BlbGxpbmdNYXJrZXJGb3IoaW50IGZyb20sIGludCBsZW5ndGgpIGNv
bnN0OwogICAgIHZvaWQgcmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1Rv
QmVFZGl0ZWQoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpOworICAg
IHZvaWQgcHJlcGFyZUVkaXRpbmdXb3JkKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29y
ZEJvdW5kYXJ5KTsKIAogcHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFtZTsKQEAgLTM5NCwxMCAr
Mzk1LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkU3RhcnROZXdLaWxsUmluZ1NlcXVl
bmNlOwogICAgIGJvb2wgbV9zaG91bGRTdHlsZVdpdGhDU1M7CiAgICAgT3duUHRyPEtpbGxSaW5n
PiBtX2tpbGxSaW5nOwotICAgIENvcnJlY3Rpb25QYW5lbEluZm8gbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvOwogICAgIE93blB0cjxTcGVsbENoZWNrZXI+IG1fc3BlbGxDaGVja2VyOwotICAgIFRpbWVy
PEVkaXRvcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsKLSAgICBib29sIG1fY29ycmVjdGlvblBh
bmVsSXNEaXNtaXNzZWRCeUVkaXRvcjsKKyAgICBPd25QdHI8Q29ycmVjdGlvblBhbmVsQ29udHJv
bGxlcj4gbV9jb3JyZWN0aW9uUGFuZWw7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBtX21hcms7CiAg
ICAgYm9vbCBtX2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQ7CiAKQEAgLTQyMSwxMyAr
NDIwLDggQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBuZXh0VmlzaWJsZVJhbmdl
KFJhbmdlKiwgY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMpOwogCiAgICAgdm9pZCBjaGFuZ2VT
ZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9u
LCBib29sIGNsb3NlVHlwaW5nLCBib29sIGNsZWFyVHlwaW5nU3R5bGUpOwotICAgIHZvaWQgY29y
cmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxFZGl0b3I+Kik7CiAgICAgTm9kZSogZmluZEV2
ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0OwotICAgIHZvaWQgc3RvcENvcnJlY3Rpb25Q
YW5lbFRpbWVyKCk7Ci0gICAgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwotICAgIHZvaWQgYXBwbHlDb3JyZWN0aW9uUGFuZWxJ
bmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVz
VG9BZGQpOwotICAgIC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rpb24gd2FzIGFwcGxpZWQsIGZh
bHNlIG90aGVyd2lzZS4KLSAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJ
ZkFwcHJvcHJpYXRlKCk7CisKICAgICBGbG9hdFJlY3Qgd2luZG93UmVjdEZvclJhbmdlKGNvbnN0
IFJhbmdlKikgY29uc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRleCBiYWQ0YTk5ZTk4MTg5MzAyZWM2MWJm
ZGIwOWRhMTQ2ZDBiYjE0ZWI0Li4zODMyYzEyNTgzMzMwMDI2NzRhOWM1NTI1NzEyN2QyZWJmNjBh
NDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgiCiAKLSNpbmNsdWRlICJDb3JyZWN0
aW9uUGFuZWxJbmZvLmgiCisjaW5jbHVkZSAiQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcAppbmRleCA4NDM3NjU4ODk4NjRlYjZmZDIzNmI3Mjg5OGUyOTZmNWM3YmMx
OTA2Li44Zjk4ZWY4MTJjNmI4ODg0ZmIzZjQwN2Y5YWEwODNhMWMyMWFmOWI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTE0MywxMSArMTQzLDkgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBUeXBpbmdDb20KICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKICAgICBBU1NFUlQoZnJhbWUpOwogCi0jaWYgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5H
CiAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVk
aXRvcigpLT5yZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRl
ZChpc1NwYWNlT3JOZXdsaW5lKHRleHQuY2hhcmFjdGVycygpWzBdKSk7Ci0jZW5kaWYKLQorICAg
ICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCktPnByZXBhcmVFZGl0aW5nV29yZChpc1Nw
YWNlT3JOZXdsaW5lKHRleHQuY2hhcmFjdGVycygpWzBdKSk7CisgICAgCiAgICAgaW5zZXJ0VGV4
dChkb2N1bWVudCwgdGV4dCwgZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSwgb3B0aW9u
cywgY29tcG9zaXRpb24pOwogfQogCkBAIC0zMzIsMTIgKzMzMCw4IEBAIHZvaWQgVHlwaW5nQ29t
bWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRU
eXBlKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBzdGFydE9mV29yZChzdGFydCwgTGVm
dFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBpZiAocDEgIT0gcDIpCiAgICAgICAgICAgICBk
b2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5n
VG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSk7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTAogICAgICAgICBlbHNlIGlmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJ
bnNlcnRUZXh0KQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnN0
YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29y
cmVjdGlvbik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb21tYW5kVHlwZSk7Ci0jZW5kaWYK
KyAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5zdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKCk7CiAgICAgfQogfQogCkBAIC00NDksOSArNDQzLDggQEAgYm9vbCBUeXBp
bmdDb21tYW5kOjptYWtlRWRpdGFibGVSb290RW1wdHkoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6
OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxS
aW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwotICAgIGRvY3VtZW50KCkt
PmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdv
cmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5l
ZGl0b3IoKS0+cHJlcGFyZUVkaXRpbmdXb3JkKGZhbHNlKTsKKwogICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BZnRl
clVuZG87CiAKQEAgLTU0OCw5ICs1NDEsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtl
eVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogCiB2
b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSwgYm9vbCBraWxsUmluZykKIHsKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9O
X0VESVRJTkcKLSAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+cmVtb3ZlU3BlbGxB
bmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoZmFsc2UpOwotI2VuZGlmCisg
ICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnByZXBhcmVFZGl0aW5nV29yZChmYWxz
ZSk7CisKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvblRvRGVsZXRlOwogICAgIFZpc2li
bGVTZWxlY3Rpb24gc2VsZWN0aW9uQWZ0ZXJVbmRvOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmgKaW5kZXggNThjMjI4MmFiZDE2ODk5YzBkN2Y4MmM5NDViYzE4YjA3YjdkYjgxNi4u
MDcwYTYyZmU0ZjAwYmJjMGNiNzNiNTE1ZDVjYjZkMjAwMDVlNGU4MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuaApAQCAtMjE4LDYgKzIxOCwxNSBAQCBpbmxpbmUgYm9vbCBpc1do
aXRlc3BhY2UoVUNoYXIgYykKIHsKICAgICByZXR1cm4gYyA9PSBub0JyZWFrU3BhY2UgfHwgYyA9
PSAnICcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1x0JzsKIH0KKworaW5saW5lIGJvb2wgaXNBbWJp
Z3VvdXNCb3VuZGFyeUNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCit7CisgICAgLy8gVGhlc2Ug
YXJlIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmVoYXZlIGFzIHdvcmQgYm91bmRhcmllcywgYnV0IGNh
biBhcHBlYXIgd2l0aGluIHdvcmRzLgorICAgIC8vIElmIHRoZXkgYXJlIGp1c3QgdHlwZWQsIGku
ZS4gaWYgdGhleSBhcmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBjYXJldCwgd2Ugd2FudCB0
byBkZWxheSB0ZXh0IGNoZWNraW5nIHVudGlsIHRoZSBuZXh0IGNoYXJhY3RlciBoYXMgYmVlbiB0
eXBlZC4KKyAgICAvLyBGSVhNRTogdGhpcyBpcyByZXF1aXJlZCB1bnRpbCA2ODUzMDI3IGlzIGZp
eGVkIGFuZCB0ZXh0IGNoZWNraW5nIGNhbiBkbyB0aGlzIGZvciB1cy4KKyAgICByZXR1cm4gY2hh
cmFjdGVyID09ICdcJycgfHwgY2hhcmFjdGVyID09IHJpZ2h0U2luZ2xlUXVvdGF0aW9uTWFyayB8
fCBjaGFyYWN0ZXIgPT0gaGVicmV3UHVuY3R1YXRpb25HZXJzaGF5aW07Cit9CisKIFN0cmluZyBz
dHJpbmdXaXRoUmViYWxhbmNlZFdoaXRlc3BhY2UoY29uc3QgU3RyaW5nJiwgYm9vbCBzdGFydElz
U3RhcnRPZlBhcmFncmFwaCwgYm9vbCBlbmRJc0VuZE9mUGFyYWdyYXBoKTsKIGNvbnN0IFN0cmlu
ZyYgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgKaW5kZXggZWQ5MmYxMTJjYmE4NzdmZDUyYzM0NjQwN2Y1YjRmZmUyNjEyMGY2Yy4uOGE1
ODk1NTZjY2U1MDcyMDcyZGNjOGI3YWI4MGMwNTI1YWY5MGEyZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaApAQCAtNTExLDcgKzUxMSw3IEBAIHB1YmxpYzoKICAgICBUZXh0Q2hl
Y2tlckNsaWVudCogdGV4dENoZWNrZXIoKSB7IHJldHVybiAmbV90ZXh0Q2hlY2tlckNsaWVudDsg
fQogCiAjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIHZpcnR1YWwgdm9pZCBz
aG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mLCBFZGl0b3IqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5l
bChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgQ29ycmVjdGlv
blBhbmVsQ29udHJvbGxlciopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlv
blBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIHsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKSB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0VkaXRvckNsaWVudC5oCmluZGV4IGQ1ZGU2YTQxMDJjYmQyNzY4ZGFjOWRhM2Y1ZjFhZDll
Y2Y4MDNkNTAuLjU2M2VlMzQ0NzcyYzljN2M3OTNmYTgyNTA0ODQ3ZTNjNzVhMTJhMzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBFZGl0
b3JDbGllbnRfaAogI2RlZmluZSBFZGl0b3JDbGllbnRfaAogCi0jaW5jbHVkZSAiQ29ycmVjdGlv
blBhbmVsSW5mby5oIgorI2luY2x1ZGUgIkNvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtMTYzLDcgKzE2Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgQXV0b2NvcnJlY3Rpb25FZGl0ZWQsCiAgICAgICAgIEF1dG9jb3JyZWN0aW9uUmV2ZXJ0
ZWQKICAgICB9OwotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFj
ZW1lbnRTdHJpbmdzLCBFZGl0b3IqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0
aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3Qm
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
YWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MsIENvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIq
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1Nob3dp
bmdDb3JyZWN0aW9uUGFuZWwoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwppbmRleCBkNzc1NzcyYjVlZjlmOTZiNDZhYzRjYWQzYTVhNzgzZjYyNGZkNmNj
Li4yMjQ1ODc3ZTk3ODliZTE5ZTkxMmVhYWZiNTUzNDUzMzNhNGYwNjM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDMtMTYgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRh
QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW1JlZmFjdG9yaW5nXSBBdXRvIGNvcnJlY3Rpb24gcGFuZWwgc2hvdWxkIGJlIGhhbmRs
ZWQgYnkgaXRzIG93biBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU1NTcxICAgICAgICAKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6Cisg
ICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOgorICAgICAg
ICAoV2ViRWRpdG9yQ2xpZW50Ojppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAo
V2ViRWRpdG9yQ2xpZW50OjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKToKKwogMjAxMS0w
My0xNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBGb3Jn
b3QgdG8gc2F2ZSBhIG1vZGlmaWNhdGlvbiB0byB0aGlzIGZpbGUgd2hlbiBjb21taXR0aW5nLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
aAppbmRleCAxZmExMzJhZDZjNWJkNDM3OWZlMGJiODVjOWU2ZmYwZDY2YjExNzM1Li5mNDhiNmEz
NDZkYTA0ZDRlYzI3N2NhMjkyMDIyMjBmN2JmYzY0NTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtMTQwLDcgKzE0MCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVu
YWJsZWQpOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3Jl
OjpTcGVsbENoZWNrZXIqLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJik7CiAjaWYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0Nv
cnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25z
dCBXVEY6OlN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBhbHRlcm5hdGl2ZVJl
cGxhY2VtZW50U3RyaW5ncywgV2ViQ29yZTo6RWRpdG9yKik7CisgICAgdmlydHVhbCB2b2lkIHNo
b3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgYWx0ZXJuYXRp
dmVSZXBsYWNlbWVudFN0cmluZ3MsIFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIq
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTaG93
aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5tbQppbmRleCA2OWRkNTc0NzMxYjQ0YjQzMGMyNzQ1OGU3MjNiNDFjNGRlNTE3NGIwLi41YjRm
Zjk4MzJiNTljOWUxMjJhMGJlYjkxZWY1ODU1NGZhNDlhZDY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC04OTEsNyAr
ODkxLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXIKIH0KIAogI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi12b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0Nv
cnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgcGFu
ZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmlu
ZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzLCBF
ZGl0b3IqIGVkaXRvcikgewordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFu
ZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHBhbmVsVHlwZSwgY29u
c3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgQ29ycmVjdGlvblBh
bmVsQ29udHJvbGxlciogY29udHJvbGxlcikgewogICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwo
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwogCiAgICAgLy8gTmVl
ZCB0byBleHBsaWNpdGx5IHVzZSB0aGVzZSBsb2NhbCBOU1N0cmluZyBvYmplY3RzLCBiZWNhdXNl
IHRoZSBDKysgcmVmZXJlbmNlcyBtYXkgYmUgaW52YWxpZGF0ZWQgYnkgdGhlIHRpbWUgdGhlIGJs
b2NrIGJlbG93IGlzIGV4ZWN1dGVkLgpAQCAtOTMyLDcgKzkzMiw3IEBAIHZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwCiAgICAgICAgICAgICAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlQWNjZXB0ZWQgdG9Db3Jy
ZWN0aW9uOmFjY2VwdGVkU3RyaW5nIGZvcldvcmQ6cmVwbGFjZWRTdHJpbmdBc05TU3RyaW5nIGxh
bmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOlttX3dlYlZpZXcgc3BlbGxDaGVja2Vy
RG9jdW1lbnRUYWddXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGVk
aXRvci0+aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KFN0cmluZyhhY2NlcHRlZFN0cmluZykp
OworICAgICAgICBjb250cm9sbGVyLT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoU3RyaW5n
KGFjY2VwdGVkU3RyaW5nKSk7CiAgICAgfV07CiB9CiAKQEAgLTk1OSw2ICs5NTksMTEgQEAgdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xp
ZW50OjpBdXRvY29ycmVjdGlvblIKICAgICBOU0NvcnJlY3Rpb25SZXNwb25zZSBzcGVsbENoZWNr
ZXJSZXNwb25zZSA9IHJlc3BvbnNlVHlwZSA9PSBFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9u
UmV2ZXJ0ZWQgPyBOU0NvcnJlY3Rpb25SZXNwb25zZVJldmVydGVkIDogTlNDb3JyZWN0aW9uUmVz
cG9uc2VFZGl0ZWQ7CiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHJl
Y29yZFJlc3BvbnNlOnNwZWxsQ2hlY2tlclJlc3BvbnNlIHRvQ29ycmVjdGlvbjpyZXBsYWNlbWVu
dFN0cmluZyBmb3JXb3JkOnJlcGxhY2VkU3RyaW5nIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1l
bnRXaXRoVGFnOlttX3dlYlZpZXcgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddXTsKIH0KKyNlbHNl
Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3Jy
ZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91
bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgV1RGOjpWZWN0
b3I8V1RGOjpTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgV2ViQ29yZTo6
Q29ycmVjdGlvblBhbmVsQ29udHJvbGxlciopIHt9Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsKSB7fQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzU2hvd2luZ0NvcnJlY3Rpb25QYW5l
bCgpIHsgcmV0dXJuIGZhbHNlOyB9Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVjb3JkQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgV1RGOjpT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJp
bmcpIHt9CiAjZW5kaWYKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpp
bmRleCAxYzQ5ZDViOTE2ZjI0ODE2YzNiMWUwYWYyNTlmOTMxMmMwYzJhNGY5Li41NzNiNjA5MzM2
MzJhZDNiNzNlYzJmZWRmNDdjNWFmZjk1ZGMyM2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTEtMDMtMTYgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1JlZmFjdG9yaW5n
XSBBdXRvIGNvcnJlY3Rpb24gcGFuZWwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgaXRzIG93biBjbGFz
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NTcx
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5o
OgorCiAyMDExLTAzLTE2ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4ucG91bGFpbkBub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCBmYTg0MjZhMzhlOTRmYmUzZjQxNjU5ODlmODE1MmYz
YWQ3NGU2MDc4Li45NjMxMzk2NjliNDQxM2U4MTA1ZDkwYTM1MDY5YTgwMGM3ODEwZTIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmgKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7CiAgICAgdmlydHVhbCB2
b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlNwZWxsQ2hlY2tlciosIGludCwg
Y29uc3QgV1RGOjpTdHJpbmcmKTsKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0
aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzLCBXZWJDb3Jl
OjpFZGl0b3IqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3Jl
OjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MsIFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5l
bENvbnRyb2xsZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChX
ZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0
IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86040</attachid>
            <date>2011-03-17 00:40:02 -0700</date>
            <delta_ts>2011-03-17 04:30:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55571-20110317164000.patch</filename>
            <type>text/plain</type>
            <size>89681</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODEyMzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzJjZjg2
YjU3M2Q4MzA1OWRjMmQzZjc0ZmFiZmM3ODkwZGM1OGFmZi4uZjIzNDg4MGYzMWI1YzA5NWU3YzMz
NzQxZWFlNTQ0YmNhYWI3MjZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTgzOCw2ICs4Mzgs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU0Yjg0YTYzOGM2NTBjMzYwZDYzZTFlZDlm
YzU1NWZkOTA0M2I1ODkuLjE4YWM3ZmQ3MmUwM2Q1NDA1M2M1MDgwMjFkZDM4ODM1NjQyMWI4MjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAxMS0wMy0xNiAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQg
YmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEKKworICAgICAgICBFeHRyYWN0ZWQgY29kZSBpbnNp
ZGUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpbnRvCisgICAgICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhh
dmlvciBjaGFnbmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5m
by5oOiBSZW1vdmVkLiAoQ29ycmVjdGlvblBhbmVsSW5mbyBpcyBtb3ZlZCB0byBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmgpCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpFZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp+RWRpdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJh
bmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGlt
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFya2VyVHlw
ZXNGb3JBdXRvY29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjptYXJrZXJUeXBlc0ZvclJl
cGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0YXJ0
Q29ycmVjdGlvblBhbmVsVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBl
bmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3cpOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ2FuY2VsT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OmRpc21pc3MpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFw
cHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6d2luZG93UmVj
dEZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3dDb3Jy
ZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZVJldmVyc2VkKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQp
OgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
QW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVu
dHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlv
blBhbmVsKToKKyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgorCiAyMDExLTAzLTE2ICBB
bGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYmEwM2E1
MGJlZGI4M2EyYmY2NTEzMjc0ZGQ2OTczODQyYjJmYWE4Zi4uMzdiMTM5ZTBiMTZjNGQxZTg0ODZh
M2UzZmIzZDFkNDViN2EyZTNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE0NDksNiArMTQ0
OSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFy
dFJlcGxhY2VJQ1UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmggXAorCVNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBcCiAJU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRl
eCBmODhiMGRlZDBjNTVjOWY5OTA2YmU4Nzg5NzczZDcwOTg5YjZlNTUyLi4zN2RlMjVjMzE3OTFh
YTBmZmJhMTc0YzI2YmRkYzBhNjYzOGUxMmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtNzQ1
LDcgKzc0NSw2IEBAIF9fWk43V2ViQ29yZTZFZGl0b3IyNGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNh
bEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBf
X1pON1dlYkNvcmU2RWRpdG9yMjZpbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dl
YkNvcmU2RWRpdG9yMjZ3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZEVSS04zV1RGNlN0cmluZ0VS
S05TMV82VmVjdG9ySVMyX0xtMEVFRQotX19aTjdXZWJDb3JlNkVkaXRvcjI3aGFuZGxlQ29ycmVj
dGlvblBhbmVsUmVzdWx0RVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlNkVkaXRvcjI5Y2Fu
RGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI5Y2FuSW5j
cmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjMwYXBwbHlQYXJh
Z3JhcGhTdHlsZVRvU2VsZWN0aW9uRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0
QWN0aW9uRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDlmMDQ4MTRkZGNjZjkzNzQ1ZTU3MGYzYjVmNTM5
YmE4ZmRmNjY2MDQuLjVhZGNkZGNhZDljZWI5NWY3OWUwNGUwMzVmZDliNjQzNjk2Y2ZjMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTE3MjYsNiArMTcyNiw4IEBACiAgICAgICAgICAgICAnZWRpdGlu
Zy9TbWFydFJlcGxhY2VJQ1UuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsQ2hlY2tl
ci5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxDaGVja2VyLmgnLAorICAgICAgICAg
ICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAnLAorICAgICAgICAg
ICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAg
ICdlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdl
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGlu
Zy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDBiMzIzOTI4ZWVk
OGQ2YTdmMzA2MDY1MDdkNTIyN2Q2NTg0MmFhYjMuLmZmNTUxMjMwOGQwNDc4NGFmYTBjNjk5ZTUx
MzI4YjE5ZGUxYmUxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01OTAsNiArNTkwLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgXAogICAgIGVk
aXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcCBcCiAgICAgZWRpdGluZy9TcGVsbENoZWNrZXIuY3Bw
IFwKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIFwKICAgICBl
ZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5v
ZGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1l
bnRDb21tYW5kLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYzljZjliMzgyYzI0YmMyZWVlYjkzYjc0NjdjMjRhNDcyMTQ2
NTMzMC4uNTAxMDg5OTAzNDJkODRkNDk4YzQwNjc4ZWNlODJlNThjZjZlYjlmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzE4
Miw2ICszMTgyLDggQEAKIAkJQTYyMkE4RkMxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1
cml0eUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTYyMkE4RjYxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwICov
OyB9OwogCQlBNjIyQThGRDEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTYyMkE4Rjcx
MjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCAqLzsgfTsKIAkJQTYyMkE4
RkYxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyog
R2VuZXJpY0JpbmRpbmcuaCAqLzsgfTsKKwkJQTcwMDVDQ0MxMzMwQzRCQTAwMENDMEJBIC8qIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwICovOyB9OworCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0Mw
QkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzE1MUJEODEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENo
ZWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3MTUxQkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTg3NjBFMEIy
QTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxODc2MEQwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rp
b25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTcxODc4OTAwQjJEMDRBQzAwQTE2RUNFIC8qIERyYWdDb250cm9sbGVyTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxODc4OEYwQjJEMDRBQzAw
QTE2RUNFIC8qIERyYWdDb250cm9sbGVyTWFjLm1tICovOyB9OwpAQCAtNDc3Niw3ICs0Nzc4LDYg
QEAKIAkJQjc3NkQ0M0QxMTA0NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzc2RDQzQzExMDQ1Mjc1
MDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDQxMUUwNkREMjAw
OUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCODg1RThEMjExRTA2REQyMDA5RkZC
RjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCAqLzsgfTsKIAkJQjg4NUU4
RDUxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4RDMxMUUw
NkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07Ci0JCUI4QTZBNkQ1MTI3QjMzOEQwMDg2NzNC
QSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCOEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBh
bmVsSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUI4REJEQjRCMTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ3MTMw
QjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKIAkJQjhEQkRC
NEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RC
MSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07CiAJCUI4REJEQjREMTMwQjBGOEEwMEY1
Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBT
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKQEAgLTk2NjYsNiArOTY2Nyw4IEBA
CiAJCUE2MjJBOEY2MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEJpbmRpbmdTZWN1cml0eUJhc2Uu
Y3BwOyBwYXRoID0gZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTYyMkE4RjcxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1
cml0eUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQmluZGluZ1NlY3Vy
aXR5QmFzZS5oOyBwYXRoID0gZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE2MjJBOEY5MTIyQzQ0QTYwMEE3ODVCMyAvKiBHZW5lcmlj
QmluZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW5lcmljQmluZGlu
Zy5oOyBwYXRoID0gZ2VuZXJpYy9HZW5lcmljQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE1MUJENzEyRjE1
NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dENoZWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTcxODc2MEQwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERyYWdBY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3MTg3ODhGMEIyRDA0QUMwMEExNkVDRSAvKiBEcmFnQ29udHJvbGxlck1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdDb250cm9s
bGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTExNjYsNyArMTExNjks
NiBAQAogCQlCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW50Q29udGV4dC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29ycmVjdGlvblBhbmVsSW5mby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0NzEzMEIwRjhBMDBGNUNEQjEg
LyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjhEQkRCNDgxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0U2VsZWN0aW9uQ29tbWFuZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyog
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE1NDM3LDcgKzE1NDM5LDYgQEAKIAkJCQk5MzMwOUQ4QzA5OUU2NDkx
MDA1NkU1ODEgLyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5oICovLAogCQkJCTkzMzA5RDhEMDk5
RTY0OTEwMDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlE
OEUwOTlFNjQ5MTAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5kLmggKi8sCi0JCQkJQjhB
NkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCAqLywKIAkJCQlE
MEIwNTU2NzA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQuY3BwICovLAogCQkJ
CUQwQjA1NTY2MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5oICovLAogCQkJ
CTFDNEM4RjYzMEFEODY1NUQwMDk0NzVDRSAvKiBEZWxldGVCdXR0b24uY3BwICovLApAQCAtMTU1
MTksNiArMTU1MjAsOCBAQAogCQkJCUE3OEZFMTNBMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENo
ZWNrZXIuaCAqLywKIAkJCQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAgKi8sCiAJCQkJQjhEQkRCNEExMzBCMEY4QTAwRjVDREIxIC8qIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCAqLywKKwkJCQlBNzAwNUNDQTEzMzBDNEJBMDAwQ0Mw
QkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi8sCisJCQkJQTcwMDVDQ0Ix
MzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLywKIAkJ
CQk5MzMwOURDMjA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgKi8s
CiAJCQkJOTMzMDlEQzMwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuaCAq
LywKIAkJCQk5MzMwOURDNDA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbW1hbmQu
Y3BwICovLApAQCAtMTk4MzksNyArMTk4NDIsNiBAQAogCQkJCTkzNTIwODgyMDlCRDQ1RTkwMEYy
MDM4RCAvKiBDb29raWVKYXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFRTY4NDY0MTJEMjZFMzgw
MEU3OTQxNSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNkZE
NDg4MEY2NzZFNTcwMDA5Mjg3MyAvKiBDb29yZGluYXRlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
QjhBNkE2RDUxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4MEU2RDA0MEExOTg5Q0EwMDdGQjhDNSAvKiBDb3VudGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzVFQjk3OTBFODIwNjkyMDBCMjU5NjUgLyogQ291bnRlckNvbnRlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCOTUxMEU4MjA1NkIwMEIyNTk2NSAvKiBDb3VudGVy
RGlyZWN0aXZlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjEyNyw2ICsyMjEyOSw3IEBACiAJCQkJ
NzU0MTVCMDAxMjk1OEQ1RTAwM0FENjY5IC8qIFNwZWVjaElucHV0UmVzdWx0TGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTc4RkUxM0MxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3MDA1Q0NEMTMzMEM0QkEw
MDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzMwOUUxMjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5v
ZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNjA5OUU2NDkyMDA1NkU1ODEg
LyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNTM0OCw2ICsyNTM1MSw3IEBACiAJCQkJMzE5RTY4ODcxMzI3QzkxMTAwNEFDOTFBIC8q
IEpTV2ViS2l0QW5pbWF0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxOUU2OUIy
MTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzE5RTY5QjUxMzI5OUJCRDAwNEFDOTFBIC8qIFdlYktpdEFuaW1hdGlvbkxpc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTcwMDVDQ0MxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3NjA5OWUxNjJmYTcyZjdmMTM5ZDYzZmMxMzc4YzRiNGIzM2YzZmU1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q29ycmVjdGlvblBhbmVsSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBDb3JyZWN0aW9uUGFuZWxJbmZvX2gKLSNkZWZpbmUgQ29ycmVjdGlvblBh
bmVsSW5mb19oCi0KLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQpCi0vLyBTb21lIHBsYXRmb3JtcyBwcm92aWRlIFVJIGZvciBzdWdn
ZXN0aW5nIGF1dG9jb3JyZWN0aW9uLgotI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BB
TkVMIDEKLS8vIFNvbWUgcGxhdGZvcm1zIHVzZSBzcGVsbGluZyBhbmQgYXV0b2NvcnJlY3Rpb24g
bWFya2VycyB0byBwcm92aWRlIHZpc3VhbCBjdWUuCi0vLyBPbiBzdWNoIHBsYXRmb3JtLCBpZiB3
b3JkIHdpdGggbWFya2VyIGlzIGVkaXRlZCwgd2UgbmVlZCB0byByZW1vdmUgdGhlIG1hcmtlci4K
LSNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDEKLSNlbHNlCi0jZGVmaW5lIFNV
UFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwgMAotI2RlZmluZSBSRU1PVkVfTUFSS0VSU19VUE9O
X0VESVRJTkcgMAotI2VuZGlmIC8vICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0KLSNpbmNsdWRlICJSYW5nZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBDb3JyZWN0aW9uUGFuZWxJbmZvIHsKLSAgICBlbnVt
IFBhbmVsVHlwZSB7Ci0gICAgICAgIFBhbmVsVHlwZUNvcnJlY3Rpb24gPSAwLAotICAgICAgICBQ
YW5lbFR5cGVSZXZlcnNpb24sCi0gICAgICAgIFBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMK
LSAgICB9OwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZDsKLSAgICBTdHJp
bmcgcmVwbGFjZWRTdHJpbmc7Ci0gICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwotICAgIFBh
bmVsVHlwZSBwYW5lbFR5cGU7Ci0gICAgYm9vbCBpc0FjdGl2ZTsKLX07Ci0KLWVudW0gUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCB7Ci0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbENhbmNlbGxlZCA9IDAsCi0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbElnbm9yZWQsCi0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bEFjY2VwdGVkCi19OwotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ29ycmVj
dGlvblBhbmVsSW5mb19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggODgwNzk2NTA2
OGE0MzkxMGE5YWQ5MzY1MWUxNDYyZWNjOGU5Y2Y5YS4uZTQwZmMxYWEyYWU5NmMxNmI0N2Q0OGJj
YWU0MGU1NDY5YjFkODIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMzgsNiAr
MzgsNyBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2xp
cGJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJDb21wb3NpdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAi
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNyZWF0ZUxpbmtDb21t
YW5kLmgiCiAjaW5jbHVkZSAiRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIKQEAgLTk0LDM1ICs5NSw2IEBAIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNv
ZGU7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKFVD
aGFyIGNoYXJhY3RlcikKLXsKLSAgICAvLyBUaGVzZSBhcmUgY2hhcmFjdGVycyB0aGF0IGNhbiBi
ZWhhdmUgYXMgd29yZCBib3VuZGFyaWVzLCBidXQgY2FuIGFwcGVhciB3aXRoaW4gd29yZHMuCi0g
ICAgLy8gSWYgdGhleSBhcmUganVzdCB0eXBlZCwgaS5lLiBpZiB0aGV5IGFyZSBpbW1lZGlhdGVs
eSBmb2xsb3dlZCBieSBhIGNhcmV0LCB3ZSB3YW50IHRvIGRlbGF5IHRleHQgY2hlY2tpbmcgdW50
aWwgdGhlIG5leHQgY2hhcmFjdGVyIGhhcyBiZWVuIHR5cGVkLgotICAgIC8vIEZJWE1FOiB0aGlz
IGlzIHJlcXVpcmVkIHVudGlsIDY4NTMwMjcgaXMgZml4ZWQgYW5kIHRleHQgY2hlY2tpbmcgY2Fu
IGRvIHRoaXMgZm9yIHVzLgotICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0
ZXIgPT0gcmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5j
dHVhdGlvbkdlcnNoYXlpbTsKLX0KLQotc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKQotewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFy
a2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbiwgKCkpOwotICAgIGlmIChtYXJrZXJUeXBlc0ZvckF1
dG9Db3JyZWN0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3Jy
ZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgICAgICBtYXJr
ZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlv
bkluZGljYXRvcik7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5k
KERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSAgICB9Ci0gICAgcmV0
dXJuIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb247Ci19Ci0KLXN0YXRpYyBjb25zdCBWZWN0
b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQsICgpKTsKLSAgICBpZiAobWFya2Vy
VHlwZXNGb3JSZXBsYWNlbWVudC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JS
ZXBsYWNlbWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICAgICAg
bWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hl
Y2tpbmdFeGVtcHRpb24pOwotICAgIH0KLSAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JSZXBsYWNl
bWVudDsKLX0KLQogLy8gV2hlbiBhbiBldmVudCBoYW5kbGVyIGhhcyBtb3ZlZCB0aGUgc2VsZWN0
aW9uIG91dHNpZGUgb2YgYSB0ZXh0IGNvbnRyb2wKIC8vIHdlIHNob3VsZCB1c2UgdGhlIHRhcmdl
dCBjb250cm9sJ3Mgc2VsZWN0aW9uIGZvciB0aGlzIGVkaXRpbmcgb3BlcmF0aW9uLgogVmlzaWJs
ZVNlbGVjdGlvbiBFZGl0b3I6OnNlbGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQpAQCAt
NTE4LDQ4ICs0OTAsOCBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCiAgICAgaWYgKGNsaWVudCgpKQog
ICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpOwogICAgIG1fZGVs
ZXRlQnV0dG9uQ29udHJvbGxlci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rp
b24pOwotCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFZpc2libGVTZWxl
Y3Rpb24gY3VycmVudFNlbGVjdGlvbihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkp
OwotICAgIC8vIFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0
ZWQgd29yZCBhbmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAotICAgIC8vIGNvbnRhaW5pbmcg
dGhlIG9yaWdpbmFsIHByZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5
IHJldmVydCB0aGUKLSAgICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0
YXJ0IGNvcnJlY3Rpb24gcGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKLSAgICAvLyB0
aGUgbmV3IGNhcmV0IHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgotICAgIGlmICgh
Y3VycmVudFNlbGVjdGlvbi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxl
Y3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Q
b3NpdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24g
ZW5kUG9zaXRpb25PZldvcmQgPSBlbmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRXb3Jk
SWZPbkJvdW5kYXJ5KTsKLSAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRpb25P
ZldvcmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kUG9z
aXRpb25PZldvcmQuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlw
ZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgaW50
IGVuZE9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotICAgIFZlY3Rv
cjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+
bWFya2Vyc0Zvck5vZGUobm9kZSk7Ci0gICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5z
aXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAg
ICBpZiAoKChtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgJiYgIW1h
cmtlci5kZXNjcmlwdGlvbi5pc051bGwoKSkgfHwgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQpID09IGVu
ZE9mZnNldCkgewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKGZyYW1lKCktPmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCwgbm9k
ZSwgbWFya2VyLmVuZE9mZnNldCk7Ci0gICAgICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBw
bGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50V29yZC5s
ZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKLSAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZWRTdHJpbmcgPSBjdXJyZW50V29yZDsKLSAgICAgICAgICAgICAgICBpZiAo
bWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKQotICAgICAgICAgICAgICAg
ICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBt
YXJrZXIuZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBh
bmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgaWYg
KG1fc3BlbGxpbmdDb3JyZWN0b3IpCisgICAgICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJl
c3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxl
Y3Rpb24pCkBAIC0xMDYyLDEwICs5OTQsOCBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmco
UGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQogICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50
Q2hhbmdlZEV2ZW50cygqY21kKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihj
bWQtPmVuZGluZ1NlbGVjdGlvbigpKTsKIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKLSAgICBpZiAoY21kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjbWQtPnNob3VsZFJldGFp
bkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCkt
Pm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGlj
YXRvcik7Ci0jZW5kaWYKKyAgICBpZiAobV9zcGVsbGluZ0NvcnJlY3RvcikKKyAgICAgICAgbV9z
cGVsbGluZ0NvcnJlY3Rvci0+cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoY21kKTsKIAogICAgIC8v
IERvbid0IGNsZWFyIHRoZSB0eXBpbmcgc3R5bGUgd2l0aCB0aGlzIHNlbGVjdGlvbiBjaGFuZ2Uu
ICBXZSBkbyB0aG9zZSB0aGluZ3MgZWxzZXdoZXJlIGlmIG5lY2Vzc2FyeS4KICAgICBjaGFuZ2VT
ZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCBmYWxzZSwgZmFsc2UpOwpAQCAtMTEy
NSwxNiArMTA1NSwxMyBAQCBFZGl0b3I6OkVkaXRvcihGcmFtZSogZnJhbWUpCiAgICAgLCBtX3No
b3VsZFN0eWxlV2l0aENTUyhmYWxzZSkKICAgICAsIG1fa2lsbFJpbmcoYWRvcHRQdHIobmV3IEtp
bGxSaW5nKSkKICAgICAsIG1fc3BlbGxDaGVja2VyKG5ldyBTcGVsbENoZWNrZXIoZnJhbWUsIGZy
YW1lLT5wYWdlKCkgPyBmcmFtZS0+cGFnZSgpLT5lZGl0b3JDbGllbnQoKS0+dGV4dENoZWNrZXIo
KSA6IDApKQotICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAmRWRpdG9yOjpjb3Jy
ZWN0aW9uUGFuZWxUaW1lckZpcmVkKQorICAgICwgbV9zcGVsbGluZ0NvcnJlY3RvcihTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpjcmVhdGUoZnJhbWUpKQogICAgICwgbV9hcmVNYXJrZWRU
ZXh0TWF0Y2hlc0hpZ2hsaWdodGVkKGZhbHNlKQogewogfQogCiBFZGl0b3I6On5FZGl0b3IoKQog
ewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBkaXNtaXNzQ29ycmVjdGlv
blBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKLSNlbmRp
ZgogfQogCiB2b2lkIEVkaXRvcjo6Y2xlYXIoKQpAQCAtMTE3OSw3ICsxMTA2LDcgQEAgYm9vbCBF
ZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRl
eHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAodGV4dC5sZW5ndGgoKSA9PSAxICYmIGlzUHVuY3Qo
dGV4dFswXSkgJiYgIWlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIodGV4dFswXSkpCiAgICAg
ICAgIHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlvbiA9IHRydWU7CiAKLSAgICBi
b29sIGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCA9IHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRv
Y29ycmVjdGlvbiAmJiBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0
ZSgpOworICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25XYXNBcHBsaWVkID0gc2hvdWxkQ29uc2lkZXJB
cHBseWluZ0F1dG9jb3JyZWN0aW9uICYmIG1fc3BlbGxpbmdDb3JyZWN0b3IgJiYgbV9zcGVsbGlu
Z0NvcnJlY3Rvci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUo
KTsKIAogICAgIC8vIEdldCB0aGUgc2VsZWN0aW9uIHRvIHVzZSBmb3IgdGhlIGV2ZW50IHRoYXQg
dHJpZ2dlcmVkIHRoaXMgaW5zZXJ0VGV4dC4KICAgICAvLyBJZiB0aGUgZXZlbnQgaGFuZGxlciBj
aGFuZ2VkIHRoZSBzZWxlY3Rpb24sIHdlIG1heSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBzZWxl
Y3Rpb24KQEAgLTEyMTUsNyArMTE0Miw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWso
KQogICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBh
cHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wg
YXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX3NwZWxsaW5nQ29ycmVjdG9yICYmIG1fc3BlbGxp
bmdDb3JyZWN0b3ItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRl
KCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKG1fZnJhbWUtPmRvY3VtZW50
KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2Nv
cnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdP
cGVyYXRpb24oKTsKIApAQCAtMTIzMyw3ICsxMTYwLDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBh
cmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJh
bWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRB
Y3Rpb25UeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBhdXRvY29ycmVj
dGlvbklzQXBwbGllZCA9IGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJp
YXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1fc3BlbGxpbmdDb3Jy
ZWN0b3IgJiYgbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5
cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3IobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBU
eXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDApOwogICAgIHJl
dmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCkBAIC0yMDYwLDI0ICsxOTg3
LDEwIEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKQogeworICAgIGlm
IChtX3NwZWxsaW5nQ29ycmVjdG9yKQorICAgICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBs
eVBlbmRpbmdDb3JyZWN0aW9uKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsKKwogI2lmIFBMQVRGT1JN
KE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIC8vIEFw
cGx5IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5leHQgcm91bmQgb2Ygc3BlbGwgY2hl
Y2tpbmcuCi0gICAgYm9vbCBkb0FwcGx5Q29ycmVjdGlvbiA9IHRydWU7Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb25BZnRlclR5cGluZy52aXNpYmxlU3Rh
cnQoKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3JkID0gVmlzaWJsZVNlbGVjdGlv
bihzdGFydE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVu
ZE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKLSAgICBp
ZiAoY3VycmVudFdvcmQudmlzaWJsZUVuZCgpID09IHN0YXJ0T2ZTZWxlY3Rpb24pIHsKLSAgICAg
ICAgU3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0KGN1cnJlbnRXb3JkLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCkpOwotICAgICAgICBpZiAod29yZFRleHQubGVuZ3RoKCkgPiAwICYmIGlzQW1i
aWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIod29yZFRleHRbd29yZFRleHQubGVuZ3RoKCkgLSAxXSkp
Ci0gICAgICAgICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAo
ZG9BcHBseUNvcnJlY3Rpb24pCi0gICAgICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwotI2VuZGlmCiAgICAgVGV4
dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gMDsKICAgICBpZiAoaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9u
cyB8PSBNYXJrU3BlbGxpbmc7CkBAIC0yMTA0LDcgKzIwMTcsNiBAQCB2b2lkIEVkaXRvcjo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29y
ZFN0YXJ0LAogICAgIH0KIAogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJU
eXBpbmcpOwogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0yMjE5LDcgKzIxMzEsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0Jh
ZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogdm9pZCBFZGl0b3I6
Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0
aW9ucyB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBSYW5nZSogc3BlbGxpbmdSYW5nZSwgUmFuZ2UqIGdy
YW1tYXJSYW5nZSkKIHsKICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgcGVuZGluZyBhdXRvY29y
cmVjdGlvbiBhdCB0aGlzIG1vbWVudC4KLSAgICBBU1NFUlQoIW1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZCk7CisgICAgQVNTRVJUKCFtX3NwZWxsaW5nQ29ycmVjdG9yIHx8
ICFtX3NwZWxsaW5nQ29ycmVjdG9yLT5oYXNQZW5kaW5nQ29ycmVjdGlvbigpKTsKIAogICAgIGJv
b2wgc2hvdWxkTWFya1NwZWxsaW5nID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIE1hcmtTcGVsbGlu
ZzsKICAgICBib29sIHNob3VsZE1hcmtHcmFtbWFyID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIE1h
cmtHcmFtbWFyOwpAQCAtMjI5MSwxMSArMjIwMyw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENo
CiAgICAgfQogICAgIHRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFw
aC50ZXh0Q2hhcmFjdGVycygpLCBwYXJhZ3JhcGgudGV4dExlbmd0aCgpLCBjaGVja2luZ1R5cGVz
LCByZXN1bHRzKTsKIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAvLyBJ
ZiB0aGlzIGNoZWNraW5nIGlzIG9ubHkgZm9yIHNob3dpbmcgY29ycmVjdGlvbiBwYW5lbCwgd2Ug
c2hvdWxkbid0IGJvdGhlciB0byBtYXJrIG1pc3NwZWxsaW5ncy4KICAgICBpZiAoc2hvdWxkU2hv
d0NvcnJlY3Rpb25QYW5lbCkKICAgICAgICAgc2hvdWxkTWFya1NwZWxsaW5nID0gZmFsc2U7Ci0j
ZW5kaWYKIAogICAgIGludCBvZmZzZXREdWVUb1JlcGxhY2VtZW50ID0gMDsKIApAQCAtMjMxNCwx
MCArMjIyNCw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
ckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiAgICAgICAgIGlmIChzaG91bGRN
YXJrU3BlbGxpbmcgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAm
JiByZXN1bHRMb2NhdGlvbiA+PSBzcGVsbGluZ1BhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCkgJiYg
cmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAm
JiAhcmVzdWx0RW5kc0F0QW1iaWd1b3VzQm91bmRhcnkpIHsKICAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49IDApOwogICAgICAgICAgICAgUmVm
UHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gc3BlbGxpbmdQYXJhZ3JhcGguc3VicmFuZ2Uo
cmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCk7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTAotICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+
aGFzTWFya2VycyhtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxD
aGVja2luZ0V4ZW1wdGlvbikpCisgICAgICAgICAgICBpZiAobV9zcGVsbGluZ0NvcnJlY3RvciAm
JiAhbV9zcGVsbGluZ0NvcnJlY3Rvci0+aXNTcGVsbGluZ01hcmtlckFsbG93ZWQobWlzc3BlbGxp
bmdSYW5nZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0jZW5kaWYgLy8gU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRD
b250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihtaXNzcGVsbGlu
Z1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZE1hcmtHcmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBl
R3JhbW1hciAmJiBncmFtbWFyUGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMocmVzdWx0TG9j
YXRpb24sIHJlc3VsdExlbmd0aCkpIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGgg
PiAwICYmIHJlc3VsdExvY2F0aW9uID49IDApOwpAQCAtMjM3NiwyNCArMjI4NCwxNyBAQCB2b2lk
IEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hl
Y2tpbmdPcHRpb25zIHRleHRDaAogICAgICAgICAgICAgaWYgKCFkb1JlcGxhY2VtZW50KQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5F
TAogICAgICAgICAgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpIHsKKyAgICAgICAg
ICAgICAgICAvLyBzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsIGNhbiBiZSB0cnVlIG9ubHkgd2hl
biB0aGUgcGFuZWwgaXMgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgIEFTU0VSVChtX3NwZWxs
aW5nQ29ycmVjdG9yKTsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TG9jYXRpb24gKyByZXN1
bHRMZW5ndGggPT0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBvbmx5IHNob3cgdGhlIGNvcnJlY3Rpb24gcGFuZWwgb24gdGhlIGxhc3Qgd29yZC4K
LSAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZv
clJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJv
dW5kaW5nQm94LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQg
PSByYW5nZVRvUmVwbGFjZTsKLSAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5n
ID0gcmVzdWx0LT5yZXBsYWNlbWVudDsKLSAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgY2xpZW50KCkt
PnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91
bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcmVzdWx0LT5y
ZXBsYWNlbWVudCwgVmVjdG9yPFN0cmluZz4oKSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAg
IG1fc3BlbGxpbmdDb3JyZWN0b3ItPnNob3cocmFuZ2VUb1JlcGxhY2UsIHJlc3VsdC0+cmVwbGFj
ZW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHNob3dpbmcg
Y29ycmVjdGlvbiBwYW5lbCwgd2UgaWdub3JlIG90aGVyIGNvcnJlY3Rpb24gb3IgcmVwbGFjZW1l
bnQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0jZW5kaWYKIAog
ICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKSkKQEAgLTI0OTks
MTQzICsyNDAwLDM2IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
cihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjCiAjZW5kaWYKIH0KIAotdm9p
ZCBFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopCi17Ci0j
aWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIG1fY29ycmVjdGlvblBhbmVsSXNE
aXNtaXNzZWRCeUVkaXRvciA9IGZhbHNlOwotICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
Q29ycmVjdGlvbjogewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihmcmFtZSgp
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKLSAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
OwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0
aW9uKHAsIHN0YXJ0KTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhNYXJrU3BlbGxpbmcgfCBTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRz
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOwotICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsKLSAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBh
bmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZywgVmVj
dG9yPFN0cmluZz4oKSwgdGhpcyk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKLSAgICAg
ICAgaWYgKHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQu
Z2V0KCkpICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
KS5wYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2Vz
dGlvbnM7Ci0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMp
OwotICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB0b3BTdWdnZXN0aW9uID0gc3VnZ2Vz
dGlvbnMuZmlyc3QoKTsKLSAgICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDApOwotICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VkU3RyaW5nLCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucywgdGhpcyk7Ci0gICAg
fQotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBFZGl0b3I6OmhhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0gICAg
UmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQuZ2V0KCk7Ci0gICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3VtZW50
KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdv
cmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVy
IGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgotICAgIGlmIChjdXJyZW50V29y
ZCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotCi0gICAg
c3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7Ci0gICAgY2FzZSBDb3Jy
ZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgotICAgICAgICBpZiAoY29ycmVj
dGlvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKLSAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBh
bmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3Ip
Ci0gICAgICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5n
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZVJldmVyc2lvbjoKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0
aCgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJp
bmcgPSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFy
KCk7Ci19Ci0KLXZvaWQgRWRpdG9yOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQordm9pZCBFZGl0b3I6OnN0YXJ0Q29ycmVjdGlv
blBhbmVsVGltZXIoKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBj
b25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsKLSAgICBpZiAo
aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKHR5
cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAg
ICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2Ug
aGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQuCi0gICAgICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSAgICAgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7Ci0gICAgICAgIG1fY29ycmVjdGlv
blBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwpOwot
ICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotI2VuZGlmCisgICAgaWYgKG1f
c3BlbGxpbmdDb3JyZWN0b3IpCisgICAgICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnN0YXJ0Q29y
cmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlv
bik7CiB9CiAKLXZvaWQgRWRpdG9yOjpzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKQordm9pZCBF
ZGl0b3I6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVD
VElPTl9QQU5FTAotICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RvcCgpOwotICAgIG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotI2VuZGlmCisgICAg
aWYgKG1fc3BlbGxpbmdDb3JyZWN0b3IpCisgICAgICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmhh
bmRsZUNhbmNlbE9wZXJhdGlvbigpOwogfQogCi12b2lkIEVkaXRvcjo6aGFuZGxlQ2FuY2VsT3Bl
cmF0aW9uKCkKK3ZvaWQgRWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVj
dGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVD
VElPTl9QQU5FTAotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7
Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkKTsKLSNlbmRp
ZgorICAgIGlmIChtX3NwZWxsaW5nQ29ycmVjdG9yKQorICAgICAgICBtX3NwZWxsaW5nQ29ycmVj
dG9yLT5yZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0
ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjppc1Nob3dpbmdD
b3JyZWN0aW9uUGFuZWwoKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAg
ICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+aXNTaG93aW5nQ29ycmVj
dGlvblBhbmVsKCk7Ci0jZW5kaWYKKyAgICBpZiAobV9zcGVsbGluZ0NvcnJlY3RvcikKKyAgICAg
ICAgcmV0dXJuIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9u
UGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNz
aW5nKQordm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5n
KGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KQogewotI2lmIFNVUFBP
UlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSkKKyAgICBpZiAoIW1fc3BlbGxpbmdDb3JyZWN0b3IpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAgICBtX2NvcnJl
Y3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkK
LSAgICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwocmVhc29uRm9yRGlzbWlz
c2luZyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLSNl
bmRpZgotfQotdm9pZCBFZGl0b3I6OnJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9t
V29yZHNUb0JlRWRpdGVkKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5
KQoteworCiAgICAgLy8gV2Ugd2FudCB0byByZW1vdmUgdGhlIG1hcmtlcnMgZnJvbSBhIHdvcmQg
aWYgYW4gZWRpdGluZyBjb21tYW5kIHdpbGwgY2hhbmdlIHRoZSB3b3JkLiBUaGlzIGNhbiBoYXBw
ZW4gaW4gb25lIG9mCiAgICAgLy8gc2V2ZXJhbCBzY2VuYXJpb3M6CiAgICAgLy8gMS4gSW5zZXJ0
IGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkLgpAQCAtMjcwMSwxMDIgKzI0OTUsNiBAQCB2b2lkIEVk
aXRvcjo6cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQo
Ym9vbCBkb05vdFJlbW92ZQogICAgIGRvY3VtZW50LT5tYXJrZXJzKCktPmNsZWFyRGVzY3JpcHRp
b25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZSh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpSZXBsYWNlbWVudCk7CiB9CiAKLXZvaWQgRWRpdG9yOjphcHBseUNvcnJlY3Rpb25QYW5l
bEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlw
ZXNUb0FkZCkKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgaWYgKCFt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBo
UmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgp
LCBzdGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNl
ZC0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSkpOwotCi0gICAgLy8gQWZ0ZXIgd2UgcmVw
bGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVSZXBsYWNlZCwgd2UgbmVlZCB0byBhZGQg
bWFya2VycyB0byB0aGF0IHJhbmdlLgotICAgIC8vIEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2Vt
ZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFs
aWQgYW55bW9yZS4KLSAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVu
dCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFj
ZWQKLSAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5p
bmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKLSAg
ICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQs
IHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKLSAgICAvLyB3aGljaCBzcGFucyBmcm9t
IHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9C
ZVJlcGxhY2VkLgotICAgIFJlZlB0cjxSYW5nZT4gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkID0g
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCk7
Ci0gICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoc3Rh
cnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0
aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVj
KTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRha2Ugbm90ZSBvZiB0
aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBh
ZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KLSAgICBpbnQgY29ycmVjdGlvblN0YXJ0
T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25T
dGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7Ci0KLSAgICAvLyBDbG9uZSB0aGUg
cmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0
aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVw
bGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFu
Z2UoZWMpOwotICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVh
dGUocmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0
cmluZykpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdl
dCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgUmVm
UHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZz
ZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZy5s
ZW5ndGgoKSk7Ci0gICAgU3RyaW5nIG5ld1RleHQgPSBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5n
ZS5nZXQoKSk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVk
LgotICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0
cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBt
YXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpOwotICAgIHNpemVfdCBzaXplID0gbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKG1fY29y
cmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxU
eXBlUmV2ZXJzaW9uKQotICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VtZW50
UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGVzVG9BZGRbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgbWFya2VyVHlw
ZXNUb0FkZFtpXSwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKTsKLSAgICB9
Ci0jZWxzZSAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgVU5VU0VEX1BBUkFN
KG1hcmtlclR5cGVzVG9BZGQpOwotI2VuZGlmIC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKLX0KLQotYm9vbCBFZGl0b3I6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFw
cHJvcHJpYXRlKCkKLXsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZCB8fCAhbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0KLSAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKLSAg
ICAgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsQWNjZXB0ZWQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotICAgIAotICAg
IC8vIFBlbmRpbmcgY29ycmVjdGlvbiBzaG91bGQgYWx3YXlzIGJlIHdoZXJlIGNhcmV0IGlzLiBC
dXQgaW4gY2FzZSB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgd2Ugc3RpbGwgd2FudCB0byBkaXNt
aXNzIHRoZSBwYW5lbCB3aXRob3V0IGFjY2VwdGluZyB0aGUgY29ycmVjdGlvbi4KLSAgICBBU1NF
UlQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigp
ID09IGNhcmV0UG9zaXRpb24pOwotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNv
bnN0IFN0cmluZyYgY29ycmVjdGlvbikKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BB
TkVMCi0gICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xp
ZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwotICAg
IG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwotICAgIG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkNsb3NlVHlwaW5nIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xlYXJUeXBpbmdTdHls
ZSB8IFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0KLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIqIG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgbWFya2Vy
cy0+cmVtb3ZlTWFya2VycyhyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsK
LSAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCk7Ci0gICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0jZWxzZSAvLyBTVVBQT1JUX0FVVE9DT1JS
RUNUSU9OX1BBTkVMCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbk9mQ29ycmVjdGVkKTsKLSAg
ICBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsKLSAgICBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7
Ci0jZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotfQotCiBQYXNzUmVmUHRy
PFJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50
KQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50QXRQb2ludCh3
aW5kb3dQb2ludCk7CkBAIC0zNDkxLDE0ICszMTg5LDggQEAgdm9pZCBFZGl0b3I6OnNldE1hcmtl
ZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCBmbGFnKQogCiB2b2lkIEVkaXRvcjo6cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rp
b24sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKIHsK
LSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgLy8gTWFrZSBzdXJlIHRoZXJl
J3Mgbm8gcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hcigpIGJlbG93LgotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNl
bGVjdGlvbihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgIGlmIChjdXJy
ZW50U2VsZWN0aW9uICE9IG9sZFNlbGVjdGlvbikgewotICAgICAgICBzdG9wQ29ycmVjdGlvblBh
bmVsVGltZXIoKTsKLSAgICAgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Ci0gICAgfQotI2VuZGlmIC8vIFNVUFBPUlRf
QVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICBpZiAobV9zcGVsbGluZ0NvcnJlY3RvcikKKyAgICAg
ICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+c3RvcFBlbmRpbmdDb3JyZWN0aW9uKG9sZFNlbGVjdGlv
bik7CiAKICAgICBib29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAmIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkNsb3NlVHlwaW5nOwogICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQgPSB0aGlzLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwpAQCAtMzUxNSwx
MCArMzIwNyw4IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgU2VsCiAgICAgICAgIH0KIAogICAgICAg
ICBib29sIHNob3VsZENoZWNrU3BlbGxpbmdBbmRHcmFtbWFyID0gdHJ1ZTsKLSNpZiBTVVBQT1JU
X0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgIC8vIERvbid0IGNoZWNrIHNwZWxsaW5nIGFu
ZCBncmFtbWFyIGlmIHRoZSBjaGFuZ2Ugb2Ygc2VsZWN0aW9uIGlzIHRyaWdnZXJlZCBieSBzcGVs
bGluZyBjb3JyZWN0aW9uIGl0c2VsZi4KICAgICAgICAgc2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdy
YW1tYXIgPSAhKG9wdGlvbnMgJiBTZWxlY3Rpb25Db250cm9sbGVyOjpTcGVsbENvcnJlY3Rpb25U
cmlnZ2VyZWQpOwotI2VuZGlmCiAKICAgICAgICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hlY2sgc3Bl
bGxpbmcgZWxzZXdoZXJlLCBzbyBkb24ndCByZWRvIGl0IGhlcmUuCiAgICAgICAgIC8vIElmIHRo
aXMgaXMgYSBjaGFuZ2UgaW4gc2VsZWN0aW9uIHJlc3VsdGluZyBmcm9tIGEgZGVsZXRlIG9wZXJh
dGlvbiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGUxYTcxMTkyNDVlODNiZWQxMGQ3M2Qy
MDVlZmUyMTU0MDg1YzU2OWUuLmU4NDcyMWYyZWZlMGQ4Nzc1ODViMDYzZmU3ZjljZTY3OTllMWI1
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVk
ZSAiQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRl
ICJDb3JyZWN0aW9uUGFuZWxJbmZvLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKICNp
bmNsdWRlICJFZGl0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRWRpdGluZ0JlaGF2aW9yLmgiCkBAIC01
MCw2ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENsaXBib2FyZDsK
K2NsYXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBEZWxldGVCdXR0b25D
b250cm9sbGVyOwogY2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0b3JDbGllbnQ7CkBAIC0z
MjEsOSArMzIxLDkgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVG9LaWxsUmluZyhSYW5nZSosIGJv
b2wgcHJlcGVuZCk7CiAKICAgICB2b2lkIGhhbmRsZUNhbmNlbE9wZXJhdGlvbigpOwotICAgIHZv
aWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGUpOworICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworCiAgICAgLy8gSWYg
dXNlciBjb25maXJtZWQgYSBjb3JyZWN0aW9uIGluIHRoZSBjb3JyZWN0aW9uIHBhbmVsLCBjb3Jy
ZWN0aW9uIGhhcyBub24temVybyBsZW5ndGgsIG90aGVyd2lzZSBpdCBtZWFucyB0aGF0IHVzZXIg
aGFzIGRpc21pc3NlZCB0aGUgcGFuZWwuCi0gICAgdm9pZCBoYW5kbGVDb3JyZWN0aW9uUGFuZWxS
ZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKICAgICBib29sIGlzU2hvd2luZ0NvcnJl
Y3Rpb25QYW5lbCgpOwogCiAgICAgdm9pZCBwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7CkBAIC0z
NzksNyArMzc5LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIHNlbGVjdGlvblN0YXJ0
SGFzU3BlbGxpbmdNYXJrZXJGb3IoaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0OwotICAgIHZv
aWQgcmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoYm9v
bCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpOworICAgIHZvaWQgdXBkYXRl
TWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBvbmx5SGFuZGxlV29yZHNDb250
YWluaW5nU2VsZWN0aW9uKTsKIAogcHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFtZTsKQEAgLTM5
NCwxMCArMzk0LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkU3RhcnROZXdLaWxsUmlu
Z1NlcXVlbmNlOwogICAgIGJvb2wgbV9zaG91bGRTdHlsZVdpdGhDU1M7CiAgICAgT3duUHRyPEtp
bGxSaW5nPiBtX2tpbGxSaW5nOwotICAgIENvcnJlY3Rpb25QYW5lbEluZm8gbV9jb3JyZWN0aW9u
UGFuZWxJbmZvOwogICAgIE93blB0cjxTcGVsbENoZWNrZXI+IG1fc3BlbGxDaGVja2VyOwotICAg
IFRpbWVyPEVkaXRvcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsKLSAgICBib29sIG1fY29ycmVj
dGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcjsKKyAgICBPd25QdHI8U3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcj4gbV9zcGVsbGluZ0NvcnJlY3RvcjsKICAgICBWaXNpYmxlU2VsZWN0aW9u
IG1fbWFyazsKICAgICBib29sIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZDsKIApA
QCAtNDIxLDEzICs0MTksOCBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IG5leHRW
aXNpYmxlUmFuZ2UoUmFuZ2UqLCBjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiAKICAgICB2
b2lkIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBu
ZXdTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wgY2xlYXJUeXBpbmdTdHlsZSk7Ci0g
ICAgdm9pZCBjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPEVkaXRvcj4qKTsKICAgICBO
b2RlKiBmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBzdG9w
Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKLSAgICB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwo
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7Ci0gICAgdm9pZCBhcHBseUNvcnJl
Y3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYg
bWFya2VyVHlwZXNUb0FkZCk7Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgY29ycmVjdGlvbiB3YXMg
YXBwbGllZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkJl
Zm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKKwogICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0Rm9y
UmFuZ2UoY29uc3QgUmFuZ2UqKSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGJhZDRhOTllOTgx
ODkzMDJlYzYxYmZkYjA5ZGExNDZkMGJiMTRlYjQuLjA1ZDliODMxMGY4NmJiNDljNDgzMTk4YWVl
M2NiODcyZTM0MTk5YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCIKIAotI2luY2x1
ZGUgIkNvcnJlY3Rpb25QYW5lbEluZm8uaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg3NzQzMzg1ZmZhZDlmZDY4OTM4ODZjMGE2YzY2YmYwNDdmZWI0ZDUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsNDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5o
IgorI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIK
KyNpbmNsdWRlICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1
ZGUgInZpc2libGVfdW5pdHMuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5h
bWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCitzdGF0aWMgY29uc3QgVmVjdG9y
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlv
bigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLCAoKSk7CisgICAgaWYgKG1h
cmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIG1hcmtlclR5
cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7
CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFy
a2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29y
cmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwor
ICAgIH0KKyAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbjsKK30KKworc3Rh
dGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVz
Rm9yUmVwbGFjZW1lbnQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCwgKCkpOwor
ICAgIGlmIChtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmlzRW1wdHkoKSkgeworICAgICAgICBt
YXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1l
bnQpOworICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1bWVudE1h
cmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgfQorICAgIHJldHVybiBtYXJrZXJU
eXBlc0ZvclJlcGxhY2VtZW50OworfQorCitTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKiBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lKQoreworI2lm
IFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICByZXR1cm4gbmV3IFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIoZnJhbWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZnJhbWUp
OworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorICAgIDogbV9m
cmFtZShmcmFtZSkKKyAgICAsIG1fY29ycmVjdGlvblBhbmVsVGltZXIodGhpcywgJlNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCit7Cit9CisK
K1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyKCkKK3sKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJ
Z25vcmVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFydENv
cnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQor
eworICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4zOwor
ICAgIGlmIChpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkgeworICAgICAg
ICBpZiAodHlwZSA9PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQor
ICAgICAgICAgICAgLy8gSWYgdHlwZSBpcyBQYW5lbFR5cGVSZXZlcnNpb24sIHRoZW4gdGhlIG5l
dyByYW5nZSBoYXMgYmVlbiBzZXQuIFNvIHdlIHNob3VsZG4ndCBjbGVhciBpdC4KKyAgICAgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlID0gdHlwZTsKKyAgICAgICAgbV9j
b3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRl
cnZhbCk7CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0
b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpCit7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5z
dG9wKCk7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFy
KCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcFBlbmRpbmdD
b3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKK3sKKyAgICAv
LyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBj
YWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCisgICAgVmlzaWJsZVNl
bGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KSk7CisgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gIT0gb2xkU2VsZWN0aW9uKSB7CisgICAgICAg
IHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgICAgICBkaXNtaXNzKFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZykKK3sKKyAgICAvLyBBcHBseSBwZW5k
aW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSBuZXh0IHJvdW5kIG9mIHNwZWxsIGNoZWNraW5nLgor
ICAgIGJvb2wgZG9BcHBseUNvcnJlY3Rpb24gPSB0cnVlOworICAgIFZpc2libGVQb3NpdGlvbiBz
dGFydE9mU2VsZWN0aW9uID0gc2VsZWN0aW9uQWZ0ZXJUeXBpbmcudmlzaWJsZVN0YXJ0KCk7Cisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50V29yZCA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRP
ZldvcmQoc3RhcnRPZlNlbGVjdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQo
c3RhcnRPZlNlbGVjdGlvbiwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CisgICAgaWYgKGN1cnJl
bnRXb3JkLnZpc2libGVFbmQoKSA9PSBzdGFydE9mU2VsZWN0aW9uKSB7CisgICAgICAgIFN0cmlu
ZyB3b3JkVGV4dCA9IHBsYWluVGV4dChjdXJyZW50V29yZC50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKTsKKyAgICAgICAgaWYgKHdvcmRUZXh0Lmxlbmd0aCgpID4gMCAmJiBpc0FtYmlndW91c0Jv
dW5kYXJ5Q2hhcmFjdGVyKHdvcmRUZXh0W3dvcmRUZXh0Lmxlbmd0aCgpIC0gMV0pKQorICAgICAg
ICAgICAgZG9BcHBseUNvcnJlY3Rpb24gPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGRvQXBwbHlD
b3JyZWN0aW9uKQorICAgICAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWxBY2NlcHRlZCk7CisgICAgZWxzZQorICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZDsKK30KKworYm9vbCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRy
PFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAoreworICAgIHJldHVybiAhKG1fZnJhbWUt
PmRvY3VtZW50KCktPm1hcmtlcnMoKS0+aGFzTWFya2VycyhtaXNzcGVsbGluZ1JhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbikpOworfQorCit2b2lkIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VU
b1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCit7CisgICAgRmxvYXRSZWN0IGJv
dW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAg
ICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gcmFuZ2VUb1JlcGxhY2U7CisgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9S
ZXBsYWNlLmdldCgpKTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJp
bmcgPSByZXBsYWNlbWVudDsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0
cnVlOworICAgIHNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVs
VHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywg
cmVwbGFjZW1lbnQsIFZlY3RvcjxTdHJpbmc+KCkpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCit7CisgICAgaWYgKCFtX2Nv
cnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LmlzQWN0aXZlID0gZmFsc2U7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRp
dG9yID0gdHJ1ZTsKKyAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJlYXNvbkZvckRpc21pc3Np
bmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5Q29ycmVj
dGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBt
YXJrZXJUeXBlc1RvQWRkKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24g
PSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMp
OworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U3RhcnQocGFyYWdyYXBo
UmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKSkpOworICAg
IHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBh
cmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0
aW9uKCkpKTsKKworICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQgcmFuZ2UgcmFu
Z2VUb0JlUmVwbGFjZWQsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCByYW5nZS4KKyAg
ICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0aGUgdmFsdWUg
b2YgcmFuZ2VUb0JlUmVwbGFjZWQgaXMgbm90IHZhbGlkIGFueW1vcmUuCisgICAgLy8gU28gYmVm
b3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHN0
YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkCisgICAgLy8gcmVsYXRpdmUgdG8gdGhl
IHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2UgdXNlIGNvcnJl
Y3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoCisgICAgLy8gdG8gc3RvcmUgdGhpcyB2YWx1ZS4g
SW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSBh
IHJhbmdlCisgICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRv
IHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZC4KKyAgICBSZWZQdHI8UmFu
Z2U+IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVh
dGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoZWMp
LT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBv
c2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRp
b24oKSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBQb3NpdGlvbiBzdGFy
dFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOworICAgIGNvcnJlY3Rpb25TdGFydE9mZnNl
dEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxh
Y2VkLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29t
cHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0
aW9uIHNvIHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sg
cGxhY2UuCisgICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gVGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFu
Z2UuZ2V0KCkpOworCisgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUgY2FsbGVyIG9m
IHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFsIHJhbmdlIGFyb3VuZC4K
KyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBhcHBseUNvbW1hbmQo
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9CZVJlcGxhY2VkLCBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpKTsKKyAgICBzZXRFbmQocGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5n
ZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVj
dGlvbi5nZXQoKSwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpOworICAgIFN0cmluZyBuZXdU
ZXh0ID0gcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOworCisgICAgLy8gQ2hlY2sg
dG8gc2VlIGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KKyAgICBpZiAobmV3VGV4dCAhPSBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBzaXplX3Qgc2l6
ZSA9IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBl
ID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbikKKyAgICAgICAgICAg
IG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlc1Rv
QWRkW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJl
cGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGVzVG9BZGRbaV0sIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yZXBsYWNlZFN0cmluZyk7CisgICAgfQorfQorCitib29sIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJp
YXRlKCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNl
ZCB8fCAhbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0
aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpLnN0YXJ0KCk7CisKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKKyAgICAgICAg
ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorICAgIAorICAgIC8vIFBlbmRpbmcgY29ycmVjdGlv
biBzaG91bGQgYWx3YXlzIGJlIHdoZXJlIGNhcmV0IGlzLiBCdXQgaW4gY2FzZSB0aGlzIGlzIG5v
dCBhbHdheXMgdHJ1ZSwgd2Ugc3RpbGwgd2FudCB0byBkaXNtaXNzIHRoZSBwYW5lbCB3aXRob3V0
IGFjY2VwdGluZyB0aGUgY29ycmVjdGlvbi4KKyAgICBBU1NFUlQobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pOwor
ICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBT
dHJpbmcmIGNvcnJlY3Rpb24pCit7CisgICAgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJl
dmVyc2VkKGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0KCk7CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihz
ZWxlY3Rpb25PZkNvcnJlY3RlZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBT
ZWxlY3Rpb25Db250cm9sbGVyOjpDbGVhclR5cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxl
cjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmVu
ZCgpKTsKKworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IG1fZnJhbWUt
PmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdl
LmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgIG1hcmtlcnMtPmFkZE1hcmtl
cihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICBtYXJrZXJz
LT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhl
bXB0aW9uKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0
aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikK
K3sKKyAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKKyAg
ICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKKyAgICBjYXNlIENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKKyAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rp
b24uYWZmaW5pdHkoKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQo
c3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBh
ZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CisgICAgICAgIG1fZnJh
bWUtPmVkaXRvcigpLT5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKEVk
aXRvcjo6TWFya1NwZWxsaW5nIHwgRWRpdG9yOjpTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2Vu
dFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOworICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsK
KyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIEZsb2F0UmVj
dCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
ZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8
U3RyaW5nPigpKTsKKyAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogeworICAgICAgICBpZiAocGxh
aW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkgIT0g
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1Bh
cmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpLnBhcmFncmFw
aFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKKyAg
ICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJlcGxhY2VkU3RyaW5nLCBwYXJhZ3JhcGhUZXh0LCBzdWdnZXN0aW9ucyk7CisgICAgICAg
IGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJz
dCgpOworICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7CisgICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0Jv
eCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQuZ2V0KCkpOworICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlw
ZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgdG9w
U3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOworICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit7CisgICAgUmFuZ2UqIHJlcGxh
Y2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCk7
CisgICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gcmVwbGFj
ZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcg
Y3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkLmdldCgpKTsKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdvcmQgd2UgYXJlIGFi
b3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVyIGZpcmluZyBhbmQg
Y2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgorICAgIGlmIChjdXJyZW50V29yZCAhPSBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworCisgICAgc3dpdGNoIChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgorICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgo
KSkgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5n
ID0gY29ycmVjdGlvbjsKKyAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJr
ZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IpCisgICAgICAgICAg
ICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29y
cmVjdGlvbiwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZVJldmVyc2lvbjoKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxs
aW5nU3VnZ2VzdGlvbnM6CisgICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7CisgICAg
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0
aW9uOworICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9y
UmVwbGFjZW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK2Jv
b2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJl
Y3Rpb25FbmFibGVkKCkKK3sKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0
b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworfQorCitGbG9hdFJlY3QgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6d2luZG93UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKiBy
YW5nZSkgY29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7Cisg
ICAgcmV0dXJuIHZpZXcgPyB2aWV3LT5jb250ZW50c1RvV2luZG93KEludFJlY3QocmFuZ2UtPmJv
dW5kaW5nUmVjdCgpKSkgOiBGbG9hdFJlY3QoKTsKK30gICAgICAgIAorCit2b2lkIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQoreworICAgIFZpc2libGVTZWxlY3Rpb24gY3Vy
cmVudFNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAgIC8v
IFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBh
bmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAorICAgIC8vIGNvbnRhaW5pbmcgdGhlIG9yaWdp
bmFsIHByZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJldmVydCB0
aGUKKyAgICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0IGNvcnJl
Y3Rpb24gcGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKKyAgICAvLyB0aGUgbmV3IGNh
cmV0IHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorICAgIGlmICghY3VycmVudFNl
bGVjdGlvbi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlvbiA9
IGN1cnJlbnRTZWxlY3Rpb24uc3RhcnQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRp
b25PZldvcmQgPSBlbmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5k
YXJ5KTsKKyAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRpb25PZldvcmQpCisg
ICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kUG9zaXRpb25PZldv
cmQuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCisgICAgICAgIHJldHVybjsKKworICAg
IE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CisgICAgaW50IGVuZE9mZnNl
dCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOworICAgIFZlY3RvcjxEb2N1bWVu
dE1hcmtlcj4gbWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zv
ck5vZGUobm9kZSk7CisgICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7CisgICAgICAgIGNv
bnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOworICAgICAgICBpZiAoKCht
YXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgJiYgIW1hcmtlci5kZXNj
cmlwdGlvbi5pc051bGwoKSkgfHwgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxs
aW5nKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQpID09IGVuZE9mZnNldCkg
eworICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1f
ZnJhbWUtPmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCwgbm9kZSwgbWFya2Vy
LmVuZE9mZnNldCk7CisgICAgICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQo
d29yZFJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50V29yZC5sZW5ndGgoKSkg
eworICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNl
ZCA9IHdvcmRSYW5nZTsKKyAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZWRTdHJpbmcgPSBjdXJyZW50V29yZDsKKyAgICAgICAgICAgICAgICBpZiAobWFya2VyLnR5
cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKQorICAgICAgICAgICAgICAgICAgICBzdGFy
dENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxs
aW5nU3VnZ2VzdGlvbnMpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJrZXIuZGVz
Y3JpcHRpb247CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIo
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVk
RWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCit7CisgICAgaWYgKGNtZC0+aXNU
b3BMZXZlbENvbW1hbmQoKSAmJiAhY21kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGlj
YXRvcigpKQorICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1h
cmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworfQorCitFZGl0b3JD
bGllbnQqIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNsaWVudCgpCit7CisgICAgcmV0
dXJuIG1fZnJhbWUtPnBhZ2UoKSA/IG1fZnJhbWUtPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkgOiAw
OworfQorCitUZXh0Q2hlY2tlckNsaWVudCogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
dGV4dENoZWNrZXIoKQoreworICAgIGlmIChFZGl0b3JDbGllbnQqIG93bmVyID0gY2xpZW50KCkp
CisgICAgICAgIHJldHVybiBvd25lci0+dGV4dENoZWNrZXIoKTsKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93Q29ycmVjdGlvblBhbmVs
KENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJv
dW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFs
dGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQoreworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJ
T05fUEFORUwKKyAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbCh0eXBlLCBib3VuZGlu
Z0JveE9mUmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZywg
YWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MsIHRoaXMpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmlu
Zyk7CisgICAgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsKKyAgICBVTlVTRURfUEFSQU0o
cmVwbGFjZW1lbnRTdHJpbmcpOworICAgIFVOVVNFRF9QQVJBTShhbHRlcm5hdGl2ZVJlcGxhY2Vt
ZW50U3RyaW5ncyk7CisjZW5kaWYKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWwgcmVhc29uKQoreworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICBp
ZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJl
YXNvbik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworI2VuZGlmCit9CisKK2Jv
b2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNTaG93aW5nQ29ycmVjdGlvblBhbmVs
KCkKK3sKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgcmV0dXJuIGNsaWVu
dCgpICYmIGNsaWVudCgpLT5pc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKTsKKyNlbHNlCisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYg
cmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCit7CisjaWYg
U1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIHJldHVybiBjbGllbnQoKS0+cmVjb3Jk
QXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmVzcG9u
c2VUeXBlLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOworICAgIFVOVVNFRF9QQVJBTShyZXBsYWNlbWVu
dFN0cmluZyk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42MDc0OGZlOWExYjkyYzBlMzdiZjU2NWM4MzIwMDkyNTk3MGJiZThiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcl9oCisjZGVmaW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXJfaAorCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKQorLy8gU29tZSBwbGF0Zm9ybXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGlu
ZyBhdXRvY29ycmVjdGlvbi4KKyNkZWZpbmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAx
CisvLyBTb21lIHBsYXRmb3JtcyB1c2Ugc3BlbGxpbmcgYW5kIGF1dG9jb3JyZWN0aW9uIG1hcmtl
cnMgdG8gcHJvdmlkZSB2aXN1YWwgY3VlLgorLy8gT24gc3VjaCBwbGF0Zm9ybSwgaWYgd29yZCB3
aXRoIG1hcmtlciBpcyBlZGl0ZWQsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBtYXJrZXIuCisjZGVm
aW5lIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORyAxCisjZWxzZQorI2RlZmluZSBTVVBQT1JU
X0FVVE9DT1JSRUNUSU9OX1BBTkVMIDAKKyNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElU
SU5HIDAKKyNlbmRpZiAvLyAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQorCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRpbWVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRWRpdG9yQ2xpZW50OworY2xhc3Mg
RWRpdENvbW1hbmQ7CitjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKK2NsYXNzIFZpc2libGVTZWxl
Y3Rpb247CisKK3N0cnVjdCBDb3JyZWN0aW9uUGFuZWxJbmZvIHsKKyAgICBlbnVtIFBhbmVsVHlw
ZSB7CisgICAgICAgIFBhbmVsVHlwZUNvcnJlY3Rpb24gPSAwLAorICAgICAgICBQYW5lbFR5cGVS
ZXZlcnNpb24sCisgICAgICAgIFBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMKKyAgICB9Owor
CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZDsKKyAgICBTdHJpbmcgcmVwbGFj
ZWRTdHJpbmc7CisgICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOworICAgIFBhbmVsVHlwZSBw
YW5lbFR5cGU7CisgICAgYm9vbCBpc0FjdGl2ZTsKK307CisKK2VudW0gUmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbCB7CisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbENhbmNlbGxlZCA9IDAsCisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bElnbm9yZWQsCisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVk
Cit9OworCitjbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciogY3JlYXRlKEZyYW1lKik7CisK
KyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKik7CisgICAgflNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxU
aW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUpOworICAgIHZvaWQgc3RvcENvcnJl
Y3Rpb25QYW5lbFRpbWVyKCk7CisKKyAgICB2b2lkIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbCk7CisgICAgdm9pZCBzaG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdl
VG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KTsKKworICAgIHZvaWQgYXBwbHlD
b3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4mIG1hcmtlclR5cGVzVG9BZGQpOworICAgIC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rpb24g
d2FzIGFwcGxpZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisKKyAgICB2b2lkIHJlc3BvbmRUb1VuYXBw
bGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNv
cnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
bik7CisgICAgdm9pZCByZXNwb25kVG9BcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21t
YW5kPik7CisKKyAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJp
bmcmIGNvcnJlY3Rpb24pOworICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCk7CisgICAg
dm9pZCBjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI+Kik7CisgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbik7CisgICAgdm9pZCBzdG9wUGVuZGluZ0NvcnJl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKTsKKyAgICB2b2lkIGFw
cGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0
ZXJUeXBpbmcpOworCisgICAgYm9vbCBoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0OworICAg
IGJvb2wgaXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxp
bmdSYW5nZSkgY29uc3Q7CisgICAgYm9vbCBpc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKTsKKwor
cHJpdmF0ZToKKyAgICAvLyBFbmNhcHN1bGF0aW5nIEVkaXRvckNsaWVudCBBUEkgdG8gbG9jYWxp
emUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpZmRlZgorICAgIHZvaWQgc2hvd0NvcnJl
Y3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOworICAgIHZvaWQgZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKKyAgICB2b2lk
IHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKKworICAgIEVkaXRv
ckNsaWVudCogY2xpZW50KCk7CisgICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCk7
CisgICAgYm9vbCBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKKyAgICBG
bG9hdFJlY3Qgd2luZG93UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7CisKKyAgICBF
ZGl0b3JDbGllbnQqIG1fY2xpZW50OworICAgIEZyYW1lKiBtX2ZyYW1lOworCisgICAgVGltZXI8
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsKKyAg
ICBDb3JyZWN0aW9uUGFuZWxJbmZvIG1fY29ycmVjdGlvblBhbmVsSW5mbzsKKyAgICBib29sIG1f
Y29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggODQzNzY1ODg5ODY0ZWI2
ZmQyMzZiNzI4OThlMjk2ZjVjN2JjMTkwNi4uN2MxYjVkZmExMDM5MzFmYzFiN2Y3YTIyOWZiMjli
ZWQyM2Q1Mjg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBA
IC0xNDMsMTEgKzE0Myw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgVHlwaW5nQ29tCiAgICAgRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKIAotI2lmIFJFTU9W
RV9NQVJLRVJTX1VQT05fRURJVElORwogICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAg
IGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS0+cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFy
a2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoaXNTcGFjZU9yTmV3bGluZSh0ZXh0LmNoYXJhY3RlcnMo
KVswXSkpOwotI2VuZGlmCi0KKyAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT51
cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRl
eHQuY2hhcmFjdGVycygpWzBdKSk7CisgICAgCiAgICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4
dCwgZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24p
OwogfQogCkBAIC0zMzIsMTIgKzMzMCw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlKQogICAgICAgICBW
aXNpYmxlUG9zaXRpb24gcDIgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRh
cnkpOwogICAgICAgICBpZiAocDEgIT0gcDIpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFt
ZSgpLT5lZGl0b3IoKS0+bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRp
bmdTZWxlY3Rpb24oKSk7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAg
ICBlbHNlIGlmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnN0YXJ0Q29ycmVjdGlvblBh
bmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbik7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShjb21tYW5kVHlwZSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGRv
Y3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5zdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7
CiAgICAgfQogfQogCkBAIC00NDksOSArNDQzLDggQEAgYm9vbCBUeXBpbmdDb21tYW5kOjptYWtl
RWRpdGFibGVSb290RW1wdHkoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogewotI2lmIFJF
TU9WRV9NQVJLRVJTX1VQT05fRURJVElORwotICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRv
cigpLT5yZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChm
YWxzZSk7Ci0jZW5kaWYKKyAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRl
TWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworCiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlv
bkFmdGVyVW5kbzsKIApAQCAtNTQ4LDkgKzU0MSw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcp
CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJT
X1VQT05fRURJVElORwotICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVT
cGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5k
aWYKKyAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCmluZGV4IDU4YzIyODJhYmQxNjg5OWMw
ZDdmODJjOTQ1YmMxOGIwN2I3ZGI4MTYuLjA3MGE2MmZlNGYwMGJiYzBjYjczYjUxNWQ1Y2I2ZDIw
MDA1ZTRlODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKQEAgLTIxOCw2ICsy
MTgsMTUgQEAgaW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlKFVDaGFyIGMpCiB7CiAgICAgcmV0dXJu
IGMgPT0gbm9CcmVha1NwYWNlIHx8IGMgPT0gJyAnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdCc7
CiB9CisKK2lubGluZSBib29sIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIgY2hh
cmFjdGVyKQoreworICAgIC8vIFRoZXNlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlaGF2ZSBh
cyB3b3JkIGJvdW5kYXJpZXMsIGJ1dCBjYW4gYXBwZWFyIHdpdGhpbiB3b3Jkcy4KKyAgICAvLyBJ
ZiB0aGV5IGFyZSBqdXN0IHR5cGVkLCBpLmUuIGlmIHRoZXkgYXJlIGltbWVkaWF0ZWx5IGZvbGxv
d2VkIGJ5IGEgY2FyZXQsIHdlIHdhbnQgdG8gZGVsYXkgdGV4dCBjaGVja2luZyB1bnRpbCB0aGUg
bmV4dCBjaGFyYWN0ZXIgaGFzIGJlZW4gdHlwZWQuCisgICAgLy8gRklYTUU6IHRoaXMgaXMgcmVx
dWlyZWQgdW50aWwgNjg1MzAyNyBpcyBmaXhlZCBhbmQgdGV4dCBjaGVja2luZyBjYW4gZG8gdGhp
cyBmb3IgdXMuCisgICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnXCcnIHx8IGNoYXJhY3RlciA9PSBy
aWdodFNpbmdsZVF1b3RhdGlvbk1hcmsgfHwgY2hhcmFjdGVyID09IGhlYnJld1B1bmN0dWF0aW9u
R2Vyc2hheWltOworfQorCiBTdHJpbmcgc3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKGNv
bnN0IFN0cmluZyYsIGJvb2wgc3RhcnRJc1N0YXJ0T2ZQYXJhZ3JhcGgsIGJvb2wgZW5kSXNFbmRP
ZlBhcmFncmFwaCk7CiBjb25zdCBTdHJpbmcmIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IGVkOTJmMTEyY2JhODc3ZmQ1MmMz
NDY0MDdmNWI0ZmZlMjYxMjBmNmMuLjhhNTg5NTU2Y2NlNTA3MjA3MmRjYzhiN2FiODBjMDUyNWFm
OTBhMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTUxMSw3ICs1MTEs
NyBAQCBwdWJsaWM6CiAgICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgeyByZXR1
cm4gJm1fdGV4dENoZWNrZXJDbGllbnQ7IH0KIAogI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRWRpdG9yKikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIENvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIqKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVs
KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJikgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNs
aWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAppbmRleCBkNWRlNmE0
MTAyY2JkMjc2OGRhYzlkYTNmNWYxYWQ5ZWNmODAzZDUwLi5lYjAzM2IwNmYwNjg5ZDJmZGViODI1
YTlkMjFkZWIyYTU1OGI3ZjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRv
ckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKQEAgLTI3
LDcgKzI3LDcgQEAKICNpZm5kZWYgRWRpdG9yQ2xpZW50X2gKICNkZWZpbmUgRWRpdG9yQ2xpZW50
X2gKIAotI2luY2x1ZGUgIkNvcnJlY3Rpb25QYW5lbEluZm8uaCIKKyNpbmNsdWRlICJTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAg
LTE1OCwxMiArMTU4LDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGll
bnQqIHRleHRDaGVja2VyKCkgPSAwOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5F
TAogICAgIGVudW0gQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUgewogICAgICAgICBBdXRvY29y
cmVjdGlvbkVkaXRlZCwKICAgICAgICAgQXV0b2NvcnJlY3Rpb25SZXZlcnRlZAogICAgIH07Ci0g
ICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3Ry
aW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3Ms
IEVkaXRvciopID0gMDsKKworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICB2
aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY21lbnRTdHJpbmcs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgQ29y
cmVjdGlvblBhbmVsQ29udHJvbGxlciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3Bv
bnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudFN0cmluZykgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGQ3NzU3NzJiNWVmOWY5NmI0
NmFjNGNhZDNhNWE3ODNmNjI0ZmQ2Y2MuLjIyNDU4NzdlOTc4OWJlMTllOTEyZWFhZmI1NTM0NTMz
M2E0ZjA2MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wMy0xNiAg
TU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlv
biBwYW5lbCBzaG91bGQgYmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEgICAgICAgIAorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojpz
aG93Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmlzU2hvd2luZ0NvcnJl
Y3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UpOgorCiAyMDExLTAzLTE1ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBw
bGUuY29tPgogCiAgICAgICAgIEZvcmdvdCB0byBzYXZlIGEgbW9kaWZpY2F0aW9uIHRvIHRoaXMg
ZmlsZSB3aGVuIGNvbW1pdHRpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IDFmYTEzMmFkNmM1YmQ0Mzc5ZmUwYmI4NWM5
ZTZmZjBkNjZiMTE3MzUuLmY0OGI2YTM0NmRhMDRkNGVjMjc3Y2EyOTIwMjIyMGY3YmZjNjQ1MTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oCkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RD
aGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlNwZWxsQ2hlY2tlciosIGludCwgY29uc3QgV1RGOjpT
dHJpbmcmKTsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQot
ICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0Jv
eE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29u
c3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6
OlN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzLCBXZWJDb3JlOjpFZGl0b3Iq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0
aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRp
bmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgV1RGOjpWZWN0b3I8
V1RGOjpTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgV2ViQ29yZTo6Q29y
cmVjdGlvblBhbmVsQ29udHJvbGxlciopOwogICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwog
ICAgIHZpcnR1YWwgYm9vbCBpc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKTsKICAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNl
VHlwZSwgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCmluZGV4IDY5ZGQ1NzQ3MzFiNDRiNDMwYzI3NDU4
ZTcyM2I0MWM0ZGU1MTc0YjAuLmFiYjgwMjhmMDdiYWY5NzNkZmQ1NjQwMTBjMTVlYWYxN2ZlOWVm
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0KQEAgLTg5MSw3ICs4OTEsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hcgog
fQogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLXZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZSBwYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdC
b3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRp
dmVSZXBsYWNlbWVudFN0cmluZ3MsIEVkaXRvciogZWRpdG9yKSB7Cit2b2lkIFdlYkVkaXRvckNs
aWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGUgcGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1l
bnRTdHJpbmdzLCBDb3JyZWN0aW9uUGFuZWxDb250cm9sbGVyKiBjb250cm9sbGVyKSB7CiAgICAg
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
SWdub3JlZCk7CiAKICAgICAvLyBOZWVkIHRvIGV4cGxpY2l0bHkgdXNlIHRoZXNlIGxvY2FsIE5T
U3RyaW5nIG9iamVjdHMsIGJlY2F1c2UgdGhlIEMrKyByZWZlcmVuY2VzIG1heSBiZSBpbnZhbGlk
YXRlZCBieSB0aGUgdGltZSB0aGUgYmxvY2sgYmVsb3cgaXMgZXhlY3V0ZWQuCkBAIC05MzIsNyAr
OTMyLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29y
ZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXAKICAgICAgICAgICAgICAgICBbW05TU3Bl
bGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gcmVjb3JkUmVzcG9uc2U6TlNDb3JyZWN0aW9u
UmVzcG9uc2VBY2NlcHRlZCB0b0NvcnJlY3Rpb246YWNjZXB0ZWRTdHJpbmcgZm9yV29yZDpyZXBs
YWNlZFN0cmluZ0FzTlNTdHJpbmcgbGFuZ3VhZ2U6bmlsIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6
W21fd2ViVmlldyBzcGVsbENoZWNrZXJEb2N1bWVudFRhZ11dOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgZWRpdG9yLT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQo
U3RyaW5nKGFjY2VwdGVkU3RyaW5nKSk7CisgICAgICAgIGNvbnRyb2xsZXItPmhhbmRsZUNvcnJl
Y3Rpb25QYW5lbFJlc3VsdChTdHJpbmcoYWNjZXB0ZWRTdHJpbmcpKTsKICAgICB9XTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCmluZGV4IDFjNDlkNWI5MTZmMjQ4MTZjM2IxZTBhZjI1OWY5MzEyYzBjMmE0ZjkuLjU3
M2I2MDkzMzYzMmFkM2I3M2VjMmZlZGY0N2M1YWZmOTVkYzIzZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxMS0wMy0xNiAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUmVm
YWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQgYmUgaGFuZGxlZCBieSBpdHMg
b3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTU1NzEKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50Lmg6CisKIDIwMTEtMDMtMTYgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3Vs
YWluQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlz
dGlhbnNlbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IGZhODQyNmEzOGU5NGZiZTNmNDE2NTk4
OWY4MTUyZjNhZDc0ZTYwNzguLjk2MzEzOTY2OWI0NDEzZTgxMDVkOTBhMzUwNjlhODAwYzc4MTBl
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtMTQyLDcgKzE0Miw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV2ViQ29yZTo6U3BlbGxDaGVja2Vy
KiwgaW50LCBjb25zdCBXVEY6OlN0cmluZyYpOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hv
d0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3Ry
aW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3Ms
IFdlYkNvcmU6OkVkaXRvciopOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVs
KFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgV2ViQ29yZTo6Q29ycmVj
dGlvblBhbmVsQ29udHJvbGxlciopOwogICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlv
blBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwogICAg
IHZpcnR1YWwgYm9vbCBpc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlw
ZSwgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86044</attachid>
            <date>2011-03-17 04:30:18 -0700</date>
            <delta_ts>2011-03-21 21:31:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55571-20110317203015.patch</filename>
            <type>text/plain</type>
            <size>92397</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODEyMzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzJjZjg2
YjU3M2Q4MzA1OWRjMmQzZjc0ZmFiZmM3ODkwZGM1OGFmZi4uZjIzNDg4MGYzMWI1YzA5NWU3YzMz
NzQxZWFlNTQ0YmNhYWI3MjZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTgzOCw2ICs4Mzgs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU0Yjg0YTYzOGM2NTBjMzYwZDYzZTFlZDlm
YzU1NWZkOTA0M2I1ODkuLmEwMmI1YmEwMjEyMTJhNjEzNzE5MGFlYzYwN2M3ZmMxNDQ4NjNhYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAxMS0wMy0xNiAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQg
YmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEKKworICAgICAgICBFeHRyYWN0ZWQgY29kZSBpbnNp
ZGUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpbnRvCisgICAgICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhh
dmlvciBjaGFnbmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oOiBSZW1vdmVkLiAo
Q29ycmVjdGlvblBhbmVsSW5mbyBpcyBtb3ZlZCB0byBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyLmgpCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpFZGl0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp+RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHA6
IERpdHRvLiAgICAgICAgCisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6bWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjp+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0
b3BDb3JyZWN0aW9uUGFuZWxUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlQZW5kaW5nQ29ycmVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYXNQZW5k
aW5nQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5Q29ycmVjdGlv
blBhbmVsSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFw
cGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93Q29ycmVjdGlvblBhbmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6aXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZl
cnNlZCk6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmg6
IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5
cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKiBlZGl0
aW5nL2h0bWxlZGl0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjppc0FtYmlndW91c0JvdW5kYXJ5
Q2hhcmFjdGVyKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAg
ICogcGFnZS9FZGl0b3JDbGllbnQuaDoKKwogMjAxMS0wMy0xNiAgQWxleGlzIE1lbmFyZCAgPGFs
ZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4g
Um9iaW5zb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGJhMDNhNTBiZWRiODNhMmJmNjUxMzI3
NGRkNjk3Mzg0MmIyZmFhOGYuLjM3YjEzOWUwYjE2YzRkMWU4NDg2YTNlM2ZiM2QxZDQ1YjdhMmUz
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xNDQ5LDYgKzE0NDksOCBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRF
bGVtZW50Q29tbWFuZC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggZjg4YjBkZWQwYzU1Yzlm
OTkwNmJlODc4OTc3M2Q3MDk4OWI2ZTU1Mi4uMzdkZTI1YzMxNzkxYWEwZmZiYTE3NGMyNmJkZGMw
YTY2MzhlMTJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTc0NSw3ICs3NDUsNiBAQCBfX1pO
N1dlYkNvcmU2RWRpdG9yMjRpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWxFdgogX19aTjdXZWJDb3Jl
NkVkaXRvcjI2ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRv
cjI2aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2d3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmRFUktOM1dURjZTdHJpbmdFUktOUzFfNlZlY3RvcklTMl9M
bTBFRUUKLV9fWk43V2ViQ29yZTZFZGl0b3IyN2hhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdEVS
S04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3IyOWNhbkRlY3JlYXNlU2VsZWN0aW9u
TGlzdExldmVsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyOWNhbkluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzMGFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVj
dGlvbkVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRU5TXzEwRWRpdEFjdGlvbkUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQppbmRleCA5ZjA0ODE0ZGRjY2Y5Mzc0NWU1NzBmM2I1ZjUzOWJhOGZkZjY2NjA0Li41YWRj
ZGRjYWQ5Y2ViOTVmNzllMDRlMDM1ZmQ5YjY0MzY5NmNmYzExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0xNzI2LDYgKzE3MjYsOCBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvU21hcnRSZXBsYWNlSUNV
LmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwJywKICAgICAgICAg
ICAgICdlZGl0aW5nL1NwZWxsQ2hlY2tlci5oJywKKyAgICAgICAgICAgICdlZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BsaXRFbGVtZW50Q29t
bWFuZC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwYjMyMzkyOGVlZDhkNmE3ZjMwNjA2NTA3ZDUy
MjdkNjU4NDJhYWIzLi5mZjU1MTIzMDhkMDQ3ODRhZmEwYzY5OWU1MTMyOGIxOWRlMWJlMTJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybwpAQCAtNTkwLDYgKzU5MCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGVkaXRp
bmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFj
ZUlDVS5jcHAgXAogICAgIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBcCisgICAgZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgXAog
ICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA3M2Zl
ZjEzZGVlMDcyZDVjOGRjNTYxM2EyNTI5YWM4ZDk2YjZiMjU0Li45MWUyNTgxZjJmMzA4NzBlYThj
NzRlOWQ1NzMwNDcwNzEyMzJkY2Y2IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagpAQCAtNTAwODYsNiArNTAwODYsNjIgQEAKIAkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVk
aXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAiCisJCQkJPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
KwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0xUQ0d8V2luMzIiCisJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxDaGVja2VyLmNwcCIKIAkJCQk+CiAJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzljZjliMzgyYzI0YmMyZWVlYjkzYjc0NjdjMjRh
NDcyMTQ2NTMzMC4uNTAxMDg5OTAzNDJkODRkNDk4YzQwNjc4ZWNlODJlNThjZjZlYjlmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMzE4Miw2ICszMTgyLDggQEAKIAkJQTYyMkE4RkMxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRp
bmdTZWN1cml0eUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTYyMkE4RjYxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2Uu
Y3BwICovOyB9OwogCQlBNjIyQThGRDEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5
QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTYy
MkE4RjcxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCAqLzsgfTsKIAkJ
QTYyMkE4RkYxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGOTEyMkM0NEE2MDBBNzg1
QjMgLyogR2VuZXJpY0JpbmRpbmcuaCAqLzsgfTsKKwkJQTcwMDVDQ0MxMzMwQzRCQTAwMENDMEJB
IC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwICovOyB9OworCQlBNzAwNUNDRDEzMzBDNEJB
MDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJB
IC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzE1MUJEODEyRjE1NThGMDA1QTBGNjQgLyog
VGV4dENoZWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3MTUxQkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTg3
NjBFMEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxODc2MEQwQjJBMTIwMTAwQTE2RUNFIC8qIERy
YWdBY3Rpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQTcxODc4OTAwQjJEMDRBQzAwQTE2RUNFIC8qIERyYWdDb250cm9sbGVyTWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxODc4OEYwQjJE
MDRBQzAwQTE2RUNFIC8qIERyYWdDb250cm9sbGVyTWFjLm1tICovOyB9OwpAQCAtNDc3Niw3ICs0
Nzc4LDYgQEAKIAkJQjc3NkQ0M0QxMTA0NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzc2RDQzQzEx
MDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDQxMUUw
NkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCODg1RThEMjExRTA2REQy
MDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCAqLzsgfTsKIAkJ
Qjg4NUU4RDUxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4
RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07Ci0JCUI4QTZBNkQ1MTI3QjMzOEQw
MDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCOEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVj
dGlvblBhbmVsSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUI4REJEQjRCMTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5k
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJE
QjQ3MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKIAkJ
QjhEQkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ4MTMwQjBGOEEw
MEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07CiAJCUI4REJEQjREMTMwQjBG
OEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RC
MSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKQEAgLTk2NjYsNiArOTY2
Nyw4IEBACiAJCUE2MjJBOEY2MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEJpbmRpbmdTZWN1cml0
eUJhc2UuY3BwOyBwYXRoID0gZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTYyMkE4RjcxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRp
bmdTZWN1cml0eUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQmluZGlu
Z1NlY3VyaXR5QmFzZS5oOyBwYXRoID0gZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE2MjJBOEY5MTIyQzQ0QTYwMEE3ODVCMyAvKiBH
ZW5lcmljQmluZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW5lcmlj
QmluZGluZy5oOyBwYXRoID0gZ2VuZXJpYy9HZW5lcmljQmluZGluZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE1MUJE
NzEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTcxODc2MEQwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERyYWdBY3Rpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE3MTg3ODhGMEIyRDA0QUMwMEExNkVDRSAvKiBEcmFnQ29udHJv
bGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdD
b250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTExNjYsNyAr
MTExNjksNiBAQAogCQlCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW50Q29udGV4dC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAv
KiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5l
bEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29ycmVjdGlvblBhbmVs
SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0NzEzMEIwRjhBMDBG
NUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjhEQkRCNDgxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1h
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0U2VsZWN0aW9uQ29tbWFu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0OTEzMEIwRjhBMDBGNUNE
QjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDM3LDcgKzE1NDM5LDYgQEAKIAkJCQk5MzMwOUQ4QzA5
OUU2NDkxMDA1NkU1ODEgLyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5oICovLAogCQkJCTkzMzA5
RDhEMDk5RTY0OTEwMDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgKi8sCiAJCQkJ
OTMzMDlEOEUwOTlFNjQ5MTAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5kLmggKi8sCi0J
CQkJQjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCAqLywK
IAkJCQlEMEIwNTU2NzA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQuY3BwICov
LAogCQkJCUQwQjA1NTY2MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5oICov
LAogCQkJCTFDNEM4RjYzMEFEODY1NUQwMDk0NzVDRSAvKiBEZWxldGVCdXR0b24uY3BwICovLApA
QCAtMTU1MTksNiArMTU1MjAsOCBAQAogCQkJCUE3OEZFMTNBMTIzNjZCMTAwMEFDRThEMCAvKiBT
cGVsbENoZWNrZXIuaCAqLywKIAkJCQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgKi8sCiAJCQkJQjhEQkRCNEExMzBCMEY4QTAwRjVDREIx
IC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCAqLywKKwkJCQlBNzAwNUNDQTEzMzBDNEJB
MDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi8sCisJCQkJQTcw
MDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAq
LywKIAkJCQk5MzMwOURDMjA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5j
cHAgKi8sCiAJCQkJOTMzMDlEQzMwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1h
bmQuaCAqLywKIAkJCQk5MzMwOURDNDA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNv
bW1hbmQuY3BwICovLApAQCAtMTk4MzksNyArMTk4NDIsNiBAQAogCQkJCTkzNTIwODgyMDlCRDQ1
RTkwMEYyMDM4RCAvKiBDb29raWVKYXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFRTY4NDY0MTJE
MjZFMzgwMEU3OTQxNSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFNkZENDg4MEY2NzZFNTcwMDA5Mjg3MyAvKiBDb29yZGluYXRlcy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQjhBNkE2RDUxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUE4MEU2RDA0MEExOTg5Q0EwMDdGQjhDNSAvKiBDb3VudGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjk3OTBFODIwNjkyMDBCMjU5NjUgLyogQ291bnRlckNv
bnRlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCOTUxMEU4MjA1NkIwMEIyNTk2NSAvKiBD
b3VudGVyRGlyZWN0aXZlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjEyNyw2ICsyMjEyOSw3IEBA
CiAJCQkJNzU0MTVCMDAxMjk1OEQ1RTAwM0FENjY5IC8qIFNwZWVjaElucHV0UmVzdWx0TGlzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4RkUxM0MxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hl
Y2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3MDA1Q0NEMTMz
MEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwOUUxMjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0
VGV4dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNjA5OUU2NDkyMDA1
NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNTM0OCw2ICsyNTM1MSw3IEBACiAJCQkJMzE5RTY4ODcxMzI3QzkxMTAwNEFD
OTFBIC8qIEpTV2ViS2l0QW5pbWF0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
OUU2OUIyMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzE5RTY5QjUxMzI5OUJCRDAwNEFDOTFBIC8qIFdlYktpdEFuaW1hdGlvbkxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTcwMDVDQ0MxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3NjA5OWUxNjJmYTcyZjdmMTM5ZDYzZmMxMzc4YzRiNGIzM2YzZmU1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBDb3JyZWN0aW9uUGFuZWxJbmZvX2gKLSNkZWZpbmUgQ29ycmVj
dGlvblBhbmVsSW5mb19oCi0KLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0vLyBTb21lIHBsYXRmb3JtcyBwcm92aWRlIFVJIGZv
ciBzdWdnZXN0aW5nIGF1dG9jb3JyZWN0aW9uLgotI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNU
SU9OX1BBTkVMIDEKLS8vIFNvbWUgcGxhdGZvcm1zIHVzZSBzcGVsbGluZyBhbmQgYXV0b2NvcnJl
Y3Rpb24gbWFya2VycyB0byBwcm92aWRlIHZpc3VhbCBjdWUuCi0vLyBPbiBzdWNoIHBsYXRmb3Jt
LCBpZiB3b3JkIHdpdGggbWFya2VyIGlzIGVkaXRlZCwgd2UgbmVlZCB0byByZW1vdmUgdGhlIG1h
cmtlci4KLSNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDEKLSNlbHNlCi0jZGVm
aW5lIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwgMAotI2RlZmluZSBSRU1PVkVfTUFSS0VS
U19VUE9OX0VESVRJTkcgMAotI2VuZGlmIC8vICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0KLSNpbmNsdWRlICJSYW5nZS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBDb3JyZWN0aW9uUGFuZWxJbmZvIHsKLSAg
ICBlbnVtIFBhbmVsVHlwZSB7Ci0gICAgICAgIFBhbmVsVHlwZUNvcnJlY3Rpb24gPSAwLAotICAg
ICAgICBQYW5lbFR5cGVSZXZlcnNpb24sCi0gICAgICAgIFBhbmVsVHlwZVNwZWxsaW5nU3VnZ2Vz
dGlvbnMKLSAgICB9OwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZDsKLSAg
ICBTdHJpbmcgcmVwbGFjZWRTdHJpbmc7Ci0gICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwot
ICAgIFBhbmVsVHlwZSBwYW5lbFR5cGU7Ci0gICAgYm9vbCBpc0FjdGl2ZTsKLX07Ci0KLWVudW0g
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCB7Ci0gICAgUmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCA9IDAsCi0gICAgUmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbElnbm9yZWQsCi0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rp
b25QYW5lbEFjY2VwdGVkCi19OwotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
Q29ycmVjdGlvblBhbmVsSW5mb19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJ
bk9uZS5jcHAKaW5kZXggZTRlMGJiYjZjZmUwYzA5YTA3NTZhOTY5ZWY2ODNmNWE4NDc2MjNmYS4u
ZjM4Y2JlNjJhNjBkZTExY2QwZjFjMTEzYTk5ZjBjMmQwMGVhZWI5NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1
ZGUgPFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcD4KICNpbmNsdWRlIDxTbWFydFJlcGxhY2Uu
Y3BwPgogI2luY2x1ZGUgPFNtYXJ0UmVwbGFjZUNGLmNwcD4KKyNpbmNsdWRlIDxTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmNwcD4KICNpbmNsdWRlIDxTcGVsbENoZWNrZXIuY3BwPgogI2lu
Y2x1ZGUgPFNwbGl0RWxlbWVudENvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFNwbGl0VGV4dE5vZGVD
b21tYW5kLmNwcD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA4ODA3OTY1MDY4YTQz
OTEwYTlhZDkzNjUxZTE0NjJlY2M4ZTljZjlhLi5hNjQ3MDY1MThmODc4ZWRjM2FmMmZjNmQzYjE3
MjdmMDY5ZjgwOTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0zOCw2ICszOCw3
IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDbGlwYm9h
cmRFdmVudC5oIgogI2luY2x1ZGUgIkNvbXBvc2l0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ3JlYXRlTGlua0NvbW1hbmQu
aCIKICNpbmNsdWRlICJEZWxldGVCdXR0b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5oIgpAQCAtOTQsMzUgKzk1LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsK
IAotc3RhdGljIGlubGluZSBib29sIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIg
Y2hhcmFjdGVyKQotewotICAgIC8vIFRoZXNlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlaGF2
ZSBhcyB3b3JkIGJvdW5kYXJpZXMsIGJ1dCBjYW4gYXBwZWFyIHdpdGhpbiB3b3Jkcy4KLSAgICAv
LyBJZiB0aGV5IGFyZSBqdXN0IHR5cGVkLCBpLmUuIGlmIHRoZXkgYXJlIGltbWVkaWF0ZWx5IGZv
bGxvd2VkIGJ5IGEgY2FyZXQsIHdlIHdhbnQgdG8gZGVsYXkgdGV4dCBjaGVja2luZyB1bnRpbCB0
aGUgbmV4dCBjaGFyYWN0ZXIgaGFzIGJlZW4gdHlwZWQuCi0gICAgLy8gRklYTUU6IHRoaXMgaXMg
cmVxdWlyZWQgdW50aWwgNjg1MzAyNyBpcyBmaXhlZCBhbmQgdGV4dCBjaGVja2luZyBjYW4gZG8g
dGhpcyBmb3IgdXMuCi0gICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnXCcnIHx8IGNoYXJhY3RlciA9
PSByaWdodFNpbmdsZVF1b3RhdGlvbk1hcmsgfHwgY2hhcmFjdGVyID09IGhlYnJld1B1bmN0dWF0
aW9uR2Vyc2hheWltOwotfQotCi1zdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJU
eXBlc0ZvckF1dG9Db3JyZWN0aW9uLCAoKSk7Ci0gICAgaWYgKG1hcmtlclR5cGVzRm9yQXV0b0Nv
cnJlY3Rpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rp
b24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgICAgIG1hcmtlclR5
cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5k
aWNhdG9yKTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9j
dW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotICAgIH0KLSAgICByZXR1cm4g
bWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbjsKLX0KLQotc3RhdGljIGNvbnN0IFZlY3RvcjxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiwgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCwgKCkpOwotICAgIGlmIChtYXJrZXJUeXBl
c0ZvclJlcGxhY2VtZW50LmlzRW1wdHkoKSkgewotICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxh
Y2VtZW50LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgICAgICBtYXJr
ZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2lu
Z0V4ZW1wdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50
OwotfQotCiAvLyBXaGVuIGFuIGV2ZW50IGhhbmRsZXIgaGFzIG1vdmVkIHRoZSBzZWxlY3Rpb24g
b3V0c2lkZSBvZiBhIHRleHQgY29udHJvbAogLy8gd2Ugc2hvdWxkIHVzZSB0aGUgdGFyZ2V0IGNv
bnRyb2wncyBzZWxlY3Rpb24gZm9yIHRoaXMgZWRpdGluZyBvcGVyYXRpb24uCiBWaXNpYmxlU2Vs
ZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVudCogZXZlbnQpCkBAIC01MTgs
NDggKzQ5MCw4IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKICAgICBpZiAoY2xpZW50KCkpCiAgICAg
ICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCk7CiAgICAgbV9kZWxldGVC
dXR0b25Db250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7
Ci0KLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgVmlzaWJsZVNlbGVjdGlv
biBjdXJyZW50U2VsZWN0aW9uKGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7Ci0g
ICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3
b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCi0gICAgLy8gY29udGFpbmluZyB0aGUg
b3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2
ZXJ0IHRoZQotICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQg
Y29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZpcm0gdGhhdAotICAgIC8vIHRoZSBu
ZXcgY2FyZXQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCi0gICAgaWYgKCFjdXJy
ZW50U2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCBjdXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVjdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblBvc2l0
aW9uID0gY3VycmVudFNlbGVjdGlvbi5zdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQ
b3NpdGlvbk9mV29yZCA9IGVuZE9mV29yZChzZWxlY3Rpb25Qb3NpdGlvbiwgTGVmdFdvcmRJZk9u
Qm91bmRhcnkpOwotICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbiAhPSBlbmRQb3NpdGlvbk9mV29y
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQb3NpdGlv
bk9mV29yZC5kZWVwRXF1aXZhbGVudCgpOwotICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkg
IT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpbnQgZW5k
T2Zmc2V0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgVmVjdG9yPERv
Y3VtZW50TWFya2VyPiBtYXJrZXJzID0gbm9kZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5tYXJr
ZXJzRm9yTm9kZShub2RlKTsKLSAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKLSAgICAg
ICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IG1hcmtlcnNbaV07Ci0gICAgICAgIGlm
ICgoKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCAmJiAhbWFya2Vy
LmRlc2NyaXB0aW9uLmlzTnVsbCgpKSB8fCBtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6
U3BlbGxpbmcpICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLmVuZE9mZnNldCkgPT0gZW5kT2Zm
c2V0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVh
dGUoZnJhbWUoKS0+ZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0LCBub2RlLCBt
YXJrZXIuZW5kT2Zmc2V0KTsKLSAgICAgICAgICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWlu
VGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRXb3JkLmxlbmd0
aCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkID0gd29yZFJhbmdlOwotICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlZFN0cmluZyA9IGN1cnJlbnRXb3JkOwotICAgICAgICAgICAgICAgIGlmIChtYXJr
ZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpCi0gICAgICAgICAgICAgICAgICAg
IHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
U3BlbGxpbmdTdWdnZXN0aW9ucyk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IG1hcmtl
ci5kZXNjcmlwdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxU
aW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotI2VuZGlmIC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICBpZiAobV9z
cGVsbGluZ0NvcnJlY3RvcikKKyAgICAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6cmVzcG9u
ZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlv
bikKQEAgLTEwNjIsMTAgKzk5NCw4IEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQYXNz
UmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFu
Z2VkRXZlbnRzKCpjbWQpOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+
ZW5kaW5nU2VsZWN0aW9uKCkpOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAot
ICAgIGlmIChjbWQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNtZC0+c2hvdWxkUmV0YWluQXV0
b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9y
KTsKLSNlbmRpZgorICAgIGlmIChtX3NwZWxsaW5nQ29ycmVjdG9yKQorICAgICAgICBtX3NwZWxs
aW5nQ29ycmVjdG9yLT5yZXNwb25kVG9BcHBsaWVkRWRpdGluZyhjbWQpOwogCiAgICAgLy8gRG9u
J3QgY2xlYXIgdGhlIHR5cGluZyBzdHlsZSB3aXRoIHRoaXMgc2VsZWN0aW9uIGNoYW5nZS4gIFdl
IGRvIHRob3NlIHRoaW5ncyBlbHNld2hlcmUgaWYgbmVjZXNzYXJ5LgogICAgIGNoYW5nZVNlbGVj
dGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIGZhbHNlLCBmYWxzZSk7CkBAIC0xMTI1LDE2
ICsxMDU1LDEzIEBAIEVkaXRvcjo6RWRpdG9yKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fc2hvdWxk
U3R5bGVXaXRoQ1NTKGZhbHNlKQogICAgICwgbV9raWxsUmluZyhhZG9wdFB0cihuZXcgS2lsbFJp
bmcpKQogICAgICwgbV9zcGVsbENoZWNrZXIobmV3IFNwZWxsQ2hlY2tlcihmcmFtZSwgZnJhbWUt
PnBhZ2UoKSA/IGZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpLT50ZXh0Q2hlY2tlcigpIDog
MCkpCi0gICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyKHRoaXMsICZFZGl0b3I6OmNvcnJlY3Rp
b25QYW5lbFRpbWVyRmlyZWQpCisgICAgLCBtX3NwZWxsaW5nQ29ycmVjdG9yKFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZShmcmFtZSkpCiAgICAgLCBtX2FyZU1hcmtlZFRleHRN
YXRjaGVzSGlnaGxpZ2h0ZWQoZmFsc2UpCiB7CiB9CiAKIEVkaXRvcjo6fkVkaXRvcigpCiB7Ci0j
aWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwotI2VuZGlmCiB9
CiAKIHZvaWQgRWRpdG9yOjpjbGVhcigpCkBAIC0xMTc5LDcgKzExMDYsNyBAQCBib29sIEVkaXRv
cjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwg
Ym9vbCBzZWxlY3RJbgogICAgIGlmICh0ZXh0Lmxlbmd0aCgpID09IDEgJiYgaXNQdW5jdCh0ZXh0
WzBdKSAmJiAhaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcih0ZXh0WzBdKSkKICAgICAgICAg
c2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0aW9uID0gdHJ1ZTsKIAotICAgIGJvb2wg
YXV0b2NvcnJlY3Rpb25XYXNBcHBsaWVkID0gc2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3Jy
ZWN0aW9uICYmIGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7
CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbldhc0FwcGxpZWQgPSBzaG91bGRDb25zaWRlckFwcGx5
aW5nQXV0b2NvcnJlY3Rpb24gJiYgbV9zcGVsbGluZ0NvcnJlY3RvciAmJiBtX3NwZWxsaW5nQ29y
cmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwog
CiAgICAgLy8gR2V0IHRoZSBzZWxlY3Rpb24gdG8gdXNlIGZvciB0aGUgZXZlbnQgdGhhdCB0cmln
Z2VyZWQgdGhpcyBpbnNlcnRUZXh0LgogICAgIC8vIElmIHRoZSBldmVudCBoYW5kbGVyIGNoYW5n
ZWQgdGhlIHNlbGVjdGlvbiwgd2UgbWF5IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IHNlbGVjdGlv
bgpAQCAtMTIxNSw3ICsxMTQyLDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAg
ICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IGFwcGx5
QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBhdXRv
Y29ycmVjdGlvbklzQXBwbGllZCA9IG1fc3BlbGxpbmdDb3JyZWN0b3IgJiYgbV9zcGVsbGluZ0Nv
cnJlY3Rvci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsK
ICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsobV9mcmFtZS0+ZG9jdW1lbnQoKSwg
YXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVj
dGlvbkluZGljYXRvciA6IDApOwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJh
dGlvbigpOwogCkBAIC0xMjMzLDcgKzExNjAsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yKCkKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
blR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9u
SXNBcHBsaWVkID0gYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUo
KTsKKyAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9zcGVsbGluZ0NvcnJlY3Rv
ciAmJiBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5n
SWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFy
YXRvcihtX2ZyYW1lLT5kb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA/IFR5cGlu
Z0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7CiAgICAgcmV2ZWFs
U2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKQEAgLTE0NjQsNyArMTM5MSw3IEBA
IHZvaWQgRWRpdG9yOjp0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQoKQogCiBib29sIEVk
aXRvcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIHsKLSAgICByZXR1
cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5h
YmxlZCgpOworICAgIHJldHVybiBtX3NwZWxsaW5nQ29ycmVjdG9yICYmIG1fc3BlbGxpbmdDb3Jy
ZWN0b3ItPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOwogfQogCiB2b2lk
IEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCkKQEAgLTIwNjAsMjQg
KzE5ODcsMTAgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVjdGkKIAogdm9pZCBFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRT
dGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCiB7Cisg
ICAgaWYgKG1fc3BlbGxpbmdDb3JyZWN0b3IpCisgICAgICAgIG1fc3BlbGxpbmdDb3JyZWN0b3It
PmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOworCiAjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAg
Ly8gQXBwbHkgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBvZiBzcGVs
bCBjaGVja2luZy4KLSAgICBib29sIGRvQXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKLSAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IHNlbGVjdGlvbkFmdGVyVHlwaW5nLnZpc2li
bGVTdGFydCgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFdvcmQgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwot
ICAgIGlmIChjdXJyZW50V29yZC52aXNpYmxlRW5kKCkgPT0gc3RhcnRPZlNlbGVjdGlvbikgewot
ICAgICAgICBTdHJpbmcgd29yZFRleHQgPSBwbGFpblRleHQoY3VycmVudFdvcmQudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSk7Ci0gICAgICAgIGlmICh3b3JkVGV4dC5sZW5ndGgoKSA+IDAgJiYg
aXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcih3b3JkVGV4dFt3b3JkVGV4dC5sZW5ndGgoKSAt
IDFdKSkKLSAgICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7Ci0gICAgfQotICAg
IGlmIChkb0FwcGx5Q29ycmVjdGlvbikKLSAgICAgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7Ci0jZW5kaWYKICAg
ICBUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaGVja2luZ09wdGlvbnMgPSAwOwogICAgIGlmIChp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICB0ZXh0Q2hlY2tpbmdP
cHRpb25zIHw9IE1hcmtTcGVsbGluZzsKQEAgLTIxMDQsNyArMjAxNyw2IEBAIHZvaWQgRWRpdG9y
OjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZ3b3JkU3RhcnQsCiAgICAgfQogCiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25B
ZnRlclR5cGluZyk7CiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKQEAgLTIyMTksNyArMjEzMSw3IEBAIHZvaWQgRWRpdG9yOjpt
YXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB2b2lkIEVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tp
bmdPcHRpb25zIHRleHRDaGVja2luZ09wdGlvbnMsIFJhbmdlKiBzcGVsbGluZ1JhbmdlLCBSYW5n
ZSogZ3JhbW1hclJhbmdlKQogewogICAgIC8vIFRoZXJlIHNob3VsZG4ndCBiZSBwZW5kaW5nIGF1
dG9jb3JyZWN0aW9uIGF0IHRoaXMgbW9tZW50LgotICAgIEFTU0VSVCghbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKTsKKyAgICBBU1NFUlQoIW1fc3BlbGxpbmdDb3JyZWN0
b3IgfHwgIW1fc3BlbGxpbmdDb3JyZWN0b3ItPmhhc1BlbmRpbmdDb3JyZWN0aW9uKCkpOwogCiAg
ICAgYm9vbCBzaG91bGRNYXJrU3BlbGxpbmcgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYgTWFya1Nw
ZWxsaW5nOwogICAgIGJvb2wgc2hvdWxkTWFya0dyYW1tYXIgPSB0ZXh0Q2hlY2tpbmdPcHRpb25z
ICYgTWFya0dyYW1tYXI7CkBAIC0yMjkxLDExICsyMjAzLDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0
ZXh0Q2gKICAgICB9CiAgICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFy
YWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHBhcmFncmFwaC50ZXh0TGVuZ3RoKCksIGNoZWNraW5n
VHlwZXMsIHJlc3VsdHMpOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAg
IC8vIElmIHRoaXMgY2hlY2tpbmcgaXMgb25seSBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBhbmVs
LCB3ZSBzaG91bGRuJ3QgYm90aGVyIHRvIG1hcmsgbWlzc3BlbGxpbmdzLgogICAgIGlmIChzaG91
bGRTaG93Q29ycmVjdGlvblBhbmVsKQogICAgICAgICBzaG91bGRNYXJrU3BlbGxpbmcgPSBmYWxz
ZTsKLSNlbmRpZgogCiAgICAgaW50IG9mZnNldER1ZVRvUmVwbGFjZW1lbnQgPSAwOwogCkBAIC0y
MzE0LDEwICsyMjI0LDggQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICAgICAgaWYgKHNo
b3VsZE1hcmtTcGVsbGluZyAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxs
aW5nICYmIHJlc3VsdExvY2F0aW9uID49IHNwZWxsaW5nUGFyYWdyYXBoLmNoZWNraW5nU3RhcnQo
KSAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA8PSBzcGVsbGluZ1JhbmdlRW5kT2Zm
c2V0ICYmICFyZXN1bHRFbmRzQXRBbWJpZ3VvdXNCb3VuZGFyeSkgewogICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAg
ICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBzcGVsbGluZ1BhcmFncmFwaC5zdWJy
YW5nZShyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKLSNpZiBTVVBQT1JUX0FVVE9DT1JS
RUNUSU9OX1BBTkVMCi0gICAgICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpLT5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpT
cGVsbENoZWNraW5nRXhlbXB0aW9uKSkKKyAgICAgICAgICAgIGlmIChtX3NwZWxsaW5nQ29ycmVj
dG9yICYmICFtX3NwZWxsaW5nQ29ycmVjdG9yLT5pc1NwZWxsaW5nTWFya2VyQWxsb3dlZChtaXNz
cGVsbGluZ1JhbmdlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNlbmRpZiAvLyBTVVBQ
T1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5z
dGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKG1pc3Nw
ZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkTWFya0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2lu
Z1R5cGVHcmFtbWFyICYmIGdyYW1tYXJQYXJhZ3JhcGguY2hlY2tpbmdSYW5nZUNvdmVycyhyZXN1
bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKSkgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExl
bmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CkBAIC0yMzc2LDI0ICsyMjg0LDE3IEBA
IHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRl
eHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiAgICAgICAgICAgICBpZiAoIWRvUmVwbGFjZW1lbnQp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMCiAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCkgeworICAg
ICAgICAgICAgICAgIC8vIHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgY2FuIGJlIHRydWUgb25s
eSB3aGVuIHRoZSBwYW5lbCBpcyBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgQVNTRVJUKG1f
c3BlbGxpbmdDb3JyZWN0b3IpOwogICAgICAgICAgICAgICAgIGlmIChyZXN1bHRMb2NhdGlvbiAr
IHJlc3VsdExlbmd0aCA9PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIG9ubHkgc2hvdyB0aGUgY29ycmVjdGlvbiBwYW5lbCBvbiB0aGUgbGFzdCB3
b3JkLgotICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dS
ZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCA9IHJhbmdlVG9SZXBsYWNlOwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkp
OwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRT
dHJpbmcgPSByZXN1bHQtPnJlcGxhY2VtZW50OwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjbGll
bnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBl
LCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCByZXN1
bHQtPnJlcGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpLCB0aGlzKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+c2hvdyhyYW5nZVRvUmVwbGFjZSwgcmVzdWx0LT5y
ZXBsYWNlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3Igc2hv
d2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBpZ25vcmUgb3RoZXIgY29ycmVjdGlvbiBvciByZXBs
YWNlbWVudC4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSNlbmRp
ZgogCiAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uVG9SZXBsYWNlICE9IG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQpAQCAt
MjQ5OSwxNDMgKzI0MDAsMzYgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWMKICNlbmRpZgogfQog
Ci12b2lkIEVkaXRvcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxFZGl0b3I+KikK
LXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgbV9jb3JyZWN0aW9uUGFu
ZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gZmFsc2U7Ci0gICAgc3dpdGNoIChtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucGFuZWxUeXBlKSB7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVDb3JyZWN0aW9uOiB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKGZy
YW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlv
biBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOwotICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3Vu
ZGFyeSk7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVT
ZWxlY3Rpb24ocCwgc3RhcnQpOwotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKE1hcmtTcGVsbGluZyB8IFNob3dDb3JyZWN0aW9uUGFuZWwsIGFkamFjZW50
V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgMCk7Ci0gICAgfQotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjogewot
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0
eSgpKQotICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5n
LCBWZWN0b3I8U3RyaW5nPigpLCB0aGlzKTsKLSAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogewot
ICAgICAgICBpZiAocGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC5nZXQoKSkgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0
KFRleHRDaGVja2luZ1BhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQpLnBhcmFncmFwaFJhbmdlKCkuZ2V0KCkpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBz
dWdnZXN0aW9uczsKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBwYXJhZ3JhcGhUZXh0LCBzdWdnZXN0
aW9ucyk7Ci0gICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBz
dWdnZXN0aW9ucy5maXJzdCgpOwotICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7Ci0gICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgIEZsb2F0
UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBpZiAoIWJvdW5kaW5nQm94Lmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29y
cmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZWRTdHJpbmcsIHRvcFN1Z2dlc3Rpb24sIHN1Z2dlc3Rpb25zLCB0aGlzKTsK
LSAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIEVkaXRvcjo6
aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKLXsK
LSAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC5nZXQoKTsKLSAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9mcmFtZS0+ZG9j
dW1lbnQoKSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0
aGUgd29yZCB3ZSBhcmUgYWJvdXQgdG8gY29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4g
dGltZXIgZmlyaW5nIGFuZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQuCi0gICAgaWYgKGN1cnJl
bnRXb3JkICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0K
LSAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNl
IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246Ci0gICAgICAgIGlmIChj
b3JyZWN0aW9uLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0
aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVk
aXRvcikKLSAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5k
b2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKLSAgICAgICAgaWYgKGNvcnJlY3Rpb24u
bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVu
dFN0cmluZyA9IGNvcnJlY3Rpb247Ci0gICAgICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbElu
Zm8obWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQu
Y2xlYXIoKTsKLX0KLQotdm9pZCBFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUpCit2b2lkIEVkaXRvcjo6c3RhcnRDb3Jy
ZWN0aW9uUGFuZWxUaW1lcigpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAot
ICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4zOwotICAg
IGlmIChpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBp
ZiAodHlwZSA9PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQotICAg
ICAgICAgICAgLy8gSWYgdHlwZSBpcyBQYW5lbFR5cGVSZXZlcnNpb24sIHRoZW4gdGhlIG5ldyBy
YW5nZSBoYXMgYmVlbiBzZXQuIFNvIHdlIHNob3VsZG4ndCBjbGVhciBpdC4KLSAgICAgICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotICAgICAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlID0gdHlwZTsKLSAgICAgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZh
bCk7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0jZW5kaWYKKyAgICBp
ZiAobV9zcGVsbGluZ0NvcnJlY3RvcikKKyAgICAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+c3Rh
cnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3Jy
ZWN0aW9uKTsKIH0KIAotdm9pZCBFZGl0b3I6OnN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpCit2
b2lkIEVkaXRvcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkKIHsKLSNpZiBTVVBQT1JUX0FVVE9D
T1JSRUNUSU9OX1BBTkVMCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdG9wKCk7Ci0gICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0jZW5kaWYK
KyAgICBpZiAobV9zcGVsbGluZ0NvcnJlY3RvcikKKyAgICAgICAgbV9zcGVsbGluZ0NvcnJlY3Rv
ci0+aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpoYW5kbGVDYW5j
ZWxPcGVyYXRpb24oKQordm9pZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBj
b3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKIHsKLSNpZiBTVVBQT1JUX0FVVE9D
T1JSRUNUSU9OX1BBTkVMCi0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBm
YWxzZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVj
dGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpOwot
I2VuZGlmCisgICAgaWYgKG1fc3BlbGxpbmdDb3JyZWN0b3IpCisgICAgICAgIG1fc3BlbGxpbmdD
b3JyZWN0b3ItPnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihzZWxlY3Rpb25PZkNv
cnJlY3RlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKIH0KIAogYm9vbCBFZGl0b3I6OmlzU2hv
d2luZ0NvcnJlY3Rpb25QYW5lbCgpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5F
TAotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5pc1Nob3dpbmdD
b3JyZWN0aW9uUGFuZWwoKTsKLSNlbmRpZgorICAgIGlmIChtX3NwZWxsaW5nQ29ycmVjdG9yKQor
ICAgICAgICByZXR1cm4gbV9zcGVsbGluZ0NvcnJlY3Rvci0+aXNTaG93aW5nQ29ycmVjdGlvblBh
bmVsKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRp
c21pc3NpbmcpCit2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpCiB7Ci0jaWYg
U1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLmlzQWN0aXZlKQorICAgIGlmICghbV9zcGVsbGluZ0NvcnJlY3RvcikKICAgICAgICAgcmV0
dXJuOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotICAgIG1f
Y29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7Ci0gICAgaWYgKGNsaWVu
dCgpKQotICAgICAgICBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChyZWFzb25Gb3JE
aXNtaXNzaW5nKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlYXNvbkZvckRpc21pc3Npbmcp
OwotI2VuZGlmCi19Ci12b2lkIEVkaXRvcjo6cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vy
c0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQXRXb3JkQm91
bmRhcnkpCi17CisKICAgICAvLyBXZSB3YW50IHRvIHJlbW92ZSB0aGUgbWFya2VycyBmcm9tIGEg
d29yZCBpZiBhbiBlZGl0aW5nIGNvbW1hbmQgd2lsbCBjaGFuZ2UgdGhlIHdvcmQuIFRoaXMgY2Fu
IGhhcHBlbiBpbiBvbmUgb2YKICAgICAvLyBzZXZlcmFsIHNjZW5hcmlvczoKICAgICAvLyAxLiBJ
bnNlcnQgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQuCkBAIC0yNzAxLDEwMiArMjQ5NSw2IEBAIHZv
aWQgRWRpdG9yOjpyZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVk
aXRlZChib29sIGRvTm90UmVtb3ZlCiAgICAgZG9jdW1lbnQtPm1hcmtlcnMoKS0+Y2xlYXJEZXNj
cmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKIH0KIAotdm9pZCBFZGl0b3I6OmFwcGx5Q29ycmVjdGlv
blBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJr
ZXJUeXBlc1RvQWRkKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBp
ZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24u
Z2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250
YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpKSk7Ci0KLSAgICAvLyBBZnRlciB3
ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJhbmdlVG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRv
IGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCi0gICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVw
bGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9mIHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5v
dCB2YWxpZCBhbnltb3JlLgotICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxh
Y2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVS
ZXBsYWNlZAotICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29u
dGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFw
aAotICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9m
ZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQotICAgIC8vIHdoaWNoIHNwYW5z
IGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFu
Z2VUb0JlUmVwbGFjZWQuCi0gICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJ
blBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFu
Z2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGlmIChlYykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFj
ZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRp
b24oKTsKLSAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVu
ZChzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb250YWluZXJOb2RlKCksIHN0YXJ0
UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGFrZSBub3Rl
IG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFy
a2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgotICAgIGludCBjb3JyZWN0aW9u
U3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVj
dGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLmdldCgpKTsKLQotICAgIC8vIENsb25l
IHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBr
ZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRv
QmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xv
bmVSYW5nZShlYyk7Ci0gICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6
OmNyZWF0ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vt
ZW50U3RyaW5nKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24uZ2V0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdl
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFy
dE9mZnNldEluUGFyYWdyYXBoLCAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3Ry
aW5nLmxlbmd0aCgpKTsKLSAgICBTdHJpbmcgbmV3VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVu
dFJhbmdlLmdldCgpKTsKLQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNj
ZWVkZWQuCi0gICAgaWYgKG5ld1RleHQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vt
ZW50U3RyaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIqIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBtYXJrZXJUeXBlc1RvQWRkLnNpemUo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAo
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGVSZXZlcnNpb24pCi0gICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFj
ZW1lbnRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZXNUb0FkZFtpXSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJr
ZXJUeXBlc1RvQWRkW2ldLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpOwot
ICAgIH0KLSNlbHNlIC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBVTlVTRURf
UEFSQU0obWFya2VyVHlwZXNUb0FkZCk7Ci0jZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTAotfQotCi1ib29sIEVkaXRvcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGlu
Z0lmQXBwcm9wcmlhdGUoKQotewotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkIHx8ICFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBl
ICE9IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKTsKLQotICAgIGlmIChtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbikg
ewotICAgICAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWxBY2NlcHRlZCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0gICAg
Ci0gICAgLy8gUGVuZGluZyBjb3JyZWN0aW9uIHNob3VsZCBhbHdheXMgYmUgd2hlcmUgY2FyZXQg
aXMuIEJ1dCBpbiBjYXNlIHRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCB3ZSBzdGlsbCB3YW50IHRv
IGRpc21pc3MgdGhlIHBhbmVsIHdpdGhvdXQgYWNjZXB0aW5nIHRoZSBjb3JyZWN0aW9uLgotICAg
IEFTU0VSVChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0
aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7Ci0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIEVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rl
ZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJ
T05fUEFORUwKLSAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0
b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7
Ci0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgU2VsZWN0aW9u
Q29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpDbGVhclR5cGlu
Z1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsK
LSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVu
dCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmVuZCgpKTsKLQotICAgIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBt
YXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcpOwotICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6
OlJlcGxhY2VtZW50KTsKLSAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3Vt
ZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSNlbHNlIC8vIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQp
OwotICAgIFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOwotICAgIFVOVVNFRF9QQVJBTShjb3JyZWN0
aW9uKTsKLSNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi19Ci0KIFBhc3NS
ZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93
UG9pbnQpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnRBdFBv
aW50KHdpbmRvd1BvaW50KTsKQEAgLTM0OTEsMTQgKzMxODksOCBAQCB2b2lkIEVkaXRvcjo6c2V0
TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sIGZsYWcpCiAKIHZvaWQgRWRpdG9y
OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNl
bGVjdGlvbiwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25z
KQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICAvLyBNYWtlIHN1cmUg
dGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJy
ZW50U2VsZWN0aW9uKGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7Ci0gICAgaWYg
KGN1cnJlbnRTZWxlY3Rpb24gIT0gb2xkU2VsZWN0aW9uKSB7Ci0gICAgICAgIHN0b3BDb3JyZWN0
aW9uUGFuZWxUaW1lcigpOwotICAgICAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKLSAgICB9Ci0jZW5kaWYgLy8gU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIGlmIChtX3NwZWxsaW5nQ29ycmVjdG9yKQor
ICAgICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5zdG9wUGVuZGluZ0NvcnJlY3Rpb24ob2xkU2Vs
ZWN0aW9uKTsKIAogICAgIGJvb2wgY2xvc2VUeXBpbmcgPSBvcHRpb25zICYgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6Q2xvc2VUeXBpbmc7CiAgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCA9IHRoaXMtPmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CkBAIC0z
NTE1LDEwICszMjA3LDggQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBTZWwKICAgICAgICAgfQogCiAg
ICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1tYXIgPSB0cnVlOwotI2lmIFNV
UFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgc3BlbGxp
bmcgYW5kIGdyYW1tYXIgaWYgdGhlIGNoYW5nZSBvZiBzZWxlY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5
IHNwZWxsaW5nIGNvcnJlY3Rpb24gaXRzZWxmLgogICAgICAgICBzaG91bGRDaGVja1NwZWxsaW5n
QW5kR3JhbW1hciA9ICEob3B0aW9ucyAmIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsQ29ycmVj
dGlvblRyaWdnZXJlZCk7Ci0jZW5kaWYKIAogICAgICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVj
ayBzcGVsbGluZyBlbHNld2hlcmUsIHNvIGRvbid0IHJlZG8gaXQgaGVyZS4KICAgICAgICAgLy8g
SWYgdGhpcyBpcyBhIGNoYW5nZSBpbiBzZWxlY3Rpb24gcmVzdWx0aW5nIGZyb20gYSBkZWxldGUg
b3BlcmF0aW9uLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggZTFhNzExOTI0NWU4M2JlZDEw
ZDczZDIwNWVmZTIxNTQwODVjNTY5ZS4uZTg0NzIxZjJlZmUwZDg3NzU4NWIwNjNmZTdmOWNlNjc5
OWUxYjU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0yOCw3ICsyOCw2IEBACiAKICNp
bmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIkNvcnJlY3Rpb25QYW5lbEluZm8uaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5o
IgogI2luY2x1ZGUgIkVkaXRBY3Rpb24uaCIKICNpbmNsdWRlICJFZGl0aW5nQmVoYXZpb3IuaCIK
QEAgLTUwLDYgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb247CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ2xpcGJv
YXJkOworY2xhc3MgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjsKIGNsYXNzIERlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXI7CiBjbGFzcyBFZGl0Q29tbWFuZDsKIGNsYXNzIEVkaXRvckNsaWVudDsK
QEAgLTMyMSw5ICszMjEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRUb0tpbGxSaW5nKFJhbmdl
KiwgYm9vbCBwcmVwZW5kKTsKIAogICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCk7Ci0g
ICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZSk7CisgICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CisKICAgICAv
LyBJZiB1c2VyIGNvbmZpcm1lZCBhIGNvcnJlY3Rpb24gaW4gdGhlIGNvcnJlY3Rpb24gcGFuZWws
IGNvcnJlY3Rpb24gaGFzIG5vbi16ZXJvIGxlbmd0aCwgb3RoZXJ3aXNlIGl0IG1lYW5zIHRoYXQg
dXNlciBoYXMgZGlzbWlzc2VkIHRoZSBwYW5lbC4KLSAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogICAgIGJvb2wgaXNTaG93aW5n
Q29ycmVjdGlvblBhbmVsKCk7CiAKICAgICB2b2lkIHBhc3RlQXNGcmFnbWVudChQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlKTsK
QEAgLTM3OSw3ICszNzksNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgc2VsZWN0aW9u
U3RhcnRIYXNTcGVsbGluZ01hcmtlckZvcihpbnQgZnJvbSwgaW50IGxlbmd0aCkgY29uc3Q7Ci0g
ICAgdm9pZCByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRl
ZChib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BdFdvcmRCb3VuZGFyeSk7CisgICAgdm9pZCB1
cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIG9ubHlIYW5kbGVXb3Jk
c0NvbnRhaW5pbmdTZWxlY3Rpb24pOwogCiBwcml2YXRlOgogICAgIEZyYW1lKiBtX2ZyYW1lOwpA
QCAtMzk0LDEwICszOTQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRTdGFydE5ld0tp
bGxSaW5nU2VxdWVuY2U7CiAgICAgYm9vbCBtX3Nob3VsZFN0eWxlV2l0aENTUzsKICAgICBPd25Q
dHI8S2lsbFJpbmc+IG1fa2lsbFJpbmc7Ci0gICAgQ29ycmVjdGlvblBhbmVsSW5mbyBtX2NvcnJl
Y3Rpb25QYW5lbEluZm87CiAgICAgT3duUHRyPFNwZWxsQ2hlY2tlcj4gbV9zcGVsbENoZWNrZXI7
Ci0gICAgVGltZXI8RWRpdG9yPiBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyOwotICAgIGJvb2wgbV9j
b3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yOworICAgIE93blB0cjxTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyPiBtX3NwZWxsaW5nQ29ycmVjdG9yOwogICAgIFZpc2libGVTZWxl
Y3Rpb24gbV9tYXJrOwogICAgIGJvb2wgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVk
OwogCkBAIC00MjEsMTMgKzQxOSw4IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4g
bmV4dFZpc2libGVSYW5nZShSYW5nZSosIGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKIAog
ICAgIHZvaWQgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG5ld1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxl
KTsKLSAgICB2b2lkIGNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopOwog
ICAgIE5vZGUqIGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKLSAgICB2b2lk
IHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOwotICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKLSAgICB2b2lkIGFwcGx5
Q29ycmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+JiBtYXJrZXJUeXBlc1RvQWRkKTsKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9u
IHdhcyBhcHBsaWVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0
aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworCiAgICAgRmxvYXRSZWN0IHdpbmRvd1Jl
Y3RGb3JSYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYmFkNGE5
OWU5ODE4OTMwMmVjNjFiZmRiMDlkYTE0NmQwYmIxNGViNC4uMDVkOWI4MzEwZjg2YmI0OWM0ODMx
OThhZWUzY2I4NzJlMzQxOTljMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgogCi0j
aW5jbHVkZSAiQ29ycmVjdGlvblBhbmVsSW5mby5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzg2N2M3NWJmZTUzOTdmMjA0YmE5ZDRmYWI4NzUyMTQ4NjU2ZGFl
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVu
dC5oIgorI2luY2x1ZGUgIlRleHRDaGVja2luZ0hlbHBlci5oIgorI2luY2x1ZGUgIlRleHRJdGVy
YXRvci5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisj
aW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK3N0YXRpYyBjb25zdCBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvckF1dG9jb3Jy
ZWN0aW9uKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24sICgpKTsKKyAgICBp
ZiAobWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgbWFy
a2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50KTsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1l
bnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1
dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlv
bik7CisgICAgfQorICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uOworfQor
CitzdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2Vy
VHlwZXNGb3JSZXBsYWNlbWVudCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LCAo
KSk7CisgICAgaWYgKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuaXNFbXB0eSgpKSB7CisgICAg
ICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCk7CisgICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3Vt
ZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7Cit9CisKK1Bhc3NPd25QdHI8U3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcj4gU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKEZyYW1l
KiBmcmFtZSkKK3sKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKGZyYW1lKSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShmcmFtZSk7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwor
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cihGcmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9jb3JyZWN0aW9u
UGFuZWxUaW1lcih0aGlzLCAmU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlv
blBhbmVsVGltZXJGaXJlZCkKK3sKK30KKworU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
flNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoKQoreworICAgIGRpc21pc3MoUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUpCit7CisgICAgY29uc3QgZG91YmxlIGNvcnJlY3Rpb25Q
YW5lbFRpbWVySW50ZXJ2YWwgPSAwLjM7CisgICAgaWYgKGlzQXV0b21hdGljU3BlbGxpbmdDb3Jy
ZWN0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGlmICh0eXBlID09IENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pCisgICAgICAgICAgICAvLyBJZiB0eXBlIGlzIFBhbmVs
VHlwZVJldmVyc2lvbiwgdGhlbiB0aGUgbmV3IHJhbmdlIGhhcyBiZWVuIHNldC4gU28gd2Ugc2hv
dWxkbid0IGNsZWFyIGl0LgorICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLmNsZWFyKCk7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5l
bFR5cGUgPSB0eXBlOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0YXJ0T25lU2hv
dChjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsKTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKK3sKKyAg
ICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgb2xkU2VsZWN0aW9uKQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcg
YXV0b2NvcnJlY3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXIoKSBiZWxvdy4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFt
ZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICBpZiAoY3VycmVudFNlbGVjdGlvbiAh
PSBvbGRTZWxlY3Rpb24pIHsKKyAgICAgICAgc3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7Cisg
ICAgICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQp
OworICAgIH0KK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBl
bmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlw
aW5nKQoreworICAgIC8vIEFwcGx5IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5leHQg
cm91bmQgb2Ygc3BlbGwgY2hlY2tpbmcuCisgICAgYm9vbCBkb0FwcGx5Q29ycmVjdGlvbiA9IHRy
dWU7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb25BZnRl
clR5cGluZy52aXNpYmxlU3RhcnQoKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3Jk
ID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBMZWZ0V29y
ZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBSaWdodFdvcmRJZk9u
Qm91bmRhcnkpKTsKKyAgICBpZiAoY3VycmVudFdvcmQudmlzaWJsZUVuZCgpID09IHN0YXJ0T2ZT
ZWxlY3Rpb24pIHsKKyAgICAgICAgU3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0KGN1cnJlbnRX
b3JkLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBpZiAod29yZFRleHQubGVu
Z3RoKCkgPiAwICYmIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIod29yZFRleHRbd29yZFRl
eHQubGVuZ3RoKCkgLSAxXSkpCisgICAgICAgICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNl
OworICAgIH0KKyAgICBpZiAoZG9BcHBseUNvcnJlY3Rpb24pCisgICAgICAgIGRpc21pc3MoUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworfQor
Citib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0aW9u
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkOworfQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxp
bmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0
Cit7CisgICAgcmV0dXJuICEobV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5oYXNNYXJr
ZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5n
RXhlbXB0aW9uKSk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hv
dyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudCkKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2Uo
cmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOworICAgIGlmIChib3VuZGluZ0JveC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQgPSByYW5nZVRvUmVwbGFjZTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOworICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VtZW50OworICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgc2hvd0NvcnJlY3Rpb25QYW5lbCht
X2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudCwgVmVjdG9yPFN0cmluZz4oKSk7
Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ2FuY2VsT3Bl
cmF0aW9uKCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNl
OworICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxl
ZCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlzcyhSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCit7Cisg
ICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKKyAgICBtX2NvcnJl
Y3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSB0cnVlOworICAgIGRpc21pc3NDb3JyZWN0
aW9uUGFuZWwocmVhc29uRm9yRGlzbWlzc2luZyk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpCit7CisgICAgaWYgKCFt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBo
UmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47
CisKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgp
LCBzdGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNl
ZC0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSkpOworCisgICAgLy8gQWZ0ZXIgd2UgcmVw
bGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVSZXBsYWNlZCwgd2UgbmVlZCB0byBhZGQg
bWFya2VycyB0byB0aGF0IHJhbmdlLgorICAgIC8vIEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2Vt
ZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFs
aWQgYW55bW9yZS4KKyAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVu
dCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFj
ZWQKKyAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5p
bmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKKyAg
ICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQs
IHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKKyAgICAvLyB3aGljaCBzcGFucyBmcm9t
IHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9C
ZVJlcGxhY2VkLgorICAgIFJlZlB0cjxSYW5nZT4gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJl
dHVybjsKKworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkID0g
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCk7
CisgICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoc3Rh
cnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0
aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVj
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRha2Ugbm90ZSBvZiB0
aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBh
ZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KKyAgICBpbnQgY29ycmVjdGlvblN0YXJ0
T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25T
dGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7CisKKyAgICAvLyBDbG9uZSB0aGUg
cmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0
aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVw
bGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFu
Z2UoZWMpOworICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVh
dGUocmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0
cmluZykpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdl
dCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgUmVm
UHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZz
ZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZy5s
ZW5ndGgoKSk7CisgICAgU3RyaW5nIG5ld1RleHQgPSBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5n
ZS5nZXQoKSk7CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVk
LgorICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0
cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBt
YXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpOworICAgIHNpemVfdCBzaXplID0gbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY29y
cmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxU
eXBlUmV2ZXJzaW9uKQorICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VtZW50
UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGVzVG9BZGRbaV0pOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgbWFya2VyVHlw
ZXNUb0FkZFtpXSwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKTsKKyAgICB9
Cit9CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVj
dGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQoreworICAgIGlmICghbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkIHx8ICFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNB
Y3RpdmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucGFuZWxUeXBlICE9IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rp
b24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24g
PSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKTsKKworICAgIGlmICht
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkgPT0g
Y2FyZXRQb3NpdGlvbikgeworICAgICAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWxBY2NlcHRlZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gCisgICAg
CisgICAgLy8gUGVuZGluZyBjb3JyZWN0aW9uIHNob3VsZCBhbHdheXMgYmUgd2hlcmUgY2FyZXQg
aXMuIEJ1dCBpbiBjYXNlIHRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCB3ZSBzdGlsbCB3YW50IHRv
IGRpc21pc3MgdGhlIHBhbmVsIHdpdGhvdXQgYWNjZXB0aW5nIHRoZSBjb3JyZWN0aW9uLgorICAg
IEFTU0VSVChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0
aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7CisgICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3Qg
U3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKK3sKKyAgICByZWNv
cmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsK
KyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKyAgICBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBTZWxlY3Rpb25D
b250cm9sbGVyOjpDbG9zZVR5cGluZyB8IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNsZWFyVHlwaW5n
U3R5bGUgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOwor
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50
KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCkpOworCisgICAgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIG1h
cmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGlu
Zyk7CisgICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6
UmVwbGFjZW1lbnQpOworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworfQorCit2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcj4qKQoreworICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNt
aXNzZWRCeUVkaXRvciA9IGZhbHNlOworICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnBhbmVsVHlwZSkgeworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29y
cmVjdGlvbjogeworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQo
c2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwor
ICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9u
KHAsIHN0YXJ0KTsKKyAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCktPm1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoRWRpdG9yOjpNYXJrU3BlbGxpbmcgfCBFZGl0b3I6OlNo
b3dDb3JyZWN0aW9uUGFuZWwsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQo
KSwgMCk7CisgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZVJldmVyc2lvbjogeworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUgPSB0cnVlOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmcgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LmdldCgpKTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJh
bmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAg
ICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICAgICAgc2hvd0NvcnJlY3Rp
b25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZW1lbnRTdHJpbmcsIFZlY3RvcjxTdHJpbmc+KCkpOworICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dl
c3Rpb25zOiB7CisgICAgICAgIGlmIChwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLmdldCgpKSAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmcpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQg
PSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZCkucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IHN1Z2dlc3Rpb25zOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2Vz
Rm9yV29yZChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHBhcmFncmFwaFRl
eHQsIHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFy
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgdG9wU3Vn
Z2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7CisgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92
ZSgwKTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAg
ICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIGlmICghYm91
bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICAgICAgc2hvd0NvcnJlY3Rpb25QYW5lbChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7CisgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVj
dGlvbikKK3sKKyAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKTsKKyAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9m
cmFtZS0+ZG9jdW1lbnQoKSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgIC8vIENoZWNrIHRv
IHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUgYWJvdXQgdG8gY29ycmVjdCBoYXMgYmVlbiBjaGFuZ2Vk
IGJldHdlZW4gdGltZXIgZmlyaW5nIGFuZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQuCisgICAg
aWYgKGN1cnJlbnRXb3JkICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0g
ZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsK
KyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246CisgICAg
ICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOworICAgICAgICAgICAgYXBw
bHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSXNEaXNt
aXNzZWRCeUVkaXRvcikKKyAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRh
aW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZWRTdHJpbmcpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgorICAgIGNhc2UgQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKKyAgICAgICAgaWYgKGNv
cnJlY3Rpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247CisgICAgICAgICAgICBhcHBseUNvcnJlY3Rp
b25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuY2xlYXIoKTsKK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
Ojppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQoreworICAgIHJldHVybiBj
bGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVk
KCk7Cit9CisKK0Zsb2F0UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp3aW5kb3dS
ZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAoreworICAgIEZyYW1lVmlldyog
dmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICByZXR1cm4gdmlldyA/IHZpZXctPmNvbnRlbnRz
VG9XaW5kb3coSW50UmVjdChyYW5nZS0+Ym91bmRpbmdSZWN0KCkpKSA6IEZsb2F0UmVjdCgpOwor
fSAgICAgICAgCisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCit7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKSk7CisgICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBl
bmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCisg
ICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0
IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQorICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVj
dGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZp
cm0gdGhhdAorICAgIC8vIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiBh
IHdvcmQuCisgICAgaWYgKCFjdXJyZW50U2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCBjdXJyZW50U2Vs
ZWN0aW9uID09IG9sZFNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlzaWJsZVBv
c2l0aW9uIHNlbGVjdGlvblBvc2l0aW9uID0gY3VycmVudFNlbGVjdGlvbi5zdGFydCgpOworICAg
IFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbk9mV29yZCA9IGVuZE9mV29yZChzZWxlY3Rpb25Q
b3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlv
biAhPSBlbmRQb3NpdGlvbk9mV29yZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUG9zaXRpb24g
cG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5kZWVwRXF1aXZhbGVudCgpOworICAgIGlmIChw
b3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5l
ck5vZGUoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJO
b2RlKCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJzID0gbm9kZS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpLT5tYXJrZXJzRm9yTm9kZShub2RlKTsKKyAgICBzaXplX3QgbWFya2Vy
Q291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtl
ckNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IG1h
cmtlcnNbaV07CisgICAgICAgIGlmICgoKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCAmJiAhbWFya2VyLmRlc2NyaXB0aW9uLmlzTnVsbCgpKSB8fCBtYXJrZXIudHlw
ZSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpICYmIHN0YXRpY19jYXN0PGludD4obWFya2Vy
LmVuZE9mZnNldCkgPT0gZW5kT2Zmc2V0KSB7CisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHdv
cmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbm9kZSwgbWFya2Vy
LnN0YXJ0T2Zmc2V0LCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KTsKKyAgICAgICAgICAgIFN0cmlu
ZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAg
aWYgKGN1cnJlbnRXb3JkLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gd29yZFJhbmdlOworICAgICAgICAgICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IGN1cnJlbnRXb3JkOworICAg
ICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcp
CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlbWVudFN0cmluZyA9IG1hcmtlci5kZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAg
c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVS
ZXZlcnNpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+
IGNtZCkKK3sKKyAgICBpZiAoY21kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjbWQtPnNob3Vs
ZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCisgICAgICAgIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlv
bkluZGljYXRvcik7Cit9CisKK0VkaXRvckNsaWVudCogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6Y2xpZW50KCkKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+cGFnZSgpID8gbV9mcmFtZS0+
cGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IDA7Cit9CisKK1RleHRDaGVja2VyQ2xpZW50KiBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCit7CisgICAgaWYgKEVkaXRv
ckNsaWVudCogb3duZXIgPSBjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIG93bmVyLT50ZXh0Q2hl
Y2tlcigpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
IHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5n
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit7
CisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIGNsaWVudCgpLT5zaG93Q29y
cmVjdGlvblBhbmVsKHR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRT
dHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywg
dGhpcyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0o
Ym91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nKTsKKyAgICBVTlVTRURfUEFSQU0ocmVwbGFjZWRT
dHJpbmcpOworICAgIFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudFN0cmluZyk7CisgICAgVU5VU0VE
X1BBUkFNKGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyNlbmRpZgorfQorCit2b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb24pCit7CisjaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAorICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCkt
PmRpc21pc3NDb3JyZWN0aW9uUGFuZWwocmVhc29uKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHJlYXNvbik7CisjZW5kaWYKK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
Ojppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKQoreworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJ
T05fUEFORUwKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzU2hvd2luZ0NvcnJl
Y3Rpb25QYW5lbCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3Bv
bnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZykKK3sKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisg
ICAgcmV0dXJuIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNs
aWVudDo6QXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNl
bWVudFN0cmluZyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50U3RyaW5nKTsKKyNlbmRpZgorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0ZTFiNDczOGFhYmI3MDNlMzRj
NTBkZmZiOGMwNjRmMmNiMWI5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDEyNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKKyNkZWZpbmUg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCisKKyNpZiBQTEFURk9STShNQUMpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJE
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisvLyBTb21lIHBsYXRmb3Jt
cyBwcm92aWRlIFVJIGZvciBzdWdnZXN0aW5nIGF1dG9jb3JyZWN0aW9uLgorI2RlZmluZSBTVVBQ
T1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDEKKy8vIFNvbWUgcGxhdGZvcm1zIHVzZSBzcGVsbGlu
ZyBhbmQgYXV0b2NvcnJlY3Rpb24gbWFya2VycyB0byBwcm92aWRlIHZpc3VhbCBjdWUuCisvLyBP
biBzdWNoIHBsYXRmb3JtLCBpZiB3b3JkIHdpdGggbWFya2VyIGlzIGVkaXRlZCwgd2UgbmVlZCB0
byByZW1vdmUgdGhlIG1hcmtlci4KKyNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5H
IDEKKyNlbHNlCisjZGVmaW5lIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwgMAorI2RlZmlu
ZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMAorI2VuZGlmIC8vICNpZiBQTEFURk9STShN
QUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisKKyNpbmNs
dWRlICJEb2N1bWVudE1hcmtlci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IlJhbmdlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBFZGl0b3JDbGllbnQ7CitjbGFzcyBFZGl0Q29tbWFuZDsKK2NsYXNzIFRleHRDaGVja2Vy
Q2xpZW50OworY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKKworc3RydWN0IENvcnJlY3Rpb25QYW5l
bEluZm8geworICAgIGVudW0gUGFuZWxUeXBlIHsKKyAgICAgICAgUGFuZWxUeXBlQ29ycmVjdGlv
biA9IDAsCisgICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbiwKKyAgICAgICAgUGFuZWxUeXBlU3Bl
bGxpbmdTdWdnZXN0aW9ucworICAgIH07CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJl
cGxhY2VkOworICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsKKyAgICBTdHJpbmcgcmVwbGFjZW1l
bnRTdHJpbmc7CisgICAgUGFuZWxUeXBlIHBhbmVsVHlwZTsKKyAgICBib29sIGlzQWN0aXZlOwor
fTsKKworZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKKyAgICBSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKKyAgICBSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwKKyAgICBSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQKK307CisKK2NsYXNzIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZShGcmFtZSopOworCisgICAgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcihGcmFtZSopOworICAgIH5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
KCk7CisKKyAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlKTsKKyAgICB2b2lkIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOwor
CisgICAgdm9pZCBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwor
ICAgIHZvaWQgc2hvdyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudCk7CisKKyAgICB2b2lkIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhj
b25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc1RvQWRk
KTsKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdhcyBhcHBsaWVkLCBmYWxzZSBv
dGhlcndpc2UuCisgICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHBy
b3ByaWF0ZSgpOworCisgICAgdm9pZCByZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmlu
ZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOworICAgIHZvaWQgcmVzcG9u
ZFRvQXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pOworCisgICAgdm9pZCBo
YW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKKyAg
ICB2b2lkIGhhbmRsZUNhbmNlbE9wZXJhdGlvbigpOworICAgIHZvaWQgY29ycmVjdGlvblBhbmVs
VGltZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiopOworICAgIHZv
aWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRT
ZWxlY3Rpb24pOworICAgIHZvaWQgc3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIG9sZFNlbGVjdGlvbik7CisgICAgdm9pZCBhcHBseVBlbmRpbmdDb3JyZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsKKworICAgIGJv
b2wgaGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdDsKKyAgICBib29sIGlzU3BlbGxpbmdNYXJr
ZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0OworICAg
IGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CisgICAgYm9vbCBpc0F1dG9tYXRpY1Nw
ZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBFbmNhcHN1bGF0
aW5nIEVkaXRvckNsaWVudCBBUEkgdG8gbG9jYWxpemUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9Q
QU5FTCBpZmRlZgorICAgIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0
cmluZ3MpOworICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsKTsKKyAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50U3RyaW5nKTsKKworICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CisgICAgVGV4
dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCk7CisgICAgRmxvYXRSZWN0IHdpbmRvd1JlY3RG
b3JSYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OworCisgICAgRWRpdG9yQ2xpZW50KiBtX2NsaWVu
dDsKKyAgICBGcmFtZSogbV9mcmFtZTsKKworICAgIFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7CisgICAgQ29ycmVjdGlvblBhbmVsSW5m
byBtX2NvcnJlY3Rpb25QYW5lbEluZm87CisgICAgYm9vbCBtX2NvcnJlY3Rpb25QYW5lbElzRGlz
bWlzc2VkQnlFZGl0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5
cGluZ0NvbW1hbmQuY3BwCmluZGV4IDg0Mzc2NTg4OTg2NGViNmZkMjM2YjcyODk4ZTI5NmY1Yzdi
YzE5MDYuLjdjMWI1ZGZhMTAzOTMxZmMxYjdmN2EyMjlmYjI5YmVkMjNkNTI4N2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMTQzLDExICsxNDMsOSBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBT
dHJpbmcmIHRleHQsIFR5cGluZ0NvbQogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFt
ZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJ
TkcKICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+
ZWRpdG9yKCktPnJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRp
dGVkKGlzU3BhY2VPck5ld2xpbmUodGV4dC5jaGFyYWN0ZXJzKClbMF0pKTsKLSNlbmRpZgotCisg
ICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0ZvcldvcmRz
QWZmZWN0ZWRCeUVkaXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0LmNoYXJhY3RlcnMoKVswXSkp
OworICAgIAogICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGZyYW1lLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCksIG9wdGlvbnMsIGNvbXBvc2l0aW9uKTsKIH0KIApAQCAtMzMyLDEyICsz
MzAsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhF
VHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAyID0g
c3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAgICAgICAgaWYgKHAx
ICE9IHAyKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPm1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCkpOwotI2lm
IFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAgZWxzZSBpZiAoY29tbWFuZFR5
cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCkKLSAgICAgICAgICAgIGRvY3VtZW50KCkt
PmZyYW1lKCktPmVkaXRvcigpLT5zdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
Y29tbWFuZFR5cGUpOwotI2VuZGlmCisgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5l
ZGl0b3IoKS0+c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpOwogICAgIH0KIH0KIApAQCAtNDQ5
LDkgKzQ0Myw4IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6bWFrZUVkaXRhYmxlUm9vdEVtcHR5KCkK
IAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgYm9vbCBraWxsUmluZykKIHsKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9OX0VE
SVRJTkcKLSAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+cmVtb3ZlU3BlbGxBbmRD
b3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoZmFsc2UpOwotI2VuZGlmCisgICAg
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVj
dGVkQnlFZGl0aW5nKGZhbHNlKTsKKwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uVG9E
ZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BZnRlclVuZG87CiAKQEAgLTU0
OCw5ICs1NDEsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogCiB2b2lkIFR5cGluZ0NvbW1h
bmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwg
Ym9vbCBraWxsUmluZykKIHsKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcKLSAgICBk
b2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFy
a2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoZmFsc2UpOwotI2VuZGlmCisgICAgZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+ZWRpdG9yKCktPnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5n
KGZhbHNlKTsKKwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BZnRlclVuZG87CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
aHRtbGVkaXRpbmcuaAppbmRleCA1OGMyMjgyYWJkMTY4OTljMGQ3ZjgyYzk0NWJjMThiMDdiN2Ri
ODE2Li4wNzBhNjJmZTRmMDBiYmMwY2I3M2I1MTVkNWNiNmQyMDAwNWU0ZTgwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5oCkBAIC0yMTgsNiArMjE4LDE1IEBAIGlubGluZSBib29s
IGlzV2hpdGVzcGFjZShVQ2hhciBjKQogewogICAgIHJldHVybiBjID09IG5vQnJlYWtTcGFjZSB8
fCBjID09ICcgJyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHQnOwogfQorCitpbmxpbmUgYm9vbCBp
c0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKK3sKKyAgICAvLyBU
aGVzZSBhcmUgY2hhcmFjdGVycyB0aGF0IGNhbiBiZWhhdmUgYXMgd29yZCBib3VuZGFyaWVzLCBi
dXQgY2FuIGFwcGVhciB3aXRoaW4gd29yZHMuCisgICAgLy8gSWYgdGhleSBhcmUganVzdCB0eXBl
ZCwgaS5lLiBpZiB0aGV5IGFyZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGNhcmV0LCB3ZSB3
YW50IHRvIGRlbGF5IHRleHQgY2hlY2tpbmcgdW50aWwgdGhlIG5leHQgY2hhcmFjdGVyIGhhcyBi
ZWVuIHR5cGVkLgorICAgIC8vIEZJWE1FOiB0aGlzIGlzIHJlcXVpcmVkIHVudGlsIDY4NTMwMjcg
aXMgZml4ZWQgYW5kIHRleHQgY2hlY2tpbmcgY2FuIGRvIHRoaXMgZm9yIHVzLgorICAgIHJldHVy
biBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0ZXIgPT0gcmlnaHRTaW5nbGVRdW90YXRpb25N
YXJrIHx8IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5jdHVhdGlvbkdlcnNoYXlpbTsKK30KKwogU3Ry
aW5nIHN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShjb25zdCBTdHJpbmcmLCBib29sIHN0
YXJ0SXNTdGFydE9mUGFyYWdyYXBoLCBib29sIGVuZElzRW5kT2ZQYXJhZ3JhcGgpOwogY29uc3Qg
U3RyaW5nJiBub25CcmVha2luZ1NwYWNlU3RyaW5nKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0
eUNsaWVudHMuaAppbmRleCBlZDkyZjExMmNiYTg3N2ZkNTJjMzQ2NDA3ZjViNGZmZTI2MTIwZjZj
Li44YTU4OTU1NmNjZTUwNzIwNzJkY2M4YjdhYjgwYzA1MjVhZjkwYTJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC01MTEsNyArNTExLDcgQEAgcHVibGljOgogICAgIFRl
eHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0dXJuICZtX3RleHRDaGVja2VyQ2xp
ZW50OyB9CiAKICNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgdmlydHVhbCB2
b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIEVkaXRvciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlv
blBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBDb3Jy
ZWN0aW9uUGFuZWxDb250cm9sbGVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgeyB9CiAgICAg
dmlydHVhbCBib29sIGlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpIHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKaW5kZXggZDVkZTZhNDEwMmNiZDI3NjhkYWM5ZGEzZjVm
MWFkOWVjZjgwM2Q1MC4uZWIwMzNiMDZmMDY4OWQyZmRlYjgyNWE5ZDIxZGViMmE1NThiN2Y4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVm
IEVkaXRvckNsaWVudF9oCiAjZGVmaW5lIEVkaXRvckNsaWVudF9oCiAKLSNpbmNsdWRlICJDb3Jy
ZWN0aW9uUGFuZWxJbmZvLmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC0xNTgsMTIgKzE1OCwxMyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpID0g
MDsKIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICBlbnVtIEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2VUeXBlIHsKICAgICAgICAgQXV0b2NvcnJlY3Rpb25FZGl0ZWQsCiAgICAg
ICAgIEF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQKICAgICB9OwotICAgIHZpcnR1YWwgdm9pZCBzaG93
Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgRmxv
YXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzLCBFZGl0b3IqKSA9IDA7CisKKyNp
ZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgdmlydHVhbCB2b2lkIHNob3dDb3Jy
ZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MsIENvcnJlY3Rpb25QYW5lbENvbnRyb2xs
ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1No
b3dpbmdDb3JyZWN0aW9uUGFuZWwoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwppbmRleCBkNzc1NzcyYjVlZjlmOTZiNDZhYzRjYWQzYTVhNzgzZjYyNGZk
NmNjLi4yMjQ1ODc3ZTk3ODliZTE5ZTkxMmVhYWZiNTUzNDUzMzNhNGYwNjM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDMtMTYgIE1PUklUQSBIYWppbWUgIDxtb3Jy
aXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1JlZmFjdG9yaW5nXSBBdXRvIGNvcnJlY3Rpb24gcGFuZWwgc2hvdWxkIGJlIGhh
bmRsZWQgYnkgaXRzIG93biBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU1NTcxICAgICAgICAKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6
CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOgorICAg
ICAgICAoV2ViRWRpdG9yQ2xpZW50Ojppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwpOgorICAgICAg
ICAoV2ViRWRpdG9yQ2xpZW50OjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKToKKwogMjAx
MS0wMy0xNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBG
b3Jnb3QgdG8gc2F2ZSBhIG1vZGlmaWNhdGlvbiB0byB0aGlzIGZpbGUgd2hlbiBjb21taXR0aW5n
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuaAppbmRleCAxZmExMzJhZDZjNWJkNDM3OWZlMGJiODVjOWU2ZmYwZDY2YjExNzM1Li5mNDhi
NmEzNDZkYTA0ZDRlYzI3N2NhMjkyMDIyMjBmN2JmYzY0NTEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtMTQwLDcgKzE0
MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29s
IGVuYWJsZWQpOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXZWJD
b3JlOjpTcGVsbENoZWNrZXIqLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJik7CiAjaWYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hv
d0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBj
b25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBs
YWNlbWVudFN0cmluZywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBhbHRlcm5hdGl2
ZVJlcGxhY2VtZW50U3RyaW5ncywgV2ViQ29yZTo6RWRpdG9yKik7CisgICAgdmlydHVhbCB2b2lk
IHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxU
eXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmlu
ZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgYWx0ZXJu
YXRpdmVSZXBsYWNlbWVudFN0cmluZ3MsIFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbENvbnRyb2xs
ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNT
aG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFdURjo6U3Ry
aW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5n
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQppbmRleCA2OWRkNTc0NzMxYjQ0YjQzMGMyNzQ1OGU3MjNiNDFjNGRlNTE3NGIwLi5h
YmI4MDI4ZjA3YmFmOTczZGZkNTY0MDEwYzE1ZWFmMTdmZTllZjY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC04OTEs
NyArODkxLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXIKIH0KIAogI2lmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi12b2lkIFdlYkVkaXRvckNsaWVudDo6c2hv
d0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUg
cGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdz
LCBFZGl0b3IqIGVkaXRvcikgewordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9u
UGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHBhbmVsVHlwZSwg
Y29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgQ29ycmVjdGlv
blBhbmVsQ29udHJvbGxlciogY29udHJvbGxlcikgewogICAgIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwogCiAgICAgLy8g
TmVlZCB0byBleHBsaWNpdGx5IHVzZSB0aGVzZSBsb2NhbCBOU1N0cmluZyBvYmplY3RzLCBiZWNh
dXNlIHRoZSBDKysgcmVmZXJlbmNlcyBtYXkgYmUgaW52YWxpZGF0ZWQgYnkgdGhlIHRpbWUgdGhl
IGJsb2NrIGJlbG93IGlzIGV4ZWN1dGVkLgpAQCAtOTMyLDcgKzkzMiw3IEBAIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwCiAgICAgICAgICAgICAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVs
bENoZWNrZXJdIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlQWNjZXB0ZWQgdG9D
b3JyZWN0aW9uOmFjY2VwdGVkU3RyaW5nIGZvcldvcmQ6cmVwbGFjZWRTdHJpbmdBc05TU3RyaW5n
IGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOlttX3dlYlZpZXcgc3BlbGxDaGVj
a2VyRG9jdW1lbnRUYWddXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGVkaXRvci0+aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KFN0cmluZyhhY2NlcHRlZFN0cmlu
ZykpOworICAgICAgICBjb250cm9sbGVyLT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoU3Ry
aW5nKGFjY2VwdGVkU3RyaW5nKSk7CiAgICAgfV07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxYzQ5ZDVi
OTE2ZjI0ODE2YzNiMWUwYWYyNTlmOTMxMmMwYzJhNGY5Li41NzNiNjA5MzM2MzJhZDNiNzNlYzJm
ZWRmNDdjNWFmZjk1ZGMyM2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMt
MTYgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1JlZmFjdG9yaW5nXSBBdXRvIGNvcnJl
Y3Rpb24gcGFuZWwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgaXRzIG93biBjbGFzcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NTcxCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorCiAyMDExLTAz
LTE2ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4ucG91bGFpbkBub2tpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaAppbmRleCBmYTg0MjZhMzhlOTRmYmUzZjQxNjU5ODlmODE1MmYzYWQ3NGU2MDc4Li45
NjMxMzk2NjliNDQxM2U4MTA1ZDkwYTM1MDY5YTgwMGM3ODEwZTIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmgKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RD
aGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlNwZWxsQ2hlY2tlciosIGludCwgY29uc3QgV1RGOjpT
dHJpbmcmKTsKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2Vi
Q29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzLCBXZWJDb3JlOjpFZGl0b3IqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdC
b3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRp
dmVSZXBsYWNlbWVudFN0cmluZ3MsIFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIq
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTaG93
aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86416</attachid>
            <date>2011-03-21 21:32:02 -0700</date>
            <delta_ts>2011-03-21 22:14:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55571-20110322133159.patch</filename>
            <type>text/plain</type>
            <size>94869</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODEyMzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzJjZjg2
YjU3M2Q4MzA1OWRjMmQzZjc0ZmFiZmM3ODkwZGM1OGFmZi4uZjIzNDg4MGYzMWI1YzA5NWU3YzMz
NzQxZWFlNTQ0YmNhYWI3MjZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTgzOCw2ICs4Mzgs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU0Yjg0YTYzOGM2NTBjMzYwZDYzZTFlZDlm
YzU1NWZkOTA0M2I1ODkuLjE3NzljYTgzNjY5YTA1MzZhYzBlNzFlOGZlMmEwNjMwNDUzZjI0MDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NCBAQAorMjAxMS0wMy0xNiAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQg
YmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEKKworICAgICAgICBFeHRyYWN0ZWQgY29kZSBpbnNp
ZGUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpbnRvCisgICAgICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhh
dmlvciBjaGFnbmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oOiBSZW1vdmVkLiAo
Q29ycmVjdGlvblBhbmVsSW5mbyBpcyBtb3ZlZCB0byBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyLmgpCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpFZGl0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp+RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHA6
IERpdHRvLiAgICAgICAgCisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6bWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjp+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0
b3BDb3JyZWN0aW9uUGFuZWxUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlQZW5kaW5nQ29ycmVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYXNQZW5k
aW5nQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5Q29ycmVjdGlv
blBhbmVsSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFw
cGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtSZXZzZXJzZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3dDb3JyZWN0aW9uUGFu
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZVJldmVyc2VkKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuaDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOgorICAgICAg
ICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzQW1iaWd1b3Vz
Qm91bmRhcnlDaGFyYWN0ZXIpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKToK
KyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgorCiAyMDExLTAzLTE2ICBBbGV4aXMgTWVu
YXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYmEwM2E1MGJlZGI4M2Ey
YmY2NTEzMjc0ZGQ2OTczODQyYjJmYWE4Zi4uMzdiMTM5ZTBiMTZjNGQxZTg0ODZhM2UzZmIzZDFk
NDViN2EyZTNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysr
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE0NDksNiArMTQ0OSw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2VJ
Q1UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGxpdEVsZW1lbnRDb21tYW5kLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBmODhiMGRl
ZDBjNTVjOWY5OTA2YmU4Nzg5NzczZDcwOTg5YjZlNTUyLi4zN2RlMjVjMzE3OTFhYTBmZmJhMTc0
YzI2YmRkYzBhNjYzOGUxMmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtNzQ1LDcgKzc0NSw2
IEBAIF9fWk43V2ViQ29yZTZFZGl0b3IyNGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbEV2CiBfX1pO
N1dlYkNvcmU2RWRpdG9yMjZkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNv
cmU2RWRpdG9yMjZpbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRp
dG9yMjZ3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZEVSS04zV1RGNlN0cmluZ0VSS05TMV82VmVj
dG9ySVMyX0xtMEVFRQotX19aTjdXZWJDb3JlNkVkaXRvcjI3aGFuZGxlQ29ycmVjdGlvblBhbmVs
UmVzdWx0RVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlNkVkaXRvcjI5Y2FuRGVjcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI5Y2FuSW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjMwYXBwbHlQYXJhZ3JhcGhTdHls
ZVRvU2VsZWN0aW9uRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9uRQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDlmMDQ4MTRkZGNjZjkzNzQ1ZTU3MGYzYjVmNTM5YmE4ZmRmNjY2
MDQuLjVhZGNkZGNhZDljZWI5NWY3OWUwNGUwMzVmZDliNjQzNjk2Y2ZjMTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTE3MjYsNiArMTcyNiw4IEBACiAgICAgICAgICAgICAnZWRpdGluZy9TbWFydFJl
cGxhY2VJQ1UuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAnLAog
ICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxDaGVja2VyLmgnLAorICAgICAgICAgICAgJ2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAnLAorICAgICAgICAgICAgJ2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdlZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGxpdEVs
ZW1lbnRDb21tYW5kLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
byBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDBiMzIzOTI4ZWVkOGQ2YTdmMzA2
MDY1MDdkNTIyN2Q2NTg0MmFhYjMuLmZmNTUxMjMwOGQwNDc4NGFmYTBjNjk5ZTUxMzI4YjE5ZGUx
YmUxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01OTAsNiArNTkwLDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU21h
cnRSZXBsYWNlSUNVLmNwcCBcCiAgICAgZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwIFwKKyAgICBl
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIFwKICAgICBlZGl0aW5nL1Nw
bGl0RWxlbWVudENvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5k
LmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5k
LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmlu
ZGV4IDczZmVmMTNkZWUwNzJkNWM4ZGM1NjEzYTI1MjlhYzhkOTZiNmIyNTQuLjkxZTI1ODFmMmYz
MDg3MGVhOGM3NGU5ZDU3MzA0NzA3MTIzMmRjZjYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC01MDA4Niw2ICs1MDA4Niw2MiBAQAogCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cZWRpdGluZ1xTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCIKKwkJCQk+CisJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdp
bjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAor
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2lu
MzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfTFRDR3xX
aW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wK
KwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0
aW5nXFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVsbENoZWNrZXIuY3BwIgog
CQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjOWNmOWIzODJjMjRiYzJlZWViOTNi
NzQ2N2MyNGE0NzIxNDY1MzMwLi41MDEwODk5MDM0MmQ4NGQ0OThjNDA2NzhlY2U4MmU1OGNmNmVi
OWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0zMTgyLDYgKzMxODIsOCBAQAogCQlBNjIyQThGQzEyMkM0NEE2MDBBNzg1QjMg
LyogQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGNjEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3Vy
aXR5QmFzZS5jcHAgKi87IH07CiAJCUE2MjJBOEZEMTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5n
U2VjdXJpdHlCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNjIyQThGNzEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5oICov
OyB9OwogCQlBNjIyQThGRjEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJpY0JpbmRpbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEY5MTIyQzQ0
QTYwMEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5oICovOyB9OworCQlBNzAwNUNDQzEzMzBDNEJB
MDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzAwNUNDQTEzMzBDNEJBMDAwQ0Mw
QkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi87IH07CisJCUE3MDA1Q0NE
MTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzAwNUNDQjEzMzBDNEJB
MDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTUxQkQ4MTJGMTU1OEYwMDVB
MEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2Vy
Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTcxODc2MEUwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE4NzYwRDBCMkExMjAxMDBBMTZF
Q0UgLyogRHJhZ0FjdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBNzE4Nzg5MDBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xsZXJN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE4
Nzg4RjBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xsZXJNYWMubW0gKi87IH07CkBAIC00
Nzc2LDcgKzQ3NzgsNiBAQAogCQlCNzc2RDQzRDExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3
NzZENDNDMTEwNDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRleHQuY3BwICovOyB9OwogCQlCODg1
RThENDExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4ODVFOEQy
MTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwICov
OyB9OwogCQlCODg1RThENTExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCODg1RThEMzExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKLQkJQjhBNkE2RDUx
MjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4QTZBNkQ0MTI3QjMzOEQwMDg2NzNCQSAv
KiBDb3JyZWN0aW9uUGFuZWxJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQjhEQkRCNEIxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlv
bkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjhEQkRCNDcxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwICov
OyB9OwogCQlCOERCREI0QzEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjhEQkRCNDgx
MzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCAqLzsgfTsKIAkJQjhEQkRC
NEQxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjhEQkRCNDkxMzBCMEY4
QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwICovOyB9OwpAQCAtOTY2
Niw2ICs5NjY3LDggQEAKIAkJQTYyMkE4RjYxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1
cml0eUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQmluZGlu
Z1NlY3VyaXR5QmFzZS5jcHA7IHBhdGggPSBnZW5lcmljL0JpbmRpbmdTZWN1cml0eUJhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNjIyQThGNzEyMkM0NEE2MDBBNzg1QjMg
LyogQmluZGluZ1NlY3VyaXR5QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCaW5kaW5nU2VjdXJpdHlCYXNlLmg7IHBhdGggPSBnZW5lcmljL0JpbmRpbmdTZWN1cml0eUJh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTYyMkE4RjkxMjJDNDRBNjAwQTc4
NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEdlbmVyaWNCaW5kaW5nLmg7IHBhdGggPSBnZW5lcmljL0dlbmVyaWNCaW5kaW5nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3MDA1Q0NBMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3MTUxQkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q2hlY2tlckNsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNzE4NzYwRDBCMkExMjAxMDBBMTZFQ0UgLyogRHJhZ0FjdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ0FjdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxODc4OEYwQjJEMDRBQzAwQTE2RUNFIC8qIERy
YWdDb250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gRHJhZ0NvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTE2Niw3ICsxMTE2OSw2IEBACiAJCUI3NzZENDNDMTEwNDUyNzUwMEJFQjBFQyAvKiBQcmludENv
bnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRDb250
ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg4NUU4RDIxMUUwNkREMjAw
OUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCODg1RThEMzExRTA2REQyMDA5RkZC
RjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCOEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVj
dGlvblBhbmVsSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3JyZWN0
aW9uUGFuZWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4REJEQjQ3MTMw
QjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0ODEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0
aW9uQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXRTZWxlY3Rp
b25Db21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4REJEQjQ5MTMwQjBG
OEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU0MzcsNyArMTU0MzksNiBAQAogCQkJCTkz
MzA5RDhDMDk5RTY0OTEwMDU2RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmggKi8sCiAJ
CQkJOTMzMDlEOEQwOTlFNjQ5MTAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCAq
LywKIAkJCQk5MzMwOUQ4RTA5OUU2NDkxMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQu
aCAqLywKLQkJCQlCOEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5m
by5oICovLAogCQkJCUQwQjA1NTY3MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFu
ZC5jcHAgKi8sCiAJCQkJRDBCMDU1NjYwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21t
YW5kLmggKi8sCiAJCQkJMUM0QzhGNjMwQUQ4NjU1RDAwOTQ3NUNFIC8qIERlbGV0ZUJ1dHRvbi5j
cHAgKi8sCkBAIC0xNTUxOSw2ICsxNTUyMCw4IEBACiAJCQkJQTc4RkUxM0ExMjM2NkIxMDAwQUNF
OEQwIC8qIFNwZWxsQ2hlY2tlci5oICovLAogCQkJCUI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAv
KiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLywKIAkJCQlCOERCREI0QTEzMEIwRjhB
MDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oICovLAorCQkJCUE3MDA1Q0NB
MTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCAqLywK
KwkJCQlBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oICovLAogCQkJCTkzMzA5REMyMDk5RTY0OTEwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRD
b21tYW5kLmNwcCAqLywKIAkJCQk5MzMwOURDMzA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRFbGVt
ZW50Q29tbWFuZC5oICovLAogCQkJCTkzMzA5REM0MDk5RTY0OTEwMDU2RTU4MSAvKiBTcGxpdFRl
eHROb2RlQ29tbWFuZC5jcHAgKi8sCkBAIC0xOTgzOSw3ICsxOTg0Miw2IEBACiAJCQkJOTM1MjA4
ODIwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VF
Njg0NjQxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZVN0b3JhZ2VDRk5ldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkU2RkQ0ODgwRjY3NkU1NzAwMDkyODczIC8qIENvb3JkaW5hdGVzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlCOEE2QTZENTEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVs
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMDQwQTE5ODlDQTAwN0ZCOEM1IC8qIENv
dW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCOTc5MEU4MjA2OTIwMEIyNTk2NSAvKiBD
b3VudGVyQ29udGVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI5NTEwRTgyMDU2QjAwQjI1
OTY1IC8qIENvdW50ZXJEaXJlY3RpdmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTIyMTI3LDYgKzIy
MTI5LDcgQEAKIAkJCQk3NTQxNUIwMDEyOTU4RDVFMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1
bHRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhGRTEzQzEyMzY2QjEwMDBBQ0U4RDAgLyog
U3BlbGxDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCOERCREI0RTEzMEIwRjhBMDBGNUNE
QjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTcw
MDVDQ0QxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzMzA5RTEyMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1l
bnRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNDA5OUU2NDkyMDA1NkU1ODEg
LyogU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTE2MDk5
RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI1MzQ4LDYgKzI1MzUxLDcgQEAKIAkJCQkzMTlFNjg4NzEzMjdD
OTExMDA0QUM5MUEgLyogSlNXZWJLaXRBbmltYXRpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzE5RTY5QjIxMzI5OUJCRDAwNEFDOTFBIC8qIFdlYktpdEFuaW1hdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTlFNjlCNTEzMjk5QkJEMDA0QUM5MUEgLyogV2ViS2l0QW5pbWF0
aW9uTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzAwNUNDQzEzMzBDNEJBMDAwQ0MwQkEg
LyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDc2MDk5ZTE2MmZhNzJmN2YxMzlkNjNmYzEzNzhjNGI0YjMzZjNmZTUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvcnJlY3Rpb25QYW5lbEluZm9faAotI2RlZmlu
ZSBDb3JyZWN0aW9uUGFuZWxJbmZvX2gKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLS8vIFNvbWUgcGxhdGZvcm1zIHByb3Zp
ZGUgVUkgZm9yIHN1Z2dlc3RpbmcgYXV0b2NvcnJlY3Rpb24uCi0jZGVmaW5lIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwgMQotLy8gU29tZSBwbGF0Zm9ybXMgdXNlIHNwZWxsaW5nIGFuZCBh
dXRvY29ycmVjdGlvbiBtYXJrZXJzIHRvIHByb3ZpZGUgdmlzdWFsIGN1ZS4KLS8vIE9uIHN1Y2gg
cGxhdGZvcm0sIGlmIHdvcmQgd2l0aCBtYXJrZXIgaXMgZWRpdGVkLCB3ZSBuZWVkIHRvIHJlbW92
ZSB0aGUgbWFya2VyLgotI2RlZmluZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMQotI2Vs
c2UKLSNkZWZpbmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAwCi0jZGVmaW5lIFJFTU9W
RV9NQVJLRVJTX1VQT05fRURJVElORyAwCi0jZW5kaWYgLy8gI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLQotI2luY2x1ZGUgIlJh
bmdlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IENvcnJlY3Rpb25QYW5lbElu
Zm8gewotICAgIGVudW0gUGFuZWxUeXBlIHsKLSAgICAgICAgUGFuZWxUeXBlQ29ycmVjdGlvbiA9
IDAsCi0gICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbiwKLSAgICAgICAgUGFuZWxUeXBlU3BlbGxp
bmdTdWdnZXN0aW9ucwotICAgIH07Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxh
Y2VkOwotICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsKLSAgICBTdHJpbmcgcmVwbGFjZW1lbnRT
dHJpbmc7Ci0gICAgUGFuZWxUeXBlIHBhbmVsVHlwZTsKLSAgICBib29sIGlzQWN0aXZlOwotfTsK
LQotZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKLSAgICBSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKLSAgICBSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwKLSAgICBSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsQWNjZXB0ZWQKLX07Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBDb3JyZWN0aW9uUGFuZWxJbmZvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ0FsbEluT25lLmNwcAppbmRleCBlNGUwYmJiNmNmZTBjMDlhMDc1NmE5NjllZjY4M2Y1YTg0
NzYyM2ZhLi5mMzhjYmU2MmE2MGRlMTFjZDBmMWMxMTNhOTlmMGMyZDAwZWFlYjk2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCkBAIC02Myw2ICs2Myw3IEBA
CiAjaW5jbHVkZSA8U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFNtYXJ0
UmVwbGFjZS5jcHA+CiAjaW5jbHVkZSA8U21hcnRSZXBsYWNlQ0YuY3BwPgorI2luY2x1ZGUgPFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwPgogI2luY2x1ZGUgPFNwZWxsQ2hlY2tlci5j
cHA+CiAjaW5jbHVkZSA8U3BsaXRFbGVtZW50Q29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8U3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDg4MDc5
NjUwNjhhNDM5MTBhOWFkOTM2NTFlMTQ2MmVjYzhlOWNmOWEuLmM0NmVhNDg5OWY1NGE4ZTEzMTkw
ZDIyNDlmNDM2OGU5M2I5YWM4N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTM4
LDYgKzM4LDcgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUg
IkNsaXBib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRpb25FdmVudC5oIgorI2luY2x1
ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDcmVhdGVMaW5r
Q29tbWFuZC5oIgogI2luY2x1ZGUgIkRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJEZWxldGVTZWxlY3Rpb25Db21tYW5kLmgiCkBAIC05NCwzNSArOTUsNiBAQCB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBV
bmljb2RlOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rl
cihVQ2hhciBjaGFyYWN0ZXIpCi17Ci0gICAgLy8gVGhlc2UgYXJlIGNoYXJhY3RlcnMgdGhhdCBj
YW4gYmVoYXZlIGFzIHdvcmQgYm91bmRhcmllcywgYnV0IGNhbiBhcHBlYXIgd2l0aGluIHdvcmRz
LgotICAgIC8vIElmIHRoZXkgYXJlIGp1c3QgdHlwZWQsIGkuZS4gaWYgdGhleSBhcmUgaW1tZWRp
YXRlbHkgZm9sbG93ZWQgYnkgYSBjYXJldCwgd2Ugd2FudCB0byBkZWxheSB0ZXh0IGNoZWNraW5n
IHVudGlsIHRoZSBuZXh0IGNoYXJhY3RlciBoYXMgYmVlbiB0eXBlZC4KLSAgICAvLyBGSVhNRTog
dGhpcyBpcyByZXF1aXJlZCB1bnRpbCA2ODUzMDI3IGlzIGZpeGVkIGFuZCB0ZXh0IGNoZWNraW5n
IGNhbiBkbyB0aGlzIGZvciB1cy4KLSAgICByZXR1cm4gY2hhcmFjdGVyID09ICdcJycgfHwgY2hh
cmFjdGVyID09IHJpZ2h0U2luZ2xlUXVvdGF0aW9uTWFyayB8fCBjaGFyYWN0ZXIgPT0gaGVicmV3
UHVuY3R1YXRpb25HZXJzaGF5aW07Ci19Ci0KLXN0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkKLXsKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4s
IG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24sICgpKTsKLSAgICBpZiAobWFya2VyVHlwZXNG
b3JBdXRvQ29ycmVjdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRv
Q29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICAgICAg
bWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OkNvcnJl
Y3Rpb25JbmRpY2F0b3IpOwotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFw
cGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0gICAgfQotICAg
IHJldHVybiBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uOwotfQotCi1zdGF0aWMgY29uc3Qg
VmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JSZXBsYWNl
bWVudCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LCAoKSk7Ci0gICAgaWYgKG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1hcmtlclR5cGVz
Rm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAg
ICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVs
bENoZWNraW5nRXhlbXB0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yUmVw
bGFjZW1lbnQ7Ci19Ci0KIC8vIFdoZW4gYW4gZXZlbnQgaGFuZGxlciBoYXMgbW92ZWQgdGhlIHNl
bGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250cm9sCiAvLyB3ZSBzaG91bGQgdXNlIHRoZSB0
YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3IgdGhpcyBlZGl0aW5nIG9wZXJhdGlvbi4KIFZp
c2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVudCkK
QEAgLTUxOCw0OCArNDkwLDcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQogICAgIGlmIChjbGllbnQo
KSkKICAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKTsKICAgICBt
X2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2Vs
ZWN0aW9uKTsKLQotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bigpKTsKLSAgICAvLyBXaGVuIHVzZXIgbW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29y
cmVjdGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hvdyB0aGUgcGFuZWwKLSAgICAvLyBjb250YWlu
aW5nIHRoZSBvcmlnaW5hbCBwcmUtY29ycmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVp
Y2tseSByZXZlcnQgdGhlCi0gICAgLy8gdW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3
ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVsIHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0Ci0gICAg
Ly8gdGhlIG5ldyBjYXJldCBwb3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgd29yZC4KLSAgICBp
ZiAoIWN1cnJlbnRTZWxlY3Rpb24uaXNDYXJldCgpIHx8IGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xk
U2VsZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0
aW9uUG9zaXRpb24gPSBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIGVuZFBvc2l0aW9uT2ZXb3JkID0gZW5kT2ZXb3JkKHNlbGVjdGlvblBvc2l0aW9uLCBMZWZ0
V29yZElmT25Cb3VuZGFyeSk7Ci0gICAgaWYgKHNlbGVjdGlvblBvc2l0aW9uICE9IGVuZFBvc2l0
aW9uT2ZXb3JkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IGVu
ZFBvc2l0aW9uT2ZXb3JkLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgaWYgKHBvc2l0aW9uLmFuY2hv
clR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAg
IGludCBlbmRPZmZzZXQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKLSAgICBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLT5tYXJrZXJz
KCktPm1hcmtlcnNGb3JOb2RlKG5vZGUpOwotICAgIHNpemVfdCBtYXJrZXJDb3VudCA9IG1hcmtl
cnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyQ291bnQ7ICsraSkg
ewotICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyID0gbWFya2Vyc1tpXTsKLSAg
ICAgICAgaWYgKCgobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYm
ICFtYXJrZXIuZGVzY3JpcHRpb24uaXNOdWxsKCkpIHx8IG1hcmtlci50eXBlID09IERvY3VtZW50
TWFya2VyOjpTcGVsbGluZykgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXIuZW5kT2Zmc2V0KSA9
PSBlbmRPZmZzZXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShmcmFtZSgpLT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQs
IG5vZGUsIG1hcmtlci5lbmRPZmZzZXQpOwotICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRXb3Jk
ID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFdv
cmQubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQgPSB3b3JkUmFuZ2U7Ci0gICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7Ci0gICAgICAgICAgICAgICAg
aWYgKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykKLSAgICAgICAgICAg
ICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5n
ID0gbWFya2VyLmRlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAgICAgICBzdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAg
IG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0
aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCkBAIC0xMDYyLDEwICs5OTMsNyBAQCB2
b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQog
ICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cygqY21kKTsKICAgICBWaXNp
YmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQtPmVuZGluZ1NlbGVjdGlvbigpKTsKIAotI2lm
IFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBpZiAoY21kLT5pc1RvcExldmVsQ29t
bWFuZCgpICYmICFjbWQtPnNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0g
ICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1
bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7Ci0jZW5kaWYKKyAgICBtX3NwZWxsaW5n
Q29ycmVjdG9yLT5yZXNwb25kVG9BcHBsaWVkRWRpdGluZyhjbWQuZ2V0KCkpOwogCiAgICAgLy8g
RG9uJ3QgY2xlYXIgdGhlIHR5cGluZyBzdHlsZSB3aXRoIHRoaXMgc2VsZWN0aW9uIGNoYW5nZS4g
IFdlIGRvIHRob3NlIHRoaW5ncyBlbHNld2hlcmUgaWYgbmVjZXNzYXJ5LgogICAgIGNoYW5nZVNl
bGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIGZhbHNlLCBmYWxzZSk7CkBAIC0xMTI1
LDE2ICsxMDUzLDEzIEBAIEVkaXRvcjo6RWRpdG9yKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fc2hv
dWxkU3R5bGVXaXRoQ1NTKGZhbHNlKQogICAgICwgbV9raWxsUmluZyhhZG9wdFB0cihuZXcgS2ls
bFJpbmcpKQogICAgICwgbV9zcGVsbENoZWNrZXIobmV3IFNwZWxsQ2hlY2tlcihmcmFtZSwgZnJh
bWUtPnBhZ2UoKSA/IGZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpLT50ZXh0Q2hlY2tlcigp
IDogMCkpCi0gICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyKHRoaXMsICZFZGl0b3I6OmNvcnJl
Y3Rpb25QYW5lbFRpbWVyRmlyZWQpCisgICAgLCBtX3NwZWxsaW5nQ29ycmVjdG9yKG5ldyBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKGZyYW1lKSkKICAgICAsIG1fYXJlTWFya2VkVGV4dE1h
dGNoZXNIaWdobGlnaHRlZChmYWxzZSkKIHsKIH0KIAogRWRpdG9yOjp+RWRpdG9yKCkKIHsKLSNp
ZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Ci0jZW5kaWYKIH0K
IAogdm9pZCBFZGl0b3I6OmNsZWFyKCkKQEAgLTExNzksNyArMTEwNCw3IEBAIGJvb2wgRWRpdG9y
OjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBi
b29sIHNlbGVjdEluCiAgICAgaWYgKHRleHQubGVuZ3RoKCkgPT0gMSAmJiBpc1B1bmN0KHRleHRb
MF0pICYmICFpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKHRleHRbMF0pKQogICAgICAgICBz
aG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJlY3Rpb24gPSB0cnVlOwogCi0gICAgYm9vbCBh
dXRvY29ycmVjdGlvbldhc0FwcGxpZWQgPSBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJl
Y3Rpb24gJiYgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsK
KyAgICBib29sIGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCA9IHNob3VsZENvbnNpZGVyQXBwbHlp
bmdBdXRvY29ycmVjdGlvbiAmJiBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0
aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogCiAgICAgLy8gR2V0IHRoZSBzZWxlY3Rp
b24gdG8gdXNlIGZvciB0aGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcyBpbnNlcnRUZXh0Lgog
ICAgIC8vIElmIHRoZSBldmVudCBoYW5kbGVyIGNoYW5nZWQgdGhlIHNlbGVjdGlvbiwgd2UgbWF5
IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IHNlbGVjdGlvbgpAQCAtMTIxNSw3ICsxMTQwLDcgQEAg
Ym9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0
KCJcbiIsIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBF
ZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9v
bCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBp
bmdJZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1f
c3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKG1fZnJhbWUtPmRv
Y3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVk
aXRpbmdPcGVyYXRpb24oKTsKIApAQCAtMTIzMyw3ICsxMTU4LDcgQEAgYm9vbCBFZGl0b3I6Omlu
c2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIs
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb25UeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBhdXRv
Y29ycmVjdGlvbklzQXBwbGllZCA9IGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFw
cHJvcHJpYXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1fc3BlbGxp
bmdDb3JyZWN0b3ItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRl
KCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKG1fZnJhbWUt
PmRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0
YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKICAgICByZXZlYWxTZWxlY3Rpb25BZnRl
ckVkaXRpbmdPcGVyYXRpb24oKTsKIApAQCAtMTQ2NCw3ICsxMzg5LDcgQEAgdm9pZCBFZGl0b3I6
OnRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudCgpCiAKIGJvb2wgRWRpdG9yOjppc0F1dG9t
YXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQogewotICAgIHJldHVybiBjbGllbnQoKSAm
JiBjbGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7CisgICAg
cmV0dXJuIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9u
RW5hYmxlZCgpOwogfQogCiB2b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3Jy
ZWN0aW9uKCkKQEAgLTIwNjAsMjQgKzE5ODUsOSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0aQog
CiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b25BZnRlclR5cGluZykKIHsKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseVBlbmRpbmdD
b3JyZWN0aW9uKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsKKwogI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIC8vIEFwcGx5IHBlbmRp
bmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5leHQgcm91bmQgb2Ygc3BlbGwgY2hlY2tpbmcuCi0g
ICAgYm9vbCBkb0FwcGx5Q29ycmVjdGlvbiA9IHRydWU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0
YXJ0T2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb25BZnRlclR5cGluZy52aXNpYmxlU3RhcnQoKTsKLSAg
ICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3JkID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9m
V29yZChzdGFydE9mU2VsZWN0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChz
dGFydE9mU2VsZWN0aW9uLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKLSAgICBpZiAoY3VycmVu
dFdvcmQudmlzaWJsZUVuZCgpID09IHN0YXJ0T2ZTZWxlY3Rpb24pIHsKLSAgICAgICAgU3RyaW5n
IHdvcmRUZXh0ID0gcGxhaW5UZXh0KGN1cnJlbnRXb3JkLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCkpOwotICAgICAgICBpZiAod29yZFRleHQubGVuZ3RoKCkgPiAwICYmIGlzQW1iaWd1b3VzQm91
bmRhcnlDaGFyYWN0ZXIod29yZFRleHRbd29yZFRleHQubGVuZ3RoKCkgLSAxXSkpCi0gICAgICAg
ICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoZG9BcHBseUNv
cnJlY3Rpb24pCi0gICAgICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwotI2VuZGlmCiAgICAgVGV4dENoZWNraW5n
T3B0aW9ucyB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gMDsKICAgICBpZiAoaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBNYXJr
U3BlbGxpbmc7CkBAIC0yMTA0LDcgKzIwMTQsNiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAog
ICAgIH0KIAogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwog
ICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yMjE5LDcgKzIxMjgsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogdm9pZCBFZGl0b3I6Om1hcmtBbGxN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0
Q2hlY2tpbmdPcHRpb25zLCBSYW5nZSogc3BlbGxpbmdSYW5nZSwgUmFuZ2UqIGdyYW1tYXJSYW5n
ZSkKIHsKICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBh
dCB0aGlzIG1vbWVudC4KLSAgICBBU1NFUlQoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZCk7CisgICAgQVNTRVJUKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5oYXNQZW5kaW5n
Q29ycmVjdGlvbigpKTsKIAogICAgIGJvb2wgc2hvdWxkTWFya1NwZWxsaW5nID0gdGV4dENoZWNr
aW5nT3B0aW9ucyAmIE1hcmtTcGVsbGluZzsKICAgICBib29sIHNob3VsZE1hcmtHcmFtbWFyID0g
dGV4dENoZWNraW5nT3B0aW9ucyAmIE1hcmtHcmFtbWFyOwpAQCAtMjI5MSwxMSArMjIwMCw5IEBA
IHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRl
eHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiAgICAgfQogICAgIHRleHRDaGVja2VyKCktPmNoZWNr
VGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBwYXJhZ3JhcGgudGV4
dExlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKIAotI2lmIFNVUFBPUlRfQVVUT0NP
UlJFQ1RJT05fUEFORUwKICAgICAvLyBJZiB0aGlzIGNoZWNraW5nIGlzIG9ubHkgZm9yIHNob3dp
bmcgY29ycmVjdGlvbiBwYW5lbCwgd2Ugc2hvdWxkbid0IGJvdGhlciB0byBtYXJrIG1pc3NwZWxs
aW5ncy4KICAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCkKICAgICAgICAgc2hvdWxk
TWFya1NwZWxsaW5nID0gZmFsc2U7Ci0jZW5kaWYKIAogICAgIGludCBvZmZzZXREdWVUb1JlcGxh
Y2VtZW50ID0gMDsKIApAQCAtMjMxNCwxMCArMjIyMSw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4
dENoCiAgICAgICAgIGlmIChzaG91bGRNYXJrU3BlbGxpbmcgJiYgcmVzdWx0LT50eXBlID09IFRl
eHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiByZXN1bHRMb2NhdGlvbiA+PSBzcGVsbGluZ1BhcmFn
cmFwaC5jaGVja2luZ1N0YXJ0KCkgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPD0g
c3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiAhcmVzdWx0RW5kc0F0QW1iaWd1b3VzQm91bmRhcnkp
IHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9u
ID49IDApOwogICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gc3Bl
bGxpbmdQYXJhZ3JhcGguc3VicmFuZ2UocmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCk7Ci0j
aWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgICAgICAgICAgaWYgKG1fZnJhbWUt
PmRvY3VtZW50KCktPm1hcmtlcnMoKS0+aGFzTWFya2VycyhtaXNzcGVsbGluZ1JhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbikpCisgICAgICAgICAgICBp
ZiAoIW1fc3BlbGxpbmdDb3JyZWN0b3ItPmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKG1pc3NwZWxs
aW5nUmFuZ2UpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmIC8vIFNVUFBPUlRf
QVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIobWlzc3BlbGxp
bmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRNYXJrR3JhbW1hciAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlw
ZUdyYW1tYXIgJiYgZ3JhbW1hclBhcmFncmFwaC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3VsdExv
Y2F0aW9uLCByZXN1bHRMZW5ndGgpKSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3Ro
ID4gMCAmJiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKQEAgLTIzNzYsMjQgKzIyODEsMTYgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENo
ZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICAgICAgICAgIGlmICghZG9SZXBsYWNlbWVudCkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKICAgICAgICAgICAgIGlmIChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKSB7CisgICAgICAg
ICAgICAgICAgLy8gc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCBjYW4gYmUgdHJ1ZSBvbmx5IHdo
ZW4gdGhlIHBhbmVsIGlzIGF2YWlsYWJsZS4KICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TG9j
YXRpb24gKyByZXN1bHRMZW5ndGggPT0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBvbmx5IHNob3cgdGhlIGNvcnJlY3Rpb24gcGFuZWwgb24gdGhl
IGxhc3Qgd29yZC4KLSAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0g
d2luZG93UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGJvdW5kaW5nQm94LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQgPSByYW5nZVRvUmVwbGFjZTsKLSAgICAgICAgICAgICAgICAgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNl
LmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VtZW50U3RyaW5nID0gcmVzdWx0LT5yZXBsYWNlbWVudDsKLSAgICAgICAgICAgICAgICAgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBh
bmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmlu
ZywgcmVzdWx0LT5yZXBsYWNlbWVudCwgVmVjdG9yPFN0cmluZz4oKSwgdGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnNob3cocmFuZ2VUb1JlcGxhY2UsIHJl
c3VsdC0+cmVwbGFjZW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg
Zm9yIHNob3dpbmcgY29ycmVjdGlvbiBwYW5lbCwgd2UgaWdub3JlIG90aGVyIGNvcnJlY3Rpb24g
b3IgcmVwbGFjZW1lbnQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
Ci0jZW5kaWYKIAogICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNl
KSkKQEAgLTI0NjcsMTcgKzIzNjQsMTIgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxh
Y2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCiAgICAgaWYgKCFzaG91bGRJ
bnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvblBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSNpZiBTVVBQT1JUX0FVVE9DT1JS
RUNUSU9OX1BBTkVMCi0gICAgU3RyaW5nIHJlcGxhY2VtZW50ID0gcGxhaW5UZXh0KHNlbGVjdGlv
bi5nZXQoKSk7Ci0gICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRp
dG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCByZXBsYWNlZFN0cmluZywgcmVwbGFj
ZW1lbnQpOwotI2VuZGlmCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZVJldmVyc2VkKHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24pOwogICAgIFRl
eHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoc2VsZWN0aW9uKTsKICAgICByZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQocmVwbGFjZWRTdHJpbmcsIGZhbHNlLCBmYWxzZSk7CiAgICAgUmVmUHRy
PFJhbmdlPiBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UocGFyYWdyYXBoLmNoZWNr
aW5nU3RhcnQoKSwgcmVwbGFjZWRTdHJpbmcubGVuZ3RoKCkpOwogICAgIGNoYW5nZWRSYW5nZS0+
c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdl
ZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsKLSNp
ZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgY2hhbmdlZFJhbmdlLT5zdGFydENv
bnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSNlbmRpZgor
ICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPm1hcmtSZXZzZXJzZWQoY2hhbmdlZFJhbmdlLmdldCgp
KTsKIH0KIAogI2VuZGlmCkBAIC0yNDk5LDE0MyArMjM5MSwzMSBAQCB2b2lkIEVkaXRvcjo6bWFy
a01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3BlbGxp
bmdTZWxlYwogI2VuZGlmCiB9CiAKLXZvaWQgRWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZp
cmVkKFRpbWVyPEVkaXRvcj4qKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwK
LSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKLSAgICBz
d2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKLSAgICAgICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24u
YWZmaW5pdHkoKSk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3Rh
cnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGph
Y2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7Ci0gICAgICAgIG1hcmtBbGxN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoTWFya1NwZWxsaW5nIHwgU2hvd0NvcnJl
Y3Rpb25QYW5lbCwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCAwKTsK
LSAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlUmV2ZXJzaW9uOiB7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2
ZSA9IHRydWU7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9
IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkp
OwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgaWYg
KCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJl
Y3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmVwbGFjZW1lbnRTdHJpbmcsIFZlY3RvcjxTdHJpbmc+KCksIHRoaXMpOwotICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVs
bGluZ1N1Z2dlc3Rpb25zOiB7Ci0gICAgICAgIGlmIChwbGFpblRleHQobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKSAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZWRTdHJpbmcpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgU3RyaW5nIHBhcmFn
cmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7Ci0gICAg
ICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5n
ZXRHdWVzc2VzRm9yV29yZChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHBh
cmFncmFwaFRleHQsIHN1Z2dlc3Rpb25zKTsKLSAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBTdHJp
bmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7Ci0gICAgICAgIHN1Z2dlc3Rp
b25zLnJlbW92ZSgwKTsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0g
dHJ1ZTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdl
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAg
IGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQotICAgICAgICAgICAgY2xpZW50KCktPnNob3dD
b3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdC
b3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwg
c3VnZ2VzdGlvbnMsIHRoaXMpOwotICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlm
Ci19Ci0KLXZvaWQgRWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3Ry
aW5nJiBjb3JyZWN0aW9uKQotewotICAgIFJhbmdlKiByZXBsYWNlZFJhbmdlID0gbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpOwotICAgIGlmICghcmVwbGFjZWRS
YW5nZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgpICE9IHJlcGxhY2VkUmFuZ2UtPm93bmVyRG9jdW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5U
ZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB3b3JkIHdlIGFyZSBhYm91dCB0byBjb3JyZWN0IGhhcyBi
ZWVuIGNoYW5nZWQgYmV0d2VlbiB0aW1lciBmaXJpbmcgYW5kIGNhbGxiYWNrIGJlaW5nIHRyaWdn
ZXJlZC4KLSAgICBpZiAoY3VycmVudFdvcmQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VkU3RyaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUgPSBmYWxzZTsKLQotICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBh
bmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVj
dGlvbjoKLSAgICAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247Ci0gICAg
ICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JBdXRvY29ycmVj
dGlvbigpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbV9jb3JyZWN0aW9u
UGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yKQotICAgICAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxh
Y2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246Ci0gICAgY2Fz
ZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgotICAg
ICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKLSAgICAgICAgICAgIGFw
cGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkpOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotfQotCi12b2lkIEVkaXRvcjo6c3RhcnRDb3Jy
ZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSkKK3Zv
aWQgRWRpdG9yOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKIHsKLSNpZiBTVVBQT1JUX0FV
VE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgY29uc3QgZG91YmxlIGNvcnJlY3Rpb25QYW5lbFRpbWVy
SW50ZXJ2YWwgPSAwLjM7Ci0gICAgaWYgKGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5h
YmxlZCgpKSB7Ci0gICAgICAgIGlmICh0eXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZUNvcnJlY3Rpb24pCi0gICAgICAgICAgICAvLyBJZiB0eXBlIGlzIFBhbmVsVHlwZVJldmVy
c2lvbiwgdGhlbiB0aGUgbmV3IHJhbmdlIGhhcyBiZWVuIHNldC4gU28gd2Ugc2hvdWxkbid0IGNs
ZWFyIGl0LgotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLmNsZWFyKCk7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPSB0
eXBlOwotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0YXJ0T25lU2hvdChjb3JyZWN0
aW9uUGFuZWxUaW1lckludGVydmFsKTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0
eXBlKTsKLSNlbmRpZgorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnN0YXJ0Q29ycmVjdGlvblBh
bmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbik7CiB9CiAK
LXZvaWQgRWRpdG9yOjpzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKQordm9pZCBFZGl0b3I6Omhh
bmRsZUNhbmNlbE9wZXJhdGlvbigpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5F
TAotICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RvcCgpOwotICAgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotI2VuZGlmCisgICAgbV9zcGVsbGlu
Z0NvcnJlY3Rvci0+aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpo
YW5kbGVDYW5jZWxPcGVyYXRpb24oKQordm9pZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxsQ29ycmVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3Qg
U3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKIHsKLSNpZiBTVVBQ
T1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNB
Y3RpdmUgPSBmYWxzZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5j
ZWxsZWQpOwotI2VuZGlmCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVzcG9uZFRvVW5hcHBs
aWVkU3BlbGxDb3JyZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb3JyZWN0ZWQsIGNvcnJl
Y3Rpb24pOwogfQogCiBib29sIEVkaXRvcjo6aXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCkKIHsK
LSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgaWYgKGNsaWVudCgpKQotICAg
ICAgICByZXR1cm4gY2xpZW50KCktPmlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpOwotI2VuZGlm
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NwZWxsaW5nQ29ycmVjdG9yLT5pc1No
b3dpbmdDb3JyZWN0aW9uUGFuZWwoKTsKIH0KIAotdm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0
aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNt
aXNzaW5nKQordm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0
aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KQogewotI2lmIFNV
UFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5m
by5pc0FjdGl2ZSkKKyAgICBpZiAoIWlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZl
ID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1
ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlv
blBhbmVsKHJlYXNvbkZvckRpc21pc3NpbmcpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVh
c29uRm9yRGlzbWlzc2luZyk7Ci0jZW5kaWYKLX0KLXZvaWQgRWRpdG9yOjpyZW1vdmVTcGVsbEFu
ZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChib29sIGRvTm90UmVtb3ZlSWZT
ZWxlY3Rpb25BdFdvcmRCb3VuZGFyeSkKLXsKKwogICAgIC8vIFdlIHdhbnQgdG8gcmVtb3ZlIHRo
ZSBtYXJrZXJzIGZyb20gYSB3b3JkIGlmIGFuIGVkaXRpbmcgY29tbWFuZCB3aWxsIGNoYW5nZSB0
aGUgd29yZC4gVGhpcyBjYW4gaGFwcGVuIGluIG9uZSBvZgogICAgIC8vIHNldmVyYWwgc2NlbmFy
aW9zOgogICAgIC8vIDEuIEluc2VydCBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZC4KQEAgLTI3MDEs
MTAyICsyNDgxLDYgQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtl
cnNGcm9tV29yZHNUb0JlRWRpdGVkKGJvb2wgZG9Ob3RSZW1vdmUKICAgICBkb2N1bWVudC0+bWFy
a2VycygpLT5jbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2Uod29yZFJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogfQogCi12b2lkIEVkaXRv
cjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpCi17Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVD
VElPTl9QQU5FTAotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBS
ZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOwotICAgIGlm
IChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2VDb250
YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChw
YXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBhcmFncmFwaCht
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkpKTsK
LQotICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQgcmFuZ2UgcmFuZ2VUb0JlUmVw
bGFjZWQsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCByYW5nZS4KLSAgICAvLyBIb3dl
dmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0aGUgdmFsdWUgb2YgcmFuZ2VU
b0JlUmVwbGFjZWQgaXMgbm90IHZhbGlkIGFueW1vcmUuCi0gICAgLy8gU28gYmVmb3JlIHdlIGNh
cnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0IHBvc2l0
aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkCi0gICAgLy8gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IHBv
c2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2UgdXNlIGNvcnJlY3Rpb25TdGFy
dE9mZnNldEluUGFyYWdyYXBoCi0gICAgLy8gdG8gc3RvcmUgdGhpcyB2YWx1ZS4gSW4gb3JkZXIg
dG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSBhIHJhbmdlCi0g
ICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRvIHRoZSBzdGFy
dCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZC4KLSAgICBSZWZQdHI8UmFuZ2U+IGNvcnJl
Y3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVu
dCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCks
IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7Ci0g
ICAgaWYgKGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9u
T2ZSYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC0+c3RhcnRQb3NpdGlvbigpOwotICAgIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdy
YXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbnRh
aW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29tcHV0ZU9mZnNl
dEluQ29udGFpbmVyTm9kZSgpLCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0aW9uIHNvIHRo
YXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UuCi0g
ICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UuZ2V0KCkp
OwotCi0gICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0
aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFsIHJhbmdlIGFyb3VuZC4KLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBhcHBseUNvbW1hbmQoU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9CZVJlcGxhY2VkLCBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VD
b250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bigpLnN0YXJ0KCkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJ
dGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQo
KSwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsICBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpOwotICAgIFN0cmluZyBuZXdUZXh0ID0gcGxh
aW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOwotCi0gICAgLy8gQ2hlY2sgdG8gc2VlIGlm
IHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KLSAgICBpZiAobmV3VGV4dCAhPSBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IG1hcmtl
clR5cGVzVG9BZGQuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlID09IENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbikKLSAgICAgICAgICAgIG1hcmtlcnMt
PmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlc1RvQWRkW2ldKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VtZW50
UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGVzVG9BZGRbaV0sIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlZFN0cmluZyk7Ci0gICAgfQotI2Vsc2UgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9Q
QU5FTAotICAgIFVOVVNFRF9QQVJBTShtYXJrZXJUeXBlc1RvQWRkKTsKLSNlbmRpZiAvLyBTVVBQ
T1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi19Ci0KLWJvb2wgRWRpdG9yOjphcHBseUF1dG9jb3Jy
ZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpCi17Ci0gICAgaWYgKCFtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgIW1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fY29ycmVjdGlvblBh
bmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVj
dGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9zaXRpb24gY2FyZXRQb3NpdGlv
biA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpOwotCi0gICAgaWYg
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9
PSBjYXJldFBvc2l0aW9uKSB7Ci0gICAgICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfSAKLSAgICAKLSAgICAvLyBQZW5kaW5nIGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5
cyBiZSB3aGVyZSBjYXJldCBpcy4gQnV0IGluIGNhc2UgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUs
IHdlIHN0aWxsIHdhbnQgdG8gZGlzbWlzcyB0aGUgcGFuZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhl
IGNvcnJlY3Rpb24uCi0gICAgQVNTRVJUKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKTsKLSAgICBkaXNtaXNzQ29y
cmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0
IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0jaWYgU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVj
dGVkLCBjb3JyZWN0aW9uKTsKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQo
KTsKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29y
cmVjdGVkLCBTZWxlY3Rpb25Db250cm9sbGVyOjpDbG9zZVR5cGluZyB8IFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkNsZWFyVHlwaW5nU3R5bGUgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpTcGVsbENvcnJl
Y3Rpb25UcmlnZ2VyZWQpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KG1fZnJhbWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5z
dGFydCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCkpOwotCi0gICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpOwotICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2UuZ2V0KCksIERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZyk7Ci0gICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgIG1hcmtlcnMtPmFkZE1hcmtlcihy
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotI2Vs
c2UgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFVOVVNFRF9QQVJBTShzZWxl
Y3Rpb25PZkNvcnJlY3RlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGNvcnJlY3Rpb24pOwotI2VuZGlmIC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKLX0KLQogUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0
IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2Zy
YW1lLT5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwpAQCAtMzQ5MSwxNCArMzE3NSw3IEBA
IHZvaWQgRWRpdG9yOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxh
ZykKIAogdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBTZWxlY3Rpb25Db250cm9sbGVyOjpTZXRTZWxlY3Rp
b25PcHRpb25zIG9wdGlvbnMpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAot
ICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3Jl
IHdlIGNhbGwgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4KLSAgICBWaXNp
YmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpKTsKLSAgICBpZiAoY3VycmVudFNlbGVjdGlvbiAhPSBvbGRTZWxlY3Rpb24pIHsKLSAg
ICAgICAgc3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7Ci0gICAgICAgIGRpc21pc3NDb3JyZWN0
aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwotICAg
IH0KLSNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgbV9zcGVsbGlu
Z0NvcnJlY3Rvci0+c3RvcFBlbmRpbmdDb3JyZWN0aW9uKG9sZFNlbGVjdGlvbik7CiAKICAgICBi
b29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAmIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNsb3NlVHlw
aW5nOwogICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSB0aGlzLT5p
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwpAQCAtMzUxNSwxMCArMzE5Miw4IEBA
IHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG9sZFNlbGVjdGlvbiwgU2VsCiAgICAgICAgIH0KIAogICAgICAgICBib29sIHNob3Vs
ZENoZWNrU3BlbGxpbmdBbmRHcmFtbWFyID0gdHJ1ZTsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNU
SU9OX1BBTkVMCiAgICAgICAgIC8vIERvbid0IGNoZWNrIHNwZWxsaW5nIGFuZCBncmFtbWFyIGlm
IHRoZSBjaGFuZ2Ugb2Ygc2VsZWN0aW9uIGlzIHRyaWdnZXJlZCBieSBzcGVsbGluZyBjb3JyZWN0
aW9uIGl0c2VsZi4KICAgICAgICAgc2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1tYXIgPSAhKG9w
dGlvbnMgJiBTZWxlY3Rpb25Db250cm9sbGVyOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOwot
I2VuZGlmCiAKICAgICAgICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hlY2sgc3BlbGxpbmcgZWxzZXdo
ZXJlLCBzbyBkb24ndCByZWRvIGl0IGhlcmUuCiAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjaGFu
Z2UgaW4gc2VsZWN0aW9uIHJlc3VsdGluZyBmcm9tIGEgZGVsZXRlIG9wZXJhdGlvbiwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCmluZGV4IGUxYTcxMTkyNDVlODNiZWQxMGQ3M2QyMDVlZmUyMTU0MDg1
YzU2OWUuLmU4NDcyMWYyZWZlMGQ4Nzc1ODViMDYzZmU3ZjljZTY3OTllMWI1NTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ2xpcGJvYXJk
QWNjZXNzUG9saWN5LmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJDb3JyZWN0aW9u
UGFuZWxJbmZvLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJFZGl0
QWN0aW9uLmgiCiAjaW5jbHVkZSAiRWRpdGluZ0JlaGF2aW9yLmgiCkBAIC01MCw2ICs0OSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwog
Y2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENsaXBib2FyZDsKK2NsYXNzIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBEZWxldGVCdXR0b25Db250cm9sbGVyOwog
Y2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0b3JDbGllbnQ7CkBAIC0zMjEsOSArMzIxLDkg
QEAgcHVibGljOgogICAgIHZvaWQgYWRkVG9LaWxsUmluZyhSYW5nZSosIGJvb2wgcHJlcGVuZCk7
CiAKICAgICB2b2lkIGhhbmRsZUNhbmNlbE9wZXJhdGlvbigpOwotICAgIHZvaWQgc3RhcnRDb3Jy
ZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUpOworICAgIHZv
aWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworCiAgICAgLy8gSWYgdXNlciBjb25maXJt
ZWQgYSBjb3JyZWN0aW9uIGluIHRoZSBjb3JyZWN0aW9uIHBhbmVsLCBjb3JyZWN0aW9uIGhhcyBu
b24temVybyBsZW5ndGgsIG90aGVyd2lzZSBpdCBtZWFucyB0aGF0IHVzZXIgaGFzIGRpc21pc3Nl
ZCB0aGUgcGFuZWwuCi0gICAgdm9pZCBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3Qg
U3RyaW5nJiBjb3JyZWN0aW9uKTsKICAgICBib29sIGlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgp
OwogCiAgICAgdm9pZCBwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7CkBAIC0zNzksNyArMzc5LDcg
QEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIHNlbGVjdGlvblN0YXJ0SGFzU3BlbGxpbmdN
YXJrZXJGb3IoaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlU3Bl
bGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoYm9vbCBkb05vdFJlbW92
ZUlmU2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpOworICAgIHZvaWQgdXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBvbmx5SGFuZGxlV29yZHNDb250YWluaW5nU2VsZWN0
aW9uKTsKIAogcHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFtZTsKQEAgLTM5NCwxMCArMzk0LDgg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkU3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlOwog
ICAgIGJvb2wgbV9zaG91bGRTdHlsZVdpdGhDU1M7CiAgICAgT3duUHRyPEtpbGxSaW5nPiBtX2tp
bGxSaW5nOwotICAgIENvcnJlY3Rpb25QYW5lbEluZm8gbV9jb3JyZWN0aW9uUGFuZWxJbmZvOwog
ICAgIE93blB0cjxTcGVsbENoZWNrZXI+IG1fc3BlbGxDaGVja2VyOwotICAgIFRpbWVyPEVkaXRv
cj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsKLSAgICBib29sIG1fY29ycmVjdGlvblBhbmVsSXNE
aXNtaXNzZWRCeUVkaXRvcjsKKyAgICBPd25QdHI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cj4gbV9zcGVsbGluZ0NvcnJlY3RvcjsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG1fbWFyazsKICAg
ICBib29sIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZDsKIApAQCAtNDIxLDEzICs0
MTksOCBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IG5leHRWaXNpYmxlUmFuZ2Uo
UmFuZ2UqLCBjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiAKICAgICB2b2lkIGNoYW5nZVNl
bGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24s
IGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wgY2xlYXJUeXBpbmdTdHlsZSk7Ci0gICAgdm9pZCBjb3Jy
ZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPEVkaXRvcj4qKTsKICAgICBOb2RlKiBmaW5kRXZl
bnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBzdG9wQ29ycmVjdGlvblBh
bmVsVGltZXIoKTsKLSAgICB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7Ci0gICAgdm9pZCBhcHBseUNvcnJlY3Rpb25QYW5lbElu
Zm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNU
b0FkZCk7Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgY29ycmVjdGlvbiB3YXMgYXBwbGllZCwgZmFs
c2Ugb3RoZXJ3aXNlLgotICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lm
QXBwcm9wcmlhdGUoKTsKKwogICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0Rm9yUmFuZ2UoY29uc3Qg
UmFuZ2UqKSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGJhZDRhOTllOTgxODkzMDJlYzYxYmZk
YjA5ZGExNDZkMGJiMTRlYjQuLjA1ZDliODMxMGY4NmJiNDljNDgzMTk4YWVlM2NiODcyZTM0MTk5
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kLmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCIKIAotI2luY2x1ZGUgIkNvcnJlY3Rp
b25QYW5lbEluZm8uaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmM2N2E2MGQ3YWEzMTVmZjFhOTIxM2ZiYjIwMDlmMjA2Y2ZkNGRlMDIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
Y3BwCkBAIC0wLDAgKzEsNDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXIuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
IkVkaXRDb21tYW5kLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kLmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJU
ZXh0Q2hlY2tpbmdIZWxwZXIuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRl
ICJodG1sZWRpdGluZy5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgInZpc2libGVf
dW5pdHMuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5F
TAorCitzdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFy
a2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvckF1dG9Db3Jy
ZWN0aW9uLCAoKSk7CisgICAgaWYgKG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uaXNFbXB0
eSgpKSB7CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3Vt
ZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJl
Y3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyAgICAg
ICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JB
dXRvQ29ycmVjdGlvbjsKK30KKworc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlw
ZXNGb3JSZXBsYWNlbWVudCwgKCkpOworICAgIGlmIChtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50
LmlzRW1wdHkoKSkgeworICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChE
b2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxh
Y2VtZW50LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cisg
ICAgfQorICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50OworfQorCitTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1l
KiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRp
bWVyKHRoaXMsICZTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxU
aW1lckZpcmVkKQoreworfQorCitTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp+U3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcigpCit7CisgICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZv
OjpQYW5lbFR5cGUgdHlwZSkKK3sKKyAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGlt
ZXJJbnRlcnZhbCA9IDAuMzsKKyAgICBpZiAoaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25F
bmFibGVkKCkpIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlQ29ycmVjdGlvbikKKyAgICAgICAgICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2
ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3Qg
Y2xlYXIgaXQuCisgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQuY2xlYXIoKTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9
IHR5cGU7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJl
Y3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwpOworICAgIH0KK30KKwordm9pZCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKQoreworICAgIG1fY29y
cmVjdGlvblBhbmVsVGltZXIuc3RvcCgpOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZC5jbGVhcigpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRT
ZWxlY3Rpb24pCit7CisgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gcGVuZGluZyBhdXRvY29y
cmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcigpIGJl
bG93LgorICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAgIGlmIChjdXJyZW50U2VsZWN0aW9uICE9IG9sZFNl
bGVjdGlvbikgeworICAgICAgICBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKTsKKyAgICAgICAg
ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAg
fQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5UGVuZGluZ0Nv
cnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCit7
CisgICAgLy8gQXBwbHkgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBv
ZiBzcGVsbCBjaGVja2luZy4KKyAgICBib29sIGRvQXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IHNlbGVjdGlvbkFmdGVyVHlwaW5n
LnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFdvcmQgPSBWaXNp
YmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIExlZnRXb3JkSWZPbkJv
dW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFy
eSkpOworICAgIGlmIChjdXJyZW50V29yZC52aXNpYmxlRW5kKCkgPT0gc3RhcnRPZlNlbGVjdGlv
bikgeworICAgICAgICBTdHJpbmcgd29yZFRleHQgPSBwbGFpblRleHQoY3VycmVudFdvcmQudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIGlmICh3b3JkVGV4dC5sZW5ndGgoKSA+
IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcih3b3JkVGV4dFt3b3JkVGV4dC5sZW5n
dGgoKSAtIDFdKSkKKyAgICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7CisgICAg
fQorICAgIGlmIChkb0FwcGx5Q29ycmVjdGlvbikKKyAgICAgICAgZGlzbWlzcyhSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpOworICAgIGVsc2UKKyAgICAgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK2Jvb2wg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25z
dAoreworICAgIHJldHVybiBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQ7
Cit9CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtl
ckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gIShtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmhhc01hcmtlcnMobWlz
c3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRp
b24pKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KFBhc3NS
ZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQor
eworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShyYW5nZVRv
UmVwbGFjZS5nZXQoKSk7CisgICAgaWYgKGJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHJh
bmdlVG9SZXBsYWNlOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9
IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZW1lbnQ7CisgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICBzaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVj
dGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpKTsKK30KKwor
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24o
KQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAg
ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkKTsKK30K
Kwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKK3sKKyAgICBpZiAo
IW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIG1fY29ycmVjdGlvblBh
bmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7CisgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bChyZWFzb25Gb3JEaXNtaXNzaW5nKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKK3sKKyAgICBpZiAoIW1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAg
IHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0
T2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFy
dFBvc2l0aW9uKCkpKTsKKyAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVj
dGlvbi5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpKSk7CisKKyAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRo
ZSB3b3JkIGF0IHJhbmdlIHJhbmdlVG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJz
IHRvIHRoYXQgcmFuZ2UuCisgICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9v
ayBwbGFjZSwgdGhlIHZhbHVlIG9mIHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5vdCB2YWxpZCBhbnlt
b3JlLgorICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBu
ZWVkIHRvIHN0b3JlIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZAorICAg
IC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJh
Z3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAorICAgIC8vIHRv
IHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVl
ZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQorICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0
YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFj
ZWQuCisgICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFz
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24t
PnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBj
b3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0
aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJh
bmdlVG9CZVJlcGxhY2VkLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAg
IGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2Nh
dGlvbiBvZiBhdXRvY29ycmVjdGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRo
ZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgorICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJ
blBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zm
c2V0SW5QYXJhZ3JhcGhBc1JhbmdlLmdldCgpKTsKKworICAgIC8vIENsb25lIHRoZSByYW5nZSwg
c2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmln
aW5hbCByYW5nZSBhcm91bmQuCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7
CisgICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5n
ZVRvQmVSZXBsYWNlZCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7
CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBSZWZQdHI8UmFu
Z2U+IHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoLCAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgp
KTsKKyAgICBTdHJpbmcgbmV3VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgp
KTsKKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCisgICAg
aWYgKG5ld1RleHQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQor
ICAgICAgICByZXR1cm47CisKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMg
PSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJz
KCk7CisgICAgc2l6ZV90IHNpemUgPSBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAobV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnBhbmVsVHlwZSA9PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZl
cnNpb24pCisgICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5n
ZXQoKSwgbWFya2VyVHlwZXNUb0FkZFtpXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1h
cmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlc1RvQWRk
W2ldLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpOworICAgIH0KK30KKwor
Ym9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVm
b3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5w
YW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpOworCisgICAgaWYgKG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBv
c2l0aW9uKSB7CisgICAgICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbEFjY2VwdGVkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKyAgICAKKyAgICAv
LyBQZW5kaW5nIGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5cyBiZSB3aGVyZSBjYXJldCBpcy4gQnV0
IGluIGNhc2UgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIHdlIHN0aWxsIHdhbnQgdG8gZGlzbWlz
cyB0aGUgcGFuZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhlIGNvcnJlY3Rpb24uCisgICAgQVNTRVJU
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9
PSBjYXJldFBvc2l0aW9uKTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0
aW9uUGFuZWxJZ25vcmVkKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQoreworICAgIHJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOworICAgIG1f
ZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOworICAgIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkNsb3NlVHlwaW5nIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xlYXJUeXBpbmdTdHlsZSB8
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7CisgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKS5lbmQoKSk7CisKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIq
IG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgbWFya2Vycy0+
cmVtb3ZlTWFya2VycyhyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAg
ICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCk7CisgICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyPiopCit7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5
RWRpdG9yID0gZmFsc2U7CisgICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxU
eXBlKSB7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9u
OiB7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rp
b24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgICAgICBWaXNpYmxlUG9zaXRp
b24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgICAg
IFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3Rh
cnQpOworICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJh
ZEdyYW1tYXJJblJhbmdlcyhFZGl0b3I6Ok1hcmtTcGVsbGluZyB8IEVkaXRvcjo6U2hvd0NvcnJl
Y3Rpb25QYW5lbCwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCAwKTsK
KyAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlUmV2ZXJzaW9uOiB7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2
ZSA9IHRydWU7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9
IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkp
OworICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAgaWYg
KCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzaG93Q29ycmVjdGlvblBhbmVs
KG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
bWVudFN0cmluZywgVmVjdG9yPFN0cmluZz4oKSk7CisgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6
IHsKKyAgICAgICAgaWYgKHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCkpICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWlu
VGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkKS5wYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gc3VnZ2VzdGlvbnM7CisgICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3Jk
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3Vn
Z2VzdGlvbnMpOworICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFN0cmluZyB0b3BTdWdnZXN0aW9u
ID0gc3VnZ2VzdGlvbnMuZmlyc3QoKTsKKyAgICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDApOwor
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOworICAgICAgICBG
bG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAgaWYgKCFib3VuZGluZ0Jv
eC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlv
blBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZWRTdHJpbmcsIHRvcFN1Z2dlc3Rpb24sIHN1Z2dlc3Rpb25zKTsKKyAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQor
eworICAgIFJhbmdlKiByZXBsYWNlZFJhbmdlID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLmdldCgpOworICAgIGlmICghcmVwbGFjZWRSYW5nZSB8fCBtX2ZyYW1lLT5k
b2N1bWVudCgpICE9IHJlcGxhY2VkUmFuZ2UtPm93bmVyRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgLy8gQ2hlY2sgdG8gc2VlIGlm
IHRoZSB3b3JkIHdlIGFyZSBhYm91dCB0byBjb3JyZWN0IGhhcyBiZWVuIGNoYW5nZWQgYmV0d2Vl
biB0aW1lciBmaXJpbmcgYW5kIGNhbGxiYWNrIGJlaW5nIHRyaWdnZXJlZC4KKyAgICBpZiAoY3Vy
cmVudFdvcmQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsK
KworICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSkgeworICAgIGNh
c2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbjoKKyAgICAgICAgaWYg
KGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247CisgICAgICAgICAgICBhcHBseUNvcnJl
Y3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5
RWRpdG9yKQorICAgICAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkt
PmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3VtZW50
TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
ZFN0cmluZyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgorICAgICAgICBpZiAoY29ycmVjdGlv
bi5sZW5ndGgoKSkgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vt
ZW50U3RyaW5nID0gY29ycmVjdGlvbjsKKyAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVs
SW5mbyhtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNl
ZC5jbGVhcigpOworfQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzQXV0
b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGNsaWVudCgp
ICYmIGNsaWVudCgpLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKK30K
KworRmxvYXRSZWN0IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JS
YW5nZShjb25zdCBSYW5nZSogcmFuZ2UpIGNvbnN0Cit7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0g
bV9mcmFtZS0+dmlldygpOworICAgIHJldHVybiB2aWV3ID8gdmlldy0+Y29udGVudHNUb1dpbmRv
dyhJbnRSZWN0KHJhbmdlLT5ib3VuZGluZ1JlY3QoKSkpIDogRmxvYXRSZWN0KCk7Cit9ICAgICAg
ICAKKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKK3sKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpKTsKKyAgICAvLyBXaGVuIHVzZXIgbW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBh
dXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hvdyB0aGUgcGFuZWwKKyAgICAvLyBj
b250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29ycmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBj
YW4gcXVpY2tseSByZXZlcnQgdGhlCisgICAgLy8gdW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBI
ZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVsIHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0
CisgICAgLy8gdGhlIG5ldyBjYXJldCBwb3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgd29yZC4K
KyAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb24uaXNDYXJldCgpIHx8IGN1cnJlbnRTZWxlY3Rpb24g
PT0gb2xkU2VsZWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBWaXNpYmxlUG9zaXRpb24g
c2VsZWN0aW9uUG9zaXRpb24gPSBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0KCk7CisgICAgVmlzaWJs
ZVBvc2l0aW9uIGVuZFBvc2l0aW9uT2ZXb3JkID0gZW5kT2ZXb3JkKHNlbGVjdGlvblBvc2l0aW9u
LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgaWYgKHNlbGVjdGlvblBvc2l0aW9uICE9IGVu
ZFBvc2l0aW9uT2ZXb3JkKQorICAgICAgICByZXR1cm47CisKKyAgICBQb3NpdGlvbiBwb3NpdGlv
biA9IGVuZFBvc2l0aW9uT2ZXb3JkLmRlZXBFcXVpdmFsZW50KCk7CisgICAgaWYgKHBvc2l0aW9u
LmFuY2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQorICAg
ICAgICByZXR1cm47CisKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgp
OworICAgIGludCBlbmRPZmZzZXQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsK
KyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPm1hcmtlcnNGb3JOb2RlKG5vZGUpOworICAgIHNpemVfdCBtYXJrZXJDb3VudCA9
IG1hcmtlcnMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyQ291bnQ7
ICsraSkgeworICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyID0gbWFya2Vyc1tp
XTsKKyAgICAgICAgaWYgKCgobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50ICYmICFtYXJrZXIuZGVzY3JpcHRpb24uaXNOdWxsKCkpIHx8IG1hcmtlci50eXBlID09IERv
Y3VtZW50TWFya2VyOjpTcGVsbGluZykgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXIuZW5kT2Zm
c2V0KSA9PSBlbmRPZmZzZXQpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3RhcnRP
ZmZzZXQsIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQpOworICAgICAgICAgICAgU3RyaW5nIGN1cnJl
bnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoY3Vy
cmVudFdvcmQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSB3b3JkUmFuZ2U7CisgICAgICAgICAgICAgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7CisgICAgICAgICAg
ICAgICAgaWYgKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykKKyAgICAg
ICAgICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50
U3RyaW5nID0gbWFya2VyLmRlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgICAgICBzdGFydENv
cnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lv
bik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQor
eworICAgIGlmIChjbWQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNtZC0+c2hvdWxkUmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNh
dG9yKTsKK30KKworRWRpdG9yQ2xpZW50KiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpj
bGllbnQoKQoreworICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCkgPyBtX2ZyYW1lLT5wYWdlKCkt
PmVkaXRvckNsaWVudCgpIDogMDsKK30KKworVGV4dENoZWNrZXJDbGllbnQqIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKK3sKKyAgICBpZiAoRWRpdG9yQ2xpZW50
KiBvd25lciA9IGNsaWVudCgpKQorICAgICAgICByZXR1cm4gb3duZXItPnRleHRDaGVja2VyKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
c2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwg
Y29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3sKKyAgICBj
bGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbCh0eXBlLCBib3VuZGluZ0JveE9mUmVwbGFjZWRT
dHJpbmcsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZywgYWx0ZXJuYXRpdmVSZXBs
YWNlbWVudFN0cmluZ3MsIHRoaXMpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rp
b25QYW5lbCByZWFzb24pCit7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChyZWFzb24pOworfQorCitib29sIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpCit7CisgICAgcmV0dXJu
IGNsaWVudCgpICYmIGNsaWVudCgpLT5pc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKTsKK30KKwor
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudFN0cmluZykKK3sKKyAgICByZXR1cm4gY2xpZW50KCktPnJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlw
ZSwgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nKTsKK30KKwordm9pZCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrUmV2c2Vyc2VkKFBhc3NSZWZQdHI8UmFuZ2U+IGNo
YW5nZWRSYW5nZSkKK3sKKyAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJh
bmdlKQoreworICAgIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNl
ZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpKTsKK30KKworI2Vsc2UK
KworU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcihGcmFtZSopIHt9CitTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp+U3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcigpIHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxU
eXBlKSB7fQordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9wQ29ycmVjdGlv
blBhbmVsVGltZXIoKSB7fQordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNt
aXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIHt9Cit2b2lkIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4sIGNvbnN0IFN0cmlu
ZyYpIHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5Q29ycmVjdGlv
blBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+Jikge30K
K2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJl
Zm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKSB7IHJldHVybiBmYWxzZTsgfQordm9pZCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHt9
Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0
aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KSB7fQordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mKSB7fQordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0Nv
cnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYpIHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNvcnJl
Y3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmKSB7fQordm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24oKSB7fQordm9pZCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjptYXJrUmV2c2Vyc2VkKFBhc3NSZWZQdHI8UmFuZ2U+KSB7fQor
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxSYW5nZT4pIHt9Citib29s
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
aXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4pIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNTaG93aW5nQ29y
cmVjdGlvblBhbmVsKCkgeyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkgeyByZXR1
cm4gZmFsc2U7IH0KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWEzYWRmYjdkNzE1YWNkYjNhNDAyZjZlZjU2NDliYjUzN2FmMmYwYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXJfaAorI2RlZmluZSBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyX2gKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkKKy8vIFNvbWUgcGxhdGZvcm1zIHByb3ZpZGUgVUkgZm9yIHN1Z2dlc3Rp
bmcgYXV0b2NvcnJlY3Rpb24uCisjZGVmaW5lIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwg
MQorLy8gU29tZSBwbGF0Zm9ybXMgdXNlIHNwZWxsaW5nIGFuZCBhdXRvY29ycmVjdGlvbiBtYXJr
ZXJzIHRvIHByb3ZpZGUgdmlzdWFsIGN1ZS4KKy8vIE9uIHN1Y2ggcGxhdGZvcm0sIGlmIHdvcmQg
d2l0aCBtYXJrZXIgaXMgZWRpdGVkLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbWFya2VyLgorI2Rl
ZmluZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMQorI2Vsc2UKKyNkZWZpbmUgU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTCAwCisjZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJ
VElORyAwCisjZW5kaWYgLy8gI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKworI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVkaXRvckNsaWVudDsKK2NsYXNz
IEVkaXRDb21tYW5kOworY2xhc3MgUmFuZ2U7CitjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKK2Ns
YXNzIFZpc2libGVTZWxlY3Rpb247CisKK3N0cnVjdCBDb3JyZWN0aW9uUGFuZWxJbmZvIHsKKyAg
ICBlbnVtIFBhbmVsVHlwZSB7CisgICAgICAgIFBhbmVsVHlwZUNvcnJlY3Rpb24gPSAwLAorICAg
ICAgICBQYW5lbFR5cGVSZXZlcnNpb24sCisgICAgICAgIFBhbmVsVHlwZVNwZWxsaW5nU3VnZ2Vz
dGlvbnMKKyAgICB9OworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZDsKKyAg
ICBTdHJpbmcgcmVwbGFjZWRTdHJpbmc7CisgICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwor
ICAgIFBhbmVsVHlwZSBwYW5lbFR5cGU7CisgICAgYm9vbCBpc0FjdGl2ZTsKK307CisKK2VudW0g
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCB7CisgICAgUmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCA9IDAsCisgICAgUmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbElnbm9yZWQsCisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rp
b25QYW5lbEFjY2VwdGVkCit9OworCitjbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
IHsKK3B1YmxpYzoKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKik7Cisg
ICAgflNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgc3RhcnRDb3Jy
ZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUpOworICAgIHZv
aWQgc3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CisKKyAgICB2b2lkIGRpc21pc3MoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CisgICAgdm9pZCBzaG93KFBhc3NSZWZQdHI8
UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KTsKKworICAg
IHZvaWQgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpOworICAgIC8vIFJldHVybiB0cnVlIGlm
IGNvcnJlY3Rpb24gd2FzIGFwcGxpZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICBib29sIGFwcGx5
QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisKKyAgICB2b2lkIHJl
c3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmlu
ZyYgY29ycmVjdGlvbik7CisgICAgdm9pZCByZXNwb25kVG9BcHBsaWVkRWRpdGluZyhQYXNzUmVm
UHRyPEVkaXRDb21tYW5kPik7CisgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbik7CisKKyAgICB2b2lkIHN0b3BQZW5k
aW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pOworICAg
IHZvaWQgYXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb25BZnRlclR5cGluZyk7CisKKyAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3Vs
dChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOworICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0
aW9uKCk7CisKKyAgICBib29sIGhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3Q7CisgICAgYm9v
bCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1Jh
bmdlKSBjb25zdDsKKyAgICBib29sIGlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpOworICAgIGJv
b2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7CisKKyAgICB2b2lkIGNv
cnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cj4qKTsKKyAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJh
bmdlKTsKKyAgICB2b2lkIG1hcmtSZXZzZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJh
bmdlKTsKKworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKK3ByaXZhdGU6CisgICAg
Ly8gRW5jYXBzdWxhdGluZyBFZGl0b3JDbGllbnQgQVBJIHRvIGxvY2FsaXplIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwgaWZkZWYKKyAgICB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZl
UmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CisgICAgdm9pZCByZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CisKKyAgICBFZGl0b3JDbGllbnQqIGNsaWVu
dCgpOworICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpOworICAgIEZsb2F0UmVj
dCB3aW5kb3dSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqKSBjb25zdDsKKworICAgIEVkaXRvckNs
aWVudCogbV9jbGllbnQ7CisgICAgRnJhbWUqIG1fZnJhbWU7CisKKyAgICBUaW1lcjxTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyPiBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyOworICAgIENvcnJl
Y3Rpb25QYW5lbEluZm8gbV9jb3JyZWN0aW9uUGFuZWxJbmZvOworICAgIGJvb2wgbV9jb3JyZWN0
aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IDg0Mzc2NTg4OTg2NGVi
NmZkMjM2YjcyODk4ZTI5NmY1YzdiYzE5MDYuLjdjMWI1ZGZhMTAzOTMxZmMxYjdmN2EyMjlmYjI5
YmVkMjNkNTI4N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApA
QCAtMTQzLDExICsxNDMsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIFR5cGluZ0NvbQogICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAKLSNpZiBSRU1P
VkVfTUFSS0VSU19VUE9OX0VESVRJTkcKICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAg
ICBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCktPnJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1h
cmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKGlzU3BhY2VPck5ld2xpbmUodGV4dC5jaGFyYWN0ZXJz
KClbMF0pKTsKLSNlbmRpZgotCisgICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS0+
dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0
ZXh0LmNoYXJhY3RlcnMoKVswXSkpOworICAgIAogICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRl
eHQsIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCksIG9wdGlvbnMsIGNvbXBvc2l0aW9u
KTsKIH0KIApAQCAtMzMyLDEyICszMzAsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkKICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5k
YXJ5KTsKICAgICAgICAgaWYgKHAxICE9IHAyKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+ZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5k
aW5nU2VsZWN0aW9uKCkpOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAg
ICAgZWxzZSBpZiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCkKLSAg
ICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5zdGFydENvcnJlY3Rpb25Q
YW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY29tbWFuZFR5cGUpOwotI2VuZGlmCisgICAgICAgICAgICBk
b2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigp
OwogICAgIH0KIH0KIApAQCAtNDQ5LDkgKzQ0Myw4IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6bWFr
ZUVkaXRhYmxlUm9vdEVtcHR5KCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBraWxsUmluZykKIHsKLSNpZiBS
RU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcKLSAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0
b3IoKS0+cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQo
ZmFsc2UpOwotI2VuZGlmCisgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnVwZGF0
ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKwogICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b25BZnRlclVuZG87CiAKQEAgLTU0OCw5ICs1NDEsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRl
bGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5n
KQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBraWxsUmluZykKIHsKLSNpZiBSRU1PVkVfTUFSS0VS
U19VUE9OX0VESVRJTkcKLSAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+cmVtb3Zl
U3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoZmFsc2UpOwotI2Vu
ZGlmCisgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnVwZGF0ZU1hcmtlcnNGb3JX
b3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKwogICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BZnRlclVuZG87
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAppbmRleCA1OGMyMjgyYWJkMTY4OTlj
MGQ3ZjgyYzk0NWJjMThiMDdiN2RiODE2Li4wNzBhNjJmZTRmMDBiYmMwY2I3M2I1MTVkNWNiNmQy
MDAwNWU0ZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5n
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCkBAIC0yMTgsNiAr
MjE4LDE1IEBAIGlubGluZSBib29sIGlzV2hpdGVzcGFjZShVQ2hhciBjKQogewogICAgIHJldHVy
biBjID09IG5vQnJlYWtTcGFjZSB8fCBjID09ICcgJyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHQn
OwogfQorCitpbmxpbmUgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKFVDaGFyIGNo
YXJhY3RlcikKK3sKKyAgICAvLyBUaGVzZSBhcmUgY2hhcmFjdGVycyB0aGF0IGNhbiBiZWhhdmUg
YXMgd29yZCBib3VuZGFyaWVzLCBidXQgY2FuIGFwcGVhciB3aXRoaW4gd29yZHMuCisgICAgLy8g
SWYgdGhleSBhcmUganVzdCB0eXBlZCwgaS5lLiBpZiB0aGV5IGFyZSBpbW1lZGlhdGVseSBmb2xs
b3dlZCBieSBhIGNhcmV0LCB3ZSB3YW50IHRvIGRlbGF5IHRleHQgY2hlY2tpbmcgdW50aWwgdGhl
IG5leHQgY2hhcmFjdGVyIGhhcyBiZWVuIHR5cGVkLgorICAgIC8vIEZJWE1FOiB0aGlzIGlzIHJl
cXVpcmVkIHVudGlsIDY4NTMwMjcgaXMgZml4ZWQgYW5kIHRleHQgY2hlY2tpbmcgY2FuIGRvIHRo
aXMgZm9yIHVzLgorICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0ZXIgPT0g
cmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5jdHVhdGlv
bkdlcnNoYXlpbTsKK30KKwogU3RyaW5nIHN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShj
b25zdCBTdHJpbmcmLCBib29sIHN0YXJ0SXNTdGFydE9mUGFyYWdyYXBoLCBib29sIGVuZElzRW5k
T2ZQYXJhZ3JhcGgpOwogY29uc3QgU3RyaW5nJiBub25CcmVha2luZ1NwYWNlU3RyaW5nKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAppbmRleCBlZDkyZjExMmNiYTg3N2ZkNTJj
MzQ2NDA3ZjViNGZmZTI2MTIwZjZjLi44YTU4OTU1NmNjZTUwNzIwNzJkY2M4YjdhYjgwYzA1MjVh
ZjkwYTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC01MTEsNyArNTEx
LDcgQEAgcHVibGljOgogICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0
dXJuICZtX3RleHRDaGVja2VyQ2xpZW50OyB9CiAKICNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEVkaXRvciopIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBDb3JyZWN0aW9uUGFuZWxDb250cm9sbGVyKikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCkgeyB9CiAgICAgdmlydHVhbCBib29sIGlzU2hvd2luZ0NvcnJlY3Rpb25QYW5l
bCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JD
bGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKaW5kZXggZDVkZTZh
NDEwMmNiZDI3NjhkYWM5ZGEzZjVmMWFkOWVjZjgwM2Q1MC4uZWIwMzNiMDZmMDY4OWQyZmRlYjgy
NWE5ZDIxZGViMmE1NThiN2Y4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0
b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCkBAIC0y
Nyw3ICsyNyw3IEBACiAjaWZuZGVmIEVkaXRvckNsaWVudF9oCiAjZGVmaW5lIEVkaXRvckNsaWVu
dF9oCiAKLSNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWxJbmZvLmgiCisjaW5jbHVkZSAiU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBA
IC0xNTgsMTIgKzE1OCwxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFRleHRDaGVja2VyQ2xp
ZW50KiB0ZXh0Q2hlY2tlcigpID0gMDsKIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKICAgICBlbnVtIEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlIHsKICAgICAgICAgQXV0b2Nv
cnJlY3Rpb25FZGl0ZWQsCiAgICAgICAgIEF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQKICAgICB9Owot
ICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjbWVudFN0
cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdz
LCBFZGl0b3IqKSA9IDA7CisKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAg
dmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5n
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MsIENv
cnJlY3Rpb25QYW5lbENvbnRyb2xsZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBpc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNw
b25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBkNzc1NzcyYjVlZjlmOTZi
NDZhYzRjYWQzYTVhNzgzZjYyNGZkNmNjLi4yMjQ1ODc3ZTk3ODliZTE5ZTkxMmVhYWZiNTUzNDUz
MzNhNGYwNjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDMtMTYg
IE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1JlZmFjdG9yaW5nXSBBdXRvIGNvcnJlY3Rp
b24gcGFuZWwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgaXRzIG93biBjbGFzcy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NTcxICAgICAgICAKKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6
c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3ND
b3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojppc1Nob3dpbmdDb3Jy
ZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpyZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKToKKwogMjAxMS0wMy0xNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICBGb3Jnb3QgdG8gc2F2ZSBhIG1vZGlmaWNhdGlvbiB0byB0aGlz
IGZpbGUgd2hlbiBjb21taXR0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCAxZmExMzJhZDZjNWJkNDM3OWZlMGJiODVj
OWU2ZmYwZDY2YjExNzM1Li5mNDhiNmEzNDZkYTA0ZDRlYzI3N2NhMjkyMDIyMjBmN2JmYzY0NTEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaApAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3JlOjpTcGVsbENoZWNrZXIqLCBpbnQsIGNvbnN0IFdURjo6
U3RyaW5nJik7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
LSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdC
b3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNv
bnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgV1RGOjpWZWN0b3I8V1RG
OjpTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgV2ViQ29yZTo6RWRpdG9y
Kik7CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5k
aW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFdURjo6VmVjdG9y
PFdURjo6U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MsIFdlYkNvcmU6OkNv
cnJlY3Rpb25QYW5lbENvbnRyb2xsZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAgICAgdmlydHVh
bCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25z
ZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJp
bmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCA2OWRkNTc0NzMxYjQ0YjQzMGMyNzQ1
OGU3MjNiNDFjNGRlNTE3NGIwLi5hYmI4MDI4ZjA3YmFmOTczZGZkNTY0MDEwYzE1ZWFmMTdmZTll
ZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lm1tCkBAIC04OTEsNyArODkxLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXIK
IH0KIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi12b2lk
IFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUgcGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5n
Qm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0
aXZlUmVwbGFjZW1lbnRTdHJpbmdzLCBFZGl0b3IqIGVkaXRvcikgewordm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlIHBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2Vt
ZW50U3RyaW5ncywgQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlciogY29udHJvbGxlcikgewogICAg
IGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bElnbm9yZWQpOwogCiAgICAgLy8gTmVlZCB0byBleHBsaWNpdGx5IHVzZSB0aGVzZSBsb2NhbCBO
U1N0cmluZyBvYmplY3RzLCBiZWNhdXNlIHRoZSBDKysgcmVmZXJlbmNlcyBtYXkgYmUgaW52YWxp
ZGF0ZWQgYnkgdGhlIHRpbWUgdGhlIGJsb2NrIGJlbG93IGlzIGV4ZWN1dGVkLgpAQCAtOTMyLDcg
KzkzMiw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNv
cmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwCiAgICAgICAgICAgICAgICAgW1tOU1Nw
ZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlv
blJlc3BvbnNlQWNjZXB0ZWQgdG9Db3JyZWN0aW9uOmFjY2VwdGVkU3RyaW5nIGZvcldvcmQ6cmVw
bGFjZWRTdHJpbmdBc05TU3RyaW5nIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFn
OlttX3dlYlZpZXcgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddXTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGVkaXRvci0+aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0
KFN0cmluZyhhY2NlcHRlZFN0cmluZykpOworICAgICAgICBjb250cm9sbGVyLT5oYW5kbGVDb3Jy
ZWN0aW9uUGFuZWxSZXN1bHQoU3RyaW5nKGFjY2VwdGVkU3RyaW5nKSk7CiAgICAgfV07CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxYzQ5ZDViOTE2ZjI0ODE2YzNiMWUwYWYyNTlmOTMxMmMwYzJhNGY5Li41
NzNiNjA5MzM2MzJhZDNiNzNlYzJmZWRmNDdjNWFmZjk1ZGMyM2RiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTEtMDMtMTYgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1Jl
ZmFjdG9yaW5nXSBBdXRvIGNvcnJlY3Rpb24gcGFuZWwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgaXRz
IG93biBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU1NTcxCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5oOgorCiAyMDExLTAzLTE2ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4ucG91
bGFpbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJp
c3RpYW5zZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCBmYTg0MjZhMzhlOTRmYmUzZjQxNjU5
ODlmODE1MmYzYWQ3NGU2MDc4Li45NjMxMzk2NjliNDQxM2U4MTA1ZDkwYTM1MDY5YTgwMGM3ODEw
ZTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7CiAgICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlNwZWxsQ2hlY2tl
ciosIGludCwgY29uc3QgV1RGOjpTdHJpbmcmKTsKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgdmlydHVhbCB2b2lkIHNo
b3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdz
LCBXZWJDb3JlOjpFZGl0b3IqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5l
bChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MsIFdlYkNvcmU6OkNvcnJl
Y3Rpb25QYW5lbENvbnRyb2xsZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5
cGUsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86419</attachid>
            <date>2011-03-21 22:14:40 -0700</date>
            <delta_ts>2011-03-21 22:45:48 -0700</delta_ts>
            <desc>Updated to ToT</desc>
            <filename>bug-55571-20110322141438.patch</filename>
            <type>text/plain</type>
            <size>94888</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE2NDMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMjQxMjdl
OTNlNGQ5MDdjZTdhNjlmOWYxYzA2ODQyZTVlMDNkNGU3MS4uYTU5MjJkOTI0YWY4NWQyNGZhZjA0
MDgxYjMyMTUwMWQ2OThiODE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY2OCw2ICs2Njgs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGVjODY0MTY2MTJkNDkwOWQ1ZTRlYjdiYTFm
OTYzMzA5ODUxYzQ5OTQuLjBiZTdjZmM5ODdkNDVjMTI3ODhjNDgyYjcwNDBkMjU4ZjFmNmRmMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NCBAQAorMjAxMS0wMy0xNiAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQg
YmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEKKworICAgICAgICBFeHRyYWN0ZWQgY29kZSBpbnNp
ZGUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpbnRvCisgICAgICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhh
dmlvciBjaGFnbmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oOiBSZW1vdmVkLiAo
Q29ycmVjdGlvblBhbmVsSW5mbyBpcyBtb3ZlZCB0byBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyLmgpCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpFZGl0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp+RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHA6
IERpdHRvLiAgICAgICAgCisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6bWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjp+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0
b3BDb3JyZWN0aW9uUGFuZWxUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlQZW5kaW5nQ29ycmVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYXNQZW5k
aW5nQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5Q29ycmVjdGlv
blBhbmVsSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFw
cGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtSZXZzZXJzZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3dDb3JyZWN0aW9uUGFu
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZVJldmVyc2VkKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuaDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOgorICAgICAg
ICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzQW1iaWd1b3Vz
Qm91bmRhcnlDaGFyYWN0ZXIpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKToK
KyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgorCiAyMDExLTAzLTIxICBBYmhpc2hlayBB
cnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGE4ZmVhZGJmZjkzMDY5YjY3N2MwM2Y2ODNh
OWQwMDQ5NGU5YmRmMjUuLjQ4ZDZiZDU4ZGJkMzgwYThkMWU0NjI5NzdkNzI5OWM5NjBjNjk1NTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xNDQ5LDYgKzE0NDksOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bs
aXRFbGVtZW50Q29tbWFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVt
ZW50Q29tbWFuZC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggM2U2OGI1NGJlNjhlOThiYzUz
M2Q5ZjQ4ZDg1MjdiODA5NmVmNGNhMi4uNTk2ODY4YTUwOTQ4Mzk5MDRkNDk1MDViNTIxYmVhYTBj
YWZlYzY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTc0NCw3ICs3NDQsNiBAQCBfX1pON1dl
YkNvcmU2RWRpdG9yMjRpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWxFdgogX19aTjdXZWJDb3JlNkVk
aXRvcjI2ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2
aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2d3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmRFUktOM1dURjZTdHJpbmdFUktOUzFfNlZlY3RvcklTMl9MbTBF
RUUKLV9fWk43V2ViQ29yZTZFZGl0b3IyN2hhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdEVSS04z
V1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3IyOWNhbkRlY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyOWNhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzMGFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlv
bkVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRU5TXzEwRWRpdEFjdGlvbkUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCAwZWM2OGU0ZTkyMDZmNGFhNjExYTQ2MjhiN2YxNWJjMGZmNTE5MjllLi44N2M4MTBl
ZDdkNWFmMTgwZWUyMWE0OTgwZjhiOTUxZTM0ZGYwYWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0y
ODE3LDYgKzI4MTcsOSBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvU21hcnRSZXBsYWNlQ0YuY3Bw
JywKICAgICAgICAgICAgICdlZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAnLAogICAgICAgICAg
ICAgJ2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCcsCisgICAgICAgICAgICAnZWRpdGluZy9TcGVs
bENoZWNrZXIuaCcsCisgICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmNwcCcsCisgICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5o
JywKICAgICAgICAgICAgICdlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KaW5kZXggNTRjMDA5OWEzMDFiNTc4ODAxMzJlZTAwMDJhOTI0OGVhM2U1YmFhMy4uYWQx
Y2ZkN2NmZjljNzMwNGQwY2RjNjcxMDZkYzg5YWExMGU0NjNkYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAg
LTU5MSw2ICs1OTEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1
dGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwIFwKICAgICBl
ZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgXAorICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5jcHAgXAogICAgIGVkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgXAog
ICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0
VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOTJjZTg4ZGFiZTgxMjgzOTE0ODMz
OWFjMTI4Zjc2NGFkYmFmYmQwMi4uNzZmOTUwMGZiZjA2NDQ1NGU0MGYxMTkyMDliMWU1MGU5NmUw
NmU0YiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
QEAgLTUwMTM0LDYgKzUwMTM0LDYyIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIuY3BwIgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJ
CQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgor
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5h
bWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+
CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9
IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1
cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZV9MVENHfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxlZGl0aW5nXFNwZWxsQ2hlY2tlci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGMzYjFjMzNkNjQwYjExZmVhNzNmMjRiOGEwMDBiYjUzMTM1YTVjZDcuLjA0NTMz
Y2U5YjBjNTgxMjI4OWQzNjI1ZjE0MDMxMmRiZTlhN2JkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMxODIsNiArMzE4Miw4
IEBACiAJCUE2MjJBOEZDMTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEY2
MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCAqLzsgfTsKIAkJQTYy
MkE4RkQxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEY3MTIyQzQ0QTYwMEE3
ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmggKi87IH07CiAJCUE2MjJBOEZGMTIyQzQ0QTYw
MEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTYyMkE4RjkxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5k
aW5nLmggKi87IH07CisJCUE3MDA1Q0NDMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3MDA1Q0NBMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmNwcCAqLzsgfTsKKwkJQTcwMDVDQ0QxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3MDA1Q0NCMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTcxNTFCRDgxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE1MUJE
NzEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzE4NzYwRTBCMkExMjAxMDBBMTZF
Q0UgLyogRHJhZ0FjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3MTg3NjBEMEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTg3ODkwMEIy
RDA0QUMwMEExNkVDRSAvKiBEcmFnQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTg3ODhGMEIyRDA0QUMwMEExNkVDRSAvKiBE
cmFnQ29udHJvbGxlck1hYy5tbSAqLzsgfTsKQEAgLTQ3NzUsNyArNDc3Nyw2IEBACiAJCUI3NzZE
NDNEMTEwNDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjc3NkQ0M0MxMTA0NTI3NTAwQkVCMEVDIC8q
IFByaW50Q29udGV4dC5jcHAgKi87IH07CiAJCUI4ODVFOEQ0MTFFMDZERDIwMDlGRkJGNCAvKiBJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4RDIxMUUwNkREMjAwOUZGQkY0IC8qIEluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgKi87IH07CiAJCUI4ODVFOEQ1MTFFMDZERDIw
MDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4ODVFOEQzMTFFMDZERDIwMDlGRkJG
NCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9ICgpOyB9OyB9OwotCQlCOEE2QTZENTEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVj
dGlvblBhbmVsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCOERCREI0
QjEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCOERCREI0NzEzMEIwRjhBMDBGNUNE
QjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgKi87IH07CiAJCUI4REJEQjRDMTMwQjBGOEEw
MEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCOERCREI0ODEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2Vs
ZWN0aW9uQ29tbWFuZC5oICovOyB9OwogCQlCOERCREI0RDEzMEIwRjhBMDBGNUNEQjEgLyogU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAgKi87IH07CkBAIC05NjY1LDYgKzk2NjYsOCBAQAogCQlBNjIyQThG
NjEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcDsgcGF0aCA9
IGdlbmVyaWMvQmluZGluZ1NlY3VyaXR5QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE2MjJBOEY3MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJpbmRpbmdTZWN1cml0eUJhc2UuaDsg
cGF0aCA9IGdlbmVyaWMvQmluZGluZ1NlY3VyaXR5QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJpY0JpbmRpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR2VuZXJpY0JpbmRpbmcuaDsgcGF0aCA9
IGdlbmVyaWMvR2VuZXJpY0JpbmRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3MDA1Q0NC
MTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0
IC8qIFRleHRDaGVja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRDaGVja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTg3
NjBEMEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEcmFnQWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzE4Nzg4RjBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xsZXJNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnQ29udHJvbGxlck1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMTY1LDcgKzExMTY4LDYgQEAKIAkJQjc3
NkQ0M0MxMTA0NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmludENvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCODg1RThEMjExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI4
QTZBNkQ0MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcnJlY3Rpb25QYW5lbEluZm8uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDcxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVj
dGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2V0
U2VsZWN0aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4REJE
QjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldFNlbGVjdGlvbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNTQzNiw3ICsxNTQzOCw2IEBACiAJCQkJOTMzMDlEOEMwOTlFNjQ5MTAwNTZFNTgxIC8q
IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuaCAqLywKIAkJCQk5MzMwOUQ4RDA5OUU2NDkxMDA1NkU1
ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5RDhFMDk5RTY0OTEw
MDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFuZC5oICovLAotCQkJCUI4QTZBNkQ0MTI3QjMz
OEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmggKi8sCiAJCQkJRDBCMDU1NjcwOUM2
NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmNwcCAqLywKIAkJCQlEMEIwNTU2NjA5
QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQuaCAqLywKIAkJCQkxQzRDOEY2MzBB
RDg2NTVEMDA5NDc1Q0UgLyogRGVsZXRlQnV0dG9uLmNwcCAqLywKQEAgLTE1NTE4LDYgKzE1NTE5
LDggQEAKIAkJCQlBNzhGRTEzQTEyMzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVja2VyLmggKi8s
CiAJCQkJQjhEQkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwICovLAogCQkJCUI4REJEQjRBMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmggKi8sCisJCQkJQTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwICovLAorCQkJCUE3MDA1Q0NCMTMzMEM0QkEwMDBD
QzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggKi8sCiAJCQkJOTMzMDlEQzIw
OTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5
REMzMDk5RTY0OTEwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21tYW5kLmggKi8sCiAJCQkJOTMz
MDlEQzQwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb21tYW5kLmNwcCAqLywKQEAg
LTE5ODM4LDcgKzE5ODQxLDYgQEAKIAkJCQk5MzUyMDg4MjA5QkQ0NUU5MDBGMjAzOEQgLyogQ29v
a2llSmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2NDEyRDI2RTM4MDBFNzk0MTUgLyog
Q29va2llU3RvcmFnZUNGTmV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTZGRDQ4ODBGNjc2RTU3
MDAwOTI4NzMgLyogQ29vcmRpbmF0ZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUI4QTZBNkQ1MTI3
QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODBFNkQwNDBBMTk4OUNBMDA3RkI4QzUgLyogQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM1RUI5NzkwRTgyMDY5MjAwQjI1OTY1IC8qIENvdW50ZXJDb250ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzVFQjk1MTBFODIwNTZCMDBCMjU5NjUgLyogQ291bnRlckRpcmVjdGl2ZXMu
aCBpbiBIZWFkZXJzICovLApAQCAtMjIxMjYsNiArMjIxMjgsNyBAQAogCQkJCTc1NDE1QjAwMTI5
NThENUUwMDNBRDY2OSAvKiBTcGVlY2hJbnB1dFJlc3VsdExpc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3OEZFMTNDMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUI4REJEQjRFMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyog
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlF
MTIwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzMzA5RTE0MDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTYwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMjUzNDYs
NiArMjUzNDksNyBAQAogCQkJCTMxOUU2ODg3MTMyN0M5MTEwMDRBQzkxQSAvKiBKU1dlYktpdEFu
aW1hdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTlFNjlCMjEzMjk5QkJEMDA0
QUM5MUEgLyogV2ViS2l0QW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxOUU2OUI1
MTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUE3MDA1Q0NDMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJl
Y3Rpb25QYW5lbEluZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYwOTllMTYy
ZmE3MmY3ZjEzOWQ2M2ZjMTM3OGM0YjRiMzNmM2ZlNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25Q
YW5lbEluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgQ29ycmVjdGlvblBhbmVsSW5mb19oCi0jZGVmaW5lIENvcnJlY3Rpb25QYW5lbEluZm9faAot
Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQotLy8gU29tZSBwbGF0Zm9ybXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhdXRv
Y29ycmVjdGlvbi4KLSNkZWZpbmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAxCi0vLyBT
b21lIHBsYXRmb3JtcyB1c2Ugc3BlbGxpbmcgYW5kIGF1dG9jb3JyZWN0aW9uIG1hcmtlcnMgdG8g
cHJvdmlkZSB2aXN1YWwgY3VlLgotLy8gT24gc3VjaCBwbGF0Zm9ybSwgaWYgd29yZCB3aXRoIG1h
cmtlciBpcyBlZGl0ZWQsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBtYXJrZXIuCi0jZGVmaW5lIFJF
TU9WRV9NQVJLRVJTX1VQT05fRURJVElORyAxCi0jZWxzZQotI2RlZmluZSBTVVBQT1JUX0FVVE9D
T1JSRUNUSU9OX1BBTkVMIDAKLSNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDAK
LSNlbmRpZiAvLyAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQotCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1zdHJ1Y3QgQ29ycmVjdGlvblBhbmVsSW5mbyB7Ci0gICAgZW51bSBQYW5lbFR5cGUg
ewotICAgICAgICBQYW5lbFR5cGVDb3JyZWN0aW9uID0gMCwKLSAgICAgICAgUGFuZWxUeXBlUmV2
ZXJzaW9uLAotICAgICAgICBQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zCi0gICAgfTsKLQot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQ7Ci0gICAgU3RyaW5nIHJlcGxhY2Vk
U3RyaW5nOwotICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZzsKLSAgICBQYW5lbFR5cGUgcGFu
ZWxUeXBlOwotICAgIGJvb2wgaXNBY3RpdmU7Ci19OwotCi1lbnVtIFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWwgewotICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWxDYW5jZWxsZWQgPSAwLAotICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJ
Z25vcmVkLAotICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZAot
fTsKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENvcnJlY3Rpb25QYW5lbElu
Zm9faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCmluZGV4IGU0
ZTBiYmI2Y2ZlMGMwOWEwNzU2YTk2OWVmNjgzZjVhODQ3NjIzZmEuLmYzOGNiZTYyYTYwZGUxMWNk
MGYxYzExM2E5OWYwYzJkMDBlYWViOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmdBbGxJbk9uZS5jcHAKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlIDxTZXROb2RlQXR0cmli
dXRlQ29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8U21hcnRSZXBsYWNlLmNwcD4KICNpbmNsdWRlIDxT
bWFydFJlcGxhY2VDRi5jcHA+CisjaW5jbHVkZSA8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5jcHA+CiAjaW5jbHVkZSA8U3BlbGxDaGVja2VyLmNwcD4KICNpbmNsdWRlIDxTcGxpdEVsZW1l
bnRDb21tYW5kLmNwcD4KICNpbmNsdWRlIDxTcGxpdFRleHROb2RlQ29tbWFuZC5jcHA+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggODgwNzk2NTA2OGE0MzkxMGE5YWQ5MzY1MWUxNDYy
ZWNjOGU5Y2Y5YS4uYzQ2ZWE0ODk5ZjU0YThlMTMxOTBkMjI0OWY0MzY4ZTkzYjlhYzg3YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkRXZlbnQuaCIKICNpbmNs
dWRlICJDb21wb3NpdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkNyZWF0ZUxpbmtDb21tYW5kLmgiCiAjaW5jbHVkZSAiRGVs
ZXRlQnV0dG9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
aCIKQEAgLTk0LDM1ICs5NSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBu
YW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKLXsKLSAg
ICAvLyBUaGVzZSBhcmUgY2hhcmFjdGVycyB0aGF0IGNhbiBiZWhhdmUgYXMgd29yZCBib3VuZGFy
aWVzLCBidXQgY2FuIGFwcGVhciB3aXRoaW4gd29yZHMuCi0gICAgLy8gSWYgdGhleSBhcmUganVz
dCB0eXBlZCwgaS5lLiBpZiB0aGV5IGFyZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGNhcmV0
LCB3ZSB3YW50IHRvIGRlbGF5IHRleHQgY2hlY2tpbmcgdW50aWwgdGhlIG5leHQgY2hhcmFjdGVy
IGhhcyBiZWVuIHR5cGVkLgotICAgIC8vIEZJWE1FOiB0aGlzIGlzIHJlcXVpcmVkIHVudGlsIDY4
NTMwMjcgaXMgZml4ZWQgYW5kIHRleHQgY2hlY2tpbmcgY2FuIGRvIHRoaXMgZm9yIHVzLgotICAg
IHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0ZXIgPT0gcmlnaHRTaW5nbGVRdW90
YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5jdHVhdGlvbkdlcnNoYXlpbTsKLX0K
LQotc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtl
clR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVj
dG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVj
dGlvbiwgKCkpOwotICAgIGlmIChtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmlzRW1wdHko
KSkgewotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0
aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7Ci0gICAgICAg
IG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVs
bENoZWNraW5nRXhlbXB0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yQXV0
b0NvcnJlY3Rpb247Ci19Ci0KLXN0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkKLXsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5cGVz
Rm9yUmVwbGFjZW1lbnQsICgpKTsKLSAgICBpZiAobWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5hcHBlbmQoRG9j
dW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JSZXBsYWNl
bWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotICAg
IH0KLSAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudDsKLX0KLQogLy8gV2hlbiBh
biBldmVudCBoYW5kbGVyIGhhcyBtb3ZlZCB0aGUgc2VsZWN0aW9uIG91dHNpZGUgb2YgYSB0ZXh0
IGNvbnRyb2wKIC8vIHdlIHNob3VsZCB1c2UgdGhlIHRhcmdldCBjb250cm9sJ3Mgc2VsZWN0aW9u
IGZvciB0aGlzIGVkaXRpbmcgb3BlcmF0aW9uLgogVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6OnNl
bGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQpAQCAtNTE4LDQ4ICs0OTAsNyBAQCB2b2lk
IEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBvbGRTZWxlY3Rpb24pCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpOwogICAgIG1fZGVsZXRlQnV0dG9uQ29udHJvbGxlci0+
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwotCi0jaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgIC8vIFdoZW4gdXNlciBt
b3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3
ZSBzaG93IHRoZSBwYW5lbAotICAgIC8vIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHByZS1jb3Jy
ZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJldmVydCB0aGUKLSAgICAvLyB1
bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24gcGFuZWwg
dGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKLSAgICAvLyB0aGUgbmV3IGNhcmV0IHBvc2l0aW9u
IGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgotICAgIGlmICghY3VycmVudFNlbGVjdGlvbi5pc0Nh
cmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlvbiA9IGN1cnJlbnRTZWxl
Y3Rpb24uc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25PZldvcmQgPSBl
bmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBp
ZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRpb25PZldvcmQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2
YWxlbnQoKTsKLSAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIG5vZGUg
PSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgaW50IGVuZE9mZnNldCA9IHBvc2l0aW9u
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFy
a2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7
Ci0gICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IERvY3VtZW50
TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAgICBpZiAoKChtYXJrZXIudHlwZSA9
PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgJiYgIW1hcmtlci5kZXNjcmlwdGlvbi5pc051
bGwoKSkgfHwgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0
aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQpID09IGVuZE9mZnNldCkgewotICAgICAgICAg
ICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGZyYW1lKCktPmRvY3Vt
ZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCk7
Ci0gICAgICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdl
dCgpKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50V29yZC5sZW5ndGgoKSkgewotICAgICAgICAg
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5n
ZTsKLSAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcg
PSBjdXJyZW50V29yZDsKLSAgICAgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9jdW1l
bnRNYXJrZXI6OlNwZWxsaW5nKQotICAgICAgICAgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25Q
YW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlv
bnMpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb247Ci0g
ICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvLyBT
VVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6
cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1Nl
bGVjdGlvbikKQEAgLTEwNjIsMTAgKzk5Myw3IEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGlu
ZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRl
bnRDaGFuZ2VkRXZlbnRzKCpjbWQpOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
KGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkpOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9Q
QU5FTAotICAgIGlmIChjbWQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNtZC0+c2hvdWxkUmV0
YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5k
aWNhdG9yKTsKLSNlbmRpZgorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0FwcGxp
ZWRFZGl0aW5nKGNtZC5nZXQoKSk7CiAKICAgICAvLyBEb24ndCBjbGVhciB0aGUgdHlwaW5nIHN0
eWxlIHdpdGggdGhpcyBzZWxlY3Rpb24gY2hhbmdlLiAgV2UgZG8gdGhvc2UgdGhpbmdzIGVsc2V3
aGVyZSBpZiBuZWNlc3NhcnkuCiAgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1Nl
bGVjdGlvbiwgZmFsc2UsIGZhbHNlKTsKQEAgLTExMjUsMTYgKzEwNTMsMTMgQEAgRWRpdG9yOjpF
ZGl0b3IoRnJhbWUqIGZyYW1lKQogICAgICwgbV9zaG91bGRTdHlsZVdpdGhDU1MoZmFsc2UpCiAg
ICAgLCBtX2tpbGxSaW5nKGFkb3B0UHRyKG5ldyBLaWxsUmluZykpCiAgICAgLCBtX3NwZWxsQ2hl
Y2tlcihuZXcgU3BlbGxDaGVja2VyKGZyYW1lLCBmcmFtZS0+cGFnZSgpID8gZnJhbWUtPnBhZ2Uo
KS0+ZWRpdG9yQ2xpZW50KCktPnRleHRDaGVja2VyKCkgOiAwKSkKLSAgICAsIG1fY29ycmVjdGlv
blBhbmVsVGltZXIodGhpcywgJkVkaXRvcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCkKKyAg
ICAsIG1fc3BlbGxpbmdDb3JyZWN0b3IobmV3IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIo
ZnJhbWUpKQogICAgICwgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkKGZhbHNlKQog
ewogfQogCiBFZGl0b3I6On5FZGl0b3IoKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKLSAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWxJZ25vcmVkKTsKLSNlbmRpZgogfQogCiB2b2lkIEVkaXRvcjo6Y2xlYXIoKQpA
QCAtMTE3OSw3ICsxMTA0LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGlu
Z1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAodGV4
dC5sZW5ndGgoKSA9PSAxICYmIGlzUHVuY3QodGV4dFswXSkgJiYgIWlzQW1iaWd1b3VzQm91bmRh
cnlDaGFyYWN0ZXIodGV4dFswXSkpCiAgICAgICAgIHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRv
Y29ycmVjdGlvbiA9IHRydWU7CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCA9
IHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlvbiAmJiBhcHBseUF1dG9jb3JyZWN0
aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25X
YXNBcHBsaWVkID0gc2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0aW9uICYmIG1fc3Bl
bGxpbmdDb3JyZWN0b3ItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJp
YXRlKCk7CiAKICAgICAvLyBHZXQgdGhlIHNlbGVjdGlvbiB0byB1c2UgZm9yIHRoZSBldmVudCB0
aGF0IHRyaWdnZXJlZCB0aGlzIGluc2VydFRleHQuCiAgICAgLy8gSWYgdGhlIGV2ZW50IGhhbmRs
ZXIgY2hhbmdlZCB0aGUgc2VsZWN0aW9uLCB3ZSBtYXkgd2FudCB0byB1c2UgYSBkaWZmZXJlbnQg
c2VsZWN0aW9uCkBAIC0xMjE1LDcgKzExNDAsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0TGluZUJy
ZWFrKCkKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVk
ID0gYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKKyAgICBi
b29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlB
dXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21t
YW5kOjppbnNlcnRMaW5lQnJlYWsobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25J
c0FwcGxpZWQgPyBUeXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6
IDApOwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCkBAIC0x
MjMzLDcgKzExNTgsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkK
ICAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gYXBw
bHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKKyAgICBib29sIGF1
dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlBdXRvY29y
cmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjpp
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rp
b25Jc0FwcGxpZWQgPyBUeXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRv
ciA6IDApOwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCkBA
IC0xNDY0LDcgKzEzODksNyBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxh
Y2VtZW50KCkKIAogYm9vbCBFZGl0b3I6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5h
YmxlZCgpCiB7Ci0gICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5pc0F1dG9tYXRpY1Nw
ZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKKyAgICByZXR1cm4gbV9zcGVsbGluZ0NvcnJlY3Rv
ci0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7CiB9CiAKIHZvaWQgRWRp
dG9yOjp0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKQpAQCAtMjA2MCwyNCArMTk4
NSw5IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKQogeworICAgIG1f
c3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJU
eXBpbmcpOworCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSNpZiBTVVBQT1JUX0FVVE9DT1JS
RUNUSU9OX1BBTkVMCi0gICAgLy8gQXBwbHkgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUg
bmV4dCByb3VuZCBvZiBzcGVsbCBjaGVja2luZy4KLSAgICBib29sIGRvQXBwbHlDb3JyZWN0aW9u
ID0gdHJ1ZTsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IHNlbGVjdGlv
bkFmdGVyVHlwaW5nLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFdvcmQgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIExl
ZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIFJpZ2h0V29y
ZElmT25Cb3VuZGFyeSkpOwotICAgIGlmIChjdXJyZW50V29yZC52aXNpYmxlRW5kKCkgPT0gc3Rh
cnRPZlNlbGVjdGlvbikgewotICAgICAgICBTdHJpbmcgd29yZFRleHQgPSBwbGFpblRleHQoY3Vy
cmVudFdvcmQudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Ci0gICAgICAgIGlmICh3b3JkVGV4
dC5sZW5ndGgoKSA+IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcih3b3JkVGV4dFt3
b3JkVGV4dC5sZW5ndGgoKSAtIDFdKSkKLSAgICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0g
ZmFsc2U7Ci0gICAgfQotICAgIGlmIChkb0FwcGx5Q29ycmVjdGlvbikKLSAgICAgICAgZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0
ZWQpOwotICAgIGVsc2UKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkLmNsZWFyKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5
cGluZyk7Ci0jZW5kaWYKICAgICBUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaGVja2luZ09wdGlv
bnMgPSAwOwogICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAg
ICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IE1hcmtTcGVsbGluZzsKQEAgLTIxMDQsNyArMjAx
NCw2IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgfQogCiAjZWxzZQotICAgIFVOVVNF
RF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7CiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIyMTksNyArMjEyOCw3
IEBAIHZvaWQgRWRpdG9yOjptYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCiB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaGVja2luZ09wdGlvbnMsIFJhbmdlKiBz
cGVsbGluZ1JhbmdlLCBSYW5nZSogZ3JhbW1hclJhbmdlKQogewogICAgIC8vIFRoZXJlIHNob3Vs
ZG4ndCBiZSBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGF0IHRoaXMgbW9tZW50LgotICAgIEFTU0VS
VCghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKTsKKyAgICBBU1NFUlQo
IW1fc3BlbGxpbmdDb3JyZWN0b3ItPmhhc1BlbmRpbmdDb3JyZWN0aW9uKCkpOwogCiAgICAgYm9v
bCBzaG91bGRNYXJrU3BlbGxpbmcgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYgTWFya1NwZWxsaW5n
OwogICAgIGJvb2wgc2hvdWxkTWFya0dyYW1tYXIgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYgTWFy
a0dyYW1tYXI7CkBAIC0yMjkxLDExICsyMjAwLDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gK
ICAgICB9CiAgICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFyYWdyYXBo
LnRleHRDaGFyYWN0ZXJzKCksIHBhcmFncmFwaC50ZXh0TGVuZ3RoKCksIGNoZWNraW5nVHlwZXMs
IHJlc3VsdHMpOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgIC8vIElm
IHRoaXMgY2hlY2tpbmcgaXMgb25seSBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBz
aG91bGRuJ3QgYm90aGVyIHRvIG1hcmsgbWlzc3BlbGxpbmdzLgogICAgIGlmIChzaG91bGRTaG93
Q29ycmVjdGlvblBhbmVsKQogICAgICAgICBzaG91bGRNYXJrU3BlbGxpbmcgPSBmYWxzZTsKLSNl
bmRpZgogCiAgICAgaW50IG9mZnNldER1ZVRvUmVwbGFjZW1lbnQgPSAwOwogCkBAIC0yMzE0LDEw
ICsyMjIxLDggQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICAgICAgaWYgKHNob3VsZE1h
cmtTcGVsbGluZyAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYm
IHJlc3VsdExvY2F0aW9uID49IHNwZWxsaW5nUGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSAmJiBy
ZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA8PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYm
ICFyZXN1bHRFbmRzQXRBbWJpZ3VvdXNCb3VuZGFyeSkgewogICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICBSZWZQ
dHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBzcGVsbGluZ1BhcmFncmFwaC5zdWJyYW5nZShy
ZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMCi0gICAgICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5o
YXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENo
ZWNraW5nRXhlbXB0aW9uKSkKKyAgICAgICAgICAgIGlmICghbV9zcGVsbGluZ0NvcnJlY3Rvci0+
aXNTcGVsbGluZ01hcmtlckFsbG93ZWQobWlzc3BlbGxpbmdSYW5nZSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0jZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAg
ICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCktPmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcpOwogICAgICAgICB9IGVsc2UgaWYgKHNob3VsZE1hcmtHcmFtbWFyICYm
IHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBncmFtbWFyUGFyYWdy
YXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMocmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCkpIHsK
ICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49
IDApOwpAQCAtMjM3NiwyNCArMjI4MSwxNiBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAg
ICAgICAgICAgaWYgKCFkb1JlcGxhY2VtZW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICAgICAgaWYgKHNob3Vs
ZFNob3dDb3JyZWN0aW9uUGFuZWwpIHsKKyAgICAgICAgICAgICAgICAvLyBzaG91bGRTaG93Q29y
cmVjdGlvblBhbmVsIGNhbiBiZSB0cnVlIG9ubHkgd2hlbiB0aGUgcGFuZWwgaXMgYXZhaWxhYmxl
LgogICAgICAgICAgICAgICAgIGlmIChyZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA9PSBz
cGVsbGluZ1JhbmdlRW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkg
c2hvdyB0aGUgY29ycmVjdGlvbiBwYW5lbCBvbiB0aGUgbGFzdCB3b3JkLgotICAgICAgICAgICAg
ICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UocmFuZ2VU
b1JlcGxhY2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYm91bmRpbmdCb3guaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHJhbmdlVG9SZXBs
YWNlOwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAgICAgICAgICAgICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSByZXN1bHQtPnJl
cGxhY2VtZW50OwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNB
Y3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rp
b25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCByZXN1bHQtPnJlcGxhY2VtZW50LCBW
ZWN0b3I8U3RyaW5nPigpLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zcGVsbGluZ0Nv
cnJlY3Rvci0+c2hvdyhyYW5nZVRvUmVwbGFjZSwgcmVzdWx0LT5yZXBsYWNlbWVudCk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBh
bmVsLCB3ZSBpZ25vcmUgb3RoZXIgY29ycmVjdGlvbiBvciByZXBsYWNlbWVudC4KICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSNlbmRpZgogCiAgICAgICAgICAgICBp
ZiAoc2VsZWN0aW9uVG9SZXBsYWNlICE9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KSkgewogICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENo
YW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQpAQCAtMjQ2NywxNyArMjM2NCwxMiBA
QCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZykKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRTdHJpbmcs
IHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBTdHJpbmcg
cmVwbGFjZW1lbnQgPSBwbGFpblRleHQoc2VsZWN0aW9uLmdldCgpKTsKLSAgICBjbGllbnQoKS0+
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9u
UmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudCk7Ci0jZW5kaWYKKyAgICBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQocmVw
bGFjZWRTdHJpbmcsIHNlbGVjdGlvbik7CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFn
cmFwaChzZWxlY3Rpb24pOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0
cmluZywgZmFsc2UsIGZhbHNlKTsKICAgICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IHBh
cmFncmFwaC5zdWJyYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmlu
Zy5sZW5ndGgoKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1h
cmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotI2VuZGlmCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+
bWFya1JldnNlcnNlZChjaGFuZ2VkUmFuZ2UuZ2V0KCkpOwogfQogCiAjZW5kaWYKQEAgLTI0OTks
MTQzICsyMzkxLDMxIEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
cihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjCiAjZW5kaWYKIH0KIAotdm9p
ZCBFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopCi17Ci0j
aWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIG1fY29ycmVjdGlvblBhbmVsSXNE
aXNtaXNzZWRCeUVkaXRvciA9IGZhbHNlOwotICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
Q29ycmVjdGlvbjogewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihmcmFtZSgp
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKLSAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
OwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0
aW9uKHAsIHN0YXJ0KTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhNYXJrU3BlbGxpbmcgfCBTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRz
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOwotICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsKLSAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBh
bmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZywgVmVj
dG9yPFN0cmluZz4oKSwgdGhpcyk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKLSAgICAg
ICAgaWYgKHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQu
Z2V0KCkpICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
KS5wYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2Vz
dGlvbnM7Ci0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMp
OwotICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB0b3BTdWdnZXN0aW9uID0gc3VnZ2Vz
dGlvbnMuZmlyc3QoKTsKLSAgICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDApOwotICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VkU3RyaW5nLCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucywgdGhpcyk7Ci0gICAg
fQotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBFZGl0b3I6OmhhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0gICAg
UmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQuZ2V0KCk7Ci0gICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3VtZW50
KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdv
cmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVy
IGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgotICAgIGlmIChjdXJyZW50V29y
ZCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotCi0gICAg
c3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7Ci0gICAgY2FzZSBDb3Jy
ZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgotICAgICAgICBpZiAoY29ycmVj
dGlvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKLSAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBh
bmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3Ip
Ci0gICAgICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5n
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZVJldmVyc2lvbjoKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0
aCgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJp
bmcgPSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFy
KCk7Ci19Ci0KLXZvaWQgRWRpdG9yOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQordm9pZCBFZGl0b3I6OnN0YXJ0Q29ycmVjdGlv
blBhbmVsVGltZXIoKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBj
b25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsKLSAgICBpZiAo
aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKHR5
cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAg
ICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2Ug
aGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQuCi0gICAgICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSAgICAgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7Ci0gICAgICAgIG1fY29ycmVjdGlv
blBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwpOwot
ICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotI2VuZGlmCisgICAgbV9zcGVs
bGluZ0NvcnJlY3Rvci0+c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKTsKIH0KIAotdm9pZCBFZGl0b3I6OnN0b3BDb3JyZWN0
aW9uUGFuZWxUaW1lcigpCit2b2lkIEVkaXRvcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkKIHsK
LSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxU
aW1lci5zdG9wKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LmNsZWFyKCk7Ci0jZW5kaWYKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5oYW5kbGVDYW5jZWxP
cGVyYXRpb24oKTsKIH0KIAotdm9pZCBFZGl0b3I6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCit2
b2lkIEVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3Qg
U3RyaW5nJiBjb3JyZWN0aW9uKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwK
LSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotICAgIGlmIChj
bGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCk7Ci0jZW5kaWYKKyAgICBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc2VsZWN0
aW9uT2ZDb3JyZWN0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9y
Ojppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJ
T05fUEFORUwKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+aXNT
aG93aW5nQ29ycmVjdGlvblBhbmVsKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpOwog
fQogCi12b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCit2b2lkIEVkaXRvcjo6dXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2Vs
ZWN0aW9uQXRXb3JkQm91bmRhcnkpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5F
TAotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgIGlmICghaXNB
dXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAgICBtX2NvcnJlY3Rp
b25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAg
ICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwocmVhc29uRm9yRGlzbWlzc2lu
Zyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLSNlbmRp
ZgotfQotdm9pZCBFZGl0b3I6OnJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29y
ZHNUb0JlRWRpdGVkKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KQot
eworCiAgICAgLy8gV2Ugd2FudCB0byByZW1vdmUgdGhlIG1hcmtlcnMgZnJvbSBhIHdvcmQgaWYg
YW4gZWRpdGluZyBjb21tYW5kIHdpbGwgY2hhbmdlIHRoZSB3b3JkLiBUaGlzIGNhbiBoYXBwZW4g
aW4gb25lIG9mCiAgICAgLy8gc2V2ZXJhbCBzY2VuYXJpb3M6CiAgICAgLy8gMS4gSW5zZXJ0IGlu
IHRoZSBtaWRkbGUgb2YgYSB3b3JkLgpAQCAtMjcwMSwxMDIgKzI0ODEsNiBAQCB2b2lkIEVkaXRv
cjo6cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoYm9v
bCBkb05vdFJlbW92ZQogICAgIGRvY3VtZW50LT5tYXJrZXJzKCktPmNsZWFyRGVzY3JpcHRpb25P
bk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZSh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpSZXBsYWNlbWVudCk7CiB9CiAKLXZvaWQgRWRpdG9yOjphcHBseUNvcnJlY3Rpb25QYW5lbElu
Zm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNU
b0FkZCkKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgaWYgKCFtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFu
Z2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBz
dGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+
c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSkpOwotCi0gICAgLy8gQWZ0ZXIgd2UgcmVwbGFj
ZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVSZXBsYWNlZCwgd2UgbmVlZCB0byBhZGQgbWFy
a2VycyB0byB0aGF0IHJhbmdlLgotICAgIC8vIEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50
IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFsaWQg
YW55bW9yZS4KLSAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwg
d2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQK
LSAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcg
cGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKLSAgICAv
LyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdl
IG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKLSAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRo
ZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJl
cGxhY2VkLgotICAgIFJlZlB0cjxSYW5nZT4gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3Jh
cGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0
aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlQ29udGFp
bmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkID0gbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCk7Ci0g
ICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoc3RhcnRQ
b3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0aW9u
T2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsK
LSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUg
bG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRl
ciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KLSAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zm
c2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFy
dE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7Ci0KLSAgICAvLyBDbG9uZSB0aGUgcmFu
Z2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0aGUg
b3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFj
ZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2Uo
ZWMpOwotICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUo
cmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmlu
ZykpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgp
LCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgUmVmUHRy
PFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3Jh
cGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJ
blBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZy5sZW5n
dGgoKSk7Ci0gICAgU3RyaW5nIG5ld1RleHQgPSBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5n
ZXQoKSk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVkLgot
ICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmlu
ZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJr
ZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpOwotICAgIHNpemVfdCBzaXplID0gbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKG1fY29ycmVj
dGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
UmV2ZXJzaW9uKQotICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VtZW50UmFu
Z2UuZ2V0KCksIG1hcmtlclR5cGVzVG9BZGRbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZXNU
b0FkZFtpXSwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKTsKLSAgICB9Ci0j
ZWxzZSAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgVU5VU0VEX1BBUkFNKG1h
cmtlclR5cGVzVG9BZGQpOwotI2VuZGlmIC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwK
LX0KLQotYm9vbCBFZGl0b3I6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCkKLXsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCB8fCAhbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3Jy
ZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0KLSAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKLSAgICAg
ICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsQWNjZXB0ZWQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotICAgIAotICAgIC8v
IFBlbmRpbmcgY29ycmVjdGlvbiBzaG91bGQgYWx3YXlzIGJlIHdoZXJlIGNhcmV0IGlzLiBCdXQg
aW4gY2FzZSB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgd2Ugc3RpbGwgd2FudCB0byBkaXNtaXNz
IHRoZSBwYW5lbCB3aXRob3V0IGFjY2VwdGluZyB0aGUgY29ycmVjdGlvbi4KLSAgICBBU1NFUlQo
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09
IGNhcmV0UG9zaXRpb24pOwotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0
IFN0cmluZyYgY29ycmVjdGlvbikKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVM
Ci0gICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50
OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwotICAgIG1f
ZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwotICAgIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkNsb3NlVHlwaW5nIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xlYXJUeXBpbmdTdHlsZSB8
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0gICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0KLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIq
IG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgbWFya2Vycy0+
cmVtb3ZlTWFya2VycyhyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAg
ICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCk7Ci0gICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0jZWxzZSAvLyBTVVBQT1JUX0FVVE9DT1JSRUNU
SU9OX1BBTkVMCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbk9mQ29ycmVjdGVkKTsKLSAgICBV
TlVTRURfUEFSQU0oY29ycmVjdGVkKTsKLSAgICBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7Ci0j
ZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotfQotCiBQYXNzUmVmUHRyPFJh
bmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQog
ewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50QXRQb2ludCh3aW5k
b3dQb2ludCk7CkBAIC0zNDkxLDE0ICszMTc1LDcgQEAgdm9pZCBFZGl0b3I6OnNldE1hcmtlZFRl
eHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCBmbGFnKQogCiB2b2lkIEVkaXRvcjo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24s
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKIHsKLSNp
ZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mg
bm8gcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hcigpIGJlbG93LgotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVj
dGlvbihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgIGlmIChjdXJyZW50
U2VsZWN0aW9uICE9IG9sZFNlbGVjdGlvbikgewotICAgICAgICBzdG9wQ29ycmVjdGlvblBhbmVs
VGltZXIoKTsKLSAgICAgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Ci0gICAgfQotI2VuZGlmIC8vIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5zdG9wUGVuZGluZ0Nv
cnJlY3Rpb24ob2xkU2VsZWN0aW9uKTsKIAogICAgIGJvb2wgY2xvc2VUeXBpbmcgPSBvcHRpb25z
ICYgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmc7CiAgICAgYm9vbCBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHRoaXMtPmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCk7CkBAIC0zNTE1LDEwICszMTkyLDggQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBTZWwK
ICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1tYXIg
PSB0cnVlOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAgLy8gRG9u
J3QgY2hlY2sgc3BlbGxpbmcgYW5kIGdyYW1tYXIgaWYgdGhlIGNoYW5nZSBvZiBzZWxlY3Rpb24g
aXMgdHJpZ2dlcmVkIGJ5IHNwZWxsaW5nIGNvcnJlY3Rpb24gaXRzZWxmLgogICAgICAgICBzaG91
bGRDaGVja1NwZWxsaW5nQW5kR3JhbW1hciA9ICEob3B0aW9ucyAmIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0jZW5kaWYKIAogICAgICAgICAvLyBXaGVu
IHR5cGluZyB3ZSBjaGVjayBzcGVsbGluZyBlbHNld2hlcmUsIHNvIGRvbid0IHJlZG8gaXQgaGVy
ZS4KICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNoYW5nZSBpbiBzZWxlY3Rpb24gcmVzdWx0aW5n
IGZyb20gYSBkZWxldGUgb3BlcmF0aW9uLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggZTFh
NzExOTI0NWU4M2JlZDEwZDczZDIwNWVmZTIxNTQwODVjNTY5ZS4uZTg0NzIxZjJlZmUwZDg3NzU4
NWIwNjNmZTdmOWNlNjc5OWUxYjU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0yOCw3
ICsyOCw2IEBACiAKICNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCIKICNpbmNsdWRl
ICJDb2xvci5oIgotI2luY2x1ZGUgIkNvcnJlY3Rpb25QYW5lbEluZm8uaCIKICNpbmNsdWRlICJE
b2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIkVkaXRBY3Rpb24uaCIKICNpbmNsdWRlICJFZGl0
aW5nQmVoYXZpb3IuaCIKQEAgLTUwLDYgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9u
OwogY2xhc3MgQ2xpcGJvYXJkOworY2xhc3MgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjsK
IGNsYXNzIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI7CiBjbGFzcyBFZGl0Q29tbWFuZDsKIGNsYXNz
IEVkaXRvckNsaWVudDsKQEAgLTMyMSw5ICszMjEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRU
b0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBwcmVwZW5kKTsKIAogICAgIHZvaWQgaGFuZGxlQ2FuY2Vs
T3BlcmF0aW9uKCk7Ci0gICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSk7CisgICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKCk7CisKICAgICAvLyBJZiB1c2VyIGNvbmZpcm1lZCBhIGNvcnJlY3Rpb24gaW4gdGhlIGNv
cnJlY3Rpb24gcGFuZWwsIGNvcnJlY3Rpb24gaGFzIG5vbi16ZXJvIGxlbmd0aCwgb3RoZXJ3aXNl
IGl0IG1lYW5zIHRoYXQgdXNlciBoYXMgZGlzbWlzc2VkIHRoZSBwYW5lbC4KLSAgICB2b2lkIGhh
bmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogICAg
IGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAKICAgICB2b2lkIHBhc3RlQXNGcmFn
bWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9v
bCBtYXRjaFN0eWxlKTsKQEAgLTM3OSw3ICszNzksNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IGJvb2wgc2VsZWN0aW9uU3RhcnRIYXNTcGVsbGluZ01hcmtlckZvcihpbnQgZnJvbSwgaW50IGxl
bmd0aCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJv
bVdvcmRzVG9CZUVkaXRlZChib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BdFdvcmRCb3VuZGFy
eSk7CisgICAgdm9pZCB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29s
IG9ubHlIYW5kbGVXb3Jkc0NvbnRhaW5pbmdTZWxlY3Rpb24pOwogCiBwcml2YXRlOgogICAgIEZy
YW1lKiBtX2ZyYW1lOwpAQCAtMzk0LDEwICszOTQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9z
aG91bGRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2U7CiAgICAgYm9vbCBtX3Nob3VsZFN0eWxlV2l0
aENTUzsKICAgICBPd25QdHI8S2lsbFJpbmc+IG1fa2lsbFJpbmc7Ci0gICAgQ29ycmVjdGlvblBh
bmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbEluZm87CiAgICAgT3duUHRyPFNwZWxsQ2hlY2tlcj4g
bV9zcGVsbENoZWNrZXI7Ci0gICAgVGltZXI8RWRpdG9yPiBtX2NvcnJlY3Rpb25QYW5lbFRpbWVy
OwotICAgIGJvb2wgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yOworICAgIE93
blB0cjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiBtX3NwZWxsaW5nQ29ycmVjdG9yOwog
ICAgIFZpc2libGVTZWxlY3Rpb24gbV9tYXJrOwogICAgIGJvb2wgbV9hcmVNYXJrZWRUZXh0TWF0
Y2hlc0hpZ2hsaWdodGVkOwogCkBAIC00MjEsMTMgKzQxOSw4IEBAIHByaXZhdGU6CiAgICAgUGFz
c1JlZlB0cjxSYW5nZT4gbmV4dFZpc2libGVSYW5nZShSYW5nZSosIGNvbnN0IFN0cmluZyYsIEZp
bmRPcHRpb25zKTsKIAogICAgIHZvaWQgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBj
bGVhclR5cGluZ1N0eWxlKTsKLSAgICB2b2lkIGNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGlt
ZXI8RWRpdG9yPiopOwogICAgIE5vZGUqIGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBj
b25zdDsKLSAgICB2b2lkIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOwotICAgIHZvaWQgZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsK
LSAgICB2b2lkIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc1RvQWRkKTsKLSAgICAvLyBSZXR1cm4gdHJ1
ZSBpZiBjb3JyZWN0aW9uIHdhcyBhcHBsaWVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAgYm9vbCBh
cHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworCiAgICAgRmxv
YXRSZWN0IHdpbmRvd1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5j
cHAKaW5kZXggYmFkNGE5OWU5ODE4OTMwMmVjNjFiZmRiMDlkYTE0NmQwYmIxNGViNC4uMDVkOWI4
MzEwZjg2YmI0OWM0ODMxOThhZWUzY2I4NzJlMzQxOTljMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCkBAIC0yNiw3ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZC5oIgogCi0jaW5jbHVkZSAiQ29ycmVjdGlvblBhbmVsSW5mby5oIgorI2luY2x1ZGUg
IlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdt
ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzY3YTYwZDdhYTMxNWZmMWE5MjEzZmJi
MjAwOWYyMDZjZmQ0ZGUwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw0NTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKKyNpbmNsdWRl
ICJFZGl0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJU
ZXh0Q2hlY2tlckNsaWVudC5oIgorI2luY2x1ZGUgIlRleHRDaGVja2luZ0hlbHBlci5oIgorI2lu
Y2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVk
ZSAibWFya3VwLmgiCisjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisK
KyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisKK3N0YXRpYyBjb25zdCBWZWN0b3I8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9u
KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24sICgpKTsKKyAgICBpZiAobWFy
a2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgbWFya2VyVHlw
ZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsK
KyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJr
ZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3Jy
ZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cisg
ICAgfQorICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uOworfQorCitzdGF0
aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNG
b3JSZXBsYWNlbWVudCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LCAoKSk7Cisg
ICAgaWYgKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCk7CisgICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFy
a2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIG1hcmtlclR5
cGVzRm9yUmVwbGFjZW1lbnQ7Cit9CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OlNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShm
cmFtZSkKKyAgICAsIG1fY29ycmVjdGlvblBhbmVsVGltZXIodGhpcywgJlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCit7Cit9CisKK1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKCkK
K3sKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVk
KTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQoreworICAg
IGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4zOworICAgIGlm
IChpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkgeworICAgICAgICBpZiAo
dHlwZSA9PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQorICAgICAg
ICAgICAgLy8gSWYgdHlwZSBpcyBQYW5lbFR5cGVSZXZlcnNpb24sIHRoZW4gdGhlIG5ldyByYW5n
ZSBoYXMgYmVlbiBzZXQuIFNvIHdlIHNob3VsZG4ndCBjbGVhciBpdC4KKyAgICAgICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlID0gdHlwZTsKKyAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7
CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BDb3Jy
ZWN0aW9uUGFuZWxUaW1lcigpCit7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdG9wKCk7
CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9
CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKK3sKKyAgICAvLyBNYWtl
IHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCisgICAgVmlzaWJsZVNlbGVjdGlv
biBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7Cisg
ICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gIT0gb2xkU2VsZWN0aW9uKSB7CisgICAgICAgIHN0b3BD
b3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgICAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZykKK3sKKyAgICAvLyBBcHBseSBwZW5kaW5nIGF1
dG9jb3JyZWN0aW9uIGJlZm9yZSBuZXh0IHJvdW5kIG9mIHNwZWxsIGNoZWNraW5nLgorICAgIGJv
b2wgZG9BcHBseUNvcnJlY3Rpb24gPSB0cnVlOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9m
U2VsZWN0aW9uID0gc2VsZWN0aW9uQWZ0ZXJUeXBpbmcudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBjdXJyZW50V29yZCA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQo
c3RhcnRPZlNlbGVjdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQoc3RhcnRP
ZlNlbGVjdGlvbiwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CisgICAgaWYgKGN1cnJlbnRXb3Jk
LnZpc2libGVFbmQoKSA9PSBzdGFydE9mU2VsZWN0aW9uKSB7CisgICAgICAgIFN0cmluZyB3b3Jk
VGV4dCA9IHBsYWluVGV4dChjdXJyZW50V29yZC50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsK
KyAgICAgICAgaWYgKHdvcmRUZXh0Lmxlbmd0aCgpID4gMCAmJiBpc0FtYmlndW91c0JvdW5kYXJ5
Q2hhcmFjdGVyKHdvcmRUZXh0W3dvcmRUZXh0Lmxlbmd0aCgpIC0gMV0pKQorICAgICAgICAgICAg
ZG9BcHBseUNvcnJlY3Rpb24gPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGRvQXBwbHlDb3JyZWN0
aW9uKQorICAgICAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxB
Y2NlcHRlZCk7CisgICAgZWxzZQorICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZDsKK30KKworYm9vbCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdl
PiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAoreworICAgIHJldHVybiAhKG1fZnJhbWUtPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+aGFzTWFya2VycyhtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbikpOworfQorCit2b2lkIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxh
Y2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCit7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5n
Qm94ID0gd2luZG93UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBpZiAo
Ym91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gcmFuZ2VUb1JlcGxhY2U7CisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNl
LmdldCgpKTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBy
ZXBsYWNlbWVudDsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwor
ICAgIHNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwg
Ym91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcmVwbGFj
ZW1lbnQsIFZlY3RvcjxTdHJpbmc+KCkpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rp
b25QYW5lbEluZm8uaXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCBy
ZWFzb25Gb3JEaXNtaXNzaW5nKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlz
QWN0aXZlKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlID0gZmFsc2U7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0g
dHJ1ZTsKKyAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJlYXNvbkZvckRpc21pc3NpbmcpOwor
fQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5Q29ycmVjdGlvblBh
bmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJU
eXBlc1RvQWRkKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOworICAg
IGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2VD
b250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKSkpOworICAgIHNldEVu
ZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBhcmFncmFw
aChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkp
KTsKKworICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQgcmFuZ2UgcmFuZ2VUb0Jl
UmVwbGFjZWQsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCByYW5nZS4KKyAgICAvLyBI
b3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0aGUgdmFsdWUgb2YgcmFu
Z2VUb0JlUmVwbGFjZWQgaXMgbm90IHZhbGlkIGFueW1vcmUuCisgICAgLy8gU28gYmVmb3JlIHdl
IGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0IHBv
c2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkCisgICAgLy8gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0
IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2UgdXNlIGNvcnJlY3Rpb25T
dGFydE9mZnNldEluUGFyYWdyYXBoCisgICAgLy8gdG8gc3RvcmUgdGhpcyB2YWx1ZS4gSW4gb3Jk
ZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSBhIHJhbmdl
CisgICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRvIHRoZSBz
dGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZC4KKyAgICBSZWZQdHI8UmFuZ2U+IGNv
cnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1
bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9u
KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7
CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBQb3NpdGlvbiBzdGFydFBvc2l0
aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOworICAgIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNv
bnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29tcHV0ZU9m
ZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0aW9uIHNv
IHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2Uu
CisgICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UuZ2V0
KCkpOworCisgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMg
bWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFsIHJhbmdlIGFyb3VuZC4KKyAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBhcHBseUNvbW1hbmQoU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9CZVJlcGxhY2VkLCBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpKTsKKyAgICBzZXRFbmQocGFyYWdyYXBoUmFu
Z2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpLnN0YXJ0KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5n
ZXQoKSwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsICBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpOworICAgIFN0cmluZyBuZXdUZXh0ID0g
cGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOworCisgICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KKyAgICBpZiAobmV3VGV4dCAhPSBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1h
cmtlclR5cGVzVG9BZGQuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7CisgICAgICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlID09IENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbikKKyAgICAgICAgICAgIG1hcmtl
cnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlc1RvQWRkW2ld
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2Vt
ZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGVzVG9BZGRbaV0sIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlZFN0cmluZyk7CisgICAgfQorfQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkK
K3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCB8fCAh
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bigpLnN0YXJ0KCk7CisKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKKyAgICAgICAgZGlzbWlz
cyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9IAorICAgIAorICAgIC8vIFBlbmRpbmcgY29ycmVjdGlvbiBzaG91
bGQgYWx3YXlzIGJlIHdoZXJlIGNhcmV0IGlzLiBCdXQgaW4gY2FzZSB0aGlzIGlzIG5vdCBhbHdh
eXMgdHJ1ZSwgd2Ugc3RpbGwgd2FudCB0byBkaXNtaXNzIHRoZSBwYW5lbCB3aXRob3V0IGFjY2Vw
dGluZyB0aGUgY29ycmVjdGlvbi4KKyAgICBBU1NFUlQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pOworICAgIGRp
c21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNw
b25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24pCit7CisgICAgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2Vk
KGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0KCk7CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rp
b25PZkNvcnJlY3RlZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBTZWxlY3Rp
b25Db250cm9sbGVyOjpDbGVhclR5cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3Bl
bGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmVuZCgpKTsK
KworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKTsKKyAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICBtYXJrZXJzLT5hZGRN
YXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9u
KTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFu
ZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikKK3sKKyAg
ICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKKyAgICBzd2l0
Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKKyAgICBjYXNlIENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZm
aW5pdHkoKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQs
IExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2Vu
dFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CisgICAgICAgIG1fZnJhbWUtPmVk
aXRvcigpLT5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKEVkaXRvcjo6
TWFya1NwZWxsaW5nIHwgRWRpdG9yOjpTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRz
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOworICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsKKyAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBh
bmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmlu
ZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5n
PigpKTsKKyAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogeworICAgICAgICBpZiAocGxhaW5UZXh0
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkgIT0gbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFw
aChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpLnBhcmFncmFwaFJhbmdl
KCkuZ2V0KCkpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKKyAgICAgICAg
dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VkU3RyaW5nLCBwYXJhZ3JhcGhUZXh0LCBzdWdnZXN0aW9ucyk7CisgICAgICAgIGlmIChz
dWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJzdCgpOwor
ICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdp
bmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQu
Z2V0KCkpOworICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91
bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgdG9wU3VnZ2Vz
dGlvbiwgc3VnZ2VzdGlvbnMpOworICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2
b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJl
c3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit7CisgICAgUmFuZ2UqIHJlcGxhY2VkUmFu
Z2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCk7CisgICAg
aWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gcmVwbGFjZWRSYW5n
ZS0+b3duZXJEb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgY3VycmVu
dFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LmdldCgpKTsKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdvcmQgd2UgYXJlIGFib3V0IHRv
IGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVyIGZpcmluZyBhbmQgY2FsbGJh
Y2sgYmVpbmcgdHJpZ2dlcmVkLgorICAgIGlmIChjdXJyZW50V29yZCAhPSBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworCisgICAgc3dpdGNoIChtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucGFuZWxUeXBlKSB7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGVDb3JyZWN0aW9uOgorICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkgewor
ICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gY29y
cmVjdGlvbjsKKyAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJrZXJUeXBl
c0ZvckF1dG9jb3JyZWN0aW9uKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IpCisgICAgICAgICAgICAgICAg
cmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5h
ZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlv
biwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVy
c2lvbjoKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3Vn
Z2VzdGlvbnM6CisgICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7CisgICAgICAgICAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOwor
ICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yUmVwbGFj
ZW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK2Jvb2wgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25F
bmFibGVkKCkKK3sKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGlj
U3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworfQorCitGbG9hdFJlY3QgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6d2luZG93UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkg
Y29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgcmV0
dXJuIHZpZXcgPyB2aWV3LT5jb250ZW50c1RvV2luZG93KEludFJlY3QocmFuZ2UtPmJvdW5kaW5n
UmVjdCgpKSkgOiBGbG9hdFJlY3QoKTsKK30gICAgICAgIAorCit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgb2xkU2VsZWN0aW9uKQoreworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNl
bGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAgIC8vIFdoZW4g
dXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1
c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAorICAgIC8vIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHBy
ZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJldmVydCB0aGUKKyAg
ICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24g
cGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKKyAgICAvLyB0aGUgbmV3IGNhcmV0IHBv
c2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorICAgIGlmICghY3VycmVudFNlbGVjdGlv
bi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCisgICAgICAg
IHJldHVybjsKKworICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlvbiA9IGN1cnJl
bnRTZWxlY3Rpb24uc3RhcnQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25PZldv
cmQgPSBlbmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsK
KyAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRpb25PZldvcmQpCisgICAgICAg
IHJldHVybjsKKworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVl
cEVxdWl2YWxlbnQoKTsKKyAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9u
OjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCisgICAgICAgIHJldHVybjsKKworICAgIE5vZGUq
IG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CisgICAgaW50IGVuZE9mZnNldCA9IHBv
c2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtl
cj4gbWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUo
bm9kZSk7CisgICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7CisgICAgICAgIGNvbnN0IERv
Y3VtZW50TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOworICAgICAgICBpZiAoKChtYXJrZXIu
dHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgJiYgIW1hcmtlci5kZXNjcmlwdGlv
bi5pc051bGwoKSkgfHwgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAm
JiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQpID09IGVuZE9mZnNldCkgeworICAg
ICAgICAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUt
PmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCwgbm9kZSwgbWFya2VyLmVuZE9m
ZnNldCk7CisgICAgICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJh
bmdlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50V29yZC5sZW5ndGgoKSkgeworICAg
ICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdv
cmRSYW5nZTsKKyAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmcgPSBjdXJyZW50V29yZDsKKyAgICAgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0g
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKQorICAgICAgICAgICAgICAgICAgICBzdGFydENvcnJl
Y3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3Vn
Z2VzdGlvbnMpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRp
b247CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGlu
ZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCit7CisgICAgaWYgKGNtZC0+aXNUb3BMZXZl
bENvbW1hbmQoKSAmJiAhY21kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigp
KQorICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMo
RG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworfQorCitFZGl0b3JDbGllbnQq
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNsaWVudCgpCit7CisgICAgcmV0dXJuIG1f
ZnJhbWUtPnBhZ2UoKSA/IG1fZnJhbWUtPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkgOiAwOworfQor
CitUZXh0Q2hlY2tlckNsaWVudCogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6dGV4dENo
ZWNrZXIoKQoreworICAgIGlmIChFZGl0b3JDbGllbnQqIG93bmVyID0gY2xpZW50KCkpCisgICAg
ICAgIHJldHVybiBvd25lci0+dGV4dENoZWNrZXIoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93Q29ycmVjdGlvblBhbmVsKENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5n
Qm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0
aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQoreworICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBh
bmVsKHR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRTdHJpbmcsIHJl
cGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgdGhpcyk7Cit9
CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbikKK3sKKyAgICBp
ZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJl
YXNvbik7Cit9CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNTaG93aW5n
Q29ycmVjdGlvblBhbmVsKCkKK3sKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlz
U2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJp
bmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQorewor
ICAgIHJldHVybiBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JD
bGllbnQ6OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCByZXBsYWNlZFN0cmluZywgcmVwbGFj
ZW1lbnRTdHJpbmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1h
cmtSZXZzZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKQoreworICAgIGNoYW5n
ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJr
ZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbik7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0
b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpCit7CisgICAgcmVjb3JkQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKHJlcGxhY2VkU3RyaW5nLCBwbGFpblRleHQocmVwbGFj
ZW1lbnRSYW5nZS5nZXQoKSkpOworfQorCisjZWxzZQorCitTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKikge30KK1NwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKCkge30K
K3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxU
aW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUpIHt9Cit2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpIHt9Cit2b2lkIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbCkge30KK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hv
dyhQYXNzUmVmUHRyPFJhbmdlPiwgY29uc3QgU3RyaW5nJikge30KK3ZvaWQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mKSB7fQorYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgp
IHsgcmV0dXJuIGZhbHNlOyB9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJl
c3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikge30KK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFu
ZD4pIHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIHt9Cit2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJikge30KK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlQZW5k
aW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikge30KK3ZvaWQgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0
cmluZyYpIHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNl
bE9wZXJhdGlvbigpIHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtS
ZXZzZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4pIHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJp
bmcmLCBQYXNzUmVmUHRyPFJhbmdlPikge30KK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorYm9v
bCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQ
YXNzUmVmUHRyPFJhbmdlPikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorYm9vbCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKSB7IHJldHVybiBm
YWxzZTsgfQorYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc0F1dG9tYXRpY1Nw
ZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQorCisjZW5kaWYKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTNhZGZiN2Q3MTVh
Y2RiM2E0MDJmNmVmNTY0OWJiNTM3YWYyZjBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgKQEAgLTAsMCArMSwx
MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCisj
ZGVmaW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAorCisjaWYgUExBVEZPUk0oTUFD
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorLy8gU29tZSBw
bGF0Zm9ybXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhdXRvY29ycmVjdGlvbi4KKyNkZWZp
bmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAxCisvLyBTb21lIHBsYXRmb3JtcyB1c2Ug
c3BlbGxpbmcgYW5kIGF1dG9jb3JyZWN0aW9uIG1hcmtlcnMgdG8gcHJvdmlkZSB2aXN1YWwgY3Vl
LgorLy8gT24gc3VjaCBwbGF0Zm9ybSwgaWYgd29yZCB3aXRoIG1hcmtlciBpcyBlZGl0ZWQsIHdl
IG5lZWQgdG8gcmVtb3ZlIHRoZSBtYXJrZXIuCisjZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05f
RURJVElORyAxCisjZWxzZQorI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDAK
KyNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDAKKyNlbmRpZiAvLyAjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQor
CisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRWRpdG9yQ2xpZW50OworY2xhc3MgRWRpdENvbW1hbmQ7CitjbGFzcyBSYW5n
ZTsKK2NsYXNzIFRleHRDaGVja2VyQ2xpZW50OworY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKKwor
c3RydWN0IENvcnJlY3Rpb25QYW5lbEluZm8geworICAgIGVudW0gUGFuZWxUeXBlIHsKKyAgICAg
ICAgUGFuZWxUeXBlQ29ycmVjdGlvbiA9IDAsCisgICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbiwK
KyAgICAgICAgUGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucworICAgIH07CisKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkOworICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsK
KyAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7CisgICAgUGFuZWxUeXBlIHBhbmVsVHlwZTsK
KyAgICBib29sIGlzQWN0aXZlOworfTsKKworZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsIHsKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2Vs
bGVkID0gMCwKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwK
KyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQKK307CisKK2Ns
YXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgeworcHVibGljOgorICAgIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqKTsKKyAgICB+U3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcigpOworCisgICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSk7CisgICAgdm9pZCBzdG9wQ29ycmVjdGlvblBhbmVsVGlt
ZXIoKTsKKworICAgIHZvaWQgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsKTsKKyAgICB2b2lkIHNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNv
bnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpOworCisgICAgdm9pZCBhcHBseUNvcnJlY3Rpb25QYW5l
bEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlw
ZXNUb0FkZCk7CisgICAgLy8gUmV0dXJuIHRydWUgaWYgY29ycmVjdGlvbiB3YXMgYXBwbGllZCwg
ZmFsc2Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGlu
Z0lmQXBwcm9wcmlhdGUoKTsKKworICAgIHZvaWQgcmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3Jy
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25z
dCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKKyAgICB2b2lk
IHJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsKKyAgICB2
b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xk
U2VsZWN0aW9uKTsKKworICAgIHZvaWQgc3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbik7CisgICAgdm9pZCBhcHBseVBlbmRpbmdDb3JyZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsKKworICAg
IHZvaWQgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
bik7CisgICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKTsKKworICAgIGJvb2wgaGFzUGVu
ZGluZ0NvcnJlY3Rpb24oKSBjb25zdDsKKyAgICBib29sIGlzU3BlbGxpbmdNYXJrZXJBbGxvd2Vk
KFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0OworICAgIGJvb2wgaXNT
aG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CisgICAgYm9vbCBpc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQoKTsKKworICAgIHZvaWQgY29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChU
aW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiopOworICAgIHZvaWQgcmVjb3JkQXV0
b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpOworICAgIHZvaWQgbWFya1JldnNl
cnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpOworCisjaWYgU1VQUE9SVF9BVVRP
Q09SUkVDVElPTl9QQU5FTAorcHJpdmF0ZToKKyAgICAvLyBFbmNhcHN1bGF0aW5nIEVkaXRvckNs
aWVudCBBUEkgdG8gbG9jYWxpemUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpZmRlZgor
ICAgIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOworICAg
IHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsKTsKKyAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3Ry
aW5nKTsKKworICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CisgICAgVGV4dENoZWNrZXJDbGll
bnQqIHRleHRDaGVja2VyKCk7CisgICAgRmxvYXRSZWN0IHdpbmRvd1JlY3RGb3JSYW5nZShjb25z
dCBSYW5nZSopIGNvbnN0OworCisgICAgRWRpdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBGcmFt
ZSogbV9mcmFtZTsKKworICAgIFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+IG1f
Y29ycmVjdGlvblBhbmVsVGltZXI7CisgICAgQ29ycmVjdGlvblBhbmVsSW5mbyBtX2NvcnJlY3Rp
b25QYW5lbEluZm87CisgICAgYm9vbCBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0
b3I7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5n
Q29tbWFuZC5jcHAKaW5kZXggMzU2MDRmNmFiMWE3YzY2ZWEwZmVjMjc5ZmU1M2Q0ZGQxYjljOTUx
MC4uMjEyZTFkZGNhYjNkODg1Yzk1MzBlMTc1MGJhNDhlMzg3YTk0Yzc4MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0xNTEsMTEgKzE1MSw5IEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgVHlwaW5nQ29tCiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7
CiAgICAgQVNTRVJUKGZyYW1lKTsKIAotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwog
ICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0
b3IoKS0+cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQo
aXNTcGFjZU9yTmV3bGluZSh0ZXh0LmNoYXJhY3RlcnMoKVswXSkpOwotI2VuZGlmCi0KKyAgICAg
ICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZl
Y3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHQuY2hhcmFjdGVycygpWzBdKSk7Cisg
ICAgCiAgICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOwogfQogCkBAIC0zNDAsMTIgKzMzOCw4
IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBp
bmdDb21tYW5kIGNvbW1hbmRUeXBlKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBzdGFy
dE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBpZiAocDEgIT0g
cDIpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+bWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSk7Ci0jaWYgU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICBlbHNlIGlmIChjb21tYW5kVHlwZSA9
PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+ZWRpdG9yKCktPnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb21t
YW5kVHlwZSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRv
cigpLT5zdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CiAgICAgfQogfQogCkBAIC00NjMsOSAr
NDU3LDggQEAgYm9vbCBUeXBpbmdDb21tYW5kOjptYWtlRWRpdGFibGVSb290RW1wdHkoKQogCiB2
b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBib29sIGtpbGxSaW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElO
RwotICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVsbEFuZENvcnJl
Y3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICBkb2N1
bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRC
eUVkaXRpbmcoZmFsc2UpOworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0
ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKIApAQCAtNTYyLDkg
KzU1NSw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6
Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29s
IGtpbGxSaW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwotICAgIGRvY3Vt
ZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJz
RnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICBkb2N1bWVudCgpLT5mcmFt
ZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFs
c2UpOworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1s
ZWRpdGluZy5oCmluZGV4IDJhM2Y3ZDQ1MzYyZjdiN2JjNzJiOWJmYWFkYjc4MDY5NjYzYjdjMDMu
LmE0MDI3Mzk5NWQxYmIzYzQ0NTgzNjY3YmJjNjA0NmQ5ZGU3NjEyOTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmgKQEAgLTIyMSw2ICsyMjEsMTUgQEAgaW5saW5lIGJvb2wgaXNX
aGl0ZXNwYWNlKFVDaGFyIGMpCiB7CiAgICAgcmV0dXJuIGMgPT0gbm9CcmVha1NwYWNlIHx8IGMg
PT0gJyAnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdCc7CiB9CisKK2lubGluZSBib29sIGlzQW1i
aWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQoreworICAgIC8vIFRoZXNl
IGFyZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlaGF2ZSBhcyB3b3JkIGJvdW5kYXJpZXMsIGJ1dCBj
YW4gYXBwZWFyIHdpdGhpbiB3b3Jkcy4KKyAgICAvLyBJZiB0aGV5IGFyZSBqdXN0IHR5cGVkLCBp
LmUuIGlmIHRoZXkgYXJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgY2FyZXQsIHdlIHdhbnQg
dG8gZGVsYXkgdGV4dCBjaGVja2luZyB1bnRpbCB0aGUgbmV4dCBjaGFyYWN0ZXIgaGFzIGJlZW4g
dHlwZWQuCisgICAgLy8gRklYTUU6IHRoaXMgaXMgcmVxdWlyZWQgdW50aWwgNjg1MzAyNyBpcyBm
aXhlZCBhbmQgdGV4dCBjaGVja2luZyBjYW4gZG8gdGhpcyBmb3IgdXMuCisgICAgcmV0dXJuIGNo
YXJhY3RlciA9PSAnXCcnIHx8IGNoYXJhY3RlciA9PSByaWdodFNpbmdsZVF1b3RhdGlvbk1hcmsg
fHwgY2hhcmFjdGVyID09IGhlYnJld1B1bmN0dWF0aW9uR2Vyc2hheWltOworfQorCiBTdHJpbmcg
c3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RhcnRJ
c1N0YXJ0T2ZQYXJhZ3JhcGgsIGJvb2wgZW5kSXNFbmRPZlBhcmFncmFwaCk7CiBjb25zdCBTdHJp
bmcmIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oCmluZGV4IGVkOTJmMTEyY2JhODc3ZmQ1MmMzNDY0MDdmNWI0ZmZlMjYxMjBmNmMuLjhh
NTg5NTU2Y2NlNTA3MjA3MmRjYzhiN2FiODBjMDUyNWFmOTBhMmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmgKQEAgLTUxMSw3ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgVGV4dENo
ZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgeyByZXR1cm4gJm1fdGV4dENoZWNrZXJDbGllbnQ7
IH0KIAogI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICB2aXJ0dWFsIHZvaWQg
c2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiwgRWRpdG9yKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFu
ZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIENvcnJlY3Rp
b25QYW5lbENvbnRyb2xsZXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSB7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCkgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlv
blJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FZGl0b3JDbGllbnQuaAppbmRleCBkNWRlNmE0MTAyY2JkMjc2OGRhYzlkYTNmNWYxYWQ5
ZWNmODAzZDUwLi5lYjAzM2IwNmYwNjg5ZDJmZGViODI1YTlkMjFkZWIyYTU1OGI3ZjhlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgRWRp
dG9yQ2xpZW50X2gKICNkZWZpbmUgRWRpdG9yQ2xpZW50X2gKIAotI2luY2x1ZGUgIkNvcnJlY3Rp
b25QYW5lbEluZm8uaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTE1OCwxMiArMTU4LDEzIEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgPSAwOwog
Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgIGVudW0gQXV0b2NvcnJlY3Rp
b25SZXNwb25zZVR5cGUgewogICAgICAgICBBdXRvY29ycmVjdGlvbkVkaXRlZCwKICAgICAgICAg
QXV0b2NvcnJlY3Rpb25SZXZlcnRlZAogICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIHNob3dDb3Jy
ZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MsIEVkaXRvciopID0gMDsKKworI2lmIFNV
UFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rp
b25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYg
Ym91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY21lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBh
bHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlciop
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzU2hvd2lu
Z0NvcnJlY3Rpb25QYW5lbCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykgPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCmluZGV4IDViYjgyY2RkZDQ0MTkwOTBkYjc5YzZmNzhlZGJiNTcxYWU5ZTU2MzUu
LjFlNTJhZjVjOTQyMWU2M2UyMjIzM2EwN2YwNjk4OTBjOTkyNGFkOTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wMy0xNiAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFA
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQgYmUgaGFuZGxl
ZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTU1NzEgICAgICAgIAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKToKKyAg
ICAgICAgKFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAg
IChXZWJFZGl0b3JDbGllbnQ6OmlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChX
ZWJFZGl0b3JDbGllbnQ6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UpOgorCiAyMDExLTAz
LTIxICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQnJhZHkgRWlkc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCAxZmExMzJhZDZjNWJkNDM3OWZlMGJiODVjOWU2
ZmYwZDY2YjExNzM1Li5mNDhiNmEzNDZkYTA0ZDRlYzI3N2NhMjkyMDIyMjBmN2JmYzY0NTEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuaApAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5w
dXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hl
Y2tpbmdPZlN0cmluZyhXZWJDb3JlOjpTcGVsbENoZWNrZXIqLCBpbnQsIGNvbnN0IFdURjo6U3Ry
aW5nJik7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAg
ICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hP
ZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpT
dHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgV2ViQ29yZTo6RWRpdG9yKik7
CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5n
Qm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBj
b25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFdURjo6VmVjdG9yPFdU
Rjo6U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MsIFdlYkNvcmU6OkNvcnJl
Y3Rpb25QYW5lbENvbnRyb2xsZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5
cGUsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCA2OWRkNTc0NzMxYjQ0YjQzMGMyNzQ1OGU3
MjNiNDFjNGRlNTE3NGIwLi5hYmI4MDI4ZjA3YmFmOTczZGZkNTY0MDEwYzE1ZWFmMTdmZTllZjY4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50Lm1tCkBAIC04OTEsNyArODkxLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXIKIH0K
IAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi12b2lkIFdl
YkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGUgcGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZl
UmVwbGFjZW1lbnRTdHJpbmdzLCBFZGl0b3IqIGVkaXRvcikgewordm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlIHBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncywgQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlciogY29udHJvbGxlcikgewogICAgIGRp
c21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEln
bm9yZWQpOwogCiAgICAgLy8gTmVlZCB0byBleHBsaWNpdGx5IHVzZSB0aGVzZSBsb2NhbCBOU1N0
cmluZyBvYmplY3RzLCBiZWNhdXNlIHRoZSBDKysgcmVmZXJlbmNlcyBtYXkgYmUgaW52YWxpZGF0
ZWQgYnkgdGhlIHRpbWUgdGhlIGJsb2NrIGJlbG93IGlzIGV4ZWN1dGVkLgpAQCAtOTMyLDcgKzkz
Miw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6
OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwCiAgICAgICAgICAgICAgICAgW1tOU1NwZWxs
Q2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJl
c3BvbnNlQWNjZXB0ZWQgdG9Db3JyZWN0aW9uOmFjY2VwdGVkU3RyaW5nIGZvcldvcmQ6cmVwbGFj
ZWRTdHJpbmdBc05TU3RyaW5nIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOltt
X3dlYlZpZXcgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddXTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGVkaXRvci0+aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KFN0
cmluZyhhY2NlcHRlZFN0cmluZykpOworICAgICAgICBjb250cm9sbGVyLT5oYW5kbGVDb3JyZWN0
aW9uUGFuZWxSZXN1bHQoU3RyaW5nKGFjY2VwdGVkU3RyaW5nKSk7CiAgICAgfV07CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA1YTNiYzM0YmE1MjA5M2Y2YmU5NmZmZjQ2MjhlNzU0NDRmNTA4NDUzLi42YTFj
ODAxZTE3MjA3MGYwYzQzYjI1MWJkNjE4YjQ3NDQ2NGNhNjkxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMTEtMDMtMTYgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1JlZmFj
dG9yaW5nXSBBdXRvIGNvcnJlY3Rpb24gcGFuZWwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgaXRzIG93
biBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU1NTcxCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oOgorCiAyMDExLTAzLTIxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBGaXggTWFjIHJlbGVhc2UgYnVpbGRzIGFmdGVyIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Njc4MwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggZmE4
NDI2YTM4ZTk0ZmJlM2Y0MTY1OTg5ZjgxNTJmM2FkNzRlNjA3OC4uOTYzMTM5NjY5YjQ0MTNlODEw
NWQ5MGEzNTA2OWE4MDBjNzgxMGUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC0xNDIsNyAr
MTQyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShi
b29sIGVuYWJsZWQpOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhX
ZWJDb3JlOjpTcGVsbENoZWNrZXIqLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJik7CiAjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQot
ICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0Jv
eE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2
ZVJlcGxhY2VtZW50U3RyaW5ncywgV2ViQ29yZTo6RWRpdG9yKik7CisgICAgdmlydHVhbCB2b2lk
IHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxU
eXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVu
dFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJp
bmdzLCBXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxDb250cm9sbGVyKik7CiAgICAgdmlydHVhbCB2
b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbCk7CiAgICAgdmlydHVhbCBib29sIGlzU2hvd2luZ0NvcnJlY3Rpb25QYW5l
bCgpOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86423</attachid>
            <date>2011-03-21 22:45:54 -0700</date>
            <delta_ts>2011-03-24 22:50:15 -0700</delta_ts>
            <desc>Fixing the build break</desc>
            <filename>bug-55571-20110322144552.patch</filename>
            <type>text/plain</type>
            <size>94909</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE2NDYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMjQxMjdl
OTNlNGQ5MDdjZTdhNjlmOWYxYzA2ODQyZTVlMDNkNGU3MS4uYTU5MjJkOTI0YWY4NWQyNGZhZjA0
MDgxYjMyMTUwMWQ2OThiODE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY2OCw2ICs2Njgs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGVjODY0MTY2MTJkNDkwOWQ1ZTRlYjdiYTFm
OTYzMzA5ODUxYzQ5OTQuLjBiZTdjZmM5ODdkNDVjMTI3ODhjNDgyYjcwNDBkMjU4ZjFmNmRmMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NCBAQAorMjAxMS0wMy0xNiAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQg
YmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEKKworICAgICAgICBFeHRyYWN0ZWQgY29kZSBpbnNp
ZGUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpbnRvCisgICAgICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhh
dmlvciBjaGFnbmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oOiBSZW1vdmVkLiAo
Q29ycmVjdGlvblBhbmVsSW5mbyBpcyBtb3ZlZCB0byBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyLmgpCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpFZGl0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp+RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHA6
IERpdHRvLiAgICAgICAgCisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6bWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjp+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0
b3BDb3JyZWN0aW9uUGFuZWxUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlQZW5kaW5nQ29ycmVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYXNQZW5k
aW5nQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5Q29ycmVjdGlv
blBhbmVsSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFw
cGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtSZXZzZXJzZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3dDb3JyZWN0aW9uUGFu
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZVJldmVyc2VkKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuaDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOgorICAgICAg
ICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzQW1iaWd1b3Vz
Qm91bmRhcnlDaGFyYWN0ZXIpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKToK
KyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgorCiAyMDExLTAzLTIxICBBYmhpc2hlayBB
cnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGE4ZmVhZGJmZjkzMDY5YjY3N2MwM2Y2ODNh
OWQwMDQ5NGU5YmRmMjUuLjQ4ZDZiZDU4ZGJkMzgwYThkMWU0NjI5NzdkNzI5OWM5NjBjNjk1NTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xNDQ5LDYgKzE0NDksOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bs
aXRFbGVtZW50Q29tbWFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVt
ZW50Q29tbWFuZC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggM2U2OGI1NGJlNjhlOThiYzUz
M2Q5ZjQ4ZDg1MjdiODA5NmVmNGNhMi4uNTk2ODY4YTUwOTQ4Mzk5MDRkNDk1MDViNTIxYmVhYTBj
YWZlYzY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTc0NCw3ICs3NDQsNiBAQCBfX1pON1dl
YkNvcmU2RWRpdG9yMjRpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWxFdgogX19aTjdXZWJDb3JlNkVk
aXRvcjI2ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2
aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2d3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmRFUktOM1dURjZTdHJpbmdFUktOUzFfNlZlY3RvcklTMl9MbTBF
RUUKLV9fWk43V2ViQ29yZTZFZGl0b3IyN2hhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdEVSS04z
V1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3IyOWNhbkRlY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyOWNhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzMGFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlv
bkVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRU5TXzEwRWRpdEFjdGlvbkUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCAwZWM2OGU0ZTkyMDZmNGFhNjExYTQ2MjhiN2YxNWJjMGZmNTE5MjllLi44N2M4MTBl
ZDdkNWFmMTgwZWUyMWE0OTgwZjhiOTUxZTM0ZGYwYWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0y
ODE3LDYgKzI4MTcsOSBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvU21hcnRSZXBsYWNlQ0YuY3Bw
JywKICAgICAgICAgICAgICdlZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAnLAogICAgICAgICAg
ICAgJ2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCcsCisgICAgICAgICAgICAnZWRpdGluZy9TcGVs
bENoZWNrZXIuaCcsCisgICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmNwcCcsCisgICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5o
JywKICAgICAgICAgICAgICdlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KaW5kZXggNTRjMDA5OWEzMDFiNTc4ODAxMzJlZTAwMDJhOTI0OGVhM2U1YmFhMy4uYWQx
Y2ZkN2NmZjljNzMwNGQwY2RjNjcxMDZkYzg5YWExMGU0NjNkYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAg
LTU5MSw2ICs1OTEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1
dGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwIFwKICAgICBl
ZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgXAorICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5jcHAgXAogICAgIGVkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgXAog
ICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0
VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOTJjZTg4ZGFiZTgxMjgzOTE0ODMz
OWFjMTI4Zjc2NGFkYmFmYmQwMi4uNzZmOTUwMGZiZjA2NDQ1NGU0MGYxMTkyMDliMWU1MGU5NmUw
NmU0YiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
QEAgLTUwMTM0LDYgKzUwMTM0LDYyIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIuY3BwIgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJ
CQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgor
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5h
bWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+
CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9
IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1
cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZV9MVENHfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxlZGl0aW5nXFNwZWxsQ2hlY2tlci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGMzYjFjMzNkNjQwYjExZmVhNzNmMjRiOGEwMDBiYjUzMTM1YTVjZDcuLjA0NTMz
Y2U5YjBjNTgxMjI4OWQzNjI1ZjE0MDMxMmRiZTlhN2JkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMxODIsNiArMzE4Miw4
IEBACiAJCUE2MjJBOEZDMTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEY2
MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCAqLzsgfTsKIAkJQTYy
MkE4RkQxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEY3MTIyQzQ0QTYwMEE3
ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmggKi87IH07CiAJCUE2MjJBOEZGMTIyQzQ0QTYw
MEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTYyMkE4RjkxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5k
aW5nLmggKi87IH07CisJCUE3MDA1Q0NDMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3MDA1Q0NBMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmNwcCAqLzsgfTsKKwkJQTcwMDVDQ0QxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3MDA1Q0NCMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTcxNTFCRDgxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE1MUJE
NzEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzE4NzYwRTBCMkExMjAxMDBBMTZF
Q0UgLyogRHJhZ0FjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3MTg3NjBEMEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTg3ODkwMEIy
RDA0QUMwMEExNkVDRSAvKiBEcmFnQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTg3ODhGMEIyRDA0QUMwMEExNkVDRSAvKiBE
cmFnQ29udHJvbGxlck1hYy5tbSAqLzsgfTsKQEAgLTQ3NzUsNyArNDc3Nyw2IEBACiAJCUI3NzZE
NDNEMTEwNDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjc3NkQ0M0MxMTA0NTI3NTAwQkVCMEVDIC8q
IFByaW50Q29udGV4dC5jcHAgKi87IH07CiAJCUI4ODVFOEQ0MTFFMDZERDIwMDlGRkJGNCAvKiBJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4RDIxMUUwNkREMjAwOUZGQkY0IC8qIEluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgKi87IH07CiAJCUI4ODVFOEQ1MTFFMDZERDIw
MDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4ODVFOEQzMTFFMDZERDIwMDlGRkJG
NCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9ICgpOyB9OyB9OwotCQlCOEE2QTZENTEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVj
dGlvblBhbmVsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCOERCREI0
QjEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCOERCREI0NzEzMEIwRjhBMDBGNUNE
QjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgKi87IH07CiAJCUI4REJEQjRDMTMwQjBGOEEw
MEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCOERCREI0ODEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2Vs
ZWN0aW9uQ29tbWFuZC5oICovOyB9OwogCQlCOERCREI0RDEzMEIwRjhBMDBGNUNEQjEgLyogU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAgKi87IH07CkBAIC05NjY1LDYgKzk2NjYsOCBAQAogCQlBNjIyQThG
NjEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcDsgcGF0aCA9
IGdlbmVyaWMvQmluZGluZ1NlY3VyaXR5QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE2MjJBOEY3MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJpbmRpbmdTZWN1cml0eUJhc2UuaDsg
cGF0aCA9IGdlbmVyaWMvQmluZGluZ1NlY3VyaXR5QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJpY0JpbmRpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR2VuZXJpY0JpbmRpbmcuaDsgcGF0aCA9
IGdlbmVyaWMvR2VuZXJpY0JpbmRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3MDA1Q0NC
MTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0
IC8qIFRleHRDaGVja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRDaGVja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTg3
NjBEMEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEcmFnQWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzE4Nzg4RjBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xsZXJNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnQ29udHJvbGxlck1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMTY1LDcgKzExMTY4LDYgQEAKIAkJQjc3
NkQ0M0MxMTA0NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmludENvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCODg1RThEMjExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI4
QTZBNkQ0MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcnJlY3Rpb25QYW5lbEluZm8uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDcxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVj
dGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2V0
U2VsZWN0aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4REJE
QjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldFNlbGVjdGlvbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNTQzNiw3ICsxNTQzOCw2IEBACiAJCQkJOTMzMDlEOEMwOTlFNjQ5MTAwNTZFNTgxIC8q
IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuaCAqLywKIAkJCQk5MzMwOUQ4RDA5OUU2NDkxMDA1NkU1
ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5RDhFMDk5RTY0OTEw
MDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFuZC5oICovLAotCQkJCUI4QTZBNkQ0MTI3QjMz
OEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmggKi8sCiAJCQkJRDBCMDU1NjcwOUM2
NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmNwcCAqLywKIAkJCQlEMEIwNTU2NjA5
QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQuaCAqLywKIAkJCQkxQzRDOEY2MzBB
RDg2NTVEMDA5NDc1Q0UgLyogRGVsZXRlQnV0dG9uLmNwcCAqLywKQEAgLTE1NTE4LDYgKzE1NTE5
LDggQEAKIAkJCQlBNzhGRTEzQTEyMzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVja2VyLmggKi8s
CiAJCQkJQjhEQkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwICovLAogCQkJCUI4REJEQjRBMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmggKi8sCisJCQkJQTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwICovLAorCQkJCUE3MDA1Q0NCMTMzMEM0QkEwMDBD
QzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggKi8sCiAJCQkJOTMzMDlEQzIw
OTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5
REMzMDk5RTY0OTEwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21tYW5kLmggKi8sCiAJCQkJOTMz
MDlEQzQwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb21tYW5kLmNwcCAqLywKQEAg
LTE5ODM4LDcgKzE5ODQxLDYgQEAKIAkJCQk5MzUyMDg4MjA5QkQ0NUU5MDBGMjAzOEQgLyogQ29v
a2llSmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2NDEyRDI2RTM4MDBFNzk0MTUgLyog
Q29va2llU3RvcmFnZUNGTmV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTZGRDQ4ODBGNjc2RTU3
MDAwOTI4NzMgLyogQ29vcmRpbmF0ZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUI4QTZBNkQ1MTI3
QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODBFNkQwNDBBMTk4OUNBMDA3RkI4QzUgLyogQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM1RUI5NzkwRTgyMDY5MjAwQjI1OTY1IC8qIENvdW50ZXJDb250ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzVFQjk1MTBFODIwNTZCMDBCMjU5NjUgLyogQ291bnRlckRpcmVjdGl2ZXMu
aCBpbiBIZWFkZXJzICovLApAQCAtMjIxMjYsNiArMjIxMjgsNyBAQAogCQkJCTc1NDE1QjAwMTI5
NThENUUwMDNBRDY2OSAvKiBTcGVlY2hJbnB1dFJlc3VsdExpc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3OEZFMTNDMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUI4REJEQjRFMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyog
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlF
MTIwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzMzA5RTE0MDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTYwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMjUzNDYs
NiArMjUzNDksNyBAQAogCQkJCTMxOUU2ODg3MTMyN0M5MTEwMDRBQzkxQSAvKiBKU1dlYktpdEFu
aW1hdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTlFNjlCMjEzMjk5QkJEMDA0
QUM5MUEgLyogV2ViS2l0QW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxOUU2OUI1
MTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUE3MDA1Q0NDMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJl
Y3Rpb25QYW5lbEluZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYwOTllMTYy
ZmE3MmY3ZjEzOWQ2M2ZjMTM3OGM0YjRiMzNmM2ZlNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25Q
YW5lbEluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgQ29ycmVjdGlvblBhbmVsSW5mb19oCi0jZGVmaW5lIENvcnJlY3Rpb25QYW5lbEluZm9faAot
Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQotLy8gU29tZSBwbGF0Zm9ybXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhdXRv
Y29ycmVjdGlvbi4KLSNkZWZpbmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAxCi0vLyBT
b21lIHBsYXRmb3JtcyB1c2Ugc3BlbGxpbmcgYW5kIGF1dG9jb3JyZWN0aW9uIG1hcmtlcnMgdG8g
cHJvdmlkZSB2aXN1YWwgY3VlLgotLy8gT24gc3VjaCBwbGF0Zm9ybSwgaWYgd29yZCB3aXRoIG1h
cmtlciBpcyBlZGl0ZWQsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBtYXJrZXIuCi0jZGVmaW5lIFJF
TU9WRV9NQVJLRVJTX1VQT05fRURJVElORyAxCi0jZWxzZQotI2RlZmluZSBTVVBQT1JUX0FVVE9D
T1JSRUNUSU9OX1BBTkVMIDAKLSNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDAK
LSNlbmRpZiAvLyAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQotCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1zdHJ1Y3QgQ29ycmVjdGlvblBhbmVsSW5mbyB7Ci0gICAgZW51bSBQYW5lbFR5cGUg
ewotICAgICAgICBQYW5lbFR5cGVDb3JyZWN0aW9uID0gMCwKLSAgICAgICAgUGFuZWxUeXBlUmV2
ZXJzaW9uLAotICAgICAgICBQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zCi0gICAgfTsKLQot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQ7Ci0gICAgU3RyaW5nIHJlcGxhY2Vk
U3RyaW5nOwotICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZzsKLSAgICBQYW5lbFR5cGUgcGFu
ZWxUeXBlOwotICAgIGJvb2wgaXNBY3RpdmU7Ci19OwotCi1lbnVtIFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWwgewotICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWxDYW5jZWxsZWQgPSAwLAotICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJ
Z25vcmVkLAotICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZAot
fTsKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENvcnJlY3Rpb25QYW5lbElu
Zm9faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCmluZGV4IGU0
ZTBiYmI2Y2ZlMGMwOWEwNzU2YTk2OWVmNjgzZjVhODQ3NjIzZmEuLmYzOGNiZTYyYTYwZGUxMWNk
MGYxYzExM2E5OWYwYzJkMDBlYWViOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmdBbGxJbk9uZS5jcHAKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlIDxTZXROb2RlQXR0cmli
dXRlQ29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8U21hcnRSZXBsYWNlLmNwcD4KICNpbmNsdWRlIDxT
bWFydFJlcGxhY2VDRi5jcHA+CisjaW5jbHVkZSA8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5jcHA+CiAjaW5jbHVkZSA8U3BlbGxDaGVja2VyLmNwcD4KICNpbmNsdWRlIDxTcGxpdEVsZW1l
bnRDb21tYW5kLmNwcD4KICNpbmNsdWRlIDxTcGxpdFRleHROb2RlQ29tbWFuZC5jcHA+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggODgwNzk2NTA2OGE0MzkxMGE5YWQ5MzY1MWUxNDYy
ZWNjOGU5Y2Y5YS4uNWQ3YTA0Y2ZjOTczYWUyM2M4NDk0NGM5YmIyNjM2ZWU0ZDcwNzMzNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkRXZlbnQuaCIKICNpbmNs
dWRlICJDb21wb3NpdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkNyZWF0ZUxpbmtDb21tYW5kLmgiCiAjaW5jbHVkZSAiRGVs
ZXRlQnV0dG9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
aCIKQEAgLTk0LDM1ICs5NSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBu
YW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKLXsKLSAg
ICAvLyBUaGVzZSBhcmUgY2hhcmFjdGVycyB0aGF0IGNhbiBiZWhhdmUgYXMgd29yZCBib3VuZGFy
aWVzLCBidXQgY2FuIGFwcGVhciB3aXRoaW4gd29yZHMuCi0gICAgLy8gSWYgdGhleSBhcmUganVz
dCB0eXBlZCwgaS5lLiBpZiB0aGV5IGFyZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGNhcmV0
LCB3ZSB3YW50IHRvIGRlbGF5IHRleHQgY2hlY2tpbmcgdW50aWwgdGhlIG5leHQgY2hhcmFjdGVy
IGhhcyBiZWVuIHR5cGVkLgotICAgIC8vIEZJWE1FOiB0aGlzIGlzIHJlcXVpcmVkIHVudGlsIDY4
NTMwMjcgaXMgZml4ZWQgYW5kIHRleHQgY2hlY2tpbmcgY2FuIGRvIHRoaXMgZm9yIHVzLgotICAg
IHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0ZXIgPT0gcmlnaHRTaW5nbGVRdW90
YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5jdHVhdGlvbkdlcnNoYXlpbTsKLX0K
LQotc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtl
clR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVj
dG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVj
dGlvbiwgKCkpOwotICAgIGlmIChtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmlzRW1wdHko
KSkgewotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0
aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7Ci0gICAgICAg
IG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVs
bENoZWNraW5nRXhlbXB0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yQXV0
b0NvcnJlY3Rpb247Ci19Ci0KLXN0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkKLXsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5cGVz
Rm9yUmVwbGFjZW1lbnQsICgpKTsKLSAgICBpZiAobWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5hcHBlbmQoRG9j
dW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JSZXBsYWNl
bWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotICAg
IH0KLSAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudDsKLX0KLQogLy8gV2hlbiBh
biBldmVudCBoYW5kbGVyIGhhcyBtb3ZlZCB0aGUgc2VsZWN0aW9uIG91dHNpZGUgb2YgYSB0ZXh0
IGNvbnRyb2wKIC8vIHdlIHNob3VsZCB1c2UgdGhlIHRhcmdldCBjb250cm9sJ3Mgc2VsZWN0aW9u
IGZvciB0aGlzIGVkaXRpbmcgb3BlcmF0aW9uLgogVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6OnNl
bGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQpAQCAtNTE4LDQ4ICs0OTAsNyBAQCB2b2lk
IEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBvbGRTZWxlY3Rpb24pCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpOwogICAgIG1fZGVsZXRlQnV0dG9uQ29udHJvbGxlci0+
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwotCi0jaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgIC8vIFdoZW4gdXNlciBt
b3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3
ZSBzaG93IHRoZSBwYW5lbAotICAgIC8vIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHByZS1jb3Jy
ZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJldmVydCB0aGUKLSAgICAvLyB1
bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24gcGFuZWwg
dGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKLSAgICAvLyB0aGUgbmV3IGNhcmV0IHBvc2l0aW9u
IGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgotICAgIGlmICghY3VycmVudFNlbGVjdGlvbi5pc0Nh
cmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlvbiA9IGN1cnJlbnRTZWxl
Y3Rpb24uc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25PZldvcmQgPSBl
bmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBp
ZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRpb25PZldvcmQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2
YWxlbnQoKTsKLSAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIG5vZGUg
PSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgaW50IGVuZE9mZnNldCA9IHBvc2l0aW9u
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFy
a2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7
Ci0gICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IERvY3VtZW50
TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAgICBpZiAoKChtYXJrZXIudHlwZSA9
PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgJiYgIW1hcmtlci5kZXNjcmlwdGlvbi5pc051
bGwoKSkgfHwgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0
aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQpID09IGVuZE9mZnNldCkgewotICAgICAgICAg
ICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGZyYW1lKCktPmRvY3Vt
ZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCk7
Ci0gICAgICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdl
dCgpKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50V29yZC5sZW5ndGgoKSkgewotICAgICAgICAg
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5n
ZTsKLSAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcg
PSBjdXJyZW50V29yZDsKLSAgICAgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9jdW1l
bnRNYXJrZXI6OlNwZWxsaW5nKQotICAgICAgICAgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25Q
YW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlv
bnMpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb247Ci0g
ICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvLyBT
VVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6
cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1Nl
bGVjdGlvbikKQEAgLTEwNjIsMTAgKzk5Myw3IEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGlu
ZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRl
bnRDaGFuZ2VkRXZlbnRzKCpjbWQpOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
KGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkpOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9Q
QU5FTAotICAgIGlmIChjbWQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNtZC0+c2hvdWxkUmV0
YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5k
aWNhdG9yKTsKLSNlbmRpZgorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0FwcGxp
ZWRFZGl0aW5nKGNtZC5nZXQoKSk7CiAKICAgICAvLyBEb24ndCBjbGVhciB0aGUgdHlwaW5nIHN0
eWxlIHdpdGggdGhpcyBzZWxlY3Rpb24gY2hhbmdlLiAgV2UgZG8gdGhvc2UgdGhpbmdzIGVsc2V3
aGVyZSBpZiBuZWNlc3NhcnkuCiAgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1Nl
bGVjdGlvbiwgZmFsc2UsIGZhbHNlKTsKQEAgLTExMjUsMTYgKzEwNTMsMTMgQEAgRWRpdG9yOjpF
ZGl0b3IoRnJhbWUqIGZyYW1lKQogICAgICwgbV9zaG91bGRTdHlsZVdpdGhDU1MoZmFsc2UpCiAg
ICAgLCBtX2tpbGxSaW5nKGFkb3B0UHRyKG5ldyBLaWxsUmluZykpCiAgICAgLCBtX3NwZWxsQ2hl
Y2tlcihuZXcgU3BlbGxDaGVja2VyKGZyYW1lLCBmcmFtZS0+cGFnZSgpID8gZnJhbWUtPnBhZ2Uo
KS0+ZWRpdG9yQ2xpZW50KCktPnRleHRDaGVja2VyKCkgOiAwKSkKLSAgICAsIG1fY29ycmVjdGlv
blBhbmVsVGltZXIodGhpcywgJkVkaXRvcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCkKKyAg
ICAsIG1fc3BlbGxpbmdDb3JyZWN0b3IobmV3IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIo
ZnJhbWUpKQogICAgICwgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkKGZhbHNlKQog
ewogfQogCiBFZGl0b3I6On5FZGl0b3IoKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKLSAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWxJZ25vcmVkKTsKLSNlbmRpZgogfQogCiB2b2lkIEVkaXRvcjo6Y2xlYXIoKQpA
QCAtMTE3OSw3ICsxMTA0LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGlu
Z1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAodGV4
dC5sZW5ndGgoKSA9PSAxICYmIGlzUHVuY3QodGV4dFswXSkgJiYgIWlzQW1iaWd1b3VzQm91bmRh
cnlDaGFyYWN0ZXIodGV4dFswXSkpCiAgICAgICAgIHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRv
Y29ycmVjdGlvbiA9IHRydWU7CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCA9
IHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlvbiAmJiBhcHBseUF1dG9jb3JyZWN0
aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25X
YXNBcHBsaWVkID0gc2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0aW9uICYmIG1fc3Bl
bGxpbmdDb3JyZWN0b3ItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJp
YXRlKCk7CiAKICAgICAvLyBHZXQgdGhlIHNlbGVjdGlvbiB0byB1c2UgZm9yIHRoZSBldmVudCB0
aGF0IHRyaWdnZXJlZCB0aGlzIGluc2VydFRleHQuCiAgICAgLy8gSWYgdGhlIGV2ZW50IGhhbmRs
ZXIgY2hhbmdlZCB0aGUgc2VsZWN0aW9uLCB3ZSBtYXkgd2FudCB0byB1c2UgYSBkaWZmZXJlbnQg
c2VsZWN0aW9uCkBAIC0xMjE1LDcgKzExNDAsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0TGluZUJy
ZWFrKCkKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVk
ID0gYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKKyAgICBi
b29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlB
dXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21t
YW5kOjppbnNlcnRMaW5lQnJlYWsobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25J
c0FwcGxpZWQgPyBUeXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6
IDApOwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCkBAIC0x
MjMzLDcgKzExNTgsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkK
ICAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gYXBw
bHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKKyAgICBib29sIGF1
dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlBdXRvY29y
cmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjpp
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rp
b25Jc0FwcGxpZWQgPyBUeXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRv
ciA6IDApOwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCkBA
IC0xNDY0LDcgKzEzODksNyBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxh
Y2VtZW50KCkKIAogYm9vbCBFZGl0b3I6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5h
YmxlZCgpCiB7Ci0gICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5pc0F1dG9tYXRpY1Nw
ZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKKyAgICByZXR1cm4gbV9zcGVsbGluZ0NvcnJlY3Rv
ci0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7CiB9CiAKIHZvaWQgRWRp
dG9yOjp0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKQpAQCAtMjA2MCwyNCArMTk4
NSw5IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKQogeworICAgIG1f
c3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJU
eXBpbmcpOworCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSNpZiBTVVBQT1JUX0FVVE9DT1JS
RUNUSU9OX1BBTkVMCi0gICAgLy8gQXBwbHkgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUg
bmV4dCByb3VuZCBvZiBzcGVsbCBjaGVja2luZy4KLSAgICBib29sIGRvQXBwbHlDb3JyZWN0aW9u
ID0gdHJ1ZTsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IHNlbGVjdGlv
bkFmdGVyVHlwaW5nLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFdvcmQgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIExl
ZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIFJpZ2h0V29y
ZElmT25Cb3VuZGFyeSkpOwotICAgIGlmIChjdXJyZW50V29yZC52aXNpYmxlRW5kKCkgPT0gc3Rh
cnRPZlNlbGVjdGlvbikgewotICAgICAgICBTdHJpbmcgd29yZFRleHQgPSBwbGFpblRleHQoY3Vy
cmVudFdvcmQudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Ci0gICAgICAgIGlmICh3b3JkVGV4
dC5sZW5ndGgoKSA+IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcih3b3JkVGV4dFt3
b3JkVGV4dC5sZW5ndGgoKSAtIDFdKSkKLSAgICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0g
ZmFsc2U7Ci0gICAgfQotICAgIGlmIChkb0FwcGx5Q29ycmVjdGlvbikKLSAgICAgICAgZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0
ZWQpOwotICAgIGVsc2UKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkLmNsZWFyKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5
cGluZyk7Ci0jZW5kaWYKICAgICBUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaGVja2luZ09wdGlv
bnMgPSAwOwogICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAg
ICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IE1hcmtTcGVsbGluZzsKQEAgLTIxMDQsNyArMjAx
NCw2IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgfQogCiAjZWxzZQotICAgIFVOVVNF
RF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7CiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIyMTksNyArMjEyOCw3
IEBAIHZvaWQgRWRpdG9yOjptYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCiB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaGVja2luZ09wdGlvbnMsIFJhbmdlKiBz
cGVsbGluZ1JhbmdlLCBSYW5nZSogZ3JhbW1hclJhbmdlKQogewogICAgIC8vIFRoZXJlIHNob3Vs
ZG4ndCBiZSBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGF0IHRoaXMgbW9tZW50LgotICAgIEFTU0VS
VCghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKTsKKyAgICBBU1NFUlQo
IW1fc3BlbGxpbmdDb3JyZWN0b3ItPmhhc1BlbmRpbmdDb3JyZWN0aW9uKCkpOwogCiAgICAgYm9v
bCBzaG91bGRNYXJrU3BlbGxpbmcgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYgTWFya1NwZWxsaW5n
OwogICAgIGJvb2wgc2hvdWxkTWFya0dyYW1tYXIgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYgTWFy
a0dyYW1tYXI7CkBAIC0yMjkxLDExICsyMjAwLDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gK
ICAgICB9CiAgICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFyYWdyYXBo
LnRleHRDaGFyYWN0ZXJzKCksIHBhcmFncmFwaC50ZXh0TGVuZ3RoKCksIGNoZWNraW5nVHlwZXMs
IHJlc3VsdHMpOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgIC8vIElm
IHRoaXMgY2hlY2tpbmcgaXMgb25seSBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBz
aG91bGRuJ3QgYm90aGVyIHRvIG1hcmsgbWlzc3BlbGxpbmdzLgogICAgIGlmIChzaG91bGRTaG93
Q29ycmVjdGlvblBhbmVsKQogICAgICAgICBzaG91bGRNYXJrU3BlbGxpbmcgPSBmYWxzZTsKLSNl
bmRpZgogCiAgICAgaW50IG9mZnNldER1ZVRvUmVwbGFjZW1lbnQgPSAwOwogCkBAIC0yMzE0LDEw
ICsyMjIxLDggQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICAgICAgaWYgKHNob3VsZE1h
cmtTcGVsbGluZyAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYm
IHJlc3VsdExvY2F0aW9uID49IHNwZWxsaW5nUGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSAmJiBy
ZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA8PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYm
ICFyZXN1bHRFbmRzQXRBbWJpZ3VvdXNCb3VuZGFyeSkgewogICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICBSZWZQ
dHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBzcGVsbGluZ1BhcmFncmFwaC5zdWJyYW5nZShy
ZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMCi0gICAgICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5o
YXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENo
ZWNraW5nRXhlbXB0aW9uKSkKKyAgICAgICAgICAgIGlmICghbV9zcGVsbGluZ0NvcnJlY3Rvci0+
aXNTcGVsbGluZ01hcmtlckFsbG93ZWQobWlzc3BlbGxpbmdSYW5nZSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0jZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAg
ICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCktPmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcpOwogICAgICAgICB9IGVsc2UgaWYgKHNob3VsZE1hcmtHcmFtbWFyICYm
IHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBncmFtbWFyUGFyYWdy
YXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMocmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCkpIHsK
ICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49
IDApOwpAQCAtMjM3NiwyNCArMjI4MSwxNiBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAg
ICAgICAgICAgaWYgKCFkb1JlcGxhY2VtZW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICAgICAgaWYgKHNob3Vs
ZFNob3dDb3JyZWN0aW9uUGFuZWwpIHsKKyAgICAgICAgICAgICAgICAvLyBzaG91bGRTaG93Q29y
cmVjdGlvblBhbmVsIGNhbiBiZSB0cnVlIG9ubHkgd2hlbiB0aGUgcGFuZWwgaXMgYXZhaWxhYmxl
LgogICAgICAgICAgICAgICAgIGlmIChyZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA9PSBz
cGVsbGluZ1JhbmdlRW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkg
c2hvdyB0aGUgY29ycmVjdGlvbiBwYW5lbCBvbiB0aGUgbGFzdCB3b3JkLgotICAgICAgICAgICAg
ICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UocmFuZ2VU
b1JlcGxhY2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYm91bmRpbmdCb3guaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHJhbmdlVG9SZXBs
YWNlOwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAgICAgICAgICAgICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSByZXN1bHQtPnJl
cGxhY2VtZW50OwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNB
Y3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rp
b25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCByZXN1bHQtPnJlcGxhY2VtZW50LCBW
ZWN0b3I8U3RyaW5nPigpLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zcGVsbGluZ0Nv
cnJlY3Rvci0+c2hvdyhyYW5nZVRvUmVwbGFjZSwgcmVzdWx0LT5yZXBsYWNlbWVudCk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBh
bmVsLCB3ZSBpZ25vcmUgb3RoZXIgY29ycmVjdGlvbiBvciByZXBsYWNlbWVudC4KICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSNlbmRpZgogCiAgICAgICAgICAgICBp
ZiAoc2VsZWN0aW9uVG9SZXBsYWNlICE9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KSkgewogICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENo
YW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQpAQCAtMjQ2NywxNyArMjM2NCwxMiBA
QCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZykKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRTdHJpbmcs
IHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBTdHJpbmcg
cmVwbGFjZW1lbnQgPSBwbGFpblRleHQoc2VsZWN0aW9uLmdldCgpKTsKLSAgICBjbGllbnQoKS0+
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9u
UmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudCk7Ci0jZW5kaWYKKyAgICBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQocmVw
bGFjZWRTdHJpbmcsIHNlbGVjdGlvbik7CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFn
cmFwaChzZWxlY3Rpb24pOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0
cmluZywgZmFsc2UsIGZhbHNlKTsKICAgICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IHBh
cmFncmFwaC5zdWJyYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmlu
Zy5sZW5ndGgoKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1h
cmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotI2VuZGlmCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+
bWFya1JldnNlcnNlZChjaGFuZ2VkUmFuZ2UuZ2V0KCkpOwogfQogCiAjZW5kaWYKQEAgLTI0OTks
MTQzICsyMzkxLDMxIEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
cihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjCiAjZW5kaWYKIH0KIAotdm9p
ZCBFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopCi17Ci0j
aWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIG1fY29ycmVjdGlvblBhbmVsSXNE
aXNtaXNzZWRCeUVkaXRvciA9IGZhbHNlOwotICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
Q29ycmVjdGlvbjogewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihmcmFtZSgp
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKLSAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
OwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0
aW9uKHAsIHN0YXJ0KTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhNYXJrU3BlbGxpbmcgfCBTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRz
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOwotICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsKLSAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBh
bmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZywgVmVj
dG9yPFN0cmluZz4oKSwgdGhpcyk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKLSAgICAg
ICAgaWYgKHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQu
Z2V0KCkpICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
KS5wYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2Vz
dGlvbnM7Ci0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMp
OwotICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB0b3BTdWdnZXN0aW9uID0gc3VnZ2Vz
dGlvbnMuZmlyc3QoKTsKLSAgICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDApOwotICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VkU3RyaW5nLCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucywgdGhpcyk7Ci0gICAg
fQotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBFZGl0b3I6OmhhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0gICAg
UmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQuZ2V0KCk7Ci0gICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3VtZW50
KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdv
cmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVy
IGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgotICAgIGlmIChjdXJyZW50V29y
ZCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotCi0gICAg
c3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7Ci0gICAgY2FzZSBDb3Jy
ZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgotICAgICAgICBpZiAoY29ycmVj
dGlvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKLSAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBh
bmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3Ip
Ci0gICAgICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5n
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZVJldmVyc2lvbjoKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0
aCgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJp
bmcgPSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFy
KCk7Ci19Ci0KLXZvaWQgRWRpdG9yOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQordm9pZCBFZGl0b3I6OnN0YXJ0Q29ycmVjdGlv
blBhbmVsVGltZXIoKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBj
b25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsKLSAgICBpZiAo
aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKHR5
cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAg
ICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2Ug
aGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQuCi0gICAgICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSAgICAgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7Ci0gICAgICAgIG1fY29ycmVjdGlv
blBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwpOwot
ICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotI2VuZGlmCisgICAgbV9zcGVs
bGluZ0NvcnJlY3Rvci0+c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKTsKIH0KIAotdm9pZCBFZGl0b3I6OnN0b3BDb3JyZWN0
aW9uUGFuZWxUaW1lcigpCit2b2lkIEVkaXRvcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkKIHsK
LSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxU
aW1lci5zdG9wKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LmNsZWFyKCk7Ci0jZW5kaWYKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5oYW5kbGVDYW5jZWxP
cGVyYXRpb24oKTsKIH0KIAotdm9pZCBFZGl0b3I6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCit2
b2lkIEVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3Qg
U3RyaW5nJiBjb3JyZWN0aW9uKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwK
LSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotICAgIGlmIChj
bGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCk7Ci0jZW5kaWYKKyAgICBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc2VsZWN0
aW9uT2ZDb3JyZWN0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9y
Ojppc1Nob3dpbmdDb3JyZWN0aW9uUGFuZWwoKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJ
T05fUEFORUwKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+aXNT
aG93aW5nQ29ycmVjdGlvblBhbmVsKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpOwog
fQogCi12b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCit2b2lkIEVkaXRvcjo6dXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2Vs
ZWN0aW9uQXRXb3JkQm91bmRhcnkpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5F
TAotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgIGlmICghbV9z
cGVsbGluZ0NvcnJlY3Rvci0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBm
YWxzZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSB0cnVlOwot
ICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwocmVhc29uRm9yRGlzbWlzc2luZyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZWFzb25G
b3JEaXNtaXNzaW5nKTsKLSNlbmRpZgotfQotdm9pZCBFZGl0b3I6OnJlbW92ZVNwZWxsQW5kQ29y
cmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVj
dGlvbkF0V29yZEJvdW5kYXJ5KQoteworCiAgICAgLy8gV2Ugd2FudCB0byByZW1vdmUgdGhlIG1h
cmtlcnMgZnJvbSBhIHdvcmQgaWYgYW4gZWRpdGluZyBjb21tYW5kIHdpbGwgY2hhbmdlIHRoZSB3
b3JkLiBUaGlzIGNhbiBoYXBwZW4gaW4gb25lIG9mCiAgICAgLy8gc2V2ZXJhbCBzY2VuYXJpb3M6
CiAgICAgLy8gMS4gSW5zZXJ0IGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkLgpAQCAtMjcwMSwxMDIg
KzI0ODEsNiBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zy
b21Xb3Jkc1RvQmVFZGl0ZWQoYm9vbCBkb05vdFJlbW92ZQogICAgIGRvY3VtZW50LT5tYXJrZXJz
KCktPmNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZSh3b3JkUmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiB9CiAKLXZvaWQgRWRpdG9yOjph
cHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMCi0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0
cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgaWYgKGVj
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5p
bmdDb3JyZWN0aW9uLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5kKHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSkpOwotCi0g
ICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVSZXBsYWNl
ZCwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgotICAgIC8vIEhvd2V2ZXIs
IG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRvQmVS
ZXBsYWNlZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KLSAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkg
b3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24g
b2YgcmFuZ2VUb0JlUmVwbGFjZWQKLSAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRp
b24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zm
c2V0SW5QYXJhZ3JhcGgKLSAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBv
YnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKLSAgICAv
LyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBv
c2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkLgotICAgIFJlZlB0cjxSYW5nZT4gY29ycmVjdGlv
blN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhS
YW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCks
IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICBp
ZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJh
bmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhB
c1JhbmdlLT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVy
Tm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5D
b250YWluZXJOb2RlKCksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3
ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KLSAgICBp
bnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7Ci0K
LSAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2Qg
bWF5IHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgotICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOwotICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yZXBsYWNlbWVudFN0cmluZykpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRh
aW5pbmdDb3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCku
c3RhcnQoKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBj
b3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nIG5ld1RleHQgPSBwbGFpblRl
eHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVw
bGFjZW1lbnQgc3VjY2VlZGVkLgotICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlvblBhbmVs
SW5mby5yZXBsYWNlbWVudFN0cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWlu
ZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIHNpemVfdCBzaXplID0gbWFya2VyVHlw
ZXNUb0FkZC5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPT0gQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKQotICAgICAgICAgICAgbWFya2Vycy0+YWRk
TWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGVzVG9BZGRbaV0pOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5n
ZS5nZXQoKSwgbWFya2VyVHlwZXNUb0FkZFtpXSwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VkU3RyaW5nKTsKLSAgICB9Ci0jZWxzZSAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVM
Ci0gICAgVU5VU0VEX1BBUkFNKG1hcmtlclR5cGVzVG9BZGQpOwotI2VuZGlmIC8vIFNVUFBPUlRf
QVVUT0NPUlJFQ1RJT05fUEFORUwKLX0KLQotYm9vbCBFZGl0b3I6OmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKLXsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCB8fCAhbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9u
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0g
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0KLSAgICBpZiAobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNh
cmV0UG9zaXRpb24pIHsKLSAgICAgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9IAotICAgIAotICAgIC8vIFBlbmRpbmcgY29ycmVjdGlvbiBzaG91bGQgYWx3YXlzIGJl
IHdoZXJlIGNhcmV0IGlzLiBCdXQgaW4gY2FzZSB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgd2Ug
c3RpbGwgd2FudCB0byBkaXNtaXNzIHRoZSBwYW5lbCB3aXRob3V0IGFjY2VwdGluZyB0aGUgY29y
cmVjdGlvbi4KLSAgICBBU1NFUlQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pOwotICAgIGRpc21pc3NDb3JyZWN0
aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxsQ29ycmVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3Ry
aW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKLXsKLSNpZiBTVVBQT1JU
X0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQs
IGNvcnJlY3Rpb24pOwotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwot
ICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0
ZWQsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNsb3NlVHlwaW5nIHwgU2VsZWN0aW9uQ29udHJvbGxl
cjo6Q2xlYXJUeXBpbmdTdHlsZSB8IFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsQ29ycmVjdGlv
blRyaWdnZXJlZCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9m
cmFtZS0+ZG9jdW1lbnQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0
KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0KLSAgICBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCk7Ci0gICAgbWFya2Vycy0+cmVtb3ZlTWFya2VycyhyYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nKTsKLSAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdl
LmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0jZWxzZSAv
LyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlv
bk9mQ29ycmVjdGVkKTsKLSAgICBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsKLSAgICBVTlVTRURf
UEFSQU0oY29ycmVjdGlvbik7Ci0jZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5F
TAotfQotCiBQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50
UG9pbnQmIHdpbmRvd1BvaW50KQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUt
PmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7CkBAIC0zNDkxLDE0ICszMTc1LDcgQEAgdm9p
ZCBFZGl0b3I6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCBmbGFnKQog
CiB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNldFNlbGVjdGlvbk9w
dGlvbnMgb3B0aW9ucykKIHsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAg
Ly8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2Ug
Y2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcigpIGJlbG93LgotICAgIFZpc2libGVT
ZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCkpOwotICAgIGlmIChjdXJyZW50U2VsZWN0aW9uICE9IG9sZFNlbGVjdGlvbikgewotICAgICAg
ICBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKTsKLSAgICAgICAgZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Ci0gICAgfQot
I2VuZGlmIC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICBtX3NwZWxsaW5nQ29y
cmVjdG9yLT5zdG9wUGVuZGluZ0NvcnJlY3Rpb24ob2xkU2VsZWN0aW9uKTsKIAogICAgIGJvb2wg
Y2xvc2VUeXBpbmcgPSBvcHRpb25zICYgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmc7
CiAgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHRoaXMtPmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CkBAIC0zNTE1LDEwICszMTkyLDggQEAgdm9p
ZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgb2xkU2VsZWN0aW9uLCBTZWwKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgc2hvdWxkQ2hl
Y2tTcGVsbGluZ0FuZEdyYW1tYXIgPSB0cnVlOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgc3BlbGxpbmcgYW5kIGdyYW1tYXIgaWYgdGhl
IGNoYW5nZSBvZiBzZWxlY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IHNwZWxsaW5nIGNvcnJlY3Rpb24g
aXRzZWxmLgogICAgICAgICBzaG91bGRDaGVja1NwZWxsaW5nQW5kR3JhbW1hciA9ICEob3B0aW9u
cyAmIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0jZW5k
aWYKIAogICAgICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVjayBzcGVsbGluZyBlbHNld2hlcmUs
IHNvIGRvbid0IHJlZG8gaXQgaGVyZS4KICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNoYW5nZSBp
biBzZWxlY3Rpb24gcmVzdWx0aW5nIGZyb20gYSBkZWxldGUgb3BlcmF0aW9uLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgKaW5kZXggZTFhNzExOTI0NWU4M2JlZDEwZDczZDIwNWVmZTIxNTQwODVjNTY5
ZS4uZTg0NzIxZjJlZmUwZDg3NzU4NWIwNjNmZTdmOWNlNjc5OWUxYjU1MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5oCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDbGlwYm9hcmRBY2Nl
c3NQb2xpY3kuaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkNvcnJlY3Rpb25QYW5l
bEluZm8uaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIkVkaXRBY3Rp
b24uaCIKICNpbmNsdWRlICJFZGl0aW5nQmVoYXZpb3IuaCIKQEAgLTUwLDYgKzQ5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CiBjbGFz
cyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ2xpcGJvYXJkOworY2xhc3MgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjsKIGNsYXNzIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI7CiBjbGFz
cyBFZGl0Q29tbWFuZDsKIGNsYXNzIEVkaXRvckNsaWVudDsKQEAgLTMyMSw5ICszMjEsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBhZGRUb0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBwcmVwZW5kKTsKIAog
ICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCk7Ci0gICAgdm9pZCBzdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSk7CisgICAgdm9pZCBz
dGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CisKICAgICAvLyBJZiB1c2VyIGNvbmZpcm1lZCBh
IGNvcnJlY3Rpb24gaW4gdGhlIGNvcnJlY3Rpb24gcGFuZWwsIGNvcnJlY3Rpb24gaGFzIG5vbi16
ZXJvIGxlbmd0aCwgb3RoZXJ3aXNlIGl0IG1lYW5zIHRoYXQgdXNlciBoYXMgZGlzbWlzc2VkIHRo
ZSBwYW5lbC4KLSAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJp
bmcmIGNvcnJlY3Rpb24pOwogICAgIGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CiAK
ICAgICB2b2lkIHBhc3RlQXNGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBi
b29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlKTsKQEAgLTM3OSw3ICszNzksNyBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgc2VsZWN0aW9uU3RhcnRIYXNTcGVsbGluZ01hcmtl
ckZvcihpbnQgZnJvbSwgaW50IGxlbmd0aCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVTcGVsbEFu
ZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChib29sIGRvTm90UmVtb3ZlSWZT
ZWxlY3Rpb25BdFdvcmRCb3VuZGFyeSk7CisgICAgdm9pZCB1cGRhdGVNYXJrZXJzRm9yV29yZHNB
ZmZlY3RlZEJ5RWRpdGluZyhib29sIG9ubHlIYW5kbGVXb3Jkc0NvbnRhaW5pbmdTZWxlY3Rpb24p
OwogCiBwcml2YXRlOgogICAgIEZyYW1lKiBtX2ZyYW1lOwpAQCAtMzk0LDEwICszOTQsOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2U7CiAgICAg
Ym9vbCBtX3Nob3VsZFN0eWxlV2l0aENTUzsKICAgICBPd25QdHI8S2lsbFJpbmc+IG1fa2lsbFJp
bmc7Ci0gICAgQ29ycmVjdGlvblBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbEluZm87CiAgICAg
T3duUHRyPFNwZWxsQ2hlY2tlcj4gbV9zcGVsbENoZWNrZXI7Ci0gICAgVGltZXI8RWRpdG9yPiBt
X2NvcnJlY3Rpb25QYW5lbFRpbWVyOwotICAgIGJvb2wgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21p
c3NlZEJ5RWRpdG9yOworICAgIE93blB0cjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiBt
X3NwZWxsaW5nQ29ycmVjdG9yOwogICAgIFZpc2libGVTZWxlY3Rpb24gbV9tYXJrOwogICAgIGJv
b2wgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkOwogCkBAIC00MjEsMTMgKzQxOSw4
IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbmV4dFZpc2libGVSYW5nZShSYW5n
ZSosIGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKIAogICAgIHZvaWQgY2hhbmdlU2VsZWN0
aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgYm9v
bCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKTsKLSAgICB2b2lkIGNvcnJlY3Rp
b25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopOwogICAgIE5vZGUqIGZpbmRFdmVudFRh
cmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKLSAgICB2b2lkIHN0b3BDb3JyZWN0aW9uUGFuZWxU
aW1lcigpOwotICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsKTsKLSAgICB2b2lkIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhj
b25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc1RvQWRk
KTsKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdhcyBhcHBsaWVkLCBmYWxzZSBv
dGhlcndpc2UuCi0gICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHBy
b3ByaWF0ZSgpOworCiAgICAgRmxvYXRSZWN0IHdpbmRvd1JlY3RGb3JSYW5nZShjb25zdCBSYW5n
ZSopIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYmFkNGE5OWU5ODE4OTMwMmVjNjFiZmRiMDlk
YTE0NmQwYmIxNGViNC4uMDVkOWI4MzEwZjg2YmI0OWM0ODMxOThhZWUzY2I4NzJlMzQxOTljMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNv
bW1hbmQuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgogCi0jaW5jbHVkZSAiQ29ycmVjdGlvblBh
bmVsSW5mby5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzY3
YTYwZDdhYTMxNWZmMWE5MjEzZmJiMjAwOWYyMDZjZmQ0ZGUwMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAK
QEAgLTAsMCArMSw0NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5o
IgorCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRWRp
dENvbW1hbmQuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNv
bW1hbmQuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgorI2luY2x1ZGUgIlRleHRD
aGVja2luZ0hlbHBlci5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgImh0
bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAidmlzaWJsZV91bml0
cy5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3Vz
aW5nIG5hbWVzcGFjZSBXVEY7CisKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisK
K3N0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJU
eXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3Rv
cjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rp
b24sICgpKTsKKyAgICBpZiAobWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5pc0VtcHR5KCkp
IHsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRN
YXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlv
bi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworICAgICAgICBt
YXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxD
aGVja2luZ0V4ZW1wdGlvbik7CisgICAgfQorICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckF1dG9D
b3JyZWN0aW9uOworfQorCitzdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpCit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0Zv
clJlcGxhY2VtZW50LCAoKSk7CisgICAgaWYgKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuaXNF
bXB0eSgpKSB7CisgICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3Vt
ZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1l
bnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICB9
CisgICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7Cit9CisKK1NwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZy
YW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fY29ycmVjdGlvblBhbmVsVGltZXIo
dGhpcywgJlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVy
RmlyZWQpCit7Cit9CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyKCkKK3sKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdD
b3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZSB0eXBlKQoreworICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lcklu
dGVydmFsID0gMC4zOworICAgIGlmIChpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJs
ZWQoKSkgeworICAgICAgICBpZiAodHlwZSA9PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGVDb3JyZWN0aW9uKQorICAgICAgICAgICAgLy8gSWYgdHlwZSBpcyBQYW5lbFR5cGVSZXZlcnNp
b24sIHRoZW4gdGhlIG5ldyByYW5nZSBoYXMgYmVlbiBzZXQuIFNvIHdlIHNob3VsZG4ndCBjbGVh
ciBpdC4KKyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNl
ZC5jbGVhcigpOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlID0gdHlw
ZTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlv
blBhbmVsVGltZXJJbnRlcnZhbCk7CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OnN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpCit7CisgICAgbV9jb3JyZWN0
aW9uUGFuZWxUaW1lci5zdG9wKCk7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbikKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0
aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cu
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKSk7CisgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gIT0gb2xkU2VsZWN0
aW9uKSB7CisgICAgICAgIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgICAgICBkaXNt
aXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICB9Cit9
CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlQZW5kaW5nQ29ycmVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZykKK3sKKyAg
ICAvLyBBcHBseSBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSBuZXh0IHJvdW5kIG9mIHNw
ZWxsIGNoZWNraW5nLgorICAgIGJvb2wgZG9BcHBseUNvcnJlY3Rpb24gPSB0cnVlOworICAgIFZp
c2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gc2VsZWN0aW9uQWZ0ZXJUeXBpbmcudmlz
aWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50V29yZCA9IFZpc2libGVT
ZWxlY3Rpb24oc3RhcnRPZldvcmQoc3RhcnRPZlNlbGVjdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRh
cnkpLCBlbmRPZldvcmQoc3RhcnRPZlNlbGVjdGlvbiwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7
CisgICAgaWYgKGN1cnJlbnRXb3JkLnZpc2libGVFbmQoKSA9PSBzdGFydE9mU2VsZWN0aW9uKSB7
CisgICAgICAgIFN0cmluZyB3b3JkVGV4dCA9IHBsYWluVGV4dChjdXJyZW50V29yZC50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgaWYgKHdvcmRUZXh0Lmxlbmd0aCgpID4gMCAm
JiBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKHdvcmRUZXh0W3dvcmRUZXh0Lmxlbmd0aCgp
IC0gMV0pKQorICAgICAgICAgICAgZG9BcHBseUNvcnJlY3Rpb24gPSBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKGRvQXBwbHlDb3JyZWN0aW9uKQorICAgICAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCk7CisgICAgZWxzZQorICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKworYm9vbCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZDsKK30K
KworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxs
b3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAoreworICAgIHJl
dHVybiAhKG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+aGFzTWFya2VycyhtaXNzcGVs
bGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbikp
OworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0
cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCit7Cisg
ICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBs
YWNlLmdldCgpKTsKKyAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gcmFuZ2VU
b1JlcGxhY2U7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxh
aW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlbWVudDsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8uaXNBY3RpdmUgPSB0cnVlOworICAgIHNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnQsIFZlY3RvcjxTdHJpbmc+KCkpOworfQorCit2b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCit7
CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKKyAgICBkaXNt
aXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpOworfQorCit2
b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3MoUmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQoreworICAgIGlmICghbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
c0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKKyAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJl
YXNvbkZvckRpc21pc3NpbmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OmFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc1RvQWRkKQoreworICAgIGlmICghbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFp
bmluZ0NvcnJlY3Rpb24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQt
PmNsb25lUmFuZ2UoZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0
U3RhcnQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBh
cmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9z
aXRpb24oKSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
LmdldCgpLCBlbmRPZlBhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQtPmVuZFBvc2l0aW9uKCkpKTsKKworICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdv
cmQgYXQgcmFuZ2UgcmFuZ2VUb0JlUmVwbGFjZWQsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8g
dGhhdCByYW5nZS4KKyAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBs
YWNlLCB0aGUgdmFsdWUgb2YgcmFuZ2VUb0JlUmVwbGFjZWQgaXMgbm90IHZhbGlkIGFueW1vcmUu
CisgICAgLy8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQg
dG8gc3RvcmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkCisgICAgLy8g
cmVsYXRpdmUgdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFw
aC4gV2UgdXNlIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoCisgICAgLy8gdG8gc3Rv
cmUgdGhpcyB2YWx1ZS4gSW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRv
IGZpcnN0IGNyZWF0ZSBhIHJhbmdlCisgICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQg
b2YgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZC4K
KyAgICBSZWZQdHI8UmFuZ2U+IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3Rh
cnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24tPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisKKyAg
ICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOworICAgIGNvcnJl
Y3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25P
ZlJhbmdlVG9CZVJlcGxhY2VkLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VU
b0JlUmVwbGFjZWQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9u
IG9mIGF1dG9jb3JyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJl
cGxhY2VtZW50IHRvb2sgcGxhY2UuCisgICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJ
blBhcmFncmFwaEFzUmFuZ2UuZ2V0KCkpOworCisgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5j
ZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFs
IHJhbmdlIGFyb3VuZC4KKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKKyAg
ICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9C
ZVJlcGxhY2VkLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpKTsKKyAg
ICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgbV9mcmFt
ZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIFJlZlB0cjxSYW5nZT4g
cmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2VD
b250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3Jh
cGgsICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpOwor
ICAgIFN0cmluZyBuZXdUZXh0ID0gcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOwor
CisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KKyAgICBpZiAo
bmV3VGV4dCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpCisgICAg
ICAgIHJldHVybjsKKworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJl
cGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsK
KyAgICBzaXplX3Qgc2l6ZSA9IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucGFuZWxUeXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lv
bikKKyAgICAgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgp
LCBtYXJrZXJUeXBlc1RvQWRkW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWFya2Vy
cy0+YWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGVzVG9BZGRbaV0s
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyk7CisgICAgfQorfQorCitib29s
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVU
eXBpbmdJZkFwcHJvcHJpYXRlKCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZCB8fCAhbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVs
VHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCk7CisKKyAgICBpZiAobV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRp
b24pIHsKKyAgICAgICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
QWNjZXB0ZWQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorICAgIAorICAgIC8vIFBl
bmRpbmcgY29ycmVjdGlvbiBzaG91bGQgYWx3YXlzIGJlIHdoZXJlIGNhcmV0IGlzLiBCdXQgaW4g
Y2FzZSB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgd2Ugc3RpbGwgd2FudCB0byBkaXNtaXNzIHRo
ZSBwYW5lbCB3aXRob3V0IGFjY2VwdGluZyB0aGUgY29ycmVjdGlvbi4KKyAgICBBU1NFUlQobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNh
cmV0UG9zaXRpb24pOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbElnbm9yZWQpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29y
cmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit7CisgICAgcmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZVJldmVyc2VkKGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CisgICAgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6
Q2xvc2VUeXBpbmcgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpDbGVhclR5cGluZ1N0eWxlIHwgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKKyAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpLmVuZCgpKTsKKworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFy
a2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBtYXJrZXJzLT5yZW1v
dmVNYXJrZXJzKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgIG1h
cmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KTsKKyAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpT
cGVsbENoZWNraW5nRXhlbXB0aW9uKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI+KikKK3sKKyAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0
b3IgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUp
IHsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsK
KyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5z
dGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBw
ID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgVmlz
aWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7
CisgICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLT5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKEVkaXRvcjo6TWFya1NwZWxsaW5nIHwgRWRpdG9yOjpTaG93Q29ycmVjdGlv
blBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOworICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGVSZXZlcnNpb246IHsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0g
dHJ1ZTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxh
aW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Cisg
ICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBpZiAoIWJv
dW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNob3dDb3JyZWN0aW9uUGFuZWwobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50
U3RyaW5nLCBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogewor
ICAgICAgICBpZiAocGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC5nZXQoKSkgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0
KFRleHRDaGVja2luZ1BhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQpLnBhcmFncmFwaFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBz
dWdnZXN0aW9uczsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBwYXJhZ3JhcGhUZXh0LCBzdWdnZXN0
aW9ucyk7CisgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBz
dWdnZXN0aW9ucy5maXJzdCgpOworICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7CisgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIEZsb2F0
UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBpZiAoIWJvdW5kaW5nQm94Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOworICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhh
bmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit7Cisg
ICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCk7CisgICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3Vt
ZW50KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhl
IHdvcmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRp
bWVyIGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgorICAgIGlmIChjdXJyZW50
V29yZCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworCisg
ICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7CisgICAgY2FzZSBD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgorICAgICAgICBpZiAoY29y
cmVjdGlvbi5sZW5ndGgoKSkgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKKyAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlv
blBhbmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0
b3IpCisgICAgICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9j
dW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3Ry
aW5nKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjoKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CisgICAgICAgIGlmIChjb3JyZWN0aW9uLmxl
bmd0aCgpKSB7CisgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRT
dHJpbmcgPSBjb3JyZWN0aW9uOworICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZv
KG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNs
ZWFyKCk7Cit9CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKK3sKKyAgICByZXR1cm4gY2xpZW50KCkgJiYg
Y2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworfQorCitG
bG9hdFJlY3QgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6d2luZG93UmVjdEZvclJhbmdl
KGNvbnN0IFJhbmdlKiByYW5nZSkgY29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2Zy
YW1lLT52aWV3KCk7CisgICAgcmV0dXJuIHZpZXcgPyB2aWV3LT5jb250ZW50c1RvV2luZG93KElu
dFJlY3QocmFuZ2UtPmJvdW5kaW5nUmVjdCgpKSkgOiBGbG9hdFJlY3QoKTsKK30gICAgICAgIAor
Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQoreworICAgIFZpc2li
bGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkpOworICAgIC8vIFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9j
b3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAorICAgIC8vIGNvbnRh
aW5pbmcgdGhlIG9yaWdpbmFsIHByZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBx
dWlja2x5IHJldmVydCB0aGUKKyAgICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUs
IHdlIHN0YXJ0IGNvcnJlY3Rpb24gcGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKKyAg
ICAvLyB0aGUgbmV3IGNhcmV0IHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorICAg
IGlmICghY3VycmVudFNlbGVjdGlvbi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBv
bGRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIFZpc2libGVQb3NpdGlvbiBzZWxl
Y3Rpb25Qb3NpdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb24uc3RhcnQoKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gZW5kUG9zaXRpb25PZldvcmQgPSBlbmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExl
ZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9z
aXRpb25PZldvcmQpCisgICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0g
ZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBpZiAocG9zaXRpb24uYW5j
aG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCisgICAgICAg
IHJldHVybjsKKworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Cisg
ICAgaW50IGVuZE9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOworICAg
IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7CisgICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFy
a2Vycy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytp
KSB7CisgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOwor
ICAgICAgICBpZiAoKChtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQg
JiYgIW1hcmtlci5kZXNjcmlwdGlvbi5pc051bGwoKSkgfHwgbWFya2VyLnR5cGUgPT0gRG9jdW1l
bnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQp
ID09IGVuZE9mZnNldCkgeworICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNl
dCwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCk7CisgICAgICAgICAgICBTdHJpbmcgY3VycmVudFdv
cmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50
V29yZC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKKyAgICAgICAgICAgICAgICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBjdXJyZW50V29yZDsKKyAgICAgICAgICAgICAg
ICBpZiAobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKQorICAgICAgICAg
ICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMpOworICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJp
bmcgPSBtYXJrZXIuZGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29ycmVj
dGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpy
ZXNwb25kVG9BcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCit7Cisg
ICAgaWYgKGNtZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY21kLT5zaG91bGRSZXRhaW5BdXRv
Y29ycmVjdGlvbkluZGljYXRvcigpKQorICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3Ip
OworfQorCitFZGl0b3JDbGllbnQqIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNsaWVu
dCgpCit7CisgICAgcmV0dXJuIG1fZnJhbWUtPnBhZ2UoKSA/IG1fZnJhbWUtPnBhZ2UoKS0+ZWRp
dG9yQ2xpZW50KCkgOiAwOworfQorCitUZXh0Q2hlY2tlckNsaWVudCogU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6dGV4dENoZWNrZXIoKQoreworICAgIGlmIChFZGl0b3JDbGllbnQqIG93
bmVyID0gY2xpZW50KCkpCisgICAgICAgIHJldHVybiBvd25lci0+dGV4dENoZWNrZXIoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93
Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQoreworICAgIGNsaWVu
dCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKHR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmlu
ZywgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2Vt
ZW50U3RyaW5ncywgdGhpcyk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsIHJlYXNvbikKK3sKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsKHJlYXNvbik7Cit9CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6aXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCkKK3sKKyAgICByZXR1cm4gY2xp
ZW50KCkgJiYgY2xpZW50KCktPmlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpOworfQorCit2b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50U3RyaW5nKQoreworICAgIHJldHVybiBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBy
ZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtSZXZzZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdl
ZFJhbmdlKQoreworICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2Up
Cit7CisgICAgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKHJlcGxhY2VkU3Ry
aW5nLCBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSkpOworfQorCisjZWxzZQorCitT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
KEZyYW1lKikge30KK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyKCkge30KK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUp
IHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BDb3JyZWN0aW9uUGFu
ZWxUaW1lcigpIHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3Mo
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkge30KK3ZvaWQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6c2hvdyhQYXNzUmVmUHRyPFJhbmdlPiwgY29uc3QgU3RyaW5nJikg
e30KK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlDb3JyZWN0aW9uUGFu
ZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mKSB7fQorYm9v
bCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3Jl
VHlwaW5nSWZBcHByb3ByaWF0ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Cit2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikge30KK3Zv
aWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmco
UGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pIHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYp
IHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikge30KK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
Jikge30KK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ29ycmVjdGlv
blBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYpIHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpIHt9Cit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6Om1hcmtSZXZzZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4pIHt9Cit2b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2VSZXZlcnNlZChjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPFJhbmdlPikge30KK2Jvb2wgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1Nw
ZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPikgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1Nob3dpbmdDb3JyZWN0
aW9uUGFuZWwoKSB7IHJldHVybiBmYWxzZTsgfQorYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSB7IHJldHVybiBm
YWxzZTsgfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41YTNhZGZiN2Q3MTVhY2RiM2E0MDJmNmVmNTY0OWJiNTM3YWYyZjBhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcl9oCisjZGVmaW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJf
aAorCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05P
V19MRU9QQVJEKQorLy8gU29tZSBwbGF0Zm9ybXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBh
dXRvY29ycmVjdGlvbi4KKyNkZWZpbmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAxCisv
LyBTb21lIHBsYXRmb3JtcyB1c2Ugc3BlbGxpbmcgYW5kIGF1dG9jb3JyZWN0aW9uIG1hcmtlcnMg
dG8gcHJvdmlkZSB2aXN1YWwgY3VlLgorLy8gT24gc3VjaCBwbGF0Zm9ybSwgaWYgd29yZCB3aXRo
IG1hcmtlciBpcyBlZGl0ZWQsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBtYXJrZXIuCisjZGVmaW5l
IFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORyAxCisjZWxzZQorI2RlZmluZSBTVVBQT1JUX0FV
VE9DT1JSRUNUSU9OX1BBTkVMIDAKKyNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5H
IDAKKyNlbmRpZiAvLyAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQorCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRWRpdG9yQ2xpZW50OworY2xhc3MgRWRp
dENvbW1hbmQ7CitjbGFzcyBSYW5nZTsKK2NsYXNzIFRleHRDaGVja2VyQ2xpZW50OworY2xhc3Mg
VmlzaWJsZVNlbGVjdGlvbjsKKworc3RydWN0IENvcnJlY3Rpb25QYW5lbEluZm8geworICAgIGVu
dW0gUGFuZWxUeXBlIHsKKyAgICAgICAgUGFuZWxUeXBlQ29ycmVjdGlvbiA9IDAsCisgICAgICAg
IFBhbmVsVHlwZVJldmVyc2lvbiwKKyAgICAgICAgUGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9u
cworICAgIH07CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkOworICAgIFN0
cmluZyByZXBsYWNlZFN0cmluZzsKKyAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7CisgICAg
UGFuZWxUeXBlIHBhbmVsVHlwZTsKKyAgICBib29sIGlzQWN0aXZlOworfTsKKworZW51bSBSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsSWdub3JlZCwKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsQWNjZXB0ZWQKK307CisKK2NsYXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgewor
cHVibGljOgorICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqKTsKKyAgICB+
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcigpOworCisgICAgdm9pZCBzdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSk7CisgICAgdm9pZCBz
dG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKTsKKworICAgIHZvaWQgZGlzbWlzcyhSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKKyAgICB2b2lkIHNob3coUGFzc1JlZlB0cjxSYW5n
ZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpOworCisgICAgdm9p
ZCBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCk7CisgICAgLy8gUmV0dXJuIHRydWUgaWYgY29y
cmVjdGlvbiB3YXMgYXBwbGllZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgYXBwbHlBdXRv
Y29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKKworICAgIHZvaWQgcmVzcG9u
ZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBj
b3JyZWN0aW9uKTsKKyAgICB2b2lkIHJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8
RWRpdENvbW1hbmQ+KTsKKyAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKTsKKworICAgIHZvaWQgc3RvcFBlbmRpbmdD
b3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbik7CisgICAgdm9p
ZCBhcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bkFmdGVyVHlwaW5nKTsKKworICAgIHZvaWQgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNv
bnN0IFN0cmluZyYgY29ycmVjdGlvbik7CisgICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24o
KTsKKworICAgIGJvb2wgaGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdDsKKyAgICBib29sIGlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2Up
IGNvbnN0OworICAgIGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCk7CisgICAgYm9vbCBp
c0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKKworICAgIHZvaWQgY29ycmVj
dGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiop
OworICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2Up
OworICAgIHZvaWQgbWFya1JldnNlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2Up
OworCisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorcHJpdmF0ZToKKyAgICAvLyBF
bmNhcHN1bGF0aW5nIEVkaXRvckNsaWVudCBBUEkgdG8gbG9jYWxpemUgU1VQUE9SVF9BVVRPQ09S
UkVDVElPTl9QQU5FTCBpZmRlZgorICAgIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0
aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBs
YWNlbWVudFN0cmluZ3MpOworICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKKyAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKKworICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7
CisgICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCk7CisgICAgRmxvYXRSZWN0IHdp
bmRvd1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OworCisgICAgRWRpdG9yQ2xpZW50
KiBtX2NsaWVudDsKKyAgICBGcmFtZSogbV9mcmFtZTsKKworICAgIFRpbWVyPFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7CisgICAgQ29ycmVjdGlv
blBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbEluZm87CisgICAgYm9vbCBtX2NvcnJlY3Rpb25Q
YW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggMzU2MDRmNmFiMWE3YzY2ZWEw
ZmVjMjc5ZmU1M2Q0ZGQxYjljOTUxMC4uMjEyZTFkZGNhYjNkODg1Yzk1MzBlMTc1MGJhNDhlMzg3
YTk0Yzc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0x
NTEsMTEgKzE1MSw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgVHlwaW5nQ29tCiAgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKIAotI2lmIFJFTU9WRV9N
QVJLRVJTX1VQT05fRURJVElORwogICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIGRv
Y3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS0+cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vy
c0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoaXNTcGFjZU9yTmV3bGluZSh0ZXh0LmNoYXJhY3RlcnMoKVsw
XSkpOwotI2VuZGlmCi0KKyAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT51cGRh
dGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHQu
Y2hhcmFjdGVycygpWzBdKSk7CisgICAgCiAgICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwg
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOwog
fQogCkBAIC0zNDAsMTIgKzMzOCw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlKQogICAgICAgICBWaXNp
YmxlUG9zaXRpb24gcDIgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
OwogICAgICAgICBpZiAocDEgIT0gcDIpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgp
LT5lZGl0b3IoKS0+bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdT
ZWxlY3Rpb24oKSk7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICBl
bHNlIGlmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnN0YXJ0Q29ycmVjdGlvblBhbmVs
VGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbik7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShjb21tYW5kVHlwZSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5zdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CiAg
ICAgfQogfQogCkBAIC00NjMsOSArNDU3LDggQEAgYm9vbCBUeXBpbmdDb21tYW5kOjptYWtlRWRp
dGFibGVSb290RW1wdHkoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQo
VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogewotI2lmIFJFTU9W
RV9NQVJLRVJTX1VQT05fRURJVElORwotICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigp
LT5yZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxz
ZSk7Ci0jZW5kaWYKKyAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFy
a2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworCiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFm
dGVyVW5kbzsKIApAQCAtNTYyLDkgKzU1NSw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRl
S2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcpCiAK
IHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQ
T05fRURJVElORwotICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVs
bEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYK
KyAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0ZvcldvcmRz
QWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCmluZGV4IDJhM2Y3ZDQ1MzYyZjdiN2JjNzJi
OWJmYWFkYjc4MDY5NjYzYjdjMDMuLmE0MDI3Mzk5NWQxYmIzYzQ0NTgzNjY3YmJjNjA0NmQ5ZGU3
NjEyOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKQEAgLTIyMSw2ICsyMjEs
MTUgQEAgaW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlKFVDaGFyIGMpCiB7CiAgICAgcmV0dXJuIGMg
PT0gbm9CcmVha1NwYWNlIHx8IGMgPT0gJyAnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdCc7CiB9
CisKK2lubGluZSBib29sIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIgY2hhcmFj
dGVyKQoreworICAgIC8vIFRoZXNlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlaGF2ZSBhcyB3
b3JkIGJvdW5kYXJpZXMsIGJ1dCBjYW4gYXBwZWFyIHdpdGhpbiB3b3Jkcy4KKyAgICAvLyBJZiB0
aGV5IGFyZSBqdXN0IHR5cGVkLCBpLmUuIGlmIHRoZXkgYXJlIGltbWVkaWF0ZWx5IGZvbGxvd2Vk
IGJ5IGEgY2FyZXQsIHdlIHdhbnQgdG8gZGVsYXkgdGV4dCBjaGVja2luZyB1bnRpbCB0aGUgbmV4
dCBjaGFyYWN0ZXIgaGFzIGJlZW4gdHlwZWQuCisgICAgLy8gRklYTUU6IHRoaXMgaXMgcmVxdWly
ZWQgdW50aWwgNjg1MzAyNyBpcyBmaXhlZCBhbmQgdGV4dCBjaGVja2luZyBjYW4gZG8gdGhpcyBm
b3IgdXMuCisgICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnXCcnIHx8IGNoYXJhY3RlciA9PSByaWdo
dFNpbmdsZVF1b3RhdGlvbk1hcmsgfHwgY2hhcmFjdGVyID09IGhlYnJld1B1bmN0dWF0aW9uR2Vy
c2hheWltOworfQorCiBTdHJpbmcgc3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKGNvbnN0
IFN0cmluZyYsIGJvb2wgc3RhcnRJc1N0YXJ0T2ZQYXJhZ3JhcGgsIGJvb2wgZW5kSXNFbmRPZlBh
cmFncmFwaCk7CiBjb25zdCBTdHJpbmcmIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IGVkOTJmMTEyY2JhODc3ZmQ1MmMzNDY0
MDdmNWI0ZmZlMjYxMjBmNmMuLjhhNTg5NTU2Y2NlNTA3MjA3MmRjYzhiN2FiODBjMDUyNWFmOTBh
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTUxMSw3ICs1MTEsNyBA
QCBwdWJsaWM6CiAgICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgeyByZXR1cm4g
Jm1fdGV4dENoZWNrZXJDbGllbnQ7IH0KIAogI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRWRpdG9yKikgeyB9CisgICAgdmlydHVhbCB2
b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIENvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIqKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCkg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJikgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAppbmRleCBkNWRlNmE0MTAy
Y2JkMjc2OGRhYzlkYTNmNWYxYWQ5ZWNmODAzZDUwLi5lYjAzM2IwNmYwNjg5ZDJmZGViODI1YTlk
MjFkZWIyYTU1OGI3ZjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKQEAgLTI3LDcg
KzI3LDcgQEAKICNpZm5kZWYgRWRpdG9yQ2xpZW50X2gKICNkZWZpbmUgRWRpdG9yQ2xpZW50X2gK
IAotI2luY2x1ZGUgIkNvcnJlY3Rpb25QYW5lbEluZm8uaCIKKyNpbmNsdWRlICJTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTE1
OCwxMiArMTU4LDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQq
IHRleHRDaGVja2VyKCkgPSAwOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAog
ICAgIGVudW0gQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUgewogICAgICAgICBBdXRvY29ycmVj
dGlvbkVkaXRlZCwKICAgICAgICAgQXV0b2NvcnJlY3Rpb25SZXZlcnRlZAogICAgIH07Ci0gICAg
dmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5n
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MsIEVk
aXRvciopID0gMDsKKworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICB2aXJ0
dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY21lbnRTdHJpbmcsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgQ29ycmVj
dGlvblBhbmVsQ29udHJvbGxlciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7CiAgICAg
dmlydHVhbCBib29sIGlzU2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNl
VHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZykgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDViYjgyY2RkZDQ0MTkwOTBkYjc5
YzZmNzhlZGJiNTcxYWU5ZTU2MzUuLjFlNTJhZjVjOTQyMWU2M2UyMjIzM2EwN2YwNjk4OTBjOTky
NGFkOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wMy0xNiAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBw
YW5lbCBzaG91bGQgYmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEgICAgICAgIAorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpzaG93
Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmlzU2hvd2luZ0NvcnJlY3Rp
b25QYW5lbCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnJlY29yZEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2UpOgorCiAyMDExLTAzLTIxICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCAxZmExMzJh
ZDZjNWJkNDM3OWZlMGJiODVjOWU2ZmYwZDY2YjExNzM1Li5mNDhiNmEzNDZkYTA0ZDRlYzI3N2Nh
MjkyMDIyMjBmN2JmYzY0NTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwogICAgIHZp
cnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3JlOjpTcGVsbENoZWNrZXIq
LCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJik7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChX
ZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYg
cmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29u
c3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5n
cywgV2ViQ29yZTo6RWRpdG9yKik7CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFu
ZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgV1RGOjpTdHJp
bmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcs
IGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0
cmluZ3MsIFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbENvbnRyb2xsZXIqKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nQ29ycmVjdGlvblBh
bmVsKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0
b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgV1RGOjpTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCA2OWRk
NTc0NzMxYjQ0YjQzMGMyNzQ1OGU3MjNiNDFjNGRlNTE3NGIwLi5hYmI4MDI4ZjA3YmFmOTczZGZk
NTY0MDEwYzE1ZWFmMTdmZTllZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC04OTEsNyArODkxLDcgQEAgdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBT
dHJpbmcmIGJhZEdyYW1tYXIKIH0KIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCi12b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChX
ZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgcGFuZWxUeXBlLCBjb25zdCBG
bG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzLCBFZGl0b3IqIGVkaXRvcikg
ewordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBh
bHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgQ29ycmVjdGlvblBhbmVsQ29udHJvbGxlciog
Y29udHJvbGxlcikgewogICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwogCiAgICAgLy8gTmVlZCB0byBleHBsaWNpdGx5
IHVzZSB0aGVzZSBsb2NhbCBOU1N0cmluZyBvYmplY3RzLCBiZWNhdXNlIHRoZSBDKysgcmVmZXJl
bmNlcyBtYXkgYmUgaW52YWxpZGF0ZWQgYnkgdGhlIHRpbWUgdGhlIGJsb2NrIGJlbG93IGlzIGV4
ZWN1dGVkLgpAQCAtOTMyLDcgKzkzMiw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29y
cmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwCiAgICAg
ICAgICAgICAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHJlY29yZFJl
c3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlQWNjZXB0ZWQgdG9Db3JyZWN0aW9uOmFjY2VwdGVk
U3RyaW5nIGZvcldvcmQ6cmVwbGFjZWRTdHJpbmdBc05TU3RyaW5nIGxhbmd1YWdlOm5pbCBpblNw
ZWxsRG9jdW1lbnRXaXRoVGFnOlttX3dlYlZpZXcgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddXTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGVkaXRvci0+aGFuZGxlQ29y
cmVjdGlvblBhbmVsUmVzdWx0KFN0cmluZyhhY2NlcHRlZFN0cmluZykpOworICAgICAgICBjb250
cm9sbGVyLT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoU3RyaW5nKGFjY2VwdGVkU3RyaW5n
KSk7CiAgICAgfV07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA1YTNiYzM0YmE1MjA5M2Y2YmU5NmZmZjQ2
MjhlNzU0NDRmNTA4NDUzLi42YTFjODAxZTE3MjA3MGYwYzQzYjI1MWJkNjE4YjQ3NDQ2NGNhNjkx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMTYgIE1PUklUQSBIYWppbWUg
IDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1JlZmFjdG9yaW5nXSBBdXRvIGNvcnJlY3Rpb24gcGFuZWwgc2hvdWxk
IGJlIGhhbmRsZWQgYnkgaXRzIG93biBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NTcxCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorCiAyMDExLTAzLTIxICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggTWFjIHJlbGVhc2UgYnVpbGRzIGFm
dGVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Njc4MwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgKaW5kZXggZmE4NDI2YTM4ZTk0ZmJlM2Y0MTY1OTg5ZjgxNTJmM2FkNzRlNjA3
OC4uOTYzMTM5NjY5YjQ0MTNlODEwNWQ5MGEzNTA2OWE4MDBjNzgxMGUyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5oCkBAIC0xNDIsNyArMTQyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
c2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwogICAgIHZpcnR1YWwgdm9pZCByZXF1
ZXN0Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3JlOjpTcGVsbENoZWNrZXIqLCBpbnQsIGNvbnN0IFdU
Rjo6U3RyaW5nJik7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVs
KFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncywgV2ViQ29yZTo6RWRpdG9y
Kik7CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5k
aW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVy
bmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzLCBXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxDb250cm9s
bGVyKik7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgdmlydHVhbCBib29sIGlz
U2hvd2luZ0NvcnJlY3Rpb25QYW5lbCgpOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBXVEY6OlN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmlu
Zyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86887</attachid>
            <date>2011-03-24 22:50:22 -0700</date>
            <delta_ts>2011-04-06 11:07:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55571-20110325145019.patch</filename>
            <type>text/plain</type>
            <size>88646</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE5MzkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMmUwZTYz
NmVkZjZkZGNhMGM1NGZhMzM4ZGQ4M2E3MGRmOTk2NDRlNS4uODc5M2M3ZjNkZDkzZTI1YzkyZDNh
NTEwMDZkZDgxMGE1ZGZlZGZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY2OSw2ICs2Njks
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNmNDBkYTA4YTE1NzVhODE0NGVjMGU3MWUz
MGIxMGVmZmRlZDNjN2EuLjdlOWNmYTI0YjVhZjkwMmUwMzA4NWFjMzBmMWNmMDhlYjI2MjY1MjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NiBAQAorMjAxMS0wMy0yNCAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUmVm
YWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQgYmUgaGFuZGxlZCBieSBpdHMg
b3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTU1NzEKKworICAgICAgICBFeHRyYWN0ZWQgY29kZSBpbnNpZGUgU1VQUE9SVF9BVVRPQ09S
UkVDVElPTl9QQU5FTCBpbnRvCisgICAgICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIg
Y2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFnbmUuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5o
OiBSZW1vdmVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcDoKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNwb25k
VG9DaGFuZ2VkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBsaWVkRWRp
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6On5FZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRU
ZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
bnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjdXQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpwYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
QXNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppc0F1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOgorICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1hcmtlclR5cGVzRm9yQXV0b2NvcnJl
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6bWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0YXJ0Q29ycmVjdGlvblBhbmVs
VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBlbmRpbmdDb3JyZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhhc1Bl
bmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlzc1Nvb24p
OgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlD
b3JyZWN0aW9uUGFuZWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3Bv
bmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNvcnJlY3Rp
b25QYW5lbFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVtb3ZlTWFya2Vy
c1Vwb25FZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRF
ZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OmNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
Ojp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1JldnNlcnNlZCk6Cisg
ICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkU3Rh
cnRUaW1lRm9yKToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgICog
ZWRpdGluZy9odG1sZWRpdGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNBbWJpZ3VvdXNCb3Vu
ZGFyeUNoYXJhY3Rlcik6CisgICAgICAgICogcGFnZS9FZGl0b3JDbGllbnQuaDoKKwogMjAxMS0w
My0yNCAgU3RlcGhhbmllIExld2lzICA8c2xld2lzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBHZW9mZiBHYXJlbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYTQ0NzNiNDM1ZmJm
OWRhOTI1OTQ4ZTFjM2JjNTM0YzZmYzZkMzAxNi4uODU5NThiZTIyODIyZDFiMjg5NjVhNWI0ODM5
M2UyZTNkYzJkOWY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
KysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE0NTIsNiArMTQ1Miw4IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxh
Y2VJQ1UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmggXAorCVNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGE4Yjc1ZGMw
ZDZiZTQxYmIwYTQwZDc5NjI0NmQzYzE4ZjRjNjAxOTcuLjNmZjczYmIwYzgyNmY0ZTI5NjczZWE5
ZjI0MDI5OTE2YmE0MmZmZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI2MjQsNiArMjYyNCw5IEBA
CiAgICAgICAgICAgICAnZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAnLAogICAgICAgICAgICAg
J2VkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVs
bENoZWNrZXIuY3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsQ2hlY2tlci5oJywKKyAg
ICAgICAgICAgICdlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwJywKKyAg
ICAgICAgICAgICdlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCcsCiAgICAg
ICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCcsCiAgICAgICAg
ICAgICAnZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgnLAogICAgICAgICAgICAg
J2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwZWY4
ZWRhZmQ0ZDljNDk3ZTM1NGI4NDhlNTRkYmM4MTdjZmViZTk3Li5jY2VlN2JiYTlkNDlkMDU5Mjgw
MmEzODhkZWYzYzdmOTllOTA4ZWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNTkyLDYgKzU5Miw3IEBA
IFNPVVJDRVMgKz0gXAogICAgIGVkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIFwK
ICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAgXAogICAgIGVkaXRpbmcvU3BlbGxDaGVj
a2VyLmNwcCBcCisgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBc
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxp
dFRleHROb2RlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5p
bmdFbGVtZW50Q29tbWFuZC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagppbmRleCA3MmFlMzQ1ODNkMDc4MzgwYWExOTdjM2Q0MGI2MDg0YjBjODFh
ODY5Li43NGRmMGEwMGVkMDliMGY0ODQ4NjljOWU3MTJkYjJkZGEwOGNlZTFkIDEwMDc1NQotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNTAxNDYsNiArNTAx
NDYsNjIgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xX
aW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wK
KwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4z
MiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZM
aXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8
VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNl
X0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJ
CT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFt
ZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJ
PgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1l
PSJSZWxlYXNlX0xUQ0d8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJ
CQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgor
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3Bl
bGxDaGVja2VyLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODEzNzA5
NjJlMmZmOWY1Y2RmN2M2ZTQzN2YzZjhiNjJjMTc4ODE5YS4uYzRjZTg0MDFhNWJhYmIxNWEyNTFk
ZGU2NDAxMGQwZDc4OTdiNmE3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzE4Niw2ICszMTg2LDggQEAKIAkJQTYyMkE4RkMx
MjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTYyMkE4RjYxMjJDNDRBNjAwQTc4NUIz
IC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwICovOyB9OwogCQlBNjIyQThGRDEyMkM0NEE2MDBB
Nzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTYyMkE4RjcxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdT
ZWN1cml0eUJhc2UuaCAqLzsgfTsKIAkJQTYyMkE4RkYxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVy
aWNCaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJpY0JpbmRpbmcuaCAqLzsgfTsKKwkJ
QTcwMDVDQ0MxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcwMDVD
Q0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwICov
OyB9OworCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzE1
MUJEODEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTUxQkQ3MTJGMTU1OEYwMDVBMEY2
NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUE3MTg3NjBFMEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxODc2
MEQwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTcxODc4OTAwQjJEMDRBQzAwQTE2RUNFIC8q
IERyYWdDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTcxODc4OEYwQjJEMDRBQzAwQTE2RUNFIC8qIERyYWdDb250cm9sbGVyTWFj
Lm1tICovOyB9OwpAQCAtNDc4MCw3ICs0NzgyLDYgQEAKIAkJQjc3NkQ0M0QxMTA0NTI3NTAwQkVC
MEVDIC8qIFByaW50Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmNw
cCAqLzsgfTsKIAkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCODg1RThEMjExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDUxMUUwNkREMjAwOUZGQkY0IC8qIEluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07
IH07Ci0JCUI4QTZBNkQ1MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCOEE2QTZENDEy
N0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUI4REJEQjRCMTMwQjBGOEEwMEY1Q0RC
MSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ3MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rp
b25Db21tYW5kLmNwcCAqLzsgfTsKIAkJQjhEQkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNl
bGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmgg
Ki87IH07CiAJCUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNw
cCAqLzsgfTsKQEAgLTk2NzYsNiArOTY3Nyw4IEBACiAJCUE2MjJBOEY2MTIyQzQ0QTYwMEE3ODVC
MyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwOyBwYXRoID0gZ2VuZXJpYy9CaW5kaW5n
U2VjdXJpdHlCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTYyMkE4Rjcx
MjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQmluZGluZ1NlY3VyaXR5QmFzZS5oOyBwYXRoID0gZ2VuZXJpYy9C
aW5kaW5nU2VjdXJpdHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE2MjJB
OEY5MTIyQzQ0QTYwMEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBHZW5lcmljQmluZGluZy5oOyBwYXRoID0gZ2VuZXJpYy9HZW5lcmlj
QmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzAwNUNDQTEzMzBDNEJB
MDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJB
IC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzE1MUJENzEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJD
bGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNrZXJDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxODc2MEQwQjJBMTIwMTAwQTE2
RUNFIC8qIERyYWdBY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERy
YWdBY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTg3ODhGMEIyRDA0
QUMwMEExNkVDRSAvKiBEcmFnQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IERyYWdDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTExNzcsNyArMTExODAsNiBAQAogCQlCNzc2RDQzQzExMDQ1Mjc1MDBC
RUIwRUMgLyogUHJpbnRDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFByaW50Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4
ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg4NUU4
RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjhBNkE2RDQxMjdCMzM4RDAw
ODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29ycmVjdGlvblBhbmVsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCOERCREI0NzEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXRTZWxlY3Rpb25Db21tYW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDgxMzBCMEY4QTAwRjVD
REIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2V0U2VsZWN0aW9uQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDUyLDcgKzE1
NDU0LDYgQEAKIAkJCQk5MzMwOUQ4QzA5OUU2NDkxMDA1NkU1ODEgLyogQnJlYWtCbG9ja3F1b3Rl
Q29tbWFuZC5oICovLAogCQkJCTkzMzA5RDhEMDk5RTY0OTEwMDU2RTU4MSAvKiBDb21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEOEUwOTlFNjQ5MTAwNTZFNTgxIC8qIENvbXBv
c2l0ZUVkaXRDb21tYW5kLmggKi8sCi0JCQkJQjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENv
cnJlY3Rpb25QYW5lbEluZm8uaCAqLywKIAkJCQlEMEIwNTU2NzA5QzY3MDAxMDAzMDdFNDMgLyog
Q3JlYXRlTGlua0NvbW1hbmQuY3BwICovLAogCQkJCUQwQjA1NTY2MDlDNjcwMDEwMDMwN0U0MyAv
KiBDcmVhdGVMaW5rQ29tbWFuZC5oICovLAogCQkJCTFDNEM4RjYzMEFEODY1NUQwMDk0NzVDRSAv
KiBEZWxldGVCdXR0b24uY3BwICovLApAQCAtMTU1MzQsNiArMTU1MzUsOCBAQAogCQkJCUE3OEZF
MTNBMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCAqLywKIAkJCQlCOERCREI0OTEz
MEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgKi8sCiAJCQkJ
QjhEQkRCNEExMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCAq
LywKKwkJCQlBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5jcHAgKi8sCisJCQkJQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLywKIAkJCQk5MzMwOURDMjA5OUU2NDkxMDA1NkU1ODEg
LyogU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEQzMwOTlFNjQ5MTAwNTZF
NTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuaCAqLywKIAkJCQk5MzMwOURDNDA5OUU2NDkxMDA1
NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwICovLApAQCAtMTk4NTcsNyArMTk4NjAs
NiBAQAogCQkJCTkzNTIwODgyMDlCRDQ1RTkwMEYyMDM4RCAvKiBDb29raWVKYXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdFRTY4NDY0MTJEMjZFMzgwMEU3OTQxNSAvKiBDb29raWVTdG9yYWdlQ0ZO
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNkZENDg4MEY2NzZFNTcwMDA5Mjg3MyAvKiBDb29y
ZGluYXRlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjhBNkE2RDUxMjdCMzM4RDAwODY3M0JBIC8q
IENvcnJlY3Rpb25QYW5lbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2RDA0MEExOTg5
Q0EwMDdGQjhDNSAvKiBDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjk3OTBFODIw
NjkyMDBCMjU5NjUgLyogQ291bnRlckNvbnRlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVC
OTUxMEU4MjA1NkIwMEIyNTk2NSAvKiBDb3VudGVyRGlyZWN0aXZlcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yMjE0NSw2ICsyMjE0Nyw3IEBACiAJCQkJNzU0MTVCMDAxMjk1OEQ1RTAwM0FENjY5IC8q
IFNwZWVjaElucHV0UmVzdWx0TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4RkUxM0MxMjM2
NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjhEQkRC
NEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUE3MDA1Q0NEMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxMjA5OUU2NDkyMDA1NkU1
ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTQw
OTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzMwOUUxNjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdF
bGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDkzNyw2ICsyNDk0MCw3IEBACiAJ
CQkJNzU0MTVDMjkxMjlBOTkyMDAwM0FENjY5IC8qIFNwZWVjaElucHV0UmVzdWx0TGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzhGRTEzQjEyMzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVj
a2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBT
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3MDA1Q0ND
MTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMzA5RTExMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRD
b21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTEzMDk5RTY0OTIwMDU2RTU4MSAv
KiBTcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxNTA5
OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29y
cmVjdGlvblBhbmVsSW5mby5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFu
ZWxJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MDk5ZTE2MmZhNzJmN2Yx
MzlkNjNmYzEzNzhjNGI0YjMzZjNmZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZv
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvcnJl
Y3Rpb25QYW5lbEluZm9faAotI2RlZmluZSBDb3JyZWN0aW9uUGFuZWxJbmZvX2gKLQotI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
LS8vIFNvbWUgcGxhdGZvcm1zIHByb3ZpZGUgVUkgZm9yIHN1Z2dlc3RpbmcgYXV0b2NvcnJlY3Rp
b24uCi0jZGVmaW5lIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwgMQotLy8gU29tZSBwbGF0
Zm9ybXMgdXNlIHNwZWxsaW5nIGFuZCBhdXRvY29ycmVjdGlvbiBtYXJrZXJzIHRvIHByb3ZpZGUg
dmlzdWFsIGN1ZS4KLS8vIE9uIHN1Y2ggcGxhdGZvcm0sIGlmIHdvcmQgd2l0aCBtYXJrZXIgaXMg
ZWRpdGVkLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbWFya2VyLgotI2RlZmluZSBSRU1PVkVfTUFS
S0VSU19VUE9OX0VESVRJTkcgMQotI2Vsc2UKLSNkZWZpbmUgU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTCAwCi0jZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORyAwCi0jZW5kaWYg
Ly8gI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1df
TEVPUEFSRCkKLQotI2luY2x1ZGUgIlJhbmdlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
c3RydWN0IENvcnJlY3Rpb25QYW5lbEluZm8gewotICAgIGVudW0gUGFuZWxUeXBlIHsKLSAgICAg
ICAgUGFuZWxUeXBlQ29ycmVjdGlvbiA9IDAsCi0gICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbiwK
LSAgICAgICAgUGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucwotICAgIH07Ci0KLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkOwotICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsK
LSAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7Ci0gICAgUGFuZWxUeXBlIHBhbmVsVHlwZTsK
LSAgICBib29sIGlzQWN0aXZlOwotfTsKLQotZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsIHsKLSAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2Vs
bGVkID0gMCwKLSAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwK
LSAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQKLX07Ci19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDb3JyZWN0aW9uUGFuZWxJbmZvX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcAppbmRleCBlNGUwYmJiNmNm
ZTBjMDlhMDc1NmE5NjllZjY4M2Y1YTg0NzYyM2ZhLi5mMzhjYmU2MmE2MGRlMTFjZDBmMWMxMTNh
OTlmMGMyZDAwZWFlYjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5P
bmUuY3BwCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSA8U2V0Tm9kZUF0dHJpYnV0ZUNvbW1h
bmQuY3BwPgogI2luY2x1ZGUgPFNtYXJ0UmVwbGFjZS5jcHA+CiAjaW5jbHVkZSA8U21hcnRSZXBs
YWNlQ0YuY3BwPgorI2luY2x1ZGUgPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwPgog
I2luY2x1ZGUgPFNwZWxsQ2hlY2tlci5jcHA+CiAjaW5jbHVkZSA8U3BsaXRFbGVtZW50Q29tbWFu
ZC5jcHA+CiAjaW5jbHVkZSA8U3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCmluZGV4IGEyMmE0ZjE3NjZhY2MzZDI0OTkwNWFlNDJhMzA1OTNkZTgxODNk
OTUuLmMxNjFjZGUzMDI1Mzk4NTQxYWI3ODI5YzUzMjgxMDRhOGQ4YTc5YjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNsaXBib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ29t
cG9zaXRpb25FdmVudC5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJDcmVhdGVMaW5rQ29tbWFuZC5oIgogI2luY2x1ZGUgIkRlbGV0ZUJ1dHRv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEZWxldGVTZWxlY3Rpb25Db21tYW5kLmgiCkBAIC05
NCwzNSArOTUsNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNl
IFdURjsKIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNB
bWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCi17Ci0gICAgLy8gVGhl
c2UgYXJlIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmVoYXZlIGFzIHdvcmQgYm91bmRhcmllcywgYnV0
IGNhbiBhcHBlYXIgd2l0aGluIHdvcmRzLgotICAgIC8vIElmIHRoZXkgYXJlIGp1c3QgdHlwZWQs
IGkuZS4gaWYgdGhleSBhcmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBjYXJldCwgd2Ugd2Fu
dCB0byBkZWxheSB0ZXh0IGNoZWNraW5nIHVudGlsIHRoZSBuZXh0IGNoYXJhY3RlciBoYXMgYmVl
biB0eXBlZC4KLSAgICAvLyBGSVhNRTogdGhpcyBpcyByZXF1aXJlZCB1bnRpbCA2ODUzMDI3IGlz
IGZpeGVkIGFuZCB0ZXh0IGNoZWNraW5nIGNhbiBkbyB0aGlzIGZvciB1cy4KLSAgICByZXR1cm4g
Y2hhcmFjdGVyID09ICdcJycgfHwgY2hhcmFjdGVyID09IHJpZ2h0U2luZ2xlUXVvdGF0aW9uTWFy
ayB8fCBjaGFyYWN0ZXIgPT0gaGVicmV3UHVuY3R1YXRpb25HZXJzaGF5aW07Ci19Ci0KLXN0YXRp
YyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0Zv
ckF1dG9jb3JyZWN0aW9uKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24sICgp
KTsKLSAgICBpZiAobWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6
OlJlcGxhY2VtZW50KTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBl
bmQoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOwotICAgICAgICBtYXJrZXJU
eXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2lu
Z0V4ZW1wdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0
aW9uOwotfQotCi1zdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
PiYgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvclJlcGxh
Y2VtZW50LCAoKSk7Ci0gICAgaWYgKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFy
a2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBw
ZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSAgICB9Ci0gICAg
cmV0dXJuIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7Ci19Ci0KIC8vIFdoZW4gYW4gZXZlbnQg
aGFuZGxlciBoYXMgbW92ZWQgdGhlIHNlbGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250cm9s
CiAvLyB3ZSBzaG91bGQgdXNlIHRoZSB0YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3IgdGhp
cyBlZGl0aW5nIG9wZXJhdGlvbi4KIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25G
b3JDb21tYW5kKEV2ZW50KiBldmVudCkKQEAgLTUxOCw0OCArNDkwLDcgQEAgdm9pZCBFZGl0b3I6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2Vs
ZWN0aW9uKQogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24oKTsKICAgICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKLQotI2lmIFNVUFBPUlRfQVVUT0NPUlJF
Q1RJT05fUEFORUwKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24oZnJhbWUo
KS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKLSAgICAvLyBXaGVuIHVzZXIgbW92ZXMgY2Fy
ZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hvdyB0
aGUgcGFuZWwKLSAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29ycmVjdGlvbiB3
b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCi0gICAgLy8gdW5kZXNpcmVk
IGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVsIHRpbWVyIG9u
Y2Ugd2UgY29uZmlybSB0aGF0Ci0gICAgLy8gdGhlIG5ldyBjYXJldCBwb3NpdGlvbiBpcyBhdCB0
aGUgZW5kIG9mIGEgd29yZC4KLSAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb24uaXNDYXJldCgpIHx8
IGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uUG9zaXRpb24gPSBjdXJyZW50U2VsZWN0aW9uLnN0
YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uT2ZXb3JkID0gZW5kT2ZXb3Jk
KHNlbGVjdGlvblBvc2l0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7Ci0gICAgaWYgKHNlbGVj
dGlvblBvc2l0aW9uICE9IGVuZFBvc2l0aW9uT2ZXb3JkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBQb3NpdGlvbiBwb3NpdGlvbiA9IGVuZFBvc2l0aW9uT2ZXb3JkLmRlZXBFcXVpdmFsZW50KCk7
Ci0gICAgaWYgKHBvc2l0aW9uLmFuY2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOb2RlKiBub2RlID0gcG9zaXRp
b24uY29udGFpbmVyTm9kZSgpOwotICAgIGludCBlbmRPZmZzZXQgPSBwb3NpdGlvbi5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMgPSBu
b2RlLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPm1hcmtlcnNGb3JOb2RlKG5vZGUpOwotICAgIHNp
emVfdCBtYXJrZXJDb3VudCA9IG1hcmtlcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbWFya2VyQ291bnQ7ICsraSkgewotICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYg
bWFya2VyID0gbWFya2Vyc1tpXTsKLSAgICAgICAgaWYgKCgobWFya2VyLnR5cGUgPT0gRG9jdW1l
bnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJrZXIuZGVzY3JpcHRpb24uaXNOdWxsKCkpIHx8
IG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykgJiYgc3RhdGljX2Nhc3Q8
aW50PihtYXJrZXIuZW5kT2Zmc2V0KSA9PSBlbmRPZmZzZXQpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxSYW5nZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShmcmFtZSgpLT5kb2N1bWVudCgpLCBu
b2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQsIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQpOwotICAgICAg
ICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7Ci0g
ICAgICAgICAgICBpZiAoY3VycmVudFdvcmQubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSB3b3JkUmFuZ2U7Ci0gICAg
ICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVu
dFdvcmQ7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZykKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1l
cihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gbWFya2VyLmRlc2NyaXB0aW9uOwotICAgICAgICAg
ICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZVJldmVyc2lvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlc3BvbmRU
b0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24p
CkBAIC01NzAsOSArNTAxLDcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50
cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAgICAgICAgICAgICBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obm9k
ZS0+cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIGZhbHNlKTsKICAg
ICB9CiAKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcKLSAgICByZW1vdmVTcGVsbEFu
ZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZCh0cnVlKTsKLSNlbmRpZgorICAg
IHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogCiAgICAgaWYg
KGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7
CkBAIC0xMDYyLDEwICs5OTEsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoUGFzc1Jl
ZlB0cjxFZGl0Q29tbWFuZD4gY21kKQogICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdl
ZEV2ZW50cygqY21kKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQtPmVu
ZGluZ1NlbGVjdGlvbigpKTsKIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAg
ICBpZiAoY21kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjbWQtPnNob3VsZFJldGFpbkF1dG9j
b3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7
Ci0jZW5kaWYKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9BcHBsaWVkRWRpdGlu
ZyhjbWQuZ2V0KCkpOwogCiAgICAgLy8gRG9uJ3QgY2xlYXIgdGhlIHR5cGluZyBzdHlsZSB3aXRo
IHRoaXMgc2VsZWN0aW9uIGNoYW5nZS4gIFdlIGRvIHRob3NlIHRoaW5ncyBlbHNld2hlcmUgaWYg
bmVjZXNzYXJ5LgogICAgIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24s
IGZhbHNlLCBmYWxzZSk7CkBAIC0xMTI0LDE3ICsxMDUwLDE0IEBAIEVkaXRvcjo6RWRpdG9yKEZy
YW1lKiBmcmFtZSkKICAgICAvLyBUaGlzIGlzIG9mZiBieSBkZWZhdWx0LCBzaW5jZSBtb3N0IGVk
aXRvcnMgd2FudCB0aGlzIGJlaGF2aW9yICh0aGlzIG1hdGNoZXMgSUUgYnV0IG5vdCBGRikuCiAg
ICAgLCBtX3Nob3VsZFN0eWxlV2l0aENTUyhmYWxzZSkKICAgICAsIG1fa2lsbFJpbmcoYWRvcHRQ
dHIobmV3IEtpbGxSaW5nKSkKLSAgICAsIG1fc3BlbGxDaGVja2VyKG5ldyBTcGVsbENoZWNrZXIo
ZnJhbWUsIGZyYW1lLT5wYWdlKCkgPyBmcmFtZS0+cGFnZSgpLT5lZGl0b3JDbGllbnQoKS0+dGV4
dENoZWNrZXIoKSA6IDApKQotICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAmRWRp
dG9yOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKQorICAgICwgbV9zcGVsbENoZWNrZXIoYWRv
cHRQdHIobmV3IFNwZWxsQ2hlY2tlcihmcmFtZSwgZnJhbWUtPnBhZ2UoKSA/IGZyYW1lLT5wYWdl
KCktPmVkaXRvckNsaWVudCgpLT50ZXh0Q2hlY2tlcigpIDogMCkpKQorICAgICwgbV9zcGVsbGlu
Z0NvcnJlY3RvcihhZG9wdFB0cihuZXcgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcihmcmFt
ZSkpKQogICAgICwgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkKGZhbHNlKQogewog
fQogCiBFZGl0b3I6On5FZGl0b3IoKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKLSAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0
aW9uUGFuZWxJZ25vcmVkKTsKLSNlbmRpZgogfQogCiB2b2lkIEVkaXRvcjo6Y2xlYXIoKQpAQCAt
MTE2NywxMCArMTA5MCw4IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdU
ZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgaWYgKCFzaG91
bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0jaWYgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5H
CiAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVtb3ZlU3BlbGxBbmRDb3JyZWN0
aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBdKSk7
Ci0jZW5kaWYKKyAgICAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmco
dGV4dFswXSk7CiAKICAgICBib29sIHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlv
biA9IGZhbHNlOwogICAgIGlmICh0ZXh0ID09ICIgIiB8fCB0ZXh0ID09ICJcdCIpCkBAIC0xMTc5
LDcgKzExMDAsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2
ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbgogICAgIGlmICh0ZXh0Lmxlbmd0
aCgpID09IDEgJiYgaXNQdW5jdCh0ZXh0WzBdKSAmJiAhaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJh
Y3Rlcih0ZXh0WzBdKSkKICAgICAgICAgc2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0
aW9uID0gdHJ1ZTsKIAotICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25XYXNBcHBsaWVkID0gc2hvdWxk
Q29uc2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0aW9uICYmIGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZv
cmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbldhc0FwcGxp
ZWQgPSBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJlY3Rpb24gJiYgbV9zcGVsbGluZ0Nv
cnJlY3Rvci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsK
IAogICAgIC8vIEdldCB0aGUgc2VsZWN0aW9uIHRvIHVzZSBmb3IgdGhlIGV2ZW50IHRoYXQgdHJp
Z2dlcmVkIHRoaXMgaW5zZXJ0VGV4dC4KICAgICAvLyBJZiB0aGUgZXZlbnQgaGFuZGxlciBjaGFu
Z2VkIHRoZSBzZWxlY3Rpb24sIHdlIG1heSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBzZWxlY3Rp
b24KQEAgLTEyMTUsNyArMTEzNiw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQog
ICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBhcHBs
eUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0
b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3Jy
ZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omlu
c2VydExpbmVCcmVhayhtX2ZyYW1lLT5kb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBwbGll
ZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7CiAg
ICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKQEAgLTEyMzMsNyAr
MTE1NCw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgIGlm
ICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBhcHBseUF1dG9j
b3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2NvcnJl
Y3Rpb25Jc0FwcGxpZWQgPSBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0aW9u
QmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBh
cmFncmFwaFNlcGFyYXRvcihtX2ZyYW1lLT5kb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBw
bGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7
CiAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKQEAgLTEyNTAs
OSArMTE3MSw3IEBAIHZvaWQgRWRpdG9yOjpjdXQoKQogICAgIH0KICAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoc2hvdWxkRGVsZXRlUmFuZ2Uo
c2VsZWN0aW9uLmdldCgpKSkgewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwotICAg
ICAgICByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZCh0
cnVlKTsKLSNlbmRpZgorICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRp
dGluZyh0cnVlKTsKICAgICAgICAgaWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9sKG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICAgICAgUGFz
dGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQoc2VsZWN0ZWRUZXh0
KCkpOwogICAgICAgICBlbHNlCkBAIC0xMjkxLDkgKzEyMTAsNyBAQCB2b2lkIEVkaXRvcjo6cGFz
dGUoKQogICAgICAgICByZXR1cm47IC8vIERIVE1MIGRpZCB0aGUgd2hvbGUgb3BlcmF0aW9uCiAg
ICAgaWYgKCFjYW5QYXN0ZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgUkVNT1ZFX01BUktFUlNf
VVBPTl9FRElUSU5HCi0gICAgcmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jk
c1RvQmVFZGl0ZWQoZmFsc2UpOwotI2VuZGlmCisgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZm
ZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBsb2FkZXIg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogICAgIGxvYWRl
ci0+c2V0QWxsb3dTdGFsZVJlc291cmNlcyh0cnVlKTsKICAgICBpZiAobV9mcmFtZS0+c2VsZWN0
aW9uKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCkBAIC0xMzA5LDkgKzEyMjYsNyBAQCB2
b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dCgpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
IWNhblBhc3RlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9OX0VE
SVRJTkcKLSAgICByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVk
aXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5
RWRpdGluZyhmYWxzZSk7CiAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKFBhc3Rl
Ym9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCkpOwogfQogCkBAIC0xNDY0LDcgKzEzNzksNyBAQCB2
b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50KCkKIAogYm9vbCBFZGl0
b3I6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJu
IGNsaWVudCgpICYmIGNsaWVudCgpLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJs
ZWQoKTsKKyAgICByZXR1cm4gbV9zcGVsbGluZ0NvcnJlY3Rvci0+aXNBdXRvbWF0aWNTcGVsbGlu
Z0NvcnJlY3Rpb25FbmFibGVkKCk7CiB9CiAKIHZvaWQgRWRpdG9yOjp0b2dnbGVBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb24oKQpAQCAtMjA1NiwyMyArMTk3MSw4IEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3Zp
bmdTZWxlY3RpCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3Jk
KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb25BZnRlclR5cGluZykKIHsKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5H
KQotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICAvLyBBcHBseSBwZW5kaW5n
IGF1dG9jb3JyZWN0aW9uIGJlZm9yZSBuZXh0IHJvdW5kIG9mIHNwZWxsIGNoZWNraW5nLgotICAg
IGJvb2wgZG9BcHBseUNvcnJlY3Rpb24gPSB0cnVlOwotICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dE9mU2VsZWN0aW9uID0gc2VsZWN0aW9uQWZ0ZXJUeXBpbmcudmlzaWJsZVN0YXJ0KCk7Ci0gICAg
VmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50V29yZCA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldv
cmQoc3RhcnRPZlNlbGVjdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQoc3Rh
cnRPZlNlbGVjdGlvbiwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7Ci0gICAgaWYgKGN1cnJlbnRX
b3JkLnZpc2libGVFbmQoKSA9PSBzdGFydE9mU2VsZWN0aW9uKSB7Ci0gICAgICAgIFN0cmluZyB3
b3JkVGV4dCA9IHBsYWluVGV4dChjdXJyZW50V29yZC50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KTsKLSAgICAgICAgaWYgKHdvcmRUZXh0Lmxlbmd0aCgpID4gMCAmJiBpc0FtYmlndW91c0JvdW5k
YXJ5Q2hhcmFjdGVyKHdvcmRUZXh0W3dvcmRUZXh0Lmxlbmd0aCgpIC0gMV0pKQotICAgICAgICAg
ICAgZG9BcHBseUNvcnJlY3Rpb24gPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGRvQXBwbHlDb3Jy
ZWN0aW9uKQotICAgICAgICBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVk
KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQuY2xlYXIoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVyVHlw
aW5nKTsKLSNlbmRpZgorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5UGVuZGluZ0NvcnJl
Y3Rpb24oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOworCiAgICAgVGV4dENoZWNraW5nT3B0aW9ucyB0
ZXh0Q2hlY2tpbmdPcHRpb25zID0gMDsKICAgICBpZiAoaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKSkKICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBNYXJrU3BlbGxpbmc7
CkBAIC0yMTAxLDcgKzIwMDEsNiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVy
VHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgIH0KIAog
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwogICAgIGlmICgh
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0yMjEwLDcgKzIxMDksNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJh
ZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogewogI2lmIFVTRShV
TklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAgICAgLy8gVGhlcmUgc2hvdWxkbid0IGJlIHBlbmRpbmcg
YXV0b2NvcnJlY3Rpb24gYXQgdGhpcyBtb21lbnQuCi0gICAgQVNTRVJUKCFtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpOworICAgIEFTU0VSVCghbV9zcGVsbGluZ0NvcnJl
Y3Rvci0+aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSk7CiAKICAgICBib29sIHNob3VsZE1hcmtTcGVs
bGluZyA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBNYXJrU3BlbGxpbmc7CiAgICAgYm9vbCBzaG91
bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBNYXJrR3JhbW1hcjsKQEAgLTIy
ODQsMTEgKzIxODMsOSBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAgIH0KICAgICB0ZXh0
Q2hlY2tlcigpLT5jaGVja1RleHRPZlBhcmFncmFwaChwYXJhZ3JhcGgudGV4dENoYXJhY3RlcnMo
KSwgcGFyYWdyYXBoLnRleHRMZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7CiAKLSNp
ZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgLy8gSWYgdGhpcyBjaGVja2luZyBp
cyBvbmx5IGZvciBzaG93aW5nIGNvcnJlY3Rpb24gcGFuZWwsIHdlIHNob3VsZG4ndCBib3RoZXIg
dG8gbWFyayBtaXNzcGVsbGluZ3MuCiAgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwp
CiAgICAgICAgIHNob3VsZE1hcmtTcGVsbGluZyA9IGZhbHNlOwotI2VuZGlmCiAKICAgICBpbnQg
b2Zmc2V0RHVlVG9SZXBsYWNlbWVudCA9IDA7CiAKQEAgLTIzMDcsMTAgKzIyMDQsOCBAQCB2b2lk
IEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hl
Y2tpbmdPcHRpb25zIHRleHRDaAogICAgICAgICBpZiAoc2hvdWxkTWFya1NwZWxsaW5nICYmIHJl
c3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0TG9jYXRpb24g
Pj0gc3BlbGxpbmdQYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpICYmIHJlc3VsdExvY2F0aW9uICsg
cmVzdWx0TGVuZ3RoIDw9IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgIXJlc3VsdEVuZHNBdEFt
YmlndW91c0JvdW5kYXJ5KSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAm
JiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3Bl
bGxpbmdSYW5nZSA9IHNwZWxsaW5nUGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCBy
ZXN1bHRMZW5ndGgpOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICAgICAg
ICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmhhc01hcmtlcnMobWlzc3Bl
bGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24p
KQorICAgICAgICAgICAgaWYgKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5pc1NwZWxsaW5nTWFya2Vy
QWxsb3dlZChtaXNzcGVsbGluZ1JhbmdlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNl
bmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgICAgICBtaXNzcGVs
bGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRk
TWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7
CiAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkTWFya0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09
IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIGdyYW1tYXJQYXJhZ3JhcGguY2hlY2tpbmdSYW5n
ZUNvdmVycyhyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKSkgewogICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CkBAIC0yMzY5LDI0
ICsyMjY0LDE3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
ckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiAgICAgICAgICAgICBpZiAoIWRv
UmVwbGFjZW1lbnQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSNpZiBTVVBQT1JUX0FV
VE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25Q
YW5lbCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BB
TkVMKTsKKyAgICAgICAgICAgICAgICAvLyBzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsIGNhbiBi
ZSB0cnVlIG9ubHkgd2hlbiB0aGUgcGFuZWwgaXMgYXZhaWxhYmxlLgogICAgICAgICAgICAgICAg
IGlmIChyZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA9PSBzcGVsbGluZ1JhbmdlRW5kT2Zm
c2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgc2hvdyB0aGUgY29ycmVjdGlv
biBwYW5lbCBvbiB0aGUgbGFzdCB3b3JkLgotICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHJhbmdlVG9SZXBsYWNlOwotICAgICAgICAgICAg
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQo
cmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSByZXN1bHQtPnJlcGxhY2VtZW50OwotICAgICAg
ICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VkU3RyaW5nLCByZXN1bHQtPnJlcGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+c2hvdyhyYW5nZVRvUmVw
bGFjZSwgcmVzdWx0LT5yZXBsYWNlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGlz
IGNhbGxlZCBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBpZ25vcmUgb3RoZXIgY29y
cmVjdGlvbiBvciByZXBsYWNlbWVudC4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KLSNlbmRpZgogCiAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uVG9SZXBsYWNlICE9
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIGlm
ICghbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25U
b1JlcGxhY2UpKQpAQCAtMjQ2NywxNyArMjM1NSwxMiBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFj
a1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAgICBpZiAo
IXNob3VsZEluc2VydFRleHQocmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uUGFzdGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotI2lmIFNVUFBPUlRf
QVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBTdHJpbmcgcmVwbGFjZW1lbnQgPSBwbGFpblRleHQo
c2VsZWN0aW9uLmdldCgpKTsKLSAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5n
LCByZXBsYWNlbWVudCk7Ci0jZW5kaWYKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQocmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbik7
CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChzZWxlY3Rpb24pOwogICAgIHJl
cGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmluZywgZmFsc2UsIGZhbHNlKTsKICAg
ICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShwYXJhZ3Jh
cGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5ndGgoKSk7CiAgICAgY2hhbmdl
ZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtl
cihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5n
KCkpOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBjaGFuZ2VkUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5n
ZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwot
I2VuZGlmCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+bWFya1JldnNlcnNlZChjaGFuZ2VkUmFu
Z2UuZ2V0KCkpOwogI2Vsc2UKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBVTlVTRURf
UEFSQU0ocmVwbGFjZWRTdHJpbmcpOwpAQCAtMjUwMiwxNDAgKzIzODUsMTYgQEAgdm9pZCBFZGl0
b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNwZWxsaW5nU2VsZWMKICNlbmRpZgogfQogCi12b2lkIEVkaXRvcjo6Y29ycmVjdGlvblBhbmVs
VGltZXJGaXJlZChUaW1lcjxFZGl0b3I+KikKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gZmFsc2U7
Ci0gICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7Ci0gICAgY2Fz
ZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOiB7Ci0gICAgICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KSk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSwgc2Vs
ZWN0aW9uLmFmZmluaXR5KCkpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZX
b3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rp
b24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQpOwotICAgICAgICBt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE1hcmtTcGVsbGluZyB8IFNo
b3dDb3JyZWN0aW9uUGFuZWwsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQo
KSwgMCk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZVJldmVyc2lvbjogewotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmcgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LmdldCgpKTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJh
bmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAg
ICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQotICAgICAgICAgICAgY2xpZW50KCktPnNo
b3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRp
bmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPigpKTsKLSAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3Bl
bGxpbmdTdWdnZXN0aW9uczogewotICAgICAgICBpZiAocGxhaW5UZXh0KG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VkU3RyaW5nKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFN0cmluZyBwYXJh
Z3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaChtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpLnBhcmFncmFwaFJhbmdlKCkuZ2V0KCkpOwotICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+
Z2V0R3Vlc3Nlc0ZvcldvcmQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBw
YXJhZ3JhcGhUZXh0LCBzdWdnZXN0aW9ucyk7Ci0gICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC5jbGVhcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgU3Ry
aW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJzdCgpOwotICAgICAgICBzdWdnZXN0
aW9ucy5yZW1vdmUoMCk7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9
IHRydWU7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5n
ZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAg
ICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNsaWVudCgpLT5zaG93
Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5n
Qm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHRvcFN1Z2dlc3Rpb24s
IHN1Z2dlc3Rpb25zKTsKLSAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZgotfQot
Ci12b2lkIEVkaXRvcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYg
Y29ycmVjdGlvbikKLXsKLSAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKTsKLSAgICBpZiAoIXJlcGxhY2VkUmFuZ2Ug
fHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCht
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUgYWJvdXQgdG8gY29ycmVjdCBoYXMgYmVlbiBj
aGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5nIGFuZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQu
Ci0gICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0
cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5
cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246
Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOwotICAgICAgICAg
ICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24o
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVs
SXNEaXNtaXNzZWRCeUVkaXRvcikKLSAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZWRTdHJpbmcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgotICAgIGNhc2UgQ29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKLSAgICAgICAg
aWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247Ci0gICAgICAgICAgICBhcHBseUNv
cnJlY3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLX0KLQotdm9pZCBFZGl0b3I6OnN0YXJ0Q29ycmVjdGlv
blBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUpCi17Ci0jaWYg
U1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9u
UGFuZWxUaW1lckludGVydmFsID0gMC4zOwotICAgIGlmIChpc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAodHlwZSA9PSBDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQotICAgICAgICAgICAgLy8gSWYgdHlwZSBpcyBQYW5l
bFR5cGVSZXZlcnNpb24sIHRoZW4gdGhlIG5ldyByYW5nZSBoYXMgYmVlbiBzZXQuIFNvIHdlIHNo
b3VsZG4ndCBjbGVhciBpdC4KLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFu
ZWxUeXBlID0gdHlwZTsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNo
b3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0odHlwZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBFZGl0b3I6OnN0b3BDb3JyZWN0aW9u
UGFuZWxUaW1lcigpCit2b2lkIEVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNv
cnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQogewotI2lmIFNVUFBPUlRfQVVUT0NP
UlJFQ1RJT05fUEFORUwKLSAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsKLSAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSNlbmRpZgor
ICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlv
bihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKIH0KIAotdm9p
ZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQordm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtl
cnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0
V29yZEJvdW5kYXJ5KQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBp
ZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICBpZiAoIW1fc3BlbGxpbmdD
b3JyZWN0b3ItPnNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpKQogICAgICAgICByZXR1
cm47Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0gICAgbV9j
b3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50
KCkpCi0gICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJlYXNvbkZvckRp
c21pc3NpbmcpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVhc29uRm9yRGlzbWlzc2luZyk7
Ci0jZW5kaWYKLX0KLQotU3RyaW5nIEVkaXRvcjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24o
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQot
ewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBpZiAoIW1fY29ycmVjdGlv
blBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIG1fY29y
cmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotICAgIG1fY29ycmVjdGlvblBhbmVs
SXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7Ci0gICAgaWYgKCFjbGllbnQoKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbFNvb24ocmVhc29uRm9yRGlzbWlzc2luZyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShy
ZWFzb25Gb3JEaXNtaXNzaW5nKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci0jZW5kaWYKLX0KIAot
dm9pZCBFZGl0b3I6OnJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0Jl
RWRpdGVkKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KQotewogICAg
IC8vIFdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBtYXJrZXJzIGZyb20gYSB3b3JkIGlmIGFuIGVkaXRp
bmcgY29tbWFuZCB3aWxsIGNoYW5nZSB0aGUgd29yZC4gVGhpcyBjYW4gaGFwcGVuIGluIG9uZSBv
ZgogICAgIC8vIHNldmVyYWwgc2NlbmFyaW9zOgogICAgIC8vIDEuIEluc2VydCBpbiB0aGUgbWlk
ZGxlIG9mIGEgd29yZC4KQEAgLTI3MDEsMTAyICsyNDYwLDYgQEAgdm9pZCBFZGl0b3I6OnJlbW92
ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKGJvb2wgZG9Ob3RS
ZW1vdmUKICAgICBkb2N1bWVudC0+bWFya2VycygpLT5jbGVhckRlc2NyaXB0aW9uT25NYXJrZXJz
SW50ZXJzZWN0aW5nUmFuZ2Uod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQpOwogfQogCi12b2lkIEVkaXRvcjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0
IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpCi17
Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGlmICghbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFp
bmluZ0NvcnJlY3Rpb24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQt
PmNsb25lUmFuZ2UoZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0
U3RhcnQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBh
cmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9z
aXRpb24oKSkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
LmdldCgpLCBlbmRPZlBhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQtPmVuZFBvc2l0aW9uKCkpKTsKLQotICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdv
cmQgYXQgcmFuZ2UgcmFuZ2VUb0JlUmVwbGFjZWQsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8g
dGhhdCByYW5nZS4KLSAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBs
YWNlLCB0aGUgdmFsdWUgb2YgcmFuZ2VUb0JlUmVwbGFjZWQgaXMgbm90IHZhbGlkIGFueW1vcmUu
Ci0gICAgLy8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQg
dG8gc3RvcmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkCi0gICAgLy8g
cmVsYXRpdmUgdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFw
aC4gV2UgdXNlIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoCi0gICAgLy8gdG8gc3Rv
cmUgdGhpcyB2YWx1ZS4gSW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRv
IGZpcnN0IGNyZWF0ZSBhIHJhbmdlCi0gICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQg
b2YgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZC4K
LSAgICBSZWZQdHI8UmFuZ2U+IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3Rh
cnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24tPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOwotICAgIGNvcnJl
Y3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25P
ZlJhbmdlVG9CZVJlcGxhY2VkLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VU
b0JlUmVwbGFjZWQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7Ci0gICAgaWYg
KGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9u
IG9mIGF1dG9jb3JyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJl
cGxhY2VtZW50IHRvb2sgcGxhY2UuCi0gICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJ
blBhcmFncmFwaEFzUmFuZ2UuZ2V0KCkpOwotCi0gICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5j
ZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFs
IHJhbmdlIGFyb3VuZC4KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAg
ICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9C
ZVJlcGxhY2VkLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpKTsKLSAg
ICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgbV9mcmFt
ZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkpOwotICAgIFJlZlB0cjxSYW5nZT4g
cmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2VD
b250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3Jh
cGgsICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpOwot
ICAgIFN0cmluZyBuZXdUZXh0ID0gcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOwot
Ci0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KLSAgICBpZiAo
bmV3VGV4dCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJl
cGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsK
LSAgICBzaXplX3Qgc2l6ZSA9IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucGFuZWxUeXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lv
bikKLSAgICAgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgp
LCBtYXJrZXJUeXBlc1RvQWRkW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWFya2Vy
cy0+YWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGVzVG9BZGRbaV0s
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyk7Ci0gICAgfQotI2Vsc2UgLy8g
U1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFVOVVNFRF9QQVJBTShtYXJrZXJUeXBl
c1RvQWRkKTsKLSNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi19Ci0KLWJv
b2wgRWRpdG9yOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgp
Ci17Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwg
IW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rp
b24oKS5zdGFydCgpOwotCi0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7Ci0gICAgICAgIGhhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfSAKLSAgICAKLSAgICAvLyBQZW5kaW5nIGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5
cyBiZSB3aGVyZSBjYXJldCBpcy4gQnV0IGluIGNhc2UgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUs
IHdlIHN0aWxsIHdhbnQgdG8gZGlzbWlzcyB0aGUgcGFuZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhl
IGNvcnJlY3Rpb24uCi0gICAgQVNTRVJUKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKTsKLSAgICBkaXNtaXNzQ29y
cmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0
IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0jaWYgU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVj
dGVkLCBjb3JyZWN0aW9uKTsKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQo
KTsKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29y
cmVjdGVkLCBTZWxlY3Rpb25Db250cm9sbGVyOjpDbG9zZVR5cGluZyB8IFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkNsZWFyVHlwaW5nU3R5bGUgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpTcGVsbENvcnJl
Y3Rpb25UcmlnZ2VyZWQpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KG1fZnJhbWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5z
dGFydCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCkpOwotCi0gICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpOwotICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2UuZ2V0KCksIERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZyk7Ci0gICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgIG1hcmtlcnMtPmFkZE1hcmtlcihy
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotI2Vs
c2UgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFVOVVNFRF9QQVJBTShzZWxl
Y3Rpb25PZkNvcnJlY3RlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGNvcnJlY3Rpb24pOwotI2VuZGlmIC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKLX0KLQogUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0
IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2Zy
YW1lLT5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwpAQCAtMjkxOSw2ICsyNTgyLDE3IEBA
IHZvaWQgRWRpdG9yOjphZGRUb0tpbGxSaW5nKFJhbmdlKiByYW5nZSwgYm9vbCBwcmVwZW5kKQog
ICAgIG1fc2hvdWxkU3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlID0gZmFsc2U7CiB9CiAKK3ZvaWQg
RWRpdG9yOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKK3sKKyAgICBtX3NwZWxsaW5nQ29y
cmVjdG9yLT5zdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZUNvcnJlY3Rpb24pOworfQorCit2b2lkIEVkaXRvcjo6aGFuZGxlQ29ycmVjdGlvblBh
bmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKK3sKKyAgICBtX3NwZWxsaW5nQ29y
cmVjdG9yLT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29ycmVjdGlvbik7Cit9CisKKwog
Ym9vbCBFZGl0b3I6Omluc2lkZVZpc2libGVBcmVhKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29u
c3QKIHsKICAgICBpZiAobV9mcmFtZS0+ZXhjbHVkZUZyb21UZXh0U2VhcmNoKCkpCkBAIC0zNDkx
LDE0ICszMTY1LDcgQEAgdm9pZCBFZGl0b3I6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxp
Z2h0ZWQoYm9vbCBmbGFnKQogCiB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKIHsKLSNpZiBTVVBQT1JUX0FVVE9DT1JS
RUNUSU9OX1BBTkVMCi0gICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gcGVuZGluZyBhdXRvY29y
cmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcigpIGJl
bG93LgotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihmcmFtZSgpLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgIGlmIChjdXJyZW50U2VsZWN0aW9uICE9IG9sZFNl
bGVjdGlvbikgewotICAgICAgICBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKTsKLSAgICAgICAg
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
SWdub3JlZCk7Ci0gICAgfQotI2VuZGlmIC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwK
KyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5zdG9wUGVuZGluZ0NvcnJlY3Rpb24ob2xkU2VsZWN0
aW9uKTsKIAogICAgIGJvb2wgY2xvc2VUeXBpbmcgPSBvcHRpb25zICYgU2VsZWN0aW9uQ29udHJv
bGxlcjo6Q2xvc2VUeXBpbmc7CiAgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCA9IHRoaXMtPmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CkBAIC0zNTE1
LDEwICszMTgyLDggQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBTZWwKICAgICAgICAgfQogCiAgICAg
ICAgIGJvb2wgc2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1tYXIgPSB0cnVlOwotI2lmIFNVUFBP
UlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgc3BlbGxpbmcg
YW5kIGdyYW1tYXIgaWYgdGhlIGNoYW5nZSBvZiBzZWxlY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IHNw
ZWxsaW5nIGNvcnJlY3Rpb24gaXRzZWxmLgogICAgICAgICBzaG91bGRDaGVja1NwZWxsaW5nQW5k
R3JhbW1hciA9ICEob3B0aW9ucyAmIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsQ29ycmVjdGlv
blRyaWdnZXJlZCk7Ci0jZW5kaWYKIAogICAgICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVjayBz
cGVsbGluZyBlbHNld2hlcmUsIHNvIGRvbid0IHJlZG8gaXQgaGVyZS4KICAgICAgICAgLy8gSWYg
dGhpcyBpcyBhIGNoYW5nZSBpbiBzZWxlY3Rpb24gcmVzdWx0aW5nIGZyb20gYSBkZWxldGUgb3Bl
cmF0aW9uLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggNWZlMzQ1ZGE3NzE4N2UyZTc4MTdj
NGMzOGJmOTI1MDgzMTZmMDFkZi4uNzBiZjI4ODBmYWMwOWYxOWZkYmM2NmRmYjgxZGRmYjlmYTJh
ZmEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNs
dWRlICJDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1
ZGUgIkNvcnJlY3Rpb25QYW5lbEluZm8uaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgog
I2luY2x1ZGUgIkVkaXRBY3Rpb24uaCIKICNpbmNsdWRlICJFZGl0aW5nQmVoYXZpb3IuaCIKQEAg
LTUxLDYgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb247CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ2xpcGJvYXJk
OworY2xhc3MgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjsKIGNsYXNzIERlbGV0ZUJ1dHRv
bkNvbnRyb2xsZXI7CiBjbGFzcyBFZGl0Q29tbWFuZDsKIGNsYXNzIEVkaXRvckNsaWVudDsKQEAg
LTMyMyw3ICszMjMsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFRvS2lsbFJpbmcoUmFuZ2Uq
LCBib29sIHByZXBlbmQpOwogCi0gICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSk7CisgICAgdm9pZCBzdGFydENvcnJlY3Rpb25Q
YW5lbFRpbWVyKCk7CiAgICAgLy8gSWYgdXNlciBjb25maXJtZWQgYSBjb3JyZWN0aW9uIGluIHRo
ZSBjb3JyZWN0aW9uIHBhbmVsLCBjb3JyZWN0aW9uIGhhcyBub24temVybyBsZW5ndGgsIG90aGVy
d2lzZSBpdCBtZWFucyB0aGF0IHVzZXIgaGFzIGRpc21pc3NlZCB0aGUgcGFuZWwuCiAgICAgdm9p
ZCBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsK
IApAQCAtMzgxLDcgKzM4MSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBzZWxlY3Rp
b25TdGFydEhhc1NwZWxsaW5nTWFya2VyRm9yKGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdDsK
LSAgICB2b2lkIHJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRp
dGVkKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KTsKKyAgICB2b2lk
IHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wgb25seUhhbmRsZVdv
cmRzQ29udGFpbmluZ1NlbGVjdGlvbik7CiAKIHByaXZhdGU6CiAgICAgRnJhbWUqIG1fZnJhbWU7
CkBAIC0zOTYsMTAgKzM5Niw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN0YXJ0TmV3
S2lsbFJpbmdTZXF1ZW5jZTsKICAgICBib29sIG1fc2hvdWxkU3R5bGVXaXRoQ1NTOwogICAgIE93
blB0cjxLaWxsUmluZz4gbV9raWxsUmluZzsKLSAgICBDb3JyZWN0aW9uUGFuZWxJbmZvIG1fY29y
cmVjdGlvblBhbmVsSW5mbzsKICAgICBPd25QdHI8U3BlbGxDaGVja2VyPiBtX3NwZWxsQ2hlY2tl
cjsKLSAgICBUaW1lcjxFZGl0b3I+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7Ci0gICAgYm9vbCBt
X2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7CisgICAgT3duUHRyPFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI+IG1fc3BlbGxpbmdDb3JyZWN0b3I7CiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBtX21hcms7CiAgICAgYm9vbCBtX2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0
ZWQ7CiAKQEAgLTQyMywxNCArNDIxLDEzIEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxSYW5n
ZT4gbmV4dFZpc2libGVSYW5nZShSYW5nZSosIGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsK
IAogICAgIHZvaWQgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG5ld1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0
eWxlKTsKLSAgICB2b2lkIGNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiop
OwogICAgIE5vZGUqIGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKKwogICAg
IHZvaWQgc3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7Ci0gICAgdm9pZCBkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwotICAgIFN0cmlu
ZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsKTsKICAgICB2b2lkIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc1RvQWRkKTsKICAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdhcyBhcHBsaWVkLCBmYWxzZSBvdGhlcndpc2UuCiAg
ICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwor
CiAgICAgRmxvYXRSZWN0IHdpbmRvd1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSopIGNvbnN0Owog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZC5jcHAKaW5kZXggYmFkNGE5OWU5ODE4OTMwMmVjNjFiZmRiMDlkYTE0NmQwYmIxNGVi
NC4uMDVkOWI4MzEwZjg2YmI0OWM0ODMxOThhZWUzY2I4NzJlMzQxOTljMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCkBA
IC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5oIgogCi0jaW5jbHVkZSAiQ29ycmVjdGlvblBhbmVsSW5mby5oIgor
I2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEb2N1
bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM0NmNmYWQzY2VjNDVk
Nzk4YjFkZmRhNWE2MzY5NGQxMzhmZmU3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw0
MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVk
ZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIK
KyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCIKKyNp
bmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgorI2luY2x1ZGUgIlRleHRDaGVja2luZ0hlbHBl
ci5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgi
CisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFj
ZSBXVEY7CisKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisKK3N0YXRpYyBjb25z
dCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvckF1dG9j
b3JyZWN0aW9uKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24sICgpKTsKKyAg
ICBpZiAobWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAg
bWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxh
Y2VtZW50KTsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9j
dW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworICAgICAgICBtYXJrZXJUeXBlc0Zv
ckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbik7CisgICAgfQorICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uOwor
fQorCitzdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFy
a2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0
b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50
LCAoKSk7CisgICAgaWYgKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCk7CisgICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERv
Y3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJu
IG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7Cit9CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorICAgIDog
bV9mcmFtZShmcmFtZSkKKyAgICAsIG1fY29ycmVjdGlvblBhbmVsVGltZXIodGhpcywgJlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCit7Cit9
CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyKCkKK3sKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWxJZ25vcmVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFy
dENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBl
KQoreworICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4z
OworICAgIGlmICghaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0aGVu
IHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQuCisg
ICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikK
KyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7
CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7CisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZh
bCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcENvcnJlY3Rp
b25QYW5lbFRpbWVyKCkKK3sKKyAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsKKyAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKwor
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQoreworICAgIC8vIE1ha2Ugc3Vy
ZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFya01p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1
cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICBp
ZiAoY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCit7CisgICAgLy8gQXBwbHkgcGVuZGluZyBhdXRv
Y29ycmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBvZiBzcGVsbCBjaGVja2luZy4KKyAgICBib29s
IGRvQXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNl
bGVjdGlvbiA9IHNlbGVjdGlvbkFmdGVyVHlwaW5nLnZpc2libGVTdGFydCgpOworICAgIFZpc2li
bGVTZWxlY3Rpb24gY3VycmVudFdvcmQgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0
YXJ0T2ZTZWxlY3Rpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZT
ZWxlY3Rpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOworICAgIGlmIChjdXJyZW50V29yZC52
aXNpYmxlRW5kKCkgPT0gc3RhcnRPZlNlbGVjdGlvbikgeworICAgICAgICBTdHJpbmcgd29yZFRl
eHQgPSBwbGFpblRleHQoY3VycmVudFdvcmQudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Cisg
ICAgICAgIGlmICh3b3JkVGV4dC5sZW5ndGgoKSA+IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFyeUNo
YXJhY3Rlcih3b3JkVGV4dFt3b3JkVGV4dC5sZW5ndGgoKSAtIDFdKSkKKyAgICAgICAgICAgIGRv
QXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7CisgICAgfQorICAgIGlmIChkb0FwcGx5Q29ycmVjdGlv
bikgeworICAgICAgICBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoZGlzbWlzc1Nvb24oUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKSk7IAorICAgICAgICBkaXNt
aXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCk7CisgICAgfSBl
bHNlCisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVh
cigpOworfQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhhc1BlbmRpbmdD
b3JyZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkOworfQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFu
Z2UpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkt
Pmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24pOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnQpCit7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZv
clJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkID0gcmFuZ2VUb1JlcGxhY2U7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlbWVudDsKKyAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOworICAgIGNsaWVudCgpLT5zaG93
Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5n
Qm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50LCBW
ZWN0b3I8U3RyaW5nPigpKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpoYW5kbGVDYW5jZWxPcGVyYXRpb24oKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LmlzQWN0aXZlID0gZmFsc2U7CisgICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsQ2FuY2VsbGVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9y
RGlzbWlzc2luZykKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZh
bHNlOworICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7Cisg
ICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bChyZWFzb25Gb3JEaXNtaXNzaW5nKTsKK30KKworU3RyaW5nIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwg
cmVhc29uRm9yRGlzbWlzc2luZykKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRC
eUVkaXRvciA9IHRydWU7CisgICAgaWYgKCFjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIHJldHVybiBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24ocmVh
c29uRm9yRGlzbWlzc2luZyk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOworICAg
IGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2Uu
Z2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UuZ2V0
KCksIGVuZE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNl
ZC0+ZW5kUG9zaXRpb24oKSkpOworCisgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBh
dCByYW5nZSByYW5nZVRvQmVSZXBsYWNlZCwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0
IHJhbmdlLgorICAgIC8vIEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2Us
IHRoZSB2YWx1ZSBvZiByYW5nZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KKyAg
ICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBz
dG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQKKyAgICAvLyByZWxh
dGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBX
ZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKKyAgICAvLyB0byBzdG9yZSB0
aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmly
c3QgY3JlYXRlIGEgcmFuZ2UKKyAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBw
YXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkLgorICAg
IFJlZlB0cjxSYW5nZT4gY29ycmVjdGlvblN0YXJ0ID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhS
YW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBpZiAo
ZWMpCisgICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25Ub0JlUmVw
bGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9z
aXRpb24oKTsKKyAgICBjb3JyZWN0aW9uU3RhcnQtPnNldEVuZChzdGFydFBvc2l0aW9uVG9CZVJl
cGxhY2VkLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvblRvQmVSZXBsYWNlZC5jb21wdXRl
T2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24g
c28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFj
ZS4KKyAgICBpbnQgc3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgoY29ycmVjdGlvblN0YXJ0LmdldCgpKTsKKworICAgIC8vIENsb25lIHRoZSByYW5nZSwg
c2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmln
aW5hbCByYW5nZSBhcm91bmQuCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7
CisgICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5n
ZVRvQmVSZXBsYWNlZCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7
CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdl
ID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgc3RhcnRPZmZz
ZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZy5s
ZW5ndGgoKSk7CisgICAgU3RyaW5nIG5ld1RleHQgPSBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5n
ZS5nZXQoKSk7CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVk
LgorICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0
cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBt
YXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpOworICAgIHNpemVfdCBzaXplID0gbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7Cisg
ICAgU3RyaW5nIGRlc2NyaXB0aW9uOworICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFu
ZWxUeXBlICE9IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbikKKyAgICAg
ICAgZGVzY3JpcHRpb24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmc7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1hcmtlcnMtPmFk
ZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlc1RvQWRkW2ldLCBkZXNj
cmlwdGlvbik7Cit9CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlB
dXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQoreworICAgIGlmICghbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkIHx8ICFtX2NvcnJlY3Rpb25QYW5l
bEluZm8uaXNBY3RpdmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlICE9IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZUNvcnJlY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvc2l0aW9uIGNhcmV0
UG9zaXRpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKTsKKwor
ICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0
aW9uKCkgPT0gY2FyZXRQb3NpdGlvbikgeworICAgICAgICBkaXNtaXNzU29vbihSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9IAorICAgIAorICAgIC8vIFBlbmRpbmcgY29ycmVjdGlvbiBzaG91bGQgYWx3YXlzIGJl
IHdoZXJlIGNhcmV0IGlzLiBCdXQgaW4gY2FzZSB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgd2Ug
c3RpbGwgd2FudCB0byBkaXNtaXNzIHRoZSBwYW5lbCB3aXRob3V0IGFjY2VwdGluZyB0aGUgY29y
cmVjdGlvbi4KKyAgICBBU1NFUlQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pOworICAgIGRpc21pc3MoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxp
ZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3Jy
ZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24p
Cit7CisgICAgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvcnJlY3RlZCwg
Y29ycmVjdGlvbik7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Cisg
ICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3Rl
ZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBTZWxlY3Rpb25Db250cm9sbGVy
OjpDbGVhclR5cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9u
VHJpZ2dlcmVkKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2Zy
YW1lLT5kb2N1bWVudCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQo
KSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmVuZCgpKTsKKworICAgIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtl
cnMoKTsKKyAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcpOworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9j
dW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKK30KKwordm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVk
KFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikKK3sKKyAgICBtX2NvcnJlY3Rp
b25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKG1fY29ycmVj
dGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7Cisg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZP
bkJvdW5kYXJ5KTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlz
aWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CisgICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLT5tYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKEVkaXRvcjo6TWFya1NwZWxsaW5n
IHwgRWRpdG9yOjpTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIDApOworICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb3Jy
ZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsKKyAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdp
bmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQu
Z2V0KCkpOworICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5l
bFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcs
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZywgVmVjdG9yPFN0cmluZz4o
KSk7CisgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKKyAgICAgICAgaWYgKHBsYWluVGV4dCht
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpICE9IG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgo
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKS5wYXJhZ3JhcGhSYW5nZSgp
LmdldCgpKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7CisgICAgICAgIHRl
eHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMpOworICAgICAgICBpZiAoc3Vn
Z2VzdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIFN0cmluZyB0b3BTdWdnZXN0aW9uID0gc3VnZ2VzdGlvbnMuZmlyc3QoKTsKKyAg
ICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDApOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8uaXNBY3RpdmUgPSB0cnVlOworICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5k
b3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdl
dCgpKTsKKyAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCisgICAgICAgICAgICBj
bGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxU
eXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCB0
b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7CisgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ29ycmVjdGlv
blBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKK3sKKyAgICBSYW5nZSogcmVw
bGFjZWRSYW5nZSA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQo
KTsKKyAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSByZXBs
YWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmlu
ZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCkpOworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUg
YWJvdXQgdG8gY29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5nIGFu
ZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQuCisgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fY29y
cmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246CisgICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0
aCgpKSB7CisgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJp
bmcgPSBjb3JyZWN0aW9uOworICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1h
cmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIW1fY29y
cmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcikKKyAgICAgICAgICAgIHJlcGxhY2VkUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJl
cGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgorICAgIGNhc2UgQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKKyAgICAgICAgaWYg
KGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247CisgICAgICAgICAgICBhcHBseUNvcnJl
Y3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQoreworICAgIHJldHVy
biBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFi
bGVkKCk7Cit9CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVt
b3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCkKK3sKKyAgICByZXR1cm4gUkVNT1ZFX01BUktFUlNfVVBP
Tl9FRElUSU5HICYmIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworfQor
CitGbG9hdFJlY3QgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6d2luZG93UmVjdEZvclJh
bmdlKGNvbnN0IFJhbmdlKiByYW5nZSkgY29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBt
X2ZyYW1lLT52aWV3KCk7CisgICAgcmV0dXJuIHZpZXcgPyB2aWV3LT5jb250ZW50c1RvV2luZG93
KEludFJlY3QocmFuZ2UtPmJvdW5kaW5nUmVjdCgpKSkgOiBGbG9hdFJlY3QoKTsKK30gICAgICAg
IAorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQoreworICAgIFZp
c2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2Vs
ZWN0aW9uKCkpOworICAgIC8vIFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1
dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAorICAgIC8vIGNv
bnRhaW5pbmcgdGhlIG9yaWdpbmFsIHByZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNh
biBxdWlja2x5IHJldmVydCB0aGUKKyAgICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhl
cmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24gcGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQK
KyAgICAvLyB0aGUgbmV3IGNhcmV0IHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgor
ICAgIGlmICghY3VycmVudFNlbGVjdGlvbi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9
PSBvbGRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIFZpc2libGVQb3NpdGlvbiBz
ZWxlY3Rpb25Qb3NpdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb24uc3RhcnQoKTsKKyAgICBWaXNpYmxl
UG9zaXRpb24gZW5kUG9zaXRpb25PZldvcmQgPSBlbmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24s
IExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5k
UG9zaXRpb25PZldvcmQpCisgICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9uIHBvc2l0aW9u
ID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBpZiAocG9zaXRpb24u
YW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCisgICAg
ICAgIHJldHVybjsKKworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7
CisgICAgaW50IGVuZE9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwor
ICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1h
cmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7CisgICAgc2l6ZV90IG1hcmtlckNvdW50ID0g
bWFya2Vycy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsg
KytpKSB7CisgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ld
OworICAgICAgICBpZiAoIXNob3VsZFN0YXJ0VGltZUZvcihtYXJrZXIsIGVuZE9mZnNldCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNl
dCwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCk7CisgICAgICAgIFN0cmluZyBjdXJyZW50V29yZCA9
IHBsYWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOworICAgICAgICBpZiAoIWN1cnJlbnRXb3JkLmxl
bmd0aCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gd29yZFJhbmdlOworICAgICAgICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBjdXJyZW50V29yZDsKKyAgICAgICAgaWYgKG1h
cmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykKKyAgICAgICAgICAgIHN0YXJ0
Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxp
bmdTdWdnZXN0aW9ucyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gbWFya2VyLmRlc2NyaXB0aW9uOworICAgICAg
ICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVSZXZlcnNpb24pOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0
aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+IGNvbW1hbmQpCit7CisgICAgaWYgKGNvbW1hbmQt
PmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNvbW1hbmQtPnNob3VsZFJldGFpbkF1dG9jb3JyZWN0
aW9uSW5kaWNhdG9yKCkpCisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+
cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7Cit9CisK
K0VkaXRvckNsaWVudCogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y2xpZW50KCkKK3sK
KyAgICByZXR1cm4gbV9mcmFtZS0+cGFnZSgpID8gbV9mcmFtZS0+cGFnZSgpLT5lZGl0b3JDbGll
bnQoKSA6IDA7Cit9CisKK1RleHRDaGVja2VyQ2xpZW50KiBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCit7CisgICAgaWYgKEVkaXRvckNsaWVudCogb3duZXIgPSBj
bGllbnQoKSkKKyAgICAgICAgcmV0dXJuIG93bmVyLT50ZXh0Q2hlY2tlcigpOworICAgIHJldHVy
biAwOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQoreworICAgIGNsaWVudCgpLT5yZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRl
ZCwgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nKTsKK30KKwordm9pZCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrUmV2c2Vyc2VkKFBhc3NSZWZQdHI8UmFuZ2U+IGNo
YW5nZWRSYW5nZSkKK3sKKyAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJh
bmdlKQoreworICAgIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNl
ZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpKTsKK30KKworI2VuZGlm
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzNhNmYxMGVk
OWM2Y2Y5YmI2N2Q4YTc5NjUxY2JkYmNkZmM1MWEwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCkBAIC0wLDAg
KzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJf
aAorI2RlZmluZSBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKKworI2lmIFBMQVRGT1JN
KE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKy8vIFNv
bWUgcGxhdGZvcm1zIHByb3ZpZGUgVUkgZm9yIHN1Z2dlc3RpbmcgYXV0b2NvcnJlY3Rpb24uCisj
ZGVmaW5lIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwgMQorLy8gU29tZSBwbGF0Zm9ybXMg
dXNlIHNwZWxsaW5nIGFuZCBhdXRvY29ycmVjdGlvbiBtYXJrZXJzIHRvIHByb3ZpZGUgdmlzdWFs
IGN1ZS4KKy8vIE9uIHN1Y2ggcGxhdGZvcm0sIGlmIHdvcmQgd2l0aCBtYXJrZXIgaXMgZWRpdGVk
LCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbWFya2VyLgorI2RlZmluZSBSRU1PVkVfTUFSS0VSU19V
UE9OX0VESVRJTkcgMQorI2Vsc2UKKyNkZWZpbmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5F
TCAwCisjZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORyAwCisjZW5kaWYgLy8gI2lm
IFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkKKworI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEVkaXRvckNsaWVudDsKK2NsYXNzIEVkaXRDb21tYW5kOworY2xhc3Mg
UmFuZ2U7CitjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247
CisKK3N0cnVjdCBDb3JyZWN0aW9uUGFuZWxJbmZvIHsKKyAgICBlbnVtIFBhbmVsVHlwZSB7Cisg
ICAgICAgIFBhbmVsVHlwZUNvcnJlY3Rpb24gPSAwLAorICAgICAgICBQYW5lbFR5cGVSZXZlcnNp
b24sCisgICAgICAgIFBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMKKyAgICB9OworCisgICAg
UmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZDsKKyAgICBTdHJpbmcgcmVwbGFjZWRTdHJp
bmc7CisgICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOworICAgIFBhbmVsVHlwZSBwYW5lbFR5
cGU7CisgICAgYm9vbCBpc0FjdGl2ZTsKK307CisKK2VudW0gUmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbCB7CisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENh
bmNlbGxlZCA9IDAsCisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9y
ZWQsCisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkCit9Owor
CisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorI2RlZmluZSBVTkxFU1NfRU5BQkxF
RChmdW5jdGlvbkJvZHkpIDsKKyNlbHNlCisjZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9u
Qm9keSkgZnVuY3Rpb25Cb2R5CisjZW5kaWYKKworY2xhc3MgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlciB7CitwdWJsaWM6CisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcihGcmFt
ZSopIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIH5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
KCkgVU5MRVNTX0VOQUJMRUQoe30pCisKKyAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGlt
ZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlKSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAg
ICB2b2lkIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpIFVOTEVTU19FTkFCTEVEKHt9KQorCisg
ICAgdm9pZCBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVT
U19FTkFCTEVEKHt9KQorICAgIFN0cmluZyBkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBTdHJpbmcoKTsgfSkKKyAg
ICB2b2lkIHNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9SZXBs
YWNlKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50KTsgfSkKKworICAgIHZvaWQgYXBwbHlDb3Jy
ZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4m
KSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdh
cyBhcHBsaWVkLCBmYWxzZSBvdGhlcndpc2UuCisgICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9u
QmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNl
OyB9KQorCisgICAgdm9pZCByZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7IFVO
VVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKKyAgICB2b2lkIHJlc3BvbmRUb0FwcGxpZWRFZGl0
aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAgICB2b2lk
IHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2Vs
ZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24pOyB9KQor
CisgICAgdm9pZCBzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
b2xkU2VsZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24p
OyB9KQorICAgIHZvaWQgYXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0o
c2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOyB9KQorCisgICAgdm9pZCBoYW5kbGVDb3JyZWN0aW9uUGFu
ZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNF
RF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKKyAgICB2b2lkIGhhbmRsZUNhbmNlbE9wZXJhdGlvbigp
IFVOTEVTU19FTkFCTEVEKHt9KQorCisgICAgYm9vbCBoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNv
bnN0IFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQorICAgIGJvb2wgaXNTcGVsbGlu
Z01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29uc3Qg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdSYW5nZSk7IHJldHVybiB0
cnVlOyB9KQorICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkg
VU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCisgICAgYm9vbCBzaG91bGRSZW1vdmVN
YXJrZXJzVXBvbkVkaXRpbmcoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKKwor
ICAgIHZvaWQgY29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyPiopIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIHZvaWQgcmVjb3JkQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBh
c3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VE
X1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50UmFuZ2UpOyB9
KQorICAgIHZvaWQgbWFya1JldnNlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2Up
IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCisKKyNpZiBT
VVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCitwcml2YXRlOgorICAgIHZvaWQgcmVjb3JkQXV0
b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpOworCisgICAgYm9vbCBzaG91bGRTdGFy
dFRpbWVGb3IoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgaW50IGVuZE9mZnNldCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAoKChtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtl
cjo6UmVwbGFjZW1lbnQgJiYgIW1hcmtlci5kZXNjcmlwdGlvbi5pc051bGwoKSkgCisgICAgICAg
ICAgICAgICAgIHx8IG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykgJiYg
c3RhdGljX2Nhc3Q8aW50PihtYXJrZXIuZW5kT2Zmc2V0KSA9PSBlbmRPZmZzZXQpOworICAgIH0K
KworICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CisgICAgVGV4dENoZWNrZXJDbGllbnQqIHRl
eHRDaGVja2VyKCk7CisgICAgRmxvYXRSZWN0IHdpbmRvd1JlY3RGb3JSYW5nZShjb25zdCBSYW5n
ZSopIGNvbnN0OworCisgICAgRWRpdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBGcmFtZSogbV9m
cmFtZTsKKworICAgIFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+IG1fY29ycmVj
dGlvblBhbmVsVGltZXI7CisgICAgQ29ycmVjdGlvblBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5l
bEluZm87CisgICAgYm9vbCBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7Cisj
ZW5kaWYKK307CisKKyN1bmRlZiBVTkxFU1NfRU5BQkxFRAorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IDM1NjA0ZjZhYjFhN2M2NmVhMGZl
YzI3OWZlNTNkNGRkMWI5Yzk1MTAuLjIxMmUxZGRjYWIzZDg4NWM5NTMwZTE3NTBiYTQ4ZTM4N2E5
NGM3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMTUx
LDExICsxNTEsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIFR5cGluZ0NvbQogICAgIEZyYW1lKiBmcmFtZSA9
IGRvY3VtZW50LT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAKLSNpZiBSRU1PVkVfTUFS
S0VSU19VUE9OX0VESVRJTkcKICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICBkb2N1
bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCktPnJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNG
cm9tV29yZHNUb0JlRWRpdGVkKGlzU3BhY2VPck5ld2xpbmUodGV4dC5jaGFyYWN0ZXJzKClbMF0p
KTsKLSNlbmRpZgotCisgICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRl
TWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0LmNo
YXJhY3RlcnMoKVswXSkpOworICAgIAogICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGZy
YW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCksIG9wdGlvbnMsIGNvbXBvc2l0aW9uKTsKIH0K
IApAQCAtMzQwLDEyICszMzgsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkKICAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsK
ICAgICAgICAgaWYgKHAxICE9IHAyKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+
ZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2Vs
ZWN0aW9uKCkpOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAgZWxz
ZSBpZiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCkKLSAgICAgICAg
ICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5zdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oY29tbWFuZFR5cGUpOwotI2VuZGlmCisgICAgICAgICAgICBkb2N1bWVu
dCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpOwogICAg
IH0KIH0KIApAQCAtNDYzLDkgKzQ1Nyw4IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6bWFrZUVkaXRh
YmxlUm9vdEVtcHR5KCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBraWxsUmluZykKIHsKLSNpZiBSRU1PVkVf
TUFSS0VSU19VUE9OX0VESVRJTkcKLSAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+
cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoZmFsc2Up
OwotI2VuZGlmCisgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnVwZGF0ZU1hcmtl
cnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKwogICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BZnRl
clVuZG87CiAKQEAgLTU2Miw5ICs1NTUsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtl
eVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogCiB2
b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSwgYm9vbCBraWxsUmluZykKIHsKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9O
X0VESVRJTkcKLSAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+cmVtb3ZlU3BlbGxB
bmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoZmFsc2UpOwotI2VuZGlmCisg
ICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0Fm
ZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
VG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BZnRlclVuZG87CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAppbmRleCAyYTNmN2Q0NTM2MmY3YjdiYzcyYjli
ZmFhZGI3ODA2OTY2M2I3YzAzLi5hNDAyNzM5OTVkMWJiM2M0NDU4MzY2N2JiYzYwNDZkOWRlNzYx
MjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCkBAIC0yMjEsNiArMjIxLDE1
IEBAIGlubGluZSBib29sIGlzV2hpdGVzcGFjZShVQ2hhciBjKQogewogICAgIHJldHVybiBjID09
IG5vQnJlYWtTcGFjZSB8fCBjID09ICcgJyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHQnOwogfQor
CitpbmxpbmUgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKFVDaGFyIGNoYXJhY3Rl
cikKK3sKKyAgICAvLyBUaGVzZSBhcmUgY2hhcmFjdGVycyB0aGF0IGNhbiBiZWhhdmUgYXMgd29y
ZCBib3VuZGFyaWVzLCBidXQgY2FuIGFwcGVhciB3aXRoaW4gd29yZHMuCisgICAgLy8gSWYgdGhl
eSBhcmUganVzdCB0eXBlZCwgaS5lLiBpZiB0aGV5IGFyZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBi
eSBhIGNhcmV0LCB3ZSB3YW50IHRvIGRlbGF5IHRleHQgY2hlY2tpbmcgdW50aWwgdGhlIG5leHQg
Y2hhcmFjdGVyIGhhcyBiZWVuIHR5cGVkLgorICAgIC8vIEZJWE1FOiB0aGlzIGlzIHJlcXVpcmVk
IHVudGlsIDY4NTMwMjcgaXMgZml4ZWQgYW5kIHRleHQgY2hlY2tpbmcgY2FuIGRvIHRoaXMgZm9y
IHVzLgorICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0ZXIgPT0gcmlnaHRT
aW5nbGVRdW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5jdHVhdGlvbkdlcnNo
YXlpbTsKK30KKwogU3RyaW5nIHN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZShjb25zdCBT
dHJpbmcmLCBib29sIHN0YXJ0SXNTdGFydE9mUGFyYWdyYXBoLCBib29sIGVuZElzRW5kT2ZQYXJh
Z3JhcGgpOwogY29uc3QgU3RyaW5nJiBub25CcmVha2luZ1NwYWNlU3RyaW5nKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0VkaXRvckNsaWVudC5oCmluZGV4IGFlZGE4NDQ1ODhjYTZlZjU1ZjA2ODIzNDI4NTM3
MDM1OWM3YWE1MmUuLmRmMjRhNWI0NjA4MDg3M2ZjM2M3OGNhZWIyNGZlMDIzNDM1NjEyMTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBF
ZGl0b3JDbGllbnRfaAogI2RlZmluZSBFZGl0b3JDbGllbnRfaAogCi0jaW5jbHVkZSAiQ29ycmVj
dGlvblBhbmVsSW5mby5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDkzOTFj
NDVkMzZiOGVjMTE4Y2ZhNTkzZjI5ZTU1NmFlZGU1NmE2ZjMuLmE5OWQ2ODZkMDUwMTQzNmE3N2Fh
MzczNTNiNjQyYjRiZTg0N2VjN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAor
MjAxMS0wMy0xNiAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1
dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQgYmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEgICAg
ICAgIAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRp
dG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVu
dDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6Omlz
U2hvd2luZ0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UpOgorCiAyMDExLTAzLTIzICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFr
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IDZlMzYyNzhlN2QxZjllMDQ0YzYwMmNlNjRhMmNkZjY0MmFkYzNjMTgu
LjAxOGUxNzRjOTBiNmU1YTVmNjlhNzQ2Zjk5YTQ2YTdiOTU0Mjg1MGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMiBAQAorMjAxMS0wMy0xNiAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
UmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQgYmUgaGFuZGxlZCBieSBp
dHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTU1NzEKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lmg6CisKIDIwMTEtMDMtMjQgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5i
b3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI4MTkxNiBh
bmQgcjgxOTE3Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88469</attachid>
            <date>2011-04-06 11:07:11 -0700</date>
            <delta_ts>2011-04-06 13:48:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55571-20110406110710.patch</filename>
            <type>text/plain</type>
            <size>98441</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwNjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYmUzYWQ2
NjU3ZTQ5ODM4ZTE2YzI4ODY1ZmI3MThhZTgzNmUwZDVkNy4uYzI4OGZkMDY0ODQ1ZWVhZDIxOTJm
MGMwMWQ5MGIzMmRkYTQyNGI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY2OSw2ICs2Njks
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE1YjlmYTQ0NzE4ZTYwZDA3MGRjNTgxYzc2
NTBlYmQ1ZjVlYjZiZTMuLmJlOWVmMjI0NjVjMzI5YTI0ZjM5Nzc3MDUwMzA5YzE1YjRlNDk1YmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAxMS0wNC0wNiAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQg
YmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEKKworICAgICAgICBFeHRyYWN0ZWQgY29kZSBpbnNp
ZGUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpbnRvCisgICAgICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIgY2xhc3MuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gcmVtb3Zl
IHNvbWUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBndWFyZCBpZgorICAgICAgICBjb2Rl
IHBhdGhzIGluc2lkZSB0aGUgbmV2ZXIgcmVhY2hlZCB3aXRob3V0IGF1dG9jb3JyZWN0aW9uIHN1
cHBvcnQuCisgICAgICAgIFJlbW92aW5nIGd1YXJkcyByZWR1Y2VzIHVuaW50ZW50aW9uYWwgYnVp
bGQgYnJlYWthZ2UuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFnbmUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVs
SW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZXNwb25kVG9DaGFuZ2VkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
aWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6On5FZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnBhc3RlQXNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppc0F1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKToK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjptYXJrZXJUeXBlc0Zv
ckF1dG9jb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtlclR5cGVzRm9yUmVwbGFj
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0YXJ0Q29ycmVjdGlv
blBhbmVsVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBlbmRpbmdDb3Jy
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
Omhhc1BlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlz
c1Nvb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVtb3Zl
TWFya2Vyc1Vwb25FZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0Fw
cGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1JldmVyc2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtD
b3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKToKKyAg
ICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpVTkxFU1NfRU5B
QkxFRCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpz
aG91bGRTdGFydFRpbWVGb3IpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKToKKyAg
ICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjppc0FtYmln
dW91c0JvdW5kYXJ5Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgor
ICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFBh
Z2VBbmRUZXh0Wm9vbUZhY3RvcnMpOgorCiAyMDExLTA0LTA2ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KaW5kZXggYTM4NzdjMTZmNjk5MzY4ZDUzNmUwNTk0ODlkZjlkZDkyNDJh
NmU4YS4uYjkyMTAwYjhkODA0M2Y3Mjg0M2Y2NzAzYzRhMDk1YTMzMjIxZDk2MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTE0NjgsNiArMTQ2OCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxDaGVja2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRD
b21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5k
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDVkMDJkZGM3Y2UzY2UyNGNhMWVkOWZkYWNkZjQ4YmZi
NjI4NGY1NzAuLmZmNzk4YzE2MTE0MmNlOGRmNGY3NDkxN2ZiZTBlNTNjNWUyMDg4N2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTI2MzksNiArMjYzOSw5IEBACiAgICAgICAgICAgICAnZWRpdGluZy9T
bWFydFJlcGxhY2VDRi5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU21hcnRSZXBsYWNlSUNV
LmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwJywKKyAgICAgICAg
ICAgICdlZGl0aW5nL1NwZWxsQ2hlY2tlci5oJywKKyAgICAgICAgICAgICdlZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BsaXRFbGVtZW50Q29t
bWFuZC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA4MGQyMWI0ODE5MTBhNjRkMzIzNmMxODVjNjQy
ZmJmYTlmODdiYTQ0Li5iZjEwYTI2OTZhYzgyZDY3ZTE1ODYyMmZjNzlhYmY4ZDlkN2I1YzhlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybwpAQCAtNTk4LDYgKzU5OCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGVkaXRp
bmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFj
ZUlDVS5jcHAgXAogICAgIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBcCisgICAgZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgXAog
ICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBiZDkz
NDE5NzMzOGM3ZGY5NjE4YzE1NjUwZmEzOTc3MzAwNTA1OTdlLi45NjQxZWNkOTZhZDg0Yjc3NjAx
ZGNmNzUxMmU2NGQ4NTBjN2RjMjBlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagpAQCAtNTAyMzAsNiArNTAyMzAsNjIgQEAKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmNwcCIKKwkJCQk+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJ
PgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1l
PSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgor
CQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJE
ZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
CQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkv
PgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0
aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfTFRDR3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZWRpdGluZ1xTcGxpdEVsZW1lbnRDb21tYW5kLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggNTA4NDM4MTA3ZDMwZDg4ZDUxYmQ3ZGZiNTE4ODJlNjkzOTQ2ZjZmOS4u
OTcxZTQ3NWY0N2NlMDdhNTRhZGI5YmQzY2E4MmQ2MzAwODNlNjVlYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzE5Niw2ICsz
MTk2LDggQEAKIAkJQTYyMkE4RkMxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTYy
MkE4RjYxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwICovOyB9Owog
CQlBNjIyQThGRDEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTYyMkE4RjcxMjJDNDRB
NjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCAqLzsgfTsKIAkJQTYyMkE4RkYxMjJD
NDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJp
Y0JpbmRpbmcuaCAqLzsgfTsKKwkJQTcwMDVDQ0MxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXIuY3BwICovOyB9OworCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyog
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBNzE1MUJEODEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJD
bGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
MTUxQkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTVFNjUyMTM0QkJCRUMw
MEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxNUU2NTAxMzRCQkJFQzAwRDhFNzEzIC8qIFBy
b2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi87IH07CiAJCUE3MTVFNjUzMTM0QkJCRUMwMEQ4RTcx
MyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTVFNjUxMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1No
YWRvd0VsZW1lbnQuaCAqLzsgfTsKQEAgLTQ3OTQsNyArNDc5Niw2IEBACiAJCUI3NzZENDNEMTEw
NDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjc3NkQ0M0MxMTA0NTI3NTAwQkVCMEVDIC8qIFByaW50
Q29udGV4dC5jcHAgKi87IH07CiAJCUI4ODVFOEQ0MTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4RDIxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgKi87IH07CiAJCUI4ODVFOEQ1MTFFMDZERDIwMDlGRkJG
NCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAvKiBJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9ICgpOyB9OyB9OwotCQlCOEE2QTZENTEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBh
bmVsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCOERCREI0QjEzMEIw
RjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCOERCREI0NzEzMEIwRjhBMDBGNUNEQjEgLyog
U2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgKi87IH07CiAJCUI4REJEQjRDMTMwQjBGOEEwMEY1Q0RC
MSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCOERCREI0ODEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9u
Q29tbWFuZC5oICovOyB9OwogCQlCOERCREI0RDEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZC5jcHAgKi87IH07CkBAIC05NzIyLDYgKzk3MjMsOCBAQAogCQlBNjIyQThGNjEyMkM0
NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcDsgcGF0aCA9IGdlbmVy
aWMvQmluZGluZ1NlY3VyaXR5QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE2MjJBOEY3MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJpbmRpbmdTZWN1cml0eUJhc2UuaDsgcGF0aCA9
IGdlbmVyaWMvQmluZGluZ1NlY3VyaXR5QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJpY0JpbmRpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR2VuZXJpY0JpbmRpbmcuaDsgcGF0aCA9IGdlbmVy
aWMvR2VuZXJpY0JpbmRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTcwMDVD
Q0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3MDA1Q0NCMTMzMEM0
QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0IC8qIFRl
eHRDaGVja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRD
aGVja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTVFNjUwMTM0
QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dy
ZXNzU2hhZG93RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9n
cmVzc1NoYWRvd0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMjI3
LDcgKzExMjMwLDYgQEAKIAkJQjc3NkQ0M0MxMTA0NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmludENvbnRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCODg1RThEMjExRTA2REQyMDA5RkZC
RjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAv
KiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUI4QTZBNkQ0MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9u
UGFuZWxJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcnJlY3Rpb25Q
YW5lbEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDcxMzBCMEY4
QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25D
b21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldFNlbGVjdGlvbkNv
bW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDkxMzBCMEY4QTAw
RjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTUzNyw3ICsxNTUzOSw2IEBACiAJCQkJOTMzMDlE
OEMwOTlFNjQ5MTAwNTZFNTgxIC8qIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuaCAqLywKIAkJCQk5
MzMwOUQ4RDA5OUU2NDkxMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwICovLAog
CQkJCTkzMzA5RDhFMDk5RTY0OTEwMDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFuZC5oICov
LAotCQkJCUI4QTZBNkQ0MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmgg
Ki8sCiAJCQkJRDBCMDU1NjcwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmNw
cCAqLywKIAkJCQlEMEIwNTU2NjA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQu
aCAqLywKIAkJCQkxQzRDOEY2MzBBRDg2NTVEMDA5NDc1Q0UgLyogRGVsZXRlQnV0dG9uLmNwcCAq
LywKQEAgLTE1NjE5LDYgKzE1NjIwLDggQEAKIAkJCQlBNzhGRTEzQTEyMzY2QjEwMDBBQ0U4RDAg
LyogU3BlbGxDaGVja2VyLmggKi8sCiAJCQkJQjhEQkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwICovLAogCQkJCUI4REJEQjRBMTMwQjBGOEEwMEY1
Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi8sCisJCQkJQTcwMDVDQ0ExMzMw
QzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwICovLAorCQkJ
CUE3MDA1Q0NCMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LmggKi8sCiAJCQkJOTMzMDlEQzIwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1h
bmQuY3BwICovLAogCQkJCTkzMzA5REMzMDk5RTY0OTEwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRD
b21tYW5kLmggKi8sCiAJCQkJOTMzMDlEQzQwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0VGV4dE5v
ZGVDb21tYW5kLmNwcCAqLywKQEAgLTE5OTY4LDcgKzE5OTcxLDYgQEAKIAkJCQkzM0QwMjEyRDEz
MURCMzdCMDA0MDkxQTggLyogQ29va2llU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VF
Njg0NjQxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZVN0b3JhZ2VDRk5ldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkU2RkQ0ODgwRjY3NkU1NzAwMDkyODczIC8qIENvb3JkaW5hdGVzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlCOEE2QTZENTEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVs
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMDQwQTE5ODlDQTAwN0ZCOEM1IC8qIENv
dW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCOTc5MEU4MjA2OTIwMEIyNTk2NSAvKiBD
b3VudGVyQ29udGVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI5NTEwRTgyMDU2QjAwQjI1
OTY1IC8qIENvdW50ZXJEaXJlY3RpdmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTIyMjgxLDYgKzIy
MjgzLDcgQEAKIAkJCQk3NTQxNUIwMDEyOTU4RDVFMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1
bHRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhGRTEzQzEyMzY2QjEwMDBBQ0U4RDAgLyog
U3BlbGxDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCOERCREI0RTEzMEIwRjhBMDBGNUNE
QjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTcw
MDVDQ0QxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzMzA5RTEyMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1l
bnRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNDA5OUU2NDkyMDA1NkU1ODEg
LyogU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTE2MDk5
RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI1MDk1LDYgKzI1MDk4LDcgQEAKIAkJCQk3NTQxNUMyOTEyOUE5
OTIwMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3OEZFMTNCMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjhEQkRCNEQxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTcwMDVDQ0MxMzMwQzRCQTAwMENDMEJB
IC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTMzMDlFMTEwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTMzMDlFMTMwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVD
b21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTE1MDk5RTY0OTIwMDU2RTU4MSAv
KiBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZv
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYwOTllMTYyZmE3MmY3ZjEzOWQ2M2ZjMTM3OGM0YjRi
MzNmM2ZlNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaAorKysgL2Rldi9udWxs
CkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29ycmVjdGlvblBhbmVsSW5mb19o
Ci0jZGVmaW5lIENvcnJlY3Rpb25QYW5lbEluZm9faAotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotLy8gU29tZSBwbGF0Zm9y
bXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhdXRvY29ycmVjdGlvbi4KLSNkZWZpbmUgU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAxCi0vLyBTb21lIHBsYXRmb3JtcyB1c2Ugc3BlbGxp
bmcgYW5kIGF1dG9jb3JyZWN0aW9uIG1hcmtlcnMgdG8gcHJvdmlkZSB2aXN1YWwgY3VlLgotLy8g
T24gc3VjaCBwbGF0Zm9ybSwgaWYgd29yZCB3aXRoIG1hcmtlciBpcyBlZGl0ZWQsIHdlIG5lZWQg
dG8gcmVtb3ZlIHRoZSBtYXJrZXIuCi0jZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElO
RyAxCi0jZWxzZQotI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDAKLSNkZWZp
bmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDAKLSNlbmRpZiAvLyAjaWYgUExBVEZPUk0o
TUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotCi0jaW5j
bHVkZSAiUmFuZ2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgQ29ycmVjdGlv
blBhbmVsSW5mbyB7Ci0gICAgZW51bSBQYW5lbFR5cGUgewotICAgICAgICBQYW5lbFR5cGVDb3Jy
ZWN0aW9uID0gMCwKLSAgICAgICAgUGFuZWxUeXBlUmV2ZXJzaW9uLAotICAgICAgICBQYW5lbFR5
cGVTcGVsbGluZ1N1Z2dlc3Rpb25zCi0gICAgfTsKLQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VU
b0JlUmVwbGFjZWQ7Ci0gICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nOwotICAgIFN0cmluZyByZXBs
YWNlbWVudFN0cmluZzsKLSAgICBQYW5lbFR5cGUgcGFuZWxUeXBlOwotICAgIGJvb2wgaXNBY3Rp
dmU7Ci19OwotCi1lbnVtIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgewotICAg
IFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQgPSAwLAotICAgIFJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLAotICAgIFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZAotfTsKLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIENvcnJlY3Rpb25QYW5lbEluZm9faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCmluZGV4IGU0ZTBiYmI2Y2ZlMGMwOWEwNzU2YTk2OWVm
NjgzZjVhODQ3NjIzZmEuLmYzOGNiZTYyYTYwZGUxMWNkMGYxYzExM2E5OWYwYzJkMDBlYWViOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKQEAgLTYzLDYg
KzYzLDcgQEAKICNpbmNsdWRlIDxTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHA+CiAjaW5jbHVk
ZSA8U21hcnRSZXBsYWNlLmNwcD4KICNpbmNsdWRlIDxTbWFydFJlcGxhY2VDRi5jcHA+CisjaW5j
bHVkZSA8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHA+CiAjaW5jbHVkZSA8U3BlbGxD
aGVja2VyLmNwcD4KICNpbmNsdWRlIDxTcGxpdEVsZW1lbnRDb21tYW5kLmNwcD4KICNpbmNsdWRl
IDxTcGxpdFRleHROb2RlQ29tbWFuZC5jcHA+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5k
ZXggOTBlYjgyNWMwNDc0OWM1ZDNlY2VhZDMzMmIyYzAwNWM3YjdiZmMxYi4uNzU2MDgzNTI0Yzkw
ODZkOTI4MjMwZjM3MmU1MTk0MTIwMDkxMTBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAj
aW5jbHVkZSAiQ2xpcGJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJDb21wb3NpdGlvbkV2ZW50Lmgi
CisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNy
ZWF0ZUxpbmtDb21tYW5kLmgiCiAjaW5jbHVkZSAiRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIKQEAgLTkzLDUxICs5NCw2IEBAIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFt
ZXNwYWNlIFVuaWNvZGU7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5
Q2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKLXsKLSAgICAvLyBUaGVzZSBhcmUgY2hhcmFjdGVy
cyB0aGF0IGNhbiBiZWhhdmUgYXMgd29yZCBib3VuZGFyaWVzLCBidXQgY2FuIGFwcGVhciB3aXRo
aW4gd29yZHMuCi0gICAgLy8gSWYgdGhleSBhcmUganVzdCB0eXBlZCwgaS5lLiBpZiB0aGV5IGFy
ZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGNhcmV0LCB3ZSB3YW50IHRvIGRlbGF5IHRleHQg
Y2hlY2tpbmcgdW50aWwgdGhlIG5leHQgY2hhcmFjdGVyIGhhcyBiZWVuIHR5cGVkLgotICAgIC8v
IEZJWE1FOiB0aGlzIGlzIHJlcXVpcmVkIHVudGlsIDY4NTMwMjcgaXMgZml4ZWQgYW5kIHRleHQg
Y2hlY2tpbmcgY2FuIGRvIHRoaXMgZm9yIHVzLgotICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wn
JyB8fCBjaGFyYWN0ZXIgPT0gcmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9
PSBoZWJyZXdQdW5jdHVhdGlvbkdlcnNoYXlpbTsKLX0KLQotc3RhdGljIGNvbnN0IFZlY3RvcjxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24o
KQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbiwgKCkpOwotICAgIGlmIChtYXJr
ZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICBtYXJrZXJUeXBl
c0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwot
ICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtl
cjo6Q29ycmVjdGlvbkluZGljYXRvcik7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJl
Y3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSAg
ICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6
OkF1dG9jb3JyZWN0ZWQpOwotICAgIH0KLSAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JBdXRvQ29y
cmVjdGlvbjsKLX0KLQotc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZT4mIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JS
ZXBsYWNlbWVudCwgKCkpOwotICAgIGlmIChtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmlzRW1w
dHkoKSkgewotICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50
LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0gICAgfQot
ICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50OwotfQotCi0jaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAotc3RhdGljIGJvb2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNj
cmlwdGlvbihjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQotewotICAgIGlm
IChtYXJrZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25zdCBT
dHJpbmcmIGRlc2NyaXB0aW9uID0gbWFya2Vyc1swXS5kZXNjcmlwdGlvbjsKLSAgICBmb3IgKHNp
emVfdCBpID0gMTsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGRlc2Ny
aXB0aW9uICE9IG1hcmtlcnNbaV0uZGVzY3JpcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KIC8vIFdoZW4gYW4gZXZl
bnQgaGFuZGxlciBoYXMgbW92ZWQgdGhlIHNlbGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250
cm9sCiAvLyB3ZSBzaG91bGQgdXNlIHRoZSB0YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3Ig
dGhpcyBlZGl0aW5nIG9wZXJhdGlvbi4KIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rp
b25Gb3JDb21tYW5kKEV2ZW50KiBldmVudCkKQEAgLTUzMyw0OCArNDg5LDcgQEAgdm9pZCBFZGl0
b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xk
U2VsZWN0aW9uKQogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oKTsKICAgICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKLQotI2lmIFNVUFBPUlRfQVVUT0NP
UlJFQ1RJT05fUEFORUwKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24oZnJh
bWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKLSAgICAvLyBXaGVuIHVzZXIgbW92ZXMg
Y2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hv
dyB0aGUgcGFuZWwKLSAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29ycmVjdGlv
biB3b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCi0gICAgLy8gdW5kZXNp
cmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVsIHRpbWVy
IG9uY2Ugd2UgY29uZmlybSB0aGF0Ci0gICAgLy8gdGhlIG5ldyBjYXJldCBwb3NpdGlvbiBpcyBh
dCB0aGUgZW5kIG9mIGEgd29yZC4KLSAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb24uaXNDYXJldCgp
IHx8IGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uUG9zaXRpb24gPSBjdXJyZW50U2VsZWN0aW9u
LnN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uT2ZXb3JkID0gZW5kT2ZX
b3JkKHNlbGVjdGlvblBvc2l0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7Ci0gICAgaWYgKHNl
bGVjdGlvblBvc2l0aW9uICE9IGVuZFBvc2l0aW9uT2ZXb3JkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IGVuZFBvc2l0aW9uT2ZXb3JkLmRlZXBFcXVpdmFsZW50
KCk7Ci0gICAgaWYgKHBvc2l0aW9uLmFuY2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25J
c09mZnNldEluQW5jaG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOb2RlKiBub2RlID0gcG9z
aXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGludCBlbmRPZmZzZXQgPSBwb3NpdGlvbi5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMg
PSBub2RlLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPm1hcmtlcnNGb3JOb2RlKG5vZGUpOwotICAg
IHNpemVfdCBtYXJrZXJDb3VudCA9IG1hcmtlcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbWFya2VyQ291bnQ7ICsraSkgewotICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtl
ciYgbWFya2VyID0gbWFya2Vyc1tpXTsKLSAgICAgICAgaWYgKCgobWFya2VyLnR5cGUgPT0gRG9j
dW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJrZXIuZGVzY3JpcHRpb24uaXNOdWxsKCkp
IHx8IG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykgJiYgc3RhdGljX2Nh
c3Q8aW50PihtYXJrZXIuZW5kT2Zmc2V0KSA9PSBlbmRPZmZzZXQpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShmcmFtZSgpLT5kb2N1bWVudCgp
LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQsIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQpOwotICAg
ICAgICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7
Ci0gICAgICAgICAgICBpZiAoY3VycmVudFdvcmQubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSB3b3JkUmFuZ2U7Ci0g
ICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3Vy
cmVudFdvcmQ7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmtlci50eXBlID09IERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZykKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxU
aW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsK
LSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gbWFya2VyLmRlc2NyaXB0aW9uOwotICAgICAg
ICAgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZVJldmVyc2lvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlc3Bv
bmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rp
b24pCkBAIC01ODUsOSArNTAwLDcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250
ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAgICAgICAgICAg
ICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24o
bm9kZS0+cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIGZhbHNlKTsK
ICAgICB9CiAKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcKLSAgICByZW1vdmVTcGVs
bEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZCh0cnVlKTsKLSNlbmRpZgor
ICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogCiAgICAg
aWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRz
KCk7CkBAIC0xMDc0LDEwICs5ODcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoUGFz
c1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQogICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hh
bmdlZEV2ZW50cygqY21kKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQt
PmVuZGluZ1NlbGVjdGlvbigpKTsKIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwK
LSAgICBpZiAoY21kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjbWQtPnNob3VsZFJldGFpbkF1
dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1h
cmtlcnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRv
cik7Ci0jZW5kaWYKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9BcHBsaWVkRWRp
dGluZyhjbWQuZ2V0KCkpOwogCiAgICAgLy8gRG9uJ3QgY2xlYXIgdGhlIHR5cGluZyBzdHlsZSB3
aXRoIHRoaXMgc2VsZWN0aW9uIGNoYW5nZS4gIFdlIGRvIHRob3NlIHRoaW5ncyBlbHNld2hlcmUg
aWYgbmVjZXNzYXJ5LgogICAgIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rp
b24sIGZhbHNlLCBmYWxzZSk7CkBAIC0xMTM2LDE3ICsxMDQ2LDE0IEBAIEVkaXRvcjo6RWRpdG9y
KEZyYW1lKiBmcmFtZSkKICAgICAvLyBUaGlzIGlzIG9mZiBieSBkZWZhdWx0LCBzaW5jZSBtb3N0
IGVkaXRvcnMgd2FudCB0aGlzIGJlaGF2aW9yICh0aGlzIG1hdGNoZXMgSUUgYnV0IG5vdCBGRiku
CiAgICAgLCBtX3Nob3VsZFN0eWxlV2l0aENTUyhmYWxzZSkKICAgICAsIG1fa2lsbFJpbmcoYWRv
cHRQdHIobmV3IEtpbGxSaW5nKSkKLSAgICAsIG1fc3BlbGxDaGVja2VyKG5ldyBTcGVsbENoZWNr
ZXIoZnJhbWUsIGZyYW1lLT5wYWdlKCkgPyBmcmFtZS0+cGFnZSgpLT5lZGl0b3JDbGllbnQoKS0+
dGV4dENoZWNrZXIoKSA6IDApKQotICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAm
RWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKQorICAgICwgbV9zcGVsbENoZWNrZXIo
YWRvcHRQdHIobmV3IFNwZWxsQ2hlY2tlcihmcmFtZSwgZnJhbWUtPnBhZ2UoKSA/IGZyYW1lLT5w
YWdlKCktPmVkaXRvckNsaWVudCgpLT50ZXh0Q2hlY2tlcigpIDogMCkpKQorICAgICwgbV9zcGVs
bGluZ0NvcnJlY3RvcihhZG9wdFB0cihuZXcgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcihm
cmFtZSkpKQogICAgICwgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkKGZhbHNlKQog
ewogfQogCiBFZGl0b3I6On5FZGl0b3IoKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKLSAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWxJZ25vcmVkKTsKLSNlbmRpZgogfQogCiB2b2lkIEVkaXRvcjo6Y2xlYXIoKQpA
QCAtMTE3OSwxMCArMTA4Niw4IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRp
bmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgaWYgKCFz
aG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBl
ZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0jaWYgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElU
SU5HCiAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVtb3ZlU3BlbGxBbmRDb3Jy
ZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBd
KSk7Ci0jZW5kaWYKKyAgICAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcodGV4dFswXSk7CiAKICAgICBib29sIHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVj
dGlvbiA9IGZhbHNlOwogICAgIGlmICh0ZXh0ID09ICIgIiB8fCB0ZXh0ID09ICJcdCIpCkBAIC0x
MTkxLDcgKzEwOTYsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4
dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbgogICAgIGlmICh0ZXh0Lmxl
bmd0aCgpID09IDEgJiYgaXNQdW5jdCh0ZXh0WzBdKSAmJiAhaXNBbWJpZ3VvdXNCb3VuZGFyeUNo
YXJhY3Rlcih0ZXh0WzBdKSkKICAgICAgICAgc2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3Jy
ZWN0aW9uID0gdHJ1ZTsKIAotICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25XYXNBcHBsaWVkID0gc2hv
dWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0aW9uICYmIGFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbldhc0Fw
cGxpZWQgPSBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJlY3Rpb24gJiYgbV9zcGVsbGlu
Z0NvcnJlY3Rvci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUo
KTsKIAogICAgIC8vIEdldCB0aGUgc2VsZWN0aW9uIHRvIHVzZSBmb3IgdGhlIGV2ZW50IHRoYXQg
dHJpZ2dlcmVkIHRoaXMgaW5zZXJ0VGV4dC4KICAgICAvLyBJZiB0aGUgZXZlbnQgaGFuZGxlciBj
aGFuZ2VkIHRoZSBzZWxlY3Rpb24sIHdlIG1heSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBzZWxl
Y3Rpb24KQEAgLTEyMjcsNyArMTEzMiw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWso
KQogICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBh
cHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wg
YXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9j
b3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6
Omluc2VydExpbmVCcmVhayhtX2ZyYW1lLT5kb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBw
bGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7
CiAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKQEAgLTEyNDUs
NyArMTE1MCw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAg
IGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBhcHBseUF1
dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2Nv
cnJlY3Rpb25Jc0FwcGxpZWQgPSBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0
aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvcihtX2ZyYW1lLT5kb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklz
QXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDog
MCk7CiAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKQEAgLTEy
NjIsOSArMTE2Nyw3IEBAIHZvaWQgRWRpdG9yOjpjdXQoKQogICAgIH0KICAgICBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoc2hvdWxkRGVsZXRlUmFu
Z2Uoc2VsZWN0aW9uLmdldCgpKSkgewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwot
ICAgICAgICByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRl
ZCh0cnVlKTsKLSNlbmRpZgorICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5
RWRpdGluZyh0cnVlKTsKICAgICAgICAgaWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9sKG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICAgICAg
UGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQoc2VsZWN0ZWRU
ZXh0KCkpOwogICAgICAgICBlbHNlCkBAIC0xMzAzLDkgKzEyMDYsNyBAQCB2b2lkIEVkaXRvcjo6
cGFzdGUoKQogICAgICAgICByZXR1cm47IC8vIERIVE1MIGRpZCB0aGUgd2hvbGUgb3BlcmF0aW9u
CiAgICAgaWYgKCFjYW5QYXN0ZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgUkVNT1ZFX01BUktF
UlNfVVBPTl9FRElUSU5HCi0gICAgcmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21X
b3Jkc1RvQmVFZGl0ZWQoZmFsc2UpOwotI2VuZGlmCisgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRz
QWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogICAgIGxv
YWRlci0+c2V0QWxsb3dTdGFsZVJlc291cmNlcyh0cnVlKTsKICAgICBpZiAobV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCkBAIC0xMzIxLDkgKzEyMjIsNyBA
QCB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dCgpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAoIWNhblBhc3RlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9O
X0VESVRJTkcKLSAgICByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9C
ZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKFBh
c3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCkpOwogfQogCkBAIC0xNDc2LDcgKzEzNzUsNyBA
QCB2b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50KCkKIAogYm9vbCBF
ZGl0b3I6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCiB7Ci0gICAgcmV0
dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVu
YWJsZWQoKTsKKyAgICByZXR1cm4gbV9zcGVsbGluZ0NvcnJlY3Rvci0+aXNBdXRvbWF0aWNTcGVs
bGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7CiB9CiAKIHZvaWQgRWRpdG9yOjp0b2dnbGVBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb24oKQpAQCAtMjA2OCwyMyArMTk2Nyw4IEBAIHZvaWQgRWRpdG9y
OjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZt
b3ZpbmdTZWxlY3RpCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9X
b3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZykKIHsKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNL
SU5HKQotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICAvLyBBcHBseSBwZW5k
aW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSBuZXh0IHJvdW5kIG9mIHNwZWxsIGNoZWNraW5nLgot
ICAgIGJvb2wgZG9BcHBseUNvcnJlY3Rpb24gPSB0cnVlOwotICAgIFZpc2libGVQb3NpdGlvbiBz
dGFydE9mU2VsZWN0aW9uID0gc2VsZWN0aW9uQWZ0ZXJUeXBpbmcudmlzaWJsZVN0YXJ0KCk7Ci0g
ICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50V29yZCA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRP
ZldvcmQoc3RhcnRPZlNlbGVjdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQo
c3RhcnRPZlNlbGVjdGlvbiwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7Ci0gICAgaWYgKGN1cnJl
bnRXb3JkLnZpc2libGVFbmQoKSA9PSBzdGFydE9mU2VsZWN0aW9uKSB7Ci0gICAgICAgIFN0cmlu
ZyB3b3JkVGV4dCA9IHBsYWluVGV4dChjdXJyZW50V29yZC50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKTsKLSAgICAgICAgaWYgKHdvcmRUZXh0Lmxlbmd0aCgpID4gMCAmJiBpc0FtYmlndW91c0Jv
dW5kYXJ5Q2hhcmFjdGVyKHdvcmRUZXh0W3dvcmRUZXh0Lmxlbmd0aCgpIC0gMV0pKQotICAgICAg
ICAgICAgZG9BcHBseUNvcnJlY3Rpb24gPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGRvQXBwbHlD
b3JyZWN0aW9uKQotICAgICAgICBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2Vw
dGVkKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuY2xlYXIoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVy
VHlwaW5nKTsKLSNlbmRpZgorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5UGVuZGluZ0Nv
cnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOworCiAgICAgVGV4dENoZWNraW5nT3B0aW9u
cyB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gMDsKICAgICBpZiAoaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoKSkKICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBNYXJrU3BlbGxp
bmc7CkBAIC0yMTEzLDcgKzE5OTcsNiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgIH0K
IAogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwogICAgIGlm
ICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0yMjIyLDcgKzIxMDUsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogewogI2lmIFVT
RShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAgICAgLy8gVGhlcmUgc2hvdWxkbid0IGJlIHBlbmRp
bmcgYXV0b2NvcnJlY3Rpb24gYXQgdGhpcyBtb21lbnQuCi0gICAgQVNTRVJUKCFtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpOworICAgIEFTU0VSVCghbV9zcGVsbGluZ0Nv
cnJlY3Rvci0+aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSk7CiAKICAgICBib29sIHNob3VsZE1hcmtT
cGVsbGluZyA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBNYXJrU3BlbGxpbmc7CiAgICAgYm9vbCBz
aG91bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBNYXJrR3JhbW1hcjsKQEAg
LTIyODEsMTEgKzIxNjQsOSBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJh
ZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q2hlY2tpbmdUeXBlTWFza0Zvcih0
ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7CiAgICAgICAgIAogCi0jaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAogICAgIC8vIElmIHRoaXMgY2hlY2tpbmcgaXMgb25seSBmb3Ig
c2hvd2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBzaG91bGRuJ3QgYm90aGVyIHRvIG1hcmsgbWlz
c3BlbGxpbmdzLgogICAgIGlmIChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKQogICAgICAgICBz
aG91bGRNYXJrU3BlbGxpbmcgPSBmYWxzZTsKLSNlbmRpZgogCiAgICAgaW50IG9mZnNldER1ZVRv
UmVwbGFjZW1lbnQgPSAwOwogCkBAIC0yMzA0LDEwICsyMTg1LDggQEAgdm9pZCBFZGl0b3I6Om1h
cmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9u
cyB0ZXh0Q2gKICAgICAgICAgaWYgKHNob3VsZE1hcmtTcGVsbGluZyAmJiByZXN1bHQtPnR5cGUg
PT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdExvY2F0aW9uID49IHNwZWxsaW5n
UGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0
aCA8PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmICFyZXN1bHRFbmRzQXRBbWJpZ3VvdXNCb3Vu
ZGFyeSkgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9j
YXRpb24gPj0gMCk7CiAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2Ug
PSBzcGVsbGluZ1BhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3Ro
KTsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgICAgICAgICBpZiAobV9m
cmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKSkKKyAgICAgICAg
ICAgIGlmICghbV9zcGVsbGluZ0NvcnJlY3Rvci0+aXNTcGVsbGluZ01hcmtlckFsbG93ZWQobWlz
c3BlbGxpbmdSYW5nZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0jZW5kaWYgLy8gU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+
c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihtaXNz
cGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZE1hcmtHcmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tp
bmdUeXBlR3JhbW1hciAmJiBncmFtbWFyUGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMocmVz
dWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCkpIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRM
ZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49IDApOwpAQCAtMjM1Myw3ICsyMjMyLDcgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4
dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICAgICAgICAgICAgICBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIqIG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKG1hcmtlcnMtPmhhc01hcmtlcnMocmFuZ2VUb1JlcGxhY2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgZG9S
ZXBsYWNlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNr
ZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVRvUmVwbGFjZS5nZXQoKSwgcmVw
bGFjZWRTdHJpbmcsIHJlc3VsdC0+cmVwbGFjZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBt
X3NwZWxsaW5nQ29ycmVjdG9yLT5yZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVk
Q29ycmVjdGlvbihyYW5nZVRvUmVwbGFjZS5nZXQoKSwgcmVwbGFjZWRTdHJpbmcsIHJlc3VsdC0+
cmVwbGFjZW1lbnQpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWFya2Vycy0+aGFzTWFy
a2VycyhyYW5nZVRvUmVwbGFjZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVj
dGlvbikpCiAgICAgICAgICAgICAgICAgICAgIGRvUmVwbGFjZW1lbnQgPSBmYWxzZTsKICAgICAg
ICAgICAgIH0KQEAgLTIzNjEsMjQgKzIyNDAsMTcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gK
ICAgICAgICAgICAgIGlmICghKHNob3VsZFBlcmZvcm1SZXBsYWNlbWVudCB8fCBzaG91bGRTaG93
Q29ycmVjdGlvblBhbmVsKSB8fCAhZG9SZXBsYWNlbWVudCkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAgICAgIGlm
IChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKFNV
UFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwpOworICAgICAgICAgICAgICAgIC8vIHNob3VsZFNo
b3dDb3JyZWN0aW9uUGFuZWwgY2FuIGJlIHRydWUgb25seSB3aGVuIHRoZSBwYW5lbCBpcyBhdmFp
bGFibGUuCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3Ro
ID09IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
b25seSBzaG93IHRoZSBjb3JyZWN0aW9uIHBhbmVsIG9uIHRoZSBsYXN0IHdvcmQuCi0gICAgICAg
ICAgICAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShy
YW5nZVRvUmVwbGFjZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChib3VuZGluZ0Jv
eC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gcmFuZ2VU
b1JlcGxhY2U7Ci0gICAgICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IHJlc3Vs
dC0+cmVwbGFjZW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29y
cmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94
LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHJlc3VsdC0+cmVwbGFjZW1l
bnQsIFZlY3RvcjxTdHJpbmc+KCkpOworICAgICAgICAgICAgICAgICAgICBtX3NwZWxsaW5nQ29y
cmVjdG9yLT5zaG93KHJhbmdlVG9SZXBsYWNlLCByZXN1bHQtPnJlcGxhY2VtZW50KTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IC8vIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBzaG93aW5nIGNvcnJlY3Rpb24gcGFu
ZWwsIHdlIGlnbm9yZSBvdGhlciBjb3JyZWN0aW9uIG9yIHJlcGxhY2VtZW50LgogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotI2VuZGlmCiAKICAgICAgICAgICAgIGlm
IChzZWxlY3Rpb25Ub1JlcGxhY2UgIT0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSkpCkBAIC0yMzkyLDEyICsyMjY0LDcgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4
dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICAgICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hs
eSgpKQogICAgICAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQoQ3JlYXRlTGlua0NvbW1hbmQ6
OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCByZXN1bHQtPnJlcGxhY2VtZW50KSk7CiAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRUZXh0KHJlc3VsdC0+
cmVwbGFjZW1lbnQsIHJhbmdlVG9SZXBsYWNlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBl
ZCkpIHsKLSAgICAgICAgICAgICAgICBib29sIHVzZVNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQg
PSBmYWxzZTsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikKLSAgICAg
ICAgICAgICAgICAgICAgdXNlU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCA9IHRydWU7Ci0jZW5k
aWYKLSAgICAgICAgICAgICAgICBpZiAodXNlU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCkKICAg
ICAgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6
OmNyZWF0ZShyYW5nZVRvUmVwbGFjZSwgcmVzdWx0LT5yZXBsYWNlbWVudCkpOwogICAgICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CkBAIC0yNDE3LDE5ICsyMjg0LDkgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4
dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICAgICAgICAgICAgICAgICAgICAgIGFtYmlndW91
c0JvdW5kYXJ5T2Zmc2V0ID0gc2VsZWN0aW9uT2Zmc2V0IC0gMTsKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVD
b3JyZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhIG1hcmtlciBzbyB0aGF0
IGNvcnJlY3Rpb25zIGNhbiBlYXNpbHkgYmUgdW5kb25lIGFuZCB3b24ndCBiZSByZS1jb3JyZWN0
ZWQuCi0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSA9IHNw
ZWxsaW5nUGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0
aCk7Ci0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gbWFya2VyVHlwZXNUb0FkZCA9IG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKTsKLSAg
ICAgICAgICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVw
bGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAg
ICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlclR5cGVzVG9BZGQu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIG1hcmtlclR5cGUgPSBtYXJrZXJUeXBlc1RvQWRkW2ldOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0
KCksIG1hcmtlclR5cGUsIHJlcGxhY2VkU3RyaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVw
bGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQg
Y29ycmVjdGlvbnMgY2FuIGVhc2lseSBiZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3Rl
ZC4KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVD
b3JyZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5tYXJr
Q29ycmVjdGlvbihzcGVsbGluZ1BhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVw
bGFjZW1lbnRMZW5ndGgpLCByZXBsYWNlZFN0cmluZyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CkBAIC0yNDU2LDMwICsyMzEzLDYgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gK
ICNlbmRpZiAvLyBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogfQogCi12b2lkIEVkaXRvcjo6
cmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJh
bmdlT2ZDb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBj
b3JyZWN0aW9uKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBpZiAo
IXJhbmdlT2ZDb3JyZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyKiBtYXJrZXJzID0gcmFuZ2VPZkNvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkt
PmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IGNvcnJl
Y3RlZE9uY2VNYXJrZXJzID0gbWFya2Vycy0+bWFya2Vyc0luUmFuZ2UocmFuZ2VPZkNvcnJlY3Rp
b24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKLSAgICBpZiAoY29ycmVjdGVkT25j
ZU1hcmtlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gU3BlbGxp
bmcgY29ycmVjdGVkIHRleHQgaGFzIGJlZW4gZWRpdGVkLiBXZSBuZWVkIHRvIGRldGVybWluZSB3
aGV0aGVyIHVzZXIgaGFzIHJldmVydGVkIGl0IHRvIG9yaWdpbmFsIHRleHQgb3IKLSAgICAvLyBl
ZGl0ZWQgaXQgdG8gc29tZXRoaW5nIGVsc2UsIGFuZCBub3RpZnkgc3BlbGxjaGVja2VyIGFjY29y
ZGluZ2x5LgotICAgIGlmIChtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNvcnJlY3Rl
ZE9uY2VNYXJrZXJzKSAmJiBjb3JyZWN0ZWRPbmNlTWFya2Vyc1swXS5kZXNjcmlwdGlvbiA9PSBj
b3JyZWN0ZWQpCi0gICAgICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNl
KEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0
aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25FZGl0ZWQsIGNvcnJlY3RlZCwgY29y
cmVjdGlvbik7Ci0gICAgbWFya2Vycy0+cmVtb3ZlTWFya2VycyhyYW5nZU9mQ29ycmVjdGlvbiwg
RG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0ocmFuZ2VPZkNvcnJlY3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOwotICAg
IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsKLSNlbmRpZgotfQotCiB2b2lkIEVkaXRvcjo6Y2hh
bmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKIHsK
ICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQpAQCAtMjQ5MCwxOCArMjMyMywxMiBAQCB2
b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZykKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRTdHJpbmcsIHNl
bGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBTdHJpbmcgcmVw
bGFjZW1lbnQgPSBwbGFpblRleHQoc2VsZWN0aW9uLmdldCgpKTsKLSAgICBjbGllbnQoKS0+cmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2
ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudCk7Ci0jZW5kaWYKKyAgICBtX3NwZWxs
aW5nQ29ycmVjdG9yLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQocmVwbGFj
ZWRTdHJpbmcsIHNlbGVjdGlvbik7CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFw
aChzZWxlY3Rpb24pOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmlu
ZywgZmFsc2UsIGZhbHNlKTsKICAgICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IHBhcmFn
cmFwaC5zdWJyYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5s
ZW5ndGgoKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+cmVtb3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpB
dXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92
ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRv
Y3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotI2VuZGlmCisgICAgbV9zcGVsbGlu
Z0NvcnJlY3Rvci0+bWFya1JldmVyc2VkKGNoYW5nZWRSYW5nZS5nZXQoKSk7CiAjZWxzZQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7
CkBAIC0yNTI2LDE0MCArMjM1MywxNiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3BlbGxpbmdTZWxlYwogI2VuZGlm
CiB9CiAKLXZvaWQgRWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPEVkaXRv
cj4qKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBtX2NvcnJlY3Rp
b25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKG1fY29ycmVj
dGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24oZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKLSAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0g
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZP
bkJvdW5kYXJ5KTsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlz
aWJsZVNlbGVjdGlvbihwLCBzdGFydCk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMoTWFya1NwZWxsaW5nIHwgU2hvd0NvcnJlY3Rpb25QYW5lbCwgYWRq
YWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCAwKTsKLSAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9u
OiB7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0gICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBGbG9h
dFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRT
dHJpbmcsIFZlY3RvcjxTdHJpbmc+KCkpOwotICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOiB7Ci0g
ICAgICAgIGlmIChwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLmdldCgpKSAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQo
VGV4dENoZWNraW5nUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCkucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1
Z2dlc3Rpb25zOwotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHBhcmFncmFwaFRleHQsIHN1Z2dlc3Rp
b25zKTsKLSAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1
Z2dlc3Rpb25zLmZpcnN0KCk7Ci0gICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKLSAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRS
ZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIGlmICghYm91bmRpbmdCb3guaXNF
bXB0eSgpKQotICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yZXBsYWNlZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOwotICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgRWRpdG9yOjpoYW5kbGVD
b3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQotewotICAgIFJh
bmdlKiByZXBsYWNlZFJhbmdlID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLmdldCgpOwotICAgIGlmICghcmVwbGFjZWRSYW5nZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgp
ICE9IHJlcGxhY2VkUmFuZ2UtPm93bmVyRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB3b3Jk
IHdlIGFyZSBhYm91dCB0byBjb3JyZWN0IGhhcyBiZWVuIGNoYW5nZWQgYmV0d2VlbiB0aW1lciBm
aXJpbmcgYW5kIGNhbGxiYWNrIGJlaW5nIHRyaWdnZXJlZC4KLSAgICBpZiAoY3VycmVudFdvcmQg
IT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLQotICAgIHN3
aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbjoKLSAgICAgICAgaWYgKGNvcnJlY3Rp
b24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
bWVudFN0cmluZyA9IGNvcnJlY3Rpb247Ci0gICAgICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5l
bEluZm8obWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yKQot
ICAgICAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50
KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpS
ZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZv
OjpQYW5lbFR5cGVSZXZlcnNpb246Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgotICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgo
KSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5n
ID0gY29ycmVjdGlvbjsKLSAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJr
ZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigp
OwotfQotCi12b2lkIEVkaXRvcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSkKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMCi0gICAgY29uc3QgZG91YmxlIGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwgPSAw
LjM7Ci0gICAgaWYgKGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKSB7Ci0g
ICAgICAgIGlmICh0eXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rp
b24pCi0gICAgICAgICAgICAvLyBJZiB0eXBlIGlzIFBhbmVsVHlwZVJldmVyc2lvbiwgdGhlbiB0
aGUgbmV3IHJhbmdlIGhhcyBiZWVuIHNldC4gU28gd2Ugc2hvdWxkbid0IGNsZWFyIGl0LgotICAg
ICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7
Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPSB0eXBlOwotICAgICAg
ICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0YXJ0T25lU2hvdChjb3JyZWN0aW9uUGFuZWxUaW1l
ckludGVydmFsKTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSNlbmRp
ZgotfQotCi12b2lkIEVkaXRvcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKK3ZvaWQgRWRp
dG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24pCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIG1f
Y29ycmVjdGlvblBhbmVsVGltZXIuc3RvcCgpOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotI2VuZGlmCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rv
ci0+cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVk
LCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogfQogCi12b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRp
c21pc3NpbmcpCit2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpCiB7Ci0jaWYg
U1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLmlzQWN0aXZlKQorICAgIGlmICghbV9zcGVsbGluZ0NvcnJlY3Rvci0+c2hvdWxkUmVtb3Zl
TWFya2Vyc1Vwb25FZGl0aW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlz
c2VkQnlFZGl0b3IgPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCkt
PmRpc21pc3NDb3JyZWN0aW9uUGFuZWwocmVhc29uRm9yRGlzbWlzc2luZyk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLSNlbmRpZgotfQotCi1TdHJpbmcg
RWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCi17Ci0jaWYgU1VQUE9SVF9BVVRPQ09S
UkVDVElPTl9QQU5FTAotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0g
dHJ1ZTsKLSAgICBpZiAoIWNsaWVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAg
cmV0dXJuIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihyZWFzb25Gb3JEaXNt
aXNzaW5nKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlYXNvbkZvckRpc21pc3NpbmcpOwot
ICAgIHJldHVybiBTdHJpbmcoKTsKLSNlbmRpZgotfQogCi12b2lkIEVkaXRvcjo6cmVtb3ZlU3Bl
bGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoYm9vbCBkb05vdFJlbW92
ZUlmU2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpCi17CiAgICAgLy8gV2Ugd2FudCB0byByZW1vdmUg
dGhlIG1hcmtlcnMgZnJvbSBhIHdvcmQgaWYgYW4gZWRpdGluZyBjb21tYW5kIHdpbGwgY2hhbmdl
IHRoZSB3b3JkLiBUaGlzIGNhbiBoYXBwZW4gaW4gb25lIG9mCiAgICAgLy8gc2V2ZXJhbCBzY2Vu
YXJpb3M6CiAgICAgLy8gMS4gSW5zZXJ0IGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkLgpAQCAtMjcy
NSwxMDMgKzI0MjgsNiBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFy
a2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoYm9vbCBkb05vdFJlbW92ZQogICAgIGRvY3VtZW50LT5t
YXJrZXJzKCktPmNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZSh3b3Jk
UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiB9CiAKLXZvaWQgRWRp
dG9yOjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JS
RUNUSU9OX1BBTkVMCi0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAg
aWYgKGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5k
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBo
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSkp
OwotCi0gICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVS
ZXBsYWNlZCwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgotICAgIC8vIEhv
d2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5n
ZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KLSAgICAvLyBTbyBiZWZvcmUgd2Ug
Y2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9z
aXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQKLSAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKLSAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRl
ciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UK
LSAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0
YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkLgotICAgIFJlZlB0cjxSYW5nZT4gY29y
cmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3Vt
ZW50KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24o
KSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsK
LSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRp
b25PZlJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGhBc1JhbmdlLT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29u
dGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28g
dGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4K
LSAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQo
KSk7Ci0KLSAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBt
ZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgotICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOwotICAgIGFwcGx5Q29tbWFuZChTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkuc3RhcnQoKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4
dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdl
dCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nIG5ld1RleHQgPSBw
bGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUg
aWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVkLgotICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRD
b250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIHNpemVfdCBzaXplID0gbWFy
a2VyVHlwZXNUb0FkZC5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1h
cmtlclR5cGVzVG9BZGRbaV07Ci0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKLSAgICAgICAg
aWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlUmV2ZXJzaW9uICYmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVk
KSkKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VkU3RyaW5nOwotICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5n
ZXQoKSwgbWFya2VyVHlwZSwgZGVzY3JpcHRpb24pOwotICAgIH0KLSNlbHNlIC8vIFNVUFBPUlRf
QVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBVTlVTRURfUEFSQU0obWFya2VyVHlwZXNUb0FkZCk7
Ci0jZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotfQotCi1ib29sIEVkaXRv
cjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQotewotICAg
IGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkIHx8ICFtX2NvcnJl
Y3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlICE9IENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZUNvcnJlY3Rpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBvc2l0
aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3Rh
cnQoKTsKLQotICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQt
PmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbikgewotICAgICAgICBoYW5kbGVDb3JyZWN0
aW9uUGFuZWxSZXN1bHQoZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0gCi0gICAgCi0gICAgLy8gUGVuZGluZyBjb3JyZWN0aW9uIHNob3VsZCBhbHdheXMgYmUgd2hl
cmUgY2FyZXQgaXMuIEJ1dCBpbiBjYXNlIHRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCB3ZSBzdGls
bCB3YW50IHRvIGRpc21pc3MgdGhlIHBhbmVsIHdpdGhvdXQgYWNjZXB0aW5nIHRoZSBjb3JyZWN0
aW9uLgotICAgIEFTU0VSVChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQt
PmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7Ci0gICAgZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIEVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQotewotI2lmIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwKLSAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29y
cmVjdGlvbik7Ci0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwg
U2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpD
bGVhclR5cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9uVHJp
Z2dlcmVkKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1l
LT5kb2N1bWVudCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSwg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmVuZCgpKTsKLQotICAgIERvY3VtZW50
TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMo
KTsKLSAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgbWFy
a2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQp
OwotICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotI2Vsc2UgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9Q
QU5FTAotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25PZkNvcnJlY3RlZCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGNvcnJlY3RlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOwotI2VuZGlm
IC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLX0KLQogUGFzc1JlZlB0cjxSYW5nZT4g
RWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudEF0UG9pbnQod2luZG93UG9p
bnQpOwpAQCAtMjk0NCw2ICsyNTUwLDIyIEBAIHZvaWQgRWRpdG9yOjphZGRUb0tpbGxSaW5nKFJh
bmdlKiByYW5nZSwgYm9vbCBwcmVwZW5kKQogICAgIG1fc2hvdWxkU3RhcnROZXdLaWxsUmluZ1Nl
cXVlbmNlID0gZmFsc2U7CiB9CiAKK3ZvaWQgRWRpdG9yOjpzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKCkKK3sKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5zdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pOworfQorCit2b2lk
IEVkaXRvcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVj
dGlvbikKK3sKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxS
ZXN1bHQoY29ycmVjdGlvbik7Cit9CisKKwordm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9u
UGFuZWxBc0lnbm9yZWQoKQoreworICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmRpc21pc3MoUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworfQorCiBib29sIEVkaXRv
cjo6aW5zaWRlVmlzaWJsZUFyZWEoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewogICAg
IGlmIChtX2ZyYW1lLT5leGNsdWRlRnJvbVRleHRTZWFyY2goKSkKQEAgLTM1MTYsMTQgKzMxMzgs
NyBAQCB2b2lkIEVkaXRvcjo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29s
IGZsYWcpCiAKIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2V0U2Vs
ZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJl
Zm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCi0gICAg
VmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKGZyYW1lKCktPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKSk7Ci0gICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gIT0gb2xkU2VsZWN0aW9uKSB7
Ci0gICAgICAgIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOwotICAgICAgICBkaXNtaXNzQ29y
cmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsK
LSAgICB9Ci0jZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIG1fc3Bl
bGxpbmdDb3JyZWN0b3ItPnN0b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRTZWxlY3Rpb24pOwogCiAg
ICAgYm9vbCBjbG9zZVR5cGluZyA9IG9wdGlvbnMgJiBTZWxlY3Rpb25Db250cm9sbGVyOjpDbG9z
ZVR5cGluZzsKICAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gdGhp
cy0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKQEAgLTM1NDAsMTAgKzMxNTUs
OCBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIFNlbAogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBz
aG91bGRDaGVja1NwZWxsaW5nQW5kR3JhbW1hciA9IHRydWU7Ci0jaWYgU1VQUE9SVF9BVVRPQ09S
UkVDVElPTl9QQU5FTAogICAgICAgICAvLyBEb24ndCBjaGVjayBzcGVsbGluZyBhbmQgZ3JhbW1h
ciBpZiB0aGUgY2hhbmdlIG9mIHNlbGVjdGlvbiBpcyB0cmlnZ2VyZWQgYnkgc3BlbGxpbmcgY29y
cmVjdGlvbiBpdHNlbGYuCiAgICAgICAgIHNob3VsZENoZWNrU3BlbGxpbmdBbmRHcmFtbWFyID0g
IShvcHRpb25zICYgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVk
KTsKLSNlbmRpZgogCiAgICAgICAgIC8vIFdoZW4gdHlwaW5nIHdlIGNoZWNrIHNwZWxsaW5nIGVs
c2V3aGVyZSwgc28gZG9uJ3QgcmVkbyBpdCBoZXJlLgogICAgICAgICAvLyBJZiB0aGlzIGlzIGEg
Y2hhbmdlIGluIHNlbGVjdGlvbiByZXN1bHRpbmcgZnJvbSBhIGRlbGV0ZSBvcGVyYXRpb24sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBmOWFlYzQwNjkwYTAxZjNhMzg3ODU1Y2EyMmEwNjU3
ZTc0NWFiMzE1Li44YjkxMTUzMWQzMTUzMzEwOTAwM2VkOTU4NWU2NTAzZTgxNTVmNDM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNsaXBi
b2FyZEFjY2Vzc1BvbGljeS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiQ29ycmVj
dGlvblBhbmVsSW5mby5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCiAjaW5jbHVkZSAi
RWRpdEFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvci5oIgpAQCAtNTEsNiArNTAs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjsKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBDbGlwYm9hcmQ7CitjbGFzcyBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOwogY2xhc3MgRGVsZXRlQnV0dG9uQ29udHJvbGxl
cjsKIGNsYXNzIEVkaXRDb21tYW5kOwogY2xhc3MgRWRpdG9yQ2xpZW50OwpAQCAtMzI1LDEwICsz
MjUsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRUb0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBw
cmVwZW5kKTsKIAotICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUpOworICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1l
cigpOwogICAgIC8vIElmIHVzZXIgY29uZmlybWVkIGEgY29ycmVjdGlvbiBpbiB0aGUgY29ycmVj
dGlvbiBwYW5lbCwgY29ycmVjdGlvbiBoYXMgbm9uLXplcm8gbGVuZ3RoLCBvdGhlcndpc2UgaXQg
bWVhbnMgdGhhdCB1c2VyIGhhcyBkaXNtaXNzZWQgdGhlIHBhbmVsLgogICAgIHZvaWQgaGFuZGxl
Q29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7Ci0gICAgdm9p
ZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWwpOworICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpOwogCiAgICAg
dm9pZCBwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgYm9vbCBz
bWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7CiAgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYsIGJvb2wgc21hcnRSZXBsYWNlKTsKQEAgLTM4NCw3ICszODQsNyBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgc2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdDsKLSAg
ICB2b2lkIHJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVk
KGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KTsKKyAgICB2b2lkIHVw
ZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wgb25seUhhbmRsZVdvcmRz
Q29udGFpbmluZ1NlbGVjdGlvbik7CiAKIHByaXZhdGU6CiAgICAgRnJhbWUqIG1fZnJhbWU7CkBA
IC0zOTksMTAgKzM5OSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN0YXJ0TmV3S2ls
bFJpbmdTZXF1ZW5jZTsKICAgICBib29sIG1fc2hvdWxkU3R5bGVXaXRoQ1NTOwogICAgIE93blB0
cjxLaWxsUmluZz4gbV9raWxsUmluZzsKLSAgICBDb3JyZWN0aW9uUGFuZWxJbmZvIG1fY29ycmVj
dGlvblBhbmVsSW5mbzsKICAgICBPd25QdHI8U3BlbGxDaGVja2VyPiBtX3NwZWxsQ2hlY2tlcjsK
LSAgICBUaW1lcjxFZGl0b3I+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7Ci0gICAgYm9vbCBtX2Nv
cnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7CisgICAgT3duUHRyPFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI+IG1fc3BlbGxpbmdDb3JyZWN0b3I7CiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBtX21hcms7CiAgICAgYm9vbCBtX2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQ7
CiAKQEAgLTQxNyw3ICs0MTUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmV2ZWFsU2VsZWN0aW9u
QWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRH
cmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0
cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgVGV4dENoZWNraW5nVHlwZU1h
c2sgdGV4dENoZWNraW5nVHlwZU1hc2tGb3IoVGV4dENoZWNraW5nT3B0aW9ucyk7Ci0gICAgdm9p
ZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSos
IGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogCiAg
ICAgdm9pZCBzZWxlY3RDb21wb3NpdGlvbigpOwogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9u
KGNvbnN0IFN0cmluZyYsIGJvb2wgcHJlc2VydmVTZWxlY3Rpb24pOwpAQCAtNDI4LDEwICs0MjUs
MTAgQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBuZXh0VmlzaWJsZVJhbmdlKFJh
bmdlKiwgY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMpOwogCiAgICAgdm9pZCBjaGFuZ2VTZWxl
Y3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBi
b29sIGNsb3NlVHlwaW5nLCBib29sIGNsZWFyVHlwaW5nU3R5bGUpOwotICAgIHZvaWQgY29ycmVj
dGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxFZGl0b3I+Kik7CisKICAgICBOb2RlKiBmaW5kRXZl
bnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzdG9wQ29ycmVjdGlvblBh
bmVsVGltZXIoKTsKLSAgICBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CisKICAgICB2b2lkIGFwcGx5Q29ycmVjdGlv
blBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJr
ZXJUeXBlc1RvQWRkKTsKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdhcyBhcHBs
aWVkLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3Jl
VHlwaW5nSWZBcHByb3ByaWF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYWZlNzRhOGQ5ODRjY2UxMjc4Mjli
MjVjZTQ0ZTU4OTM5OTdjOTI5MC4uZjAyOTdjMTU0OGQwOWVjMTgxZmM1YjIxMTkxZTc1OTljYjkw
ODc3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgogCi0jaW5jbHVkZSAiQ29ycmVj
dGlvblBhbmVsSW5mby5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTFiNTgwZDFlYjA1NDFhN2Q1MTlkMDg5YWE3Nzg2ZWM4ZDBhNjUwOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5jcHAKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiRWRpdENvbW1hbmQuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgorI2luY2x1ZGUg
IlRleHRDaGVja2luZ0hlbHBlci5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1
ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAidmlzaWJs
ZV91bml0cy5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIHN0
ZDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BB
TkVMCisKK3N0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBt
YXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yQXV0b0Nv
cnJlY3Rpb24sICgpKTsKKyAgICBpZiAobWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9j
dW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29y
cmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworICAg
ICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6
U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJl
Y3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKKyAgICB9CisgICAg
cmV0dXJuIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb247Cit9CisKK3N0YXRpYyBjb25zdCBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvclJlcGxhY2Vt
ZW50KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQsICgpKTsKKyAgICBpZiAobWFy
a2VyVHlwZXNGb3JSZXBsYWNlbWVudC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbWFya2VyVHlwZXNG
b3JSZXBsYWNlbWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICAg
ICAgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JSZXBs
YWNlbWVudDsKK30KKworc3RhdGljIGJvb2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlv
bihjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQoreworICAgIGlmIChtYXJr
ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBTdHJpbmcm
IGRlc2NyaXB0aW9uID0gbWFya2Vyc1swXS5kZXNjcmlwdGlvbjsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMTsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0aW9u
ICE9IG1hcmtlcnNbaV0uZGVzY3JpcHRpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJh
bWUoZnJhbWUpCisgICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyKHRoaXMsICZTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKQoreworfQorCitT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cigpCit7CisgICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdu
b3JlZCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RhcnRDb3Jy
ZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSkKK3sK
KyAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsKKyAg
ICBpZiAoIWlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBJZiB0eXBlIGlzIFBhbmVsVHlwZVJldmVyc2lvbiwgdGhlbiB0aGUg
bmV3IHJhbmdlIGhhcyBiZWVuIHNldC4gU28gd2Ugc2hvdWxkbid0IGNsZWFyIGl0LgorICAgIGlm
ICh0eXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pCisgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPSB0eXBlOworICAgIG1fY29ycmVjdGlv
blBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwpOwor
fQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BDb3JyZWN0aW9uUGFu
ZWxUaW1lcigpCit7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdG9wKCk7CisgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK3ZvaWQg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhl
cmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50
U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgaWYgKGN1
cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBz
dG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjphcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbkFmdGVyVHlwaW5nKQoreworICAgIC8vIEFwcGx5IHBlbmRpbmcgYXV0b2NvcnJl
Y3Rpb24gYmVmb3JlIG5leHQgcm91bmQgb2Ygc3BlbGwgY2hlY2tpbmcuCisgICAgYm9vbCBkb0Fw
cGx5Q29ycmVjdGlvbiA9IHRydWU7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rp
b24gPSBzZWxlY3Rpb25BZnRlclR5cGluZy52aXNpYmxlU3RhcnQoKTsKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIGN1cnJlbnRXb3JkID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChzdGFydE9m
U2VsZWN0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChzdGFydE9mU2VsZWN0
aW9uLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICBpZiAoY3VycmVudFdvcmQudmlzaWJs
ZUVuZCgpID09IHN0YXJ0T2ZTZWxlY3Rpb24pIHsKKyAgICAgICAgU3RyaW5nIHdvcmRUZXh0ID0g
cGxhaW5UZXh0KGN1cnJlbnRXb3JkLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgICAg
ICBpZiAod29yZFRleHQubGVuZ3RoKCkgPiAwICYmIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0
ZXIod29yZFRleHRbd29yZFRleHQubGVuZ3RoKCkgLSAxXSkpCisgICAgICAgICAgICBkb0FwcGx5
Q29ycmVjdGlvbiA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZG9BcHBseUNvcnJlY3Rpb24pIHsK
KyAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOyAKKyAgICAgICAgZGlzbWlzcyhS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpOworICAgIH0gZWxzZQor
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsK
K30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVj
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZDsKK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1Nw
ZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBj
b25zdAoreworICAgIHJldHVybiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5oYXNN
YXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNr
aW5nRXhlbXB0aW9uKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpz
aG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50KQoreworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5n
ZShyYW5nZVRvUmVwbGFjZS5nZXQoKSk7CisgICAgaWYgKGJvdW5kaW5nQm94LmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCA9IHJhbmdlVG9SZXBsYWNlOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
ZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7CisgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZW1lbnQ7CisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICBjbGllbnQoKS0+c2hvd0NvcnJl
Y3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudCwgVmVjdG9y
PFN0cmluZz4oKSk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFu
ZGxlQ2FuY2VsT3BlcmF0aW9uKCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0Fj
dGl2ZSA9IGZhbHNlOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbENhbmNlbGxlZCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21p
c3NpbmcpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsK
KyAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSB0cnVlOworICAgIGlm
IChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwocmVh
c29uRm9yRGlzbWlzc2luZyk7Cit9CisKK1N0cmluZyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNv
bkZvckRpc21pc3NpbmcpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3Rp
dmUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUgPSBmYWxzZTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0
b3IgPSB0cnVlOworICAgIGlmICghY2xpZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICByZXR1cm4gY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKHJlYXNvbkZv
ckRpc21pc3NpbmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFw
cGx5Q29ycmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGU+JiBtYXJrZXJUeXBlc1RvQWRkKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25l
UmFuZ2UoZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U3RhcnQo
cGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFw
aChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24o
KSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgp
LCBlbmRPZlBhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQt
PmVuZFBvc2l0aW9uKCkpKTsKKworICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQg
cmFuZ2UgcmFuZ2VUb0JlUmVwbGFjZWQsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCBy
YW5nZS4KKyAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0
aGUgdmFsdWUgb2YgcmFuZ2VUb0JlUmVwbGFjZWQgaXMgbm90IHZhbGlkIGFueW1vcmUuCisgICAg
Ly8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQgdG8gc3Rv
cmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkCisgICAgLy8gcmVsYXRp
dmUgdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2Ug
dXNlIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoCisgICAgLy8gdG8gc3RvcmUgdGhp
cyB2YWx1ZS4gSW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZpcnN0
IGNyZWF0ZSBhIHJhbmdlCisgICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFy
YWdyYXBoIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZC4KKyAgICBS
ZWZQdHI8UmFuZ2U+IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJh
bmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250
YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
LT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0
YXJ0UG9zaXRpb24oKSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBQb3Np
dGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOworICAgIGNvcnJlY3Rpb25T
dGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdl
VG9CZVJlcGxhY2VkLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVw
bGFjZWQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1
dG9jb3JyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2Vt
ZW50IHRvb2sgcGxhY2UuCisgICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBo
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFn
cmFwaEFzUmFuZ2UuZ2V0KCkpOworCisgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUg
Y2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFsIHJhbmdl
IGFyb3VuZC4KKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBhcHBs
eUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9CZVJlcGxh
Y2VkLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpKTsKKyAgICBzZXRF
bmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFj
ZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbi5nZXQoKSwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpOworICAgIFN0
cmluZyBuZXdUZXh0ID0gcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOworCisgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KKyAgICBpZiAobmV3VGV4
dCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpCisgICAgICAgIHJl
dHVybjsKKworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2Vt
ZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBz
aXplX3Qgc2l6ZSA9IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
IG1hcmtlclR5cGUgPSBtYXJrZXJUeXBlc1RvQWRkW2ldOworICAgICAgICBTdHJpbmcgZGVzY3Jp
cHRpb247CisgICAgICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlICE9IENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbiAmJiAobWFya2VyVHlwZSA9PSBE
b2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtl
cjo6QXV0b2NvcnJlY3RlZCkpCisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZzsKKyAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJl
cGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUsIGRlc2NyaXB0aW9uKTsKKyAgICB9Cit9
CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlv
bkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkIHx8ICFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3Rp
dmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucGFuZWxUeXBlICE9IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24p
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKTsKKworICAgIGlmIChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkgPT0gY2Fy
ZXRQb3NpdGlvbikgeworICAgICAgICBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoZGlzbWlz
c1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0gCisgICAgCisgICAgLy8gUGVuZGluZyBjb3JyZWN0aW9u
IHNob3VsZCBhbHdheXMgYmUgd2hlcmUgY2FyZXQgaXMuIEJ1dCBpbiBjYXNlIHRoaXMgaXMgbm90
IGFsd2F5cyB0cnVlLCB3ZSBzdGlsbCB3YW50IHRvIGRpc21pc3MgdGhlIHBhbmVsIHdpdGhvdXQg
YWNjZXB0aW5nIHRoZSBjb3JyZWN0aW9uLgorICAgIEFTU0VSVChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7Cisg
ICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikKK3sKKyAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwg
Y29ycmVjdGlvbik7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Cisg
ICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3Rl
ZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBTZWxlY3Rpb25Db250cm9sbGVy
OjpDbGVhclR5cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9u
VHJpZ2dlcmVkKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2Zy
YW1lLT5kb2N1bWVudCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQo
KSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmVuZCgpKTsKKworICAgIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtl
cnMoKTsKKyAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAg
bWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1l
bnQpOworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcj4qKQoreworICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVk
aXRvciA9IGZhbHNlOworICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlw
ZSkgeworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbjog
eworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCkpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9u
LnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0
KTsKKyAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCktPm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFySW5SYW5nZXMoRWRpdG9yOjpNYXJrU3BlbGxpbmcgfCBFZGl0b3I6OlNob3dDb3JyZWN0
aW9uUGFuZWwsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgMCk7Cisg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZVJldmVyc2lvbjogeworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUg
PSB0cnVlOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBw
bGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsK
KyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIGlmICgh
Ym91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0
aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdn
ZXN0aW9uczogeworICAgICAgICBpZiAocGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vk
U3RyaW5nKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0
ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmFuZ2VUb0JlUmVwbGFjZWQpLnBhcmFncmFwaFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBWZWN0
b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nl
c0ZvcldvcmQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBwYXJhZ3JhcGhU
ZXh0LCBzdWdnZXN0aW9ucyk7CisgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVh
cigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRvcFN1
Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJzdCgpOworICAgICAgICBzdWdnZXN0aW9ucy5yZW1v
dmUoMCk7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Cisg
ICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBpZiAoIWJv
dW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlv
blBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHRvcFN1Z2dlc3Rpb24sIHN1Z2dlc3Rp
b25zKTsKKyAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3Ry
aW5nJiBjb3JyZWN0aW9uKQoreworICAgIFJhbmdlKiByZXBsYWNlZFJhbmdlID0gbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpOworICAgIGlmICghcmVwbGFjZWRS
YW5nZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgpICE9IHJlcGxhY2VkUmFuZ2UtPm93bmVyRG9jdW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5U
ZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB3b3JkIHdlIGFyZSBhYm91dCB0byBjb3JyZWN0IGhhcyBi
ZWVuIGNoYW5nZWQgYmV0d2VlbiB0aW1lciBmaXJpbmcgYW5kIGNhbGxiYWNrIGJlaW5nIHRyaWdn
ZXJlZC4KKyAgICBpZiAoY3VycmVudFdvcmQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VkU3RyaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUgPSBmYWxzZTsKKworICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBh
bmVsVHlwZSkgeworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVj
dGlvbjoKKyAgICAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247CisgICAg
ICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JBdXRvY29ycmVj
dGlvbigpKTsKKyAgICAgICAgfSBlbHNlIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3Nl
ZEJ5RWRpdG9yKQorICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vk
U3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGVSZXZlcnNpb246CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgorICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkg
eworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0g
Y29ycmVjdGlvbjsKKyAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJrZXJU
eXBlc0ZvclJlcGxhY2VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwor
fQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgp
LT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKK30KKworYm9vbCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmco
KQoreworICAgIHJldHVybiBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgJiYgaXNBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjp3aW5kb3dSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdl
KSBjb25zdAoreworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBy
ZXR1cm4gdmlldyA/IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coSW50UmVjdChyYW5nZS0+Ym91bmRp
bmdSZWN0KCkpKSA6IEZsb2F0UmVjdCgpOworfSAgICAgICAgCisKK3ZvaWQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCit7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50
U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgLy8gV2hl
biB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBw
YXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCisgICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwg
cHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQor
ICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlv
biBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZpcm0gdGhhdAorICAgIC8vIHRoZSBuZXcgY2FyZXQg
cG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCisgICAgaWYgKCFjdXJyZW50U2VsZWN0
aW9uLmlzQ2FyZXQoKSB8fCBjdXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblBvc2l0aW9uID0gY3Vy
cmVudFNlbGVjdGlvbi5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbk9m
V29yZCA9IGVuZE9mV29yZChzZWxlY3Rpb25Qb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
OworICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbiAhPSBlbmRQb3NpdGlvbk9mV29yZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5k
ZWVwRXF1aXZhbGVudCgpOworICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9k
ZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0g
cG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFy
a2VyPiBtYXJrZXJzID0gbm9kZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5tYXJrZXJzRm9yTm9k
ZShub2RlKTsKKyAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3Qg
RG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGlmICghc2hvdWxk
U3RhcnRUaW1lRm9yKG1hcmtlciwgZW5kT2Zmc2V0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+
ZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0LCBub2RlLCBtYXJrZXIuZW5kT2Zm
c2V0KTsKKyAgICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5n
ZXQoKSk7CisgICAgICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQgPSB3b3JkUmFuZ2U7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0
cmluZyA9IGN1cnJlbnRXb3JkOworICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nKQorICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRT
dHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb247CisgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25Q
YW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbik7CisgICAg
ICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29t
bWFuZD4gY29tbWFuZCkKK3sKKyAgICBpZiAoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAm
JiAhY29tbWFuZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKKyAgICAg
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50
TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKK30KKworRWRpdG9yQ2xpZW50KiBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpjbGllbnQoKQoreworICAgIHJldHVybiBtX2ZyYW1lLT5w
YWdlKCkgPyBtX2ZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogMDsKK30KKworVGV4dENo
ZWNrZXJDbGllbnQqIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkK
K3sKKyAgICBpZiAoRWRpdG9yQ2xpZW50KiBvd25lciA9IGNsaWVudCgpKQorICAgICAgICByZXR1
cm4gb3duZXItPnRleHRDaGVja2VyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVy
c2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnRTdHJpbmcpCit7CisgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
RWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCByZXBsYWNlZFN0cmluZywgcmVw
bGFjZW1lbnRTdHJpbmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
Om1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpCit7CisgICAgY2hh
bmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92
ZU1hcmtlcnMoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3Rl
ZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlcik7CisgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpT
cGVsbENoZWNraW5nRXhlbXB0aW9uKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjptYXJrQ29ycmVjdGlvbihQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQoreworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXNUb0FkZCA9IG1hcmtlclR5cGVzRm9yQXV0b2NvcnJl
Y3Rpb24oKTsKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNl
ZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUgPSBtYXJrZXJUeXBlc1Rv
QWRkW2ldOworICAgICAgICBpZiAobWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCkKKyAg
ICAgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgpLCBtYXJrZXJU
eXBlLCByZXBsYWNlZFN0cmluZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1hcmtlcnMt
PmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlKTsKKyAgICB9Cit9CisK
K3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBhc3NSZWZQdHI8
UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpCit7CisgICAgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZVJldmVyc2VkKHJlcGxhY2VkU3RyaW5nLCBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5n
ZXQoKSkpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZFNw
ZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29y
cmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
bikKK3sKKyAgICBpZiAoIXJhbmdlT2ZDb3JyZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmFuZ2VPZkNvcnJlY3Rpb24tPnN0
YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBWZWN0b3I8RG9jdW1l
bnRNYXJrZXI+IGNvcnJlY3RlZE9uY2VNYXJrZXJzID0gbWFya2Vycy0+bWFya2Vyc0luUmFuZ2Uo
cmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKKyAgICBp
ZiAoY29ycmVjdGVkT25jZU1hcmtlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gU3BlbGxpbmcgY29ycmVjdGVkIHRleHQgaGFzIGJlZW4gZWRpdGVkLiBXZSBuZWVk
IHRvIGRldGVybWluZSB3aGV0aGVyIHVzZXIgaGFzIHJldmVydGVkIGl0IHRvIG9yaWdpbmFsIHRl
eHQgb3IKKyAgICAvLyBlZGl0ZWQgaXQgdG8gc29tZXRoaW5nIGVsc2UsIGFuZCBub3RpZnkgc3Bl
bGxjaGVja2VyIGFjY29yZGluZ2x5LgorICAgIGlmIChtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2Ny
aXB0aW9uKGNvcnJlY3RlZE9uY2VNYXJrZXJzKSAmJiBjb3JyZWN0ZWRPbmNlTWFya2Vyc1swXS5k
ZXNjcmlwdGlvbiA9PSBjb3JyZWN0ZWQpCisgICAgICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29y
cmVjdGVkLCBjb3JyZWN0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIGNsaWVudCgpLT5yZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25FZGl0ZWQs
IGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CisgICAgbWFya2Vycy0+cmVtb3ZlTWFya2VycyhyYW5n
ZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworfQorCisj
ZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMThm
NjM2Nzc2NWUyNDBjYzkwMjQ0MDk5MjhiYzJkNWQyMGU1YjA5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgKQEAg
LTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcl9oCisjZGVmaW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAorCisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQor
Ly8gU29tZSBwbGF0Zm9ybXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhdXRvY29ycmVjdGlv
bi4KKyNkZWZpbmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAxCisvLyBTb21lIHBsYXRm
b3JtcyB1c2Ugc3BlbGxpbmcgYW5kIGF1dG9jb3JyZWN0aW9uIG1hcmtlcnMgdG8gcHJvdmlkZSB2
aXN1YWwgY3VlLgorLy8gT24gc3VjaCBwbGF0Zm9ybSwgaWYgd29yZCB3aXRoIG1hcmtlciBpcyBl
ZGl0ZWQsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBtYXJrZXIuCisjZGVmaW5lIFJFTU9WRV9NQVJL
RVJTX1VQT05fRURJVElORyAxCisjZWxzZQorI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMIDAKKyNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDAKKyNlbmRpZiAv
LyAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQorCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8
d3RmL1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRWRpdG9y
Q2xpZW50OworY2xhc3MgRWRpdENvbW1hbmQ7CitjbGFzcyBSYW5nZTsKK2NsYXNzIFRleHRDaGVj
a2VyQ2xpZW50OworY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKKworc3RydWN0IENvcnJlY3Rpb25Q
YW5lbEluZm8geworICAgIGVudW0gUGFuZWxUeXBlIHsKKyAgICAgICAgUGFuZWxUeXBlQ29ycmVj
dGlvbiA9IDAsCisgICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbiwKKyAgICAgICAgUGFuZWxUeXBl
U3BlbGxpbmdTdWdnZXN0aW9ucworICAgIH07CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9C
ZVJlcGxhY2VkOworICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsKKyAgICBTdHJpbmcgcmVwbGFj
ZW1lbnRTdHJpbmc7CisgICAgUGFuZWxUeXBlIHBhbmVsVHlwZTsKKyAgICBib29sIGlzQWN0aXZl
OworfTsKKworZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKKyAgICBS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKKyAgICBSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwKKyAgICBSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQKK307CisKKyNpZiBTVVBQT1JUX0FVVE9DT1JS
RUNUSU9OX1BBTkVMCisjZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgOworI2Vs
c2UKKyNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBmdW5jdGlvbkJvZHkKKyNl
bmRpZgorCitjbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyIHsKK3B1YmxpYzoKKyAg
ICBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKikgVU5MRVNTX0VOQUJMRUQoe30p
CisgICAgflNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7fSkK
KworICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZv
OjpQYW5lbFR5cGUpIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIHZvaWQgc3RvcENvcnJlY3Rpb25Q
YW5lbFRpbWVyKCkgVU5MRVNTX0VOQUJMRUQoe30pCisKKyAgICB2b2lkIGRpc21pc3MoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgVU5MRVNTX0VOQUJMRUQoe30pCisgICAgU3Ry
aW5nIGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVT
U19FTkFCTEVEKHsgcmV0dXJuIFN0cmluZygpOyB9KQorICAgIHZvaWQgc2hvdyhQYXNzUmVmUHRy
PFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkgVU5MRVNT
X0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb1JlcGxhY2UpOyBVTlVTRURfUEFSQU0ocmVw
bGFjZW1lbnQpOyB9KQorCisgICAgdm9pZCBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3Qg
VmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYpIFVOTEVTU19FTkFCTEVEKHt9KQor
ICAgIC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rpb24gd2FzIGFwcGxpZWQsIGZhbHNlIG90aGVy
d2lzZS4KKyAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJp
YXRlKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCisKKyAgICB2b2lkIHJlc3Bv
bmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgY29u
c3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikgVU5MRVNTX0VO
QUJMRUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24p
OyB9KQorICAgIHZvaWQgcmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29t
bWFuZD4pIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVE
KHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCisKKyAgICB2b2lkIHN0b3BQZW5kaW5n
Q29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCisgICAgdm9pZCBhcHBseVBl
bmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlw
aW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7
IH0pCisKKyAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9
KQorICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkgVU5MRVNTX0VOQUJMRUQoe30pCisK
KyAgICBib29sIGhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyBy
ZXR1cm4gZmFsc2U7IH0pCisgICAgYm9vbCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVm
UHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IFVOVVNF
RF9QQVJBTShtaXNzcGVsbGluZ1JhbmdlKTsgcmV0dXJuIHRydWU7IH0pCisgICAgYm9vbCBpc0F1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVy
biBmYWxzZTsgfSkKKyAgICBib29sIHNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpIFVO
TEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQorCisgICAgdm9pZCBjb3JyZWN0aW9uUGFu
ZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikgVU5MRVNT
X0VOQUJMRUQoe30pCisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJz
ZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFj
ZW1lbnRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcp
OyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnRSYW5nZSk7IH0pCisgICAgdm9pZCBtYXJrUmV2ZXJz
ZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNF
RF9QQVJBTShjaGFuZ2VkUmFuZ2UpOyB9KQorICAgIHZvaWQgbWFya0NvcnJlY3Rpb24oUGFzc1Jl
ZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVOVVNFRF9QQVJB
TShyZXBsYWNlZFN0cmluZyk7IH0pCisgICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25z
ZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0
cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVE
KHsgVU5VU0VEX1BBUkFNKHJhbmdlT2ZDb3JyZWN0aW9uKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rl
ZCk7IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKKworI2lmIFNVUFBPUlRfQVVUT0NPUlJF
Q1RJT05fUEFORUwKK3ByaXZhdGU6CisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3Bv
bnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZyk7CisKKyAgICBib29sIHNob3VsZFN0YXJ0VGltZUZvcihjb25zdCBE
b2N1bWVudE1hcmtlciYgbWFya2VyLCBpbnQgZW5kT2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICgoKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCAm
JiAhbWFya2VyLmRlc2NyaXB0aW9uLmlzTnVsbCgpKSAKKyAgICAgICAgICAgICAgICAgfHwgbWFy
a2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0aWNfY2FzdDxpbnQ+
KG1hcmtlci5lbmRPZmZzZXQpID09IGVuZE9mZnNldCk7CisgICAgfQorCisgICAgRWRpdG9yQ2xp
ZW50KiBjbGllbnQoKTsKKyAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKTsKKyAg
ICBGbG9hdFJlY3Qgd2luZG93UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7CisKKyAg
ICBFZGl0b3JDbGllbnQqIG1fY2xpZW50OworICAgIEZyYW1lKiBtX2ZyYW1lOworCisgICAgVGlt
ZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsK
KyAgICBDb3JyZWN0aW9uUGFuZWxJbmZvIG1fY29ycmVjdGlvblBhbmVsSW5mbzsKKyAgICBib29s
IG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcjsKKyNlbmRpZgorfTsKKworI3Vu
ZGVmIFVOTEVTU19FTkFCTEVECisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlw
aW5nQ29tbWFuZC5jcHAKaW5kZXggZGYxNTBlZTAwMzk1MDhkNjM0MjdhY2I0ZWNiY2Q1MGZlNmY0
MjYwOC4uYjU0OGI5MTMyZGQ3YmNmMTkwZWY4Y2NmNGE5MWE1NDQ2OWE2ZmVlZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0xNTUsMTEgKzE1NSw5IEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgdGV4dCwgVHlwaW5nQ29tCiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1l
KCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKIAotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElO
RwogICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5l
ZGl0b3IoKS0+cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0
ZWQoaXNTcGFjZU9yTmV3bGluZSh0ZXh0LmNoYXJhY3RlcnMoKVswXSkpOwotI2VuZGlmCi0KKyAg
ICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT51cGRhdGVNYXJrZXJzRm9yV29yZHNB
ZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHQuY2hhcmFjdGVycygpWzBdKSk7
CisgICAgCiAgICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZnJhbWUtPnNlbGVjdGlvbigp
LT5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOwogfQogCkBAIC0zNDQsMTIgKzM0
Miw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVU
eXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBz
dGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBpZiAocDEg
IT0gcDIpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+bWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSk7Ci0jaWYg
U1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICBlbHNlIGlmIChjb21tYW5kVHlw
ZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+ZWRpdG9yKCktPnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShj
b21tYW5kVHlwZSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVk
aXRvcigpLT5zdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CiAgICAgfQogfQogCkBAIC00Njcs
OSArNDYxLDggQEAgYm9vbCBUeXBpbmdDb21tYW5kOjptYWtlRWRpdGFibGVSb290RW1wdHkoKQog
CiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJ
VElORwotICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVsbEFuZENv
cnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICBk
b2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0
ZWRCeUVkaXRpbmcoZmFsc2UpOworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0Rl
bGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKIApAQCAtNTY2
LDkgKzU1OSw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcpCiAKIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBi
b29sIGtpbGxSaW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwotICAgIGRv
Y3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJr
ZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICBkb2N1bWVudCgpLT5m
cmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmco
ZmFsc2UpOworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9o
dG1sZWRpdGluZy5oCmluZGV4IGNiMmIyYTQyOWY5ZTFlZWU3OTdlY2JhOWZjNzAwZDZmMjg3ZmUy
NDcuLjFkODUzYzdhMzE3MDY3MTQyMzM0YzZlYWE1OGUzMGIwNmY3OTQyNTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKQEAgLTIyNCw2ICsyMjQsMTUgQEAgaW5saW5lIGJvb2wg
aXNXaGl0ZXNwYWNlKFVDaGFyIGMpCiB7CiAgICAgcmV0dXJuIGMgPT0gbm9CcmVha1NwYWNlIHx8
IGMgPT0gJyAnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdCc7CiB9CisKK2lubGluZSBib29sIGlz
QW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQoreworICAgIC8vIFRo
ZXNlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlaGF2ZSBhcyB3b3JkIGJvdW5kYXJpZXMsIGJ1
dCBjYW4gYXBwZWFyIHdpdGhpbiB3b3Jkcy4KKyAgICAvLyBJZiB0aGV5IGFyZSBqdXN0IHR5cGVk
LCBpLmUuIGlmIHRoZXkgYXJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgY2FyZXQsIHdlIHdh
bnQgdG8gZGVsYXkgdGV4dCBjaGVja2luZyB1bnRpbCB0aGUgbmV4dCBjaGFyYWN0ZXIgaGFzIGJl
ZW4gdHlwZWQuCisgICAgLy8gRklYTUU6IHRoaXMgaXMgcmVxdWlyZWQgdW50aWwgNjg1MzAyNyBp
cyBmaXhlZCBhbmQgdGV4dCBjaGVja2luZyBjYW4gZG8gdGhpcyBmb3IgdXMuCisgICAgcmV0dXJu
IGNoYXJhY3RlciA9PSAnXCcnIHx8IGNoYXJhY3RlciA9PSByaWdodFNpbmdsZVF1b3RhdGlvbk1h
cmsgfHwgY2hhcmFjdGVyID09IGhlYnJld1B1bmN0dWF0aW9uR2Vyc2hheWltOworfQorCiBTdHJp
bmcgc3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKGNvbnN0IFN0cmluZyYsIGJvb2wgc3Rh
cnRJc1N0YXJ0T2ZQYXJhZ3JhcGgsIGJvb2wgZW5kSXNFbmRPZlBhcmFncmFwaCk7CiBjb25zdCBT
dHJpbmcmIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xp
ZW50LmgKaW5kZXggYWVkYTg0NDU4OGNhNmVmNTVmMDY4MjM0Mjg1MzcwMzU5YzdhYTUyZS4uZGYy
NGE1YjQ2MDgwODczZmMzYzc4Y2FlYjI0ZmUwMjM0MzU2MTIxNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Vk
aXRvckNsaWVudC5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIEVkaXRvckNsaWVudF9oCiAj
ZGVmaW5lIEVkaXRvckNsaWVudF9oCiAKLSNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWxJbmZvLmgi
CisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVk
aXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDQyOWMwMzU1NjgxZWQ4YWUy
YzExYzg1OGRjOGFiNDQwYWMxYTRiOWQuLjQ5NGEzN2ExMmU4ZWM2ODRmZDEwNTFjMTcwOGNmZGJl
NzMyNDc4YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC05NDMsNyArOTQzLDcgQEAgdm9pZCBG
cmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhmbG9hdCBwYWdlWm9vbUZhY3RvciwgZmxv
YXQgdGV4dFpvb21GYWN0b3IKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2VkaXRvci5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdD
b3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBtX2VkaXRvci5kaXNtaXNzQ29ycmVjdGlvblBh
bmVsQXNJZ25vcmVkKCk7CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIFJlc3BlY3QgU1ZHcyB6
b29tQW5kUGFuPSJkaXNhYmxlZCIgcHJvcGVydHkgaW4gc3RhbmRhbG9uZSBTVkcgZG9jdW1lbnRz
Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88504</attachid>
            <date>2011-04-06 13:48:18 -0700</date>
            <delta_ts>2011-04-07 09:04:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55571-20110406134816.patch</filename>
            <type>text/plain</type>
            <size>98447</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwNjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYmUzYWQ2
NjU3ZTQ5ODM4ZTE2YzI4ODY1ZmI3MThhZTgzNmUwZDVkNy4uYzI4OGZkMDY0ODQ1ZWVhZDIxOTJm
MGMwMWQ5MGIzMmRkYTQyNGI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY2OSw2ICs2Njks
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE1YjlmYTQ0NzE4ZTYwZDA3MGRjNTgxYzc2
NTBlYmQ1ZjVlYjZiZTMuLmJlOWVmMjI0NjVjMzI5YTI0ZjM5Nzc3MDUwMzA5YzE1YjRlNDk1YmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAxMS0wNC0wNiAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQg
YmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEKKworICAgICAgICBFeHRyYWN0ZWQgY29kZSBpbnNp
ZGUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpbnRvCisgICAgICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIgY2xhc3MuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gcmVtb3Zl
IHNvbWUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBndWFyZCBpZgorICAgICAgICBjb2Rl
IHBhdGhzIGluc2lkZSB0aGUgbmV2ZXIgcmVhY2hlZCB3aXRob3V0IGF1dG9jb3JyZWN0aW9uIHN1
cHBvcnQuCisgICAgICAgIFJlbW92aW5nIGd1YXJkcyByZWR1Y2VzIHVuaW50ZW50aW9uYWwgYnVp
bGQgYnJlYWthZ2UuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFnbmUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVs
SW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZXNwb25kVG9DaGFuZ2VkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
aWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6On5FZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnBhc3RlQXNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppc0F1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKToK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjptYXJrZXJUeXBlc0Zv
ckF1dG9jb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtlclR5cGVzRm9yUmVwbGFj
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0YXJ0Q29ycmVjdGlv
blBhbmVsVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBlbmRpbmdDb3Jy
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
Omhhc1BlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlz
c1Nvb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVtb3Zl
TWFya2Vyc1Vwb25FZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0Fw
cGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1JldmVyc2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtD
b3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKToKKyAg
ICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpVTkxFU1NfRU5B
QkxFRCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpz
aG91bGRTdGFydFRpbWVGb3IpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKToKKyAg
ICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjppc0FtYmln
dW91c0JvdW5kYXJ5Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgor
ICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFBh
Z2VBbmRUZXh0Wm9vbUZhY3RvcnMpOgorCiAyMDExLTA0LTA2ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KaW5kZXggYTM4NzdjMTZmNjk5MzY4ZDUzNmUwNTk0ODlkZjlkZDkyNDJh
NmU4YS4uYjkyMTAwYjhkODA0M2Y3Mjg0M2Y2NzAzYzRhMDk1YTMzMjIxZDk2MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTE0NjgsNiArMTQ2OCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxDaGVja2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRD
b21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5k
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDVkMDJkZGM3Y2UzY2UyNGNhMWVkOWZkYWNkZjQ4YmZi
NjI4NGY1NzAuLmZmNzk4YzE2MTE0MmNlOGRmNGY3NDkxN2ZiZTBlNTNjNWUyMDg4N2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTI2MzksNiArMjYzOSw5IEBACiAgICAgICAgICAgICAnZWRpdGluZy9T
bWFydFJlcGxhY2VDRi5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU21hcnRSZXBsYWNlSUNV
LmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwJywKKyAgICAgICAg
ICAgICdlZGl0aW5nL1NwZWxsQ2hlY2tlci5oJywKKyAgICAgICAgICAgICdlZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BsaXRFbGVtZW50Q29t
bWFuZC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA4MGQyMWI0ODE5MTBhNjRkMzIzNmMxODVjNjQy
ZmJmYTlmODdiYTQ0Li5iZjEwYTI2OTZhYzgyZDY3ZTE1ODYyMmZjNzlhYmY4ZDlkN2I1YzhlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybwpAQCAtNTk4LDYgKzU5OCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGVkaXRp
bmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFj
ZUlDVS5jcHAgXAogICAgIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBcCisgICAgZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgXAog
ICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBiZDkz
NDE5NzMzOGM3ZGY5NjE4YzE1NjUwZmEzOTc3MzAwNTA1OTdlLi45NjQxZWNkOTZhZDg0Yjc3NjAx
ZGNmNzUxMmU2NGQ4NTBjN2RjMjBlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagpAQCAtNTAyMzAsNiArNTAyMzAsNjIgQEAKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmNwcCIKKwkJCQk+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJ
PgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1l
PSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgor
CQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJE
ZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
CQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkv
PgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0
aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfTFRDR3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZWRpdGluZ1xTcGxpdEVsZW1lbnRDb21tYW5kLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggNTA4NDM4MTA3ZDMwZDg4ZDUxYmQ3ZGZiNTE4ODJlNjkzOTQ2ZjZmOS4u
OTcxZTQ3NWY0N2NlMDdhNTRhZGI5YmQzY2E4MmQ2MzAwODNlNjVlYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzE5Niw2ICsz
MTk2LDggQEAKIAkJQTYyMkE4RkMxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTYy
MkE4RjYxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwICovOyB9Owog
CQlBNjIyQThGRDEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTYyMkE4RjcxMjJDNDRB
NjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCAqLzsgfTsKIAkJQTYyMkE4RkYxMjJD
NDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJp
Y0JpbmRpbmcuaCAqLzsgfTsKKwkJQTcwMDVDQ0MxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXIuY3BwICovOyB9OworCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyog
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBNzE1MUJEODEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJD
bGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
MTUxQkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTVFNjUyMTM0QkJCRUMw
MEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxNUU2NTAxMzRCQkJFQzAwRDhFNzEzIC8qIFBy
b2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi87IH07CiAJCUE3MTVFNjUzMTM0QkJCRUMwMEQ4RTcx
MyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTVFNjUxMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1No
YWRvd0VsZW1lbnQuaCAqLzsgfTsKQEAgLTQ3OTQsNyArNDc5Niw2IEBACiAJCUI3NzZENDNEMTEw
NDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjc3NkQ0M0MxMTA0NTI3NTAwQkVCMEVDIC8qIFByaW50
Q29udGV4dC5jcHAgKi87IH07CiAJCUI4ODVFOEQ0MTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4RDIxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgKi87IH07CiAJCUI4ODVFOEQ1MTFFMDZERDIwMDlGRkJG
NCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAvKiBJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9ICgpOyB9OyB9OwotCQlCOEE2QTZENTEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBh
bmVsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCOERCREI0QjEzMEIw
RjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCOERCREI0NzEzMEIwRjhBMDBGNUNEQjEgLyog
U2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgKi87IH07CiAJCUI4REJEQjRDMTMwQjBGOEEwMEY1Q0RC
MSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCOERCREI0ODEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9u
Q29tbWFuZC5oICovOyB9OwogCQlCOERCREI0RDEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZC5jcHAgKi87IH07CkBAIC05NzIyLDYgKzk3MjMsOCBAQAogCQlBNjIyQThGNjEyMkM0
NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcDsgcGF0aCA9IGdlbmVy
aWMvQmluZGluZ1NlY3VyaXR5QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE2MjJBOEY3MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJpbmRpbmdTZWN1cml0eUJhc2UuaDsgcGF0aCA9
IGdlbmVyaWMvQmluZGluZ1NlY3VyaXR5QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJpY0JpbmRpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR2VuZXJpY0JpbmRpbmcuaDsgcGF0aCA9IGdlbmVy
aWMvR2VuZXJpY0JpbmRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTcwMDVD
Q0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3MDA1Q0NCMTMzMEM0
QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0IC8qIFRl
eHRDaGVja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRD
aGVja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTVFNjUwMTM0
QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dy
ZXNzU2hhZG93RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9n
cmVzc1NoYWRvd0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMjI3
LDcgKzExMjMwLDYgQEAKIAkJQjc3NkQ0M0MxMTA0NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmludENvbnRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCODg1RThEMjExRTA2REQyMDA5RkZC
RjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAv
KiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUI4QTZBNkQ0MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9u
UGFuZWxJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcnJlY3Rpb25Q
YW5lbEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDcxMzBCMEY4
QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25D
b21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldFNlbGVjdGlvbkNv
bW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDkxMzBCMEY4QTAw
RjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTUzNyw3ICsxNTUzOSw2IEBACiAJCQkJOTMzMDlE
OEMwOTlFNjQ5MTAwNTZFNTgxIC8qIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuaCAqLywKIAkJCQk5
MzMwOUQ4RDA5OUU2NDkxMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwICovLAog
CQkJCTkzMzA5RDhFMDk5RTY0OTEwMDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFuZC5oICov
LAotCQkJCUI4QTZBNkQ0MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmgg
Ki8sCiAJCQkJRDBCMDU1NjcwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmNw
cCAqLywKIAkJCQlEMEIwNTU2NjA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQu
aCAqLywKIAkJCQkxQzRDOEY2MzBBRDg2NTVEMDA5NDc1Q0UgLyogRGVsZXRlQnV0dG9uLmNwcCAq
LywKQEAgLTE1NjE5LDYgKzE1NjIwLDggQEAKIAkJCQlBNzhGRTEzQTEyMzY2QjEwMDBBQ0U4RDAg
LyogU3BlbGxDaGVja2VyLmggKi8sCiAJCQkJQjhEQkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwICovLAogCQkJCUI4REJEQjRBMTMwQjBGOEEwMEY1
Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi8sCisJCQkJQTcwMDVDQ0ExMzMw
QzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwICovLAorCQkJ
CUE3MDA1Q0NCMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LmggKi8sCiAJCQkJOTMzMDlEQzIwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1h
bmQuY3BwICovLAogCQkJCTkzMzA5REMzMDk5RTY0OTEwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRD
b21tYW5kLmggKi8sCiAJCQkJOTMzMDlEQzQwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0VGV4dE5v
ZGVDb21tYW5kLmNwcCAqLywKQEAgLTE5OTY4LDcgKzE5OTcxLDYgQEAKIAkJCQkzM0QwMjEyRDEz
MURCMzdCMDA0MDkxQTggLyogQ29va2llU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VF
Njg0NjQxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZVN0b3JhZ2VDRk5ldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkU2RkQ0ODgwRjY3NkU1NzAwMDkyODczIC8qIENvb3JkaW5hdGVzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlCOEE2QTZENTEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVs
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMDQwQTE5ODlDQTAwN0ZCOEM1IC8qIENv
dW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCOTc5MEU4MjA2OTIwMEIyNTk2NSAvKiBD
b3VudGVyQ29udGVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI5NTEwRTgyMDU2QjAwQjI1
OTY1IC8qIENvdW50ZXJEaXJlY3RpdmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTIyMjgxLDYgKzIy
MjgzLDcgQEAKIAkJCQk3NTQxNUIwMDEyOTU4RDVFMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1
bHRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhGRTEzQzEyMzY2QjEwMDBBQ0U4RDAgLyog
U3BlbGxDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCOERCREI0RTEzMEIwRjhBMDBGNUNE
QjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTcw
MDVDQ0QxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzMzA5RTEyMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1l
bnRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNDA5OUU2NDkyMDA1NkU1ODEg
LyogU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTE2MDk5
RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI1MDk1LDYgKzI1MDk4LDcgQEAKIAkJCQk3NTQxNUMyOTEyOUE5
OTIwMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3OEZFMTNCMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjhEQkRCNEQxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTcwMDVDQ0MxMzMwQzRCQTAwMENDMEJB
IC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTMzMDlFMTEwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTMzMDlFMTMwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVD
b21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTE1MDk5RTY0OTIwMDU2RTU4MSAv
KiBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZv
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYwOTllMTYyZmE3MmY3ZjEzOWQ2M2ZjMTM3OGM0YjRi
MzNmM2ZlNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaAorKysgL2Rldi9udWxs
CkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29ycmVjdGlvblBhbmVsSW5mb19o
Ci0jZGVmaW5lIENvcnJlY3Rpb25QYW5lbEluZm9faAotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotLy8gU29tZSBwbGF0Zm9y
bXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhdXRvY29ycmVjdGlvbi4KLSNkZWZpbmUgU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAxCi0vLyBTb21lIHBsYXRmb3JtcyB1c2Ugc3BlbGxp
bmcgYW5kIGF1dG9jb3JyZWN0aW9uIG1hcmtlcnMgdG8gcHJvdmlkZSB2aXN1YWwgY3VlLgotLy8g
T24gc3VjaCBwbGF0Zm9ybSwgaWYgd29yZCB3aXRoIG1hcmtlciBpcyBlZGl0ZWQsIHdlIG5lZWQg
dG8gcmVtb3ZlIHRoZSBtYXJrZXIuCi0jZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElO
RyAxCi0jZWxzZQotI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDAKLSNkZWZp
bmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDAKLSNlbmRpZiAvLyAjaWYgUExBVEZPUk0o
TUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotCi0jaW5j
bHVkZSAiUmFuZ2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgQ29ycmVjdGlv
blBhbmVsSW5mbyB7Ci0gICAgZW51bSBQYW5lbFR5cGUgewotICAgICAgICBQYW5lbFR5cGVDb3Jy
ZWN0aW9uID0gMCwKLSAgICAgICAgUGFuZWxUeXBlUmV2ZXJzaW9uLAotICAgICAgICBQYW5lbFR5
cGVTcGVsbGluZ1N1Z2dlc3Rpb25zCi0gICAgfTsKLQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VU
b0JlUmVwbGFjZWQ7Ci0gICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nOwotICAgIFN0cmluZyByZXBs
YWNlbWVudFN0cmluZzsKLSAgICBQYW5lbFR5cGUgcGFuZWxUeXBlOwotICAgIGJvb2wgaXNBY3Rp
dmU7Ci19OwotCi1lbnVtIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgewotICAg
IFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQgPSAwLAotICAgIFJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLAotICAgIFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZAotfTsKLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIENvcnJlY3Rpb25QYW5lbEluZm9faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCmluZGV4IGU0ZTBiYmI2Y2ZlMGMwOWEwNzU2YTk2OWVm
NjgzZjVhODQ3NjIzZmEuLmYzOGNiZTYyYTYwZGUxMWNkMGYxYzExM2E5OWYwYzJkMDBlYWViOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKQEAgLTYzLDYg
KzYzLDcgQEAKICNpbmNsdWRlIDxTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHA+CiAjaW5jbHVk
ZSA8U21hcnRSZXBsYWNlLmNwcD4KICNpbmNsdWRlIDxTbWFydFJlcGxhY2VDRi5jcHA+CisjaW5j
bHVkZSA8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHA+CiAjaW5jbHVkZSA8U3BlbGxD
aGVja2VyLmNwcD4KICNpbmNsdWRlIDxTcGxpdEVsZW1lbnRDb21tYW5kLmNwcD4KICNpbmNsdWRl
IDxTcGxpdFRleHROb2RlQ29tbWFuZC5jcHA+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5k
ZXggOTBlYjgyNWMwNDc0OWM1ZDNlY2VhZDMzMmIyYzAwNWM3YjdiZmMxYi4uNzU2MDgzNTI0Yzkw
ODZkOTI4MjMwZjM3MmU1MTk0MTIwMDkxMTBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAj
aW5jbHVkZSAiQ2xpcGJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJDb21wb3NpdGlvbkV2ZW50Lmgi
CisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNy
ZWF0ZUxpbmtDb21tYW5kLmgiCiAjaW5jbHVkZSAiRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIKQEAgLTkzLDUxICs5NCw2IEBAIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFt
ZXNwYWNlIFVuaWNvZGU7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5
Q2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKLXsKLSAgICAvLyBUaGVzZSBhcmUgY2hhcmFjdGVy
cyB0aGF0IGNhbiBiZWhhdmUgYXMgd29yZCBib3VuZGFyaWVzLCBidXQgY2FuIGFwcGVhciB3aXRo
aW4gd29yZHMuCi0gICAgLy8gSWYgdGhleSBhcmUganVzdCB0eXBlZCwgaS5lLiBpZiB0aGV5IGFy
ZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGNhcmV0LCB3ZSB3YW50IHRvIGRlbGF5IHRleHQg
Y2hlY2tpbmcgdW50aWwgdGhlIG5leHQgY2hhcmFjdGVyIGhhcyBiZWVuIHR5cGVkLgotICAgIC8v
IEZJWE1FOiB0aGlzIGlzIHJlcXVpcmVkIHVudGlsIDY4NTMwMjcgaXMgZml4ZWQgYW5kIHRleHQg
Y2hlY2tpbmcgY2FuIGRvIHRoaXMgZm9yIHVzLgotICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wn
JyB8fCBjaGFyYWN0ZXIgPT0gcmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9
PSBoZWJyZXdQdW5jdHVhdGlvbkdlcnNoYXlpbTsKLX0KLQotc3RhdGljIGNvbnN0IFZlY3RvcjxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24o
KQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbiwgKCkpOwotICAgIGlmIChtYXJr
ZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICBtYXJrZXJUeXBl
c0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwot
ICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtl
cjo6Q29ycmVjdGlvbkluZGljYXRvcik7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJl
Y3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSAg
ICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6
OkF1dG9jb3JyZWN0ZWQpOwotICAgIH0KLSAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JBdXRvQ29y
cmVjdGlvbjsKLX0KLQotc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZT4mIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JS
ZXBsYWNlbWVudCwgKCkpOwotICAgIGlmIChtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmlzRW1w
dHkoKSkgewotICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50
LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0gICAgfQot
ICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50OwotfQotCi0jaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAotc3RhdGljIGJvb2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNj
cmlwdGlvbihjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQotewotICAgIGlm
IChtYXJrZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25zdCBT
dHJpbmcmIGRlc2NyaXB0aW9uID0gbWFya2Vyc1swXS5kZXNjcmlwdGlvbjsKLSAgICBmb3IgKHNp
emVfdCBpID0gMTsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGRlc2Ny
aXB0aW9uICE9IG1hcmtlcnNbaV0uZGVzY3JpcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KIC8vIFdoZW4gYW4gZXZl
bnQgaGFuZGxlciBoYXMgbW92ZWQgdGhlIHNlbGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250
cm9sCiAvLyB3ZSBzaG91bGQgdXNlIHRoZSB0YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3Ig
dGhpcyBlZGl0aW5nIG9wZXJhdGlvbi4KIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rp
b25Gb3JDb21tYW5kKEV2ZW50KiBldmVudCkKQEAgLTUzMyw0OCArNDg5LDcgQEAgdm9pZCBFZGl0
b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xk
U2VsZWN0aW9uKQogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oKTsKICAgICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKLQotI2lmIFNVUFBPUlRfQVVUT0NP
UlJFQ1RJT05fUEFORUwKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24oZnJh
bWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKLSAgICAvLyBXaGVuIHVzZXIgbW92ZXMg
Y2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hv
dyB0aGUgcGFuZWwKLSAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29ycmVjdGlv
biB3b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCi0gICAgLy8gdW5kZXNp
cmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVsIHRpbWVy
IG9uY2Ugd2UgY29uZmlybSB0aGF0Ci0gICAgLy8gdGhlIG5ldyBjYXJldCBwb3NpdGlvbiBpcyBh
dCB0aGUgZW5kIG9mIGEgd29yZC4KLSAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb24uaXNDYXJldCgp
IHx8IGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uUG9zaXRpb24gPSBjdXJyZW50U2VsZWN0aW9u
LnN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uT2ZXb3JkID0gZW5kT2ZX
b3JkKHNlbGVjdGlvblBvc2l0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7Ci0gICAgaWYgKHNl
bGVjdGlvblBvc2l0aW9uICE9IGVuZFBvc2l0aW9uT2ZXb3JkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IGVuZFBvc2l0aW9uT2ZXb3JkLmRlZXBFcXVpdmFsZW50
KCk7Ci0gICAgaWYgKHBvc2l0aW9uLmFuY2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25J
c09mZnNldEluQW5jaG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOb2RlKiBub2RlID0gcG9z
aXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGludCBlbmRPZmZzZXQgPSBwb3NpdGlvbi5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMg
PSBub2RlLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPm1hcmtlcnNGb3JOb2RlKG5vZGUpOwotICAg
IHNpemVfdCBtYXJrZXJDb3VudCA9IG1hcmtlcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbWFya2VyQ291bnQ7ICsraSkgewotICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtl
ciYgbWFya2VyID0gbWFya2Vyc1tpXTsKLSAgICAgICAgaWYgKCgobWFya2VyLnR5cGUgPT0gRG9j
dW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJrZXIuZGVzY3JpcHRpb24uaXNOdWxsKCkp
IHx8IG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykgJiYgc3RhdGljX2Nh
c3Q8aW50PihtYXJrZXIuZW5kT2Zmc2V0KSA9PSBlbmRPZmZzZXQpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShmcmFtZSgpLT5kb2N1bWVudCgp
LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQsIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQpOwotICAg
ICAgICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7
Ci0gICAgICAgICAgICBpZiAoY3VycmVudFdvcmQubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSB3b3JkUmFuZ2U7Ci0g
ICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3Vy
cmVudFdvcmQ7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmtlci50eXBlID09IERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZykKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxU
aW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsK
LSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gbWFya2VyLmRlc2NyaXB0aW9uOwotICAgICAg
ICAgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZVJldmVyc2lvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlc3Bv
bmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rp
b24pCkBAIC01ODUsOSArNTAwLDcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250
ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAgICAgICAgICAg
ICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24o
bm9kZS0+cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIGZhbHNlKTsK
ICAgICB9CiAKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcKLSAgICByZW1vdmVTcGVs
bEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZCh0cnVlKTsKLSNlbmRpZgor
ICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogCiAgICAg
aWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRz
KCk7CkBAIC0xMDc0LDEwICs5ODcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoUGFz
c1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQogICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hh
bmdlZEV2ZW50cygqY21kKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQt
PmVuZGluZ1NlbGVjdGlvbigpKTsKIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwK
LSAgICBpZiAoY21kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjbWQtPnNob3VsZFJldGFpbkF1
dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1h
cmtlcnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRv
cik7Ci0jZW5kaWYKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9BcHBsaWVkRWRp
dGluZyhjbWQuZ2V0KCkpOwogCiAgICAgLy8gRG9uJ3QgY2xlYXIgdGhlIHR5cGluZyBzdHlsZSB3
aXRoIHRoaXMgc2VsZWN0aW9uIGNoYW5nZS4gIFdlIGRvIHRob3NlIHRoaW5ncyBlbHNld2hlcmUg
aWYgbmVjZXNzYXJ5LgogICAgIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rp
b24sIGZhbHNlLCBmYWxzZSk7CkBAIC0xMTM2LDE3ICsxMDQ2LDE0IEBAIEVkaXRvcjo6RWRpdG9y
KEZyYW1lKiBmcmFtZSkKICAgICAvLyBUaGlzIGlzIG9mZiBieSBkZWZhdWx0LCBzaW5jZSBtb3N0
IGVkaXRvcnMgd2FudCB0aGlzIGJlaGF2aW9yICh0aGlzIG1hdGNoZXMgSUUgYnV0IG5vdCBGRiku
CiAgICAgLCBtX3Nob3VsZFN0eWxlV2l0aENTUyhmYWxzZSkKICAgICAsIG1fa2lsbFJpbmcoYWRv
cHRQdHIobmV3IEtpbGxSaW5nKSkKLSAgICAsIG1fc3BlbGxDaGVja2VyKG5ldyBTcGVsbENoZWNr
ZXIoZnJhbWUsIGZyYW1lLT5wYWdlKCkgPyBmcmFtZS0+cGFnZSgpLT5lZGl0b3JDbGllbnQoKS0+
dGV4dENoZWNrZXIoKSA6IDApKQotICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAm
RWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKQorICAgICwgbV9zcGVsbENoZWNrZXIo
YWRvcHRQdHIobmV3IFNwZWxsQ2hlY2tlcihmcmFtZSwgZnJhbWUtPnBhZ2UoKSA/IGZyYW1lLT5w
YWdlKCktPmVkaXRvckNsaWVudCgpLT50ZXh0Q2hlY2tlcigpIDogMCkpKQorICAgICwgbV9zcGVs
bGluZ0NvcnJlY3RvcihhZG9wdFB0cihuZXcgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcihm
cmFtZSkpKQogICAgICwgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkKGZhbHNlKQog
ewogfQogCiBFZGl0b3I6On5FZGl0b3IoKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKLSAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWxJZ25vcmVkKTsKLSNlbmRpZgogfQogCiB2b2lkIEVkaXRvcjo6Y2xlYXIoKQpA
QCAtMTE3OSwxMCArMTA4Niw4IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRp
bmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgaWYgKCFz
aG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBl
ZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0jaWYgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElU
SU5HCiAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVtb3ZlU3BlbGxBbmRDb3Jy
ZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBd
KSk7Ci0jZW5kaWYKKyAgICAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcodGV4dFswXSk7CiAKICAgICBib29sIHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVj
dGlvbiA9IGZhbHNlOwogICAgIGlmICh0ZXh0ID09ICIgIiB8fCB0ZXh0ID09ICJcdCIpCkBAIC0x
MTkxLDcgKzEwOTYsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4
dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbgogICAgIGlmICh0ZXh0Lmxl
bmd0aCgpID09IDEgJiYgaXNQdW5jdCh0ZXh0WzBdKSAmJiAhaXNBbWJpZ3VvdXNCb3VuZGFyeUNo
YXJhY3Rlcih0ZXh0WzBdKSkKICAgICAgICAgc2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3Jy
ZWN0aW9uID0gdHJ1ZTsKIAotICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25XYXNBcHBsaWVkID0gc2hv
dWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0aW9uICYmIGFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbldhc0Fw
cGxpZWQgPSBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJlY3Rpb24gJiYgbV9zcGVsbGlu
Z0NvcnJlY3Rvci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUo
KTsKIAogICAgIC8vIEdldCB0aGUgc2VsZWN0aW9uIHRvIHVzZSBmb3IgdGhlIGV2ZW50IHRoYXQg
dHJpZ2dlcmVkIHRoaXMgaW5zZXJ0VGV4dC4KICAgICAvLyBJZiB0aGUgZXZlbnQgaGFuZGxlciBj
aGFuZ2VkIHRoZSBzZWxlY3Rpb24sIHdlIG1heSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBzZWxl
Y3Rpb24KQEAgLTEyMjcsNyArMTEzMiw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWso
KQogICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBh
cHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wg
YXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9j
b3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6
Omluc2VydExpbmVCcmVhayhtX2ZyYW1lLT5kb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBw
bGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7
CiAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKQEAgLTEyNDUs
NyArMTE1MCw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAg
IGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBhcHBseUF1
dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2Nv
cnJlY3Rpb25Jc0FwcGxpZWQgPSBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0
aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvcihtX2ZyYW1lLT5kb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklz
QXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDog
MCk7CiAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKQEAgLTEy
NjIsOSArMTE2Nyw3IEBAIHZvaWQgRWRpdG9yOjpjdXQoKQogICAgIH0KICAgICBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoc2hvdWxkRGVsZXRlUmFu
Z2Uoc2VsZWN0aW9uLmdldCgpKSkgewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwot
ICAgICAgICByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRl
ZCh0cnVlKTsKLSNlbmRpZgorICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5
RWRpdGluZyh0cnVlKTsKICAgICAgICAgaWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9sKG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICAgICAg
UGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQoc2VsZWN0ZWRU
ZXh0KCkpOwogICAgICAgICBlbHNlCkBAIC0xMzAzLDkgKzEyMDYsNyBAQCB2b2lkIEVkaXRvcjo6
cGFzdGUoKQogICAgICAgICByZXR1cm47IC8vIERIVE1MIGRpZCB0aGUgd2hvbGUgb3BlcmF0aW9u
CiAgICAgaWYgKCFjYW5QYXN0ZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgUkVNT1ZFX01BUktF
UlNfVVBPTl9FRElUSU5HCi0gICAgcmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21X
b3Jkc1RvQmVFZGl0ZWQoZmFsc2UpOwotI2VuZGlmCisgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRz
QWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogICAgIGxv
YWRlci0+c2V0QWxsb3dTdGFsZVJlc291cmNlcyh0cnVlKTsKICAgICBpZiAobV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCkBAIC0xMzIxLDkgKzEyMjIsNyBA
QCB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dCgpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAoIWNhblBhc3RlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9O
X0VESVRJTkcKLSAgICByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9C
ZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKFBh
c3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCkpOwogfQogCkBAIC0xNDc2LDcgKzEzNzUsNyBA
QCB2b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50KCkKIAogYm9vbCBF
ZGl0b3I6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCiB7Ci0gICAgcmV0
dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVu
YWJsZWQoKTsKKyAgICByZXR1cm4gbV9zcGVsbGluZ0NvcnJlY3Rvci0+aXNBdXRvbWF0aWNTcGVs
bGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7CiB9CiAKIHZvaWQgRWRpdG9yOjp0b2dnbGVBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb24oKQpAQCAtMjA2OCwyMyArMTk2Nyw4IEBAIHZvaWQgRWRpdG9y
OjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZt
b3ZpbmdTZWxlY3RpCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9X
b3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZykKIHsKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNL
SU5HKQotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICAvLyBBcHBseSBwZW5k
aW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSBuZXh0IHJvdW5kIG9mIHNwZWxsIGNoZWNraW5nLgot
ICAgIGJvb2wgZG9BcHBseUNvcnJlY3Rpb24gPSB0cnVlOwotICAgIFZpc2libGVQb3NpdGlvbiBz
dGFydE9mU2VsZWN0aW9uID0gc2VsZWN0aW9uQWZ0ZXJUeXBpbmcudmlzaWJsZVN0YXJ0KCk7Ci0g
ICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50V29yZCA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRP
ZldvcmQoc3RhcnRPZlNlbGVjdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQo
c3RhcnRPZlNlbGVjdGlvbiwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7Ci0gICAgaWYgKGN1cnJl
bnRXb3JkLnZpc2libGVFbmQoKSA9PSBzdGFydE9mU2VsZWN0aW9uKSB7Ci0gICAgICAgIFN0cmlu
ZyB3b3JkVGV4dCA9IHBsYWluVGV4dChjdXJyZW50V29yZC50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKTsKLSAgICAgICAgaWYgKHdvcmRUZXh0Lmxlbmd0aCgpID4gMCAmJiBpc0FtYmlndW91c0Jv
dW5kYXJ5Q2hhcmFjdGVyKHdvcmRUZXh0W3dvcmRUZXh0Lmxlbmd0aCgpIC0gMV0pKQotICAgICAg
ICAgICAgZG9BcHBseUNvcnJlY3Rpb24gPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGRvQXBwbHlD
b3JyZWN0aW9uKQotICAgICAgICBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2Vw
dGVkKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuY2xlYXIoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVy
VHlwaW5nKTsKLSNlbmRpZgorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5UGVuZGluZ0Nv
cnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOworCiAgICAgVGV4dENoZWNraW5nT3B0aW9u
cyB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gMDsKICAgICBpZiAoaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoKSkKICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBNYXJrU3BlbGxp
bmc7CkBAIC0yMTEzLDcgKzE5OTcsNiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgIH0K
IAogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwogICAgIGlm
ICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0yMjIyLDcgKzIxMDUsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogewogI2lmIFVT
RShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAgICAgLy8gVGhlcmUgc2hvdWxkbid0IGJlIHBlbmRp
bmcgYXV0b2NvcnJlY3Rpb24gYXQgdGhpcyBtb21lbnQuCi0gICAgQVNTRVJUKCFtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpOworICAgIEFTU0VSVCghbV9zcGVsbGluZ0Nv
cnJlY3Rvci0+aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSk7CiAKICAgICBib29sIHNob3VsZE1hcmtT
cGVsbGluZyA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBNYXJrU3BlbGxpbmc7CiAgICAgYm9vbCBz
aG91bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBNYXJrR3JhbW1hcjsKQEAg
LTIyODEsMTEgKzIxNjQsOSBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJh
ZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q2hlY2tpbmdUeXBlTWFza0Zvcih0
ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7CiAgICAgICAgIAogCi0jaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAogICAgIC8vIElmIHRoaXMgY2hlY2tpbmcgaXMgb25seSBmb3Ig
c2hvd2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBzaG91bGRuJ3QgYm90aGVyIHRvIG1hcmsgbWlz
c3BlbGxpbmdzLgogICAgIGlmIChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKQogICAgICAgICBz
aG91bGRNYXJrU3BlbGxpbmcgPSBmYWxzZTsKLSNlbmRpZgogCiAgICAgaW50IG9mZnNldER1ZVRv
UmVwbGFjZW1lbnQgPSAwOwogCkBAIC0yMzA0LDEwICsyMTg1LDggQEAgdm9pZCBFZGl0b3I6Om1h
cmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9u
cyB0ZXh0Q2gKICAgICAgICAgaWYgKHNob3VsZE1hcmtTcGVsbGluZyAmJiByZXN1bHQtPnR5cGUg
PT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdExvY2F0aW9uID49IHNwZWxsaW5n
UGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0
aCA8PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmICFyZXN1bHRFbmRzQXRBbWJpZ3VvdXNCb3Vu
ZGFyeSkgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9j
YXRpb24gPj0gMCk7CiAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2Ug
PSBzcGVsbGluZ1BhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3Ro
KTsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgICAgICAgICBpZiAobV9m
cmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKSkKKyAgICAgICAg
ICAgIGlmICghbV9zcGVsbGluZ0NvcnJlY3Rvci0+aXNTcGVsbGluZ01hcmtlckFsbG93ZWQobWlz
c3BlbGxpbmdSYW5nZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0jZW5kaWYgLy8gU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+
c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihtaXNz
cGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZE1hcmtHcmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tp
bmdUeXBlR3JhbW1hciAmJiBncmFtbWFyUGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMocmVz
dWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCkpIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRM
ZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49IDApOwpAQCAtMjM1Myw3ICsyMjMyLDcgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4
dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICAgICAgICAgICAgICBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIqIG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKG1hcmtlcnMtPmhhc01hcmtlcnMocmFuZ2VUb1JlcGxhY2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgZG9S
ZXBsYWNlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNr
ZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVRvUmVwbGFjZS5nZXQoKSwgcmVw
bGFjZWRTdHJpbmcsIHJlc3VsdC0+cmVwbGFjZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBt
X3NwZWxsaW5nQ29ycmVjdG9yLT5yZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVk
Q29ycmVjdGlvbihyYW5nZVRvUmVwbGFjZS5nZXQoKSwgcmVwbGFjZWRTdHJpbmcsIHJlc3VsdC0+
cmVwbGFjZW1lbnQpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWFya2Vycy0+aGFzTWFy
a2VycyhyYW5nZVRvUmVwbGFjZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVj
dGlvbikpCiAgICAgICAgICAgICAgICAgICAgIGRvUmVwbGFjZW1lbnQgPSBmYWxzZTsKICAgICAg
ICAgICAgIH0KQEAgLTIzNjEsMjQgKzIyNDAsMTcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gK
ICAgICAgICAgICAgIGlmICghKHNob3VsZFBlcmZvcm1SZXBsYWNlbWVudCB8fCBzaG91bGRTaG93
Q29ycmVjdGlvblBhbmVsKSB8fCAhZG9SZXBsYWNlbWVudCkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAgICAgIGlm
IChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKFNV
UFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwpOworICAgICAgICAgICAgICAgIC8vIHNob3VsZFNo
b3dDb3JyZWN0aW9uUGFuZWwgY2FuIGJlIHRydWUgb25seSB3aGVuIHRoZSBwYW5lbCBpcyBhdmFp
bGFibGUuCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3Ro
ID09IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
b25seSBzaG93IHRoZSBjb3JyZWN0aW9uIHBhbmVsIG9uIHRoZSBsYXN0IHdvcmQuCi0gICAgICAg
ICAgICAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShy
YW5nZVRvUmVwbGFjZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChib3VuZGluZ0Jv
eC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gcmFuZ2VU
b1JlcGxhY2U7Ci0gICAgICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IHJlc3Vs
dC0+cmVwbGFjZW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29y
cmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94
LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHJlc3VsdC0+cmVwbGFjZW1l
bnQsIFZlY3RvcjxTdHJpbmc+KCkpOworICAgICAgICAgICAgICAgICAgICBtX3NwZWxsaW5nQ29y
cmVjdG9yLT5zaG93KHJhbmdlVG9SZXBsYWNlLCByZXN1bHQtPnJlcGxhY2VtZW50KTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IC8vIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBzaG93aW5nIGNvcnJlY3Rpb24gcGFu
ZWwsIHdlIGlnbm9yZSBvdGhlciBjb3JyZWN0aW9uIG9yIHJlcGxhY2VtZW50LgogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotI2VuZGlmCiAKICAgICAgICAgICAgIGlm
IChzZWxlY3Rpb25Ub1JlcGxhY2UgIT0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSkpCkBAIC0yMzkyLDEyICsyMjY0LDcgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4
dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICAgICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hs
eSgpKQogICAgICAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQoQ3JlYXRlTGlua0NvbW1hbmQ6
OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCByZXN1bHQtPnJlcGxhY2VtZW50KSk7CiAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRUZXh0KHJlc3VsdC0+
cmVwbGFjZW1lbnQsIHJhbmdlVG9SZXBsYWNlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBl
ZCkpIHsKLSAgICAgICAgICAgICAgICBib29sIHVzZVNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQg
PSBmYWxzZTsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikKLSAgICAg
ICAgICAgICAgICAgICAgdXNlU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCA9IHRydWU7Ci0jZW5k
aWYKLSAgICAgICAgICAgICAgICBpZiAodXNlU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCkKICAg
ICAgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6
OmNyZWF0ZShyYW5nZVRvUmVwbGFjZSwgcmVzdWx0LT5yZXBsYWNlbWVudCkpOwogICAgICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CkBAIC0yNDE3LDE5ICsyMjg0LDkgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4
dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICAgICAgICAgICAgICAgICAgICAgIGFtYmlndW91
c0JvdW5kYXJ5T2Zmc2V0ID0gc2VsZWN0aW9uT2Zmc2V0IC0gMTsKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVD
b3JyZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhIG1hcmtlciBzbyB0aGF0
IGNvcnJlY3Rpb25zIGNhbiBlYXNpbHkgYmUgdW5kb25lIGFuZCB3b24ndCBiZSByZS1jb3JyZWN0
ZWQuCi0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSA9IHNw
ZWxsaW5nUGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0
aCk7Ci0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gbWFya2VyVHlwZXNUb0FkZCA9IG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKTsKLSAg
ICAgICAgICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVw
bGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAg
ICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlclR5cGVzVG9BZGQu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIG1hcmtlclR5cGUgPSBtYXJrZXJUeXBlc1RvQWRkW2ldOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0
KCksIG1hcmtlclR5cGUsIHJlcGxhY2VkU3RyaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVw
bGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQg
Y29ycmVjdGlvbnMgY2FuIGVhc2lseSBiZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3Rl
ZC4KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVD
b3JyZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5tYXJr
Q29ycmVjdGlvbihzcGVsbGluZ1BhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVw
bGFjZW1lbnRMZW5ndGgpLCByZXBsYWNlZFN0cmluZyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CkBAIC0yNDU2LDMwICsyMzEzLDYgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gK
ICNlbmRpZiAvLyBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogfQogCi12b2lkIEVkaXRvcjo6
cmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJh
bmdlT2ZDb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBj
b3JyZWN0aW9uKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBpZiAo
IXJhbmdlT2ZDb3JyZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyKiBtYXJrZXJzID0gcmFuZ2VPZkNvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkt
PmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IGNvcnJl
Y3RlZE9uY2VNYXJrZXJzID0gbWFya2Vycy0+bWFya2Vyc0luUmFuZ2UocmFuZ2VPZkNvcnJlY3Rp
b24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKLSAgICBpZiAoY29ycmVjdGVkT25j
ZU1hcmtlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gU3BlbGxp
bmcgY29ycmVjdGVkIHRleHQgaGFzIGJlZW4gZWRpdGVkLiBXZSBuZWVkIHRvIGRldGVybWluZSB3
aGV0aGVyIHVzZXIgaGFzIHJldmVydGVkIGl0IHRvIG9yaWdpbmFsIHRleHQgb3IKLSAgICAvLyBl
ZGl0ZWQgaXQgdG8gc29tZXRoaW5nIGVsc2UsIGFuZCBub3RpZnkgc3BlbGxjaGVja2VyIGFjY29y
ZGluZ2x5LgotICAgIGlmIChtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNvcnJlY3Rl
ZE9uY2VNYXJrZXJzKSAmJiBjb3JyZWN0ZWRPbmNlTWFya2Vyc1swXS5kZXNjcmlwdGlvbiA9PSBj
b3JyZWN0ZWQpCi0gICAgICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNl
KEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0
aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25FZGl0ZWQsIGNvcnJlY3RlZCwgY29y
cmVjdGlvbik7Ci0gICAgbWFya2Vycy0+cmVtb3ZlTWFya2VycyhyYW5nZU9mQ29ycmVjdGlvbiwg
RG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0ocmFuZ2VPZkNvcnJlY3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOwotICAg
IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsKLSNlbmRpZgotfQotCiB2b2lkIEVkaXRvcjo6Y2hh
bmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKIHsK
ICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQpAQCAtMjQ5MCwxOCArMjMyMywxMiBAQCB2
b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZykKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRTdHJpbmcsIHNl
bGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBTdHJpbmcgcmVw
bGFjZW1lbnQgPSBwbGFpblRleHQoc2VsZWN0aW9uLmdldCgpKTsKLSAgICBjbGllbnQoKS0+cmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2
ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudCk7Ci0jZW5kaWYKKyAgICBtX3NwZWxs
aW5nQ29ycmVjdG9yLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQocmVwbGFj
ZWRTdHJpbmcsIHNlbGVjdGlvbik7CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFw
aChzZWxlY3Rpb24pOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmlu
ZywgZmFsc2UsIGZhbHNlKTsKICAgICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IHBhcmFn
cmFwaC5zdWJyYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5s
ZW5ndGgoKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+cmVtb3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpB
dXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92
ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRv
Y3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotI2VuZGlmCisgICAgbV9zcGVsbGlu
Z0NvcnJlY3Rvci0+bWFya1JldmVyc2VkKGNoYW5nZWRSYW5nZS5nZXQoKSk7CiAjZWxzZQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7
CkBAIC0yNTI2LDE0MCArMjM1MywxNiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3BlbGxpbmdTZWxlYwogI2VuZGlm
CiB9CiAKLXZvaWQgRWRpdG9yOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPEVkaXRv
cj4qKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBtX2NvcnJlY3Rp
b25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKG1fY29ycmVj
dGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24oZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKLSAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0g
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZP
bkJvdW5kYXJ5KTsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlz
aWJsZVNlbGVjdGlvbihwLCBzdGFydCk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMoTWFya1NwZWxsaW5nIHwgU2hvd0NvcnJlY3Rpb25QYW5lbCwgYWRq
YWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCAwKTsKLSAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9u
OiB7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0gICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBGbG9h
dFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRT
dHJpbmcsIFZlY3RvcjxTdHJpbmc+KCkpOwotICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOiB7Ci0g
ICAgICAgIGlmIChwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLmdldCgpKSAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQo
VGV4dENoZWNraW5nUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCkucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1
Z2dlc3Rpb25zOwotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHBhcmFncmFwaFRleHQsIHN1Z2dlc3Rp
b25zKTsKLSAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1
Z2dlc3Rpb25zLmZpcnN0KCk7Ci0gICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKLSAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRS
ZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIGlmICghYm91bmRpbmdCb3guaXNF
bXB0eSgpKQotICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yZXBsYWNlZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOwotICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgRWRpdG9yOjpoYW5kbGVD
b3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQotewotICAgIFJh
bmdlKiByZXBsYWNlZFJhbmdlID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLmdldCgpOwotICAgIGlmICghcmVwbGFjZWRSYW5nZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgp
ICE9IHJlcGxhY2VkUmFuZ2UtPm93bmVyRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB3b3Jk
IHdlIGFyZSBhYm91dCB0byBjb3JyZWN0IGhhcyBiZWVuIGNoYW5nZWQgYmV0d2VlbiB0aW1lciBm
aXJpbmcgYW5kIGNhbGxiYWNrIGJlaW5nIHRyaWdnZXJlZC4KLSAgICBpZiAoY3VycmVudFdvcmQg
IT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLQotICAgIHN3
aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbjoKLSAgICAgICAgaWYgKGNvcnJlY3Rp
b24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
bWVudFN0cmluZyA9IGNvcnJlY3Rpb247Ci0gICAgICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5l
bEluZm8obWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yKQot
ICAgICAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50
KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpS
ZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZv
OjpQYW5lbFR5cGVSZXZlcnNpb246Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgotICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgo
KSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5n
ID0gY29ycmVjdGlvbjsKLSAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJr
ZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigp
OwotfQotCi12b2lkIEVkaXRvcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSkKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMCi0gICAgY29uc3QgZG91YmxlIGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwgPSAw
LjM7Ci0gICAgaWYgKGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKSB7Ci0g
ICAgICAgIGlmICh0eXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rp
b24pCi0gICAgICAgICAgICAvLyBJZiB0eXBlIGlzIFBhbmVsVHlwZVJldmVyc2lvbiwgdGhlbiB0
aGUgbmV3IHJhbmdlIGhhcyBiZWVuIHNldC4gU28gd2Ugc2hvdWxkbid0IGNsZWFyIGl0LgotICAg
ICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7
Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPSB0eXBlOwotICAgICAg
ICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0YXJ0T25lU2hvdChjb3JyZWN0aW9uUGFuZWxUaW1l
ckludGVydmFsKTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSNlbmRp
ZgotfQotCi12b2lkIEVkaXRvcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKK3ZvaWQgRWRp
dG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24pCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIG1f
Y29ycmVjdGlvblBhbmVsVGltZXIuc3RvcCgpOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotI2VuZGlmCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rv
ci0+cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVk
LCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogfQogCi12b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRp
c21pc3NpbmcpCit2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpCiB7Ci0jaWYg
U1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLmlzQWN0aXZlKQorICAgIGlmICghbV9zcGVsbGluZ0NvcnJlY3Rvci0+c2hvdWxkUmVtb3Zl
TWFya2Vyc1Vwb25FZGl0aW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlz
c2VkQnlFZGl0b3IgPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCkt
PmRpc21pc3NDb3JyZWN0aW9uUGFuZWwocmVhc29uRm9yRGlzbWlzc2luZyk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLSNlbmRpZgotfQotCi1TdHJpbmcg
RWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCi17Ci0jaWYgU1VQUE9SVF9BVVRPQ09S
UkVDVElPTl9QQU5FTAotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0g
dHJ1ZTsKLSAgICBpZiAoIWNsaWVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAg
cmV0dXJuIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihyZWFzb25Gb3JEaXNt
aXNzaW5nKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlYXNvbkZvckRpc21pc3NpbmcpOwot
ICAgIHJldHVybiBTdHJpbmcoKTsKLSNlbmRpZgotfQogCi12b2lkIEVkaXRvcjo6cmVtb3ZlU3Bl
bGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoYm9vbCBkb05vdFJlbW92
ZUlmU2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpCi17CiAgICAgLy8gV2Ugd2FudCB0byByZW1vdmUg
dGhlIG1hcmtlcnMgZnJvbSBhIHdvcmQgaWYgYW4gZWRpdGluZyBjb21tYW5kIHdpbGwgY2hhbmdl
IHRoZSB3b3JkLiBUaGlzIGNhbiBoYXBwZW4gaW4gb25lIG9mCiAgICAgLy8gc2V2ZXJhbCBzY2Vu
YXJpb3M6CiAgICAgLy8gMS4gSW5zZXJ0IGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkLgpAQCAtMjcy
NSwxMDMgKzI0MjgsNiBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFy
a2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoYm9vbCBkb05vdFJlbW92ZQogICAgIGRvY3VtZW50LT5t
YXJrZXJzKCktPmNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZSh3b3Jk
UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiB9CiAKLXZvaWQgRWRp
dG9yOjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JS
RUNUSU9OX1BBTkVMCi0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAg
aWYgKGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5k
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBo
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSkp
OwotCi0gICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVS
ZXBsYWNlZCwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgotICAgIC8vIEhv
d2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5n
ZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KLSAgICAvLyBTbyBiZWZvcmUgd2Ug
Y2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9z
aXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQKLSAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKLSAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRl
ciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UK
LSAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0
YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkLgotICAgIFJlZlB0cjxSYW5nZT4gY29y
cmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3Vt
ZW50KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24o
KSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsK
LSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRp
b25PZlJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGhBc1JhbmdlLT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29u
dGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28g
dGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4K
LSAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQo
KSk7Ci0KLSAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBt
ZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgotICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOwotICAgIGFwcGx5Q29tbWFuZChTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkuc3RhcnQoKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4
dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdl
dCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nIG5ld1RleHQgPSBw
bGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUg
aWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVkLgotICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRD
b250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIHNpemVfdCBzaXplID0gbWFy
a2VyVHlwZXNUb0FkZC5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1h
cmtlclR5cGVzVG9BZGRbaV07Ci0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKLSAgICAgICAg
aWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlUmV2ZXJzaW9uICYmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVk
KSkKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VkU3RyaW5nOwotICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5n
ZXQoKSwgbWFya2VyVHlwZSwgZGVzY3JpcHRpb24pOwotICAgIH0KLSNlbHNlIC8vIFNVUFBPUlRf
QVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBVTlVTRURfUEFSQU0obWFya2VyVHlwZXNUb0FkZCk7
Ci0jZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotfQotCi1ib29sIEVkaXRv
cjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQotewotICAg
IGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkIHx8ICFtX2NvcnJl
Y3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlICE9IENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZUNvcnJlY3Rpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBvc2l0
aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3Rh
cnQoKTsKLQotICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQt
PmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbikgewotICAgICAgICBoYW5kbGVDb3JyZWN0
aW9uUGFuZWxSZXN1bHQoZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0gCi0gICAgCi0gICAgLy8gUGVuZGluZyBjb3JyZWN0aW9uIHNob3VsZCBhbHdheXMgYmUgd2hl
cmUgY2FyZXQgaXMuIEJ1dCBpbiBjYXNlIHRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCB3ZSBzdGls
bCB3YW50IHRvIGRpc21pc3MgdGhlIHBhbmVsIHdpdGhvdXQgYWNjZXB0aW5nIHRoZSBjb3JyZWN0
aW9uLgotICAgIEFTU0VSVChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQt
PmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7Ci0gICAgZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIEVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQotewotI2lmIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwKLSAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29y
cmVjdGlvbik7Ci0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwg
U2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpD
bGVhclR5cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9uVHJp
Z2dlcmVkKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1l
LT5kb2N1bWVudCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSwg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmVuZCgpKTsKLQotICAgIERvY3VtZW50
TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMo
KTsKLSAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgbWFy
a2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQp
OwotICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotI2Vsc2UgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9Q
QU5FTAotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25PZkNvcnJlY3RlZCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGNvcnJlY3RlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOwotI2VuZGlm
IC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLX0KLQogUGFzc1JlZlB0cjxSYW5nZT4g
RWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudEF0UG9pbnQod2luZG93UG9p
bnQpOwpAQCAtMjk0NCw2ICsyNTUwLDIyIEBAIHZvaWQgRWRpdG9yOjphZGRUb0tpbGxSaW5nKFJh
bmdlKiByYW5nZSwgYm9vbCBwcmVwZW5kKQogICAgIG1fc2hvdWxkU3RhcnROZXdLaWxsUmluZ1Nl
cXVlbmNlID0gZmFsc2U7CiB9CiAKK3ZvaWQgRWRpdG9yOjpzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKCkKK3sKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5zdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pOworfQorCit2b2lk
IEVkaXRvcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVj
dGlvbikKK3sKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxS
ZXN1bHQoY29ycmVjdGlvbik7Cit9CisKKwordm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9u
UGFuZWxBc0lnbm9yZWQoKQoreworICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmRpc21pc3MoUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworfQorCiBib29sIEVkaXRv
cjo6aW5zaWRlVmlzaWJsZUFyZWEoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewogICAg
IGlmIChtX2ZyYW1lLT5leGNsdWRlRnJvbVRleHRTZWFyY2goKSkKQEAgLTM1MTYsMTQgKzMxMzgs
NyBAQCB2b2lkIEVkaXRvcjo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29s
IGZsYWcpCiAKIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2V0U2Vs
ZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJl
Zm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCi0gICAg
VmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKGZyYW1lKCktPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKSk7Ci0gICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gIT0gb2xkU2VsZWN0aW9uKSB7
Ci0gICAgICAgIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOwotICAgICAgICBkaXNtaXNzQ29y
cmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsK
LSAgICB9Ci0jZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorICAgIG1fc3Bl
bGxpbmdDb3JyZWN0b3ItPnN0b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRTZWxlY3Rpb24pOwogCiAg
ICAgYm9vbCBjbG9zZVR5cGluZyA9IG9wdGlvbnMgJiBTZWxlY3Rpb25Db250cm9sbGVyOjpDbG9z
ZVR5cGluZzsKICAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gdGhp
cy0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKQEAgLTM1NDAsMTAgKzMxNTUs
OCBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIFNlbAogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBz
aG91bGRDaGVja1NwZWxsaW5nQW5kR3JhbW1hciA9IHRydWU7Ci0jaWYgU1VQUE9SVF9BVVRPQ09S
UkVDVElPTl9QQU5FTAogICAgICAgICAvLyBEb24ndCBjaGVjayBzcGVsbGluZyBhbmQgZ3JhbW1h
ciBpZiB0aGUgY2hhbmdlIG9mIHNlbGVjdGlvbiBpcyB0cmlnZ2VyZWQgYnkgc3BlbGxpbmcgY29y
cmVjdGlvbiBpdHNlbGYuCiAgICAgICAgIHNob3VsZENoZWNrU3BlbGxpbmdBbmRHcmFtbWFyID0g
IShvcHRpb25zICYgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVk
KTsKLSNlbmRpZgogCiAgICAgICAgIC8vIFdoZW4gdHlwaW5nIHdlIGNoZWNrIHNwZWxsaW5nIGVs
c2V3aGVyZSwgc28gZG9uJ3QgcmVkbyBpdCBoZXJlLgogICAgICAgICAvLyBJZiB0aGlzIGlzIGEg
Y2hhbmdlIGluIHNlbGVjdGlvbiByZXN1bHRpbmcgZnJvbSBhIGRlbGV0ZSBvcGVyYXRpb24sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBmOWFlYzQwNjkwYTAxZjNhMzg3ODU1Y2EyMmEwNjU3
ZTc0NWFiMzE1Li44YjkxMTUzMWQzMTUzMzEwOTAwM2VkOTU4NWU2NTAzZTgxNTVmNDM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNsaXBi
b2FyZEFjY2Vzc1BvbGljeS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiQ29ycmVj
dGlvblBhbmVsSW5mby5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCiAjaW5jbHVkZSAi
RWRpdEFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvci5oIgpAQCAtNTEsNiArNTAs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjsKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBDbGlwYm9hcmQ7CitjbGFzcyBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOwogY2xhc3MgRGVsZXRlQnV0dG9uQ29udHJvbGxl
cjsKIGNsYXNzIEVkaXRDb21tYW5kOwogY2xhc3MgRWRpdG9yQ2xpZW50OwpAQCAtMzI1LDEwICsz
MjUsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRUb0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBw
cmVwZW5kKTsKIAotICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUpOworICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1l
cigpOwogICAgIC8vIElmIHVzZXIgY29uZmlybWVkIGEgY29ycmVjdGlvbiBpbiB0aGUgY29ycmVj
dGlvbiBwYW5lbCwgY29ycmVjdGlvbiBoYXMgbm9uLXplcm8gbGVuZ3RoLCBvdGhlcndpc2UgaXQg
bWVhbnMgdGhhdCB1c2VyIGhhcyBkaXNtaXNzZWQgdGhlIHBhbmVsLgogICAgIHZvaWQgaGFuZGxl
Q29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7Ci0gICAgdm9p
ZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWwpOworICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpOwogCiAgICAg
dm9pZCBwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgYm9vbCBz
bWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7CiAgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYsIGJvb2wgc21hcnRSZXBsYWNlKTsKQEAgLTM4NCw3ICszODQsNyBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgc2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdDsKLSAg
ICB2b2lkIHJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVk
KGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KTsKKyAgICB2b2lkIHVw
ZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wgb25seUhhbmRsZVdvcmRz
Q29udGFpbmluZ1NlbGVjdGlvbik7CiAKIHByaXZhdGU6CiAgICAgRnJhbWUqIG1fZnJhbWU7CkBA
IC0zOTksMTAgKzM5OSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN0YXJ0TmV3S2ls
bFJpbmdTZXF1ZW5jZTsKICAgICBib29sIG1fc2hvdWxkU3R5bGVXaXRoQ1NTOwogICAgIE93blB0
cjxLaWxsUmluZz4gbV9raWxsUmluZzsKLSAgICBDb3JyZWN0aW9uUGFuZWxJbmZvIG1fY29ycmVj
dGlvblBhbmVsSW5mbzsKICAgICBPd25QdHI8U3BlbGxDaGVja2VyPiBtX3NwZWxsQ2hlY2tlcjsK
LSAgICBUaW1lcjxFZGl0b3I+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7Ci0gICAgYm9vbCBtX2Nv
cnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7CisgICAgT3duUHRyPFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI+IG1fc3BlbGxpbmdDb3JyZWN0b3I7CiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBtX21hcms7CiAgICAgYm9vbCBtX2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQ7
CiAKQEAgLTQxNyw3ICs0MTUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmV2ZWFsU2VsZWN0aW9u
QWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRH
cmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0
cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgVGV4dENoZWNraW5nVHlwZU1h
c2sgdGV4dENoZWNraW5nVHlwZU1hc2tGb3IoVGV4dENoZWNraW5nT3B0aW9ucyk7Ci0gICAgdm9p
ZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSos
IGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogCiAg
ICAgdm9pZCBzZWxlY3RDb21wb3NpdGlvbigpOwogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9u
KGNvbnN0IFN0cmluZyYsIGJvb2wgcHJlc2VydmVTZWxlY3Rpb24pOwpAQCAtNDI4LDEwICs0MjUs
MTAgQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBuZXh0VmlzaWJsZVJhbmdlKFJh
bmdlKiwgY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMpOwogCiAgICAgdm9pZCBjaGFuZ2VTZWxl
Y3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBi
b29sIGNsb3NlVHlwaW5nLCBib29sIGNsZWFyVHlwaW5nU3R5bGUpOwotICAgIHZvaWQgY29ycmVj
dGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxFZGl0b3I+Kik7CisKICAgICBOb2RlKiBmaW5kRXZl
bnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzdG9wQ29ycmVjdGlvblBh
bmVsVGltZXIoKTsKLSAgICBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CisKICAgICB2b2lkIGFwcGx5Q29ycmVjdGlv
blBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJr
ZXJUeXBlc1RvQWRkKTsKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdhcyBhcHBs
aWVkLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3Jl
VHlwaW5nSWZBcHByb3ByaWF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYWZlNzRhOGQ5ODRjY2UxMjc4Mjli
MjVjZTQ0ZTU4OTM5OTdjOTI5MC4uZjAyOTdjMTU0OGQwOWVjMTgxZmM1YjIxMTkxZTc1OTljYjkw
ODc3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgogCi0jaW5jbHVkZSAiQ29ycmVj
dGlvblBhbmVsSW5mby5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTFiNTgwZDFlYjA1NDFhN2Q1MTlkMDg5YWE3Nzg2ZWM4ZDBhNjUwOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5jcHAKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiRWRpdENvbW1hbmQuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgorI2luY2x1ZGUg
IlRleHRDaGVja2luZ0hlbHBlci5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1
ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAidmlzaWJs
ZV91bml0cy5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIHN0
ZDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BB
TkVMCisKK3N0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBt
YXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yQXV0b0Nv
cnJlY3Rpb24sICgpKTsKKyAgICBpZiAobWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9j
dW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29y
cmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworICAg
ICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6
U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJl
Y3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKKyAgICB9CisgICAg
cmV0dXJuIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb247Cit9CisKK3N0YXRpYyBjb25zdCBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvclJlcGxhY2Vt
ZW50KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQsICgpKTsKKyAgICBpZiAobWFy
a2VyVHlwZXNGb3JSZXBsYWNlbWVudC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbWFya2VyVHlwZXNG
b3JSZXBsYWNlbWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICAg
ICAgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JSZXBs
YWNlbWVudDsKK30KKworc3RhdGljIGJvb2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlv
bihjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzKQoreworICAgIGlmIChtYXJr
ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBTdHJpbmcm
IGRlc2NyaXB0aW9uID0gbWFya2Vyc1swXS5kZXNjcmlwdGlvbjsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMTsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0aW9u
ICE9IG1hcmtlcnNbaV0uZGVzY3JpcHRpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJh
bWUoZnJhbWUpCisgICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyKHRoaXMsICZTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKQoreworfQorCitT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cigpCit7CisgICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdu
b3JlZCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RhcnRDb3Jy
ZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSkKK3sK
KyAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsKKyAg
ICBpZiAoIWlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBJZiB0eXBlIGlzIFBhbmVsVHlwZVJldmVyc2lvbiwgdGhlbiB0aGUg
bmV3IHJhbmdlIGhhcyBiZWVuIHNldC4gU28gd2Ugc2hvdWxkbid0IGNsZWFyIGl0LgorICAgIGlm
ICh0eXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pCisgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPSB0eXBlOworICAgIG1fY29ycmVjdGlv
blBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwpOwor
fQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BDb3JyZWN0aW9uUGFu
ZWxUaW1lcigpCit7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdG9wKCk7CisgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK3ZvaWQg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhl
cmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50
U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgaWYgKGN1
cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBz
dG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjphcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbkFmdGVyVHlwaW5nKQoreworICAgIC8vIEFwcGx5IHBlbmRpbmcgYXV0b2NvcnJl
Y3Rpb24gYmVmb3JlIG5leHQgcm91bmQgb2Ygc3BlbGwgY2hlY2tpbmcuCisgICAgYm9vbCBkb0Fw
cGx5Q29ycmVjdGlvbiA9IHRydWU7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rp
b24gPSBzZWxlY3Rpb25BZnRlclR5cGluZy52aXNpYmxlU3RhcnQoKTsKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIGN1cnJlbnRXb3JkID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChzdGFydE9m
U2VsZWN0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChzdGFydE9mU2VsZWN0
aW9uLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICBpZiAoY3VycmVudFdvcmQudmlzaWJs
ZUVuZCgpID09IHN0YXJ0T2ZTZWxlY3Rpb24pIHsKKyAgICAgICAgU3RyaW5nIHdvcmRUZXh0ID0g
cGxhaW5UZXh0KGN1cnJlbnRXb3JkLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgICAg
ICBpZiAod29yZFRleHQubGVuZ3RoKCkgPiAwICYmIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0
ZXIod29yZFRleHRbd29yZFRleHQubGVuZ3RoKCkgLSAxXSkpCisgICAgICAgICAgICBkb0FwcGx5
Q29ycmVjdGlvbiA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZG9BcHBseUNvcnJlY3Rpb24pIHsK
KyAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOyAKKyAgICAgICAgZGlzbWlzcyhS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpOworICAgIH0gZWxzZQor
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsK
K30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVj
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZDsKK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1Nw
ZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBj
b25zdAoreworICAgIHJldHVybiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5oYXNN
YXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNr
aW5nRXhlbXB0aW9uKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpz
aG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50KQoreworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5n
ZShyYW5nZVRvUmVwbGFjZS5nZXQoKSk7CisgICAgaWYgKGJvdW5kaW5nQm94LmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCA9IHJhbmdlVG9SZXBsYWNlOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
ZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7CisgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZW1lbnQ7CisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICBjbGllbnQoKS0+c2hvd0NvcnJl
Y3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudCwgVmVjdG9y
PFN0cmluZz4oKSk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFu
ZGxlQ2FuY2VsT3BlcmF0aW9uKCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0Fj
dGl2ZSA9IGZhbHNlOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbENhbmNlbGxlZCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21p
c3NpbmcpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsK
KyAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSB0cnVlOworICAgIGlm
IChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwocmVh
c29uRm9yRGlzbWlzc2luZyk7Cit9CisKK1N0cmluZyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNv
bkZvckRpc21pc3NpbmcpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3Rp
dmUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUgPSBmYWxzZTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0
b3IgPSB0cnVlOworICAgIGlmICghY2xpZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICByZXR1cm4gY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKHJlYXNvbkZv
ckRpc21pc3NpbmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFw
cGx5Q29ycmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGU+JiBtYXJrZXJUeXBlc1RvQWRkKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25l
UmFuZ2UoZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U3RhcnQo
cGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFw
aChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24o
KSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgp
LCBlbmRPZlBhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQt
PmVuZFBvc2l0aW9uKCkpKTsKKworICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQg
cmFuZ2UgcmFuZ2VUb0JlUmVwbGFjZWQsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCBy
YW5nZS4KKyAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0
aGUgdmFsdWUgb2YgcmFuZ2VUb0JlUmVwbGFjZWQgaXMgbm90IHZhbGlkIGFueW1vcmUuCisgICAg
Ly8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQgdG8gc3Rv
cmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkCisgICAgLy8gcmVsYXRp
dmUgdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2Ug
dXNlIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoCisgICAgLy8gdG8gc3RvcmUgdGhp
cyB2YWx1ZS4gSW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZpcnN0
IGNyZWF0ZSBhIHJhbmdlCisgICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFy
YWdyYXBoIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZC4KKyAgICBS
ZWZQdHI8UmFuZ2U+IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJh
bmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250
YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
LT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0
YXJ0UG9zaXRpb24oKSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBQb3Np
dGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOworICAgIGNvcnJlY3Rpb25T
dGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdl
VG9CZVJlcGxhY2VkLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVw
bGFjZWQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1
dG9jb3JyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2Vt
ZW50IHRvb2sgcGxhY2UuCisgICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBo
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFn
cmFwaEFzUmFuZ2UuZ2V0KCkpOworCisgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUg
Y2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFsIHJhbmdl
IGFyb3VuZC4KKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBhcHBs
eUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9CZVJlcGxh
Y2VkLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpKTsKKyAgICBzZXRF
bmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFj
ZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbi5nZXQoKSwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpOworICAgIFN0
cmluZyBuZXdUZXh0ID0gcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOworCisgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KKyAgICBpZiAobmV3VGV4
dCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpCisgICAgICAgIHJl
dHVybjsKKworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2Vt
ZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBz
aXplX3Qgc2l6ZSA9IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
IG1hcmtlclR5cGUgPSBtYXJrZXJUeXBlc1RvQWRkW2ldOworICAgICAgICBTdHJpbmcgZGVzY3Jp
cHRpb247CisgICAgICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlICE9IENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbiAmJiAobWFya2VyVHlwZSA9PSBE
b2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtl
cjo6QXV0b2NvcnJlY3RlZCkpCisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZzsKKyAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJl
cGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUsIGRlc2NyaXB0aW9uKTsKKyAgICB9Cit9
CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlv
bkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkIHx8ICFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3Rp
dmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucGFuZWxUeXBlICE9IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24p
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKTsKKworICAgIGlmIChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkgPT0gY2Fy
ZXRQb3NpdGlvbikgeworICAgICAgICBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoZGlzbWlz
c1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0gCisgICAgCisgICAgLy8gUGVuZGluZyBjb3JyZWN0aW9u
IHNob3VsZCBhbHdheXMgYmUgd2hlcmUgY2FyZXQgaXMuIEJ1dCBpbiBjYXNlIHRoaXMgaXMgbm90
IGFsd2F5cyB0cnVlLCB3ZSBzdGlsbCB3YW50IHRvIGRpc21pc3MgdGhlIHBhbmVsIHdpdGhvdXQg
YWNjZXB0aW5nIHRoZSBjb3JyZWN0aW9uLgorICAgIEFTU0VSVChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7Cisg
ICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikKK3sKKyAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwg
Y29ycmVjdGlvbik7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Cisg
ICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3Rl
ZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBTZWxlY3Rpb25Db250cm9sbGVy
OjpDbGVhclR5cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9u
VHJpZ2dlcmVkKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2Zy
YW1lLT5kb2N1bWVudCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQo
KSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmVuZCgpKTsKKworICAgIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtl
cnMoKTsKKyAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAg
bWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1l
bnQpOworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcj4qKQoreworICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVk
aXRvciA9IGZhbHNlOworICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlw
ZSkgeworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbjog
eworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCkpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9u
LnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0
KTsKKyAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCktPm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFySW5SYW5nZXMoRWRpdG9yOjpNYXJrU3BlbGxpbmcgfCBFZGl0b3I6OlNob3dDb3JyZWN0
aW9uUGFuZWwsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgMCk7Cisg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZVJldmVyc2lvbjogeworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUg
PSB0cnVlOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBw
bGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsK
KyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIGlmICgh
Ym91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0
aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdn
ZXN0aW9uczogeworICAgICAgICBpZiAocGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vk
U3RyaW5nKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0
ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmFuZ2VUb0JlUmVwbGFjZWQpLnBhcmFncmFwaFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBWZWN0
b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nl
c0ZvcldvcmQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBwYXJhZ3JhcGhU
ZXh0LCBzdWdnZXN0aW9ucyk7CisgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVh
cigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRvcFN1
Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJzdCgpOworICAgICAgICBzdWdnZXN0aW9ucy5yZW1v
dmUoMCk7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Cisg
ICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBpZiAoIWJv
dW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlv
blBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHRvcFN1Z2dlc3Rpb24sIHN1Z2dlc3Rp
b25zKTsKKyAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3Ry
aW5nJiBjb3JyZWN0aW9uKQoreworICAgIFJhbmdlKiByZXBsYWNlZFJhbmdlID0gbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpOworICAgIGlmICghcmVwbGFjZWRS
YW5nZSB8fCBtX2ZyYW1lLT5kb2N1bWVudCgpICE9IHJlcGxhY2VkUmFuZ2UtPm93bmVyRG9jdW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5U
ZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB3b3JkIHdlIGFyZSBhYm91dCB0byBjb3JyZWN0IGhhcyBi
ZWVuIGNoYW5nZWQgYmV0d2VlbiB0aW1lciBmaXJpbmcgYW5kIGNhbGxiYWNrIGJlaW5nIHRyaWdn
ZXJlZC4KKyAgICBpZiAoY3VycmVudFdvcmQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VkU3RyaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUgPSBmYWxzZTsKKworICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBh
bmVsVHlwZSkgeworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVj
dGlvbjoKKyAgICAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247CisgICAg
ICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JBdXRvY29ycmVj
dGlvbigpKTsKKyAgICAgICAgfSBlbHNlIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3Nl
ZEJ5RWRpdG9yKQorICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vk
U3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGVSZXZlcnNpb246CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgorICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkg
eworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0g
Y29ycmVjdGlvbjsKKyAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJrZXJU
eXBlc0ZvclJlcGxhY2VtZW50KCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwor
fQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgp
LT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKK30KKworYm9vbCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmco
KQoreworICAgIHJldHVybiBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgJiYgaXNBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjp3aW5kb3dSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdl
KSBjb25zdAoreworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBy
ZXR1cm4gdmlldyA/IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coSW50UmVjdChyYW5nZS0+Ym91bmRp
bmdSZWN0KCkpKSA6IEZsb2F0UmVjdCgpOworfSAgICAgICAgCisKK3ZvaWQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCit7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50
U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgLy8gV2hl
biB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBw
YXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCisgICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwg
cHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQor
ICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlv
biBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZpcm0gdGhhdAorICAgIC8vIHRoZSBuZXcgY2FyZXQg
cG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCisgICAgaWYgKCFjdXJyZW50U2VsZWN0
aW9uLmlzQ2FyZXQoKSB8fCBjdXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblBvc2l0aW9uID0gY3Vy
cmVudFNlbGVjdGlvbi5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbk9m
V29yZCA9IGVuZE9mV29yZChzZWxlY3Rpb25Qb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
OworICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbiAhPSBlbmRQb3NpdGlvbk9mV29yZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5k
ZWVwRXF1aXZhbGVudCgpOworICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9k
ZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0g
cG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFy
a2VyPiBtYXJrZXJzID0gbm9kZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5tYXJrZXJzRm9yTm9k
ZShub2RlKTsKKyAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3Qg
RG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGlmICghc2hvdWxk
U3RhcnRUaW1lRm9yKG1hcmtlciwgZW5kT2Zmc2V0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+
ZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0LCBub2RlLCBtYXJrZXIuZW5kT2Zm
c2V0KTsKKyAgICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5n
ZXQoKSk7CisgICAgICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQgPSB3b3JkUmFuZ2U7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0
cmluZyA9IGN1cnJlbnRXb3JkOworICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nKQorICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRT
dHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb247CisgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25Q
YW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbik7CisgICAg
ICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29t
bWFuZD4gY29tbWFuZCkKK3sKKyAgICBpZiAoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAm
JiAhY29tbWFuZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKKyAgICAg
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50
TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKK30KKworRWRpdG9yQ2xpZW50KiBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpjbGllbnQoKQoreworICAgIHJldHVybiBtX2ZyYW1lLT5w
YWdlKCkgPyBtX2ZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogMDsKK30KKworVGV4dENo
ZWNrZXJDbGllbnQqIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkK
K3sKKyAgICBpZiAoRWRpdG9yQ2xpZW50KiBvd25lciA9IGNsaWVudCgpKQorICAgICAgICByZXR1
cm4gb3duZXItPnRleHRDaGVja2VyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVy
c2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnRTdHJpbmcpCit7CisgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
RWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCByZXBsYWNlZFN0cmluZywgcmVw
bGFjZW1lbnRTdHJpbmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
Om1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpCit7CisgICAgY2hh
bmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92
ZU1hcmtlcnMoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3Rl
ZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlcik7CisgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpT
cGVsbENoZWNraW5nRXhlbXB0aW9uKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjptYXJrQ29ycmVjdGlvbihQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQoreworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXNUb0FkZCA9IG1hcmtlclR5cGVzRm9yQXV0b2NvcnJl
Y3Rpb24oKTsKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNl
ZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUgPSBtYXJrZXJUeXBlc1Rv
QWRkW2ldOworICAgICAgICBpZiAobWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCkKKyAg
ICAgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgpLCBtYXJrZXJU
eXBlLCByZXBsYWNlZFN0cmluZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1hcmtlcnMt
PmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlKTsKKyAgICB9Cit9CisK
K3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBhc3NSZWZQdHI8
UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpCit7CisgICAgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZVJldmVyc2VkKHJlcGxhY2VkU3RyaW5nLCBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5n
ZXQoKSkpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZFNw
ZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29y
cmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
bikKK3sKKyAgICBpZiAoIXJhbmdlT2ZDb3JyZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmFuZ2VPZkNvcnJlY3Rpb24tPnN0
YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBWZWN0b3I8RG9jdW1l
bnRNYXJrZXI+IGNvcnJlY3RlZE9uY2VNYXJrZXJzID0gbWFya2Vycy0+bWFya2Vyc0luUmFuZ2Uo
cmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKKyAgICBp
ZiAoY29ycmVjdGVkT25jZU1hcmtlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gU3BlbGxpbmcgY29ycmVjdGVkIHRleHQgaGFzIGJlZW4gZWRpdGVkLiBXZSBuZWVk
IHRvIGRldGVybWluZSB3aGV0aGVyIHVzZXIgaGFzIHJldmVydGVkIGl0IHRvIG9yaWdpbmFsIHRl
eHQgb3IKKyAgICAvLyBlZGl0ZWQgaXQgdG8gc29tZXRoaW5nIGVsc2UsIGFuZCBub3RpZnkgc3Bl
bGxjaGVja2VyIGFjY29yZGluZ2x5LgorICAgIGlmIChtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2Ny
aXB0aW9uKGNvcnJlY3RlZE9uY2VNYXJrZXJzKSAmJiBjb3JyZWN0ZWRPbmNlTWFya2Vyc1swXS5k
ZXNjcmlwdGlvbiA9PSBjb3JyZWN0ZWQpCisgICAgICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29y
cmVjdGVkLCBjb3JyZWN0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIGNsaWVudCgpLT5yZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25FZGl0ZWQs
IGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CisgICAgbWFya2Vycy0+cmVtb3ZlTWFya2VycyhyYW5n
ZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworfQorCisj
ZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2Ex
YmUyYjI3OGEwMzk2M2VlZTU1YWRlMDAxYTQ4M2YzMTZhZmFkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgKQEAg
LTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcl9oCisjZGVmaW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAorCisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQor
Ly8gU29tZSBwbGF0Zm9ybXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhdXRvY29ycmVjdGlv
bi4KKyNkZWZpbmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAxCisvLyBTb21lIHBsYXRm
b3JtcyB1c2Ugc3BlbGxpbmcgYW5kIGF1dG9jb3JyZWN0aW9uIG1hcmtlcnMgdG8gcHJvdmlkZSB2
aXN1YWwgY3VlLgorLy8gT24gc3VjaCBwbGF0Zm9ybSwgaWYgd29yZCB3aXRoIG1hcmtlciBpcyBl
ZGl0ZWQsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBtYXJrZXIuCisjZGVmaW5lIFJFTU9WRV9NQVJL
RVJTX1VQT05fRURJVElORyAxCisjZWxzZQorI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMIDAKKyNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDAKKyNlbmRpZiAv
LyAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQorCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJFZGl0Q29t
bWFuZC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5j
bHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBFZGl0b3JDbGllbnQ7CitjbGFzcyBSYW5nZTsKK2NsYXNzIFRl
eHRDaGVja2VyQ2xpZW50OworY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKKworc3RydWN0IENvcnJl
Y3Rpb25QYW5lbEluZm8geworICAgIGVudW0gUGFuZWxUeXBlIHsKKyAgICAgICAgUGFuZWxUeXBl
Q29ycmVjdGlvbiA9IDAsCisgICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbiwKKyAgICAgICAgUGFu
ZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucworICAgIH07CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlVG9CZVJlcGxhY2VkOworICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsKKyAgICBTdHJpbmcg
cmVwbGFjZW1lbnRTdHJpbmc7CisgICAgUGFuZWxUeXBlIHBhbmVsVHlwZTsKKyAgICBib29sIGlz
QWN0aXZlOworfTsKKworZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsK
KyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKKyAg
ICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwKKyAgICBSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQKK307CisKKyNpZiBTVVBQT1JUX0FV
VE9DT1JSRUNUSU9OX1BBTkVMCisjZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkg
OworI2Vsc2UKKyNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBmdW5jdGlvbkJv
ZHkKKyNlbmRpZgorCitjbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyIHsKK3B1Ymxp
YzoKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKikgVU5MRVNTX0VOQUJM
RUQoe30pCisgICAgflNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxF
RCh7fSkKKworICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGUpIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIHZvaWQgc3RvcENvcnJl
Y3Rpb25QYW5lbFRpbWVyKCkgVU5MRVNTX0VOQUJMRUQoe30pCisKKyAgICB2b2lkIGRpc21pc3Mo
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgVU5MRVNTX0VOQUJMRUQoe30pCisg
ICAgU3RyaW5nIGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwp
IFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIFN0cmluZygpOyB9KQorICAgIHZvaWQgc2hvdyhQYXNz
UmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb1JlcGxhY2UpOyBVTlVTRURfUEFS
QU0ocmVwbGFjZW1lbnQpOyB9KQorCisgICAgdm9pZCBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8o
Y29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYpIFVOTEVTU19FTkFCTEVE
KHt9KQorICAgIC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rpb24gd2FzIGFwcGxpZWQsIGZhbHNl
IG90aGVyd2lzZS4KKyAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFw
cHJvcHJpYXRlKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCisKKyAgICB2b2lk
IHJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikgVU5M
RVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsgVU5VU0VEX1BBUkFNKGNvcnJl
Y3Rpb24pOyB9KQorICAgIHZvaWQgcmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxF
ZGl0Q29tbWFuZD4pIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdl
ZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCisKKyAgICB2b2lkIHN0b3BQ
ZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVO
TEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCisgICAgdm9pZCBh
cHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFm
dGVyVHlwaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5
cGluZyk7IH0pCisKKyAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBT
dHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rp
b24pOyB9KQorICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkgVU5MRVNTX0VOQUJMRUQo
e30pCisKKyAgICBib29sIGhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJM
RUQoeyByZXR1cm4gZmFsc2U7IH0pCisgICAgYm9vbCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQ
YXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7
IFVOVVNFRF9QQVJBTShtaXNzcGVsbGluZ1JhbmdlKTsgcmV0dXJuIHRydWU7IH0pCisgICAgYm9v
bCBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSBVTkxFU1NfRU5BQkxFRCh7
IHJldHVybiBmYWxzZTsgfSkKKyAgICBib29sIHNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGlu
ZygpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQorCisgICAgdm9pZCBjb3JyZWN0
aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+Kikg
VU5MRVNTX0VOQUJMRUQoe30pCisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNl
UmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxSYW5nZT4g
cmVwbGFjZW1lbnRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRT
dHJpbmcpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnRSYW5nZSk7IH0pCisgICAgdm9pZCBtYXJr
UmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7
IFVOVVNFRF9QQVJBTShjaGFuZ2VkUmFuZ2UpOyB9KQorICAgIHZvaWQgbWFya0NvcnJlY3Rpb24o
UGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVOVVNF
RF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IH0pCisgICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJS
ZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNv
bnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlT2ZDb3JyZWN0aW9uKTsgVU5VU0VEX1BBUkFNKGNv
cnJlY3RlZCk7IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKKworI2lmIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwKK3ByaXZhdGU6CisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZyk7CisKKyAgICBib29sIHNob3VsZFN0YXJ0VGltZUZvcihj
b25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyLCBpbnQgZW5kT2Zmc2V0KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICgoKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCAmJiAhbWFya2VyLmRlc2NyaXB0aW9uLmlzTnVsbCgpKSAKKyAgICAgICAgICAgICAgICAg
fHwgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0aWNfY2Fz
dDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQpID09IGVuZE9mZnNldCk7CisgICAgfQorCisgICAgRWRp
dG9yQ2xpZW50KiBjbGllbnQoKTsKKyAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIo
KTsKKyAgICBGbG9hdFJlY3Qgd2luZG93UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7
CisKKyAgICBFZGl0b3JDbGllbnQqIG1fY2xpZW50OworICAgIEZyYW1lKiBtX2ZyYW1lOworCisg
ICAgVGltZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4gbV9jb3JyZWN0aW9uUGFuZWxU
aW1lcjsKKyAgICBDb3JyZWN0aW9uUGFuZWxJbmZvIG1fY29ycmVjdGlvblBhbmVsSW5mbzsKKyAg
ICBib29sIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcjsKKyNlbmRpZgorfTsK
KworI3VuZGVmIFVOTEVTU19FTkFCTEVECisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggZGYxNTBlZTAwMzk1MDhkNjM0MjdhY2I0ZWNiY2Q1
MGZlNmY0MjYwOC4uYjU0OGI5MTMyZGQ3YmNmMTkwZWY4Y2NmNGE5MWE1NDQ2OWE2ZmVlZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0xNTUsMTEgKzE1NSw5
IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IFN0cmluZyYgdGV4dCwgVHlwaW5nQ29tCiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQt
PmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKIAotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05f
RURJVElORwogICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIGRvY3VtZW50LT5mcmFt
ZSgpLT5lZGl0b3IoKS0+cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1Rv
QmVFZGl0ZWQoaXNTcGFjZU9yTmV3bGluZSh0ZXh0LmNoYXJhY3RlcnMoKVswXSkpOwotI2VuZGlm
Ci0KKyAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT51cGRhdGVNYXJrZXJzRm9y
V29yZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHQuY2hhcmFjdGVycygp
WzBdKSk7CisgICAgCiAgICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOwogfQogCkBAIC0zNDQs
MTIgKzM0Miw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24g
cDIgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBp
ZiAocDEgIT0gcDIpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSk7
Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICBlbHNlIGlmIChjb21t
YW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAgICAgICAgZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbik7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShjb21tYW5kVHlwZSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1l
KCktPmVkaXRvcigpLT5zdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CiAgICAgfQogfQogCkBA
IC00NjcsOSArNDYxLDggQEAgYm9vbCBUeXBpbmdDb21tYW5kOjptYWtlRWRpdGFibGVSb290RW1w
dHkoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQ
T05fRURJVElORwotICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVs
bEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYK
KyAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0ZvcldvcmRz
QWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKIApA
QCAtNTY2LDkgKzU1OSw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChU
ZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcpCiAKIHZvaWQgVHlwaW5n
Q29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LCBib29sIGtpbGxSaW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwot
ICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVsbEFuZENvcnJlY3Rp
b25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICBkb2N1bWVu
dCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsK
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9odG1sZWRpdGluZy5oCmluZGV4IGNiMmIyYTQyOWY5ZTFlZWU3OTdlY2JhOWZjNzAwZDZm
Mjg3ZmUyNDcuLjFkODUzYzdhMzE3MDY3MTQyMzM0YzZlYWE1OGUzMGIwNmY3OTQyNTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKQEAgLTIyNCw2ICsyMjQsMTUgQEAgaW5saW5l
IGJvb2wgaXNXaGl0ZXNwYWNlKFVDaGFyIGMpCiB7CiAgICAgcmV0dXJuIGMgPT0gbm9CcmVha1Nw
YWNlIHx8IGMgPT0gJyAnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdCc7CiB9CisKK2lubGluZSBi
b29sIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQoreworICAg
IC8vIFRoZXNlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlaGF2ZSBhcyB3b3JkIGJvdW5kYXJp
ZXMsIGJ1dCBjYW4gYXBwZWFyIHdpdGhpbiB3b3Jkcy4KKyAgICAvLyBJZiB0aGV5IGFyZSBqdXN0
IHR5cGVkLCBpLmUuIGlmIHRoZXkgYXJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgY2FyZXQs
IHdlIHdhbnQgdG8gZGVsYXkgdGV4dCBjaGVja2luZyB1bnRpbCB0aGUgbmV4dCBjaGFyYWN0ZXIg
aGFzIGJlZW4gdHlwZWQuCisgICAgLy8gRklYTUU6IHRoaXMgaXMgcmVxdWlyZWQgdW50aWwgNjg1
MzAyNyBpcyBmaXhlZCBhbmQgdGV4dCBjaGVja2luZyBjYW4gZG8gdGhpcyBmb3IgdXMuCisgICAg
cmV0dXJuIGNoYXJhY3RlciA9PSAnXCcnIHx8IGNoYXJhY3RlciA9PSByaWdodFNpbmdsZVF1b3Rh
dGlvbk1hcmsgfHwgY2hhcmFjdGVyID09IGhlYnJld1B1bmN0dWF0aW9uR2Vyc2hheWltOworfQor
CiBTdHJpbmcgc3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKGNvbnN0IFN0cmluZyYsIGJv
b2wgc3RhcnRJc1N0YXJ0T2ZQYXJhZ3JhcGgsIGJvb2wgZW5kSXNFbmRPZlBhcmFncmFwaCk7CiBj
b25zdCBTdHJpbmcmIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRp
dG9yQ2xpZW50LmgKaW5kZXggYWVkYTg0NDU4OGNhNmVmNTVmMDY4MjM0Mjg1MzcwMzU5YzdhYTUy
ZS4uZGYyNGE1YjQ2MDgwODczZmMzYzc4Y2FlYjI0ZmUwMjM0MzU2MTIxNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0VkaXRvckNsaWVudC5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIEVkaXRvckNsaWVu
dF9oCiAjZGVmaW5lIEVkaXRvckNsaWVudF9oCiAKLSNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWxJ
bmZvLmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDQyOWMwMzU1Njgx
ZWQ4YWUyYzExYzg1OGRjOGFiNDQwYWMxYTRiOWQuLjQ5NGEzN2ExMmU4ZWM2ODRmZDEwNTFjMTcw
OGNmZGJlNzMyNDc4YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC05NDMsNyArOTQzLDcgQEAg
dm9pZCBGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhmbG9hdCBwYWdlWm9vbUZhY3Rv
ciwgZmxvYXQgdGV4dFpvb21GYWN0b3IKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2VkaXRvci5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBtX2VkaXRvci5kaXNtaXNzQ29ycmVj
dGlvblBhbmVsQXNJZ25vcmVkKCk7CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIFJlc3BlY3Qg
U1ZHcyB6b29tQW5kUGFuPSJkaXNhYmxlZCIgcHJvcGVydHkgaW4gc3RhbmRhbG9uZSBTVkcgZG9j
dW1lbnRzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88648</attachid>
            <date>2011-04-07 09:04:32 -0700</date>
            <delta_ts>2011-04-07 13:39:58 -0700</delta_ts>
            <desc>Updated to Tot</desc>
            <filename>bug-55571-20110407090431.patch</filename>
            <type>text/plain</type>
            <size>98452</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMxNzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTAwYTc5
MjIzNWM1YzI1ZTM0NDA0OTliNDMzMDZiNmY3ZmFkOGVhMy4uYTgyYWFmZTM1ZGU2NjYwY2IyNjY4
YjM4NWJkMzY1NTI2NzM5MmU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY3MSw2ICs2NzEs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDUzOTViNzY5YjAyOWRiNTA3NzlkY2FkNWQw
OTc1MmI4ODdlMGNiYTMuLjI2NWNmNWI5NzRkMjRjMWIzMTNhMmFlNjgwYmFjY2Y0ODkzYTdkNGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAxMS0wNC0wNiAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQg
YmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEKKworICAgICAgICBFeHRyYWN0ZWQgY29kZSBpbnNp
ZGUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpbnRvCisgICAgICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIgY2xhc3MuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gcmVtb3Zl
IHNvbWUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBndWFyZCBpZgorICAgICAgICBjb2Rl
IHBhdGhzIGluc2lkZSB0aGUgbmV2ZXIgcmVhY2hlZCB3aXRob3V0IGF1dG9jb3JyZWN0aW9uIHN1
cHBvcnQuCisgICAgICAgIFJlbW92aW5nIGd1YXJkcyByZWR1Y2VzIHVuaW50ZW50aW9uYWwgYnVp
bGQgYnJlYWthZ2UuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFnbmUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVs
SW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZXNwb25kVG9DaGFuZ2VkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
aWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6On5FZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnBhc3RlQXNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppc0F1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKToK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjptYXJrZXJUeXBlc0Zv
ckF1dG9jb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtlclR5cGVzRm9yUmVwbGFj
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0YXJ0Q29ycmVjdGlv
blBhbmVsVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBlbmRpbmdDb3Jy
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
Omhhc1BlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlz
c1Nvb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVtb3Zl
TWFya2Vyc1Vwb25FZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0Fw
cGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1JldmVyc2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtD
b3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKToKKyAg
ICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpVTkxFU1NfRU5B
QkxFRCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpz
aG91bGRTdGFydFRpbWVGb3IpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKToKKyAg
ICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjppc0FtYmln
dW91c0JvdW5kYXJ5Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgor
ICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFBh
Z2VBbmRUZXh0Wm9vbUZhY3RvcnMpOgorCiAyMDExLTA0LTA2ICBQYXZlbCBGZWxkbWFuICA8cGZl
bGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBlZTcwYTRmYmExZDE0ODQzNWFlNmMyNmVhZWY3MTI4
OTRhMjA1ZWExLi5hZTUyOTQ0MDc2NDViZmQ3ZTk0OWEyNGNkODdmYzI1YTQ0NGYwOGVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTQ3MCw2ICsxNDcwLDggQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbENoZWNrZXIuaCBcCisJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxl
bWVudENvbW1hbmQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENv
bW1hbmQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYmFkMzExNWVmOWFlY2NiYTg0MmE4MWJiOGZi
NzZlOTVhNmYxMDYxNy4uMGViNDhiODg3OTc0NTI5MGMzMDZmNDNlNmRiZjE1ZTZjYjFiYzhjMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjY0MSw2ICsyNjQxLDkgQEAKICAgICAgICAgICAgICdlZGl0
aW5nL1NtYXJ0UmVwbGFjZUNGLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TbWFydFJlcGxh
Y2VJQ1UuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAnLAorICAg
ICAgICAgICAgJ2VkaXRpbmcvU3BlbGxDaGVja2VyLmgnLAorICAgICAgICAgICAgJ2VkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGQ0MjIxZmY5ZGZkM2E5ODRhMGVkZDk2
MTQyNzc5YjcwZDhmYzdjMGUuLjcwZDMzYWNjMDIwOGM3OTU1NmUyZGQ1ZGQ4M2JhM2U3NjcxMDAw
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01OTksNiArNTk5LDcgQEAgU09VUkNFUyArPSBcCiAgICAg
ZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU21hcnRS
ZXBsYWNlSUNVLmNwcCBcCiAgICAgZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwIFwKKyAgICBlZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0
RWxlbWVudENvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNw
cCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4
IDEzNjE0ODVkOWYzNjI5NDY1ZDFiZDBjZjZiOWQ1YjQyODBlNTk0MzcuLjdmZGM5NzRlODYxYjVh
YjMxYzk5ODNlMGNlYjJiYzczYjVlZjc2OGQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC01MDIzNCw2ICs1MDIzNCw2MiBAQAogCQkJCT4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
KwkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
CQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkv
PgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJ
CQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgor
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5h
bWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
KwkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZV9MVENHfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxlZGl0aW5nXFNwbGl0RWxlbWVudENvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAxMDhkM2M2MzhjYTdmNWQ2NDkyYWM2MWRmMzljMjg5ZWQ5MGVm
ODY1Li4zMmM2YzY5MTFmNTFiZmM4OTA4ZThiM2UwMGE0YTZiZjdjOWViOTgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMTk2
LDYgKzMxOTYsOCBAQAogCQlBNjIyQThGQzEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3Vy
aXR5QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNjIyQThGNjEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgKi87
IH07CiAJCUE2MjJBOEZEMTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGNzEy
MkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5oICovOyB9OwogCQlBNjIyQThG
RjEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJpY0JpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEY5MTIyQzQ0QTYwMEE3ODVCMyAvKiBH
ZW5lcmljQmluZGluZy5oICovOyB9OworCQlBNzAwNUNDQzEzMzBDNEJBMDAwQ0MwQkEgLyogU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi87IH07CisJCUE3MDA1Q0NEMTMzMEM0QkEwMDBDQzBC
QSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUE3MTUxQkQ4MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hl
Y2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTcxNUU2NTIxMzRC
QkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE1RTY1MDEzNEJCQkVDMDBEOEU3MTMg
LyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcCAqLzsgfTsKIAkJQTcxNUU2NTMxMzRCQkJFQzAw
RDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dy
ZXNzU2hhZG93RWxlbWVudC5oICovOyB9OwpAQCAtNDc5Niw3ICs0Nzk4LDYgQEAKIAkJQjc3NkQ0
M0QxMTA0NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyog
UHJpbnRDb250ZXh0LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8qIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCODg1RThEMjExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDUxMUUwNkREMjAw
OUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0
IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKCk7IH07IH07Ci0JCUI4QTZBNkQ1MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0
aW9uUGFuZWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCOEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUI4REJEQjRC
MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ3MTMwQjBGOEEwMEY1Q0RC
MSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKIAkJQjhEQkRCNEMxMzBCMEY4QTAw
RjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxl
Y3Rpb25Db21tYW5kLmggKi87IH07CiAJCUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKQEAgLTk3MjQsNiArOTcyNSw4IEBACiAJCUE2MjJBOEY2
MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwOyBwYXRoID0g
Z2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTYyMkE4RjcxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQmluZGluZ1NlY3VyaXR5QmFzZS5oOyBw
YXRoID0gZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE2MjJBOEY5MTIyQzQ0QTYwMEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW5lcmljQmluZGluZy5oOyBwYXRoID0g
Z2VuZXJpYy9HZW5lcmljQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
NzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTcwMDVDQ0Ix
MzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE1MUJENzEyRjE1NThGMDA1QTBGNjQg
LyogVGV4dENoZWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGV4dENoZWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxNUU2
NTAxMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE1RTY1MTEzNEJCQkVDMDBEOEU3MTMgLyog
UHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFByb2dyZXNzU2hhZG93RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTEyMzEsNyArMTEyMzQsNiBAQAogCQlCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW50Q29u
dGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4ODVFOEQyMTFFMDZERDIw
MDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg4NUU4RDMxMUUwNkREMjAwOUZG
QkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJl
Y3Rpb25QYW5lbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29ycmVj
dGlvblBhbmVsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0NzEz
MEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDgxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVj
dGlvbkNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0U2VsZWN0
aW9uQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0OTEzMEIw
RjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NTQxLDcgKzE1NTQzLDYgQEAKIAkJCQk5
MzMwOUQ4QzA5OUU2NDkxMDA1NkU1ODEgLyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5oICovLAog
CQkJCTkzMzA5RDhEMDk5RTY0OTEwMDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFuZC5jcHAg
Ki8sCiAJCQkJOTMzMDlEOEUwOTlFNjQ5MTAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5k
LmggKi8sCi0JCQkJQjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbElu
Zm8uaCAqLywKIAkJCQlEMEIwNTU2NzA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1h
bmQuY3BwICovLAogCQkJCUQwQjA1NTY2MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29t
bWFuZC5oICovLAogCQkJCTFDNEM4RjYzMEFEODY1NUQwMDk0NzVDRSAvKiBEZWxldGVCdXR0b24u
Y3BwICovLApAQCAtMTU2MjMsNiArMTU2MjQsOCBAQAogCQkJCUE3OEZFMTNBMTIzNjZCMTAwMEFD
RThEMCAvKiBTcGVsbENoZWNrZXIuaCAqLywKIAkJCQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEg
LyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgKi8sCiAJCQkJQjhEQkRCNEExMzBCMEY4
QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCAqLywKKwkJCQlBNzAwNUND
QTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi8s
CisJCQkJQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuaCAqLywKIAkJCQk5MzMwOURDMjA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50
Q29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEQzMwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxl
bWVudENvbW1hbmQuaCAqLywKIAkJCQk5MzMwOURDNDA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwICovLApAQCAtMTk5NzQsNyArMTk5NzcsNiBAQAogCQkJCTMzRDAy
MTJEMTMxREIzN0IwMDQwOTFBOCAvKiBDb29raWVTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3RUU2ODQ2NDEyRDI2RTM4MDBFNzk0MTUgLyogQ29va2llU3RvcmFnZUNGTmV0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRTZGRDQ4ODBGNjc2RTU3MDAwOTI4NzMgLyogQ29vcmRpbmF0ZXMuaCBp
biBIZWFkZXJzICovLAotCQkJCUI4QTZBNkQ1MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9u
UGFuZWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkQwNDBBMTk4OUNBMDA3RkI4QzUg
LyogQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI5NzkwRTgyMDY5MjAwQjI1OTY1
IC8qIENvdW50ZXJDb250ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjk1MTBFODIwNTZC
MDBCMjU5NjUgLyogQ291bnRlckRpcmVjdGl2ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjIyODcs
NiArMjIyODksNyBAQAogCQkJCTc1NDE1QjAwMTI5NThENUUwMDNBRDY2OSAvKiBTcGVlY2hJbnB1
dFJlc3VsdExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEZFMTNDMTIzNjZCMTAwMEFDRThE
MCAvKiBTcGVsbENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUI4REJEQjRFMTMwQjBGOEEw
MEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTIwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0
RWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTE0MDk5RTY0OTIwMDU2
RTU4MSAvKiBTcGxpdFRleHROb2RlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlF
MTYwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1h
bmQuaCBpbiBIZWFkZXJzICovLApAQCAtMjUxMDIsNiArMjUxMDUsNyBAQAogCQkJCTc1NDE1QzI5
MTI5QTk5MjAwMDNBRDY2OSAvKiBTcGVlY2hJbnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc4RkUxM0IxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCOERCREI0RDEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzAwNUNDQzEzMzBDNEJBMDAw
Q0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MzMwOUUxMTA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxMzA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0
Tm9kZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMTUwOTlFNjQ5MjAwNTZF
NTgxIC8qIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5l
bEluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjA5OWUxNjJmYTcyZjdmMTM5ZDYzZmMxMzc4
YzRiNGIzM2YzZmU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3JyZWN0aW9uUGFuZWxJ
bmZvX2gKLSNkZWZpbmUgQ29ycmVjdGlvblBhbmVsSW5mb19oCi0KLSNpZiBQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0vLyBTb21lIHBs
YXRmb3JtcyBwcm92aWRlIFVJIGZvciBzdWdnZXN0aW5nIGF1dG9jb3JyZWN0aW9uLgotI2RlZmlu
ZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDEKLS8vIFNvbWUgcGxhdGZvcm1zIHVzZSBz
cGVsbGluZyBhbmQgYXV0b2NvcnJlY3Rpb24gbWFya2VycyB0byBwcm92aWRlIHZpc3VhbCBjdWUu
Ci0vLyBPbiBzdWNoIHBsYXRmb3JtLCBpZiB3b3JkIHdpdGggbWFya2VyIGlzIGVkaXRlZCwgd2Ug
bmVlZCB0byByZW1vdmUgdGhlIG1hcmtlci4KLSNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9F
RElUSU5HIDEKLSNlbHNlCi0jZGVmaW5lIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwgMAot
I2RlZmluZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMAotI2VuZGlmIC8vICNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0K
LSNpbmNsdWRlICJSYW5nZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBDb3Jy
ZWN0aW9uUGFuZWxJbmZvIHsKLSAgICBlbnVtIFBhbmVsVHlwZSB7Ci0gICAgICAgIFBhbmVsVHlw
ZUNvcnJlY3Rpb24gPSAwLAotICAgICAgICBQYW5lbFR5cGVSZXZlcnNpb24sCi0gICAgICAgIFBh
bmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMKLSAgICB9OwotCi0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZVRvQmVSZXBsYWNlZDsKLSAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmc7Ci0gICAgU3RyaW5n
IHJlcGxhY2VtZW50U3RyaW5nOwotICAgIFBhbmVsVHlwZSBwYW5lbFR5cGU7Ci0gICAgYm9vbCBp
c0FjdGl2ZTsKLX07Ci0KLWVudW0gUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCB7
Ci0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCA9IDAsCi0g
ICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQsCi0gICAgUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkCi19OwotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gQ29ycmVjdGlvblBhbmVsSW5mb19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKaW5kZXggZTRlMGJiYjZjZmUwYzA5YTA3NTZh
OTY5ZWY2ODNmNWE4NDc2MjNmYS4uZjM4Y2JlNjJhNjBkZTExY2QwZjFjMTEzYTk5ZjBjMmQwMGVh
ZWI5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcApAQCAt
NjMsNiArNjMsNyBAQAogI2luY2x1ZGUgPFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcD4KICNp
bmNsdWRlIDxTbWFydFJlcGxhY2UuY3BwPgogI2luY2x1ZGUgPFNtYXJ0UmVwbGFjZUNGLmNwcD4K
KyNpbmNsdWRlIDxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcD4KICNpbmNsdWRlIDxT
cGVsbENoZWNrZXIuY3BwPgogI2luY2x1ZGUgPFNwbGl0RWxlbWVudENvbW1hbmQuY3BwPgogI2lu
Y2x1ZGUgPFNwbGl0VGV4dE5vZGVDb21tYW5kLmNwcD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAppbmRleCA5MGViODI1YzA0NzQ5YzVkM2VjZWFkMzMyYjJjMDA1YzdiN2JmYzFiLi43NTYwODM1
MjRjOTA4NmQ5MjgyMzBmMzcyZTUxOTQxMjAwOTExMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
aCIKICNpbmNsdWRlICJDbGlwYm9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkNvbXBvc2l0aW9uRXZl
bnQuaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiQ3JlYXRlTGlua0NvbW1hbmQuaCIKICNpbmNsdWRlICJEZWxldGVCdXR0b25Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oIgpAQCAtOTMsNTEgKzk0LDYg
QEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2lu
ZyBuYW1lc3BhY2UgVW5pY29kZTsKIAotc3RhdGljIGlubGluZSBib29sIGlzQW1iaWd1b3VzQm91
bmRhcnlDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQotewotICAgIC8vIFRoZXNlIGFyZSBjaGFy
YWN0ZXJzIHRoYXQgY2FuIGJlaGF2ZSBhcyB3b3JkIGJvdW5kYXJpZXMsIGJ1dCBjYW4gYXBwZWFy
IHdpdGhpbiB3b3Jkcy4KLSAgICAvLyBJZiB0aGV5IGFyZSBqdXN0IHR5cGVkLCBpLmUuIGlmIHRo
ZXkgYXJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgY2FyZXQsIHdlIHdhbnQgdG8gZGVsYXkg
dGV4dCBjaGVja2luZyB1bnRpbCB0aGUgbmV4dCBjaGFyYWN0ZXIgaGFzIGJlZW4gdHlwZWQuCi0g
ICAgLy8gRklYTUU6IHRoaXMgaXMgcmVxdWlyZWQgdW50aWwgNjg1MzAyNyBpcyBmaXhlZCBhbmQg
dGV4dCBjaGVja2luZyBjYW4gZG8gdGhpcyBmb3IgdXMuCi0gICAgcmV0dXJuIGNoYXJhY3RlciA9
PSAnXCcnIHx8IGNoYXJhY3RlciA9PSByaWdodFNpbmdsZVF1b3RhdGlvbk1hcmsgfHwgY2hhcmFj
dGVyID09IGhlYnJld1B1bmN0dWF0aW9uR2Vyc2hheWltOwotfQotCi1zdGF0aWMgY29uc3QgVmVj
dG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JBdXRvY29ycmVj
dGlvbigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLCAoKSk7Ci0gICAgaWYg
KG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1hcmtl
clR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCk7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50
TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRv
Q29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24p
OwotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1h
cmtlcjo6QXV0b2NvcnJlY3RlZCk7Ci0gICAgfQotICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckF1
dG9Db3JyZWN0aW9uOwotfQotCi1zdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBl
c0ZvclJlcGxhY2VtZW50LCAoKSk7Ci0gICAgaWYgKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFj
ZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7Ci19Ci0KLSNpZiBTVVBQ
T1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi1zdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNh
bERlc2NyaXB0aW9uKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpCi17Ci0g
ICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNv
bnN0IFN0cmluZyYgZGVzY3JpcHRpb24gPSBtYXJrZXJzWzBdLmRlc2NyaXB0aW9uOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAxOyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
ZGVzY3JpcHRpb24gIT0gbWFya2Vyc1tpXS5kZXNjcmlwdGlvbikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQogLy8gV2hlbiBh
biBldmVudCBoYW5kbGVyIGhhcyBtb3ZlZCB0aGUgc2VsZWN0aW9uIG91dHNpZGUgb2YgYSB0ZXh0
IGNvbnRyb2wKIC8vIHdlIHNob3VsZCB1c2UgdGhlIHRhcmdldCBjb250cm9sJ3Mgc2VsZWN0aW9u
IGZvciB0aGlzIGVkaXRpbmcgb3BlcmF0aW9uLgogVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6OnNl
bGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQpAQCAtNTMzLDQ4ICs0ODksNyBAQCB2b2lk
IEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBvbGRTZWxlY3Rpb24pCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpOwogICAgIG1fZGVsZXRlQnV0dG9uQ29udHJvbGxlci0+
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwotCi0jaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgIC8vIFdoZW4gdXNlciBt
b3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3
ZSBzaG93IHRoZSBwYW5lbAotICAgIC8vIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHByZS1jb3Jy
ZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJldmVydCB0aGUKLSAgICAvLyB1
bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24gcGFuZWwg
dGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKLSAgICAvLyB0aGUgbmV3IGNhcmV0IHBvc2l0aW9u
IGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgotICAgIGlmICghY3VycmVudFNlbGVjdGlvbi5pc0Nh
cmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlvbiA9IGN1cnJlbnRTZWxl
Y3Rpb24uc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25PZldvcmQgPSBl
bmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBp
ZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRpb25PZldvcmQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2
YWxlbnQoKTsKLSAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIG5vZGUg
PSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgaW50IGVuZE9mZnNldCA9IHBvc2l0aW9u
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFy
a2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7
Ci0gICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IERvY3VtZW50
TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAgICBpZiAoKChtYXJrZXIudHlwZSA9
PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgJiYgIW1hcmtlci5kZXNjcmlwdGlvbi5pc051
bGwoKSkgfHwgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0
aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQpID09IGVuZE9mZnNldCkgewotICAgICAgICAg
ICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGZyYW1lKCktPmRvY3Vt
ZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCk7
Ci0gICAgICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdl
dCgpKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50V29yZC5sZW5ndGgoKSkgewotICAgICAgICAg
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5n
ZTsKLSAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcg
PSBjdXJyZW50V29yZDsKLSAgICAgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9jdW1l
bnRNYXJrZXI6OlNwZWxsaW5nKQotICAgICAgICAgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25Q
YW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlv
bnMpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb247Ci0g
ICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvLyBT
VVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6
cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1Nl
bGVjdGlvbikKQEAgLTU4NSw5ICs1MDAsNyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdl
ZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKICAgICAg
ICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNh
dGlvbihub2RlLT5yZW5kZXJlcigpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgZmFs
c2UpOwogICAgIH0KIAotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwotICAgIHJlbW92
ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKHRydWUpOwotI2Vu
ZGlmCisgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcodHJ1ZSk7CiAK
ICAgICBpZiAoY2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkQ29u
dGVudHMoKTsKQEAgLTEwNzQsMTAgKzk4Nyw3IEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGlu
ZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRl
bnRDaGFuZ2VkRXZlbnRzKCpjbWQpOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
KGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkpOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9Q
QU5FTAotICAgIGlmIChjbWQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNtZC0+c2hvdWxkUmV0
YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5k
aWNhdG9yKTsKLSNlbmRpZgorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0FwcGxp
ZWRFZGl0aW5nKGNtZC5nZXQoKSk7CiAKICAgICAvLyBEb24ndCBjbGVhciB0aGUgdHlwaW5nIHN0
eWxlIHdpdGggdGhpcyBzZWxlY3Rpb24gY2hhbmdlLiAgV2UgZG8gdGhvc2UgdGhpbmdzIGVsc2V3
aGVyZSBpZiBuZWNlc3NhcnkuCiAgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1Nl
bGVjdGlvbiwgZmFsc2UsIGZhbHNlKTsKQEAgLTExMzYsMTcgKzEwNDYsMTQgQEAgRWRpdG9yOjpF
ZGl0b3IoRnJhbWUqIGZyYW1lKQogICAgIC8vIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQsIHNpbmNl
IG1vc3QgZWRpdG9ycyB3YW50IHRoaXMgYmVoYXZpb3IgKHRoaXMgbWF0Y2hlcyBJRSBidXQgbm90
IEZGKS4KICAgICAsIG1fc2hvdWxkU3R5bGVXaXRoQ1NTKGZhbHNlKQogICAgICwgbV9raWxsUmlu
ZyhhZG9wdFB0cihuZXcgS2lsbFJpbmcpKQotICAgICwgbV9zcGVsbENoZWNrZXIobmV3IFNwZWxs
Q2hlY2tlcihmcmFtZSwgZnJhbWUtPnBhZ2UoKSA/IGZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVu
dCgpLT50ZXh0Q2hlY2tlcigpIDogMCkpCi0gICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyKHRo
aXMsICZFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCisgICAgLCBtX3NwZWxsQ2hl
Y2tlcihhZG9wdFB0cihuZXcgU3BlbGxDaGVja2VyKGZyYW1lLCBmcmFtZS0+cGFnZSgpID8gZnJh
bWUtPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCktPnRleHRDaGVja2VyKCkgOiAwKSkpCisgICAgLCBt
X3NwZWxsaW5nQ29ycmVjdG9yKGFkb3B0UHRyKG5ldyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyKGZyYW1lKSkpCiAgICAgLCBtX2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQoZmFs
c2UpCiB7CiB9CiAKIEVkaXRvcjo6fkVkaXRvcigpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVD
VElPTl9QQU5FTAotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwotI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yOjpjbGVh
cigpCkBAIC0xMTc5LDEwICsxMDg2LDggQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0
U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBp
ZiAoIXNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
blR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9O
X0VESVRJTkcKICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICByZW1vdmVTcGVsbEFu
ZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChpc1NwYWNlT3JOZXdsaW5lKHRl
eHRbMF0pKTsKLSNlbmRpZgorICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5
RWRpdGluZyh0ZXh0WzBdKTsKIAogICAgIGJvb2wgc2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9j
b3JyZWN0aW9uID0gZmFsc2U7CiAgICAgaWYgKHRleHQgPT0gIiAiIHx8IHRleHQgPT0gIlx0IikK
QEAgLTExOTEsNyArMTA5Niw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRp
bmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgaWYgKHRl
eHQubGVuZ3RoKCkgPT0gMSAmJiBpc1B1bmN0KHRleHRbMF0pICYmICFpc0FtYmlndW91c0JvdW5k
YXJ5Q2hhcmFjdGVyKHRleHRbMF0pKQogICAgICAgICBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0
b2NvcnJlY3Rpb24gPSB0cnVlOwogCi0gICAgYm9vbCBhdXRvY29ycmVjdGlvbldhc0FwcGxpZWQg
PSBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJlY3Rpb24gJiYgYXBwbHlBdXRvY29ycmVj
dGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKKyAgICBib29sIGF1dG9jb3JyZWN0aW9u
V2FzQXBwbGllZCA9IHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlvbiAmJiBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3By
aWF0ZSgpOwogCiAgICAgLy8gR2V0IHRoZSBzZWxlY3Rpb24gdG8gdXNlIGZvciB0aGUgZXZlbnQg
dGhhdCB0cmlnZ2VyZWQgdGhpcyBpbnNlcnRUZXh0LgogICAgIC8vIElmIHRoZSBldmVudCBoYW5k
bGVyIGNoYW5nZWQgdGhlIHNlbGVjdGlvbiwgd2UgbWF5IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50
IHNlbGVjdGlvbgpAQCAtMTIyNyw3ICsxMTMyLDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVC
cmVhaygpCiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGll
ZCA9IGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAg
Ym9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5
QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29t
bWFuZDo6aW5zZXJ0TGluZUJyZWFrKG1fZnJhbWUtPmRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9u
SXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Ig
OiAwKTsKICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKIApAQCAt
MTI0NSw3ICsxMTUwLDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigp
CiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IGFw
cGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBh
dXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5QXV0b2Nv
cnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKG1fZnJhbWUtPmRvY3VtZW50KCksIGF1dG9jb3JyZWN0
aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0
b3IgOiAwKTsKICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKIApA
QCAtMTI2Miw5ICsxMTY3LDcgQEAgdm9pZCBFZGl0b3I6OmN1dCgpCiAgICAgfQogICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmIChzaG91bGREZWxl
dGVSYW5nZShzZWxlY3Rpb24uZ2V0KCkpKSB7Ci0jaWYgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElU
SU5HCi0gICAgICAgIHJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0Jl
RWRpdGVkKHRydWUpOwotI2VuZGlmCisgICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVj
dGVkQnlFZGl0aW5nKHRydWUpOwogICAgICAgICBpZiAoaXNOb2RlSW5UZXh0Rm9ybUNvbnRyb2wo
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAg
ICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT53cml0ZVBsYWluVGV4dChzZWxl
Y3RlZFRleHQoKSk7CiAgICAgICAgIGVsc2UKQEAgLTEzMDMsOSArMTIwNiw3IEBAIHZvaWQgRWRp
dG9yOjpwYXN0ZSgpCiAgICAgICAgIHJldHVybjsgLy8gREhUTUwgZGlkIHRoZSB3aG9sZSBvcGVy
YXRpb24KICAgICBpZiAoIWNhblBhc3RlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBSRU1PVkVf
TUFSS0VSU19VUE9OX0VESVRJTkcKLSAgICByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJz
RnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICB1cGRhdGVNYXJrZXJzRm9y
V29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGxvYWRlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAg
ICAgbG9hZGVyLT5zZXRBbGxvd1N0YWxlUmVzb3VyY2VzKHRydWUpOwogICAgIGlmIChtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKQEAgLTEzMjEsOSArMTIy
Miw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KCkKICAgICAgICAgcmV0dXJuOwog
ICAgIGlmICghY2FuUGFzdGUoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFJFTU9WRV9NQVJLRVJT
X1VQT05fRURJVElORwotICAgIHJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29y
ZHNUb0JlRWRpdGVkKGZhbHNlKTsKLSNlbmRpZgorICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0Fm
ZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9h
cmQoUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKSk7CiB9CiAKQEAgLTE0NzYsNyArMTM3
NSw3IEBAIHZvaWQgRWRpdG9yOjp0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQoKQogCiBi
b29sIEVkaXRvcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIHsKLSAg
ICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZCgpOworICAgIHJldHVybiBtX3NwZWxsaW5nQ29ycmVjdG9yLT5pc0F1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKIH0KIAogdm9pZCBFZGl0b3I6OnRvZ2dsZUF1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpCkBAIC0yMDY4LDIzICsxOTY3LDggQEAgdm9pZCBF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24gJm1vdmluZ1NlbGVjdGkKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBp
bmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKQogewogI2lmIFVTRShVTklGSUVEX1RFWFRf
Q0hFQ0tJTkcpCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIC8vIEFwcGx5
IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5leHQgcm91bmQgb2Ygc3BlbGwgY2hlY2tp
bmcuCi0gICAgYm9vbCBkb0FwcGx5Q29ycmVjdGlvbiA9IHRydWU7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb25BZnRlclR5cGluZy52aXNpYmxlU3RhcnQo
KTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3JkID0gVmlzaWJsZVNlbGVjdGlvbihz
dGFydE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9m
V29yZChzdGFydE9mU2VsZWN0aW9uLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKLSAgICBpZiAo
Y3VycmVudFdvcmQudmlzaWJsZUVuZCgpID09IHN0YXJ0T2ZTZWxlY3Rpb24pIHsKLSAgICAgICAg
U3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0KGN1cnJlbnRXb3JkLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpOwotICAgICAgICBpZiAod29yZFRleHQubGVuZ3RoKCkgPiAwICYmIGlzQW1iaWd1
b3VzQm91bmRhcnlDaGFyYWN0ZXIod29yZFRleHRbd29yZFRleHQubGVuZ3RoKCkgLSAxXSkpCi0g
ICAgICAgICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoZG9B
cHBseUNvcnJlY3Rpb24pCi0gICAgICAgIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChkaXNt
aXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
QWNjZXB0ZWQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9u
QWZ0ZXJUeXBpbmcpOwotI2VuZGlmCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlQZW5k
aW5nQ29ycmVjdGlvbihzZWxlY3Rpb25BZnRlclR5cGluZyk7CisKICAgICBUZXh0Q2hlY2tpbmdP
cHRpb25zIHRleHRDaGVja2luZ09wdGlvbnMgPSAwOwogICAgIGlmIChpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IE1hcmtT
cGVsbGluZzsKQEAgLTIxMTMsNyArMTk5Nyw2IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxp
bmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAg
ICAgfQogCiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7CiAg
ICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTIyMjIsNyArMjEwNSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiB7CiAj
aWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUg
cGVuZGluZyBhdXRvY29ycmVjdGlvbiBhdCB0aGlzIG1vbWVudC4KLSAgICBBU1NFUlQoIW1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCk7CisgICAgQVNTRVJUKCFtX3NwZWxs
aW5nQ29ycmVjdG9yLT5oYXNQZW5kaW5nQ29ycmVjdGlvbigpKTsKIAogICAgIGJvb2wgc2hvdWxk
TWFya1NwZWxsaW5nID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIE1hcmtTcGVsbGluZzsKICAgICBi
b29sIHNob3VsZE1hcmtHcmFtbWFyID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIE1hcmtHcmFtbWFy
OwpAQCAtMjI4MSwxMSArMjE2NCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDaGVja2luZ1R5cGVNYXNr
Rm9yKHRleHRDaGVja2luZ09wdGlvbnMpLCByZXN1bHRzKTsKICAgICAgICAgCiAKLSNpZiBTVVBQ
T1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgLy8gSWYgdGhpcyBjaGVja2luZyBpcyBvbmx5
IGZvciBzaG93aW5nIGNvcnJlY3Rpb24gcGFuZWwsIHdlIHNob3VsZG4ndCBib3RoZXIgdG8gbWFy
ayBtaXNzcGVsbGluZ3MuCiAgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpCiAgICAg
ICAgIHNob3VsZE1hcmtTcGVsbGluZyA9IGZhbHNlOwotI2VuZGlmCiAKICAgICBpbnQgb2Zmc2V0
RHVlVG9SZXBsYWNlbWVudCA9IDA7CiAKQEAgLTIzMDQsMTAgKzIxODUsOCBAQCB2b2lkIEVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdP
cHRpb25zIHRleHRDaAogICAgICAgICBpZiAoc2hvdWxkTWFya1NwZWxsaW5nICYmIHJlc3VsdC0+
dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0TG9jYXRpb24gPj0gc3Bl
bGxpbmdQYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0
TGVuZ3RoIDw9IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgIXJlc3VsdEVuZHNBdEFtYmlndW91
c0JvdW5kYXJ5KSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1
bHRMb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdS
YW5nZSA9IHNwZWxsaW5nUGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXN1bHRM
ZW5ndGgpOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICAgICAgICAgIGlm
IChtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmhhc01hcmtlcnMobWlzc3BlbGxpbmdS
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pKQorICAg
ICAgICAgICAgaWYgKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5pc1NwZWxsaW5nTWFya2VyQWxsb3dl
ZChtaXNzcGVsbGluZ1JhbmdlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNlbmRpZiAv
LyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgICAgICBtaXNzcGVsbGluZ1Jh
bmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2Vy
KG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkTWFya0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRD
aGVja2luZ1R5cGVHcmFtbWFyICYmIGdyYW1tYXJQYXJhZ3JhcGguY2hlY2tpbmdSYW5nZUNvdmVy
cyhyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKSkgewogICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CkBAIC0yMzUzLDcgKzIyMzIs
NyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAgICAgICAgICAgICAgIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsK
ICAgICAgICAgICAgICAgICBpZiAobWFya2Vycy0+aGFzTWFya2VycyhyYW5nZVRvUmVwbGFjZS5n
ZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KSkgewogICAgICAgICAgICAgICAgICAg
ICBkb1JlcGxhY2VtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHJlY29yZFNwZWxs
Y2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKHJhbmdlVG9SZXBsYWNlLmdldCgp
LCByZXBsYWNlZFN0cmluZywgcmVzdWx0LT5yZXBsYWNlbWVudCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9k
aWZpZWRDb3JyZWN0aW9uKHJhbmdlVG9SZXBsYWNlLmdldCgpLCByZXBsYWNlZFN0cmluZywgcmVz
dWx0LT5yZXBsYWNlbWVudCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJzLT5o
YXNNYXJrZXJzKHJhbmdlVG9SZXBsYWNlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRD
b3JyZWN0aW9uKSkKICAgICAgICAgICAgICAgICAgICAgZG9SZXBsYWNlbWVudCA9IGZhbHNlOwog
ICAgICAgICAgICAgfQpAQCAtMjM2MSwyNCArMjI0MCwxNyBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRl
eHRDaAogICAgICAgICAgICAgaWYgKCEoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3Vs
ZFNob3dDb3JyZWN0aW9uUGFuZWwpIHx8ICFkb1JlcGxhY2VtZW50KQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICAg
ICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCk7CisgICAgICAgICAgICAgICAgLy8gc2hv
dWxkU2hvd0NvcnJlY3Rpb25QYW5lbCBjYW4gYmUgdHJ1ZSBvbmx5IHdoZW4gdGhlIHBhbmVsIGlz
IGF2YWlsYWJsZS4KICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TG9jYXRpb24gKyByZXN1bHRM
ZW5ndGggPT0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICAv
LyBXZSBvbmx5IHNob3cgdGhlIGNvcnJlY3Rpb24gcGFuZWwgb24gdGhlIGxhc3Qgd29yZC4KLSAg
ICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJh
bmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJvdW5k
aW5nQm94LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSBy
YW5nZVRvUmVwbGFjZTsKLSAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0g
cmVzdWx0LT5yZXBsYWNlbWVudDsKLSAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgY2xpZW50KCktPnNo
b3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRp
bmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcmVzdWx0LT5yZXBs
YWNlbWVudCwgVmVjdG9yPFN0cmluZz4oKSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3BlbGxp
bmdDb3JyZWN0b3ItPnNob3cocmFuZ2VUb1JlcGxhY2UsIHJlc3VsdC0+cmVwbGFjZW1lbnQpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHNob3dpbmcgY29ycmVjdGlv
biBwYW5lbCwgd2UgaWdub3JlIG90aGVyIGNvcnJlY3Rpb24gb3IgcmVwbGFjZW1lbnQuCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0jZW5kaWYKIAogICAgICAgICAg
ICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91
bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKSkKQEAgLTIzOTIsMTIgKzIyNjQs
NyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAgICAgICAgICAgICAgIGlmIChjYW5FZGl0
UmljaGx5KCkpCiAgICAgICAgICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChDcmVhdGVMaW5rQ29t
bWFuZDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHJlc3VsdC0+cmVwbGFjZW1lbnQpKTsK
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuRWRpdCgpICYmIHNob3VsZEluc2VydFRleHQocmVz
dWx0LT5yZXBsYWNlbWVudCwgcmFuZ2VUb1JlcGxhY2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
blR5cGVkKSkgewotICAgICAgICAgICAgICAgIGJvb2wgdXNlU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZCA9IGZhbHNlOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKQot
ICAgICAgICAgICAgICAgICAgICB1c2VTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kID0gdHJ1ZTsK
LSNlbmRpZgotICAgICAgICAgICAgICAgIGlmICh1c2VTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
KQogICAgICAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBsYWNlLCByZXN1bHQtPnJlcGxhY2VtZW50KSk7CiAgICAg
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKQEAgLTI0MTcsMTkgKzIyODQs
OSBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAgICAgICAgICAgICAgICAgICAgICAgYW1i
aWd1b3VzQm91bmRhcnlPZmZzZXQgPSBzZWxlY3Rpb25PZmZzZXQgLSAxOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5n
VHlwZUNvcnJlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNv
IHRoYXQgY29ycmVjdGlvbnMgY2FuIGVhc2lseSBiZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNv
cnJlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdl
ID0gc3BlbGxpbmdQYXJhZ3JhcGguc3VicmFuZ2UocmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50
TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiBtYXJrZXJUeXBlc1RvQWRkID0gbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigp
OwotICAgICAgICAgICAgICAgICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMg
PSByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyVHlwZXNU
b0FkZC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1hcmtlclR5cGVzVG9BZGRbaV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5n
ZS5nZXQoKSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtl
cihyZXBsYWNlZFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBBZGQgYSBtYXJrZXIgc28g
dGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5IGJlIHVuZG9uZSBhbmQgd29uJ3QgYmUgcmUtY29y
cmVjdGVkLgorICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5n
VHlwZUNvcnJlY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIG1fc3BlbGxpbmdDb3JyZWN0b3It
Pm1hcmtDb3JyZWN0aW9uKHNwZWxsaW5nUGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9u
LCByZXBsYWNlbWVudExlbmd0aCksIHJlcGxhY2VkU3RyaW5nKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTI0NTYsMzAgKzIzMTMsNiBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRl
eHRDaAogI2VuZGlmIC8vIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiB9CiAKLXZvaWQgRWRp
dG9yOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5n
ZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJp
bmcmIGNvcnJlY3Rpb24pCi17Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAg
IGlmICghcmFuZ2VPZkNvcnJlY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVjdGlvbi0+c3RhcnRDb250YWlu
ZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4g
Y29ycmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLT5tYXJrZXJzSW5SYW5nZShyYW5nZU9mQ29y
cmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOwotICAgIGlmIChjb3JyZWN0
ZWRPbmNlTWFya2Vycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBT
cGVsbGluZyBjb3JyZWN0ZWQgdGV4dCBoYXMgYmVlbiBlZGl0ZWQuIFdlIG5lZWQgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgdXNlciBoYXMgcmV2ZXJ0ZWQgaXQgdG8gb3JpZ2luYWwgdGV4dCBvcgotICAg
IC8vIGVkaXRlZCBpdCB0byBzb21ldGhpbmcgZWxzZSwgYW5kIG5vdGlmeSBzcGVsbGNoZWNrZXIg
YWNjb3JkaW5nbHkuCi0gICAgaWYgKG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29y
cmVjdGVkT25jZU1hcmtlcnMpICYmIGNvcnJlY3RlZE9uY2VNYXJrZXJzWzBdLmRlc2NyaXB0aW9u
ID09IGNvcnJlY3RlZCkKLSAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNv
cnJlY3Rpb24pOwotICAgIGVsc2UKLSAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvbkVkaXRlZCwgY29ycmVjdGVk
LCBjb3JyZWN0aW9uKTsKLSAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlT2ZDb3JyZWN0
aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShyYW5nZU9mQ29ycmVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOwotI2VuZGlmCi19Ci0KIHZvaWQgRWRpdG9y
OjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
KQogewogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCkBAIC0yNDkwLDE4ICsyMzIzLDEy
IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nKQogICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmlu
Zywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFN0cmlu
ZyByZXBsYWNlbWVudCA9IHBsYWluVGV4dChzZWxlY3Rpb24uZ2V0KCkpOwotICAgIGNsaWVudCgp
LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rp
b25SZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50KTsKLSNlbmRpZgorICAgIG1f
c3BlbGxpbmdDb3JyZWN0b3ItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChy
ZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uKTsKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFy
YWdyYXBoKHNlbGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2Vk
U3RyaW5nLCBmYWxzZSwgZmFsc2UpOwogICAgIFJlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlID0g
cGFyYWdyYXBoLnN1YnJhbmdlKHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3Ry
aW5nLmxlbmd0aCgpKTsKICAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTAotICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIo
KS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0jZW5kaWYKKyAgICBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5tYXJrUmV2ZXJzZWQoY2hhbmdlZFJhbmdlLmdldCgpKTsKICNlbHNl
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3Ry
aW5nKTsKQEAgLTI1MjYsMTQwICsyMzUzLDE2IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjCiAj
ZW5kaWYKIH0KIAotdm9pZCBFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8
RWRpdG9yPiopCi17Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIG1fY29y
cmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IGZhbHNlOwotICAgIHN3aXRjaCAobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbjogewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgICAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgp
KTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdv
cmRJZk9uQm91bmRhcnkpOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMg
PSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0KTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyhNYXJrU3BlbGxpbmcgfCBTaG93Q29ycmVjdGlvblBhbmVs
LCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOwotICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZl
cnNpb246IHsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsK
LSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAg
IEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBpZiAoIWJvdW5kaW5n
Qm94LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVs
KG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
bWVudFN0cmluZywgVmVjdG9yPFN0cmluZz4oKSk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6
IHsKLSAgICAgICAgaWYgKHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCkpICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWlu
VGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkKS5wYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKLSAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gc3VnZ2VzdGlvbnM7Ci0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3Jk
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3Vn
Z2VzdGlvbnMpOwotICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB0b3BTdWdnZXN0aW9u
ID0gc3VnZ2VzdGlvbnMuZmlyc3QoKTsKLSAgICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDApOwot
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBG
bG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgaWYgKCFib3VuZGluZ0Jv
eC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbCht
X2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7Ci0g
ICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBFZGl0b3I6Omhh
bmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0g
ICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCk7Ci0gICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3Vt
ZW50KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhl
IHdvcmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRp
bWVyIGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgotICAgIGlmIChjdXJyZW50
V29yZCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotCi0g
ICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7Ci0gICAgY2FzZSBD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgotICAgICAgICBpZiAoY29y
cmVjdGlvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKLSAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlv
blBhbmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0
b3IpCi0gICAgICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9j
dW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3Ry
aW5nKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjoKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxl
bmd0aCgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRT
dHJpbmcgPSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZv
KG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNs
ZWFyKCk7Ci19Ci0KLXZvaWQgRWRpdG9yOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJF
Q1RJT05fUEFORUwKLSAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZh
bCA9IDAuMzsKLSAgICBpZiAoaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkp
IHsKLSAgICAgICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29y
cmVjdGlvbikKLSAgICAgICAgICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0
aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQu
Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xl
YXIoKTsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7Ci0g
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5l
bFRpbWVySW50ZXJ2YWwpOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwot
I2VuZGlmCi19Ci0KLXZvaWQgRWRpdG9yOjpzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKQordm9p
ZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikKIHsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0g
ICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdG9wKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0jZW5kaWYKKyAgICBtX3NwZWxsaW5nQ29y
cmVjdG9yLT5yZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc2VsZWN0aW9uT2ZDb3Jy
ZWN0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CiB9CiAKLXZvaWQgRWRpdG9yOjpkaXNtaXNz
Q29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29u
Rm9yRGlzbWlzc2luZykKK3ZvaWQgRWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BdFdvcmRCb3VuZGFyeSkKIHsK
LSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgaWYgKCFtX2NvcnJlY3Rpb25Q
YW5lbEluZm8uaXNBY3RpdmUpCisgICAgaWYgKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5zaG91bGRS
ZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotICAgIG1fY29ycmVjdGlvblBhbmVsSXNE
aXNtaXNzZWRCeUVkaXRvciA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGll
bnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHJlYXNvbkZvckRpc21pc3NpbmcpOwotI2VuZGlmCi19Ci0KLVN0
cmluZyBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKLXsKLSNpZiBTVVBQT1JUX0FV
VE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3Rp
dmUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUgPSBmYWxzZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0
b3IgPSB0cnVlOwotICAgIGlmICghY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICByZXR1cm4gY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKHJlYXNvbkZv
ckRpc21pc3NpbmcpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVhc29uRm9yRGlzbWlzc2lu
Zyk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotI2VuZGlmCi19CiAKLXZvaWQgRWRpdG9yOjpyZW1v
dmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChib29sIGRvTm90
UmVtb3ZlSWZTZWxlY3Rpb25BdFdvcmRCb3VuZGFyeSkKLXsKICAgICAvLyBXZSB3YW50IHRvIHJl
bW92ZSB0aGUgbWFya2VycyBmcm9tIGEgd29yZCBpZiBhbiBlZGl0aW5nIGNvbW1hbmQgd2lsbCBj
aGFuZ2UgdGhlIHdvcmQuIFRoaXMgY2FuIGhhcHBlbiBpbiBvbmUgb2YKICAgICAvLyBzZXZlcmFs
IHNjZW5hcmlvczoKICAgICAvLyAxLiBJbnNlcnQgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQuCkBA
IC0yNzI1LDEwMyArMjQyOCw2IEBAIHZvaWQgRWRpdG9yOjpyZW1vdmVTcGVsbEFuZENvcnJlY3Rp
b25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChib29sIGRvTm90UmVtb3ZlCiAgICAgZG9jdW1l
bnQtPm1hcmtlcnMoKS0+Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1Jhbmdl
KHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKIH0KIAotdm9p
ZCBFZGl0b3I6OmFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc1RvQWRkKQotewotI2lmIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0g
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsK
LSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBz
ZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQYXJh
Z3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlv
bigpKSk7Ci0KLSAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJhbmdl
VG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCi0gICAg
Ly8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9m
IHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5vdCB2YWxpZCBhbnltb3JlLgotICAgIC8vIFNvIGJlZm9y
ZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFy
dCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZAotICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBz
dGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0
aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAotICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIElu
IG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSBy
YW5nZQotICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0
aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQuCi0gICAgUmVmUHRyPFJhbmdl
PiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVjKS0+
ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3Np
dGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9u
KCkpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9zaXRpb24gc3RhcnRQ
b3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJ
blBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNl
ZC5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1
dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlv
biBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBs
YWNlLgotICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
LmdldCgpKTsKLQotICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0
aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCi0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgYXBwbHlDb21tYW5kKFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2Ug
PSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoLCAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKTsKLSAgICBTdHJpbmcgbmV3VGV4
dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKLQotICAgIC8vIENoZWNrIHRv
IHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCi0gICAgaWYgKG5ld1RleHQgIT0gbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5z
dGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgc2l6ZV90IHNpemUg
PSBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewotICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBl
ID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKLSAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotICAg
ICAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24gJiYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3Jy
ZWN0ZWQpKQotICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZWRTdHJpbmc7Ci0gICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJh
bmdlLmdldCgpLCBtYXJrZXJUeXBlLCBkZXNjcmlwdGlvbik7Ci0gICAgfQotI2Vsc2UgLy8gU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFVOVVNFRF9QQVJBTShtYXJrZXJUeXBlc1Rv
QWRkKTsKLSNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi19Ci0KLWJvb2wg
RWRpdG9yOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpCi17
Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgIW1f
Y29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
UG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS5zdGFydCgpOwotCi0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7Ci0gICAgICAgIGhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfSAKLSAgICAKLSAgICAvLyBQZW5kaW5nIGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5cyBi
ZSB3aGVyZSBjYXJldCBpcy4gQnV0IGluIGNhc2UgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIHdl
IHN0aWxsIHdhbnQgdG8gZGlzbWlzcyB0aGUgcGFuZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhlIGNv
cnJlY3Rpb24uCi0gICAgQVNTRVJUKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKTsKLSAgICBkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0jaWYgU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVk
LCBjb3JyZWN0aW9uKTsKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsK
LSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVj
dGVkLCBTZWxlY3Rpb25Db250cm9sbGVyOjpDbG9zZVR5cGluZyB8IFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkNsZWFyVHlwaW5nU3R5bGUgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpTcGVsbENvcnJlY3Rp
b25UcmlnZ2VyZWQpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1f
ZnJhbWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFy
dCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCkpOwotCi0gICAgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpOwotICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAg
ICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCk7Ci0gICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0jZWxzZSAvLyBTVVBQT1JUX0FVVE9DT1JSRUNU
SU9OX1BBTkVMCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbk9mQ29ycmVjdGVkKTsKLSAgICBV
TlVTRURfUEFSQU0oY29ycmVjdGVkKTsKLSAgICBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7Ci0j
ZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotfQotCiBQYXNzUmVmUHRyPFJh
bmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQog
ewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50QXRQb2ludCh3aW5k
b3dQb2ludCk7CkBAIC0yOTQ0LDYgKzI1NTAsMjIgQEAgdm9pZCBFZGl0b3I6OmFkZFRvS2lsbFJp
bmcoUmFuZ2UqIHJhbmdlLCBib29sIHByZXBlbmQpCiAgICAgbV9zaG91bGRTdGFydE5ld0tpbGxS
aW5nU2VxdWVuY2UgPSBmYWxzZTsKIH0KIAordm9pZCBFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBh
bmVsVGltZXIoKQoreworICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnN0YXJ0Q29ycmVjdGlvblBh
bmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbik7Cit9CisK
K3ZvaWQgRWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBj
b3JyZWN0aW9uKQoreworICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdChjb3JyZWN0aW9uKTsKK30KKworCit2b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbEFzSWdub3JlZCgpCit7CisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+ZGlzbWlz
cyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Cit9CisKIGJvb2wg
RWRpdG9yOjppbnNpZGVWaXNpYmxlQXJlYShjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7
CiAgICAgaWYgKG1fZnJhbWUtPmV4Y2x1ZGVGcm9tVGV4dFNlYXJjaCgpKQpAQCAtMzUxNiwxNCAr
MzEzOCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVk
KGJvb2wgZmxhZykKIAogdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBTZWxlY3Rpb25Db250cm9sbGVyOjpT
ZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTAotICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rp
b24gYmVmb3JlIHdlIGNhbGwgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4K
LSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpKTsKLSAgICBpZiAoY3VycmVudFNlbGVjdGlvbiAhPSBvbGRTZWxlY3Rp
b24pIHsKLSAgICAgICAgc3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7Ci0gICAgICAgIGRpc21p
c3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9y
ZWQpOwotICAgIH0KLSNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAg
bV9zcGVsbGluZ0NvcnJlY3Rvci0+c3RvcFBlbmRpbmdDb3JyZWN0aW9uKG9sZFNlbGVjdGlvbik7
CiAKICAgICBib29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAmIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkNsb3NlVHlwaW5nOwogICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQg
PSB0aGlzLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwpAQCAtMzU0MCwxMCAr
MzE1NSw4IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgU2VsCiAgICAgICAgIH0KIAogICAgICAgICBi
b29sIHNob3VsZENoZWNrU3BlbGxpbmdBbmRHcmFtbWFyID0gdHJ1ZTsKLSNpZiBTVVBQT1JUX0FV
VE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgIC8vIERvbid0IGNoZWNrIHNwZWxsaW5nIGFuZCBn
cmFtbWFyIGlmIHRoZSBjaGFuZ2Ugb2Ygc2VsZWN0aW9uIGlzIHRyaWdnZXJlZCBieSBzcGVsbGlu
ZyBjb3JyZWN0aW9uIGl0c2VsZi4KICAgICAgICAgc2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1t
YXIgPSAhKG9wdGlvbnMgJiBTZWxlY3Rpb25Db250cm9sbGVyOjpTcGVsbENvcnJlY3Rpb25Ucmln
Z2VyZWQpOwotI2VuZGlmCiAKICAgICAgICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hlY2sgc3BlbGxp
bmcgZWxzZXdoZXJlLCBzbyBkb24ndCByZWRvIGl0IGhlcmUuCiAgICAgICAgIC8vIElmIHRoaXMg
aXMgYSBjaGFuZ2UgaW4gc2VsZWN0aW9uIHJlc3VsdGluZyBmcm9tIGEgZGVsZXRlIG9wZXJhdGlv
biwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGY5YWVjNDA2OTBhMDFmM2EzODc4NTVjYTIy
YTA2NTdlNzQ1YWIzMTUuLjhiOTExNTMxZDMxNTMzMTA5MDAzZWQ5NTg1ZTY1MDNlODE1NWY0Mzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAi
Q2xpcGJvYXJkQWNjZXNzUG9saWN5LmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJD
b3JyZWN0aW9uUGFuZWxJbmZvLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNs
dWRlICJFZGl0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRWRpdGluZ0JlaGF2aW9yLmgiCkBAIC01MSw2
ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENsaXBib2FyZDsKK2Ns
YXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBEZWxldGVCdXR0b25Db250
cm9sbGVyOwogY2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0b3JDbGllbnQ7CkBAIC0zMjUs
MTAgKzMyNSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFRvS2lsbFJpbmcoUmFuZ2UqLCBi
b29sIHByZXBlbmQpOwogCi0gICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSk7CisgICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5l
bFRpbWVyKCk7CiAgICAgLy8gSWYgdXNlciBjb25maXJtZWQgYSBjb3JyZWN0aW9uIGluIHRoZSBj
b3JyZWN0aW9uIHBhbmVsLCBjb3JyZWN0aW9uIGhhcyBub24temVybyBsZW5ndGgsIG90aGVyd2lz
ZSBpdCBtZWFucyB0aGF0IHVzZXIgaGFzIGRpc21pc3NlZCB0aGUgcGFuZWwuCiAgICAgdm9pZCBo
YW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKLSAg
ICB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rp
b25QYW5lbCk7CisgICAgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CiAK
ICAgICB2b2lkIHBhc3RlQXNGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBi
b29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlKTsKICAgICB2b2lkIHBhc3RlQXNQbGFp
blRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBzbWFydFJlcGxhY2UpOwpAQCAtMzg0LDcgKzM4NCw3
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBzZWxlY3Rpb25TdGFydEhhc01hcmtlckZv
cihEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0
OwotICAgIHZvaWQgcmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVF
ZGl0ZWQoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpOworICAgIHZv
aWQgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBvbmx5SGFuZGxl
V29yZHNDb250YWluaW5nU2VsZWN0aW9uKTsKIAogcHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFt
ZTsKQEAgLTM5OSwxMCArMzk5LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkU3RhcnRO
ZXdLaWxsUmluZ1NlcXVlbmNlOwogICAgIGJvb2wgbV9zaG91bGRTdHlsZVdpdGhDU1M7CiAgICAg
T3duUHRyPEtpbGxSaW5nPiBtX2tpbGxSaW5nOwotICAgIENvcnJlY3Rpb25QYW5lbEluZm8gbV9j
b3JyZWN0aW9uUGFuZWxJbmZvOwogICAgIE93blB0cjxTcGVsbENoZWNrZXI+IG1fc3BlbGxDaGVj
a2VyOwotICAgIFRpbWVyPEVkaXRvcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsKLSAgICBib29s
IG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcjsKKyAgICBPd25QdHI8U3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcj4gbV9zcGVsbGluZ0NvcnJlY3RvcjsKICAgICBWaXNpYmxl
U2VsZWN0aW9uIG1fbWFyazsKICAgICBib29sIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGln
aHRlZDsKIApAQCAtNDE3LDcgKzQxNSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXZlYWxTZWxl
Y3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NP
ckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJvb2wgY2hlY2tTcGVsbGluZywg
UmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBUZXh0Q2hlY2tpbmdU
eXBlTWFzayB0ZXh0Q2hlY2tpbmdUeXBlTWFza0ZvcihUZXh0Q2hlY2tpbmdPcHRpb25zKTsKLSAg
ICB2b2lkIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJh
bmdlKiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7
CiAKICAgICB2b2lkIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAgICAgdm9pZCBjb25maXJtQ29tcG9z
aXRpb24oY29uc3QgU3RyaW5nJiwgYm9vbCBwcmVzZXJ2ZVNlbGVjdGlvbik7CkBAIC00MjgsMTAg
KzQyNSwxMCBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IG5leHRWaXNpYmxlUmFu
Z2UoUmFuZ2UqLCBjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiAKICAgICB2b2lkIGNoYW5n
ZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rp
b24sIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wgY2xlYXJUeXBpbmdTdHlsZSk7Ci0gICAgdm9pZCBj
b3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPEVkaXRvcj4qKTsKKwogICAgIE5vZGUqIGZp
bmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKICAgICB2b2lkIHN0b3BDb3JyZWN0
aW9uUGFuZWxUaW1lcigpOwotICAgIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKKwogICAgIHZvaWQgYXBwbHlDb3Jy
ZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4m
IG1hcmtlclR5cGVzVG9BZGQpOwogICAgIC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rpb24gd2Fz
IGFwcGxpZWQsIGZhbHNlIG90aGVyd2lzZS4KICAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRleCBhZmU3NGE4ZDk4NGNjZTEy
NzgyOWIyNWNlNDRlNTg5Mzk5N2M5MjkwLi5mMDI5N2MxNTQ4ZDA5ZWMxODFmYzViMjExOTFlNzU5
OWNiOTA4NzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgiCiAKLSNpbmNsdWRlICJD
b3JyZWN0aW9uUGFuZWxJbmZvLmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MWI1ODBkMWViMDU0MWE3ZDUxOWQwODlhYTc3ODZlYzhkMGE2NTA4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmNwcApAQCAtMCwwICsxLDQ4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJFZGl0Q29tbWFuZC5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5oIgorI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCisjaW5j
bHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlICJ2
aXNpYmxlX3VuaXRzLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJ
T05fUEFORUwKKworc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4mIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JB
dXRvQ29ycmVjdGlvbiwgKCkpOworICAgIGlmIChtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9u
LmlzRW1wdHkoKSkgeworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVu
ZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1
dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7
CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFy
a2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRv
Q29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOworICAgIH0K
KyAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbjsKK30KKworc3RhdGljIGNv
bnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yUmVw
bGFjZW1lbnQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCwgKCkpOworICAgIGlm
IChtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmlzRW1wdHkoKSkgeworICAgICAgICBtYXJrZXJU
eXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwor
ICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6
U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgfQorICAgIHJldHVybiBtYXJrZXJUeXBlc0Zv
clJlcGxhY2VtZW50OworfQorCitzdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2Ny
aXB0aW9uKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpCit7CisgICAgaWYg
KG1hcmtlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFN0
cmluZyYgZGVzY3JpcHRpb24gPSBtYXJrZXJzWzBdLmRlc2NyaXB0aW9uOworICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoZGVzY3Jp
cHRpb24gIT0gbWFya2Vyc1tpXS5kZXNjcmlwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorICAgIDog
bV9mcmFtZShmcmFtZSkKKyAgICAsIG1fY29ycmVjdGlvblBhbmVsVGltZXIodGhpcywgJlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCit7Cit9
CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyKCkKK3sKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWxJZ25vcmVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFy
dENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBl
KQoreworICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4z
OworICAgIGlmICghaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0aGVu
IHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQuCisg
ICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikK
KyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7
CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7CisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZh
bCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcENvcnJlY3Rp
b25QYW5lbFRpbWVyKCkKK3sKKyAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsKKyAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKwor
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQoreworICAgIC8vIE1ha2Ugc3Vy
ZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFya01p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1
cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICBp
ZiAoY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCit7CisgICAgLy8gQXBwbHkgcGVuZGluZyBhdXRv
Y29ycmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBvZiBzcGVsbCBjaGVja2luZy4KKyAgICBib29s
IGRvQXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNl
bGVjdGlvbiA9IHNlbGVjdGlvbkFmdGVyVHlwaW5nLnZpc2libGVTdGFydCgpOworICAgIFZpc2li
bGVTZWxlY3Rpb24gY3VycmVudFdvcmQgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0
YXJ0T2ZTZWxlY3Rpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZT
ZWxlY3Rpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOworICAgIGlmIChjdXJyZW50V29yZC52
aXNpYmxlRW5kKCkgPT0gc3RhcnRPZlNlbGVjdGlvbikgeworICAgICAgICBTdHJpbmcgd29yZFRl
eHQgPSBwbGFpblRleHQoY3VycmVudFdvcmQudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Cisg
ICAgICAgIGlmICh3b3JkVGV4dC5sZW5ndGgoKSA+IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFyeUNo
YXJhY3Rlcih3b3JkVGV4dFt3b3JkVGV4dC5sZW5ndGgoKSAtIDFdKSkKKyAgICAgICAgICAgIGRv
QXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7CisgICAgfQorICAgIGlmIChkb0FwcGx5Q29ycmVjdGlv
bikgeworICAgICAgICBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoZGlzbWlzc1Nvb24oUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKSk7IAorICAgICAgICBkaXNt
aXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCk7CisgICAgfSBl
bHNlCisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVh
cigpOworfQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhhc1BlbmRpbmdD
b3JyZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkOworfQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFu
Z2UpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkt
Pmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24pOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnQpCit7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZv
clJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkID0gcmFuZ2VUb1JlcGxhY2U7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlbWVudDsKKyAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOworICAgIGNsaWVudCgpLT5zaG93
Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5n
Qm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50LCBW
ZWN0b3I8U3RyaW5nPigpKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpoYW5kbGVDYW5jZWxPcGVyYXRpb24oKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LmlzQWN0aXZlID0gZmFsc2U7CisgICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsQ2FuY2VsbGVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9y
RGlzbWlzc2luZykKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZh
bHNlOworICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7Cisg
ICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bChyZWFzb25Gb3JEaXNtaXNzaW5nKTsKK30KKworU3RyaW5nIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwg
cmVhc29uRm9yRGlzbWlzc2luZykKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRC
eUVkaXRvciA9IHRydWU7CisgICAgaWYgKCFjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIHJldHVybiBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24ocmVh
c29uRm9yRGlzbWlzc2luZyk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbiA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+
Y2xvbmVSYW5nZShlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRT
dGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBzdGFydE9mUGFy
YWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3Np
dGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24u
Z2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC0+ZW5kUG9zaXRpb24oKSkpOworCisgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29y
ZCBhdCByYW5nZSByYW5nZVRvQmVSZXBsYWNlZCwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0
aGF0IHJhbmdlLgorICAgIC8vIEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxh
Y2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFsaWQgYW55bW9yZS4K
KyAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0
byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQKKyAgICAvLyBy
ZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBo
LiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKKyAgICAvLyB0byBzdG9y
ZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8g
Zmlyc3QgY3JlYXRlIGEgcmFuZ2UKKyAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBv
ZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkLgor
ICAgIFJlZlB0cjxSYW5nZT4gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFy
dENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJl
Y3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlv
bi0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAg
IFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCk7CisgICAgY29ycmVj
dGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9m
UmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVRv
QmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAo
ZWMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24g
b2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVw
bGFjZW1lbnQgdG9vayBwbGFjZS4KKyAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldElu
UGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7CisKKyAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNl
IHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwg
cmFuZ2UgYXJvdW5kLgorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOworICAg
IGFwcGx5Q29tbWFuZChTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb0Jl
UmVwbGFjZWQsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykpOworICAg
IHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgUmVmUHRyPFJhbmdlPiBy
ZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFw
aCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSk7Cisg
ICAgU3RyaW5nIG5ld1RleHQgPSBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7CisK
KyAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVkLgorICAgIGlmIChu
ZXdUZXh0ICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVw
bGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwor
ICAgIHNpemVfdCBzaXplID0gbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGUgbWFya2VyVHlwZSA9IG1hcmtlclR5cGVzVG9BZGRbaV07CisgICAgICAgIFN0cmluZyBk
ZXNjcmlwdGlvbjsKKyAgICAgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUg
IT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uICYmIChtYXJrZXJUeXBl
ID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50
TWFya2VyOjpBdXRvY29ycmVjdGVkKSkKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nOworICAgICAgICBtYXJrZXJzLT5hZGRNYXJr
ZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSwgZGVzY3JpcHRpb24pOworICAg
IH0KK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseUF1dG9jb3Jy
ZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgIW1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fY29ycmVjdGlvblBh
bmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVj
dGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlv
biA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpOworCisgICAgaWYg
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9
PSBjYXJldFBvc2l0aW9uKSB7CisgICAgICAgIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChk
aXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKyAgICAKKyAgICAvLyBQZW5kaW5nIGNvcnJl
Y3Rpb24gc2hvdWxkIGFsd2F5cyBiZSB3aGVyZSBjYXJldCBpcy4gQnV0IGluIGNhc2UgdGhpcyBp
cyBub3QgYWx3YXlzIHRydWUsIHdlIHN0aWxsIHdhbnQgdG8gZGlzbWlzcyB0aGUgcGFuZWwgd2l0
aG91dCBhY2NlcHRpbmcgdGhlIGNvcnJlY3Rpb24uCisgICAgQVNTRVJUKG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9u
KTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVk
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29u
c3QgU3RyaW5nJiBjb3JyZWN0aW9uKQoreworICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVj
dGVkLCBjb3JyZWN0aW9uKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQo
KTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29y
cmVjdGVkLCBTZWxlY3Rpb25Db250cm9sbGVyOjpDbG9zZVR5cGluZyB8IFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkNsZWFyVHlwaW5nU3R5bGUgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpTcGVsbENvcnJl
Y3Rpb25UcmlnZ2VyZWQpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KG1fZnJhbWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5z
dGFydCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCkpOworCisgICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpOworICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2UuZ2V0KCksIERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
KyAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCk7CisgICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyPiopCit7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3Nl
ZEJ5RWRpdG9yID0gZmFsc2U7CisgICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFu
ZWxUeXBlKSB7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0
aW9uOiB7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxl
Y3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgICAgICBWaXNpYmxlUG9z
aXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAg
ICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwg
c3RhcnQpOworICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+bWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyhFZGl0b3I6Ok1hcmtTcGVsbGluZyB8IEVkaXRvcjo6U2hvd0Nv
cnJlY3Rpb25QYW5lbCwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCAw
KTsKKyAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlUmV2ZXJzaW9uOiB7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0Fj
dGl2ZSA9IHRydWU7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmlu
ZyA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0
KCkpOworICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2Uo
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAg
aWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0Nv
cnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0Jv
eCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZW1lbnRTdHJpbmcsIFZlY3RvcjxTdHJpbmc+KCkpOworICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGlu
Z1N1Z2dlc3Rpb25zOiB7CisgICAgICAgIGlmIChwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKSAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZWRTdHJpbmcpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgU3RyaW5nIHBhcmFncmFw
aFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZCkucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7CisgICAgICAg
IFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRH
dWVzc2VzRm9yV29yZChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHBhcmFn
cmFwaFRleHQsIHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LmNsZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcg
dG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7CisgICAgICAgIHN1Z2dlc3Rpb25z
LnJlbW92ZSgwKTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1
ZTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIGlm
ICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3Jy
ZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gs
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwgc3Vn
Z2VzdGlvbnMpOworICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25z
dCBTdHJpbmcmIGNvcnJlY3Rpb24pCit7CisgICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCk7CisgICAgaWYgKCFyZXBs
YWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJE
b2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBw
bGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsK
KyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdvcmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3Qg
aGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVyIGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcg
dHJpZ2dlcmVkLgorICAgIGlmIChjdXJyZW50V29yZCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZWRTdHJpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5pc0FjdGl2ZSA9IGZhbHNlOworCisgICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucGFuZWxUeXBlKSB7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVD
b3JyZWN0aW9uOgorICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkgeworICAgICAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsK
KyAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9j
b3JyZWN0aW9uKCkpOworICAgICAgICB9IGVsc2UgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlz
bWlzc2VkQnlFZGl0b3IpCisgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5l
cigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBEb2N1
bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZWRTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZVJldmVyc2lvbjoKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CisgICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0
aCgpKSB7CisgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJp
bmcgPSBjb3JyZWN0aW9uOworICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFy
KCk7Cit9CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKK3sKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xp
ZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworfQorCitib29s
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRp
dGluZygpCit7CisgICAgcmV0dXJuIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORyAmJiBpc0F1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKK30KKworRmxvYXRSZWN0IFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSog
cmFuZ2UpIGNvbnN0Cit7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwor
ICAgIHJldHVybiB2aWV3ID8gdmlldy0+Y29udGVudHNUb1dpbmRvdyhJbnRSZWN0KHJhbmdlLT5i
b3VuZGluZ1JlY3QoKSkpIDogRmxvYXRSZWN0KCk7Cit9ICAgICAgICAKKwordm9pZCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKK3sKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1
cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICAv
LyBXaGVuIHVzZXIgbW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQg
YW5kIHBhdXNlcywgd2Ugc2hvdyB0aGUgcGFuZWwKKyAgICAvLyBjb250YWluaW5nIHRoZSBvcmln
aW5hbCBwcmUtY29ycmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQg
dGhlCisgICAgLy8gdW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3Jy
ZWN0aW9uIHBhbmVsIHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0CisgICAgLy8gdGhlIG5ldyBj
YXJldCBwb3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgd29yZC4KKyAgICBpZiAoIWN1cnJlbnRT
ZWxlY3Rpb24uaXNDYXJldCgpIHx8IGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQor
ICAgICAgICByZXR1cm47CisKKyAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uUG9zaXRpb24g
PSBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0
aW9uT2ZXb3JkID0gZW5kT2ZXb3JkKHNlbGVjdGlvblBvc2l0aW9uLCBMZWZ0V29yZElmT25Cb3Vu
ZGFyeSk7CisgICAgaWYgKHNlbGVjdGlvblBvc2l0aW9uICE9IGVuZFBvc2l0aW9uT2ZXb3JkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IGVuZFBvc2l0aW9uT2ZX
b3JkLmRlZXBFcXVpdmFsZW50KCk7CisgICAgaWYgKHBvc2l0aW9uLmFuY2hvclR5cGUoKSAhPSBQ
b3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQorICAgICAgICByZXR1cm47CisKKyAg
ICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOworICAgIGludCBlbmRPZmZz
ZXQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKKyAgICBWZWN0b3I8RG9jdW1l
bnRNYXJrZXI+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPm1hcmtlcnNG
b3JOb2RlKG5vZGUpOworICAgIHNpemVfdCBtYXJrZXJDb3VudCA9IG1hcmtlcnMuc2l6ZSgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyQ291bnQ7ICsraSkgeworICAgICAgICBj
b25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyID0gbWFya2Vyc1tpXTsKKyAgICAgICAgaWYgKCFz
aG91bGRTdGFydFRpbWVGb3IobWFya2VyLCBlbmRPZmZzZXQpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2Zy
YW1lLT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQsIG5vZGUsIG1hcmtlci5l
bmRPZmZzZXQpOworICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJh
bmdlLmdldCgpKTsKKyAgICAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZCA9IHdvcmRSYW5nZTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VkU3RyaW5nID0gY3VycmVudFdvcmQ7CisgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSBEb2N1
bWVudE1hcmtlcjo6U3BlbGxpbmcpCisgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
bWVudFN0cmluZyA9IG1hcmtlci5kZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIHN0YXJ0Q29ycmVj
dGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVk
aXRDb21tYW5kPiBjb21tYW5kKQoreworICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29tbWFu
ZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpKQor
ICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9j
dW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworfQorCitFZGl0b3JDbGllbnQqIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNsaWVudCgpCit7CisgICAgcmV0dXJuIG1fZnJh
bWUtPnBhZ2UoKSA/IG1fZnJhbWUtPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkgOiAwOworfQorCitU
ZXh0Q2hlY2tlckNsaWVudCogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6dGV4dENoZWNr
ZXIoKQoreworICAgIGlmIChFZGl0b3JDbGllbnQqIG93bmVyID0gY2xpZW50KCkpCisgICAgICAg
IHJldHVybiBvd25lci0+dGV4dENoZWNrZXIoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNl
UmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudFN0cmluZykKK3sKKyAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5n
LCByZXBsYWNlbWVudFN0cmluZyk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6bWFya1JldmVyc2VkKFBhc3NSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSkKK3sKKyAg
ICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+
cmVtb3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpBdXRvY29y
cmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyKTsKKyAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50
KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6Om1hcmtDb3JyZWN0aW9uKFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFu
Z2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCit7CisgICAgVmVjdG9yPERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlc1RvQWRkID0gbWFya2VyVHlwZXNGb3JBdXRv
Y29ycmVjdGlvbigpOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJl
cGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1hcmtlclR5
cGVzVG9BZGRbaV07CisgICAgICAgIGlmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVk
KQorICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIG1h
cmtlclR5cGUsIHJlcGxhY2VkU3RyaW5nKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWFy
a2Vycy0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUpOworICAgIH0K
K30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1Jl
ZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSkKK3sKKyAgICByZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlUmV2ZXJzZWQocmVwbGFjZWRTdHJpbmcsIHBsYWluVGV4dChyZXBsYWNlbWVudFJh
bmdlLmdldCgpKSk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVj
b3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJhbmdl
T2ZDb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0aW9uKQoreworICAgIGlmICghcmFuZ2VPZkNvcnJlY3Rpb24pCisgICAgICAgIHJldHVybjsK
KyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVjdGlv
bi0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIFZlY3RvcjxE
b2N1bWVudE1hcmtlcj4gY29ycmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLT5tYXJrZXJzSW5S
YW5nZShyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOwor
ICAgIGlmIChjb3JyZWN0ZWRPbmNlTWFya2Vycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICAvLyBTcGVsbGluZyBjb3JyZWN0ZWQgdGV4dCBoYXMgYmVlbiBlZGl0ZWQuIFdl
IG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdXNlciBoYXMgcmV2ZXJ0ZWQgaXQgdG8gb3JpZ2lu
YWwgdGV4dCBvcgorICAgIC8vIGVkaXRlZCBpdCB0byBzb21ldGhpbmcgZWxzZSwgYW5kIG5vdGlm
eSBzcGVsbGNoZWNrZXIgYWNjb3JkaW5nbHkuCisgICAgaWYgKG1hcmtlcnNIYXZlSWRlbnRpY2Fs
RGVzY3JpcHRpb24oY29ycmVjdGVkT25jZU1hcmtlcnMpICYmIGNvcnJlY3RlZE9uY2VNYXJrZXJz
WzBdLmRlc2NyaXB0aW9uID09IGNvcnJlY3RlZCkKKyAgICAgICAgY2xpZW50KCktPnJlY29yZEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVk
LCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgY2xpZW50KCktPnJl
Y29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvbkVk
aXRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKKyAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJz
KHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Cit9
CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ3YTFiZTJiMjc4YTAzOTYzZWVlNTVhZGUwMDFhNDgzZjMxNmFmYWQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyX2gKKyNkZWZpbmUgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCisKKyNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpCisvLyBTb21lIHBsYXRmb3JtcyBwcm92aWRlIFVJIGZvciBzdWdnZXN0aW5nIGF1dG9jb3Jy
ZWN0aW9uLgorI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDEKKy8vIFNvbWUg
cGxhdGZvcm1zIHVzZSBzcGVsbGluZyBhbmQgYXV0b2NvcnJlY3Rpb24gbWFya2VycyB0byBwcm92
aWRlIHZpc3VhbCBjdWUuCisvLyBPbiBzdWNoIHBsYXRmb3JtLCBpZiB3b3JkIHdpdGggbWFya2Vy
IGlzIGVkaXRlZCwgd2UgbmVlZCB0byByZW1vdmUgdGhlIG1hcmtlci4KKyNkZWZpbmUgUkVNT1ZF
X01BUktFUlNfVVBPTl9FRElUSU5HIDEKKyNlbHNlCisjZGVmaW5lIFNVUFBPUlRfQVVUT0NPUlJF
Q1RJT05fUEFORUwgMAorI2RlZmluZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMAorI2Vu
ZGlmIC8vICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCisKKyNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgorI2luY2x1ZGUgIkVk
aXRDb21tYW5kLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIK
KyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVkaXRvckNsaWVudDsKK2NsYXNzIFJhbmdlOworY2xh
c3MgVGV4dENoZWNrZXJDbGllbnQ7CitjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOworCitzdHJ1Y3Qg
Q29ycmVjdGlvblBhbmVsSW5mbyB7CisgICAgZW51bSBQYW5lbFR5cGUgeworICAgICAgICBQYW5l
bFR5cGVDb3JyZWN0aW9uID0gMCwKKyAgICAgICAgUGFuZWxUeXBlUmV2ZXJzaW9uLAorICAgICAg
ICBQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zCisgICAgfTsKKworICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2VUb0JlUmVwbGFjZWQ7CisgICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nOworICAgIFN0
cmluZyByZXBsYWNlbWVudFN0cmluZzsKKyAgICBQYW5lbFR5cGUgcGFuZWxUeXBlOworICAgIGJv
b2wgaXNBY3RpdmU7Cit9OworCitlbnVtIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWwgeworICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQgPSAw
LAorICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLAorICAgIFJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZAorfTsKKworI2lmIFNVUFBP
UlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25C
b2R5KSA7CisjZWxzZQorI2RlZmluZSBVTkxFU1NfRU5BQkxFRChmdW5jdGlvbkJvZHkpIGZ1bmN0
aW9uQm9keQorI2VuZGlmCisKK2NsYXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgewor
cHVibGljOgorICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqKSBVTkxFU1Nf
RU5BQkxFRCh7fSkKKyAgICB+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcigpIFVOTEVTU19F
TkFCTEVEKHt9KQorCisgICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSkgVU5MRVNTX0VOQUJMRUQoe30pCisgICAgdm9pZCBzdG9w
Q29ycmVjdGlvblBhbmVsVGltZXIoKSBVTkxFU1NfRU5BQkxFRCh7fSkKKworICAgIHZvaWQgZGlz
bWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSBVTkxFU1NfRU5BQkxFRCh7
fSkKKyAgICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gU3RyaW5nKCk7IH0pCisgICAgdm9pZCBzaG93
KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvUmVwbGFjZSk7IFVOVVNF
RF9QQVJBTShyZXBsYWNlbWVudCk7IH0pCisKKyAgICB2b2lkIGFwcGx5Q29ycmVjdGlvblBhbmVs
SW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JikgVU5MRVNTX0VO
QUJMRUQoe30pCisgICAgLy8gUmV0dXJuIHRydWUgaWYgY29ycmVjdGlvbiB3YXMgYXBwbGllZCwg
ZmFsc2Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGlu
Z0lmQXBwcm9wcmlhdGUoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKKworICAg
IHZvaWQgcmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9u
KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0o
Y29ycmVjdGlvbik7IH0pCisgICAgdm9pZCByZXNwb25kVG9BcHBsaWVkRWRpdGluZyhQYXNzUmVm
UHRyPEVkaXRDb21tYW5kPikgVU5MRVNTX0VOQUJMRUQoe30pCisgICAgdm9pZCByZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5M
RVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKKworICAgIHZvaWQg
c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlv
bikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKKyAgICB2
b2lkIGFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uQWZ0ZXJUeXBpbmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFm
dGVyVHlwaW5nKTsgfSkKKworICAgIHZvaWQgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNv
bnN0IFN0cmluZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY29y
cmVjdGlvbik7IH0pCisgICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKSBVTkxFU1NfRU5B
QkxFRCh7fSkKKworICAgIGJvb2wgaGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdCBVTkxFU1Nf
RU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKKyAgICBib29sIGlzU3BlbGxpbmdNYXJrZXJBbGxv
d2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0IFVOTEVTU19FTkFC
TEVEKHsgVU5VU0VEX1BBUkFNKG1pc3NwZWxsaW5nUmFuZ2UpOyByZXR1cm4gdHJ1ZTsgfSkKKyAg
ICBib29sIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpIFVOTEVTU19FTkFC
TEVEKHsgcmV0dXJuIGZhbHNlOyB9KQorICAgIGJvb2wgc2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25F
ZGl0aW5nKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCisKKyAgICB2b2lkIGNv
cnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cj4qKSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJh
bmdlPiByZXBsYWNlbWVudFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBs
YWNlZFN0cmluZyk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudFJhbmdlKTsgfSkKKyAgICB2b2lk
IG1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpIFVOTEVTU19FTkFC
TEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCisgICAgdm9pZCBtYXJrQ29ycmVj
dGlvbihQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFJhbmdlKTsg
VU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgfSkKKyAgICB2b2lkIHJlY29yZFNwZWxsY2hl
Y2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlv
biwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikgVU5M
RVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VPZkNvcnJlY3Rpb24pOyBVTlVTRURfUEFS
QU0oY29ycmVjdGVkKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQorCisjaWYgU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTAorcHJpdmF0ZToKKyAgICB2b2lkIHJlY29yZEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKKworICAgIGJvb2wgc2hvdWxkU3RhcnRUaW1l
Rm9yKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGludCBlbmRPZmZzZXQpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gKCgobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50ICYmICFtYXJrZXIuZGVzY3JpcHRpb24uaXNOdWxsKCkpIAorICAgICAgICAgICAg
ICAgICB8fCBtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpICYmIHN0YXRp
Y19jYXN0PGludD4obWFya2VyLmVuZE9mZnNldCkgPT0gZW5kT2Zmc2V0KTsKKyAgICB9CisKKyAg
ICBFZGl0b3JDbGllbnQqIGNsaWVudCgpOworICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hl
Y2tlcigpOworICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqKSBj
b25zdDsKKworICAgIEVkaXRvckNsaWVudCogbV9jbGllbnQ7CisgICAgRnJhbWUqIG1fZnJhbWU7
CisKKyAgICBUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiBtX2NvcnJlY3Rpb25Q
YW5lbFRpbWVyOworICAgIENvcnJlY3Rpb25QYW5lbEluZm8gbV9jb3JyZWN0aW9uUGFuZWxJbmZv
OworICAgIGJvb2wgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yOworI2VuZGlm
Cit9OworCisjdW5kZWYgVU5MRVNTX0VOQUJMRUQKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCBkZjE1MGVlMDAzOTUwOGQ2MzQyN2FjYjRl
Y2JjZDUwZmU2ZjQyNjA4Li5iNTQ4YjkxMzJkZDdiY2YxOTBlZjhjY2Y0YTkxYTU0NDY5YTZmZWVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTE1NSwxMSAr
MTU1LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBUeXBpbmdDb20KICAgICBGcmFtZSogZnJhbWUgPSBkb2N1
bWVudC0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwogCi0jaWYgUkVNT1ZFX01BUktFUlNf
VVBPTl9FRElUSU5HCiAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgZG9jdW1lbnQt
PmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdv
cmRzVG9CZUVkaXRlZChpc1NwYWNlT3JOZXdsaW5lKHRleHQuY2hhcmFjdGVycygpWzBdKSk7Ci0j
ZW5kaWYKLQorICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCktPnVwZGF0ZU1hcmtl
cnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4dC5jaGFyYWN0
ZXJzKClbMF0pKTsKKyAgICAKICAgICBpbnNlcnRUZXh0KGRvY3VtZW50LCB0ZXh0LCBmcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLCBvcHRpb25zLCBjb21wb3NpdGlvbik7CiB9CiAKQEAg
LTM0NCwxMiArMzQyLDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0
ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBwMiA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAg
ICAgIGlmIChwMSAhPSBwMikKICAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRv
cigpLT5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVjdGlv
bigpKTsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgIGVsc2UgaWYg
KGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFRleHQpCi0gICAgICAgICAgICBk
b2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKGNvbW1hbmRUeXBlKTsKLSNlbmRpZgorICAgICAgICAgICAgZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+ZWRpdG9yKCktPnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKICAgICB9CiB9
CiAKQEAgLTQ2Nyw5ICs0NjEsOCBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJsZVJv
b3RFbXB0eSgpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcpCiB7Ci0jaWYgUkVNT1ZFX01BUktF
UlNfVVBPTl9FRElUSU5HCi0gICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnJlbW92
ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKGZhbHNlKTsKLSNl
bmRpZgorICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT51cGRhdGVNYXJrZXJzRm9y
V29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CisKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvblRvRGVsZXRlOwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWZ0ZXJVbmRv
OwogCkBAIC01NjYsOSArNTU5LDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBraWxsUmluZykKIAogdm9pZCBU
eXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGJvb2wga2lsbFJpbmcpCiB7Ci0jaWYgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElU
SU5HCi0gICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnJlbW92ZVNwZWxsQW5kQ29y
cmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKGZhbHNlKTsKLSNlbmRpZgorICAgIGRv
Y3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CisKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvblRvRGVs
ZXRlOwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWZ0ZXJVbmRvOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKaW5kZXggY2IyYjJhNDI5ZjllMWVlZTc5N2VjYmE5ZmM3
MDBkNmYyODdmZTI0Ny4uMWQ4NTNjN2EzMTcwNjcxNDIzMzRjNmVhYTU4ZTMwYjA2Zjc5NDI1NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaApAQCAtMjI0LDYgKzIyNCwxNSBAQCBp
bmxpbmUgYm9vbCBpc1doaXRlc3BhY2UoVUNoYXIgYykKIHsKICAgICByZXR1cm4gYyA9PSBub0Jy
ZWFrU3BhY2UgfHwgYyA9PSAnICcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1x0JzsKIH0KKworaW5s
aW5lIGJvb2wgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCit7
CisgICAgLy8gVGhlc2UgYXJlIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmVoYXZlIGFzIHdvcmQgYm91
bmRhcmllcywgYnV0IGNhbiBhcHBlYXIgd2l0aGluIHdvcmRzLgorICAgIC8vIElmIHRoZXkgYXJl
IGp1c3QgdHlwZWQsIGkuZS4gaWYgdGhleSBhcmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBj
YXJldCwgd2Ugd2FudCB0byBkZWxheSB0ZXh0IGNoZWNraW5nIHVudGlsIHRoZSBuZXh0IGNoYXJh
Y3RlciBoYXMgYmVlbiB0eXBlZC4KKyAgICAvLyBGSVhNRTogdGhpcyBpcyByZXF1aXJlZCB1bnRp
bCA2ODUzMDI3IGlzIGZpeGVkIGFuZCB0ZXh0IGNoZWNraW5nIGNhbiBkbyB0aGlzIGZvciB1cy4K
KyAgICByZXR1cm4gY2hhcmFjdGVyID09ICdcJycgfHwgY2hhcmFjdGVyID09IHJpZ2h0U2luZ2xl
UXVvdGF0aW9uTWFyayB8fCBjaGFyYWN0ZXIgPT0gaGVicmV3UHVuY3R1YXRpb25HZXJzaGF5aW07
Cit9CisKIFN0cmluZyBzdHJpbmdXaXRoUmViYWxhbmNlZFdoaXRlc3BhY2UoY29uc3QgU3RyaW5n
JiwgYm9vbCBzdGFydElzU3RhcnRPZlBhcmFncmFwaCwgYm9vbCBlbmRJc0VuZE9mUGFyYWdyYXBo
KTsKIGNvbnN0IFN0cmluZyYgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FZGl0b3JDbGllbnQuaAppbmRleCBhZWRhODQ0NTg4Y2E2ZWY1NWYwNjgyMzQyODUzNzAzNTlj
N2FhNTJlLi5kZjI0YTViNDYwODA4NzNmYzNjNzhjYWViMjRmZTAyMzQzNTYxMjE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgRWRpdG9y
Q2xpZW50X2gKICNkZWZpbmUgRWRpdG9yQ2xpZW50X2gKIAotI2luY2x1ZGUgIkNvcnJlY3Rpb25Q
YW5lbEluZm8uaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggY2E5N2I5
YjQ0NjI3MzE5NWNkNjI2OWY2ZWFjY2NmMjJhNDA3YmYzOS4uMmNkMWQ5MjM1MDUyZjFkMDk1ZWJm
MTBjMDU0ODg4MmQ3MmY3YTMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTk2OCw3ICs5Njgs
NyBAQCB2b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Vab29t
RmFjdG9yLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fZWRpdG9yLmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIG1fZWRpdG9yLmRpc21pc3ND
b3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKIAogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gUmVz
cGVjdCBTVkdzIHpvb21BbmRQYW49ImRpc2FibGVkIiBwcm9wZXJ0eSBpbiBzdGFuZGFsb25lIFNW
RyBkb2N1bWVudHMuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88686</attachid>
            <date>2011-04-07 13:40:01 -0700</date>
            <delta_ts>2011-04-07 16:30:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55571-20110407134000.patch</filename>
            <type>text/plain</type>
            <size>99541</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMxNzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTAwYTc5
MjIzNWM1YzI1ZTM0NDA0OTliNDMzMDZiNmY3ZmFkOGVhMy4uYTgyYWFmZTM1ZGU2NjYwY2IyNjY4
YjM4NWJkMzY1NTI2NzM5MmU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY3MSw2ICs2NzEs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDUzOTViNzY5YjAyOWRiNTA3NzlkY2FkNWQw
OTc1MmI4ODdlMGNiYTMuLjI2NWNmNWI5NzRkMjRjMWIzMTNhMmFlNjgwYmFjY2Y0ODkzYTdkNGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAxMS0wNC0wNiAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQg
YmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEKKworICAgICAgICBFeHRyYWN0ZWQgY29kZSBpbnNp
ZGUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpbnRvCisgICAgICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIgY2xhc3MuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gcmVtb3Zl
IHNvbWUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBndWFyZCBpZgorICAgICAgICBjb2Rl
IHBhdGhzIGluc2lkZSB0aGUgbmV2ZXIgcmVhY2hlZCB3aXRob3V0IGF1dG9jb3JyZWN0aW9uIHN1
cHBvcnQuCisgICAgICAgIFJlbW92aW5nIGd1YXJkcyByZWR1Y2VzIHVuaW50ZW50aW9uYWwgYnVp
bGQgYnJlYWthZ2UuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFnbmUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVs
SW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZXNwb25kVG9DaGFuZ2VkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
aWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6On5FZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnBhc3RlQXNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppc0F1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKToK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjptYXJrZXJUeXBlc0Zv
ckF1dG9jb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtlclR5cGVzRm9yUmVwbGFj
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0YXJ0Q29ycmVjdGlv
blBhbmVsVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBlbmRpbmdDb3Jy
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
Omhhc1BlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlz
c1Nvb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVtb3Zl
TWFya2Vyc1Vwb25FZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0Fw
cGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1JldmVyc2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtD
b3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKToKKyAg
ICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpVTkxFU1NfRU5B
QkxFRCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpz
aG91bGRTdGFydFRpbWVGb3IpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKToKKyAg
ICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjppc0FtYmln
dW91c0JvdW5kYXJ5Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgor
ICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFBh
Z2VBbmRUZXh0Wm9vbUZhY3RvcnMpOgorCiAyMDExLTA0LTA2ICBQYXZlbCBGZWxkbWFuICA8cGZl
bGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBlZTcwYTRmYmExZDE0ODQzNWFlNmMyNmVhZWY3MTI4
OTRhMjA1ZWExLi5hZTUyOTQ0MDc2NDViZmQ3ZTk0OWEyNGNkODdmYzI1YTQ0NGYwOGVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTQ3MCw2ICsxNDcwLDggQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbENoZWNrZXIuaCBcCisJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxl
bWVudENvbW1hbmQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENv
bW1hbmQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYmFkMzExNWVmOWFlY2NiYTg0MmE4MWJiOGZi
NzZlOTVhNmYxMDYxNy4uMGViNDhiODg3OTc0NTI5MGMzMDZmNDNlNmRiZjE1ZTZjYjFiYzhjMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjY0MSw2ICsyNjQxLDkgQEAKICAgICAgICAgICAgICdlZGl0
aW5nL1NtYXJ0UmVwbGFjZUNGLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TbWFydFJlcGxh
Y2VJQ1UuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAnLAorICAg
ICAgICAgICAgJ2VkaXRpbmcvU3BlbGxDaGVja2VyLmgnLAorICAgICAgICAgICAgJ2VkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGQ0MjIxZmY5ZGZkM2E5ODRhMGVkZDk2
MTQyNzc5YjcwZDhmYzdjMGUuLjcwZDMzYWNjMDIwOGM3OTU1NmUyZGQ1ZGQ4M2JhM2U3NjcxMDAw
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01OTksNiArNTk5LDcgQEAgU09VUkNFUyArPSBcCiAgICAg
ZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU21hcnRS
ZXBsYWNlSUNVLmNwcCBcCiAgICAgZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwIFwKKyAgICBlZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0
RWxlbWVudENvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNw
cCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4
IDEzNjE0ODVkOWYzNjI5NDY1ZDFiZDBjZjZiOWQ1YjQyODBlNTk0MzcuLjdmZGM5NzRlODYxYjVh
YjMxYzk5ODNlMGNlYjJiYzczYjVlZjc2OGQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC01MDIzNCw2ICs1MDIzNCw2MiBAQAogCQkJCT4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
KwkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
CQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkv
PgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJ
CQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgor
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5h
bWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
KwkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZV9MVENHfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxlZGl0aW5nXFNwbGl0RWxlbWVudENvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAxMDhkM2M2MzhjYTdmNWQ2NDkyYWM2MWRmMzljMjg5ZWQ5MGVm
ODY1Li4zMmM2YzY5MTFmNTFiZmM4OTA4ZThiM2UwMGE0YTZiZjdjOWViOTgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMTk2
LDYgKzMxOTYsOCBAQAogCQlBNjIyQThGQzEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3Vy
aXR5QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNjIyQThGNjEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgKi87
IH07CiAJCUE2MjJBOEZEMTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGNzEy
MkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5oICovOyB9OwogCQlBNjIyQThG
RjEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJpY0JpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEY5MTIyQzQ0QTYwMEE3ODVCMyAvKiBH
ZW5lcmljQmluZGluZy5oICovOyB9OworCQlBNzAwNUNDQzEzMzBDNEJBMDAwQ0MwQkEgLyogU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi87IH07CisJCUE3MDA1Q0NEMTMzMEM0QkEwMDBDQzBC
QSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUE3MTUxQkQ4MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hl
Y2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTcxNUU2NTIxMzRC
QkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE1RTY1MDEzNEJCQkVDMDBEOEU3MTMg
LyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcCAqLzsgfTsKIAkJQTcxNUU2NTMxMzRCQkJFQzAw
RDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dy
ZXNzU2hhZG93RWxlbWVudC5oICovOyB9OwpAQCAtNDc5Niw3ICs0Nzk4LDYgQEAKIAkJQjc3NkQ0
M0QxMTA0NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyog
UHJpbnRDb250ZXh0LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8qIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCODg1RThEMjExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDUxMUUwNkREMjAw
OUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0
IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKCk7IH07IH07Ci0JCUI4QTZBNkQ1MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0
aW9uUGFuZWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCOEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUI4REJEQjRC
MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ3MTMwQjBGOEEwMEY1Q0RC
MSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKIAkJQjhEQkRCNEMxMzBCMEY4QTAw
RjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxl
Y3Rpb25Db21tYW5kLmggKi87IH07CiAJCUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKQEAgLTk3MjQsNiArOTcyNSw4IEBACiAJCUE2MjJBOEY2
MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwOyBwYXRoID0g
Z2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTYyMkE4RjcxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQmluZGluZ1NlY3VyaXR5QmFzZS5oOyBw
YXRoID0gZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE2MjJBOEY5MTIyQzQ0QTYwMEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW5lcmljQmluZGluZy5oOyBwYXRoID0g
Z2VuZXJpYy9HZW5lcmljQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
NzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTcwMDVDQ0Ix
MzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE1MUJENzEyRjE1NThGMDA1QTBGNjQg
LyogVGV4dENoZWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGV4dENoZWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxNUU2
NTAxMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE1RTY1MTEzNEJCQkVDMDBEOEU3MTMgLyog
UHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFByb2dyZXNzU2hhZG93RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTEyMzEsNyArMTEyMzQsNiBAQAogCQlCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW50Q29u
dGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4ODVFOEQyMTFFMDZERDIw
MDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg4NUU4RDMxMUUwNkREMjAwOUZG
QkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJl
Y3Rpb25QYW5lbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29ycmVj
dGlvblBhbmVsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0NzEz
MEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDgxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVj
dGlvbkNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0U2VsZWN0
aW9uQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0OTEzMEIw
RjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NTQxLDcgKzE1NTQzLDYgQEAKIAkJCQk5
MzMwOUQ4QzA5OUU2NDkxMDA1NkU1ODEgLyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5oICovLAog
CQkJCTkzMzA5RDhEMDk5RTY0OTEwMDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFuZC5jcHAg
Ki8sCiAJCQkJOTMzMDlEOEUwOTlFNjQ5MTAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5k
LmggKi8sCi0JCQkJQjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbElu
Zm8uaCAqLywKIAkJCQlEMEIwNTU2NzA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1h
bmQuY3BwICovLAogCQkJCUQwQjA1NTY2MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29t
bWFuZC5oICovLAogCQkJCTFDNEM4RjYzMEFEODY1NUQwMDk0NzVDRSAvKiBEZWxldGVCdXR0b24u
Y3BwICovLApAQCAtMTU2MjMsNiArMTU2MjQsOCBAQAogCQkJCUE3OEZFMTNBMTIzNjZCMTAwMEFD
RThEMCAvKiBTcGVsbENoZWNrZXIuaCAqLywKIAkJCQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEg
LyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgKi8sCiAJCQkJQjhEQkRCNEExMzBCMEY4
QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCAqLywKKwkJCQlBNzAwNUND
QTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi8s
CisJCQkJQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuaCAqLywKIAkJCQk5MzMwOURDMjA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50
Q29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEQzMwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxl
bWVudENvbW1hbmQuaCAqLywKIAkJCQk5MzMwOURDNDA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwICovLApAQCAtMTk5NzQsNyArMTk5NzcsNiBAQAogCQkJCTMzRDAy
MTJEMTMxREIzN0IwMDQwOTFBOCAvKiBDb29raWVTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3RUU2ODQ2NDEyRDI2RTM4MDBFNzk0MTUgLyogQ29va2llU3RvcmFnZUNGTmV0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRTZGRDQ4ODBGNjc2RTU3MDAwOTI4NzMgLyogQ29vcmRpbmF0ZXMuaCBp
biBIZWFkZXJzICovLAotCQkJCUI4QTZBNkQ1MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9u
UGFuZWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkQwNDBBMTk4OUNBMDA3RkI4QzUg
LyogQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI5NzkwRTgyMDY5MjAwQjI1OTY1
IC8qIENvdW50ZXJDb250ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjk1MTBFODIwNTZC
MDBCMjU5NjUgLyogQ291bnRlckRpcmVjdGl2ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjIyODcs
NiArMjIyODksNyBAQAogCQkJCTc1NDE1QjAwMTI5NThENUUwMDNBRDY2OSAvKiBTcGVlY2hJbnB1
dFJlc3VsdExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEZFMTNDMTIzNjZCMTAwMEFDRThE
MCAvKiBTcGVsbENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUI4REJEQjRFMTMwQjBGOEEw
MEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTIwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0
RWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTE0MDk5RTY0OTIwMDU2
RTU4MSAvKiBTcGxpdFRleHROb2RlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlF
MTYwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1h
bmQuaCBpbiBIZWFkZXJzICovLApAQCAtMjUxMDIsNiArMjUxMDUsNyBAQAogCQkJCTc1NDE1QzI5
MTI5QTk5MjAwMDNBRDY2OSAvKiBTcGVlY2hJbnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc4RkUxM0IxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCOERCREI0RDEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzAwNUNDQzEzMzBDNEJBMDAw
Q0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MzMwOUUxMTA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxMzA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0
Tm9kZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMTUwOTlFNjQ5MjAwNTZF
NTgxIC8qIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5l
bEluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjA5OWUxNjJmYTcyZjdmMTM5ZDYzZmMxMzc4
YzRiNGIzM2YzZmU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3JyZWN0aW9uUGFuZWxJ
bmZvX2gKLSNkZWZpbmUgQ29ycmVjdGlvblBhbmVsSW5mb19oCi0KLSNpZiBQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0vLyBTb21lIHBs
YXRmb3JtcyBwcm92aWRlIFVJIGZvciBzdWdnZXN0aW5nIGF1dG9jb3JyZWN0aW9uLgotI2RlZmlu
ZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDEKLS8vIFNvbWUgcGxhdGZvcm1zIHVzZSBz
cGVsbGluZyBhbmQgYXV0b2NvcnJlY3Rpb24gbWFya2VycyB0byBwcm92aWRlIHZpc3VhbCBjdWUu
Ci0vLyBPbiBzdWNoIHBsYXRmb3JtLCBpZiB3b3JkIHdpdGggbWFya2VyIGlzIGVkaXRlZCwgd2Ug
bmVlZCB0byByZW1vdmUgdGhlIG1hcmtlci4KLSNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9F
RElUSU5HIDEKLSNlbHNlCi0jZGVmaW5lIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwgMAot
I2RlZmluZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMAotI2VuZGlmIC8vICNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0K
LSNpbmNsdWRlICJSYW5nZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBDb3Jy
ZWN0aW9uUGFuZWxJbmZvIHsKLSAgICBlbnVtIFBhbmVsVHlwZSB7Ci0gICAgICAgIFBhbmVsVHlw
ZUNvcnJlY3Rpb24gPSAwLAotICAgICAgICBQYW5lbFR5cGVSZXZlcnNpb24sCi0gICAgICAgIFBh
bmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMKLSAgICB9OwotCi0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZVRvQmVSZXBsYWNlZDsKLSAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmc7Ci0gICAgU3RyaW5n
IHJlcGxhY2VtZW50U3RyaW5nOwotICAgIFBhbmVsVHlwZSBwYW5lbFR5cGU7Ci0gICAgYm9vbCBp
c0FjdGl2ZTsKLX07Ci0KLWVudW0gUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCB7
Ci0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCA9IDAsCi0g
ICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQsCi0gICAgUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkCi19OwotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gQ29ycmVjdGlvblBhbmVsSW5mb19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKaW5kZXggZTRlMGJiYjZjZmUwYzA5YTA3NTZh
OTY5ZWY2ODNmNWE4NDc2MjNmYS4uZjM4Y2JlNjJhNjBkZTExY2QwZjFjMTEzYTk5ZjBjMmQwMGVh
ZWI5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcApAQCAt
NjMsNiArNjMsNyBAQAogI2luY2x1ZGUgPFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcD4KICNp
bmNsdWRlIDxTbWFydFJlcGxhY2UuY3BwPgogI2luY2x1ZGUgPFNtYXJ0UmVwbGFjZUNGLmNwcD4K
KyNpbmNsdWRlIDxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcD4KICNpbmNsdWRlIDxT
cGVsbENoZWNrZXIuY3BwPgogI2luY2x1ZGUgPFNwbGl0RWxlbWVudENvbW1hbmQuY3BwPgogI2lu
Y2x1ZGUgPFNwbGl0VGV4dE5vZGVDb21tYW5kLmNwcD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAppbmRleCA5MGViODI1YzA0NzQ5YzVkM2VjZWFkMzMyYjJjMDA1YzdiN2JmYzFiLi43NTYwODM1
MjRjOTA4NmQ5MjgyMzBmMzcyZTUxOTQxMjAwOTExMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
aCIKICNpbmNsdWRlICJDbGlwYm9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkNvbXBvc2l0aW9uRXZl
bnQuaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiQ3JlYXRlTGlua0NvbW1hbmQuaCIKICNpbmNsdWRlICJEZWxldGVCdXR0b25Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oIgpAQCAtOTMsNTEgKzk0LDYg
QEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2lu
ZyBuYW1lc3BhY2UgVW5pY29kZTsKIAotc3RhdGljIGlubGluZSBib29sIGlzQW1iaWd1b3VzQm91
bmRhcnlDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQotewotICAgIC8vIFRoZXNlIGFyZSBjaGFy
YWN0ZXJzIHRoYXQgY2FuIGJlaGF2ZSBhcyB3b3JkIGJvdW5kYXJpZXMsIGJ1dCBjYW4gYXBwZWFy
IHdpdGhpbiB3b3Jkcy4KLSAgICAvLyBJZiB0aGV5IGFyZSBqdXN0IHR5cGVkLCBpLmUuIGlmIHRo
ZXkgYXJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgY2FyZXQsIHdlIHdhbnQgdG8gZGVsYXkg
dGV4dCBjaGVja2luZyB1bnRpbCB0aGUgbmV4dCBjaGFyYWN0ZXIgaGFzIGJlZW4gdHlwZWQuCi0g
ICAgLy8gRklYTUU6IHRoaXMgaXMgcmVxdWlyZWQgdW50aWwgNjg1MzAyNyBpcyBmaXhlZCBhbmQg
dGV4dCBjaGVja2luZyBjYW4gZG8gdGhpcyBmb3IgdXMuCi0gICAgcmV0dXJuIGNoYXJhY3RlciA9
PSAnXCcnIHx8IGNoYXJhY3RlciA9PSByaWdodFNpbmdsZVF1b3RhdGlvbk1hcmsgfHwgY2hhcmFj
dGVyID09IGhlYnJld1B1bmN0dWF0aW9uR2Vyc2hheWltOwotfQotCi1zdGF0aWMgY29uc3QgVmVj
dG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JBdXRvY29ycmVj
dGlvbigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLCAoKSk7Ci0gICAgaWYg
KG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1hcmtl
clR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCk7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50
TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRv
Q29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24p
OwotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1h
cmtlcjo6QXV0b2NvcnJlY3RlZCk7Ci0gICAgfQotICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckF1
dG9Db3JyZWN0aW9uOwotfQotCi1zdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBl
c0ZvclJlcGxhY2VtZW50LCAoKSk7Ci0gICAgaWYgKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFj
ZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7Ci19Ci0KLSNpZiBTVVBQ
T1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi1zdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNh
bERlc2NyaXB0aW9uKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpCi17Ci0g
ICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNv
bnN0IFN0cmluZyYgZGVzY3JpcHRpb24gPSBtYXJrZXJzWzBdLmRlc2NyaXB0aW9uOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAxOyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
ZGVzY3JpcHRpb24gIT0gbWFya2Vyc1tpXS5kZXNjcmlwdGlvbikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQogLy8gV2hlbiBh
biBldmVudCBoYW5kbGVyIGhhcyBtb3ZlZCB0aGUgc2VsZWN0aW9uIG91dHNpZGUgb2YgYSB0ZXh0
IGNvbnRyb2wKIC8vIHdlIHNob3VsZCB1c2UgdGhlIHRhcmdldCBjb250cm9sJ3Mgc2VsZWN0aW9u
IGZvciB0aGlzIGVkaXRpbmcgb3BlcmF0aW9uLgogVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6OnNl
bGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQpAQCAtNTMzLDQ4ICs0ODksNyBAQCB2b2lk
IEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBvbGRTZWxlY3Rpb24pCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpOwogICAgIG1fZGVsZXRlQnV0dG9uQ29udHJvbGxlci0+
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwotCi0jaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgIC8vIFdoZW4gdXNlciBt
b3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3
ZSBzaG93IHRoZSBwYW5lbAotICAgIC8vIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHByZS1jb3Jy
ZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJldmVydCB0aGUKLSAgICAvLyB1
bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24gcGFuZWwg
dGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKLSAgICAvLyB0aGUgbmV3IGNhcmV0IHBvc2l0aW9u
IGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgotICAgIGlmICghY3VycmVudFNlbGVjdGlvbi5pc0Nh
cmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlvbiA9IGN1cnJlbnRTZWxl
Y3Rpb24uc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25PZldvcmQgPSBl
bmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBp
ZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRpb25PZldvcmQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2
YWxlbnQoKTsKLSAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIG5vZGUg
PSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgaW50IGVuZE9mZnNldCA9IHBvc2l0aW9u
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFy
a2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7
Ci0gICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IERvY3VtZW50
TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAgICBpZiAoKChtYXJrZXIudHlwZSA9
PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgJiYgIW1hcmtlci5kZXNjcmlwdGlvbi5pc051
bGwoKSkgfHwgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0
aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQpID09IGVuZE9mZnNldCkgewotICAgICAgICAg
ICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGZyYW1lKCktPmRvY3Vt
ZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCk7
Ci0gICAgICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdl
dCgpKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50V29yZC5sZW5ndGgoKSkgewotICAgICAgICAg
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5n
ZTsKLSAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcg
PSBjdXJyZW50V29yZDsKLSAgICAgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9jdW1l
bnRNYXJrZXI6OlNwZWxsaW5nKQotICAgICAgICAgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25Q
YW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlv
bnMpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb247Ci0g
ICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvLyBT
VVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6
cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1Nl
bGVjdGlvbikKQEAgLTU4NSw5ICs1MDAsNyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdl
ZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKICAgICAg
ICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNh
dGlvbihub2RlLT5yZW5kZXJlcigpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgZmFs
c2UpOwogICAgIH0KIAotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwotICAgIHJlbW92
ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKHRydWUpOwotI2Vu
ZGlmCisgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcodHJ1ZSk7CiAK
ICAgICBpZiAoY2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkQ29u
dGVudHMoKTsKQEAgLTEwNzQsMTAgKzk4Nyw3IEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGlu
ZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRl
bnRDaGFuZ2VkRXZlbnRzKCpjbWQpOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
KGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkpOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9Q
QU5FTAotICAgIGlmIChjbWQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNtZC0+c2hvdWxkUmV0
YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5k
aWNhdG9yKTsKLSNlbmRpZgorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0FwcGxp
ZWRFZGl0aW5nKGNtZC5nZXQoKSk7CiAKICAgICAvLyBEb24ndCBjbGVhciB0aGUgdHlwaW5nIHN0
eWxlIHdpdGggdGhpcyBzZWxlY3Rpb24gY2hhbmdlLiAgV2UgZG8gdGhvc2UgdGhpbmdzIGVsc2V3
aGVyZSBpZiBuZWNlc3NhcnkuCiAgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1Nl
bGVjdGlvbiwgZmFsc2UsIGZhbHNlKTsKQEAgLTExMzYsMTcgKzEwNDYsMTQgQEAgRWRpdG9yOjpF
ZGl0b3IoRnJhbWUqIGZyYW1lKQogICAgIC8vIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQsIHNpbmNl
IG1vc3QgZWRpdG9ycyB3YW50IHRoaXMgYmVoYXZpb3IgKHRoaXMgbWF0Y2hlcyBJRSBidXQgbm90
IEZGKS4KICAgICAsIG1fc2hvdWxkU3R5bGVXaXRoQ1NTKGZhbHNlKQogICAgICwgbV9raWxsUmlu
ZyhhZG9wdFB0cihuZXcgS2lsbFJpbmcpKQotICAgICwgbV9zcGVsbENoZWNrZXIobmV3IFNwZWxs
Q2hlY2tlcihmcmFtZSwgZnJhbWUtPnBhZ2UoKSA/IGZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVu
dCgpLT50ZXh0Q2hlY2tlcigpIDogMCkpCi0gICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyKHRo
aXMsICZFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCisgICAgLCBtX3NwZWxsQ2hl
Y2tlcihhZG9wdFB0cihuZXcgU3BlbGxDaGVja2VyKGZyYW1lLCBmcmFtZS0+cGFnZSgpID8gZnJh
bWUtPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCktPnRleHRDaGVja2VyKCkgOiAwKSkpCisgICAgLCBt
X3NwZWxsaW5nQ29ycmVjdG9yKGFkb3B0UHRyKG5ldyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyKGZyYW1lKSkpCiAgICAgLCBtX2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQoZmFs
c2UpCiB7CiB9CiAKIEVkaXRvcjo6fkVkaXRvcigpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVD
VElPTl9QQU5FTAotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwotI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yOjpjbGVh
cigpCkBAIC0xMTc5LDEwICsxMDg2LDggQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0
U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBp
ZiAoIXNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
blR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9O
X0VESVRJTkcKICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICByZW1vdmVTcGVsbEFu
ZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChpc1NwYWNlT3JOZXdsaW5lKHRl
eHRbMF0pKTsKLSNlbmRpZgorICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5
RWRpdGluZyh0ZXh0WzBdKTsKIAogICAgIGJvb2wgc2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9j
b3JyZWN0aW9uID0gZmFsc2U7CiAgICAgaWYgKHRleHQgPT0gIiAiIHx8IHRleHQgPT0gIlx0IikK
QEAgLTExOTEsNyArMTA5Niw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRp
bmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgaWYgKHRl
eHQubGVuZ3RoKCkgPT0gMSAmJiBpc1B1bmN0KHRleHRbMF0pICYmICFpc0FtYmlndW91c0JvdW5k
YXJ5Q2hhcmFjdGVyKHRleHRbMF0pKQogICAgICAgICBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0
b2NvcnJlY3Rpb24gPSB0cnVlOwogCi0gICAgYm9vbCBhdXRvY29ycmVjdGlvbldhc0FwcGxpZWQg
PSBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJlY3Rpb24gJiYgYXBwbHlBdXRvY29ycmVj
dGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKKyAgICBib29sIGF1dG9jb3JyZWN0aW9u
V2FzQXBwbGllZCA9IHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlvbiAmJiBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3By
aWF0ZSgpOwogCiAgICAgLy8gR2V0IHRoZSBzZWxlY3Rpb24gdG8gdXNlIGZvciB0aGUgZXZlbnQg
dGhhdCB0cmlnZ2VyZWQgdGhpcyBpbnNlcnRUZXh0LgogICAgIC8vIElmIHRoZSBldmVudCBoYW5k
bGVyIGNoYW5nZWQgdGhlIHNlbGVjdGlvbiwgd2UgbWF5IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50
IHNlbGVjdGlvbgpAQCAtMTIyNyw3ICsxMTMyLDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVC
cmVhaygpCiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGll
ZCA9IGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAg
Ym9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5
QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29t
bWFuZDo6aW5zZXJ0TGluZUJyZWFrKG1fZnJhbWUtPmRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9u
SXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Ig
OiAwKTsKICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKIApAQCAt
MTI0NSw3ICsxMTUwLDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigp
CiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IGFw
cGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBh
dXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5QXV0b2Nv
cnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKG1fZnJhbWUtPmRvY3VtZW50KCksIGF1dG9jb3JyZWN0
aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0
b3IgOiAwKTsKICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKIApA
QCAtMTI2Miw5ICsxMTY3LDcgQEAgdm9pZCBFZGl0b3I6OmN1dCgpCiAgICAgfQogICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmIChzaG91bGREZWxl
dGVSYW5nZShzZWxlY3Rpb24uZ2V0KCkpKSB7Ci0jaWYgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElU
SU5HCi0gICAgICAgIHJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0Jl
RWRpdGVkKHRydWUpOwotI2VuZGlmCisgICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVj
dGVkQnlFZGl0aW5nKHRydWUpOwogICAgICAgICBpZiAoaXNOb2RlSW5UZXh0Rm9ybUNvbnRyb2wo
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAg
ICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT53cml0ZVBsYWluVGV4dChzZWxl
Y3RlZFRleHQoKSk7CiAgICAgICAgIGVsc2UKQEAgLTEzMDMsOSArMTIwNiw3IEBAIHZvaWQgRWRp
dG9yOjpwYXN0ZSgpCiAgICAgICAgIHJldHVybjsgLy8gREhUTUwgZGlkIHRoZSB3aG9sZSBvcGVy
YXRpb24KICAgICBpZiAoIWNhblBhc3RlKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBSRU1PVkVf
TUFSS0VSU19VUE9OX0VESVRJTkcKLSAgICByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJz
RnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICB1cGRhdGVNYXJrZXJzRm9y
V29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGxvYWRlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAg
ICAgbG9hZGVyLT5zZXRBbGxvd1N0YWxlUmVzb3VyY2VzKHRydWUpOwogICAgIGlmIChtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKQEAgLTEzMjEsOSArMTIy
Miw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KCkKICAgICAgICAgcmV0dXJuOwog
ICAgIGlmICghY2FuUGFzdGUoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFJFTU9WRV9NQVJLRVJT
X1VQT05fRURJVElORwotICAgIHJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29y
ZHNUb0JlRWRpdGVkKGZhbHNlKTsKLSNlbmRpZgorICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0Fm
ZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9h
cmQoUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKSk7CiB9CiAKQEAgLTE0NzYsNyArMTM3
NSw3IEBAIHZvaWQgRWRpdG9yOjp0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQoKQogCiBi
b29sIEVkaXRvcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIHsKLSAg
ICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZCgpOworICAgIHJldHVybiBtX3NwZWxsaW5nQ29ycmVjdG9yLT5pc0F1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKIH0KIAogdm9pZCBFZGl0b3I6OnRvZ2dsZUF1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpCkBAIC0yMDY4LDIzICsxOTY3LDggQEAgdm9pZCBF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24gJm1vdmluZ1NlbGVjdGkKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBp
bmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKQogewogI2lmIFVTRShVTklGSUVEX1RFWFRf
Q0hFQ0tJTkcpCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIC8vIEFwcGx5
IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5leHQgcm91bmQgb2Ygc3BlbGwgY2hlY2tp
bmcuCi0gICAgYm9vbCBkb0FwcGx5Q29ycmVjdGlvbiA9IHRydWU7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb25BZnRlclR5cGluZy52aXNpYmxlU3RhcnQo
KTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3JkID0gVmlzaWJsZVNlbGVjdGlvbihz
dGFydE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9m
V29yZChzdGFydE9mU2VsZWN0aW9uLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKLSAgICBpZiAo
Y3VycmVudFdvcmQudmlzaWJsZUVuZCgpID09IHN0YXJ0T2ZTZWxlY3Rpb24pIHsKLSAgICAgICAg
U3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0KGN1cnJlbnRXb3JkLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpOwotICAgICAgICBpZiAod29yZFRleHQubGVuZ3RoKCkgPiAwICYmIGlzQW1iaWd1
b3VzQm91bmRhcnlDaGFyYWN0ZXIod29yZFRleHRbd29yZFRleHQubGVuZ3RoKCkgLSAxXSkpCi0g
ICAgICAgICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoZG9B
cHBseUNvcnJlY3Rpb24pCi0gICAgICAgIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChkaXNt
aXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
QWNjZXB0ZWQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9u
QWZ0ZXJUeXBpbmcpOwotI2VuZGlmCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlQZW5k
aW5nQ29ycmVjdGlvbihzZWxlY3Rpb25BZnRlclR5cGluZyk7CisKICAgICBUZXh0Q2hlY2tpbmdP
cHRpb25zIHRleHRDaGVja2luZ09wdGlvbnMgPSAwOwogICAgIGlmIChpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IE1hcmtT
cGVsbGluZzsKQEAgLTIxMTMsNyArMTk5Nyw2IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxp
bmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAg
ICAgfQogCiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7CiAg
ICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTIyMjIsNyArMjEwNSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiB7CiAj
aWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUg
cGVuZGluZyBhdXRvY29ycmVjdGlvbiBhdCB0aGlzIG1vbWVudC4KLSAgICBBU1NFUlQoIW1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCk7CisgICAgQVNTRVJUKCFtX3NwZWxs
aW5nQ29ycmVjdG9yLT5oYXNQZW5kaW5nQ29ycmVjdGlvbigpKTsKIAogICAgIGJvb2wgc2hvdWxk
TWFya1NwZWxsaW5nID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIE1hcmtTcGVsbGluZzsKICAgICBi
b29sIHNob3VsZE1hcmtHcmFtbWFyID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIE1hcmtHcmFtbWFy
OwpAQCAtMjI4MSwxMSArMjE2NCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDaGVja2luZ1R5cGVNYXNr
Rm9yKHRleHRDaGVja2luZ09wdGlvbnMpLCByZXN1bHRzKTsKICAgICAgICAgCiAKLSNpZiBTVVBQ
T1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgLy8gSWYgdGhpcyBjaGVja2luZyBpcyBvbmx5
IGZvciBzaG93aW5nIGNvcnJlY3Rpb24gcGFuZWwsIHdlIHNob3VsZG4ndCBib3RoZXIgdG8gbWFy
ayBtaXNzcGVsbGluZ3MuCiAgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpCiAgICAg
ICAgIHNob3VsZE1hcmtTcGVsbGluZyA9IGZhbHNlOwotI2VuZGlmCiAKICAgICBpbnQgb2Zmc2V0
RHVlVG9SZXBsYWNlbWVudCA9IDA7CiAKQEAgLTIzMDQsMTAgKzIxODUsOCBAQCB2b2lkIEVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdP
cHRpb25zIHRleHRDaAogICAgICAgICBpZiAoc2hvdWxkTWFya1NwZWxsaW5nICYmIHJlc3VsdC0+
dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0TG9jYXRpb24gPj0gc3Bl
bGxpbmdQYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0
TGVuZ3RoIDw9IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgIXJlc3VsdEVuZHNBdEFtYmlndW91
c0JvdW5kYXJ5KSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1
bHRMb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdS
YW5nZSA9IHNwZWxsaW5nUGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXN1bHRM
ZW5ndGgpOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICAgICAgICAgIGlm
IChtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmhhc01hcmtlcnMobWlzc3BlbGxpbmdS
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pKQorICAg
ICAgICAgICAgaWYgKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5pc1NwZWxsaW5nTWFya2VyQWxsb3dl
ZChtaXNzcGVsbGluZ1JhbmdlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNlbmRpZiAv
LyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgICAgICBtaXNzcGVsbGluZ1Jh
bmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2Vy
KG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoc2hvdWxkTWFya0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRD
aGVja2luZ1R5cGVHcmFtbWFyICYmIGdyYW1tYXJQYXJhZ3JhcGguY2hlY2tpbmdSYW5nZUNvdmVy
cyhyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKSkgewogICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CkBAIC0yMzUzLDcgKzIyMzIs
NyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAgICAgICAgICAgICAgIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsK
ICAgICAgICAgICAgICAgICBpZiAobWFya2Vycy0+aGFzTWFya2VycyhyYW5nZVRvUmVwbGFjZS5n
ZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KSkgewogICAgICAgICAgICAgICAgICAg
ICBkb1JlcGxhY2VtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHJlY29yZFNwZWxs
Y2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKHJhbmdlVG9SZXBsYWNlLmdldCgp
LCByZXBsYWNlZFN0cmluZywgcmVzdWx0LT5yZXBsYWNlbWVudCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9k
aWZpZWRDb3JyZWN0aW9uKHJhbmdlVG9SZXBsYWNlLmdldCgpLCByZXBsYWNlZFN0cmluZywgcmVz
dWx0LT5yZXBsYWNlbWVudCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJzLT5o
YXNNYXJrZXJzKHJhbmdlVG9SZXBsYWNlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRD
b3JyZWN0aW9uKSkKICAgICAgICAgICAgICAgICAgICAgZG9SZXBsYWNlbWVudCA9IGZhbHNlOwog
ICAgICAgICAgICAgfQpAQCAtMjM2MSwyNCArMjI0MCwxNyBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRl
eHRDaAogICAgICAgICAgICAgaWYgKCEoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3Vs
ZFNob3dDb3JyZWN0aW9uUGFuZWwpIHx8ICFkb1JlcGxhY2VtZW50KQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICAg
ICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCk7CisgICAgICAgICAgICAgICAgLy8gc2hv
dWxkU2hvd0NvcnJlY3Rpb25QYW5lbCBjYW4gYmUgdHJ1ZSBvbmx5IHdoZW4gdGhlIHBhbmVsIGlz
IGF2YWlsYWJsZS4KICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TG9jYXRpb24gKyByZXN1bHRM
ZW5ndGggPT0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICAv
LyBXZSBvbmx5IHNob3cgdGhlIGNvcnJlY3Rpb24gcGFuZWwgb24gdGhlIGxhc3Qgd29yZC4KLSAg
ICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJh
bmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJvdW5k
aW5nQm94LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSBy
YW5nZVRvUmVwbGFjZTsKLSAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0g
cmVzdWx0LT5yZXBsYWNlbWVudDsKLSAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgY2xpZW50KCktPnNo
b3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRp
bmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcmVzdWx0LT5yZXBs
YWNlbWVudCwgVmVjdG9yPFN0cmluZz4oKSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3BlbGxp
bmdDb3JyZWN0b3ItPnNob3cocmFuZ2VUb1JlcGxhY2UsIHJlc3VsdC0+cmVwbGFjZW1lbnQpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHNob3dpbmcgY29ycmVjdGlv
biBwYW5lbCwgd2UgaWdub3JlIG90aGVyIGNvcnJlY3Rpb24gb3IgcmVwbGFjZW1lbnQuCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0jZW5kaWYKIAogICAgICAgICAg
ICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91
bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKSkKQEAgLTIzOTIsMTIgKzIyNjQs
NyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAgICAgICAgICAgICAgIGlmIChjYW5FZGl0
UmljaGx5KCkpCiAgICAgICAgICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChDcmVhdGVMaW5rQ29t
bWFuZDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHJlc3VsdC0+cmVwbGFjZW1lbnQpKTsK
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuRWRpdCgpICYmIHNob3VsZEluc2VydFRleHQocmVz
dWx0LT5yZXBsYWNlbWVudCwgcmFuZ2VUb1JlcGxhY2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
blR5cGVkKSkgewotICAgICAgICAgICAgICAgIGJvb2wgdXNlU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZCA9IGZhbHNlOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKQot
ICAgICAgICAgICAgICAgICAgICB1c2VTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kID0gdHJ1ZTsK
LSNlbmRpZgotICAgICAgICAgICAgICAgIGlmICh1c2VTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
KQogICAgICAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBsYWNlLCByZXN1bHQtPnJlcGxhY2VtZW50KSk7CiAgICAg
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKQEAgLTI0MTcsMTkgKzIyODQs
OSBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAgICAgICAgICAgICAgICAgICAgICAgYW1i
aWd1b3VzQm91bmRhcnlPZmZzZXQgPSBzZWxlY3Rpb25PZmZzZXQgLSAxOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5n
VHlwZUNvcnJlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNv
IHRoYXQgY29ycmVjdGlvbnMgY2FuIGVhc2lseSBiZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNv
cnJlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdl
ID0gc3BlbGxpbmdQYXJhZ3JhcGguc3VicmFuZ2UocmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50
TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiBtYXJrZXJUeXBlc1RvQWRkID0gbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigp
OwotICAgICAgICAgICAgICAgICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMg
PSByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyVHlwZXNU
b0FkZC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1hcmtlclR5cGVzVG9BZGRbaV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5n
ZS5nZXQoKSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtl
cihyZXBsYWNlZFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBBZGQgYSBtYXJrZXIgc28g
dGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5IGJlIHVuZG9uZSBhbmQgd29uJ3QgYmUgcmUtY29y
cmVjdGVkLgorICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5n
VHlwZUNvcnJlY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIG1fc3BlbGxpbmdDb3JyZWN0b3It
Pm1hcmtDb3JyZWN0aW9uKHNwZWxsaW5nUGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9u
LCByZXBsYWNlbWVudExlbmd0aCksIHJlcGxhY2VkU3RyaW5nKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTI0NTYsMzAgKzIzMTMsNiBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRl
eHRDaAogI2VuZGlmIC8vIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiB9CiAKLXZvaWQgRWRp
dG9yOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5n
ZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJp
bmcmIGNvcnJlY3Rpb24pCi17Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAg
IGlmICghcmFuZ2VPZkNvcnJlY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVjdGlvbi0+c3RhcnRDb250YWlu
ZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4g
Y29ycmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLT5tYXJrZXJzSW5SYW5nZShyYW5nZU9mQ29y
cmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOwotICAgIGlmIChjb3JyZWN0
ZWRPbmNlTWFya2Vycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBT
cGVsbGluZyBjb3JyZWN0ZWQgdGV4dCBoYXMgYmVlbiBlZGl0ZWQuIFdlIG5lZWQgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgdXNlciBoYXMgcmV2ZXJ0ZWQgaXQgdG8gb3JpZ2luYWwgdGV4dCBvcgotICAg
IC8vIGVkaXRlZCBpdCB0byBzb21ldGhpbmcgZWxzZSwgYW5kIG5vdGlmeSBzcGVsbGNoZWNrZXIg
YWNjb3JkaW5nbHkuCi0gICAgaWYgKG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29y
cmVjdGVkT25jZU1hcmtlcnMpICYmIGNvcnJlY3RlZE9uY2VNYXJrZXJzWzBdLmRlc2NyaXB0aW9u
ID09IGNvcnJlY3RlZCkKLSAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNv
cnJlY3Rpb24pOwotICAgIGVsc2UKLSAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvbkVkaXRlZCwgY29ycmVjdGVk
LCBjb3JyZWN0aW9uKTsKLSAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlT2ZDb3JyZWN0
aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShyYW5nZU9mQ29ycmVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOwotI2VuZGlmCi19Ci0KIHZvaWQgRWRpdG9y
OjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
KQogewogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCkBAIC0yNDkwLDE4ICsyMzIzLDEy
IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nKQogICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmlu
Zywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFN0cmlu
ZyByZXBsYWNlbWVudCA9IHBsYWluVGV4dChzZWxlY3Rpb24uZ2V0KCkpOwotICAgIGNsaWVudCgp
LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rp
b25SZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50KTsKLSNlbmRpZgorICAgIG1f
c3BlbGxpbmdDb3JyZWN0b3ItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChy
ZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uKTsKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFy
YWdyYXBoKHNlbGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2Vk
U3RyaW5nLCBmYWxzZSwgZmFsc2UpOwogICAgIFJlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlID0g
cGFyYWdyYXBoLnN1YnJhbmdlKHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3Ry
aW5nLmxlbmd0aCgpKTsKICAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTAotICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIo
KS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0jZW5kaWYKKyAgICBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5tYXJrUmV2ZXJzZWQoY2hhbmdlZFJhbmdlLmdldCgpKTsKICNlbHNl
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3Ry
aW5nKTsKQEAgLTI1MjYsMTQwICsyMzUzLDE2IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjCiAj
ZW5kaWYKIH0KIAotdm9pZCBFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8
RWRpdG9yPiopCi17Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIG1fY29y
cmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IGZhbHNlOwotICAgIHN3aXRjaCAobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbjogewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgICAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgp
KTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdv
cmRJZk9uQm91bmRhcnkpOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMg
PSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0KTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyhNYXJrU3BlbGxpbmcgfCBTaG93Q29ycmVjdGlvblBhbmVs
LCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOwotICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZl
cnNpb246IHsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsK
LSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAg
IEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBpZiAoIWJvdW5kaW5n
Qm94LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVs
KG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
bWVudFN0cmluZywgVmVjdG9yPFN0cmluZz4oKSk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6
IHsKLSAgICAgICAgaWYgKHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCkpICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWlu
VGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkKS5wYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKLSAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gc3VnZ2VzdGlvbnM7Ci0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3Jk
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3Vn
Z2VzdGlvbnMpOwotICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB0b3BTdWdnZXN0aW9u
ID0gc3VnZ2VzdGlvbnMuZmlyc3QoKTsKLSAgICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDApOwot
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBG
bG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgaWYgKCFib3VuZGluZ0Jv
eC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbCht
X2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7Ci0g
ICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBFZGl0b3I6Omhh
bmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0g
ICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCk7Ci0gICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3Vt
ZW50KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhl
IHdvcmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRp
bWVyIGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgotICAgIGlmIChjdXJyZW50
V29yZCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotCi0g
ICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7Ci0gICAgY2FzZSBD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgotICAgICAgICBpZiAoY29y
cmVjdGlvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKLSAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlv
blBhbmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0
b3IpCi0gICAgICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9j
dW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3Ry
aW5nKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjoKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxl
bmd0aCgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRT
dHJpbmcgPSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZv
KG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNs
ZWFyKCk7Ci19Ci0KLXZvaWQgRWRpdG9yOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJF
Q1RJT05fUEFORUwKLSAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZh
bCA9IDAuMzsKLSAgICBpZiAoaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkp
IHsKLSAgICAgICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29y
cmVjdGlvbikKLSAgICAgICAgICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0
aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQu
Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xl
YXIoKTsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7Ci0g
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5l
bFRpbWVySW50ZXJ2YWwpOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwot
I2VuZGlmCi19Ci0KLXZvaWQgRWRpdG9yOjpzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKQordm9p
ZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikKIHsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0g
ICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdG9wKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0jZW5kaWYKKyAgICBtX3NwZWxsaW5nQ29y
cmVjdG9yLT5yZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc2VsZWN0aW9uT2ZDb3Jy
ZWN0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CiB9CiAKLXZvaWQgRWRpdG9yOjpkaXNtaXNz
Q29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29u
Rm9yRGlzbWlzc2luZykKK3ZvaWQgRWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BdFdvcmRCb3VuZGFyeSkKIHsK
LSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgaWYgKCFtX2NvcnJlY3Rpb25Q
YW5lbEluZm8uaXNBY3RpdmUpCisgICAgaWYgKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5zaG91bGRS
ZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotICAgIG1fY29ycmVjdGlvblBhbmVsSXNE
aXNtaXNzZWRCeUVkaXRvciA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGll
bnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHJlYXNvbkZvckRpc21pc3NpbmcpOwotI2VuZGlmCi19Ci0KLVN0
cmluZyBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKLXsKLSNpZiBTVVBQT1JUX0FV
VE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3Rp
dmUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUgPSBmYWxzZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0
b3IgPSB0cnVlOwotICAgIGlmICghY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICByZXR1cm4gY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKHJlYXNvbkZv
ckRpc21pc3NpbmcpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVhc29uRm9yRGlzbWlzc2lu
Zyk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotI2VuZGlmCi19CiAKLXZvaWQgRWRpdG9yOjpyZW1v
dmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChib29sIGRvTm90
UmVtb3ZlSWZTZWxlY3Rpb25BdFdvcmRCb3VuZGFyeSkKLXsKICAgICAvLyBXZSB3YW50IHRvIHJl
bW92ZSB0aGUgbWFya2VycyBmcm9tIGEgd29yZCBpZiBhbiBlZGl0aW5nIGNvbW1hbmQgd2lsbCBj
aGFuZ2UgdGhlIHdvcmQuIFRoaXMgY2FuIGhhcHBlbiBpbiBvbmUgb2YKICAgICAvLyBzZXZlcmFs
IHNjZW5hcmlvczoKICAgICAvLyAxLiBJbnNlcnQgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQuCkBA
IC0yNzI1LDEwMyArMjQyOCw2IEBAIHZvaWQgRWRpdG9yOjpyZW1vdmVTcGVsbEFuZENvcnJlY3Rp
b25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChib29sIGRvTm90UmVtb3ZlCiAgICAgZG9jdW1l
bnQtPm1hcmtlcnMoKS0+Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1Jhbmdl
KHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKIH0KIAotdm9p
ZCBFZGl0b3I6OmFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc1RvQWRkKQotewotI2lmIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0g
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsK
LSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBz
ZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQYXJh
Z3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlv
bigpKSk7Ci0KLSAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJhbmdl
VG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCi0gICAg
Ly8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9m
IHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5vdCB2YWxpZCBhbnltb3JlLgotICAgIC8vIFNvIGJlZm9y
ZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFy
dCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZAotICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBz
dGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0
aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAotICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIElu
IG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSBy
YW5nZQotICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0
aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQuCi0gICAgUmVmUHRyPFJhbmdl
PiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVjKS0+
ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3Np
dGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9u
KCkpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9zaXRpb24gc3RhcnRQ
b3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJ
blBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNl
ZC5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1
dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlv
biBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBs
YWNlLgotICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
LmdldCgpKTsKLQotICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0
aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCi0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgYXBwbHlDb21tYW5kKFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2Ug
PSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoLCAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKTsKLSAgICBTdHJpbmcgbmV3VGV4
dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKLQotICAgIC8vIENoZWNrIHRv
IHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCi0gICAgaWYgKG5ld1RleHQgIT0gbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5z
dGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgc2l6ZV90IHNpemUg
PSBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewotICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBl
ID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKLSAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotICAg
ICAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24gJiYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3Jy
ZWN0ZWQpKQotICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZWRTdHJpbmc7Ci0gICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJh
bmdlLmdldCgpLCBtYXJrZXJUeXBlLCBkZXNjcmlwdGlvbik7Ci0gICAgfQotI2Vsc2UgLy8gU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFVOVVNFRF9QQVJBTShtYXJrZXJUeXBlc1Rv
QWRkKTsKLSNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi19Ci0KLWJvb2wg
RWRpdG9yOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpCi17
Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgIW1f
Y29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
UG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS5zdGFydCgpOwotCi0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7Ci0gICAgICAgIGhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfSAKLSAgICAKLSAgICAvLyBQZW5kaW5nIGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5cyBi
ZSB3aGVyZSBjYXJldCBpcy4gQnV0IGluIGNhc2UgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIHdl
IHN0aWxsIHdhbnQgdG8gZGlzbWlzcyB0aGUgcGFuZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhlIGNv
cnJlY3Rpb24uCi0gICAgQVNTRVJUKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKTsKLSAgICBkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0jaWYgU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVk
LCBjb3JyZWN0aW9uKTsKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsK
LSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVj
dGVkLCBTZWxlY3Rpb25Db250cm9sbGVyOjpDbG9zZVR5cGluZyB8IFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkNsZWFyVHlwaW5nU3R5bGUgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpTcGVsbENvcnJlY3Rp
b25UcmlnZ2VyZWQpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1f
ZnJhbWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFy
dCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCkpOwotCi0gICAgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpOwotICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAg
ICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCk7Ci0gICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0jZWxzZSAvLyBTVVBQT1JUX0FVVE9DT1JSRUNU
SU9OX1BBTkVMCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbk9mQ29ycmVjdGVkKTsKLSAgICBV
TlVTRURfUEFSQU0oY29ycmVjdGVkKTsKLSAgICBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7Ci0j
ZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotfQotCiBQYXNzUmVmUHRyPFJh
bmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQog
ewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50QXRQb2ludCh3aW5k
b3dQb2ludCk7CkBAIC0yOTQ0LDYgKzI1NTAsMjIgQEAgdm9pZCBFZGl0b3I6OmFkZFRvS2lsbFJp
bmcoUmFuZ2UqIHJhbmdlLCBib29sIHByZXBlbmQpCiAgICAgbV9zaG91bGRTdGFydE5ld0tpbGxS
aW5nU2VxdWVuY2UgPSBmYWxzZTsKIH0KIAordm9pZCBFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBh
bmVsVGltZXIoKQoreworICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnN0YXJ0Q29ycmVjdGlvblBh
bmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbik7Cit9CisK
K3ZvaWQgRWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBj
b3JyZWN0aW9uKQoreworICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdChjb3JyZWN0aW9uKTsKK30KKworCit2b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbEFzSWdub3JlZCgpCit7CisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+ZGlzbWlz
cyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Cit9CisKIGJvb2wg
RWRpdG9yOjppbnNpZGVWaXNpYmxlQXJlYShjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7
CiAgICAgaWYgKG1fZnJhbWUtPmV4Y2x1ZGVGcm9tVGV4dFNlYXJjaCgpKQpAQCAtMzUxNiwxNCAr
MzEzOCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVk
KGJvb2wgZmxhZykKIAogdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBTZWxlY3Rpb25Db250cm9sbGVyOjpT
ZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTAotICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rp
b24gYmVmb3JlIHdlIGNhbGwgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4K
LSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpKTsKLSAgICBpZiAoY3VycmVudFNlbGVjdGlvbiAhPSBvbGRTZWxlY3Rp
b24pIHsKLSAgICAgICAgc3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7Ci0gICAgICAgIGRpc21p
c3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9y
ZWQpOwotICAgIH0KLSNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAg
bV9zcGVsbGluZ0NvcnJlY3Rvci0+c3RvcFBlbmRpbmdDb3JyZWN0aW9uKG9sZFNlbGVjdGlvbik7
CiAKICAgICBib29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAmIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkNsb3NlVHlwaW5nOwogICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQg
PSB0aGlzLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwpAQCAtMzU0MCwxMCAr
MzE1NSw4IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgU2VsCiAgICAgICAgIH0KIAogICAgICAgICBi
b29sIHNob3VsZENoZWNrU3BlbGxpbmdBbmRHcmFtbWFyID0gdHJ1ZTsKLSNpZiBTVVBQT1JUX0FV
VE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgIC8vIERvbid0IGNoZWNrIHNwZWxsaW5nIGFuZCBn
cmFtbWFyIGlmIHRoZSBjaGFuZ2Ugb2Ygc2VsZWN0aW9uIGlzIHRyaWdnZXJlZCBieSBzcGVsbGlu
ZyBjb3JyZWN0aW9uIGl0c2VsZi4KICAgICAgICAgc2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1t
YXIgPSAhKG9wdGlvbnMgJiBTZWxlY3Rpb25Db250cm9sbGVyOjpTcGVsbENvcnJlY3Rpb25Ucmln
Z2VyZWQpOwotI2VuZGlmCiAKICAgICAgICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hlY2sgc3BlbGxp
bmcgZWxzZXdoZXJlLCBzbyBkb24ndCByZWRvIGl0IGhlcmUuCiAgICAgICAgIC8vIElmIHRoaXMg
aXMgYSBjaGFuZ2UgaW4gc2VsZWN0aW9uIHJlc3VsdGluZyBmcm9tIGEgZGVsZXRlIG9wZXJhdGlv
biwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGY5YWVjNDA2OTBhMDFmM2EzODc4NTVjYTIy
YTA2NTdlNzQ1YWIzMTUuLjhiOTExNTMxZDMxNTMzMTA5MDAzZWQ5NTg1ZTY1MDNlODE1NWY0Mzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAi
Q2xpcGJvYXJkQWNjZXNzUG9saWN5LmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJD
b3JyZWN0aW9uUGFuZWxJbmZvLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNs
dWRlICJFZGl0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRWRpdGluZ0JlaGF2aW9yLmgiCkBAIC01MSw2
ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENsaXBib2FyZDsKK2Ns
YXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBEZWxldGVCdXR0b25Db250
cm9sbGVyOwogY2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0b3JDbGllbnQ7CkBAIC0zMjUs
MTAgKzMyNSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFRvS2lsbFJpbmcoUmFuZ2UqLCBi
b29sIHByZXBlbmQpOwogCi0gICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSk7CisgICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5l
bFRpbWVyKCk7CiAgICAgLy8gSWYgdXNlciBjb25maXJtZWQgYSBjb3JyZWN0aW9uIGluIHRoZSBj
b3JyZWN0aW9uIHBhbmVsLCBjb3JyZWN0aW9uIGhhcyBub24temVybyBsZW5ndGgsIG90aGVyd2lz
ZSBpdCBtZWFucyB0aGF0IHVzZXIgaGFzIGRpc21pc3NlZCB0aGUgcGFuZWwuCiAgICAgdm9pZCBo
YW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKLSAg
ICB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rp
b25QYW5lbCk7CisgICAgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CiAK
ICAgICB2b2lkIHBhc3RlQXNGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBi
b29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlKTsKICAgICB2b2lkIHBhc3RlQXNQbGFp
blRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBzbWFydFJlcGxhY2UpOwpAQCAtMzg0LDcgKzM4NCw3
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBzZWxlY3Rpb25TdGFydEhhc01hcmtlckZv
cihEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0
OwotICAgIHZvaWQgcmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVF
ZGl0ZWQoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpOworICAgIHZv
aWQgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBvbmx5SGFuZGxl
V29yZHNDb250YWluaW5nU2VsZWN0aW9uKTsKIAogcHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFt
ZTsKQEAgLTM5OSwxMCArMzk5LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkU3RhcnRO
ZXdLaWxsUmluZ1NlcXVlbmNlOwogICAgIGJvb2wgbV9zaG91bGRTdHlsZVdpdGhDU1M7CiAgICAg
T3duUHRyPEtpbGxSaW5nPiBtX2tpbGxSaW5nOwotICAgIENvcnJlY3Rpb25QYW5lbEluZm8gbV9j
b3JyZWN0aW9uUGFuZWxJbmZvOwogICAgIE93blB0cjxTcGVsbENoZWNrZXI+IG1fc3BlbGxDaGVj
a2VyOwotICAgIFRpbWVyPEVkaXRvcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsKLSAgICBib29s
IG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcjsKKyAgICBPd25QdHI8U3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcj4gbV9zcGVsbGluZ0NvcnJlY3RvcjsKICAgICBWaXNpYmxl
U2VsZWN0aW9uIG1fbWFyazsKICAgICBib29sIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGln
aHRlZDsKIApAQCAtNDE3LDcgKzQxNSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXZlYWxTZWxl
Y3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NP
ckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJvb2wgY2hlY2tTcGVsbGluZywg
UmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBUZXh0Q2hlY2tpbmdU
eXBlTWFzayB0ZXh0Q2hlY2tpbmdUeXBlTWFza0ZvcihUZXh0Q2hlY2tpbmdPcHRpb25zKTsKLSAg
ICB2b2lkIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJh
bmdlKiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7
CiAKICAgICB2b2lkIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAgICAgdm9pZCBjb25maXJtQ29tcG9z
aXRpb24oY29uc3QgU3RyaW5nJiwgYm9vbCBwcmVzZXJ2ZVNlbGVjdGlvbik7CkBAIC00MjgsMTAg
KzQyNSwxMCBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IG5leHRWaXNpYmxlUmFu
Z2UoUmFuZ2UqLCBjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiAKICAgICB2b2lkIGNoYW5n
ZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rp
b24sIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wgY2xlYXJUeXBpbmdTdHlsZSk7Ci0gICAgdm9pZCBj
b3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPEVkaXRvcj4qKTsKKwogICAgIE5vZGUqIGZp
bmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKICAgICB2b2lkIHN0b3BDb3JyZWN0
aW9uUGFuZWxUaW1lcigpOwotICAgIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKKwogICAgIHZvaWQgYXBwbHlDb3Jy
ZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4m
IG1hcmtlclR5cGVzVG9BZGQpOwogICAgIC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rpb24gd2Fz
IGFwcGxpZWQsIGZhbHNlIG90aGVyd2lzZS4KICAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRleCBhZmU3NGE4ZDk4NGNjZTEy
NzgyOWIyNWNlNDRlNTg5Mzk5N2M5MjkwLi5mMDI5N2MxNTQ4ZDA5ZWMxODFmYzViMjExOTFlNzU5
OWNiOTA4NzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgiCiAKLSNpbmNsdWRlICJD
b3JyZWN0aW9uUGFuZWxJbmZvLmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wOGE3NzZjOGE5YjdkZTA1YTg2M2E5NTllYzZmMGIwZmRhYWM5ODU4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmNwcApAQCAtMCwwICsxLDQ4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJFZGl0Q29tbWFuZC5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5oIgorI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCisjaW5j
bHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlICJ2
aXNpYmxlX3VuaXRzLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJ
T05fUEFORUwKKworc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4mIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JB
dXRvQ29ycmVjdGlvbiwgKCkpOworICAgIGlmIChtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9u
LmlzRW1wdHkoKSkgeworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVu
ZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1
dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7
CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFy
a2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRv
Q29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOworICAgIH0K
KyAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbjsKK30KKworc3RhdGljIGNv
bnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yUmVw
bGFjZW1lbnQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCwgKCkpOworICAgIGlm
IChtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmlzRW1wdHkoKSkgeworICAgICAgICBtYXJrZXJU
eXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwor
ICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6
U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgfQorICAgIHJldHVybiBtYXJrZXJUeXBlc0Zv
clJlcGxhY2VtZW50OworfQorCitzdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2Ny
aXB0aW9uKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpCit7CisgICAgaWYg
KG1hcmtlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFN0
cmluZyYgZGVzY3JpcHRpb24gPSBtYXJrZXJzWzBdLmRlc2NyaXB0aW9uOworICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoZGVzY3Jp
cHRpb24gIT0gbWFya2Vyc1tpXS5kZXNjcmlwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorICAgIDog
bV9mcmFtZShmcmFtZSkKKyAgICAsIG1fY29ycmVjdGlvblBhbmVsVGltZXIodGhpcywgJlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCit7Cit9
CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyKCkKK3sKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWxJZ25vcmVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFy
dENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBl
KQoreworICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4z
OworICAgIGlmICghaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0aGVu
IHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQuCisg
ICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikK
KyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7
CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7CisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZh
bCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcENvcnJlY3Rp
b25QYW5lbFRpbWVyKCkKK3sKKyAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsKKyAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKwor
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQoreworICAgIC8vIE1ha2Ugc3Vy
ZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFya01p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1
cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICBp
ZiAoY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCit7CisgICAgLy8gQXBwbHkgcGVuZGluZyBhdXRv
Y29ycmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBvZiBzcGVsbCBjaGVja2luZy4KKyAgICBib29s
IGRvQXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNl
bGVjdGlvbiA9IHNlbGVjdGlvbkFmdGVyVHlwaW5nLnZpc2libGVTdGFydCgpOworICAgIFZpc2li
bGVTZWxlY3Rpb24gY3VycmVudFdvcmQgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0
YXJ0T2ZTZWxlY3Rpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZT
ZWxlY3Rpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOworICAgIGlmIChjdXJyZW50V29yZC52
aXNpYmxlRW5kKCkgPT0gc3RhcnRPZlNlbGVjdGlvbikgeworICAgICAgICBTdHJpbmcgd29yZFRl
eHQgPSBwbGFpblRleHQoY3VycmVudFdvcmQudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Cisg
ICAgICAgIGlmICh3b3JkVGV4dC5sZW5ndGgoKSA+IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFyeUNo
YXJhY3Rlcih3b3JkVGV4dFt3b3JkVGV4dC5sZW5ndGgoKSAtIDFdKSkKKyAgICAgICAgICAgIGRv
QXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7CisgICAgfQorICAgIGlmIChkb0FwcGx5Q29ycmVjdGlv
bikKKyAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOyAKKyAgICBlbHNlCisgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworfQor
Citib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0aW9u
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkOworfQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxp
bmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0
Cit7CisgICAgcmV0dXJuICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmhhc01hcmtl
cnMobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdF
eGVtcHRpb24pOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3co
UGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnQpCit7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKHJh
bmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
ID0gcmFuZ2VUb1JlcGxhY2U7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3Ry
aW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlbWVudDsKKyAgICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOworICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlv
blBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50LCBWZWN0b3I8U3Ry
aW5nPigpKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVD
YW5jZWxPcGVyYXRpb24oKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZl
ID0gZmFsc2U7CisgICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
Q2FuY2VsbGVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNt
aXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2lu
ZykKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAg
IG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7CisgICAgaWYgKGNs
aWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChyZWFzb25G
b3JEaXNtaXNzaW5nKTsKK30KKworU3RyaW5nIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OmRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9y
RGlzbWlzc2luZykKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0Fj
dGl2ZSA9IGZhbHNlOworICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9
IHRydWU7CisgICAgaWYgKCFjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
IHJldHVybiBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24ocmVhc29uRm9yRGlz
bWlzc2luZyk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlD
b3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4mIG1hcmtlclR5cGVzVG9BZGQpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmFuZ2VUb0JlUmVwbGFjZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVj
dGlvbiA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5n
ZShlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRTdGFydChwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpKSk7
CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVu
ZE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5k
UG9zaXRpb24oKSkpOworCisgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5n
ZSByYW5nZVRvQmVSZXBsYWNlZCwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdl
LgorICAgIC8vIEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2
YWx1ZSBvZiByYW5nZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KKyAgICAvLyBT
byBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0
aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQKKyAgICAvLyByZWxhdGl2ZSB0
byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2Ug
Y29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKKyAgICAvLyB0byBzdG9yZSB0aGlzIHZh
bHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3Jl
YXRlIGEgcmFuZ2UKKyAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3Jh
cGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkLgorICAgIFJlZlB0
cjxSYW5nZT4gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6
OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5l
cihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0
YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQ
b3NpdGlvbigpKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9u
IHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCk7CisgICAgY29ycmVjdGlvblN0YXJ0
T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0Jl
UmVwbGFjZWQuY29udGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNl
ZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2Nv
cnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQg
dG9vayBwbGFjZS4KKyAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBo
QXNSYW5nZS5nZXQoKSk7CisKKyAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxs
ZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJv
dW5kLgorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOworICAgIGFwcGx5Q29t
bWFuZChTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb0JlUmVwbGFjZWQs
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykpOworICAgIHNldEVuZChw
YXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVu
dFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLmdldCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgIG1fY29y
cmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSk7CisgICAgU3RyaW5n
IG5ld1RleHQgPSBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7CisKKyAgICAvLyBD
aGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVkLgorICAgIGlmIChuZXdUZXh0ICE9
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZW1lbnRS
YW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIHNpemVf
dCBzaXplID0gbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFy
a2VyVHlwZSA9IG1hcmtlclR5cGVzVG9BZGRbaV07CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlv
bjsKKyAgICAgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uICYmIChtYXJrZXJUeXBlID09IERvY3Vt
ZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpB
dXRvY29ycmVjdGVkKSkKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VkU3RyaW5nOworICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFj
ZW1lbnRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSwgZGVzY3JpcHRpb24pOworICAgIH0KK30KKwor
Ym9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVm
b3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5w
YW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpOworCisgICAgaWYgKG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBv
c2l0aW9uKSB7CisgICAgICAgIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzU29v
bihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSAKKyAgICAKKyAgICAvLyBQZW5kaW5nIGNvcnJlY3Rpb24gc2hv
dWxkIGFsd2F5cyBiZSB3aGVyZSBjYXJldCBpcy4gQnV0IGluIGNhc2UgdGhpcyBpcyBub3QgYWx3
YXlzIHRydWUsIHdlIHN0aWxsIHdhbnQgdG8gZGlzbWlzcyB0aGUgcGFuZWwgd2l0aG91dCBhY2Nl
cHRpbmcgdGhlIGNvcnJlY3Rpb24uCisgICAgQVNTRVJUKG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKTsKKyAgICBk
aXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVz
cG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5n
JiBjb3JyZWN0aW9uKQoreworICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3Bv
bnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBjb3Jy
ZWN0aW9uKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKyAgICBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBT
ZWxlY3Rpb25Db250cm9sbGVyOjpDbG9zZVR5cGluZyB8IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNs
ZWFyVHlwaW5nU3R5bGUgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpTcGVsbENvcnJlY3Rpb25Ucmln
Z2VyZWQpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUt
PmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpLCBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCkpOworCisgICAgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
OworICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBtYXJr
ZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7
CisgICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyPiopCit7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9y
ID0gZmFsc2U7CisgICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7
CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOiB7Cisg
ICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24uc3Rh
cnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gcCA9
IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgICAgIFZpc2li
bGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQpOwor
ICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXJJblJhbmdlcyhFZGl0b3I6Ok1hcmtTcGVsbGluZyB8IEVkaXRvcjo6U2hvd0NvcnJlY3Rpb25Q
YW5lbCwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCAwKTsKKyAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
UmV2ZXJzaW9uOiB7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRy
dWU7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBsYWlu
VGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAg
ICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAgaWYgKCFib3Vu
ZGluZ0JveC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25Q
YW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZW1lbnRTdHJpbmcsIFZlY3RvcjxTdHJpbmc+KCkpOworICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rp
b25zOiB7CisgICAgICAgIGlmIChwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLmdldCgpKSAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJp
bmcpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBw
bGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZCkucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IHN1Z2dlc3Rpb25zOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9y
V29yZChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHBhcmFncmFwaFRleHQs
IHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgdG9wU3VnZ2Vz
dGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7CisgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgw
KTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIGlmICghYm91bmRp
bmdCb3guaXNFbXB0eSgpKQorICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFu
ZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMp
OworICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24pCit7CisgICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCk7CisgICAgaWYgKCFyZXBsYWNlZFJhbmdl
IHx8IG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQo
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAvLyBD
aGVjayB0byBzZWUgaWYgdGhlIHdvcmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4g
Y2hhbmdlZCBiZXR3ZWVuIHRpbWVyIGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVk
LgorICAgIGlmIChjdXJyZW50V29yZCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0Fj
dGl2ZSA9IGZhbHNlOworCisgICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxU
eXBlKSB7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9u
OgorICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkgeworICAgICAgICAgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKKyAgICAgICAg
ICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9u
KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlF
ZGl0b3IpCisgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1
bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJp
bmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZVJldmVyc2lvbjoKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNw
ZWxsaW5nU3VnZ2VzdGlvbnM6CisgICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7Cisg
ICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3Jy
ZWN0aW9uOworICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVz
Rm9yUmVwbGFjZW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisK
K2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0Nv
cnJlY3Rpb25FbmFibGVkKCkKK3sKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlz
QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworfQorCitib29sIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpCit7
CisgICAgcmV0dXJuIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORyAmJiBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8uaXNBY3RpdmU7Cit9CisKK0Zsb2F0UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjp3aW5kb3dSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAorewor
ICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICByZXR1cm4gdmlldyA/
IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coSW50UmVjdChyYW5nZS0+Ym91bmRpbmdSZWN0KCkpKSA6
IEZsb2F0UmVjdCgpOworfSAgICAgICAgCisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBv
bGRTZWxlY3Rpb24pCit7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgLy8gV2hlbiB1c2VyIG1vdmVz
IGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNo
b3cgdGhlIHBhbmVsCisgICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rp
b24gd29yZCBzbyB0aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQorICAgIC8vIHVuZGVz
aXJlZCBhdXRvY29ycmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1l
ciBvbmNlIHdlIGNvbmZpcm0gdGhhdAorICAgIC8vIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24gaXMg
YXQgdGhlIGVuZCBvZiBhIHdvcmQuCisgICAgaWYgKCFjdXJyZW50U2VsZWN0aW9uLmlzQ2FyZXQo
KSB8fCBjdXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblBvc2l0aW9uID0gY3VycmVudFNlbGVjdGlv
bi5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbk9mV29yZCA9IGVuZE9m
V29yZChzZWxlY3Rpb25Qb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworICAgIGlmIChz
ZWxlY3Rpb25Qb3NpdGlvbiAhPSBlbmRQb3NpdGlvbk9mV29yZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5kZWVwRXF1aXZhbGVu
dCgpOworICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9kZSogbm9kZSA9IHBv
c2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0gcG9zaXRpb24ub2Zm
c2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJz
ID0gbm9kZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5tYXJrZXJzRm9yTm9kZShub2RlKTsKKyAg
ICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJr
ZXImIG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGlmICghc2hvdWxkU3RhcnRUaW1lRm9y
KG1hcmtlciwgZW5kT2Zmc2V0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwg
bm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0LCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KTsKKyAgICAg
ICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7CisgICAg
ICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSB3b3JkUmFu
Z2U7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IGN1cnJl
bnRXb3JkOworICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxs
aW5nKQorICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJr
ZXIuZGVzY3JpcHRpb247CisgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbik7CisgICAgICAgIH0KKworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY29tbWFu
ZCkKK3sKKyAgICBpZiAoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY29tbWFuZC0+
c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKKyAgICAgICAgbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3Jy
ZWN0aW9uSW5kaWNhdG9yKTsKK30KKworRWRpdG9yQ2xpZW50KiBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpjbGllbnQoKQoreworICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCkgPyBtX2Zy
YW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogMDsKK30KKworVGV4dENoZWNrZXJDbGllbnQq
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKK3sKKyAgICBpZiAo
RWRpdG9yQ2xpZW50KiBvd25lciA9IGNsaWVudCgpKQorICAgICAgICByZXR1cm4gb3duZXItPnRl
eHRDaGVja2VyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCit7
CisgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50
OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJp
bmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQ
YXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlKQoreworICAgIHJlY29yZEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2Vt
ZW50UmFuZ2UuZ2V0KCkpKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjptYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKQoreworICAgIGNo
YW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1v
dmVNYXJrZXJzKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0
ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdN
YXJrZXIpOworICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKK3sKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzVG9BZGQgPSBtYXJrZXJUeXBlc0ZvckF1dG9jb3Jy
ZWN0aW9uKCk7CisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFj
ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7ICsraSkgeworICAg
ICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNU
b0FkZFtpXTsKKyAgICAgICAgaWYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxh
Y2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpCisg
ICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgbWFya2Vy
VHlwZSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtYXJrZXJz
LT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSk7CisgICAgfQorfQor
Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJl
c3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlvbiwgY29u
c3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKK3sKKyAgICBp
ZiAoIXJhbmdlT2ZDb3JyZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmFuZ2VPZkNvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVy
KCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IGNv
cnJlY3RlZE9uY2VNYXJrZXJzID0gbWFya2Vycy0+bWFya2Vyc0luUmFuZ2UocmFuZ2VPZkNvcnJl
Y3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKKyAgICBpZiAoY29ycmVjdGVk
T25jZU1hcmtlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gU3Bl
bGxpbmcgY29ycmVjdGVkIHRleHQgaGFzIGJlZW4gZWRpdGVkLiBXZSBuZWVkIHRvIGRldGVybWlu
ZSB3aGV0aGVyIHVzZXIgaGFzIHJldmVydGVkIGl0IHRvIG9yaWdpbmFsIHRleHQgb3IKKyAgICAv
LyBlZGl0ZWQgaXQgdG8gc29tZXRoaW5nIGVsc2UsIGFuZCBub3RpZnkgc3BlbGxjaGVja2VyIGFj
Y29yZGluZ2x5LgorICAgIGlmIChtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNvcnJl
Y3RlZE9uY2VNYXJrZXJzKSAmJiBjb3JyZWN0ZWRPbmNlTWFya2Vyc1swXS5kZXNjcmlwdGlvbiA9
PSBjb3JyZWN0ZWQpCisgICAgICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3Bv
bnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBjb3Jy
ZWN0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25FZGl0ZWQsIGNvcnJlY3RlZCwg
Y29ycmVjdGlvbik7CisgICAgbWFya2Vycy0+cmVtb3ZlTWFya2VycyhyYW5nZU9mQ29ycmVjdGlv
biwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworfQorCisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2ExYmUyYjI3OGEwMzk2
M2VlZTU1YWRlMDAxYTQ4M2YzMTZhZmFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgKQEAgLTAsMCArMSwxNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCisjZGVm
aW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAorCisjaWYgUExBVEZPUk0oTUFDKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorLy8gU29tZSBwbGF0
Zm9ybXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhdXRvY29ycmVjdGlvbi4KKyNkZWZpbmUg
U1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAxCisvLyBTb21lIHBsYXRmb3JtcyB1c2Ugc3Bl
bGxpbmcgYW5kIGF1dG9jb3JyZWN0aW9uIG1hcmtlcnMgdG8gcHJvdmlkZSB2aXN1YWwgY3VlLgor
Ly8gT24gc3VjaCBwbGF0Zm9ybSwgaWYgd29yZCB3aXRoIG1hcmtlciBpcyBlZGl0ZWQsIHdlIG5l
ZWQgdG8gcmVtb3ZlIHRoZSBtYXJrZXIuCisjZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJ
VElORyAxCisjZWxzZQorI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDAKKyNk
ZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDAKKyNlbmRpZiAvLyAjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorCisj
aW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgorI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiVGltZXIu
aCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBFZGl0b3JDbGllbnQ7CitjbGFzcyBSYW5nZTsKK2NsYXNzIFRleHRDaGVja2VyQ2xp
ZW50OworY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKKworc3RydWN0IENvcnJlY3Rpb25QYW5lbElu
Zm8geworICAgIGVudW0gUGFuZWxUeXBlIHsKKyAgICAgICAgUGFuZWxUeXBlQ29ycmVjdGlvbiA9
IDAsCisgICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbiwKKyAgICAgICAgUGFuZWxUeXBlU3BlbGxp
bmdTdWdnZXN0aW9ucworICAgIH07CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxh
Y2VkOworICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsKKyAgICBTdHJpbmcgcmVwbGFjZW1lbnRT
dHJpbmc7CisgICAgUGFuZWxUeXBlIHBhbmVsVHlwZTsKKyAgICBib29sIGlzQWN0aXZlOworfTsK
KworZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKKyAgICBSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKKyAgICBSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsQWNjZXB0ZWQKK307CisKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMCisjZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgOworI2Vsc2UKKyNk
ZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBmdW5jdGlvbkJvZHkKKyNlbmRpZgor
CitjbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKikgVU5MRVNTX0VOQUJMRUQoe30pCisgICAg
flNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7fSkKKworICAg
IHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGUpIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIHZvaWQgc3RvcENvcnJlY3Rpb25QYW5lbFRp
bWVyKCkgVU5MRVNTX0VOQUJMRUQoe30pCisKKyAgICB2b2lkIGRpc21pc3MoUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgVU5MRVNTX0VOQUJMRUQoe30pCisgICAgU3RyaW5nIGRp
c21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVTU19FTkFC
TEVEKHsgcmV0dXJuIFN0cmluZygpOyB9KQorICAgIHZvaWQgc2hvdyhQYXNzUmVmUHRyPFJhbmdl
PiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkgVU5MRVNTX0VOQUJM
RUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb1JlcGxhY2UpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1l
bnQpOyB9KQorCisgICAgdm9pZCBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9y
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYpIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIC8v
IFJldHVybiB0cnVlIGlmIGNvcnJlY3Rpb24gd2FzIGFwcGxpZWQsIGZhbHNlIG90aGVyd2lzZS4K
KyAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkg
VU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCisKKyAgICB2b2lkIHJlc3BvbmRUb1Vu
YXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3QgU3Ry
aW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJMRUQo
eyBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQor
ICAgIHZvaWQgcmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4p
IFVOTEVTU19FTkFCTEVEKHt9KQorICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5V
U0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCisKKyAgICB2b2lkIHN0b3BQZW5kaW5nQ29ycmVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVE
KHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCisgICAgdm9pZCBhcHBseVBlbmRpbmdD
b3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKSBV
TkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7IH0pCisK
KyAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJl
Y3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQorICAg
IHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkgVU5MRVNTX0VOQUJMRUQoe30pCisKKyAgICBi
b29sIGhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4g
ZmFsc2U7IH0pCisgICAgYm9vbCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJh
bmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJB
TShtaXNzcGVsbGluZ1JhbmdlKTsgcmV0dXJuIHRydWU7IH0pCisgICAgYm9vbCBpc0F1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxz
ZTsgfSkKKyAgICBib29sIHNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpIFVOTEVTU19F
TkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQorCisgICAgdm9pZCBjb3JyZWN0aW9uUGFuZWxUaW1l
ckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikgVU5MRVNTX0VOQUJM
RUQoe30pCisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRS
YW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOyBVTlVT
RURfUEFSQU0ocmVwbGFjZW1lbnRSYW5nZSk7IH0pCisgICAgdm9pZCBtYXJrUmV2ZXJzZWQoUGFz
c1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJB
TShjaGFuZ2VkUmFuZ2UpOyB9KQorICAgIHZvaWQgbWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0cjxS
YW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykgVU5MRVNT
X0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVOVVNFRF9QQVJBTShyZXBs
YWNlZFN0cmluZyk7IH0pCisgICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1v
ZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYg
Y29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5V
U0VEX1BBUkFNKHJhbmdlT2ZDb3JyZWN0aW9uKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7IFVO
VVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKKworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05f
UEFORUwKK3ByaXZhdGU6CisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2
ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZyk7CisKKyAgICBib29sIHNob3VsZFN0YXJ0VGltZUZvcihjb25zdCBEb2N1bWVu
dE1hcmtlciYgbWFya2VyLCBpbnQgZW5kT2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICgoKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCAmJiAhbWFy
a2VyLmRlc2NyaXB0aW9uLmlzTnVsbCgpKSAKKyAgICAgICAgICAgICAgICAgfHwgbWFya2VyLnR5
cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtl
ci5lbmRPZmZzZXQpID09IGVuZE9mZnNldCk7CisgICAgfQorCisgICAgRWRpdG9yQ2xpZW50KiBj
bGllbnQoKTsKKyAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKTsKKyAgICBGbG9h
dFJlY3Qgd2luZG93UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7CisKKyAgICBFZGl0
b3JDbGllbnQqIG1fY2xpZW50OworICAgIEZyYW1lKiBtX2ZyYW1lOworCisgICAgVGltZXI8U3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsKKyAgICBD
b3JyZWN0aW9uUGFuZWxJbmZvIG1fY29ycmVjdGlvblBhbmVsSW5mbzsKKyAgICBib29sIG1fY29y
cmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcjsKKyNlbmRpZgorfTsKKworI3VuZGVmIFVO
TEVTU19FTkFCTEVECisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHAKaW5kZXggZGYxNTBlZTAwMzk1MDhkNjM0MjdhY2I0ZWNiY2Q1MGZlNmY0MjYwOC4u
YjU0OGI5MTMyZGQ3YmNmMTkwZWY4Y2NmNGE5MWE1NDQ2OWE2ZmVlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0xNTUsMTEgKzE1NSw5IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgVHlwaW5nQ29tCiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAg
ICAgQVNTRVJUKGZyYW1lKTsKIAotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwogICAg
IGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3Io
KS0+cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoaXNT
cGFjZU9yTmV3bGluZSh0ZXh0LmNoYXJhY3RlcnMoKVswXSkpOwotI2VuZGlmCi0KKyAgICAgICAg
ZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHQuY2hhcmFjdGVycygpWzBdKSk7CisgICAg
CiAgICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxl
Y3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOwogfQogCkBAIC0zNDQsMTIgKzM0Miw4IEBA
IHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdD
b21tYW5kIGNvbW1hbmRUeXBlKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBzdGFydE9m
V29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBpZiAocDEgIT0gcDIp
CiAgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSk7Ci0jaWYgU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICBlbHNlIGlmIChjb21tYW5kVHlwZSA9PSBU
eXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+ZWRpdG9yKCktPnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlQ29ycmVjdGlvbik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb21tYW5k
VHlwZSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigp
LT5zdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CiAgICAgfQogfQogCkBAIC00NjcsOSArNDYx
LDggQEAgYm9vbCBUeXBpbmdDb21tYW5kOjptYWtlRWRpdGFibGVSb290RW1wdHkoKQogCiB2b2lk
IFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LCBib29sIGtpbGxSaW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwot
ICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVsbEFuZENvcnJlY3Rp
b25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICBkb2N1bWVu
dCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsK
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKIApAQCAtNTY2LDkgKzU1
OSw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9y
d2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtp
bGxSaW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwotICAgIGRvY3VtZW50
KCktPmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJv
bVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICBkb2N1bWVudCgpLT5mcmFtZSgp
LT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2Up
OworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRp
dGluZy5oCmluZGV4IGNiMmIyYTQyOWY5ZTFlZWU3OTdlY2JhOWZjNzAwZDZmMjg3ZmUyNDcuLjFk
ODUzYzdhMzE3MDY3MTQyMzM0YzZlYWE1OGUzMGIwNmY3OTQyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2h0bWxlZGl0aW5nLmgKQEAgLTIyNCw2ICsyMjQsMTUgQEAgaW5saW5lIGJvb2wgaXNXaGl0
ZXNwYWNlKFVDaGFyIGMpCiB7CiAgICAgcmV0dXJuIGMgPT0gbm9CcmVha1NwYWNlIHx8IGMgPT0g
JyAnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdCc7CiB9CisKK2lubGluZSBib29sIGlzQW1iaWd1
b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQoreworICAgIC8vIFRoZXNlIGFy
ZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlaGF2ZSBhcyB3b3JkIGJvdW5kYXJpZXMsIGJ1dCBjYW4g
YXBwZWFyIHdpdGhpbiB3b3Jkcy4KKyAgICAvLyBJZiB0aGV5IGFyZSBqdXN0IHR5cGVkLCBpLmUu
IGlmIHRoZXkgYXJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgY2FyZXQsIHdlIHdhbnQgdG8g
ZGVsYXkgdGV4dCBjaGVja2luZyB1bnRpbCB0aGUgbmV4dCBjaGFyYWN0ZXIgaGFzIGJlZW4gdHlw
ZWQuCisgICAgLy8gRklYTUU6IHRoaXMgaXMgcmVxdWlyZWQgdW50aWwgNjg1MzAyNyBpcyBmaXhl
ZCBhbmQgdGV4dCBjaGVja2luZyBjYW4gZG8gdGhpcyBmb3IgdXMuCisgICAgcmV0dXJuIGNoYXJh
Y3RlciA9PSAnXCcnIHx8IGNoYXJhY3RlciA9PSByaWdodFNpbmdsZVF1b3RhdGlvbk1hcmsgfHwg
Y2hhcmFjdGVyID09IGhlYnJld1B1bmN0dWF0aW9uR2Vyc2hheWltOworfQorCiBTdHJpbmcgc3Ry
aW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RhcnRJc1N0
YXJ0T2ZQYXJhZ3JhcGgsIGJvb2wgZW5kSXNFbmRPZlBhcmFncmFwaCk7CiBjb25zdCBTdHJpbmcm
IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgK
aW5kZXggYWVkYTg0NDU4OGNhNmVmNTVmMDY4MjM0Mjg1MzcwMzU5YzdhYTUyZS4uZGYyNGE1YjQ2
MDgwODczZmMzYzc4Y2FlYjI0ZmUwMjM0MzU2MTIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNs
aWVudC5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIEVkaXRvckNsaWVudF9oCiAjZGVmaW5l
IEVkaXRvckNsaWVudF9oCiAKLSNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWxJbmZvLmgiCisjaW5j
bHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVkaXRvcklu
c2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IGNhOTdiOWI0NDYyNzMxOTVjZDYyNjlm
NmVhY2NjZjIyYTQwN2JmMzkuLjJjZDFkOTIzNTA1MmYxZDA5NWViZjEwYzA1NDg4ODJkNzJmN2Ez
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC05NjgsNyArOTY4LDcgQEAgdm9pZCBGcmFtZTo6
c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhmbG9hdCBwYWdlWm9vbUZhY3RvciwgZmxvYXQgdGV4
dFpvb21GYWN0b3IKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2VkaXRvci5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0
aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBtX2VkaXRvci5kaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJ
Z25vcmVkKCk7CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIFJlc3BlY3QgU1ZHcyB6b29tQW5k
UGFuPSJkaXNhYmxlZCIgcHJvcGVydHkgaW4gc3RhbmRhbG9uZSBTVkcgZG9jdW1lbnRzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVs
LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaApp
bmRleCA4YWRiNzlmMjM2YThlN2I2OGYzYWViMmEzNTQ1YjNhYzdiNWU2Y2YzLi5iN2Q0YzRjZGRl
MjkyN2NiNTFkMjUwNDc2MDAxOTQxNTc3YjQ2ZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaApAQCAtMjgsNyArMjgsNyBAQAog
CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICNpbXBvcnQg
PEFwcEtpdC9OU1RleHRDaGVja2VyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NvcnJlY3Rpb25QYW5l
bEluZm8uaD4KKyNpbXBvcnQgPFdlYkNvcmUvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBAY2xhc3MgV2ViVmlldzsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5oCmluZGV4IGQ0YmMzNTNk
NjliMzYxZDJlODYxMzZiMTkwN2JkOTZmMDJjODk2MTkuLjc3MDQxMWMxMzM1NWE2MjY2ZmRlOWFl
NTVkNWY4ODZmZmNlYzJkOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvQ29ycmVjdGlvblBhbmVsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9D
b3JyZWN0aW9uUGFuZWwuaApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQogI2ltcG9ydCA8QXBwS2l0L05TVGV4dENoZWNrZXIuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvQ29ycmVjdGlvblBhbmVsSW5mby5oPgorI2ltcG9ydCA8V2ViQ29yZS9T
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAKIEBjbGFzcyBXS1ZpZXc7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88728</attachid>
            <date>2011-04-07 16:30:36 -0700</date>
            <delta_ts>2011-04-07 17:55:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55571-20110407163035.patch</filename>
            <type>text/plain</type>
            <size>99517</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMyMjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTAwYTc5
MjIzNWM1YzI1ZTM0NDA0OTliNDMzMDZiNmY3ZmFkOGVhMy4uYTgyYWFmZTM1ZGU2NjYwY2IyNjY4
YjM4NWJkMzY1NTI2NzM5MmU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY3MSw2ICs2NzEs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM2ZmViM2E5ZmRkMWYwYzVmZWIxY2FiNzFl
ZGEwOTMxY2E4NDI0ODAuLmUxYTVlZGYwYmRhZDBiMzE0MGJhYTEwYTI3MjA3YTg3ZTI0YWIzYjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAxMS0wNC0wNiAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQg
YmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEKKworICAgICAgICBFeHRyYWN0ZWQgY29kZSBpbnNp
ZGUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpbnRvCisgICAgICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIgY2xhc3MuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gcmVtb3Zl
IHNvbWUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBndWFyZCBpZgorICAgICAgICBjb2Rl
IHBhdGhzIGluc2lkZSB0aGUgbmV2ZXIgcmVhY2hlZCB3aXRob3V0IGF1dG9jb3JyZWN0aW9uIHN1
cHBvcnQuCisgICAgICAgIFJlbW92aW5nIGd1YXJkcyByZWR1Y2VzIHVuaW50ZW50aW9uYWwgYnVp
bGQgYnJlYWthZ2UuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFnbmUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVs
SW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZXNwb25kVG9DaGFuZ2VkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
aWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6On5FZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnBhc3RlQXNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppc0F1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKToK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjptYXJrZXJUeXBlc0Zv
ckF1dG9jb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtlclR5cGVzRm9yUmVwbGFj
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0YXJ0Q29ycmVjdGlv
blBhbmVsVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBlbmRpbmdDb3Jy
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
Omhhc1BlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlz
c1Nvb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVtb3Zl
TWFya2Vyc1Vwb25FZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0Fw
cGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1JldmVyc2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtD
b3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKToKKyAg
ICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpVTkxFU1NfRU5B
QkxFRCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpz
aG91bGRTdGFydFRpbWVGb3IpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKToKKyAg
ICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjppc0FtYmln
dW91c0JvdW5kYXJ5Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgor
ICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFBh
Z2VBbmRUZXh0Wm9vbUZhY3RvcnMpOgorCiAyMDExLTA0LTA3ICBEYW4gQmVybnN0ZWluICA8bWl0
ekBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRl
eCBlZTcwYTRmYmExZDE0ODQzNWFlNmMyNmVhZWY3MTI4OTRhMjA1ZWExLi5hZTUyOTQ0MDc2NDVi
ZmQ3ZTk0OWEyNGNkODdmYzI1YTQ0NGYwOGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTQ3
MCw2ICsxNDcwLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxD
aGVja2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBcCisJ
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgg
XAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuaCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggYmFkMzExNWVmOWFlY2NiYTg0MmE4MWJiOGZiNzZlOTVhNmYxMDYxNy4uMGViNDhiODg3
OTc0NTI5MGMzMDZmNDNlNmRiZjE1ZTZjYjFiYzhjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjY0
MSw2ICsyNjQxLDkgQEAKICAgICAgICAgICAgICdlZGl0aW5nL1NtYXJ0UmVwbGFjZUNGLmNwcCcs
CiAgICAgICAgICAgICAnZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwJywKICAgICAgICAgICAg
ICdlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxD
aGVja2VyLmgnLAorICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCcs
CiAgICAgICAgICAgICAnZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJvCmluZGV4IGQ0MjIxZmY5ZGZkM2E5ODRhMGVkZDk2MTQyNzc5YjcwZDhmYzdjMGUuLjcwZDMz
YWNjMDIwOGM3OTU1NmUyZGQ1ZGQ4M2JhM2U3NjcxMDAwZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01
OTksNiArNTk5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRl
Q29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcCBcCiAgICAgZWRp
dGluZy9TcGVsbENoZWNrZXIuY3BwIFwKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXIuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwIFwKICAg
ICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRl
eHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDEzNjE0ODVkOWYzNjI5NDY1ZDFiZDBj
ZjZiOWQ1YjQyODBlNTk0MzcuLjdmZGM5NzRlODYxYjVhYjMxYzk5ODNlMGNlYjJiYzczYjVlZjc2
OGQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBA
IC01MDIzNCw2ICs1MDIzNCw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
IgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIi
CisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxX
aW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wK
KwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZV9DYWly
b19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJ
CQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRl
YnVnX0FsbHxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJ
CQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVs
ZWFzZV9MVENHfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgor
CQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNwbGl0RWxl
bWVudENvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxMDhk
M2M2MzhjYTdmNWQ2NDkyYWM2MWRmMzljMjg5ZWQ5MGVmODY1Li4zMmM2YzY5MTFmNTFiZmM4OTA4
ZThiM2UwMGE0YTZiZjdjOWViOTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMTk2LDYgKzMxOTYsOCBAQAogCQlBNjIyQThG
QzEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGNjEyMkM0NEE2MDBBNzg1
QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgKi87IH07CiAJCUE2MjJBOEZEMTIyQzQ0QTYw
MEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGNzEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGlu
Z1NlY3VyaXR5QmFzZS5oICovOyB9OwogCQlBNjIyQThGRjEyMkM0NEE2MDBBNzg1QjMgLyogR2Vu
ZXJpY0JpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE2MjJBOEY5MTIyQzQ0QTYwMEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5oICovOyB9Owor
CQlBNzAwNUNDQzEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzAw
NUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAg
Ki87IH07CisJCUE3MDA1Q0NEMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
MTUxQkQ4MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxNTFCRDcxMkYxNTU4RjAwNUEw
RjY0IC8qIFRleHRDaGVja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTcxNUU2NTIxMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNz
U2hhZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNzE1RTY1MDEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50
LmNwcCAqLzsgfTsKIAkJQTcxNUU2NTMxMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5oICovOyB9
OwpAQCAtNDc5Niw3ICs0Nzk4LDYgQEAKIAkJQjc3NkQ0M0QxMTA0NTI3NTAwQkVCMEVDIC8qIFBy
aW50Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmNwcCAqLzsgfTsK
IAkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
ODg1RThEMjExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmNwcCAqLzsgfTsKIAkJQjg4NUU4RDUxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07Ci0JCUI4
QTZBNkQ1MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCOEE2QTZENDEyN0IzMzhEMDA4
NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUI4REJEQjRCMTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRT
ZWxlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEI4REJEQjQ3MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5k
LmNwcCAqLzsgfTsKIAkJQjhEQkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNv
bW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4
REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07CiAJ
CUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5
MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsK
QEAgLTk3MjQsNiArOTcyNSw4IEBACiAJCUE2MjJBOEY2MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5k
aW5nU2VjdXJpdHlCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwOyBwYXRoID0gZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlC
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTYyMkE4RjcxMjJDNDRBNjAw
QTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQmluZGluZ1NlY3VyaXR5QmFzZS5oOyBwYXRoID0gZ2VuZXJpYy9CaW5kaW5nU2Vj
dXJpdHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE2MjJBOEY5MTIyQzQ0
QTYwMEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBHZW5lcmljQmluZGluZy5oOyBwYXRoID0gZ2VuZXJpYy9HZW5lcmljQmluZGluZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEg
LyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNzE1MUJENzEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNrZXJDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxNUU2NTAxMzRCQkJFQzAwRDhFNzEzIC8qIFBy
b2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNzE1RTY1MTEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb2dyZXNzU2hhZG93RWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMzEsNyArMTEyMzQsNiBAQAogCQlC
Nzc2RDQzQzExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW50Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUI4ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QjhBNkE2RDQxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29ycmVjdGlvblBhbmVsSW5mby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0NzEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2Vs
ZWN0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
ZXRTZWxlY3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhE
QkRCNDgxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0U2VsZWN0aW9uQ29tbWFuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE1NTQxLDcgKzE1NTQzLDYgQEAKIAkJCQk5MzMwOUQ4QzA5OUU2NDkxMDA1NkU1ODEg
LyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5oICovLAogCQkJCTkzMzA5RDhEMDk5RTY0OTEwMDU2
RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEOEUwOTlFNjQ5
MTAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5kLmggKi8sCi0JCQkJQjhBNkE2RDQxMjdC
MzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCAqLywKIAkJCQlEMEIwNTU2NzA5
QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQuY3BwICovLAogCQkJCUQwQjA1NTY2
MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5oICovLAogCQkJCTFDNEM4RjYz
MEFEODY1NUQwMDk0NzVDRSAvKiBEZWxldGVCdXR0b24uY3BwICovLApAQCAtMTU2MjMsNiArMTU2
MjQsOCBAQAogCQkJCUE3OEZFMTNBMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCAq
LywKIAkJCQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZC5jcHAgKi8sCiAJCQkJQjhEQkRCNEExMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuaCAqLywKKwkJCQlBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi8sCisJCQkJQTcwMDVDQ0IxMzMwQzRCQTAw
MENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLywKIAkJCQk5MzMwOURD
MjA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgKi8sCiAJCQkJOTMz
MDlEQzMwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuaCAqLywKIAkJCQk5
MzMwOURDNDA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwICovLApA
QCAtMTk5NzQsNyArMTk5NzcsNiBAQAogCQkJCTMzRDAyMTJEMTMxREIzN0IwMDQwOTFBOCAvKiBD
b29raWVTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2NDEyRDI2RTM4MDBFNzk0
MTUgLyogQ29va2llU3RvcmFnZUNGTmV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTZGRDQ4ODBG
Njc2RTU3MDAwOTI4NzMgLyogQ29vcmRpbmF0ZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUI4QTZB
NkQ1MTI3QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODBFNkQwNDBBMTk4OUNBMDA3RkI4QzUgLyogQ291bnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM1RUI5NzkwRTgyMDY5MjAwQjI1OTY1IC8qIENvdW50ZXJDb250ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzVFQjk1MTBFODIwNTZCMDBCMjU5NjUgLyogQ291bnRlckRpcmVj
dGl2ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjIyODcsNiArMjIyODksNyBAQAogCQkJCTc1NDE1
QjAwMTI5NThENUUwMDNBRDY2OSAvKiBTcGVlY2hJbnB1dFJlc3VsdExpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3OEZFMTNDMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUI4REJEQjRFMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0Mw
QkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTMzMDlFMTIwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzMzA5RTE0MDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29t
bWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTYwOTlFNjQ5MjAwNTZFNTgxIC8qIFNw
bGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAt
MjUxMDIsNiArMjUxMDUsNyBAQAogCQkJCTc1NDE1QzI5MTI5QTk5MjAwMDNBRDY2OSAvKiBTcGVl
Y2hJbnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4RkUxM0IxMjM2NkIx
MDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCOERCREI0
RDEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBNzAwNUNDQzEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxMTA5OUU2NDkyMDA1
NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMw
OUUxMzA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTMzMDlFMTUwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0NvcnJlY3Rpb25QYW5lbEluZm8uaCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3NjA5OWUxNjJmYTcyZjdmMTM5ZDYzZmMxMzc4YzRiNGIzM2YzZmU1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQ29ycmVjdGlvblBhbmVsSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBDb3JyZWN0aW9uUGFuZWxJbmZvX2gKLSNkZWZpbmUgQ29ycmVjdGlv
blBhbmVsSW5mb19oCi0KLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9TTk9XX0xFT1BBUkQpCi0vLyBTb21lIHBsYXRmb3JtcyBwcm92aWRlIFVJIGZvciBz
dWdnZXN0aW5nIGF1dG9jb3JyZWN0aW9uLgotI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMIDEKLS8vIFNvbWUgcGxhdGZvcm1zIHVzZSBzcGVsbGluZyBhbmQgYXV0b2NvcnJlY3Rp
b24gbWFya2VycyB0byBwcm92aWRlIHZpc3VhbCBjdWUuCi0vLyBPbiBzdWNoIHBsYXRmb3JtLCBp
ZiB3b3JkIHdpdGggbWFya2VyIGlzIGVkaXRlZCwgd2UgbmVlZCB0byByZW1vdmUgdGhlIG1hcmtl
ci4KLSNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDEKLSNlbHNlCi0jZGVmaW5l
IFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwgMAotI2RlZmluZSBSRU1PVkVfTUFSS0VSU19V
UE9OX0VESVRJTkcgMAotI2VuZGlmIC8vICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0KLSNpbmNsdWRlICJSYW5nZS5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBDb3JyZWN0aW9uUGFuZWxJbmZvIHsKLSAgICBl
bnVtIFBhbmVsVHlwZSB7Ci0gICAgICAgIFBhbmVsVHlwZUNvcnJlY3Rpb24gPSAwLAotICAgICAg
ICBQYW5lbFR5cGVSZXZlcnNpb24sCi0gICAgICAgIFBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlv
bnMKLSAgICB9OwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZDsKLSAgICBT
dHJpbmcgcmVwbGFjZWRTdHJpbmc7Ci0gICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwotICAg
IFBhbmVsVHlwZSBwYW5lbFR5cGU7Ci0gICAgYm9vbCBpc0FjdGl2ZTsKLX07Ci0KLWVudW0gUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCB7Ci0gICAgUmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCA9IDAsCi0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbElnbm9yZWQsCi0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbEFjY2VwdGVkCi19OwotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ29y
cmVjdGlvblBhbmVsSW5mb19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9u
ZS5jcHAKaW5kZXggZTRlMGJiYjZjZmUwYzA5YTA3NTZhOTY5ZWY2ODNmNWE4NDc2MjNmYS4uZjM4
Y2JlNjJhNjBkZTExY2QwZjFjMTEzYTk5ZjBjMmQwMGVhZWI5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUg
PFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcD4KICNpbmNsdWRlIDxTbWFydFJlcGxhY2UuY3Bw
PgogI2luY2x1ZGUgPFNtYXJ0UmVwbGFjZUNGLmNwcD4KKyNpbmNsdWRlIDxTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmNwcD4KICNpbmNsdWRlIDxTcGVsbENoZWNrZXIuY3BwPgogI2luY2x1
ZGUgPFNwbGl0RWxlbWVudENvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFNwbGl0VGV4dE5vZGVDb21t
YW5kLmNwcD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA5MGViODI1YzA0NzQ5YzVk
M2VjZWFkMzMyYjJjMDA1YzdiN2JmYzFiLi43NTYwODM1MjRjOTA4NmQ5MjgyMzBmMzcyZTUxOTQx
MjAwOTExMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0zOCw2ICszOCw3IEBA
CiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRF
dmVudC5oIgogI2luY2x1ZGUgIkNvbXBvc2l0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ3JlYXRlTGlua0NvbW1hbmQuaCIK
ICNpbmNsdWRlICJEZWxldGVCdXR0b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5oIgpAQCAtOTMsNTEgKzk0LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAot
c3RhdGljIGlubGluZSBib29sIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIgY2hh
cmFjdGVyKQotewotICAgIC8vIFRoZXNlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlaGF2ZSBh
cyB3b3JkIGJvdW5kYXJpZXMsIGJ1dCBjYW4gYXBwZWFyIHdpdGhpbiB3b3Jkcy4KLSAgICAvLyBJ
ZiB0aGV5IGFyZSBqdXN0IHR5cGVkLCBpLmUuIGlmIHRoZXkgYXJlIGltbWVkaWF0ZWx5IGZvbGxv
d2VkIGJ5IGEgY2FyZXQsIHdlIHdhbnQgdG8gZGVsYXkgdGV4dCBjaGVja2luZyB1bnRpbCB0aGUg
bmV4dCBjaGFyYWN0ZXIgaGFzIGJlZW4gdHlwZWQuCi0gICAgLy8gRklYTUU6IHRoaXMgaXMgcmVx
dWlyZWQgdW50aWwgNjg1MzAyNyBpcyBmaXhlZCBhbmQgdGV4dCBjaGVja2luZyBjYW4gZG8gdGhp
cyBmb3IgdXMuCi0gICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnXCcnIHx8IGNoYXJhY3RlciA9PSBy
aWdodFNpbmdsZVF1b3RhdGlvbk1hcmsgfHwgY2hhcmFjdGVyID09IGhlYnJld1B1bmN0dWF0aW9u
R2Vyc2hheWltOwotfQotCi1zdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBl
c0ZvckF1dG9Db3JyZWN0aW9uLCAoKSk7Ci0gICAgaWYgKG1hcmtlclR5cGVzRm9yQXV0b0NvcnJl
Y3Rpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24u
YXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgICAgIG1hcmtlclR5cGVz
Rm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNh
dG9yKTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1l
bnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotICAgICAgICBtYXJrZXJUeXBlc0Zv
ckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7Ci0g
ICAgfQotICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uOwotfQotCi1zdGF0
aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNG
b3JSZXBsYWNlbWVudCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LCAoKSk7Ci0g
ICAgaWYgKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCk7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFy
a2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcmtlclR5
cGVzRm9yUmVwbGFjZW1lbnQ7Ci19Ci0KLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVM
Ci1zdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNvbnN0IFZlY3Rv
cjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpCi17Ci0gICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24g
PSBtYXJrZXJzWzBdLmRlc2NyaXB0aW9uOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbWFy
a2Vycy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT0gbWFya2Vyc1tp
XS5kZXNjcmlwdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQogLy8gV2hlbiBhbiBldmVudCBoYW5kbGVyIGhhcyBtb3Zl
ZCB0aGUgc2VsZWN0aW9uIG91dHNpZGUgb2YgYSB0ZXh0IGNvbnRyb2wKIC8vIHdlIHNob3VsZCB1
c2UgdGhlIHRhcmdldCBjb250cm9sJ3Mgc2VsZWN0aW9uIGZvciB0aGlzIGVkaXRpbmcgb3BlcmF0
aW9uLgogVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6OnNlbGVjdGlvbkZvckNvbW1hbmQoRXZlbnQq
IGV2ZW50KQpAQCAtNTMzLDQ4ICs0ODksNyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdl
ZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCiAgICAgaWYg
KGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigp
OwogICAgIG1fZGVsZXRlQnV0dG9uQ29udHJvbGxlci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bihvbGRTZWxlY3Rpb24pOwotCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAg
IFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+
c2VsZWN0aW9uKCkpOwotICAgIC8vIFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9m
IGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAotICAgIC8v
IGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHByZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2Vy
IGNhbiBxdWlja2x5IHJldmVydCB0aGUKLSAgICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24u
IEhlcmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24gcGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRo
YXQKLSAgICAvLyB0aGUgbmV3IGNhcmV0IHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3Jk
LgotICAgIGlmICghY3VycmVudFNlbGVjdGlvbi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlv
biA9PSBvbGRTZWxlY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIFZpc2libGVQb3NpdGlv
biBzZWxlY3Rpb25Qb3NpdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBWaXNp
YmxlUG9zaXRpb24gZW5kUG9zaXRpb25PZldvcmQgPSBlbmRPZldvcmQoc2VsZWN0aW9uUG9zaXRp
b24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0g
ZW5kUG9zaXRpb25PZldvcmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uIHBvc2l0
aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBpZiAocG9zaXRp
b24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2Rl
KCk7Ci0gICAgaW50IGVuZE9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgp
OwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCkt
Pm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7Ci0gICAgc2l6ZV90IG1hcmtlckNvdW50
ID0gbWFya2Vycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3Vu
dDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJz
W2ldOwotICAgICAgICBpZiAoKChtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQgJiYgIW1hcmtlci5kZXNjcmlwdGlvbi5pc051bGwoKSkgfHwgbWFya2VyLnR5cGUgPT0g
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRP
ZmZzZXQpID09IGVuZE9mZnNldCkgewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKGZyYW1lKCktPmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFy
dE9mZnNldCwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCk7Ci0gICAgICAgICAgICBTdHJpbmcgY3Vy
cmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChj
dXJyZW50V29yZC5sZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKLSAgICAgICAgICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBjdXJyZW50V29yZDsKLSAgICAgICAg
ICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKQotICAg
ICAgICAgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMpOwotICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1l
bnRTdHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0
Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJz
aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BB
TkVMCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihv
bGRTZWxlY3Rpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRz
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKQEAgLTU4NSw5ICs1MDAs
NyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKICAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihub2RlLT5yZW5kZXJlcigpLCBB
WE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgZmFsc2UpOwogICAgIH0KIAotI2lmIFJFTU9W
RV9NQVJLRVJTX1VQT05fRURJVElORwotICAgIHJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtl
cnNGcm9tV29yZHNUb0JlRWRpdGVkKHRydWUpOwotI2VuZGlmCisgICAgdXBkYXRlTWFya2Vyc0Zv
cldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcodHJ1ZSk7CiAKICAgICBpZiAoY2xpZW50KCkpCiAgICAg
ICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKQEAgLTEwNzQsMTAgKzk4
Nyw3IEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5k
PiBjbWQpCiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKCpjbWQpOwog
ICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkp
OwogCi0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGlmIChjbWQtPmlzVG9w
TGV2ZWxDb21tYW5kKCkgJiYgIWNtZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0
b3IoKSkKLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJr
ZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKLSNlbmRpZgorICAgIG1f
c3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKGNtZC5nZXQoKSk7CiAK
ICAgICAvLyBEb24ndCBjbGVhciB0aGUgdHlwaW5nIHN0eWxlIHdpdGggdGhpcyBzZWxlY3Rpb24g
Y2hhbmdlLiAgV2UgZG8gdGhvc2UgdGhpbmdzIGVsc2V3aGVyZSBpZiBuZWNlc3NhcnkuCiAgICAg
Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1NlbGVjdGlvbiwgZmFsc2UsIGZhbHNlKTsK
QEAgLTExMzYsMTcgKzEwNDYsMTQgQEAgRWRpdG9yOjpFZGl0b3IoRnJhbWUqIGZyYW1lKQogICAg
IC8vIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQsIHNpbmNlIG1vc3QgZWRpdG9ycyB3YW50IHRoaXMg
YmVoYXZpb3IgKHRoaXMgbWF0Y2hlcyBJRSBidXQgbm90IEZGKS4KICAgICAsIG1fc2hvdWxkU3R5
bGVXaXRoQ1NTKGZhbHNlKQogICAgICwgbV9raWxsUmluZyhhZG9wdFB0cihuZXcgS2lsbFJpbmcp
KQotICAgICwgbV9zcGVsbENoZWNrZXIobmV3IFNwZWxsQ2hlY2tlcihmcmFtZSwgZnJhbWUtPnBh
Z2UoKSA/IGZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpLT50ZXh0Q2hlY2tlcigpIDogMCkp
Ci0gICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyKHRoaXMsICZFZGl0b3I6OmNvcnJlY3Rpb25Q
YW5lbFRpbWVyRmlyZWQpCisgICAgLCBtX3NwZWxsQ2hlY2tlcihhZG9wdFB0cihuZXcgU3BlbGxD
aGVja2VyKGZyYW1lLCBmcmFtZS0+cGFnZSgpID8gZnJhbWUtPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50
KCktPnRleHRDaGVja2VyKCkgOiAwKSkpCisgICAgLCBtX3NwZWxsaW5nQ29ycmVjdG9yKGFkb3B0
UHRyKG5ldyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKGZyYW1lKSkpCiAgICAgLCBtX2Fy
ZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQoZmFsc2UpCiB7CiB9CiAKIEVkaXRvcjo6fkVk
aXRvcigpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQp
OwotI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yOjpjbGVhcigpCkBAIC0xMTc5LDEwICsxMDg2LDgg
QEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBT
dHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAoIXNob3VsZEluc2VydFRleHQodGV4
dCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcKICAgICBpZiAoIXRleHQu
aXNFbXB0eSgpKQotICAgICAgICByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdv
cmRzVG9CZUVkaXRlZChpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKLSNlbmRpZgorICAgICAg
ICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyh0ZXh0WzBdKTsKIAogICAg
IGJvb2wgc2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0aW9uID0gZmFsc2U7CiAgICAg
aWYgKHRleHQgPT0gIiAiIHx8IHRleHQgPT0gIlx0IikKQEAgLTExOTEsNyArMTA5Niw3IEBAIGJv
b2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgaWYgKHRleHQubGVuZ3RoKCkgPT0gMSAmJiBpc1B1
bmN0KHRleHRbMF0pICYmICFpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKHRleHRbMF0pKQog
ICAgICAgICBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJlY3Rpb24gPSB0cnVlOwogCi0g
ICAgYm9vbCBhdXRvY29ycmVjdGlvbldhc0FwcGxpZWQgPSBzaG91bGRDb25zaWRlckFwcGx5aW5n
QXV0b2NvcnJlY3Rpb24gJiYgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9w
cmlhdGUoKTsKKyAgICBib29sIGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCA9IHNob3VsZENvbnNp
ZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlvbiAmJiBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1
dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogCiAgICAgLy8gR2V0IHRo
ZSBzZWxlY3Rpb24gdG8gdXNlIGZvciB0aGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcyBpbnNl
cnRUZXh0LgogICAgIC8vIElmIHRoZSBldmVudCBoYW5kbGVyIGNoYW5nZWQgdGhlIHNlbGVjdGlv
biwgd2UgbWF5IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IHNlbGVjdGlvbgpAQCAtMTIyNyw3ICsx
MTMyLDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYgKCFzaG91bGRJ
bnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IGFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBw
bGllZCA9IG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBp
bmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKG1f
ZnJhbWUtPmRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFu
ZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKICAgICByZXZlYWxTZWxlY3Rp
b25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKIApAQCAtMTI0NSw3ICsxMTUwLDcgQEAgYm9vbCBF
ZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYgKCFzaG91bGRJbnNlcnRU
ZXh0KCJcbiIsIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
Ym9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVU
eXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9
IG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFw
cHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
KG1fZnJhbWUtPmRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29t
bWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKICAgICByZXZlYWxTZWxl
Y3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKIApAQCAtMTI2Miw5ICsxMTY3LDcgQEAgdm9p
ZCBFZGl0b3I6OmN1dCgpCiAgICAgfQogICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uID0gc2Vs
ZWN0ZWRSYW5nZSgpOwogICAgIGlmIChzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24uZ2V0KCkp
KSB7Ci0jaWYgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HCi0gICAgICAgIHJlbW92ZVNwZWxs
QW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKHRydWUpOwotI2VuZGlmCisg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAg
ICAgICBpZiAoaXNOb2RlSW5UZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0
YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFs
UGFzdGVib2FyZCgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHQoKSk7CiAgICAgICAgIGVs
c2UKQEAgLTEzMDMsOSArMTIwNiw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZSgpCiAgICAgICAgIHJl
dHVybjsgLy8gREhUTUwgZGlkIHRoZSB3aG9sZSBvcGVyYXRpb24KICAgICBpZiAoIWNhblBhc3Rl
KCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcKLSAg
ICByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxz
ZSk7Ci0jZW5kaWYKKyAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhm
YWxzZSk7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUtPmRvY3Vt
ZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAgICAgbG9hZGVyLT5zZXRBbGxvd1N0YWxl
UmVzb3VyY2VzKHRydWUpOwogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50
UmljaGx5RWRpdGFibGUoKSkKQEAgLTEzMjEsOSArMTIyMiw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0
ZUFzUGxhaW5UZXh0KCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghY2FuUGFzdGUoKSkKICAg
ICAgICAgcmV0dXJuOwotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwotICAgIHJlbW92
ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKGZhbHNlKTsKLSNl
bmRpZgorICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsK
ICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZDo6Z2VuZXJhbFBh
c3RlYm9hcmQoKSk7CiB9CiAKQEAgLTE0NzYsNyArMTM3NSw3IEBAIHZvaWQgRWRpdG9yOjp0b2dn
bGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQoKQogCiBib29sIEVkaXRvcjo6aXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIHsKLSAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xp
ZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworICAgIHJldHVy
biBtX3NwZWxsaW5nQ29ycmVjdG9yLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJs
ZWQoKTsKIH0KIAogdm9pZCBFZGl0b3I6OnRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlv
bigpCkBAIC0yMDY4LDIzICsxOTY3LDggQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVjdGkKIHZvaWQg
RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVy
VHlwaW5nKQogewogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0jaWYgU1VQUE9SVF9B
VVRPQ09SUkVDVElPTl9QQU5FTAotICAgIC8vIEFwcGx5IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24g
YmVmb3JlIG5leHQgcm91bmQgb2Ygc3BlbGwgY2hlY2tpbmcuCi0gICAgYm9vbCBkb0FwcGx5Q29y
cmVjdGlvbiA9IHRydWU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBz
ZWxlY3Rpb25BZnRlclR5cGluZy52aXNpYmxlU3RhcnQoKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9u
IGN1cnJlbnRXb3JkID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChzdGFydE9mU2VsZWN0
aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBS
aWdodFdvcmRJZk9uQm91bmRhcnkpKTsKLSAgICBpZiAoY3VycmVudFdvcmQudmlzaWJsZUVuZCgp
ID09IHN0YXJ0T2ZTZWxlY3Rpb24pIHsKLSAgICAgICAgU3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5U
ZXh0KGN1cnJlbnRXb3JkLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwotICAgICAgICBpZiAo
d29yZFRleHQubGVuZ3RoKCkgPiAwICYmIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIod29y
ZFRleHRbd29yZFRleHQubGVuZ3RoKCkgLSAxXSkpCi0gICAgICAgICAgICBkb0FwcGx5Q29ycmVj
dGlvbiA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoZG9BcHBseUNvcnJlY3Rpb24pCi0gICAgICAg
IGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwotI2VuZGlmCisg
ICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihzZWxlY3Rpb25B
ZnRlclR5cGluZyk7CisKICAgICBUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaGVja2luZ09wdGlv
bnMgPSAwOwogICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAg
ICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IE1hcmtTcGVsbGluZzsKQEAgLTIxMTMsNyArMTk5
Nyw2IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgfQogCiAjZWxzZQotICAgIFVOVVNF
RF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7CiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIyMjIsNyArMjEwNSw3
IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiB7CiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVD
S0lORykKICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBh
dCB0aGlzIG1vbWVudC4KLSAgICBBU1NFUlQoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZCk7CisgICAgQVNTRVJUKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5oYXNQZW5kaW5n
Q29ycmVjdGlvbigpKTsKIAogICAgIGJvb2wgc2hvdWxkTWFya1NwZWxsaW5nID0gdGV4dENoZWNr
aW5nT3B0aW9ucyAmIE1hcmtTcGVsbGluZzsKICAgICBib29sIHNob3VsZE1hcmtHcmFtbWFyID0g
dGV4dENoZWNraW5nT3B0aW9ucyAmIE1hcmtHcmFtbWFyOwpAQCAtMjI4MSwxMSArMjE2NCw5IEBA
IHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRl
eHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHRDaGVja2luZ1R5cGVNYXNrRm9yKHRleHRDaGVja2luZ09wdGlvbnMp
LCByZXN1bHRzKTsKICAgICAgICAgCiAKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVM
CiAgICAgLy8gSWYgdGhpcyBjaGVja2luZyBpcyBvbmx5IGZvciBzaG93aW5nIGNvcnJlY3Rpb24g
cGFuZWwsIHdlIHNob3VsZG4ndCBib3RoZXIgdG8gbWFyayBtaXNzcGVsbGluZ3MuCiAgICAgaWYg
KHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpCiAgICAgICAgIHNob3VsZE1hcmtTcGVsbGluZyA9
IGZhbHNlOwotI2VuZGlmCiAKICAgICBpbnQgb2Zmc2V0RHVlVG9SZXBsYWNlbWVudCA9IDA7CiAK
QEAgLTIzMDQsMTAgKzIxODUsOCBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAgICAgICBp
ZiAoc2hvdWxkTWFya1NwZWxsaW5nICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBl
U3BlbGxpbmcgJiYgcmVzdWx0TG9jYXRpb24gPj0gc3BlbGxpbmdQYXJhZ3JhcGguY2hlY2tpbmdT
dGFydCgpICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoIDw9IHNwZWxsaW5nUmFuZ2VF
bmRPZmZzZXQgJiYgIXJlc3VsdEVuZHNBdEFtYmlndW91c0JvdW5kYXJ5KSB7CiAgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKICAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IHNwZWxsaW5nUGFyYWdyYXBo
LnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpOwotI2lmIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pKQorICAgICAgICAgICAgaWYgKCFtX3NwZWxsaW5n
Q29ycmVjdG9yLT5pc1NwZWxsaW5nTWFya2VyQWxsb3dlZChtaXNzcGVsbGluZ1JhbmdlKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSNlbmRpZiAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMCiAgICAgICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcihlYykt
PmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkTWFy
a0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIGdy
YW1tYXJQYXJhZ3JhcGguY2hlY2tpbmdSYW5nZUNvdmVycyhyZXN1bHRMb2NhdGlvbiwgcmVzdWx0
TGVuZ3RoKSkgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0
TG9jYXRpb24gPj0gMCk7CkBAIC0yMzUzLDcgKzIyMzIsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRl
eHRDaAogICAgICAgICAgICAgICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9
IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKICAgICAgICAgICAgICAgICBpZiAobWFy
a2Vycy0+aGFzTWFya2VycyhyYW5nZVRvUmVwbGFjZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50KSkgewogICAgICAgICAgICAgICAgICAgICBkb1JlcGxhY2VtZW50ID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZp
ZWRDb3JyZWN0aW9uKHJhbmdlVG9SZXBsYWNlLmdldCgpLCByZXBsYWNlZFN0cmluZywgcmVzdWx0
LT5yZXBsYWNlbWVudCk7CisgICAgICAgICAgICAgICAgICAgIG1fc3BlbGxpbmdDb3JyZWN0b3It
PnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKHJhbmdlVG9S
ZXBsYWNlLmdldCgpLCByZXBsYWNlZFN0cmluZywgcmVzdWx0LT5yZXBsYWNlbWVudCk7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJzLT5oYXNNYXJrZXJzKHJhbmdlVG9SZXBsYWNl
LmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uKSkKICAgICAgICAgICAg
ICAgICAgICAgZG9SZXBsYWNlbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtMjM2MSwy
NCArMjI0MCwxNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogICAgICAgICAgICAgaWYgKCEo
c2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpIHx8
ICFkb1JlcGxhY2VtZW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0jaWYgU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICAgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0
aW9uUGFuZWwpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VQUE9SVF9BVVRPQ09SUkVDVElP
Tl9QQU5FTCk7CisgICAgICAgICAgICAgICAgLy8gc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCBj
YW4gYmUgdHJ1ZSBvbmx5IHdoZW4gdGhlIHBhbmVsIGlzIGF2YWlsYWJsZS4KICAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPT0gc3BlbGxpbmdSYW5nZUVu
ZE9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHNob3cgdGhlIGNvcnJl
Y3Rpb24gcGFuZWwgb24gdGhlIGxhc3Qgd29yZC4KLSAgICAgICAgICAgICAgICAgICAgRmxvYXRS
ZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJvdW5kaW5nQm94LmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSByYW5nZVRvUmVwbGFjZTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5U
ZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gcmVzdWx0LT5yZXBsYWNlbWVudDsKLSAg
ICAgICAgICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yZXBsYWNlZFN0cmluZywgcmVzdWx0LT5yZXBsYWNlbWVudCwgVmVjdG9yPFN0cmluZz4o
KSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnNob3cocmFuZ2VU
b1JlcGxhY2UsIHJlc3VsdC0+cmVwbGFjZW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgZm9yIHNob3dpbmcgY29ycmVjdGlvbiBwYW5lbCwgd2UgaWdub3JlIG90aGVy
IGNvcnJlY3Rpb24gb3IgcmVwbGFjZW1lbnQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9Ci0jZW5kaWYKIAogICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFj
ZSAhPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIW1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0
aW9uVG9SZXBsYWNlKSkKQEAgLTIzOTIsMTIgKzIyNjQsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRl
eHRDaAogICAgICAgICAgICAgICAgIGlmIChjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgICAgICAg
ICAgICAgIGFwcGx5Q29tbWFuZChDcmVhdGVMaW5rQ29tbWFuZDo6Y3JlYXRlKG1fZnJhbWUtPmRv
Y3VtZW50KCksIHJlc3VsdC0+cmVwbGFjZW1lbnQpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y2FuRWRpdCgpICYmIHNob3VsZEluc2VydFRleHQocmVzdWx0LT5yZXBsYWNlbWVudCwgcmFuZ2VU
b1JlcGxhY2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkgewotICAgICAgICAgICAg
ICAgIGJvb2wgdXNlU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCA9IGZhbHNlOwotI2lmIFNVUFBP
UlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBl
ID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKQotICAgICAgICAgICAgICAgICAgICB1c2VT
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kID0gdHJ1ZTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IGlmICh1c2VTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKQogICAgICAgICAgICAgICAgICAgICBh
cHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBs
YWNlLCByZXN1bHQtPnJlcGxhY2VtZW50KSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uVG9SZXBsYWNlKTsKQEAgLTI0MTcsMTkgKzIyODQsOSBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRl
eHRDaAogICAgICAgICAgICAgICAgICAgICAgICAgYW1iaWd1b3VzQm91bmRhcnlPZmZzZXQgPSBz
ZWxlY3Rpb25PZmZzZXQgLSAxOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQgY29ycmVjdGlvbnMgY2FuIGVh
c2lseSBiZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3RlZC4KLSAgICAgICAgICAgICAg
ICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlID0gc3BlbGxpbmdQYXJhZ3JhcGguc3Vi
cmFuZ2UocmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50TGVuZ3RoKTsKLSAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlc1RvQWRk
ID0gbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNlZFJhbmdlLT5zdGFydENv
bnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlw
ZSA9IG1hcmtlclR5cGVzVG9BZGRbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFy
a2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBE
b2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSwgcmVw
bGFjZWRTdHJpbmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgpLCBt
YXJrZXJUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyBBZGQgYSBtYXJrZXIgc28gdGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFz
aWx5IGJlIHVuZG9uZSBhbmQgd29uJ3QgYmUgcmUtY29ycmVjdGVkLgorICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pCisgICAgICAg
ICAgICAgICAgICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPm1hcmtDb3JyZWN0aW9uKHNwZWxsaW5n
UGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCksIHJl
cGxhY2VkU3RyaW5nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI0NTYs
MzAgKzIzMTMsNiBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRDaAogI2VuZGlmIC8vIFVTRShVTklG
SUVEX1RFWFRfQ0hFQ0tJTkcpCiB9CiAKLXZvaWQgRWRpdG9yOjpyZWNvcmRTcGVsbGNoZWNrZXJS
ZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNv
bnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0jaWYg
U1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGlmICghcmFuZ2VPZkNvcnJlY3Rpb24p
Ci0gICAgICAgIHJldHVybjsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMg
PSByYW5nZU9mQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gY29ycmVjdGVkT25jZU1hcmtlcnMgPSBt
YXJrZXJzLT5tYXJrZXJzSW5SYW5nZShyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6
OkF1dG9jb3JyZWN0ZWQpOwotICAgIGlmIChjb3JyZWN0ZWRPbmNlTWFya2Vycy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBTcGVsbGluZyBjb3JyZWN0ZWQgdGV4dCBo
YXMgYmVlbiBlZGl0ZWQuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdXNlciBoYXMgcmV2
ZXJ0ZWQgaXQgdG8gb3JpZ2luYWwgdGV4dCBvcgotICAgIC8vIGVkaXRlZCBpdCB0byBzb21ldGhp
bmcgZWxzZSwgYW5kIG5vdGlmeSBzcGVsbGNoZWNrZXIgYWNjb3JkaW5nbHkuCi0gICAgaWYgKG1h
cmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29ycmVjdGVkT25jZU1hcmtlcnMpICYmIGNv
cnJlY3RlZE9uY2VNYXJrZXJzWzBdLmRlc2NyaXB0aW9uID09IGNvcnJlY3RlZCkKLSAgICAgICAg
Y2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRv
Y29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwotICAgIGVsc2UKLSAg
ICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50
OjpBdXRvY29ycmVjdGlvbkVkaXRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKLSAgICBtYXJr
ZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0
b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlcik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyYW5nZU9mQ29ycmVjdGlv
bik7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcnJl
Y3Rpb24pOwotI2VuZGlmCi19Ci0KIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0
cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogewogI2lmIFVTRShVTklGSUVEX1RF
WFRfQ0hFQ0tJTkcpCkBAIC0yNDkwLDE4ICsyMzIzLDEyIEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VC
YWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgIGlm
ICghc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKQogICAgICAgICByZXR1cm47CiAgICAgCi0jaWYgU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIFN0cmluZyByZXBsYWNlbWVudCA9IHBsYWluVGV4
dChzZWxlY3Rpb24uZ2V0KCkpOwotICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgcmVwbGFjZWRTdHJp
bmcsIHJlcGxhY2VtZW50KTsKLSNlbmRpZgorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9u
KTsKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKHNlbGVjdGlvbik7CiAgICAg
cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2VkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOwog
ICAgIFJlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHBhcmFn
cmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKTsKICAgICBjaGFu
Z2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFy
a2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBTdHJp
bmcoKSk7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIGNoYW5nZWRSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJz
KGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwot
ICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
LT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVj
a2luZ0V4ZW1wdGlvbik7Ci0jZW5kaWYKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5tYXJrUmV2
ZXJzZWQoY2hhbmdlZFJhbmdlLmdldCgpKTsKICNlbHNlCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsKQEAgLTI1MjYsMTQwICsyMzUz
LDE2IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjCiAjZW5kaWYKIH0KIAotdm9pZCBFZGl0b3I6
OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8RWRpdG9yPiopCi17Ci0jaWYgU1VQUE9S
VF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRC
eUVkaXRvciA9IGZhbHNlOwotICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVs
VHlwZSkgewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlv
bjogewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihmcmFtZSgpLT5zZWxlY3Rp
b24oKS0+c2VsZWN0aW9uKCkpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0
aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwotICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0
YXJ0KTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhN
YXJrU3BlbGxpbmcgfCBTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIDApOwotICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsKLSAgICAgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9
IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQuZ2V0KCkpOwotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5w
YW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJp
bmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZywgVmVjdG9yPFN0cmlu
Zz4oKSk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKLSAgICAgICAgaWYgKHBsYWluVGV4
dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpICE9IG1fY29y
cmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKS5wYXJhZ3JhcGhSYW5n
ZSgpLmdldCgpKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAgICAg
IHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMpOwotICAgICAgICBpZiAo
c3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIFN0cmluZyB0b3BTdWdnZXN0aW9uID0gc3VnZ2VzdGlvbnMuZmlyc3QoKTsK
LSAgICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDApOwotICAgICAgICBtX2NvcnJlY3Rpb25QYW5l
bEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3
aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LmdldCgpKTsKLSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFu
ZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5n
LCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAg
ICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBFZGl0b3I6OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3Vs
dChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0gICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2Ug
PSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCk7Ci0gICAgaWYg
KCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gcmVwbGFjZWRSYW5nZS0+
b3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgY3VycmVudFdv
cmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdl
dCgpKTsKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdvcmQgd2UgYXJlIGFib3V0IHRvIGNv
cnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVyIGZpcmluZyBhbmQgY2FsbGJhY2sg
YmVpbmcgdHJpZ2dlcmVkLgotICAgIGlmIChjdXJyZW50V29yZCAhPSBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotCi0gICAgc3dpdGNoIChtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucGFuZWxUeXBlKSB7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVDb3JyZWN0aW9uOgotICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkgewotICAg
ICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gY29ycmVj
dGlvbjsKLSAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJrZXJUeXBlc0Zv
ckF1dG9jb3JyZWN0aW9uKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFt
X2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IpCi0gICAgICAgICAgICAgICAgcmVw
bGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRN
YXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lv
bjoKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2Vz
dGlvbnM6Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOwotICAg
ICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1l
bnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci19Ci0KLXZvaWQgRWRpdG9y
OjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZSB0eXBlKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBjb25zdCBk
b3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsKLSAgICBpZiAoaXNBdXRv
bWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKHR5cGUgPT0g
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgICAgIC8v
IElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJl
ZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQuCi0gICAgICAgICAgICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVs
VGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwpOwotICAgIH0K
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotI2VuZGlmCi19Ci0KLXZvaWQgRWRpdG9y
OjpzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKQordm9pZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxs
Q29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwg
Y29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKIHsKLSNp
ZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1l
ci5zdG9wKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNs
ZWFyKCk7Ci0jZW5kaWYKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9VbmFwcGxp
ZWRTcGVsbENvcnJlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvcnJlY3RlZCwgY29ycmVj
dGlvbik7CiB9CiAKLXZvaWQgRWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKK3ZvaWQgRWRp
dG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVt
b3ZlSWZTZWxlY3Rpb25BdFdvcmRCb3VuZGFyeSkKIHsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNU
SU9OX1BBTkVMCi0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCisgICAg
aWYgKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5zaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmco
KSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9
IGZhbHNlOwotICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7
Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlYXNv
bkZvckRpc21pc3NpbmcpOwotI2VuZGlmCi19Ci0KLVN0cmluZyBFZGl0b3I6OmRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29u
Rm9yRGlzbWlzc2luZykKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAg
aWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAgICBt
X2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSB0cnVlOwotICAgIGlmICghY2xp
ZW50KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gY2xpZW50KCktPmRp
c21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKHJlYXNvbkZvckRpc21pc3NpbmcpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0ocmVhc29uRm9yRGlzbWlzc2luZyk7Ci0gICAgcmV0dXJuIFN0cmluZygp
OwotI2VuZGlmCi19CiAKLXZvaWQgRWRpdG9yOjpyZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJr
ZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BdFdvcmRC
b3VuZGFyeSkKLXsKICAgICAvLyBXZSB3YW50IHRvIHJlbW92ZSB0aGUgbWFya2VycyBmcm9tIGEg
d29yZCBpZiBhbiBlZGl0aW5nIGNvbW1hbmQgd2lsbCBjaGFuZ2UgdGhlIHdvcmQuIFRoaXMgY2Fu
IGhhcHBlbiBpbiBvbmUgb2YKICAgICAvLyBzZXZlcmFsIHNjZW5hcmlvczoKICAgICAvLyAxLiBJ
bnNlcnQgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQuCkBAIC0yNzI1LDEwMyArMjQyOCw2IEBAIHZv
aWQgRWRpdG9yOjpyZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVk
aXRlZChib29sIGRvTm90UmVtb3ZlCiAgICAgZG9jdW1lbnQtPm1hcmtlcnMoKS0+Y2xlYXJEZXNj
cmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKIH0KIAotdm9pZCBFZGl0b3I6OmFwcGx5Q29ycmVjdGlv
blBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJr
ZXJUeXBlc1RvQWRkKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBp
ZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24u
Z2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250
YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpKSk7Ci0KLSAgICAvLyBBZnRlciB3
ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJhbmdlVG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRv
IGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCi0gICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVw
bGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9mIHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5v
dCB2YWxpZCBhbnltb3JlLgotICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxh
Y2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVS
ZXBsYWNlZAotICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29u
dGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFw
aAotICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9m
ZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQotICAgIC8vIHdoaWNoIHNwYW5z
IGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFu
Z2VUb0JlUmVwbGFjZWQuCi0gICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJ
blBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFu
Z2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGlmIChlYykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFj
ZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRp
b24oKTsKLSAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVu
ZChzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb250YWluZXJOb2RlKCksIHN0YXJ0
UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGFrZSBub3Rl
IG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFy
a2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgotICAgIGludCBjb3JyZWN0aW9u
U3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVj
dGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLmdldCgpKTsKLQotICAgIC8vIENsb25l
IHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBr
ZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRv
QmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xv
bmVSYW5nZShlYyk7Ci0gICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6
OmNyZWF0ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vt
ZW50U3RyaW5nKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24uZ2V0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdl
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFy
dE9mZnNldEluUGFyYWdyYXBoLCAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3Ry
aW5nLmxlbmd0aCgpKTsKLSAgICBTdHJpbmcgbmV3VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVu
dFJhbmdlLmdldCgpKTsKLQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNj
ZWVkZWQuCi0gICAgaWYgKG5ld1RleHQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vt
ZW50U3RyaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIqIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBtYXJrZXJUeXBlc1RvQWRkLnNpemUo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsK
LSAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotICAgICAgICBpZiAobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNp
b24gJiYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtl
clR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpKQotICAgICAgICAgICAgZGVz
Y3JpcHRpb24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmc7Ci0gICAgICAg
IG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlLCBk
ZXNjcmlwdGlvbik7Ci0gICAgfQotI2Vsc2UgLy8gU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5F
TAotICAgIFVOVVNFRF9QQVJBTShtYXJrZXJUeXBlc1RvQWRkKTsKLSNlbmRpZiAvLyBTVVBQT1JU
X0FVVE9DT1JSRUNUSU9OX1BBTkVMCi19Ci0KLWJvb2wgRWRpdG9yOjphcHBseUF1dG9jb3JyZWN0
aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpCi17Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0Fj
dGl2ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVs
SW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlv
bikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpOwotCi0gICAgaWYgKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBj
YXJldFBvc2l0aW9uKSB7Ci0gICAgICAgIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChkaXNt
aXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
QWNjZXB0ZWQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSAKLSAgICAKLSAgICAvLyBQ
ZW5kaW5nIGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5cyBiZSB3aGVyZSBjYXJldCBpcy4gQnV0IGlu
IGNhc2UgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIHdlIHN0aWxsIHdhbnQgdG8gZGlzbWlzcyB0
aGUgcGFuZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhlIGNvcnJlY3Rpb24uCi0gICAgQVNTRVJUKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBj
YXJldFBvc2l0aW9uKTsKLSAgICBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgRWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBT
dHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAot
ICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6
QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKLSAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBTZWxlY3Rpb25Db250cm9sbGVy
OjpDbG9zZVR5cGluZyB8IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNsZWFyVHlwaW5nU3R5bGUgfCBT
ZWxlY3Rpb25Db250cm9sbGVyOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOwotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCkuZW5kKCkpOwotCi0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBt
YXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMtPnJl
bW92ZU1hcmtlcnMocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3Vt
ZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgbWFya2Vycy0+YWRk
TWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlv
bik7Ci0jZWxzZSAvLyBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgVU5VU0VEX1BB
UkFNKHNlbGVjdGlvbk9mQ29ycmVjdGVkKTsKLSAgICBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsK
LSAgICBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7Ci0jZW5kaWYgLy8gU1VQUE9SVF9BVVRPQ09S
UkVDVElPTl9QQU5FTAotfQotCiBQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9p
bnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogewogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IG1fZnJhbWUtPmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7CkBAIC0yOTQ0LDYgKzI1
NTAsMjIgQEAgdm9pZCBFZGl0b3I6OmFkZFRvS2lsbFJpbmcoUmFuZ2UqIHJhbmdlLCBib29sIHBy
ZXBlbmQpCiAgICAgbV9zaG91bGRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UgPSBmYWxzZTsKIH0K
IAordm9pZCBFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKQoreworICAgIG1fc3Bl
bGxpbmdDb3JyZWN0b3ItPnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbik7Cit9CisKK3ZvaWQgRWRpdG9yOjpoYW5kbGVDb3Jy
ZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQoreworICAgIG1fc3Bl
bGxpbmdDb3JyZWN0b3ItPmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb3JyZWN0aW9uKTsK
K30KKworCit2b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpCit7
CisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsSWdub3JlZCk7Cit9CisKIGJvb2wgRWRpdG9yOjppbnNpZGVWaXNpYmxlQXJl
YShjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgaWYgKG1fZnJhbWUtPmV4Y2x1
ZGVGcm9tVGV4dFNlYXJjaCgpKQpAQCAtMzUxNiwxNCArMzEzOCw3IEBAIHZvaWQgRWRpdG9yOjpz
ZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZykKIAogdm9pZCBFZGl0
b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xk
U2VsZWN0aW9uLCBTZWxlY3Rpb25Db250cm9sbGVyOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlv
bnMpCiB7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFya01p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4KLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1
cnJlbnRTZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKLSAgICBp
ZiAoY3VycmVudFNlbGVjdGlvbiAhPSBvbGRTZWxlY3Rpb24pIHsKLSAgICAgICAgc3RvcENvcnJl
Y3Rpb25QYW5lbFRpbWVyKCk7Ci0gICAgICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwotICAgIH0KLSNlbmRpZiAvLyBT
VVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+c3Rv
cFBlbmRpbmdDb3JyZWN0aW9uKG9sZFNlbGVjdGlvbik7CiAKICAgICBib29sIGNsb3NlVHlwaW5n
ID0gb3B0aW9ucyAmIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNsb3NlVHlwaW5nOwogICAgIGJvb2wg
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSB0aGlzLT5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpOwpAQCAtMzU0MCwxMCArMzE1NSw4IEBAIHZvaWQgRWRpdG9yOjpy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbiwgU2VsCiAgICAgICAgIH0KIAogICAgICAgICBib29sIHNob3VsZENoZWNrU3BlbGxpbmdB
bmRHcmFtbWFyID0gdHJ1ZTsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAg
ICAgIC8vIERvbid0IGNoZWNrIHNwZWxsaW5nIGFuZCBncmFtbWFyIGlmIHRoZSBjaGFuZ2Ugb2Yg
c2VsZWN0aW9uIGlzIHRyaWdnZXJlZCBieSBzcGVsbGluZyBjb3JyZWN0aW9uIGl0c2VsZi4KICAg
ICAgICAgc2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1tYXIgPSAhKG9wdGlvbnMgJiBTZWxlY3Rp
b25Db250cm9sbGVyOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOwotI2VuZGlmCiAKICAgICAg
ICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hlY2sgc3BlbGxpbmcgZWxzZXdoZXJlLCBzbyBkb24ndCBy
ZWRvIGl0IGhlcmUuCiAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjaGFuZ2UgaW4gc2VsZWN0aW9u
IHJlc3VsdGluZyBmcm9tIGEgZGVsZXRlIG9wZXJhdGlvbiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5o
CmluZGV4IGY5YWVjNDA2OTBhMDFmM2EzODc4NTVjYTIyYTA2NTdlNzQ1YWIzMTUuLjhiOTExNTMx
ZDMxNTMzMTA5MDAzZWQ5NTg1ZTY1MDNlODE1NWY0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
aApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ2xpcGJvYXJkQWNjZXNzUG9saWN5Lmgi
CiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWxJbmZvLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJFZGl0QWN0aW9uLmgiCiAjaW5j
bHVkZSAiRWRpdGluZ0JlaGF2aW9yLmgiCkBAIC01MSw2ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVE
ZWNsYXJhdGlvbjsKIGNsYXNzIENsaXBib2FyZDsKK2NsYXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI7CiBjbGFzcyBEZWxldGVCdXR0b25Db250cm9sbGVyOwogY2xhc3MgRWRpdENvbW1h
bmQ7CiBjbGFzcyBFZGl0b3JDbGllbnQ7CkBAIC0zMjUsMTAgKzMyNSwxMCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGFkZFRvS2lsbFJpbmcoUmFuZ2UqLCBib29sIHByZXBlbmQpOwogCi0gICAgdm9p
ZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZSk7CisgICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CiAgICAgLy8gSWYgdXNl
ciBjb25maXJtZWQgYSBjb3JyZWN0aW9uIGluIHRoZSBjb3JyZWN0aW9uIHBhbmVsLCBjb3JyZWN0
aW9uIGhhcyBub24temVybyBsZW5ndGgsIG90aGVyd2lzZSBpdCBtZWFucyB0aGF0IHVzZXIgaGFz
IGRpc21pc3NlZCB0aGUgcGFuZWwuCiAgICAgdm9pZCBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1
bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKLSAgICB2b2lkIGRpc21pc3NDb3JyZWN0aW9u
UGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CisgICAgdm9pZCBkaXNt
aXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CiAKICAgICB2b2lkIHBhc3RlQXNGcmFnbWVu
dChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBt
YXRjaFN0eWxlKTsKICAgICB2b2lkIHBhc3RlQXNQbGFpblRleHQoY29uc3QgU3RyaW5nJiwgYm9v
bCBzbWFydFJlcGxhY2UpOwpAQCAtMzg0LDcgKzM4NCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAg
ICAgYm9vbCBzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlU3BlbGxB
bmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoYm9vbCBkb05vdFJlbW92ZUlm
U2VsZWN0aW9uQXRXb3JkQm91bmRhcnkpOworICAgIHZvaWQgdXBkYXRlTWFya2Vyc0ZvcldvcmRz
QWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBvbmx5SGFuZGxlV29yZHNDb250YWluaW5nU2VsZWN0aW9u
KTsKIAogcHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFtZTsKQEAgLTM5OSwxMCArMzk5LDggQEAg
cHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkU3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlOwogICAg
IGJvb2wgbV9zaG91bGRTdHlsZVdpdGhDU1M7CiAgICAgT3duUHRyPEtpbGxSaW5nPiBtX2tpbGxS
aW5nOwotICAgIENvcnJlY3Rpb25QYW5lbEluZm8gbV9jb3JyZWN0aW9uUGFuZWxJbmZvOwogICAg
IE93blB0cjxTcGVsbENoZWNrZXI+IG1fc3BlbGxDaGVja2VyOwotICAgIFRpbWVyPEVkaXRvcj4g
bV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsKLSAgICBib29sIG1fY29ycmVjdGlvblBhbmVsSXNEaXNt
aXNzZWRCeUVkaXRvcjsKKyAgICBPd25QdHI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4g
bV9zcGVsbGluZ0NvcnJlY3RvcjsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG1fbWFyazsKICAgICBi
b29sIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZDsKIApAQCAtNDE3LDcgKzQxNSw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRp
b24oKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYsIGJvb2wgY2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNz
cGVsbGluZ1JhbmdlKTsKICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdUeXBl
TWFza0ZvcihUZXh0Q2hlY2tpbmdPcHRpb25zKTsKLSAgICB2b2lkIHJlY29yZFNwZWxsY2hlY2tl
clJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiwgY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7CiAKICAgICB2b2lkIHNlbGVjdENvbXBv
c2l0aW9uKCk7CiAgICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiwgYm9v
bCBwcmVzZXJ2ZVNlbGVjdGlvbik7CkBAIC00MjgsMTAgKzQyNSwxMCBAQCBwcml2YXRlOgogICAg
IFBhc3NSZWZQdHI8UmFuZ2U+IG5leHRWaXNpYmxlUmFuZ2UoUmFuZ2UqLCBjb25zdCBTdHJpbmcm
LCBGaW5kT3B0aW9ucyk7CiAKICAgICB2b2lkIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcsIGJv
b2wgY2xlYXJUeXBpbmdTdHlsZSk7Ci0gICAgdm9pZCBjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVk
KFRpbWVyPEVkaXRvcj4qKTsKKwogICAgIE5vZGUqIGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rp
b24oKSBjb25zdDsKICAgICB2b2lkIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOwotICAgIFN0
cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsKTsKKwogICAgIHZvaWQgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZl
Y3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpOwogICAg
IC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rpb24gd2FzIGFwcGxpZWQsIGZhbHNlIG90aGVyd2lz
ZS4KICAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmNwcAppbmRleCBhZmU3NGE4ZDk4NGNjZTEyNzgyOWIyNWNlNDRlNTg5Mzk5N2M5Mjkw
Li5mMDI5N2MxNTQ4ZDA5ZWMxODFmYzViMjExOTFlNzU5OWNiOTA4NzdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAg
LTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmgiCiAKLSNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWxJbmZvLmgiCisj
aW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGRhNzRhYmQwYWM0NTgw
OGMyODcxZDY0OTliOGVmZTYyMWZjODc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcApAQCAtMCwwICsxLDQ4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRl
ICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgor
I2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgorI2lu
Y2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVy
LmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIK
KyNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNl
IFdURjsKKworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKworc3RhdGljIGNvbnN0
IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yQXV0b2Nv
cnJlY3Rpb24oKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbiwgKCkpOworICAg
IGlmIChtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICBt
YXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQpOworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1
bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7CisgICAgICAgIG1hcmtlclR5cGVzRm9y
QXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0
aW9uKTsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1l
bnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOworICAgIH0KKyAgICByZXR1cm4gbWFya2VyVHlwZXNG
b3JBdXRvQ29ycmVjdGlvbjsKK30KKworc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2Vy
VHlwZXNGb3JSZXBsYWNlbWVudCwgKCkpOworICAgIGlmIChtYXJrZXJUeXBlc0ZvclJlcGxhY2Vt
ZW50LmlzRW1wdHkoKSkgeworICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVu
ZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgICAgICBtYXJrZXJUeXBlc0ZvclJl
cGxhY2VtZW50LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7
CisgICAgfQorICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50OworfQorCitzdGF0
aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNvbnN0IFZlY3RvcjxEb2N1
bWVudE1hcmtlcj4mIG1hcmtlcnMpCit7CisgICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24gPSBtYXJr
ZXJzWzBdLmRlc2NyaXB0aW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbWFya2Vycy5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT0gbWFya2Vyc1tpXS5kZXNj
cmlwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1f
Y29ycmVjdGlvblBhbmVsVGltZXIodGhpcywgJlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCit7Cit9CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKCkKK3sKKyAgICBkaXNtaXNz
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKK30KKwordm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQoreworICAgIGNvbnN0IGRvdWJsZSBj
b3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4zOworICAgIGlmICghaXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElm
IHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4g
c2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQuCisgICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnBhbmVsVHlwZSA9IHR5cGU7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9u
ZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKK3sKKyAgICBt
X2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
b2xkU2VsZWN0aW9uKQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0
b2NvcnJlY3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIo
KSBiZWxvdy4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSBv
bGRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHN0b3BDb3JyZWN0aW9uUGFuZWxU
aW1lcigpOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEln
bm9yZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5UGVu
ZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBp
bmcpCit7CisgICAgLy8gQXBwbHkgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgbmV4dCBy
b3VuZCBvZiBzcGVsbCBjaGVja2luZy4KKyAgICBib29sIGRvQXBwbHlDb3JyZWN0aW9uID0gdHJ1
ZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IHNlbGVjdGlvbkFmdGVy
VHlwaW5nLnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFdvcmQg
PSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIExlZnRXb3Jk
SWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIFJpZ2h0V29yZElmT25C
b3VuZGFyeSkpOworICAgIGlmIChjdXJyZW50V29yZC52aXNpYmxlRW5kKCkgPT0gc3RhcnRPZlNl
bGVjdGlvbikgeworICAgICAgICBTdHJpbmcgd29yZFRleHQgPSBwbGFpblRleHQoY3VycmVudFdv
cmQudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIGlmICh3b3JkVGV4dC5sZW5n
dGgoKSA+IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcih3b3JkVGV4dFt3b3JkVGV4
dC5sZW5ndGgoKSAtIDFdKSkKKyAgICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7
CisgICAgfQorICAgIGlmIChkb0FwcGx5Q29ycmVjdGlvbikKKyAgICAgICAgaGFuZGxlQ29ycmVj
dGlvblBhbmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWxBY2NlcHRlZCkpOyAKKyAgICBlbHNlCisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworfQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkOworfQorCitib29sIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQ
dHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2ZyYW1l
LT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5nZS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworfQorCit2b2lkIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VU
b1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCit7CisgICAgRmxvYXRSZWN0IGJv
dW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAg
ICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNl
LmdldCgpKTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSBy
YW5nZVRvUmVwbGFjZTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJp
bmcgPSByZXBsYWNlbWVudDsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0
cnVlOworICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVs
SW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFj
ZWRTdHJpbmcsIHJlcGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpKTsKK30KKwordm9pZCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24oKQoreworICAg
IGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgZGlzbWlzcyhS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkKTsKK30KKwordm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdD
b3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKK3sKKyAgICBpZiAoIW1fY29ycmVj
dGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNt
aXNzZWRCeUVkaXRvciA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQo
KS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChyZWFzb25Gb3JEaXNtaXNzaW5nKTsKK30KKworU3Ry
aW5nIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3NTb29uKFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKK3sKKyAgICBpZiAo
IW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIG1fY29y
cmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7CisgICAgaWYgKCFjbGllbnQo
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBjbGllbnQoKS0+ZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbFNvb24ocmVhc29uRm9yRGlzbWlzc2luZyk7Cit9CisKK3ZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0
IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpCit7
CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxSYW5n
ZT4gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSkpOworCisgICAgLy8g
QWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVSZXBsYWNlZCwgd2Ug
bmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgorICAgIC8vIEhvd2V2ZXIsIG9uY2Ug
dGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRvQmVSZXBsYWNl
ZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KKyAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRo
ZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFu
Z2VUb0JlUmVwbGFjZWQKKyAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2Yg
dGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5Q
YXJhZ3JhcGgKKyAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4g
dGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKKyAgICAvLyB3aGlj
aCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9u
IG9mIHJhbmdlVG9CZVJlcGxhY2VkLgorICAgIFJlZlB0cjxSYW5nZT4gY29ycmVjdGlvblN0YXJ0
T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBo
UmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBpZiAoZWMp
CisgICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9C
ZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFy
dFBvc2l0aW9uKCk7CisgICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
LT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVyTm9kZSgp
LCBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRh
a2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4g
YWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KKyAgICBpbnQgY29y
cmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7CisKKyAgICAv
LyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdh
bnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgorICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQtPmNsb25lUmFuZ2UoZWMpOworICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kOjpjcmVhdGUocmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlbWVudFN0cmluZykpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQo
KSk7CisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpz
dWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBjb3JyZWN0
aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
bWVudFN0cmluZy5sZW5ndGgoKSk7CisgICAgU3RyaW5nIG5ld1RleHQgPSBwbGFpblRleHQocmVw
bGFjZW1lbnRSYW5nZS5nZXQoKSk7CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVwbGFjZW1l
bnQgc3VjY2VlZGVkLgorICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlbWVudFN0cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIHNpemVfdCBzaXplID0gbWFya2VyVHlwZXNUb0Fk
ZC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAg
ICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1hcmtlclR5cGVzVG9B
ZGRbaV07CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAgaWYgKG1fY29ycmVj
dGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
UmV2ZXJzaW9uICYmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8
fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKSkKKyAgICAgICAg
ICAgIGRlc2NyaXB0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nOwor
ICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgbWFya2Vy
VHlwZSwgZGVzY3JpcHRpb24pOworICAgIH0KK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgp
Cit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwg
IW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rp
b24oKS5zdGFydCgpOworCisgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7CisgICAgICAgIGhhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsQWNjZXB0ZWQpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKyAg
ICAKKyAgICAvLyBQZW5kaW5nIGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5cyBiZSB3aGVyZSBjYXJl
dCBpcy4gQnV0IGluIGNhc2UgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIHdlIHN0aWxsIHdhbnQg
dG8gZGlzbWlzcyB0aGUgcGFuZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhlIGNvcnJlY3Rpb24uCisg
ICAgQVNTRVJUKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9z
aXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3Jy
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25z
dCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQoreworICAgIGNs
aWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2Nv
cnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKKyAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0
U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBTZWxlY3Rpb25Db250cm9sbGVyOjpDbG9z
ZVR5cGluZyB8IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNsZWFyVHlwaW5nU3R5bGUgfCBTZWxlY3Rp
b25Db250cm9sbGVyOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOworICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2Vs
ZWN0aW9uKCkuZW5kKCkpOworCisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJz
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIG1hcmtlcnMtPnJlbW92ZU1h
cmtlcnMocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFy
a2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRp
YWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0
KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgbWFya2Vycy0+YWRkTWFya2Vy
KHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9
CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGlt
ZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiopCit7CisgICAgbV9j
b3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gZmFsc2U7CisgICAgc3dpdGNoICht
X2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOiB7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgICAgIFZp
c2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5
KCkpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0
V29yZElmT25Cb3VuZGFyeSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3Jk
cyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQpOworICAgICAgICBtX2ZyYW1lLT5lZGl0b3Io
KS0+bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhFZGl0b3I6Ok1hcmtT
cGVsbGluZyB8IEVkaXRvcjo6U2hvd0NvcnJlY3Rpb25QYW5lbCwgYWRqYWNlbnRXb3Jkcy50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCAwKTsKKyAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOiB7CisgICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdC
b3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkLmdldCgpKTsKKyAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vk
U3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+KCkpOworICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOiB7CisgICAgICAgIGlmIChwbGFp
blRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKSAhPSBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFy
YWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkucGFyYWdyYXBo
UmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOworICAg
ICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmVwbGFjZWRTdHJpbmcsIHBhcmFncmFwaFRleHQsIHN1Z2dlc3Rpb25zKTsKKyAgICAgICAg
aWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0
KCk7CisgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKKyAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94
ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC5nZXQoKSk7CisgICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0
cmluZywgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOworICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit7CisgICAgUmFu
Z2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQuZ2V0KCk7CisgICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3VtZW50KCkg
IT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdvcmQg
d2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVyIGZp
cmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgorICAgIGlmIChjdXJyZW50V29yZCAh
PSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworCisgICAgc3dp
dGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7CisgICAgY2FzZSBDb3JyZWN0
aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgorICAgICAgICBpZiAoY29ycmVjdGlv
bi5sZW5ndGgoKSkgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vt
ZW50U3RyaW5nID0gY29ycmVjdGlvbjsKKyAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVs
SW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOworICAgICAgICB9IGVsc2UgaWYg
KCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IpCisgICAgICAgICAgICByZXBs
YWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1h
cmtlcihyZXBsYWNlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjoKKyAgICBjYXNl
IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CisgICAg
ICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOworICAgICAgICAgICAgYXBw
bHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKK3sKKyAg
ICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZCgpOworfQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNo
b3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpCit7CisgICAgcmV0dXJuIFJFTU9WRV9NQVJL
RVJTX1VQT05fRURJVElORyAmJiBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmU7Cit9CisK
K0Zsb2F0UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp3aW5kb3dSZWN0Rm9yUmFu
Z2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAoreworICAgIEZyYW1lVmlldyogdmlldyA9IG1f
ZnJhbWUtPnZpZXcoKTsKKyAgICByZXR1cm4gdmlldyA/IHZpZXctPmNvbnRlbnRzVG9XaW5kb3co
SW50UmVjdChyYW5nZS0+Ym91bmRpbmdSZWN0KCkpKSA6IEZsb2F0UmVjdCgpOworfSAgICAgICAg
CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCit7CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxl
Y3Rpb24oKSk7CisgICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0
b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCisgICAgLy8gY29u
dGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0IHVzZXIgY2Fu
IHF1aWNrbHkgcmV2ZXJ0IHRoZQorICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVjdGlvbi4gSGVy
ZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZpcm0gdGhhdAor
ICAgIC8vIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCisg
ICAgaWYgKCFjdXJyZW50U2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCBjdXJyZW50U2VsZWN0aW9uID09
IG9sZFNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHNl
bGVjdGlvblBvc2l0aW9uID0gY3VycmVudFNlbGVjdGlvbi5zdGFydCgpOworICAgIFZpc2libGVQ
b3NpdGlvbiBlbmRQb3NpdGlvbk9mV29yZCA9IGVuZE9mV29yZChzZWxlY3Rpb25Qb3NpdGlvbiwg
TGVmdFdvcmRJZk9uQm91bmRhcnkpOworICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbiAhPSBlbmRQ
b3NpdGlvbk9mV29yZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUG9zaXRpb24gcG9zaXRpb24g
PSBlbmRQb3NpdGlvbk9mV29yZC5kZWVwRXF1aXZhbGVudCgpOworICAgIGlmIChwb3NpdGlvbi5h
bmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsK
KyAgICBpbnQgZW5kT2Zmc2V0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Cisg
ICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJzID0gbm9kZS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpLT5tYXJrZXJzRm9yTm9kZShub2RlKTsKKyAgICBzaXplX3QgbWFya2VyQ291bnQgPSBt
YXJrZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyAr
K2kpIHsKKyAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IG1hcmtlcnNbaV07
CisgICAgICAgIGlmICghc2hvdWxkU3RhcnRUaW1lRm9yKG1hcmtlciwgZW5kT2Zmc2V0KSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJh
bmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0
LCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KTsKKyAgICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0g
cGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7CisgICAgICAgIGlmICghY3VycmVudFdvcmQubGVu
Z3RoKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSB3b3JkUmFuZ2U7CisgICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IGN1cnJlbnRXb3JkOworICAgICAgICBpZiAobWFy
a2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKQorICAgICAgICAgICAgc3RhcnRD
b3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGlu
Z1N1Z2dlc3Rpb25zKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBtYXJrZXIuZGVzY3JpcHRpb247CisgICAgICAg
ICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZVJldmVyc2lvbik7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRp
bmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY29tbWFuZCkKK3sKKyAgICBpZiAoY29tbWFuZC0+
aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY29tbWFuZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rp
b25JbmRpY2F0b3IoKSkKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5y
ZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKK30KKwor
RWRpdG9yQ2xpZW50KiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjbGllbnQoKQorewor
ICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCkgPyBtX2ZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVu
dCgpIDogMDsKK30KKworVGV4dENoZWNrZXJDbGllbnQqIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnRleHRDaGVja2VyKCkKK3sKKyAgICBpZiAoRWRpdG9yQ2xpZW50KiBvd25lciA9IGNs
aWVudCgpKQorICAgICAgICByZXR1cm4gb3duZXItPnRleHRDaGVja2VyKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCit7CisgICAgY2xpZW50KCktPnJlY29yZEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVk
LCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcpOworfQorCit2b2lkIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNl
ZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNl
bWVudFJhbmdlKQoreworICAgIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChy
ZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpKTsKK30KKwor
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrUmV2ZXJzZWQoUGFzc1JlZlB0
cjxSYW5nZT4gY2hhbmdlZFJhbmdlKQoreworICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWlu
ZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKGNoYW5nZWRSYW5nZS5n
ZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIGNoYW5nZWRSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hh
bmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7
Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24o
UGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZykKK3sKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5
cGVzVG9BZGQgPSBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCk7CisgICAgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIo
KS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFy
a2VyVHlwZXNUb0FkZC5zaXplKCk7ICsraSkgeworICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKKyAgICAgICAgaWYgKG1h
cmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0g
RG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpCisgICAgICAgICAgICBtYXJrZXJzLT5hZGRN
YXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5n
ZS5nZXQoKSwgbWFya2VyVHlwZSk7CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0
aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNv
bnN0IFN0cmluZyYgY29ycmVjdGlvbikKK3sKKyAgICBpZiAoIXJhbmdlT2ZDb3JyZWN0aW9uKQor
ICAgICAgICByZXR1cm47CisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0g
cmFuZ2VPZkNvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMo
KTsKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IGNvcnJlY3RlZE9uY2VNYXJrZXJzID0gbWFy
a2Vycy0+bWFya2Vyc0luUmFuZ2UocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpB
dXRvY29ycmVjdGVkKTsKKyAgICBpZiAoY29ycmVjdGVkT25jZU1hcmtlcnMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gU3BlbGxpbmcgY29ycmVjdGVkIHRleHQgaGFz
IGJlZW4gZWRpdGVkLiBXZSBuZWVkIHRvIGRldGVybWluZSB3aGV0aGVyIHVzZXIgaGFzIHJldmVy
dGVkIGl0IHRvIG9yaWdpbmFsIHRleHQgb3IKKyAgICAvLyBlZGl0ZWQgaXQgdG8gc29tZXRoaW5n
IGVsc2UsIGFuZCBub3RpZnkgc3BlbGxjaGVja2VyIGFjY29yZGluZ2x5LgorICAgIGlmIChtYXJr
ZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNvcnJlY3RlZE9uY2VNYXJrZXJzKSAmJiBjb3Jy
ZWN0ZWRPbmNlTWFya2Vyc1swXS5kZXNjcmlwdGlvbiA9PSBjb3JyZWN0ZWQpCisgICAgICAgIGNs
aWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2Nv
cnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKKyAgICBlbHNlCisgICAg
ICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6
QXV0b2NvcnJlY3Rpb25FZGl0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CisgICAgbWFya2Vy
cy0+cmVtb3ZlTWFya2VycyhyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9j
b3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40N2ExYmUyYjI3OGEwMzk2M2VlZTU1YWRlMDAxYTQ4M2YzMTZhZmFk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCisjZGVmaW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXJfaAorCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQorLy8gU29tZSBwbGF0Zm9ybXMgcHJvdmlkZSBVSSBmb3Igc3Vn
Z2VzdGluZyBhdXRvY29ycmVjdGlvbi4KKyNkZWZpbmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9Q
QU5FTCAxCisvLyBTb21lIHBsYXRmb3JtcyB1c2Ugc3BlbGxpbmcgYW5kIGF1dG9jb3JyZWN0aW9u
IG1hcmtlcnMgdG8gcHJvdmlkZSB2aXN1YWwgY3VlLgorLy8gT24gc3VjaCBwbGF0Zm9ybSwgaWYg
d29yZCB3aXRoIG1hcmtlciBpcyBlZGl0ZWQsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBtYXJrZXIu
CisjZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORyAxCisjZWxzZQorI2RlZmluZSBT
VVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDAKKyNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBP
Tl9FRElUSU5HIDAKKyNlbmRpZiAvLyAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIu
aCIKKyNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFZGl0b3JDbGllbnQ7Citj
bGFzcyBSYW5nZTsKK2NsYXNzIFRleHRDaGVja2VyQ2xpZW50OworY2xhc3MgVmlzaWJsZVNlbGVj
dGlvbjsKKworc3RydWN0IENvcnJlY3Rpb25QYW5lbEluZm8geworICAgIGVudW0gUGFuZWxUeXBl
IHsKKyAgICAgICAgUGFuZWxUeXBlQ29ycmVjdGlvbiA9IDAsCisgICAgICAgIFBhbmVsVHlwZVJl
dmVyc2lvbiwKKyAgICAgICAgUGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucworICAgIH07CisK
KyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkOworICAgIFN0cmluZyByZXBsYWNl
ZFN0cmluZzsKKyAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7CisgICAgUGFuZWxUeXBlIHBh
bmVsVHlwZTsKKyAgICBib29sIGlzQWN0aXZlOworfTsKKworZW51bSBSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsIHsKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsQ2FuY2VsbGVkID0gMCwKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
SWdub3JlZCwKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQK
K307CisKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCisjZGVmaW5lIFVOTEVTU19F
TkFCTEVEKGZ1bmN0aW9uQm9keSkgOworI2Vsc2UKKyNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVu
Y3Rpb25Cb2R5KSBmdW5jdGlvbkJvZHkKKyNlbmRpZgorCitjbGFzcyBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
KEZyYW1lKikgVU5MRVNTX0VOQUJMRUQoe30pCisgICAgflNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7fSkKKworICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFu
ZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUpIFVOTEVTU19FTkFCTEVEKHt9
KQorICAgIHZvaWQgc3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkgVU5MRVNTX0VOQUJMRUQoe30p
CisKKyAgICB2b2lkIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkg
VU5MRVNTX0VOQUJMRUQoe30pCisgICAgU3RyaW5nIGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIFN0cmluZygpOyB9
KQorICAgIHZvaWQgc2hvdyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VU
b1JlcGxhY2UpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnQpOyB9KQorCisgICAgdm9pZCBhcHBs
eUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiYpIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rp
b24gd2FzIGFwcGxpZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICBib29sIGFwcGx5QXV0b2NvcnJl
Y3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4g
ZmFsc2U7IH0pCisKKyAgICB2b2lkIHJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGVk
KTsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQorICAgIHZvaWQgcmVzcG9uZFRvQXBwbGll
ZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pIFVOTEVTU19FTkFCTEVEKHt9KQorICAg
IHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBv
bGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7
IH0pCisKKyAgICB2b2lkIHN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVj
dGlvbik7IH0pCisgICAgdm9pZCBhcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9Q
QVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7IH0pCisKKyAgICB2b2lkIGhhbmRsZUNvcnJlY3Rp
b25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsg
VU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQorICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0
aW9uKCkgVU5MRVNTX0VOQUJMRUQoe30pCisKKyAgICBib29sIGhhc1BlbmRpbmdDb3JyZWN0aW9u
KCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCisgICAgYm9vbCBpc1Nw
ZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBj
b25zdCBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShtaXNzcGVsbGluZ1JhbmdlKTsgcmV0
dXJuIHRydWU7IH0pCisgICAgYm9vbCBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJs
ZWQoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKKyAgICBib29sIHNob3VsZFJl
bW92ZU1hcmtlcnNVcG9uRWRpdGluZygpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9
KQorCisgICAgdm9pZCBjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI+KikgVU5MRVNTX0VOQUJMRUQoe30pCisgICAgdm9pZCByZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBV
TlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnRSYW5n
ZSk7IH0pCisgICAgdm9pZCBtYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJh
bmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShjaGFuZ2VkUmFuZ2UpOyB9KQorICAg
IHZvaWQgbWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0o
cmVwbGFjZWRSYW5nZSk7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IH0pCisgICAgdm9p
ZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSog
cmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlT2ZDb3JyZWN0
aW9uKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsg
fSkKKworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKK3ByaXZhdGU6CisgICAgdm9p
ZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CisKKyAgICBib29s
IHNob3VsZFN0YXJ0VGltZUZvcihjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyLCBpbnQgZW5k
T2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICgoKG1hcmtlci50eXBlID09IERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCAmJiAhbWFya2VyLmRlc2NyaXB0aW9uLmlzTnVsbCgp
KSAKKyAgICAgICAgICAgICAgICAgfHwgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci5lbmRPZmZzZXQpID09IGVuZE9mZnNl
dCk7CisgICAgfQorCisgICAgRWRpdG9yQ2xpZW50KiBjbGllbnQoKTsKKyAgICBUZXh0Q2hlY2tl
ckNsaWVudCogdGV4dENoZWNrZXIoKTsKKyAgICBGbG9hdFJlY3Qgd2luZG93UmVjdEZvclJhbmdl
KGNvbnN0IFJhbmdlKikgY29uc3Q7CisKKyAgICBFZGl0b3JDbGllbnQqIG1fY2xpZW50OworICAg
IEZyYW1lKiBtX2ZyYW1lOworCisgICAgVGltZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsKKyAgICBDb3JyZWN0aW9uUGFuZWxJbmZvIG1fY29y
cmVjdGlvblBhbmVsSW5mbzsKKyAgICBib29sIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRC
eUVkaXRvcjsKKyNlbmRpZgorfTsKKworI3VuZGVmIFVOTEVTU19FTkFCTEVECisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggZGYxNTBlZTAw
Mzk1MDhkNjM0MjdhY2I0ZWNiY2Q1MGZlNmY0MjYwOC4uYjU0OGI5MTMyZGQ3YmNmMTkwZWY4Y2Nm
NGE5MWE1NDQ2OWE2ZmVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQu
Y3BwCkBAIC0xNTUsMTEgKzE1NSw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgVHlwaW5nQ29tCiAgICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKIAotI2lm
IFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwogICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0g
ICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS0+cmVtb3ZlU3BlbGxBbmRDb3JyZWN0
aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoaXNTcGFjZU9yTmV3bGluZSh0ZXh0LmNoYXJh
Y3RlcnMoKVswXSkpOwotI2VuZGlmCi0KKyAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRv
cigpLT51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXds
aW5lKHRleHQuY2hhcmFjdGVycygpWzBdKSk7CisgICAgCiAgICAgaW5zZXJ0VGV4dChkb2N1bWVu
dCwgdGV4dCwgZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9z
aXRpb24pOwogfQogCkBAIC0zNDQsMTIgKzM0Miw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlKQogICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9u
Qm91bmRhcnkpOwogICAgICAgICBpZiAocDEgIT0gcDIpCiAgICAgICAgICAgICBkb2N1bWVudCgp
LT5mcmFtZSgpLT5lZGl0b3IoKS0+bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAx
LCBlbmRpbmdTZWxlY3Rpb24oKSk7Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAog
ICAgICAgICBlbHNlIGlmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0
KQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnN0YXJ0Q29ycmVj
dGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbik7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb21tYW5kVHlwZSk7Ci0jZW5kaWYKKyAgICAgICAg
ICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5zdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKCk7CiAgICAgfQogfQogCkBAIC00NjcsOSArNDYxLDggQEAgYm9vbCBUeXBpbmdDb21tYW5k
OjptYWtlRWRpdGFibGVSb290RW1wdHkoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtl
eVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogewot
I2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwotICAgIGRvY3VtZW50KCktPmZyYW1lKCkt
PmVkaXRvcigpLT5yZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVk
aXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+
dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworCiAgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbkFmdGVyVW5kbzsKIApAQCAtNTY2LDkgKzU1OSw4IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2ls
bFJpbmcpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogewotI2lmIFJFTU9WRV9N
QVJLRVJTX1VQT05fRURJVElORwotICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5y
ZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7
Ci0jZW5kaWYKKyAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vy
c0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworCiAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVy
VW5kbzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCmluZGV4IGNiMmIyYTQyOWY5
ZTFlZWU3OTdlY2JhOWZjNzAwZDZmMjg3ZmUyNDcuLjFkODUzYzdhMzE3MDY3MTQyMzM0YzZlYWE1
OGUzMGIwNmY3OTQyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKQEAgLTIy
NCw2ICsyMjQsMTUgQEAgaW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlKFVDaGFyIGMpCiB7CiAgICAg
cmV0dXJuIGMgPT0gbm9CcmVha1NwYWNlIHx8IGMgPT0gJyAnIHx8IGMgPT0gJ1xuJyB8fCBjID09
ICdcdCc7CiB9CisKK2lubGluZSBib29sIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNo
YXIgY2hhcmFjdGVyKQoreworICAgIC8vIFRoZXNlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJl
aGF2ZSBhcyB3b3JkIGJvdW5kYXJpZXMsIGJ1dCBjYW4gYXBwZWFyIHdpdGhpbiB3b3Jkcy4KKyAg
ICAvLyBJZiB0aGV5IGFyZSBqdXN0IHR5cGVkLCBpLmUuIGlmIHRoZXkgYXJlIGltbWVkaWF0ZWx5
IGZvbGxvd2VkIGJ5IGEgY2FyZXQsIHdlIHdhbnQgdG8gZGVsYXkgdGV4dCBjaGVja2luZyB1bnRp
bCB0aGUgbmV4dCBjaGFyYWN0ZXIgaGFzIGJlZW4gdHlwZWQuCisgICAgLy8gRklYTUU6IHRoaXMg
aXMgcmVxdWlyZWQgdW50aWwgNjg1MzAyNyBpcyBmaXhlZCBhbmQgdGV4dCBjaGVja2luZyBjYW4g
ZG8gdGhpcyBmb3IgdXMuCisgICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnXCcnIHx8IGNoYXJhY3Rl
ciA9PSByaWdodFNpbmdsZVF1b3RhdGlvbk1hcmsgfHwgY2hhcmFjdGVyID09IGhlYnJld1B1bmN0
dWF0aW9uR2Vyc2hheWltOworfQorCiBTdHJpbmcgc3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNw
YWNlKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RhcnRJc1N0YXJ0T2ZQYXJhZ3JhcGgsIGJvb2wgZW5k
SXNFbmRPZlBhcmFncmFwaCk7CiBjb25zdCBTdHJpbmcmIG5vbkJyZWFraW5nU3BhY2VTdHJpbmco
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKaW5kZXggYWVkYTg0NDU4OGNhNmVmNTVm
MDY4MjM0Mjg1MzcwMzU5YzdhYTUyZS4uZGYyNGE1YjQ2MDgwODczZmMzYzc4Y2FlYjI0ZmUwMjM0
MzU2MTIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCkBAIC0yNyw3ICsyNyw3IEBA
CiAjaWZuZGVmIEVkaXRvckNsaWVudF9oCiAjZGVmaW5lIEVkaXRvckNsaWVudF9oCiAKLSNpbmNs
dWRlICJDb3JyZWN0aW9uUGFuZWxJbmZvLmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCmluZGV4IDlkMGIyMGIyZDkyNzBmNjdlNjg2YzFlODEwNTFmMzEyMjM1MmQ3MGEuLmI3NWVm
ZGZmZDgzODQ5YTE2MTgxNmNjNGVkMzE4YzA4NWU2NjY2OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
CkBAIC05NjgsNyArOTY4LDcgQEAgdm9pZCBGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9y
cyhmbG9hdCBwYWdlWm9vbUZhY3RvciwgZmxvYXQgdGV4dFpvb21GYWN0b3IKICAgICBpZiAoIWRv
Y3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2VkaXRvci5kaXNtaXNzQ29ycmVjdGlv
blBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBt
X2VkaXRvci5kaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CiAKICNpZiBFTkFCTEUo
U1ZHKQogICAgIC8vIFJlc3BlY3QgU1ZHcyB6b29tQW5kUGFuPSJkaXNhYmxlZCIgcHJvcGVydHkg
aW4gc3RhbmRhbG9uZSBTVkcgZG9jdW1lbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaAppbmRleCA4YWRiNzlmMjM2YThlN2I2OGYz
YWViMmEzNTQ1YjNhYzdiNWU2Y2YzLi5iN2Q0YzRjZGRlMjkyN2NiNTFkMjUwNDc2MDAxOTQxNTc3
YjQ2ZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3Jy
ZWN0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3Jy
ZWN0aW9uUGFuZWwuaApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICNpbXBvcnQgPEFwcEtpdC9OU1RleHRDaGVja2VyLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0NvcnJlY3Rpb25QYW5lbEluZm8uaD4KKyNpbXBvcnQgPFdlYkNv
cmUvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgogCiBAY2xhc3MgV2ViVmlldzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L0NvcnJlY3Rpb25QYW5lbC5oCmluZGV4IGQ0YmMzNTNkNjliMzYxZDJlODYxMzZiMTkwN2JkOTZm
MDJjODk2MTkuLjc3MDQxMWMxMzM1NWE2MjY2ZmRlOWFlNTVkNWY4ODZmZmNlYzJkOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwuaApAQCAtMjgs
NyArMjgsNyBAQAogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogI2lt
cG9ydCA8QXBwS2l0L05TVGV4dENoZWNrZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29ycmVjdGlv
blBhbmVsSW5mby5oPgorI2ltcG9ydCA8V2ViQ29yZS9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIEBjbGFzcyBXS1ZpZXc7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88745</attachid>
            <date>2011-04-07 17:55:59 -0700</date>
            <delta_ts>2011-04-08 10:40:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55571-20110407175557.patch</filename>
            <type>text/plain</type>
            <size>99379</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMyMzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTAwYTc5
MjIzNWM1YzI1ZTM0NDA0OTliNDMzMDZiNmY3ZmFkOGVhMy4uYTgyYWFmZTM1ZGU2NjYwY2IyNjY4
YjM4NWJkMzY1NTI2NzM5MmU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY3MSw2ICs2NzEs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM2ZmViM2E5ZmRkMWYwYzVmZWIxY2FiNzFl
ZGEwOTMxY2E4NDI0ODAuLjQ3ZDc4YmQ0ZTk0NGI5YzdlMGM1Mzk0ZDBiODY3MGMzZTg0ZWFhZjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAxMS0wNC0wNiAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUmVmYWN0b3JpbmddIEF1dG8gY29ycmVjdGlvbiBwYW5lbCBzaG91bGQg
YmUgaGFuZGxlZCBieSBpdHMgb3duIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU1NzEKKworICAgICAgICBFeHRyYWN0ZWQgY29kZSBpbnNp
ZGUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBpbnRvCisgICAgICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIgY2xhc3MuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gcmVtb3Zl
IHNvbWUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCBndWFyZCBpZgorICAgICAgICBjb2Rl
IHBhdGhzIGluc2lkZSB0aGUgbmV2ZXIgcmVhY2hlZCB3aXRob3V0IGF1dG9jb3JyZWN0aW9uIHN1
cHBvcnQuCisgICAgICAgIFJlbW92aW5nIGd1YXJkcyByZWR1Y2VzIHVuaW50ZW50aW9uYWwgYnVp
bGQgYnJlYWthZ2UuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFnbmUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvQ29ycmVjdGlvblBhbmVs
SW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZXNwb25kVG9DaGFuZ2VkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
aWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6On5FZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnBhc3RlQXNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppc0F1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKToK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjptYXJrZXJUeXBlc0Zv
ckF1dG9jb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtlclR5cGVzRm9yUmVwbGFj
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0YXJ0Q29ycmVjdGlv
blBhbmVsVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBlbmRpbmdDb3Jy
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
Omhhc1BlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlz
c1Nvb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6d2luZG93UmVjdEZv
clJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjptYXJrUmV2ZXJzZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkU3BlbGxjaGVja2VyUmVz
cG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFN0YXJ0VGltZUZvcik6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG91bGRSZW1vdmVN
YXJrZXJzVXBvbkVkaXRpbmcpOiAgICAgICAgCisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNz
ZWQpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6
OmlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIpOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xp
ZW50Lmg6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyk6CisKIDIwMTEtMDQtMDcgIERhbiBCZXJuc3Rl
aW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXguCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCmluZGV4IGVlNzBhNGZiYTFkMTQ4NDM1YWU2YzI2ZWFlZjcxMjg5NGEyMDVlYTEuLmFlNTI5
NDQwNzY0NWJmZDdlOTQ5YTI0Y2Q4N2ZjMjVhNDQ0ZjA4ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CkBAIC0xNDcwLDYgKzE0NzAsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbENoZWNrZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tl
ci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5oIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCBiYWQzMTE1ZWY5YWVjY2JhODQyYTgxYmI4ZmI3NmU5NWE2ZjEwNjE3Li4w
ZWI0OGI4ODc5NzQ1MjkwYzMwNmY0M2U2ZGJmMTVlNmNiMWJjOGMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0yNjQxLDYgKzI2NDEsOSBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvU21hcnRSZXBsYWNl
Q0YuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAnLAogICAg
ICAgICAgICAgJ2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCcsCisgICAgICAgICAgICAnZWRpdGlu
Zy9TcGVsbENoZWNrZXIuaCcsCisgICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcCcsCisgICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZC5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcm8KaW5kZXggZDQyMjFmZjlkZmQzYTk4NGEwZWRkOTYxNDI3NzliNzBkOGZjN2Mw
ZS4uNzBkMzNhY2MwMjA4Yzc5NTU2ZTJkZDVkZDgzYmEzZTc2NzEwMDBkNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8KQEAgLTU5OSw2ICs1OTksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBlZGl0aW5nL1NldE5vZGVB
dHRyaWJ1dGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwIFwK
ICAgICBlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgXAorICAgIGVkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5jcHAgXAogICAgIGVkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5j
cHAgXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5n
L1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMTM2MTQ4NWQ5ZjM2Mjk0
NjVkMWJkMGNmNmI5ZDViNDI4MGU1OTQzNy4uN2ZkYzk3NGU4NjFiNWFiMzFjOTk4M2UwY2ViMmJj
NzNiNWVmNzY4ZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTUwMjM0LDYgKzUwMjM0LDYyIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1
Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRv
b2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxX
aW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wK
KwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9f
Q0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJ
CQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxl
YXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJ
CQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+
CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJ
TmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJ
CQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4K
KwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlO
YW1lPSJSZWxlYXNlX0xUQ0d8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
CQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkv
PgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCisJ
CQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdc
U3BsaXRFbGVtZW50Q29tbWFuZC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDEwOGQzYzYzOGNhN2Y1ZDY0OTJhYzYxZGYzOWMyODllZDkwZWY4NjUuLjMyYzZjNjkxMWY1
MWJmYzg5MDhlOGIzZTAwYTRhNmJmN2M5ZWI5ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMxOTYsNiArMzE5Niw4IEBACiAJ
CUE2MjJBOEZDMTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEY2MTIyQzQ0
QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCAqLzsgfTsKIAkJQTYyMkE4RkQx
MjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEY3MTIyQzQ0QTYwMEE3ODVCMyAv
KiBCaW5kaW5nU2VjdXJpdHlCYXNlLmggKi87IH07CiAJCUE2MjJBOEZGMTIyQzQ0QTYwMEE3ODVC
MyAvKiBHZW5lcmljQmluZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTYyMkE4RjkxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmgg
Ki87IH07CisJCUE3MDA1Q0NDMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3MDA1Q0NBMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyLmNwcCAqLzsgfTsKKwkJQTcwMDVDQ0QxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3MDA1Q0NCMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQTcxNTFCRDgxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE1MUJENzEyRjE1
NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzE1RTY1MjEzNEJCQkVDMDBEOEU3MTMgLyog
UHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3MTVFNjUwMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRv
d0VsZW1lbnQuY3BwICovOyB9OwogCQlBNzE1RTY1MzEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jl
c3NTaGFkb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNzE1RTY1MTEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50
LmggKi87IH07CkBAIC00Nzk2LDcgKzQ3OTgsNiBAQAogCQlCNzc2RDQzRDExMDQ1Mjc1MDBCRUIw
RUMgLyogUHJpbnRDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEI3NzZENDNDMTEwNDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRleHQuY3Bw
ICovOyB9OwogCQlCODg1RThENDExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI4ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuY3BwICovOyB9OwogCQlCODg1RThENTExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCODg1RThEMzExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsg
fTsKLQkJQjhBNkE2RDUxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4QTZBNkQ0MTI3
QjMzOEQwMDg2NzNCQSAvKiBDb3JyZWN0aW9uUGFuZWxJbmZvLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjhEQkRCNEIxMzBCMEY4QTAwRjVDREIx
IC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjhEQkRCNDcxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlv
bkNvbW1hbmQuY3BwICovOyB9OwogCQlCOERCREI0QzEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2Vs
ZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjhEQkRCNDgxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCAq
LzsgfTsKIAkJQjhEQkRCNEQxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjhEQkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3Bw
ICovOyB9OwpAQCAtOTcyNCw2ICs5NzI1LDggQEAKIAkJQTYyMkE4RjYxMjJDNDRBNjAwQTc4NUIz
IC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQmluZGluZ1NlY3VyaXR5QmFzZS5jcHA7IHBhdGggPSBnZW5lcmljL0JpbmRpbmdT
ZWN1cml0eUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNjIyQThGNzEy
MkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCaW5kaW5nU2VjdXJpdHlCYXNlLmg7IHBhdGggPSBnZW5lcmljL0Jp
bmRpbmdTZWN1cml0eUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTYyMkE4
RjkxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEdlbmVyaWNCaW5kaW5nLmg7IHBhdGggPSBnZW5lcmljL0dlbmVyaWNC
aW5kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3MDA1Q0NBMTMzMEM0QkEw
MDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEg
LyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3MTUxQkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q2hlY2tlckNsaWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE1RTY1MDEzNEJCQkVDMDBEOEU3
MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3MTVFNjUxMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0Vs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvZ3Jlc3NTaGFkb3dF
bGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTIzMSw3ICsxMTIzNCw2
IEBACiAJCUI3NzZENDNDMTEwNDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRleHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRDb250ZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg4NUU4RDIxMUUwNkREMjAwOUZGQkY0IC8qIEluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCODg1RThEMzExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCOEE2QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3JyZWN0aW9uUGFuZWxJbmZvLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4REJEQjQ3MTMwQjBGOEEwMEY1Q0RCMSAv
KiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCOERCREI0ODEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXRTZWxlY3Rpb25Db21tYW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBT
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTU1NDEsNyArMTU1NDMsNiBAQAogCQkJCTkzMzA5RDhDMDk5RTY0OTEw
MDU2RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmggKi8sCiAJCQkJOTMzMDlEOEQwOTlF
NjQ5MTAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCAqLywKIAkJCQk5MzMwOUQ4
RTA5OUU2NDkxMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQuaCAqLywKLQkJCQlCOEE2
QTZENDEyN0IzMzhEMDA4NjczQkEgLyogQ29ycmVjdGlvblBhbmVsSW5mby5oICovLAogCQkJCUQw
QjA1NTY3MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5jcHAgKi8sCiAJCQkJ
RDBCMDU1NjYwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmggKi8sCiAJCQkJ
MUM0QzhGNjMwQUQ4NjU1RDAwOTQ3NUNFIC8qIERlbGV0ZUJ1dHRvbi5jcHAgKi8sCkBAIC0xNTYy
Myw2ICsxNTYyNCw4IEBACiAJCQkJQTc4RkUxM0ExMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hl
Y2tlci5oICovLAogCQkJCUI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmNwcCAqLywKIAkJCQlCOERCREI0QTEzMEIwRjhBMDBGNUNEQjEgLyogU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oICovLAorCQkJCUE3MDA1Q0NBMTMzMEM0QkEwMDBDQzBC
QSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCAqLywKKwkJCQlBNzAwNUNDQjEz
MzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oICovLAogCQkJ
CTkzMzA5REMyMDk5RTY0OTEwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21tYW5kLmNwcCAqLywK
IAkJCQk5MzMwOURDMzA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5oICov
LAogCQkJCTkzMzA5REM0MDk5RTY0OTEwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29tbWFuZC5j
cHAgKi8sCkBAIC0xOTk3NCw3ICsxOTk3Nyw2IEBACiAJCQkJMzNEMDIxMkQxMzFEQjM3QjAwNDA5
MUE4IC8qIENvb2tpZVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFRTY4NDY0MTJEMjZF
MzgwMEU3OTQxNSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
NkZENDg4MEY2NzZFNTcwMDA5Mjg3MyAvKiBDb29yZGluYXRlcy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQjhBNkE2RDUxMjdCMzM4RDAwODY3M0JBIC8qIENvcnJlY3Rpb25QYW5lbEluZm8uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4MEU2RDA0MEExOTg5Q0EwMDdGQjhDNSAvKiBDb3VudGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzVFQjk3OTBFODIwNjkyMDBCMjU5NjUgLyogQ291bnRlckNvbnRl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCOTUxMEU4MjA1NkIwMEIyNTk2NSAvKiBDb3Vu
dGVyRGlyZWN0aXZlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjI4Nyw2ICsyMjI4OSw3IEBACiAJ
CQkJNzU0MTVCMDAxMjk1OEQ1RTAwM0FENjY5IC8qIFNwZWVjaElucHV0UmVzdWx0TGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc4RkUxM0MxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3MDA1Q0NEMTMzMEM0
QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzMwOUUxMjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4
dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNjA5OUU2NDkyMDA1NkU1
ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNTEwMiw2ICsyNTEwNSw3IEBACiAJCQkJNzU0MTVDMjkxMjlBOTkyMDAwM0FENjY5
IC8qIFNwZWVjaElucHV0UmVzdWx0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhGRTEz
QjEyMzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUE3MDA1Q0NDMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTExMDk5
RTY0OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzMzA5RTEzMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29tbWFuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxNTA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0
Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29ycmVjdGlvblBhbmVsSW5mby5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDc2MDk5ZTE2MmZhNzJmN2YxMzlkNjNmYzEzNzhjNGI0YjMzZjNmZTUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db3JyZWN0aW9uUGFuZWxJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvcnJlY3Rpb25QYW5lbEluZm9faAotI2RlZmluZSBD
b3JyZWN0aW9uUGFuZWxJbmZvX2gKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLS8vIFNvbWUgcGxhdGZvcm1zIHByb3ZpZGUg
VUkgZm9yIHN1Z2dlc3RpbmcgYXV0b2NvcnJlY3Rpb24uCi0jZGVmaW5lIFNVUFBPUlRfQVVUT0NP
UlJFQ1RJT05fUEFORUwgMQotLy8gU29tZSBwbGF0Zm9ybXMgdXNlIHNwZWxsaW5nIGFuZCBhdXRv
Y29ycmVjdGlvbiBtYXJrZXJzIHRvIHByb3ZpZGUgdmlzdWFsIGN1ZS4KLS8vIE9uIHN1Y2ggcGxh
dGZvcm0sIGlmIHdvcmQgd2l0aCBtYXJrZXIgaXMgZWRpdGVkLCB3ZSBuZWVkIHRvIHJlbW92ZSB0
aGUgbWFya2VyLgotI2RlZmluZSBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcgMQotI2Vsc2UK
LSNkZWZpbmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAwCi0jZGVmaW5lIFJFTU9WRV9N
QVJLRVJTX1VQT05fRURJVElORyAwCi0jZW5kaWYgLy8gI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLQotI2luY2x1ZGUgIlJhbmdl
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IENvcnJlY3Rpb25QYW5lbEluZm8g
ewotICAgIGVudW0gUGFuZWxUeXBlIHsKLSAgICAgICAgUGFuZWxUeXBlQ29ycmVjdGlvbiA9IDAs
Ci0gICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbiwKLSAgICAgICAgUGFuZWxUeXBlU3BlbGxpbmdT
dWdnZXN0aW9ucwotICAgIH07Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2Vk
OwotICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsKLSAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJp
bmc7Ci0gICAgUGFuZWxUeXBlIHBhbmVsVHlwZTsKLSAgICBib29sIGlzQWN0aXZlOwotfTsKLQot
ZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKLSAgICBSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKLSAgICBSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwKLSAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsQWNjZXB0ZWQKLX07Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBDb3JyZWN0aW9uUGFuZWxJbmZvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z0FsbEluT25lLmNwcAppbmRleCBlNGUwYmJiNmNmZTBjMDlhMDc1NmE5NjllZjY4M2Y1YTg0NzYy
M2ZhLi5mMzhjYmU2MmE2MGRlMTFjZDBmMWMxMTNhOTlmMGMyZDAwZWFlYjk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCkBAIC02Myw2ICs2Myw3IEBACiAj
aW5jbHVkZSA8U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFNtYXJ0UmVw
bGFjZS5jcHA+CiAjaW5jbHVkZSA8U21hcnRSZXBsYWNlQ0YuY3BwPgorI2luY2x1ZGUgPFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwPgogI2luY2x1ZGUgPFNwZWxsQ2hlY2tlci5jcHA+
CiAjaW5jbHVkZSA8U3BsaXRFbGVtZW50Q29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8U3BsaXRUZXh0
Tm9kZUNvbW1hbmQuY3BwPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDkwZWI4MjVj
MDQ3NDljNWQzZWNlYWQzMzJiMmMwMDVjN2I3YmZjMWIuLjc1NjA4MzUyNGM5MDg2ZDkyODIzMGYz
NzJlNTE5NDEyMDA5MTEwZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTM4LDYg
KzM4LDcgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNs
aXBib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRpb25FdmVudC5oIgorI2luY2x1ZGUg
IlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDcmVhdGVMaW5rQ29t
bWFuZC5oIgogI2luY2x1ZGUgIkRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJE
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmgiCkBAIC05Myw1MSArOTQsNiBAQCB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBVbmlj
b2RlOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3RlcihV
Q2hhciBjaGFyYWN0ZXIpCi17Ci0gICAgLy8gVGhlc2UgYXJlIGNoYXJhY3RlcnMgdGhhdCBjYW4g
YmVoYXZlIGFzIHdvcmQgYm91bmRhcmllcywgYnV0IGNhbiBhcHBlYXIgd2l0aGluIHdvcmRzLgot
ICAgIC8vIElmIHRoZXkgYXJlIGp1c3QgdHlwZWQsIGkuZS4gaWYgdGhleSBhcmUgaW1tZWRpYXRl
bHkgZm9sbG93ZWQgYnkgYSBjYXJldCwgd2Ugd2FudCB0byBkZWxheSB0ZXh0IGNoZWNraW5nIHVu
dGlsIHRoZSBuZXh0IGNoYXJhY3RlciBoYXMgYmVlbiB0eXBlZC4KLSAgICAvLyBGSVhNRTogdGhp
cyBpcyByZXF1aXJlZCB1bnRpbCA2ODUzMDI3IGlzIGZpeGVkIGFuZCB0ZXh0IGNoZWNraW5nIGNh
biBkbyB0aGlzIGZvciB1cy4KLSAgICByZXR1cm4gY2hhcmFjdGVyID09ICdcJycgfHwgY2hhcmFj
dGVyID09IHJpZ2h0U2luZ2xlUXVvdGF0aW9uTWFyayB8fCBjaGFyYWN0ZXIgPT0gaGVicmV3UHVu
Y3R1YXRpb25HZXJzaGF5aW07Ci19Ci0KLXN0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkKLXsKLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1h
cmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24sICgpKTsKLSAgICBpZiAobWFya2VyVHlwZXNGb3JB
dXRvQ29ycmVjdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29y
cmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICAgICAgbWFy
a2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rp
b25JbmRpY2F0b3IpOwotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVu
ZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0gICAgICAgIG1hcmtl
clR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVj
dGVkKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb247Ci19
Ci0KLXN0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJr
ZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3Rv
cjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQs
ICgpKTsKLSAgICBpZiAobWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50KTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5hcHBlbmQoRG9j
dW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotICAgIH0KLSAgICByZXR1cm4g
bWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudDsKLX0KLQotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJ
T05fUEFORUwKLXN0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29u
c3QgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFya2VycykKLXsKLSAgICBpZiAobWFya2Vycy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY29uc3QgU3RyaW5nJiBkZXNj
cmlwdGlvbiA9IG1hcmtlcnNbMF0uZGVzY3JpcHRpb247Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7
IGkgPCBtYXJrZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBt
YXJrZXJzW2ldLmRlc2NyaXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCiAvLyBXaGVuIGFuIGV2ZW50IGhhbmRsZXIg
aGFzIG1vdmVkIHRoZSBzZWxlY3Rpb24gb3V0c2lkZSBvZiBhIHRleHQgY29udHJvbAogLy8gd2Ug
c2hvdWxkIHVzZSB0aGUgdGFyZ2V0IGNvbnRyb2wncyBzZWxlY3Rpb24gZm9yIHRoaXMgZWRpdGlu
ZyBvcGVyYXRpb24uCiBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFu
ZChFdmVudCogZXZlbnQpCkBAIC01MzMsNDggKzQ4OSw3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikK
ICAgICBpZiAoY2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKCk7CiAgICAgbV9kZWxldGVCdXR0b25Db250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7Ci0KLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BB
TkVMCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKGZyYW1lKCktPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKSk7Ci0gICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRo
ZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVs
Ci0gICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0
aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQotICAgIC8vIHVuZGVzaXJlZCBhdXRvY29y
cmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNv
bmZpcm0gdGhhdAotICAgIC8vIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBv
ZiBhIHdvcmQuCi0gICAgaWYgKCFjdXJyZW50U2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCBjdXJyZW50
U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIHNlbGVjdGlvblBvc2l0aW9uID0gY3VycmVudFNlbGVjdGlvbi5zdGFydCgpOwot
ICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbk9mV29yZCA9IGVuZE9mV29yZChzZWxlY3Rp
b25Qb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwotICAgIGlmIChzZWxlY3Rpb25Qb3Np
dGlvbiAhPSBlbmRQb3NpdGlvbk9mV29yZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9zaXRp
b24gcG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5kZWVwRXF1aXZhbGVudCgpOwotICAgIGlm
IChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRh
aW5lck5vZGUoKTsKLSAgICBpbnQgZW5kT2Zmc2V0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJzID0gbm9kZS0+ZG9j
dW1lbnQoKS0+bWFya2VycygpLT5tYXJrZXJzRm9yTm9kZShub2RlKTsKLSAgICBzaXplX3QgbWFy
a2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1h
cmtlckNvdW50OyArK2kpIHsKLSAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9
IG1hcmtlcnNbaV07Ci0gICAgICAgIGlmICgoKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2Vy
OjpSZXBsYWNlbWVudCAmJiAhbWFya2VyLmRlc2NyaXB0aW9uLmlzTnVsbCgpKSB8fCBtYXJrZXIu
dHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpICYmIHN0YXRpY19jYXN0PGludD4obWFy
a2VyLmVuZE9mZnNldCkgPT0gZW5kT2Zmc2V0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+
IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZnJhbWUoKS0+ZG9jdW1lbnQoKSwgbm9kZSwgbWFy
a2VyLnN0YXJ0T2Zmc2V0LCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KTsKLSAgICAgICAgICAgIFN0
cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOwotICAgICAgICAg
ICAgaWYgKGN1cnJlbnRXb3JkLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gd29yZFJhbmdlOwotICAgICAgICAgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IGN1cnJlbnRXb3JkOwot
ICAgICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcpCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlbWVudFN0cmluZyA9IG1hcmtlci5kZXNjcmlwdGlvbjsKLSAgICAgICAgICAgICAgICAg
ICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGVSZXZlcnNpb24pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8vIFNVUFBPUlRfQVVUT0NPUlJF
Q1RJT05fUEFORUwKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKG9sZFNlbGVjdGlvbik7CiB9CiAKIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2Vk
Q29udGVudHMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQpAQCAtNTg1
LDkgKzUwMCw3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogICAgICAgICAgICAgbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKG5vZGUtPnJlbmRl
cmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCBmYWxzZSk7CiAgICAgfQogCi0j
aWYgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HCi0gICAgcmVtb3ZlU3BlbGxBbmRDb3JyZWN0
aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQodHJ1ZSk7Ci0jZW5kaWYKKyAgICB1cGRhdGVN
YXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyh0cnVlKTsKIAogICAgIGlmIChjbGllbnQo
KSkKICAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwpAQCAtMTA3
NCwxMCArOTg3LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRp
dENvbW1hbmQ+IGNtZCkKICAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMo
KmNtZCk7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oY21kLT5lbmRpbmdTZWxl
Y3Rpb24oKSk7CiAKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgaWYgKGNt
ZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY21kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlv
bkluZGljYXRvcigpKQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJl
bW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOwotI2VuZGlm
CisgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoY21kLmdl
dCgpKTsKIAogICAgIC8vIERvbid0IGNsZWFyIHRoZSB0eXBpbmcgc3R5bGUgd2l0aCB0aGlzIHNl
bGVjdGlvbiBjaGFuZ2UuICBXZSBkbyB0aG9zZSB0aGluZ3MgZWxzZXdoZXJlIGlmIG5lY2Vzc2Fy
eS4KICAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCBmYWxzZSwg
ZmFsc2UpOwpAQCAtMTEzNiwxNyArMTA0NiwxNCBAQCBFZGl0b3I6OkVkaXRvcihGcmFtZSogZnJh
bWUpCiAgICAgLy8gVGhpcyBpcyBvZmYgYnkgZGVmYXVsdCwgc2luY2UgbW9zdCBlZGl0b3JzIHdh
bnQgdGhpcyBiZWhhdmlvciAodGhpcyBtYXRjaGVzIElFIGJ1dCBub3QgRkYpLgogICAgICwgbV9z
aG91bGRTdHlsZVdpdGhDU1MoZmFsc2UpCiAgICAgLCBtX2tpbGxSaW5nKGFkb3B0UHRyKG5ldyBL
aWxsUmluZykpCi0gICAgLCBtX3NwZWxsQ2hlY2tlcihuZXcgU3BlbGxDaGVja2VyKGZyYW1lLCBm
cmFtZS0+cGFnZSgpID8gZnJhbWUtPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCktPnRleHRDaGVja2Vy
KCkgOiAwKSkKLSAgICAsIG1fY29ycmVjdGlvblBhbmVsVGltZXIodGhpcywgJkVkaXRvcjo6Y29y
cmVjdGlvblBhbmVsVGltZXJGaXJlZCkKKyAgICAsIG1fc3BlbGxDaGVja2VyKGFkb3B0UHRyKG5l
dyBTcGVsbENoZWNrZXIoZnJhbWUsIGZyYW1lLT5wYWdlKCkgPyBmcmFtZS0+cGFnZSgpLT5lZGl0
b3JDbGllbnQoKS0+dGV4dENoZWNrZXIoKSA6IDApKSkKKyAgICAsIG1fc3BlbGxpbmdDb3JyZWN0
b3IoYWRvcHRQdHIobmV3IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoZnJhbWUpKSkKICAg
ICAsIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZChmYWxzZSkKIHsKIH0KIAogRWRp
dG9yOjp+RWRpdG9yKCkKIHsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAg
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
SWdub3JlZCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBFZGl0b3I6OmNsZWFyKCkKQEAgLTExNzksMTAg
KzEwODYsOCBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50
KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbgogICAgIGlmICghc2hvdWxkSW5zZXJ0
VGV4dCh0ZXh0LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwogICAgIGlm
ICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIHJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtl
cnNGcm9tV29yZHNUb0JlRWRpdGVkKGlzU3BhY2VPck5ld2xpbmUodGV4dFswXSkpOwotI2VuZGlm
CisgICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRleHRbMF0p
OwogCiAgICAgYm9vbCBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJlY3Rpb24gPSBmYWxz
ZTsKICAgICBpZiAodGV4dCA9PSAiICIgfHwgdGV4dCA9PSAiXHQiKQpAQCAtMTE5MSw3ICsxMDk2
LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25z
dCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAodGV4dC5sZW5ndGgoKSA9PSAx
ICYmIGlzUHVuY3QodGV4dFswXSkgJiYgIWlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIodGV4
dFswXSkpCiAgICAgICAgIHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlvbiA9IHRy
dWU7CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCA9IHNob3VsZENvbnNpZGVy
QXBwbHlpbmdBdXRvY29ycmVjdGlvbiAmJiBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5n
SWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25XYXNBcHBsaWVkID0gc2hv
dWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0aW9uICYmIG1fc3BlbGxpbmdDb3JyZWN0b3It
PmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAKICAgICAv
LyBHZXQgdGhlIHNlbGVjdGlvbiB0byB1c2UgZm9yIHRoZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0
aGlzIGluc2VydFRleHQuCiAgICAgLy8gSWYgdGhlIGV2ZW50IGhhbmRsZXIgY2hhbmdlZCB0aGUg
c2VsZWN0aW9uLCB3ZSBtYXkgd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgc2VsZWN0aW9uCkBAIC0x
MjI3LDcgKzExMzIsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKCkKICAgICBpZiAo
IXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gYXBwbHlBdXRvY29y
cmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKKyAgICBib29sIGF1dG9jb3JyZWN0
aW9uSXNBcHBsaWVkID0gbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlBdXRvY29ycmVjdGlvbkJl
Zm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5l
QnJlYWsobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBp
bmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDApOwogICAgIHJldmVh
bFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCkBAIC0xMjQ1LDcgKzExNTAsNyBA
QCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAoIXNob3Vs
ZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gYXBwbHlBdXRvY29ycmVjdGlv
bkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKKyAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNB
cHBsaWVkID0gbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5
cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3IobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBU
eXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDApOwogICAgIHJl
dmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCkBAIC0xMjYyLDkgKzExNjcs
NyBAQCB2b2lkIEVkaXRvcjo6Y3V0KCkKICAgICB9CiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rp
b24gPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKHNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlv
bi5nZXQoKSkpIHsKLSNpZiBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcKLSAgICAgICAgcmVt
b3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQodHJ1ZSk7Ci0j
ZW5kaWYKKyAgICAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcodHJ1
ZSk7CiAgICAgICAgIGlmIChpc05vZGVJblRleHRGb3JtQ29udHJvbChtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgICAgIFBhc3RlYm9hcmQ6
OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlUGxhaW5UZXh0KHNlbGVjdGVkVGV4dCgpKTsKICAg
ICAgICAgZWxzZQpAQCAtMTMwMyw5ICsxMjA2LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlKCkKICAg
ICAgICAgcmV0dXJuOyAvLyBESFRNTCBkaWQgdGhlIHdob2xlIG9wZXJhdGlvbgogICAgIGlmICgh
Y2FuUGFzdGUoKSkKICAgICAgICAgcmV0dXJuOwotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJ
VElORwotICAgIHJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRp
dGVkKGZhbHNlKTsKLSNlbmRpZgorICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlF
ZGl0aW5nKGZhbHNlKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogbG9hZGVyID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKICAgICBsb2FkZXItPnNldEFs
bG93U3RhbGVSZXNvdXJjZXModHJ1ZSk7CiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQpAQCAtMTMyMSw5ICsxMjIyLDcgQEAgdm9pZCBFZGl0
b3I6OnBhc3RlQXNQbGFpblRleHQoKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFjYW5QYXN0
ZSgpKQogICAgICAgICByZXR1cm47Ci0jaWYgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HCi0g
ICAgcmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQoZmFs
c2UpOwotI2VuZGlmCisgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmco
ZmFsc2UpOwogICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkOjpn
ZW5lcmFsUGFzdGVib2FyZCgpKTsKIH0KIApAQCAtMTQ3Niw3ICsxMzc1LDcgQEAgdm9pZCBFZGl0
b3I6OnRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudCgpCiAKIGJvb2wgRWRpdG9yOjppc0F1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQogewotICAgIHJldHVybiBjbGllbnQo
KSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7Cisg
ICAgcmV0dXJuIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZCgpOwogfQogCiB2b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdD
b3JyZWN0aW9uKCkKQEAgLTIwNjgsMjMgKzE5NjcsOCBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0
aQogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBW
aXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uQWZ0ZXJUeXBpbmcpCiB7CiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSNpZiBT
VVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgLy8gQXBwbHkgcGVuZGluZyBhdXRvY29y
cmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBvZiBzcGVsbCBjaGVja2luZy4KLSAgICBib29sIGRv
QXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVj
dGlvbiA9IHNlbGVjdGlvbkFmdGVyVHlwaW5nLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVT
ZWxlY3Rpb24gY3VycmVudFdvcmQgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0YXJ0
T2ZTZWxlY3Rpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZTZWxl
Y3Rpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwotICAgIGlmIChjdXJyZW50V29yZC52aXNp
YmxlRW5kKCkgPT0gc3RhcnRPZlNlbGVjdGlvbikgewotICAgICAgICBTdHJpbmcgd29yZFRleHQg
PSBwbGFpblRleHQoY3VycmVudFdvcmQudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Ci0gICAg
ICAgIGlmICh3b3JkVGV4dC5sZW5ndGgoKSA+IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJh
Y3Rlcih3b3JkVGV4dFt3b3JkVGV4dC5sZW5ndGgoKSAtIDFdKSkKLSAgICAgICAgICAgIGRvQXBw
bHlDb3JyZWN0aW9uID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChkb0FwcGx5Q29ycmVjdGlvbikK
LSAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOwotICAg
IGVsc2UKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNs
ZWFyKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7Ci0j
ZW5kaWYKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseVBlbmRpbmdDb3JyZWN0aW9uKHNl
bGVjdGlvbkFmdGVyVHlwaW5nKTsKKwogICAgIFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoZWNr
aW5nT3B0aW9ucyA9IDA7CiAgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCkpCiAgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMgfD0gTWFya1NwZWxsaW5nOwpAQCAtMjEx
Myw3ICsxOTk3LDYgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1Rv
V29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICB9CiAKICNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsKICAgICBpZiAoIWlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjIyMiw3
ICsyMTA1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKIHsKICNpZiBVU0UoVU5JRklFRF9U
RVhUX0NIRUNLSU5HKQogICAgIC8vIFRoZXJlIHNob3VsZG4ndCBiZSBwZW5kaW5nIGF1dG9jb3Jy
ZWN0aW9uIGF0IHRoaXMgbW9tZW50LgotICAgIEFTU0VSVCghbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJhbmdlVG9CZVJlcGxhY2VkKTsKKyAgICBBU1NFUlQoIW1fc3BlbGxpbmdDb3JyZWN0b3ItPmhh
c1BlbmRpbmdDb3JyZWN0aW9uKCkpOwogCiAgICAgYm9vbCBzaG91bGRNYXJrU3BlbGxpbmcgPSB0
ZXh0Q2hlY2tpbmdPcHRpb25zICYgTWFya1NwZWxsaW5nOwogICAgIGJvb2wgc2hvdWxkTWFya0dy
YW1tYXIgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYgTWFya0dyYW1tYXI7CkBAIC0yMjgxLDExICsy
MTY0LDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5S
YW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dENoZWNraW5nVHlwZU1hc2tGb3IodGV4dENoZWNraW5n
T3B0aW9ucyksIHJlc3VsdHMpOwogICAgICAgICAKIAotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJ
T05fUEFORUwKICAgICAvLyBJZiB0aGlzIGNoZWNraW5nIGlzIG9ubHkgZm9yIHNob3dpbmcgY29y
cmVjdGlvbiBwYW5lbCwgd2Ugc2hvdWxkbid0IGJvdGhlciB0byBtYXJrIG1pc3NwZWxsaW5ncy4K
ICAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCkKICAgICAgICAgc2hvdWxkTWFya1Nw
ZWxsaW5nID0gZmFsc2U7Ci0jZW5kaWYKIAogICAgIGludCBvZmZzZXREdWVUb1JlcGxhY2VtZW50
ID0gMDsKIApAQCAtMjMwNCwxMCArMjE4NSw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiAg
ICAgICAgIGlmIChzaG91bGRNYXJrU3BlbGxpbmcgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVj
a2luZ1R5cGVTcGVsbGluZyAmJiByZXN1bHRMb2NhdGlvbiA+PSBzcGVsbGluZ1BhcmFncmFwaC5j
aGVja2luZ1N0YXJ0KCkgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPD0gc3BlbGxp
bmdSYW5nZUVuZE9mZnNldCAmJiAhcmVzdWx0RW5kc0F0QW1iaWd1b3VzQm91bmRhcnkpIHsKICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49IDAp
OwogICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gc3BlbGxpbmdQ
YXJhZ3JhcGguc3VicmFuZ2UocmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCk7Ci0jaWYgU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+aGFzTWFya2VycyhtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbikpCisgICAgICAgICAgICBpZiAoIW1f
c3BlbGxpbmdDb3JyZWN0b3ItPmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKG1pc3NwZWxsaW5nUmFu
Z2UpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmIC8vIFNVUFBPUlRfQVVUT0NP
UlJFQ1RJT05fUEFORUwKICAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKGVjKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICAgICAgfSBlbHNlIGlmIChz
aG91bGRNYXJrR3JhbW1hciAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1t
YXIgJiYgZ3JhbW1hclBhcmFncmFwaC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3VsdExvY2F0aW9u
LCByZXN1bHRMZW5ndGgpKSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAm
JiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKQEAgLTIzNTMsNyArMjIzMiw3IEBAIHZvaWQgRWRpdG9y
OjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09w
dGlvbnMgdGV4dENoCiAgICAgICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBt
YXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwogICAgICAgICAgICAgICAg
IGlmIChtYXJrZXJzLT5oYXNNYXJrZXJzKHJhbmdlVG9SZXBsYWNlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6UmVwbGFjZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRvUmVwbGFjZW1lbnQg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VG
b3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VUb1JlcGxhY2UuZ2V0KCksIHJlcGxhY2VkU3RyaW5n
LCByZXN1bHQtPnJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgbV9zcGVsbGluZ0Nv
cnJlY3Rvci0+cmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24o
cmFuZ2VUb1JlcGxhY2UuZ2V0KCksIHJlcGxhY2VkU3RyaW5nLCByZXN1bHQtPnJlcGxhY2VtZW50
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcmtlcnMtPmhhc01hcmtlcnMocmFuZ2VU
b1JlcGxhY2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24pKQogICAg
ICAgICAgICAgICAgICAgICBkb1JlcGxhY2VtZW50ID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBA
IC0yMzYxLDI0ICsyMjQwLDE3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiAgICAgICAgICAg
ICBpZiAoIShzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgfHwgc2hvdWxkU2hvd0NvcnJlY3Rpb25Q
YW5lbCkgfHwgIWRvUmVwbGFjZW1lbnQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSNp
ZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgICAgICAgICBpZiAoc2hvdWxkU2hv
d0NvcnJlY3Rpb25QYW5lbCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChTVVBQT1JUX0FVVE9D
T1JSRUNUSU9OX1BBTkVMKTsKKyAgICAgICAgICAgICAgICAvLyBzaG91bGRTaG93Q29ycmVjdGlv
blBhbmVsIGNhbiBiZSB0cnVlIG9ubHkgd2hlbiB0aGUgcGFuZWwgaXMgYXZhaWxhYmxlLgogICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA9PSBzcGVsbGlu
Z1JhbmdlRW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgc2hvdyB0
aGUgY29ycmVjdGlvbiBwYW5lbCBvbiB0aGUgbGFzdCB3b3JkLgotICAgICAgICAgICAgICAgICAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxh
Y2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHJhbmdlVG9SZXBsYWNlOwot
ICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcg
PSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSByZXN1bHQtPnJlcGxhY2Vt
ZW50OwotICAgICAgICAgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5l
bChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCByZXN1bHQtPnJlcGxhY2VtZW50LCBWZWN0b3I8
U3RyaW5nPigpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+c2hv
dyhyYW5nZVRvUmVwbGFjZSwgcmVzdWx0LT5yZXBsYWNlbWVudCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBJZiB0aGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBpZ25v
cmUgb3RoZXIgY29ycmVjdGlvbiBvciByZXBsYWNlbWVudC4KICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KLSNlbmRpZgogCiAgICAgICAgICAgICBpZiAoc2VsZWN0aW9u
VG9SZXBsYWNlICE9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSkgewogICAgICAg
ICAgICAgICAgIGlmICghbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlv
bihzZWxlY3Rpb25Ub1JlcGxhY2UpKQpAQCAtMjM5MiwxMiArMjI2NCw3IEBAIHZvaWQgRWRpdG9y
OjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09w
dGlvbnMgdGV4dENoCiAgICAgICAgICAgICAgICAgaWYgKGNhbkVkaXRSaWNobHkoKSkKICAgICAg
ICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKENyZWF0ZUxpbmtDb21tYW5kOjpjcmVhdGUobV9m
cmFtZS0+ZG9jdW1lbnQoKSwgcmVzdWx0LT5yZXBsYWNlbWVudCkpOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChjYW5FZGl0KCkgJiYgc2hvdWxkSW5zZXJ0VGV4dChyZXN1bHQtPnJlcGxhY2VtZW50
LCByYW5nZVRvUmVwbGFjZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKSB7Ci0gICAg
ICAgICAgICAgICAgYm9vbCB1c2VTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kID0gZmFsc2U7Ci0j
aWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pCi0gICAgICAgICAgICAgICAg
ICAgIHVzZVNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQgPSB0cnVlOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgaWYgKHVzZVNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQpCiAgICAgICAgICAgICAg
ICAgICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFu
Z2VUb1JlcGxhY2UsIHJlc3VsdC0+cmVwbGFjZW1lbnQpKTsKICAgICAgICAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlv
bihzZWxlY3Rpb25Ub1JlcGxhY2UpOwpAQCAtMjQxNywxOSArMjI4NCw5IEBAIHZvaWQgRWRpdG9y
OjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09w
dGlvbnMgdGV4dENoCiAgICAgICAgICAgICAgICAgICAgICAgICBhbWJpZ3VvdXNCb3VuZGFyeU9m
ZnNldCA9IHNlbGVjdGlvbk9mZnNldCAtIDE7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikg
ewotICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYSBtYXJrZXIgc28gdGhhdCBjb3JyZWN0aW9u
cyBjYW4gZWFzaWx5IGJlIHVuZG9uZSBhbmQgd29uJ3QgYmUgcmUtY29ycmVjdGVkLgotICAgICAg
ICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2UgPSBzcGVsbGluZ1BhcmFn
cmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5ndGgpOwotICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5
cGVzVG9BZGQgPSBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VkUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBt
YXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJU
eXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgpLCBtYXJrZXJU
eXBlLCByZXBsYWNlZFN0cmluZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2Uu
Z2V0KCksIG1hcmtlclR5cGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vIEFkZCBhIG1hcmtlciBzbyB0aGF0IGNvcnJlY3Rpb25z
IGNhbiBlYXNpbHkgYmUgdW5kb25lIGFuZCB3b24ndCBiZSByZS1jb3JyZWN0ZWQuCisgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikK
KyAgICAgICAgICAgICAgICAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+bWFya0NvcnJlY3Rpb24o
c3BlbGxpbmdQYXJhZ3JhcGguc3VicmFuZ2UocmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50TGVu
Z3RoKSwgcmVwbGFjZWRTdHJpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMjQ1NiwzMCArMjMxMyw2IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiAjZW5kaWYgLy8g
VVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKIH0KIAotdm9pZCBFZGl0b3I6OnJlY29yZFNwZWxs
Y2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVj
dGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikK
LXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgaWYgKCFyYW5nZU9mQ29y
cmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciog
bWFya2VycyA9IHJhbmdlT2ZDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBjb3JyZWN0ZWRPbmNlTWFy
a2VycyA9IG1hcmtlcnMtPm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVu
dE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7Ci0gICAgaWYgKGNvcnJlY3RlZE9uY2VNYXJrZXJzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIFNwZWxsaW5nIGNvcnJlY3Rl
ZCB0ZXh0IGhhcyBiZWVuIGVkaXRlZC4gV2UgbmVlZCB0byBkZXRlcm1pbmUgd2hldGhlciB1c2Vy
IGhhcyByZXZlcnRlZCBpdCB0byBvcmlnaW5hbCB0ZXh0IG9yCi0gICAgLy8gZWRpdGVkIGl0IHRv
IHNvbWV0aGluZyBlbHNlLCBhbmQgbm90aWZ5IHNwZWxsY2hlY2tlciBhY2NvcmRpbmdseS4KLSAg
ICBpZiAobWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb3JyZWN0ZWRPbmNlTWFya2Vy
cykgJiYgY29ycmVjdGVkT25jZU1hcmtlcnNbMF0uZGVzY3JpcHRpb24gPT0gY29ycmVjdGVkKQot
ICAgICAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGll
bnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7Ci0gICAg
ZWxzZQotICAgICAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0
b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uRWRpdGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwot
ICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFy
a2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRp
YWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJhbmdlT2ZD
b3JyZWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsKLSAgICBVTlVTRURfUEFS
QU0oY29ycmVjdGlvbik7Ci0jZW5kaWYKLX0KLQogdm9pZCBFZGl0b3I6OmNoYW5nZUJhY2tUb1Jl
cGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCiB7CiAjaWYgVVNFKFVO
SUZJRURfVEVYVF9DSEVDS0lORykKQEAgLTI0OTAsMTggKzIzMjMsMTIgQEAgdm9pZCBFZGl0b3I6
OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcp
CiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24uZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvblBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSNp
ZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgU3RyaW5nIHJlcGxhY2VtZW50ID0g
cGxhaW5UZXh0KHNlbGVjdGlvbi5nZXQoKSk7Ci0gICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCByZXBs
YWNlZFN0cmluZywgcmVwbGFjZW1lbnQpOwotI2VuZGlmCisgICAgbV9zcGVsbGluZ0NvcnJlY3Rv
ci0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKHJlcGxhY2VkU3RyaW5nLCBz
ZWxlY3Rpb24pOwogICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoc2VsZWN0aW9u
KTsKICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRTdHJpbmcsIGZhbHNlLCBm
YWxzZSk7CiAgICAgUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFu
Z2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVwbGFjZWRTdHJpbmcubGVuZ3RoKCkpOwog
ICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
LT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1l
bnQsIFN0cmluZygpKTsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgY2hh
bmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92
ZU1hcmtlcnMoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3Rl
ZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlcik7Ci0gICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpT
cGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSNlbmRpZgorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3It
Pm1hcmtSZXZlcnNlZChjaGFuZ2VkUmFuZ2UuZ2V0KCkpOwogI2Vsc2UKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOwpAQCAtMjUyNiwx
NDAgKzIzNTMsMTYgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWMKICNlbmRpZgogfQogCi12b2lk
IEVkaXRvcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxFZGl0b3I+KikKLXsKLSNp
ZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rp
c21pc3NlZEJ5RWRpdG9yID0gZmFsc2U7Ci0gICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucGFuZWxUeXBlKSB7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVD
b3JyZWN0aW9uOiB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKGZyYW1lKCkt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOwotICAgICAgICBWaXNp
YmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7
Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rp
b24ocCwgc3RhcnQpOwotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKE1hcmtTcGVsbGluZyB8IFNob3dDb3JyZWN0aW9uUGFuZWwsIGFkamFjZW50V29yZHMu
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgMCk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjogewotICAgICAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5k
aW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQot
ICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLCBWZWN0
b3I8U3RyaW5nPigpKTsKLSAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogewotICAgICAgICBpZiAo
cGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkg
IT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2lu
Z1BhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpLnBhcmFn
cmFwaFJhbmdlKCkuZ2V0KCkpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsK
LSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBwYXJhZ3JhcGhUZXh0LCBzdWdnZXN0aW9ucyk7Ci0gICAg
ICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5m
aXJzdCgpOwotICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7Ci0gICAgICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGlu
Z0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVs
SW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFj
ZWRTdHJpbmcsIHRvcFN1Z2dlc3Rpb24sIHN1Z2dlc3Rpb25zKTsKLSAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIEVkaXRvcjo6aGFuZGxlQ29ycmVjdGlvblBh
bmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKLXsKLSAgICBSYW5nZSogcmVwbGFj
ZWRSYW5nZSA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKTsK
LSAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSByZXBsYWNl
ZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBj
dXJyZW50V29yZCA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQuZ2V0KCkpOwotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUgYWJv
dXQgdG8gY29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5nIGFuZCBj
YWxsYmFjayBiZWluZyB0cmlnZ2VyZWQuCi0gICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1fY29y
cmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZUNvcnJlY3Rpb246Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgp
KSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcg
PSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtl
clR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcikKLSAgICAgICAgICAg
ICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJz
KCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3Jy
ZWN0aW9uLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
UmV2ZXJzaW9uOgotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxp
bmdTdWdnZXN0aW9uczoKLSAgICAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKLSAgICAg
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rp
b247Ci0gICAgICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JS
ZXBsYWNlbWVudCgpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLX0KLQotdm9p
ZCBFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlIHR5cGUpCi17Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAotICAg
IGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4zOwotICAgIGlm
IChpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAo
dHlwZSA9PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQotICAgICAg
ICAgICAgLy8gSWYgdHlwZSBpcyBQYW5lbFR5cGVSZXZlcnNpb24sIHRoZW4gdGhlIG5ldyByYW5n
ZSBoYXMgYmVlbiBzZXQuIFNvIHdlIHNob3VsZG4ndCBjbGVhciBpdC4KLSAgICAgICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotICAgICAgICBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlID0gdHlwZTsKLSAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7
Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBFZGl0b3I6OnN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpCit2b2lkIEVkaXRvcjo6dW5hcHBs
aWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29y
cmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9u
KQogewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBtX2NvcnJlY3Rpb25Q
YW5lbFRpbWVyLnN0b3AoKTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQuY2xlYXIoKTsKLSNlbmRpZgorICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRU
b1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29ycmVjdGVk
LCBjb3JyZWN0aW9uKTsKIH0KIAotdm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwo
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQor
dm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wg
ZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KQogewotI2lmIFNVUFBPUlRfQVVU
T0NPUlJFQ1RJT05fUEFORUwKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2
ZSkKKyAgICBpZiAoIW1fc3BlbGxpbmdDb3JyZWN0b3ItPnNob3VsZFJlbW92ZU1hcmtlcnNVcG9u
RWRpdGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlz
QWN0aXZlID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9y
ID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29y
cmVjdGlvblBhbmVsKHJlYXNvbkZvckRpc21pc3NpbmcpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0ocmVhc29uRm9yRGlzbWlzc2luZyk7Ci0jZW5kaWYKLX0KLQotU3RyaW5nIEVkaXRvcjo6ZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCByZWFzb25Gb3JEaXNtaXNzaW5nKQotewotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNl
OwotICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7Ci0gICAg
aWYgKCFjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBjbGll
bnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24ocmVhc29uRm9yRGlzbWlzc2luZyk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci0jZW5kaWYKLX0KIAotdm9pZCBFZGl0b3I6OnJlbW92ZVNwZWxsQW5kQ29ycmVj
dGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlv
bkF0V29yZEJvdW5kYXJ5KQotewogICAgIC8vIFdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBtYXJrZXJz
IGZyb20gYSB3b3JkIGlmIGFuIGVkaXRpbmcgY29tbWFuZCB3aWxsIGNoYW5nZSB0aGUgd29yZC4g
VGhpcyBjYW4gaGFwcGVuIGluIG9uZSBvZgogICAgIC8vIHNldmVyYWwgc2NlbmFyaW9zOgogICAg
IC8vIDEuIEluc2VydCBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZC4KQEAgLTI3MjUsMTAzICsyNDI4
LDYgQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29y
ZHNUb0JlRWRpdGVkKGJvb2wgZG9Ob3RSZW1vdmUKICAgICBkb2N1bWVudC0+bWFya2VycygpLT5j
bGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2Uod29yZFJhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogfQogCi12b2lkIEVkaXRvcjo6YXBwbHlD
b3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4mIG1hcmtlclR5cGVzVG9BZGQpCi17Ci0jaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5F
TAotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8UmFu
Z2U+IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOwotICAgIGlmIChlYykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29y
cmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhS
YW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBhcmFncmFwaChtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkpKTsKLQotICAgIC8v
IEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQgcmFuZ2UgcmFuZ2VUb0JlUmVwbGFjZWQsIHdl
IG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCByYW5nZS4KLSAgICAvLyBIb3dldmVyLCBvbmNl
IHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0aGUgdmFsdWUgb2YgcmFuZ2VUb0JlUmVwbGFj
ZWQgaXMgbm90IHZhbGlkIGFueW1vcmUuCi0gICAgLy8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0
aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJh
bmdlVG9CZVJlcGxhY2VkCi0gICAgLy8gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9m
IHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2UgdXNlIGNvcnJlY3Rpb25TdGFydE9mZnNldElu
UGFyYWdyYXBoCi0gICAgLy8gdG8gc3RvcmUgdGhpcyB2YWx1ZS4gSW4gb3JkZXIgdG8gb2J0YWlu
IHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSBhIHJhbmdlCi0gICAgLy8gd2hp
Y2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBwb3NpdGlv
biBvZiByYW5nZVRvQmVSZXBsYWNlZC4KLSAgICBSZWZQdHI8UmFuZ2U+IGNvcnJlY3Rpb25TdGFy
dE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VD
b250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgaWYgKGVj
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVRv
QmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3Rh
cnRQb3NpdGlvbigpOwotICAgIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5n
ZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbnRhaW5lck5vZGUo
KSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29tcHV0ZU9mZnNldEluQ29udGFp
bmVyTm9kZSgpLCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBU
YWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0aW9uIHNvIHRoYXQgd2UgY2Fu
IGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UuCi0gICAgaW50IGNv
cnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UuZ2V0KCkpOwotCi0gICAg
Ly8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3
YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFsIHJhbmdlIGFyb3VuZC4KLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9CZVJlcGxhY2VkLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZW1lbnRTdHJpbmcpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbi5nZXQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0
KCkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6
c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgY29ycmVj
dGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFj
ZW1lbnRTdHJpbmcubGVuZ3RoKCkpOwotICAgIFN0cmluZyBuZXdUZXh0ID0gcGxhaW5UZXh0KHJl
cGxhY2VtZW50UmFuZ2UuZ2V0KCkpOwotCi0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHJlcGxhY2Vt
ZW50IHN1Y2NlZWRlZC4KLSAgICBpZiAobmV3VGV4dCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZW1lbnRTdHJpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkt
PmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IG1hcmtlclR5cGVzVG9B
ZGQuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUgPSBtYXJrZXJUeXBlc1Rv
QWRkW2ldOwotICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb247Ci0gICAgICAgIGlmIChtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlICE9IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZVJldmVyc2lvbiAmJiAobWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQg
fHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCkpCi0gICAgICAg
ICAgICBkZXNjcmlwdGlvbiA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZzsK
LSAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtl
clR5cGUsIGRlc2NyaXB0aW9uKTsKLSAgICB9Ci0jZWxzZSAvLyBTVVBQT1JUX0FVVE9DT1JSRUNU
SU9OX1BBTkVMCi0gICAgVU5VU0VEX1BBUkFNKG1hcmtlclR5cGVzVG9BZGQpOwotI2VuZGlmIC8v
IFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLX0KLQotYm9vbCBFZGl0b3I6OmFwcGx5QXV0
b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKLXsKLSAgICBpZiAoIW1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCB8fCAhbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLmlzQWN0aXZlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVD
b3JyZWN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQb3NpdGlvbiBjYXJldFBv
c2l0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0KLSAg
ICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlv
bigpID09IGNhcmV0UG9zaXRpb24pIHsKLSAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVz
dWx0KGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0
aW9uUGFuZWxBY2NlcHRlZCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotICAgIAot
ICAgIC8vIFBlbmRpbmcgY29ycmVjdGlvbiBzaG91bGQgYWx3YXlzIGJlIHdoZXJlIGNhcmV0IGlz
LiBCdXQgaW4gY2FzZSB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgd2Ugc3RpbGwgd2FudCB0byBk
aXNtaXNzIHRoZSBwYW5lbCB3aXRob3V0IGFjY2VwdGluZyB0aGUgY29ycmVjdGlvbi4KLSAgICBB
U1NFUlQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlv
bigpID09IGNhcmV0UG9zaXRpb24pOwotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQs
IGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKLXsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9O
X1BBTkVMCi0gICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9y
Q2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwot
ICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwotICAgIG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkNsb3NlVHlwaW5nIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xlYXJUeXBpbmdT
dHlsZSB8IFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQo
KSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0KLSAgICBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIqIG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgbWFy
a2Vycy0+cmVtb3ZlTWFya2VycyhyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
IHwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIG1hcmtlcnMtPmFkZE1h
cmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICBtYXJr
ZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5n
RXhlbXB0aW9uKTsKLSNlbHNlIC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKLSAgICBV
TlVTRURfUEFSQU0oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQpOwotICAgIFVOVVNFRF9QQVJBTShjb3Jy
ZWN0ZWQpOwotICAgIFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsKLSNlbmRpZiAvLyBTVVBQT1JU
X0FVVE9DT1JSRUNUSU9OX1BBTkVMCi19Ci0KIFBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFu
Z2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCiB7CiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsKQEAgLTI5
NDQsNiArMjU1MCwyMiBAQCB2b2lkIEVkaXRvcjo6YWRkVG9LaWxsUmluZyhSYW5nZSogcmFuZ2Us
IGJvb2wgcHJlcGVuZCkKICAgICBtX3Nob3VsZFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSA9IGZh
bHNlOwogfQogCit2b2lkIEVkaXRvcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpCit7Cisg
ICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0
aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKTsKK30KKwordm9pZCBFZGl0b3I6Omhh
bmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit7Cisg
ICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvcnJl
Y3Rpb24pOworfQorCisKK3ZvaWQgRWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25v
cmVkKCkKK3sKKyAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5kaXNtaXNzKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKK30KKwogYm9vbCBFZGl0b3I6Omluc2lkZVZp
c2libGVBcmVhKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAobV9mcmFt
ZS0+ZXhjbHVkZUZyb21UZXh0U2VhcmNoKCkpCkBAIC0zNTE2LDE0ICszMTM4LDcgQEAgdm9pZCBF
ZGl0b3I6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCBmbGFnKQogCiB2
b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBvbGRTZWxlY3Rpb24sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNldFNlbGVjdGlvbk9wdGlv
bnMgb3B0aW9ucykKIHsKLSNpZiBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMCi0gICAgLy8g
TWFrZSBzdXJlIHRoZXJlJ3Mgbm8gcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2Fs
bCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcigpIGJlbG93LgotICAgIFZpc2libGVTZWxl
Y3Rpb24gY3VycmVudFNlbGVjdGlvbihmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkp
OwotICAgIGlmIChjdXJyZW50U2VsZWN0aW9uICE9IG9sZFNlbGVjdGlvbikgewotICAgICAgICBz
dG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKTsKLSAgICAgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Ci0gICAgfQotI2Vu
ZGlmIC8vIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICBtX3NwZWxsaW5nQ29ycmVj
dG9yLT5zdG9wUGVuZGluZ0NvcnJlY3Rpb24ob2xkU2VsZWN0aW9uKTsKIAogICAgIGJvb2wgY2xv
c2VUeXBpbmcgPSBvcHRpb25zICYgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmc7CiAg
ICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHRoaXMtPmlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CkBAIC0zNTQwLDEwICszMTU1LDggQEAgdm9pZCBF
ZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
b2xkU2VsZWN0aW9uLCBTZWwKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tT
cGVsbGluZ0FuZEdyYW1tYXIgPSB0cnVlOwotI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFO
RUwKICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgc3BlbGxpbmcgYW5kIGdyYW1tYXIgaWYgdGhlIGNo
YW5nZSBvZiBzZWxlY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IHNwZWxsaW5nIGNvcnJlY3Rpb24gaXRz
ZWxmLgogICAgICAgICBzaG91bGRDaGVja1NwZWxsaW5nQW5kR3JhbW1hciA9ICEob3B0aW9ucyAm
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0jZW5kaWYK
IAogICAgICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVjayBzcGVsbGluZyBlbHNld2hlcmUsIHNv
IGRvbid0IHJlZG8gaXQgaGVyZS4KICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNoYW5nZSBpbiBz
ZWxlY3Rpb24gcmVzdWx0aW5nIGZyb20gYSBkZWxldGUgb3BlcmF0aW9uLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmgKaW5kZXggZjlhZWM0MDY5MGEwMWYzYTM4Nzg1NWNhMjJhMDY1N2U3NDVhYjMxNS4u
OGI5MTE1MzFkMzE1MzMxMDkwMDNlZDk1ODVlNjUwM2U4MTU1ZjQzNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5oCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQ
b2xpY3kuaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkNvcnJlY3Rpb25QYW5lbElu
Zm8uaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIkVkaXRBY3Rpb24u
aCIKICNpbmNsdWRlICJFZGl0aW5nQmVoYXZpb3IuaCIKQEAgLTUxLDYgKzUwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBD
U1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ2xpcGJvYXJkOworY2xhc3MgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjsKIGNsYXNzIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI7CiBjbGFzcyBF
ZGl0Q29tbWFuZDsKIGNsYXNzIEVkaXRvckNsaWVudDsKQEAgLTMyNSwxMCArMzI1LDEwIEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgYWRkVG9LaWxsUmluZyhSYW5nZSosIGJvb2wgcHJlcGVuZCk7CiAK
LSAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlKTsKKyAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKICAgICAv
LyBJZiB1c2VyIGNvbmZpcm1lZCBhIGNvcnJlY3Rpb24gaW4gdGhlIGNvcnJlY3Rpb24gcGFuZWws
IGNvcnJlY3Rpb24gaGFzIG5vbi16ZXJvIGxlbmd0aCwgb3RoZXJ3aXNlIGl0IG1lYW5zIHRoYXQg
dXNlciBoYXMgZGlzbWlzc2VkIHRoZSBwYW5lbC4KICAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwotICAgIHZvaWQgZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKKyAgICB2
b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKIAogICAgIHZvaWQgcGFzdGVB
c0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc21hcnRSZXBsYWNl
LCBib29sIG1hdGNoU3R5bGUpOwogICAgIHZvaWQgcGFzdGVBc1BsYWluVGV4dChjb25zdCBTdHJp
bmcmLCBib29sIHNtYXJ0UmVwbGFjZSk7CkBAIC0zODQsNyArMzg0LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICAgICBib29sIHNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlLCBpbnQgZnJvbSwgaW50IGxlbmd0aCkgY29uc3Q7Ci0gICAgdm9pZCByZW1v
dmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChib29sIGRvTm90
UmVtb3ZlSWZTZWxlY3Rpb25BdFdvcmRCb3VuZGFyeSk7CisgICAgdm9pZCB1cGRhdGVNYXJrZXJz
Rm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIG9ubHlIYW5kbGVXb3Jkc0NvbnRhaW5pbmdT
ZWxlY3Rpb24pOwogCiBwcml2YXRlOgogICAgIEZyYW1lKiBtX2ZyYW1lOwpAQCAtMzk5LDEwICsz
OTksOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRTdGFydE5ld0tpbGxSaW5nU2VxdWVu
Y2U7CiAgICAgYm9vbCBtX3Nob3VsZFN0eWxlV2l0aENTUzsKICAgICBPd25QdHI8S2lsbFJpbmc+
IG1fa2lsbFJpbmc7Ci0gICAgQ29ycmVjdGlvblBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbElu
Zm87CiAgICAgT3duUHRyPFNwZWxsQ2hlY2tlcj4gbV9zcGVsbENoZWNrZXI7Ci0gICAgVGltZXI8
RWRpdG9yPiBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyOwotICAgIGJvb2wgbV9jb3JyZWN0aW9uUGFu
ZWxJc0Rpc21pc3NlZEJ5RWRpdG9yOworICAgIE93blB0cjxTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyPiBtX3NwZWxsaW5nQ29ycmVjdG9yOwogICAgIFZpc2libGVTZWxlY3Rpb24gbV9tYXJr
OwogICAgIGJvb2wgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkOwogCkBAIC00MTcs
NyArNDE1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGlu
Z09wZXJhdGlvbigpOwogICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRDaGVj
a2luZ1R5cGVNYXNrRm9yKFRleHRDaGVja2luZ09wdGlvbnMpOwotICAgIHZvaWQgcmVjb3JkU3Bl
bGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqLCBjb25zdCBTdHJp
bmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKIAogICAgIHZvaWQgc2Vs
ZWN0Q29tcG9zaXRpb24oKTsKICAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJp
bmcmLCBib29sIHByZXNlcnZlU2VsZWN0aW9uKTsKQEAgLTQyOCwxMCArNDI1LDEwIEBAIHByaXZh
dGU6CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbmV4dFZpc2libGVSYW5nZShSYW5nZSosIGNvbnN0
IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKIAogICAgIHZvaWQgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJD
b21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5
cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKTsKLSAgICB2b2lkIGNvcnJlY3Rpb25QYW5lbFRp
bWVyRmlyZWQoVGltZXI8RWRpdG9yPiopOworCiAgICAgTm9kZSogZmluZEV2ZW50VGFyZ2V0RnJv
bVNlbGVjdGlvbigpIGNvbnN0OwogICAgIHZvaWQgc3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7
Ci0gICAgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWwpOworCiAgICAgdm9pZCBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8o
Y29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNUb0Fk
ZCk7CiAgICAgLy8gUmV0dXJuIHRydWUgaWYgY29ycmVjdGlvbiB3YXMgYXBwbGllZCwgZmFsc2Ug
b3RoZXJ3aXNlLgogICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBw
cm9wcmlhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGFmZTc0YThkOTg0Y2NlMTI3ODI5YjI1Y2U0NGU1ODkz
OTk3YzkyOTAuLmYwMjk3YzE1NDhkMDllYzE4MWZjNWIyMTE5MWU3NTk5Y2I5MDg3N2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCIKIAotI2luY2x1ZGUgIkNvcnJlY3Rpb25QYW5lbElu
Zm8uaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzNzdmZThh
NjIzODMzZWNkMTlmZjNhMWE4NTdjMzM5YjUzZTM3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0w
LDAgKzEsNDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKKwor
I2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkVkaXRDb21t
YW5kLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tp
bmdIZWxwZXIuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJodG1sZWRp
dGluZy5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIK
KworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBu
YW1lc3BhY2UgV1RGOworCisjaWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAorCitzdGF0
aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNG
b3JBdXRvY29ycmVjdGlvbigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLCAo
KSk7CisgICAgaWYgKG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uaXNFbXB0eSgpKSB7Cisg
ICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2Vy
OjpSZXBsYWNlbWVudCk7CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBw
ZW5kKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyAgICAgICAgbWFya2Vy
VHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tp
bmdFeGVtcHRpb24pOworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVu
ZChEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CisgICAgfQorICAgIHJldHVybiBtYXJr
ZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uOworfQorCitzdGF0aWMgY29uc3QgVmVjdG9yPERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LCAoKSk7CisgICAgaWYgKG1hcmtlclR5cGVzRm9y
UmVwbGFjZW1lbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1l
bnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgICAgIG1hcmtlclR5
cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhl
bXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7Cit9
CisKK3N0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVj
dG9yPERvY3VtZW50TWFya2VyPiYgbWFya2VycykKK3sKKyAgICBpZiAobWFya2Vycy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlv
biA9IG1hcmtlcnNbMF0uZGVzY3JpcHRpb247CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBt
YXJrZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBtYXJrZXJz
W2ldLmRlc2NyaXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcihGcmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQor
ICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAmU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCkKK3sKK30KKworU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6flNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoKQoreworICAg
IGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworfQor
Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0YXJ0Q29ycmVjdGlvblBhbmVs
VGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUpCit7CisgICAgY29uc3Qg
ZG91YmxlIGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwgPSAwLjM7CisgICAgaWYgKCFpc0F1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gSWYgdHlwZSBpcyBQYW5lbFR5cGVSZXZlcnNpb24sIHRoZW4gdGhlIG5ldyByYW5nZSBo
YXMgYmVlbiBzZXQuIFNvIHdlIHNob3VsZG4ndCBjbGVhciBpdC4KKyAgICBpZiAodHlwZSA9PSBD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQorICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKKyAgICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucGFuZWxUeXBlID0gdHlwZTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVy
LnN0YXJ0T25lU2hvdChjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsKTsKK30KKwordm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKQor
eworICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RvcCgpOworICAgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworfQorCit2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24pCit7CisgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gcGVu
ZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hcigpIGJlbG93LgorICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbiht
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAgIGlmIChjdXJyZW50U2VsZWN0
aW9uID09IG9sZFNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RvcENvcnJlY3Rp
b25QYW5lbFRpbWVyKCk7CisgICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsSWdub3JlZCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25B
ZnRlclR5cGluZykKK3sKKyAgICAvLyBBcHBseSBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9y
ZSBuZXh0IHJvdW5kIG9mIHNwZWxsIGNoZWNraW5nLgorICAgIGJvb2wgZG9BcHBseUNvcnJlY3Rp
b24gPSB0cnVlOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gc2VsZWN0
aW9uQWZ0ZXJUeXBpbmcudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJy
ZW50V29yZCA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQoc3RhcnRPZlNlbGVjdGlvbiwg
TGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQoc3RhcnRPZlNlbGVjdGlvbiwgUmlnaHRX
b3JkSWZPbkJvdW5kYXJ5KSk7CisgICAgaWYgKGN1cnJlbnRXb3JkLnZpc2libGVFbmQoKSA9PSBz
dGFydE9mU2VsZWN0aW9uKSB7CisgICAgICAgIFN0cmluZyB3b3JkVGV4dCA9IHBsYWluVGV4dChj
dXJyZW50V29yZC50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgaWYgKHdvcmRU
ZXh0Lmxlbmd0aCgpID4gMCAmJiBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKHdvcmRUZXh0
W3dvcmRUZXh0Lmxlbmd0aCgpIC0gMV0pKQorICAgICAgICAgICAgZG9BcHBseUNvcnJlY3Rpb24g
PSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGRvQXBwbHlDb3JyZWN0aW9uKQorICAgICAgICBoYW5k
bGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbEFjY2VwdGVkKSk7IAorICAgIGVsc2UKKyAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK2Jvb2wgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQ7Cit9CisKK2Jv
b2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQo
UGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
IW1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+aGFzTWFya2VycyhtaXNzcGVsbGluZ1Jh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisK
K3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdyhQYXNzUmVmUHRyPFJhbmdl
PiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKK3sKKyAgICBGbG9h
dFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxhY2UuZ2V0
KCkpOworICAgIGlmIChib3VuZGluZ0JveC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VU
b1JlcGxhY2UuZ2V0KCkpOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCA9IHJhbmdlVG9SZXBsYWNlOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
bWVudFN0cmluZyA9IHJlcGxhY2VtZW50OworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0Fj
dGl2ZSA9IHRydWU7CisgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnQsIFZlY3RvcjxTdHJpbmc+KCkpOworfQorCit2
b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigp
Cit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKKyAgICBk
aXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpOworfQor
Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3MoUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQoreworICAgIGlmICgh
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1cm47CisgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAg
IGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJlYXNvbkZvckRpc21pc3NpbmcpOwor
fQorCitTdHJpbmcgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlzc1Nvb24oUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQorewor
ICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Cisg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKKyAgICBpZiAo
IWNsaWVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGNsaWVudCgp
LT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihyZWFzb25Gb3JEaXNtaXNzaW5nKTsKK30KKwor
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseUNvcnJlY3Rpb25QYW5lbElu
Zm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNU
b0FkZCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVm
UHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBpZiAo
ZWMpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFp
bmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICBzZXRFbmQocGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpKSk7CisK
KyAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJhbmdlVG9CZVJlcGxh
Y2VkLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCisgICAgLy8gSG93ZXZl
ciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9mIHJhbmdlVG9C
ZVJlcGxhY2VkIGlzIG5vdCB2YWxpZCBhbnltb3JlLgorICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJy
eSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFydCBwb3NpdGlv
biBvZiByYW5nZVRvQmVSZXBsYWNlZAorICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3Np
dGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRP
ZmZzZXRJblBhcmFncmFwaAorICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRv
IG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQorICAg
IC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQuCisgICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0
aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQo
KSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBw
YXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOworICAg
IGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9m
UmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFw
aEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb250YWlu
ZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1dGVPZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlvbiBzbyB0aGF0
IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgorICAg
IGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLmdldCgpKTsK
KworICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhv
ZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCisgICAgUmVmUHRy
PFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7CisgICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS5zdGFydCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRl
cmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCks
IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoLCAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgbmV3VGV4dCA9IHBsYWlu
VGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiBy
ZXBsYWNlbWVudCBzdWNjZWVkZWQuCisgICAgaWYgKG5ld1RleHQgIT0gbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRh
aW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgc2l6ZV90IHNpemUgPSBtYXJrZXJU
eXBlc1RvQWRkLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2Vy
VHlwZXNUb0FkZFtpXTsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOworICAgICAgICBpZiAo
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGVSZXZlcnNpb24gJiYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxh
Y2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpKQor
ICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmc7CisgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgp
LCBtYXJrZXJUeXBlLCBkZXNjcmlwdGlvbik7CisgICAgfQorfQorCitib29sIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCB8fCAhbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3Jy
ZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpLnN0YXJ0KCk7CisKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKKyAgICAg
ICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9IAorICAgIAorICAgIC8vIFBlbmRpbmcgY29ycmVjdGlvbiBzaG91bGQgYWx3YXlzIGJlIHdo
ZXJlIGNhcmV0IGlzLiBCdXQgaW4gY2FzZSB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgd2Ugc3Rp
bGwgd2FudCB0byBkaXNtaXNzIHRoZSBwYW5lbCB3aXRob3V0IGFjY2VwdGluZyB0aGUgY29ycmVj
dGlvbi4KKyAgICBBU1NFUlQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pOworICAgIGRpc21pc3MoUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRT
cGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0
ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit7
CisgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50
OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOworICAgIG1f
ZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOworICAgIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkNsb3NlVHlwaW5nIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xlYXJUeXBpbmdTdHlsZSB8
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7CisgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKS5lbmQoKSk7CisKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIq
IG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgbWFya2Vycy0+
cmVtb3ZlTWFya2VycyhyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nIHwgRG9j
dW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihy
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICBtYXJrZXJzLT5h
ZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0
aW9uKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9u
UGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikKK3sK
KyAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKKyAgICBz
d2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKKyAgICBjYXNlIENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKKyAgICAgICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24u
YWZmaW5pdHkoKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3Rh
cnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGph
Y2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CisgICAgICAgIG1fZnJhbWUt
PmVkaXRvcigpLT5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKEVkaXRv
cjo6TWFya1NwZWxsaW5nIHwgRWRpdG9yOjpTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2VudFdv
cmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOworICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsKKyAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIEZsb2F0UmVjdCBi
b3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHko
KSkKKyAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlv
blBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZywg
VmVjdG9yPFN0cmluZz4oKSk7CisgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKKyAgICAgICAg
aWYgKHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0
KCkpICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKS5w
YXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlv
bnM7CisgICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMpOwor
ICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIFN0cmluZyB0b3BTdWdnZXN0aW9uID0gc3VnZ2VzdGlv
bnMuZmlyc3QoKTsKKyAgICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDApOworICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOworICAgICAgICBGbG9hdFJlY3QgYm91
bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkp
CisgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VkU3RyaW5nLCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7CisgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKK3sK
KyAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC5nZXQoKTsKKyAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9mcmFtZS0+ZG9j
dW1lbnQoKSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0
aGUgd29yZCB3ZSBhcmUgYWJvdXQgdG8gY29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4g
dGltZXIgZmlyaW5nIGFuZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQuCisgICAgaWYgKGN1cnJl
bnRXb3JkICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisK
KyAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKKyAgICBjYXNl
IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246CisgICAgICAgIGlmIChj
b3JyZWN0aW9uLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOworICAgICAgICAgICAgYXBwbHlDb3JyZWN0
aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoIW1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcikKKyAgICAgICAg
ICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMo
KS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJl
Y3Rpb24sIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgor
ICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9u
czoKKyAgICAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1fY29y
cmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247CisgICAgICAg
ICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgp
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKworYm9vbCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQo
KQoreworICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGlu
Z0NvcnJlY3Rpb25FbmFibGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjp3aW5kb3dSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAor
eworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICByZXR1cm4gdmll
dyA/IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coSW50UmVjdChyYW5nZS0+Ym91bmRpbmdSZWN0KCkp
KSA6IEZsb2F0UmVjdCgpOworfSAgICAgICAgCisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBvbGRTZWxlY3Rpb24pCit7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9u
KG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgLy8gV2hlbiB1c2VyIG1v
dmVzIGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdl
IHNob3cgdGhlIHBhbmVsCisgICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJl
Y3Rpb24gd29yZCBzbyB0aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQorICAgIC8vIHVu
ZGVzaXJlZCBhdXRvY29ycmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0
aW1lciBvbmNlIHdlIGNvbmZpcm0gdGhhdAorICAgIC8vIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24g
aXMgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCisgICAgaWYgKCFjdXJyZW50U2VsZWN0aW9uLmlzQ2Fy
ZXQoKSB8fCBjdXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblBvc2l0aW9uID0gY3VycmVudFNlbGVj
dGlvbi5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbk9mV29yZCA9IGVu
ZE9mV29yZChzZWxlY3Rpb25Qb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworICAgIGlm
IChzZWxlY3Rpb25Qb3NpdGlvbiAhPSBlbmRQb3NpdGlvbk9mV29yZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5kZWVwRXF1aXZh
bGVudCgpOworICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0
aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9kZSogbm9kZSA9
IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0gcG9zaXRpb24u
b2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiBtYXJr
ZXJzID0gbm9kZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5tYXJrZXJzRm9yTm9kZShub2RlKTsK
KyAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgRG9jdW1lbnRN
YXJrZXImIG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGlmICghc2hvdWxkU3RhcnRUaW1l
Rm9yKG1hcmtlciwgZW5kT2Zmc2V0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBS
ZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQo
KSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0LCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KTsKKyAg
ICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7Cisg
ICAgICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSB3b3Jk
UmFuZ2U7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IGN1
cnJlbnRXb3JkOworICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKQorICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBt
YXJrZXIuZGVzY3JpcHRpb247CisgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVy
KENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbik7CisgICAgICAgIH0KKwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY29t
bWFuZCkKK3sKKyAgICBpZiAoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY29tbWFu
ZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKKyAgICAgICAgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpD
b3JyZWN0aW9uSW5kaWNhdG9yKTsKK30KKworRWRpdG9yQ2xpZW50KiBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpjbGllbnQoKQoreworICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCkgPyBt
X2ZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogMDsKK30KKworVGV4dENoZWNrZXJDbGll
bnQqIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKK3sKKyAgICBp
ZiAoRWRpdG9yQ2xpZW50KiBvd25lciA9IGNsaWVudCgpKQorICAgICAgICByZXR1cm4gb3duZXIt
PnRleHRDaGVja2VyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0
IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcp
Cit7CisgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xp
ZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRT
dHJpbmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlKQoreworICAgIHJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxh
Y2VtZW50UmFuZ2UuZ2V0KCkpKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjptYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKQoreworICAg
IGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5y
ZW1vdmVNYXJrZXJzKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3Jy
ZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBp
bmdNYXJrZXIpOworICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5n
ZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKK3sKKyAgICBWZWN0b3I8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzVG9BZGQgPSBtYXJrZXJUeXBlc0ZvckF1dG9j
b3JyZWN0aW9uKCk7CisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVw
bGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7ICsraSkgewor
ICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2VyVHlw
ZXNUb0FkZFtpXTsKKyAgICAgICAgaWYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQp
CisgICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgbWFy
a2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtYXJr
ZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSk7CisgICAgfQor
fQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tl
clJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlvbiwg
Y29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKK3sKKyAg
ICBpZiAoIXJhbmdlT2ZDb3JyZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmFuZ2VPZkNvcnJlY3Rpb24tPnN0YXJ0Q29udGFp
bmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+
IGNvcnJlY3RlZE9uY2VNYXJrZXJzID0gbWFya2Vycy0+bWFya2Vyc0luUmFuZ2UocmFuZ2VPZkNv
cnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKKyAgICBpZiAoY29ycmVj
dGVkT25jZU1hcmtlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8g
U3BlbGxpbmcgY29ycmVjdGVkIHRleHQgaGFzIGJlZW4gZWRpdGVkLiBXZSBuZWVkIHRvIGRldGVy
bWluZSB3aGV0aGVyIHVzZXIgaGFzIHJldmVydGVkIGl0IHRvIG9yaWdpbmFsIHRleHQgb3IKKyAg
ICAvLyBlZGl0ZWQgaXQgdG8gc29tZXRoaW5nIGVsc2UsIGFuZCBub3RpZnkgc3BlbGxjaGVja2Vy
IGFjY29yZGluZ2x5LgorICAgIGlmIChtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNv
cnJlY3RlZE9uY2VNYXJrZXJzKSAmJiBjb3JyZWN0ZWRPbmNlTWFya2Vyc1swXS5kZXNjcmlwdGlv
biA9PSBjb3JyZWN0ZWQpCisgICAgICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBj
b3JyZWN0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25FZGl0ZWQsIGNvcnJlY3Rl
ZCwgY29ycmVjdGlvbik7CisgICAgbWFya2Vycy0+cmVtb3ZlTWFya2VycyhyYW5nZU9mQ29ycmVj
dGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworfQorCisjZW5kaWYKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOTFhYzE3ZjI3Mjgz
YjM1MjhiYTE0Y2U2YzgwZWQyYTBlMTZiYmRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgKQEAgLTAsMCArMSwx
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCisj
ZGVmaW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAorCisjaWYgUExBVEZPUk0oTUFD
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorLy8gU29tZSBw
bGF0Zm9ybXMgcHJvdmlkZSBVSSBmb3Igc3VnZ2VzdGluZyBhdXRvY29ycmVjdGlvbi4KKyNkZWZp
bmUgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTCAxCisvLyBTb21lIHBsYXRmb3JtcyB1c2Ug
c3BlbGxpbmcgYW5kIGF1dG9jb3JyZWN0aW9uIG1hcmtlcnMgdG8gcHJvdmlkZSB2aXN1YWwgY3Vl
LgorLy8gT24gc3VjaCBwbGF0Zm9ybSwgaWYgd29yZCB3aXRoIG1hcmtlciBpcyBlZGl0ZWQsIHdl
IG5lZWQgdG8gcmVtb3ZlIHRoZSBtYXJrZXIuCisjZGVmaW5lIFJFTU9WRV9NQVJLRVJTX1VQT05f
RURJVElORyAxCisjZWxzZQorI2RlZmluZSBTVVBQT1JUX0FVVE9DT1JSRUNUSU9OX1BBTkVMIDAK
KyNkZWZpbmUgUkVNT1ZFX01BUktFUlNfVVBPTl9FRElUSU5HIDAKKyNlbmRpZiAvLyAjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQor
CisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgor
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiVGlt
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBFZGl0b3JDbGllbnQ7CitjbGFzcyBSYW5nZTsKK2NsYXNzIFRleHRDaGVja2Vy
Q2xpZW50OworY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKKworc3RydWN0IENvcnJlY3Rpb25QYW5l
bEluZm8geworICAgIGVudW0gUGFuZWxUeXBlIHsKKyAgICAgICAgUGFuZWxUeXBlQ29ycmVjdGlv
biA9IDAsCisgICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbiwKKyAgICAgICAgUGFuZWxUeXBlU3Bl
bGxpbmdTdWdnZXN0aW9ucworICAgIH07CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJl
cGxhY2VkOworICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsKKyAgICBTdHJpbmcgcmVwbGFjZW1l
bnRTdHJpbmc7CisgICAgUGFuZWxUeXBlIHBhbmVsVHlwZTsKKyAgICBib29sIGlzQWN0aXZlOwor
fTsKKworZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKKyAgICBSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKKyAgICBSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwKKyAgICBSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQKK307CisKKyNpZiBTVVBQT1JUX0FVVE9DT1JSRUNU
SU9OX1BBTkVMCisjZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgOworI2Vsc2UK
KyNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBmdW5jdGlvbkJvZHkKKyNlbmRp
ZgorCitjbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKikgVU5MRVNTX0VOQUJMRUQoe30pCisg
ICAgflNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7fSkKKwor
ICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGUpIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIHZvaWQgc3RvcENvcnJlY3Rpb25QYW5l
bFRpbWVyKCkgVU5MRVNTX0VOQUJMRUQoe30pCisKKyAgICB2b2lkIGRpc21pc3MoUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgVU5MRVNTX0VOQUJMRUQoe30pCisgICAgU3RyaW5n
IGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVTU19F
TkFCTEVEKHsgcmV0dXJuIFN0cmluZygpOyB9KQorICAgIHZvaWQgc2hvdyhQYXNzUmVmUHRyPFJh
bmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkgVU5MRVNTX0VO
QUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb1JlcGxhY2UpOyBVTlVTRURfUEFSQU0ocmVwbGFj
ZW1lbnQpOyB9KQorCisgICAgdm9pZCBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVj
dG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYpIFVOTEVTU19FTkFCTEVEKHt9KQorICAg
IC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rpb24gd2FzIGFwcGxpZWQsIGZhbHNlIG90aGVyd2lz
ZS4KKyAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRl
KCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCisKKyAgICB2b2lkIHJlc3BvbmRU
b1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3Qg
U3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJM
RUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9
KQorICAgIHZvaWQgcmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFu
ZD4pIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsg
VU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCisKKyAgICB2b2lkIHN0b3BQZW5kaW5nQ29y
cmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFC
TEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCisgICAgdm9pZCBhcHBseVBlbmRp
bmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5n
KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7IH0p
CisKKyAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNv
cnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQor
ICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkgVU5MRVNTX0VOQUJMRUQoe30pCisKKyAg
ICBib29sIGhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyByZXR1
cm4gZmFsc2U7IH0pCisgICAgYm9vbCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRy
PFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9Q
QVJBTShtaXNzcGVsbGluZ1JhbmdlKTsgcmV0dXJuIHRydWU7IH0pCisgICAgYm9vbCBpc0F1dG9t
YXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBm
YWxzZTsgfSkKKyAgICBib29sIHNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpIHsgcmV0
dXJuIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORzsgfQorCisgICAgdm9pZCBjb3JyZWN0aW9u
UGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikgVU5M
RVNTX0VOQUJMRUQoe30pCisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2
ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxSYW5nZT4gcmVw
bGFjZW1lbnRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJp
bmcpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnRSYW5nZSk7IH0pCisgICAgdm9pZCBtYXJrUmV2
ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVO
VVNFRF9QQVJBTShjaGFuZ2VkUmFuZ2UpOyB9KQorICAgIHZvaWQgbWFya0NvcnJlY3Rpb24oUGFz
c1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVOVVNFRF9Q
QVJBTShyZXBsYWNlZFN0cmluZyk7IH0pCisgICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNw
b25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0
IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19FTkFC
TEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlT2ZDb3JyZWN0aW9uKTsgVU5VU0VEX1BBUkFNKGNvcnJl
Y3RlZCk7IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKKworI2lmIFNVUFBPUlRfQVVUT0NP
UlJFQ1RJT05fUEFORUwKK3ByaXZhdGU6CisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudFN0cmluZyk7CisKKyAgICBib29sIHNob3VsZFN0YXJ0VGltZUZvcihjb25z
dCBEb2N1bWVudE1hcmtlciYgbWFya2VyLCBpbnQgZW5kT2Zmc2V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICgoKG1hcmtlci50eXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCAmJiAhbWFya2VyLmRlc2NyaXB0aW9uLmlzTnVsbCgpKSAKKyAgICAgICAgICAgICAgICAgfHwg
bWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0aWNfY2FzdDxp
bnQ+KG1hcmtlci5lbmRPZmZzZXQpID09IGVuZE9mZnNldCk7CisgICAgfQorCisgICAgRWRpdG9y
Q2xpZW50KiBjbGllbnQoKTsKKyAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKTsK
KyAgICBGbG9hdFJlY3Qgd2luZG93UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7CisK
KyAgICBFZGl0b3JDbGllbnQqIG1fY2xpZW50OworICAgIEZyYW1lKiBtX2ZyYW1lOworCisgICAg
VGltZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1l
cjsKKyAgICBDb3JyZWN0aW9uUGFuZWxJbmZvIG1fY29ycmVjdGlvblBhbmVsSW5mbzsKKyAgICBi
b29sIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcjsKKyNlbmRpZgorfTsKKwor
I3VuZGVmIFVOTEVTU19FTkFCTEVECisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggZGYxNTBlZTAwMzk1MDhkNjM0MjdhY2I0ZWNiY2Q1MGZl
NmY0MjYwOC4uYjU0OGI5MTMyZGQ3YmNmMTkwZWY4Y2NmNGE5MWE1NDQ2OWE2ZmVlZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0xNTUsMTEgKzE1NSw5IEBA
IHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IFN0cmluZyYgdGV4dCwgVHlwaW5nQ29tCiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKIAotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJ
VElORwogICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIGRvY3VtZW50LT5mcmFtZSgp
LT5lZGl0b3IoKS0+cmVtb3ZlU3BlbGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVF
ZGl0ZWQoaXNTcGFjZU9yTmV3bGluZSh0ZXh0LmNoYXJhY3RlcnMoKVswXSkpOwotI2VuZGlmCi0K
KyAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT51cGRhdGVNYXJrZXJzRm9yV29y
ZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHQuY2hhcmFjdGVycygpWzBd
KSk7CisgICAgCiAgICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOwogfQogCkBAIC0zNDQsMTIg
KzM0Miw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5n
KEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIg
PSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBpZiAo
cDEgIT0gcDIpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSk7Ci0j
aWYgU1VQUE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgICAgICBlbHNlIGlmIChjb21tYW5k
VHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAgICAgICAgZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShjb21tYW5kVHlwZSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCkt
PmVkaXRvcigpLT5zdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CiAgICAgfQogfQogCkBAIC00
NjcsOSArNDYxLDggQEAgYm9vbCBUeXBpbmdDb21tYW5kOjptYWtlRWRpdGFibGVSb290RW1wdHko
KQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05f
RURJVElORwotICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVsbEFu
ZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAg
ICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZm
ZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25U
b0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKIApAQCAt
NTY2LDkgKzU1OSw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcpCiAKIHZvaWQgVHlwaW5nQ29t
bWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBib29sIGtpbGxSaW5nKQogewotI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwotICAg
IGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5yZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25N
YXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZChmYWxzZSk7Ci0jZW5kaWYKKyAgICBkb2N1bWVudCgp
LT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcoZmFsc2UpOworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9odG1sZWRpdGluZy5oCmluZGV4IGNiMmIyYTQyOWY5ZTFlZWU3OTdlY2JhOWZjNzAwZDZmMjg3
ZmUyNDcuLjFkODUzYzdhMzE3MDY3MTQyMzM0YzZlYWE1OGUzMGIwNmY3OTQyNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKQEAgLTIyNCw2ICsyMjQsMTUgQEAgaW5saW5lIGJv
b2wgaXNXaGl0ZXNwYWNlKFVDaGFyIGMpCiB7CiAgICAgcmV0dXJuIGMgPT0gbm9CcmVha1NwYWNl
IHx8IGMgPT0gJyAnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdCc7CiB9CisKK2lubGluZSBib29s
IGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQoreworICAgIC8v
IFRoZXNlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlaGF2ZSBhcyB3b3JkIGJvdW5kYXJpZXMs
IGJ1dCBjYW4gYXBwZWFyIHdpdGhpbiB3b3Jkcy4KKyAgICAvLyBJZiB0aGV5IGFyZSBqdXN0IHR5
cGVkLCBpLmUuIGlmIHRoZXkgYXJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgY2FyZXQsIHdl
IHdhbnQgdG8gZGVsYXkgdGV4dCBjaGVja2luZyB1bnRpbCB0aGUgbmV4dCBjaGFyYWN0ZXIgaGFz
IGJlZW4gdHlwZWQuCisgICAgLy8gRklYTUU6IHRoaXMgaXMgcmVxdWlyZWQgdW50aWwgNjg1MzAy
NyBpcyBmaXhlZCBhbmQgdGV4dCBjaGVja2luZyBjYW4gZG8gdGhpcyBmb3IgdXMuCisgICAgcmV0
dXJuIGNoYXJhY3RlciA9PSAnXCcnIHx8IGNoYXJhY3RlciA9PSByaWdodFNpbmdsZVF1b3RhdGlv
bk1hcmsgfHwgY2hhcmFjdGVyID09IGhlYnJld1B1bmN0dWF0aW9uR2Vyc2hheWltOworfQorCiBT
dHJpbmcgc3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKGNvbnN0IFN0cmluZyYsIGJvb2wg
c3RhcnRJc1N0YXJ0T2ZQYXJhZ3JhcGgsIGJvb2wgZW5kSXNFbmRPZlBhcmFncmFwaCk7CiBjb25z
dCBTdHJpbmcmIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9y
Q2xpZW50LmgKaW5kZXggYWVkYTg0NDU4OGNhNmVmNTVmMDY4MjM0Mjg1MzcwMzU5YzdhYTUyZS4u
ZGYyNGE1YjQ2MDgwODczZmMzYzc4Y2FlYjI0ZmUwMjM0MzU2MTIxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0VkaXRvckNsaWVudC5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIEVkaXRvckNsaWVudF9o
CiAjZGVmaW5lIEVkaXRvckNsaWVudF9oCiAKLSNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWxJbmZv
LmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDlkMGIyMGIyZDkyNzBm
NjdlNjg2YzFlODEwNTFmMzEyMjM1MmQ3MGEuLmI3NWVmZGZmZDgzODQ5YTE2MTgxNmNjNGVkMzE4
YzA4NWU2NjY2OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC05NjgsNyArOTY4LDcgQEAgdm9p
ZCBGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhmbG9hdCBwYWdlWm9vbUZhY3Rvciwg
ZmxvYXQgdGV4dFpvb21GYWN0b3IKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2VkaXRvci5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBtX2VkaXRvci5kaXNtaXNzQ29ycmVjdGlv
blBhbmVsQXNJZ25vcmVkKCk7CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIFJlc3BlY3QgU1ZH
cyB6b29tQW5kUGFuPSJkaXNhYmxlZCIgcHJvcGVydHkgaW4gc3RhbmRhbG9uZSBTVkcgZG9jdW1l
bnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVj
dGlvblBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9u
UGFuZWwuaAppbmRleCA4YWRiNzlmMjM2YThlN2I2OGYzYWViMmEzNTQ1YjNhYzdiNWU2Y2YzLi5i
N2Q0YzRjZGRlMjkyN2NiNTFkMjUwNDc2MDAxOTQxNTc3YjQ2ZWIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaApAQCAtMjgsNyAr
MjgsNyBAQAogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
ICNpbXBvcnQgPEFwcEtpdC9OU1RleHRDaGVja2VyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NvcnJl
Y3Rpb25QYW5lbEluZm8uaD4KKyNpbXBvcnQgPFdlYkNvcmUvU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBAY2xhc3MgV2ViVmlldzsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVs
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5oCmluZGV4
IGQ0YmMzNTNkNjliMzYxZDJlODYxMzZiMTkwN2JkOTZmMDJjODk2MTkuLjc3MDQxMWMxMzM1NWE2
MjY2ZmRlOWFlNTVkNWY4ODZmZmNlYzJkOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwuaApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogI2ltcG9ydCA8QXBwS2l0L05TVGV4dENoZWNr
ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29ycmVjdGlvblBhbmVsSW5mby5oPgorI2ltcG9ydCA8
V2ViQ29yZS9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CiAKIEBjbGFzcyBXS1ZpZXc7Cg==
</data>
<flag name="review"
          id="81305"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>