<?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>111713</bug_id>
          
          <creation_ts>2013-03-07 05:21:13 -0800</creation_ts>
          <short_desc>[WK2][EFL] Text Checker&apos;s settings refactor</short_desc>
          <delta_ts>2013-04-18 06:03:04 -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>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Grzegorz Czajkowski">g.czajkowski</reporter>
          <assigned_to name="Grzegorz Czajkowski">g.czajkowski</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>849987</commentid>
    <comment_count>0</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-03-07 05:21:13 -0800</bug_when>
    <thetext>This was pick up while irc discussion.
In TextCheckerEfl.cpp it&apos;s no need to call client methods which in fact, call ewk settings of text checker.

This bug additionally:
 - gets rid of C&apos;ism in text checker&apos;s settings,
 - uses TextCheckerState as the main store for text checker&apos;s settings.

The text checker API to support others spell checker engines will be refactored in the separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852169</commentid>
    <comment_count>1</comment_count>
      <attachid>192435</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-03-11 03:44:53 -0700</bug_when>
    <thetext>Created attachment 192435
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853211</commentid>
    <comment_count>2</comment_count>
      <attachid>192435</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-03-12 02:07:47 -0700</bug_when>
    <thetext>Comment on attachment 192435
proposed patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_settings.cpp:198
&gt;          WKTextCheckerContinuousSpellCheckingEnabledStateChanged(enable);

Would it make sense to call this from TextCheckerSettings::setContinuousSpellCheckingEnabled() instead? It looks a bit weird to set the setting twice here.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:37
&gt; +TextCheckerSettings* TextCheckerSettings::shared()

We could also return a reference as it cannot be NULL. I don&apos;t really mind either way.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:39
&gt; +    static TextCheckerSettings* textCheckerSettings = adoptRef(new TextCheckerSettings).leakRef();

Adopt then leak? Looks like assigning &quot;new TextCheckerSettings&quot; directly would do the same thing, right?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:45
&gt; +    , m_languagesUpdateTimer(this, &amp;TextCheckerSettings::languagesUpdateTimerFired)

TextCheckerSettings:: seems useless

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:46
&gt; +    , m_spellCheckingSettingChangeTimer(this, &amp;TextCheckerSettings::spellCheckingSettingChangeTimerFired)

Ditto.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:67
&gt; +void TextCheckerSettings::languagesUpdateTimerFired(WebCore::Timer&lt;TextCheckerSettings&gt;*)

WebCore:: is probably not needed here.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:40
&gt; +class TextCheckerSettings : public RefCounted&lt;TextCheckerSettings&gt; {

Does this really need to be ref counted? It is a singleton.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:44
&gt; +    const WebKit::TextCheckerState&amp; state() const { return m_state; }

WebKit:: is not needed here.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:48
&gt; +    void continuousSpellCheckingChangeCallbackSet(Ewk_Settings_Continuous_Spell_Checking_Change_Cb callback);

I find it weird to use Yoda naming style in non-public API.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:49
&gt; +    void continuousSpellCheckingChangeCallbackCall();

Ditto + Should we add &quot;Async&quot; in the name to clarify that the callback is not called synchronously?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:57
&gt; +    WebKit::TextCheckerState m_state;

WebKit:: is not needed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854167</commentid>
    <comment_count>3</comment_count>
      <attachid>192892</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-03-13 03:17:05 -0700</bug_when>
    <thetext>Created attachment 192892
apply Christophe&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854173</commentid>
    <comment_count>4</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-03-13 03:31:20 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 192435 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=192435&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_settings.cpp:198
&gt; &gt;          WKTextCheckerContinuousSpellCheckingEnabledStateChanged(enable);
&gt; 
&gt; Would it make sense to call this from TextCheckerSettings::setContinuousSpellCheckingEnabled() instead? It looks a bit weird to set the setting twice here.

Good catch. Thanks. I prefer using WK2&apos;s API as it calls the client method responsible for setting change (in fact TextCheckerSettings::setContinuousSpellCheckingEnabled()) and it also sends the message with updated TextCheckerState to the WebProcess.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:37
&gt; &gt; +TextCheckerSettings* TextCheckerSettings::shared()
&gt; 
&gt; We could also return a reference as it cannot be NULL. I don&apos;t really mind either way.

Agree. Changed to reference to simplify the TextCheckerSettings code (Remove adpotRef(...).leakRef(), RefCounted).

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:39
&gt; &gt; +    static TextCheckerSettings* textCheckerSettings = adoptRef(new TextCheckerSettings).leakRef();
&gt; 
&gt; Adopt then leak? Looks like assigning &quot;new TextCheckerSettings&quot; directly would do the same thing, right?

Right.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:45
&gt; &gt; +    , m_languagesUpdateTimer(this, &amp;TextCheckerSettings::languagesUpdateTimerFired)
&gt; 
&gt; TextCheckerSettings:: seems useless

Without it I got the following error message:
ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function.  Say ‘&amp;WebKit::TextCheckerSettings::languagesUpdateTimerFired’ [-fpermissive]

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:67
&gt; &gt; +void TextCheckerSettings::languagesUpdateTimerFired(WebCore::Timer&lt;TextCheckerSettings&gt;*)
&gt; 
&gt; WebCore:: is probably not needed here.

Removed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:40
&gt; &gt; +class TextCheckerSettings : public RefCounted&lt;TextCheckerSettings&gt; {
&gt; 
&gt; Does this really need to be ref counted? It is a singleton.

Removed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:44
&gt; &gt; +    const WebKit::TextCheckerState&amp; state() const { return m_state; }
&gt; 
&gt; WebKit:: is not needed here.

Removed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:48
&gt; &gt; +    void continuousSpellCheckingChangeCallbackSet(Ewk_Settings_Continuous_Spell_Checking_Change_Cb callback);
&gt; 
&gt; I find it weird to use Yoda naming style in non-public API.

Added a new typedef - ContinuousSpellCheckingChangeCallback. Is is Ok?

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:49
&gt; &gt; +    void continuousSpellCheckingChangeCallbackCall();
&gt; 
&gt; Ditto + Should we add &quot;Async&quot; in the name to clarify that the callback is not called synchronously?

Added &apos;Async&apos;.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:57
&gt; &gt; +    WebKit::TextCheckerState m_state;
&gt; 
&gt; WebKit:: is not needed here.

Removed.

Thanks for your review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856997</commentid>
    <comment_count>5</comment_count>
      <attachid>192892</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-03-18 04:50:27 -0700</bug_when>
    <thetext>Comment on attachment 192892
apply Christophe&apos;s suggestions

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

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:49
&gt; +    void continuousSpellCheckingChangeCallbackSet(ContinuousSpellCheckingChangeCallback);

Yoda style? How about setContinuousSpellCheckingChangeCallback()?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:50
&gt; +    void continuousSpellCheckingChangeCallbackAsyncCall();

Ditto. How about callContinuousSpellCheckingChangeCallbackAsync() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857011</commentid>
    <comment_count>6</comment_count>
      <attachid>192892</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-18 05:17:13 -0700</bug_when>
    <thetext>Comment on attachment 192892
apply Christophe&apos;s suggestions

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

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:48
&gt; +    m_state.isContinuousSpellCheckingEnabled = false;

why not to initialize m_state within initialization list as well?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:52
&gt; +TextCheckerSettings::~TextCheckerSettings()

do we need empty destructor? can it be defined in header?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:47
&gt; +    void setSpellCheckingLanguages(const Vector&lt;String&gt;&amp; = Vector&lt;String&gt;());

nit: I would keep here the variable name..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857036</commentid>
    <comment_count>7</comment_count>
      <attachid>192892</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-18 06:00:27 -0700</bug_when>
    <thetext>Comment on attachment 192892
apply Christophe&apos;s suggestions

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

&gt; Source/WebKit2/ChangeLog:13
&gt; +        In &apos;TextCheckerEfl.cpp&apos;, it&apos;s no need to call the client&apos;s methods

there is not need to call

&gt; Source/WebKit2/ChangeLog:19
&gt; +        * PlatformEfl.cmake:
&gt; +        Add new &apos;TextCheckerSettings.cpp&apos; file to the build.

Simplify this: Add new files to the build.

&gt; Source/WebKit2/ChangeLog:26
&gt; +        * UIProcess/API/efl/ewk_settings.cpp:
&gt; +        (ewk_settings_continuous_spell_checking_change_cb_set):
&gt; +        (ewk_settings_continuous_spell_checking_enabled_get):
&gt; +        (ewk_settings_spell_checking_languages_set):
&gt; +        Use the &apos;TextCheckerSettings&apos; class instead of internal
&gt; +        ewk structure.

Use TextCheckerSettings instead of port-specific structure.

&gt; Source/WebKit2/ChangeLog:36
&gt; +        (Ewk_Text_Checker::initialize):
&gt; +        Remove &apos;isContinuousSpellCheckingEnabled&apos; and &apos;setContinuousSpellCheckingEnabled&apos;
&gt; +        callbacks from the WKTextChecker&apos;s client. They are not needed any longer.

Maybe explain why they are no longer needed

&gt; Source/WebKit2/ChangeLog:66
&gt; +        (WebKit::TextCheckerSettings::TextCheckerSettings):
&gt; +        Set the default values of spell/grammar checking to false.
&gt; +        Set the client callback to 0.

I find these comments a bit too detailed... the main changes get lost in details!

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:280
&gt; +    /* The callback should be called if the context menu &quot;Check Spelling While Typing&quot; option
&gt; +       was toggled by the user.
&gt; +    FIXME:
&gt; +    1) Invoke the context menu on the input field.
&gt; +    2) Choose the sub menu &quot;Spelling and Grammar&quot; option (not implemented for WK2).
&gt; +    3) Toggle &quot;Check Spelling While Typing&quot; option.
&gt; +    4) Check whether the callback is called. */
&gt; +

So you are replacing the tests with FIXME&apos;s - why cant this be tested?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:32
&gt; +
&gt; +#include &quot;ewk_text_checker_private.h&quot;
&gt; +

I would like to avoid this

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:63
&gt; +
&gt; +    // Set the default language if user didn&apos;t specify any.
&gt; +    if (enabled &amp;&amp; !Ewk_Text_Checker::hasDictionary())
&gt; +        setSpellCheckingLanguages();
&gt; +}

Really bad that these implementations depends on the EWK public API. That is a layering violation

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.h:38
&gt; +
&gt; +typedef Ewk_Settings_Continuous_Spell_Checking_Change_Cb ContinuousSpellCheckingChangeCallback;
&gt; +

:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858035</commentid>
    <comment_count>8</comment_count>
      <attachid>192892</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-03-19 01:26:19 -0700</bug_when>
    <thetext>Comment on attachment 192892
apply Christophe&apos;s suggestions

Clearing the review flag according to Kenneth&apos;s review.

Thanks guys for the review. I&apos;ll apply all mentioned suggestion in the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861466</commentid>
    <comment_count>9</comment_count>
      <attachid>194546</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-03-22 07:57:39 -0700</bug_when>
    <thetext>Created attachment 194546
do not use Ewk public API in the text checker implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861477</commentid>
    <comment_count>10</comment_count>
      <attachid>192892</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-03-22 08:09:45 -0700</bug_when>
    <thetext>Comment on attachment 192892
apply Christophe&apos;s suggestions

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:280
&gt;&gt; +
&gt; 
&gt; So you are replacing the tests with FIXME&apos;s - why cant this be tested?

To test it I needed to apply Michal Pakula&apos;s patches for context menu. The spelling options are available through &quot;Spelling and Grammar&apos; sub menu which is not implemented for WK2.

&gt;&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:48
&gt;&gt; +    m_state.isContinuousSpellCheckingEnabled = false;
&gt; 
&gt; why not to initialize m_state within initialization list as well?

I agree with you. To initialize those struct memebers within initialization list we will have to provide an idiomatic constructor to TextCheckerState. I am wondering if WK2 reviewers could approve that change as it&apos;s simple container only. Do you mind if I leave it as it is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862574</commentid>
    <comment_count>11</comment_count>
      <attachid>194546</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-25 02:16:49 -0700</bug_when>
    <thetext>Comment on attachment 194546
do not use Ewk public API in the text checker implementation

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:202
&gt; +#if ENABLE(SPELLCHECK)
&gt; +    return TextCheckerSettings::shared().state().isContinuousSpellCheckingEnabled;
&gt; +#else

Don&apos;t we have any C API for this?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:220
&gt; +    const Vector&lt;String&gt;&amp; languages = TextCheckerSettings::shared().availableSpellCheckingLanguages();

C API?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:221
&gt; +    size_t numberOfLanuages = languages.size();

spelling issue!

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:235
&gt; +    TextCheckerSettings::shared().setSpellCheckingLanguages(newLanguages);

C API?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:245
&gt; +    Vector&lt;String&gt; languages = TextCheckerSettings::shared().loadedSpellCheckingLanguages();

C API?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEngine.cpp:35
&gt; +TextCheckerEngine&amp; TextCheckerEngine::shared()

instance() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862638</commentid>
    <comment_count>12</comment_count>
      <attachid>194546</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-25 04:24:43 -0700</bug_when>
    <thetext>Comment on attachment 194546
do not use Ewk public API in the text checker implementation

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

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:41
&gt; +    return textCheckerSettings;

Does TextCheckerSettings make any sense without TextCheckerEngine?
I find it strange to have two singletons? Why do we have them?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:48
&gt; +    m_state.isContinuousSpellCheckingEnabled = false;

why not in init list of the class?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:79
&gt; +    return TextCheckerEngine::shared().loadedSpellCheckingLanguages();

?? why wrap method of one class with method from another class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>863480</commentid>
    <comment_count>13</comment_count>
      <attachid>194546</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-03-26 02:15:26 -0700</bug_when>
    <thetext>Comment on attachment 194546
do not use Ewk public API in the text checker implementation

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:202
&gt;&gt; +#else
&gt; 
&gt; Don&apos;t we have any C API for this?

Actually yes, but it&apos;s not a typical getter. There&apos;s a callback function exposed through WKTextCheckerClient.
Frankly speaking, I don&apos;t see much sense (apart from setContinuousSpellCheckingEnabled [1]) of exposing settings via callback functions as it has been implemented for WK2 C API.

If you guys prefer calling this callback here, we will have to expose WKTextCheckerClient somehow. Maybe this is a good point to get rid of Ewk_Text_Checker::initialize from (ewk_text_checker_private.h)?
Following this we should be aware of further dependency as our text checker allows to override the default spellchecker engine via APIs. So at lest we will have to ensure access to Ewk client callbacks for WKTextCheckerClient (at the moment those are being stored in ewk_text_checker.cpp)

[1] This can be changed via context menu, user should be notified about the value change.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:220
&gt;&gt; +    const Vector&lt;String&gt;&amp; languages = TextCheckerSettings::shared().availableSpellCheckingLanguages();
&gt; 
&gt; C API?

WKTextCheckerClient doesn&apos;t expose any APIs related with languages/dictionaries manipulations. Do you think of adding a new version of API to extend current WKTextCheckerClient or rather of adding a new C API specific for EFL.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:221
&gt;&gt; +    size_t numberOfLanuages = languages.size();
&gt; 
&gt; spelling issue!

Good catch! Thanks

&gt;&gt; Source/WebKit2/UIProcess/efl/TextCheckerEngine.cpp:35
&gt;&gt; +TextCheckerEngine&amp; TextCheckerEngine::shared()
&gt; 
&gt; instance() ?

Ok.

&gt;&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:41
&gt;&gt; +    return textCheckerSettings;
&gt; 
&gt; Does TextCheckerSettings make any sense without TextCheckerEngine?
&gt; I find it strange to have two singletons? Why do we have them?

Yeah, it doesn&apos;t make much sense. I was trying to explain the reason of introducing TextCheckerEngine in ChangeLog (the easy way to replace Enchant in the future?). See more details in ChangeLog. 
How about seTextCheckerEngine as a member of TextCheckerSetting class. We could call it in ewk_text_checker.cpp (when TextCheckerEnchant is created) and avoid defining TextCheckerEngine. But then we will have enchant related code in ewk.

&gt;&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:48
&gt;&gt; +    m_state.isContinuousSpellCheckingEnabled = false;
&gt; 
&gt; why not in init list of the class?

See comment 10.

&gt;&gt; Source/WebKit2/UIProcess/efl/TextCheckerSettings.cpp:79
&gt;&gt; +    return TextCheckerEngine::shared().loadedSpellCheckingLanguages();
&gt; 
&gt; ?? why wrap method of one class with method from another class?

Right. To manipulate languages stuff, we need to have access to spell checker engine. Two reason why they are exposed through TextCheckerSetting and forbidden for TextCheckerEngine are.
 - setSpellCheckingLanguages method loads the languages on timer to do not block UI (maybe we could do that in TextCheckeEngine?)
 - with consistency, other languages related methods are called through settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864306</commentid>
    <comment_count>14</comment_count>
      <attachid>194546</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-03-27 01:49:53 -0700</bug_when>
    <thetext>Comment on attachment 194546
do not use Ewk public API in the text checker implementation

Clearing the review flags due to Kenneth and Mikhail review. I will simplify the code and apply the reviewers suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867637</commentid>
    <comment_count>15</comment_count>
      <attachid>196091</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-04-02 01:06:26 -0700</bug_when>
    <thetext>Created attachment 196091
simplify the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867808</commentid>
    <comment_count>16</comment_count>
      <attachid>196091</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-02 07:22:49 -0700</bug_when>
    <thetext>Comment on attachment 196091
simplify the patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:260
&gt; +        listOflanguages = eina_list_append(listOflanguages, eina_stringshare_add(languages[i].utf8().data()));

think creation eina list from Vector&lt;String&gt; could be a separate aux function to avoid code repeating.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:60
&gt; +    initializeState();

why do we need initializeState() function? is it re-used anywhere?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEngine.cpp:47
&gt; +void TextCheckerEngine::checkSpellingOfString(const String&amp; text, int&amp; misspellingLocation, int&amp; misspellingLength)

I wish we had WK2 api for all this, otherwise why do we need all those wrapper methods? could m_textCheckerEngine be just exported?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874431</commentid>
    <comment_count>17</comment_count>
      <attachid>197731</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-04-12 01:48:00 -0700</bug_when>
    <thetext>Created attachment 197731
use WK2 C API

 - Allows to call WKTextCheckerClient callbacks instead of internal WebTextChecker and TextChecker::state().
 - Detach text checker initialization from context.

See WebKit2&apos;s ChangeLog for more details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874472</commentid>
    <comment_count>18</comment_count>
      <attachid>197731</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-12 05:09:34 -0700</bug_when>
    <thetext>Comment on attachment 197731
use WK2 C API

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

&gt; Source/WebKit2/UIProcess/efl/TextCheckerClientEfl.cpp:51
&gt; +    memset(&amp;m_wkTextCheckerClient, 0, sizeof(m_wkTextCheckerClient));

sizeof(m_wkTextCheckerClient)?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerClientEfl.h:33
&gt; +#include &quot;WKTextChecker.h&quot;

&lt;WebKit2/ ..&gt;

&gt; Source/WebKit2/UIProcess/efl/TextCheckerClientEfl.h:41
&gt; +    WKTextCheckerClient wkClient() { return m_wkTextCheckerClient; }

const WKTextCheckerClient&amp; wkClient() const { return m_wkTextCheckerClient; } to avoid copying, and do we really need it?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:79
&gt; +    TextCheckerClientEfl::instance().wkClient().setContinuousSpellCheckingEnabled(

you can access client directly

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:100
&gt; +        TextCheckerClientEfl::instance().ensureSpellCheckingLanguage();

that&apos;s not good to access TextCheckerClientEfl from here, cannot ensureSpellCheckingLanguage functionality be implemented right here inside TextChecker?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:269
&gt; +    TextCheckerClientEfl::instance().wkClient().learnWord(spellDocumentTag,

why TextCheckerClientEfl from here? 

See:
class WebTextChecker : public TypedAPIObject&lt;APIObject::TypeTextChecker&gt; {
...
    WebTextCheckerClient&amp; client() { return m_client; }
}

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:270
&gt; +        WKStringCreateWithUTF8CString(word.utf8().data()),

adopt

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:281
&gt; +    TextCheckerClientEfl::instance().wkClient().ignoreWord(spellDocumentTag,

ditto.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:282
&gt; +        WKStringCreateWithUTF8CString(word.utf8().data()),

adopt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876370</commentid>
    <comment_count>19</comment_count>
      <attachid>198270</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-04-16 00:38:10 -0700</bug_when>
    <thetext>Created attachment 198270
apply Mikhail&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876401</commentid>
    <comment_count>20</comment_count>
      <attachid>198270</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-16 01:42:38 -0700</bug_when>
    <thetext>Comment on attachment 198270
apply Mikhail&apos;s comments

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:56
&gt; +    return clientCallbacks;

we have already a singleton right? could callbacks be members of TextCheckerClientEfl?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerClientEfl.h:41
&gt; +    const WKTextCheckerClient&amp; wkClient() { return m_wkTextCheckerClient; }

I see only one usage of this method: inside ewk_text_checker_continuous_spell_checking_enabled_get. If that suffices I would substitute
this method with &quot;bool continuousSpellCheckingEnabled() const&quot;, and seems we do not need even m_wkTextCheckerClient class member.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerClientEfl.h:63
&gt; +    static bool isContinuousSpellCheckingEnabled(const void*);

those could be free static functions inside cpp file (they are just dispatchers right), TextCheckerClientEfl instance could be passed as client info.
TextCheckerClientEfl could contain ewk callbacks (see my comment above).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876402</commentid>
    <comment_count>21</comment_count>
      <attachid>197731</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-04-16 01:47:45 -0700</bug_when>
    <thetext>Comment on attachment 197731
use WK2 C API

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

&gt;&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:100
&gt;&gt; +        TextCheckerClientEfl::instance().ensureSpellCheckingLanguage();
&gt; 
&gt; that&apos;s not good to access TextCheckerClientEfl from here, cannot ensureSpellCheckingLanguage functionality be implemented right here inside TextChecker?

ensureSpellCheckingLanguages needs enchant library which is a member of TextCheckerClientEfl. If we had access to spell checking engine we&apos;d implement it in TextChecker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877137</commentid>
    <comment_count>22</comment_count>
      <attachid>198502</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-04-17 06:20:51 -0700</bug_when>
    <thetext>Created attachment 198502
apply Mikhail&apos;s suggestions (comment #20)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877142</commentid>
    <comment_count>23</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-04-17 06:33:39 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 198270 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=198270&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:56
&gt; &gt; +    return clientCallbacks;
&gt; 
&gt; we have already a singleton right? could callbacks be members of TextCheckerClientEfl?

Good idea - moved.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerClientEfl.h:41
&gt; &gt; +    const WKTextCheckerClient&amp; wkClient() { return m_wkTextCheckerClient; }
&gt; 
&gt; I see only one usage of this method: inside ewk_text_checker_continuous_spell_checking_enabled_get. If that suffices I would substitute
&gt; this method with &quot;bool continuousSpellCheckingEnabled() const&quot;, and seems we do not need even m_wkTextCheckerClient class member.

Fine by me.
Added &quot;bool isContinuousSpellCheckingEnabled() const&quot; which calls WK2 callback.
Removed m_wkTextCheckerClient from TextCheckerClientEfl.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerClientEfl.h:63
&gt; &gt; +    static bool isContinuousSpellCheckingEnabled(const void*);
&gt; 
&gt; those could be free static functions inside cpp file (they are just dispatchers right), TextCheckerClientEfl instance could be passed as client info.
&gt; TextCheckerClientEfl could contain ewk callbacks (see my comment above).

Could be, that was my first intention. If we move those callbacks out of the class we won&apos;t have access to the private methods/members of TextCheckerClientEfl. It affect other changes - we need access to m_textCheckerEnchant, timers etc. Is it ok if we leave them as class members?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877738</commentid>
    <comment_count>24</comment_count>
      <attachid>198691</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-04-18 01:25:40 -0700</bug_when>
    <thetext>Created attachment 198691
pass &apos;this&apos; as clientInfo to the callbacks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877746</commentid>
    <comment_count>25</comment_count>
      <attachid>198691</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-18 01:46:33 -0700</bug_when>
    <thetext>Comment on attachment 198691
pass &apos;this&apos; as clientInfo to the callbacks 

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

now looks better :)

&gt; Source/WebKit2/UIProcess/efl/TextCheckerClientEfl.cpp:170
&gt; +    WKMutableArrayRef suggestionsForWord = WKMutableArrayCreate();

when is it deleted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877764</commentid>
    <comment_count>26</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-04-18 02:36:50 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 198691 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=198691&amp;action=review
&gt; 
&gt; now looks better :)
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerClientEfl.cpp:170
&gt; &gt; +    WKMutableArrayRef suggestionsForWord = WKMutableArrayCreate();
&gt; 
&gt; when is it deleted?

I suppose when we return from WebTextCheckerClient::guessesForWord()
See https://trac.webkit.org/browser/trunk/Source/WebKit2/UIProcess/WebTextCheckerClient.cpp#L153</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877772</commentid>
    <comment_count>27</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-18 02:52:58 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; (From update of attachment 198691 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=198691&amp;action=review
&gt; &gt; 
&gt; &gt; now looks better :)
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerClientEfl.cpp:170
&gt; &gt; &gt; +    WKMutableArrayRef suggestionsForWord = WKMutableArrayCreate();
&gt; &gt; 
&gt; &gt; when is it deleted?
&gt; 
&gt; I suppose when we return from WebTextCheckerClient::guessesForWord()
&gt; See https://trac.webkit.org/browser/trunk/Source/WebKit2/UIProcess/WebTextCheckerClient.cpp#L153

OK, LGTM than.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877832</commentid>
    <comment_count>28</comment_count>
      <attachid>198691</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-04-18 05:37:33 -0700</bug_when>
    <thetext>Comment on attachment 198691
pass &apos;this&apos; as clientInfo to the callbacks 

r=me based on comments from Mikhail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877849</commentid>
    <comment_count>29</comment_count>
      <attachid>198691</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-18 06:02:58 -0700</bug_when>
    <thetext>Comment on attachment 198691
pass &apos;this&apos; as clientInfo to the callbacks 

Clearing flags on attachment: 198691

Committed r148670: &lt;http://trac.webkit.org/changeset/148670&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877850</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-18 06:03:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192435</attachid>
            <date>2013-03-11 03:44:53 -0700</date>
            <delta_ts>2013-03-13 03:17:05 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>spelling-settings-refactor.patch</filename>
            <type>text/plain</type>
            <size>24661</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjM2MzZmNlLi5kMDUyNzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTMg
QEAKKzIwMTMtMDMtMDggIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBUZXh0IENoZWNrZXIncyBzZXR0aW5ncyByZWZh
Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEx
NzEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNl
ICdUZXh0Q2hlY2tlclN0YXRlJyBvYmplY3QgYXMgdGhlIHN0b3JlIGZvciB0aGUgdGV4dCBjaGVj
a2VyIHNldHRpbmdzLgorICAgICAgICBJdCdzIHNoYXJlZCBiZXR3ZWVuIHRoZSBjbGllbnQgKEFQ
SSBwYXJ0KSBhbmQgV2ViUHJvY2VzcyAocmVhZCBvbmx5KS4KKyAgICAgICAgVGhhbmtzIHRvIGl0
LCB3ZSBkb24ndCBoYXZlIHRvIGtlZXAgYW55IGFkZGl0aW9uYWwgc3RydWN0dXJlIHdpdGgKKyAg
ICAgICAgdGhlIHNldHRpbmdzIG9uIGV3ayBzaWRlLgorCisgICAgICAgIEluICdUZXh0Q2hlY2tl
ckVmbC5jcHAnLCBpdCdzIG5vIG5lZWQgdG8gY2FsbCB0aGUgY2xpZW50J3MgbWV0aG9kcworICAg
ICAgICB0aHJvdWdoIGludGVybmFsIFdLMiBtZXRob2RzIChXZWJUZXh0Q2hlY2tlcikgdG8gZ2V0
L3NldAorICAgICAgICB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBzZXR0aW5nLiBUaGVz
ZSBzZXR0aW5ncyBjYW4gYmUgY2FsbGVkCisgICAgICAgIGRpcmVjdGx5LCBzaW1pbGFybHkgdG8g
TWFjIChUZXh0Q2hlY2tlck1hYy5tbSkgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBQbGF0
Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgQWRkIG5ldyAnVGV4dENoZWNrZXJTZXR0aW5ncy5jcHAn
IGZpbGUgdG8gdGhlIGJ1aWxkLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Nl
dHRpbmdzLmNwcDoKKyAgICAgICAgKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2NoYW5nZV9jYl9zZXQpOgorICAgICAgICAoZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQpOgorICAgICAgICAoZXdrX3NldHRpbmdzX3NwZWxsX2No
ZWNraW5nX2xhbmd1YWdlc19zZXQpOgorICAgICAgICBVc2UgdGhlICdUZXh0Q2hlY2tlclNldHRp
bmdzJyBjbGFzcyBpbnN0ZWFkIG9mIGludGVybmFsCisgICAgICAgIGV3ayBzdHJ1Y3R1cmUuCisK
KyAgICAgICAgKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
c2V0KToKKyAgICAgICAgRG8gbm90IGNhbGwgdGhlIGNsaWVudCdzIGNhbGxiYWNrIHJlc3BvbnNp
YmxlIGZvciB0aGUgc2V0dGluZworICAgICAgICBjaGFuZ2UgdW5sZXNzIFdlYktpdCBjaGFuZ2Vz
IHRoZSBzZXR0aW5nICh0cm91Z2ggdGhlIGNvbnRleHQKKyAgICAgICAgbWVudSAnQ2hlY2sgU3Bl
bGxpbmcgV2hpbGUgVHlwaW5nJyBvcHRpb24pLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3RleHRfY2hlY2tlci5jcHA6CisgICAgICAgIChFd2tfVGV4dF9DaGVja2VyOjppbml0
aWFsaXplKToKKyAgICAgICAgUmVtb3ZlICdpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCcgYW5kICdzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQnCisgICAgICAgIGNhbGxi
YWNrcyBmcm9tIHRoZSBXS1RleHRDaGVja2VyJ3MgY2xpZW50LiBUaGV5IGFyZSBub3QgbmVlZGVk
IGFueSBsb25nZXIuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfdGV4dF9jaGVja2VyLmNwcDoKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAgIFVwZGF0ZSB0
aGUgdGVzdCByZXNwb25zaWJsZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhYm91dCB0aGUgc2V0dGlu
ZyBjaGFuZ2UKKyAgICAgICAgYWNjb3JkaW5nIHRvIGNoYW5nZXMgaW4gJ2V3a19zZXR0aW5nc19j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0Jy4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6c3RhdGUpOgorICAgICAgICBVc2UgdGhlIGdsb2JhbCAnVGV4dENoZWNrZXJTdGF0ZScgb2Jq
ZWN0LgorCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmdyYW1tYXJD
aGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICBNYXJrIGFzIHVuaW1wbGVtZW50
ZWQgYmVjYXVzZSBvZiBFRkwgZG9lc24ndCBpbXBsZW1lbnQgaXQuCisKKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAg
ICAgIFNhdmUgYSBuZXcgc2V0dGluZyB2YWx1ZSB0byB0aGUgJ1RleHRDaGVja2VyU3RhdGUnIGFu
ZCBub3RpZnkKKyAgICAgICAgdGhlIGNsaWVudCBhYm91dCB0aGUgc2V0dGluZyBjaGFuZ2UuIFRo
aXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuCisgICAgICAgIGNvbnRleHQgbWVudSAnQ2hlY2sgU3Bl
bGxpbmcgV2hpbGUgVHlwaW5nJyBvcHRpb24gaGFzIGJlZW4gdG9nZ2xlZC4KKworICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVD
aGFuZ2VkKToKKyAgICAgICAgU2F2ZSBhIG5ldyBzZXR0aW5nIHZhbHVlIHRvIHRoZSAnVGV4dENo
ZWNrZXJTdGF0ZScuIENhbGxlZCBieSBXS1RleHRDaGVja2VyJ3MgQVBJLgorCisgICAgICAgICog
VUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlclNldHRpbmdzLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyU2V0dGluZ3M6OnNoYXJlZCk6CisgICAgICAgIERlZmluZSBzaW5n
bGV0b24gdG8gYmUgZWFzeSBhY2Nlc3NpYmlsaXR5IGluIGV3a19zZWV0aW5nLmNwcCBhbmQgVGV4
dENoZWNrZXJFZmwuY3BwLgorCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyU2V0dGluZ3M6
OlRleHRDaGVja2VyU2V0dGluZ3MpOgorICAgICAgICBTZXQgdGhlIGRlZmF1bHQgdmFsdWVzIG9m
IHNwZWxsL2dyYW1tYXIgY2hlY2tpbmcgdG8gZmFsc2UuCisgICAgICAgIFNldCB0aGUgY2xpZW50
IGNhbGxiYWNrIHRvIDAuCisKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJTZXR0aW5nczo6
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgVGhlIG1ldGhvZCBp
cyBjYWxsZWQgZm9yIGJvdGggJ2NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hh
bmdlZCcgYW5kCisgICAgICAgICdld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX3NldCcuCisgICAgICAgIEl0IHNhdmVzIGEgdmFsdWUgb2YgJ2NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCcgYW5kIGxvYWRzIHRoZSBkZWZhdWx0CisgICAgICAgIGxhbmd1
YWdlIHRvIHBlcmZvcm0gc3BlbGwgY2hlY2tpbmcgaWYgdGhlIHVzZXIgZGlkbid0IHNldCBpdC4K
KworICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlclNldHRpbmdzOjpzZXRTcGVsbENoZWNraW5n
TGFuZ3VhZ2VzKToKKyAgICAgICAgU2F2ZSBuZXcgbGFuZ3VhZ2VzIHRvIGJlIHN1cHBvcnRlZCBm
b3Igc3BlbGwgY2hlY2tpbmcuCisgICAgICAgIEFzIHRoZSBFRkwgdGV4dCBjaGVja2VyIHN1cHBv
cnRzIG11bHRpcGxlIGxhbmd1YWdlcywgdGhlIGxhbmd1YWdlcyBhcmUgbG9hZGVkIG9uIHRpbWVy
CisgICAgICAgIHRvIGRvIG5vdCBibG9jayBVSS4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXJTZXR0aW5nczo6bGFuZ3VhZ2VzVXBkYXRlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyU2V0dGluZ3M6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJh
Y2tTZXQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlclNldHRpbmdzOjpjb250aW51b3Vz
U3BlbGxDaGVja2luZ0NoYW5nZUNhbGxiYWNrQ2FsbCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRD
aGVja2VyU2V0dGluZ3M6OnNwZWxsQ2hlY2tpbmdTZXR0aW5nQ2hhbmdlVGltZXJGaXJlZCk6CisK
KyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyU2V0dGluZ3MuaDogQWRkZWQuCisg
ICAgICAgIChUZXh0Q2hlY2tlclNldHRpbmdzKToKKyAgICAgICAgRGVmaW5lIGNsYXNzIHRvIHN0
b3JlICdUZXh0Q2hlY2tlclN0YXRlJyBvYmplY3QgYW5kIG1ldGhvZHMgcmVzcG9uc2libGUgZm9y
CisgICAgICAgIHRleHQgY2hlY2tlciBzZXR0aW5ncy4KKworICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlclNldHRpbmdzOjpzdGF0ZSk6CisgICAgICAgIFJldHVybiB0aGUgY29uc3RhbnQgcmVm
ZXJlbmNlIHRvIHRoZSAnVGV4dENoZWNrZXJTdGF0ZScgb2JqZWN0LgorCiAyMDEzLTAzLTEwICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYlBhZ2U6
OnNjYWxlZFNuYXBzaG90V2l0aE9wdGlvbnMgcmV0dXJucyBhIGNvcnJ1cHQgc25hcHNob3QgaWYg
eW91IHJlcXVlc3QgYSByZWN0IGxhcmdlciB0aGFuIHRoZSBGcmFtZVZpZXfigJlzIHNpemUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggOGY2YjliYS4uMWMzN2RmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTk4LDYgKzk4LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VS
Q0VTCiAgICAgVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNw
cAogICAgIFVJUHJvY2Vzcy9lZmwvUmVxdWVzdE1hbmFnZXJDbGllbnRFZmwuY3BwCiAgICAgVUlQ
cm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKKyAgICBVSVByb2Nlc3MvZWZsL1RleHRDaGVj
a2VyU2V0dGluZ3MuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9WaWJyYXRpb25DbGllbnRFZmwuY3Bw
CiAgICAgVUlQcm9jZXNzL2VmbC9WaWV3Q2xpZW50RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwv
V2ViQ29udGV4dEVmbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19zZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfc2V0dGluZ3MuY3BwCmluZGV4IDNkNDM0ZGYxLi43NTdkNzc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKQEAgLTM0LDEx
ICszNCw5IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJQcmVmZXJlbmNlcy5oPgogCiAjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiVGV4dENoZWNrZXJTZXR0aW5ncy5oIgogI2luY2x1
ZGUgIldLVGV4dENoZWNrZXIuaCIKICNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUu
aCIKLSNpbmNsdWRlIDxFY29yZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
QEAgLTUzLDM1ICs1MSw2IEBAIFdlYktpdDo6V2ViUHJlZmVyZW5jZXMqIEV3a1NldHRpbmdzOjpw
cmVmZXJlbmNlcygpCiAgICAgcmV0dXJuIG1fdmlldy0+cGFnZSgpLT5wYWdlR3JvdXAoKS0+cHJl
ZmVyZW5jZXMoKTsKIH0KIAotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotc3RhdGljIHN0cnVjdCB7
Ci0gICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA6IDE7Ci0gICAgVmVj
dG9yPFN0cmluZz4gc3BlbGxDaGVja2luZ0xhbmd1YWdlczsKLSAgICBFd2tfU2V0dGluZ3NfQ29u
dGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2Igb25Db250aW51b3VzU3BlbGxDaGVja2lu
ZzsKLX0gZXdrVGV4dENoZWNrZXJTZXR0aW5ncyA9IHsgZmFsc2UsIFZlY3RvcjxTdHJpbmc+KCks
IDAgfTsKLQotc3RhdGljIEVpbmFfQm9vbCBvbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nSWRsZXIo
dm9pZCopCi17Ci0gICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3Bl
bGxDaGVja2luZykKLSAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5vbkNvbnRpbnVvdXNT
cGVsbENoZWNraW5nKGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpOwotCi0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKLX0KLQot
c3RhdGljIEVpbmFfQm9vbCBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0VXBkYXRlKHZvaWQqKQot
ewotICAgIC8vIEZJWE1FOiBDb25zaWRlciB0byBkZWxlZ2F0ZSBjYWxsaW5nIG9mIHRoaXMgbWV0
aG9kIGluIFdlYlByb2Nlc3MgdG8gZG8gbm90IGRlbGF5L2Jsb2NrIFVJUHJvY2Vzcy4KLSAgICBF
d2tfVGV4dF9DaGVja2VyOjp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGV3a1RleHRDaGVj
a2VyU2V0dGluZ3Muc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7Ci0gICAgcmV0dXJuIEVDT1JFX0NB
TExCQUNLX0NBTkNFTDsKLX0KLQotc3RhdGljIHZvaWQgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1Nl
dChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbmV3TGFuZ3VhZ2VzKQotewotICAgIGV3a1RleHRDaGVj
a2VyU2V0dGluZ3Muc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IG5ld0xhbmd1YWdlczsKLSAgICBl
Y29yZV9pZGxlcl9hZGQoc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldFVwZGF0ZSwgMCk7Ci19Ci0j
ZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCi0KIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfZnVs
bHNjcmVlbl9lbmFibGVkX3NldChFd2tfU2V0dGluZ3MqIHNldHRpbmdzLCBFaW5hX0Jvb2wgZW5h
YmxlKQogewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKQEAgLTIwNSwxNCArMTc0LDE0IEBA
IEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfZG5zX3ByZWZldGNoaW5nX2VuYWJsZWRfZ2V0KGNvbnN0
IEV3a19TZXR0aW5ncyogc2V0dGluZ3MpCiB2b2lkIGV3a19zZXR0aW5nc19jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQoRXdrX1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxf
Q2hlY2tpbmdfQ2hhbmdlX0NiIGNhbGxiYWNrKQogewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQot
ICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxDaGVja2luZyA9IGNh
bGxiYWNrOworICAgIFRleHRDaGVja2VyU2V0dGluZ3M6OnNoYXJlZCgpLT5jb250aW51b3VzU3Bl
bGxDaGVja2luZ0NoYW5nZUNhbGxiYWNrU2V0KGNhbGxiYWNrKTsKICNlbmRpZgogfQogCiBFaW5h
X0Jvb2wgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQo
KQogewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIHJldHVybiBld2tUZXh0Q2hlY2tlclNl
dHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworICAgIHJldHVybiBUZXh0
Q2hlY2tlclNldHRpbmdzOjpzaGFyZWQoKS0+c3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZDsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCkBAIC0yMjIsMTcg
KzE5MSwxMSBAQCB2b2lkIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfc2V0KEVpbmFfQm9vbCBlbmFibGUpCiB7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAg
ICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgIT0gZW5hYmxlKSB7Ci0gICAgICAgIGV3a1Rl
eHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFi
bGU7CisgICAgaWYgKFRleHRDaGVja2VyU2V0dGluZ3M6OnNoYXJlZCgpLT5zdGF0ZSgpLmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkICE9IGVuYWJsZSkgeworICAgICAgICBUZXh0Q2hl
Y2tlclNldHRpbmdzOjpzaGFyZWQoKS0+c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGVuYWJsZSk7CiAKKyAgICAgICAgLy8gV2ViUHJvY2VzcyBuZWVkcyB0byBiZSBub3RpZmllZCBh
Ym91dCBUZXh0Q2hlY2tlclN0YXRlIGNoYW5nZS4KICAgICAgICAgV0tUZXh0Q2hlY2tlckNvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGUpOwotCi0gICAgICAg
IC8vIFNldHMgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaWYgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhbnku
Ci0gICAgICAgIGlmIChlbmFibGUgJiYgIUV3a19UZXh0X0NoZWNrZXI6Omhhc0RpY3Rpb25hcnko
KSkKLSAgICAgICAgICAgIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQoVmVjdG9yPFN0cmluZz4o
KSk7Ci0KLSAgICAgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3Bl
bGxDaGVja2luZykKLSAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChvbkNvbnRpbnVvdXNTcGVs
bENoZWNraW5nSWRsZXIsIDApOwogICAgIH0KICNlbmRpZgogfQpAQCAtMjU2LDcgKzIxOSw3IEBA
IHZvaWQgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hh
ciogbGFuZ3VhZ2VzKQogICAgIFZlY3RvcjxTdHJpbmc+IG5ld0xhbmd1YWdlczsKICAgICBTdHJp
bmc6OmZyb21VVEY4KGxhbmd1YWdlcykuc3BsaXQoJywnLCBuZXdMYW5ndWFnZXMpOwogCi0gICAg
c3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldChuZXdMYW5ndWFnZXMpOworICAgIFRleHRDaGVja2Vy
U2V0dGluZ3M6OnNoYXJlZCgpLT5zZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKG5ld0xhbmd1YWdl
cyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcAppbmRleCAyYmUyOGM0Li44MjYxYWJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2Vy
LmNwcApAQCAtNzEsMTYgKzcxLDYgQEAgc3RhdGljIGlubGluZSBDbGllbnRDYWxsYmFja3MmIGNs
aWVudENhbGxiYWNrcygpCiAgICAgcmV0dXJuIGNsaWVudENhbGxiYWNrczsKIH0KIAotc3RhdGlj
IGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3Qgdm9pZCopCi17Ci0g
ICAgcmV0dXJuIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
Z2V0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqKQotewotICAgIGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KGVuYWJsZWQpOwotfQotCiBzdGF0aWMgdWlu
dDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCop
CiB7CiAgICAgaWYgKGNsaWVudENhbGxiYWNrcygpLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdf
Z2V0KQpAQCAtMTg1LDggKzE3NSw4IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgICAgIGtXS1Rl
eHRDaGVja2VyQ2xpZW50Q3VycmVudFZlcnNpb24sCiAgICAgICAgIDAsIC8vIGNsaWVudEluZm8K
ICAgICAgICAgMCwgLy8gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQKLSAgICAgICAg
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQsCi0gICAgICAgIHNldENvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCwKKyAgICAgICAgMCwgLy8gaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQKKyAgICAgICAgMCwgLy8gc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkCiAgICAgICAgIDAsIC8vIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZAogICAgICAgICAwLCAv
LyBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkCiAgICAgICAgIHVuaXF1ZVNwZWxsRG9jdW1lbnRU
YWcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90
ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL3Rlc3RzL3Rlc3RfZXdrMl90ZXh0X2NoZWNrZXIuY3BwCmluZGV4IDgyZGEwOWEuLjNkMTYz
ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rl
c3RfZXdrMl90ZXh0X2NoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl90ZXh0X2NoZWNrZXIuY3BwCkBAIC0yNDcsNyArMjQ3LDkg
QEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX2VuYWJsZWQpCiB9CiAKIC8qKgotICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsYmFj
ayBpcyBjYWxsZWQgd2hlbiB0aGUgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyBoYXMgYmVlbiBjaGFu
Z2VkLgorICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgc3Bl
bGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKiBDaGFuZ2luZyBv
ZiB0aGlzIHNldHRpbmcgYXQgdGhlIFdlYktpdCBsZXZlbCBjYW4gYmUgbWFkZSBhcyBhIHJlc3Vs
dCBvZiBtb2RpZnlpbmcKKyAqIG9wdGlvbnMgaW4gYSBDb250ZXh0IE1lbnUgYnkgYSB1c2VyLgog
ICovCiBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldCkKIHsKQEAgLTI1NSw2ICsyNTcsOCBAQCBURVNUX0Yo
RVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdf
Y2hhbmdlX2NiX3NldCkKIAogICAgIGlzU2V0dGluZ0VuYWJsZWQgPSBld2tfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpOwogICAgIGlzU2V0dGluZ0VuYWJs
ZWQgPSAhaXNTZXR0aW5nRW5hYmxlZDsKKyAgICAvLyBUaGUgbm90aWZpY2F0aW9ucyBhYm91dCB0
aGUgc2V0dGluZyBjaGFuZ2Ugc2hvdWxkbid0IGJlIHNlbnQgaWYgdGhlIGNoYW5nZSB3YXMgbWFk
ZQorICAgIC8vIG9uIHRoZSBjbGllbnQncyByZXF1ZXN0IChwdWJsaWMgQVBJKS4KICAgICBld2tf
c2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdF
bmFibGVkKTsKIAogICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGlt
ZW91dEluU2Vjb25kcywgb25UaW1lb3V0LCAwKTsKQEAgLTI2NCwzMyArMjY4LDI0IEBAIFRFU1Rf
RihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19jaGFuZ2VfY2Jfc2V0KQogICAgIC8vIFdlIGNhbid0IGNhbGwgZWNvcmVfbWFpbl9sb29wX2l0
ZXJhdGUgYmVjYXVzZSBpdCBkb2Vzbid0IHByb2Nlc3MgdGhlIGlkbGVycy4KICAgICBlY29yZV9t
YWluX2xvb3BfYmVnaW4oKTsKIAotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIEVYUEVDVF9G
QUxTRSh0aW1lb3V0VGltZXIpOwotI2Vsc2UKICAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0VGltZXIp
OwotI2VuZGlmCi0KLSAgICAvLyBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBpZiB0
aGUgc2V0dGluZyBvcHRpb24gaXMgYWxyZWFkeSBzZXQuCi0gICAgaXNTZXR0aW5nRW5hYmxlZCA9
IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7Ci0g
ICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoaXNT
ZXR0aW5nRW5hYmxlZCk7CiAKLSAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVm
YXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7Ci0gICAgZWNvcmVfbWFpbl9sb29w
X2JlZ2luKCk7Ci0KLSAgICAvLyBXaGVuIHRoZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVk
IHRoZSBjYWxsYmFjayB3b24ndCBiZSBjYWxsZWQgdG9vLgotICAgIEVYUEVDVF9UUlVFKHRpbWVv
dXRUaW1lcik7Ci0KLSAgICAvLyBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBpZiB0
aGUgdXNlciBoYXMgaW52YWxpZGF0ZWQgaXQuCi0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldCgwKTsKLSAgICBpc1NldHRpbmdFbmFibGVkID0g
ZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKLSAg
ICBpc1NldHRpbmdFbmFibGVkID0gIWlzU2V0dGluZ0VuYWJsZWQ7Ci0gICAgZXdrX3NldHRpbmdz
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoaXNTZXR0aW5nRW5hYmxlZCk7
Ci0KLSAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNl
Y29uZHMsIG9uVGltZW91dCwgMCk7Ci0gICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7Ci0KLSAg
ICAvLyBJZiB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZCwgdGhlIGNhbGxiYWNrIGlz
IG5vdCBzZXQuCi0gICAgRVhQRUNUX1RSVUUodGltZW91dFRpbWVyKTsKKyAgICAvKiBUaGUgY2Fs
bGJhY2sgc2hvdWxkIGJlIGNhbGxlZCBpZiB0aGUgY29udGV4dCBtZW51ICJDaGVjayBTcGVsbGlu
ZyBXaGlsZSBUeXBpbmciIG9wdGlvbgorICAgICAgIHdhcyB0b2dnbGVkIGJ5IHRoZSB1c2VyLgor
ICAgIEZJWE1FOgorICAgIDEpIEludm9rZSB0aGUgY29udGV4dCBtZW51IG9uIHRoZSBpbnB1dCBm
aWVsZC4KKyAgICAyKSBDaG9vc2UgdGhlIHN1YiBtZW51ICJTcGVsbGluZyBhbmQgR3JhbW1hciIg
b3B0aW9uIChub3QgaW1wbGVtZW50ZWQgZm9yIFdLMikuCisgICAgMykgVG9nZ2xlICJDaGVjayBT
cGVsbGluZyBXaGlsZSBUeXBpbmciIG9wdGlvbi4KKyAgICA0KSBDaGVjayB3aGV0aGVyIHRoZSBj
YWxsYmFjayBpcyBjYWxsZWQuICovCisKKyAgICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJl
IGNhbGxlZCBpZiB0aGUgdXNlciBoYXMgaW52YWxpZGF0ZWQgaXQuCisgICAgRklYTUU6CisgICAg
MSkgQ2FsbCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jf
c2V0KDApIHRvIG5vdGlmeSB0aGUgV2ViS2l0IHRoYXQKKyAgICAgICB0aGUgY2xpZW50IGlzIG5v
dCBpbnRlcmVzdGVkIGluIHRoZSBzZXR0aW5nIGNoYW5nZS4KKyAgICAyKSBJbnZva2UgdGhlIGNv
bnRleHQgbWVudSBvbiB0aGUgaW5wdXQgZmllbGQuCisgICAgMykgQ2hvb3NlIHRoZSBzdWIgbWVu
dSAiU3BlbGxpbmcgYW5kIEdyYW1tYXIiIG9wdGlvbiAobm90IGltcGxlbWVudGVkIGZvciBXSzIp
LgorICAgIDQpIFRvZ2dsZSAiQ2hlY2sgU3BlbGxpbmcgV2hpbGUgVHlwaW5nIiBvcHRpb24uCisg
ICAgNSkgQ2hlY2sgd2hldGhlciB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZC4gKi8KIH0KIAogLyoq
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZs
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCmlu
ZGV4IGE1MDY0ZWUuLmQ3YzY0MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvVGV4dENoZWNrZXJFZmwuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBQb3J0aW9ucyBDb3B5
cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEwICsyOCwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCiAKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKIAogI2lmIEVOQUJMRShTUEVMTENIRUNL
KQogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCiAjZW5kaWYKIApAQCAtMzks
NzMgKzQxLDU4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotc3RhdGljIFRleHRDaGVja2VyU3RhdGUgdGV4dENoZWNrZXJTdGF0ZTsKLQogY29uc3Qg
VGV4dENoZWNrZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKIHsKICNpZiBFTkFCTEUoU1BF
TExDSEVDSykKLSAgICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplU3RhdGUgPSBmYWxzZTsKLSAg
ICBpZiAoZGlkSW5pdGlhbGl6ZVN0YXRlKQotICAgICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0
ZTsKLQotICAgIFdlYlRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQgPSBXZWJUZXh0Q2hlY2tlcjo6
c2hhcmVkKCktPmNsaWVudCgpOwotICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQgPSBjbGllbnQuY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCk7Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBjbGll
bnQuZ3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwotCi0gICAgZGlkSW5pdGlhbGl6ZVN0YXRlID0g
dHJ1ZTsKKyAgICByZXR1cm4gVGV4dENoZWNrZXJTZXR0aW5nczo6c2hhcmVkKCktPnN0YXRlKCk7
CisjZWxzZQorICAgIHN0YXRpYyBUZXh0Q2hlY2tlclN0YXRlIHN0YXRlOworICAgIHJldHVybiBz
dGF0ZTsKICNlbmRpZgotICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwogfQogCiBib29sIFRl
eHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpCiB7Ci0jaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCi0gICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xp
ZW50KCkuY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7Ci0jZWxzZQorICAgIG5vdElt
cGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCiB9CiAKIHZvaWQgVGV4dENo
ZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQogewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIGlm
IChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgIGlmIChUZXh0Q2hlY2tlclNldHRpbmdzOjpzaGFy
ZWQoKS0+c3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdGV4dENo
ZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkOwotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xp
ZW50KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKTsKKyAgICBUZXh0Q2hlY2tlclNldHRpbmdzOjpzaGFyZWQoKS0+c2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKTsKKyAgICAvLyBOb3RpZnkgdGhlIGNsaWVudCBhYm91dCB0aGUgc2V0dGluZyBjaGFu
Z2UuCisgICAgVGV4dENoZWNrZXJTZXR0aW5nczo6c2hhcmVkKCktPmNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nQ2hhbmdlQ2FsbGJhY2tDYWxsKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CiAjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hl
Y2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCkKK3ZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCkK
IHsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQgPT0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZDsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7Ci0jZW5k
aWYKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpjb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQogewotICAg
IFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoZW5hYmxlZCk7
Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5n
ZWQoYm9vbCBlbmFibGVkKQotewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIHRleHRDaGVj
a2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyAgICBpZiAoVGV4
dENoZWNrZXJTZXR0aW5nczo6c2hhcmVkKCktPnN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4dENoZWNr
ZXJTZXR0aW5nczo6c2hhcmVkKCktPnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChl
bmFibGVkKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwogI2VuZGlmCiB9CiAK
K3ZvaWQgVGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9v
bCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBpbnQ2NF90IFRleHRDaGVja2VyOjp1
bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKIHsKICNpZiBFTkFCTEUo
U1BFTExDSEVDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4
dENoZWNrZXJTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRD
aGVja2VyU2V0dGluZ3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0
OWNlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1Rl
eHRDaGVja2VyU2V0dGluZ3MuY3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlclNldHRpbmdzLmgiCisKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKworI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1RleHRDaGVja2Vy
U2V0dGluZ3MqIFRleHRDaGVja2VyU2V0dGluZ3M6OnNoYXJlZCgpCit7CisgICAgc3RhdGljIFRl
eHRDaGVja2VyU2V0dGluZ3MqIHRleHRDaGVja2VyU2V0dGluZ3MgPSBhZG9wdFJlZihuZXcgVGV4
dENoZWNrZXJTZXR0aW5ncykubGVha1JlZigpOworICAgIHJldHVybiB0ZXh0Q2hlY2tlclNldHRp
bmdzOworfQorCitUZXh0Q2hlY2tlclNldHRpbmdzOjpUZXh0Q2hlY2tlclNldHRpbmdzKCkKKyAg
ICA6IG1fY29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFjaygwKQorICAgICwgbV9s
YW5ndWFnZXNVcGRhdGVUaW1lcih0aGlzLCAmVGV4dENoZWNrZXJTZXR0aW5nczo6bGFuZ3VhZ2Vz
VXBkYXRlVGltZXJGaXJlZCkKKyAgICAsIG1fc3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1l
cih0aGlzLCAmVGV4dENoZWNrZXJTZXR0aW5nczo6c3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VU
aW1lckZpcmVkKQoreworICAgIG1fc3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQgPSBmYWxzZTsKKyAgICBtX3N0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGZhbHNl
OworfQorCit2b2lkIFRleHRDaGVja2VyU2V0dGluZ3M6OnNldENvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9zdGF0ZS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisKKyAgICAvLyBTZXQgdGhlIGRlZmF1bHQgbGFu
Z3VhZ2UgaWYgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhbnkuCisgICAgaWYgKGVuYWJsZWQgJiYgIUV3
a19UZXh0X0NoZWNrZXI6Omhhc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgc2V0U3BlbGxDaGVja2lu
Z0xhbmd1YWdlcygpOworfQorCit2b2lkIFRleHRDaGVja2VyU2V0dGluZ3M6OnNldFNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcykKK3sKKyAgICBt
X3NwZWxsQ2hlY2tpbmdMYW5ndWFnZXMgPSBsYW5ndWFnZXM7CisgICAgbV9sYW5ndWFnZXNVcGRh
dGVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJTZXR0aW5nczo6
bGFuZ3VhZ2VzVXBkYXRlVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxUZXh0Q2hlY2tlclNldHRp
bmdzPiopCit7CisgICAgRXdrX1RleHRfQ2hlY2tlcjo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1
YWdlcyhtX3NwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOworfQorCit2b2lkIFRleHRDaGVja2VyU2V0
dGluZ3M6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJhY2tTZXQoRXdrX1NldHRp
bmdzX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIGNhbGxiYWNrKQoreworICAg
IG1fY29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFjayA9IGNhbGxiYWNrOworfQor
Cit2b2lkIFRleHRDaGVja2VyU2V0dGluZ3M6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdl
Q2FsbGJhY2tDYWxsKCkKK3sKKyAgICBpZiAobV9jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5n
ZUNhbGxiYWNrKQorICAgICAgICBtX3NwZWxsQ2hlY2tpbmdTZXR0aW5nQ2hhbmdlVGltZXIuc3Rh
cnRPbmVTaG90KDApOworfQorCit2b2lkIFRleHRDaGVja2VyU2V0dGluZ3M6OnNwZWxsQ2hlY2tp
bmdTZXR0aW5nQ2hhbmdlVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxUZXh0Q2hlY2tlclNldHRp
bmdzPiopCit7CisgICAgbV9jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZUNhbGxiYWNrKG1f
c3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlclNldHRpbmdzLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyU2V0dGluZ3MuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDc4YzNjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlclNldHRpbmdzLmgKQEAgLTAsMCAr
MSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBUZXh0Q2hlY2tlclNldHRpbmdzX2gKKyNkZWZpbmUgVGV4dENo
ZWNrZXJTZXR0aW5nc19oCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgIlRl
eHRDaGVja2VyU3RhdGUuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgImV3a19zZXR0
aW5ncy5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgVGV4dENoZWNrZXJTZXR0aW5ncyA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRD
aGVja2VyU2V0dGluZ3M+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgVGV4dENoZWNrZXJTZXR0aW5n
cyogc2hhcmVkKCk7CisKKyAgICBjb25zdCBXZWJLaXQ6OlRleHRDaGVja2VyU3RhdGUmIHN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0Q29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0U3BlbGxDaGVja2luZ0xhbmd1YWdl
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgPSBWZWN0b3I8U3RyaW5nPigpKTsKKworICAgIHZvaWQg
Y29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFja1NldChFd2tfU2V0dGluZ3NfQ29u
dGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2IgY2FsbGJhY2spOworICAgIHZvaWQgY29u
dGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFja0NhbGwoKTsKKworcHJpdmF0ZToKKyAg
ICBUZXh0Q2hlY2tlclNldHRpbmdzKCk7CisKKyAgICB2b2lkIGxhbmd1YWdlc1VwZGF0ZVRpbWVy
RmlyZWQoV2ViQ29yZTo6VGltZXI8VGV4dENoZWNrZXJTZXR0aW5ncz4qKTsKKyAgICB2b2lkIHNw
ZWxsQ2hlY2tpbmdTZXR0aW5nQ2hhbmdlVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxUZXh0Q2hl
Y2tlclNldHRpbmdzPiopOworCisgICAgV2ViS2l0OjpUZXh0Q2hlY2tlclN0YXRlIG1fc3RhdGU7
CisgICAgVmVjdG9yPFN0cmluZz4gbV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzOworICAgIEV3a19T
ZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZV9DYiBtX2NvbnRpbnVvdXNT
cGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJhY2s7CisKKyAgICBXZWJDb3JlOjpUaW1lcjxUZXh0Q2hl
Y2tlclNldHRpbmdzPiBtX2xhbmd1YWdlc1VwZGF0ZVRpbWVyOworICAgIFdlYkNvcmU6OlRpbWVy
PFRleHRDaGVja2VyU2V0dGluZ3M+IG1fc3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1lcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hF
Q0spCisjZW5kaWYgLy8gVGV4dENoZWNrZXJTZXR0aW5nc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192892</attachid>
            <date>2013-03-13 03:17:05 -0700</date>
            <delta_ts>2013-03-22 08:09:45 -0700</delta_ts>
            <desc>apply Christophe&apos;s suggestions</desc>
            <filename>spelling-settings-refactor.patch</filename>
            <type>text/plain</type>
            <size>24667</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2NGUzOGU2Li4xOTBhZjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTcg
QEAKKzIwMTMtMDMtMTMgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBUZXh0IENoZWNrZXIncyBzZXR0aW5ncyByZWZh
Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEx
NzEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNl
IFdLMidzICdUZXh0Q2hlY2tlclN0YXRlJyBvYmplY3QgYXMgdGhlIHN0b3JlIGZvciB0aGUgdGV4
dCBjaGVja2VyIHNldHRpbmdzLgorICAgICAgICBJdCdzIHNoYXJlZCBiZXR3ZWVuIHRoZSBjbGll
bnQgKGV3ayBBUEkgcGFydCkgYW5kIFdlYlByb2Nlc3MgKHJlYWQgb25seSkuCisgICAgICAgIFRo
YW5rcyB0byBpdCwgd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIGFueSBhZGRpdGlvbmFsIHN0cnVjdHVy
ZSB3aXRoCisgICAgICAgIHRoZSBzZXR0aW5ncyBvbiBld2sgc2lkZS4KKworICAgICAgICBJbiAn
VGV4dENoZWNrZXJFZmwuY3BwJywgaXQncyBubyBuZWVkIHRvIGNhbGwgdGhlIGNsaWVudCdzIG1l
dGhvZHMKKyAgICAgICAgdGhyb3VnaCBpbnRlcm5hbCBXSzIgbWV0aG9kcyAoV2ViVGV4dENoZWNr
ZXIpIHRvIGdldC9zZXQKKyAgICAgICAgdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0
dGluZy4gVGhlc2Ugc2V0dGluZ3MgY2FuIGJlIGNhbGxlZAorICAgICAgICBkaXJlY3RseSwgc2lt
aWxhcmx5IHRvIE1hYyAoVGV4dENoZWNrZXJNYWMubW0pIGltcGxlbWVudGF0aW9uLgorCisgICAg
ICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBuZXcgJ1RleHRDaGVja2VyU2V0
dGluZ3MuY3BwJyBmaWxlIHRvIHRoZSBidWlsZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19zZXR0aW5ncy5jcHA6CisgICAgICAgIChld2tfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KToKKyAgICAgICAgKGV3a19zZXR0aW5nc19jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KToKKyAgICAgICAgKGV3a19zZXR0aW5n
c19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KToKKyAgICAgICAgVXNlIHRoZSAnVGV4dENo
ZWNrZXJTZXR0aW5ncycgY2xhc3MgaW5zdGVhZCBvZiBpbnRlcm5hbAorICAgICAgICBld2sgc3Ry
dWN0dXJlLgorCisgICAgICAgIChld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX3NldCk6CisgICAgICAgIERvIG5vdCBjYWxsIHRoZSBjbGllbnQncyBjYWxsYmFj
ayByZXNwb25zaWJsZSBmb3IgdGhlIHNldHRpbmcKKyAgICAgICAgY2hhbmdlIHVubGVzcyBXZWJL
aXQgY2hhbmdlcyB0aGUgc2V0dGluZyAodHJvdWdoIHRoZSBjb250ZXh0CisgICAgICAgIG1lbnUg
J0NoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZycgb3B0aW9uKS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwOgorICAgICAgICAoRXdrX1RleHRfQ2hl
Y2tlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIFJlbW92ZSAnaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQnIGFuZCAnc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkJworICAg
ICAgICBjYWxsYmFja3MgZnJvbSB0aGUgV0tUZXh0Q2hlY2tlcidzIGNsaWVudC4gVGhleSBhcmUg
bm90IG5lZWRlZCBhbnkgbG9uZ2VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHA6CisgICAgICAgIChURVNUX0YpOgorICAgICAg
ICBVcGRhdGUgdGhlIHRlc3QgcmVzcG9uc2libGUgZm9yIHRoZSBub3RpZmljYXRpb24gYWJvdXQg
dGhlIHNldHRpbmcgY2hhbmdlCisgICAgICAgIGFjY29yZGluZyB0byBjaGFuZ2VzIGluICdld2tf
c2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCcuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgVXNlIHRoZSBnbG9iYWwgJ1RleHRDaGVja2Vy
U3RhdGUnIG9iamVjdC4KKworICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6
c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2Vy
OjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgTWFyayBhcyB1
bmltcGxlbWVudGVkIGJlY2F1c2Ugb2YgRUZMIGRvZXNuJ3QgaW1wbGVtZW50IGl0LgorCisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQpOgorICAgICAgICBTYXZlIGEgbmV3IHNldHRpbmcgdmFsdWUgdG8gdGhlICdUZXh0Q2hlY2tl
clN0YXRlJyBhbmQgbm90aWZ5CisgICAgICAgIHRoZSBjbGllbnQgYWJvdXQgdGhlIHNldHRpbmcg
Y2hhbmdlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbgorICAgICAgICBjb250ZXh0IG1lbnUg
J0NoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZycgb3B0aW9uIGhhcyBiZWVuIHRvZ2dsZWQuCisK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIFNhdmUgYSBuZXcgc2V0dGluZyB2YWx1ZSB0byB0
aGUgJ1RleHRDaGVja2VyU3RhdGUnLiBDYWxsZWQgYnkgV0tUZXh0Q2hlY2tlcidzIEFQSS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJTZXR0aW5ncy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlclNldHRpbmdzOjpzaGFyZWQpOgorICAgICAgICBE
ZWZpbmUgc2luZ2xldG9uIHRvIGJlIGVhc3kgYWNjZXNzaWJsZSBpbiBib3RoIGV3a19zZWV0aW5n
LmNwcCBhbmQgVGV4dENoZWNrZXJFZmwuY3BwLgorCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyU2V0dGluZ3M6OlRleHRDaGVja2VyU2V0dGluZ3MpOgorICAgICAgICBTZXQgdGhlIGRlZmF1
bHQgdmFsdWVzIG9mIHNwZWxsL2dyYW1tYXIgY2hlY2tpbmcgdG8gZmFsc2UuCisgICAgICAgIFNl
dCB0aGUgY2xpZW50IGNhbGxiYWNrIHRvIDAuCisKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXJTZXR0aW5nczo6flRleHRDaGVja2VyU2V0dGluZ3MpOgorICAgICAgICBFbXB0eSBkZXN0cnVj
dG9yLgorCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyU2V0dGluZ3M6OnNldENvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIFRoZSBtZXRob2QgaXMgY2FsbGVkIGZv
ciBib3RoICdjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQnIGFuZAor
ICAgICAgICAnZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9z
ZXQnLgorICAgICAgICBJdCBzYXZlcyBhIHZhbHVlIG9mICdjb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQnIGFuZCBsb2FkcyB0aGUgZGVmYXVsdAorICAgICAgICBsYW5ndWFnZSB0byBwZXJm
b3JtIHNwZWxsIGNoZWNraW5nIGlmIHRoZSB1c2VyIGRpZG4ndCBzZXQgaXQuCisKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXJTZXR0aW5nczo6c2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6
CisgICAgICAgIFNhdmUgbmV3IGxhbmd1YWdlcyB0byBiZSBzdXBwb3J0ZWQgZm9yIHNwZWxsIGNo
ZWNraW5nLgorICAgICAgICBBcyB0aGUgRUZMIHRleHQgY2hlY2tlciBzdXBwb3J0cyBtdWx0aXBs
ZSBsYW5ndWFnZXMsIHRoZSBsYW5ndWFnZXMgYXJlIGxvYWRlZCBvbiB0aW1lcgorICAgICAgICB0
byBkbyBub3QgYmxvY2sgVUkuCisKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJTZXR0aW5n
czo6bGFuZ3VhZ2VzVXBkYXRlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyU2V0dGluZ3M6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJhY2tTZXQpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlclNldHRpbmdzOjpjb250aW51b3VzU3BlbGxDaGVj
a2luZ0NoYW5nZUNhbGxiYWNrQXN5bmNDYWxsKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXJTZXR0aW5nczo6c3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1lckZpcmVkKToKKworICAg
ICAgICAqIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJTZXR0aW5ncy5oOiBBZGRlZC4KKyAgICAg
ICAgKFRleHRDaGVja2VyU2V0dGluZ3MpOgorICAgICAgICBEZWZpbmUgY2xhc3MgdG8gc3RvcmUg
J1RleHRDaGVja2VyU3RhdGUnIG9iamVjdCBhbmQgbWV0aG9kcyByZXNwb25zaWJsZSBmb3IKKyAg
ICAgICAgdGV4dCBjaGVja2VyIHNldHRpbmdzLgorCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyU2V0dGluZ3M6OnN0YXRlKToKKyAgICAgICAgUmV0dXJuIHRoZSBjb25zdGFudCByZWZlcmVu
Y2UgdG8gdGhlICdUZXh0Q2hlY2tlclN0YXRlJyBvYmplY3QuCisKIDIwMTMtMDMtMTIgIE1hbnVl
bCBSZWdvIENhc2Fzbm92YXMgIDxyZWdvQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV0sy
XSBSRUdSRVNTSU9OKHIxNDUwODEpOiBVbml0IHRlc3RzIG5vdCB3b3JraW5nIGlmIGxvY2FsZSBp
cyBub3QgRW5nbGlzaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA4ZjZiOWJhLi4xYzM3
ZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtOTgsNiArOTgsNyBAQCBsaXN0KEFQ
UEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRy
b2xsZXJDbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9SZXF1ZXN0TWFuYWdlckNsaWVu
dEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAorICAgIFVJUHJv
Y2Vzcy9lZmwvVGV4dENoZWNrZXJTZXR0aW5ncy5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1ZpYnJh
dGlvbkNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1ZpZXdDbGllbnRFZmwuY3BwCiAg
ICAgVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKaW5kZXggM2Q0MzRkZjEuLmZlNTU3
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0
aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRp
bmdzLmNwcApAQCAtMzQsMTEgKzM0LDkgQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dlYlByZWZlcmVu
Y2VzLmg+CiAKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJUZXh0Q2hlY2tlclNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgogI2luY2x1ZGUgImV3a190ZXh0
X2NoZWNrZXJfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPEVjb3JlLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNlbmRpZgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwpAQCAtNTMsMzUgKzUxLDYgQEAgV2ViS2l0OjpXZWJQcmVmZXJlbmNl
cyogRXdrU2V0dGluZ3M6OnByZWZlcmVuY2VzKCkKICAgICByZXR1cm4gbV92aWV3LT5wYWdlKCkt
PnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpOwogfQogCi0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
Ci1zdGF0aWMgc3RydWN0IHsKLSAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkIDogMTsKLSAgICBWZWN0b3I8U3RyaW5nPiBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzOwotICAg
IEV3a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZV9DYiBvbkNvbnRp
bnVvdXNTcGVsbENoZWNraW5nOwotfSBld2tUZXh0Q2hlY2tlclNldHRpbmdzID0geyBmYWxzZSwg
VmVjdG9yPFN0cmluZz4oKSwgMCB9OwotCi1zdGF0aWMgRWluYV9Cb29sIG9uQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdJZGxlcih2b2lkKikKLXsKLSAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5n
cy5vbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nKQotICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRp
bmdzLm9uQ29udGludW91c1NwZWxsQ2hlY2tpbmcoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5pc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Ci0KLSAgICByZXR1cm4gRUNPUkVfQ0FMTEJB
Q0tfQ0FOQ0VMOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNT
ZXRVcGRhdGUodm9pZCopCi17Ci0gICAgLy8gRklYTUU6IENvbnNpZGVyIHRvIGRlbGVnYXRlIGNh
bGxpbmcgb2YgdGhpcyBtZXRob2QgaW4gV2ViUHJvY2VzcyB0byBkbyBub3QgZGVsYXkvYmxvY2sg
VUlQcm9jZXNzLgotICAgIEV3a19UZXh0X0NoZWNrZXI6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzKTsKLSAg
ICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOwotfQotCi1zdGF0aWMgdm9pZCBzcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzU2V0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuZXdMYW5ndWFnZXMpCi17
Ci0gICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzID0gbmV3
TGFuZ3VhZ2VzOwotICAgIGVjb3JlX2lkbGVyX2FkZChzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0
VXBkYXRlLCAwKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKLQogRWluYV9Cb29s
IGV3a19zZXR0aW5nc19mdWxsc2NyZWVuX2VuYWJsZWRfc2V0KEV3a19TZXR0aW5ncyogc2V0dGlu
Z3MsIEVpbmFfQm9vbCBlbmFibGUpCiB7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAt
MjA1LDE0ICsxNzQsMTQgQEAgRWluYV9Cb29sIGV3a19zZXR0aW5nc19kbnNfcHJlZmV0Y2hpbmdf
ZW5hYmxlZF9nZXQoY29uc3QgRXdrX1NldHRpbmdzKiBzZXR0aW5ncykKIHZvaWQgZXdrX3NldHRp
bmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldChFd2tfU2V0dGluZ3Nf
Q29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2IgY2FsbGJhY2spCiB7CiAjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCi0gICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5vbkNvbnRpbnVvdXNT
cGVsbENoZWNraW5nID0gY2FsbGJhY2s7CisgICAgVGV4dENoZWNrZXJTZXR0aW5nczo6c2hhcmVk
KCkuY29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFja1NldChjYWxsYmFjayk7CiAj
ZW5kaWYKIH0KIAogRWluYV9Cb29sIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWRfZ2V0KCkKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICByZXR1cm4g
ZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsK
KyAgICByZXR1cm4gVGV4dENoZWNrZXJTZXR0aW5nczo6c2hhcmVkKCkuc3RhdGUoKS5pc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwogI2Vu
ZGlmCkBAIC0yMjEsMTkgKzE5MCw5IEBAIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpCiB2b2lkIGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KEVpbmFfQm9vbCBlbmFibGUpCiB7CiAjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKGV3a1Rl
eHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgIT0gZW5h
YmxlKSB7Ci0gICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQgPSBlbmFibGU7Ci0KLSAgICAgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGUpOwotCi0gICAgICAgIC8v
IFNldHMgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaWYgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhbnkuCi0g
ICAgICAgIGlmIChlbmFibGUgJiYgIUV3a19UZXh0X0NoZWNrZXI6Omhhc0RpY3Rpb25hcnkoKSkK
LSAgICAgICAgICAgIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQoVmVjdG9yPFN0cmluZz4oKSk7
Ci0KLSAgICAgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxD
aGVja2luZykKLSAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChvbkNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nSWRsZXIsIDApOwotICAgIH0KKyAgICBXS1RleHRDaGVja2VyQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKCEhZW5hYmxlKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGVuYWJsZSk7CiAjZW5kaWYKIH0KIApAQCAtMjU2LDcgKzIxNSw3IEBAIHZvaWQgZXdr
X3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hhciogbGFuZ3Vh
Z2VzKQogICAgIFZlY3RvcjxTdHJpbmc+IG5ld0xhbmd1YWdlczsKICAgICBTdHJpbmc6OmZyb21V
VEY4KGxhbmd1YWdlcykuc3BsaXQoJywnLCBuZXdMYW5ndWFnZXMpOwogCi0gICAgc3BlbGxDaGVj
a2luZ0xhbmd1YWdlc1NldChuZXdMYW5ndWFnZXMpOworICAgIFRleHRDaGVja2VyU2V0dGluZ3M6
OnNoYXJlZCgpLnNldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMobmV3TGFuZ3VhZ2VzKTsKICNlbmRp
ZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dGV4dF9jaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190
ZXh0X2NoZWNrZXIuY3BwCmluZGV4IDJiZTI4YzQuLjgyNjFhYmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCkBAIC03
MSwxNiArNzEsNiBAQCBzdGF0aWMgaW5saW5lIENsaWVudENhbGxiYWNrcyYgY2xpZW50Q2FsbGJh
Y2tzKCkKICAgICByZXR1cm4gY2xpZW50Q2FsbGJhY2tzOwogfQogCi1zdGF0aWMgYm9vbCBpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4g
ZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKLX0K
LQotc3RhdGljIHZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5h
YmxlZCwgY29uc3Qgdm9pZCopCi17Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZF9zZXQoZW5hYmxlZCk7Ci19Ci0KIHN0YXRpYyB1aW50NjRfdCB1bmlx
dWVTcGVsbERvY3VtZW50VGFnKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKikKIHsKICAgICBp
ZiAoY2xpZW50Q2FsbGJhY2tzKCkudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCkBAIC0x
ODUsOCArMTc1LDggQEAgdm9pZCBpbml0aWFsaXplKCkKICAgICAgICAga1dLVGV4dENoZWNrZXJD
bGllbnRDdXJyZW50VmVyc2lvbiwKICAgICAgICAgMCwgLy8gY2xpZW50SW5mbwogICAgICAgICAw
LCAvLyBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZAotICAgICAgICBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCwKLSAgICAgICAgc2V0Q29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkLAorICAgICAgICAwLCAvLyBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZAorICAgICAgICAwLCAvLyBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQKICAgICAg
ICAgMCwgLy8gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkCiAgICAgICAgIDAsIC8vIHNldEdyYW1t
YXJDaGVja2luZ0VuYWJsZWQKICAgICAgICAgdW5pcXVlU3BlbGxEb2N1bWVudFRhZywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl90
ZXh0X2NoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMv
dGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAKaW5kZXggODJkYTA5YS4uM2QxNjNlNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3Rl
eHRfY2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAKQEAgLTI0Nyw3ICsyNDcsOSBAQCBURVNUX0Yo
RVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdf
ZW5hYmxlZCkKIH0KIAogLyoqCi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxiYWNrIGlzIGNhbGxl
ZCB3aGVuIHRoZSBzcGVsbCBjaGVja2luZyBzZXR0aW5nIGhhcyBiZWVuIGNoYW5nZWQuCisgKiBU
ZXN0IHdoZXRoZXIgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzcGVsbCBjaGVja2lu
ZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqIENoYW5naW5nIG9mIHRoaXMgc2V0
dGluZyBhdCB0aGUgV2ViS2l0IGxldmVsIGNhbiBiZSBtYWRlIGFzIGEgcmVzdWx0IG9mIG1vZGlm
eWluZworICogb3B0aW9ucyBpbiBhIENvbnRleHQgTWVudSBieSBhIHVzZXIuCiAgKi8KIFRFU1Rf
RihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19jaGFuZ2VfY2Jfc2V0KQogewpAQCAtMjU1LDYgKzI1Nyw4IEBAIFRFU1RfRihFV0syVW5pdFRl
c3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jf
c2V0KQogCiAgICAgaXNTZXR0aW5nRW5hYmxlZCA9IGV3a19zZXR0aW5nc19jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7CiAgICAgaXNTZXR0aW5nRW5hYmxlZCA9ICFpc1Nl
dHRpbmdFbmFibGVkOworICAgIC8vIFRoZSBub3RpZmljYXRpb25zIGFib3V0IHRoZSBzZXR0aW5n
IGNoYW5nZSBzaG91bGRuJ3QgYmUgc2VudCBpZiB0aGUgY2hhbmdlIHdhcyBtYWRlCisgICAgLy8g
b24gdGhlIGNsaWVudCdzIHJlcXVlc3QgKHB1YmxpYyBBUEkpLgogICAgIGV3a19zZXR0aW5nc19j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KGlzU2V0dGluZ0VuYWJsZWQpOwog
CiAgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNv
bmRzLCBvblRpbWVvdXQsIDApOwpAQCAtMjY0LDMzICsyNjgsMjQgQEAgVEVTVF9GKEVXSzJVbml0
VGVzdEJhc2UsIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9j
Yl9zZXQpCiAgICAgLy8gV2UgY2FuJ3QgY2FsbCBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSBiZWNh
dXNlIGl0IGRvZXNuJ3QgcHJvY2VzcyB0aGUgaWRsZXJzLgogICAgIGVjb3JlX21haW5fbG9vcF9i
ZWdpbigpOwogCi0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgRVhQRUNUX0ZBTFNFKHRpbWVv
dXRUaW1lcik7Ci0jZWxzZQogICAgIEVYUEVDVF9UUlVFKHRpbWVvdXRUaW1lcik7Ci0jZW5kaWYK
LQotICAgIC8vIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGlmIHRoZSBzZXR0aW5n
IG9wdGlvbiBpcyBhbHJlYWR5IHNldC4KLSAgICBpc1NldHRpbmdFbmFibGVkID0gZXdrX3NldHRp
bmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKLSAgICBld2tfc2V0
dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFi
bGVkKTsKIAotICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91
dEluU2Vjb25kcywgb25UaW1lb3V0LCAwKTsKLSAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsK
LQotICAgIC8vIFdoZW4gdGhlIFNQRUxMQ0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQgdGhlIGNhbGxi
YWNrIHdvbid0IGJlIGNhbGxlZCB0b28uCi0gICAgRVhQRUNUX1RSVUUodGltZW91dFRpbWVyKTsK
LQotICAgIC8vIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGlmIHRoZSB1c2VyIGhh
cyBpbnZhbGlkYXRlZCBpdC4KLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19jaGFuZ2VfY2Jfc2V0KDApOwotICAgIGlzU2V0dGluZ0VuYWJsZWQgPSBld2tfc2V0dGlu
Z3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpOwotICAgIGlzU2V0dGlu
Z0VuYWJsZWQgPSAhaXNTZXR0aW5nRW5hYmxlZDsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFibGVkKTsKLQotICAgIHRp
bWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25U
aW1lb3V0LCAwKTsKLSAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKLQotICAgIC8vIElmIHRo
ZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVkLCB0aGUgY2FsbGJhY2sgaXMgbm90IHNldC4K
LSAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0VGltZXIpOworICAgIC8qIFRoZSBjYWxsYmFjayBzaG91
bGQgYmUgY2FsbGVkIGlmIHRoZSBjb250ZXh0IG1lbnUgIkNoZWNrIFNwZWxsaW5nIFdoaWxlIFR5
cGluZyIgb3B0aW9uCisgICAgICAgd2FzIHRvZ2dsZWQgYnkgdGhlIHVzZXIuCisgICAgRklYTUU6
CisgICAgMSkgSW52b2tlIHRoZSBjb250ZXh0IG1lbnUgb24gdGhlIGlucHV0IGZpZWxkLgorICAg
IDIpIENob29zZSB0aGUgc3ViIG1lbnUgIlNwZWxsaW5nIGFuZCBHcmFtbWFyIiBvcHRpb24gKG5v
dCBpbXBsZW1lbnRlZCBmb3IgV0syKS4KKyAgICAzKSBUb2dnbGUgIkNoZWNrIFNwZWxsaW5nIFdo
aWxlIFR5cGluZyIgb3B0aW9uLgorICAgIDQpIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxiYWNrIGlz
IGNhbGxlZC4gKi8KKworICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGlm
IHRoZSB1c2VyIGhhcyBpbnZhbGlkYXRlZCBpdC4KKyAgICBGSVhNRToKKyAgICAxKSBDYWxsIGV3
a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQoMCkgdG8g
bm90aWZ5IHRoZSBXZWJLaXQgdGhhdAorICAgICAgIHRoZSBjbGllbnQgaXMgbm90IGludGVyZXN0
ZWQgaW4gdGhlIHNldHRpbmcgY2hhbmdlLgorICAgIDIpIEludm9rZSB0aGUgY29udGV4dCBtZW51
IG9uIHRoZSBpbnB1dCBmaWVsZC4KKyAgICAzKSBDaG9vc2UgdGhlIHN1YiBtZW51ICJTcGVsbGlu
ZyBhbmQgR3JhbW1hciIgb3B0aW9uIChub3QgaW1wbGVtZW50ZWQgZm9yIFdLMikuCisgICAgNCkg
VG9nZ2xlICJDaGVjayBTcGVsbGluZyBXaGlsZSBUeXBpbmciIG9wdGlvbi4KKyAgICA1KSBDaGVj
ayB3aGV0aGVyIHRoZSBjYWxsYmFjayB3YXMgY2FsbGVkLiAqLwogfQogCiAvKioKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKaW5kZXggMjY0NzNk
Ni4uNDRlMDM3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0
Q2hlY2tlckVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hl
Y2tlckVmbC5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg
MjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiVGV4dENoZWNrZXIuaCIKIAorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgogCiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAjaW5jbHVk
ZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlclNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiV2ViVGV4dENoZWNrZXIuaCIKICNlbmRpZgogCkBAIC0zOSw3MyArNDEsNTgg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0
aWMgVGV4dENoZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwotCiBjb25zdCBUZXh0Q2hlY2tl
clN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQogewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQot
ICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOwotICAgIGlmIChkaWRJ
bml0aWFsaXplU3RhdGUpCi0gICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwotCi0gICAg
V2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+
Y2xpZW50KCk7Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKLSAgICB0
ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5ncmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCk7Ci0KLSAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOworICAg
IHJldHVybiBUZXh0Q2hlY2tlclNldHRpbmdzOjpzaGFyZWQoKS5zdGF0ZSgpOworI2Vsc2UKKyAg
ICBzdGF0aWMgVGV4dENoZWNrZXJTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gc3RhdGU7CiAjZW5k
aWYKLSAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKIH0KIAogYm9vbCBUZXh0Q2hlY2tlcjo6
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKQogewotI2lmIEVOQUJMRShTUEVMTENI
RUNLKQotICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNvbnRp
bnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOwotI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgogfQogCiB2b2lkIFRleHRDaGVja2VyOjpzZXRD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCkKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBpZiAoc3RhdGUoKS5p
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCkKKyAgICBpZiAoVGV4dENoZWNrZXJTZXR0aW5nczo6c2hhcmVkKCkuc3RhdGUo
KS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdGV4dENoZWNrZXJTdGF0ZS5p
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkOwotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0Q29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKTsKKyAgICBUZXh0Q2hlY2tlclNldHRpbmdzOjpzaGFyZWQoKS5zZXRDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworICAg
IC8vIE5vdGlmeSB0aGUgY2xpZW50IGFib3V0IHRoZSBzZXR0aW5nIGNoYW5nZS4KKyAgICBUZXh0
Q2hlY2tlclNldHRpbmdzOjpzaGFyZWQoKS5jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZUNh
bGxiYWNrQXN5bmNDYWxsKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCk7CiAjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6c2V0
R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKK3Zv
aWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCkKIHsKLSNpZiBF
TkFCTEUoU1BFTExDSEVDSykKLSAgICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQgPT0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0
ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZDsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdy
YW1tYXJDaGVja2luZ0VuYWJsZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7Ci0jZW5kaWYKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQogewotICAgIFRleHRDaGVj
a2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLXZv
aWQgVGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBl
bmFibGVkKQotewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIHRleHRDaGVja2VyU3RhdGUu
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyAgICBpZiAoVGV4dENoZWNrZXJT
ZXR0aW5nczo6c2hhcmVkKCkuc3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBUZXh0Q2hlY2tlclNldHRpbmdz
OjpzaGFyZWQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoZW5hYmxlZCk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICNlbmRpZgogfQogCit2b2lkIFRleHRD
aGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwogaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxE
b2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCiB7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyU2V0
dGluZ3MuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlclNldHRp
bmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTMxMTk4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlclNl
dHRpbmdzLmNwcApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGV4dENoZWNrZXJTZXR0aW5ncy5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisK
KyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitUZXh0Q2hlY2tlclNldHRpbmdzJiBU
ZXh0Q2hlY2tlclNldHRpbmdzOjpzaGFyZWQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
VGV4dENoZWNrZXJTZXR0aW5ncywgdGV4dENoZWNrZXJTZXR0aW5ncywgKCkpOworICAgIHJldHVy
biB0ZXh0Q2hlY2tlclNldHRpbmdzOworfQorCitUZXh0Q2hlY2tlclNldHRpbmdzOjpUZXh0Q2hl
Y2tlclNldHRpbmdzKCkKKyAgICA6IG1fY29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxs
YmFjaygwKQorICAgICwgbV9sYW5ndWFnZXNVcGRhdGVUaW1lcih0aGlzLCAmVGV4dENoZWNrZXJT
ZXR0aW5nczo6bGFuZ3VhZ2VzVXBkYXRlVGltZXJGaXJlZCkKKyAgICAsIG1fc3BlbGxDaGVja2lu
Z1NldHRpbmdDaGFuZ2VUaW1lcih0aGlzLCAmVGV4dENoZWNrZXJTZXR0aW5nczo6c3BlbGxDaGVj
a2luZ1NldHRpbmdDaGFuZ2VUaW1lckZpcmVkKQoreworICAgIG1fc3RhdGUuaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQgPSBmYWxzZTsKKyAgICBtX3N0YXRlLmlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCA9IGZhbHNlOworfQorCitUZXh0Q2hlY2tlclNldHRpbmdzOjp+VGV4dENoZWNr
ZXJTZXR0aW5ncygpCit7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJTZXR0aW5nczo6c2V0Q29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3N0YXRlLmlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKworICAgIC8vIFNldCB0
aGUgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4KKyAgICBpZiAo
ZW5hYmxlZCAmJiAhRXdrX1RleHRfQ2hlY2tlcjo6aGFzRGljdGlvbmFyeSgpKQorICAgICAgICBz
ZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJTZXR0aW5n
czo6c2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3Vh
Z2VzKQoreworICAgIG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IGxhbmd1YWdlczsKKyAgICBt
X2xhbmd1YWdlc1VwZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBUZXh0Q2hl
Y2tlclNldHRpbmdzOjpsYW5ndWFnZXNVcGRhdGVUaW1lckZpcmVkKFRpbWVyPFRleHRDaGVja2Vy
U2V0dGluZ3M+KikKK3sKKyAgICBFd2tfVGV4dF9DaGVja2VyOjp1cGRhdGVTcGVsbENoZWNraW5n
TGFuZ3VhZ2VzKG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7Cit9CisKK3ZvaWQgVGV4dENoZWNr
ZXJTZXR0aW5nczo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFja1NldChDb250
aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZUNhbGxiYWNrIGNhbGxiYWNrKQoreworICAgIG1fY29u
dGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFjayA9IGNhbGxiYWNrOworfQorCit2b2lk
IFRleHRDaGVja2VyU2V0dGluZ3M6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJh
Y2tBc3luY0NhbGwoKQoreworICAgIGlmIChtX2NvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdl
Q2FsbGJhY2spCisgICAgICAgIG1fc3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1lci5zdGFy
dE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJTZXR0aW5nczo6c3BlbGxDaGVja2lu
Z1NldHRpbmdDaGFuZ2VUaW1lckZpcmVkKFRpbWVyPFRleHRDaGVja2VyU2V0dGluZ3M+KikKK3sK
KyAgICBtX2NvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJhY2sobV9zdGF0ZS5pc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJTZXR0aW5ncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmRhOTIxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyU2V0dGluZ3MuaApAQCAtMCwwICsxLDcwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFRleHRDaGVja2VyU2V0dGluZ3NfaAorI2RlZmluZSBUZXh0Q2hlY2tlclNldHRp
bmdzX2gKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5jbHVkZSAiVGV4dENoZWNrZXJT
dGF0ZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
Cit0eXBlZGVmIEV3a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZV9D
YiBDb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZUNhbGxiYWNrOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgVGV4dENoZWNrZXJTZXR0aW5ncyB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFRleHRDaGVja2VyU2V0dGluZ3MmIHNoYXJlZCgpOworCisgICAgY29uc3QgVGV4dENoZWNrZXJT
dGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgdm9pZCBzZXRDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiA9IFZlY3RvcjxTdHJpbmc+KCkpOwor
CisgICAgdm9pZCBjb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZUNhbGxiYWNrU2V0KENvbnRp
bnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJhY2spOworICAgIHZvaWQgY29udGludW91c1Nw
ZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFja0FzeW5jQ2FsbCgpOworCitwcml2YXRlOgorICAgIFRl
eHRDaGVja2VyU2V0dGluZ3MoKTsKKyAgICB+VGV4dENoZWNrZXJTZXR0aW5ncygpOworCisgICAg
dm9pZCBsYW5ndWFnZXNVcGRhdGVUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFRleHRDaGVja2Vy
U2V0dGluZ3M+Kik7CisgICAgdm9pZCBzcGVsbENoZWNraW5nU2V0dGluZ0NoYW5nZVRpbWVyRmly
ZWQoV2ViQ29yZTo6VGltZXI8VGV4dENoZWNrZXJTZXR0aW5ncz4qKTsKKworICAgIFRleHRDaGVj
a2VyU3RhdGUgbV9zdGF0ZTsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3NwZWxsQ2hlY2tpbmdMYW5n
dWFnZXM7CisgICAgQ29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFjayBtX2NvbnRp
bnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJhY2s7CisKKyAgICBXZWJDb3JlOjpUaW1lcjxU
ZXh0Q2hlY2tlclNldHRpbmdzPiBtX2xhbmd1YWdlc1VwZGF0ZVRpbWVyOworICAgIFdlYkNvcmU6
OlRpbWVyPFRleHRDaGVja2VyU2V0dGluZ3M+IG1fc3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VU
aW1lcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQ
RUxMQ0hFQ0spCisjZW5kaWYgLy8gVGV4dENoZWNrZXJTZXR0aW5nc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194546</attachid>
            <date>2013-03-22 07:57:39 -0700</date>
            <delta_ts>2013-04-02 01:06:26 -0700</delta_ts>
            <desc>do not use Ewk public API in the text checker implementation</desc>
            <filename>spelling-settings-refactor.patch</filename>
            <type>text/plain</type>
            <size>58754</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhYWNiMjIyLi4zMTM4NTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ2
IEBACisyMDEzLTAzLTIyICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gVGV4dCBDaGVja2VyJ3Mgc2V0dGluZ3MgcmVm
YWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MTcxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVz
ZSBXSzIncyAnVGV4dENoZWNrZXJTdGF0ZScgb2JqZWN0IGFzIHRoZSBzdG9yZSBmb3IgdGhlIHRl
eHQgY2hlY2tlciBzZXR0aW5ncy4KKyAgICAgICAgSXQncyBzaGFyZWQgYmV0d2VlbiB0aGUgY2xp
ZW50IChld2sgQVBJIHBhcnQpIGFuZCBXZWJQcm9jZXNzIChyZWFkIG9ubHkpLgorICAgICAgICBU
aGFua3MgdG8gaXQsIHdlIGRvbid0IGhhdmUgdG8ga2VlcCBhbnkgYWRkaXRpb25hbCBzdHJ1Y3R1
cmUgd2l0aAorICAgICAgICB0aGUgc2V0dGluZ3Mgb24gZXdrIHNpZGUuCisKKyAgICAgICAgTW92
ZSB0aGUgRXdrJ3MgdGV4dCBjaGVja2VyIHNldHRpbmdzIEFQSXMgZnJvbSB0aGUgZXdrX3NldHRp
bmdzLmgvY3BwIHRvCisgICAgICAgIHRoZSBld2tfdGV4dF9jaGVja2VyLmgvY3BwIGFzIHRoZXkg
YXJlIG5vdCBjb25uZWN0ZWQgd2l0aCBFd2tfVmlldy9Fd2tfU2V0dGluZ3Mgb2JqZWN0LgorICAg
ICAgICBXSzIncyBDIEFQSSBrZWVwcyB0ZXh0IGNoZWNrZXIgY2FsbGJhY2tzIGFuZCBpdHMgc2V0
dGluZ3MgaW4gb25lIFdLVGV4dENoZWNrZXIuaCBmaWxlLgorICAgICAgICBUaGlzIGNoYW5nZSBh
bGxvd3MgdG8ga2VlcCB0aGUgY2xpZW50IGNhbGxiYWNrIHJlc3BvbnNpYmxlIGZvciB0aGUgY29u
dGludW91cworICAgICAgICBzcGVsbCBjaGVja2luZyBzZXR0aW5ncyBjaGFuZ2UgaW4gdGhlIHRl
eHQgY2hlY2tlciBjbGllbnQgY2FsbGJhY2tzIHN0cnVjdC4KKworICAgICAgICBJbiAnVGV4dENo
ZWNrZXJFZmwuY3BwJywgdGhlcmUgaXMgbm90IG5lZWQgdG8gY2FsbCB0aGUgY2xpZW50J3MgbWV0
aG9kcworICAgICAgICB0aHJvdWdoIHRoZSBpbnRlcm5hbCBXSzIgbWV0aG9kcyAoV2ViVGV4dENo
ZWNrZXIpIHRvIGdldC9zZXQKKyAgICAgICAgdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcg
c2V0dGluZy4gVGhlc2Ugc2V0dGluZ3MgY2FuIGJlIGNhbGxlZAorICAgICAgICBkaXJlY3RseSwg
c2ltaWxhcmx5IHRvIE1hYyAoVGV4dENoZWNrZXJNYWMubW0pIGltcGxlbWVudGF0aW9uLgorCisg
ICAgICAgIEludHJvZHVjZSBhIG5ldyBjbGFzcyB0byBpbnZva2UgdGhlIHNwZWxsIGNoZWNrZXIg
ZW5naW5lIEFQSS4KKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFzIGJvdGggZXdrX3Rl
eHRfY2hlY2tlciBhbmQgVGV4dENoZWNrZXJTZXR0aW5ncyByZXF1aXJlCisgICAgICAgIGFjY2Vz
cyB0byB0aGUgc3BlbGwgY2hlY2tlciBFbmdpbmUuCisgICAgICAgIEl0IGFsbG93cyB0byBnZXQg
cmlkIG9mIHRoZSBFbmNoYW50IGhlbHBlcnMgZnJvbSBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUu
aC4KKyAgICAgICAgVGhpcyBjbGFzcyBjb3VsZCBiZSBlYXNpbHkgdXNlZCB0byByZXBsYWNlIEVu
Y2hhbnQgbGlicmFyeSB3aXRoIHRoZSBvdGhlcgorICAgICAgICBzcGVsbCBjaGVja2VyIGVuZ2lu
ZS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICBBZGQgbmV3IGZpbGVz
IHRvIHRoZSBidWlsZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
LmNwcDoKKyAgICAgICAgKEV3a0NvbnRleHQ6OkV3a0NvbnRleHQpOgorICAgICAgICBSZW1vdmUg
RXdrIEFQSXMgdXNhZ2UuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGlu
Z3MuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oOgorICAg
ICAgICBSZW1vdmUgdGV4dCBjaGVja2VyIHNldHRpbmdzIGZyb20gZXdrX3NldHRpbmdzLmgvY3Bw
LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHA6Cisg
ICAgICAgIChDbGllbnRDYWxsYmFja3MpOgorICAgICAgICBBZGQgdGhlIGNsaWVudCBjYWxsYmFj
ayByZXNwb25zaWJsZSBmb3IgdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcKKyAgICAgICAg
c2V0dGluZyBjaGFuZ2UgdG8gdGhlIENsaWVudENhbGxiYWNrcyBzdHJ1Y3QuCisKKyAgICAgICAg
KHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIENhbGwgdGhlIGNs
aWVudCBjYWxsYmFjayAoaWYgZGVmaW5lZCkgd2hlbiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5n
IHNldHRpbmcKKyAgICAgICAgd2FzIGNoYW5nZWQgYnkgV2ViS2l0LgorCisgICAgICAgIChjaGVj
a1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoZ3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAo
bGVhcm5Xb3JkKToKKyAgICAgICAgKGlnbm9yZVdvcmQpOgorICAgICAgICBObyBiZWhhdmlvciBj
aGFuZ2UuIENhbGwgdGhlIHNwZWxsIGNoZWNraW5nIG1ldGhvZHMgdGhyb3VnaCBUZXh0Q2hlY2tl
ckVuZ2luZSBjbGFzcy4KKyAgICAgICAgaW5zdGVhZCBvZiB0ZXh0Q2hlY2tlckVuY2hhbnQgY2xh
c3MuCisKKyAgICAgICAgKEV3a19UZXh0X0NoZWNrZXI6OmluaXRpYWxpemUpOgorICAgICAgICBS
ZW1vdmUgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgY2FsbGJhY2sgZnJvbSB0aGUg
V0tUZXh0Q2hlY2tlcidzIGNsaWVudC4KKyAgICAgICAgSW4gVGV4dENoZWNrZXJFZmwsIFRleHRD
aGVja2VyU2V0dGluZ3MgaXMgY2FsbGVkIGRpcmVjdGx5IHRvIGNoZWNrIHNldHRpbmcuCisKKyAg
ICAgICAgKGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X2dldCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJs
ZV9sYW5ndWFnZXNfZ2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzX3NldCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlc19nZXQpOgorICAgICAgICBNb3ZlIEFQSXMgZnJvbSBld2tfc2V0dGluZ3Mu
aC9jcHAgdG8gdGhlIGV3a190ZXh0X2NoZWNrZXIuaC9jcHAKKworICAgICAgICAoZXdrX3RleHRf
Y2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KToKKyAgICAgICAg
RG8gbm90IGNhbGwgdGhlIGNsaWVudCdzIGNhbGxiYWNrIHJlc3BvbnNpYmxlIGZvciB0aGUgc2V0
dGluZworICAgICAgICBjaGFuZ2UgdW5sZXNzIFdlYktpdCBjaGFuZ2VzIHRoZSBzZXR0aW5nICh0
cm91Z2ggdGhlIGNvbnRleHQKKyAgICAgICAgJ0NoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZycg
b3B0aW9uKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIu
aDoKKyAgICAgICAgQWRqdXN0IEFQSXMgbmFtZSB0byB0aGUgZXdrX3RleHRfY2hlY2tlciBzeW50
YXguCisgICAgICAgIFVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGNo
YW5nZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3By
aXZhdGUuaDoKKyAgICAgICAgKEV3a19UZXh0X0NoZWNrZXIpOgorICAgICAgICBSZW1vdmUgRW5j
aGFudCBoZWxwZXJzLiBUaG9zZSBhcmUgY2FsbGVkIHRocm91Z2ggVGV4dENoZWNrZXJFbmdpbmUg
Y2xhc3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4
dF9jaGVja2VyLmNwcDoKKyAgICAgICAgVXBkYXRlIHRoZSB1bml0IHRlc3RzIGFjY29yZGluZyB0
byB0aGUgQVBJcyBuYW1lIGNoYW5nZS4KKyAgICAgICAgVXBkYXRlIHRoZSB0ZXN0IHJlc3BvbnNp
YmxlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFib3V0IHRoZSBzZXR0aW5nIGNoYW5nZQorICAgICAg
ICBhY2NvcmRpbmcgdG8gY2hhbmdlcyBpbiAnZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0Jy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvVGV4
dENoZWNrZXJFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c3RhdGUpOgor
ICAgICAgICBVc2UgdGhlIGdsb2JhbCAnVGV4dENoZWNrZXJTdGF0ZScgb2JqZWN0LgorCisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpn
cmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgTWFyayBhcyB1bmlt
cGxlbWVudGVkIGJlY2F1c2Ugb2YgRUZMIGRvZXNuJ3QgaW1wbGVtZW50IGl0LgorCisgICAgICAg
IChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQp
OgorICAgICAgICBTYXZlIGEgbmV3IHNldHRpbmcgdmFsdWUgdG8gdGhlICdUZXh0Q2hlY2tlclN0
YXRlJyBhbmQgbm90aWZ5CisgICAgICAgIHRoZSBjbGllbnQgYWJvdXQgdGhlIHNldHRpbmcgY2hh
bmdlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbgorICAgICAgICBjb250ZXh0IG1lbnUgJ0No
ZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZycgb3B0aW9uIGhhcyBiZWVuIHRvZ2dsZWQuCisKKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIFNhdmUgYSBuZXcgc2V0dGluZyB2YWx1ZSB0byB0aGUg
J1RleHRDaGVja2VyU3RhdGUnLgorICAgICAgICBDYWxsZWQgYnkgV0tUZXh0Q2hlY2tlcidzIEFQ
SS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFbmdpbmUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJFbmdpbmU6OnNoYXJlZCk6CisgICAgICAg
IChXZWJLaXQ6OlRleHRDaGVja2VyRW5naW5lOjpUZXh0Q2hlY2tlckVuZ2luZSk6CisgICAgICAg
IChXZWJLaXQ6OlRleHRDaGVja2VyRW5naW5lOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckVuZ2luZTo6Z3Vlc3Nlc0ZvcldvcmQpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlckVuZ2luZTo6aWdub3JlV29yZCk6CisgICAgICAgIChXZWJL
aXQ6OlRleHRDaGVja2VyRW5naW5lOjpsZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlckVuZ2luZTo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyRW5naW5lOjpsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJFbmdpbmU6Omhhc0RpY3Rpb25hcnkpOgorICAg
ICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckVuZ2luZTo6YXZhaWxhYmxlU3BlbGxDaGVja2luZ0xh
bmd1YWdlcyk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVuZ2luZS5oOiBB
ZGRlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJTZXR0aW5ncy5jcHA6
IEFkZGVkLgorICAgICAgICBEZWZpbmUgYSBjbGFzcyB0byBzdG9yZSAnVGV4dENoZWNrZXJTdGF0
ZScgb2JqZWN0IGFuZCBtZXRob2RzIHJlc3BvbnNpYmxlIGZvcgorICAgICAgICB0ZXh0IGNoZWNr
ZXIgc2V0dGluZ3MuCisKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJTZXR0aW5nczo6c2hh
cmVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJTZXR0aW5nczo6VGV4dENoZWNrZXJT
ZXR0aW5ncyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyU2V0dGluZ3M6OnNldENvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIFRoZSBtZXRob2QgaXMgY2FsbGVk
IGZvciBib3RoICdUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3Rh
dGVDaGFuZ2VkJyBhbmQKKyAgICAgICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfZW5hYmxlZF9zZXQuCisgICAgICAgIEl0IHNhdmVzIGEgbmV3IHZhbHVlIG9mIHNldHRp
bmcgYW5kIGxvYWRzIHRoZSBkZWZhdWx0IGxhbmd1YWdlIHRvIHBlcmZvcm0gc3BlbGwgY2hlY2tp
bmcuCisKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJTZXR0aW5nczo6Y2FsbENvbnRpbnVv
dXNTcGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJhY2tBc3luYyk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyU2V0dGluZ3M6OmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAg
ICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlclNldHRpbmdzOjpzZXRTcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzKToKKyAgICAgICAgU2F2ZSBuZXcgbGFuZ3VhZ2VzIHRvIGJlIHN1cHBvcnRlZCBmb3Igc3Bl
bGwgY2hlY2tpbmcuCisgICAgICAgIEFzIHRoZSBFRkwgdGV4dCBjaGVja2VyIHN1cHBvcnRzIG11
bHRpcGxlIGxhbmd1YWdlcywgdGhlIGxhbmd1YWdlcyBhcmUgbG9hZGVkIG9uIHRpbWVyCisgICAg
ICAgIHRvIGRvIG5vdCBibG9jayBVSS4KKworICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlclNl
dHRpbmdzOjpsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXJTZXR0aW5nczo6bGFuZ3VhZ2VzVXBkYXRlVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJLaXQ6OlRleHRDaGVja2VyU2V0dGluZ3M6OnNwZWxsQ2hlY2tpbmdTZXR0aW5nQ2hhbmdl
VGltZXJGaXJlZCk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlclNldHRpbmdz
Lmg6IEFkZGVkLgorCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyU2V0dGluZ3M6OnN0YXRl
KToKKyAgICAgICAgUmV0dXJuIHRoZSBjb25zdGFudCByZWZlcmVuY2UgdG8gdGhlICdUZXh0Q2hl
Y2tlclN0YXRlJyBvYmplY3QuCisKIDIwMTMtMDMtMjEgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hv
cnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW3drMl0gUGFnZSBPdmVybGF5czogRG9uJ3QgY3Jl
YXRlIGJhY2tpbmcgc3RvcmUgdW50aWwgdGhlIGNsaWVudCBhc2tzIHVzIHRvIHBhaW50CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDc4NGRjZDIuLjU3YzEyMzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtRWZsLmNtYWtlCkBAIC0xMDAsNiArMTAwLDggQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VS
Q0VTCiAgICAgVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNw
cAogICAgIFVJUHJvY2Vzcy9lZmwvUmVxdWVzdE1hbmFnZXJDbGllbnRFZmwuY3BwCiAgICAgVUlQ
cm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKKyAgICBVSVByb2Nlc3MvZWZsL1RleHRDaGVj
a2VyRW5naW5lLmNwcAorICAgIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJTZXR0aW5ncy5jcHAK
ICAgICBVSVByb2Nlc3MvZWZsL1ZpYnJhdGlvbkNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3Mv
ZWZsL1ZpZXdDbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZsLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3Bw
CmluZGV4IDU3MGQ0YmYuLjI1Njc1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotI2luY2x1ZGUg
ImV3a19zZXR0aW5ncy5oIgogI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIgog
I2VuZGlmCiAKQEAgLTg5LDEwICs4OCw2IEBAIEV3a0NvbnRleHQ6OkV3a0NvbnRleHQoV0tDb250
ZXh0UmVmIGNvbnRleHQpCiAKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKICAgICBFd2tfVGV4dF9D
aGVja2VyOjppbml0aWFsaXplKCk7Ci0gICAgaWYgKGV3a19zZXR0aW5nc19jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpIHsKLSAgICAgICAgLy8gTG9hZCB0aGUgZGVmYXVs
dCBsYW5ndWFnZS4KLSAgICAgICAgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
c19zZXQoMCk7Ci0gICAgfQogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCmluZGV4IDNkNDM0ZGYxLi4yMWI0YmJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5j
cHAKQEAgLTMzLDE0ICszMyw2IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJQYWdlUHJveHkuaD4K
ICNpbmNsdWRlIDxXZWJLaXQyL1dlYlByZWZlcmVuY2VzLmg+CiAKLSNpZiBFTkFCTEUoU1BFTExD
SEVDSykKLSNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCi0jaW5jbHVkZSAiZXdrX3RleHRfY2hl
Y2tlcl9wcml2YXRlLmgiCi0jaW5jbHVkZSA8RWNvcmUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2VuZGlmCi0KIHVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CiAKIGNvbnN0IFdlYktpdDo6V2ViUHJlZmVyZW5jZXMqIEV3a1NldHRpbmdz
OjpwcmVmZXJlbmNlcygpIGNvbnN0CkBAIC01MywzNSArNDUsNiBAQCBXZWJLaXQ6OldlYlByZWZl
cmVuY2VzKiBFd2tTZXR0aW5nczo6cHJlZmVyZW5jZXMoKQogICAgIHJldHVybiBtX3ZpZXctPnBh
Z2UoKS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCk7CiB9CiAKLSNpZiBFTkFCTEUoU1BFTExD
SEVDSykKLXN0YXRpYyBzdHJ1Y3QgewotICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQgOiAxOwotICAgIFZlY3RvcjxTdHJpbmc+IHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXM7
Ci0gICAgRXdrX1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIG9u
Q29udGludW91c1NwZWxsQ2hlY2tpbmc7Ci19IGV3a1RleHRDaGVja2VyU2V0dGluZ3MgPSB7IGZh
bHNlLCBWZWN0b3I8U3RyaW5nPigpLCAwIH07Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgb25Db250aW51
b3VzU3BlbGxDaGVja2luZ0lkbGVyKHZvaWQqKQotewotICAgIGlmIChld2tUZXh0Q2hlY2tlclNl
dHRpbmdzLm9uQ29udGludW91c1NwZWxsQ2hlY2tpbmcpCi0gICAgICAgIGV3a1RleHRDaGVja2Vy
U2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxDaGVja2luZyhld2tUZXh0Q2hlY2tlclNldHRpbmdz
LmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKLQotICAgIHJldHVybiBFQ09SRV9D
QUxMQkFDS19DQU5DRUw7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgc3BlbGxDaGVja2luZ0xhbmd1
YWdlc1NldFVwZGF0ZSh2b2lkKikKLXsKLSAgICAvLyBGSVhNRTogQ29uc2lkZXIgdG8gZGVsZWdh
dGUgY2FsbGluZyBvZiB0aGlzIG1ldGhvZCBpbiBXZWJQcm9jZXNzIHRvIGRvIG5vdCBkZWxheS9i
bG9jayBVSVByb2Nlc3MuCi0gICAgRXdrX1RleHRfQ2hlY2tlcjo6dXBkYXRlU3BlbGxDaGVja2lu
Z0xhbmd1YWdlcyhld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMp
OwotICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Ci19Ci0KLXN0YXRpYyB2b2lkIHNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQoY29uc3QgVmVjdG9yPFN0cmluZz4mIG5ld0xhbmd1YWdl
cykKLXsKLSAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMg
PSBuZXdMYW5ndWFnZXM7Ci0gICAgZWNvcmVfaWRsZXJfYWRkKHNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXNTZXRVcGRhdGUsIDApOwotfQotI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQotCiBFaW5h
X0Jvb2wgZXdrX3NldHRpbmdzX2Z1bGxzY3JlZW5fZW5hYmxlZF9zZXQoRXdrX1NldHRpbmdzKiBz
ZXR0aW5ncywgRWluYV9Cb29sIGVuYWJsZSkKIHsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CkBAIC0yMDIsNzggKzE2NSw2IEBAIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfZG5zX3ByZWZldGNo
aW5nX2VuYWJsZWRfZ2V0KGNvbnN0IEV3a19TZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgcmV0dXJu
IHNldHRpbmdzLT5wcmVmZXJlbmNlcygpLT5kbnNQcmVmZXRjaGluZ0VuYWJsZWQoKTsKIH0KIAot
dm9pZCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0
KEV3a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZV9DYiBjYWxsYmFj
aykKLXsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdz
Lm9uQ29udGludW91c1NwZWxsQ2hlY2tpbmcgPSBjYWxsYmFjazsKLSNlbmRpZgotfQotCi1FaW5h
X0Jvb2wgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQo
KQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIHJldHVybiBld2tUZXh0Q2hlY2tlclNl
dHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOwotI2Vsc2UKLSAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVs
bF9jaGVja2luZ19lbmFibGVkX3NldChFaW5hX0Jvb2wgZW5hYmxlKQotewotI2lmIEVOQUJMRShT
UEVMTENIRUNLKQotICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChld2tUZXh0Q2hlY2tl
clNldHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkICE9IGVuYWJsZSkgewot
ICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkID0gZW5hYmxlOwotCi0gICAgICAgIFdLVGV4dENoZWNrZXJDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxlKTsKLQotICAgICAgICAvLyBTZXRzIHRo
ZSBkZWZhdWx0IGxhbmd1YWdlIGlmIHVzZXIgZGlkbid0IHNwZWNpZnkgYW55LgotICAgICAgICBp
ZiAoZW5hYmxlICYmICFFd2tfVGV4dF9DaGVja2VyOjpoYXNEaWN0aW9uYXJ5KCkpCi0gICAgICAg
ICAgICBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KFZlY3RvcjxTdHJpbmc+KCkpOwotCi0gICAg
ICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLm9uQ29udGludW91c1NwZWxsQ2hlY2tpbmcp
Ci0gICAgICAgICAgICBlY29yZV9pZGxlcl9hZGQob25Db250aW51b3VzU3BlbGxDaGVja2luZ0lk
bGVyLCAwKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotRWluYV9MaXN0KiBld2tfc2V0dGluZ3Nfc3Bl
bGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQoKQotewotICAgIEVpbmFfTGlzdCog
bGlzdE9mbGFuZ3VhZ2VzID0gMDsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzID0gRXdrX1RleHRfQ2hlY2tlcjo6YXZhaWxhYmxlU3Bl
bGxDaGVja2luZ0xhbmd1YWdlcygpOwotICAgIHNpemVfdCBudW1iZXJPZkxhbnVhZ2VzID0gbGFu
Z3VhZ2VzLnNpemUoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZMYW51
YWdlczsgKytpKQotICAgICAgICBsaXN0T2ZsYW5ndWFnZXMgPSBlaW5hX2xpc3RfYXBwZW5kKGxp
c3RPZmxhbmd1YWdlcywgZWluYV9zdHJpbmdzaGFyZV9hZGQobGFuZ3VhZ2VzW2ldLnV0ZjgoKS5k
YXRhKCkpKTsKLSNlbmRpZgotICAgIHJldHVybiBsaXN0T2ZsYW5ndWFnZXM7Ci19Ci0KLXZvaWQg
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hhciogbGFu
Z3VhZ2VzKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFZlY3RvcjxTdHJpbmc+IG5l
d0xhbmd1YWdlczsKLSAgICBTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlcykuc3BsaXQoJywnLCBu
ZXdMYW5ndWFnZXMpOwotCi0gICAgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldChuZXdMYW5ndWFn
ZXMpOwotI2VuZGlmCi19Ci0KLUVpbmFfTGlzdCogZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5n
X2xhbmd1YWdlc19nZXQoKQotewotICAgIEVpbmFfTGlzdCogbGlzdE9mbGFuZ3VhZ2VzID0gMDsK
LSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXMgPSBF
d2tfVGV4dF9DaGVja2VyOjpsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci0gICAgc2l6
ZV90IG51bWJlck9mTGFudWFnZXMgPSBsYW5ndWFnZXMuc2l6ZSgpOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkxhbnVhZ2VzOyArK2kpCi0gICAgICAgIGxpc3RPZmxhbmd1
YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQobGlzdE9mbGFuZ3VhZ2VzLCBlaW5hX3N0cmluZ3NoYXJl
X2FkZChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOwotCi0jZW5kaWYKLSAgICByZXR1cm4g
bGlzdE9mbGFuZ3VhZ2VzOwotfQotCiBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2VuY29kaW5nX2Rl
dGVjdG9yX2VuYWJsZWRfc2V0KEV3a19TZXR0aW5ncyogc2V0dGluZ3MsIEVpbmFfQm9vbCBlbmFi
bGUpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNldHRpbmdzLCBmYWxz
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0
dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5o
CmluZGV4IDdlYTcyNWMuLjgzMWM1MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oCkBAIC00MywxNCArNDMsNiBAQCBleHRlcm4gIkMiIHsK
IC8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfU2V0dGluZ3MgKi8KIHR5cGVkZWYgc3Ry
dWN0IEV3a1NldHRpbmdzIEV3a19TZXR0aW5nczsKIAotLyoqCi0gKiBDcmVhdGVzIGEgdHlwZSBu
YW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3
aGVuCi0gKiB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2Vk
IGJ5IFdlYktpdC4KLSAqCi0gKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSBpZiBjb250aW51
b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRp
c2FibGVkCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkV3a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxs
X0NoZWNraW5nX0NoYW5nZV9DYikoRWluYV9Cb29sIGVuYWJsZSk7Ci0KIAogLyoqCiAgKiBFbmFi
bGVzL2Rpc2FibGVzIHRoZSBKYXZhc2NyaXB0IEZ1bGxzY3JlZW4gQVBJLiBUaGUgSmF2YXNjcmlw
dCBBUEkgYWxsb3dzCkBAIC0yMjksNzYgKzIyMSw2IEBAIEVBUEkgRWluYV9Cb29sIGV3a19zZXR0
aW5nc19kbnNfcHJlZmV0Y2hpbmdfZW5hYmxlZF9zZXQoRXdrX1NldHRpbmdzICpzZXR0aW5ncywK
IEVBUEkgRWluYV9Cb29sIGV3a19zZXR0aW5nc19kbnNfcHJlZmV0Y2hpbmdfZW5hYmxlZF9nZXQo
Y29uc3QgRXdrX1NldHRpbmdzICpzZXR0aW5ncyk7CiAKIC8qKgotICogU2V0cyBhIGNhbGxiYWNr
IGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgotICogdGhlIGNvbnRpbnVv
dXMgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCi0gKgotICog
U3BlY2lmeWluZyBvZiB0aGlzIGNhbGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGljYXRpb24g
d2FudHMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCi0gKiBvbmNlIFdlYktpdCBjaGFuZ2VzIHRo
aXMgc2V0dGluZy4KLSAqIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3RlZCwgdGhp
cyBjYWxsYmFjayBpcyBub3Qgc2V0LgotICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRo
ZSBXZWJLaXQgbGV2ZWwgY2FuIGJlIG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCi0gKiBv
cHRpb25zIGluIGEgQ29udGV4dCBNZW51IGJ5IGEgdXNlci4KLSAqCi0gKiBAcGFyYW0gY2IgYSBu
ZXcgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0IG9yIEBjIE5VTEwgdG8gaW52YWxpZGF0ZSB0aGUg
cHJldmlvdXMgb25lCi0gKi8KLUVBUEkgdm9pZCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVs
bF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KEV3a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0No
ZWNraW5nX0NoYW5nZV9DYiBjYik7Ci0KLS8qKgotICogUXVlcmllcyBpZiBjb250aW51b3VzIHNw
ZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYg
Y29udGludW91cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkIG9yIEBjIEVJTkFfRkFMU0UgaWYg
aXQncyBkaXNhYmxlZAotICovCi1FQVBJIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCh2b2lkKTsKLQotLyoqCi0gKiBFbmFibGVzL2Rp
c2FibGVzIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCi0gKgotICogQWRkaXRpb25hbGx5LCB0
aGlzIGZ1bmN0aW9uIGNhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gKGlmIGRlZmluZWQpIHRvIG5v
dGlmeQotICogdGhlIGNsaWVudCBhYm91dCB0aGUgY2hhbmdlIG9mIHRoZSBzZXR0aW5nLgotICog
VGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gKgotICogQHNlZSBld2tfc2V0
dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0Ci0gKgotICogQHBh
cmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUgdG8gZW5hYmxlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tp
bmcgb3IgQGMgRUlOQV9GQUxTRSB0byBkaXNhYmxlCi0gKi8KLUVBUEkgdm9pZCBld2tfc2V0dGlu
Z3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChFaW5hX0Jvb2wgZW5hYmxl
KTsKLQotLyoqCi0gKiBHZXRzIHRoZSB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHRoZSBzcGVs
bCBjaGVja2luZyBsYW5ndWFnZXMgdG8gdXNlLgotICoKLSAqIEBzZWUgZXdrX3NldHRpbmdzX3Nw
ZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQKLSAqCi0gKiBAcmV0dXJuIHRoZSBsaXN0IHdpdGgg
YXZhaWxhYmxlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcywgb3IgQGMgTlVMTCBvbiBmYWlsdXJl
Ci0gKiAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQg
YWZ0ZXIsIHVzZSBlaW5hX3N0cmluZ3NoYXJlX2RlbCgpCi0gKi8KLUVBUEkgRWluYV9MaXN0ICpl
d2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQodm9pZCk7
Ci0KLS8qKgotICogU2V0cyBAYSBsYW5ndWFnZXMgYXMgdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRv
IHVzZSBieSBkZWZhdWx0IFdlYktpdAotICogaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2Vy
IGZlYXR1cmUgd2l0aCBFbmNoYW50IGxpYnJhcnkgc3VwcG9ydC4KLSAqCi0gKiBJZiBAbGFuZ3Vh
Z2VzIGlzIEBjIE5VTEwsIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGlzIHVzZWQuCi0gKiBJZiB0aGUg
ZGVmYXVsdCBsYW5ndWFnZSBjYW4gbm90IGJlIGRldGVybWluZWQgdGhlbiBhbnkgYXZhaWxhYmxl
IGRpY3Rpb25hcnkgd2lsbCBiZSB1c2VkLgotICoKLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24gaW52
YWxpZGF0ZXMgdGhlIHByZXZpb3VzbHkgc2V0IGxhbmd1YWdlcy4KLSAqICAgICAgIFRoZSBkaWN0
aW9uYXJpZXMgYXJlIHJlcXVlc3RlZCBhc3luY2hyb25vdXNseS4KLSAqCi0gKiBAcGFyYW0gbGFu
Z3VhZ2VzIGEgbGlzdCBvZiBjb21tYSAoJywnKSBzZXBhcmF0ZWQgbGFuZ3VhZ2UgY29kZXMKLSAq
ICAgICAgICBvZiB0aGUgZm9ybSAnZW5fVVMnLCBpZSwgbGFuZ3VhZ2VfVkFSSUFOVCwgbWF5IGJl
IEBjIE5VTEwuCi0gKi8KLUVBUEkgdm9pZCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX3NldChjb25zdCBjaGFyICpsYW5ndWFnZXMpOwotCi0vKioKLSAqIEdldHMgdGhlIHRo
ZSBsaXN0IG9mIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLgotICoKLSAqIEBz
ZWUgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0Ci0g
KiBAc2VlIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0Ci0gKgotICog
QHJldHVybiB0aGUgbGlzdCB3aXRoIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4gdXNl
LAotICogICAgICAgICB0aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVk
IGFmdGVyLCB1c2UgZWluYV9zdHJpbmdzaGFyZV9kZWwoKQotICovCi1FQVBJIEVpbmFfTGlzdCAq
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQodm9pZCk7Ci0KLS8qKgog
ICogRW5hYmxlcy9kaXNhYmxlcyB0aGUgZW5jb2RpbmcgZGV0ZWN0b3IuCiAgKgogICogQnkgZGVm
YXVsdCwgdGhlIGVuY29kaW5nIGRldGVjdG9yIGlzIGRpc2FibGVkLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcAppbmRleCAz
ODZjYTc4Li4zMGUzOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcwogICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCw3ICszMCw4IEBACiAjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCiAKICNpbmNsdWRlICJFd2tWaWV3LmgiCi0jaW5jbHVkZSAiVGV4dENoZWNr
ZXJFbmNoYW50LmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJFbmdpbmUuaCIKKyNpbmNsdWRlICJU
ZXh0Q2hlY2tlclNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAi
V0tFaW5hU2hhcmVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKQEAgLTM4
LDEwICszOSw4IEBACiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRlICJXS1RleHRDaGVj
a2VyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiZXdrX3NldHRpbmdz
LmgiCiAjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCiAjaW5jbHVkZSA8RWlu
YS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtNTIsNiArNTEsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogICogQGludGVybmFsCiAgKi8KIHN0cnVjdCBDbGllbnRDYWxsYmFja3Mgewor
ICAgIEV3a19UZXh0X0NoZWNrZXJfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2Ig
Y29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2U7CiAgICAgRXdrX1RleHRfQ2hlY2tlcl9V
bmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9DYiB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFn
X2dldDsKICAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xv
c2VfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZTsKICAgICBFd2tfVGV4dF9DaGVj
a2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19DYiBzdHJpbmdfc3BlbGxpbmdfY2hlY2s7CkBAIC02
MCwyNiArNjAsMTYgQEAgc3RydWN0IENsaWVudENhbGxiYWNrcyB7CiAgICAgRXdrX1RleHRfQ2hl
Y2tlcl9Xb3JkX0lnbm9yZV9DYiB3b3JkX2lnbm9yZTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgVGV4
dENoZWNrZXJFbmNoYW50KiB0ZXh0Q2hlY2tlckVuY2hhbnQoKQotewotICAgIHN0YXRpYyBPd25Q
dHI8VGV4dENoZWNrZXJFbmNoYW50PiB0ZXh0Q2hlY2tlckVuY2hhbnQgPSBUZXh0Q2hlY2tlckVu
Y2hhbnQ6OmNyZWF0ZSgpOwotICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQuZ2V0KCk7Ci19
Ci0KIHN0YXRpYyBpbmxpbmUgQ2xpZW50Q2FsbGJhY2tzJiBjbGllbnRDYWxsYmFja3MoKQogewog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ2xpZW50Q2FsbGJhY2tzLCBjbGllbnRDYWxsYmFja3Ms
ICgpKTsKICAgICByZXR1cm4gY2xpZW50Q2FsbGJhY2tzOwogfQogCi1zdGF0aWMgYm9vbCBpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4g
ZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKLX0K
LQogc3RhdGljIHZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5h
YmxlZCwgY29uc3Qgdm9pZCopCiB7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZF9zZXQoZW5hYmxlZCk7CisgICAgaWYgKGNsaWVudENhbGxiYWNrcygp
LmNvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlKQorICAgICAgICBjbGllbnRDYWxsYmFj
a3MoKS5jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZShlbmFibGVkKTsKIH0KIAogc3Rh
dGljIHVpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0
IHZvaWQqKQpAQCAtMTAxLDcgKzkxLDcgQEAgc3RhdGljIHZvaWQgY2hlY2tTcGVsbGluZ09mU3Ry
aW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3AKICAgICBp
ZiAoY2xpZW50Q2FsbGJhY2tzKCkuc3RyaW5nX3NwZWxsaW5nX2NoZWNrKQogICAgICAgICBjbGll
bnRDYWxsYmFja3MoKS5zdHJpbmdfc3BlbGxpbmdfY2hlY2sodGFnLCBXS0VpbmFTaGFyZWRTdHJp
bmcodGV4dCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKICAgICBl
bHNlCi0gICAgICAgIHRleHRDaGVja2VyRW5jaGFudCgpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmco
dG9XVEZTdHJpbmcodGV4dCksICptaXNzcGVsbGluZ0xvY2F0aW9uLCAqbWlzc3BlbGxpbmdMZW5n
dGgpOworICAgICAgICBUZXh0Q2hlY2tlckVuZ2luZTo6c2hhcmVkKCkuY2hlY2tTcGVsbGluZ09m
U3RyaW5nKHRvV1RGU3RyaW5nKHRleHQpLCAqbWlzc3BlbGxpbmdMb2NhdGlvbiwgKm1pc3NwZWxs
aW5nTGVuZ3RoKTsKIH0KIAogc3RhdGljIFdLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQodWludDY0
X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKQEAgLTExOCw3ICsxMDgsNyBA
QCBzdGF0aWMgV0tBcnJheVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5n
UmVmIHdvcmQsIGNvbnN0IHZvaWQqKQogICAgICAgICAgICAgZnJlZShpdGVtKTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzID0g
dGV4dENoZWNrZXJFbmNoYW50KCktPmdldEd1ZXNzZXNGb3JXb3JkKHRvV1RGU3RyaW5nKHdvcmQp
KTsKKyAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMgPSBUZXh0Q2hlY2tlckVu
Z2luZTo6c2hhcmVkKCkuZ3Vlc3Nlc0ZvcldvcmQodG9XVEZTdHJpbmcod29yZCkpOwogICAgICAg
ICBzaXplX3QgbnVtYmVyT2ZHdWVzc2VzID0gZ3Vlc3Nlcy5zaXplKCk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZHdWVzc2VzOyArK2kpIHsKICAgICAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKGd1ZXNzZXNbaV0udXRmOCgpLmRhdGEoKSkpOwpAQCAtMTM0LDcgKzEy
NCw3IEBAIHN0YXRpYyB2b2lkIGxlYXJuV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdv
cmQsIGNvbnN0IHZvaWQqKQogICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS53b3JkX2xlYXJuKQog
ICAgICAgICBjbGllbnRDYWxsYmFja3MoKS53b3JkX2xlYXJuKHRhZywgV0tFaW5hU2hhcmVkU3Ry
aW5nKHdvcmQpKTsKICAgICBlbHNlCi0gICAgICAgIHRleHRDaGVja2VyRW5jaGFudCgpLT5sZWFy
bldvcmQodG9XVEZTdHJpbmcod29yZCkpOworICAgICAgICBUZXh0Q2hlY2tlckVuZ2luZTo6c2hh
cmVkKCkubGVhcm5Xb3JkKHRvV1RGU3RyaW5nKHdvcmQpKTsKIH0KIAogc3RhdGljIHZvaWQgaWdu
b3JlV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQpAQCAt
MTQyLDMxICsxMzIsMTEgQEAgc3RhdGljIHZvaWQgaWdub3JlV29yZCh1aW50NjRfdCB0YWcsIFdL
U3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQogICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS53
b3JkX2lnbm9yZSkKICAgICAgICAgY2xpZW50Q2FsbGJhY2tzKCkud29yZF9pZ25vcmUodGFnLCBX
S0VpbmFTaGFyZWRTdHJpbmcod29yZCkpOwogICAgIGVsc2UKLSAgICAgICAgdGV4dENoZWNrZXJF
bmNoYW50KCktPmlnbm9yZVdvcmQodG9XVEZTdHJpbmcod29yZCkpOworICAgICAgICBUZXh0Q2hl
Y2tlckVuZ2luZTo6c2hhcmVkKCkuaWdub3JlV29yZCh0b1dURlN0cmluZyh3b3JkKSk7CiB9CiAK
IG5hbWVzcGFjZSBFd2tfVGV4dF9DaGVja2VyIHsKIAotVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxl
U3BlbGxDaGVja2luZ0xhbmd1YWdlcygpCi17Ci0gICAgcmV0dXJuIHRleHRDaGVja2VyRW5jaGFu
dCgpLT5hdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci19Ci0KLXZvaWQgdXBkYXRl
U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKQot
ewotICAgIHRleHRDaGVja2VyRW5jaGFudCgpLT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KGxhbmd1YWdlcyk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMoKQotewotICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+bG9hZGVkU3BlbGxD
aGVja2luZ0xhbmd1YWdlcygpOwotfQotCi1ib29sIGhhc0RpY3Rpb25hcnkoKQotewotICAgIHJl
dHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+aGFzRGljdGlvbmFyeSgpOwotfQotCiAvKioKICAq
IEluaXRpYWxpemVzIHNwZWxsY2hlY2sgZmVhdHVyZS4KICAqCkBAIC0xODYsNyArMTU2LDcgQEAg
dm9pZCBpbml0aWFsaXplKCkKICAgICAgICAga1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVy
c2lvbiwKICAgICAgICAgMCwgLy8gY2xpZW50SW5mbwogICAgICAgICAwLCAvLyBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nQWxsb3dlZAotICAgICAgICBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCwKKyAgICAgICAgMCwgLy8gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQK
ICAgICAgICAgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAogICAgICAgICAwLCAv
LyBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQKICAgICAgICAgMCwgLy8gc2V0R3JhbW1hckNoZWNr
aW5nRW5hYmxlZApAQCAtMjI0LDYgKzE5NCw2NSBAQCB2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNO
QU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSkgICAgICAgIFwKIH0KICNlbmRpZiAvLyBFTkFCTEUoU1BF
TExDSEVDSykKIAorCitFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBy
ZXR1cm4gVGV4dENoZWNrZXJTZXR0aW5nczo6c2hhcmVkKCkuc3RhdGUoKS5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZDsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9
CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJs
ZWRfc2V0KEVpbmFfQm9vbCBlbmFibGUpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAg
V0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCgh
IWVuYWJsZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbmFibGUpOworI2VuZGlmCit9CisK
K0VpbmFfTGlzdCogZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFu
Z3VhZ2VzX2dldCgpCit7CisgICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMgPSAwOworI2lm
IEVOQUJMRShTUEVMTENIRUNLKQorICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMg
PSBUZXh0Q2hlY2tlclNldHRpbmdzOjpzaGFyZWQoKS5hdmFpbGFibGVTcGVsbENoZWNraW5nTGFu
Z3VhZ2VzKCk7CisgICAgc2l6ZV90IG51bWJlck9mTGFudWFnZXMgPSBsYW5ndWFnZXMuc2l6ZSgp
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkxhbnVhZ2VzOyArK2kpCisg
ICAgICAgIGxpc3RPZmxhbmd1YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQobGlzdE9mbGFuZ3VhZ2Vz
LCBlaW5hX3N0cmluZ3NoYXJlX2FkZChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOworI2Vu
ZGlmCisgICAgcmV0dXJuIGxpc3RPZmxhbmd1YWdlczsKK30KKwordm9pZCBld2tfdGV4dF9jaGVj
a2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hhciogbGFuZ3VhZ2VzKQor
eworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFZlY3RvcjxTdHJpbmc+IG5ld0xhbmd1YWdl
czsKKyAgICBTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlcykuc3BsaXQoJywnLCBuZXdMYW5ndWFn
ZXMpOworCisgICAgVGV4dENoZWNrZXJTZXR0aW5nczo6c2hhcmVkKCkuc2V0U3BlbGxDaGVja2lu
Z0xhbmd1YWdlcyhuZXdMYW5ndWFnZXMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obGFuZ3Vh
Z2VzKTsKKyNlbmRpZgorfQorCitFaW5hX0xpc3QqIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzX2dldCgpCit7CisgICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMg
PSAwOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdl
cyA9IFRleHRDaGVja2VyU2V0dGluZ3M6OnNoYXJlZCgpLmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZMYW51YWdlcyA9IGxhbmd1YWdlcy5zaXplKCk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mTGFudWFnZXM7ICsraSkKKyAg
ICAgICAgbGlzdE9mbGFuZ3VhZ2VzID0gZWluYV9saXN0X2FwcGVuZChsaXN0T2ZsYW5ndWFnZXMs
IGVpbmFfc3RyaW5nc2hhcmVfYWRkKGxhbmd1YWdlc1tpXS51dGY4KCkuZGF0YSgpKSk7CisKKyNl
bmRpZgorICAgIHJldHVybiBsaXN0T2ZsYW5ndWFnZXM7Cit9CisKK0VXS19URVhUX0NIRUNLRVJf
Q0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfQ29udGludW91c19TcGVsbF9DaGVja2luZ19D
aGFuZ2VfQ2IsIGNvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlKQogRVdLX1RFWFRfQ0hF
Q0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRf
VGFnX0dldF9DYiwgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCiBFV0tfVEVYVF9DSEVD
S0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9U
YWdfQ2xvc2VfQ2IsIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UpCiBFV0tfVEVYVF9D
SEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVj
a19DYiwgc3RyaW5nX3NwZWxsaW5nX2NoZWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oCmluZGV4IGI3YWVhODguLjAzMDA4Njgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFNhbXN1bmcgRWxlY3Ry
b25pY3MKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMTEgKzI1LDE0IEBA
CiAKIC8qKgogICogQGZpbGUgZXdrX3RleHRfY2hlY2tlci5oCi0gKiBAYnJpZWYgUHJvdmlkZXMg
QVBJIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVu
dGF0aW9uLgorICogQGJyaWVmIFByb3ZpZGVzIEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQg
V2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlvbgorICogICAgICAgIGFuZCBjb250YWlu
cyBBUEkgdG8gbWFuaXB1bGF0ZSBzcGVsbGNoZWNrZXIgc2V0dGluZ3MuCiAgKgotICogVGhlcmUg
aXMgb25lIHNwZWxsY2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0aW9uIGFuZCBpdCdzIGRpc2Fi
bGVkIGJ5IGRlZmF1bHQuCisgKiBUaGVyZSBpcyBvbmUgc3BlbGxjaGVja2VyIG9iamVjdCBwZXIg
YXBwbGljYXRpb24uCiAgKiBJdCBhbGxvd3MgdG8gY2hlY2sgc3BlbGxpbmcgaW4gdGhlIGVkaXRh
YmxlIGFyZWFzLgotICogSWYgYXBwbGljYXRpb24gd2FudHMgdG8gZW5hYmxlIHRoZSBmZWF0dXJl
LCBBUEkgZnJvbSBld2tfc2V0dGluZ3MuaAorICoKKyAqIFRoZSBmZWF0dXJlIGlzIGRpc2FibGVk
IGJ5IGRlZmF1bHQuCisgKiBJZiBhcHBsaWNhdGlvbiB3YW50cyB0byBlbmFibGUgaXQsIGV3a190
ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCBBUEkKICAq
IHNob3VsZCBiZSB1c2VkLgogICoKICAqIFRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIg
aW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIEVuY2hhbnQgbGlicmFyeS4KQEAgLTQ4LDYg
KzUxLDE0IEBAIGV4dGVybiAiQyIgewogI2VuZGlmCiAKIC8qKgorICogQ3JlYXRlcyBhIHR5cGUg
bmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQg
d2hlbgorICogdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdl
ZCBieSBXZWJLaXQuCisgKgorICogQHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUgaWYgY29udGlu
dW91cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkIG9yIEBjIEVJTkFfRkFMU0UgaWYgaXQncyBk
aXNhYmxlZAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX0NvbnRpbnVvdXNf
U3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiKShFaW5hX0Jvb2wgZW5hYmxlKTsKKworLyoqCiAgKiBE
ZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmV0dXJuIGEg
dGFnIChpZGVudGlmaWVyKSB3aGljaCBpcyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZS4KICAqCiAg
KiBVbmlxdWUgdGFncyBoZWxwIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBvdGhlciBvYmplY3Rz
IHRoYXQgYXJlIGNoZWNrZWQgZm9yIHNwZWxsaW5nIG1pc3Rha2VzLgpAQCAtMTA4LDYgKzExOSw3
NSBAQCB0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm5fQ2IpKHVpbnQ2
NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7CiAgKi8KIHR5cGVkZWYgdm9pZCAoKkV3a19UZXh0
X0NoZWNrZXJfV29yZF9JZ25vcmVfQ2IpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7
CiAKKworLyoqCisgKiBRdWVyaWVzIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5h
YmxlZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8K
K0VBUEkgRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX2dldCh2b2lkKTsKKworLyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGNvbnRpbnVv
dXMgc3BlbGwgY2hlY2tpbmcuCisgKgorICogVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRl
ZmF1bHQuCisgKgorICogQHNlZSBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfY2hhbmdlX2NiX3NldAorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRv
IGVuYWJsZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIG9yIEBjIEVJTkFfRkFMU0UgdG8gZGlz
YWJsZQorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2VuYWJsZWRfc2V0KEVpbmFfQm9vbCBlbmFibGUpOworCisvKioKKyAqIEdldHMgdGhl
IHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyB0
byB1c2UuCisgKgorICogQHNlZSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
X3NldAorICoKKyAqIEByZXR1cm4gdGhlIGxpc3Qgd2l0aCBhdmFpbGFibGUgc3BlbGwgY2hlY2tp
bmcgbGFuZ3VhZ2VzLCBvciBAYyBOVUxMIG9uIGZhaWx1cmUKKyAqICAgICAgICAgdGhlIEVpbmFf
TGlzdCBhbmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciwgdXNlIGVpbmFfc3RyaW5n
c2hhcmVfZGVsKCkKKyAqLworRUFQSSBFaW5hX0xpc3QgKmV3a190ZXh0X2NoZWNrZXJfc3BlbGxf
Y2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQodm9pZCk7CisKKy8qKgorICogU2V0cyBA
YSBsYW5ndWFnZXMgYXMgdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIHVzZSBieSBkZWZhdWx0IFdl
YktpdAorICogaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2VyIGZlYXR1cmUgd2l0aCBFbmNo
YW50IGxpYnJhcnkgc3VwcG9ydC4KKyAqCisgKiBJZiBAbGFuZ3VhZ2VzIGlzIEBjIE5VTEwsIHRo
ZSBkZWZhdWx0IGxhbmd1YWdlIGlzIHVzZWQuCisgKiBJZiB0aGUgZGVmYXVsdCBsYW5ndWFnZSBj
YW4gbm90IGJlIGRldGVybWluZWQgdGhlbiBhbnkgYXZhaWxhYmxlIGRpY3Rpb25hcnkgd2lsbCBi
ZSB1c2VkLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gaW52YWxpZGF0ZXMgdGhlIHByZXZp
b3VzbHkgc2V0IGxhbmd1YWdlcy4KKyAqICAgICAgIFRoZSBkaWN0aW9uYXJpZXMgYXJlIHJlcXVl
c3RlZCBhc3luY2hyb25vdXNseS4KKyAqCisgKiBAcGFyYW0gbGFuZ3VhZ2VzIGEgbGlzdCBvZiBj
b21tYSAoJywnKSBzZXBhcmF0ZWQgbGFuZ3VhZ2UgY29kZXMKKyAqICAgICAgICBvZiB0aGUgZm9y
bSAnZW5fVVMnLCBpZSwgbGFuZ3VhZ2VfVkFSSUFOVCwgbWF5IGJlIEBjIE5VTEwuCisgKi8KK0VB
UEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29u
c3QgY2hhciAqbGFuZ3VhZ2VzKTsKKworLyoqCisgKiBHZXRzIHRoZSB0aGUgbGlzdCBvZiB0aGUg
c3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIGluIHVzZS4KKyAqCisgKiBAc2VlIGV3a19zZXR0aW5n
c19zcGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldAorICogQHNlZSBld2tfc2V0
dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldAorICoKKyAqIEByZXR1cm4gdGhlIGxp
c3Qgd2l0aCB0aGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIGluIHVzZSwKKyAqICAgICAgICAg
dGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciwgdXNlIGVp
bmFfc3RyaW5nc2hhcmVfZGVsKCkKKyAqLworRUFQSSBFaW5hX0xpc3QgKmV3a190ZXh0X2NoZWNr
ZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCh2b2lkKTsKKworLyoqCisgKiBTZXRzIGEg
Y2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuCisgKiB0aGUg
Y29udGludW91cyBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4K
KyAqCisgKiBTcGVjaWZ5aW5nIG9mIHRoaXMgY2FsbGJhY2sgaXMgbmVlZGVkIGlmIHRoZSBhcHBs
aWNhdGlvbiB3YW50cyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMKKyAqIG9uY2UgV2ViS2l0IGNo
YW5nZXMgdGhpcyBzZXR0aW5nLgorICogSWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBpbnRlcmVz
dGVkLCB0aGlzIGNhbGxiYWNrIGlzIG5vdCBzZXQuCisgKiBDaGFuZ2luZyBvZiB0aGlzIHNldHRp
bmcgYXQgdGhlIFdlYktpdCBsZXZlbCBjYW4gYmUgbWFkZSBhcyBhIHJlc3VsdCBvZiBtb2RpZnlp
bmcKKyAqIG9wdGlvbnMgaW4gYSBDb250ZXh0IE1lbnUgYnkgYSB1c2VyLgorICoKKyAqIEBwYXJh
bSBjYiBhIG5ldyBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQgb3IgQGMgTlVMTCB0byBpbnZhbGlk
YXRlIHRoZSBwcmV2aW91cyBvbmUKKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfQ29u
dGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2IgY2IpOworCiAvKioKICAqIFNldHMgYSBj
YWxsYmFjayBmdW5jdGlvbiB0byBnZXQgYSB1bmlxdWUgc3BlbGwgZG9jdW1lbnQgdGFnLgogICoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXJfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlcl9wcml2YXRlLmgKaW5kZXggNmM0NzMwZS4uNzQ2YWE3OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tl
cl9wcml2YXRlLmgKQEAgLTM1LDEyICszNSw2IEBAIG5hbWVzcGFjZSBFd2tfVGV4dF9DaGVja2Vy
IHsKIAogdm9pZCBpbml0aWFsaXplKCk7CiAKLS8vIEVuY2hhbnQgaGVscGVycy4KLVZlY3RvcjxT
dHJpbmc+IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKLXZvaWQgdXBkYXRlU3Bl
bGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKTsKLVZl
Y3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKLWJvb2wgaGFzRGlj
dGlvbmFyeSgpOwotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl90ZXh0
X2NoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVz
dF9ld2syX3RleHRfY2hlY2tlci5jcHAKaW5kZXggODJkYTA5YS4uNGNlMzg4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRf
Y2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMv
dGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAKQEAgLTIxMywyMiArMjEzLDIyIEBAIHN0YXRpYyB2
b2lkIG9uV29yZElnbm9yZSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIqIHdvcmQpCiB9CiAKIC8q
KgotICogVGVzdCBzZXR0ZXIvZ2V0dGVyIGZvciB0aGUgY29udGlub3VzIHNwZWxsIGNoZWNraW5n
OgotICogIC0gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9n
ZXQKLSAqICAtIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
c2V0CisgKiBUZXN0IHNldHRlci9nZXR0ZXIgZm9yIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNr
aW5nOgorICogIC0gZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfZ2V0CisgKiAgLSBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZF9zZXQKICAqLwotVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5n
c19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWQpCitURVNUX0YoRVdLMlVuaXRUZXN0
QmFzZSwgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWQp
CiB7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9z
ZXQodHJ1ZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2VuYWJsZWRfc2V0KHRydWUpOwogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIEVYUEVDVF9U
UlVFKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkp
OworICAgIEVYUEVDVF9UUlVFKGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19lbmFibGVkX2dldCgpKTsKIAogICAgIC8vIFdoZW4gdGhlIHNwZWxsIGNoZWNraW5nIGhh
cyBiZWVuIGVuYWJsZWQsIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGlzIHNldCAoaWYgdGhlIHVzZXIK
ICAgICAvLyBkaWRuJ3Qgc2V0IGFueSkuIFRoZSBsYW5ndWFnZXMgYXJlIGJlaW5nIGxvYWRlZCBv
biB0aGUgaWRsZXIsIHdhaXQgZm9yIHRoZW0uCiAgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGlt
ZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOwogICAgIGVjb3Jl
X21haW5fbG9vcF9iZWdpbigpOwogCi0gICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBl
d2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIEVpbmFfTGlz
dCogbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5n
dWFnZXNfZ2V0KCk7CiAgICAgLy8gTm8gZGljdGlvbmFyeSBpcyBhdmFpbGFibGUvaW5zdGFsbGVk
LgogICAgIGlmICghbG9hZGVkTGFuZ3VhZ2VzKQogICAgICAgICByZXR1cm47CkBAIC0yMzksMjMg
KzIzOSwyNyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCkKICAgICBFSU5BX0xJU1RfRlJFRShsb2FkZWRMYW5n
dWFnZXMsIGRhdGEpCiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihkYXRhKSk7CiAjZWxzZQotICAgIEVYUEVDVF9GQUxTRShld2tfc2V0dGluZ3Nf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0
KCkpOwogI2VuZGlmCiAKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX3NldChmYWxzZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGV3a19zZXR0aW5nc19jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOworICAgIGV3a190ZXh0X2NoZWNr
ZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChmYWxzZSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFi
bGVkX2dldCgpKTsKIH0KIAogLyoqCi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxiYWNrIGlzIGNh
bGxlZCB3aGVuIHRoZSBzcGVsbCBjaGVja2luZyBzZXR0aW5nIGhhcyBiZWVuIGNoYW5nZWQuCisg
KiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzcGVsbCBjaGVj
a2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqIENoYW5naW5nIG9mIHRoaXMg
c2V0dGluZyBhdCB0aGUgV2ViS2l0IGxldmVsIGNhbiBiZSBtYWRlIGFzIGEgcmVzdWx0IG9mIG1v
ZGlmeWluZworICogb3B0aW9ucyBpbiBhIENvbnRleHQgTWVudSBieSBhIHVzZXIuCiAgKi8KLVRF
U1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19jaGFuZ2VfY2Jfc2V0KQorVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2No
ZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KQogewotICAgIGV3
a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQob25TZXR0
aW5nQ2hhbmdlKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfY2hhbmdlX2NiX3NldChvblNldHRpbmdDaGFuZ2UpOwogCi0gICAgaXNTZXR0aW5nRW5hYmxl
ZCA9IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7
CisgICAgaXNTZXR0aW5nRW5hYmxlZCA9IGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVs
bF9jaGVja2luZ19lbmFibGVkX2dldCgpOwogICAgIGlzU2V0dGluZ0VuYWJsZWQgPSAhaXNTZXR0
aW5nRW5hYmxlZDsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19l
bmFibGVkX3NldChpc1NldHRpbmdFbmFibGVkKTsKKyAgICAvLyBUaGUgbm90aWZpY2F0aW9ucyBh
Ym91dCB0aGUgc2V0dGluZyBjaGFuZ2Ugc2hvdWxkbid0IGJlIHNlbnQgaWYgdGhlIGNoYW5nZSB3
YXMgbWFkZQorICAgIC8vIG9uIHRoZSBjbGllbnQncyByZXF1ZXN0IChwdWJsaWMgQVBJKS4KKyAg
ICBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQo
aXNTZXR0aW5nRW5hYmxlZCk7CiAKICAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQo
ZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CiAKQEAgLTI2NCwzMyArMjY4
LDI0IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KQogICAgIC8vIFdlIGNhbid0IGNhbGwgZWNvcmVf
bWFpbl9sb29wX2l0ZXJhdGUgYmVjYXVzZSBpdCBkb2Vzbid0IHByb2Nlc3MgdGhlIGlkbGVycy4K
ICAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKIAotI2lmIEVOQUJMRShTUEVMTENIRUNLKQot
ICAgIEVYUEVDVF9GQUxTRSh0aW1lb3V0VGltZXIpOwotI2Vsc2UKICAgICBFWFBFQ1RfVFJVRSh0
aW1lb3V0VGltZXIpOwotI2VuZGlmCi0KLSAgICAvLyBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJl
IGNhbGxlZCBpZiB0aGUgc2V0dGluZyBvcHRpb24gaXMgYWxyZWFkeSBzZXQuCi0gICAgaXNTZXR0
aW5nRW5hYmxlZCA9IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJs
ZWRfZ2V0KCk7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5h
YmxlZF9zZXQoaXNTZXR0aW5nRW5hYmxlZCk7CiAKLSAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90
aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7Ci0gICAgZWNv
cmVfbWFpbl9sb29wX2JlZ2luKCk7Ci0KLSAgICAvLyBXaGVuIHRoZSBTUEVMTENIRUNLIG1hY3Jv
IGlzIGRpc2FibGVkIHRoZSBjYWxsYmFjayB3b24ndCBiZSBjYWxsZWQgdG9vLgotICAgIEVYUEVD
VF9UUlVFKHRpbWVvdXRUaW1lcik7Ci0KLSAgICAvLyBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJl
IGNhbGxlZCBpZiB0aGUgdXNlciBoYXMgaW52YWxpZGF0ZWQgaXQuCi0gICAgZXdrX3NldHRpbmdz
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldCgwKTsKLSAgICBpc1NldHRp
bmdFbmFibGVkID0gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxl
ZF9nZXQoKTsKLSAgICBpc1NldHRpbmdFbmFibGVkID0gIWlzU2V0dGluZ0VuYWJsZWQ7Ci0gICAg
ZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoaXNTZXR0
aW5nRW5hYmxlZCk7Ci0KLSAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVs
dFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7Ci0gICAgZWNvcmVfbWFpbl9sb29wX2Jl
Z2luKCk7Ci0KLSAgICAvLyBJZiB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZCwgdGhl
IGNhbGxiYWNrIGlzIG5vdCBzZXQuCi0gICAgRVhQRUNUX1RSVUUodGltZW91dFRpbWVyKTsKKyAg
ICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxkIGJlIGNhbGxlZCBpZiB0aGUgY29udGV4dCBtZW51ICJD
aGVjayBTcGVsbGluZyBXaGlsZSBUeXBpbmciIG9wdGlvbgorICAgICAgIHdhcyB0b2dnbGVkIGJ5
IHRoZSB1c2VyLgorICAgIEZJWE1FOgorICAgIDEpIEludm9rZSB0aGUgY29udGV4dCBtZW51IG9u
IHRoZSBpbnB1dCBmaWVsZC4KKyAgICAyKSBDaG9vc2UgdGhlIHN1YiBtZW51ICJTcGVsbGluZyBh
bmQgR3JhbW1hciIgb3B0aW9uIChub3QgaW1wbGVtZW50ZWQgZm9yIFdLMikuCisgICAgMykgVG9n
Z2xlICJDaGVjayBTcGVsbGluZyBXaGlsZSBUeXBpbmciIG9wdGlvbi4KKyAgICA0KSBDaGVjayB3
aGV0aGVyIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQuICovCisKKyAgICAvKiBUaGUgY2FsbGJhY2sg
c2hvdWxkbid0IGJlIGNhbGxlZCBpZiB0aGUgdXNlciBoYXMgaW52YWxpZGF0ZWQgaXQuCisgICAg
RklYTUU6CisgICAgMSkgQ2FsbCBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfY2hhbmdlX2NiX3NldCgwKSB0byBub3RpZnkgdGhlIFdlYktpdCB0aGF0CisgICAgICAg
dGhlIGNsaWVudCBpcyBub3QgaW50ZXJlc3RlZCBpbiB0aGUgc2V0dGluZyBjaGFuZ2UuCisgICAg
MikgSW52b2tlIHRoZSBjb250ZXh0IG1lbnUgb24gdGhlIGlucHV0IGZpZWxkLgorICAgIDMpIENo
b29zZSB0aGUgc3ViIG1lbnUgIlNwZWxsaW5nIGFuZCBHcmFtbWFyIiBvcHRpb24gKG5vdCBpbXBs
ZW1lbnRlZCBmb3IgV0syKS4KKyAgICA0KSBUb2dnbGUgIkNoZWNrIFNwZWxsaW5nIFdoaWxlIFR5
cGluZyIgb3B0aW9uLgorICAgIDUpIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxiYWNrIHdhcyBjYWxs
ZWQuICovCiB9CiAKIC8qKgpAQCAtMjk4LDkgKzI5Myw5IEBAIFRFU1RfRihFV0syVW5pdFRlc3RC
YXNlLCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0
KQogICogaWYgdGhleSBhcmUgaW4gdXNlLgogICogQWxsIHRoZSBkaWN0aW9uYXJpZXMgZnJvbSB0
aGUgbGlzdCBjYW4gYmUgc2V0IHRvIHBlcmZvcm0gc3BlbGxjaGVja2luZy4KICAqLwotVEVTVF9G
KEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFpbGFibGVf
bGFuZ3VhZ2VzX2dldCkKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2Vy
X3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KQogewotICAgIEVpbmFfTGlz
dCogYXZhaWxhYmxlTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWls
YWJsZV9sYW5ndWFnZXNfZ2V0KCk7CisgICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5ndWFnZXMg
PSBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0
KCk7CiAgICAgLy8gTm8gZGljdGlvbmFyeSBpcyBhdmFpbGFibGUvaW5zdGFsbGVkIG9yIHRoZSBT
UEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVkLgogICAgIGlmICghYXZhaWxhYmxlTGFuZ3VhZ2Vz
KQogICAgICAgICByZXR1cm47CkBAIC0zMTksMTQgKzMxNCwxNCBAQCBURVNUX0YoRVdLMlVuaXRU
ZXN0QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNf
Z2V0KQogICAgIH0KIAogICAgIC8vIFNldCBhbGwgYXZhaWxhYmxlIGxhbmd1YWdlcy4KLSAgICBl
d2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChsYW5ndWFnZXMudG9TdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5n
X2xhbmd1YWdlc19zZXQobGFuZ3VhZ2VzLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAg
ICAvLyBMYW5ndWFnZXMgYXJlIGJlaW5nIGxvYWRlZCBvbiB0aGUgaWRsZXIsIHdhaXQgZm9yIHRo
ZW0uCiAgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5T
ZWNvbmRzLCBvblRpbWVvdXQsIDApOwogICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwogCiAg
ICAgLy8gR2V0IHRoZSBsYW5ndWFnZXMgaW4gdXNlLgotICAgIEVpbmFfTGlzdCogbG9hZGVkTGFu
Z3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKKyAg
ICBFaW5hX0xpc3QqIGxvYWRlZExhbmd1YWdlcyA9IGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzX2dldCgpOwogICAgIEFTU0VSVF9FUShlaW5hX2xpc3RfY291bnQobG9h
ZGVkTGFuZ3VhZ2VzKSwgZWluYV9saXN0X2NvdW50KGF2YWlsYWJsZUxhbmd1YWdlcykpOwogCiAg
ICAgaSA9IDA7CkBAIC0zNTAsMTYgKzM0NSwxNiBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwg
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KQogICog
IC0gc2V0dGluZyB0aGUgZGVmYXVsdCBsYW5ndWFnZSwKICAqICAtIGlmIHR3byBhcmJpdHJhcmls
eSBzZWxlY3RlZCBkaWN0aW9uYXJpZXMgYXJlIHNldCBjb3JyZWN0bHkuCiAgKi8KLVRFU1RfRihF
V0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKQor
VEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdf
bGFuZ3VhZ2VzKQogewogICAgIC8vIFNldCB0aGUgZGVmYXVsdCBsYW5ndWFnZS4KLSAgICBld2tf
c2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldCgwKTsKKyAgICBld2tfdGV4dF9j
aGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7CiAKICAgICAvLyBMYW5ndWFn
ZXMgYXJlIGJlaW5nIGxvYWRlZCBvbiB0aGUgaWRsZXIsIHdhaXQgZm9yIHRoZW0uCiAgICAgdGlt
ZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRp
bWVvdXQsIDApOwogICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwogCi0gICAgRWluYV9MaXN0
KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
X2dldCgpOworICAgIEVpbmFfTGlzdCogbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3RleHRfY2hlY2tl
cl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CiAgICAgLy8gTm8gZGljdGlvbmFyeSBp
cyBhdmFpbGFibGUvaW5zdGFsbGVkIG9yIHRoZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVk
LgogICAgIGlmICghbG9hZGVkTGFuZ3VhZ2VzKQogICAgICAgICByZXR1cm47CkBAIC0zNzIsNyAr
MzY3LDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXMpCiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsKIAogICAgIC8vIEdldCB0aGUgZmlyc3QgYW5kIGxhc3Qg
bGFuZ3VhZ2UgZnJvbSBpbnN0YWxsZWQgZGljdGlvbmFyaWVzLgotICAgIEVpbmFfTGlzdCogYXZh
aWxhYmxlTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9s
YW5ndWFnZXNfZ2V0KCk7CisgICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5ndWFnZXMgPSBld2tf
dGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KCk7CiAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZBdmFpbGFibGVMYW5ndWFnZXMgPSBlaW5hX2xpc3RfY291bnQo
YXZhaWxhYmxlTGFuZ3VhZ2VzKTsKICAgICAvLyBXZSBhc3N1bWUgdGhhdCB1c2VyIGhhcyBpbnN0
YWxsZWQgYXQgbGVzdCB0d28gZGljdGlvbmFyaWVzLgogICAgIGlmIChudW1iZXJPZkF2YWlsYWJs
ZUxhbmd1YWdlcyA8IDIpCkBAIC0zODksMTIgKzM4NCwxMiBAQCBURVNUX0YoRVdLMlVuaXRUZXN0
QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcykKICAgICBsYW5ndWFn
ZXMuYXBwZW5kKFN0cmluZyhsYXN0RXhwZWN0ZWQpLmxvd2VyKCkpOwogCiAgICAgLy8gU2V0IGJv
dGggbGFuZ3VhZ2VzICh0aGUgZmlyc3QgYW5kIHRoZSBsYXN0KSBmcm9tIHRoZSBsaXN0LgotICAg
IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGxhbmd1YWdlcy50b1N0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzX3NldChsYW5ndWFnZXMudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAog
ICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25k
cywgb25UaW1lb3V0LCAwKTsKICAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKIAotICAgIGxv
YWRlZExhbmd1YWdlcyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0
KCk7CisgICAgbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZXNfZ2V0KCk7CiAgICAgQVNTRVJUX0VRKDIsIGVpbmFfbGlzdF9jb3VudChsb2Fk
ZWRMYW5ndWFnZXMpKTsKIAogICAgIEVYUEVDVF9TVFJFUShmaXJzdEV4cGVjdGVkLCBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oZWluYV9saXN0X250aChsb2FkZWRMYW5ndWFnZXMsIDApKSk7CkBA
IC00MTQsNyArNDA5LDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19z
cGVsbF9jaGVja2luZ19sYW5ndWFnZXMpCiBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3Rl
eHRfY2hlY2tlcikKIHsKICAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7Ci0gICAg
ZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7
CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
c2V0KHRydWUpOwogCiAgICAgQVNTRVJUX1RSVUUobG9hZFVybFN5bmMoZW52aXJvbm1lbnQtPnVy
bEZvclJlc291cmNlKCJzcGVsbGluZ190ZXN0Lmh0bWwiKS5kYXRhKCkpKTsKIApAQCAtNDM2LDcg
KzQzMSw3IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3VuaXF1
ZV9zcGVsbF9kb2N1bWVudF90YWcpCiB7CiAgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0
cygpOwogICAgIGRlZmF1bHRWaWV3ID0gd2ViVmlldygpOwotICAgIGV3a19zZXR0aW5nc19jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworICAgIGV3a190ZXh0X2No
ZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKIAogICAg
IGV3a190ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXRfY2Jfc2V0KG9u
U3BlbGxEb2N1bWVudFRhZyk7CiAgICAgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9j
dW1lbnRfdGFnX2Nsb3NlX2NiX3NldChvblNwZWxsRG9jdW1lbnRUYWdDbG9zZSk7CkBAIC00NTgs
NyArNDUzLDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfc3Ry
aW5nX3NwZWxsaW5nX2NoZWNrX2NiX3NldCkKIHsKICAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlv
blN0YXRzKCk7CiAgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3KCk7Ci0gICAgZXdrX3NldHRpbmdz
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisgICAgZXdrX3Rl
eHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOwog
CiAgICAgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tfY2Jfc2V0KG9uU3Bl
bGxpbmdDaGVjayk7CiAKQEAgLTQ3Niw3ICs0NzEsNyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFz
ZSwgZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1ZXNzZXNfZ2V0X2NiX3NldCkKIHsKICAgICByZXNl
dENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CiAgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3KCk7
Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQo
dHJ1ZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfc2V0KHRydWUpOwogCiAgICAgZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1ZXNzZXNfZ2V0
X2NiX3NldChvbldvcmRHdWVzc2VzKTsKIApAQCAtNDk4LDcgKzQ5Myw3IEBAIFRFU1RfRihFV0sy
VW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KQogewogICAg
IHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKICAgICBkZWZhdWx0VmlldyA9IHdlYlZp
ZXcoKTsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAKICAgICBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5f
Y2Jfc2V0KG9uV29yZExlYXJuKTsKIApAQCAtNTE4LDcgKzUxMyw3IEBAIFRFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3NldCkKIHsKICAgICBy
ZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CiAgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3
KCk7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9z
ZXQodHJ1ZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2VuYWJsZWRfc2V0KHRydWUpOwogCiAgICAgZXdrX3RleHRfY2hlY2tlcl93b3JkX2lnbm9yZV9j
Yl9zZXQob25Xb3JkSWdub3JlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1RleHRDaGVja2VyRWZsLmNwcAppbmRleCAyNjQ3M2Q2Li43NTllMDBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcApAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgU2Ft
c3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgU2Ftc3VuZyBFbGVj
dHJvbmljcwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTIg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgogCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAK
ICNpZiBFTkFCTEUoU1BFTExDSEVDSykKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgor
I2luY2x1ZGUgIlRleHRDaGVja2VyU2V0dGluZ3MuaCIKICNpbmNsdWRlICJXZWJUZXh0Q2hlY2tl
ci5oIgogI2VuZGlmCiAKQEAgLTM5LDczICs0MSw1OCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBUZXh0Q2hlY2tlclN0YXRlIHRleHRD
aGVja2VyU3RhdGU7Ci0KIGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIFRleHRDaGVja2VyOjpzdGF0
ZSgpCiB7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgc3RhdGljIGJvb2wgZGlkSW5pdGlh
bGl6ZVN0YXRlID0gZmFsc2U7Ci0gICAgaWYgKGRpZEluaXRpYWxpemVTdGF0ZSkKLSAgICAgICAg
cmV0dXJuIHRleHRDaGVja2VyU3RhdGU7Ci0KLSAgICBXZWJUZXh0Q2hlY2tlckNsaWVudCYgY2xp
ZW50ID0gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKTsKLSAgICB0ZXh0Q2hlY2tl
clN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gY2xpZW50LmNvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwotICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkID0gY2xpZW50LmdyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKLQotICAg
IGRpZEluaXRpYWxpemVTdGF0ZSA9IHRydWU7CisgICAgcmV0dXJuIFRleHRDaGVja2VyU2V0dGlu
Z3M6OnNoYXJlZCgpLnN0YXRlKCk7CisjZWxzZQorICAgIHN0YXRpYyBUZXh0Q2hlY2tlclN0YXRl
IHN0YXRlOworICAgIHJldHVybiBzdGF0ZTsKICNlbmRpZgotICAgIHJldHVybiB0ZXh0Q2hlY2tl
clN0YXRlOwogfQogCiBib29sIFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
QWxsb3dlZCgpCiB7Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgcmV0dXJuIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2Vk
KCk7Ci0jZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZChib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQogewogI2lmIEVOQUJM
RShTUEVMTENIRUNLKQotICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgIGlmIChUZXh0
Q2hlY2tlclNldHRpbmdzOjpzaGFyZWQoKS5zdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7Ci0gICAgV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworICAgIFRleHRDaGVja2VyU2V0
dGluZ3M6OnNoYXJlZCgpLnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CisgICAgLy8gTm90aWZ5IHRoZSBjbGllbnQgYWJv
dXQgdGhlIHNldHRpbmcgY2hhbmdlLgorICAgIFRleHRDaGVja2VyU2V0dGluZ3M6OnNoYXJlZCgp
LmNhbGxDb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZUNhbGxiYWNrQXN5bmMoKTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKICNl
bmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJv
b2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQordm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1h
ckNoZWNraW5nRW5hYmxlZChib29sKQogewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIGlm
IChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9PSBpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOwotICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChpc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKTsKLSNlbmRpZgorICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZv
aWQgVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdl
ZChib29sIGVuYWJsZWQpCiB7Ci0gICAgVGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZChlbmFibGVkKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNo
ZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCi17CiAjaWYgRU5BQkxFKFNQ
RUxMQ0hFQ0spCi0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQg
PSBlbmFibGVkOworICAgIGlmIChUZXh0Q2hlY2tlclNldHRpbmdzOjpzaGFyZWQoKS5zdGF0ZSgp
LmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGVuYWJsZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIFRleHRDaGVja2VyU2V0dGluZ3M6OnNoYXJlZCgpLnNldENvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZChlbmFibGVkKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGVu
YWJsZWQpOwogI2VuZGlmCiB9CiAKK3ZvaWQgVGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0Vu
YWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBp
bnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSog
cGFnZSkKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFbmdpbmUuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVuZ2luZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uY2Y3N2E2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFbmdpbmUuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckVuZ2luZS5oIgorCisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworVGV4dENoZWNrZXJFbmdpbmUmIFRleHRDaGVja2VyRW5naW5lOjpz
aGFyZWQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGV4dENoZWNrZXJFbmdpbmUsIHRl
eHRDaGVja2VyRW5naW5lLCAoKSk7CisgICAgcmV0dXJuIHRleHRDaGVja2VyRW5naW5lOworfQor
CitUZXh0Q2hlY2tlckVuZ2luZTo6VGV4dENoZWNrZXJFbmdpbmUoKQorICAgIDogbV90ZXh0Q2hl
Y2tlckVuZ2luZShUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0ZSgpKQoreworfQorCit2b2lkIFRl
eHRDaGVja2VyRW5naW5lOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0
LCBpbnQmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCYgbWlzc3BlbGxpbmdMZW5ndGgpCit7Cisg
ICAgbV90ZXh0Q2hlY2tlckVuZ2luZS0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRleHQsIG1pc3Nw
ZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKworVmVjdG9yPFN0cmluZz4g
VGV4dENoZWNrZXJFbmdpbmU6Omd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKK3sK
KyAgICByZXR1cm4gbV90ZXh0Q2hlY2tlckVuZ2luZS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCk7
Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJFbmdpbmU6Omlnbm9yZVdvcmQoY29uc3QgU3RyaW5nJiB3
b3JkKQoreworICAgIG1fdGV4dENoZWNrZXJFbmdpbmUtPmlnbm9yZVdvcmQod29yZCk7Cit9CisK
K3ZvaWQgVGV4dENoZWNrZXJFbmdpbmU6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHdvcmQpCit7
CisgICAgbV90ZXh0Q2hlY2tlckVuZ2luZS0+bGVhcm5Xb3JkKHdvcmQpOworfQorCit2b2lkIFRl
eHRDaGVja2VyRW5naW5lOjp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBsYW5ndWFnZXMpCit7CisgICAgbV90ZXh0Q2hlY2tlckVuZ2luZS0+dXBkYXRl
U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhsYW5ndWFnZXMpOworfQorCitWZWN0b3I8U3RyaW5nPiBU
ZXh0Q2hlY2tlckVuZ2luZTo6bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXJFbmdpbmUtPmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMoKTsKK30KKworYm9vbCBUZXh0Q2hlY2tlckVuZ2luZTo6aGFzRGljdGlvbmFyeSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXJFbmdpbmUtPmhhc0RpY3Rpb25hcnkoKTsK
K30KKworVmVjdG9yPFN0cmluZz4gVGV4dENoZWNrZXJFbmdpbmU6OmF2YWlsYWJsZVNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHRDaGVja2VyRW5naW5l
LT5hdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRW5naW5lLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRW5naW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNWQ2NzAxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFbmdpbmUuaApAQCAtMCwwICsxLDY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFRleHRDaGVja2VyRW5naW5lX2gKKyNkZWZpbmUgVGV4dENoZWNrZXJFbmdpbmVf
aAorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckVuY2hh
bnQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFRleHRDaGVja2VyRW5naW5lIHsK
K3B1YmxpYzoKKwkvKiBUZXh0Q2hlY2tlclNldHRpbmdzIGNsYXNzIGVuc3VyZXMgbGFuZ3VhZ2Vz
IG1hbmlwdWxhdGlvbgorCSAgIGJ5IGFkZGluZyBtb3JlIGV4dHJhcyBsaWtlIGFzeW5jIGxvYWRp
bmcgb2YgZGljdGlvbmFyaWVzLgorCSAgIEJsb2NrIGRpcmVjdCBhY2Nlc3MgdG8gdGhlbSB0aHJv
dWdoIFRleHRDaGVja2VyRW5naW5lIGNsYXNzLgorCSAqLworICAgIGZyaWVuZCBjbGFzcyBUZXh0
Q2hlY2tlclNldHRpbmdzOworCisgICAgc3RhdGljIFRleHRDaGVja2VyRW5naW5lJiBzaGFyZWQo
KTsKKworICAgIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYsIGludCYg
bWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50JiBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgVmVjdG9y
PFN0cmluZz4gZ3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBpZ25vcmVX
b3JkKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpOwor
Citwcml2YXRlOgorICAgIFRleHRDaGVja2VyRW5naW5lKCk7CisKKyAgICB2b2lkIHVwZGF0ZVNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcyk7Cisg
ICAgVmVjdG9yPFN0cmluZz4gbG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpIGNvbnN0Owor
ICAgIGJvb2wgaGFzRGljdGlvbmFyeSgpIGNvbnN0OworICAgIFZlY3RvcjxTdHJpbmc+IGF2YWls
YWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKSBjb25zdDsKKworICAgIE93blB0cjxXZWJDb3Jl
OjpUZXh0Q2hlY2tlckVuY2hhbnQ+IG1fdGV4dENoZWNrZXJFbmdpbmU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorI2VuZGlmIC8v
IFRleHRDaGVja2VyRW5naW5lX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvVGV4dENoZWNrZXJTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1RleHRDaGVja2VyU2V0dGluZ3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQyZjkxYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1RleHRDaGVja2VyU2V0dGluZ3MuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlclNldHRpbmdzLmgiCisKKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgIlRleHRDaGVja2VyRW5naW5lLmgiCisjaW5j
bHVkZSAiV2ViVGV4dENoZWNrZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitUZXh0Q2hlY2tlclNldHRpbmdzJiBUZXh0Q2hlY2tlclNldHRp
bmdzOjpzaGFyZWQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGV4dENoZWNrZXJTZXR0
aW5ncywgdGV4dENoZWNrZXJTZXR0aW5ncywgKCkpOworICAgIHJldHVybiB0ZXh0Q2hlY2tlclNl
dHRpbmdzOworfQorCitUZXh0Q2hlY2tlclNldHRpbmdzOjpUZXh0Q2hlY2tlclNldHRpbmdzKCkK
KyAgICA6IG1fc3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1lcih0aGlzLCAmVGV4dENoZWNr
ZXJTZXR0aW5nczo6c3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1lckZpcmVkKQorICAgICwg
bV9sYW5ndWFnZXNVcGRhdGVUaW1lcih0aGlzLCAmVGV4dENoZWNrZXJTZXR0aW5nczo6bGFuZ3Vh
Z2VzVXBkYXRlVGltZXJGaXJlZCkKK3sKKyAgICBtX3N0YXRlLmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkID0gZmFsc2U7CisgICAgbV9zdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQgPSBmYWxzZTsKK30KKwordm9pZCBUZXh0Q2hlY2tlclNldHRpbmdzOjpzZXRDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fc3RhdGUuaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOworCisgICAgLy8gU2V0IHRoZSBk
ZWZhdWx0IGxhbmd1YWdlIGlmIHVzZXIgZGlkbid0IHNwZWNpZnkgYW55LgorICAgIGlmIChlbmFi
bGVkICYmICFUZXh0Q2hlY2tlckVuZ2luZTo6c2hhcmVkKCkuaGFzRGljdGlvbmFyeSgpKQorICAg
ICAgICBzZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJT
ZXR0aW5nczo6Y2FsbENvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJhY2tBc3luYygp
Cit7CisgICAgbV9zcGVsbENoZWNraW5nU2V0dGluZ0NoYW5nZVRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKK30KKworVmVjdG9yPFN0cmluZz4gVGV4dENoZWNrZXJTZXR0aW5nczo6YXZhaWxhYmxlU3Bl
bGxDaGVja2luZ0xhbmd1YWdlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRleHRDaGVja2VyRW5n
aW5lOjpzaGFyZWQoKS5hdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK3Zv
aWQgVGV4dENoZWNrZXJTZXR0aW5nczo6c2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZGVmYXVsdExhbmd1YWdlcykKK3sKKyAgICBtX3NwZWxsQ2hlY2tpbmdM
YW5ndWFnZXMgPSBkZWZhdWx0TGFuZ3VhZ2VzOworICAgIG1fbGFuZ3VhZ2VzVXBkYXRlVGltZXIu
c3RhcnRPbmVTaG90KDApOworfQorCitWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tlclNldHRpbmdz
Ojpsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGV4
dENoZWNrZXJFbmdpbmU6OnNoYXJlZCgpLmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsK
K30KKwordm9pZCBUZXh0Q2hlY2tlclNldHRpbmdzOjpsYW5ndWFnZXNVcGRhdGVUaW1lckZpcmVk
KFRpbWVyPFRleHRDaGVja2VyU2V0dGluZ3M+KikKK3sKKyAgICBUZXh0Q2hlY2tlckVuZ2luZTo6
c2hhcmVkKCkudXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhtX3NwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMpOworfQorCit2b2lkIFRleHRDaGVja2VyU2V0dGluZ3M6OnNwZWxsQ2hlY2tpbmdTZXR0
aW5nQ2hhbmdlVGltZXJGaXJlZChUaW1lcjxUZXh0Q2hlY2tlclNldHRpbmdzPiopCit7CisgICAg
V2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQobV9zdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0sp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyU2V0
dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJTZXR0aW5n
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlM2NjYmIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyU2V0dGlu
Z3MuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICog
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRDaGVja2VyU2V0dGluZ3NfaAor
I2RlZmluZSBUZXh0Q2hlY2tlclNldHRpbmdzX2gKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQor
CisjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVGV4dENoZWNrZXJTZXR0aW5ncyB7CitwdWJsaWM6
CisgICAgc3RhdGljIFRleHRDaGVja2VyU2V0dGluZ3MmIHNoYXJlZCgpOworCisgICAgY29uc3Qg
VGV4dENoZWNrZXJTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAg
dm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBj
YWxsQ29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFja0FzeW5jKCk7CisKKyAgICBW
ZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBk
ZWZhdWx0TGFuZ3VhZ2VzID0gVmVjdG9yPFN0cmluZz4oKSk7CisgICAgVmVjdG9yPFN0cmluZz4g
bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpIGNvbnN0OworCitwcml2YXRlOgorICAgIFRl
eHRDaGVja2VyU2V0dGluZ3MoKTsKKworICAgIHZvaWQgc3BlbGxDaGVja2luZ1NldHRpbmdDaGFu
Z2VUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFRleHRDaGVja2VyU2V0dGluZ3M+Kik7CisgICAg
dm9pZCBsYW5ndWFnZXNVcGRhdGVUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFRleHRDaGVja2Vy
U2V0dGluZ3M+Kik7CisKKyAgICBUZXh0Q2hlY2tlclN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9y
PFN0cmluZz4gbV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzOworCisgICAgV2ViQ29yZTo6VGltZXI8
VGV4dENoZWNrZXJTZXR0aW5ncz4gbV9zcGVsbENoZWNraW5nU2V0dGluZ0NoYW5nZVRpbWVyOwor
ICAgIFdlYkNvcmU6OlRpbWVyPFRleHRDaGVja2VyU2V0dGluZ3M+IG1fbGFuZ3VhZ2VzVXBkYXRl
VGltZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShT
UEVMTENIRUNLKQorI2VuZGlmIC8vIFRleHRDaGVja2VyU2V0dGluZ3NfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196091</attachid>
            <date>2013-04-02 01:06:26 -0700</date>
            <delta_ts>2013-04-12 01:48:00 -0700</delta_ts>
            <desc>simplify the patch</desc>
            <filename>spelling-settings-refactor.patch</filename>
            <type>text/plain</type>
            <size>51377</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlNDZmZTYyLi5mYjkzYWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIx
IEBACisyMDEzLTAzLTIyICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gVGV4dCBDaGVja2VyJ3Mgc2V0dGluZ3MgcmVm
YWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MTcxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVz
ZSBXSzIncyBUZXh0Q2hlY2tlclN0YXRlIG9iamVjdCBhcyB0aGUgc3RvcmUgZm9yIHRoZSB0ZXh0
IGNoZWNrZXIgc2V0dGluZ3MuCisgICAgICAgIEl0J3Mgc2hhcmVkIGJldHdlZW4gdGhlIGNsaWVu
dCAoZXdrIEFQSSBwYXJ0KSBhbmQgV2ViUHJvY2VzcyAocmVhZCBvbmx5KS4KKyAgICAgICAgVGhh
bmtzIHRvIGl0LCB3ZSBkb24ndCBoYXZlIHRvIGtlZXAgYW55IGFkZGl0aW9uYWwgc3RydWN0dXJl
IHdpdGgKKyAgICAgICAgdGhlIHNldHRpbmdzIG9uIGV3ayBzaWRlLgorCisgICAgICAgIE1vdmUg
dGhlIEV3aydzIHRleHQgY2hlY2tlciBzZXR0aW5ncyBBUElzIGZyb20gdGhlIGV3a19zZXR0aW5n
cy5oL2NwcCB0bworICAgICAgICB0aGUgZXdrX3RleHRfY2hlY2tlci5oL2NwcCBhcyB0aGV5IGFy
ZSBub3QgY29ubmVjdGVkIHdpdGggRXdrX1ZpZXcvRXdrX1NldHRpbmdzIG9iamVjdC4KKyAgICAg
ICAgV0syJ3MgQyBBUEkga2VlcHMgdGV4dCBjaGVja2VyIGNhbGxiYWNrcyBhbmQgaXRzIHNldHRp
bmdzIGluIG9uZSBXS1RleHRDaGVja2VyLmggZmlsZS4KKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxs
b3dzIHRvIGtlZXAgdGhlIGNsaWVudCBjYWxsYmFjayByZXNwb25zaWJsZSBmb3IgdGhlIGNvbnRp
bnVvdXMKKyAgICAgICAgc3BlbGwgY2hlY2tpbmcgc2V0dGluZ3MgY2hhbmdlIGluIHRoZSB0ZXh0
IGNoZWNrZXIgY2xpZW50IGNhbGxiYWNrcyBzdHJ1Y3QuCisKKyAgICAgICAgSW50cm9kdWNlIGEg
bmV3IGNsYXNzIHRvIGludm9rZSB0aGUgc3BlbGwgY2hlY2tlciBlbmdpbmUgQVBJLgorICAgICAg
ICBUaGlzIGNoYW5nZSBpcyBuZWVkZWQgYXMgYm90aCBld2tfdGV4dF9jaGVja2VyIGFuZCBUZXh0
Q2hlY2tlckVmbCByZXF1aXJlCisgICAgICAgIGFjY2VzcyB0byB0aGUgc3BlbGwgY2hlY2tlciBF
bmdpbmUuCisgICAgICAgIEl0IGFsbG93cyB0byBnZXQgcmlkIG9mIHRoZSBFbmNoYW50IGhlbHBl
cnMgZnJvbSBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaC4KKyAgICAgICAgVGhpcyBjbGFzcyBj
b3VsZCBiZSBlYXNpbHkgdXNlZCB0byByZXBsYWNlIEVuY2hhbnQgbGlicmFyeSB3aXRoIHRoZSBv
dGhlcgorICAgICAgICBzcGVsbCBjaGVja2VyIGVuZ2luZS4KKworICAgICAgICAqIFBsYXRmb3Jt
RWZsLmNtYWtlOgorICAgICAgICBBZGQgYSBuZXcgZmlsZSB0byB0aGUgYnVpbGQuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAgICAgIChFd2tDb250
ZXh0OjpFd2tDb250ZXh0KToKKyAgICAgICAgUmVtb3ZlIEV3ayBBUElzIHVzYWdlLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuaDoKKyAgICAgICAgUmVtb3ZlIHRleHQgY2hlY2tl
ciBzZXR0aW5ncyBmcm9tIGV3a19zZXR0aW5ncy5oL2NwcC4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwOgorICAgICAgICAoQ2xpZW50Q2FsbGJhY2tz
KToKKyAgICAgICAgQWRkIHRoZSBjbGllbnQgY2FsbGJhY2sgcmVzcG9uc2libGUgZm9yIHRoZSBj
b250aW51b3VzIHNwZWxsIGNoZWNraW5nCisgICAgICAgIHNldHRpbmcgY2hhbmdlIHRvIHRoZSBD
bGllbnRDYWxsYmFja3Mgc3RydWN0LgorCisgICAgICAgIChvbkNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nSWRsZXIpOgorICAgICAgICBNb3ZlIGlkbGVyIGZyb20gZXdrX3NldHRpbmcuY3BwIHRvIHRo
ZSBld2tfdGV4dF9jaGVja2VyLmNwcC4KKworICAgICAgICAoc2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKToKKyAgICAgICAgQ2FsbCB0aGUgY2xpZW50IGNhbGxiYWNrIChpZiBkZWZp
bmVkKSB3aGVuIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0dGluZworICAgICAgICB3YXMg
Y2hhbmdlZCBieSBXZWJLaXQuCisKKyAgICAgICAgKGNoZWNrU3BlbGxpbmdPZlN0cmluZyk6Cisg
ICAgICAgIChndWVzc2VzRm9yV29yZCk6CisgICAgICAgIChsZWFybldvcmQpOgorICAgICAgICAo
aWdub3JlV29yZCk6CisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZS4gQ2FsbCB0aGUgc3BlbGwg
Y2hlY2tpbmcgbWV0aG9kcyB0aHJvdWdoIFRleHRDaGVja2VyRW5naW5lIGNsYXNzLgorICAgICAg
ICBpbnN0ZWFkIG9mIFRleHRDaGVja2VyRW5jaGFudCBjbGFzcy4KKworICAgICAgICAoRXdrX1Rl
eHRfQ2hlY2tlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIFJlbW92ZSBpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCBjYWxsYmFjayBmcm9tIHRoZSBXS1RleHRDaGVja2VyQ2xpZW50IGFz
CisgICAgICAgIEV3ayBBUEkgZG9lc24ndCB1c2UgaXQuCisKKyAgICAgICAgKGV3a190ZXh0X2No
ZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCk6CisgICAgICAgIChl
d2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KToK
KyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldCk6
CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQp
OgorICAgICAgICBNb3ZlIEFQSXMgZnJvbSBld2tfc2V0dGluZ3MuaC9jcHAgdG8gdGhlIGV3a190
ZXh0X2NoZWNrZXIuaC9jcHAuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCk6CisgICAgICAgIERvIG5vdCBjYWxsIHRoZSBj
bGllbnQncyBjYWxsYmFjayByZXNwb25zaWJsZSBmb3IgdGhlIHNldHRpbmcKKyAgICAgICAgY2hh
bmdlIHVubGVzcyBXZWJLaXQgY2hhbmdlcyB0aGUgc2V0dGluZyAodHJvdWdoIHRoZSBjb250ZXh0
CisgICAgICAgICdDaGVjayBTcGVsbGluZyBXaGlsZSBUeXBpbmcnIG9wdGlvbikuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmg6CisgICAgICAgIEFkanVz
dCBBUElzIG5hbWUgdG8gdGhlIGV3a190ZXh0X2NoZWNrZXIgc3ludGF4LgorICAgICAgICBVcGRh
dGUgdGhlIGRvY3VtZW50YXRpb24gYWNjb3JkaW5nIHRvIHRoZSBjaGFuZ2VzLgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmg6CisgICAgICAg
IChFd2tfVGV4dF9DaGVja2VyKToKKyAgICAgICAgUmVtb3ZlIEVuY2hhbnQgaGVscGVycy4gVGhv
c2UgYXJlIGNhbGxlZCB0aHJvdWdoIFRleHRDaGVja2VyRW5naW5lIGNsYXNzLgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHA6Cisg
ICAgICAgIFVwZGF0ZSB0aGUgdW5pdCB0ZXN0cyBhY2NvcmRpbmcgdG8gdGhlIEFQSXMgbmFtZSBj
aGFuZ2UuCisgICAgICAgIFVwZGF0ZSB0aGUgdGVzdCByZXNwb25zaWJsZSBmb3IgdGhlIG5vdGlm
aWNhdGlvbiBhYm91dCB0aGUgc2V0dGluZyBjaGFuZ2UKKyAgICAgICAgYWNjb3JkaW5nIHRvIGNo
YW5nZXMgaW4gJ2V3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFi
bGVkX3NldCcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6aW5pdGlhbGl6ZVN0YXRlKToKKyAgICAgICAgQWRkIGhlbHBlciBm
dW5jdGlvbiB0byBpbml0aWFsaXplIFRleHRDaGVja2VyU3RhdGUuCisKKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgSW5pdGlhbGl6ZSBUZXh0Q2hlY2tlclN0
YXRlIGJlZm9yZSBpdHMgYWNjZXNzLgorCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRD
aGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICBN
YXJrIGFzIHVuaW1wbGVtZW50ZWQgYmVjYXVzZSBvZiBFRkwgZG9lc24ndCBpbXBsZW1lbnQgaXQu
CisKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCk6CisgICAgICAgIFNldCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2VyIGRp
ZG4ndCBzcGVjaWZ5IGFueS4KKyAgICAgICAgTm90aWZ5IHRoZSBjbGllbnQgYWJvdXQgdGhlIHNl
dHRpbmcgY2hhbmdlLgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBjb250ZXh0
IG1lbnUgJ0NoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZycKKyAgICAgICAgb3B0aW9uIGhhcyBi
ZWVuIHRvZ2dsZWQuCisKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIFNldCB0aGUgZGVmYXVs
dCBsYW5ndWFnZSBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4KKyAgICAgICAgQ2FsbGVkIGJ5
IFdLVGV4dENoZWNrZXIncyBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVj
a2VyRW5naW5lLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyRW5naW5l
OjpzaGFyZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckVuZ2luZTo6VGV4dENoZWNr
ZXJFbmdpbmUpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckVuZ2luZTo6Y2hlY2tTcGVs
bGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJFbmdpbmU6Omd1ZXNz
ZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJFbmdpbmU6Omlnbm9yZVdv
cmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckVuZ2luZTo6bGVhcm5Xb3JkKToKKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJFbmdpbmU6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckVuZ2luZTo6bG9hZGVkU3BlbGxD
aGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyRW5naW5lOjpo
YXNEaWN0aW9uYXJ5KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJFbmdpbmU6OmF2YWls
YWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvVGV4
dENoZWNrZXJFbmdpbmUuaDogQWRkZWQuCisKIDIwMTMtMDMtMjMgIEdlb2ZmcmV5IEdhcmVuICA8
Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGRlZCBhIHNldHRpbmcgZm9yIHdoZXRoZXIg
SmF2YVNjcmlwdCBtYXJrdXAgaXMgZW5hYmxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRl
eCA3ODRkY2QyLi5lMDM1YzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTAwLDYg
KzEwMCw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9lZmwv
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1Jl
cXVlc3RNYW5hZ2VyQ2xpZW50RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJF
ZmwuY3BwCisgICAgVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVuZ2luZS5jcHAKICAgICBVSVBy
b2Nlc3MvZWZsL1ZpYnJhdGlvbkNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1ZpZXdD
bGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZsLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IDU3
MGQ0YmYuLjI1Njc1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dC5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotI2luY2x1ZGUgImV3a19zZXR0
aW5ncy5oIgogI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIgogI2VuZGlmCiAK
QEAgLTg5LDEwICs4OCw2IEBAIEV3a0NvbnRleHQ6OkV3a0NvbnRleHQoV0tDb250ZXh0UmVmIGNv
bnRleHQpCiAKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKICAgICBFd2tfVGV4dF9DaGVja2VyOjpp
bml0aWFsaXplKCk7Ci0gICAgaWYgKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWRfZ2V0KCkpIHsKLSAgICAgICAgLy8gTG9hZCB0aGUgZGVmYXVsdCBsYW5ndWFn
ZS4KLSAgICAgICAgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7
Ci0gICAgfQogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfc2V0dGluZ3MuY3BwCmluZGV4IDNkNDM0ZGYxLi4yMWI0YmJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKQEAgLTMz
LDE0ICszMyw2IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJQYWdlUHJveHkuaD4KICNpbmNsdWRl
IDxXZWJLaXQyL1dlYlByZWZlcmVuY2VzLmg+CiAKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSNp
bmNsdWRlICJXS1RleHRDaGVja2VyLmgiCi0jaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2
YXRlLmgiCi0jaW5jbHVkZSA8RWNvcmUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CiAKIGNvbnN0IFdlYktpdDo6V2ViUHJlZmVyZW5jZXMqIEV3a1NldHRpbmdzOjpwcmVmZXJl
bmNlcygpIGNvbnN0CkBAIC01MywzNSArNDUsNiBAQCBXZWJLaXQ6OldlYlByZWZlcmVuY2VzKiBF
d2tTZXR0aW5nczo6cHJlZmVyZW5jZXMoKQogICAgIHJldHVybiBtX3ZpZXctPnBhZ2UoKS0+cGFn
ZUdyb3VwKCktPnByZWZlcmVuY2VzKCk7CiB9CiAKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLXN0
YXRpYyBzdHJ1Y3QgewotICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQg
OiAxOwotICAgIFZlY3RvcjxTdHJpbmc+IHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXM7Ci0gICAgRXdr
X1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIG9uQ29udGludW91
c1NwZWxsQ2hlY2tpbmc7Ci19IGV3a1RleHRDaGVja2VyU2V0dGluZ3MgPSB7IGZhbHNlLCBWZWN0
b3I8U3RyaW5nPigpLCAwIH07Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgb25Db250aW51b3VzU3BlbGxD
aGVja2luZ0lkbGVyKHZvaWQqKQotewotICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLm9u
Q29udGludW91c1NwZWxsQ2hlY2tpbmcpCi0gICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3Mu
b25Db250aW51b3VzU3BlbGxDaGVja2luZyhld2tUZXh0Q2hlY2tlclNldHRpbmdzLmlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKLQotICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19D
QU5DRUw7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldFVw
ZGF0ZSh2b2lkKikKLXsKLSAgICAvLyBGSVhNRTogQ29uc2lkZXIgdG8gZGVsZWdhdGUgY2FsbGlu
ZyBvZiB0aGlzIG1ldGhvZCBpbiBXZWJQcm9jZXNzIHRvIGRvIG5vdCBkZWxheS9ibG9jayBVSVBy
b2Nlc3MuCi0gICAgRXdrX1RleHRfQ2hlY2tlcjo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdl
cyhld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOwotICAgIHJl
dHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Ci19Ci0KLXN0YXRpYyB2b2lkIHNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXNTZXQoY29uc3QgVmVjdG9yPFN0cmluZz4mIG5ld0xhbmd1YWdlcykKLXsKLSAg
ICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMgPSBuZXdMYW5n
dWFnZXM7Ci0gICAgZWNvcmVfaWRsZXJfYWRkKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXRVcGRh
dGUsIDApOwotfQotI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQotCiBFaW5hX0Jvb2wgZXdr
X3NldHRpbmdzX2Z1bGxzY3JlZW5fZW5hYmxlZF9zZXQoRXdrX1NldHRpbmdzKiBzZXR0aW5ncywg
RWluYV9Cb29sIGVuYWJsZSkKIHsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkBAIC0yMDIs
NzggKzE2NSw2IEBAIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfZG5zX3ByZWZldGNoaW5nX2VuYWJs
ZWRfZ2V0KGNvbnN0IEV3a19TZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgcmV0dXJuIHNldHRpbmdz
LT5wcmVmZXJlbmNlcygpLT5kbnNQcmVmZXRjaGluZ0VuYWJsZWQoKTsKIH0KIAotdm9pZCBld2tf
c2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KEV3a19TZXR0
aW5nc19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZV9DYiBjYWxsYmFjaykKLXsKLSNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLm9uQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmcgPSBjYWxsYmFjazsKLSNlbmRpZgotfQotCi1FaW5hX0Jvb2wgZXdr
X3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKQotewotI2lm
IEVOQUJMRShTUEVMTENIRUNLKQotICAgIHJldHVybiBld2tUZXh0Q2hlY2tlclNldHRpbmdzLmlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7
Ci0jZW5kaWYKLX0KLQotdm9pZCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX3NldChFaW5hX0Jvb2wgZW5hYmxlKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNL
KQotICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdz
LmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkICE9IGVuYWJsZSkgewotICAgICAgICBl
d2tUZXh0Q2hlY2tlclNldHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0g
ZW5hYmxlOwotCi0gICAgICAgIFdLVGV4dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxlKTsKLQotICAgICAgICAvLyBTZXRzIHRoZSBkZWZhdWx0
IGxhbmd1YWdlIGlmIHVzZXIgZGlkbid0IHNwZWNpZnkgYW55LgotICAgICAgICBpZiAoZW5hYmxl
ICYmICFFd2tfVGV4dF9DaGVja2VyOjpoYXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBzcGVs
bENoZWNraW5nTGFuZ3VhZ2VzU2V0KFZlY3RvcjxTdHJpbmc+KCkpOwotCi0gICAgICAgIGlmIChl
d2tUZXh0Q2hlY2tlclNldHRpbmdzLm9uQ29udGludW91c1NwZWxsQ2hlY2tpbmcpCi0gICAgICAg
ICAgICBlY29yZV9pZGxlcl9hZGQob25Db250aW51b3VzU3BlbGxDaGVja2luZ0lkbGVyLCAwKTsK
LSAgICB9Ci0jZW5kaWYKLX0KLQotRWluYV9MaXN0KiBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tp
bmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQoKQotewotICAgIEVpbmFfTGlzdCogbGlzdE9mbGFu
Z3VhZ2VzID0gMDsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgbGFuZ3VhZ2VzID0gRXdrX1RleHRfQ2hlY2tlcjo6YXZhaWxhYmxlU3BlbGxDaGVja2lu
Z0xhbmd1YWdlcygpOwotICAgIHNpemVfdCBudW1iZXJPZkxhbnVhZ2VzID0gbGFuZ3VhZ2VzLnNp
emUoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZMYW51YWdlczsgKytp
KQotICAgICAgICBsaXN0T2ZsYW5ndWFnZXMgPSBlaW5hX2xpc3RfYXBwZW5kKGxpc3RPZmxhbmd1
YWdlcywgZWluYV9zdHJpbmdzaGFyZV9hZGQobGFuZ3VhZ2VzW2ldLnV0ZjgoKS5kYXRhKCkpKTsK
LSNlbmRpZgotICAgIHJldHVybiBsaXN0T2ZsYW5ndWFnZXM7Ci19Ci0KLXZvaWQgZXdrX3NldHRp
bmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hhciogbGFuZ3VhZ2VzKQot
ewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFZlY3RvcjxTdHJpbmc+IG5ld0xhbmd1YWdl
czsKLSAgICBTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlcykuc3BsaXQoJywnLCBuZXdMYW5ndWFn
ZXMpOwotCi0gICAgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldChuZXdMYW5ndWFnZXMpOwotI2Vu
ZGlmCi19Ci0KLUVpbmFfTGlzdCogZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
c19nZXQoKQotewotICAgIEVpbmFfTGlzdCogbGlzdE9mbGFuZ3VhZ2VzID0gMDsKLSNpZiBFTkFC
TEUoU1BFTExDSEVDSykKLSAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXMgPSBFd2tfVGV4dF9D
aGVja2VyOjpsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci0gICAgc2l6ZV90IG51bWJl
ck9mTGFudWFnZXMgPSBsYW5ndWFnZXMuc2l6ZSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkxhbnVhZ2VzOyArK2kpCi0gICAgICAgIGxpc3RPZmxhbmd1YWdlcyA9IGVp
bmFfbGlzdF9hcHBlbmQobGlzdE9mbGFuZ3VhZ2VzLCBlaW5hX3N0cmluZ3NoYXJlX2FkZChsYW5n
dWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOwotCi0jZW5kaWYKLSAgICByZXR1cm4gbGlzdE9mbGFu
Z3VhZ2VzOwotfQotCiBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2VuY29kaW5nX2RldGVjdG9yX2Vu
YWJsZWRfc2V0KEV3a19TZXR0aW5ncyogc2V0dGluZ3MsIEVpbmFfQm9vbCBlbmFibGUpCiB7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNldHRpbmdzLCBmYWxzZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oCmluZGV4IDdl
YTcyNWMuLjgzMWM1MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19zZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19zZXR0aW5ncy5oCkBAIC00MywxNCArNDMsNiBAQCBleHRlcm4gIkMiIHsKIC8qKiBDcmVh
dGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfU2V0dGluZ3MgKi8KIHR5cGVkZWYgc3RydWN0IEV3a1Nl
dHRpbmdzIEV3a19TZXR0aW5nczsKIAotLyoqCi0gKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciB0
aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuCi0gKiB0
aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktp
dC4KLSAqCi0gKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxs
IGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCi0g
Ki8KLXR5cGVkZWYgdm9pZCAoKkV3a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0NoZWNraW5n
X0NoYW5nZV9DYikoRWluYV9Cb29sIGVuYWJsZSk7Ci0KIAogLyoqCiAgKiBFbmFibGVzL2Rpc2Fi
bGVzIHRoZSBKYXZhc2NyaXB0IEZ1bGxzY3JlZW4gQVBJLiBUaGUgSmF2YXNjcmlwdCBBUEkgYWxs
b3dzCkBAIC0yMjksNzYgKzIyMSw2IEBAIEVBUEkgRWluYV9Cb29sIGV3a19zZXR0aW5nc19kbnNf
cHJlZmV0Y2hpbmdfZW5hYmxlZF9zZXQoRXdrX1NldHRpbmdzICpzZXR0aW5ncywKIEVBUEkgRWlu
YV9Cb29sIGV3a19zZXR0aW5nc19kbnNfcHJlZmV0Y2hpbmdfZW5hYmxlZF9nZXQoY29uc3QgRXdr
X1NldHRpbmdzICpzZXR0aW5ncyk7CiAKIC8qKgotICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9u
IHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgotICogdGhlIGNvbnRpbnVvdXMgc3BlbGwg
Y2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCi0gKgotICogU3BlY2lmeWlu
ZyBvZiB0aGlzIGNhbGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8g
cmVjZWl2ZSBub3RpZmljYXRpb25zCi0gKiBvbmNlIFdlYktpdCBjaGFuZ2VzIHRoaXMgc2V0dGlu
Zy4KLSAqIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFj
ayBpcyBub3Qgc2V0LgotICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQg
bGV2ZWwgY2FuIGJlIG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCi0gKiBvcHRpb25zIGlu
IGEgQ29udGV4dCBNZW51IGJ5IGEgdXNlci4KLSAqCi0gKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJh
Y2sgZnVuY3Rpb24gdG8gc2V0IG9yIEBjIE5VTEwgdG8gaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMg
b25lCi0gKi8KLUVBUEkgdm9pZCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19jaGFuZ2VfY2Jfc2V0KEV3a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0No
YW5nZV9DYiBjYik7Ci0KLS8qKgotICogUXVlcmllcyBpZiBjb250aW51b3VzIHNwZWxsIGNoZWNr
aW5nIGlzIGVuYWJsZWQuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgY29udGludW91
cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkIG9yIEBjIEVJTkFfRkFMU0UgaWYgaXQncyBkaXNh
YmxlZAotICovCi1FQVBJIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9j
aGVja2luZ19lbmFibGVkX2dldCh2b2lkKTsKLQotLyoqCi0gKiBFbmFibGVzL2Rpc2FibGVzIGNv
bnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCi0gKgotICogQWRkaXRpb25hbGx5LCB0aGlzIGZ1bmN0
aW9uIGNhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gKGlmIGRlZmluZWQpIHRvIG5vdGlmeQotICog
dGhlIGNsaWVudCBhYm91dCB0aGUgY2hhbmdlIG9mIHRoZSBzZXR0aW5nLgotICogVGhpcyBmZWF0
dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gKgotICogQHNlZSBld2tfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0Ci0gKgotICogQHBhcmFtIGVuYWJs
ZSBAYyBFSU5BX1RSVUUgdG8gZW5hYmxlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgb3IgQGMg
RUlOQV9GQUxTRSB0byBkaXNhYmxlCi0gKi8KLUVBUEkgdm9pZCBld2tfc2V0dGluZ3NfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChFaW5hX0Jvb2wgZW5hYmxlKTsKLQotLyoq
Ci0gKiBHZXRzIHRoZSB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHRoZSBzcGVsbCBjaGVja2lu
ZyBsYW5ndWFnZXMgdG8gdXNlLgotICoKLSAqIEBzZWUgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlc19zZXQKLSAqCi0gKiBAcmV0dXJuIHRoZSBsaXN0IHdpdGggYXZhaWxhYmxl
IHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcywgb3IgQGMgTlVMTCBvbiBmYWlsdXJlCi0gKiAgICAg
ICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIsIHVz
ZSBlaW5hX3N0cmluZ3NoYXJlX2RlbCgpCi0gKi8KLUVBUEkgRWluYV9MaXN0ICpld2tfc2V0dGlu
Z3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQodm9pZCk7Ci0KLS8qKgot
ICogU2V0cyBAYSBsYW5ndWFnZXMgYXMgdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIHVzZSBieSBk
ZWZhdWx0IFdlYktpdAotICogaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2VyIGZlYXR1cmUg
d2l0aCBFbmNoYW50IGxpYnJhcnkgc3VwcG9ydC4KLSAqCi0gKiBJZiBAbGFuZ3VhZ2VzIGlzIEBj
IE5VTEwsIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGlzIHVzZWQuCi0gKiBJZiB0aGUgZGVmYXVsdCBs
YW5ndWFnZSBjYW4gbm90IGJlIGRldGVybWluZWQgdGhlbiBhbnkgYXZhaWxhYmxlIGRpY3Rpb25h
cnkgd2lsbCBiZSB1c2VkLgotICoKLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24gaW52YWxpZGF0ZXMg
dGhlIHByZXZpb3VzbHkgc2V0IGxhbmd1YWdlcy4KLSAqICAgICAgIFRoZSBkaWN0aW9uYXJpZXMg
YXJlIHJlcXVlc3RlZCBhc3luY2hyb25vdXNseS4KLSAqCi0gKiBAcGFyYW0gbGFuZ3VhZ2VzIGEg
bGlzdCBvZiBjb21tYSAoJywnKSBzZXBhcmF0ZWQgbGFuZ3VhZ2UgY29kZXMKLSAqICAgICAgICBv
ZiB0aGUgZm9ybSAnZW5fVVMnLCBpZSwgbGFuZ3VhZ2VfVkFSSUFOVCwgbWF5IGJlIEBjIE5VTEwu
Ci0gKi8KLUVBUEkgdm9pZCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3Nl
dChjb25zdCBjaGFyICpsYW5ndWFnZXMpOwotCi0vKioKLSAqIEdldHMgdGhlIHRoZSBsaXN0IG9m
IHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLgotICoKLSAqIEBzZWUgZXdrX3Nl
dHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0Ci0gKiBAc2VlIGV3
a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0Ci0gKgotICogQHJldHVybiB0
aGUgbGlzdCB3aXRoIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLAotICogICAg
ICAgICB0aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1
c2UgZWluYV9zdHJpbmdzaGFyZV9kZWwoKQotICovCi1FQVBJIEVpbmFfTGlzdCAqZXdrX3NldHRp
bmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQodm9pZCk7Ci0KLS8qKgogICogRW5hYmxl
cy9kaXNhYmxlcyB0aGUgZW5jb2RpbmcgZGV0ZWN0b3IuCiAgKgogICogQnkgZGVmYXVsdCwgdGhl
IGVuY29kaW5nIGRldGVjdG9yIGlzIGRpc2FibGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcAppbmRleCAzODZjYTc4Li4y
YTFlMzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dGV4dF9jaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdGV4dF9jaGVja2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgU2Ft
c3VuZyBFbGVjdHJvbmljcwogICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCw3ICszMCw5IEBACiAjaWYgRU5BQkxFKFNQRUxMQ0hF
Q0spCiAKICNpbmNsdWRlICJFd2tWaWV3LmgiCi0jaW5jbHVkZSAiVGV4dENoZWNrZXJFbmNoYW50
LmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckVuZ2lu
ZS5oIgorI2luY2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKICNpbmNsdWRlICJXS0FQSUNhc3Qu
aCIKICNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKICNpbmNsdWRlICJXS011dGFibGVB
cnJheS5oIgpAQCAtMzgsMTAgKzQwLDcgQEAKICNpbmNsdWRlICJXS1N0cmluZy5oIgogI2luY2x1
ZGUgIldLVGV4dENoZWNrZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRl
ICJld2tfc2V0dGluZ3MuaCIKLSNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIK
ICNpbmNsdWRlIDxFaW5hLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC01Miw2ICs1MSw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAgKiBAaW50ZXJuYWwKICAqLwogc3RydWN0IENsaWVu
dENhbGxiYWNrcyB7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Db250aW51b3VzX1NwZWxsX0NoZWNr
aW5nX0NoYW5nZV9DYiBjb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZTsKICAgICBFd2tf
VGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0X0NiIHVuaXF1ZV9zcGVs
bF9kb2N1bWVudF90YWdfZ2V0OwogICAgIEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0Rv
Y3VtZW50X1RhZ19DbG9zZV9DYiB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlOwogICAg
IEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrX0NiIHN0cmluZ19zcGVsbGlu
Z19jaGVjazsKQEAgLTYwLDI2ICs2MCwyNyBAQCBzdHJ1Y3QgQ2xpZW50Q2FsbGJhY2tzIHsKICAg
ICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlX0NiIHdvcmRfaWdub3JlOwogfTsKIAotc3Rh
dGljIGlubGluZSBUZXh0Q2hlY2tlckVuY2hhbnQqIHRleHRDaGVja2VyRW5jaGFudCgpCi17Ci0g
ICAgc3RhdGljIE93blB0cjxUZXh0Q2hlY2tlckVuY2hhbnQ+IHRleHRDaGVja2VyRW5jaGFudCA9
IFRleHRDaGVja2VyRW5jaGFudDo6Y3JlYXRlKCk7Ci0gICAgcmV0dXJuIHRleHRDaGVja2VyRW5j
aGFudC5nZXQoKTsKLX0KLQogc3RhdGljIGlubGluZSBDbGllbnRDYWxsYmFja3MmIGNsaWVudENh
bGxiYWNrcygpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDbGllbnRDYWxsYmFja3MsIGNs
aWVudENhbGxiYWNrcywgKCkpOwogICAgIHJldHVybiBjbGllbnRDYWxsYmFja3M7CiB9CiAKLXN0
YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqKQor
CisvLyBIYW5kbGUgaWRsZXIgdG8gY2FsbCB0aGUgY2xpZW50IGNhbGxiYWNrIHdoZW4gdGhlIHNl
dHRpbmcgd2FzIGNoYW5nZWQuCitzdGF0aWMgRWluYV9Cb29sIG9uQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdJZGxlcih2b2lkKikKIHsKLSAgICByZXR1cm4gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKKyAgICBjbGllbnRDYWxsYmFja3MoKS5jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZSgKKyAgICAgICAgVGV4dENoZWNrZXI6OnN0YXRl
KCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQKKyAgICApOworCisgICAgcmV0dXJu
IEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKIH0KIAotc3RhdGljIHZvaWQgc2V0Q29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCopCitzdGF0aWMgdm9p
ZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCwgY29uc3Qgdm9pZCopCiB7
Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQo
ZW5hYmxlZCk7CisgICAgaWYgKGNsaWVudENhbGxiYWNrcygpLmNvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfY2hhbmdlKQorICAgICAgICBlY29yZV9pZGxlcl9hZGQob25Db250aW51b3VzU3BlbGxD
aGVja2luZ0lkbGVyLCAwKTsKIH0KIAogc3RhdGljIHVpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1l
bnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQpAQCAtMTAxLDcgKzEwMiw3IEBAIHN0
YXRpYyB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVm
IHRleHQsIGludDMyX3QqIG1pc3NwCiAgICAgaWYgKGNsaWVudENhbGxiYWNrcygpLnN0cmluZ19z
cGVsbGluZ19jaGVjaykKICAgICAgICAgY2xpZW50Q2FsbGJhY2tzKCkuc3RyaW5nX3NwZWxsaW5n
X2NoZWNrKHRhZywgV0tFaW5hU2hhcmVkU3RyaW5nKHRleHQpLCBtaXNzcGVsbGluZ0xvY2F0aW9u
LCBtaXNzcGVsbGluZ0xlbmd0aCk7CiAgICAgZWxzZQotICAgICAgICB0ZXh0Q2hlY2tlckVuY2hh
bnQoKS0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRvV1RGU3RyaW5nKHRleHQpLCAqbWlzc3BlbGxp
bmdMb2NhdGlvbiwgKm1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgVGV4dENoZWNrZXJFbmdp
bmU6Omluc3RhbmNlKCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHRvV1RGU3RyaW5nKHRleHQpLCAq
bWlzc3BlbGxpbmdMb2NhdGlvbiwgKm1pc3NwZWxsaW5nTGVuZ3RoKTsKIH0KIAogc3RhdGljIFdL
QXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBj
b25zdCB2b2lkKikKQEAgLTExOCw3ICsxMTksNyBAQCBzdGF0aWMgV0tBcnJheVJlZiBndWVzc2Vz
Rm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQogICAg
ICAgICAgICAgZnJlZShpdGVtKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzID0gdGV4dENoZWNrZXJFbmNoYW50KCktPmdldEd1
ZXNzZXNGb3JXb3JkKHRvV1RGU3RyaW5nKHdvcmQpKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGd1ZXNzZXMgPSBUZXh0Q2hlY2tlckVuZ2luZTo6aW5zdGFuY2UoKS5ndWVzc2VzRm9y
V29yZCh0b1dURlN0cmluZyh3b3JkKSk7CiAgICAgICAgIHNpemVfdCBudW1iZXJPZkd1ZXNzZXMg
PSBndWVzc2VzLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
Zkd1ZXNzZXM7ICsraSkgewogICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1
Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ3Vlc3Nlc1tp
XS51dGY4KCkuZGF0YSgpKSk7CkBAIC0xMzQsNyArMTM1LDcgQEAgc3RhdGljIHZvaWQgbGVhcm5X
b3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCiAgICAgaWYg
KGNsaWVudENhbGxiYWNrcygpLndvcmRfbGVhcm4pCiAgICAgICAgIGNsaWVudENhbGxiYWNrcygp
LndvcmRfbGVhcm4odGFnLCBXS0VpbmFTaGFyZWRTdHJpbmcod29yZCkpOwogICAgIGVsc2UKLSAg
ICAgICAgdGV4dENoZWNrZXJFbmNoYW50KCktPmxlYXJuV29yZCh0b1dURlN0cmluZyh3b3JkKSk7
CisgICAgICAgIFRleHRDaGVja2VyRW5naW5lOjppbnN0YW5jZSgpLmxlYXJuV29yZCh0b1dURlN0
cmluZyh3b3JkKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBX
S1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKQEAgLTE0MiwzMSArMTQzLDExIEBAIHN0YXRp
YyB2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2
b2lkKikKICAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkud29yZF9pZ25vcmUpCiAgICAgICAgIGNs
aWVudENhbGxiYWNrcygpLndvcmRfaWdub3JlKHRhZywgV0tFaW5hU2hhcmVkU3RyaW5nKHdvcmQp
KTsKICAgICBlbHNlCi0gICAgICAgIHRleHRDaGVja2VyRW5jaGFudCgpLT5pZ25vcmVXb3JkKHRv
V1RGU3RyaW5nKHdvcmQpKTsKKyAgICAgICAgVGV4dENoZWNrZXJFbmdpbmU6Omluc3RhbmNlKCku
aWdub3JlV29yZCh0b1dURlN0cmluZyh3b3JkKSk7CiB9CiAKIG5hbWVzcGFjZSBFd2tfVGV4dF9D
aGVja2VyIHsKIAotVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdl
cygpCi17Ci0gICAgcmV0dXJuIHRleHRDaGVja2VyRW5jaGFudCgpLT5hdmFpbGFibGVTcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKCk7Ci19Ci0KLXZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdl
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKQotewotICAgIHRleHRDaGVja2VyRW5j
aGFudCgpLT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Ci19Ci0KLVZl
Y3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQotewotICAgIHJldHVy
biB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwot
fQotCi1ib29sIGhhc0RpY3Rpb25hcnkoKQotewotICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hh
bnQoKS0+aGFzRGljdGlvbmFyeSgpOwotfQotCiAvKioKICAqIEluaXRpYWxpemVzIHNwZWxsY2hl
Y2sgZmVhdHVyZS4KICAqCkBAIC0xODUsOCArMTY2LDggQEAgdm9pZCBpbml0aWFsaXplKCkKICAg
ICBXS1RleHRDaGVja2VyQ2xpZW50IHRleHRDaGVja2VyQ2xpZW50ID0gewogICAgICAgICBrV0tU
ZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAogICAgICAgICAwLCAvLyBjbGllbnRJbmZv
Ci0gICAgICAgIDAsIC8vIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkCi0gICAgICAg
IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICAwLCAvLyBjb250aW51
b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQKKyAgICAgICAgMCwgLy8gY29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkCiAgICAgICAgIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCwK
ICAgICAgICAgMCwgLy8gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkCiAgICAgICAgIDAsIC8vIHNl
dEdyYW1tYXJDaGVja2luZ0VuYWJsZWQKQEAgLTIyNCw2ICsyMDUsNjUgQEAgdm9pZCBld2tfdGV4
dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUpICAgICAgICBcCiB9CiAjZW5kaWYg
Ly8gRU5BQkxFKFNQRUxMQ0hFQ0spCiAKKworRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpCit7CisjaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCisgICAgcmV0dXJuIFRleHRDaGVja2VyOjpzdGF0ZSgpLmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwor
dm9pZCBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9z
ZXQoRWluYV9Cb29sIGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXS1Rl
eHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKCEhZW5h
YmxlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZSk7CisjZW5kaWYKK30KKworRWlu
YV9MaXN0KiBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFn
ZXNfZ2V0KCkKK3sKKyAgICBFaW5hX0xpc3QqIGxpc3RPZmxhbmd1YWdlcyA9IDA7CisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcyA9IFRl
eHRDaGVja2VyRW5naW5lOjppbnN0YW5jZSgpLmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZMYW5ndWFnZXMgPSBsYW5ndWFnZXMuc2l6ZSgpOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkxhbmd1YWdlczsgKytpKQorICAg
ICAgICBsaXN0T2ZsYW5ndWFnZXMgPSBlaW5hX2xpc3RfYXBwZW5kKGxpc3RPZmxhbmd1YWdlcywg
ZWluYV9zdHJpbmdzaGFyZV9hZGQobGFuZ3VhZ2VzW2ldLnV0ZjgoKS5kYXRhKCkpKTsKKyNlbmRp
ZgorICAgIHJldHVybiBsaXN0T2ZsYW5ndWFnZXM7Cit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tl
cl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0IGNoYXIqIGxhbmd1YWdlcykKK3sK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5nPiBuZXdMYW5ndWFnZXM7
CisgICAgU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZXMpLnNwbGl0KCcsJywgbmV3TGFuZ3VhZ2Vz
KTsKKworICAgIFRleHRDaGVja2VyRW5naW5lOjppbnN0YW5jZSgpLnVwZGF0ZVNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMobmV3TGFuZ3VhZ2VzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGxhbmd1
YWdlcyk7CisjZW5kaWYKK30KKworRWluYV9MaXN0KiBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2No
ZWNraW5nX2xhbmd1YWdlc19nZXQoKQoreworICAgIEVpbmFfTGlzdCogbGlzdE9mbGFuZ3VhZ2Vz
ID0gMDsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFn
ZXMgPSBUZXh0Q2hlY2tlckVuZ2luZTo6aW5zdGFuY2UoKS5sb2FkZWRTcGVsbENoZWNraW5nTGFu
Z3VhZ2VzKCk7CisgICAgc2l6ZV90IG51bWJlck9mTGFudWFnZXMgPSBsYW5ndWFnZXMuc2l6ZSgp
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkxhbnVhZ2VzOyArK2kpCisg
ICAgICAgIGxpc3RPZmxhbmd1YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQobGlzdE9mbGFuZ3VhZ2Vz
LCBlaW5hX3N0cmluZ3NoYXJlX2FkZChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOworCisj
ZW5kaWYKKyAgICByZXR1cm4gbGlzdE9mbGFuZ3VhZ2VzOworfQorCitFV0tfVEVYVF9DSEVDS0VS
X0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdf
Q2hhbmdlX0NiLCBjb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZSkKIEVXS19URVhUX0NI
RUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50
X1RhZ19HZXRfQ2IsIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KQogRVdLX1RFWFRfQ0hF
Q0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRf
VGFnX0Nsb3NlX0NiLCB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQogRVdLX1RFWFRf
Q0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hl
Y2tfQ2IsIHN0cmluZ19zcGVsbGluZ19jaGVjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaAppbmRleCBiN2FlYTg4Li4wMzAwODY4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRf
Y2hlY2tlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBTYW1zdW5nIEVsZWN0
cm9uaWNzCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDExICsyNSwxNCBA
QAogCiAvKioKICAqIEBmaWxlIGV3a190ZXh0X2NoZWNrZXIuaAotICogQGJyaWVmIFByb3ZpZGVz
IEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1l
bnRhdGlvbi4KKyAqIEBicmllZiBQcm92aWRlcyBBUEkgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0
IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24KKyAqICAgICAgICBhbmQgY29udGFp
bnMgQVBJIHRvIG1hbmlwdWxhdGUgc3BlbGxjaGVja2VyIHNldHRpbmdzLgogICoKLSAqIFRoZXJl
IGlzIG9uZSBzcGVsbGNoZWNrZXIgb2JqZWN0IHBlciBhcHBsaWNhdGlvbiBhbmQgaXQncyBkaXNh
YmxlZCBieSBkZWZhdWx0LgorICogVGhlcmUgaXMgb25lIHNwZWxsY2hlY2tlciBvYmplY3QgcGVy
IGFwcGxpY2F0aW9uLgogICogSXQgYWxsb3dzIHRvIGNoZWNrIHNwZWxsaW5nIGluIHRoZSBlZGl0
YWJsZSBhcmVhcy4KLSAqIElmIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGVuYWJsZSB0aGUgZmVhdHVy
ZSwgQVBJIGZyb20gZXdrX3NldHRpbmdzLmgKKyAqCisgKiBUaGUgZmVhdHVyZSBpcyBkaXNhYmxl
ZCBieSBkZWZhdWx0LgorICogSWYgYXBwbGljYXRpb24gd2FudHMgdG8gZW5hYmxlIGl0LCBld2tf
dGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQgQVBJCiAg
KiBzaG91bGQgYmUgdXNlZC4KICAqCiAgKiBUaGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2Vy
IGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBFbmNoYW50IGxpYnJhcnkuCkBAIC00OCw2
ICs1MSwxNCBAQCBleHRlcm4gIkMiIHsKICNlbmRpZgogCiAvKioKKyAqIENyZWF0ZXMgYSB0eXBl
IG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50
IHdoZW4KKyAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5n
ZWQgYnkgV2ViS2l0LgorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIGlmIGNvbnRp
bnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3Mg
ZGlzYWJsZWQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9Db250aW51b3Vz
X1NwZWxsX0NoZWNraW5nX0NoYW5nZV9DYikoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgogICog
RGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJldHVybiBh
IHRhZyAoaWRlbnRpZmllcikgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUuCiAgKgog
ICogVW5pcXVlIHRhZ3MgaGVscCB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggb3RoZXIgb2JqZWN0
cyB0aGF0IGFyZSBjaGVja2VkIGZvciBzcGVsbGluZyBtaXN0YWtlcy4KQEAgLTEwOCw2ICsxMTks
NzUgQEAgdHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0NiKSh1aW50
NjRfdCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOwogICovCiB0eXBlZGVmIHZvaWQgKCpFd2tfVGV4
dF9DaGVja2VyX1dvcmRfSWdub3JlX0NiKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKndvcmQp
OwogCisKKy8qKgorICogUXVlcmllcyBpZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVu
YWJsZWQuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgY29udGludW91cyBzcGVsbCBj
aGVja2luZyBpcyBlbmFibGVkIG9yIEBjIEVJTkFfRkFMU0UgaWYgaXQncyBkaXNhYmxlZAorICov
CitFQVBJIEVpbmFfQm9vbCBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZF9nZXQodm9pZCk7CisKKy8qKgorICogRW5hYmxlcy9kaXNhYmxlcyBjb250aW51
b3VzIHNwZWxsIGNoZWNraW5nLgorICoKKyAqIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBk
ZWZhdWx0LgorICoKKyAqIEBzZWUgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2NoYW5nZV9jYl9zZXQKKyAqCisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSB0
byBlbmFibGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBvciBAYyBFSU5BX0ZBTFNFIHRvIGRp
c2FibGUKKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9j
aGVja2luZ19lbmFibGVkX3NldChFaW5hX0Jvb2wgZW5hYmxlKTsKKworLyoqCisgKiBHZXRzIHRo
ZSB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMg
dG8gdXNlLgorICoKKyAqIEBzZWUgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
c19zZXQKKyAqCisgKiBAcmV0dXJuIHRoZSBsaXN0IHdpdGggYXZhaWxhYmxlIHNwZWxsIGNoZWNr
aW5nIGxhbmd1YWdlcywgb3IgQGMgTlVMTCBvbiBmYWlsdXJlCisgKiAgICAgICAgIHRoZSBFaW5h
X0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIsIHVzZSBlaW5hX3N0cmlu
Z3NoYXJlX2RlbCgpCisgKi8KK0VBUEkgRWluYV9MaXN0ICpld2tfdGV4dF9jaGVja2VyX3NwZWxs
X2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KHZvaWQpOworCisvKioKKyAqIFNldHMg
QGEgbGFuZ3VhZ2VzIGFzIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB0byB1c2UgYnkgZGVmYXVsdCBX
ZWJLaXQKKyAqIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tlciBmZWF0dXJlIHdpdGggRW5j
aGFudCBsaWJyYXJ5IHN1cHBvcnQuCisgKgorICogSWYgQGxhbmd1YWdlcyBpcyBAYyBOVUxMLCB0
aGUgZGVmYXVsdCBsYW5ndWFnZSBpcyB1c2VkLgorICogSWYgdGhlIGRlZmF1bHQgbGFuZ3VhZ2Ug
Y2FuIG5vdCBiZSBkZXRlcm1pbmVkIHRoZW4gYW55IGF2YWlsYWJsZSBkaWN0aW9uYXJ5IHdpbGwg
YmUgdXNlZC4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGludmFsaWRhdGVzIHRoZSBwcmV2
aW91c2x5IHNldCBsYW5ndWFnZXMuCisgKiAgICAgICBUaGUgZGljdGlvbmFyaWVzIGFyZSByZXF1
ZXN0ZWQgYXN5bmNocm9ub3VzbHkuCisgKgorICogQHBhcmFtIGxhbmd1YWdlcyBhIGxpc3Qgb2Yg
Y29tbWEgKCcsJykgc2VwYXJhdGVkIGxhbmd1YWdlIGNvZGVzCisgKiAgICAgICAgb2YgdGhlIGZv
cm0gJ2VuX1VTJywgaWUsIGxhbmd1YWdlX1ZBUklBTlQsIG1heSBiZSBAYyBOVUxMLgorICovCitF
QVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGNv
bnN0IGNoYXIgKmxhbmd1YWdlcyk7CisKKy8qKgorICogR2V0cyB0aGUgdGhlIGxpc3Qgb2YgdGhl
IHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1c2UuCisgKgorICogQHNlZSBld2tfc2V0dGlu
Z3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQKKyAqIEBzZWUgZXdrX3Nl
dHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQKKyAqCisgKiBAcmV0dXJuIHRoZSBs
aXN0IHdpdGggdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1c2UsCisgKiAgICAgICAg
IHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIsIHVzZSBl
aW5hX3N0cmluZ3NoYXJlX2RlbCgpCisgKi8KK0VBUEkgRWluYV9MaXN0ICpld2tfdGV4dF9jaGVj
a2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQodm9pZCk7CisKKy8qKgorICogU2V0cyBh
IGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhl
IGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQu
CisgKgorICogU3BlY2lmeWluZyBvZiB0aGlzIGNhbGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBw
bGljYXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCisgKiBvbmNlIFdlYktpdCBj
aGFuZ2VzIHRoaXMgc2V0dGluZy4KKyAqIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJl
c3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0
aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJlIG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5
aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBNZW51IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFy
YW0gY2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0IG9yIEBjIE5VTEwgdG8gaW52YWxp
ZGF0ZSB0aGUgcHJldmlvdXMgb25lCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX0Nv
bnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIGNiKTsKKwogLyoqCiAgKiBTZXRzIGEg
Y2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGEgdW5pcXVlIHNwZWxsIGRvY3VtZW50IHRhZy4KICAq
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190
ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCmluZGV4IDZjNDczMGUuLjc0NmFhNzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNr
ZXJfcHJpdmF0ZS5oCkBAIC0zNSwxMiArMzUsNiBAQCBuYW1lc3BhY2UgRXdrX1RleHRfQ2hlY2tl
ciB7CiAKIHZvaWQgaW5pdGlhbGl6ZSgpOwogCi0vLyBFbmNoYW50IGhlbHBlcnMuCi1WZWN0b3I8
U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci12b2lkIHVwZGF0ZVNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcyk7Ci1W
ZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci1ib29sIGhhc0Rp
Y3Rpb25hcnkoKTsKLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4
dF9jaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rl
c3RfZXdrMl90ZXh0X2NoZWNrZXIuY3BwCmluZGV4IDgyZGEwOWEuLjRjZTM4OGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl90ZXh0
X2NoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3Rz
L3Rlc3RfZXdrMl90ZXh0X2NoZWNrZXIuY3BwCkBAIC0yMTMsMjIgKzIxMywyMiBAQCBzdGF0aWMg
dm9pZCBvbldvcmRJZ25vcmUodWludDY0X3QgdGFnLCBjb25zdCBjaGFyKiB3b3JkKQogfQogCiAv
KioKLSAqIFRlc3Qgc2V0dGVyL2dldHRlciBmb3IgdGhlIGNvbnRpbm91cyBzcGVsbCBjaGVja2lu
ZzoKLSAqICAtIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
Z2V0Ci0gKiAgLSBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X3NldAorICogVGVzdCBzZXR0ZXIvZ2V0dGVyIGZvciB0aGUgY29udGludW91cyBzcGVsbCBjaGVj
a2luZzoKKyAqICAtIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19l
bmFibGVkX2dldAorICogIC0gZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWRfc2V0CiAgKi8KLVRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGlu
Z3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkKQorVEVTVF9GKEVXSzJVbml0VGVz
dEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
KQogewotICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
c2V0KHRydWUpOworICAgIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX3NldCh0cnVlKTsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBFWFBFQ1Rf
VFJVRShld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgp
KTsKKyAgICBFWFBFQ1RfVFJVRShld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfZW5hYmxlZF9nZXQoKSk7CiAKICAgICAvLyBXaGVuIHRoZSBzcGVsbCBjaGVja2luZyBo
YXMgYmVlbiBlbmFibGVkLCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpcyBzZXQgKGlmIHRoZSB1c2Vy
CiAgICAgLy8gZGlkbid0IHNldCBhbnkpLiBUaGUgbGFuZ3VhZ2VzIGFyZSBiZWluZyBsb2FkZWQg
b24gdGhlIGlkbGVyLCB3YWl0IGZvciB0aGVtLgogICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3Rp
bWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25UaW1lb3V0LCAwKTsKICAgICBlY29y
ZV9tYWluX2xvb3BfYmVnaW4oKTsKIAotICAgIEVpbmFfTGlzdCogbG9hZGVkTGFuZ3VhZ2VzID0g
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKKyAgICBFaW5hX0xp
c3QqIGxvYWRlZExhbmd1YWdlcyA9IGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX2dldCgpOwogICAgIC8vIE5vIGRpY3Rpb25hcnkgaXMgYXZhaWxhYmxlL2luc3RhbGxl
ZC4KICAgICBpZiAoIWxvYWRlZExhbmd1YWdlcykKICAgICAgICAgcmV0dXJuOwpAQCAtMjM5LDIz
ICsyMzksMjcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWQpCiAgICAgRUlOQV9MSVNUX0ZSRUUobG9hZGVkTGFu
Z3VhZ2VzLCBkYXRhKQogICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2FzdDxj
b25zdCBjaGFyKj4oZGF0YSkpOwogI2Vsc2UKLSAgICBFWFBFQ1RfRkFMU0UoZXdrX3NldHRpbmdz
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKSk7CisgICAgRVhQRUNUX0ZB
TFNFKGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dl
dCgpKTsKICNlbmRpZgogCi0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZF9zZXQoZmFsc2UpOwotICAgIEVYUEVDVF9GQUxTRShld2tfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKTsKKyAgICBld2tfdGV4dF9jaGVj
a2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoZmFsc2UpOworICAgIEVY
UEVDVF9GQUxTRShld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5h
YmxlZF9nZXQoKSk7CiB9CiAKIC8qKgotICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsYmFjayBpcyBj
YWxsZWQgd2hlbiB0aGUgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyBoYXMgYmVlbiBjaGFuZ2VkLgor
ICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgc3BlbGwgY2hl
Y2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKiBDaGFuZ2luZyBvZiB0aGlz
IHNldHRpbmcgYXQgdGhlIFdlYktpdCBsZXZlbCBjYW4gYmUgbWFkZSBhcyBhIHJlc3VsdCBvZiBt
b2RpZnlpbmcKKyAqIG9wdGlvbnMgaW4gYSBDb250ZXh0IE1lbnUgYnkgYSB1c2VyLgogICovCi1U
RVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfY2hhbmdlX2NiX3NldCkKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9j
aGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldCkKIHsKLSAgICBl
d2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KG9uU2V0
dGluZ0NoYW5nZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2NoYW5nZV9jYl9zZXQob25TZXR0aW5nQ2hhbmdlKTsKIAotICAgIGlzU2V0dGluZ0VuYWJs
ZWQgPSBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgp
OworICAgIGlzU2V0dGluZ0VuYWJsZWQgPSBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKICAgICBpc1NldHRpbmdFbmFibGVkID0gIWlzU2V0
dGluZ0VuYWJsZWQ7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdf
ZW5hYmxlZF9zZXQoaXNTZXR0aW5nRW5hYmxlZCk7CisgICAgLy8gVGhlIG5vdGlmaWNhdGlvbnMg
YWJvdXQgdGhlIHNldHRpbmcgY2hhbmdlIHNob3VsZG4ndCBiZSBzZW50IGlmIHRoZSBjaGFuZ2Ug
d2FzIG1hZGUKKyAgICAvLyBvbiB0aGUgY2xpZW50J3MgcmVxdWVzdCAocHVibGljIEFQSSkuCisg
ICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0
KGlzU2V0dGluZ0VuYWJsZWQpOwogCiAgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRk
KGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOwogCkBAIC0yNjQsMzMgKzI2
OCwyNCBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldCkKICAgICAvLyBXZSBjYW4ndCBjYWxsIGVjb3Jl
X21haW5fbG9vcF9pdGVyYXRlIGJlY2F1c2UgaXQgZG9lc24ndCBwcm9jZXNzIHRoZSBpZGxlcnMu
CiAgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CiAKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykK
LSAgICBFWFBFQ1RfRkFMU0UodGltZW91dFRpbWVyKTsKLSNlbHNlCiAgICAgRVhQRUNUX1RSVUUo
dGltZW91dFRpbWVyKTsKLSNlbmRpZgotCi0gICAgLy8gVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBi
ZSBjYWxsZWQgaWYgdGhlIHNldHRpbmcgb3B0aW9uIGlzIGFscmVhZHkgc2V0LgotICAgIGlzU2V0
dGluZ0VuYWJsZWQgPSBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFi
bGVkX2dldCgpOwotICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfc2V0KGlzU2V0dGluZ0VuYWJsZWQpOwogCi0gICAgdGltZW91dFRpbWVyID0gZWNvcmVf
dGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOwotICAgIGVj
b3JlX21haW5fbG9vcF9iZWdpbigpOwotCi0gICAgLy8gV2hlbiB0aGUgU1BFTExDSEVDSyBtYWNy
byBpcyBkaXNhYmxlZCB0aGUgY2FsbGJhY2sgd29uJ3QgYmUgY2FsbGVkIHRvby4KLSAgICBFWFBF
Q1RfVFJVRSh0aW1lb3V0VGltZXIpOwotCi0gICAgLy8gVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBi
ZSBjYWxsZWQgaWYgdGhlIHVzZXIgaGFzIGludmFsaWRhdGVkIGl0LgotICAgIGV3a19zZXR0aW5n
c19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQoMCk7Ci0gICAgaXNTZXR0
aW5nRW5hYmxlZCA9IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJs
ZWRfZ2V0KCk7Ci0gICAgaXNTZXR0aW5nRW5hYmxlZCA9ICFpc1NldHRpbmdFbmFibGVkOwotICAg
IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KGlzU2V0
dGluZ0VuYWJsZWQpOwotCi0gICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1
bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOwotICAgIGVjb3JlX21haW5fbG9vcF9i
ZWdpbigpOwotCi0gICAgLy8gSWYgdGhlIFNQRUxMQ0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQsIHRo
ZSBjYWxsYmFjayBpcyBub3Qgc2V0LgotICAgIEVYUEVDVF9UUlVFKHRpbWVvdXRUaW1lcik7Cisg
ICAgLyogVGhlIGNhbGxiYWNrIHNob3VsZCBiZSBjYWxsZWQgaWYgdGhlIGNvbnRleHQgbWVudSAi
Q2hlY2sgU3BlbGxpbmcgV2hpbGUgVHlwaW5nIiBvcHRpb24KKyAgICAgICB3YXMgdG9nZ2xlZCBi
eSB0aGUgdXNlci4KKyAgICBGSVhNRToKKyAgICAxKSBJbnZva2UgdGhlIGNvbnRleHQgbWVudSBv
biB0aGUgaW5wdXQgZmllbGQuCisgICAgMikgQ2hvb3NlIHRoZSBzdWIgbWVudSAiU3BlbGxpbmcg
YW5kIEdyYW1tYXIiIG9wdGlvbiAobm90IGltcGxlbWVudGVkIGZvciBXSzIpLgorICAgIDMpIFRv
Z2dsZSAiQ2hlY2sgU3BlbGxpbmcgV2hpbGUgVHlwaW5nIiBvcHRpb24uCisgICAgNCkgQ2hlY2sg
d2hldGhlciB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkLiAqLworCisgICAgLyogVGhlIGNhbGxiYWNr
IHNob3VsZG4ndCBiZSBjYWxsZWQgaWYgdGhlIHVzZXIgaGFzIGludmFsaWRhdGVkIGl0LgorICAg
IEZJWE1FOgorICAgIDEpIENhbGwgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2NoYW5nZV9jYl9zZXQoMCkgdG8gbm90aWZ5IHRoZSBXZWJLaXQgdGhhdAorICAgICAg
IHRoZSBjbGllbnQgaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIHNldHRpbmcgY2hhbmdlLgorICAg
IDIpIEludm9rZSB0aGUgY29udGV4dCBtZW51IG9uIHRoZSBpbnB1dCBmaWVsZC4KKyAgICAzKSBD
aG9vc2UgdGhlIHN1YiBtZW51ICJTcGVsbGluZyBhbmQgR3JhbW1hciIgb3B0aW9uIChub3QgaW1w
bGVtZW50ZWQgZm9yIFdLMikuCisgICAgNCkgVG9nZ2xlICJDaGVjayBTcGVsbGluZyBXaGlsZSBU
eXBpbmciIG9wdGlvbi4KKyAgICA1KSBDaGVjayB3aGV0aGVyIHRoZSBjYWxsYmFjayB3YXMgY2Fs
bGVkLiAqLwogfQogCiAvKioKQEAgLTI5OCw5ICsyOTMsOSBAQCBURVNUX0YoRVdLMlVuaXRUZXN0
QmFzZSwgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3Nl
dCkKICAqIGlmIHRoZXkgYXJlIGluIHVzZS4KICAqIEFsbCB0aGUgZGljdGlvbmFyaWVzIGZyb20g
dGhlIGxpc3QgY2FuIGJlIHNldCB0byBwZXJmb3JtIHNwZWxsY2hlY2tpbmcuCiAgKi8KLVRFU1Rf
RihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxl
X2xhbmd1YWdlc19nZXQpCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tl
cl9zcGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldCkKIHsKLSAgICBFaW5hX0xp
c3QqIGF2YWlsYWJsZUxhbmd1YWdlcyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFp
bGFibGVfbGFuZ3VhZ2VzX2dldCgpOworICAgIEVpbmFfTGlzdCogYXZhaWxhYmxlTGFuZ3VhZ2Vz
ID0gZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dl
dCgpOwogICAgIC8vIE5vIGRpY3Rpb25hcnkgaXMgYXZhaWxhYmxlL2luc3RhbGxlZCBvciB0aGUg
U1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZC4KICAgICBpZiAoIWF2YWlsYWJsZUxhbmd1YWdl
cykKICAgICAgICAgcmV0dXJuOwpAQCAtMzE5LDE0ICszMTQsMTQgQEAgVEVTVF9GKEVXSzJVbml0
VGVzdEJhc2UsIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2Vz
X2dldCkKICAgICB9CiAKICAgICAvLyBTZXQgYWxsIGF2YWlsYWJsZSBsYW5ndWFnZXMuCi0gICAg
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQobGFuZ3VhZ2VzLnRvU3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZXNfc2V0KGxhbmd1YWdlcy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAg
ICAgLy8gTGFuZ3VhZ2VzIGFyZSBiZWluZyBsb2FkZWQgb24gdGhlIGlkbGVyLCB3YWl0IGZvciB0
aGVtLgogICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dElu
U2Vjb25kcywgb25UaW1lb3V0LCAwKTsKICAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKIAog
ICAgIC8vIEdldCB0aGUgbGFuZ3VhZ2VzIGluIHVzZS4KLSAgICBFaW5hX0xpc3QqIGxvYWRlZExh
bmd1YWdlcyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7Cisg
ICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2No
ZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKICAgICBBU1NFUlRfRVEoZWluYV9saXN0X2NvdW50KGxv
YWRlZExhbmd1YWdlcyksIGVpbmFfbGlzdF9jb3VudChhdmFpbGFibGVMYW5ndWFnZXMpKTsKIAog
ICAgIGkgPSAwOwpAQCAtMzUwLDE2ICszNDUsMTYgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2Us
IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldCkKICAq
ICAtIHNldHRpbmcgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UsCiAgKiAgLSBpZiB0d28gYXJiaXRyYXJp
bHkgc2VsZWN0ZWQgZGljdGlvbmFyaWVzIGFyZSBzZXQgY29ycmVjdGx5LgogICovCi1URVNUX0Yo
RVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcykK
K1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5n
X2xhbmd1YWdlcykKIHsKICAgICAvLyBTZXQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UuCi0gICAgZXdr
X3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7CisgICAgZXdrX3RleHRf
Y2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KDApOwogCiAgICAgLy8gTGFuZ3Vh
Z2VzIGFyZSBiZWluZyBsb2FkZWQgb24gdGhlIGlkbGVyLCB3YWl0IGZvciB0aGVtLgogICAgIHRp
bWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25U
aW1lb3V0LCAwKTsKICAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKIAotICAgIEVpbmFfTGlz
dCogbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
c19nZXQoKTsKKyAgICBFaW5hX0xpc3QqIGxvYWRlZExhbmd1YWdlcyA9IGV3a190ZXh0X2NoZWNr
ZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOwogICAgIC8vIE5vIGRpY3Rpb25hcnkg
aXMgYXZhaWxhYmxlL2luc3RhbGxlZCBvciB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxl
ZC4KICAgICBpZiAoIWxvYWRlZExhbmd1YWdlcykKICAgICAgICAgcmV0dXJuOwpAQCAtMzcyLDcg
KzM2Nyw3IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzKQogICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oYWN0dWFsKSk7CiAKICAgICAvLyBHZXQgdGhlIGZpcnN0IGFuZCBsYXN0
IGxhbmd1YWdlIGZyb20gaW5zdGFsbGVkIGRpY3Rpb25hcmllcy4KLSAgICBFaW5hX0xpc3QqIGF2
YWlsYWJsZUxhbmd1YWdlcyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFpbGFibGVf
bGFuZ3VhZ2VzX2dldCgpOworICAgIEVpbmFfTGlzdCogYXZhaWxhYmxlTGFuZ3VhZ2VzID0gZXdr
X3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldCgpOwog
ICAgIHVuc2lnbmVkIG51bWJlck9mQXZhaWxhYmxlTGFuZ3VhZ2VzID0gZWluYV9saXN0X2NvdW50
KGF2YWlsYWJsZUxhbmd1YWdlcyk7CiAgICAgLy8gV2UgYXNzdW1lIHRoYXQgdXNlciBoYXMgaW5z
dGFsbGVkIGF0IGxlc3QgdHdvIGRpY3Rpb25hcmllcy4KICAgICBpZiAobnVtYmVyT2ZBdmFpbGFi
bGVMYW5ndWFnZXMgPCAyKQpAQCAtMzg5LDEyICszODQsMTIgQEAgVEVTVF9GKEVXSzJVbml0VGVz
dEJhc2UsIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpCiAgICAgbGFuZ3Vh
Z2VzLmFwcGVuZChTdHJpbmcobGFzdEV4cGVjdGVkKS5sb3dlcigpKTsKIAogICAgIC8vIFNldCBi
b3RoIGxhbmd1YWdlcyAodGhlIGZpcnN0IGFuZCB0aGUgbGFzdCkgZnJvbSB0aGUgbGlzdC4KLSAg
ICBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChsYW5ndWFnZXMudG9T
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlc19zZXQobGFuZ3VhZ2VzLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAK
ICAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29u
ZHMsIG9uVGltZW91dCwgMCk7CiAgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CiAKLSAgICBs
b2FkZWRMYW5ndWFnZXMgPSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dl
dCgpOworICAgIGxvYWRlZExhbmd1YWdlcyA9IGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzX2dldCgpOwogICAgIEFTU0VSVF9FUSgyLCBlaW5hX2xpc3RfY291bnQobG9h
ZGVkTGFuZ3VhZ2VzKSk7CiAKICAgICBFWFBFQ1RfU1RSRVEoZmlyc3RFeHBlY3RlZCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KGVpbmFfbGlzdF9udGgobG9hZGVkTGFuZ3VhZ2VzLCAwKSkpOwpA
QCAtNDE0LDcgKzQwOSw3IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKQogVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190
ZXh0X2NoZWNrZXIpCiB7CiAgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpOwotICAg
IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUp
OworICAgIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X3NldCh0cnVlKTsKIAogICAgIEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGVudmlyb25tZW50LT51
cmxGb3JSZXNvdXJjZSgic3BlbGxpbmdfdGVzdC5odG1sIikuZGF0YSgpKSk7CiAKQEAgLTQzNiw3
ICs0MzEsNyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl91bmlx
dWVfc3BlbGxfZG9jdW1lbnRfdGFnKQogewogICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3Rh
dHMoKTsKICAgICBkZWZhdWx0VmlldyA9IHdlYlZpZXcoKTsKLSAgICBld2tfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9j
aGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAKICAg
ICBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0X2NiX3NldChv
blNwZWxsRG9jdW1lbnRUYWcpOwogICAgIGV3a190ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2Rv
Y3VtZW50X3RhZ19jbG9zZV9jYl9zZXQob25TcGVsbERvY3VtZW50VGFnQ2xvc2UpOwpAQCAtNDU4
LDcgKzQ1Myw3IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3N0
cmluZ19zcGVsbGluZ19jaGVja19jYl9zZXQpCiB7CiAgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRp
b25TdGF0cygpOwogICAgIGRlZmF1bHRWaWV3ID0gd2ViVmlldygpOwotICAgIGV3a19zZXR0aW5n
c19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworICAgIGV3a190
ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsK
IAogICAgIGV3a190ZXh0X2NoZWNrZXJfc3RyaW5nX3NwZWxsaW5nX2NoZWNrX2NiX3NldChvblNw
ZWxsaW5nQ2hlY2spOwogCkBAIC00NzYsNyArNDcxLDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJh
c2UsIGV3a190ZXh0X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9jYl9zZXQpCiB7CiAgICAgcmVz
ZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpOwogICAgIGRlZmF1bHRWaWV3ID0gd2ViVmlldygp
OwotICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0
KHRydWUpOworICAgIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19l
bmFibGVkX3NldCh0cnVlKTsKIAogICAgIGV3a190ZXh0X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dl
dF9jYl9zZXQob25Xb3JkR3Vlc3Nlcyk7CiAKQEAgLTQ5OCw3ICs0OTMsNyBAQCBURVNUX0YoRVdL
MlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl93b3JkX2xlYXJuX2NiX3NldCkKIHsKICAg
ICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CiAgICAgZGVmYXVsdFZpZXcgPSB3ZWJW
aWV3KCk7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxl
ZF9zZXQodHJ1ZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWRfc2V0KHRydWUpOwogCiAgICAgZXdrX3RleHRfY2hlY2tlcl93b3JkX2xlYXJu
X2NiX3NldChvbldvcmRMZWFybik7CiAKQEAgLTUxOCw3ICs1MTMsNyBAQCBURVNUX0YoRVdLMlVu
aXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl93b3JkX2lnbm9yZV9jYl9zZXQpCiB7CiAgICAg
cmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpOwogICAgIGRlZmF1bHRWaWV3ID0gd2ViVmll
dygpOwotICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
c2V0KHRydWUpOworICAgIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX3NldCh0cnVlKTsKIAogICAgIGV3a190ZXh0X2NoZWNrZXJfd29yZF9pZ25vcmVf
Y2Jfc2V0KG9uV29yZElnbm9yZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9UZXh0Q2hlY2tlckVmbC5jcHAKaW5kZXggMjY0NzNkNi4uNzk1ZDZiMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKQEAgLTEsNyArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDEy
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKIAorI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgog
CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIK
KyNpbmNsdWRlICJUZXh0Q2hlY2tlckVuZ2luZS5oIgogI2luY2x1ZGUgIldlYlRleHRDaGVja2Vy
LmgiCiAjZW5kaWYKIApAQCAtNDEsMjkgKzQzLDI4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBz
dGF0aWMgVGV4dENoZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwogCi1jb25zdCBUZXh0Q2hl
Y2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN0
YXRlKCkKIHsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKICAgICBzdGF0aWMgYm9vbCBkaWRJbml0
aWFsaXplU3RhdGUgPSBmYWxzZTsKICAgICBpZiAoZGlkSW5pdGlhbGl6ZVN0YXRlKQotICAgICAg
ICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKKyAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViVGV4
dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCk7Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKLSAgICB0ZXh0Q2hl
Y2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5ncmFtbWFyQ2hlY2tp
bmdFbmFibGVkKCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCA9IGZhbHNlOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkID0gZmFsc2U7CiAKICAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOwotI2Vu
ZGlmCit9CisKK2NvbnN0IFRleHRDaGVja2VyU3RhdGUmIFRleHRDaGVja2VyOjpzdGF0ZSgpCit7
CisgICAgaW5pdGlhbGl6ZVN0YXRlKCk7CiAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CiB9
CiAKIGJvb2wgVGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkK
IHsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jbGllbnQoKS5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKTsKLSNlbHNl
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKIH0KIAog
dm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wg
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCkBAIC03MywzOSArNzQsNDQgQEAgdm9p
ZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXND
b250aW51b3VzU3BlbGxDaGVja2kKICAgICAgICAgcmV0dXJuOwogCiAgICAgdGV4dENoZWNrZXJT
dGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkOworCisgICAgLy8gU2V0IHRoZSBkZWZhdWx0IGxhbmd1YWdlIGlmIHVz
ZXIgZGlkbid0IHNwZWNpZnkgYW55LgorICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCAmJiAhVGV4dENoZWNrZXJFbmdpbmU6Omluc3RhbmNlKCkuaGFzRGljdGlvbmFyeSgp
KQorICAgICAgICBUZXh0Q2hlY2tlckVuZ2luZTo6aW5zdGFuY2UoKS51cGRhdGVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKCk7CisKKyAgICAvLyBOb3RpZnkgdGhlIGNsaWVudCBhYm91dCB0aGUgc2V0
dGluZyBjaGFuZ2UuCiAgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQpOwogI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVj
a2luZ0VuYWJsZWQoYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCit2b2lkIFRleHRDaGVj
a2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wpCiB7Ci0jaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCi0gICAgaWYgKHN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID09IGlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGV4dENoZWNrZXJT
dGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQ7
Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOwotI2VuZGlmCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBUZXh0Q2hlY2tlcjo6c2V0Q29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQpOwotfQotCi12b2lkIFRleHRDaGVj
a2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKLXsK
ICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4
dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7
CisKKyAgICAvLyBTZXQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaWYgdXNlciBkaWRuJ3Qgc3BlY2lm
eSBhbnkuCisgICAgaWYgKGVuYWJsZWQgJiYgIVRleHRDaGVja2VyRW5naW5lOjppbnN0YW5jZSgp
Lmhhc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgVGV4dENoZWNrZXJFbmdpbmU6Omluc3RhbmNlKCku
dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
ZW5hYmxlZCk7CiAjZW5kaWYKIH0KIAordm9pZCBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5n
RW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
IGludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5
KiBwYWdlKQogewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVuZ2luZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRW5naW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jZmU0N2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVuZ2luZS5jcHAKQEAgLTAsMCArMSw5NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRDaGVja2VyRW5naW5lLmgiCisK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitUZXh0Q2hlY2tlckVuZ2luZSYgVGV4dENoZWNrZXJFbmdpbmU6
Omluc3RhbmNlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRleHRDaGVja2VyRW5naW5l
LCB0ZXh0Q2hlY2tlckVuZ2luZSwgKCkpOworICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuZ2luZTsK
K30KKworVGV4dENoZWNrZXJFbmdpbmU6OlRleHRDaGVja2VyRW5naW5lKCkKKyAgICA6IG1fdGV4
dENoZWNrZXJFbmdpbmUoVGV4dENoZWNrZXJFbmNoYW50OjpjcmVhdGUoKSkKKyAgICAsIG1fbGFu
Z3VhZ2VzVXBkYXRlVGltZXIodGhpcywgJlRleHRDaGVja2VyRW5naW5lOjpsYW5ndWFnZXNVcGRh
dGVUaW1lckZpcmVkKQoreworfQorCit2b2lkIFRleHRDaGVja2VyRW5naW5lOjpjaGVja1NwZWxs
aW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQmIG1pc3NwZWxsaW5nTG9jYXRpb24s
IGludCYgbWlzc3BlbGxpbmdMZW5ndGgpCit7CisgICAgbV90ZXh0Q2hlY2tlckVuZ2luZS0+Y2hl
Y2tTcGVsbGluZ09mU3RyaW5nKHRleHQsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5n
TGVuZ3RoKTsKK30KKworVmVjdG9yPFN0cmluZz4gVGV4dENoZWNrZXJFbmdpbmU6Omd1ZXNzZXNG
b3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKK3sKKyAgICByZXR1cm4gbV90ZXh0Q2hlY2tlckVu
Z2luZS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJFbmdp
bmU6Omlnbm9yZVdvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQoreworICAgIG1fdGV4dENoZWNrZXJF
bmdpbmUtPmlnbm9yZVdvcmQod29yZCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJFbmdpbmU6Omxl
YXJuV29yZChjb25zdCBTdHJpbmcmIHdvcmQpCit7CisgICAgbV90ZXh0Q2hlY2tlckVuZ2luZS0+
bGVhcm5Xb3JkKHdvcmQpOworfQorCit2b2lkIFRleHRDaGVja2VyRW5naW5lOjp1cGRhdGVTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkZWZhdWx0TGFuZ3VhZ2Vz
KQoreworICAgIG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IGRlZmF1bHRMYW5ndWFnZXM7Cisg
ICAgbV9sYW5ndWFnZXNVcGRhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgVGV4
dENoZWNrZXJFbmdpbmU6Omxhbmd1YWdlc1VwZGF0ZVRpbWVyRmlyZWQoVGltZXI8VGV4dENoZWNr
ZXJFbmdpbmU+KikKK3sKKyAgICBtX3RleHRDaGVja2VyRW5naW5lLT51cGRhdGVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7Cit9CisKK1ZlY3RvcjxTdHJp
bmc+IFRleHRDaGVja2VyRW5naW5lOjpsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV90ZXh0Q2hlY2tlckVuZ2luZS0+bG9hZGVkU3BlbGxDaGVja2lu
Z0xhbmd1YWdlcygpOworfQorCitib29sIFRleHRDaGVja2VyRW5naW5lOjpoYXNEaWN0aW9uYXJ5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90ZXh0Q2hlY2tlckVuZ2luZS0+aGFzRGljdGlvbmFy
eSgpOworfQorCitWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tlckVuZ2luZTo6YXZhaWxhYmxlU3Bl
bGxDaGVja2luZ0xhbmd1YWdlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXJF
bmdpbmUtPmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFbmdpbmUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFbmdpbmUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWI1ZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVuZ2luZS5oCkBAIC0wLDAgKzEsNjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgVGV4dENoZWNrZXJFbmdpbmVfaAorI2RlZmluZSBUZXh0Q2hlY2tlckVu
Z2luZV9oCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgIlRleHRDaGVja2Vy
RW5jaGFudC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBUZXh0Q2hlY2tlckVuZ2luZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFRleHRDaGVja2Vy
RW5naW5lJiBpbnN0YW5jZSgpOworCisgICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29u
c3QgU3RyaW5nJiwgaW50JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVu
Z3RoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIGlnbm9yZVdvcmQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBsZWFybldvcmQo
Y29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGRlZmF1bHRMYW5ndWFnZXMgPSBWZWN0b3I8U3RyaW5nPigp
KTsKKyAgICBWZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkgY29u
c3Q7CisgICAgYm9vbCBoYXNEaWN0aW9uYXJ5KCkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4g
YXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpIGNvbnN0OworCitwcml2YXRlOgorICAg
IFRleHRDaGVja2VyRW5naW5lKCk7CisgICAgdm9pZCBsYW5ndWFnZXNVcGRhdGVUaW1lckZpcmVk
KFdlYkNvcmU6OlRpbWVyPFRleHRDaGVja2VyRW5naW5lPiopOworCisgICAgT3duUHRyPFdlYkNv
cmU6OlRleHRDaGVja2VyRW5jaGFudD4gbV90ZXh0Q2hlY2tlckVuZ2luZTsKKworICAgIFZlY3Rv
cjxTdHJpbmc+IG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlczsKKyAgICBXZWJDb3JlOjpUaW1lcjxU
ZXh0Q2hlY2tlckVuZ2luZT4gbV9sYW5ndWFnZXNVcGRhdGVUaW1lcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisjZW5kaWYgLy8g
VGV4dENoZWNrZXJFbmdpbmVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197731</attachid>
            <date>2013-04-12 01:48:00 -0700</date>
            <delta_ts>2013-04-16 01:47:45 -0700</delta_ts>
            <desc>use WK2 C API</desc>
            <filename>spelling-settings-refactor.patch</filename>
            <type>text/plain</type>
            <size>63679</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwNWIzMzIwLi5lY2ZlNjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMy
IEBACisyMDEzLTA0LTExICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gVGV4dCBDaGVja2VyJ3Mgc2V0dGluZ3MgcmVm
YWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MTcxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVz
ZSBXSzIncyBUZXh0Q2hlY2tlclN0YXRlIG9iamVjdCBhcyB0aGUgc3RvcmUgZm9yIHRoZSB0ZXh0
IGNoZWNrZXIgc2V0dGluZ3MuCisgICAgICAgIEl0J3Mgc2hhcmVkIGJldHdlZW4gdGhlIGNsaWVu
dCAoRXdrIEFQSSBwYXJ0KSBhbmQgV2ViUHJvY2VzcyAocmVhZCBvbmx5KS4KKyAgICAgICAgVGhh
bmtzIHRvIGl0LCB3ZSBkb24ndCBoYXZlIHRvIGtlZXAgYW55IGFkZGl0aW9uYWwgc3RydWN0dXJl
IHdpdGgKKyAgICAgICAgdGhlIHNldHRpbmdzIG9uIGV3ayBzaWRlLgorCisgICAgICAgIEluIHRo
ZSBjb25zaXN0ZW5jeSB3aXRoIFdLVGV4dENoZWNrZXIgQyBBUEksIG1vdmUgdGhlIEV3aydzIHRl
eHQgY2hlY2tlciBzZXR0aW5ncyBBUElzCisgICAgICAgIHRvIHRoZSBld2tfdGV4dF9jaGVja2Vy
LmgvY3BwLiBUaGV5J3JlIG5vdCBjb25uZWN0ZWQgdG8gRXdrX1ZpZXcvRXdrX1NldHRpbmdzIG9i
amVjdCB0bworICAgICAgICBrZWVwIHRoZW0gaW4gZXdrX3NldHRpbmcuaC9jcHAuCisKKyAgICAg
ICAgSW50cm9kdWNlIGEgbmV3IGNsYXNzIHRvIGltcGxlbWVudCBXS1RleHRDaGVja2VyQ2xpZW50
IGNhbGxiYWNrcyB0byBjYWxsIHNwZWxsaW5nCisgICAgICAgIG1ldGhvZHMgdGhyb3VnaCBXSzIg
QyBBUEkuIEl0IGVuc3VyZXMgdG8gbm90IHVzZSBhbiBpbnRlcm5hbCBXZWJUZXh0Q2hlY2tlciBp
biBUZXh0Q2hlY2tlckVmbC5jcHAuCisgICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBj
aGFuZ2UgaXMgdG8gZGV0YWNoIHRleHQgY2hlY2tlciBpbml0aWFsaXphdGlvbiBmcm9tIGV3a19j
b250ZXh0LgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBhIG5l
dyBmaWxlcyB0byB0aGUgYnVpbGQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dC5jcHA6CisgICAgICAgIChFd2tDb250ZXh0OjpFd2tDb250ZXh0KToKKyAgICAgICAg
RGV0YWNoIHRoZSB0ZXh0IGNoZWNrZXIgaW5pdGlhbGl6YXRpb24gZnJvbSBjb250ZXh0LgorICAg
ICAgICBUaGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gZGVmYXVsdCBjb250ZXh0LgorICAgICAgICBU
aGVyZSBpcyBvbmUgdGV4dCBjaGVja2VyIG9iamVjdCBwZXIgYXBwbGljYXRpb24uCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oOgorICAgICAgICBSZW1vdmUgdGhlIHRleHQgY2hl
Y2tlciBzZXR0aW5ncy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXIuY3BwOgorICAgICAgICBBZGQgdGhlIHRleHQgY2hlY2tlciBzZXR0aW5ncyB0byB0aGUg
ZXdrX3RleHRfY2hlY2tlci5oL2NwcAorCisgICAgICAgIChjb252ZXJ0TGFuZ3VhZ2VzVG9FaW5h
TGlzdCk6CisgICAgICAgIEFkZCBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBWZWN0b3IncyB2
YWx1ZXMgdG8gRWluYV9MaXN0LgorCisgICAgICAgIChjbGllbnRDYWxsYmFja3MpOgorICAgICAg
ICBBZGQgdGhlIGNsaWVudCBjYWxsYmFjayByZXNwb25zaWJsZSBmb3IgdGhlIGNvbnRpbnVvdXMg
c3BlbGwgY2hlY2tpbmcKKyAgICAgICAgc2V0dGluZyBjaGFuZ2UgdG8gdGhlIHN0cnVjdC4KKwor
ICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJs
ZWRfZ2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfYXZhaWxh
YmxlX2xhbmd1YWdlc19nZXQpOgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXNfc2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzX2dldCk6CisgICAgICAgIE1vdmUgQVBJcyBmcm9tIGV3a19zZXR0aW5n
cy5oL2NwcCB0byB0aGUgZXdrX3RleHRfY2hlY2tlci5oL2NwcC4KKworICAgICAgICAoZXdrX3Rl
eHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KToKKyAgICAg
ICAgRG8gbm90IGNhbGwgdGhlIGNsaWVudCdzIGNhbGxiYWNrIHJlc3BvbnNpYmxlIGZvciB0aGUg
c2V0dGluZworICAgICAgICBjaGFuZ2UgdW5sZXNzIFdlYktpdCBjaGFuZ2VzIHRoZSBzZXR0aW5n
ICh0cm91Z2ggdGhlIGNvbnRleHQKKyAgICAgICAgJ0NoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGlu
Zycgb3B0aW9uKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNr
ZXIuaDoKKyAgICAgICAgQWRqdXN0IEFQSXMgbmFtZSB0byB0aGUgZXdrX3RleHRfY2hlY2tlciBz
eW50YXguCisgICAgICAgIFVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBhY2NvcmRpbmcgdG8gdGhl
IGNoYW5nZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2Vy
X3ByaXZhdGUuaDoKKyAgICAgICAgKENsaWVudENhbGxiYWNrcyk6CisgICAgICAgIE1vdmUgQ2xp
ZW50Q2FsbGJhY2tzIHN0cnVjdHVyZSB0byBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaC4KKyAg
ICAgICAgVGhlIGNsaWVudCBjYWxsYmFja3MgKEV3ayBBUEkpIGhhdmUgdG8gYmUgYWNjZXNzaWJs
ZSBpbiBXS1RleHRDaGVja2VyQ2xpZW50IGNhbGxiYWNrcworICAgICAgICB0byBjaG9vc2Ugd2hh
dCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVzZWQgLSB0aGUgY2xpZW50J3MgKGlmIGRlZmluaWVk
KSBvciBFbmNoYW50IGltcGwuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90
ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcDoKKyAgICAgICAgVXBkYXRlIHRoZSB1bml0IHRlc3Rz
IGFjY29yZGluZyB0byB0aGUgQVBJcyBjaGFuZ2UuCisgICAgICAgIFVwZGF0ZSB0aGUgdGVzdCBy
ZXNwb25zaWJsZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhYm91dCB0aGUgc2V0dGluZyBjaGFuZ2UK
KyAgICAgICAgYWNjb3JkaW5nIHRvIGNoYW5nZXMgaW4gJ2V3a190ZXh0X2NoZWNrZXJfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCcuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
ZWZsL1RleHRDaGVja2VyQ2xpZW50RWZsLmNwcDogQWRkZWQuCisgICAgICAgIEltcGxlbWVudCBX
S1RleHRDaGVja2VyQ2xpZW50IGNhbGxiYWNrcy4KKworICAgICAgICAoVGV4dENoZWNrZXJDbGll
bnRFZmw6OlRleHRDaGVja2VyQ2xpZW50RWZsKToKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50
RWZsOjppbnN0YW5jZSk6CisgICAgICAgIEFsbG93IHRvIGdldCBhbmQgY3JlYXRlIFRleHRDaGVj
a2VyQ2xpZW50RWZsIG9iamVjdC4KKworICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmw6OmVu
c3VyZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZSk6CisgICAgICAgIExvYWQgdGhlIGRlZmF1bHQgbGFu
Z3VhZ2VzIGlmIHVzZXIgZGlkbid0IHNwZWNpZnkgYW55LgorCisgICAgICAgIChUZXh0Q2hlY2tl
ckNsaWVudEVmbDo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChUZXh0
Q2hlY2tlckNsaWVudEVmbDo6bGFuZ3VhZ2VzVXBkYXRlVGltZXJGaXJlZCk6CisgICAgICAgIChU
ZXh0Q2hlY2tlckNsaWVudEVmbDo6YXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6Cisg
ICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdl
cyk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6YXZhaWxhYmxlU3BlbGxDaGVja2lu
Z0xhbmd1YWdlcyk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6bG9hZGVkU3BlbGxD
aGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFByb3ZpZGUgc3VwcG9ydCBmb3IgbGFuZ3VhZ2Vz
LgorCisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6c3BlbGxDaGVja2luZ1NldHRpbmdD
aGFuZ2VUaW1lckZpcmVkKToKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZsOjpjYWxsQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFja0FzeW5jKToKKyAgICAgICAgTm90aWZ5
IHRoZSBjbGllbnQgYWJvdXQgdGhlIHNldHRpbmcgY2hhbmdlLgorCisgICAgICAgIChUZXh0Q2hl
Y2tlckNsaWVudEVmbDo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAg
ICAoVGV4dENoZWNrZXJDbGllbnRFZmw6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6dW5pcXVlU3BlbGxEb2N1bWVudFRh
Zyk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6Y2xvc2VTcGVsbERvY3VtZW50V2l0
aFRhZyk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6Y2hlY2tTcGVsbGluZ09mU3Ry
aW5nKToKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZsOjpndWVzc2VzRm9yV29yZCk6Cisg
ICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFRleHRD
aGVja2VyQ2xpZW50RWZsOjppZ25vcmVXb3JkKToKKyAgICAgICAgV0tUZXh0Q2hlY2tlckNsaWVu
dCBjYWxsYmFja3MgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1Rl
eHRDaGVja2VyQ2xpZW50RWZsLmg6IEFkZGVkLgorICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRF
ZmwpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckNsaWVudEVmbDo6d2tDbGllbnQpOgor
ICAgICAgICBSZXR1cm4gdGhlIFdLVGV4dENoZWNrZXJDbGllbnQgb2JqZWN0IHRvIGJlIHVzZWQg
aW4gZXdrX3RleHRfY2hlY2tlci5jcHAgYW5kCisgICAgICAgIFRleHRDaGVja2VyQ2xpZW50RWZs
LmNwcC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c3RhdGUpOgorICAgICAgICBJbml0aWFsaXplIHRo
ZSBUZXh0Q2hlY2tlcidzIG1lbWJlcnMgdG8gZmFsc2UuCisKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIFNl
dCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4KKyAgICAg
ICAgTm90aWZ5IHRoZSBjbGllbnQgYWJvdXQgdGhlIHNldHRpbmcgY2hhbmdlLgorICAgICAgICBU
aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBjb250ZXh0IG1lbnUgJ0NoZWNrIFNwZWxsaW5nIFdo
aWxlIFR5cGluZycKKyAgICAgICAgb3B0aW9uIGhhcyBiZWVuIHRvZ2dsZWQuCisKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRl
Q2hhbmdlZCk6CisgICAgICAgIFNldCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2VyIGRpZG4n
dCBzcGVjaWZ5IGFueS4KKyAgICAgICAgQ2FsbGVkIGJ5IFdLVGV4dENoZWNrZXIncyBBUEkuCisK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICBDYWxsIFdLVGV4dENoZWNrZXJDbGllbnQg
Y2FsbGJhY2tzIGRpcmVjdGx5LgorCiAyMDEzLTA0LTExICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4g
IDxhbGxhbi5qZW5zZW5AZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0gRXZlbnRIYW5kbGVyIHNo
b3VsZCBoYW5kbGUgU3BhY2UgYW5kIEJhY2tTcGFjZSAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UK
aW5kZXggNGYzYWIxOS4uMDFjNWY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEw
Nyw2ICsxMDcsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3Mv
ZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9SZXF1ZXN0TWFuYWdlckNs
aWVudEVmbC5jcHAKKyAgICBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyQ2xpZW50RWZsLmNwcAog
ICAgIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9W
aWJyYXRpb25DbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9WaWV3Q2xpZW50RWZsLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3Bw
CmluZGV4IDU3MGQ0YmYuLjVmZGRjZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTQ0LDExICs0NCw2IEBACiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIEVO
QUJMRShTUEVMTENIRUNLKQotI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgotI2luY2x1ZGUgImV3
a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIgotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIApAQCAtODYsMTQgKzgxLDYgQEAgRXdrQ29u
dGV4dDo6RXdrQ29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCkKICAgICAgICAgaW5pdGlhbGl6
ZU1lbW9yeVNhbXBsZXIgPSB0cnVlOwogICAgIH0KICNlbmRpZgotCi0jaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCi0gICAgRXdrX1RleHRfQ2hlY2tlcjo6aW5pdGlhbGl6ZSgpOwotICAgIGlmIChld2tf
c2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKSB7Ci0gICAg
ICAgIC8vIExvYWQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UuCi0gICAgICAgIGV3a19zZXR0aW5nc19z
cGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KDApOwotICAgIH0KLSNlbmRpZgogfQogCiBFd2tD
b250ZXh0Ojp+RXdrQ29udGV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3NldHRpbmdzLmNwcAppbmRleCAzZDQzNGRmMS4uMjFiNGJiYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCkBAIC0z
MywxNCArMzMsNiBAQAogI2luY2x1ZGUgPFdlYktpdDIvV2ViUGFnZVByb3h5Lmg+CiAjaW5jbHVk
ZSA8V2ViS2l0Mi9XZWJQcmVmZXJlbmNlcy5oPgogCi0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0j
aW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgotI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfcHJp
dmF0ZS5oIgotI2luY2x1ZGUgPEVjb3JlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwogCiBjb25zdCBXZWJLaXQ6OldlYlByZWZlcmVuY2VzKiBFd2tTZXR0aW5nczo6cHJlZmVy
ZW5jZXMoKSBjb25zdApAQCAtNTMsMzUgKzQ1LDYgQEAgV2ViS2l0OjpXZWJQcmVmZXJlbmNlcyog
RXdrU2V0dGluZ3M6OnByZWZlcmVuY2VzKCkKICAgICByZXR1cm4gbV92aWV3LT5wYWdlKCktPnBh
Z2VHcm91cCgpLT5wcmVmZXJlbmNlcygpOwogfQogCi0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi1z
dGF0aWMgc3RydWN0IHsKLSAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
IDogMTsKLSAgICBWZWN0b3I8U3RyaW5nPiBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzOwotICAgIEV3
a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZV9DYiBvbkNvbnRpbnVv
dXNTcGVsbENoZWNraW5nOwotfSBld2tUZXh0Q2hlY2tlclNldHRpbmdzID0geyBmYWxzZSwgVmVj
dG9yPFN0cmluZz4oKSwgMCB9OwotCi1zdGF0aWMgRWluYV9Cb29sIG9uQ29udGludW91c1NwZWxs
Q2hlY2tpbmdJZGxlcih2b2lkKikKLXsKLSAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5v
bkNvbnRpbnVvdXNTcGVsbENoZWNraW5nKQotICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdz
Lm9uQ29udGludW91c1NwZWxsQ2hlY2tpbmcoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5pc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Ci0KLSAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tf
Q0FOQ0VMOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXRV
cGRhdGUodm9pZCopCi17Ci0gICAgLy8gRklYTUU6IENvbnNpZGVyIHRvIGRlbGVnYXRlIGNhbGxp
bmcgb2YgdGhpcyBtZXRob2QgaW4gV2ViUHJvY2VzcyB0byBkbyBub3QgZGVsYXkvYmxvY2sgVUlQ
cm9jZXNzLgotICAgIEV3a19UZXh0X0NoZWNrZXI6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzKTsKLSAgICBy
ZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOwotfQotCi1zdGF0aWMgdm9pZCBzcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzU2V0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuZXdMYW5ndWFnZXMpCi17Ci0g
ICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzID0gbmV3TGFu
Z3VhZ2VzOwotICAgIGVjb3JlX2lkbGVyX2FkZChzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0VXBk
YXRlLCAwKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKLQogRWluYV9Cb29sIGV3
a19zZXR0aW5nc19mdWxsc2NyZWVuX2VuYWJsZWRfc2V0KEV3a19TZXR0aW5ncyogc2V0dGluZ3Ms
IEVpbmFfQm9vbCBlbmFibGUpCiB7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtMjAy
LDc4ICsxNjUsNiBAQCBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2Ruc19wcmVmZXRjaGluZ19lbmFi
bGVkX2dldChjb25zdCBFd2tfU2V0dGluZ3MqIHNldHRpbmdzKQogICAgIHJldHVybiBzZXR0aW5n
cy0+cHJlZmVyZW5jZXMoKS0+ZG5zUHJlZmV0Y2hpbmdFbmFibGVkKCk7CiB9CiAKLXZvaWQgZXdr
X3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldChFd2tfU2V0
dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2IgY2FsbGJhY2spCi17Ci0j
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5vbkNvbnRp
bnVvdXNTcGVsbENoZWNraW5nID0gY2FsbGJhY2s7Ci0jZW5kaWYKLX0KLQotRWluYV9Cb29sIGV3
a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkKLXsKLSNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICByZXR1cm4gZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5p
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNl
OwotI2VuZGlmCi19Ci0KLXZvaWQgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZF9zZXQoRWluYV9Cb29sIGVuYWJsZSkKLXsKLSNpZiBFTkFCTEUoU1BFTExDSEVD
SykKLSAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5n
cy5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCAhPSBlbmFibGUpIHsKLSAgICAgICAg
ZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9
IGVuYWJsZTsKLQotICAgICAgICBXS1RleHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZSk7Ci0KLSAgICAgICAgLy8gU2V0cyB0aGUgZGVmYXVs
dCBsYW5ndWFnZSBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4KLSAgICAgICAgaWYgKGVuYWJs
ZSAmJiAhRXdrX1RleHRfQ2hlY2tlcjo6aGFzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3Bl
bGxDaGVja2luZ0xhbmd1YWdlc1NldChWZWN0b3I8U3RyaW5nPigpKTsKLQotICAgICAgICBpZiAo
ZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5vbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nKQotICAgICAg
ICAgICAgZWNvcmVfaWRsZXJfYWRkKG9uQ29udGludW91c1NwZWxsQ2hlY2tpbmdJZGxlciwgMCk7
Ci0gICAgfQotI2VuZGlmCi19Ci0KLUVpbmFfTGlzdCogZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNr
aW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KCkKLXsKLSAgICBFaW5hX0xpc3QqIGxpc3RPZmxh
bmd1YWdlcyA9IDA7Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGxhbmd1YWdlcyA9IEV3a19UZXh0X0NoZWNrZXI6OmF2YWlsYWJsZVNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMoKTsKLSAgICBzaXplX3QgbnVtYmVyT2ZMYW51YWdlcyA9IGxhbmd1YWdlcy5z
aXplKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mTGFudWFnZXM7ICsr
aSkKLSAgICAgICAgbGlzdE9mbGFuZ3VhZ2VzID0gZWluYV9saXN0X2FwcGVuZChsaXN0T2ZsYW5n
dWFnZXMsIGVpbmFfc3RyaW5nc2hhcmVfYWRkKGxhbmd1YWdlc1tpXS51dGY4KCkuZGF0YSgpKSk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gbGlzdE9mbGFuZ3VhZ2VzOwotfQotCi12b2lkIGV3a19zZXR0
aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0IGNoYXIqIGxhbmd1YWdlcykK
LXsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBWZWN0b3I8U3RyaW5nPiBuZXdMYW5ndWFn
ZXM7Ci0gICAgU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZXMpLnNwbGl0KCcsJywgbmV3TGFuZ3Vh
Z2VzKTsKLQotICAgIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQobmV3TGFuZ3VhZ2VzKTsKLSNl
bmRpZgotfQotCi1FaW5hX0xpc3QqIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXNfZ2V0KCkKLXsKLSAgICBFaW5hX0xpc3QqIGxpc3RPZmxhbmd1YWdlcyA9IDA7Ci0jaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCi0gICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzID0gRXdrX1RleHRf
Q2hlY2tlcjo6bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwotICAgIHNpemVfdCBudW1i
ZXJPZkxhbnVhZ2VzID0gbGFuZ3VhZ2VzLnNpemUoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZMYW51YWdlczsgKytpKQotICAgICAgICBsaXN0T2ZsYW5ndWFnZXMgPSBl
aW5hX2xpc3RfYXBwZW5kKGxpc3RPZmxhbmd1YWdlcywgZWluYV9zdHJpbmdzaGFyZV9hZGQobGFu
Z3VhZ2VzW2ldLnV0ZjgoKS5kYXRhKCkpKTsKLQotI2VuZGlmCi0gICAgcmV0dXJuIGxpc3RPZmxh
bmd1YWdlczsKLX0KLQogRWluYV9Cb29sIGV3a19zZXR0aW5nc19lbmNvZGluZ19kZXRlY3Rvcl9l
bmFibGVkX3NldChFd2tfU2V0dGluZ3MqIHNldHRpbmdzLCBFaW5hX0Jvb2wgZW5hYmxlKQogewog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZXR0aW5ncywgZmFsc2UpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuaAppbmRleCA3
ZWE3MjVjLi44MzFjNTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfc2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfc2V0dGluZ3MuaApAQCAtNDMsMTQgKzQzLDYgQEAgZXh0ZXJuICJDIiB7CiAvKiogQ3Jl
YXRlcyBhIHR5cGUgbmFtZSBmb3IgRXdrX1NldHRpbmdzICovCiB0eXBlZGVmIHN0cnVjdCBFd2tT
ZXR0aW5ncyBFd2tfU2V0dGluZ3M7CiAKLS8qKgotICogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3Ig
dGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgotICog
dGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJL
aXQuCi0gKgotICogQHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUgaWYgY29udGludW91cyBzcGVs
bCBjaGVja2luZyBpcyBlbmFibGVkIG9yIEBjIEVJTkFfRkFMU0UgaWYgaXQncyBkaXNhYmxlZAot
ICovCi10eXBlZGVmIHZvaWQgKCpFd2tfU2V0dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2lu
Z19DaGFuZ2VfQ2IpKEVpbmFfQm9vbCBlbmFibGUpOwotCiAKIC8qKgogICogRW5hYmxlcy9kaXNh
YmxlcyB0aGUgSmF2YXNjcmlwdCBGdWxsc2NyZWVuIEFQSS4gVGhlIEphdmFzY3JpcHQgQVBJIGFs
bG93cwpAQCAtMjI5LDc2ICsyMjEsNiBAQCBFQVBJIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfZG5z
X3ByZWZldGNoaW5nX2VuYWJsZWRfc2V0KEV3a19TZXR0aW5ncyAqc2V0dGluZ3MsCiBFQVBJIEVp
bmFfQm9vbCBld2tfc2V0dGluZ3NfZG5zX3ByZWZldGNoaW5nX2VuYWJsZWRfZ2V0KGNvbnN0IEV3
a19TZXR0aW5ncyAqc2V0dGluZ3MpOwogCiAvKioKLSAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlv
biB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4KLSAqIHRoZSBjb250aW51b3VzIHNwZWxs
IGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0LgotICoKLSAqIFNwZWNpZnlp
bmcgb2YgdGhpcyBjYWxsYmFjayBpcyBuZWVkZWQgaWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRv
IHJlY2VpdmUgbm90aWZpY2F0aW9ucwotICogb25jZSBXZWJLaXQgY2hhbmdlcyB0aGlzIHNldHRp
bmcuCi0gKiBJZiB0aGUgYXBwbGljYXRpb24gaXMgbm90IGludGVyZXN0ZWQsIHRoaXMgY2FsbGJh
Y2sgaXMgbm90IHNldC4KLSAqIENoYW5naW5nIG9mIHRoaXMgc2V0dGluZyBhdCB0aGUgV2ViS2l0
IGxldmVsIGNhbiBiZSBtYWRlIGFzIGEgcmVzdWx0IG9mIG1vZGlmeWluZwotICogb3B0aW9ucyBp
biBhIENvbnRleHQgTWVudSBieSBhIHVzZXIuCi0gKgotICogQHBhcmFtIGNiIGEgbmV3IGNhbGxi
YWNrIGZ1bmN0aW9uIHRvIHNldCBvciBAYyBOVUxMIHRvIGludmFsaWRhdGUgdGhlIHByZXZpb3Vz
IG9uZQotICovCi1FQVBJIHZvaWQgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfY2hhbmdlX2NiX3NldChFd2tfU2V0dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19D
aGFuZ2VfQ2IgY2IpOwotCi0vKioKLSAqIFF1ZXJpZXMgaWYgY29udGludW91cyBzcGVsbCBjaGVj
a2luZyBpcyBlbmFibGVkLgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGNvbnRpbnVv
dXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlz
YWJsZWQKLSAqLwotRUFQSSBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZF9nZXQodm9pZCk7Ci0KLS8qKgotICogRW5hYmxlcy9kaXNhYmxlcyBj
b250aW51b3VzIHNwZWxsIGNoZWNraW5nLgotICoKLSAqIEFkZGl0aW9uYWxseSwgdGhpcyBmdW5j
dGlvbiBjYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIChpZiBkZWZpbmVkKSB0byBub3RpZnkKLSAq
IHRoZSBjbGllbnQgYWJvdXQgdGhlIGNoYW5nZSBvZiB0aGUgc2V0dGluZy4KLSAqIFRoaXMgZmVh
dHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICoKLSAqIEBzZWUgZXdrX3NldHRpbmdzX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldAotICoKLSAqIEBwYXJhbSBlbmFi
bGUgQGMgRUlOQV9UUlVFIHRvIGVuYWJsZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIG9yIEBj
IEVJTkFfRkFMU0UgdG8gZGlzYWJsZQotICovCi1FQVBJIHZvaWQgZXdrX3NldHRpbmdzX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoRWluYV9Cb29sIGVuYWJsZSk7Ci0KLS8q
KgotICogR2V0cyB0aGUgdGhlIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSB0aGUgc3BlbGwgY2hlY2tp
bmcgbGFuZ3VhZ2VzIHRvIHVzZS4KLSAqCi0gKiBAc2VlIGV3a19zZXR0aW5nc19zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXNfc2V0Ci0gKgotICogQHJldHVybiB0aGUgbGlzdCB3aXRoIGF2YWlsYWJs
ZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMsIG9yIEBjIE5VTEwgb24gZmFpbHVyZQotICogICAg
ICAgICB0aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1
c2UgZWluYV9zdHJpbmdzaGFyZV9kZWwoKQotICovCi1FQVBJIEVpbmFfTGlzdCAqZXdrX3NldHRp
bmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KHZvaWQpOwotCi0vKioK
LSAqIFNldHMgQGEgbGFuZ3VhZ2VzIGFzIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB0byB1c2UgYnkg
ZGVmYXVsdCBXZWJLaXQKLSAqIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tlciBmZWF0dXJl
IHdpdGggRW5jaGFudCBsaWJyYXJ5IHN1cHBvcnQuCi0gKgotICogSWYgQGxhbmd1YWdlcyBpcyBA
YyBOVUxMLCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpcyB1c2VkLgotICogSWYgdGhlIGRlZmF1bHQg
bGFuZ3VhZ2UgY2FuIG5vdCBiZSBkZXRlcm1pbmVkIHRoZW4gYW55IGF2YWlsYWJsZSBkaWN0aW9u
YXJ5IHdpbGwgYmUgdXNlZC4KLSAqCi0gKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGludmFsaWRhdGVz
IHRoZSBwcmV2aW91c2x5IHNldCBsYW5ndWFnZXMuCi0gKiAgICAgICBUaGUgZGljdGlvbmFyaWVz
IGFyZSByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkuCi0gKgotICogQHBhcmFtIGxhbmd1YWdlcyBh
IGxpc3Qgb2YgY29tbWEgKCcsJykgc2VwYXJhdGVkIGxhbmd1YWdlIGNvZGVzCi0gKiAgICAgICAg
b2YgdGhlIGZvcm0gJ2VuX1VTJywgaWUsIGxhbmd1YWdlX1ZBUklBTlQsIG1heSBiZSBAYyBOVUxM
LgotICovCi1FQVBJIHZvaWQgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19z
ZXQoY29uc3QgY2hhciAqbGFuZ3VhZ2VzKTsKLQotLyoqCi0gKiBHZXRzIHRoZSB0aGUgbGlzdCBv
ZiB0aGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIGluIHVzZS4KLSAqCi0gKiBAc2VlIGV3a19z
ZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldAotICogQHNlZSBl
d2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldAotICoKLSAqIEByZXR1cm4g
dGhlIGxpc3Qgd2l0aCB0aGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIGluIHVzZSwKLSAqICAg
ICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciwg
dXNlIGVpbmFfc3RyaW5nc2hhcmVfZGVsKCkKLSAqLwotRUFQSSBFaW5hX0xpc3QgKmV3a19zZXR0
aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KHZvaWQpOwotCi0vKioKICAqIEVuYWJs
ZXMvZGlzYWJsZXMgdGhlIGVuY29kaW5nIGRldGVjdG9yLgogICoKICAqIEJ5IGRlZmF1bHQsIHRo
ZSBlbmNvZGluZyBkZXRlY3RvciBpcyBkaXNhYmxlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKaW5kZXggMzg2Y2E3OC4u
MjVkMDBkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3RleHRfY2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RleHRfY2hlY2tlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFNh
bXN1bmcgRWxlY3Ryb25pY3MKICAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlv
bgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjgsMjAyICsyOCwxMDEgQEAKICNpbmNsdWRlICJld2tf
dGV4dF9jaGVja2VyLmgiCiAKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLQotI2luY2x1ZGUgIkV3
a1ZpZXcuaCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tlckVuY2hhbnQuaCIKLSNpbmNsdWRlICJXS0FQ
SUNhc3QuaCIKLSNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJXS011
dGFibGVBcnJheS5oIgotI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCi0jaW5jbHVkZSAiV0tTdHJp
bmcuaCIKLSNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5
LmgiCi0jaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGll
bnRFZmwuaCIKICNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKLSNpbmNsdWRl
IDxFaW5hLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2Vsc2UKKyNpbmNsdWRlIDx3dGYv
VW51c2VkUGFyYW0uaD4KKyNlbmRpZiAvLyBTUEVMTENIRUNLCisKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwogCi0vKioKLSAqIEBicmllZiBTdHJ1Y3R1cmUgdG8gc3RvcmUgY2xpZW50IGNhbGxiYWNrIGZ1
bmN0aW9ucy4KLSAqCi0gKiBAaW50ZXJuYWwKLSAqLwotc3RydWN0IENsaWVudENhbGxiYWNrcyB7
Ci0gICAgRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9DYiB1
bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldDsKLSAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1
ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2VfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19j
bG9zZTsKLSAgICBFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19DYiBzdHJp
bmdfc3BlbGxpbmdfY2hlY2s7Ci0gICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNfR2V0
X0NiIHdvcmRfZ3Vlc3Nlc19nZXQ7Ci0gICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0Ni
IHdvcmRfbGVhcm47Ci0gICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYiB3b3JkX2ln
bm9yZTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgVGV4dENoZWNrZXJFbmNoYW50KiB0ZXh0Q2hlY2tl
ckVuY2hhbnQoKQotewotICAgIHN0YXRpYyBPd25QdHI8VGV4dENoZWNrZXJFbmNoYW50PiB0ZXh0
Q2hlY2tlckVuY2hhbnQgPSBUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0ZSgpOwotICAgIHJldHVy
biB0ZXh0Q2hlY2tlckVuY2hhbnQuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ2xpZW50Q2Fs
bGJhY2tzJiBjbGllbnRDYWxsYmFja3MoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ2xp
ZW50Q2FsbGJhY2tzLCBjbGllbnRDYWxsYmFja3MsICgpKTsKLSAgICByZXR1cm4gY2xpZW50Q2Fs
bGJhY2tzOwotfQotCi1zdGF0aWMgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZChjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCopCitzdGF0aWMg
RWluYV9MaXN0KiBjb252ZXJ0TGFuZ3VhZ2VzVG9FaW5hTGlzdChjb25zdCBWZWN0b3I8U3RyaW5n
PiYgbGFuZ3VhZ2VzKQogewotICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWRfc2V0KGVuYWJsZWQpOwotfQorICAgIEVpbmFfTGlzdCogbGlzdE9mbGFuZ3Vh
Z2VzID0gMDsKKyAgICBzaXplX3QgbnVtYmVyT2ZMYW5ndWFnZXMgPSBsYW5ndWFnZXMuc2l6ZSgp
OwogCi1zdGF0aWMgdWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFn
ZSwgY29uc3Qgdm9pZCopCi17Ci0gICAgaWYgKGNsaWVudENhbGxiYWNrcygpLnVuaXF1ZV9zcGVs
bF9kb2N1bWVudF90YWdfZ2V0KQotICAgICAgICByZXR1cm4gY2xpZW50Q2FsbGJhY2tzKCkudW5p
cXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQoRXdrVmlldzo6dG9FdmFzT2JqZWN0KHBhZ2UpKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mTGFuZ3VhZ2VzOyArK2kpCisgICAg
ICAgIGxpc3RPZmxhbmd1YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQobGlzdE9mbGFuZ3VhZ2VzLCBl
aW5hX3N0cmluZ3NoYXJlX2FkZChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOwogCi0gICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIGxpc3RPZmxhbmd1YWdlczsKIH0KIAotc3RhdGljIHZvaWQg
Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqKQorQ2xp
ZW50Q2FsbGJhY2tzJiBjbGllbnRDYWxsYmFja3MoKQogewotICAgIGlmIChjbGllbnRDYWxsYmFj
a3MoKS51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQotICAgICAgICBjbGllbnRDYWxs
YmFja3MoKS51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKHRhZyk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChDbGllbnRDYWxsYmFja3MsIGNsaWVudENhbGxiYWNrcywgKCkpOworICAg
IHJldHVybiBjbGllbnRDYWxsYmFja3M7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrU3BlbGxpbmdP
ZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxs
aW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKikKLXsK
LSAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkuc3RyaW5nX3NwZWxsaW5nX2NoZWNrKQotICAgICAg
ICBjbGllbnRDYWxsYmFja3MoKS5zdHJpbmdfc3BlbGxpbmdfY2hlY2sodGFnLCBXS0VpbmFTaGFy
ZWRTdHJpbmcodGV4dCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsK
LSAgICBlbHNlCi0gICAgICAgIHRleHRDaGVja2VyRW5jaGFudCgpLT5jaGVja1NwZWxsaW5nT2ZT
dHJpbmcodG9XVEZTdHJpbmcodGV4dCksICptaXNzcGVsbGluZ0xvY2F0aW9uLCAqbWlzc3BlbGxp
bmdMZW5ndGgpOworI2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05B
TUUsIE5BTUUpICBcCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVf
TkFNRSBjYikgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGNsaWVudENhbGxiYWNrcygpLk5BTUUgPSBjYjsgICAgICAg
ICAgICAgICAgICAgICAgICBcCiB9CiAKLXN0YXRpYyBXS0FycmF5UmVmIGd1ZXNzZXNGb3JXb3Jk
KHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCi17Ci0gICAgV0tN
dXRhYmxlQXJyYXlSZWYgc3VnZ2VzdGlvbnNGb3JXb3JkID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUo
KTsKLQotICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS53b3JkX2d1ZXNzZXNfZ2V0KSB7Ci0gICAg
ICAgIEVpbmFfTGlzdCogbGlzdCA9IGNsaWVudENhbGxiYWNrcygpLndvcmRfZ3Vlc3Nlc19nZXQo
dGFnLCBXS0VpbmFTaGFyZWRTdHJpbmcod29yZCkpOwotICAgICAgICB2b2lkKiBpdGVtOwotCi0g
ICAgICAgIEVJTkFfTElTVF9GUkVFKGxpc3QsIGl0ZW0pIHsKLSAgICAgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihpdGVtKSkpOwotICAgICAgICAgICAg
V0tBcnJheUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9uLmdldCgpKTsK
LSAgICAgICAgICAgIGZyZWUoaXRlbSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcyA9IHRleHRDaGVja2VyRW5jaGFudCgpLT5n
ZXRHdWVzc2VzRm9yV29yZCh0b1dURlN0cmluZyh3b3JkKSk7Ci0gICAgICAgIHNpemVfdCBudW1i
ZXJPZkd1ZXNzZXMgPSBndWVzc2VzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkd1ZXNzZXM7ICsraSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoZ3Vlc3Nlc1tpXS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgICAgICBXS0FycmF5QXBwZW5k
SXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHN1Z2dlc3Rpb25zRm9yV29yZDsKLX0KKyNlbHNlCiAKLXN0YXRp
YyB2b2lkIGxlYXJuV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZv
aWQqKQotewotICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS53b3JkX2xlYXJuKQotICAgICAgICBj
bGllbnRDYWxsYmFja3MoKS53b3JkX2xlYXJuKHRhZywgV0tFaW5hU2hhcmVkU3RyaW5nKHdvcmQp
KTsKLSAgICBlbHNlCi0gICAgICAgIHRleHRDaGVja2VyRW5jaGFudCgpLT5sZWFybldvcmQodG9X
VEZTdHJpbmcod29yZCkpOworLy8gRGVmaW5lcyBhbiBlbXB0eSBBUEkgdG8gZG8gbm90IGJyZWFr
IGJ1aWxkLgorI2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05BTUUs
IE5BTUUpICBcCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFN
RSkgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogfQorI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQogCi1zdGF0aWMg
dm9pZCBpZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9p
ZCopCitFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2VuYWJsZWRfZ2V0KCkKIHsKLSAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkud29yZF9pZ25vcmUp
Ci0gICAgICAgIGNsaWVudENhbGxiYWNrcygpLndvcmRfaWdub3JlKHRhZywgV0tFaW5hU2hhcmVk
U3RyaW5nKHdvcmQpKTsKLSAgICBlbHNlCi0gICAgICAgIHRleHRDaGVja2VyRW5jaGFudCgpLT5p
Z25vcmVXb3JkKHRvV1RGU3RyaW5nKHdvcmQpKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAg
ICByZXR1cm4gVGV4dENoZWNrZXJDbGllbnRFZmw6Omluc3RhbmNlKCkud2tDbGllbnQoKS5jb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoMCAvKiBjbGllbnRJbmZvICovKTsKKyNlbHNlCisg
ICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKLW5hbWVzcGFjZSBFd2tfVGV4dF9DaGVja2Vy
IHsKLQotVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpCit2
b2lkIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3Nl
dChFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+
YXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIFdLVGV4dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNo
YW5nZWQoISFlbmFibGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlKTsKKyNlbmRp
ZgogfQogCi12b2lkIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGxhbmd1YWdlcykKK0VpbmFfTGlzdCogZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVj
a2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldCgpCiB7Ci0gICAgdGV4dENoZWNrZXJFbmNoYW50
KCktPnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMobGFuZ3VhZ2VzKTsKKyAgICBFaW5hX0xp
c3QqIGxpc3RPZmxhbmd1YWdlcyA9IDA7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgLy8g
RklYTUU6IEV4cG9zZSBXSzIgQyBBUEkgdG8gZ2V0IGF2YWlsYWJsZSBzcGVsbCBjaGVja2luZyBs
YW5ndWFnZXMuCisgICAgbGlzdE9mbGFuZ3VhZ2VzID0gY29udmVydExhbmd1YWdlc1RvRWluYUxp
c3QoVGV4dENoZWNrZXJDbGllbnRFZmw6Omluc3RhbmNlKCkuYXZhaWxhYmxlU3BlbGxDaGVja2lu
Z0xhbmd1YWdlcygpKTsKKyNlbmRpZgorICAgIHJldHVybiBsaXN0T2ZsYW5ndWFnZXM7CiB9CiAK
LVZlY3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQordm9pZCBld2tf
dGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hhciogbGFu
Z3VhZ2VzKQogewotICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+bG9hZGVkU3BlbGxD
aGVja2luZ0xhbmd1YWdlcygpOwotfQorI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFZlY3Rv
cjxTdHJpbmc+IG5ld0xhbmd1YWdlczsKKyAgICBTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlcyku
c3BsaXQoJywnLCBuZXdMYW5ndWFnZXMpOwogCi1ib29sIGhhc0RpY3Rpb25hcnkoKQotewotICAg
IHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+aGFzRGljdGlvbmFyeSgpOworICAgIC8vIEZJ
WE1FOiBFeHBvc2UgV0syIEMgQVBJIHRvIHNldCBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMuCisg
ICAgVGV4dENoZWNrZXJDbGllbnRFZmw6Omluc3RhbmNlKCkudXBkYXRlU3BlbGxDaGVja2luZ0xh
bmd1YWdlcyhuZXdMYW5ndWFnZXMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obGFuZ3VhZ2Vz
KTsKKyNlbmRpZgogfQogCi0vKioKLSAqIEluaXRpYWxpemVzIHNwZWxsY2hlY2sgZmVhdHVyZS4K
LSAqCi0gKiBAaW50ZXJuYWwKLSAqCi0gKiBUaGUgZGVmYXVsdCBzcGVsbGNoZWNrIGZlYXR1cmUg
aXMgYmFzZWQgb24gRW5jaGFudCBsaWJyYXJ5LgotICogQ2xpZW50IG1heSB1c2Ugb3duIHNwZWxs
Y2hlY2sgaW1wbGVtZW50YXRpb24gcHJldmlvdXNseSBzZXQKLSAqIHRocm91Z2ggdGhlIGNhbGxi
YWNrIGZ1bmN0aW9ucy4KLSAqLwotdm9pZCBpbml0aWFsaXplKCkKK0VpbmFfTGlzdCogZXdrX3Rl
eHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCkKIHsKLSAgICBzdGF0aWMg
Ym9vbCBkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQgPSBmYWxzZTsKLSAgICBpZiAoZGlk
SW5pdGlhbGl6ZVRleHRDaGVja2VyQ2xpZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS1Rl
eHRDaGVja2VyQ2xpZW50IHRleHRDaGVja2VyQ2xpZW50ID0gewotICAgICAgICBrV0tUZXh0Q2hl
Y2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAotICAgICAgICAwLCAvLyBjbGllbnRJbmZvCi0gICAg
ICAgIDAsIC8vIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkCi0gICAgICAgIGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAotICAgICAgICBzZXRDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQsCi0gICAgICAgIDAsIC8vIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZAot
ICAgICAgICAwLCAvLyBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkCi0gICAgICAgIHVuaXF1ZVNw
ZWxsRG9jdW1lbnRUYWcsCi0gICAgICAgIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcsCi0gICAg
ICAgIGNoZWNrU3BlbGxpbmdPZlN0cmluZywKLSAgICAgICAgMCwgLy8gY2hlY2tHcmFtbWFyT2ZT
dHJpbmcKLSAgICAgICAgMCwgLy8gc3BlbGxpbmdVSUlzU2hvd2luZwotICAgICAgICAwLCAvLyB0
b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nCi0gICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQKLSAgICAgICAgMCwgLy8gdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFt
bWFyU3RyaW5nCi0gICAgICAgIGd1ZXNzZXNGb3JXb3JkLAotICAgICAgICBsZWFybldvcmQsCi0g
ICAgICAgIGlnbm9yZVdvcmQKLSAgICB9OwotICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRl
eHRDaGVja2VyQ2xpZW50KTsKLQotICAgIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9
IHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEV3a19UZXh0X0NoZWNrZXIKLQotI2RlZmluZSBF
V0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05BTUUsIE5BTUUpICBcCi12b2lkIGV3
a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSBjYikgICAgIFwKLXsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGNsaWVudENhbGxiYWNrcygpLk5BTUUgPSBjYjsgICAgICBcCi19Ci0KLSNlbHNlCi0KLS8vIERl
ZmluZXMgYW4gZW1wdHkgQVBJIHRvIGRvIG5vdCBicmVhayBidWlsZC4KLSNkZWZpbmUgRVdLX1RF
WFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBOQU1FKSAgXAotdm9pZCBld2tfdGV4
dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUpICAgICAgICBcCi17ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBFaW5h
X0xpc3QqIGxpc3RPZmxhbmd1YWdlcyA9IDA7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAg
Ly8gRklYTUU6IEV4cG9zZSBXSzIgQyBBUEkgdG8gZ2V0IGxvYWRlZCBzcGVsbCBjaGVja2luZyBs
YW5ndWFnZXMuCisgICAgbGlzdE9mbGFuZ3VhZ2VzID0gY29udmVydExhbmd1YWdlc1RvRWluYUxp
c3QoVGV4dENoZWNrZXJDbGllbnRFZmw6Omluc3RhbmNlKCkubG9hZGVkU3BlbGxDaGVja2luZ0xh
bmd1YWdlcygpKTsKKyNlbmRpZgorICAgIHJldHVybiBsaXN0T2ZsYW5ndWFnZXM7CiB9Ci0jZW5k
aWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCiAKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VU
KEV3a19UZXh0X0NoZWNrZXJfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2IsIGNv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlKQogRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFD
S19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9DYiwg
dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCiBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2VfQ2Is
IHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UpCiBFV0tfVEVYVF9DSEVDS0VSX0NBTExC
QUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19DYiwgc3RyaW5n
X3NwZWxsaW5nX2NoZWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3RleHRfY2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3RleHRfY2hlY2tlci5oCmluZGV4IGI3YWVhODguLjAzMDA4NjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMTEgKzI1LDE0IEBACiAKIC8qKgogICog
QGZpbGUgZXdrX3RleHRfY2hlY2tlci5oCi0gKiBAYnJpZWYgUHJvdmlkZXMgQVBJIHRvIG92ZXJ3
cml0ZSB0aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uLgorICog
QGJyaWVmIFByb3ZpZGVzIEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxs
Y2hlY2tlciBpbXBsZW1lbnRhdGlvbgorICogICAgICAgIGFuZCBjb250YWlucyBBUEkgdG8gbWFu
aXB1bGF0ZSBzcGVsbGNoZWNrZXIgc2V0dGluZ3MuCiAgKgotICogVGhlcmUgaXMgb25lIHNwZWxs
Y2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0aW9uIGFuZCBpdCdzIGRpc2FibGVkIGJ5IGRlZmF1
bHQuCisgKiBUaGVyZSBpcyBvbmUgc3BlbGxjaGVja2VyIG9iamVjdCBwZXIgYXBwbGljYXRpb24u
CiAgKiBJdCBhbGxvd3MgdG8gY2hlY2sgc3BlbGxpbmcgaW4gdGhlIGVkaXRhYmxlIGFyZWFzLgot
ICogSWYgYXBwbGljYXRpb24gd2FudHMgdG8gZW5hYmxlIHRoZSBmZWF0dXJlLCBBUEkgZnJvbSBl
d2tfc2V0dGluZ3MuaAorICoKKyAqIFRoZSBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQu
CisgKiBJZiBhcHBsaWNhdGlvbiB3YW50cyB0byBlbmFibGUgaXQsIGV3a190ZXh0X2NoZWNrZXJf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCBBUEkKICAqIHNob3VsZCBiZSB1
c2VkLgogICoKICAqIFRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRp
b24gaXMgYmFzZWQgb24gdGhlIEVuY2hhbnQgbGlicmFyeS4KQEAgLTQ4LDYgKzUxLDE0IEBAIGV4
dGVybiAiQyIgewogI2VuZGlmCiAKIC8qKgorICogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgdGhl
IGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhl
IGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQu
CisgKgorICogQHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUgaWYgY29udGludW91cyBzcGVsbCBj
aGVja2luZyBpcyBlbmFibGVkIG9yIEBjIEVJTkFfRkFMU0UgaWYgaXQncyBkaXNhYmxlZAorICov
Cit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tp
bmdfQ2hhbmdlX0NiKShFaW5hX0Jvb2wgZW5hYmxlKTsKKworLyoqCiAgKiBEZWZpbmVzIGEgdHlw
ZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmV0dXJuIGEgdGFnIChpZGVudGlm
aWVyKSB3aGljaCBpcyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZS4KICAqCiAgKiBVbmlxdWUgdGFn
cyBoZWxwIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBvdGhlciBvYmplY3RzIHRoYXQgYXJlIGNo
ZWNrZWQgZm9yIHNwZWxsaW5nIG1pc3Rha2VzLgpAQCAtMTA4LDYgKzExOSw3NSBAQCB0eXBlZGVm
IHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm5fQ2IpKHVpbnQ2NF90IHRhZywgY29u
c3QgY2hhciAqd29yZCk7CiAgKi8KIHR5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfV29y
ZF9JZ25vcmVfQ2IpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7CiAKKworLyoqCisg
KiBRdWVyaWVzIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZC4KKyAqCisg
KiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVu
YWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8KK0VBUEkgRWluYV9C
b29sIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dl
dCh2b2lkKTsKKworLyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGNvbnRpbnVvdXMgc3BlbGwgY2hl
Y2tpbmcuCisgKgorICogVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKgor
ICogQHNlZSBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdl
X2NiX3NldAorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRvIGVuYWJsZSBjb250
aW51b3VzIHNwZWxsIGNoZWNraW5nIG9yIEBjIEVJTkFfRkFMU0UgdG8gZGlzYWJsZQorICovCitF
QVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJs
ZWRfc2V0KEVpbmFfQm9vbCBlbmFibGUpOworCisvKioKKyAqIEdldHMgdGhlIHRoZSBsaXN0IG9m
IGFsbCBhdmFpbGFibGUgdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyB0byB1c2UuCisgKgor
ICogQHNlZSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldAorICoKKyAq
IEByZXR1cm4gdGhlIGxpc3Qgd2l0aCBhdmFpbGFibGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2Vz
LCBvciBAYyBOVUxMIG9uIGZhaWx1cmUKKyAqICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRz
IGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciwgdXNlIGVpbmFfc3RyaW5nc2hhcmVfZGVsKCkK
KyAqLworRUFQSSBFaW5hX0xpc3QgKmV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfYXZh
aWxhYmxlX2xhbmd1YWdlc19nZXQodm9pZCk7CisKKy8qKgorICogU2V0cyBAYSBsYW5ndWFnZXMg
YXMgdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIHVzZSBieSBkZWZhdWx0IFdlYktpdAorICogaW1w
bGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2VyIGZlYXR1cmUgd2l0aCBFbmNoYW50IGxpYnJhcnkg
c3VwcG9ydC4KKyAqCisgKiBJZiBAbGFuZ3VhZ2VzIGlzIEBjIE5VTEwsIHRoZSBkZWZhdWx0IGxh
bmd1YWdlIGlzIHVzZWQuCisgKiBJZiB0aGUgZGVmYXVsdCBsYW5ndWFnZSBjYW4gbm90IGJlIGRl
dGVybWluZWQgdGhlbiBhbnkgYXZhaWxhYmxlIGRpY3Rpb25hcnkgd2lsbCBiZSB1c2VkLgorICoK
KyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gaW52YWxpZGF0ZXMgdGhlIHByZXZpb3VzbHkgc2V0IGxh
bmd1YWdlcy4KKyAqICAgICAgIFRoZSBkaWN0aW9uYXJpZXMgYXJlIHJlcXVlc3RlZCBhc3luY2hy
b25vdXNseS4KKyAqCisgKiBAcGFyYW0gbGFuZ3VhZ2VzIGEgbGlzdCBvZiBjb21tYSAoJywnKSBz
ZXBhcmF0ZWQgbGFuZ3VhZ2UgY29kZXMKKyAqICAgICAgICBvZiB0aGUgZm9ybSAnZW5fVVMnLCBp
ZSwgbGFuZ3VhZ2VfVkFSSUFOVCwgbWF5IGJlIEBjIE5VTEwuCisgKi8KK0VBUEkgdm9pZCBld2tf
dGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hhciAqbGFu
Z3VhZ2VzKTsKKworLyoqCisgKiBHZXRzIHRoZSB0aGUgbGlzdCBvZiB0aGUgc3BlbGwgY2hlY2tp
bmcgbGFuZ3VhZ2VzIGluIHVzZS4KKyAqCisgKiBAc2VlIGV3a19zZXR0aW5nc19zcGVsbF9jaGVj
a2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldAorICogQHNlZSBld2tfc2V0dGluZ3Nfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzX3NldAorICoKKyAqIEByZXR1cm4gdGhlIGxpc3Qgd2l0aCB0aGUg
c3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIGluIHVzZSwKKyAqICAgICAgICAgdGhlIEVpbmFfTGlz
dCBhbmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciwgdXNlIGVpbmFfc3RyaW5nc2hh
cmVfZGVsKCkKKyAqLworRUFQSSBFaW5hX0xpc3QgKmV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzX2dldCh2b2lkKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVu
Y3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuCisgKiB0aGUgY29udGludW91cyBz
cGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBTcGVj
aWZ5aW5nIG9mIHRoaXMgY2FsbGJhY2sgaXMgbmVlZGVkIGlmIHRoZSBhcHBsaWNhdGlvbiB3YW50
cyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMKKyAqIG9uY2UgV2ViS2l0IGNoYW5nZXMgdGhpcyBz
ZXR0aW5nLgorICogSWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBpbnRlcmVzdGVkLCB0aGlzIGNh
bGxiYWNrIGlzIG5vdCBzZXQuCisgKiBDaGFuZ2luZyBvZiB0aGlzIHNldHRpbmcgYXQgdGhlIFdl
YktpdCBsZXZlbCBjYW4gYmUgbWFkZSBhcyBhIHJlc3VsdCBvZiBtb2RpZnlpbmcKKyAqIG9wdGlv
bnMgaW4gYSBDb250ZXh0IE1lbnUgYnkgYSB1c2VyLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBj
YWxsYmFjayBmdW5jdGlvbiB0byBzZXQgb3IgQGMgTlVMTCB0byBpbnZhbGlkYXRlIHRoZSBwcmV2
aW91cyBvbmUKKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVs
bF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfQ29udGludW91c19TcGVs
bF9DaGVja2luZ19DaGFuZ2VfQ2IgY2IpOworCiAvKioKICAqIFNldHMgYSBjYWxsYmFjayBmdW5j
dGlvbiB0byBnZXQgYSB1bmlxdWUgc3BlbGwgZG9jdW1lbnQgdGFnLgogICoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9w
cml2YXRlLmgKaW5kZXggNmM0NzMwZS4uYmMzMjdlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMx
LDE3ICszMSwyMiBAQAogCiAjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgogCi1uYW1lc3Bh
Y2UgRXdrX1RleHRfQ2hlY2tlciB7Ci0KLXZvaWQgaW5pdGlhbGl6ZSgpOwotCi0vLyBFbmNoYW50
IGhlbHBlcnMuCi1WZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KCk7Ci12b2lkIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGxhbmd1YWdlcyk7Ci1WZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzKCk7Ci1ib29sIGhhc0RpY3Rpb25hcnkoKTsKLQotfQorLyoqCisgKiBAYnJpZWYgU3RydWN0
dXJlIHRvIHN0b3JlIGNsaWVudCBjYWxsYmFjayBmdW5jdGlvbnMuCisgKgorICogQGludGVybmFs
CisgKi8KK3N0cnVjdCBDbGllbnRDYWxsYmFja3MgeworICAgIEV3a19UZXh0X0NoZWNrZXJfQ29u
dGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2IgY29udGludW91c19zcGVsbF9jaGVja2lu
Z19jaGFuZ2U7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFn
X0dldF9DYiB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldDsKKyAgICBFd2tfVGV4dF9DaGVj
a2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2VfQ2IgdW5pcXVlX3NwZWxsX2RvY3Vt
ZW50X3RhZ19jbG9zZTsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVj
a19DYiBzdHJpbmdfc3BlbGxpbmdfY2hlY2s7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1
ZXNzZXNfR2V0X0NiIHdvcmRfZ3Vlc3Nlc19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3Jk
X0xlYXJuX0NiIHdvcmRfbGVhcm47CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9D
YiB3b3JkX2lnbm9yZTsKK307CisKK0NsaWVudENhbGxiYWNrcyYgY2xpZW50Q2FsbGJhY2tzKCk7
CiAKICNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKICNlbmRpZiAvLyBld2tfdGV4dF9jaGVj
a2VyX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcAppbmRleCA4MmRh
MDlhLi40Y2UzODhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcApAQCAtMjEz
LDIyICsyMTMsMjIgQEAgc3RhdGljIHZvaWQgb25Xb3JkSWdub3JlKHVpbnQ2NF90IHRhZywgY29u
c3QgY2hhciogd29yZCkKIH0KIAogLyoqCi0gKiBUZXN0IHNldHRlci9nZXR0ZXIgZm9yIHRoZSBj
b250aW5vdXMgc3BlbGwgY2hlY2tpbmc6Ci0gKiAgLSBld2tfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19lbmFibGVkX2dldAotICogIC0gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQKKyAqIFRlc3Qgc2V0dGVyL2dldHRlciBmb3IgdGhl
IGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmc6CisgKiAgLSBld2tfdGV4dF9jaGVja2VyX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQKKyAqICAtIGV3a190ZXh0X2NoZWNrZXJf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldAogICovCi1URVNUX0YoRVdLMlVu
aXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxl
ZCkKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZCkKIHsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAjaWYgRU5BQkxFKFNQ
RUxMQ0hFQ0spCi0gICAgRVhQRUNUX1RSVUUoZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZF9nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3RleHRfY2hlY2tl
cl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOwogCiAgICAgLy8gV2hl
biB0aGUgc3BlbGwgY2hlY2tpbmcgaGFzIGJlZW4gZW5hYmxlZCwgdGhlIGRlZmF1bHQgbGFuZ3Vh
Z2UgaXMgc2V0IChpZiB0aGUgdXNlcgogICAgIC8vIGRpZG4ndCBzZXQgYW55KS4gVGhlIGxhbmd1
YWdlcyBhcmUgYmVpbmcgbG9hZGVkIG9uIHRoZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KICAgICB0
aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9u
VGltZW91dCwgMCk7CiAgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CiAKLSAgICBFaW5hX0xp
c3QqIGxvYWRlZExhbmd1YWdlcyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXNfZ2V0KCk7CisgICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfdGV4dF9jaGVj
a2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKICAgICAvLyBObyBkaWN0aW9uYXJ5
IGlzIGF2YWlsYWJsZS9pbnN0YWxsZWQuCiAgICAgaWYgKCFsb2FkZWRMYW5ndWFnZXMpCiAgICAg
ICAgIHJldHVybjsKQEAgLTIzOSwyMyArMjM5LDI3IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNl
LCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkKQogICAgIEVJ
TkFfTElTVF9GUkVFKGxvYWRlZExhbmd1YWdlcywgZGF0YSkKICAgICAgICAgZWluYV9zdHJpbmdz
aGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpKTsKICNlbHNlCi0gICAgRVhQ
RUNUX0ZBTFNFKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
Z2V0KCkpOworICAgIEVYUEVDVF9GQUxTRShld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKSk7CiAjZW5kaWYKIAotICAgIGV3a19zZXR0aW5nc19j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KGZhbHNlKTsKLSAgICBFWFBFQ1Rf
RkFMU0UoZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQo
KSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJs
ZWRfc2V0KGZhbHNlKTsKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3RleHRfY2hlY2tlcl9jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOwogfQogCiAvKioKLSAqIFRlc3Qgd2hl
dGhlciB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHNwZWxsIGNoZWNraW5nIHNldHRp
bmcgaGFzIGJlZW4gY2hhbmdlZC4KKyAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGJhY2sgaXMgY2Fs
bGVkIHdoZW4gdGhlIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0
LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJl
IG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBN
ZW51IGJ5IGEgdXNlci4KICAqLwotVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5n
c19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQpCitURVNUX0YoRVdLMlVu
aXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2No
YW5nZV9jYl9zZXQpCiB7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfY2hhbmdlX2NiX3NldChvblNldHRpbmdDaGFuZ2UpOworICAgIGV3a190ZXh0X2NoZWNrZXJf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KG9uU2V0dGluZ0NoYW5nZSk7
CiAKLSAgICBpc1NldHRpbmdFbmFibGVkID0gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKKyAgICBpc1NldHRpbmdFbmFibGVkID0gZXdrX3RleHRf
Y2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7CiAgICAgaXNT
ZXR0aW5nRW5hYmxlZCA9ICFpc1NldHRpbmdFbmFibGVkOwotICAgIGV3a19zZXR0aW5nc19jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KGlzU2V0dGluZ0VuYWJsZWQpOworICAg
IC8vIFRoZSBub3RpZmljYXRpb25zIGFib3V0IHRoZSBzZXR0aW5nIGNoYW5nZSBzaG91bGRuJ3Qg
YmUgc2VudCBpZiB0aGUgY2hhbmdlIHdhcyBtYWRlCisgICAgLy8gb24gdGhlIGNsaWVudCdzIHJl
cXVlc3QgKHB1YmxpYyBBUEkpLgorICAgIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVs
bF9jaGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFibGVkKTsKIAogICAgIHRpbWVvdXRU
aW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25UaW1lb3V0
LCAwKTsKIApAQCAtMjY0LDMzICsyNjgsMjQgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3
a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQpCiAgICAg
Ly8gV2UgY2FuJ3QgY2FsbCBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSBiZWNhdXNlIGl0IGRvZXNu
J3QgcHJvY2VzcyB0aGUgaWRsZXJzLgogICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwogCi0j
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgRVhQRUNUX0ZBTFNFKHRpbWVvdXRUaW1lcik7Ci0j
ZWxzZQogICAgIEVYUEVDVF9UUlVFKHRpbWVvdXRUaW1lcik7Ci0jZW5kaWYKLQotICAgIC8vIFRo
ZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGlmIHRoZSBzZXR0aW5nIG9wdGlvbiBpcyBh
bHJlYWR5IHNldC4KLSAgICBpc1NldHRpbmdFbmFibGVkID0gZXdrX3NldHRpbmdzX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKLSAgICBld2tfc2V0dGluZ3NfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFibGVkKTsKIAotICAg
IHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywg
b25UaW1lb3V0LCAwKTsKLSAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKLQotICAgIC8vIFdo
ZW4gdGhlIFNQRUxMQ0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQgdGhlIGNhbGxiYWNrIHdvbid0IGJl
IGNhbGxlZCB0b28uCi0gICAgRVhQRUNUX1RSVUUodGltZW91dFRpbWVyKTsKLQotICAgIC8vIFRo
ZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGlmIHRoZSB1c2VyIGhhcyBpbnZhbGlkYXRl
ZCBpdC4KLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2Vf
Y2Jfc2V0KDApOwotICAgIGlzU2V0dGluZ0VuYWJsZWQgPSBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpOwotICAgIGlzU2V0dGluZ0VuYWJsZWQgPSAh
aXNTZXR0aW5nRW5hYmxlZDsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFibGVkKTsKLQotICAgIHRpbWVvdXRUaW1lciA9
IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25UaW1lb3V0LCAwKTsK
LSAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKLQotICAgIC8vIElmIHRoZSBTUEVMTENIRUNL
IG1hY3JvIGlzIGRpc2FibGVkLCB0aGUgY2FsbGJhY2sgaXMgbm90IHNldC4KLSAgICBFWFBFQ1Rf
VFJVRSh0aW1lb3V0VGltZXIpOworICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGQgYmUgY2FsbGVk
IGlmIHRoZSBjb250ZXh0IG1lbnUgIkNoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZyIgb3B0aW9u
CisgICAgICAgd2FzIHRvZ2dsZWQgYnkgdGhlIHVzZXIuCisgICAgRklYTUU6CisgICAgMSkgSW52
b2tlIHRoZSBjb250ZXh0IG1lbnUgb24gdGhlIGlucHV0IGZpZWxkLgorICAgIDIpIENob29zZSB0
aGUgc3ViIG1lbnUgIlNwZWxsaW5nIGFuZCBHcmFtbWFyIiBvcHRpb24gKG5vdCBpbXBsZW1lbnRl
ZCBmb3IgV0syKS4KKyAgICAzKSBUb2dnbGUgIkNoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZyIg
b3B0aW9uLgorICAgIDQpIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZC4gKi8K
KworICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGlmIHRoZSB1c2VyIGhh
cyBpbnZhbGlkYXRlZCBpdC4KKyAgICBGSVhNRToKKyAgICAxKSBDYWxsIGV3a190ZXh0X2NoZWNr
ZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KDApIHRvIG5vdGlmeSB0
aGUgV2ViS2l0IHRoYXQKKyAgICAgICB0aGUgY2xpZW50IGlzIG5vdCBpbnRlcmVzdGVkIGluIHRo
ZSBzZXR0aW5nIGNoYW5nZS4KKyAgICAyKSBJbnZva2UgdGhlIGNvbnRleHQgbWVudSBvbiB0aGUg
aW5wdXQgZmllbGQuCisgICAgMykgQ2hvb3NlIHRoZSBzdWIgbWVudSAiU3BlbGxpbmcgYW5kIEdy
YW1tYXIiIG9wdGlvbiAobm90IGltcGxlbWVudGVkIGZvciBXSzIpLgorICAgIDQpIFRvZ2dsZSAi
Q2hlY2sgU3BlbGxpbmcgV2hpbGUgVHlwaW5nIiBvcHRpb24uCisgICAgNSkgQ2hlY2sgd2hldGhl
ciB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZC4gKi8KIH0KIAogLyoqCkBAIC0yOTgsOSArMjkzLDkg
QEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX2NoYW5nZV9jYl9zZXQpCiAgKiBpZiB0aGV5IGFyZSBpbiB1c2UuCiAgKiBBbGwg
dGhlIGRpY3Rpb25hcmllcyBmcm9tIHRoZSBsaXN0IGNhbiBiZSBzZXQgdG8gcGVyZm9ybSBzcGVs
bGNoZWNraW5nLgogICovCi1URVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX3Nw
ZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KQorVEVTVF9GKEVXSzJVbml0VGVz
dEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdl
c19nZXQpCiB7Ci0gICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5ndWFnZXMgPSBld2tfc2V0dGlu
Z3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQoKTsKKyAgICBFaW5hX0xp
c3QqIGF2YWlsYWJsZUxhbmd1YWdlcyA9IGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdf
YXZhaWxhYmxlX2xhbmd1YWdlc19nZXQoKTsKICAgICAvLyBObyBkaWN0aW9uYXJ5IGlzIGF2YWls
YWJsZS9pbnN0YWxsZWQgb3IgdGhlIFNQRUxMQ0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQuCiAgICAg
aWYgKCFhdmFpbGFibGVMYW5ndWFnZXMpCiAgICAgICAgIHJldHVybjsKQEAgLTMxOSwxNCArMzE0
LDE0IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tp
bmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQpCiAgICAgfQogCiAgICAgLy8gU2V0IGFsbCBhdmFp
bGFibGUgbGFuZ3VhZ2VzLgotICAgIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXNfc2V0KGxhbmd1YWdlcy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGV3a190ZXh0
X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChsYW5ndWFnZXMudG9TdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKIAogICAgIC8vIExhbmd1YWdlcyBhcmUgYmVpbmcgbG9hZGVkIG9u
IHRoZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KICAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1l
cl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CiAgICAgZWNvcmVf
bWFpbl9sb29wX2JlZ2luKCk7CiAKICAgICAvLyBHZXQgdGhlIGxhbmd1YWdlcyBpbiB1c2UuCi0g
ICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIEVpbmFfTGlzdCogbG9hZGVkTGFuZ3VhZ2VzID0gZXdr
X3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CiAgICAgQVNTRVJU
X0VRKGVpbmFfbGlzdF9jb3VudChsb2FkZWRMYW5ndWFnZXMpLCBlaW5hX2xpc3RfY291bnQoYXZh
aWxhYmxlTGFuZ3VhZ2VzKSk7CiAKICAgICBpID0gMDsKQEAgLTM1MCwxNiArMzQ1LDE2IEBAIFRF
U1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxh
YmxlX2xhbmd1YWdlc19nZXQpCiAgKiAgLSBzZXR0aW5nIHRoZSBkZWZhdWx0IGxhbmd1YWdlLAog
ICogIC0gaWYgdHdvIGFyYml0cmFyaWx5IHNlbGVjdGVkIGRpY3Rpb25hcmllcyBhcmUgc2V0IGNv
cnJlY3RseS4KICAqLwotVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19zcGVs
bF9jaGVja2luZ19sYW5ndWFnZXMpCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRf
Y2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpCiB7CiAgICAgLy8gU2V0IHRoZSBkZWZh
dWx0IGxhbmd1YWdlLgotICAgIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNf
c2V0KDApOworICAgIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3Nl
dCgwKTsKIAogICAgIC8vIExhbmd1YWdlcyBhcmUgYmVpbmcgbG9hZGVkIG9uIHRoZSBpZGxlciwg
d2FpdCBmb3IgdGhlbS4KICAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVs
dFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CiAgICAgZWNvcmVfbWFpbl9sb29wX2Jl
Z2luKCk7CiAKLSAgICBFaW5hX0xpc3QqIGxvYWRlZExhbmd1YWdlcyA9IGV3a19zZXR0aW5nc19z
cGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CisgICAgRWluYV9MaXN0KiBsb2FkZWRMYW5n
dWFnZXMgPSBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsK
ICAgICAvLyBObyBkaWN0aW9uYXJ5IGlzIGF2YWlsYWJsZS9pbnN0YWxsZWQgb3IgdGhlIFNQRUxM
Q0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQuCiAgICAgaWYgKCFsb2FkZWRMYW5ndWFnZXMpCiAgICAg
ICAgIHJldHVybjsKQEAgLTM3Miw3ICszNjcsNyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwg
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcykKICAgICAgICAgZWluYV9zdHJp
bmdzaGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkpOwogCiAgICAgLy8g
R2V0IHRoZSBmaXJzdCBhbmQgbGFzdCBsYW5ndWFnZSBmcm9tIGluc3RhbGxlZCBkaWN0aW9uYXJp
ZXMuCi0gICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5ndWFnZXMgPSBld2tfc2V0dGluZ3Nfc3Bl
bGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQoKTsKKyAgICBFaW5hX0xpc3QqIGF2
YWlsYWJsZUxhbmd1YWdlcyA9IGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfYXZhaWxh
YmxlX2xhbmd1YWdlc19nZXQoKTsKICAgICB1bnNpZ25lZCBudW1iZXJPZkF2YWlsYWJsZUxhbmd1
YWdlcyA9IGVpbmFfbGlzdF9jb3VudChhdmFpbGFibGVMYW5ndWFnZXMpOwogICAgIC8vIFdlIGFz
c3VtZSB0aGF0IHVzZXIgaGFzIGluc3RhbGxlZCBhdCBsZXN0IHR3byBkaWN0aW9uYXJpZXMuCiAg
ICAgaWYgKG51bWJlck9mQXZhaWxhYmxlTGFuZ3VhZ2VzIDwgMikKQEAgLTM4OSwxMiArMzg0LDEy
IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdf
bGFuZ3VhZ2VzKQogICAgIGxhbmd1YWdlcy5hcHBlbmQoU3RyaW5nKGxhc3RFeHBlY3RlZCkubG93
ZXIoKSk7CiAKICAgICAvLyBTZXQgYm90aCBsYW5ndWFnZXMgKHRoZSBmaXJzdCBhbmQgdGhlIGxh
c3QpIGZyb20gdGhlIGxpc3QuCi0gICAgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlc19zZXQobGFuZ3VhZ2VzLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZXdrX3Rl
eHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGxhbmd1YWdlcy50b1N0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRk
KGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOwogICAgIGVjb3JlX21haW5f
bG9vcF9iZWdpbigpOwogCi0gICAgbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxs
X2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKKyAgICBsb2FkZWRMYW5ndWFnZXMgPSBld2tfdGV4
dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKICAgICBBU1NFUlRfRVEo
MiwgZWluYV9saXN0X2NvdW50KGxvYWRlZExhbmd1YWdlcykpOwogCiAgICAgRVhQRUNUX1NUUkVR
KGZpcnN0RXhwZWN0ZWQsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihlaW5hX2xpc3RfbnRoKGxv
YWRlZExhbmd1YWdlcywgMCkpKTsKQEAgLTQxNCw3ICs0MDksNyBAQCBURVNUX0YoRVdLMlVuaXRU
ZXN0QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcykKIFRFU1RfRihF
V0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyKQogewogICAgIHJlc2V0Q2FsbGJhY2tz
RXhlY3V0aW9uU3RhdHMoKTsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19lbmFibGVkX3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAKICAgICBBU1NFUlRfVFJVRShsb2Fk
VXJsU3luYyhlbnZpcm9ubWVudC0+dXJsRm9yUmVzb3VyY2UoInNwZWxsaW5nX3Rlc3QuaHRtbCIp
LmRhdGEoKSkpOwogCkBAIC00MzYsNyArNDMxLDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2Us
IGV3a190ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZykKIHsKICAgICByZXNl
dENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CiAgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3KCk7
Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQo
dHJ1ZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfc2V0KHRydWUpOwogCiAgICAgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9j
dW1lbnRfdGFnX2dldF9jYl9zZXQob25TcGVsbERvY3VtZW50VGFnKTsKICAgICBld2tfdGV4dF9j
aGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2VfY2Jfc2V0KG9uU3BlbGxEb2N1
bWVudFRhZ0Nsb3NlKTsKQEAgLTQ1OCw3ICs0NTMsNyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFz
ZSwgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tfY2Jfc2V0KQogewogICAg
IHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKICAgICBkZWZhdWx0VmlldyA9IHdlYlZp
ZXcoKTsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAKICAgICBld2tfdGV4dF9jaGVja2VyX3N0cmluZ19zcGVs
bGluZ19jaGVja19jYl9zZXQob25TcGVsbGluZ0NoZWNrKTsKIApAQCAtNDc2LDcgKzQ3MSw3IEBA
IFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfZ3Vlc3Nlc19n
ZXRfY2Jfc2V0KQogewogICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKICAgICBk
ZWZhdWx0VmlldyA9IHdlYlZpZXcoKTsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVs
bF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAKICAgICBld2tfdGV4dF9j
aGVja2VyX3dvcmRfZ3Vlc3Nlc19nZXRfY2Jfc2V0KG9uV29yZEd1ZXNzZXMpOwogCkBAIC00OTgs
NyArNDkzLDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfd29y
ZF9sZWFybl9jYl9zZXQpCiB7CiAgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpOwog
ICAgIGRlZmF1bHRWaWV3ID0gd2ViVmlldygpOwotICAgIGV3a19zZXR0aW5nc19jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworICAgIGV3a190ZXh0X2NoZWNrZXJf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKIAogICAgIGV3a190
ZXh0X2NoZWNrZXJfd29yZF9sZWFybl9jYl9zZXQob25Xb3JkTGVhcm4pOwogCkBAIC01MTgsNyAr
NTEzLDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfd29yZF9p
Z25vcmVfY2Jfc2V0KQogewogICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKICAg
ICBkZWZhdWx0VmlldyA9IHdlYlZpZXcoKTsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAKICAgICBld2tfdGV4
dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3NldChvbldvcmRJZ25vcmUpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyQ2xpZW50RWZsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJDbGllbnRFZmwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZTNhOWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyQ2xpZW50RWZsLmNw
cApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
eHRDaGVja2VyQ2xpZW50RWZsLmgiCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1
ZGUgIkV3a1ZpZXcuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgIlRleHRD
aGVja2VyU3RhdGUuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0VpbmFT
aGFyZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldL
UmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxF
aW5hLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKworVGV4dENoZWNrZXJDbGllbnRFZmw6OlRleHRDaGVja2VyQ2xpZW50RWZsKCkKKyAgICA6
IG1fbGFuZ3VhZ2VzVXBkYXRlVGltZXIodGhpcywgJlRleHRDaGVja2VyQ2xpZW50RWZsOjpsYW5n
dWFnZXNVcGRhdGVUaW1lckZpcmVkKQorICAgICwgbV9zcGVsbENoZWNraW5nU2V0dGluZ0NoYW5n
ZVRpbWVyKHRoaXMsICZUZXh0Q2hlY2tlckNsaWVudEVmbDo6c3BlbGxDaGVja2luZ1NldHRpbmdD
aGFuZ2VUaW1lckZpcmVkKQorICAgICwgbV90ZXh0Q2hlY2tlckVuY2hhbnQoVGV4dENoZWNrZXJF
bmNoYW50OjpjcmVhdGUoKSkKK3sKKyAgICBtZW1zZXQoJm1fd2tUZXh0Q2hlY2tlckNsaWVudCwg
MCwgc2l6ZW9mKG1fd2tUZXh0Q2hlY2tlckNsaWVudCkpOworICAgIG1fd2tUZXh0Q2hlY2tlckNs
aWVudC52ZXJzaW9uID0ga1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBt
X3drVGV4dENoZWNrZXJDbGllbnQuY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7CisgICAgbV93a1RleHRDaGVja2VyQ2xpZW50
LnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHNldENvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZDsKKyAgICBtX3drVGV4dENoZWNrZXJDbGllbnQudW5pcXVlU3BlbGxEb2N1
bWVudFRhZyA9IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWc7CisgICAgbV93a1RleHRDaGVja2VyQ2xp
ZW50LmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcgPSBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFn
OworICAgIG1fd2tUZXh0Q2hlY2tlckNsaWVudC5jaGVja1NwZWxsaW5nT2ZTdHJpbmcgPSBjaGVj
a1NwZWxsaW5nT2ZTdHJpbmc7CisgICAgbV93a1RleHRDaGVja2VyQ2xpZW50Lmd1ZXNzZXNGb3JX
b3JkID0gZ3Vlc3Nlc0ZvcldvcmQ7CisgICAgbV93a1RleHRDaGVja2VyQ2xpZW50LmxlYXJuV29y
ZCA9IGxlYXJuV29yZDsKKyAgICBtX3drVGV4dENoZWNrZXJDbGllbnQuaWdub3JlV29yZCA9IGln
bm9yZVdvcmQ7CisKKyAgICBXS1RleHRDaGVja2VyU2V0Q2xpZW50KCZtX3drVGV4dENoZWNrZXJD
bGllbnQpOworfQorCitUZXh0Q2hlY2tlckNsaWVudEVmbCYgVGV4dENoZWNrZXJDbGllbnRFZmw6
Omluc3RhbmNlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRleHRDaGVja2VyQ2xpZW50
RWZsLCB0ZXh0Q2hlY2tlckNsaWVudCwgKCkpOworICAgIHJldHVybiB0ZXh0Q2hlY2tlckNsaWVu
dDsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudEVmbDo6ZW5zdXJlU3BlbGxDaGVja2luZ0xh
bmd1YWdlKCkKK3sKKyAgICBpZiAoIW1fdGV4dENoZWNrZXJFbmNoYW50LT5oYXNEaWN0aW9uYXJ5
KCkpCisgICAgICAgIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK30KKwordm9pZCBU
ZXh0Q2hlY2tlckNsaWVudEVmbDo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZGVmYXVsdExhbmd1YWdlcykKK3sKKyAgICBtX3NwZWxsQ2hlY2tpbmdM
YW5ndWFnZXMgPSBkZWZhdWx0TGFuZ3VhZ2VzOworICAgIG1fbGFuZ3VhZ2VzVXBkYXRlVGltZXIu
c3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50RWZsOjpsYW5ndWFn
ZXNVcGRhdGVUaW1lckZpcmVkKFRpbWVyPFRleHRDaGVja2VyQ2xpZW50RWZsPiopCit7CisgICAg
bV90ZXh0Q2hlY2tlckVuY2hhbnQtPnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMobV9zcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudEVmbDo6c3Bl
bGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1lckZpcmVkKFRpbWVyPFRleHRDaGVja2VyQ2xpZW50
RWZsPiopCit7CisgICAgY2xpZW50Q2FsbGJhY2tzKCkuY29udGludW91c19zcGVsbF9jaGVja2lu
Z19jaGFuZ2UoCisgICAgICAgIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKDApCisg
ICAgKTsKK30KKworVmVjdG9yPFN0cmluZz4gVGV4dENoZWNrZXJDbGllbnRFZmw6OmF2YWlsYWJs
ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHRDaGVj
a2VyRW5jaGFudC0+YXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworfQorCitWZWN0
b3I8U3RyaW5nPiBUZXh0Q2hlY2tlckNsaWVudEVmbDo6bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1
YWdlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXJFbmNoYW50LT5sb2FkZWRT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRFZmw6
OmNhbGxDb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZUNhbGxiYWNrQXN5bmMoKQoreworICAg
IG1fc3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisK
K2Jvb2wgVGV4dENoZWNrZXJDbGllbnRFZmw6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBUZXh0Q2hlY2tlcjo6c3RhdGUoKS5pc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVu
dEVmbDo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wsIGNvbnN0IHZvaWQq
KQoreworICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS5jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2NoYW5nZSkKKyAgICAgICAgaW5zdGFuY2UoKS5jYWxsQ29udGludW91c1NwZWxsQ2hlY2tpbmdD
aGFuZ2VDYWxsYmFja0FzeW5jKCk7Cit9CisKK3VpbnQ2NF90IFRleHRDaGVja2VyQ2xpZW50RWZs
Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKikKK3sK
KyAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQp
CisgICAgICAgIHJldHVybiBjbGllbnRDYWxsYmFja3MoKS51bmlxdWVfc3BlbGxfZG9jdW1lbnRf
dGFnX2dldChFd2tWaWV3Ojp0b0V2YXNPYmplY3QocGFnZSkpOworCisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRFZmw6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWco
dWludDY0X3QgdGFnLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCku
dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSkKKyAgICAgICAgY2xpZW50Q2FsbGJhY2tz
KCkudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSh0YWcpOworfQorCit2b2lkIFRleHRD
aGVja2VyQ2xpZW50RWZsOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBXS1N0
cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNz
cGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGNsaWVudENhbGxiYWNrcygp
LnN0cmluZ19zcGVsbGluZ19jaGVjaykKKyAgICAgICAgY2xpZW50Q2FsbGJhY2tzKCkuc3RyaW5n
X3NwZWxsaW5nX2NoZWNrKHRhZywgV0tFaW5hU2hhcmVkU3RyaW5nKHRleHQpLCBtaXNzcGVsbGlu
Z0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBpbnN0YW5j
ZSgpLm1fdGV4dENoZWNrZXJFbmNoYW50LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodG9XVEZTdHJp
bmcodGV4dCksICptaXNzcGVsbGluZ0xvY2F0aW9uLCAqbWlzc3BlbGxpbmdMZW5ndGgpOworfQor
CitXS0FycmF5UmVmIFRleHRDaGVja2VyQ2xpZW50RWZsOjpndWVzc2VzRm9yV29yZCh1aW50NjRf
dCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIFdLTXV0YWJsZUFy
cmF5UmVmIHN1Z2dlc3Rpb25zRm9yV29yZCA9IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7CisKKyAg
ICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkud29yZF9ndWVzc2VzX2dldCkgeworICAgICAgICBFaW5h
X0xpc3QqIGxpc3QgPSBjbGllbnRDYWxsYmFja3MoKS53b3JkX2d1ZXNzZXNfZ2V0KHRhZywgV0tF
aW5hU2hhcmVkU3RyaW5nKHdvcmQpKTsKKyAgICAgICAgdm9pZCogaXRlbTsKKworICAgICAgICBF
SU5BX0xJU1RfRlJFRShsaXN0LCBpdGVtKSB7CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oaXRlbSkpKTsKKyAgICAgICAgICAgIFdLQXJyYXlB
cHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlvbi5nZXQoKSk7CisgICAgICAg
ICAgICBmcmVlKGl0ZW0pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMgPSBpbnN0YW5jZSgpLm1fdGV4dENoZWNrZXJFbmNoYW50
LT5nZXRHdWVzc2VzRm9yV29yZCh0b1dURlN0cmluZyh3b3JkKSk7CisgICAgICAgIHNpemVfdCBu
dW1iZXJPZkd1ZXNzZXMgPSBndWVzc2VzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1iZXJPZkd1ZXNzZXM7ICsraSkgeworICAgICAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoZ3Vlc3Nlc1tpXS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgICAgICBXS0FycmF5QXBw
ZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHN1Z2dlc3Rpb25zRm9yV29yZDsKK30KKwordm9pZCBUZXh0
Q2hlY2tlckNsaWVudEVmbDo6bGVhcm5Xb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29y
ZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGNsaWVudENhbGxiYWNrcygpLndvcmRfbGVhcm4p
CisgICAgICAgIGNsaWVudENhbGxiYWNrcygpLndvcmRfbGVhcm4odGFnLCBXS0VpbmFTaGFyZWRT
dHJpbmcod29yZCkpOworICAgIGVsc2UKKyAgICAgICAgaW5zdGFuY2UoKS5tX3RleHRDaGVja2Vy
RW5jaGFudC0+bGVhcm5Xb3JkKHRvV1RGU3RyaW5nKHdvcmQpKTsKK30KKwordm9pZCBUZXh0Q2hl
Y2tlckNsaWVudEVmbDo6aWdub3JlV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQs
IGNvbnN0IHZvaWQqKQoreworICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS53b3JkX2lnbm9yZSkK
KyAgICAgICAgY2xpZW50Q2FsbGJhY2tzKCkud29yZF9pZ25vcmUodGFnLCBXS0VpbmFTaGFyZWRT
dHJpbmcod29yZCkpOworICAgIGVsc2UKKyAgICAgICAgaW5zdGFuY2UoKS5tX3RleHRDaGVja2Vy
RW5jaGFudC0+aWdub3JlV29yZCh0b1dURlN0cmluZyh3b3JkKSk7Cit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvVGV4dENoZWNrZXJDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
VGV4dENoZWNrZXJDbGllbnRFZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li42ZWJmOWIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9UZXh0Q2hlY2tlckNsaWVudEVmbC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4
dENoZWNrZXJDbGllbnRFZmxfaAorI2RlZmluZSBUZXh0Q2hlY2tlckNsaWVudEVmbF9oCisKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgIlRleHRDaGVja2VyRW5jaGFudC5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgVGV4dENoZWNrZXJDbGllbnRFZmwgeworcHVibGljOgorICAg
IHN0YXRpYyBUZXh0Q2hlY2tlckNsaWVudEVmbCYgaW5zdGFuY2UoKTsKKworICAgIFdLVGV4dENo
ZWNrZXJDbGllbnQgd2tDbGllbnQoKSB7IHJldHVybiBtX3drVGV4dENoZWNrZXJDbGllbnQ7IH0K
KworICAgIC8vIExhbmd1YWdlcyBzdXBwb3J0LgorICAgIHZvaWQgZW5zdXJlU3BlbGxDaGVja2lu
Z0xhbmd1YWdlKCk7CisgICAgVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlU3BlbGxDaGVja2luZ0xh
bmd1YWdlcygpIGNvbnN0OworICAgIFZlY3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdM
YW5ndWFnZXMoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGRlZmF1bHRMYW5ndWFnZXMgPSBWZWN0b3I8U3RyaW5nPigp
KTsKKworcHJpdmF0ZToKKyAgICBUZXh0Q2hlY2tlckNsaWVudEVmbCgpOworCisgICAgLy8gVG8g
c2V0IGxhbmd1YWdlcyBvbiB0aW1lci4KKyAgICB2b2lkIGxhbmd1YWdlc1VwZGF0ZVRpbWVyRmly
ZWQoV2ViQ29yZTo6VGltZXI8VGV4dENoZWNrZXJDbGllbnRFZmw+Kik7CisgICAgV2ViQ29yZTo6
VGltZXI8VGV4dENoZWNrZXJDbGllbnRFZmw+IG1fbGFuZ3VhZ2VzVXBkYXRlVGltZXI7CisgICAg
VmVjdG9yPFN0cmluZz4gbV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzOworCisgICAgLy8gVG8gbm90
aWZ5IHRoZSBjbGllbnQgYWJvdXQgdGhlIHNldHRpbmcgY2hhbmdlIG9uIHRpbWVyLgorICAgIHZv
aWQgc3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFRl
eHRDaGVja2VyQ2xpZW50RWZsPiopOworICAgIHZvaWQgY2FsbENvbnRpbnVvdXNTcGVsbENoZWNr
aW5nQ2hhbmdlQ2FsbGJhY2tBc3luYygpOworICAgIFdlYkNvcmU6OlRpbWVyPFRleHRDaGVja2Vy
Q2xpZW50RWZsPiBtX3NwZWxsQ2hlY2tpbmdTZXR0aW5nQ2hhbmdlVGltZXI7CisKKyAgICAvLyBX
S1RleHRDaGVja2VyQ2xpZW50IGNhbGxiYWNrcy4KKyAgICBzdGF0aWMgYm9vbCBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQgc2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wsIGNvbnN0IHZvaWQqKTsKKyAgICBz
dGF0aWMgdWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYsIGNvbnN0IHZv
aWQqKTsKKyAgICBzdGF0aWMgdm9pZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2NF90
LCBjb25zdCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHVp
bnQ2NF90LCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyBXS0Fy
cmF5UmVmIGd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90LCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2
b2lkKik7CisgICAgc3RhdGljIHZvaWQgbGVhcm5Xb3JkKHVpbnQ2NF90LCBXS1N0cmluZ1JlZiB3
b3JkLCBjb25zdCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQgaWdub3JlV29yZCh1aW50NjRfdCwg
V0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopOworCisgICAgV0tUZXh0Q2hlY2tlckNsaWVu
dCBtX3drVGV4dENoZWNrZXJDbGllbnQ7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6VGV4dENoZWNr
ZXJFbmNoYW50PiBtX3RleHRDaGVja2VyRW5jaGFudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisjZW5kaWYgLy8gVGV4dENoZWNr
ZXJDbGllbnRFZmxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9U
ZXh0Q2hlY2tlckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVj
a2VyRWZsLmNwcAppbmRleCBhZGI5MTU0Li5iMDM2MDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgU2Ftc3VuZyBFbGVj
dHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcwog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw5IEBACiAKICNpZiBF
TkFCTEUoU1BFTExDSEVDSykKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgotI2luY2x1
ZGUgIldlYlRleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnRFZmwuaCIK
KyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKICNlbmRpZgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ0LDE3ICs0NiwxNSBAQCBzdGF0aWMgVGV4dENo
ZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBU
ZXh0Q2hlY2tlcjo6c3RhdGUoKQogewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQogICAgIHN0YXRp
YyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOwogICAgIGlmIChkaWRJbml0aWFsaXpl
U3RhdGUpCiAgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwogCi0gICAgV2ViVGV4dENo
ZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCk7
Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9
IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKLSAgICB0ZXh0Q2hlY2tl
clN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5ncmFtbWFyQ2hlY2tpbmdF
bmFibGVkKCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCA9IGZhbHNlOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkID0gZmFsc2U7CiAKICAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOwotI2VuZGlm
CisKICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKIH0KIApAQCAtNzEsNyArNzEsMTMgQEAg
dm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wg
aXNDb250aW51b3VzU3BlbGxDaGVja2kKICAgICAgICAgcmV0dXJuOwogCiAgICAgdGV4dENoZWNr
ZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkOwotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKTsKKworICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCkKKyAgICAgICAgVGV4dENoZWNrZXJDbGllbnRFZmw6Omluc3RhbmNlKCkuZW5zdXJlU3BlbGxD
aGVja2luZ0xhbmd1YWdlKCk7CisKKyAgICAvLyBOb3RpZnkgdGhlIGNsaWVudCBhYm91dCB0aGUg
c2V0dGluZyBjaGFuZ2UuCisgICAgVGV4dENoZWNrZXJDbGllbnRFZmw6Omluc3RhbmNlKCkud2tD
bGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoCisgICAgICAgIGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLCAwIC8qIGNsaWVudEluZm8gKi8pOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOwogI2Vu
ZGlmCkBAIC04NCw3ICs5MCwxNyBAQCB2b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkKGJvb2wpCiAKIHZvaWQgVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgVGV4dENoZWNrZXI6
OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChlbmFibGVkKTsKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICBpZiAoc3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRl
LmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKworICAgIGlmIChl
bmFibGVkKQorICAgICAgICBUZXh0Q2hlY2tlckNsaWVudEVmbDo6aW5zdGFuY2UoKS5lbnN1cmVT
cGVsbENoZWNraW5nTGFuZ3VhZ2UoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQp
OworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRT
dGF0ZUNoYW5nZWQoYm9vbCkKQEAgLTk1LDcgKzExMSw4IEBAIHZvaWQgVGV4dENoZWNrZXI6Omdy
YW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCkKIGludDY0X3QgVGV4dENoZWNr
ZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQogewogI2lmIEVO
QUJMRShTUEVMTENIRUNLKQotICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNs
aWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7CisgICAgcmV0dXJuIFRleHRDaGVj
a2VyQ2xpZW50RWZsOjppbnN0YW5jZSgpLndrQ2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVudFRh
ZygKKyAgICAgICAgdG9BUEkocGFnZSksIDAgLyogY2xpZW50SW5mbyAqLyk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShwYWdlKTsKICAgICByZXR1cm4gMDsKQEAgLTEwNSw3ICsxMjIsOCBAQCBp
bnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSog
cGFnZSkKIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRf
dCB0YWcpCiB7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7CisgICAgVGV4
dENoZWNrZXJDbGllbnRFZmw6Omluc3RhbmNlKCkud2tDbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1l
bnRXaXRoVGFnKAorICAgICAgICB0YWcsIDAgLyogY2xpZW50SW5mbyAqLyk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTSh0YWcpOwogI2VuZGlmCkBAIC0xODYsNyArMjA0LDExIEBAIFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2
NF90IHNwZWxsRG9jdW1lCiB2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmco
aW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVu
Z3RoLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xl
bmd0aCkKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hh
cmVkKCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBT
dHJpbmcodGV4dCwgbGVuZ3RoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5n
dGgpOworICAgIFRleHRDaGVja2VyQ2xpZW50RWZsOjppbnN0YW5jZSgpLndrQ2xpZW50KCkuY2hl
Y2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsCisgICAgICAgIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKFN0cmluZyh0ZXh0LCBsZW5ndGgpLnV0ZjgoKS5kYXRhKCkpLAor
ICAgICAgICAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoLAorICAgICAg
ICAwIC8qIGNsaWVudEluZm8gKi8pOworCiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzcGVsbERv
Y3VtZW50VGFnKTsKICAgICBVTlVTRURfUEFSQU0odGV4dCk7CkBAIC0yMjUsNyArMjQ3LDE1IEBA
IHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhpbnQ2
NF90LCBjb25zdCBTdHJpbmcmLCBjb25zCiB2b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9y
V29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3Qg
U3RyaW5nJiAsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewogI2lmIEVOQUJMRShTUEVMTENI
RUNLKQotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuZ3Vlc3Nlc0Zvcldv
cmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7CisgICAgV0tBcnJheVJlZiBzdWdn
ZXN0aW9ucyA9IFRleHRDaGVja2VyQ2xpZW50RWZsOjppbnN0YW5jZSgpLndrQ2xpZW50KCkuZ3Vl
c3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZywKKyAgICAgICAgV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcod29yZC51dGY4KCkuZGF0YSgpKSwgMCAvKiBjbGllbnRJbmZvICovKTsKKwor
ICAgIHNpemVfdCBhcnJheVNpemUgPSBXS0FycmF5R2V0U2l6ZShzdWdnZXN0aW9ucyk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5U2l6ZTsgKytpKSB7CisgICAgICAgIFdLVHlw
ZVJlZiBzdWdnZXN0aW9uID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KHN1Z2dlc3Rpb25zLCBpKTsK
KyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKHN1Z2dlc3Rpb24pID09IFdLU3RyaW5nR2V0VHlw
ZUlEKCkpOworICAgICAgICBndWVzc2VzLmFwcGVuZCh0b0ltcGwoc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KHN1Z2dlc3Rpb24pKS0+c3RyaW5nKCkpOworICAgIH0KICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOwogICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsKQEAgLTIz
Niw3ICsyNjYsOSBAQCB2b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZAogdm9pZCBUZXh0Q2hlY2tlcjo6
bGVhcm5Xb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQog
ewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+
Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworICAgIFRleHRDaGVj
a2VyQ2xpZW50RWZsOjppbnN0YW5jZSgpLndrQ2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1l
bnRUYWcsCisgICAgICAgIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHdvcmQudXRmOCgp
LmRhdGEoKSksCisgICAgICAgIDAgLyogY2xpZW50SW5mbyAqLyk7CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKICAgICBVTlVTRURfUEFSQU0od29yZCk7CkBAIC0y
NDYsNyArMjc4LDkgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qgc3BlbGxE
b2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogdm9pZCBUZXh0Q2hlY2tlcjo6aWdub3Jl
V29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsKICNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLmlnbm9yZVdvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CisgICAgVGV4dENoZWNrZXJD
bGllbnRFZmw6Omluc3RhbmNlKCkud2tDbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRU
YWcsCisgICAgICAgIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHdvcmQudXRmOCgpLmRh
dGEoKSksCisgICAgICAgIDAgLyogY2xpZW50SW5mbyAqLyk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShzcGVsbERvY3VtZW50VGFnKTsKICAgICBVTlVTRURfUEFSQU0od29yZCk7CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDczNDhmZi4uYWE3
NmE4MCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDEzLTA0LTExICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFq
a293c2tpQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gVGV4dCBDaGVja2VyJ3Mg
c2V0dGluZ3MgcmVmYWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMTcxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogTWluaUJyb3dzZXIvZWZsL21haW4uYzoKKyAgICAgICAgKHdpbmRvd19jcmVh
dGUpOgorICAgICAgICBVc2UgYSBuZXcgdGV4dCBjaGVja2VyIEFQSSB0byBlbmFibGUgc3BlbGwg
Y2hlY2tpbmcuCisKIDIwMTMtMDQtMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUmVtb3ZlIGNvZGUgZm9yIENocm9taXVtIGZyb20gd2tidWlsZC5weQpkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2Vy
L2VmbC9tYWluLmMKaW5kZXggODAyZDUxOC4uZGQzZGJmZSAxMDA2NDQKLS0tIGEvVG9vbHMvTWlu
aUJyb3dzZXIvZWZsL21haW4uYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCkBA
IC0xNDUxLDcgKzE0NTEsNyBAQCBzdGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUo
RXZhc19PYmplY3QgKm9wZW5lciwgY29uc3QgY2hhciAqdXJsLCBpbnQgdwogICAgIGVsbV93aW5f
ZnVsbHNjcmVlbl9zZXQod2luZG93LT5lbG1fd2luZG93LCBmdWxsc2NyZWVuX2VuYWJsZWQpOwog
ICAgIGV3a19zZXR0aW5nc19kZXZlbG9wZXJfZXh0cmFzX2VuYWJsZWRfc2V0KHNldHRpbmdzLCBF
SU5BX1RSVUUpOwogICAgIGV3a19zZXR0aW5nc19wcmVmZXJyZWRfbWluaW11bV9jb250ZW50c193
aWR0aF9zZXQoc2V0dGluZ3MsIDApOwotICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX2VuYWJsZWRfc2V0KHNwZWxsX2NoZWNraW5nX2VuYWJsZWQpOworICAgIGV3a190
ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChzcGVsbF9j
aGVja2luZ19lbmFibGVkKTsKIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3
aW5kb3ctPmV3a192aWV3LCAiYXV0aGVudGljYXRpb24scmVxdWVzdCIsIG9uX2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3QsIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KHdpbmRvdy0+ZXdrX3ZpZXcsICJkb3dubG9hZCxmYWlsZWQiLCBvbl9kb3dubG9hZF9mYWlsZWQs
IHdpbmRvdyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198270</attachid>
            <date>2013-04-16 00:38:10 -0700</date>
            <delta_ts>2013-04-17 06:20:51 -0700</delta_ts>
            <desc>apply Mikhail&apos;s comments</desc>
            <filename>spelling-settings-refactor.patch</filename>
            <type>text/plain</type>
            <size>59541</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhYTc3ZDYxLi5jNThmNGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI0
IEBACisyMDEzLTA0LTE1ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gVGV4dCBDaGVja2VyJ3Mgc2V0dGluZ3MgcmVm
YWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MTcxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVz
ZSBXSzIncyBUZXh0Q2hlY2tlclN0YXRlIG9iamVjdCBhcyB0aGUgc3RvcmUgZm9yIHRoZSB0ZXh0
IGNoZWNrZXIgc2V0dGluZ3MuCisgICAgICAgIEl0J3Mgc2hhcmVkIGJldHdlZW4gdGhlIGNsaWVu
dCAoRXdrIEFQSSBwYXJ0KSBhbmQgV2ViUHJvY2VzcyAocmVhZCBvbmx5KS4KKyAgICAgICAgVGhh
bmtzIHRvIGl0LCB3ZSBkb24ndCBoYXZlIHRvIGtlZXAgYW55IGFkZGl0aW9uYWwgc3RydWN0dXJl
IHdpdGgKKyAgICAgICAgdGhlIHNldHRpbmdzIG9uIGV3ayBzaWRlLgorCisgICAgICAgIEluIHRo
ZSBjb25zaXN0ZW5jeSB3aXRoIFdLVGV4dENoZWNrZXIgQyBBUEksIG1vdmUgdGhlIEV3aydzIHRl
eHQgY2hlY2tlciBzZXR0aW5ncyBBUElzCisgICAgICAgIHRvIHRoZSBld2tfdGV4dF9jaGVja2Vy
LmgvY3BwLiBUaGV5J3JlIG5vdCBjb25uZWN0ZWQgdG8gRXdrX1ZpZXcvRXdrX1NldHRpbmdzIG9i
amVjdCB0bworICAgICAgICBrZWVwIHRoZW0gaW4gZXdrX3NldHRpbmcuaC9jcHAuCisKKyAgICAg
ICAgSW50cm9kdWNlIGEgbmV3IGNsYXNzIHRvIGltcGxlbWVudCBXS1RleHRDaGVja2VyQ2xpZW50
IGNhbGxiYWNrcyB0byBjYWxsIHNwZWxsaW5nCisgICAgICAgIG1ldGhvZHMgdGhyb3VnaCBXSzIg
QyBBUEkuCisgICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2UgaXMgdG8gZGV0
YWNoIHRleHQgY2hlY2tlciBpbml0aWFsaXphdGlvbiBmcm9tIGV3a19jb250ZXh0LgorCisgICAg
ICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBhIG5ldyBmaWxlcyB0byB0aGUg
YnVpbGQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6Cisg
ICAgICAgIChFd2tDb250ZXh0OjpFd2tDb250ZXh0KToKKyAgICAgICAgRGV0YWNoIHRoZSB0ZXh0
IGNoZWNrZXIgaW5pdGlhbGl6YXRpb24gZnJvbSBjb250ZXh0LgorICAgICAgICBUaGVyZSBtaWdo
dCBiZSBtb3JlIHRoYW4gZGVmYXVsdCBjb250ZXh0LgorICAgICAgICBUaGVyZSBpcyBvbmUgdGV4
dCBjaGVja2VyIG9iamVjdCBwZXIgYXBwbGljYXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19zZXR0aW5ncy5oOgorICAgICAgICBSZW1vdmUgdGhlIHRleHQgY2hlY2tlciBzZXR0aW5ncy4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwOgorICAg
ICAgICBBZGQgdGhlIHRleHQgY2hlY2tlciBzZXR0aW5ncyB0byB0aGUgZXdrX3RleHRfY2hlY2tl
ci5oL2NwcAorCisgICAgICAgIChjb252ZXJ0TGFuZ3VhZ2VzVG9FaW5hTGlzdCk6CisgICAgICAg
IEFkZCBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBWZWN0b3IncyB2YWx1ZXMgdG8gRWluYV9M
aXN0LgorCisgICAgICAgIChjbGllbnRDYWxsYmFja3MpOgorICAgICAgICBBZGQgdGhlIGNsaWVu
dCBjYWxsYmFjayByZXNwb25zaWJsZSBmb3IgdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcK
KyAgICAgICAgc2V0dGluZyBjaGFuZ2UgdG8gdGhlIHN0cnVjdC4KKworICAgICAgICAoZXdrX3Rl
eHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KToKKyAgICAg
ICAgKGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19n
ZXQpOgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNf
c2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
X2dldCk6CisgICAgICAgIE1vdmUgQVBJcyBmcm9tIGV3a19zZXR0aW5ncy5oL2NwcCB0byB0aGUg
ZXdrX3RleHRfY2hlY2tlci5oL2NwcC4KKworICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KToKKyAgICAgICAgRG8gbm90IGNhbGwg
dGhlIGNsaWVudCdzIGNhbGxiYWNrIHJlc3BvbnNpYmxlIGZvciB0aGUgc2V0dGluZworICAgICAg
ICBjaGFuZ2UgdW5sZXNzIFdlYktpdCBjaGFuZ2VzIHRoZSBzZXR0aW5nICh0cm91Z2ggdGhlIGNv
bnRleHQKKyAgICAgICAgJ0NoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZycgb3B0aW9uKS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaDoKKyAgICAgICAg
QWRqdXN0IEFQSXMgbmFtZSB0byB0aGUgZXdrX3RleHRfY2hlY2tlciBzeW50YXguCisgICAgICAg
IFVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGNoYW5nZXMuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaDoKKyAg
ICAgICAgKENsaWVudENhbGxiYWNrcyk6CisgICAgICAgIE1vdmUgQ2xpZW50Q2FsbGJhY2tzIHN0
cnVjdHVyZSB0byBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaC4KKyAgICAgICAgVGhlIGNsaWVu
dCBjYWxsYmFja3MgKEV3ayBBUEkpIGhhdmUgdG8gYmUgYWNjZXNzaWJsZSBpbiBXS1RleHRDaGVj
a2VyQ2xpZW50IGNhbGxiYWNrcworICAgICAgICB0byBjaG9vc2Ugd2hhdCBpbXBsZW1lbnRhdGlv
biB3aWxsIGJlIHVzZWQgLSB0aGUgY2xpZW50J3MgKGlmIGRlZmluaWVkKSBvciBFbmNoYW50IGlt
cGwuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9j
aGVja2VyLmNwcDoKKyAgICAgICAgVXBkYXRlIHRoZSB1bml0IHRlc3RzIGFjY29yZGluZyB0byB0
aGUgQVBJcyBjaGFuZ2UuCisgICAgICAgIFVwZGF0ZSB0aGUgdGVzdCByZXNwb25zaWJsZSBmb3Ig
dGhlIG5vdGlmaWNhdGlvbiBhYm91dCB0aGUgc2V0dGluZyBjaGFuZ2UKKyAgICAgICAgYWNjb3Jk
aW5nIHRvIGNoYW5nZXMgaW4gJ2V3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19lbmFibGVkX3NldCcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2Vy
Q2xpZW50RWZsLmNwcDogQWRkZWQuCisgICAgICAgIEltcGxlbWVudCBXS1RleHRDaGVja2VyQ2xp
ZW50IGNhbGxiYWNrcy4KKworICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmw6OlRleHRDaGVj
a2VyQ2xpZW50RWZsKToKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZsOjppbnN0YW5jZSk6
CisgICAgICAgIEFsbG93IHRvIGdldCBhbmQgY3JlYXRlIFRleHRDaGVja2VyQ2xpZW50RWZsIG9i
amVjdC4KKworICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmw6OmVuc3VyZVNwZWxsQ2hlY2tp
bmdMYW5ndWFnZSk6CisgICAgICAgIExvYWQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2VzIGlmIHVzZXIg
ZGlkbid0IHNwZWNpZnkgYW55LgorCisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6dXBk
YXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVm
bDo6bGFuZ3VhZ2VzVXBkYXRlVGltZXJGaXJlZCk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVu
dEVmbDo6YXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChUZXh0Q2hl
Y2tlckNsaWVudEVmbDo6bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChU
ZXh0Q2hlY2tlckNsaWVudEVmbDo6YXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6Cisg
ICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdl
cyk6CisgICAgICAgIFByb3ZpZGUgc3VwcG9ydCBmb3IgbGFuZ3VhZ2VzLgorCisgICAgICAgIChU
ZXh0Q2hlY2tlckNsaWVudEVmbDo6c3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1lckZpcmVk
KToKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZsOjpjYWxsQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdDaGFuZ2VDYWxsYmFja0FzeW5jKToKKyAgICAgICAgTm90aWZ5IHRoZSBjbGllbnQgYWJv
dXQgdGhlIHNldHRpbmcgY2hhbmdlLgorCisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoVGV4dENoZWNrZXJD
bGllbnRFZmw6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChU
ZXh0Q2hlY2tlckNsaWVudEVmbDo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6CisgICAgICAgIChU
ZXh0Q2hlY2tlckNsaWVudEVmbDo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyk6CisgICAgICAg
IChUZXh0Q2hlY2tlckNsaWVudEVmbDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAg
KFRleHRDaGVja2VyQ2xpZW50RWZsOjpndWVzc2VzRm9yV29yZCk6CisgICAgICAgIChUZXh0Q2hl
Y2tlckNsaWVudEVmbDo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZs
OjppZ25vcmVXb3JkKToKKyAgICAgICAgV0tUZXh0Q2hlY2tlckNsaWVudCBjYWxsYmFja3MgaW1w
bGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyQ2xpZW50
RWZsLmg6IEFkZGVkLgorICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmwpOgorICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlckNsaWVudEVmbDo6d2tDbGllbnQpOgorICAgICAgICBSZXR1cm4g
dGhlIFdLVGV4dENoZWNrZXJDbGllbnQgb2JqZWN0IHRvIGJlIHVzZWQgaW4gZXdrX3RleHRfY2hl
Y2tlci5jcHAgYW5kCisgICAgICAgIFRleHRDaGVja2VyQ2xpZW50RWZsLmNwcC4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpU
ZXh0Q2hlY2tlcjo6c3RhdGUpOgorICAgICAgICBJbml0aWFsaXplIHRoZSBUZXh0Q2hlY2tlcidz
IG1lbWJlcnMgdG8gZmFsc2UuCisKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldENv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIFNldCB0aGUgZGVmYXVsdCBs
YW5ndWFnZSBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4KKyAgICAgICAgTm90aWZ5IHRoZSBj
bGllbnQgYWJvdXQgdGhlIHNldHRpbmcgY2hhbmdlLgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBj
YWxsZWQgd2hlbiBjb250ZXh0IG1lbnUgJ0NoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZycKKyAg
ICAgICAgb3B0aW9uIGhhcyBiZWVuIHRvZ2dsZWQuCisKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIFNldCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4K
KyAgICAgICAgQ2FsbGVkIGJ5IFdLVGV4dENoZWNrZXIncyBBUEkuCisKIDIwMTMtMDQtMTUgIE1p
Y2hhxYIgUGFrdcWCYSB2ZWwgUnV0a2EgIDxtLnBha3VsYUBzYW1zdW5nLmNvbT4KIAogICAgICAg
ICBbRUZMXVtXSzJdIFVzZSBDIEFQSSBpbiBld2tfY29udGV4dF9tZW51CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCmluZGV4IDRmM2FiMTkuLjAxYzVmNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xMDcsNiArMTA3LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
VUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9QYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvUmVxdWVz
dE1hbmFnZXJDbGllbnRFZmwuY3BwCisgICAgVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckNsaWVu
dEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAogICAgIFVJUHJv
Y2Vzcy9lZmwvVmlicmF0aW9uQ2xpZW50RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvVmlld0Ns
aWVudEVmbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmNwcAppbmRleCA1NzBkNGJmLi41ZmRkY2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC00NCwxMSArNDQsNiBAQAog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKLSNp
bmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKLSNlbmRpZgotCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKQEAgLTg2LDE0ICs4MSw2
IEBAIEV3a0NvbnRleHQ6OkV3a0NvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgICAg
IGluaXRpYWxpemVNZW1vcnlTYW1wbGVyID0gdHJ1ZTsKICAgICB9CiAjZW5kaWYKLQotI2lmIEVO
QUJMRShTUEVMTENIRUNLKQotICAgIEV3a19UZXh0X0NoZWNrZXI6OmluaXRpYWxpemUoKTsKLSAg
ICBpZiAoZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQo
KSkgewotICAgICAgICAvLyBMb2FkIHRoZSBkZWZhdWx0IGxhbmd1YWdlLgotICAgICAgICBld2tf
c2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldCgwKTsKLSAgICB9Ci0jZW5kaWYK
IH0KIAogRXdrQ29udGV4dDo6fkV3a0NvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKaW5kZXggM2Q0MzRkZjEuLjIxYjRiYmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5n
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdz
LmNwcApAQCAtMzMsMTQgKzMzLDYgQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dlYlBhZ2VQcm94eS5o
PgogI2luY2x1ZGUgPFdlYktpdDIvV2ViUHJlZmVyZW5jZXMuaD4KIAotI2lmIEVOQUJMRShTUEVM
TENIRUNLKQotI2luY2x1ZGUgIldLVGV4dENoZWNrZXIuaCIKLSNpbmNsdWRlICJld2tfdGV4dF9j
aGVja2VyX3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxFY29yZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jZW5kaWYKLQogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKIAogY29uc3QgV2ViS2l0OjpXZWJQcmVmZXJlbmNlcyogRXdrU2V0dGlu
Z3M6OnByZWZlcmVuY2VzKCkgY29uc3QKQEAgLTUzLDM1ICs0NSw2IEBAIFdlYktpdDo6V2ViUHJl
ZmVyZW5jZXMqIEV3a1NldHRpbmdzOjpwcmVmZXJlbmNlcygpCiAgICAgcmV0dXJuIG1fdmlldy0+
cGFnZSgpLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKIH0KIAotI2lmIEVOQUJMRShTUEVM
TENIRUNLKQotc3RhdGljIHN0cnVjdCB7Ci0gICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCA6IDE7Ci0gICAgVmVjdG9yPFN0cmluZz4gc3BlbGxDaGVja2luZ0xhbmd1YWdl
czsKLSAgICBFd2tfU2V0dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2Ig
b25Db250aW51b3VzU3BlbGxDaGVja2luZzsKLX0gZXdrVGV4dENoZWNrZXJTZXR0aW5ncyA9IHsg
ZmFsc2UsIFZlY3RvcjxTdHJpbmc+KCksIDAgfTsKLQotc3RhdGljIEVpbmFfQm9vbCBvbkNvbnRp
bnVvdXNTcGVsbENoZWNraW5nSWRsZXIodm9pZCopCi17Ci0gICAgaWYgKGV3a1RleHRDaGVja2Vy
U2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxDaGVja2luZykKLSAgICAgICAgZXdrVGV4dENoZWNr
ZXJTZXR0aW5ncy5vbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nKGV3a1RleHRDaGVja2VyU2V0dGlu
Z3MuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOwotCi0gICAgcmV0dXJuIEVDT1JF
X0NBTExCQUNLX0NBTkNFTDsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBzcGVsbENoZWNraW5nTGFu
Z3VhZ2VzU2V0VXBkYXRlKHZvaWQqKQotewotICAgIC8vIEZJWE1FOiBDb25zaWRlciB0byBkZWxl
Z2F0ZSBjYWxsaW5nIG9mIHRoaXMgbWV0aG9kIGluIFdlYlByb2Nlc3MgdG8gZG8gbm90IGRlbGF5
L2Jsb2NrIFVJUHJvY2Vzcy4KLSAgICBFd2tfVGV4dF9DaGVja2VyOjp1cGRhdGVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKGV3a1RleHRDaGVja2VyU2V0dGluZ3Muc3BlbGxDaGVja2luZ0xhbmd1YWdl
cyk7Ci0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKLX0KLQotc3RhdGljIHZvaWQg
c3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbmV3TGFuZ3Vh
Z2VzKQotewotICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3Muc3BlbGxDaGVja2luZ0xhbmd1YWdl
cyA9IG5ld0xhbmd1YWdlczsKLSAgICBlY29yZV9pZGxlcl9hZGQoc3BlbGxDaGVja2luZ0xhbmd1
YWdlc1NldFVwZGF0ZSwgMCk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCi0KIEVp
bmFfQm9vbCBld2tfc2V0dGluZ3NfZnVsbHNjcmVlbl9lbmFibGVkX3NldChFd2tfU2V0dGluZ3Mq
IHNldHRpbmdzLCBFaW5hX0Jvb2wgZW5hYmxlKQogewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKQEAgLTIwMiw3OCArMTY1LDYgQEAgRWluYV9Cb29sIGV3a19zZXR0aW5nc19kbnNfcHJlZmV0
Y2hpbmdfZW5hYmxlZF9nZXQoY29uc3QgRXdrX1NldHRpbmdzKiBzZXR0aW5ncykKICAgICByZXR1
cm4gc2V0dGluZ3MtPnByZWZlcmVuY2VzKCktPmRuc1ByZWZldGNoaW5nRW5hYmxlZCgpOwogfQog
Ci12b2lkIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9z
ZXQoRXdrX1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIGNhbGxi
YWNrKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIGV3a1RleHRDaGVja2VyU2V0dGlu
Z3Mub25Db250aW51b3VzU3BlbGxDaGVja2luZyA9IGNhbGxiYWNrOwotI2VuZGlmCi19Ci0KLUVp
bmFfQm9vbCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dl
dCgpCi17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgcmV0dXJuIGV3a1RleHRDaGVja2Vy
U2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7Ci0jZWxzZQotICAgIHJl
dHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi12b2lkIGV3a19zZXR0aW5nc19jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KEVpbmFfQm9vbCBlbmFibGUpCi17Ci0jaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCi0gICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKGV3a1RleHRDaGVj
a2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgIT0gZW5hYmxlKSB7
Ci0gICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQgPSBlbmFibGU7Ci0KLSAgICAgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGUpOwotCi0gICAgICAgIC8vIFNldHMg
dGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaWYgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhbnkuCi0gICAgICAg
IGlmIChlbmFibGUgJiYgIUV3a19UZXh0X0NoZWNrZXI6Omhhc0RpY3Rpb25hcnkoKSkKLSAgICAg
ICAgICAgIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQoVmVjdG9yPFN0cmluZz4oKSk7Ci0KLSAg
ICAgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxDaGVja2lu
ZykKLSAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChvbkNvbnRpbnVvdXNTcGVsbENoZWNraW5n
SWRsZXIsIDApOwotICAgIH0KLSNlbmRpZgotfQotCi1FaW5hX0xpc3QqIGV3a19zZXR0aW5nc19z
cGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldCgpCi17Ci0gICAgRWluYV9MaXN0
KiBsaXN0T2ZsYW5ndWFnZXMgPSAwOwotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMgPSBFd2tfVGV4dF9DaGVja2VyOjphdmFpbGFibGVT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci0gICAgc2l6ZV90IG51bWJlck9mTGFudWFnZXMgPSBs
YW5ndWFnZXMuc2l6ZSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkxh
bnVhZ2VzOyArK2kpCi0gICAgICAgIGxpc3RPZmxhbmd1YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQo
bGlzdE9mbGFuZ3VhZ2VzLCBlaW5hX3N0cmluZ3NoYXJlX2FkZChsYW5ndWFnZXNbaV0udXRmOCgp
LmRhdGEoKSkpOwotI2VuZGlmCi0gICAgcmV0dXJuIGxpc3RPZmxhbmd1YWdlczsKLX0KLQotdm9p
ZCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChjb25zdCBjaGFyKiBs
YW5ndWFnZXMpCi17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgVmVjdG9yPFN0cmluZz4g
bmV3TGFuZ3VhZ2VzOwotICAgIFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2VzKS5zcGxpdCgnLCcs
IG5ld0xhbmd1YWdlcyk7Ci0KLSAgICBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KG5ld0xhbmd1
YWdlcyk7Ci0jZW5kaWYKLX0KLQotRWluYV9MaXN0KiBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzX2dldCgpCi17Ci0gICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMgPSAw
OwotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcyA9
IEV3a19UZXh0X0NoZWNrZXI6OmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKLSAgICBz
aXplX3QgbnVtYmVyT2ZMYW51YWdlcyA9IGxhbmd1YWdlcy5zaXplKCk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bWJlck9mTGFudWFnZXM7ICsraSkKLSAgICAgICAgbGlzdE9mbGFu
Z3VhZ2VzID0gZWluYV9saXN0X2FwcGVuZChsaXN0T2ZsYW5ndWFnZXMsIGVpbmFfc3RyaW5nc2hh
cmVfYWRkKGxhbmd1YWdlc1tpXS51dGY4KCkuZGF0YSgpKSk7Ci0KLSNlbmRpZgotICAgIHJldHVy
biBsaXN0T2ZsYW5ndWFnZXM7Ci19Ci0KIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfZW5jb2Rpbmdf
ZGV0ZWN0b3JfZW5hYmxlZF9zZXQoRXdrX1NldHRpbmdzKiBzZXR0aW5ncywgRWluYV9Cb29sIGVu
YWJsZSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2V0dGluZ3MsIGZh
bHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19z
ZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdz
LmgKaW5kZXggN2VhNzI1Yy4uODMxYzUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgKQEAgLTQzLDE0ICs0Myw2IEBAIGV4dGVybiAiQyIg
ewogLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3a19TZXR0aW5ncyAqLwogdHlwZWRlZiBz
dHJ1Y3QgRXdrU2V0dGluZ3MgRXdrX1NldHRpbmdzOwogCi0vKioKLSAqIENyZWF0ZXMgYSB0eXBl
IG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50
IHdoZW4KLSAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5n
ZWQgYnkgV2ViS2l0LgotICoKLSAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIGlmIGNvbnRp
bnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3Mg
ZGlzYWJsZWQKLSAqLwotdHlwZWRlZiB2b2lkICgqRXdrX1NldHRpbmdzX0NvbnRpbnVvdXNfU3Bl
bGxfQ2hlY2tpbmdfQ2hhbmdlX0NiKShFaW5hX0Jvb2wgZW5hYmxlKTsKLQogCiAvKioKICAqIEVu
YWJsZXMvZGlzYWJsZXMgdGhlIEphdmFzY3JpcHQgRnVsbHNjcmVlbiBBUEkuIFRoZSBKYXZhc2Ny
aXB0IEFQSSBhbGxvd3MKQEAgLTIyOSw3NiArMjIxLDYgQEAgRUFQSSBFaW5hX0Jvb2wgZXdrX3Nl
dHRpbmdzX2Ruc19wcmVmZXRjaGluZ19lbmFibGVkX3NldChFd2tfU2V0dGluZ3MgKnNldHRpbmdz
LAogRUFQSSBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2Ruc19wcmVmZXRjaGluZ19lbmFibGVkX2dl
dChjb25zdCBFd2tfU2V0dGluZ3MgKnNldHRpbmdzKTsKIAogLyoqCi0gKiBTZXRzIGEgY2FsbGJh
Y2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuCi0gKiB0aGUgY29udGlu
dW91cyBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KLSAqCi0g
KiBTcGVjaWZ5aW5nIG9mIHRoaXMgY2FsbGJhY2sgaXMgbmVlZGVkIGlmIHRoZSBhcHBsaWNhdGlv
biB3YW50cyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMKLSAqIG9uY2UgV2ViS2l0IGNoYW5nZXMg
dGhpcyBzZXR0aW5nLgotICogSWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBpbnRlcmVzdGVkLCB0
aGlzIGNhbGxiYWNrIGlzIG5vdCBzZXQuCi0gKiBDaGFuZ2luZyBvZiB0aGlzIHNldHRpbmcgYXQg
dGhlIFdlYktpdCBsZXZlbCBjYW4gYmUgbWFkZSBhcyBhIHJlc3VsdCBvZiBtb2RpZnlpbmcKLSAq
IG9wdGlvbnMgaW4gYSBDb250ZXh0IE1lbnUgYnkgYSB1c2VyLgotICoKLSAqIEBwYXJhbSBjYiBh
IG5ldyBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQgb3IgQGMgTlVMTCB0byBpbnZhbGlkYXRlIHRo
ZSBwcmV2aW91cyBvbmUKLSAqLwotRUFQSSB2b2lkIGV3a19zZXR0aW5nc19jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQoRXdrX1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxf
Q2hlY2tpbmdfQ2hhbmdlX0NiIGNiKTsKLQotLyoqCi0gKiBRdWVyaWVzIGlmIGNvbnRpbnVvdXMg
c3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZC4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBp
ZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBp
ZiBpdCdzIGRpc2FibGVkCi0gKi8KLUVBUEkgRWluYV9Cb29sIGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KHZvaWQpOwotCi0vKioKLSAqIEVuYWJsZXMv
ZGlzYWJsZXMgY29udGludW91cyBzcGVsbCBjaGVja2luZy4KLSAqCi0gKiBBZGRpdGlvbmFsbHks
IHRoaXMgZnVuY3Rpb24gY2FsbHMgYSBjYWxsYmFjayBmdW5jdGlvbiAoaWYgZGVmaW5lZCkgdG8g
bm90aWZ5Ci0gKiB0aGUgY2xpZW50IGFib3V0IHRoZSBjaGFuZ2Ugb2YgdGhlIHNldHRpbmcuCi0g
KiBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAqCi0gKiBAc2VlIGV3a19z
ZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQKLSAqCi0gKiBA
cGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSB0byBlbmFibGUgY29udGludW91cyBzcGVsbCBjaGVj
a2luZyBvciBAYyBFSU5BX0ZBTFNFIHRvIGRpc2FibGUKLSAqLwotRUFQSSB2b2lkIGV3a19zZXR0
aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KEVpbmFfQm9vbCBlbmFi
bGUpOwotCi0vKioKLSAqIEdldHMgdGhlIHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgdGhlIHNw
ZWxsIGNoZWNraW5nIGxhbmd1YWdlcyB0byB1c2UuCi0gKgotICogQHNlZSBld2tfc2V0dGluZ3Nf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldAotICoKLSAqIEByZXR1cm4gdGhlIGxpc3Qgd2l0
aCBhdmFpbGFibGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzLCBvciBAYyBOVUxMIG9uIGZhaWx1
cmUKLSAqICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVl
ZCBhZnRlciwgdXNlIGVpbmFfc3RyaW5nc2hhcmVfZGVsKCkKLSAqLwotRUFQSSBFaW5hX0xpc3Qg
KmV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldCh2b2lk
KTsKLQotLyoqCi0gKiBTZXRzIEBhIGxhbmd1YWdlcyBhcyB0aGUgbGlzdCBvZiBsYW5ndWFnZXMg
dG8gdXNlIGJ5IGRlZmF1bHQgV2ViS2l0Ci0gKiBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNr
ZXIgZmVhdHVyZSB3aXRoIEVuY2hhbnQgbGlicmFyeSBzdXBwb3J0LgotICoKLSAqIElmIEBsYW5n
dWFnZXMgaXMgQGMgTlVMTCwgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgdXNlZC4KLSAqIElmIHRo
ZSBkZWZhdWx0IGxhbmd1YWdlIGNhbiBub3QgYmUgZGV0ZXJtaW5lZCB0aGVuIGFueSBhdmFpbGFi
bGUgZGljdGlvbmFyeSB3aWxsIGJlIHVzZWQuCi0gKgotICogQG5vdGUgVGhpcyBmdW5jdGlvbiBp
bnZhbGlkYXRlcyB0aGUgcHJldmlvdXNseSBzZXQgbGFuZ3VhZ2VzLgotICogICAgICAgVGhlIGRp
Y3Rpb25hcmllcyBhcmUgcmVxdWVzdGVkIGFzeW5jaHJvbm91c2x5LgotICoKLSAqIEBwYXJhbSBs
YW5ndWFnZXMgYSBsaXN0IG9mIGNvbW1hICgnLCcpIHNlcGFyYXRlZCBsYW5ndWFnZSBjb2Rlcwot
ICogICAgICAgIG9mIHRoZSBmb3JtICdlbl9VUycsIGllLCBsYW5ndWFnZV9WQVJJQU5ULCBtYXkg
YmUgQGMgTlVMTC4KLSAqLwotRUFQSSB2b2lkIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19s
YW5ndWFnZXNfc2V0KGNvbnN0IGNoYXIgKmxhbmd1YWdlcyk7Ci0KLS8qKgotICogR2V0cyB0aGUg
dGhlIGxpc3Qgb2YgdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1c2UuCi0gKgotICog
QHNlZSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQK
LSAqIEBzZWUgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQKLSAqCi0g
KiBAcmV0dXJuIHRoZSBsaXN0IHdpdGggdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1
c2UsCi0gKiAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJl
ZWQgYWZ0ZXIsIHVzZSBlaW5hX3N0cmluZ3NoYXJlX2RlbCgpCi0gKi8KLUVBUEkgRWluYV9MaXN0
ICpld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCh2b2lkKTsKLQotLyoq
CiAgKiBFbmFibGVzL2Rpc2FibGVzIHRoZSBlbmNvZGluZyBkZXRlY3Rvci4KICAqCiAgKiBCeSBk
ZWZhdWx0LCB0aGUgZW5jb2RpbmcgZGV0ZWN0b3IgaXMgZGlzYWJsZWQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCmluZGV4
IDM4NmNhNzguLjI1ZDAwZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwg
Q29ycG9yYXRpb24KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI4LDIwMiArMjgsMTAxIEBACiAjaW5j
bHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgogCiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0KLSNp
bmNsdWRlICJFd2tWaWV3LmgiCi0jaW5jbHVkZSAiVGV4dENoZWNrZXJFbmNoYW50LmgiCi0jaW5j
bHVkZSAiV0tBUElDYXN0LmgiCi0jaW5jbHVkZSAiV0tFaW5hU2hhcmVkU3RyaW5nLmgiCi0jaW5j
bHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKLSNpbmNsdWRlICJXS1JldGFpblB0ci5oIgotI2luY2x1
ZGUgIldLU3RyaW5nLmgiCi0jaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgotI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRleHRD
aGVja2VyQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgi
Ci0jaW5jbHVkZSA8RWluYS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNlbHNlCisjaW5j
bHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjZW5kaWYgLy8gU1BFTExDSEVDSworCisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKIAotLyoqCi0gKiBAYnJpZWYgU3RydWN0dXJlIHRvIHN0b3JlIGNsaWVudCBj
YWxsYmFjayBmdW5jdGlvbnMuCi0gKgotICogQGludGVybmFsCi0gKi8KLXN0cnVjdCBDbGllbnRD
YWxsYmFja3MgewotICAgIEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1Rh
Z19HZXRfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQ7Ci0gICAgRXdrX1RleHRfQ2hl
Y2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlX0NiIHVuaXF1ZV9zcGVsbF9kb2N1
bWVudF90YWdfY2xvc2U7Ci0gICAgRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hl
Y2tfQ2Igc3RyaW5nX3NwZWxsaW5nX2NoZWNrOwotICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9H
dWVzc2VzX0dldF9DYiB3b3JkX2d1ZXNzZXNfZ2V0OwotICAgIEV3a19UZXh0X0NoZWNrZXJfV29y
ZF9MZWFybl9DYiB3b3JkX2xlYXJuOwotICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmVf
Q2Igd29yZF9pZ25vcmU7Ci19OwotCi1zdGF0aWMgaW5saW5lIFRleHRDaGVja2VyRW5jaGFudCog
dGV4dENoZWNrZXJFbmNoYW50KCkKLXsKLSAgICBzdGF0aWMgT3duUHRyPFRleHRDaGVja2VyRW5j
aGFudD4gdGV4dENoZWNrZXJFbmNoYW50ID0gVGV4dENoZWNrZXJFbmNoYW50OjpjcmVhdGUoKTsK
LSAgICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50LmdldCgpOwotfQotCi1zdGF0aWMgaW5saW5l
IENsaWVudENhbGxiYWNrcyYgY2xpZW50Q2FsbGJhY2tzKCkKLXsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKENsaWVudENhbGxiYWNrcywgY2xpZW50Q2FsbGJhY2tzLCAoKSk7Ci0gICAgcmV0dXJu
IGNsaWVudENhbGxiYWNrczsKLX0KLQotc3RhdGljIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0dXJuIGV3a19zZXR0aW5nc19jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNl
dENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQq
KQorc3RhdGljIEVpbmFfTGlzdCogY29udmVydExhbmd1YWdlc1RvRWluYUxpc3QoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGxhbmd1YWdlcykKIHsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19lbmFibGVkX3NldChlbmFibGVkKTsKLX0KKyAgICBFaW5hX0xpc3QqIGxp
c3RPZmxhbmd1YWdlcyA9IDA7CisgICAgc2l6ZV90IG51bWJlck9mTGFuZ3VhZ2VzID0gbGFuZ3Vh
Z2VzLnNpemUoKTsKIAotc3RhdGljIHVpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV0tQ
YWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQotewotICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS51
bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCkKLSAgICAgICAgcmV0dXJuIGNsaWVudENhbGxi
YWNrcygpLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KEV3a1ZpZXc6OnRvRXZhc09iamVj
dChwYWdlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkxhbmd1YWdlczsg
KytpKQorICAgICAgICBsaXN0T2ZsYW5ndWFnZXMgPSBlaW5hX2xpc3RfYXBwZW5kKGxpc3RPZmxh
bmd1YWdlcywgZWluYV9zdHJpbmdzaGFyZV9hZGQobGFuZ3VhZ2VzW2ldLnV0ZjgoKS5kYXRhKCkp
KTsKIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBsaXN0T2ZsYW5ndWFnZXM7CiB9CiAKLXN0
YXRpYyB2b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodWludDY0X3QgdGFnLCBjb25zdCB2
b2lkKikKK0NsaWVudENhbGxiYWNrcyYgY2xpZW50Q2FsbGJhY2tzKCkKIHsKLSAgICBpZiAoY2xp
ZW50Q2FsbGJhY2tzKCkudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSkKLSAgICAgICAg
Y2xpZW50Q2FsbGJhY2tzKCkudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSh0YWcpOwor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ2xpZW50Q2FsbGJhY2tzLCBjbGllbnRDYWxsYmFja3Ms
ICgpKTsKKyAgICByZXR1cm4gY2xpZW50Q2FsbGJhY2tzOwogfQogCi1zdGF0aWMgdm9pZCBjaGVj
a1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90
KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qg
dm9pZCopCi17Ci0gICAgaWYgKGNsaWVudENhbGxiYWNrcygpLnN0cmluZ19zcGVsbGluZ19jaGVj
aykKLSAgICAgICAgY2xpZW50Q2FsbGJhY2tzKCkuc3RyaW5nX3NwZWxsaW5nX2NoZWNrKHRhZywg
V0tFaW5hU2hhcmVkU3RyaW5nKHRleHQpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGlu
Z0xlbmd0aCk7Ci0gICAgZWxzZQotICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+Y2hlY2tT
cGVsbGluZ09mU3RyaW5nKHRvV1RGU3RyaW5nKHRleHQpLCAqbWlzc3BlbGxpbmdMb2NhdGlvbiwg
Km1pc3NwZWxsaW5nTGVuZ3RoKTsKKyNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19T
RVQoVFlQRV9OQU1FLCBOQU1FKSAgXAordm9pZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2Ni
X3NldChUWVBFX05BTUUgY2IpICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGllbnRDYWxsYmFja3MoKS5OQU1FID0g
Y2I7ICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCi1zdGF0aWMgV0tBcnJheVJlZiBndWVz
c2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQot
ewotICAgIFdLTXV0YWJsZUFycmF5UmVmIHN1Z2dlc3Rpb25zRm9yV29yZCA9IFdLTXV0YWJsZUFy
cmF5Q3JlYXRlKCk7Ci0KLSAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkud29yZF9ndWVzc2VzX2dl
dCkgewotICAgICAgICBFaW5hX0xpc3QqIGxpc3QgPSBjbGllbnRDYWxsYmFja3MoKS53b3JkX2d1
ZXNzZXNfZ2V0KHRhZywgV0tFaW5hU2hhcmVkU3RyaW5nKHdvcmQpKTsKLSAgICAgICAgdm9pZCog
aXRlbTsKLQotICAgICAgICBFSU5BX0xJU1RfRlJFRShsaXN0LCBpdGVtKSB7Ci0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oaXRlbSkpKTsKLSAg
ICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlv
bi5nZXQoKSk7Ci0gICAgICAgICAgICBmcmVlKGl0ZW0pOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMgPSB0ZXh0Q2hlY2tlckVu
Y2hhbnQoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQodG9XVEZTdHJpbmcod29yZCkpOwotICAgICAgICBz
aXplX3QgbnVtYmVyT2ZHdWVzc2VzID0gZ3Vlc3Nlcy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZHdWVzc2VzOyArK2kpIHsKLSAgICAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGd1ZXNzZXNbaV0udXRmOCgpLmRhdGEoKSkpOwotICAgICAgICAgICAgV0tB
cnJheUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9uLmdldCgpKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzdWdnZXN0aW9uc0ZvcldvcmQ7Ci19CisjZWxz
ZQogCi1zdGF0aWMgdm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3Jk
LCBjb25zdCB2b2lkKikKLXsKLSAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkud29yZF9sZWFybikK
LSAgICAgICAgY2xpZW50Q2FsbGJhY2tzKCkud29yZF9sZWFybih0YWcsIFdLRWluYVNoYXJlZFN0
cmluZyh3b3JkKSk7Ci0gICAgZWxzZQotICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+bGVh
cm5Xb3JkKHRvV1RGU3RyaW5nKHdvcmQpKTsKKy8vIERlZmluZXMgYW4gZW1wdHkgQVBJIHRvIGRv
IG5vdCBicmVhayBidWlsZC4KKyNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQo
VFlQRV9OQU1FLCBOQU1FKSAgXAordm9pZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2NiX3Nl
dChUWVBFX05BTUUpICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKIH0KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykK
IAotc3RhdGljIHZvaWQgaWdub3JlV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQs
IGNvbnN0IHZvaWQqKQorRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVs
bF9jaGVja2luZ19lbmFibGVkX2dldCgpCiB7Ci0gICAgaWYgKGNsaWVudENhbGxiYWNrcygpLndv
cmRfaWdub3JlKQotICAgICAgICBjbGllbnRDYWxsYmFja3MoKS53b3JkX2lnbm9yZSh0YWcsIFdL
RWluYVNoYXJlZFN0cmluZyh3b3JkKSk7Ci0gICAgZWxzZQotICAgICAgICB0ZXh0Q2hlY2tlckVu
Y2hhbnQoKS0+aWdub3JlV29yZCh0b1dURlN0cmluZyh3b3JkKSk7CisjaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCisgICAgcmV0dXJuIFRleHRDaGVja2VyQ2xpZW50RWZsOjppbnN0YW5jZSgpLndrQ2xp
ZW50KCkuY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKDAgLyogY2xpZW50SW5mbyAqLyk7
CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCi1uYW1lc3BhY2UgRXdrX1Rl
eHRfQ2hlY2tlciB7Ci0KLVZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMoKQordm9pZCBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdf
ZW5hYmxlZF9zZXQoRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICByZXR1cm4gdGV4dENoZWNrZXJF
bmNoYW50KCktPmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICBXS1RleHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkU3RhdGVDaGFuZ2VkKCEhZW5hYmxlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVuYWJs
ZSk7CisjZW5kaWYKIH0KIAotdm9pZCB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpCitFaW5hX0xpc3QqIGV3a190ZXh0X2NoZWNrZXJf
c3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQoKQogewotICAgIHRleHRDaGVj
a2VyRW5jaGFudCgpLT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Cisg
ICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMgPSAwOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIC8vIEZJWE1FOiBFeHBvc2UgV0syIEMgQVBJIHRvIGdldCBhdmFpbGFibGUgc3BlbGwg
Y2hlY2tpbmcgbGFuZ3VhZ2VzLgorICAgIGxpc3RPZmxhbmd1YWdlcyA9IGNvbnZlcnRMYW5ndWFn
ZXNUb0VpbmFMaXN0KFRleHRDaGVja2VyQ2xpZW50RWZsOjppbnN0YW5jZSgpLmF2YWlsYWJsZVNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gbGlzdE9mbGFuZ3Vh
Z2VzOwogfQogCi1WZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkK
K3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0
IGNoYXIqIGxhbmd1YWdlcykKIHsKLSAgICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50KCktPmxv
YWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKLX0KKyNpZiBFTkFCTEUoU1BFTExDSEVDSykK
KyAgICBWZWN0b3I8U3RyaW5nPiBuZXdMYW5ndWFnZXM7CisgICAgU3RyaW5nOjpmcm9tVVRGOChs
YW5ndWFnZXMpLnNwbGl0KCcsJywgbmV3TGFuZ3VhZ2VzKTsKIAotYm9vbCBoYXNEaWN0aW9uYXJ5
KCkKLXsKLSAgICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50KCktPmhhc0RpY3Rpb25hcnkoKTsK
KyAgICAvLyBGSVhNRTogRXhwb3NlIFdLMiBDIEFQSSB0byBzZXQgc3BlbGwgY2hlY2tpbmcgbGFu
Z3VhZ2VzLgorICAgIFRleHRDaGVja2VyQ2xpZW50RWZsOjppbnN0YW5jZSgpLnVwZGF0ZVNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMobmV3TGFuZ3VhZ2VzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGxhbmd1YWdlcyk7CisjZW5kaWYKIH0KIAotLyoqCi0gKiBJbml0aWFsaXplcyBzcGVsbGNoZWNr
IGZlYXR1cmUuCi0gKgotICogQGludGVybmFsCi0gKgotICogVGhlIGRlZmF1bHQgc3BlbGxjaGVj
ayBmZWF0dXJlIGlzIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KLSAqIENsaWVudCBtYXkgdXNl
IG93biBzcGVsbGNoZWNrIGltcGxlbWVudGF0aW9uIHByZXZpb3VzbHkgc2V0Ci0gKiB0aHJvdWdo
IHRoZSBjYWxsYmFjayBmdW5jdGlvbnMuCi0gKi8KLXZvaWQgaW5pdGlhbGl6ZSgpCitFaW5hX0xp
c3QqIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpCiB7Ci0g
ICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZVRleHRDaGVja2VyQ2xpZW50ID0gZmFsc2U7Ci0g
ICAgaWYgKGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgV0tUZXh0Q2hlY2tlckNsaWVudCB0ZXh0Q2hlY2tlckNsaWVudCA9IHsKLSAgICAgICAg
a1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVyc2lvbiwKLSAgICAgICAgMCwgLy8gY2xpZW50
SW5mbwotICAgICAgICAwLCAvLyBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZAotICAg
ICAgICBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCwKLSAgICAgICAgc2V0Q29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAotICAgICAgICAwLCAvLyBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQKLSAgICAgICAgMCwgLy8gc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZAotICAgICAg
ICB1bmlxdWVTcGVsbERvY3VtZW50VGFnLAotICAgICAgICBjbG9zZVNwZWxsRG9jdW1lbnRXaXRo
VGFnLAotICAgICAgICBjaGVja1NwZWxsaW5nT2ZTdHJpbmcsCi0gICAgICAgIDAsIC8vIGNoZWNr
R3JhbW1hck9mU3RyaW5nCi0gICAgICAgIDAsIC8vIHNwZWxsaW5nVUlJc1Nob3dpbmcKLSAgICAg
ICAgMCwgLy8gdG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZwotICAgICAgICAwLCAvLyB1cGRhdGVT
cGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkCi0gICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZwotICAgICAgICBndWVzc2VzRm9yV29yZCwKLSAgICAgICAgbGVh
cm5Xb3JkLAotICAgICAgICBpZ25vcmVXb3JkCi0gICAgfTsKLSAgICBXS1RleHRDaGVja2VyU2V0
Q2xpZW50KCZ0ZXh0Q2hlY2tlckNsaWVudCk7Ci0KLSAgICBkaWRJbml0aWFsaXplVGV4dENoZWNr
ZXJDbGllbnQgPSB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBFd2tfVGV4dF9DaGVja2VyCi0K
LSNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBOQU1FKSAg
XAotdm9pZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUgY2IpICAg
ICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBjbGllbnRDYWxsYmFja3MoKS5OQU1FID0gY2I7ICAgICAgXAotfQotCi0jZWxz
ZQotCi0vLyBEZWZpbmVzIGFuIGVtcHR5IEFQSSB0byBkbyBub3QgYnJlYWsgYnVpbGQuCi0jZGVm
aW5lIEVXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwgTkFNRSkgIFwKLXZv
aWQgZXdrX3RleHRfY2hlY2tlcl8jI05BTUUjI19jYl9zZXQoVFlQRV9OQU1FKSAgICAgICAgXAot
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMgPSAwOworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorICAgIC8vIEZJWE1FOiBFeHBvc2UgV0syIEMgQVBJIHRvIGdldCBsb2FkZWQgc3BlbGwg
Y2hlY2tpbmcgbGFuZ3VhZ2VzLgorICAgIGxpc3RPZmxhbmd1YWdlcyA9IGNvbnZlcnRMYW5ndWFn
ZXNUb0VpbmFMaXN0KFRleHRDaGVja2VyQ2xpZW50RWZsOjppbnN0YW5jZSgpLmxvYWRlZFNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gbGlzdE9mbGFuZ3VhZ2Vz
OwogfQotI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQogCitFV0tfVEVYVF9DSEVDS0VSX0NB
TExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hh
bmdlX0NiLCBjb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZSkKIEVXS19URVhUX0NIRUNL
RVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1Rh
Z19HZXRfQ2IsIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KQogRVdLX1RFWFRfQ0hFQ0tF
Ul9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFn
X0Nsb3NlX0NiLCB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQogRVdLX1RFWFRfQ0hF
Q0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2tf
Q2IsIHN0cmluZ19zcGVsbGluZ19jaGVjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaAppbmRleCBiN2FlYTg4Li4wMzAwODY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVj
a2VyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hl
Y2tlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBTYW1zdW5nIEVsZWN0cm9u
aWNzCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDExICsyNSwxNCBAQAog
CiAvKioKICAqIEBmaWxlIGV3a190ZXh0X2NoZWNrZXIuaAotICogQGJyaWVmIFByb3ZpZGVzIEFQ
SSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1lbnRh
dGlvbi4KKyAqIEBicmllZiBQcm92aWRlcyBBUEkgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IFdl
YktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24KKyAqICAgICAgICBhbmQgY29udGFpbnMg
QVBJIHRvIG1hbmlwdWxhdGUgc3BlbGxjaGVja2VyIHNldHRpbmdzLgogICoKLSAqIFRoZXJlIGlz
IG9uZSBzcGVsbGNoZWNrZXIgb2JqZWN0IHBlciBhcHBsaWNhdGlvbiBhbmQgaXQncyBkaXNhYmxl
ZCBieSBkZWZhdWx0LgorICogVGhlcmUgaXMgb25lIHNwZWxsY2hlY2tlciBvYmplY3QgcGVyIGFw
cGxpY2F0aW9uLgogICogSXQgYWxsb3dzIHRvIGNoZWNrIHNwZWxsaW5nIGluIHRoZSBlZGl0YWJs
ZSBhcmVhcy4KLSAqIElmIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGVuYWJsZSB0aGUgZmVhdHVyZSwg
QVBJIGZyb20gZXdrX3NldHRpbmdzLmgKKyAqCisgKiBUaGUgZmVhdHVyZSBpcyBkaXNhYmxlZCBi
eSBkZWZhdWx0LgorICogSWYgYXBwbGljYXRpb24gd2FudHMgdG8gZW5hYmxlIGl0LCBld2tfdGV4
dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQgQVBJCiAgKiBz
aG91bGQgYmUgdXNlZC4KICAqCiAgKiBUaGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGlt
cGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBFbmNoYW50IGxpYnJhcnkuCkBAIC00OCw2ICs1
MSwxNCBAQCBleHRlcm4gIkMiIHsKICNlbmRpZgogCiAvKioKKyAqIENyZWF0ZXMgYSB0eXBlIG5h
bWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdo
ZW4KKyAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQg
YnkgV2ViS2l0LgorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIGlmIGNvbnRpbnVv
dXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlz
YWJsZWQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9Db250aW51b3VzX1Nw
ZWxsX0NoZWNraW5nX0NoYW5nZV9DYikoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgogICogRGVm
aW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJldHVybiBhIHRh
ZyAoaWRlbnRpZmllcikgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUuCiAgKgogICog
VW5pcXVlIHRhZ3MgaGVscCB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggb3RoZXIgb2JqZWN0cyB0
aGF0IGFyZSBjaGVja2VkIGZvciBzcGVsbGluZyBtaXN0YWtlcy4KQEAgLTEwOCw2ICsxMTksNzUg
QEAgdHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0NiKSh1aW50NjRf
dCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOwogICovCiB0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9D
aGVja2VyX1dvcmRfSWdub3JlX0NiKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOwog
CisKKy8qKgorICogUXVlcmllcyBpZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJs
ZWQuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgY29udGludW91cyBzcGVsbCBjaGVj
a2luZyBpcyBlbmFibGVkIG9yIEBjIEVJTkFfRkFMU0UgaWYgaXQncyBkaXNhYmxlZAorICovCitF
QVBJIEVpbmFfQm9vbCBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdf
ZW5hYmxlZF9nZXQodm9pZCk7CisKKy8qKgorICogRW5hYmxlcy9kaXNhYmxlcyBjb250aW51b3Vz
IHNwZWxsIGNoZWNraW5nLgorICoKKyAqIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZh
dWx0LgorICoKKyAqIEBzZWUgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2NoYW5nZV9jYl9zZXQKKyAqCisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSB0byBl
bmFibGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBvciBAYyBFSU5BX0ZBTFNFIHRvIGRpc2Fi
bGUKKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19lbmFibGVkX3NldChFaW5hX0Jvb2wgZW5hYmxlKTsKKworLyoqCisgKiBHZXRzIHRoZSB0
aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgdG8g
dXNlLgorICoKKyAqIEBzZWUgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19z
ZXQKKyAqCisgKiBAcmV0dXJuIHRoZSBsaXN0IHdpdGggYXZhaWxhYmxlIHNwZWxsIGNoZWNraW5n
IGxhbmd1YWdlcywgb3IgQGMgTlVMTCBvbiBmYWlsdXJlCisgKiAgICAgICAgIHRoZSBFaW5hX0xp
c3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIsIHVzZSBlaW5hX3N0cmluZ3No
YXJlX2RlbCgpCisgKi8KK0VBUEkgRWluYV9MaXN0ICpld2tfdGV4dF9jaGVja2VyX3NwZWxsX2No
ZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KHZvaWQpOworCisvKioKKyAqIFNldHMgQGEg
bGFuZ3VhZ2VzIGFzIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB0byB1c2UgYnkgZGVmYXVsdCBXZWJL
aXQKKyAqIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tlciBmZWF0dXJlIHdpdGggRW5jaGFu
dCBsaWJyYXJ5IHN1cHBvcnQuCisgKgorICogSWYgQGxhbmd1YWdlcyBpcyBAYyBOVUxMLCB0aGUg
ZGVmYXVsdCBsYW5ndWFnZSBpcyB1c2VkLgorICogSWYgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgY2Fu
IG5vdCBiZSBkZXRlcm1pbmVkIHRoZW4gYW55IGF2YWlsYWJsZSBkaWN0aW9uYXJ5IHdpbGwgYmUg
dXNlZC4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGludmFsaWRhdGVzIHRoZSBwcmV2aW91
c2x5IHNldCBsYW5ndWFnZXMuCisgKiAgICAgICBUaGUgZGljdGlvbmFyaWVzIGFyZSByZXF1ZXN0
ZWQgYXN5bmNocm9ub3VzbHkuCisgKgorICogQHBhcmFtIGxhbmd1YWdlcyBhIGxpc3Qgb2YgY29t
bWEgKCcsJykgc2VwYXJhdGVkIGxhbmd1YWdlIGNvZGVzCisgKiAgICAgICAgb2YgdGhlIGZvcm0g
J2VuX1VTJywgaWUsIGxhbmd1YWdlX1ZBUklBTlQsIG1heSBiZSBAYyBOVUxMLgorICovCitFQVBJ
IHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0
IGNoYXIgKmxhbmd1YWdlcyk7CisKKy8qKgorICogR2V0cyB0aGUgdGhlIGxpc3Qgb2YgdGhlIHNw
ZWxsIGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1c2UuCisgKgorICogQHNlZSBld2tfc2V0dGluZ3Nf
c3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQKKyAqIEBzZWUgZXdrX3NldHRp
bmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQKKyAqCisgKiBAcmV0dXJuIHRoZSBsaXN0
IHdpdGggdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1c2UsCisgKiAgICAgICAgIHRo
ZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIsIHVzZSBlaW5h
X3N0cmluZ3NoYXJlX2RlbCgpCisgKi8KK0VBUEkgRWluYV9MaXN0ICpld2tfdGV4dF9jaGVja2Vy
X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQodm9pZCk7CisKKy8qKgorICogU2V0cyBhIGNh
bGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhlIGNv
bnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisg
KgorICogU3BlY2lmeWluZyBvZiB0aGlzIGNhbGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGlj
YXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCisgKiBvbmNlIFdlYktpdCBjaGFu
Z2VzIHRoaXMgc2V0dGluZy4KKyAqIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3Rl
ZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5n
IGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJlIG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5n
CisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBNZW51IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFyYW0g
Y2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0IG9yIEBjIE5VTEwgdG8gaW52YWxpZGF0
ZSB0aGUgcHJldmlvdXMgb25lCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX0NvbnRp
bnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIGNiKTsKKwogLyoqCiAgKiBTZXRzIGEgY2Fs
bGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGEgdW5pcXVlIHNwZWxsIGRvY3VtZW50IHRhZy4KICAqCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVj
a2VyX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0
X2NoZWNrZXJfcHJpdmF0ZS5oCmluZGV4IDZjNDczMGUuLmJjMzI3ZTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJf
cHJpdmF0ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmlj
cwogICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC0zMSwxNyArMzEsMjIgQEAKIAogI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXIuaCIK
IAotbmFtZXNwYWNlIEV3a19UZXh0X0NoZWNrZXIgewotCi12b2lkIGluaXRpYWxpemUoKTsKLQot
Ly8gRW5jaGFudCBoZWxwZXJzLgotVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlU3BlbGxDaGVja2lu
Z0xhbmd1YWdlcygpOwotdm9pZCB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpOwotVmVjdG9yPFN0cmluZz4gbG9hZGVkU3BlbGxDaGVj
a2luZ0xhbmd1YWdlcygpOwotYm9vbCBoYXNEaWN0aW9uYXJ5KCk7Ci0KLX0KKy8qKgorICogQGJy
aWVmIFN0cnVjdHVyZSB0byBzdG9yZSBjbGllbnQgY2FsbGJhY2sgZnVuY3Rpb25zLgorICoKKyAq
IEBpbnRlcm5hbAorICovCitzdHJ1Y3QgQ2xpZW50Q2FsbGJhY2tzIHsKKyAgICBFd2tfVGV4dF9D
aGVja2VyX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIGNvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfY2hhbmdlOworICAgIEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0Rv
Y3VtZW50X1RhZ19HZXRfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQ7CisgICAgRXdr
X1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlX0NiIHVuaXF1ZV9z
cGVsbF9kb2N1bWVudF90YWdfY2xvc2U7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3Bl
bGxpbmdfQ2hlY2tfQ2Igc3RyaW5nX3NwZWxsaW5nX2NoZWNrOworICAgIEV3a19UZXh0X0NoZWNr
ZXJfV29yZF9HdWVzc2VzX0dldF9DYiB3b3JkX2d1ZXNzZXNfZ2V0OworICAgIEV3a19UZXh0X0No
ZWNrZXJfV29yZF9MZWFybl9DYiB3b3JkX2xlYXJuOworICAgIEV3a19UZXh0X0NoZWNrZXJfV29y
ZF9JZ25vcmVfQ2Igd29yZF9pZ25vcmU7Cit9OworCitDbGllbnRDYWxsYmFja3MmIGNsaWVudENh
bGxiYWNrcygpOwogCiAjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCiAjZW5kaWYgLy8gZXdr
X3RleHRfY2hlY2tlcl9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl90ZXh0X2NoZWNrZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAK
aW5kZXggODJkYTA5YS4uNGNlMzg4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5j
cHAKQEAgLTIxMywyMiArMjEzLDIyIEBAIHN0YXRpYyB2b2lkIG9uV29yZElnbm9yZSh1aW50NjRf
dCB0YWcsIGNvbnN0IGNoYXIqIHdvcmQpCiB9CiAKIC8qKgotICogVGVzdCBzZXR0ZXIvZ2V0dGVy
IGZvciB0aGUgY29udGlub3VzIHNwZWxsIGNoZWNraW5nOgotICogIC0gZXdrX3NldHRpbmdzX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQKLSAqICAtIGV3a19zZXR0aW5nc19j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0CisgKiBUZXN0IHNldHRlci9nZXR0
ZXIgZm9yIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nOgorICogIC0gZXdrX3RleHRfY2hl
Y2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0CisgKiAgLSBld2tfdGV4
dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQKICAqLwotVEVT
VF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWQpCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl9j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWQpCiB7Ci0gICAgZXdrX3NldHRpbmdzX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisgICAgZXdrX3RleHRf
Y2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOwogI2lm
IEVOQUJMRShTUEVMTENIRUNLKQotICAgIEVYUEVDVF9UUlVFKGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGV3a190
ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKTsKIAog
ICAgIC8vIFdoZW4gdGhlIHNwZWxsIGNoZWNraW5nIGhhcyBiZWVuIGVuYWJsZWQsIHRoZSBkZWZh
dWx0IGxhbmd1YWdlIGlzIHNldCAoaWYgdGhlIHVzZXIKICAgICAvLyBkaWRuJ3Qgc2V0IGFueSku
IFRoZSBsYW5ndWFnZXMgYXJlIGJlaW5nIGxvYWRlZCBvbiB0aGUgaWRsZXIsIHdhaXQgZm9yIHRo
ZW0uCiAgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5T
ZWNvbmRzLCBvblRpbWVvdXQsIDApOwogICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwogCi0g
ICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIEVpbmFfTGlzdCogbG9hZGVkTGFuZ3VhZ2VzID0gZXdr
X3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CiAgICAgLy8gTm8g
ZGljdGlvbmFyeSBpcyBhdmFpbGFibGUvaW5zdGFsbGVkLgogICAgIGlmICghbG9hZGVkTGFuZ3Vh
Z2VzKQogICAgICAgICByZXR1cm47CkBAIC0yMzksMjMgKzIzOSwyNyBAQCBURVNUX0YoRVdLMlVu
aXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxl
ZCkKICAgICBFSU5BX0xJU1RfRlJFRShsb2FkZWRMYW5ndWFnZXMsIGRhdGEpCiAgICAgICAgIGVp
bmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSk7CiAjZWxz
ZQotICAgIEVYUEVDVF9GQUxTRShld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX2dldCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3RleHRfY2hlY2tlcl9jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBld2tf
c2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChmYWxzZSk7Ci0g
ICAgRVhQRUNUX0ZBTFNFKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfZ2V0KCkpOworICAgIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19lbmFibGVkX3NldChmYWxzZSk7CisgICAgRVhQRUNUX0ZBTFNFKGV3a190ZXh0X2NoZWNr
ZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKTsKIH0KIAogLyoqCi0g
KiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzcGVsbCBjaGVj
a2luZyBzZXR0aW5nIGhhcyBiZWVuIGNoYW5nZWQuCisgKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxi
YWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2Vk
IGJ5IFdlYktpdC4KKyAqIENoYW5naW5nIG9mIHRoaXMgc2V0dGluZyBhdCB0aGUgV2ViS2l0IGxl
dmVsIGNhbiBiZSBtYWRlIGFzIGEgcmVzdWx0IG9mIG1vZGlmeWluZworICogb3B0aW9ucyBpbiBh
IENvbnRleHQgTWVudSBieSBhIHVzZXIuCiAgKi8KLVRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBl
d2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KQorVEVT
VF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9j
aGVja2luZ19jaGFuZ2VfY2Jfc2V0KQogewotICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQob25TZXR0aW5nQ2hhbmdlKTsKKyAgICBld2tfdGV4
dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldChvblNldHRp
bmdDaGFuZ2UpOwogCi0gICAgaXNTZXR0aW5nRW5hYmxlZCA9IGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7CisgICAgaXNTZXR0aW5nRW5hYmxlZCA9
IGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgp
OwogICAgIGlzU2V0dGluZ0VuYWJsZWQgPSAhaXNTZXR0aW5nRW5hYmxlZDsKLSAgICBld2tfc2V0
dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFi
bGVkKTsKKyAgICAvLyBUaGUgbm90aWZpY2F0aW9ucyBhYm91dCB0aGUgc2V0dGluZyBjaGFuZ2Ug
c2hvdWxkbid0IGJlIHNlbnQgaWYgdGhlIGNoYW5nZSB3YXMgbWFkZQorICAgIC8vIG9uIHRoZSBj
bGllbnQncyByZXF1ZXN0IChwdWJsaWMgQVBJKS4KKyAgICBld2tfdGV4dF9jaGVja2VyX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoaXNTZXR0aW5nRW5hYmxlZCk7CiAKICAg
ICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMs
IG9uVGltZW91dCwgMCk7CiAKQEAgLTI2NCwzMyArMjY4LDI0IEBAIFRFU1RfRihFV0syVW5pdFRl
c3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jf
c2V0KQogICAgIC8vIFdlIGNhbid0IGNhbGwgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUgYmVjYXVz
ZSBpdCBkb2Vzbid0IHByb2Nlc3MgdGhlIGlkbGVycy4KICAgICBlY29yZV9tYWluX2xvb3BfYmVn
aW4oKTsKIAotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIEVYUEVDVF9GQUxTRSh0aW1lb3V0
VGltZXIpOwotI2Vsc2UKICAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0VGltZXIpOwotI2VuZGlmCi0K
LSAgICAvLyBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBpZiB0aGUgc2V0dGluZyBv
cHRpb24gaXMgYWxyZWFkeSBzZXQuCi0gICAgaXNTZXR0aW5nRW5hYmxlZCA9IGV3a19zZXR0aW5n
c19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7Ci0gICAgZXdrX3NldHRp
bmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoaXNTZXR0aW5nRW5hYmxl
ZCk7CiAKLSAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJ
blNlY29uZHMsIG9uVGltZW91dCwgMCk7Ci0gICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7Ci0K
LSAgICAvLyBXaGVuIHRoZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVkIHRoZSBjYWxsYmFj
ayB3b24ndCBiZSBjYWxsZWQgdG9vLgotICAgIEVYUEVDVF9UUlVFKHRpbWVvdXRUaW1lcik7Ci0K
LSAgICAvLyBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBpZiB0aGUgdXNlciBoYXMg
aW52YWxpZGF0ZWQgaXQuCi0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfY2hhbmdlX2NiX3NldCgwKTsKLSAgICBpc1NldHRpbmdFbmFibGVkID0gZXdrX3NldHRpbmdz
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKLSAgICBpc1NldHRpbmdF
bmFibGVkID0gIWlzU2V0dGluZ0VuYWJsZWQ7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoaXNTZXR0aW5nRW5hYmxlZCk7Ci0KLSAgICB0aW1l
b3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGlt
ZW91dCwgMCk7Ci0gICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7Ci0KLSAgICAvLyBJZiB0aGUg
U1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZCwgdGhlIGNhbGxiYWNrIGlzIG5vdCBzZXQuCi0g
ICAgRVhQRUNUX1RSVUUodGltZW91dFRpbWVyKTsKKyAgICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxk
IGJlIGNhbGxlZCBpZiB0aGUgY29udGV4dCBtZW51ICJDaGVjayBTcGVsbGluZyBXaGlsZSBUeXBp
bmciIG9wdGlvbgorICAgICAgIHdhcyB0b2dnbGVkIGJ5IHRoZSB1c2VyLgorICAgIEZJWE1FOgor
ICAgIDEpIEludm9rZSB0aGUgY29udGV4dCBtZW51IG9uIHRoZSBpbnB1dCBmaWVsZC4KKyAgICAy
KSBDaG9vc2UgdGhlIHN1YiBtZW51ICJTcGVsbGluZyBhbmQgR3JhbW1hciIgb3B0aW9uIChub3Qg
aW1wbGVtZW50ZWQgZm9yIFdLMikuCisgICAgMykgVG9nZ2xlICJDaGVjayBTcGVsbGluZyBXaGls
ZSBUeXBpbmciIG9wdGlvbi4KKyAgICA0KSBDaGVjayB3aGV0aGVyIHRoZSBjYWxsYmFjayBpcyBj
YWxsZWQuICovCisKKyAgICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBpZiB0
aGUgdXNlciBoYXMgaW52YWxpZGF0ZWQgaXQuCisgICAgRklYTUU6CisgICAgMSkgQ2FsbCBld2tf
dGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldCgwKSB0
byBub3RpZnkgdGhlIFdlYktpdCB0aGF0CisgICAgICAgdGhlIGNsaWVudCBpcyBub3QgaW50ZXJl
c3RlZCBpbiB0aGUgc2V0dGluZyBjaGFuZ2UuCisgICAgMikgSW52b2tlIHRoZSBjb250ZXh0IG1l
bnUgb24gdGhlIGlucHV0IGZpZWxkLgorICAgIDMpIENob29zZSB0aGUgc3ViIG1lbnUgIlNwZWxs
aW5nIGFuZCBHcmFtbWFyIiBvcHRpb24gKG5vdCBpbXBsZW1lbnRlZCBmb3IgV0syKS4KKyAgICA0
KSBUb2dnbGUgIkNoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZyIgb3B0aW9uLgorICAgIDUpIENo
ZWNrIHdoZXRoZXIgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuICovCiB9CiAKIC8qKgpAQCAtMjk4
LDkgKzI5Myw5IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KQogICogaWYgdGhleSBhcmUgaW4gdXNl
LgogICogQWxsIHRoZSBkaWN0aW9uYXJpZXMgZnJvbSB0aGUgbGlzdCBjYW4gYmUgc2V0IHRvIHBl
cmZvcm0gc3BlbGxjaGVja2luZy4KICAqLwotVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19z
ZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldCkKK1RFU1RfRihF
V0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJs
ZV9sYW5ndWFnZXNfZ2V0KQogewotICAgIEVpbmFfTGlzdCogYXZhaWxhYmxlTGFuZ3VhZ2VzID0g
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KCk7Cisg
ICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5ndWFnZXMgPSBld2tfdGV4dF9jaGVja2VyX3NwZWxs
X2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KCk7CiAgICAgLy8gTm8gZGljdGlvbmFy
eSBpcyBhdmFpbGFibGUvaW5zdGFsbGVkIG9yIHRoZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2Fi
bGVkLgogICAgIGlmICghYXZhaWxhYmxlTGFuZ3VhZ2VzKQogICAgICAgICByZXR1cm47CkBAIC0z
MTksMTQgKzMxNCwxNCBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX3Nw
ZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KQogICAgIH0KIAogICAgIC8vIFNl
dCBhbGwgYXZhaWxhYmxlIGxhbmd1YWdlcy4KLSAgICBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzX3NldChsYW5ndWFnZXMudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQobGFuZ3VhZ2Vz
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICAvLyBMYW5ndWFnZXMgYXJlIGJlaW5n
IGxvYWRlZCBvbiB0aGUgaWRsZXIsIHdhaXQgZm9yIHRoZW0uCiAgICAgdGltZW91dFRpbWVyID0g
ZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOwog
ICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwogCiAgICAgLy8gR2V0IHRoZSBsYW5ndWFnZXMg
aW4gdXNlLgotICAgIEVpbmFfTGlzdCogbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3Nw
ZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKKyAgICBFaW5hX0xpc3QqIGxvYWRlZExhbmd1
YWdlcyA9IGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOwog
ICAgIEFTU0VSVF9FUShlaW5hX2xpc3RfY291bnQobG9hZGVkTGFuZ3VhZ2VzKSwgZWluYV9saXN0
X2NvdW50KGF2YWlsYWJsZUxhbmd1YWdlcykpOwogCiAgICAgaSA9IDA7CkBAIC0zNTAsMTYgKzM0
NSwxNiBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNr
aW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KQogICogIC0gc2V0dGluZyB0aGUgZGVmYXVsdCBs
YW5ndWFnZSwKICAqICAtIGlmIHR3byBhcmJpdHJhcmlseSBzZWxlY3RlZCBkaWN0aW9uYXJpZXMg
YXJlIHNldCBjb3JyZWN0bHkuCiAgKi8KLVRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0
dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKQorVEVTVF9GKEVXSzJVbml0VGVzdEJhc2Us
IGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKQogewogICAgIC8vIFNl
dCB0aGUgZGVmYXVsdCBsYW5ndWFnZS4KLSAgICBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdf
bGFuZ3VhZ2VzX3NldCgwKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlc19zZXQoMCk7CiAKICAgICAvLyBMYW5ndWFnZXMgYXJlIGJlaW5nIGxvYWRlZCBvbiB0
aGUgaWRsZXIsIHdhaXQgZm9yIHRoZW0uCiAgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJf
YWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOwogICAgIGVjb3JlX21h
aW5fbG9vcF9iZWdpbigpOwogCi0gICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tf
c2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIEVpbmFfTGlzdCog
bG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXNfZ2V0KCk7CiAgICAgLy8gTm8gZGljdGlvbmFyeSBpcyBhdmFpbGFibGUvaW5zdGFsbGVkIG9y
IHRoZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVkLgogICAgIGlmICghbG9hZGVkTGFuZ3Vh
Z2VzKQogICAgICAgICByZXR1cm47CkBAIC0zNzIsNyArMzY3LDcgQEAgVEVTVF9GKEVXSzJVbml0
VGVzdEJhc2UsIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpCiAgICAgICAg
IGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsK
IAogICAgIC8vIEdldCB0aGUgZmlyc3QgYW5kIGxhc3QgbGFuZ3VhZ2UgZnJvbSBpbnN0YWxsZWQg
ZGljdGlvbmFyaWVzLgotICAgIEVpbmFfTGlzdCogYXZhaWxhYmxlTGFuZ3VhZ2VzID0gZXdrX3Nl
dHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KCk7CisgICAgRWlu
YV9MaXN0KiBhdmFpbGFibGVMYW5ndWFnZXMgPSBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNr
aW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBdmFp
bGFibGVMYW5ndWFnZXMgPSBlaW5hX2xpc3RfY291bnQoYXZhaWxhYmxlTGFuZ3VhZ2VzKTsKICAg
ICAvLyBXZSBhc3N1bWUgdGhhdCB1c2VyIGhhcyBpbnN0YWxsZWQgYXQgbGVzdCB0d28gZGljdGlv
bmFyaWVzLgogICAgIGlmIChudW1iZXJPZkF2YWlsYWJsZUxhbmd1YWdlcyA8IDIpCkBAIC0zODks
MTIgKzM4NCwxMiBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxs
X2NoZWNraW5nX2xhbmd1YWdlcykKICAgICBsYW5ndWFnZXMuYXBwZW5kKFN0cmluZyhsYXN0RXhw
ZWN0ZWQpLmxvd2VyKCkpOwogCiAgICAgLy8gU2V0IGJvdGggbGFuZ3VhZ2VzICh0aGUgZmlyc3Qg
YW5kIHRoZSBsYXN0KSBmcm9tIHRoZSBsaXN0LgotICAgIGV3a19zZXR0aW5nc19zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXNfc2V0KGxhbmd1YWdlcy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChsYW5ndWFn
ZXMudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIHRpbWVvdXRUaW1lciA9IGVjb3Jl
X3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25UaW1lb3V0LCAwKTsKICAgICBl
Y29yZV9tYWluX2xvb3BfYmVnaW4oKTsKIAotICAgIGxvYWRlZExhbmd1YWdlcyA9IGV3a19zZXR0
aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CisgICAgbG9hZGVkTGFuZ3VhZ2Vz
ID0gZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CiAgICAg
QVNTRVJUX0VRKDIsIGVpbmFfbGlzdF9jb3VudChsb2FkZWRMYW5ndWFnZXMpKTsKIAogICAgIEVY
UEVDVF9TVFJFUShmaXJzdEV4cGVjdGVkLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZWluYV9s
aXN0X250aChsb2FkZWRMYW5ndWFnZXMsIDApKSk7CkBAIC00MTQsNyArNDA5LDcgQEAgVEVTVF9G
KEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMp
CiBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcikKIHsKICAgICByZXNl
dENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOwogCiAgICAgQVNTRVJU
X1RSVUUobG9hZFVybFN5bmMoZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJzcGVsbGluZ190
ZXN0Lmh0bWwiKS5kYXRhKCkpKTsKIApAQCAtNDM2LDcgKzQzMSw3IEBAIFRFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWcpCiB7
CiAgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpOwogICAgIGRlZmF1bHRWaWV3ID0g
d2ViVmlldygpOwotICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfc2V0KHRydWUpOworICAgIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9j
aGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKIAogICAgIGV3a190ZXh0X2NoZWNrZXJfdW5pcXVl
X3NwZWxsX2RvY3VtZW50X3RhZ19nZXRfY2Jfc2V0KG9uU3BlbGxEb2N1bWVudFRhZyk7CiAgICAg
ZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlX2NiX3NldChv
blNwZWxsRG9jdW1lbnRUYWdDbG9zZSk7CkBAIC00NTgsNyArNDUzLDcgQEAgVEVTVF9GKEVXSzJV
bml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfc3RyaW5nX3NwZWxsaW5nX2NoZWNrX2NiX3Nl
dCkKIHsKICAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CiAgICAgZGVmYXVsdFZp
ZXcgPSB3ZWJWaWV3KCk7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOwogCiAgICAgZXdrX3RleHRfY2hlY2tlcl9z
dHJpbmdfc3BlbGxpbmdfY2hlY2tfY2Jfc2V0KG9uU3BlbGxpbmdDaGVjayk7CiAKQEAgLTQ3Niw3
ICs0NzEsNyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl93b3Jk
X2d1ZXNzZXNfZ2V0X2NiX3NldCkKIHsKICAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRz
KCk7CiAgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3KCk7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisgICAgZXdrX3RleHRfY2hl
Y2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOwogCiAgICAg
ZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1ZXNzZXNfZ2V0X2NiX3NldChvbldvcmRHdWVzc2VzKTsK
IApAQCAtNDk4LDcgKzQ5Myw3IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9j
aGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KQogewogICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9u
U3RhdHMoKTsKICAgICBkZWZhdWx0VmlldyA9IHdlYlZpZXcoKTsKLSAgICBld2tfc2V0dGluZ3Nf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKyAgICBld2tfdGV4
dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAK
ICAgICBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KG9uV29yZExlYXJuKTsKIApA
QCAtNTE4LDcgKzUxMyw3IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVj
a2VyX3dvcmRfaWdub3JlX2NiX3NldCkKIHsKICAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0
YXRzKCk7CiAgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3KCk7Ci0gICAgZXdrX3NldHRpbmdzX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisgICAgZXdrX3RleHRf
Y2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOwogCiAg
ICAgZXdrX3RleHRfY2hlY2tlcl93b3JkX2lnbm9yZV9jYl9zZXQob25Xb3JkSWdub3JlKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckNsaWVu
dEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyQ2xpZW50
RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTNjNzczCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckNs
aWVudEVmbC5jcHAKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudEVmbC5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CisKKyNpbmNsdWRlICJFd2tWaWV3LmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKKyNpbmNs
dWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVk
ZSAiV0tFaW5hU2hhcmVkU3RyaW5nLmgiCisjaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKKyNp
bmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisj
aW5jbHVkZSA8RWluYS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CisKK1RleHRDaGVja2VyQ2xpZW50RWZsOjpUZXh0Q2hlY2tlckNsaWVudEVm
bCgpCisgICAgOiBtX2xhbmd1YWdlc1VwZGF0ZVRpbWVyKHRoaXMsICZUZXh0Q2hlY2tlckNsaWVu
dEVmbDo6bGFuZ3VhZ2VzVXBkYXRlVGltZXJGaXJlZCkKKyAgICAsIG1fc3BlbGxDaGVja2luZ1Nl
dHRpbmdDaGFuZ2VUaW1lcih0aGlzLCAmVGV4dENoZWNrZXJDbGllbnRFZmw6OnNwZWxsQ2hlY2tp
bmdTZXR0aW5nQ2hhbmdlVGltZXJGaXJlZCkKKyAgICAsIG1fdGV4dENoZWNrZXJFbmNoYW50KFRl
eHRDaGVja2VyRW5jaGFudDo6Y3JlYXRlKCkpCit7CisgICAgbWVtc2V0KCZtX3drVGV4dENoZWNr
ZXJDbGllbnQsIDAsIHNpemVvZihXS1RleHRDaGVja2VyQ2xpZW50KSk7CisgICAgbV93a1RleHRD
aGVja2VyQ2xpZW50LnZlcnNpb24gPSBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9u
OworICAgIG1fd2tUZXh0Q2hlY2tlckNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKKyAgICBtX3drVGV4dENoZWNr
ZXJDbGllbnQuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworICAgIG1fd2tUZXh0Q2hlY2tlckNsaWVudC51bmlxdWVT
cGVsbERvY3VtZW50VGFnID0gdW5pcXVlU3BlbGxEb2N1bWVudFRhZzsKKyAgICBtX3drVGV4dENo
ZWNrZXJDbGllbnQuY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyA9IGNsb3NlU3BlbGxEb2N1bWVu
dFdpdGhUYWc7CisgICAgbV93a1RleHRDaGVja2VyQ2xpZW50LmNoZWNrU3BlbGxpbmdPZlN0cmlu
ZyA9IGNoZWNrU3BlbGxpbmdPZlN0cmluZzsKKyAgICBtX3drVGV4dENoZWNrZXJDbGllbnQuZ3Vl
c3Nlc0ZvcldvcmQgPSBndWVzc2VzRm9yV29yZDsKKyAgICBtX3drVGV4dENoZWNrZXJDbGllbnQu
bGVhcm5Xb3JkID0gbGVhcm5Xb3JkOworICAgIG1fd2tUZXh0Q2hlY2tlckNsaWVudC5pZ25vcmVX
b3JkID0gaWdub3JlV29yZDsKKworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJm1fd2tUZXh0
Q2hlY2tlckNsaWVudCk7Cit9CisKK1RleHRDaGVja2VyQ2xpZW50RWZsJiBUZXh0Q2hlY2tlckNs
aWVudEVmbDo6aW5zdGFuY2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGV4dENoZWNr
ZXJDbGllbnRFZmwsIHRleHRDaGVja2VyQ2xpZW50LCAoKSk7CisgICAgcmV0dXJuIHRleHRDaGVj
a2VyQ2xpZW50OworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50RWZsOjplbnN1cmVTcGVsbENo
ZWNraW5nTGFuZ3VhZ2UoKQoreworICAgIGlmICghbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmhhc0Rp
Y3Rpb25hcnkoKSkKKyAgICAgICAgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworfQor
Cit2b2lkIFRleHRDaGVja2VyQ2xpZW50RWZsOjp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkZWZhdWx0TGFuZ3VhZ2VzKQoreworICAgIG1fc3BlbGxD
aGVja2luZ0xhbmd1YWdlcyA9IGRlZmF1bHRMYW5ndWFnZXM7CisgICAgbV9sYW5ndWFnZXNVcGRh
dGVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRFZmw6
Omxhbmd1YWdlc1VwZGF0ZVRpbWVyRmlyZWQoVGltZXI8VGV4dENoZWNrZXJDbGllbnRFZmw+KikK
K3sKKyAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdl
cyhtX3NwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50
RWZsOjpzcGVsbENoZWNraW5nU2V0dGluZ0NoYW5nZVRpbWVyRmlyZWQoVGltZXI8VGV4dENoZWNr
ZXJDbGllbnRFZmw+KikKK3sKKyAgICBjbGllbnRDYWxsYmFja3MoKS5jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX2NoYW5nZSgKKyAgICAgICAgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoMCkKKyAgICApOworfQorCitWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tlckNsaWVudEVmbDo6
YXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
dGV4dENoZWNrZXJFbmNoYW50LT5hdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9
CisKK1ZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2VyQ2xpZW50RWZsOjpsb2FkZWRTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90ZXh0Q2hlY2tlckVuY2hhbnQt
PmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNs
aWVudEVmbDo6Y2FsbENvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJhY2tBc3luYygp
Cit7CisgICAgbV9zcGVsbENoZWNraW5nU2V0dGluZ0NoYW5nZVRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKK30KKworYm9vbCBUZXh0Q2hlY2tlckNsaWVudEVmbDo6aXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIFRleHRDaGVja2VyOjpzdGF0
ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworfQorCit2b2lkIFRleHRDaGVj
a2VyQ2xpZW50RWZsOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCwgY29u
c3Qgdm9pZCopCit7CisgICAgaWYgKGNsaWVudENhbGxiYWNrcygpLmNvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfY2hhbmdlKQorICAgICAgICBpbnN0YW5jZSgpLmNhbGxDb250aW51b3VzU3BlbGxD
aGVja2luZ0NoYW5nZUNhbGxiYWNrQXN5bmMoKTsKK30KKwordWludDY0X3QgVGV4dENoZWNrZXJD
bGllbnRFZmw6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZv
aWQqKQoreworICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS51bmlxdWVfc3BlbGxfZG9jdW1lbnRf
dGFnX2dldCkKKyAgICAgICAgcmV0dXJuIGNsaWVudENhbGxiYWNrcygpLnVuaXF1ZV9zcGVsbF9k
b2N1bWVudF90YWdfZ2V0KEV3a1ZpZXc6OnRvRXZhc09iamVjdChwYWdlKSk7CisKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudEVmbDo6Y2xvc2VTcGVsbERvY3VtZW50
V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChjbGllbnRDYWxs
YmFja3MoKS51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQorICAgICAgICBjbGllbnRD
YWxsYmFja3MoKS51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKHRhZyk7Cit9CisKK3Zv
aWQgVGV4dENoZWNrZXJDbGllbnRFZmw6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0
YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMy
X3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoY2xpZW50Q2Fs
bGJhY2tzKCkuc3RyaW5nX3NwZWxsaW5nX2NoZWNrKQorICAgICAgICBjbGllbnRDYWxsYmFja3Mo
KS5zdHJpbmdfc3BlbGxpbmdfY2hlY2sodGFnLCBXS0VpbmFTaGFyZWRTdHJpbmcodGV4dCksIG1p
c3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAg
IGluc3RhbmNlKCkubV90ZXh0Q2hlY2tlckVuY2hhbnQtPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0
b1dURlN0cmluZyh0ZXh0KSwgKm1pc3NwZWxsaW5nTG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0
aCk7Cit9CisKK1dLQXJyYXlSZWYgVGV4dENoZWNrZXJDbGllbnRFZmw6Omd1ZXNzZXNGb3JXb3Jk
KHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgV0tN
dXRhYmxlQXJyYXlSZWYgc3VnZ2VzdGlvbnNGb3JXb3JkID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUo
KTsKKworICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS53b3JkX2d1ZXNzZXNfZ2V0KSB7CisgICAg
ICAgIEVpbmFfTGlzdCogbGlzdCA9IGNsaWVudENhbGxiYWNrcygpLndvcmRfZ3Vlc3Nlc19nZXQo
dGFnLCBXS0VpbmFTaGFyZWRTdHJpbmcod29yZCkpOworICAgICAgICB2b2lkKiBpdGVtOworCisg
ICAgICAgIEVJTkFfTElTVF9GUkVFKGxpc3QsIGl0ZW0pIHsKKyAgICAgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihpdGVtKSkpOworICAgICAgICAgICAg
V0tBcnJheUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9uLmdldCgpKTsK
KyAgICAgICAgICAgIGZyZWUoaXRlbSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcyA9IGluc3RhbmNlKCkubV90ZXh0Q2hlY2tl
ckVuY2hhbnQtPmdldEd1ZXNzZXNGb3JXb3JkKHRvV1RGU3RyaW5nKHdvcmQpKTsKKyAgICAgICAg
c2l6ZV90IG51bWJlck9mR3Vlc3NlcyA9IGd1ZXNzZXMuc2l6ZSgpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bWJlck9mR3Vlc3NlczsgKytpKSB7CisgICAgICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhndWVzc2VzW2ldLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgICAgIFdL
QXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlvbi5nZXQoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3VnZ2VzdGlvbnNGb3JXb3JkOworfQorCit2
b2lkIFRleHRDaGVja2VyQ2xpZW50RWZsOjpsZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmlu
Z1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkud29y
ZF9sZWFybikKKyAgICAgICAgY2xpZW50Q2FsbGJhY2tzKCkud29yZF9sZWFybih0YWcsIFdLRWlu
YVNoYXJlZFN0cmluZyh3b3JkKSk7CisgICAgZWxzZQorICAgICAgICBpbnN0YW5jZSgpLm1fdGV4
dENoZWNrZXJFbmNoYW50LT5sZWFybldvcmQodG9XVEZTdHJpbmcod29yZCkpOworfQorCit2b2lk
IFRleHRDaGVja2VyQ2xpZW50RWZsOjppZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdS
ZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGNsaWVudENhbGxiYWNrcygpLndvcmRf
aWdub3JlKQorICAgICAgICBjbGllbnRDYWxsYmFja3MoKS53b3JkX2lnbm9yZSh0YWcsIFdLRWlu
YVNoYXJlZFN0cmluZyh3b3JkKSk7CisgICAgZWxzZQorICAgICAgICBpbnN0YW5jZSgpLm1fdGV4
dENoZWNrZXJFbmNoYW50LT5pZ25vcmVXb3JkKHRvV1RGU3RyaW5nKHdvcmQpKTsKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9UZXh0Q2hlY2tlckNsaWVudEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9UZXh0Q2hlY2tlckNsaWVudEVmbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmRmMWNjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1RleHRDaGVja2VyQ2xpZW50RWZsLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBUZXh0Q2hlY2tlckNsaWVudEVmbF9oCisjZGVmaW5lIFRleHRDaGVja2VyQ2xpZW50RWZs
X2gKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5jbHVkZSAiVGV4dENoZWNrZXJFbmNo
YW50LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLVGV4dENoZWNr
ZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFRleHRDaGVja2VyQ2xpZW50RWZs
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgVGV4dENoZWNrZXJDbGllbnRFZmwmIGluc3RhbmNlKCk7
CisKKyAgICBjb25zdCBXS1RleHRDaGVja2VyQ2xpZW50JiB3a0NsaWVudCgpIHsgcmV0dXJuIG1f
d2tUZXh0Q2hlY2tlckNsaWVudDsgfQorCisgICAgLy8gTGFuZ3VhZ2VzIHN1cHBvcnQuCisgICAg
dm9pZCBlbnN1cmVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBh
dmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmlu
Zz4gbG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpIGNvbnN0OworICAgIHZvaWQgdXBkYXRl
U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGVmYXVsdExhbmd1
YWdlcyA9IFZlY3RvcjxTdHJpbmc+KCkpOworCitwcml2YXRlOgorICAgIFRleHRDaGVja2VyQ2xp
ZW50RWZsKCk7CisKKyAgICAvLyBUbyBzZXQgbGFuZ3VhZ2VzIG9uIHRpbWVyLgorICAgIHZvaWQg
bGFuZ3VhZ2VzVXBkYXRlVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxUZXh0Q2hlY2tlckNsaWVu
dEVmbD4qKTsKKyAgICBXZWJDb3JlOjpUaW1lcjxUZXh0Q2hlY2tlckNsaWVudEVmbD4gbV9sYW5n
dWFnZXNVcGRhdGVUaW1lcjsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3NwZWxsQ2hlY2tpbmdMYW5n
dWFnZXM7CisKKyAgICAvLyBUbyBub3RpZnkgdGhlIGNsaWVudCBhYm91dCB0aGUgc2V0dGluZyBj
aGFuZ2Ugb24gdGltZXIuCisgICAgdm9pZCBzcGVsbENoZWNraW5nU2V0dGluZ0NoYW5nZVRpbWVy
RmlyZWQoV2ViQ29yZTo6VGltZXI8VGV4dENoZWNrZXJDbGllbnRFZmw+Kik7CisgICAgdm9pZCBj
YWxsQ29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFja0FzeW5jKCk7CisgICAgV2Vi
Q29yZTo6VGltZXI8VGV4dENoZWNrZXJDbGllbnRFZmw+IG1fc3BlbGxDaGVja2luZ1NldHRpbmdD
aGFuZ2VUaW1lcjsKKworICAgIC8vIFdLVGV4dENoZWNrZXJDbGllbnQgY2FsbGJhY2tzLgorICAg
IHN0YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQq
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9v
bCwgY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyB1aW50NjRfdCB1bmlxdWVTcGVsbERvY3VtZW50
VGFnKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyB2b2lkIGNsb3NlU3BlbGxE
b2N1bWVudFdpdGhUYWcodWludDY0X3QsIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCBj
aGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3QsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3Qq
IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2
b2lkKik7CisgICAgc3RhdGljIFdLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3QsIFdL
U3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCBsZWFybldvcmQo
dWludDY0X3QsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgdm9p
ZCBpZ25vcmVXb3JkKHVpbnQ2NF90LCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKik7CisK
KyAgICBXS1RleHRDaGVja2VyQ2xpZW50IG1fd2tUZXh0Q2hlY2tlckNsaWVudDsKKworICAgIE93
blB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ+IG1fdGV4dENoZWNrZXJFbmNoYW50Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVD
SykKKyNlbmRpZiAvLyBUZXh0Q2hlY2tlckNsaWVudEVmbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCmluZGV4IGFkYjkxNTQuLjZmMTI5YTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3Bw
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3Jv
bGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
MyBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMzLDYgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQogI2luY2x1ZGUgIlRleHRC
cmVha0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnRFZmwuaCIKICNpbmNs
dWRlICJXZWJUZXh0Q2hlY2tlci5oIgogI2VuZGlmCiAKQEAgLTQ0LDE3ICs0NSwxNSBAQCBzdGF0
aWMgVGV4dENoZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBUZXh0Q2hlY2tl
clN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQogewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQog
ICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOwogICAgIGlmIChkaWRJ
bml0aWFsaXplU3RhdGUpCiAgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwogCi0gICAg
V2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+
Y2xpZW50KCk7Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKLSAgICB0
ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5ncmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9IGZhbHNlOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkID0gZmFsc2U7CiAKICAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVl
OwotI2VuZGlmCisKICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKIH0KIApAQCAtNzEsNiAr
NzAsMTEgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2kKICAgICAgICAgcmV0dXJuOwogCiAgICAg
dGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworCisgICAgaWYgKGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKQorICAgICAgICBUZXh0Q2hlY2tlckNsaWVudEVmbDo6aW5zdGFuY2Uo
KS5lbnN1cmVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoKTsKKworICAgIC8vIE5vdGlmeSB0aGUgY2xp
ZW50IGFib3V0IHRoZSBzZXR0aW5nIGNoYW5nZS4KICAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CkBAIC04NCw3ICs4OCwxNyBAQCB2b2lkIFRleHRD
aGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wpCiAKIHZvaWQgVGV4dENoZWNr
ZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJs
ZWQpCiB7Ci0gICAgVGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZChlbmFibGVkKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBpZiAoc3RhdGUoKS5pc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
ID0gZW5hYmxlZDsKKworICAgIGlmIChlbmFibGVkKQorICAgICAgICBUZXh0Q2hlY2tlckNsaWVu
dEVmbDo6aW5zdGFuY2UoKS5lbnN1cmVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6
OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmYjNmOWRiLi4xMmMxYTRhIDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTMtMDQtMTUgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lA
c2Ftc3VuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBUZXh0IENoZWNrZXIncyBzZXR0aW5n
cyByZWZhY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTExNzEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBNaW5pQnJvd3Nlci9lZmwvbWFpbi5jOgorICAgICAgICAod2luZG93X2NyZWF0ZSk6Cisg
ICAgICAgIFVzZSBhIG5ldyB0ZXh0IGNoZWNrZXIgQVBJIHRvIGVuYWJsZSBzcGVsbCBjaGVja2lu
Zy4KKwogMjAxMy0wNC0xNSAgTWFudWVsIFJlZ28gQ2FzYXNub3ZhcyAgPHJlZ29AaWdhbGlhLmNv
bT4KIAogICAgICAgICBbd2Via2l0cHldIFVzZSAkTlVNQkVSX09GX1BST0NFU1NPUlMgaW4gRXhl
Y3V0aXZlLmNwdV9jb3VudCgpCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFp
bi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwppbmRleCA4MDJkNTE4Li5kZDNkYmZl
IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCisrKyBiL1Rvb2xzL01p
bmlCcm93c2VyL2VmbC9tYWluLmMKQEAgLTE0NTEsNyArMTQ1MSw3IEBAIHN0YXRpYyBCcm93c2Vy
X1dpbmRvdyAqd2luZG93X2NyZWF0ZShFdmFzX09iamVjdCAqb3BlbmVyLCBjb25zdCBjaGFyICp1
cmwsIGludCB3CiAgICAgZWxtX3dpbl9mdWxsc2NyZWVuX3NldCh3aW5kb3ctPmVsbV93aW5kb3cs
IGZ1bGxzY3JlZW5fZW5hYmxlZCk7CiAgICAgZXdrX3NldHRpbmdzX2RldmVsb3Blcl9leHRyYXNf
ZW5hYmxlZF9zZXQoc2V0dGluZ3MsIEVJTkFfVFJVRSk7CiAgICAgZXdrX3NldHRpbmdzX3ByZWZl
cnJlZF9taW5pbXVtX2NvbnRlbnRzX3dpZHRoX3NldChzZXR0aW5ncywgMCk7Ci0gICAgZXdrX3Nl
dHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZCk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWRfc2V0KHNwZWxsX2NoZWNraW5nX2VuYWJsZWQpOwogCiAgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJhdXRoZW50aWNhdGlvbixy
ZXF1ZXN0Iiwgb25fYXV0aGVudGljYXRpb25fcmVxdWVzdCwgd2luZG93KTsKICAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImRvd25sb2FkLGZhaWxl
ZCIsIG9uX2Rvd25sb2FkX2ZhaWxlZCwgd2luZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198502</attachid>
            <date>2013-04-17 06:20:51 -0700</date>
            <delta_ts>2013-04-18 01:25:40 -0700</delta_ts>
            <desc>apply Mikhail&apos;s suggestions (comment #20)</desc>
            <filename>spelling-settings-refactor.patch</filename>
            <type>text/plain</type>
            <size>60174</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwYjE2ZDcyZS4uOTMyNTZkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
NiBAQAorMjAxMy0wNC0xNSAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBzYW1z
dW5nLmNvbT4KKworICAgICAgICBbV0syXVtFRkxdIFRleHQgQ2hlY2tlcidzIHNldHRpbmdzIHJl
ZmFjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTE3MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
c2UgV0syJ3MgVGV4dENoZWNrZXJTdGF0ZSBvYmplY3QgYXMgdGhlIHN0b3JlIGZvciB0aGUgdGV4
dCBjaGVja2VyIHNldHRpbmdzLgorICAgICAgICBJdCdzIHNoYXJlZCBiZXR3ZWVuIHRoZSBjbGll
bnQgKEV3ayBBUEkgcGFydCkgYW5kIFdlYlByb2Nlc3MgKHJlYWQgb25seSkuCisgICAgICAgIFRo
YW5rcyB0byBpdCwgd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIGFueSBhZGRpdGlvbmFsIHN0cnVjdHVy
ZSB3aXRoCisgICAgICAgIHRoZSBzZXR0aW5ncyBvbiBld2sgc2lkZS4KKworICAgICAgICBJbiB0
aGUgY29uc2lzdGVuY3kgd2l0aCBXS1RleHRDaGVja2VyIEMgQVBJLCBtb3ZlIHRoZSBFd2sncyB0
ZXh0IGNoZWNrZXIgc2V0dGluZ3MgQVBJcworICAgICAgICB0byB0aGUgZXdrX3RleHRfY2hlY2tl
ci5oL2NwcC4gVGhleSdyZSBub3QgY29ubmVjdGVkIHRvIEV3a19WaWV3L0V3a19TZXR0aW5ncyBv
YmplY3QgdG8KKyAgICAgICAga2VlcCB0aGVtIGluIGV3a19zZXR0aW5nLmgvY3BwLgorCisgICAg
ICAgIEludHJvZHVjZSBhIG5ldyBjbGFzcyB0byBpbXBsZW1lbnQgV0tUZXh0Q2hlY2tlckNsaWVu
dCBjYWxsYmFja3MgdG8gY2FsbCBzcGVsbGluZworICAgICAgICBtZXRob2RzIHRocm91Z2ggV0sy
IEMgQVBJLgorICAgICAgICBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvIGRl
dGFjaCB0ZXh0IGNoZWNrZXIgaW5pdGlhbGl6YXRpb24gZnJvbSBld2tfY29udGV4dC4KKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICBBZGQgYSBuZXcgZmlsZXMgdG8gdGhl
IGJ1aWxkLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgor
ICAgICAgICAoRXdrQ29udGV4dDo6RXdrQ29udGV4dCk6CisgICAgICAgIERldGFjaCB0aGUgdGV4
dCBjaGVja2VyIGluaXRpYWxpemF0aW9uIGZyb20gY29udGV4dC4KKyAgICAgICAgVGhlcmUgbWln
aHQgYmUgbW9yZSB0aGFuIGRlZmF1bHQgY29udGV4dC4KKyAgICAgICAgVGhlcmUgaXMgb25lIHRl
eHQgY2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfc2V0dGluZ3MuaDoKKyAgICAgICAgUmVtb3ZlIHRoZSB0ZXh0IGNoZWNrZXIgc2V0dGluZ3Mu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcDoKKyAg
ICAgICAgQWRkIHRoZSB0ZXh0IGNoZWNrZXIgc2V0dGluZ3MgdG8gdGhlIGV3a190ZXh0X2NoZWNr
ZXIuaC9jcHAKKworICAgICAgICAoY29udmVydExhbmd1YWdlc1RvRWluYUxpc3QpOgorICAgICAg
ICBBZGQgaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgVmVjdG9yJ3MgdmFsdWVzIHRvIEVpbmFf
TGlzdC4KKworICAgICAgICAoY2xpZW50Q2FsbGJhY2tzKToKKyAgICAgICAgQWRkIHRoZSBjbGll
bnQgY2FsbGJhY2sgcmVzcG9uc2libGUgZm9yIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5n
CisgICAgICAgIHNldHRpbmcgY2hhbmdlIHRvIHRoZSBzdHJ1Y3QuCisKKyAgICAgICAgKGV3a190
ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCk6CisgICAg
ICAgIChld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNf
Z2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
X3NldCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
c19nZXQpOgorICAgICAgICBNb3ZlIEFQSXMgZnJvbSBld2tfc2V0dGluZ3MuaC9jcHAgdG8gdGhl
IGV3a190ZXh0X2NoZWNrZXIuaC9jcHAuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCk6CisgICAgICAgIERvIG5vdCBjYWxs
IHRoZSBjbGllbnQncyBjYWxsYmFjayByZXNwb25zaWJsZSBmb3IgdGhlIHNldHRpbmcKKyAgICAg
ICAgY2hhbmdlIHVubGVzcyBXZWJLaXQgY2hhbmdlcyB0aGUgc2V0dGluZyAodHJvdWdoIHRoZSBj
b250ZXh0CisgICAgICAgICdDaGVjayBTcGVsbGluZyBXaGlsZSBUeXBpbmcnIG9wdGlvbikuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmg6CisgICAgICAg
IEFkanVzdCBBUElzIG5hbWUgdG8gdGhlIGV3a190ZXh0X2NoZWNrZXIgc3ludGF4LgorICAgICAg
ICBVcGRhdGUgdGhlIGRvY3VtZW50YXRpb24gYWNjb3JkaW5nIHRvIHRoZSBjaGFuZ2VzLgorCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmg6Cisg
ICAgICAgIChDbGllbnRDYWxsYmFja3MpOgorICAgICAgICBNb3ZlIENsaWVudENhbGxiYWNrcyBz
dHJ1Y3R1cmUgdG8gVGV4dENoZWNrZXJDbGllbnRFZmwuCisgICAgICAgIFRoZSBjbGllbnQgY2Fs
bGJhY2tzIChFd2sgQVBJKSBoYXZlIHRvIGJlIGFjY2Vzc2libGUgaW4gV0tUZXh0Q2hlY2tlckNs
aWVudCBjYWxsYmFja3MKKyAgICAgICAgdG8gY2hvb3NlIHdoYXQgaW1wbGVtZW50YXRpb24gd2ls
bCBiZSB1c2VkIC0gdGhlIGNsaWVudCdzIChpZiBkZWZpbmllZCkgb3IgRW5jaGFudCBpbXBsLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tl
ci5jcHA6CisgICAgICAgIFVwZGF0ZSB0aGUgdW5pdCB0ZXN0cyBhY2NvcmRpbmcgdG8gdGhlIEFQ
SXMgY2hhbmdlLgorICAgICAgICBVcGRhdGUgdGhlIHRlc3QgcmVzcG9uc2libGUgZm9yIHRoZSBu
b3RpZmljYXRpb24gYWJvdXQgdGhlIHNldHRpbmcgY2hhbmdlCisgICAgICAgIGFjY29yZGluZyB0
byBjaGFuZ2VzIGluICdld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdf
ZW5hYmxlZF9zZXQnLgorCisgICAgICAgICogVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckNsaWVu
dEVmbC5jcHA6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnQgV0tUZXh0Q2hlY2tlckNsaWVudCBj
YWxsYmFja3MuCisKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZsOjpUZXh0Q2hlY2tlckNs
aWVudEVmbCk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6aW5zdGFuY2UpOgorICAg
ICAgICBBbGxvdyB0byBnZXQgYW5kIGNyZWF0ZSBUZXh0Q2hlY2tlckNsaWVudEVmbCBvYmplY3Qu
CisKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZsOjppc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCk6CisgICAgICAgIEdldCB0aGUgc2V0dGluZyB2YWx1ZSBiYXNlZCBvbiBXSzIg
QyBBUEkuCisKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZsOjplbnN1cmVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2UpOgorICAgICAgICBMb2FkIHRoZSBkZWZhdWx0IGxhbmd1YWdlcyBpZiB1c2Vy
IGRpZG4ndCBzcGVjaWZ5IGFueS4KKworICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmw6OnVw
ZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRF
Zmw6Omxhbmd1YWdlc1VwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoVGV4dENoZWNrZXJDbGll
bnRFZmw6OmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAoVGV4dENo
ZWNrZXJDbGllbnRFZmw6OmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAo
VGV4dENoZWNrZXJDbGllbnRFZmw6OmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgor
ICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmw6OmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMpOgorICAgICAgICBQcm92aWRlIHN1cHBvcnQgZm9yIGxhbmd1YWdlcy4KKworICAgICAgICAo
VGV4dENoZWNrZXJDbGllbnRFZmw6OnNwZWxsQ2hlY2tpbmdTZXR0aW5nQ2hhbmdlVGltZXJGaXJl
ZCk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6Y2FsbENvbnRpbnVvdXNTcGVsbENo
ZWNraW5nQ2hhbmdlQ2FsbGJhY2tBc3luYyk6CisgICAgICAgIE5vdGlmeSB0aGUgY2xpZW50IGFi
b3V0IHRoZSBzZXR0aW5nIGNoYW5nZS4KKworICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmw6
OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2FsbGJhY2spOgorICAgICAgICAoVGV4
dENoZWNrZXJDbGllbnRFZmw6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxi
YWNrKToKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZsOjp1bmlxdWVTcGVsbERvY3VtZW50
VGFnQ2FsbGJhY2spOgorICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmw6OmNsb3NlU3BlbGxE
b2N1bWVudFdpdGhUYWdDYWxsYmFjayk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nQ2FsbGJhY2spOgorICAgICAgICAoVGV4dENoZWNrZXJDbGll
bnRFZmw6Omd1ZXNzZXNGb3JXb3JkQ2FsbGJhY2spOgorICAgICAgICAoVGV4dENoZWNrZXJDbGll
bnRFZmw6OmxlYXJuV29yZENhbGxiYWNrKToKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZs
OjppZ25vcmVXb3JkQ2FsbGJhY2spOgorICAgICAgICBXS1RleHRDaGVja2VyQ2xpZW50IGNhbGxi
YWNrcyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNr
ZXJDbGllbnRFZmwuaDogQWRkZWQuCisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbCk6Cisg
ICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6Y2xpZW50Q2FsbGJhY2tzKToKKyAgICAgICAg
UmV0dXJuIHRoZSBjbGllbnQgY2FsbGJhY2tzIHRvIGJlIHVzZWQgaW4gZXdrX3RleHRfY2hlY2tl
ci5jcHAuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgSW5pdGlhbGl6ZSB0
aGUgVGV4dENoZWNrZXIncyBtZW1iZXJzIHRvIGZhbHNlLgorCisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICBT
ZXQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaWYgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhbnkuCisgICAg
ICAgIE5vdGlmeSB0aGUgY2xpZW50IGFib3V0IHRoZSBzZXR0aW5nIGNoYW5nZS4KKyAgICAgICAg
VGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gY29udGV4dCBtZW51ICdDaGVjayBTcGVsbGluZyBX
aGlsZSBUeXBpbmcnCisgICAgICAgIG9wdGlvbiBoYXMgYmVlbiB0b2dnbGVkLgorCisgICAgICAg
IChXZWJLaXQ6OlRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0
ZUNoYW5nZWQpOgorICAgICAgICBTZXQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaWYgdXNlciBkaWRu
J3Qgc3BlY2lmeSBhbnkuCisgICAgICAgIENhbGxlZCBieSBXS1RleHRDaGVja2VyJ3MgQVBJLgor
CiAyMDEzLTA0LTE2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAg
ICAgICAgQ2xvbmUgc3RvcmFnZSBuYW1lc3BhY2VzIGZvciB3aW5kb3cub3BlbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQppbmRleCA0ZjNhYjE5Li4wMWM1ZjYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZQpAQCAtMTA3LDYgKzEwNyw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwog
ICAgIFVJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwv
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1Jl
cXVlc3RNYW5hZ2VyQ2xpZW50RWZsLmNwcAorICAgIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJD
bGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKICAgICBV
SVByb2Nlc3MvZWZsL1ZpYnJhdGlvbkNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1Zp
ZXdDbGllbnRFZmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfY29udGV4dC5jcHAKaW5kZXggNTcwZDRiZi4uNWZkZGNkOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtNDQsMTEgKzQ0LDYg
QEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCi0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0jaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgi
Ci0jaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCi0jZW5kaWYKLQogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCkBAIC04NiwxNCAr
ODEsNiBAQCBFd2tDb250ZXh0OjpFd2tDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0KQogICAg
ICAgICBpbml0aWFsaXplTWVtb3J5U2FtcGxlciA9IHRydWU7CiAgICAgfQogI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBFd2tfVGV4dF9DaGVja2VyOjppbml0aWFsaXplKCk7
Ci0gICAgaWYgKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
Z2V0KCkpIHsKLSAgICAgICAgLy8gTG9hZCB0aGUgZGVmYXVsdCBsYW5ndWFnZS4KLSAgICAgICAg
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7Ci0gICAgfQotI2Vu
ZGlmCiB9CiAKIEV3a0NvbnRleHQ6On5Fd2tDb250ZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCmluZGV4IDNkNDM0ZGYxLi4yMWI0
YmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0
dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0
aW5ncy5jcHAKQEAgLTMzLDE0ICszMyw2IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJQYWdlUHJv
eHkuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dlYlByZWZlcmVuY2VzLmg+CiAKLSNpZiBFTkFCTEUo
U1BFTExDSEVDSykKLSNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCi0jaW5jbHVkZSAiZXdrX3Rl
eHRfY2hlY2tlcl9wcml2YXRlLmgiCi0jaW5jbHVkZSA8RWNvcmUuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2VuZGlmCi0KIHVzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CiAKIGNvbnN0IFdlYktpdDo6V2ViUHJlZmVyZW5jZXMqIEV3a1Nl
dHRpbmdzOjpwcmVmZXJlbmNlcygpIGNvbnN0CkBAIC01MywzNSArNDUsNiBAQCBXZWJLaXQ6Oldl
YlByZWZlcmVuY2VzKiBFd2tTZXR0aW5nczo6cHJlZmVyZW5jZXMoKQogICAgIHJldHVybiBtX3Zp
ZXctPnBhZ2UoKS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCk7CiB9CiAKLSNpZiBFTkFCTEUo
U1BFTExDSEVDSykKLXN0YXRpYyBzdHJ1Y3QgewotICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQgOiAxOwotICAgIFZlY3RvcjxTdHJpbmc+IHNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXM7Ci0gICAgRXdrX1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdl
X0NiIG9uQ29udGludW91c1NwZWxsQ2hlY2tpbmc7Ci19IGV3a1RleHRDaGVja2VyU2V0dGluZ3Mg
PSB7IGZhbHNlLCBWZWN0b3I8U3RyaW5nPigpLCAwIH07Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgb25D
b250aW51b3VzU3BlbGxDaGVja2luZ0lkbGVyKHZvaWQqKQotewotICAgIGlmIChld2tUZXh0Q2hl
Y2tlclNldHRpbmdzLm9uQ29udGludW91c1NwZWxsQ2hlY2tpbmcpCi0gICAgICAgIGV3a1RleHRD
aGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxDaGVja2luZyhld2tUZXh0Q2hlY2tlclNl
dHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKLQotICAgIHJldHVybiBF
Q09SRV9DQUxMQkFDS19DQU5DRUw7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgc3BlbGxDaGVja2lu
Z0xhbmd1YWdlc1NldFVwZGF0ZSh2b2lkKikKLXsKLSAgICAvLyBGSVhNRTogQ29uc2lkZXIgdG8g
ZGVsZWdhdGUgY2FsbGluZyBvZiB0aGlzIG1ldGhvZCBpbiBXZWJQcm9jZXNzIHRvIGRvIG5vdCBk
ZWxheS9ibG9jayBVSVByb2Nlc3MuCi0gICAgRXdrX1RleHRfQ2hlY2tlcjo6dXBkYXRlU3BlbGxD
aGVja2luZ0xhbmd1YWdlcyhld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMpOwotICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Ci19Ci0KLXN0YXRpYyB2
b2lkIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQoY29uc3QgVmVjdG9yPFN0cmluZz4mIG5ld0xh
bmd1YWdlcykKLXsKLSAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMgPSBuZXdMYW5ndWFnZXM7Ci0gICAgZWNvcmVfaWRsZXJfYWRkKHNwZWxsQ2hlY2tpbmdM
YW5ndWFnZXNTZXRVcGRhdGUsIDApOwotfQotI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQot
CiBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2Z1bGxzY3JlZW5fZW5hYmxlZF9zZXQoRXdrX1NldHRp
bmdzKiBzZXR0aW5ncywgRWluYV9Cb29sIGVuYWJsZSkKIHsKICNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCkBAIC0yMDIsNzggKzE2NSw2IEBAIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfZG5zX3By
ZWZldGNoaW5nX2VuYWJsZWRfZ2V0KGNvbnN0IEV3a19TZXR0aW5ncyogc2V0dGluZ3MpCiAgICAg
cmV0dXJuIHNldHRpbmdzLT5wcmVmZXJlbmNlcygpLT5kbnNQcmVmZXRjaGluZ0VuYWJsZWQoKTsK
IH0KIAotdm9pZCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2Vf
Y2Jfc2V0KEV3a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZV9DYiBj
YWxsYmFjaykKLXsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBld2tUZXh0Q2hlY2tlclNl
dHRpbmdzLm9uQ29udGludW91c1NwZWxsQ2hlY2tpbmcgPSBjYWxsYmFjazsKLSNlbmRpZgotfQot
Ci1FaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxl
ZF9nZXQoKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIHJldHVybiBld2tUZXh0Q2hl
Y2tlclNldHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOwotI2Vsc2UKLSAg
ICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChFaW5hX0Jvb2wgZW5hYmxlKQotewotI2lmIEVO
QUJMRShTUEVMTENIRUNLKQotICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChld2tUZXh0
Q2hlY2tlclNldHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkICE9IGVuYWJs
ZSkgewotICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkID0gZW5hYmxlOwotCi0gICAgICAgIFdLVGV4dENoZWNrZXJDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxlKTsKLQotICAgICAgICAvLyBT
ZXRzIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGlmIHVzZXIgZGlkbid0IHNwZWNpZnkgYW55LgotICAg
ICAgICBpZiAoZW5hYmxlICYmICFFd2tfVGV4dF9DaGVja2VyOjpoYXNEaWN0aW9uYXJ5KCkpCi0g
ICAgICAgICAgICBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KFZlY3RvcjxTdHJpbmc+KCkpOwot
Ci0gICAgICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLm9uQ29udGludW91c1NwZWxsQ2hl
Y2tpbmcpCi0gICAgICAgICAgICBlY29yZV9pZGxlcl9hZGQob25Db250aW51b3VzU3BlbGxDaGVj
a2luZ0lkbGVyLCAwKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotRWluYV9MaXN0KiBld2tfc2V0dGlu
Z3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQoKQotewotICAgIEVpbmFf
TGlzdCogbGlzdE9mbGFuZ3VhZ2VzID0gMDsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzID0gRXdrX1RleHRfQ2hlY2tlcjo6YXZhaWxh
YmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwotICAgIHNpemVfdCBudW1iZXJPZkxhbnVhZ2Vz
ID0gbGFuZ3VhZ2VzLnNpemUoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVy
T2ZMYW51YWdlczsgKytpKQotICAgICAgICBsaXN0T2ZsYW5ndWFnZXMgPSBlaW5hX2xpc3RfYXBw
ZW5kKGxpc3RPZmxhbmd1YWdlcywgZWluYV9zdHJpbmdzaGFyZV9hZGQobGFuZ3VhZ2VzW2ldLnV0
ZjgoKS5kYXRhKCkpKTsKLSNlbmRpZgotICAgIHJldHVybiBsaXN0T2ZsYW5ndWFnZXM7Ci19Ci0K
LXZvaWQgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hh
ciogbGFuZ3VhZ2VzKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFZlY3RvcjxTdHJp
bmc+IG5ld0xhbmd1YWdlczsKLSAgICBTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlcykuc3BsaXQo
JywnLCBuZXdMYW5ndWFnZXMpOwotCi0gICAgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldChuZXdM
YW5ndWFnZXMpOwotI2VuZGlmCi19Ci0KLUVpbmFfTGlzdCogZXdrX3NldHRpbmdzX3NwZWxsX2No
ZWNraW5nX2xhbmd1YWdlc19nZXQoKQotewotICAgIEVpbmFfTGlzdCogbGlzdE9mbGFuZ3VhZ2Vz
ID0gMDsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFn
ZXMgPSBFd2tfVGV4dF9DaGVja2VyOjpsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci0g
ICAgc2l6ZV90IG51bWJlck9mTGFudWFnZXMgPSBsYW5ndWFnZXMuc2l6ZSgpOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkxhbnVhZ2VzOyArK2kpCi0gICAgICAgIGxpc3RP
Zmxhbmd1YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQobGlzdE9mbGFuZ3VhZ2VzLCBlaW5hX3N0cmlu
Z3NoYXJlX2FkZChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOwotCi0jZW5kaWYKLSAgICBy
ZXR1cm4gbGlzdE9mbGFuZ3VhZ2VzOwotfQotCiBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2VuY29k
aW5nX2RldGVjdG9yX2VuYWJsZWRfc2V0KEV3a19TZXR0aW5ncyogc2V0dGluZ3MsIEVpbmFfQm9v
bCBlbmFibGUpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNldHRpbmdz
LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfc2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0
aW5ncy5oCmluZGV4IDdlYTcyNWMuLjgzMWM1MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oCkBAIC00MywxNCArNDMsNiBAQCBleHRlcm4g
IkMiIHsKIC8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfU2V0dGluZ3MgKi8KIHR5cGVk
ZWYgc3RydWN0IEV3a1NldHRpbmdzIEV3a19TZXR0aW5nczsKIAotLyoqCi0gKiBDcmVhdGVzIGEg
dHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNs
aWVudCB3aGVuCi0gKiB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBj
aGFuZ2VkIGJ5IFdlYktpdC4KLSAqCi0gKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSBpZiBj
b250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBp
dCdzIGRpc2FibGVkCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkV3a19TZXR0aW5nc19Db250aW51b3Vz
X1NwZWxsX0NoZWNraW5nX0NoYW5nZV9DYikoRWluYV9Cb29sIGVuYWJsZSk7Ci0KIAogLyoqCiAg
KiBFbmFibGVzL2Rpc2FibGVzIHRoZSBKYXZhc2NyaXB0IEZ1bGxzY3JlZW4gQVBJLiBUaGUgSmF2
YXNjcmlwdCBBUEkgYWxsb3dzCkBAIC0yMjksNzYgKzIyMSw2IEBAIEVBUEkgRWluYV9Cb29sIGV3
a19zZXR0aW5nc19kbnNfcHJlZmV0Y2hpbmdfZW5hYmxlZF9zZXQoRXdrX1NldHRpbmdzICpzZXR0
aW5ncywKIEVBUEkgRWluYV9Cb29sIGV3a19zZXR0aW5nc19kbnNfcHJlZmV0Y2hpbmdfZW5hYmxl
ZF9nZXQoY29uc3QgRXdrX1NldHRpbmdzICpzZXR0aW5ncyk7CiAKIC8qKgotICogU2V0cyBhIGNh
bGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgotICogdGhlIGNv
bnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCi0g
KgotICogU3BlY2lmeWluZyBvZiB0aGlzIGNhbGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGlj
YXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCi0gKiBvbmNlIFdlYktpdCBjaGFu
Z2VzIHRoaXMgc2V0dGluZy4KLSAqIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3Rl
ZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0LgotICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5n
IGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJlIG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5n
Ci0gKiBvcHRpb25zIGluIGEgQ29udGV4dCBNZW51IGJ5IGEgdXNlci4KLSAqCi0gKiBAcGFyYW0g
Y2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0IG9yIEBjIE5VTEwgdG8gaW52YWxpZGF0
ZSB0aGUgcHJldmlvdXMgb25lCi0gKi8KLUVBUEkgdm9pZCBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KEV3a19TZXR0aW5nc19Db250aW51b3VzX1Nw
ZWxsX0NoZWNraW5nX0NoYW5nZV9DYiBjYik7Ci0KLS8qKgotICogUXVlcmllcyBpZiBjb250aW51
b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RS
VUUgaWYgY29udGludW91cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkIG9yIEBjIEVJTkFfRkFM
U0UgaWYgaXQncyBkaXNhYmxlZAotICovCi1FQVBJIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCh2b2lkKTsKLQotLyoqCi0gKiBFbmFi
bGVzL2Rpc2FibGVzIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCi0gKgotICogQWRkaXRpb25h
bGx5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gKGlmIGRlZmluZWQp
IHRvIG5vdGlmeQotICogdGhlIGNsaWVudCBhYm91dCB0aGUgY2hhbmdlIG9mIHRoZSBzZXR0aW5n
LgotICogVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gKgotICogQHNlZSBl
d2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0Ci0gKgot
ICogQHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUgdG8gZW5hYmxlIGNvbnRpbnVvdXMgc3BlbGwg
Y2hlY2tpbmcgb3IgQGMgRUlOQV9GQUxTRSB0byBkaXNhYmxlCi0gKi8KLUVBUEkgdm9pZCBld2tf
c2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChFaW5hX0Jvb2wg
ZW5hYmxlKTsKLQotLyoqCi0gKiBHZXRzIHRoZSB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHRo
ZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgdG8gdXNlLgotICoKLSAqIEBzZWUgZXdrX3NldHRp
bmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQKLSAqCi0gKiBAcmV0dXJuIHRoZSBsaXN0
IHdpdGggYXZhaWxhYmxlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcywgb3IgQGMgTlVMTCBvbiBm
YWlsdXJlCi0gKiAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUg
ZnJlZWQgYWZ0ZXIsIHVzZSBlaW5hX3N0cmluZ3NoYXJlX2RlbCgpCi0gKi8KLUVBUEkgRWluYV9M
aXN0ICpld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQo
dm9pZCk7Ci0KLS8qKgotICogU2V0cyBAYSBsYW5ndWFnZXMgYXMgdGhlIGxpc3Qgb2YgbGFuZ3Vh
Z2VzIHRvIHVzZSBieSBkZWZhdWx0IFdlYktpdAotICogaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxj
aGVja2VyIGZlYXR1cmUgd2l0aCBFbmNoYW50IGxpYnJhcnkgc3VwcG9ydC4KLSAqCi0gKiBJZiBA
bGFuZ3VhZ2VzIGlzIEBjIE5VTEwsIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGlzIHVzZWQuCi0gKiBJ
ZiB0aGUgZGVmYXVsdCBsYW5ndWFnZSBjYW4gbm90IGJlIGRldGVybWluZWQgdGhlbiBhbnkgYXZh
aWxhYmxlIGRpY3Rpb25hcnkgd2lsbCBiZSB1c2VkLgotICoKLSAqIEBub3RlIFRoaXMgZnVuY3Rp
b24gaW52YWxpZGF0ZXMgdGhlIHByZXZpb3VzbHkgc2V0IGxhbmd1YWdlcy4KLSAqICAgICAgIFRo
ZSBkaWN0aW9uYXJpZXMgYXJlIHJlcXVlc3RlZCBhc3luY2hyb25vdXNseS4KLSAqCi0gKiBAcGFy
YW0gbGFuZ3VhZ2VzIGEgbGlzdCBvZiBjb21tYSAoJywnKSBzZXBhcmF0ZWQgbGFuZ3VhZ2UgY29k
ZXMKLSAqICAgICAgICBvZiB0aGUgZm9ybSAnZW5fVVMnLCBpZSwgbGFuZ3VhZ2VfVkFSSUFOVCwg
bWF5IGJlIEBjIE5VTEwuCi0gKi8KLUVBUEkgdm9pZCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzX3NldChjb25zdCBjaGFyICpsYW5ndWFnZXMpOwotCi0vKioKLSAqIEdldHMg
dGhlIHRoZSBsaXN0IG9mIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLgotICoK
LSAqIEBzZWUgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNf
Z2V0Ci0gKiBAc2VlIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0Ci0g
KgotICogQHJldHVybiB0aGUgbGlzdCB3aXRoIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMg
aW4gdXNlLAotICogICAgICAgICB0aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJl
IGZyZWVkIGFmdGVyLCB1c2UgZWluYV9zdHJpbmdzaGFyZV9kZWwoKQotICovCi1FQVBJIEVpbmFf
TGlzdCAqZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQodm9pZCk7Ci0K
LS8qKgogICogRW5hYmxlcy9kaXNhYmxlcyB0aGUgZW5jb2RpbmcgZGV0ZWN0b3IuCiAgKgogICog
QnkgZGVmYXVsdCwgdGhlIGVuY29kaW5nIGRldGVjdG9yIGlzIGRpc2FibGVkLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApp
bmRleCAzODZjYTc4Li42ODQ2ZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcwogICogQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yOCwyMDIgKzI4LDk0IEBACiAj
aW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgogCiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisj
aW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnRFZmwuaCIKKyNlbHNlCisjaW5jbHVkZSA8d3RmL1Vu
dXNlZFBhcmFtLmg+CisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCiAKLSNpbmNsdWRlICJF
d2tWaWV3LmgiCi0jaW5jbHVkZSAiVGV4dENoZWNrZXJFbmNoYW50LmgiCi0jaW5jbHVkZSAiV0tB
UElDYXN0LmgiCi0jaW5jbHVkZSAiV0tFaW5hU2hhcmVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiV0tN
dXRhYmxlQXJyYXkuaCIKLSNpbmNsdWRlICJXS1JldGFpblB0ci5oIgotI2luY2x1ZGUgIldLU3Ry
aW5nLmgiCi0jaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgotI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgotI2luY2x1ZGUgImV3a190ZXh0X2NoZWNr
ZXJfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPEVpbmEuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKIAotLyoqCi0gKiBAYnJpZWYgU3RydWN0dXJlIHRvIHN0b3Jl
IGNsaWVudCBjYWxsYmFjayBmdW5jdGlvbnMuCi0gKgotICogQGludGVybmFsCi0gKi8KLXN0cnVj
dCBDbGllbnRDYWxsYmFja3MgewotICAgIEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0Rv
Y3VtZW50X1RhZ19HZXRfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQ7Ci0gICAgRXdr
X1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlX0NiIHVuaXF1ZV9z
cGVsbF9kb2N1bWVudF90YWdfY2xvc2U7Ci0gICAgRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3Bl
bGxpbmdfQ2hlY2tfQ2Igc3RyaW5nX3NwZWxsaW5nX2NoZWNrOwotICAgIEV3a19UZXh0X0NoZWNr
ZXJfV29yZF9HdWVzc2VzX0dldF9DYiB3b3JkX2d1ZXNzZXNfZ2V0OwotICAgIEV3a19UZXh0X0No
ZWNrZXJfV29yZF9MZWFybl9DYiB3b3JkX2xlYXJuOwotICAgIEV3a19UZXh0X0NoZWNrZXJfV29y
ZF9JZ25vcmVfQ2Igd29yZF9pZ25vcmU7Ci19OwotCi1zdGF0aWMgaW5saW5lIFRleHRDaGVja2Vy
RW5jaGFudCogdGV4dENoZWNrZXJFbmNoYW50KCkKK3N0YXRpYyBFaW5hX0xpc3QqIGNvbnZlcnRM
YW5ndWFnZXNUb0VpbmFMaXN0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpCiB7Ci0g
ICAgc3RhdGljIE93blB0cjxUZXh0Q2hlY2tlckVuY2hhbnQ+IHRleHRDaGVja2VyRW5jaGFudCA9
IFRleHRDaGVja2VyRW5jaGFudDo6Y3JlYXRlKCk7Ci0gICAgcmV0dXJuIHRleHRDaGVja2VyRW5j
aGFudC5nZXQoKTsKLX0KKyAgICBFaW5hX0xpc3QqIGxpc3RPZmxhbmd1YWdlcyA9IDA7CisgICAg
c2l6ZV90IG51bWJlck9mTGFuZ3VhZ2VzID0gbGFuZ3VhZ2VzLnNpemUoKTsKIAotc3RhdGljIGlu
bGluZSBDbGllbnRDYWxsYmFja3MmIGNsaWVudENhbGxiYWNrcygpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChDbGllbnRDYWxsYmFja3MsIGNsaWVudENhbGxiYWNrcywgKCkpOwotICAgIHJl
dHVybiBjbGllbnRDYWxsYmFja3M7Ci19CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1i
ZXJPZkxhbmd1YWdlczsgKytpKQorICAgICAgICBsaXN0T2ZsYW5ndWFnZXMgPSBlaW5hX2xpc3Rf
YXBwZW5kKGxpc3RPZmxhbmd1YWdlcywgZWluYV9zdHJpbmdzaGFyZV9hZGQobGFuZ3VhZ2VzW2ld
LnV0ZjgoKS5kYXRhKCkpKTsKIAotc3RhdGljIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0dXJuIGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7CisgICAgcmV0dXJuIGxpc3RPZmxhbmd1
YWdlczsKIH0KIAotc3RhdGljIHZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCopCi17Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoZW5hYmxlZCk7CisjZGVmaW5lIEVXS19URVhU
X0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwgTkFNRSkgICAgICAgICAgICBcCit2b2lk
IGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSBjYikgICAgICAgICAg
ICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgVGV4dENoZWNrZXJDbGllbnRFZmw6Omluc3RhbmNlKCku
Y2xpZW50Q2FsbGJhY2tzKCkuTkFNRSA9IGNiOyBcCiB9CiAKLXN0YXRpYyB1aW50NjRfdCB1bmlx
dWVTcGVsbERvY3VtZW50VGFnKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKikKLXsKLSAgICBp
ZiAoY2xpZW50Q2FsbGJhY2tzKCkudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCi0gICAg
ICAgIHJldHVybiBjbGllbnRDYWxsYmFja3MoKS51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dl
dChFd2tWaWV3Ojp0b0V2YXNPYmplY3QocGFnZSkpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0
YXRpYyB2b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodWludDY0X3QgdGFnLCBjb25zdCB2
b2lkKikKLXsKLSAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkudW5pcXVlX3NwZWxsX2RvY3VtZW50
X3RhZ19jbG9zZSkKLSAgICAgICAgY2xpZW50Q2FsbGJhY2tzKCkudW5pcXVlX3NwZWxsX2RvY3Vt
ZW50X3RhZ19jbG9zZSh0YWcpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJp
bmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCopCi17Ci0gICAg
aWYgKGNsaWVudENhbGxiYWNrcygpLnN0cmluZ19zcGVsbGluZ19jaGVjaykKLSAgICAgICAgY2xp
ZW50Q2FsbGJhY2tzKCkuc3RyaW5nX3NwZWxsaW5nX2NoZWNrKHRhZywgV0tFaW5hU2hhcmVkU3Ry
aW5nKHRleHQpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAg
ZWxzZQotICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+Y2hlY2tTcGVsbGluZ09mU3RyaW5n
KHRvV1RGU3RyaW5nKHRleHQpLCAqbWlzc3BlbGxpbmdMb2NhdGlvbiwgKm1pc3NwZWxsaW5nTGVu
Z3RoKTsKLX0KLQotc3RhdGljIFdLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3QgdGFn
LCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKLXsKLSAgICBXS011dGFibGVBcnJheVJl
ZiBzdWdnZXN0aW9uc0ZvcldvcmQgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOwotCi0gICAgaWYg
KGNsaWVudENhbGxiYWNrcygpLndvcmRfZ3Vlc3Nlc19nZXQpIHsKLSAgICAgICAgRWluYV9MaXN0
KiBsaXN0ID0gY2xpZW50Q2FsbGJhY2tzKCkud29yZF9ndWVzc2VzX2dldCh0YWcsIFdLRWluYVNo
YXJlZFN0cmluZyh3b3JkKSk7Ci0gICAgICAgIHZvaWQqIGl0ZW07Ci0KLSAgICAgICAgRUlOQV9M
SVNUX0ZSRUUobGlzdCwgaXRlbSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGl0ZW0pKSk7Ci0gICAgICAgICAgICBXS0FycmF5QXBwZW5k
SXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOwotICAgICAgICAgICAg
ZnJlZShpdGVtKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBndWVzc2VzID0gdGV4dENoZWNrZXJFbmNoYW50KCktPmdldEd1ZXNzZXNGb3JX
b3JkKHRvV1RGU3RyaW5nKHdvcmQpKTsKLSAgICAgICAgc2l6ZV90IG51bWJlck9mR3Vlc3NlcyA9
IGd1ZXNzZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9m
R3Vlc3NlczsgKytpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vn
Z2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhndWVzc2VzW2ld
LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rp
b25zRm9yV29yZCwgc3VnZ2VzdGlvbi5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gc3VnZ2VzdGlvbnNGb3JXb3JkOwotfQorI2Vsc2UKIAotc3RhdGljIHZvaWQgbGVhcm5X
b3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCi17Ci0gICAg
aWYgKGNsaWVudENhbGxiYWNrcygpLndvcmRfbGVhcm4pCi0gICAgICAgIGNsaWVudENhbGxiYWNr
cygpLndvcmRfbGVhcm4odGFnLCBXS0VpbmFTaGFyZWRTdHJpbmcod29yZCkpOwotICAgIGVsc2UK
LSAgICAgICAgdGV4dENoZWNrZXJFbmNoYW50KCktPmxlYXJuV29yZCh0b1dURlN0cmluZyh3b3Jk
KSk7CisvLyBEZWZpbmVzIGFuIGVtcHR5IEFQSSB0byBkbyBub3QgYnJlYWsgYnVpbGQuCisjZGVm
aW5lIEVXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwgTkFNRSkgIFwKK3Zv
aWQgZXdrX3RleHRfY2hlY2tlcl8jI05BTUUjI19jYl9zZXQoVFlQRV9OQU1FKSAgICAgICAgXAor
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiB9CisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCiAKLXN0YXRpYyB2b2lkIGlnbm9yZVdv
cmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK0VpbmFfQm9v
bCBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQo
KQogewotICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS53b3JkX2lnbm9yZSkKLSAgICAgICAgY2xp
ZW50Q2FsbGJhY2tzKCkud29yZF9pZ25vcmUodGFnLCBXS0VpbmFTaGFyZWRTdHJpbmcod29yZCkp
OwotICAgIGVsc2UKLSAgICAgICAgdGV4dENoZWNrZXJFbmNoYW50KCktPmlnbm9yZVdvcmQodG9X
VEZTdHJpbmcod29yZCkpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBUZXh0
Q2hlY2tlckNsaWVudEVmbDo6aW5zdGFuY2UoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotbmFtZXNwYWNl
IEV3a19UZXh0X0NoZWNrZXIgewotCi1WZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKCkKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2VuYWJsZWRfc2V0KEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgcmV0dXJuIHRleHRD
aGVja2VyRW5jaGFudCgpLT5hdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7CisjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCghIWVuYWJsZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShlbmFibGUpOworI2VuZGlmCiB9CiAKLXZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdl
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKQorRWluYV9MaXN0KiBld2tfdGV4dF9j
aGVja2VyX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KCkKIHsKLSAgICB0
ZXh0Q2hlY2tlckVuY2hhbnQoKS0+dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhsYW5ndWFn
ZXMpOworICAgIEVpbmFfTGlzdCogbGlzdE9mbGFuZ3VhZ2VzID0gMDsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICAvLyBGSVhNRTogRXhwb3NlIFdLMiBDIEFQSSB0byBnZXQgYXZhaWxhYmxl
IHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcy4KKyAgICBsaXN0T2ZsYW5ndWFnZXMgPSBjb252ZXJ0
TGFuZ3VhZ2VzVG9FaW5hTGlzdChUZXh0Q2hlY2tlckNsaWVudEVmbDo6aW5zdGFuY2UoKS5hdmFp
bGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkpOworI2VuZGlmCisgICAgcmV0dXJuIGxpc3RP
Zmxhbmd1YWdlczsKIH0KIAotVmVjdG9yPFN0cmluZz4gbG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1
YWdlcygpCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3Nl
dChjb25zdCBjaGFyKiBsYW5ndWFnZXMpCiB7Ci0gICAgcmV0dXJuIHRleHRDaGVja2VyRW5jaGFu
dCgpLT5sb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci19CisjaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCisgICAgVmVjdG9yPFN0cmluZz4gbmV3TGFuZ3VhZ2VzOworICAgIFN0cmluZzo6ZnJv
bVVURjgobGFuZ3VhZ2VzKS5zcGxpdCgnLCcsIG5ld0xhbmd1YWdlcyk7CiAKLWJvb2wgaGFzRGlj
dGlvbmFyeSgpCi17Ci0gICAgcmV0dXJuIHRleHRDaGVja2VyRW5jaGFudCgpLT5oYXNEaWN0aW9u
YXJ5KCk7CisgICAgLy8gRklYTUU6IEV4cG9zZSBXSzIgQyBBUEkgdG8gc2V0IHNwZWxsIGNoZWNr
aW5nIGxhbmd1YWdlcy4KKyAgICBUZXh0Q2hlY2tlckNsaWVudEVmbDo6aW5zdGFuY2UoKS51cGRh
dGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKG5ld0xhbmd1YWdlcyk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShsYW5ndWFnZXMpOworI2VuZGlmCiB9CiAKLS8qKgotICogSW5pdGlhbGl6ZXMgc3Bl
bGxjaGVjayBmZWF0dXJlLgotICoKLSAqIEBpbnRlcm5hbAotICoKLSAqIFRoZSBkZWZhdWx0IHNw
ZWxsY2hlY2sgZmVhdHVyZSBpcyBiYXNlZCBvbiBFbmNoYW50IGxpYnJhcnkuCi0gKiBDbGllbnQg
bWF5IHVzZSBvd24gc3BlbGxjaGVjayBpbXBsZW1lbnRhdGlvbiBwcmV2aW91c2x5IHNldAotICog
dGhyb3VnaCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLgotICovCi12b2lkIGluaXRpYWxpemUoKQor
RWluYV9MaXN0KiBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQo
KQogewotICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IGZh
bHNlOwotICAgIGlmIChkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdLVGV4dENoZWNrZXJDbGllbnQgdGV4dENoZWNrZXJDbGllbnQgPSB7Ci0g
ICAgICAgIGtXS1RleHRDaGVja2VyQ2xpZW50Q3VycmVudFZlcnNpb24sCi0gICAgICAgIDAsIC8v
IGNsaWVudEluZm8KLSAgICAgICAgMCwgLy8gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93
ZWQKLSAgICAgICAgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQsCi0gICAgICAgIHNl
dENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCwKLSAgICAgICAgMCwgLy8gaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkCi0gICAgICAgIDAsIC8vIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQK
LSAgICAgICAgdW5pcXVlU3BlbGxEb2N1bWVudFRhZywKLSAgICAgICAgY2xvc2VTcGVsbERvY3Vt
ZW50V2l0aFRhZywKLSAgICAgICAgY2hlY2tTcGVsbGluZ09mU3RyaW5nLAotICAgICAgICAwLCAv
LyBjaGVja0dyYW1tYXJPZlN0cmluZwotICAgICAgICAwLCAvLyBzcGVsbGluZ1VJSXNTaG93aW5n
Ci0gICAgICAgIDAsIC8vIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcKLSAgICAgICAgMCwgLy8g
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZAotICAgICAgICAwLCAvLyB1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcKLSAgICAgICAgZ3Vlc3Nlc0ZvcldvcmQsCi0gICAg
ICAgIGxlYXJuV29yZCwKLSAgICAgICAgaWdub3JlV29yZAotICAgIH07Ci0gICAgV0tUZXh0Q2hl
Y2tlclNldENsaWVudCgmdGV4dENoZWNrZXJDbGllbnQpOwotCi0gICAgZGlkSW5pdGlhbGl6ZVRl
eHRDaGVja2VyQ2xpZW50ID0gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgRXdrX1RleHRfQ2hl
Y2tlcgotCi0jZGVmaW5lIEVXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwg
TkFNRSkgIFwKLXZvaWQgZXdrX3RleHRfY2hlY2tlcl8jI05BTUUjI19jYl9zZXQoVFlQRV9OQU1F
IGNiKSAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgY2xpZW50Q2FsbGJhY2tzKCkuTkFNRSA9IGNiOyAgICAgIFwKLX0K
LQotI2Vsc2UKLQotLy8gRGVmaW5lcyBhbiBlbXB0eSBBUEkgdG8gZG8gbm90IGJyZWFrIGJ1aWxk
LgotI2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05BTUUsIE5BTUUp
ICBcCi12b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSkgICAg
ICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIEVpbmFfTGlzdCogbGlzdE9mbGFuZ3VhZ2VzID0gMDsKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICAvLyBGSVhNRTogRXhwb3NlIFdLMiBDIEFQSSB0byBnZXQgbG9hZGVk
IHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcy4KKyAgICBsaXN0T2ZsYW5ndWFnZXMgPSBjb252ZXJ0
TGFuZ3VhZ2VzVG9FaW5hTGlzdChUZXh0Q2hlY2tlckNsaWVudEVmbDo6aW5zdGFuY2UoKS5sb2Fk
ZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkpOworI2VuZGlmCisgICAgcmV0dXJuIGxpc3RPZmxh
bmd1YWdlczsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKIAorRVdLX1RFWFRfQ0hF
Q0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Db250aW51b3VzX1NwZWxsX0NoZWNr
aW5nX0NoYW5nZV9DYiwgY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2UpCiBFV0tfVEVY
VF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1
bWVudF9UYWdfR2V0X0NiLCB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCkKIEVXS19URVhU
X0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3Vt
ZW50X1RhZ19DbG9zZV9DYiwgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSkKIEVXS19U
RVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5n
X0NoZWNrX0NiLCBzdHJpbmdfc3BlbGxpbmdfY2hlY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmgKaW5kZXggYjdhZWE4OC4uMDMw
MDg2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190
ZXh0X2NoZWNrZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgU2Ftc3VuZyBF
bGVjdHJvbmljcwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSwxMSArMjUs
MTQgQEAKIAogLyoqCiAgKiBAZmlsZSBld2tfdGV4dF9jaGVja2VyLmgKLSAqIEBicmllZiBQcm92
aWRlcyBBUEkgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1w
bGVtZW50YXRpb24uCisgKiBAYnJpZWYgUHJvdmlkZXMgQVBJIHRvIG92ZXJ3cml0ZSB0aGUgZGVm
YXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uCisgKiAgICAgICAgYW5kIGNv
bnRhaW5zIEFQSSB0byBtYW5pcHVsYXRlIHNwZWxsY2hlY2tlciBzZXR0aW5ncy4KICAqCi0gKiBU
aGVyZSBpcyBvbmUgc3BlbGxjaGVja2VyIG9iamVjdCBwZXIgYXBwbGljYXRpb24gYW5kIGl0J3Mg
ZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAqIFRoZXJlIGlzIG9uZSBzcGVsbGNoZWNrZXIgb2JqZWN0
IHBlciBhcHBsaWNhdGlvbi4KICAqIEl0IGFsbG93cyB0byBjaGVjayBzcGVsbGluZyBpbiB0aGUg
ZWRpdGFibGUgYXJlYXMuCi0gKiBJZiBhcHBsaWNhdGlvbiB3YW50cyB0byBlbmFibGUgdGhlIGZl
YXR1cmUsIEFQSSBmcm9tIGV3a19zZXR0aW5ncy5oCisgKgorICogVGhlIGZlYXR1cmUgaXMgZGlz
YWJsZWQgYnkgZGVmYXVsdC4KKyAqIElmIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGVuYWJsZSBpdCwg
ZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0IEFQ
SQogICogc2hvdWxkIGJlIHVzZWQuCiAgKgogICogVGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hl
Y2tlciBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5LgpAQCAt
NDgsNiArNTEsMTQgQEAgZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogLyoqCisgKiBDcmVhdGVzIGEg
dHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNs
aWVudCB3aGVuCisgKiB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBj
aGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSBpZiBj
b250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBp
dCdzIGRpc2FibGVkCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfQ29udGlu
dW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2IpKEVpbmFfQm9vbCBlbmFibGUpOworCisvKioK
ICAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byByZXR1
cm4gYSB0YWcgKGlkZW50aWZpZXIpIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLgog
ICoKICAqIFVuaXF1ZSB0YWdzIGhlbHAgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIG90aGVyIG9i
amVjdHMgdGhhdCBhcmUgY2hlY2tlZCBmb3Igc3BlbGxpbmcgbWlzdGFrZXMuCkBAIC0xMDgsNiAr
MTE5LDc1IEBAIHR5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfV29yZF9MZWFybl9DYiko
dWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp3b3JkKTsKICAqLwogdHlwZWRlZiB2b2lkICgqRXdr
X1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYikodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp3
b3JkKTsKIAorCisvKioKKyAqIFF1ZXJpZXMgaWYgY29udGludW91cyBzcGVsbCBjaGVja2luZyBp
cyBlbmFibGVkLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGNvbnRpbnVvdXMgc3Bl
bGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQK
KyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2VuYWJsZWRfZ2V0KHZvaWQpOworCisvKioKKyAqIEVuYWJsZXMvZGlzYWJsZXMgY29u
dGludW91cyBzcGVsbCBjaGVja2luZy4KKyAqCisgKiBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQg
YnkgZGVmYXVsdC4KKyAqCisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVs
bF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0CisgKgorICogQHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RS
VUUgdG8gZW5hYmxlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgb3IgQGMgRUlOQV9GQUxTRSB0
byBkaXNhYmxlCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogR2V0
cyB0aGUgdGhlIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSB0aGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3Vh
Z2VzIHRvIHVzZS4KKyAqCisgKiBAc2VlIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5n
dWFnZXNfc2V0CisgKgorICogQHJldHVybiB0aGUgbGlzdCB3aXRoIGF2YWlsYWJsZSBzcGVsbCBj
aGVja2luZyBsYW5ndWFnZXMsIG9yIEBjIE5VTEwgb24gZmFpbHVyZQorICogICAgICAgICB0aGUg
RWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1c2UgZWluYV9z
dHJpbmdzaGFyZV9kZWwoKQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX3RleHRfY2hlY2tlcl9z
cGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldCh2b2lkKTsKKworLyoqCisgKiBT
ZXRzIEBhIGxhbmd1YWdlcyBhcyB0aGUgbGlzdCBvZiBsYW5ndWFnZXMgdG8gdXNlIGJ5IGRlZmF1
bHQgV2ViS2l0CisgKiBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNrZXIgZmVhdHVyZSB3aXRo
IEVuY2hhbnQgbGlicmFyeSBzdXBwb3J0LgorICoKKyAqIElmIEBsYW5ndWFnZXMgaXMgQGMgTlVM
TCwgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgdXNlZC4KKyAqIElmIHRoZSBkZWZhdWx0IGxhbmd1
YWdlIGNhbiBub3QgYmUgZGV0ZXJtaW5lZCB0aGVuIGFueSBhdmFpbGFibGUgZGljdGlvbmFyeSB3
aWxsIGJlIHVzZWQuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBpbnZhbGlkYXRlcyB0aGUg
cHJldmlvdXNseSBzZXQgbGFuZ3VhZ2VzLgorICogICAgICAgVGhlIGRpY3Rpb25hcmllcyBhcmUg
cmVxdWVzdGVkIGFzeW5jaHJvbm91c2x5LgorICoKKyAqIEBwYXJhbSBsYW5ndWFnZXMgYSBsaXN0
IG9mIGNvbW1hICgnLCcpIHNlcGFyYXRlZCBsYW5ndWFnZSBjb2RlcworICogICAgICAgIG9mIHRo
ZSBmb3JtICdlbl9VUycsIGllLCBsYW5ndWFnZV9WQVJJQU5ULCBtYXkgYmUgQGMgTlVMTC4KKyAq
LworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3Nl
dChjb25zdCBjaGFyICpsYW5ndWFnZXMpOworCisvKioKKyAqIEdldHMgdGhlIHRoZSBsaXN0IG9m
IHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLgorICoKKyAqIEBzZWUgZXdrX3Nl
dHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0CisgKiBAc2VlIGV3
a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0CisgKgorICogQHJldHVybiB0
aGUgbGlzdCB3aXRoIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLAorICogICAg
ICAgICB0aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1
c2UgZWluYV9zdHJpbmdzaGFyZV9kZWwoKQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX3RleHRf
Y2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KHZvaWQpOworCisvKioKKyAqIFNl
dHMgYSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4KKyAq
IHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2Vi
S2l0LgorICoKKyAqIFNwZWNpZnlpbmcgb2YgdGhpcyBjYWxsYmFjayBpcyBuZWVkZWQgaWYgdGhl
IGFwcGxpY2F0aW9uIHdhbnRzIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucworICogb25jZSBXZWJL
aXQgY2hhbmdlcyB0aGlzIHNldHRpbmcuCisgKiBJZiB0aGUgYXBwbGljYXRpb24gaXMgbm90IGlu
dGVyZXN0ZWQsIHRoaXMgY2FsbGJhY2sgaXMgbm90IHNldC4KKyAqIENoYW5naW5nIG9mIHRoaXMg
c2V0dGluZyBhdCB0aGUgV2ViS2l0IGxldmVsIGNhbiBiZSBtYWRlIGFzIGEgcmVzdWx0IG9mIG1v
ZGlmeWluZworICogb3B0aW9ucyBpbiBhIENvbnRleHQgTWVudSBieSBhIHVzZXIuCisgKgorICog
QHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNldCBvciBAYyBOVUxMIHRvIGlu
dmFsaWRhdGUgdGhlIHByZXZpb3VzIG9uZQorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tl
cl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQoRXdrX1RleHRfQ2hlY2tl
cl9Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZV9DYiBjYik7CisKIC8qKgogICogU2V0
cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhIHVuaXF1ZSBzcGVsbCBkb2N1bWVudCB0YWcu
CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlcl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaAppbmRleCA2YzQ3MzBlLi5mMTEzY2IzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3By
aXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyX3ByaXZhdGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgU2Ftc3Vu
ZyBFbGVjdHJvbmljcwogICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0zMSwxNyArMzEsMjAgQEAKIAogI2luY2x1ZGUgImV3a190ZXh0
X2NoZWNrZXIuaCIKIAotbmFtZXNwYWNlIEV3a19UZXh0X0NoZWNrZXIgewotCi12b2lkIGluaXRp
YWxpemUoKTsKLQotLy8gRW5jaGFudCBoZWxwZXJzLgotVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxl
U3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwotdm9pZCB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpOwotVmVjdG9yPFN0cmluZz4gbG9h
ZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwotYm9vbCBoYXNEaWN0aW9uYXJ5KCk7Ci0KLX0K
Ky8qKgorICogQGJyaWVmIFN0cnVjdHVyZSB0byBzdG9yZSBjbGllbnQgY2FsbGJhY2sgZnVuY3Rp
b25zLgorICoKKyAqIEBpbnRlcm5hbAorICovCitzdHJ1Y3QgQ2xpZW50Q2FsbGJhY2tzIHsKKyAg
ICBFd2tfVGV4dF9DaGVja2VyX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIGNv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlOworICAgIEV3a19UZXh0X0NoZWNrZXJfVW5p
cXVlX1NwZWxsX0RvY3VtZW50X1RhZ19HZXRfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19n
ZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3Nl
X0NiIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2U7CisgICAgRXdrX1RleHRfQ2hlY2tl
cl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2tfQ2Igc3RyaW5nX3NwZWxsaW5nX2NoZWNrOworICAgIEV3
a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldF9DYiB3b3JkX2d1ZXNzZXNfZ2V0OworICAg
IEV3a19UZXh0X0NoZWNrZXJfV29yZF9MZWFybl9DYiB3b3JkX2xlYXJuOworICAgIEV3a19UZXh0
X0NoZWNrZXJfV29yZF9JZ25vcmVfQ2Igd29yZF9pZ25vcmU7Cit9OwogCiAjZW5kaWYgLy8gRU5B
QkxFKFNQRUxMQ0hFQ0spCiAjZW5kaWYgLy8gZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdr
Ml90ZXh0X2NoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAKaW5kZXggODJkYTA5YS4uNGNlMzg4YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2sy
X3RleHRfY2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
dGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAKQEAgLTIxMywyMiArMjEzLDIyIEBAIHN0
YXRpYyB2b2lkIG9uV29yZElnbm9yZSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIqIHdvcmQpCiB9
CiAKIC8qKgotICogVGVzdCBzZXR0ZXIvZ2V0dGVyIGZvciB0aGUgY29udGlub3VzIHNwZWxsIGNo
ZWNraW5nOgotICogIC0gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5h
YmxlZF9nZXQKLSAqICAtIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfc2V0CisgKiBUZXN0IHNldHRlci9nZXR0ZXIgZm9yIHRoZSBjb250aW51b3VzIHNwZWxs
IGNoZWNraW5nOgorICogIC0gZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWRfZ2V0CisgKiAgLSBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZF9zZXQKICAqLwotVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19z
ZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWQpCitURVNUX0YoRVdLMlVu
aXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWQpCiB7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5h
YmxlZF9zZXQodHJ1ZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOwogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIEVY
UEVDVF9UUlVFKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
Z2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVs
bF9jaGVja2luZ19lbmFibGVkX2dldCgpKTsKIAogICAgIC8vIFdoZW4gdGhlIHNwZWxsIGNoZWNr
aW5nIGhhcyBiZWVuIGVuYWJsZWQsIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGlzIHNldCAoaWYgdGhl
IHVzZXIKICAgICAvLyBkaWRuJ3Qgc2V0IGFueSkuIFRoZSBsYW5ndWFnZXMgYXJlIGJlaW5nIGxv
YWRlZCBvbiB0aGUgaWRsZXIsIHdhaXQgZm9yIHRoZW0uCiAgICAgdGltZW91dFRpbWVyID0gZWNv
cmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOwogICAg
IGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwogCi0gICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFn
ZXMgPSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIEVp
bmFfTGlzdCogbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZXNfZ2V0KCk7CiAgICAgLy8gTm8gZGljdGlvbmFyeSBpcyBhdmFpbGFibGUvaW5z
dGFsbGVkLgogICAgIGlmICghbG9hZGVkTGFuZ3VhZ2VzKQogICAgICAgICByZXR1cm47CkBAIC0y
MzksMjMgKzIzOSwyNyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCkKICAgICBFSU5BX0xJU1RfRlJFRShsb2Fk
ZWRMYW5ndWFnZXMsIGRhdGEpCiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihkYXRhKSk7CiAjZWxzZQotICAgIEVYUEVDVF9GQUxTRShld2tfc2V0
dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJs
ZWRfZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9j
aGVja2luZ19lbmFibGVkX3NldChmYWxzZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGV3a19zZXR0aW5n
c19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOworICAgIGV3a190ZXh0
X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChmYWxzZSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX2dldCgpKTsKIH0KIAogLyoqCi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxiYWNr
IGlzIGNhbGxlZCB3aGVuIHRoZSBzcGVsbCBjaGVja2luZyBzZXR0aW5nIGhhcyBiZWVuIGNoYW5n
ZWQuCisgKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzcGVs
bCBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqIENoYW5naW5nIG9m
IHRoaXMgc2V0dGluZyBhdCB0aGUgV2ViS2l0IGxldmVsIGNhbiBiZSBtYWRlIGFzIGEgcmVzdWx0
IG9mIG1vZGlmeWluZworICogb3B0aW9ucyBpbiBhIENvbnRleHQgTWVudSBieSBhIHVzZXIuCiAg
Ki8KLVRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVs
bF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KQorVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190
ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KQogewot
ICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQo
b25TZXR0aW5nQ2hhbmdlKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfY2hhbmdlX2NiX3NldChvblNldHRpbmdDaGFuZ2UpOwogCi0gICAgaXNTZXR0aW5n
RW5hYmxlZCA9IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
Z2V0KCk7CisgICAgaXNTZXR0aW5nRW5hYmxlZCA9IGV3a190ZXh0X2NoZWNrZXJfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpOwogICAgIGlzU2V0dGluZ0VuYWJsZWQgPSAh
aXNTZXR0aW5nRW5hYmxlZDsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFibGVkKTsKKyAgICAvLyBUaGUgbm90aWZpY2F0
aW9ucyBhYm91dCB0aGUgc2V0dGluZyBjaGFuZ2Ugc2hvdWxkbid0IGJlIHNlbnQgaWYgdGhlIGNo
YW5nZSB3YXMgbWFkZQorICAgIC8vIG9uIHRoZSBjbGllbnQncyByZXF1ZXN0IChwdWJsaWMgQVBJ
KS4KKyAgICBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxl
ZF9zZXQoaXNTZXR0aW5nRW5hYmxlZCk7CiAKICAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1l
cl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CiAKQEAgLTI2NCwz
MyArMjY4LDI0IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KQogICAgIC8vIFdlIGNhbid0IGNhbGwg
ZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUgYmVjYXVzZSBpdCBkb2Vzbid0IHByb2Nlc3MgdGhlIGlk
bGVycy4KICAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKIAotI2lmIEVOQUJMRShTUEVMTENI
RUNLKQotICAgIEVYUEVDVF9GQUxTRSh0aW1lb3V0VGltZXIpOwotI2Vsc2UKICAgICBFWFBFQ1Rf
VFJVRSh0aW1lb3V0VGltZXIpOwotI2VuZGlmCi0KLSAgICAvLyBUaGUgY2FsbGJhY2sgc2hvdWxk
bid0IGJlIGNhbGxlZCBpZiB0aGUgc2V0dGluZyBvcHRpb24gaXMgYWxyZWFkeSBzZXQuCi0gICAg
aXNTZXR0aW5nRW5hYmxlZCA9IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2VuYWJsZWRfZ2V0KCk7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZF9zZXQoaXNTZXR0aW5nRW5hYmxlZCk7CiAKLSAgICB0aW1lb3V0VGltZXIgPSBl
Y29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7Ci0g
ICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7Ci0KLSAgICAvLyBXaGVuIHRoZSBTUEVMTENIRUNL
IG1hY3JvIGlzIGRpc2FibGVkIHRoZSBjYWxsYmFjayB3b24ndCBiZSBjYWxsZWQgdG9vLgotICAg
IEVYUEVDVF9UUlVFKHRpbWVvdXRUaW1lcik7Ci0KLSAgICAvLyBUaGUgY2FsbGJhY2sgc2hvdWxk
bid0IGJlIGNhbGxlZCBpZiB0aGUgdXNlciBoYXMgaW52YWxpZGF0ZWQgaXQuCi0gICAgZXdrX3Nl
dHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldCgwKTsKLSAgICBp
c1NldHRpbmdFbmFibGVkID0gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdf
ZW5hYmxlZF9nZXQoKTsKLSAgICBpc1NldHRpbmdFbmFibGVkID0gIWlzU2V0dGluZ0VuYWJsZWQ7
Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQo
aXNTZXR0aW5nRW5hYmxlZCk7Ci0KLSAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQo
ZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7Ci0gICAgZWNvcmVfbWFpbl9s
b29wX2JlZ2luKCk7Ci0KLSAgICAvLyBJZiB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxl
ZCwgdGhlIGNhbGxiYWNrIGlzIG5vdCBzZXQuCi0gICAgRVhQRUNUX1RSVUUodGltZW91dFRpbWVy
KTsKKyAgICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxkIGJlIGNhbGxlZCBpZiB0aGUgY29udGV4dCBt
ZW51ICJDaGVjayBTcGVsbGluZyBXaGlsZSBUeXBpbmciIG9wdGlvbgorICAgICAgIHdhcyB0b2dn
bGVkIGJ5IHRoZSB1c2VyLgorICAgIEZJWE1FOgorICAgIDEpIEludm9rZSB0aGUgY29udGV4dCBt
ZW51IG9uIHRoZSBpbnB1dCBmaWVsZC4KKyAgICAyKSBDaG9vc2UgdGhlIHN1YiBtZW51ICJTcGVs
bGluZyBhbmQgR3JhbW1hciIgb3B0aW9uIChub3QgaW1wbGVtZW50ZWQgZm9yIFdLMikuCisgICAg
MykgVG9nZ2xlICJDaGVjayBTcGVsbGluZyBXaGlsZSBUeXBpbmciIG9wdGlvbi4KKyAgICA0KSBD
aGVjayB3aGV0aGVyIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQuICovCisKKyAgICAvKiBUaGUgY2Fs
bGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBpZiB0aGUgdXNlciBoYXMgaW52YWxpZGF0ZWQgaXQu
CisgICAgRklYTUU6CisgICAgMSkgQ2FsbCBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldCgwKSB0byBub3RpZnkgdGhlIFdlYktpdCB0aGF0Cisg
ICAgICAgdGhlIGNsaWVudCBpcyBub3QgaW50ZXJlc3RlZCBpbiB0aGUgc2V0dGluZyBjaGFuZ2Uu
CisgICAgMikgSW52b2tlIHRoZSBjb250ZXh0IG1lbnUgb24gdGhlIGlucHV0IGZpZWxkLgorICAg
IDMpIENob29zZSB0aGUgc3ViIG1lbnUgIlNwZWxsaW5nIGFuZCBHcmFtbWFyIiBvcHRpb24gKG5v
dCBpbXBsZW1lbnRlZCBmb3IgV0syKS4KKyAgICA0KSBUb2dnbGUgIkNoZWNrIFNwZWxsaW5nIFdo
aWxlIFR5cGluZyIgb3B0aW9uLgorICAgIDUpIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxiYWNrIHdh
cyBjYWxsZWQuICovCiB9CiAKIC8qKgpAQCAtMjk4LDkgKzI5Myw5IEBAIFRFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2Vf
Y2Jfc2V0KQogICogaWYgdGhleSBhcmUgaW4gdXNlLgogICogQWxsIHRoZSBkaWN0aW9uYXJpZXMg
ZnJvbSB0aGUgbGlzdCBjYW4gYmUgc2V0IHRvIHBlcmZvcm0gc3BlbGxjaGVja2luZy4KICAqLwot
VEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFp
bGFibGVfbGFuZ3VhZ2VzX2dldCkKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9j
aGVja2VyX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KQogewotICAgIEVp
bmFfTGlzdCogYXZhaWxhYmxlTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5n
X2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KCk7CisgICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5n
dWFnZXMgPSBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFn
ZXNfZ2V0KCk7CiAgICAgLy8gTm8gZGljdGlvbmFyeSBpcyBhdmFpbGFibGUvaW5zdGFsbGVkIG9y
IHRoZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVkLgogICAgIGlmICghYXZhaWxhYmxlTGFu
Z3VhZ2VzKQogICAgICAgICByZXR1cm47CkBAIC0zMTksMTQgKzMxNCwxNCBAQCBURVNUX0YoRVdL
MlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5n
dWFnZXNfZ2V0KQogICAgIH0KIAogICAgIC8vIFNldCBhbGwgYXZhaWxhYmxlIGxhbmd1YWdlcy4K
LSAgICBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChsYW5ndWFnZXMu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2No
ZWNraW5nX2xhbmd1YWdlc19zZXQobGFuZ3VhZ2VzLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CiAKICAgICAvLyBMYW5ndWFnZXMgYXJlIGJlaW5nIGxvYWRlZCBvbiB0aGUgaWRsZXIsIHdhaXQg
Zm9yIHRoZW0uCiAgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1l
b3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOwogICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigp
OwogCiAgICAgLy8gR2V0IHRoZSBsYW5ndWFnZXMgaW4gdXNlLgotICAgIEVpbmFfTGlzdCogbG9h
ZGVkTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQo
KTsKKyAgICBFaW5hX0xpc3QqIGxvYWRlZExhbmd1YWdlcyA9IGV3a190ZXh0X2NoZWNrZXJfc3Bl
bGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOwogICAgIEFTU0VSVF9FUShlaW5hX2xpc3RfY291
bnQobG9hZGVkTGFuZ3VhZ2VzKSwgZWluYV9saXN0X2NvdW50KGF2YWlsYWJsZUxhbmd1YWdlcykp
OwogCiAgICAgaSA9IDA7CkBAIC0zNTAsMTYgKzM0NSwxNiBAQCBURVNUX0YoRVdLMlVuaXRUZXN0
QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0
KQogICogIC0gc2V0dGluZyB0aGUgZGVmYXVsdCBsYW5ndWFnZSwKICAqICAtIGlmIHR3byBhcmJp
dHJhcmlseSBzZWxlY3RlZCBkaWN0aW9uYXJpZXMgYXJlIHNldCBjb3JyZWN0bHkuCiAgKi8KLVRF
U1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzKQorVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzKQogewogICAgIC8vIFNldCB0aGUgZGVmYXVsdCBsYW5ndWFnZS4KLSAg
ICBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldCgwKTsKKyAgICBld2tf
dGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7CiAKICAgICAvLyBM
YW5ndWFnZXMgYXJlIGJlaW5nIGxvYWRlZCBvbiB0aGUgaWRsZXIsIHdhaXQgZm9yIHRoZW0uCiAg
ICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRz
LCBvblRpbWVvdXQsIDApOwogICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwogCi0gICAgRWlu
YV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX2dldCgpOworICAgIEVpbmFfTGlzdCogbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3RleHRf
Y2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CiAgICAgLy8gTm8gZGljdGlv
bmFyeSBpcyBhdmFpbGFibGUvaW5zdGFsbGVkIG9yIHRoZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRp
c2FibGVkLgogICAgIGlmICghbG9hZGVkTGFuZ3VhZ2VzKQogICAgICAgICByZXR1cm47CkBAIC0z
NzIsNyArMzY3LDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19zcGVs
bF9jaGVja2luZ19sYW5ndWFnZXMpCiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsKIAogICAgIC8vIEdldCB0aGUgZmlyc3QgYW5k
IGxhc3QgbGFuZ3VhZ2UgZnJvbSBpbnN0YWxsZWQgZGljdGlvbmFyaWVzLgotICAgIEVpbmFfTGlz
dCogYXZhaWxhYmxlTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWls
YWJsZV9sYW5ndWFnZXNfZ2V0KCk7CisgICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5ndWFnZXMg
PSBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0
KCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBdmFpbGFibGVMYW5ndWFnZXMgPSBlaW5hX2xpc3Rf
Y291bnQoYXZhaWxhYmxlTGFuZ3VhZ2VzKTsKICAgICAvLyBXZSBhc3N1bWUgdGhhdCB1c2VyIGhh
cyBpbnN0YWxsZWQgYXQgbGVzdCB0d28gZGljdGlvbmFyaWVzLgogICAgIGlmIChudW1iZXJPZkF2
YWlsYWJsZUxhbmd1YWdlcyA8IDIpCkBAIC0zODksMTIgKzM4NCwxMiBAQCBURVNUX0YoRVdLMlVu
aXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcykKICAgICBs
YW5ndWFnZXMuYXBwZW5kKFN0cmluZyhsYXN0RXhwZWN0ZWQpLmxvd2VyKCkpOwogCiAgICAgLy8g
U2V0IGJvdGggbGFuZ3VhZ2VzICh0aGUgZmlyc3QgYW5kIHRoZSBsYXN0KSBmcm9tIHRoZSBsaXN0
LgotICAgIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGxhbmd1YWdl
cy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChsYW5ndWFnZXMudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKIAogICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dElu
U2Vjb25kcywgb25UaW1lb3V0LCAwKTsKICAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKIAot
ICAgIGxvYWRlZExhbmd1YWdlcyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXNfZ2V0KCk7CisgICAgbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CiAgICAgQVNTRVJUX0VRKDIsIGVpbmFfbGlzdF9jb3Vu
dChsb2FkZWRMYW5ndWFnZXMpKTsKIAogICAgIEVYUEVDVF9TVFJFUShmaXJzdEV4cGVjdGVkLCBz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZWluYV9saXN0X250aChsb2FkZWRMYW5ndWFnZXMsIDAp
KSk7CkBAIC00MTQsNyArNDA5LDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0
aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpCiBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwg
ZXdrX3RleHRfY2hlY2tlcikKIHsKICAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7
Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQo
dHJ1ZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfc2V0KHRydWUpOwogCiAgICAgQVNTRVJUX1RSVUUobG9hZFVybFN5bmMoZW52aXJvbm1l
bnQtPnVybEZvclJlc291cmNlKCJzcGVsbGluZ190ZXN0Lmh0bWwiKS5kYXRhKCkpKTsKIApAQCAt
NDM2LDcgKzQzMSw3IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2Vy
X3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWcpCiB7CiAgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRp
b25TdGF0cygpOwogICAgIGRlZmF1bHRWaWV3ID0gd2ViVmlldygpOwotICAgIGV3a19zZXR0aW5n
c19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworICAgIGV3a190
ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsK
IAogICAgIGV3a190ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXRfY2Jf
c2V0KG9uU3BlbGxEb2N1bWVudFRhZyk7CiAgICAgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3Bl
bGxfZG9jdW1lbnRfdGFnX2Nsb3NlX2NiX3NldChvblNwZWxsRG9jdW1lbnRUYWdDbG9zZSk7CkBA
IC00NTgsNyArNDUzLDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNr
ZXJfc3RyaW5nX3NwZWxsaW5nX2NoZWNrX2NiX3NldCkKIHsKICAgICByZXNldENhbGxiYWNrc0V4
ZWN1dGlvblN0YXRzKCk7CiAgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3KCk7Ci0gICAgZXdrX3Nl
dHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisgICAg
ZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRy
dWUpOwogCiAgICAgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tfY2Jfc2V0
KG9uU3BlbGxpbmdDaGVjayk7CiAKQEAgLTQ3Niw3ICs0NzEsNyBAQCBURVNUX0YoRVdLMlVuaXRU
ZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1ZXNzZXNfZ2V0X2NiX3NldCkKIHsKICAg
ICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CiAgICAgZGVmYXVsdFZpZXcgPSB3ZWJW
aWV3KCk7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxl
ZF9zZXQodHJ1ZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWRfc2V0KHRydWUpOwogCiAgICAgZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1ZXNz
ZXNfZ2V0X2NiX3NldChvbldvcmRHdWVzc2VzKTsKIApAQCAtNDk4LDcgKzQ5Myw3IEBAIFRFU1Rf
RihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KQog
ewogICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKICAgICBkZWZhdWx0VmlldyA9
IHdlYlZpZXcoKTsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19l
bmFibGVkX3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAKICAgICBld2tfdGV4dF9jaGVja2VyX3dvcmRf
bGVhcm5fY2Jfc2V0KG9uV29yZExlYXJuKTsKIApAQCAtNTE4LDcgKzUxMyw3IEBAIFRFU1RfRihF
V0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3NldCkKIHsK
ICAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CiAgICAgZGVmYXVsdFZpZXcgPSB3
ZWJWaWV3KCk7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5h
YmxlZF9zZXQodHJ1ZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOwogCiAgICAgZXdrX3RleHRfY2hlY2tlcl93b3JkX2ln
bm9yZV9jYl9zZXQob25Xb3JkSWdub3JlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1RleHRDaGVja2VyQ2xpZW50RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi40ZTcxMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckNsaWVudEVmbC5jcHAKQEAgLTAsMCArMSwyMDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudEVm
bC5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJFd2tWaWV3LmgiCisj
aW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCisj
aW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tFaW5hU2hhcmVkU3RyaW5nLmgiCisj
aW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2lu
Y2x1ZGUgIldLU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAi
ZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisjaW5jbHVkZSA8RWluYS5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK1RleHRDaGVja2Vy
Q2xpZW50RWZsOjpUZXh0Q2hlY2tlckNsaWVudEVmbCgpCisgICAgOiBtX2xhbmd1YWdlc1VwZGF0
ZVRpbWVyKHRoaXMsICZUZXh0Q2hlY2tlckNsaWVudEVmbDo6bGFuZ3VhZ2VzVXBkYXRlVGltZXJG
aXJlZCkKKyAgICAsIG1fc3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1lcih0aGlzLCAmVGV4
dENoZWNrZXJDbGllbnRFZmw6OnNwZWxsQ2hlY2tpbmdTZXR0aW5nQ2hhbmdlVGltZXJGaXJlZCkK
KyAgICAsIG1fdGV4dENoZWNrZXJFbmNoYW50KFRleHRDaGVja2VyRW5jaGFudDo6Y3JlYXRlKCkp
Cit7CisgICAgbWVtc2V0KCZtX2NsaWVudENhbGxiYWNrcywgMCwgc2l6ZW9mKENsaWVudENhbGxi
YWNrcykpOworCisgICAgV0tUZXh0Q2hlY2tlckNsaWVudCB3a1RleHRDaGVja2VyQ2xpZW50ID0g
eworICAgICAgICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICAw
LCAvLyBjbGllbnRJbmZvCisgICAgICAgIDAsIC8vIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxs
b3dlZAorICAgICAgICBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxiYWNrLAor
ICAgICAgICBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjaywKKyAgICAg
ICAgMCwgLy8gZ3JhbW1hckNoZWNraW5nRW5hYmxlZAorICAgICAgICAwLCAvLyBzZXRHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkCisgICAgICAgIHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWdDYWxsYmFjaywK
KyAgICAgICAgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZ0NhbGxiYWNrLAorICAgICAgICBjaGVj
a1NwZWxsaW5nT2ZTdHJpbmdDYWxsYmFjaywKKyAgICAgICAgMCwgLy8gY2hlY2tHcmFtbWFyT2ZT
dHJpbmcsCisgICAgICAgIDAsIC8vIHNwZWxsaW5nVUlJc1Nob3dpbmcKKyAgICAgICAgMCwgLy8g
dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZworICAgICAgICAwLCAvLyB1cGRhdGVTcGVsbGluZ1VJ
V2l0aE1pc3NwZWxsZWRXb3JkCisgICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZworICAgICAgICBndWVzc2VzRm9yV29yZENhbGxiYWNrLAorICAgICAgICBsZWFy
bldvcmRDYWxsYmFjaywKKyAgICAgICAgaWdub3JlV29yZENhbGxiYWNrCisgICAgfTsKKyAgICBX
S1RleHRDaGVja2VyU2V0Q2xpZW50KCZ3a1RleHRDaGVja2VyQ2xpZW50KTsKK30KKworVGV4dENo
ZWNrZXJDbGllbnRFZmwmIFRleHRDaGVja2VyQ2xpZW50RWZsOjppbnN0YW5jZSgpCit7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChUZXh0Q2hlY2tlckNsaWVudEVmbCwgdGV4dENoZWNrZXJDbGll
bnQsICgpKTsKKyAgICByZXR1cm4gdGV4dENoZWNrZXJDbGllbnQ7Cit9CisKK2Jvb2wgVGV4dENo
ZWNrZXJDbGllbnRFZmw6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjaygw
IC8qIGNsaWVudEluZm8gKi8pOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50RWZsOjplbnN1
cmVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoKQoreworICAgIGlmICghbV90ZXh0Q2hlY2tlckVuY2hh
bnQtPmhhc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdl
cygpOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50RWZsOjp1cGRhdGVTcGVsbENoZWNraW5n
TGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkZWZhdWx0TGFuZ3VhZ2VzKQoreworICAg
IG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IGRlZmF1bHRMYW5ndWFnZXM7CisgICAgbV9sYW5n
dWFnZXNVcGRhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJD
bGllbnRFZmw6Omxhbmd1YWdlc1VwZGF0ZVRpbWVyRmlyZWQoVGltZXI8VGV4dENoZWNrZXJDbGll
bnRFZmw+KikKK3sKKyAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+dXBkYXRlU3BlbGxDaGVja2lu
Z0xhbmd1YWdlcyhtX3NwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOworfQorCit2b2lkIFRleHRDaGVj
a2VyQ2xpZW50RWZsOjpzcGVsbENoZWNraW5nU2V0dGluZ0NoYW5nZVRpbWVyRmlyZWQoVGltZXI8
VGV4dENoZWNrZXJDbGllbnRFZmw+KikKK3sKKyAgICBtX2NsaWVudENhbGxiYWNrcy5jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZSgKKyAgICAgICAgaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWRDYWxsYmFjaygwIC8qIGNsaWVudEluZm8gKi8pCisgICAgKTsKK30KKworVmVj
dG9yPFN0cmluZz4gVGV4dENoZWNrZXJDbGllbnRFZmw6OmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdM
YW5ndWFnZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHRDaGVja2VyRW5jaGFudC0+YXZh
aWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworfQorCitWZWN0b3I8U3RyaW5nPiBUZXh0
Q2hlY2tlckNsaWVudEVmbDo6bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXJFbmNoYW50LT5sb2FkZWRTcGVsbENoZWNraW5nTGFu
Z3VhZ2VzKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRFZmw6OmNhbGxDb250aW51b3Vz
U3BlbGxDaGVja2luZ0NoYW5nZUNhbGxiYWNrQXN5bmMoKQoreworICAgIG1fc3BlbGxDaGVja2lu
Z1NldHRpbmdDaGFuZ2VUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK2Jvb2wgVGV4dENoZWNr
ZXJDbGllbnRFZmw6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2FsbGJhY2soY29u
c3Qgdm9pZCopCit7CisgICAgcmV0dXJuIFRleHRDaGVja2VyOjpzdGF0ZSgpLmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50RWZsOjpz
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjayhib29sLCBjb25zdCB2b2lk
KikKK3sKKyAgICBpZiAoaW5zdGFuY2UoKS5tX2NsaWVudENhbGxiYWNrcy5jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2NoYW5nZSkKKyAgICAgICAgaW5zdGFuY2UoKS5jYWxsQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFja0FzeW5jKCk7Cit9CisKK3VpbnQ2NF90IFRleHRDaGVj
a2VyQ2xpZW50RWZsOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnQ2FsbGJhY2soV0tQYWdlUmVmIHBh
Z2UsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChpbnN0YW5jZSgpLm1fY2xpZW50Q2FsbGJhY2tz
LnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KQorICAgICAgICByZXR1cm4gaW5zdGFuY2Uo
KS5tX2NsaWVudENhbGxiYWNrcy51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldChFd2tWaWV3
Ojp0b0V2YXNPYmplY3QocGFnZSkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgVGV4dENo
ZWNrZXJDbGllbnRFZmw6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWdDYWxsYmFjayh1aW50NjRf
dCB0YWcsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChpbnN0YW5jZSgpLm1fY2xpZW50Q2FsbGJh
Y2tzLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UpCisgICAgICAgIGluc3RhbmNlKCku
bV9jbGllbnRDYWxsYmFja3MudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSh0YWcpOwor
fQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50RWZsOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmdDYWxs
YmFjayh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5n
TG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKikKK3sKKyAg
ICBpZiAoaW5zdGFuY2UoKS5tX2NsaWVudENhbGxiYWNrcy5zdHJpbmdfc3BlbGxpbmdfY2hlY2sp
CisgICAgICAgIGluc3RhbmNlKCkubV9jbGllbnRDYWxsYmFja3Muc3RyaW5nX3NwZWxsaW5nX2No
ZWNrKHRhZywgV0tFaW5hU2hhcmVkU3RyaW5nKHRleHQpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBt
aXNzcGVsbGluZ0xlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBpbnN0YW5jZSgpLm1fdGV4dENo
ZWNrZXJFbmNoYW50LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodG9XVEZTdHJpbmcodGV4dCksICpt
aXNzcGVsbGluZ0xvY2F0aW9uLCAqbWlzc3BlbGxpbmdMZW5ndGgpOworfQorCitXS0FycmF5UmVm
IFRleHRDaGVja2VyQ2xpZW50RWZsOjpndWVzc2VzRm9yV29yZENhbGxiYWNrKHVpbnQ2NF90IHRh
ZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgV0tNdXRhYmxlQXJyYXlS
ZWYgc3VnZ2VzdGlvbnNGb3JXb3JkID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsKKworICAgIGlm
IChpbnN0YW5jZSgpLm1fY2xpZW50Q2FsbGJhY2tzLndvcmRfZ3Vlc3Nlc19nZXQpIHsKKyAgICAg
ICAgRWluYV9MaXN0KiBsaXN0ID0gaW5zdGFuY2UoKS5tX2NsaWVudENhbGxiYWNrcy53b3JkX2d1
ZXNzZXNfZ2V0KHRhZywgV0tFaW5hU2hhcmVkU3RyaW5nKHdvcmQpKTsKKyAgICAgICAgdm9pZCog
aXRlbTsKKworICAgICAgICBFSU5BX0xJU1RfRlJFRShsaXN0LCBpdGVtKSB7CisgICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oaXRlbSkpKTsKKyAg
ICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlv
bi5nZXQoKSk7CisgICAgICAgICAgICBmcmVlKGl0ZW0pOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMgPSBpbnN0YW5jZSgpLm1f
dGV4dENoZWNrZXJFbmNoYW50LT5nZXRHdWVzc2VzRm9yV29yZCh0b1dURlN0cmluZyh3b3JkKSk7
CisgICAgICAgIHNpemVfdCBudW1iZXJPZkd1ZXNzZXMgPSBndWVzc2VzLnNpemUoKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkd1ZXNzZXM7ICsraSkgeworICAgICAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ3Vlc3Nlc1tpXS51dGY4KCkuZGF0YSgpKSk7CisgICAg
ICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24u
Z2V0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN1Z2dlc3Rpb25zRm9yV29y
ZDsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudEVmbDo6bGVhcm5Xb3JkQ2FsbGJhY2sodWlu
dDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoaW5z
dGFuY2UoKS5tX2NsaWVudENhbGxiYWNrcy53b3JkX2xlYXJuKQorICAgICAgICBpbnN0YW5jZSgp
Lm1fY2xpZW50Q2FsbGJhY2tzLndvcmRfbGVhcm4odGFnLCBXS0VpbmFTaGFyZWRTdHJpbmcod29y
ZCkpOworICAgIGVsc2UKKyAgICAgICAgaW5zdGFuY2UoKS5tX3RleHRDaGVja2VyRW5jaGFudC0+
bGVhcm5Xb3JkKHRvV1RGU3RyaW5nKHdvcmQpKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVu
dEVmbDo6aWdub3JlV29yZENhbGxiYWNrKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwg
Y29uc3Qgdm9pZCopCit7CisgICAgaWYgKGluc3RhbmNlKCkubV9jbGllbnRDYWxsYmFja3Mud29y
ZF9pZ25vcmUpCisgICAgICAgIGluc3RhbmNlKCkubV9jbGllbnRDYWxsYmFja3Mud29yZF9pZ25v
cmUodGFnLCBXS0VpbmFTaGFyZWRTdHJpbmcod29yZCkpOworICAgIGVsc2UKKyAgICAgICAgaW5z
dGFuY2UoKS5tX3RleHRDaGVja2VyRW5jaGFudC0+aWdub3JlV29yZCh0b1dURlN0cmluZyh3b3Jk
KSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJDbGllbnRFZmwuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJDbGllbnRFZmwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDAxM2IxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckNsaWVudEVmbC5oCkBAIC0wLDAgKzEs
ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgVGV4dENoZWNrZXJDbGllbnRFZmxfaAorI2RlZmluZSBUZXh0Q2hl
Y2tlckNsaWVudEVmbF9oCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgIlRl
eHRDaGVja2VyRW5jaGFudC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8V2ViS2l0
Mi9XS1RleHRDaGVja2VyLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9ld2tfdGV4dF9jaGVja2VyX3By
aXZhdGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFRleHRDaGVja2VyQ2xpZW50
RWZsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgVGV4dENoZWNrZXJDbGllbnRFZmwmIGluc3RhbmNl
KCk7CisKKyAgICAvLyBDYW4gYmUgc2V0IGJ5IGV3ayBBUElzLCBieSBkZWZhdWx0IHRoZXkgYXJl
IDAuCisgICAgQ2xpZW50Q2FsbGJhY2tzJiBjbGllbnRDYWxsYmFja3MoKSB7IHJldHVybiBtX2Ns
aWVudENhbGxiYWNrczsgfQorCisgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpIGNvbnN0OworCisgICAgLy8gTGFuZ3VhZ2VzIHN1cHBvcnQuCisgICAgdm9pZCBlbnN1
cmVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gbG9hZGVk
U3BlbGxDaGVja2luZ0xhbmd1YWdlcygpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3BlbGxDaGVj
a2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGVmYXVsdExhbmd1YWdlcyA9IFZl
Y3RvcjxTdHJpbmc+KCkpOworCitwcml2YXRlOgorICAgIFRleHRDaGVja2VyQ2xpZW50RWZsKCk7
CisKKyAgICAvLyBUbyBzZXQgbGFuZ3VhZ2VzIG9uIHRpbWVyLgorICAgIHZvaWQgbGFuZ3VhZ2Vz
VXBkYXRlVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxUZXh0Q2hlY2tlckNsaWVudEVmbD4qKTsK
KyAgICBXZWJDb3JlOjpUaW1lcjxUZXh0Q2hlY2tlckNsaWVudEVmbD4gbV9sYW5ndWFnZXNVcGRh
dGVUaW1lcjsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3NwZWxsQ2hlY2tpbmdMYW5ndWFnZXM7CisK
KyAgICAvLyBUbyBub3RpZnkgdGhlIGNsaWVudCBhYm91dCB0aGUgc2V0dGluZyBjaGFuZ2Ugb24g
dGltZXIuCisgICAgdm9pZCBzcGVsbENoZWNraW5nU2V0dGluZ0NoYW5nZVRpbWVyRmlyZWQoV2Vi
Q29yZTo6VGltZXI8VGV4dENoZWNrZXJDbGllbnRFZmw+Kik7CisgICAgdm9pZCBjYWxsQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VDYWxsYmFja0FzeW5jKCk7CisgICAgV2ViQ29yZTo6VGlt
ZXI8VGV4dENoZWNrZXJDbGllbnRFZmw+IG1fc3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1l
cjsKKworICAgIC8vIFdLVGV4dENoZWNrZXJDbGllbnQgY2FsbGJhY2tzLgorICAgIHN0YXRpYyBi
b29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2FsbGJhY2soY29uc3Qgdm9pZCop
OworICAgIHN0YXRpYyB2b2lkIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxi
YWNrKGJvb2wsIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgdWludDY0X3QgdW5pcXVlU3BlbGxE
b2N1bWVudFRhZ0NhbGxiYWNrKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyB2
b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWdDYWxsYmFjayh1aW50NjRfdCwgY29uc3Qgdm9p
ZCopOworICAgIHN0YXRpYyB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZ0NhbGxiYWNrKHVpbnQ2
NF90LCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQz
Ml90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyBXS0FycmF5
UmVmIGd1ZXNzZXNGb3JXb3JkQ2FsbGJhY2sodWludDY0X3QsIFdLU3RyaW5nUmVmIHdvcmQsIGNv
bnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCBsZWFybldvcmRDYWxsYmFjayh1aW50NjRfdCwg
V0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyB2b2lkIGlnbm9yZVdv
cmRDYWxsYmFjayh1aW50NjRfdCwgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopOworCisg
ICAgQ2xpZW50Q2FsbGJhY2tzIG1fY2xpZW50Q2FsbGJhY2tzOworICAgIE93blB0cjxXZWJDb3Jl
OjpUZXh0Q2hlY2tlckVuY2hhbnQ+IG1fdGV4dENoZWNrZXJFbmNoYW50OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKyNlbmRpZiAv
LyBUZXh0Q2hlY2tlckNsaWVudEVmbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvVGV4dENoZWNrZXJFZmwuY3BwCmluZGV4IGFkYjkxNTQuLjZmMTI5YTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBTYW1zdW5nIEVs
ZWN0cm9uaWNzCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcg
QEAKIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9y
LmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnRFZmwuaCIKICNpbmNsdWRlICJXZWJUZXh0
Q2hlY2tlci5oIgogI2VuZGlmCiAKQEAgLTQ0LDE3ICs0NSwxNSBAQCBzdGF0aWMgVGV4dENoZWNr
ZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0
Q2hlY2tlcjo6c3RhdGUoKQogewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQogICAgIHN0YXRpYyBi
b29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOwogICAgIGlmIChkaWRJbml0aWFsaXplU3Rh
dGUpCiAgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwogCi0gICAgV2ViVGV4dENoZWNr
ZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCk7Ci0g
ICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGNs
aWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKLSAgICB0ZXh0Q2hlY2tlclN0
YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5ncmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCA9IGZhbHNlOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkID0gZmFsc2U7CiAKICAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOwotI2VuZGlmCisK
ICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKIH0KIApAQCAtNzEsNiArNzAsMTEgQEAgdm9p
ZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXND
b250aW51b3VzU3BlbGxDaGVja2kKICAgICAgICAgcmV0dXJuOwogCiAgICAgdGV4dENoZWNrZXJT
dGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkOworCisgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKQorICAgICAgICBUZXh0Q2hlY2tlckNsaWVudEVmbDo6aW5zdGFuY2UoKS5lbnN1cmVTcGVs
bENoZWNraW5nTGFuZ3VhZ2UoKTsKKworICAgIC8vIE5vdGlmeSB0aGUgY2xpZW50IGFib3V0IHRo
ZSBzZXR0aW5nIGNoYW5nZS4KICAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgp
LnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCk7CkBAIC04NCw3ICs4OCwxNyBAQCB2b2lkIFRleHRDaGVja2VyOjpzZXRH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wpCiAKIHZvaWQgVGV4dENoZWNrZXI6OmNvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7Ci0gICAg
VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChlbmFibGVkKTsK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBpZiAoc3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0
Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsK
KworICAgIGlmIChlbmFibGVkKQorICAgICAgICBUZXh0Q2hlY2tlckNsaWVudEVmbDo6aW5zdGFu
Y2UoKS5lbnN1cmVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGVuYWJsZWQpOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmdyYW1tYXJDaGVj
a2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMzhiZmIxLi5kZTdkMzcxIDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTMtMDQtMTUgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+
CisKKyAgICAgICAgW1dLMl1bRUZMXSBUZXh0IENoZWNrZXIncyBzZXR0aW5ncyByZWZhY3Rvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExNzEzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaW5pQnJv
d3Nlci9lZmwvbWFpbi5jOgorICAgICAgICAod2luZG93X2NyZWF0ZSk6CisgICAgICAgIFVzZSBh
IG5ldyB0ZXh0IGNoZWNrZXIgQVBJIHRvIGVuYWJsZSBzcGVsbCBjaGVja2luZy4KKwogMjAxMy0w
NC0xNiAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAg
IEFkZCBFZmwgV2ViS2l0MiBFV1MgYm90CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9l
ZmwvbWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwppbmRleCA4MDJkNTE4Li5k
ZDNkYmZlIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCisrKyBiL1Rv
b2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKQEAgLTE0NTEsNyArMTQ1MSw3IEBAIHN0YXRpYyBC
cm93c2VyX1dpbmRvdyAqd2luZG93X2NyZWF0ZShFdmFzX09iamVjdCAqb3BlbmVyLCBjb25zdCBj
aGFyICp1cmwsIGludCB3CiAgICAgZWxtX3dpbl9mdWxsc2NyZWVuX3NldCh3aW5kb3ctPmVsbV93
aW5kb3csIGZ1bGxzY3JlZW5fZW5hYmxlZCk7CiAgICAgZXdrX3NldHRpbmdzX2RldmVsb3Blcl9l
eHRyYXNfZW5hYmxlZF9zZXQoc2V0dGluZ3MsIEVJTkFfVFJVRSk7CiAgICAgZXdrX3NldHRpbmdz
X3ByZWZlcnJlZF9taW5pbXVtX2NvbnRlbnRzX3dpZHRoX3NldChzZXR0aW5ncywgMCk7Ci0gICAg
ZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZCk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX2VuYWJsZWRfc2V0KHNwZWxsX2NoZWNraW5nX2VuYWJsZWQpOwogCiAgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJhdXRoZW50aWNh
dGlvbixyZXF1ZXN0Iiwgb25fYXV0aGVudGljYXRpb25fcmVxdWVzdCwgd2luZG93KTsKICAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImRvd25sb2Fk
LGZhaWxlZCIsIG9uX2Rvd25sb2FkX2ZhaWxlZCwgd2luZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198691</attachid>
            <date>2013-04-18 01:25:40 -0700</date>
            <delta_ts>2013-04-18 06:02:58 -0700</delta_ts>
            <desc>pass &apos;this&apos; as clientInfo to the callbacks </desc>
            <filename>spelling-settings-refactor.patch</filename>
            <type>text/plain</type>
            <size>60814</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwYjE2ZDcyZS4uMzA4MzM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
MCBAQAorMjAxMy0wNC0xNSAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBzYW1z
dW5nLmNvbT4KKworICAgICAgICBbV0syXVtFRkxdIFRleHQgQ2hlY2tlcidzIHNldHRpbmdzIHJl
ZmFjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTE3MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
c2UgV0syJ3MgVGV4dENoZWNrZXJTdGF0ZSBvYmplY3QgYXMgdGhlIHN0b3JlIGZvciB0aGUgdGV4
dCBjaGVja2VyIHNldHRpbmdzLgorICAgICAgICBJdCdzIHNoYXJlZCBiZXR3ZWVuIHRoZSBjbGll
bnQgKEV3ayBBUEkgcGFydCkgYW5kIFdlYlByb2Nlc3MgKHJlYWQgb25seSkuCisgICAgICAgIFRo
YW5rcyB0byBpdCwgd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIGFueSBhZGRpdGlvbmFsIHN0cnVjdHVy
ZSB3aXRoCisgICAgICAgIHRoZSBzZXR0aW5ncyBvbiBld2sgc2lkZS4KKworICAgICAgICBJbiB0
aGUgY29uc2lzdGVuY3kgd2l0aCBXS1RleHRDaGVja2VyIEMgQVBJLCBtb3ZlIHRoZSBFd2sncyB0
ZXh0IGNoZWNrZXIgc2V0dGluZ3MgQVBJcworICAgICAgICB0byB0aGUgZXdrX3RleHRfY2hlY2tl
ci5oL2NwcC4gVGhleSdyZSBub3QgY29ubmVjdGVkIHRvIEV3a19WaWV3L0V3a19TZXR0aW5ncyBv
YmplY3QgdG8KKyAgICAgICAga2VlcCB0aGVtIGluIGV3a19zZXR0aW5nLmgvY3BwLgorCisgICAg
ICAgIEludHJvZHVjZSBhIG5ldyBjbGFzcyB0byBpbXBsZW1lbnQgV0tUZXh0Q2hlY2tlckNsaWVu
dCBjYWxsYmFja3MgdG8gY2FsbCBzcGVsbGluZworICAgICAgICBtZXRob2RzIHRocm91Z2ggV0sy
IEMgQVBJLgorICAgICAgICBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvIGRl
dGFjaCB0ZXh0IGNoZWNrZXIgaW5pdGlhbGl6YXRpb24gZnJvbSBld2tfY29udGV4dC4KKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICBBZGQgYSBuZXcgZmlsZXMgdG8gdGhl
IGJ1aWxkLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgor
ICAgICAgICAoRXdrQ29udGV4dDo6RXdrQ29udGV4dCk6CisgICAgICAgIERldGFjaCB0aGUgdGV4
dCBjaGVja2VyIGluaXRpYWxpemF0aW9uIGZyb20gY29udGV4dC4KKyAgICAgICAgVGhlcmUgbWln
aHQgYmUgbW9yZSB0aGFuIGRlZmF1bHQgY29udGV4dC4KKyAgICAgICAgVGhlcmUgaXMgb25lIHRl
eHQgY2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfc2V0dGluZ3MuaDoKKyAgICAgICAgUmVtb3ZlIHRoZSB0ZXh0IGNoZWNrZXIgc2V0dGluZ3Mu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcDoKKyAg
ICAgICAgQWRkIHRoZSB0ZXh0IGNoZWNrZXIgc2V0dGluZ3MgdG8gdGhlIGV3a190ZXh0X2NoZWNr
ZXIuaC9jcHAKKworICAgICAgICAoY29udmVydExhbmd1YWdlc1RvRWluYUxpc3QpOgorICAgICAg
ICBBZGQgaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgVmVjdG9yJ3MgdmFsdWVzIHRvIEVpbmFf
TGlzdC4KKworICAgICAgICAoY2xpZW50Q2FsbGJhY2tzKToKKyAgICAgICAgQWRkIHRoZSBjbGll
bnQgY2FsbGJhY2sgcmVzcG9uc2libGUgZm9yIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5n
CisgICAgICAgIHNldHRpbmcgY2hhbmdlIHRvIHRoZSBzdHJ1Y3QuCisKKyAgICAgICAgKGV3a190
ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCk6CisgICAg
ICAgIERvIG5vdCBjYWxsIHRoZSBjbGllbnQncyBjYWxsYmFjayByZXNwb25zaWJsZSBmb3IgdGhl
IHNldHRpbmcKKyAgICAgICAgY2hhbmdlIHVubGVzcyBXZWJLaXQgY2hhbmdlcyB0aGUgc2V0dGlu
ZyAodHJvdWdoIHRoZSBjb250ZXh0CisgICAgICAgICdDaGVjayBTcGVsbGluZyBXaGlsZSBUeXBp
bmcnIG9wdGlvbikuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVj
a2VyLmg6CisgICAgICAgIEFkanVzdCBBUElzIG5hbWUgdG8gdGhlIGV3a190ZXh0X2NoZWNrZXIg
c3ludGF4LgorICAgICAgICBVcGRhdGUgdGhlIGRvY3VtZW50YXRpb24gYWNjb3JkaW5nIHRvIHRo
ZSBjaGFuZ2VzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tl
cl9wcml2YXRlLmg6CisgICAgICAgIChDbGllbnRDYWxsYmFja3MpOgorICAgICAgICBNb3ZlIENs
aWVudENhbGxiYWNrcyBzdHJ1Y3R1cmUgdG8gVGV4dENoZWNrZXJDbGllbnRFZmwuCisgICAgICAg
IFRoZSBjbGllbnQgY2FsbGJhY2tzIChFd2sgQVBJKSBoYXZlIHRvIGJlIGFjY2Vzc2libGUgaW4g
V0tUZXh0Q2hlY2tlckNsaWVudCBjYWxsYmFja3MKKyAgICAgICAgdG8gY2hvb3NlIHdoYXQgaW1w
bGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIC0gdGhlIGNsaWVudCdzIChpZiBkZWZpbmllZCkgb3Ig
RW5jaGFudCBpbXBsLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9l
d2syX3RleHRfY2hlY2tlci5jcHA6CisgICAgICAgIFVwZGF0ZSB0aGUgdW5pdCB0ZXN0cyBhY2Nv
cmRpbmcgdG8gdGhlIEFQSXMgY2hhbmdlLgorICAgICAgICBVcGRhdGUgdGhlIHRlc3QgcmVzcG9u
c2libGUgZm9yIHRoZSBub3RpZmljYXRpb24gYWJvdXQgdGhlIHNldHRpbmcgY2hhbmdlCisgICAg
ICAgIGFjY29yZGluZyB0byBjaGFuZ2VzIGluICdld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQnLgorCisgICAgICAgICogVUlQcm9jZXNzL2VmbC9U
ZXh0Q2hlY2tlckNsaWVudEVmbC5jcHA6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnQgV0tUZXh0
Q2hlY2tlckNsaWVudCBjYWxsYmFja3MuCisKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZs
OjpUZXh0Q2hlY2tlckNsaWVudEVmbCk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6
aW5zdGFuY2UpOgorICAgICAgICBBbGxvdyB0byBnZXQgYW5kIGNyZWF0ZSBUZXh0Q2hlY2tlckNs
aWVudEVmbCBvYmplY3QuCisKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZsOjppc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIEdldCB0aGUgc2V0dGluZyB2YWx1
ZSBiYXNlZCBvbiBXSzIgQyBBUEkuCisKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZsOjpl
bnN1cmVTcGVsbENoZWNraW5nTGFuZ3VhZ2UpOgorICAgICAgICBMb2FkIHRoZSBkZWZhdWx0IGxh
bmd1YWdlcyBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4KKworICAgICAgICAoVGV4dENoZWNr
ZXJDbGllbnRFZmw6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAoVGV4
dENoZWNrZXJDbGllbnRFZmw6Omxhbmd1YWdlc1VwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAo
VGV4dENoZWNrZXJDbGllbnRFZmw6OmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgor
ICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmw6OmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMpOgorICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmw6OmF2YWlsYWJsZVNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMpOgorICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmw6OmxvYWRlZFNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICBQcm92aWRlIHN1cHBvcnQgZm9yIGxhbmd1YWdl
cy4KKworICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmw6OnNwZWxsQ2hlY2tpbmdTZXR0aW5n
Q2hhbmdlVGltZXJGaXJlZCk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6Y2FsbENv
bnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJhY2tBc3luYyk6CisgICAgICAgIE5vdGlm
eSB0aGUgY2xpZW50IGFib3V0IHRoZSBzZXR0aW5nIGNoYW5nZS4KKworICAgICAgICAoVGV4dENo
ZWNrZXJDbGllbnRFZmw6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2FsbGJhY2sp
OgorICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRFZmw6OnNldENvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZENhbGxiYWNrKToKKyAgICAgICAgKFRleHRDaGVja2VyQ2xpZW50RWZsOjp1bmlx
dWVTcGVsbERvY3VtZW50VGFnQ2FsbGJhY2spOgorICAgICAgICAoVGV4dENoZWNrZXJDbGllbnRF
Zmw6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWdDYWxsYmFjayk6CisgICAgICAgIChUZXh0Q2hl
Y2tlckNsaWVudEVmbDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nQ2FsbGJhY2spOgorICAgICAgICAo
VGV4dENoZWNrZXJDbGllbnRFZmw6Omd1ZXNzZXNGb3JXb3JkQ2FsbGJhY2spOgorICAgICAgICAo
VGV4dENoZWNrZXJDbGllbnRFZmw6OmxlYXJuV29yZENhbGxiYWNrKToKKyAgICAgICAgKFRleHRD
aGVja2VyQ2xpZW50RWZsOjppZ25vcmVXb3JkQ2FsbGJhY2spOgorICAgICAgICBXS1RleHRDaGVj
a2VyQ2xpZW50IGNhbGxiYWNrcyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9lZmwvVGV4dENoZWNrZXJDbGllbnRFZmwuaDogQWRkZWQuCisgICAgICAgIChUZXh0Q2hlY2tl
ckNsaWVudEVmbCk6CisgICAgICAgIChUZXh0Q2hlY2tlckNsaWVudEVmbDo6Y2xpZW50Q2FsbGJh
Y2tzKToKKyAgICAgICAgUmV0dXJuIHRoZSBjbGllbnQgY2FsbGJhY2tzIHRvIGJlIHVzZWQgaW4g
ZXdrX3RleHRfY2hlY2tlci5jcHAuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVj
a2VyRWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAg
ICAgSW5pdGlhbGl6ZSB0aGUgVGV4dENoZWNrZXJTdGF0ZSdzIG1lbWJlcnMgdG8gZmFsc2UuCisK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCk6CisgICAgICAgIFNldCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2VyIGRpZG4n
dCBzcGVjaWZ5IGFueS4KKyAgICAgICAgTm90aWZ5IHRoZSBjbGllbnQgYWJvdXQgdGhlIHNldHRp
bmcgY2hhbmdlLgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBjb250ZXh0IG1l
bnUgJ0NoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZycKKyAgICAgICAgb3B0aW9uIGhhcyBiZWVu
IHRvZ2dsZWQuCisKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIFNldCB0aGUgZGVmYXVsdCBs
YW5ndWFnZSBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4KKyAgICAgICAgQ2FsbGVkIGJ5IFdL
VGV4dENoZWNrZXIncyBBUEkuCisKIDIwMTMtMDQtMTYgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVy
c2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBDbG9uZSBzdG9yYWdlIG5hbWVzcGFjZXMgZm9yIHdp
bmRvdy5vcGVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDRmM2FiMTkuLjAxYzVmNjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xMDcsNiArMTA3LDcgQEAgbGlzdChBUFBF
TkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3Bw
CiAgICAgVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcAog
ICAgIFVJUHJvY2Vzcy9lZmwvUmVxdWVzdE1hbmFnZXJDbGllbnRFZmwuY3BwCisgICAgVUlQcm9j
ZXNzL2VmbC9UZXh0Q2hlY2tlckNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1RleHRD
aGVja2VyRWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvVmlicmF0aW9uQ2xpZW50RWZsLmNwcAog
ICAgIFVJUHJvY2Vzcy9lZmwvVmlld0NsaWVudEVmbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCA1NzBkNGJmLi41ZmRkY2Q5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwCkBAIC00NCwxMSArNDQsNiBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSNpbmNs
dWRlICJld2tfc2V0dGluZ3MuaCIKLSNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUu
aCIKLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiAKQEAgLTg2LDE0ICs4MSw2IEBAIEV3a0NvbnRleHQ6OkV3a0NvbnRleHQoV0tDb250
ZXh0UmVmIGNvbnRleHQpCiAgICAgICAgIGluaXRpYWxpemVNZW1vcnlTYW1wbGVyID0gdHJ1ZTsK
ICAgICB9CiAjZW5kaWYKLQotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIEV3a19UZXh0X0No
ZWNrZXI6OmluaXRpYWxpemUoKTsKLSAgICBpZiAoZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKSkgewotICAgICAgICAvLyBMb2FkIHRoZSBkZWZhdWx0
IGxhbmd1YWdlLgotICAgICAgICBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
X3NldCgwKTsKLSAgICB9Ci0jZW5kaWYKIH0KIAogRXdrQ29udGV4dDo6fkV3a0NvbnRleHQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdz
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAK
aW5kZXggM2Q0MzRkZjEuLjIxYjRiYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcApAQCAtMzMsMTQgKzMzLDYgQEAKICNpbmNsdWRl
IDxXZWJLaXQyL1dlYlBhZ2VQcm94eS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV2ViUHJlZmVyZW5j
ZXMuaD4KIAotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotI2luY2x1ZGUgIldLVGV4dENoZWNrZXIu
aCIKLSNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxFY29y
ZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogY29uc3QgV2ViS2l0OjpX
ZWJQcmVmZXJlbmNlcyogRXdrU2V0dGluZ3M6OnByZWZlcmVuY2VzKCkgY29uc3QKQEAgLTUzLDM1
ICs0NSw2IEBAIFdlYktpdDo6V2ViUHJlZmVyZW5jZXMqIEV3a1NldHRpbmdzOjpwcmVmZXJlbmNl
cygpCiAgICAgcmV0dXJuIG1fdmlldy0+cGFnZSgpLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMo
KTsKIH0KIAotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotc3RhdGljIHN0cnVjdCB7Ci0gICAgYm9v
bCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA6IDE7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gc3BlbGxDaGVja2luZ0xhbmd1YWdlczsKLSAgICBFd2tfU2V0dGluZ3NfQ29udGludW91c19T
cGVsbF9DaGVja2luZ19DaGFuZ2VfQ2Igb25Db250aW51b3VzU3BlbGxDaGVja2luZzsKLX0gZXdr
VGV4dENoZWNrZXJTZXR0aW5ncyA9IHsgZmFsc2UsIFZlY3RvcjxTdHJpbmc+KCksIDAgfTsKLQot
c3RhdGljIEVpbmFfQm9vbCBvbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nSWRsZXIodm9pZCopCi17
Ci0gICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxDaGVja2lu
ZykKLSAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5vbkNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nKGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQpOwotCi0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKLX0KLQotc3RhdGljIEVp
bmFfQm9vbCBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0VXBkYXRlKHZvaWQqKQotewotICAgIC8v
IEZJWE1FOiBDb25zaWRlciB0byBkZWxlZ2F0ZSBjYWxsaW5nIG9mIHRoaXMgbWV0aG9kIGluIFdl
YlByb2Nlc3MgdG8gZG8gbm90IGRlbGF5L2Jsb2NrIFVJUHJvY2Vzcy4KLSAgICBFd2tfVGV4dF9D
aGVja2VyOjp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGV3a1RleHRDaGVja2VyU2V0dGlu
Z3Muc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7Ci0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NB
TkNFTDsKLX0KLQotc3RhdGljIHZvaWQgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldChjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgbmV3TGFuZ3VhZ2VzKQotewotICAgIGV3a1RleHRDaGVja2VyU2V0dGlu
Z3Muc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IG5ld0xhbmd1YWdlczsKLSAgICBlY29yZV9pZGxl
cl9hZGQoc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldFVwZGF0ZSwgMCk7Ci19Ci0jZW5kaWYgLy8g
RU5BQkxFKFNQRUxMQ0hFQ0spCi0KIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfZnVsbHNjcmVlbl9l
bmFibGVkX3NldChFd2tfU2V0dGluZ3MqIHNldHRpbmdzLCBFaW5hX0Jvb2wgZW5hYmxlKQogewog
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKQEAgLTIwMiw3OCArMTY1LDYgQEAgRWluYV9Cb29s
IGV3a19zZXR0aW5nc19kbnNfcHJlZmV0Y2hpbmdfZW5hYmxlZF9nZXQoY29uc3QgRXdrX1NldHRp
bmdzKiBzZXR0aW5ncykKICAgICByZXR1cm4gc2V0dGluZ3MtPnByZWZlcmVuY2VzKCktPmRuc1By
ZWZldGNoaW5nRW5hYmxlZCgpOwogfQogCi12b2lkIGV3a19zZXR0aW5nc19jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQoRXdrX1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxf
Q2hlY2tpbmdfQ2hhbmdlX0NiIGNhbGxiYWNrKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQot
ICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxDaGVja2luZyA9IGNh
bGxiYWNrOwotI2VuZGlmCi19Ci0KLUVpbmFfQm9vbCBld2tfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpCi17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0g
ICAgcmV0dXJuIGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQ7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi12b2lkIGV3
a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KEVpbmFfQm9v
bCBlbmFibGUpCi17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgZW5hYmxlID0gISFlbmFi
bGU7Ci0gICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQgIT0gZW5hYmxlKSB7Ci0gICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3Mu
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGU7Ci0KLSAgICAgICAgV0tU
ZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFi
bGUpOwotCi0gICAgICAgIC8vIFNldHMgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaWYgdXNlciBkaWRu
J3Qgc3BlY2lmeSBhbnkuCi0gICAgICAgIGlmIChlbmFibGUgJiYgIUV3a19UZXh0X0NoZWNrZXI6
Omhhc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQo
VmVjdG9yPFN0cmluZz4oKSk7Ci0KLSAgICAgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3Mu
b25Db250aW51b3VzU3BlbGxDaGVja2luZykKLSAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChv
bkNvbnRpbnVvdXNTcGVsbENoZWNraW5nSWRsZXIsIDApOwotICAgIH0KLSNlbmRpZgotfQotCi1F
aW5hX0xpc3QqIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2Vz
X2dldCgpCi17Ci0gICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMgPSAwOwotI2lmIEVOQUJM
RShTUEVMTENIRUNLKQotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMgPSBFd2tf
VGV4dF9DaGVja2VyOjphdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci0gICAgc2l6
ZV90IG51bWJlck9mTGFudWFnZXMgPSBsYW5ndWFnZXMuc2l6ZSgpOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkxhbnVhZ2VzOyArK2kpCi0gICAgICAgIGxpc3RPZmxhbmd1
YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQobGlzdE9mbGFuZ3VhZ2VzLCBlaW5hX3N0cmluZ3NoYXJl
X2FkZChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOwotI2VuZGlmCi0gICAgcmV0dXJuIGxp
c3RPZmxhbmd1YWdlczsKLX0KLQotdm9pZCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX3NldChjb25zdCBjaGFyKiBsYW5ndWFnZXMpCi17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hF
Q0spCi0gICAgVmVjdG9yPFN0cmluZz4gbmV3TGFuZ3VhZ2VzOwotICAgIFN0cmluZzo6ZnJvbVVU
RjgobGFuZ3VhZ2VzKS5zcGxpdCgnLCcsIG5ld0xhbmd1YWdlcyk7Ci0KLSAgICBzcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzU2V0KG5ld0xhbmd1YWdlcyk7Ci0jZW5kaWYKLX0KLQotRWluYV9MaXN0KiBl
d2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpCi17Ci0gICAgRWluYV9M
aXN0KiBsaXN0T2ZsYW5ndWFnZXMgPSAwOwotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFZl
Y3RvcjxTdHJpbmc+IGxhbmd1YWdlcyA9IEV3a19UZXh0X0NoZWNrZXI6OmxvYWRlZFNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMoKTsKLSAgICBzaXplX3QgbnVtYmVyT2ZMYW51YWdlcyA9IGxhbmd1YWdl
cy5zaXplKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mTGFudWFnZXM7
ICsraSkKLSAgICAgICAgbGlzdE9mbGFuZ3VhZ2VzID0gZWluYV9saXN0X2FwcGVuZChsaXN0T2Zs
YW5ndWFnZXMsIGVpbmFfc3RyaW5nc2hhcmVfYWRkKGxhbmd1YWdlc1tpXS51dGY4KCkuZGF0YSgp
KSk7Ci0KLSNlbmRpZgotICAgIHJldHVybiBsaXN0T2ZsYW5ndWFnZXM7Ci19Ci0KIEVpbmFfQm9v
bCBld2tfc2V0dGluZ3NfZW5jb2RpbmdfZGV0ZWN0b3JfZW5hYmxlZF9zZXQoRXdrX1NldHRpbmdz
KiBzZXR0aW5ncywgRWluYV9Cb29sIGVuYWJsZSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2V0dGluZ3MsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgKaW5kZXggN2VhNzI1Yy4uODMxYzUxNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgKQEAgLTQz
LDE0ICs0Myw2IEBAIGV4dGVybiAiQyIgewogLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3
a19TZXR0aW5ncyAqLwogdHlwZWRlZiBzdHJ1Y3QgRXdrU2V0dGluZ3MgRXdrX1NldHRpbmdzOwog
Ci0vKioKLSAqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1
c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4KLSAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0LgotICoKLSAqIEBwYXJhbSBlbmFi
bGUgQGMgRUlOQV9UUlVFIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBv
ciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKLSAqLwotdHlwZWRlZiB2b2lkICgqRXdr
X1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiKShFaW5hX0Jvb2wg
ZW5hYmxlKTsKLQogCiAvKioKICAqIEVuYWJsZXMvZGlzYWJsZXMgdGhlIEphdmFzY3JpcHQgRnVs
bHNjcmVlbiBBUEkuIFRoZSBKYXZhc2NyaXB0IEFQSSBhbGxvd3MKQEAgLTIyOSw3NiArMjIxLDYg
QEAgRUFQSSBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2Ruc19wcmVmZXRjaGluZ19lbmFibGVkX3Nl
dChFd2tfU2V0dGluZ3MgKnNldHRpbmdzLAogRUFQSSBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2Ru
c19wcmVmZXRjaGluZ19lbmFibGVkX2dldChjb25zdCBFd2tfU2V0dGluZ3MgKnNldHRpbmdzKTsK
IAogLyoqCi0gKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNs
aWVudCB3aGVuCi0gKiB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBj
aGFuZ2VkIGJ5IFdlYktpdC4KLSAqCi0gKiBTcGVjaWZ5aW5nIG9mIHRoaXMgY2FsbGJhY2sgaXMg
bmVlZGVkIGlmIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMK
LSAqIG9uY2UgV2ViS2l0IGNoYW5nZXMgdGhpcyBzZXR0aW5nLgotICogSWYgdGhlIGFwcGxpY2F0
aW9uIGlzIG5vdCBpbnRlcmVzdGVkLCB0aGlzIGNhbGxiYWNrIGlzIG5vdCBzZXQuCi0gKiBDaGFu
Z2luZyBvZiB0aGlzIHNldHRpbmcgYXQgdGhlIFdlYktpdCBsZXZlbCBjYW4gYmUgbWFkZSBhcyBh
IHJlc3VsdCBvZiBtb2RpZnlpbmcKLSAqIG9wdGlvbnMgaW4gYSBDb250ZXh0IE1lbnUgYnkgYSB1
c2VyLgotICoKLSAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQgb3Ig
QGMgTlVMTCB0byBpbnZhbGlkYXRlIHRoZSBwcmV2aW91cyBvbmUKLSAqLwotRUFQSSB2b2lkIGV3
a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQoRXdrX1Nl
dHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIGNiKTsKLQotLyoqCi0g
KiBRdWVyaWVzIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZC4KLSAqCi0g
KiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVu
YWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCi0gKi8KLUVBUEkgRWluYV9C
b29sIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KHZv
aWQpOwotCi0vKioKLSAqIEVuYWJsZXMvZGlzYWJsZXMgY29udGludW91cyBzcGVsbCBjaGVja2lu
Zy4KLSAqCi0gKiBBZGRpdGlvbmFsbHksIHRoaXMgZnVuY3Rpb24gY2FsbHMgYSBjYWxsYmFjayBm
dW5jdGlvbiAoaWYgZGVmaW5lZCkgdG8gbm90aWZ5Ci0gKiB0aGUgY2xpZW50IGFib3V0IHRoZSBj
aGFuZ2Ugb2YgdGhlIHNldHRpbmcuCi0gKiBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVm
YXVsdC4KLSAqCi0gKiBAc2VlIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2NoYW5nZV9jYl9zZXQKLSAqCi0gKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSB0byBlbmFi
bGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBvciBAYyBFSU5BX0ZBTFNFIHRvIGRpc2FibGUK
LSAqLwotRUFQSSB2b2lkIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfc2V0KEVpbmFfQm9vbCBlbmFibGUpOwotCi0vKioKLSAqIEdldHMgdGhlIHRoZSBsaXN0
IG9mIGFsbCBhdmFpbGFibGUgdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyB0byB1c2UuCi0g
KgotICogQHNlZSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldAotICoK
LSAqIEByZXR1cm4gdGhlIGxpc3Qgd2l0aCBhdmFpbGFibGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3Vh
Z2VzLCBvciBAYyBOVUxMIG9uIGZhaWx1cmUKLSAqICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQg
aXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciwgdXNlIGVpbmFfc3RyaW5nc2hhcmVfZGVs
KCkKLSAqLwotRUFQSSBFaW5hX0xpc3QgKmV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFp
bGFibGVfbGFuZ3VhZ2VzX2dldCh2b2lkKTsKLQotLyoqCi0gKiBTZXRzIEBhIGxhbmd1YWdlcyBh
cyB0aGUgbGlzdCBvZiBsYW5ndWFnZXMgdG8gdXNlIGJ5IGRlZmF1bHQgV2ViS2l0Ci0gKiBpbXBs
ZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNrZXIgZmVhdHVyZSB3aXRoIEVuY2hhbnQgbGlicmFyeSBz
dXBwb3J0LgotICoKLSAqIElmIEBsYW5ndWFnZXMgaXMgQGMgTlVMTCwgdGhlIGRlZmF1bHQgbGFu
Z3VhZ2UgaXMgdXNlZC4KLSAqIElmIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGNhbiBub3QgYmUgZGV0
ZXJtaW5lZCB0aGVuIGFueSBhdmFpbGFibGUgZGljdGlvbmFyeSB3aWxsIGJlIHVzZWQuCi0gKgot
ICogQG5vdGUgVGhpcyBmdW5jdGlvbiBpbnZhbGlkYXRlcyB0aGUgcHJldmlvdXNseSBzZXQgbGFu
Z3VhZ2VzLgotICogICAgICAgVGhlIGRpY3Rpb25hcmllcyBhcmUgcmVxdWVzdGVkIGFzeW5jaHJv
bm91c2x5LgotICoKLSAqIEBwYXJhbSBsYW5ndWFnZXMgYSBsaXN0IG9mIGNvbW1hICgnLCcpIHNl
cGFyYXRlZCBsYW5ndWFnZSBjb2RlcwotICogICAgICAgIG9mIHRoZSBmb3JtICdlbl9VUycsIGll
LCBsYW5ndWFnZV9WQVJJQU5ULCBtYXkgYmUgQGMgTlVMTC4KLSAqLwotRUFQSSB2b2lkIGV3a19z
ZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0IGNoYXIgKmxhbmd1YWdl
cyk7Ci0KLS8qKgotICogR2V0cyB0aGUgdGhlIGxpc3Qgb2YgdGhlIHNwZWxsIGNoZWNraW5nIGxh
bmd1YWdlcyBpbiB1c2UuCi0gKgotICogQHNlZSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdf
YXZhaWxhYmxlX2xhbmd1YWdlc19nZXQKLSAqIEBzZWUgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlc19zZXQKLSAqCi0gKiBAcmV0dXJuIHRoZSBsaXN0IHdpdGggdGhlIHNwZWxs
IGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1c2UsCi0gKiAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5k
IGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIsIHVzZSBlaW5hX3N0cmluZ3NoYXJlX2Rl
bCgpCi0gKi8KLUVBUEkgRWluYV9MaXN0ICpld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX2dldCh2b2lkKTsKLQotLyoqCiAgKiBFbmFibGVzL2Rpc2FibGVzIHRoZSBlbmNvZGlu
ZyBkZXRlY3Rvci4KICAqCiAgKiBCeSBkZWZhdWx0LCB0aGUgZW5jb2RpbmcgZGV0ZWN0b3IgaXMg
ZGlzYWJsZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdGV4dF9jaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXIuY3BwCmluZGV4IDM4NmNhNzguLjY4NDZlNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTI4LDIwMiArMjgsOTQgQEAKICNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCiAKICNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudEVmbC5oIgorI2Vs
c2UKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExD
SEVDSykKIAotI2luY2x1ZGUgIkV3a1ZpZXcuaCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tlckVuY2hh
bnQuaCIKLSNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJp
bmcuaCIKLSNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgotI2luY2x1ZGUgIldLUmV0YWluUHRy
LmgiCi0jaW5jbHVkZSAiV0tTdHJpbmcuaCIKLSNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCi0j
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCi0jaW5j
bHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCi0jaW5jbHVkZSA8RWluYS5oPgotI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCi0vKioKLSAqIEBicmll
ZiBTdHJ1Y3R1cmUgdG8gc3RvcmUgY2xpZW50IGNhbGxiYWNrIGZ1bmN0aW9ucy4KLSAqCi0gKiBA
aW50ZXJuYWwKLSAqLwotc3RydWN0IENsaWVudENhbGxiYWNrcyB7Ci0gICAgRXdrX1RleHRfQ2hl
Y2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9DYiB1bmlxdWVfc3BlbGxfZG9jdW1l
bnRfdGFnX2dldDsKLSAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9U
YWdfQ2xvc2VfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZTsKLSAgICBFd2tfVGV4
dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19DYiBzdHJpbmdfc3BlbGxpbmdfY2hlY2s7
Ci0gICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNfR2V0X0NiIHdvcmRfZ3Vlc3Nlc19n
ZXQ7Ci0gICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0NiIHdvcmRfbGVhcm47Ci0gICAg
RXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYiB3b3JkX2lnbm9yZTsKLX07Ci0KLXN0YXRp
YyBpbmxpbmUgVGV4dENoZWNrZXJFbmNoYW50KiB0ZXh0Q2hlY2tlckVuY2hhbnQoKQorc3RhdGlj
IEVpbmFfTGlzdCogY29udmVydExhbmd1YWdlc1RvRWluYUxpc3QoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGxhbmd1YWdlcykKIHsKLSAgICBzdGF0aWMgT3duUHRyPFRleHRDaGVja2VyRW5jaGFudD4g
dGV4dENoZWNrZXJFbmNoYW50ID0gVGV4dENoZWNrZXJFbmNoYW50OjpjcmVhdGUoKTsKLSAgICBy
ZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50LmdldCgpOwotfQorICAgIEVpbmFfTGlzdCogbGlzdE9m
bGFuZ3VhZ2VzID0gMDsKKyAgICBzaXplX3QgbnVtYmVyT2ZMYW5ndWFnZXMgPSBsYW5ndWFnZXMu
c2l6ZSgpOwogCi1zdGF0aWMgaW5saW5lIENsaWVudENhbGxiYWNrcyYgY2xpZW50Q2FsbGJhY2tz
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENsaWVudENhbGxiYWNrcywgY2xpZW50Q2Fs
bGJhY2tzLCAoKSk7Ci0gICAgcmV0dXJuIGNsaWVudENhbGxiYWNrczsKLX0KKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bWJlck9mTGFuZ3VhZ2VzOyArK2kpCisgICAgICAgIGxpc3RPZmxh
bmd1YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQobGlzdE9mbGFuZ3VhZ2VzLCBlaW5hX3N0cmluZ3No
YXJlX2FkZChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOwogCi1zdGF0aWMgYm9vbCBpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4g
ZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKKyAg
ICByZXR1cm4gbGlzdE9mbGFuZ3VhZ2VzOwogfQogCi1zdGF0aWMgdm9pZCBzZXRDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkKikKLXsKLSAgICBl
d2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChlbmFibGVk
KTsKKyNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBOQU1F
KSAgICAgICAgICAgIFwKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl8jI05BTUUjI19jYl9zZXQoVFlQ
RV9OQU1FIGNiKSAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUZXh0Q2hlY2tlckNs
aWVudEVmbDo6aW5zdGFuY2UoKS5jbGllbnRDYWxsYmFja3MoKS5OQU1FID0gY2I7IFwKIH0KIAot
c3RhdGljIHVpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNv
bnN0IHZvaWQqKQotewotICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS51bmlxdWVfc3BlbGxfZG9j
dW1lbnRfdGFnX2dldCkKLSAgICAgICAgcmV0dXJuIGNsaWVudENhbGxiYWNrcygpLnVuaXF1ZV9z
cGVsbF9kb2N1bWVudF90YWdfZ2V0KEV3a1ZpZXc6OnRvRXZhc09iamVjdChwYWdlKSk7Ci0KLSAg
ICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1
aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqKQotewotICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS51
bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQotICAgICAgICBjbGllbnRDYWxsYmFja3Mo
KS51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKHRhZyk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGNoZWNrU3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGlu
dDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBj
b25zdCB2b2lkKikKLXsKLSAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkuc3RyaW5nX3NwZWxsaW5n
X2NoZWNrKQotICAgICAgICBjbGllbnRDYWxsYmFja3MoKS5zdHJpbmdfc3BlbGxpbmdfY2hlY2so
dGFnLCBXS0VpbmFTaGFyZWRTdHJpbmcodGV4dCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3Nw
ZWxsaW5nTGVuZ3RoKTsKLSAgICBlbHNlCi0gICAgICAgIHRleHRDaGVja2VyRW5jaGFudCgpLT5j
aGVja1NwZWxsaW5nT2ZTdHJpbmcodG9XVEZTdHJpbmcodGV4dCksICptaXNzcGVsbGluZ0xvY2F0
aW9uLCAqbWlzc3BlbGxpbmdMZW5ndGgpOwotfQotCi1zdGF0aWMgV0tBcnJheVJlZiBndWVzc2Vz
Rm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQotewot
ICAgIFdLTXV0YWJsZUFycmF5UmVmIHN1Z2dlc3Rpb25zRm9yV29yZCA9IFdLTXV0YWJsZUFycmF5
Q3JlYXRlKCk7Ci0KLSAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkud29yZF9ndWVzc2VzX2dldCkg
ewotICAgICAgICBFaW5hX0xpc3QqIGxpc3QgPSBjbGllbnRDYWxsYmFja3MoKS53b3JkX2d1ZXNz
ZXNfZ2V0KHRhZywgV0tFaW5hU2hhcmVkU3RyaW5nKHdvcmQpKTsKLSAgICAgICAgdm9pZCogaXRl
bTsKLQotICAgICAgICBFSU5BX0xJU1RfRlJFRShsaXN0LCBpdGVtKSB7Ci0gICAgICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oaXRlbSkpKTsKLSAgICAg
ICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlvbi5n
ZXQoKSk7Ci0gICAgICAgICAgICBmcmVlKGl0ZW0pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMgPSB0ZXh0Q2hlY2tlckVuY2hh
bnQoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQodG9XVEZTdHJpbmcod29yZCkpOwotICAgICAgICBzaXpl
X3QgbnVtYmVyT2ZHdWVzc2VzID0gZ3Vlc3Nlcy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZHdWVzc2VzOyArK2kpIHsKLSAgICAgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKGd1ZXNzZXNbaV0udXRmOCgpLmRhdGEoKSkpOwotICAgICAgICAgICAgV0tBcnJh
eUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9uLmdldCgpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBzdWdnZXN0aW9uc0ZvcldvcmQ7Ci19CisjZWxzZQog
Ci1zdGF0aWMgdm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBj
b25zdCB2b2lkKikKLXsKLSAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkud29yZF9sZWFybikKLSAg
ICAgICAgY2xpZW50Q2FsbGJhY2tzKCkud29yZF9sZWFybih0YWcsIFdLRWluYVNoYXJlZFN0cmlu
Zyh3b3JkKSk7Ci0gICAgZWxzZQotICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+bGVhcm5X
b3JkKHRvV1RGU3RyaW5nKHdvcmQpKTsKKy8vIERlZmluZXMgYW4gZW1wdHkgQVBJIHRvIGRvIG5v
dCBicmVhayBidWlsZC4KKyNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQ
RV9OQU1FLCBOQU1FKSAgXAordm9pZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChU
WVBFX05BTUUpICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKIH0KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKIAot
c3RhdGljIHZvaWQgaWdub3JlV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNv
bnN0IHZvaWQqKQorRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19zcGVsbF9j
aGVja2luZ19lbmFibGVkX2dldCgpCiB7Ci0gICAgaWYgKGNsaWVudENhbGxiYWNrcygpLndvcmRf
aWdub3JlKQotICAgICAgICBjbGllbnRDYWxsYmFja3MoKS53b3JkX2lnbm9yZSh0YWcsIFdLRWlu
YVNoYXJlZFN0cmluZyh3b3JkKSk7Ci0gICAgZWxzZQotICAgICAgICB0ZXh0Q2hlY2tlckVuY2hh
bnQoKS0+aWdub3JlV29yZCh0b1dURlN0cmluZyh3b3JkKSk7CisjaWYgRU5BQkxFKFNQRUxMQ0hF
Q0spCisgICAgcmV0dXJuIFRleHRDaGVja2VyQ2xpZW50RWZsOjppbnN0YW5jZSgpLmlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgogfQogCi1uYW1lc3BhY2UgRXdrX1RleHRfQ2hlY2tlciB7Ci0KLVZlY3RvcjxTdHJpbmc+
IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQordm9pZCBld2tfdGV4dF9jaGVja2Vy
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoRWluYV9Cb29sIGVuYWJsZSkK
IHsKLSAgICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50KCktPmF2YWlsYWJsZVNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXS1RleHRDaGVja2Vy
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKCEhZW5hYmxlKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZSk7CisjZW5kaWYKIH0KIAotdm9pZCB1cGRhdGVT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpCitF
aW5hX0xpc3QqIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1
YWdlc19nZXQoKQogewotICAgIHRleHRDaGVja2VyRW5jaGFudCgpLT51cGRhdGVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7CisgICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMg
PSAwOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIC8vIEZJWE1FOiBFeHBvc2UgV0syIEMg
QVBJIHRvIGdldCBhdmFpbGFibGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzLgorICAgIGxpc3RP
Zmxhbmd1YWdlcyA9IGNvbnZlcnRMYW5ndWFnZXNUb0VpbmFMaXN0KFRleHRDaGVja2VyQ2xpZW50
RWZsOjppbnN0YW5jZSgpLmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKSk7CisjZW5k
aWYKKyAgICByZXR1cm4gbGlzdE9mbGFuZ3VhZ2VzOwogfQogCi1WZWN0b3I8U3RyaW5nPiBsb2Fk
ZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0IGNoYXIqIGxhbmd1YWdlcykKIHsKLSAgICByZXR1
cm4gdGV4dENoZWNrZXJFbmNoYW50KCktPmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsK
LX0KKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5nPiBuZXdMYW5ndWFn
ZXM7CisgICAgU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZXMpLnNwbGl0KCcsJywgbmV3TGFuZ3Vh
Z2VzKTsKIAotYm9vbCBoYXNEaWN0aW9uYXJ5KCkKLXsKLSAgICByZXR1cm4gdGV4dENoZWNrZXJF
bmNoYW50KCktPmhhc0RpY3Rpb25hcnkoKTsKKyAgICAvLyBGSVhNRTogRXhwb3NlIFdLMiBDIEFQ
SSB0byBzZXQgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzLgorICAgIFRleHRDaGVja2VyQ2xpZW50
RWZsOjppbnN0YW5jZSgpLnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMobmV3TGFuZ3VhZ2Vz
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGxhbmd1YWdlcyk7CisjZW5kaWYKIH0KIAotLyoq
Ci0gKiBJbml0aWFsaXplcyBzcGVsbGNoZWNrIGZlYXR1cmUuCi0gKgotICogQGludGVybmFsCi0g
KgotICogVGhlIGRlZmF1bHQgc3BlbGxjaGVjayBmZWF0dXJlIGlzIGJhc2VkIG9uIEVuY2hhbnQg
bGlicmFyeS4KLSAqIENsaWVudCBtYXkgdXNlIG93biBzcGVsbGNoZWNrIGltcGxlbWVudGF0aW9u
IHByZXZpb3VzbHkgc2V0Ci0gKiB0aHJvdWdoIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMuCi0gKi8K
LXZvaWQgaW5pdGlhbGl6ZSgpCitFaW5hX0xpc3QqIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzX2dldCgpCiB7Ci0gICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZVRl
eHRDaGVja2VyQ2xpZW50ID0gZmFsc2U7Ci0gICAgaWYgKGRpZEluaXRpYWxpemVUZXh0Q2hlY2tl
ckNsaWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV0tUZXh0Q2hlY2tlckNsaWVudCB0ZXh0
Q2hlY2tlckNsaWVudCA9IHsKLSAgICAgICAga1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVy
c2lvbiwKLSAgICAgICAgMCwgLy8gY2xpZW50SW5mbwotICAgICAgICAwLCAvLyBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nQWxsb3dlZAotICAgICAgICBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCwKLSAgICAgICAgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAotICAg
ICAgICAwLCAvLyBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQKLSAgICAgICAgMCwgLy8gc2V0R3Jh
bW1hckNoZWNraW5nRW5hYmxlZAotICAgICAgICB1bmlxdWVTcGVsbERvY3VtZW50VGFnLAotICAg
ICAgICBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnLAotICAgICAgICBjaGVja1NwZWxsaW5nT2ZT
dHJpbmcsCi0gICAgICAgIDAsIC8vIGNoZWNrR3JhbW1hck9mU3RyaW5nCi0gICAgICAgIDAsIC8v
IHNwZWxsaW5nVUlJc1Nob3dpbmcKLSAgICAgICAgMCwgLy8gdG9nZ2xlU3BlbGxpbmdVSUlzU2hv
d2luZwotICAgICAgICAwLCAvLyB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkCi0g
ICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZwotICAgICAgICBn
dWVzc2VzRm9yV29yZCwKLSAgICAgICAgbGVhcm5Xb3JkLAotICAgICAgICBpZ25vcmVXb3JkCi0g
ICAgfTsKLSAgICBXS1RleHRDaGVja2VyU2V0Q2xpZW50KCZ0ZXh0Q2hlY2tlckNsaWVudCk7Ci0K
LSAgICBkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQgPSB0cnVlOwotfQotCi19IC8vIG5h
bWVzcGFjZSBFd2tfVGV4dF9DaGVja2VyCi0KLSNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxM
QkFDS19TRVQoVFlQRV9OQU1FLCBOQU1FKSAgXAotdm9pZCBld2tfdGV4dF9jaGVja2VyXyMjTkFN
RSMjX2NiX3NldChUWVBFX05BTUUgY2IpICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGllbnRDYWxsYmFja3MoKS5O
QU1FID0gY2I7ICAgICAgXAotfQotCi0jZWxzZQotCi0vLyBEZWZpbmVzIGFuIGVtcHR5IEFQSSB0
byBkbyBub3QgYnJlYWsgYnVpbGQuCi0jZGVmaW5lIEVXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tf
U0VUKFRZUEVfTkFNRSwgTkFNRSkgIFwKLXZvaWQgZXdrX3RleHRfY2hlY2tlcl8jI05BTUUjI19j
Yl9zZXQoVFlQRV9OQU1FKSAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFn
ZXMgPSAwOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIC8vIEZJWE1FOiBFeHBvc2UgV0sy
IEMgQVBJIHRvIGdldCBsb2FkZWQgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzLgorICAgIGxpc3RP
Zmxhbmd1YWdlcyA9IGNvbnZlcnRMYW5ndWFnZXNUb0VpbmFMaXN0KFRleHRDaGVja2VyQ2xpZW50
RWZsOjppbnN0YW5jZSgpLmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKSk7CisjZW5kaWYK
KyAgICByZXR1cm4gbGlzdE9mbGFuZ3VhZ2VzOwogfQotI2VuZGlmIC8vIEVOQUJMRShTUEVMTENI
RUNLKQogCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX0Nv
bnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiLCBjb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2NoYW5nZSkKIEVXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNr
ZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19HZXRfQ2IsIHVuaXF1ZV9zcGVsbF9kb2N1bWVu
dF90YWdfZ2V0KQogRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tl
cl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlX0NiLCB1bmlxdWVfc3BlbGxfZG9jdW1l
bnRfdGFnX2Nsb3NlKQogRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hl
Y2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2tfQ2IsIHN0cmluZ19zcGVsbGluZ19jaGVjaykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNr
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIu
aAppbmRleCBiN2FlYTg4Li4wMzAwODY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI1LDExICsyNSwxNCBAQAogCiAvKioKICAqIEBmaWxlIGV3a190ZXh0X2NoZWNr
ZXIuaAotICogQGJyaWVmIFByb3ZpZGVzIEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2Vi
S2l0IHNwZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlvbi4KKyAqIEBicmllZiBQcm92aWRlcyBBUEkg
dG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRp
b24KKyAqICAgICAgICBhbmQgY29udGFpbnMgQVBJIHRvIG1hbmlwdWxhdGUgc3BlbGxjaGVja2Vy
IHNldHRpbmdzLgogICoKLSAqIFRoZXJlIGlzIG9uZSBzcGVsbGNoZWNrZXIgb2JqZWN0IHBlciBh
cHBsaWNhdGlvbiBhbmQgaXQncyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICogVGhlcmUgaXMgb25l
IHNwZWxsY2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0aW9uLgogICogSXQgYWxsb3dzIHRvIGNo
ZWNrIHNwZWxsaW5nIGluIHRoZSBlZGl0YWJsZSBhcmVhcy4KLSAqIElmIGFwcGxpY2F0aW9uIHdh
bnRzIHRvIGVuYWJsZSB0aGUgZmVhdHVyZSwgQVBJIGZyb20gZXdrX3NldHRpbmdzLmgKKyAqCisg
KiBUaGUgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICogSWYgYXBwbGljYXRpb24g
d2FudHMgdG8gZW5hYmxlIGl0LCBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfZW5hYmxlZF9zZXQgQVBJCiAgKiBzaG91bGQgYmUgdXNlZC4KICAqCiAgKiBUaGUgZGVm
YXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBF
bmNoYW50IGxpYnJhcnkuCkBAIC00OCw2ICs1MSwxNCBAQCBleHRlcm4gIkMiIHsKICNlbmRpZgog
CiAvKioKKyAqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1
c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4KKyAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0LgorICoKKyAqIEBwYXJhbSBlbmFi
bGUgQGMgRUlOQV9UUlVFIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBv
ciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdr
X1RleHRfQ2hlY2tlcl9Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZV9DYikoRWluYV9C
b29sIGVuYWJsZSk7CisKKy8qKgogICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxi
YWNrIGZ1bmN0aW9uIHRvIHJldHVybiBhIHRhZyAoaWRlbnRpZmllcikgd2hpY2ggaXMgZ3VhcmFu
dGVlZCB0byBiZSB1bmlxdWUuCiAgKgogICogVW5pcXVlIHRhZ3MgaGVscCB0byBhdm9pZCBjb2xs
aXNpb25zIHdpdGggb3RoZXIgb2JqZWN0cyB0aGF0IGFyZSBjaGVja2VkIGZvciBzcGVsbGluZyBt
aXN0YWtlcy4KQEAgLTEwOCw2ICsxMTksNzUgQEAgdHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hl
Y2tlcl9Xb3JkX0xlYXJuX0NiKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOwogICov
CiB0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlX0NiKSh1aW50NjRf
dCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOwogCisKKy8qKgorICogUXVlcmllcyBpZiBjb250aW51
b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RS
VUUgaWYgY29udGludW91cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkIG9yIEBjIEVJTkFfRkFM
U0UgaWYgaXQncyBkaXNhYmxlZAorICovCitFQVBJIEVpbmFfQm9vbCBld2tfdGV4dF9jaGVja2Vy
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQodm9pZCk7CisKKy8qKgorICog
RW5hYmxlcy9kaXNhYmxlcyBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nLgorICoKKyAqIFRoaXMg
ZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICoKKyAqIEBzZWUgZXdrX3RleHRfY2hl
Y2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQKKyAqCisgKiBAcGFy
YW0gZW5hYmxlIEBjIEVJTkFfVFJVRSB0byBlbmFibGUgY29udGludW91cyBzcGVsbCBjaGVja2lu
ZyBvciBAYyBFSU5BX0ZBTFNFIHRvIGRpc2FibGUKKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2No
ZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChFaW5hX0Jvb2wgZW5h
YmxlKTsKKworLyoqCisgKiBHZXRzIHRoZSB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHRoZSBz
cGVsbCBjaGVja2luZyBsYW5ndWFnZXMgdG8gdXNlLgorICoKKyAqIEBzZWUgZXdrX3NldHRpbmdz
X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQKKyAqCisgKiBAcmV0dXJuIHRoZSBsaXN0IHdp
dGggYXZhaWxhYmxlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcywgb3IgQGMgTlVMTCBvbiBmYWls
dXJlCisgKiAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJl
ZWQgYWZ0ZXIsIHVzZSBlaW5hX3N0cmluZ3NoYXJlX2RlbCgpCisgKi8KK0VBUEkgRWluYV9MaXN0
ICpld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0
KHZvaWQpOworCisvKioKKyAqIFNldHMgQGEgbGFuZ3VhZ2VzIGFzIHRoZSBsaXN0IG9mIGxhbmd1
YWdlcyB0byB1c2UgYnkgZGVmYXVsdCBXZWJLaXQKKyAqIGltcGxlbWVudGF0aW9uIG9mIHNwZWxs
Y2hlY2tlciBmZWF0dXJlIHdpdGggRW5jaGFudCBsaWJyYXJ5IHN1cHBvcnQuCisgKgorICogSWYg
QGxhbmd1YWdlcyBpcyBAYyBOVUxMLCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpcyB1c2VkLgorICog
SWYgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgY2FuIG5vdCBiZSBkZXRlcm1pbmVkIHRoZW4gYW55IGF2
YWlsYWJsZSBkaWN0aW9uYXJ5IHdpbGwgYmUgdXNlZC4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0
aW9uIGludmFsaWRhdGVzIHRoZSBwcmV2aW91c2x5IHNldCBsYW5ndWFnZXMuCisgKiAgICAgICBU
aGUgZGljdGlvbmFyaWVzIGFyZSByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkuCisgKgorICogQHBh
cmFtIGxhbmd1YWdlcyBhIGxpc3Qgb2YgY29tbWEgKCcsJykgc2VwYXJhdGVkIGxhbmd1YWdlIGNv
ZGVzCisgKiAgICAgICAgb2YgdGhlIGZvcm0gJ2VuX1VTJywgaWUsIGxhbmd1YWdlX1ZBUklBTlQs
IG1heSBiZSBAYyBOVUxMLgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0IGNoYXIgKmxhbmd1YWdlcyk7CisKKy8qKgorICog
R2V0cyB0aGUgdGhlIGxpc3Qgb2YgdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1c2Uu
CisgKgorICogQHNlZSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1
YWdlc19nZXQKKyAqIEBzZWUgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19z
ZXQKKyAqCisgKiBAcmV0dXJuIHRoZSBsaXN0IHdpdGggdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1
YWdlcyBpbiB1c2UsCisgKiAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91
bGQgYmUgZnJlZWQgYWZ0ZXIsIHVzZSBlaW5hX3N0cmluZ3NoYXJlX2RlbCgpCisgKi8KK0VBUEkg
RWluYV9MaXN0ICpld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQo
dm9pZCk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5
IHRoZSBjbGllbnQgd2hlbgorICogdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0dGlu
ZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogU3BlY2lmeWluZyBvZiB0aGlzIGNhbGxi
YWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3RpZmlj
YXRpb25zCisgKiBvbmNlIFdlYktpdCBjaGFuZ2VzIHRoaXMgc2V0dGluZy4KKyAqIElmIHRoZSBh
cHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0Lgor
ICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJlIG1h
ZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBNZW51
IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24gdG8g
c2V0IG9yIEBjIE5VTEwgdG8gaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMgb25lCisgKi8KK0VBUEkg
dm9pZCBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2Ni
X3NldChFd2tfVGV4dF9DaGVja2VyX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0Ni
IGNiKTsKKwogLyoqCiAgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGEgdW5pcXVl
IHNwZWxsIGRvY3VtZW50IHRhZy4KICAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCmluZGV4IDZjNDcz
MGUuLmYxMTNjYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SW50ZWwgQ29ycG9yYXRpb24KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMxLDE3ICszMSwyMCBAQAog
CiAjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgogCi1uYW1lc3BhY2UgRXdrX1RleHRfQ2hl
Y2tlciB7Ci0KLXZvaWQgaW5pdGlhbGl6ZSgpOwotCi0vLyBFbmNoYW50IGhlbHBlcnMuCi1WZWN0
b3I8U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci12b2lkIHVwZGF0
ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcyk7
Ci1WZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci1ib29sIGhh
c0RpY3Rpb25hcnkoKTsKLQotfQorLyoqCisgKiBAYnJpZWYgU3RydWN0dXJlIHRvIHN0b3JlIGNs
aWVudCBjYWxsYmFjayBmdW5jdGlvbnMuCisgKgorICogQGludGVybmFsCisgKi8KK3N0cnVjdCBD
bGllbnRDYWxsYmFja3MgeworICAgIEV3a19UZXh0X0NoZWNrZXJfQ29udGludW91c19TcGVsbF9D
aGVja2luZ19DaGFuZ2VfQ2IgY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2U7CisgICAg
RXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9DYiB1bmlxdWVf
c3BlbGxfZG9jdW1lbnRfdGFnX2dldDsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVs
bF9Eb2N1bWVudF9UYWdfQ2xvc2VfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZTsK
KyAgICBFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19DYiBzdHJpbmdfc3Bl
bGxpbmdfY2hlY2s7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNfR2V0X0NiIHdv
cmRfZ3Vlc3Nlc19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0NiIHdvcmRf
bGVhcm47CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYiB3b3JkX2lnbm9yZTsK
K307CiAKICNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKICNlbmRpZiAvLyBld2tfdGV4dF9j
aGVja2VyX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcAppbmRleCA4
MmRhMDlhLi40Y2UzODhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcApAQCAt
MjEzLDIyICsyMTMsMjIgQEAgc3RhdGljIHZvaWQgb25Xb3JkSWdub3JlKHVpbnQ2NF90IHRhZywg
Y29uc3QgY2hhciogd29yZCkKIH0KIAogLyoqCi0gKiBUZXN0IHNldHRlci9nZXR0ZXIgZm9yIHRo
ZSBjb250aW5vdXMgc3BlbGwgY2hlY2tpbmc6Ci0gKiAgLSBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldAotICogIC0gZXdrX3NldHRpbmdzX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQKKyAqIFRlc3Qgc2V0dGVyL2dldHRlciBmb3Ig
dGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmc6CisgKiAgLSBld2tfdGV4dF9jaGVja2VyX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQKKyAqICAtIGV3a190ZXh0X2NoZWNr
ZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldAogICovCi1URVNUX0YoRVdL
MlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5h
YmxlZCkKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCkKIHsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9jaGVja2Vy
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCi0gICAgRVhQRUNUX1RSVUUoZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoZXdrX3RleHRfY2hl
Y2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOwogCiAgICAgLy8g
V2hlbiB0aGUgc3BlbGwgY2hlY2tpbmcgaGFzIGJlZW4gZW5hYmxlZCwgdGhlIGRlZmF1bHQgbGFu
Z3VhZ2UgaXMgc2V0IChpZiB0aGUgdXNlcgogICAgIC8vIGRpZG4ndCBzZXQgYW55KS4gVGhlIGxh
bmd1YWdlcyBhcmUgYmVpbmcgbG9hZGVkIG9uIHRoZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KICAg
ICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMs
IG9uVGltZW91dCwgMCk7CiAgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CiAKLSAgICBFaW5h
X0xpc3QqIGxvYWRlZExhbmd1YWdlcyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5n
dWFnZXNfZ2V0KCk7CisgICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfdGV4dF9j
aGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKICAgICAvLyBObyBkaWN0aW9u
YXJ5IGlzIGF2YWlsYWJsZS9pbnN0YWxsZWQuCiAgICAgaWYgKCFsb2FkZWRMYW5ndWFnZXMpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIzOSwyMyArMjM5LDI3IEBAIFRFU1RfRihFV0syVW5pdFRlc3RC
YXNlLCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkKQogICAg
IEVJTkFfTElTVF9GUkVFKGxvYWRlZExhbmd1YWdlcywgZGF0YSkKICAgICAgICAgZWluYV9zdHJp
bmdzaGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpKTsKICNlbHNlCi0gICAg
RVhQRUNUX0ZBTFNFKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJs
ZWRfZ2V0KCkpOworICAgIEVYUEVDVF9GQUxTRShld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKSk7CiAjZW5kaWYKIAotICAgIGV3a19zZXR0aW5n
c19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KGZhbHNlKTsKLSAgICBFWFBF
Q1RfRkFMU0UoZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9n
ZXQoKSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfc2V0KGZhbHNlKTsKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3RleHRfY2hlY2tlcl9jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOwogfQogCiAvKioKLSAqIFRlc3Qg
d2hldGhlciB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHNwZWxsIGNoZWNraW5nIHNl
dHRpbmcgaGFzIGJlZW4gY2hhbmdlZC4KKyAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGJhY2sgaXMg
Y2FsbGVkIHdoZW4gdGhlIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2Vi
S2l0LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2Fu
IGJlIG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4
dCBNZW51IGJ5IGEgdXNlci4KICAqLwotVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0
aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQpCitURVNUX0YoRVdL
MlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2NoYW5nZV9jYl9zZXQpCiB7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfY2hhbmdlX2NiX3NldChvblNldHRpbmdDaGFuZ2UpOworICAgIGV3a190ZXh0X2NoZWNr
ZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KG9uU2V0dGluZ0NoYW5n
ZSk7CiAKLSAgICBpc1NldHRpbmdFbmFibGVkID0gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKKyAgICBpc1NldHRpbmdFbmFibGVkID0gZXdrX3Rl
eHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7CiAgICAg
aXNTZXR0aW5nRW5hYmxlZCA9ICFpc1NldHRpbmdFbmFibGVkOwotICAgIGV3a19zZXR0aW5nc19j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KGlzU2V0dGluZ0VuYWJsZWQpOwor
ICAgIC8vIFRoZSBub3RpZmljYXRpb25zIGFib3V0IHRoZSBzZXR0aW5nIGNoYW5nZSBzaG91bGRu
J3QgYmUgc2VudCBpZiB0aGUgY2hhbmdlIHdhcyBtYWRlCisgICAgLy8gb24gdGhlIGNsaWVudCdz
IHJlcXVlc3QgKHB1YmxpYyBBUEkpLgorICAgIGV3a190ZXh0X2NoZWNrZXJfY29udGludW91c19z
cGVsbF9jaGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFibGVkKTsKIAogICAgIHRpbWVv
dXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25UaW1l
b3V0LCAwKTsKIApAQCAtMjY0LDMzICsyNjgsMjQgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2Us
IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQpCiAg
ICAgLy8gV2UgY2FuJ3QgY2FsbCBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSBiZWNhdXNlIGl0IGRv
ZXNuJ3QgcHJvY2VzcyB0aGUgaWRsZXJzLgogICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwog
Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgRVhQRUNUX0ZBTFNFKHRpbWVvdXRUaW1lcik7
Ci0jZWxzZQogICAgIEVYUEVDVF9UUlVFKHRpbWVvdXRUaW1lcik7Ci0jZW5kaWYKLQotICAgIC8v
IFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGlmIHRoZSBzZXR0aW5nIG9wdGlvbiBp
cyBhbHJlYWR5IHNldC4KLSAgICBpc1NldHRpbmdFbmFibGVkID0gZXdrX3NldHRpbmdzX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKLSAgICBld2tfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFibGVkKTsKIAot
ICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25k
cywgb25UaW1lb3V0LCAwKTsKLSAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKLQotICAgIC8v
IFdoZW4gdGhlIFNQRUxMQ0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQgdGhlIGNhbGxiYWNrIHdvbid0
IGJlIGNhbGxlZCB0b28uCi0gICAgRVhQRUNUX1RSVUUodGltZW91dFRpbWVyKTsKLQotICAgIC8v
IFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGlmIHRoZSB1c2VyIGhhcyBpbnZhbGlk
YXRlZCBpdC4KLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFu
Z2VfY2Jfc2V0KDApOwotICAgIGlzU2V0dGluZ0VuYWJsZWQgPSBld2tfc2V0dGluZ3NfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpOwotICAgIGlzU2V0dGluZ0VuYWJsZWQg
PSAhaXNTZXR0aW5nRW5hYmxlZDsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9j
aGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFibGVkKTsKLQotICAgIHRpbWVvdXRUaW1l
ciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25UaW1lb3V0LCAw
KTsKLSAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKLQotICAgIC8vIElmIHRoZSBTUEVMTENI
RUNLIG1hY3JvIGlzIGRpc2FibGVkLCB0aGUgY2FsbGJhY2sgaXMgbm90IHNldC4KLSAgICBFWFBF
Q1RfVFJVRSh0aW1lb3V0VGltZXIpOworICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGQgYmUgY2Fs
bGVkIGlmIHRoZSBjb250ZXh0IG1lbnUgIkNoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZyIgb3B0
aW9uCisgICAgICAgd2FzIHRvZ2dsZWQgYnkgdGhlIHVzZXIuCisgICAgRklYTUU6CisgICAgMSkg
SW52b2tlIHRoZSBjb250ZXh0IG1lbnUgb24gdGhlIGlucHV0IGZpZWxkLgorICAgIDIpIENob29z
ZSB0aGUgc3ViIG1lbnUgIlNwZWxsaW5nIGFuZCBHcmFtbWFyIiBvcHRpb24gKG5vdCBpbXBsZW1l
bnRlZCBmb3IgV0syKS4KKyAgICAzKSBUb2dnbGUgIkNoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGlu
ZyIgb3B0aW9uLgorICAgIDQpIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZC4g
Ki8KKworICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGlmIHRoZSB1c2Vy
IGhhcyBpbnZhbGlkYXRlZCBpdC4KKyAgICBGSVhNRToKKyAgICAxKSBDYWxsIGV3a190ZXh0X2No
ZWNrZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KDApIHRvIG5vdGlm
eSB0aGUgV2ViS2l0IHRoYXQKKyAgICAgICB0aGUgY2xpZW50IGlzIG5vdCBpbnRlcmVzdGVkIGlu
IHRoZSBzZXR0aW5nIGNoYW5nZS4KKyAgICAyKSBJbnZva2UgdGhlIGNvbnRleHQgbWVudSBvbiB0
aGUgaW5wdXQgZmllbGQuCisgICAgMykgQ2hvb3NlIHRoZSBzdWIgbWVudSAiU3BlbGxpbmcgYW5k
IEdyYW1tYXIiIG9wdGlvbiAobm90IGltcGxlbWVudGVkIGZvciBXSzIpLgorICAgIDQpIFRvZ2ds
ZSAiQ2hlY2sgU3BlbGxpbmcgV2hpbGUgVHlwaW5nIiBvcHRpb24uCisgICAgNSkgQ2hlY2sgd2hl
dGhlciB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZC4gKi8KIH0KIAogLyoqCkBAIC0yOTgsOSArMjkz
LDkgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQpCiAgKiBpZiB0aGV5IGFyZSBpbiB1c2UuCiAgKiBB
bGwgdGhlIGRpY3Rpb25hcmllcyBmcm9tIHRoZSBsaXN0IGNhbiBiZSBzZXQgdG8gcGVyZm9ybSBz
cGVsbGNoZWNraW5nLgogICovCi1URVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdz
X3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KQorVEVTVF9GKEVXSzJVbml0
VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1
YWdlc19nZXQpCiB7Ci0gICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5ndWFnZXMgPSBld2tfc2V0
dGluZ3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQoKTsKKyAgICBFaW5h
X0xpc3QqIGF2YWlsYWJsZUxhbmd1YWdlcyA9IGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tp
bmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQoKTsKICAgICAvLyBObyBkaWN0aW9uYXJ5IGlzIGF2
YWlsYWJsZS9pbnN0YWxsZWQgb3IgdGhlIFNQRUxMQ0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQuCiAg
ICAgaWYgKCFhdmFpbGFibGVMYW5ndWFnZXMpCiAgICAgICAgIHJldHVybjsKQEAgLTMxOSwxNCAr
MzE0LDE0IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hl
Y2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQpCiAgICAgfQogCiAgICAgLy8gU2V0IGFsbCBh
dmFpbGFibGUgbGFuZ3VhZ2VzLgotICAgIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5n
dWFnZXNfc2V0KGxhbmd1YWdlcy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGV3a190
ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChsYW5ndWFnZXMudG9TdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIC8vIExhbmd1YWdlcyBhcmUgYmVpbmcgbG9hZGVk
IG9uIHRoZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KICAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90
aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CiAgICAgZWNv
cmVfbWFpbl9sb29wX2JlZ2luKCk7CiAKICAgICAvLyBHZXQgdGhlIGxhbmd1YWdlcyBpbiB1c2Uu
Ci0gICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIEVpbmFfTGlzdCogbG9hZGVkTGFuZ3VhZ2VzID0g
ZXdrX3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CiAgICAgQVNT
RVJUX0VRKGVpbmFfbGlzdF9jb3VudChsb2FkZWRMYW5ndWFnZXMpLCBlaW5hX2xpc3RfY291bnQo
YXZhaWxhYmxlTGFuZ3VhZ2VzKSk7CiAKICAgICBpID0gMDsKQEAgLTM1MCwxNiArMzQ1LDE2IEBA
IFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfYXZh
aWxhYmxlX2xhbmd1YWdlc19nZXQpCiAgKiAgLSBzZXR0aW5nIHRoZSBkZWZhdWx0IGxhbmd1YWdl
LAogICogIC0gaWYgdHdvIGFyYml0cmFyaWx5IHNlbGVjdGVkIGRpY3Rpb25hcmllcyBhcmUgc2V0
IGNvcnJlY3RseS4KICAqLwotVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19z
cGVsbF9jaGVja2luZ19sYW5ndWFnZXMpCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3Rl
eHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpCiB7CiAgICAgLy8gU2V0IHRoZSBk
ZWZhdWx0IGxhbmd1YWdlLgotICAgIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXNfc2V0KDApOworICAgIGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
X3NldCgwKTsKIAogICAgIC8vIExhbmd1YWdlcyBhcmUgYmVpbmcgbG9hZGVkIG9uIHRoZSBpZGxl
ciwgd2FpdCBmb3IgdGhlbS4KICAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVm
YXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CiAgICAgZWNvcmVfbWFpbl9sb29w
X2JlZ2luKCk7CiAKLSAgICBFaW5hX0xpc3QqIGxvYWRlZExhbmd1YWdlcyA9IGV3a19zZXR0aW5n
c19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CisgICAgRWluYV9MaXN0KiBsb2FkZWRM
YW5ndWFnZXMgPSBld2tfdGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQo
KTsKICAgICAvLyBObyBkaWN0aW9uYXJ5IGlzIGF2YWlsYWJsZS9pbnN0YWxsZWQgb3IgdGhlIFNQ
RUxMQ0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQuCiAgICAgaWYgKCFsb2FkZWRMYW5ndWFnZXMpCiAg
ICAgICAgIHJldHVybjsKQEAgLTM3Miw3ICszNjcsNyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFz
ZSwgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcykKICAgICAgICAgZWluYV9z
dHJpbmdzaGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkpOwogCiAgICAg
Ly8gR2V0IHRoZSBmaXJzdCBhbmQgbGFzdCBsYW5ndWFnZSBmcm9tIGluc3RhbGxlZCBkaWN0aW9u
YXJpZXMuCi0gICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5ndWFnZXMgPSBld2tfc2V0dGluZ3Nf
c3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQoKTsKKyAgICBFaW5hX0xpc3Qq
IGF2YWlsYWJsZUxhbmd1YWdlcyA9IGV3a190ZXh0X2NoZWNrZXJfc3BlbGxfY2hlY2tpbmdfYXZh
aWxhYmxlX2xhbmd1YWdlc19nZXQoKTsKICAgICB1bnNpZ25lZCBudW1iZXJPZkF2YWlsYWJsZUxh
bmd1YWdlcyA9IGVpbmFfbGlzdF9jb3VudChhdmFpbGFibGVMYW5ndWFnZXMpOwogICAgIC8vIFdl
IGFzc3VtZSB0aGF0IHVzZXIgaGFzIGluc3RhbGxlZCBhdCBsZXN0IHR3byBkaWN0aW9uYXJpZXMu
CiAgICAgaWYgKG51bWJlck9mQXZhaWxhYmxlTGFuZ3VhZ2VzIDwgMikKQEAgLTM4OSwxMiArMzg0
LDEyIEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzKQogICAgIGxhbmd1YWdlcy5hcHBlbmQoU3RyaW5nKGxhc3RFeHBlY3RlZCku
bG93ZXIoKSk7CiAKICAgICAvLyBTZXQgYm90aCBsYW5ndWFnZXMgKHRoZSBmaXJzdCBhbmQgdGhl
IGxhc3QpIGZyb20gdGhlIGxpc3QuCi0gICAgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlc19zZXQobGFuZ3VhZ2VzLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZXdr
X3RleHRfY2hlY2tlcl9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGxhbmd1YWdlcy50b1N0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJf
YWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOwogICAgIGVjb3JlX21h
aW5fbG9vcF9iZWdpbigpOwogCi0gICAgbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3Nw
ZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKKyAgICBsb2FkZWRMYW5ndWFnZXMgPSBld2tf
dGV4dF9jaGVja2VyX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKICAgICBBU1NFUlRf
RVEoMiwgZWluYV9saXN0X2NvdW50KGxvYWRlZExhbmd1YWdlcykpOwogCiAgICAgRVhQRUNUX1NU
UkVRKGZpcnN0RXhwZWN0ZWQsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihlaW5hX2xpc3RfbnRo
KGxvYWRlZExhbmd1YWdlcywgMCkpKTsKQEAgLTQxNCw3ICs0MDksNyBAQCBURVNUX0YoRVdLMlVu
aXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcykKIFRFU1Rf
RihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyKQogewogICAgIHJlc2V0Q2FsbGJh
Y2tzRXhlY3V0aW9uU3RhdHMoKTsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9j
aGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAKICAgICBBU1NFUlRfVFJVRShs
b2FkVXJsU3luYyhlbnZpcm9ubWVudC0+dXJsRm9yUmVzb3VyY2UoInNwZWxsaW5nX3Rlc3QuaHRt
bCIpLmRhdGEoKSkpOwogCkBAIC00MzYsNyArNDMxLDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJh
c2UsIGV3a190ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZykKIHsKICAgICBy
ZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CiAgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3
KCk7Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9z
ZXQodHJ1ZSk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2VuYWJsZWRfc2V0KHRydWUpOwogCiAgICAgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxf
ZG9jdW1lbnRfdGFnX2dldF9jYl9zZXQob25TcGVsbERvY3VtZW50VGFnKTsKICAgICBld2tfdGV4
dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2VfY2Jfc2V0KG9uU3BlbGxE
b2N1bWVudFRhZ0Nsb3NlKTsKQEAgLTQ1OCw3ICs0NTMsNyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0
QmFzZSwgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tfY2Jfc2V0KQogewog
ICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKICAgICBkZWZhdWx0VmlldyA9IHdl
YlZpZXcoKTsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFi
bGVkX3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAKICAgICBld2tfdGV4dF9jaGVja2VyX3N0cmluZ19z
cGVsbGluZ19jaGVja19jYl9zZXQob25TcGVsbGluZ0NoZWNrKTsKIApAQCAtNDc2LDcgKzQ3MSw3
IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfZ3Vlc3Nl
c19nZXRfY2Jfc2V0KQogewogICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKICAg
ICBkZWZhdWx0VmlldyA9IHdlYlZpZXcoKTsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAKICAgICBld2tfdGV4
dF9jaGVja2VyX3dvcmRfZ3Vlc3Nlc19nZXRfY2Jfc2V0KG9uV29yZEd1ZXNzZXMpOwogCkBAIC00
OTgsNyArNDkzLDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJf
d29yZF9sZWFybl9jYl9zZXQpCiB7CiAgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygp
OwogICAgIGRlZmF1bHRWaWV3ID0gd2ViVmlldygpOwotICAgIGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworICAgIGV3a190ZXh0X2NoZWNr
ZXJfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKIAogICAgIGV3
a190ZXh0X2NoZWNrZXJfd29yZF9sZWFybl9jYl9zZXQob25Xb3JkTGVhcm4pOwogCkBAIC01MTgs
NyArNTEzLDcgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfd29y
ZF9pZ25vcmVfY2Jfc2V0KQogewogICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsK
ICAgICBkZWZhdWx0VmlldyA9IHdlYlZpZXcoKTsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKyAgICBld2tfdGV4dF9jaGVja2Vy
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CiAKICAgICBld2tf
dGV4dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3NldChvbldvcmRJZ25vcmUpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyQ2xpZW50RWZsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJDbGllbnRFZmwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYzIyMGUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyQ2xpZW50RWZs
LmNwcApAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAq
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRleHRDaGVja2VyQ2xpZW50RWZsLmgiCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2lu
Y2x1ZGUgIkV3a1ZpZXcuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgIlRl
eHRDaGVja2VyU3RhdGUuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0Vp
bmFTaGFyZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgorI2luY2x1ZGUg
IldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRl
IDxFaW5hLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworc3RhdGljIGlubGluZSBUZXh0Q2hlY2tlckNsaWVudEVmbCogdG9UZXh0Q2hlY2tl
ckNsaWVudEVmbChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUZXh0Q2hlY2tlckNsaWVudEVmbCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8p
KTsKK30KKworVGV4dENoZWNrZXJDbGllbnRFZmw6OlRleHRDaGVja2VyQ2xpZW50RWZsKCkKKyAg
ICA6IG1fbGFuZ3VhZ2VzVXBkYXRlVGltZXIodGhpcywgJlRleHRDaGVja2VyQ2xpZW50RWZsOjps
YW5ndWFnZXNVcGRhdGVUaW1lckZpcmVkKQorICAgICwgbV9zcGVsbENoZWNraW5nU2V0dGluZ0No
YW5nZVRpbWVyKHRoaXMsICZUZXh0Q2hlY2tlckNsaWVudEVmbDo6c3BlbGxDaGVja2luZ1NldHRp
bmdDaGFuZ2VUaW1lckZpcmVkKQorICAgICwgbV90ZXh0Q2hlY2tlckVuY2hhbnQoVGV4dENoZWNr
ZXJFbmNoYW50OjpjcmVhdGUoKSkKK3sKKyAgICBtZW1zZXQoJm1fY2xpZW50Q2FsbGJhY2tzLCAw
LCBzaXplb2YoQ2xpZW50Q2FsbGJhY2tzKSk7CisKKyAgICBXS1RleHRDaGVja2VyQ2xpZW50IHdr
VGV4dENoZWNrZXJDbGllbnQgPSB7CisgICAgICAgIGtXS1RleHRDaGVja2VyQ2xpZW50Q3VycmVu
dFZlcnNpb24sCisgICAgICAgIHRoaXMsCisgICAgICAgIDAsIC8vIGNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nQWxsb3dlZAorICAgICAgICBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENh
bGxiYWNrLAorICAgICAgICBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFj
aywKKyAgICAgICAgMCwgLy8gZ3JhbW1hckNoZWNraW5nRW5hYmxlZAorICAgICAgICAwLCAvLyBz
ZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkCisgICAgICAgIHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWdD
YWxsYmFjaywKKyAgICAgICAgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZ0NhbGxiYWNrLAorICAg
ICAgICBjaGVja1NwZWxsaW5nT2ZTdHJpbmdDYWxsYmFjaywKKyAgICAgICAgMCwgLy8gY2hlY2tH
cmFtbWFyT2ZTdHJpbmcsCisgICAgICAgIDAsIC8vIHNwZWxsaW5nVUlJc1Nob3dpbmcKKyAgICAg
ICAgMCwgLy8gdG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZworICAgICAgICAwLCAvLyB1cGRhdGVT
cGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkCisgICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZworICAgICAgICBndWVzc2VzRm9yV29yZENhbGxiYWNrLAorICAg
ICAgICBsZWFybldvcmRDYWxsYmFjaywKKyAgICAgICAgaWdub3JlV29yZENhbGxiYWNrCisgICAg
fTsKKyAgICBXS1RleHRDaGVja2VyU2V0Q2xpZW50KCZ3a1RleHRDaGVja2VyQ2xpZW50KTsKK30K
KworVGV4dENoZWNrZXJDbGllbnRFZmwmIFRleHRDaGVja2VyQ2xpZW50RWZsOjppbnN0YW5jZSgp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChUZXh0Q2hlY2tlckNsaWVudEVmbCwgdGV4dENo
ZWNrZXJDbGllbnQsICgpKTsKKyAgICByZXR1cm4gdGV4dENoZWNrZXJDbGllbnQ7Cit9CisKK2Jv
b2wgVGV4dENoZWNrZXJDbGllbnRFZmw6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRD
YWxsYmFjaygwIC8qIGNsaWVudEluZm8gKi8pOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50
RWZsOjplbnN1cmVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoKQoreworICAgIGlmICghbV90ZXh0Q2hl
Y2tlckVuY2hhbnQtPmhhc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgdXBkYXRlU3BlbGxDaGVja2lu
Z0xhbmd1YWdlcygpOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50RWZsOjp1cGRhdGVTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkZWZhdWx0TGFuZ3VhZ2Vz
KQoreworICAgIG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IGRlZmF1bHRMYW5ndWFnZXM7Cisg
ICAgbV9sYW5ndWFnZXNVcGRhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgVGV4
dENoZWNrZXJDbGllbnRFZmw6Omxhbmd1YWdlc1VwZGF0ZVRpbWVyRmlyZWQoVGltZXI8VGV4dENo
ZWNrZXJDbGllbnRFZmw+KikKK3sKKyAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+dXBkYXRlU3Bl
bGxDaGVja2luZ0xhbmd1YWdlcyhtX3NwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOworfQorCit2b2lk
IFRleHRDaGVja2VyQ2xpZW50RWZsOjpzcGVsbENoZWNraW5nU2V0dGluZ0NoYW5nZVRpbWVyRmly
ZWQoVGltZXI8VGV4dENoZWNrZXJDbGllbnRFZmw+KikKK3sKKyAgICBtX2NsaWVudENhbGxiYWNr
cy5jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZSgKKyAgICAgICAgaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjaygwIC8qIGNsaWVudEluZm8gKi8pCisgICAgKTsK
K30KKworVmVjdG9yPFN0cmluZz4gVGV4dENoZWNrZXJDbGllbnRFZmw6OmF2YWlsYWJsZVNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHRDaGVja2VyRW5j
aGFudC0+YXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworfQorCitWZWN0b3I8U3Ry
aW5nPiBUZXh0Q2hlY2tlckNsaWVudEVmbDo6bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXJFbmNoYW50LT5sb2FkZWRTcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRFZmw6OmNhbGxD
b250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZUNhbGxiYWNrQXN5bmMoKQoreworICAgIG1fc3Bl
bGxDaGVja2luZ1NldHRpbmdDaGFuZ2VUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK2Jvb2wg
VGV4dENoZWNrZXJDbGllbnRFZmw6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2Fs
bGJhY2soY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIFRleHRDaGVja2VyOjpzdGF0ZSgpLmlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xp
ZW50RWZsOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjayhib29sLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFRleHRDaGVja2VyQ2xpZW50RWZsKiB0ZXh0
Q2hlY2tlckNsaWVudCA9IHRvVGV4dENoZWNrZXJDbGllbnRFZmwoY2xpZW50SW5mbyk7CisgICAg
aWYgKHRleHRDaGVja2VyQ2xpZW50LT5jbGllbnRDYWxsYmFja3MoKS5jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX2NoYW5nZSkKKyAgICAgICAgdGV4dENoZWNrZXJDbGllbnQtPmNhbGxDb250aW51
b3VzU3BlbGxDaGVja2luZ0NoYW5nZUNhbGxiYWNrQXN5bmMoKTsKK30KKwordWludDY0X3QgVGV4
dENoZWNrZXJDbGllbnRFZmw6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWdDYWxsYmFjayhXS1BhZ2VS
ZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBUZXh0Q2hlY2tlckNsaWVu
dEVmbCogdGV4dENoZWNrZXJDbGllbnQgPSB0b1RleHRDaGVja2VyQ2xpZW50RWZsKGNsaWVudElu
Zm8pOworICAgIGlmICh0ZXh0Q2hlY2tlckNsaWVudC0+Y2xpZW50Q2FsbGJhY2tzKCkudW5pcXVl
X3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCisgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlckNsaWVu
dC0+Y2xpZW50Q2FsbGJhY2tzKCkudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQoRXdrVmll
dzo6dG9FdmFzT2JqZWN0KHBhZ2UpKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIFRleHRD
aGVja2VyQ2xpZW50RWZsOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnQ2FsbGJhY2sodWludDY0
X3QgdGFnLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFRleHRDaGVja2VyQ2xpZW50
RWZsKiB0ZXh0Q2hlY2tlckNsaWVudCA9IHRvVGV4dENoZWNrZXJDbGllbnRFZmwoY2xpZW50SW5m
byk7CisgICAgaWYgKHRleHRDaGVja2VyQ2xpZW50LT5jbGllbnRDYWxsYmFja3MoKS51bmlxdWVf
c3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQorICAgICAgICB0ZXh0Q2hlY2tlckNsaWVudC0+Y2xp
ZW50Q2FsbGJhY2tzKCkudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSh0YWcpOworfQor
Cit2b2lkIFRleHRDaGVja2VyQ2xpZW50RWZsOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmdDYWxsYmFj
ayh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9j
YXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoreworICAgIFRleHRDaGVja2VyQ2xpZW50RWZsKiB0ZXh0Q2hlY2tlckNsaWVudCA9IHRvVGV4
dENoZWNrZXJDbGllbnRFZmwoY2xpZW50SW5mbyk7CisgICAgaWYgKHRleHRDaGVja2VyQ2xpZW50
LT5jbGllbnRDYWxsYmFja3MoKS5zdHJpbmdfc3BlbGxpbmdfY2hlY2spCisgICAgICAgIHRleHRD
aGVja2VyQ2xpZW50LT5jbGllbnRDYWxsYmFja3MoKS5zdHJpbmdfc3BlbGxpbmdfY2hlY2sodGFn
LCBXS0VpbmFTaGFyZWRTdHJpbmcodGV4dCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxs
aW5nTGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIHRleHRDaGVja2VyQ2xpZW50LT5tX3RleHRD
aGVja2VyRW5jaGFudC0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRvV1RGU3RyaW5nKHRleHQpLCAq
bWlzc3BlbGxpbmdMb2NhdGlvbiwgKm1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKworV0tBcnJheVJl
ZiBUZXh0Q2hlY2tlckNsaWVudEVmbDo6Z3Vlc3Nlc0ZvcldvcmRDYWxsYmFjayh1aW50NjRfdCB0
YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgV0tN
dXRhYmxlQXJyYXlSZWYgc3VnZ2VzdGlvbnNGb3JXb3JkID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUo
KTsKKworICAgIFRleHRDaGVja2VyQ2xpZW50RWZsKiB0ZXh0Q2hlY2tlckNsaWVudCA9IHRvVGV4
dENoZWNrZXJDbGllbnRFZmwoY2xpZW50SW5mbyk7CisgICAgaWYgKHRleHRDaGVja2VyQ2xpZW50
LT5jbGllbnRDYWxsYmFja3MoKS53b3JkX2d1ZXNzZXNfZ2V0KSB7CisgICAgICAgIEVpbmFfTGlz
dCogbGlzdCA9IHRleHRDaGVja2VyQ2xpZW50LT5jbGllbnRDYWxsYmFja3MoKS53b3JkX2d1ZXNz
ZXNfZ2V0KHRhZywgV0tFaW5hU2hhcmVkU3RyaW5nKHdvcmQpKTsKKyAgICAgICAgdm9pZCogaXRl
bTsKKworICAgICAgICBFSU5BX0xJU1RfRlJFRShsaXN0LCBpdGVtKSB7CisgICAgICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oaXRlbSkpKTsKKyAgICAg
ICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlvbi5n
ZXQoKSk7CisgICAgICAgICAgICBmcmVlKGl0ZW0pOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMgPSB0ZXh0Q2hlY2tlckNsaWVu
dC0+bV90ZXh0Q2hlY2tlckVuY2hhbnQtPmdldEd1ZXNzZXNGb3JXb3JkKHRvV1RGU3RyaW5nKHdv
cmQpKTsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mR3Vlc3NlcyA9IGd1ZXNzZXMuc2l6ZSgpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mR3Vlc3NlczsgKytpKSB7Cisg
ICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhndWVzc2VzW2ldLnV0ZjgoKS5kYXRhKCkpKTsK
KyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2Vz
dGlvbi5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3VnZ2VzdGlvbnNG
b3JXb3JkOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50RWZsOjpsZWFybldvcmRDYWxsYmFj
ayh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgVGV4dENoZWNrZXJDbGllbnRFZmwqIHRleHRDaGVja2VyQ2xpZW50ID0gdG9UZXh0
Q2hlY2tlckNsaWVudEVmbChjbGllbnRJbmZvKTsKKyAgICBpZiAodGV4dENoZWNrZXJDbGllbnQt
PmNsaWVudENhbGxiYWNrcygpLndvcmRfbGVhcm4pCisgICAgICAgIHRleHRDaGVja2VyQ2xpZW50
LT5jbGllbnRDYWxsYmFja3MoKS53b3JkX2xlYXJuKHRhZywgV0tFaW5hU2hhcmVkU3RyaW5nKHdv
cmQpKTsKKyAgICBlbHNlCisgICAgICAgIHRleHRDaGVja2VyQ2xpZW50LT5tX3RleHRDaGVja2Vy
RW5jaGFudC0+bGVhcm5Xb3JkKHRvV1RGU3RyaW5nKHdvcmQpKTsKK30KKwordm9pZCBUZXh0Q2hl
Y2tlckNsaWVudEVmbDo6aWdub3JlV29yZENhbGxiYWNrKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdS
ZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBUZXh0Q2hlY2tlckNsaWVu
dEVmbCogdGV4dENoZWNrZXJDbGllbnQgPSB0b1RleHRDaGVja2VyQ2xpZW50RWZsKGNsaWVudElu
Zm8pOworICAgIGlmICh0ZXh0Q2hlY2tlckNsaWVudC0+Y2xpZW50Q2FsbGJhY2tzKCkud29yZF9p
Z25vcmUpCisgICAgICAgIHRleHRDaGVja2VyQ2xpZW50LT5jbGllbnRDYWxsYmFja3MoKS53b3Jk
X2lnbm9yZSh0YWcsIFdLRWluYVNoYXJlZFN0cmluZyh3b3JkKSk7CisgICAgZWxzZQorICAgICAg
ICB0ZXh0Q2hlY2tlckNsaWVudC0+bV90ZXh0Q2hlY2tlckVuY2hhbnQtPmlnbm9yZVdvcmQodG9X
VEZTdHJpbmcod29yZCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyQ2xpZW50RWZs
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyQ2xpZW50RWZsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwMTNiMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJDbGllbnRFZmwu
aApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRDaGVja2VyQ2xpZW50RWZsX2gKKyNk
ZWZpbmUgVGV4dENoZWNrZXJDbGllbnRFZmxfaAorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisK
KyNpbmNsdWRlICJUZXh0Q2hlY2tlckVuY2hhbnQuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2lu
Y2x1ZGUgPFdlYktpdDIvV0tUZXh0Q2hlY2tlci5oPgorI2luY2x1ZGUgPFdlYktpdDIvZXdrX3Rl
eHRfY2hlY2tlcl9wcml2YXRlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBUZXh0
Q2hlY2tlckNsaWVudEVmbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFRleHRDaGVja2VyQ2xpZW50
RWZsJiBpbnN0YW5jZSgpOworCisgICAgLy8gQ2FuIGJlIHNldCBieSBld2sgQVBJcywgYnkgZGVm
YXVsdCB0aGV5IGFyZSAwLgorICAgIENsaWVudENhbGxiYWNrcyYgY2xpZW50Q2FsbGJhY2tzKCkg
eyByZXR1cm4gbV9jbGllbnRDYWxsYmFja3M7IH0KKworICAgIGJvb2wgaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKSBjb25zdDsKKworICAgIC8vIExhbmd1YWdlcyBzdXBwb3J0Lgor
ICAgIHZvaWQgZW5zdXJlU3BlbGxDaGVja2luZ0xhbmd1YWdlKCk7CisgICAgVmVjdG9yPFN0cmlu
Zz4gYXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpIGNvbnN0OworICAgIFZlY3RvcjxT
dHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKSBjb25zdDsKKyAgICB2b2lkIHVw
ZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRlZmF1bHRM
YW5ndWFnZXMgPSBWZWN0b3I8U3RyaW5nPigpKTsKKworcHJpdmF0ZToKKyAgICBUZXh0Q2hlY2tl
ckNsaWVudEVmbCgpOworCisgICAgLy8gVG8gc2V0IGxhbmd1YWdlcyBvbiB0aW1lci4KKyAgICB2
b2lkIGxhbmd1YWdlc1VwZGF0ZVRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8VGV4dENoZWNrZXJD
bGllbnRFZmw+Kik7CisgICAgV2ViQ29yZTo6VGltZXI8VGV4dENoZWNrZXJDbGllbnRFZmw+IG1f
bGFuZ3VhZ2VzVXBkYXRlVGltZXI7CisgICAgVmVjdG9yPFN0cmluZz4gbV9zcGVsbENoZWNraW5n
TGFuZ3VhZ2VzOworCisgICAgLy8gVG8gbm90aWZ5IHRoZSBjbGllbnQgYWJvdXQgdGhlIHNldHRp
bmcgY2hhbmdlIG9uIHRpbWVyLgorICAgIHZvaWQgc3BlbGxDaGVja2luZ1NldHRpbmdDaGFuZ2VU
aW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFRleHRDaGVja2VyQ2xpZW50RWZsPiopOworICAgIHZv
aWQgY2FsbENvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlQ2FsbGJhY2tBc3luYygpOworICAg
IFdlYkNvcmU6OlRpbWVyPFRleHRDaGVja2VyQ2xpZW50RWZsPiBtX3NwZWxsQ2hlY2tpbmdTZXR0
aW5nQ2hhbmdlVGltZXI7CisKKyAgICAvLyBXS1RleHRDaGVja2VyQ2xpZW50IGNhbGxiYWNrcy4K
KyAgICBzdGF0aWMgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxiYWNr
KGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWRDYWxsYmFjayhib29sLCBjb25zdCB2b2lkKik7CisgICAgc3RhdGljIHVpbnQ2NF90
IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWdDYWxsYmFjayhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqKTsK
KyAgICBzdGF0aWMgdm9pZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnQ2FsbGJhY2sodWludDY0
X3QsIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmdD
YWxsYmFjayh1aW50NjRfdCwgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3BlbGxpbmdM
b2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQqKTsKKyAgICBz
dGF0aWMgV0tBcnJheVJlZiBndWVzc2VzRm9yV29yZENhbGxiYWNrKHVpbnQ2NF90LCBXS1N0cmlu
Z1JlZiB3b3JkLCBjb25zdCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQgbGVhcm5Xb3JkQ2FsbGJh
Y2sodWludDY0X3QsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMg
dm9pZCBpZ25vcmVXb3JkQ2FsbGJhY2sodWludDY0X3QsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0
IHZvaWQqKTsKKworICAgIENsaWVudENhbGxiYWNrcyBtX2NsaWVudENhbGxiYWNrczsKKyAgICBP
d25QdHI8V2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50PiBtX3RleHRDaGVja2VyRW5jaGFudDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hF
Q0spCisjZW5kaWYgLy8gVGV4dENoZWNrZXJDbGllbnRFZmxfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAppbmRleCBhZGI5MTU0Li42ZjEyOWEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNw
cApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9y
b2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTMgU2Ftc3VuZyBFbGVjdHJvbmljcwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMyw2ICszMyw3IEBACiAKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKICNpbmNsdWRlICJUZXh0
QnJlYWtJdGVyYXRvci5oIgorI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50RWZsLmgiCiAjaW5j
bHVkZSAiV2ViVGV4dENoZWNrZXIuaCIKICNlbmRpZgogCkBAIC00NCwxNyArNDUsMTUgQEAgc3Rh
dGljIFRleHRDaGVja2VyU3RhdGUgdGV4dENoZWNrZXJTdGF0ZTsKIAogY29uc3QgVGV4dENoZWNr
ZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKIHsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykK
ICAgICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplU3RhdGUgPSBmYWxzZTsKICAgICBpZiAoZGlk
SW5pdGlhbGl6ZVN0YXRlKQogICAgICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKIAotICAg
IFdlYlRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQgPSBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpOwotICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQgPSBjbGllbnQuY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAg
dGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBjbGllbnQuZ3JhbW1h
ckNoZWNraW5nRW5hYmxlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQgPSBmYWxzZTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCA9IGZhbHNlOwogCiAgICAgZGlkSW5pdGlhbGl6ZVN0YXRlID0gdHJ1
ZTsKLSNlbmRpZgorCiAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CiB9CiAKQEAgLTcxLDYg
KzcwLDExIEBAIHZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZChib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKKworICAgIGlmIChpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgVGV4dENoZWNrZXJDbGllbnRFZmw6Omluc3RhbmNl
KCkuZW5zdXJlU3BlbGxDaGVja2luZ0xhbmd1YWdlKCk7CisKKyAgICAvLyBOb3RpZnkgdGhlIGNs
aWVudCBhYm91dCB0aGUgc2V0dGluZyBjaGFuZ2UuCiAgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOwpAQCAtODQsNyArODgsMTcgQEAgdm9pZCBUZXh0
Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sKQogCiB2b2lkIFRleHRDaGVj
a2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFi
bGVkKQogewotICAgIFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoZW5hYmxlZCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgaWYgKHN0YXRlKCkuaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCA9IGVuYWJsZWQ7CisKKyAgICBpZiAoZW5hYmxlZCkKKyAgICAgICAgVGV4dENoZWNrZXJDbGll
bnRFZmw6Omluc3RhbmNlKCkuZW5zdXJlU3BlbGxDaGVja2luZ0xhbmd1YWdlKCk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKKyNlbmRpZgogfQogCiB2b2lkIFRleHRDaGVja2Vy
OjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wpCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDM4YmZiMS4uZGU3ZDM3MSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDEzLTA0LTE1ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tp
QHNhbXN1bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gVGV4dCBDaGVja2VyJ3Mgc2V0dGlu
Z3MgcmVmYWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExMTcxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogTWluaUJyb3dzZXIvZWZsL21haW4uYzoKKyAgICAgICAgKHdpbmRvd19jcmVhdGUpOgor
ICAgICAgICBVc2UgYSBuZXcgdGV4dCBjaGVja2VyIEFQSSB0byBlbmFibGUgc3BlbGwgY2hlY2tp
bmcuCisKIDIwMTMtMDQtMTYgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNv
bT4KIAogICAgICAgICBBZGQgRWZsIFdlYktpdDIgRVdTIGJvdApkaWZmIC0tZ2l0IGEvVG9vbHMv
TWluaUJyb3dzZXIvZWZsL21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKaW5k
ZXggODAyZDUxOC4uZGQzZGJmZSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21h
aW4uYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCkBAIC0xNDUxLDcgKzE0NTEs
NyBAQCBzdGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoRXZhc19PYmplY3QgKm9w
ZW5lciwgY29uc3QgY2hhciAqdXJsLCBpbnQgdwogICAgIGVsbV93aW5fZnVsbHNjcmVlbl9zZXQo
d2luZG93LT5lbG1fd2luZG93LCBmdWxsc2NyZWVuX2VuYWJsZWQpOwogICAgIGV3a19zZXR0aW5n
c19kZXZlbG9wZXJfZXh0cmFzX2VuYWJsZWRfc2V0KHNldHRpbmdzLCBFSU5BX1RSVUUpOwogICAg
IGV3a19zZXR0aW5nc19wcmVmZXJyZWRfbWluaW11bV9jb250ZW50c193aWR0aF9zZXQoc2V0dGlu
Z3MsIDApOwotICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJs
ZWRfc2V0KHNwZWxsX2NoZWNraW5nX2VuYWJsZWQpOworICAgIGV3a190ZXh0X2NoZWNrZXJfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChzcGVsbF9jaGVja2luZ19lbmFibGVk
KTsKIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3
LCAiYXV0aGVudGljYXRpb24scmVxdWVzdCIsIG9uX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QsIHdp
bmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3Zp
ZXcsICJkb3dubG9hZCxmYWlsZWQiLCBvbl9kb3dubG9hZF9mYWlsZWQsIHdpbmRvdyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>