<?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>91854</bug_id>
          
          <creation_ts>2012-07-20 06:36:52 -0700</creation_ts>
          <short_desc>[WK2][EFL] Implementation of spellchecking feature.</short_desc>
          <delta_ts>2012-10-17 03:31:06 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>94320</dependson>
    
    <dependson>95436</dependson>
    
    <dependson>96518</dependson>
          <blocked>61838</blocked>
    
    <blocked>81042</blocked>
    
    <blocked>93611</blocked>
    
    <blocked>95956</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Grzegorz Czajkowski">g.czajkowski</reporter>
          <assigned_to name="Grzegorz Czajkowski">g.czajkowski</assigned_to>
          <cc>cdumez</cc>
    
    <cc>dglazkov</cc>
    
    <cc>d-r</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>m.roj</cc>
    
    <cc>rakuco</cc>
    
    <cc>sw0524.lee</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>674506</commentid>
    <comment_count>0</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-07-20 06:36:52 -0700</bug_when>
    <thetext>This implementation is based on Enchant library (mostly implemented in TextCheckerEnchant class).
The patch also provides API to overwrite the default WebKit spellchecker implementation.

There is one spellchecker object per application, it allows to check spelling in the editable areas.

WebKit spellchecker implementation doesn&apos;t ensure grammar checking.
Application is able to overwrite it (both grammar and spell checking) by defining its own implementation and setting appropriate callback functions.

File ewk_text_checker_settings.h defines API for manipulating spell checker feature:
 - enables/disables spell checking,
 - enables/disables grammar checking,
 - sets languages to use be default WebKit implementation of spellchecker feature with Enchant library support,
 - sets callbacks function to notify the client when the settings (spell and grammar checking) was changed by WebKit (not required). Changing of this setting at the WebKit level can be made as a result of modifying options in a Context Menu by a user.

I will submit the patches when I come back from holiday :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710574</commentid>
    <comment_count>1</comment_count>
      <attachid>161908</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-03 05:56:06 -0700</bug_when>
    <thetext>Created attachment 161908
proposed patch

This patch introduces spellchecking feature for WK2-EFL that is based on the Enchant library. The core spellchecking feature we share with WebKit-Gtk (contributed here https://bugs.webkit.org/show_bug.cgi?id=94320)

Additionally the patch provides API to overwrite the default WebKit spellchecker implementation as Enchant library doesn&apos;t ensure grammar checking. Application is able to overwrite it (both grammar and spell checking) by defining its own implementation and setting appropriate callback functions.
Some stubs which support grammar checking are delivered too.

This patch doesn&apos;t take care of layout/unit tests. They will be supported in the separated bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710576</commentid>
    <comment_count>2</comment_count>
      <attachid>161908</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-03 05:59:27 -0700</bug_when>
    <thetext>Comment on attachment 161908
proposed patch

Attachment 161908 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13745105</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710579</commentid>
    <comment_count>3</comment_count>
      <attachid>161911</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-03 06:02:45 -0700</bug_when>
    <thetext>Created attachment 161911
add missing FindEnchant.cmake file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710581</commentid>
    <comment_count>4</comment_count>
      <attachid>161911</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-03 06:06:23 -0700</bug_when>
    <thetext>Comment on attachment 161911
add missing FindEnchant.cmake file

Attachment 161911 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13755017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710592</commentid>
    <comment_count>5</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-03 06:19:40 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 161911 [details])
&gt; Attachment 161911 [details] did not pass efl-ews (efl):
&gt; Output: http://queues.webkit.org/results/13755017

-- checking for module &apos;enchant&apos;
--   package &apos;enchant&apos; not found

libenchant-dev package should be installed. Gyuyoung, could you install this package? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710618</commentid>
    <comment_count>6</comment_count>
      <attachid>161911</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-09-03 07:00:09 -0700</bug_when>
    <thetext>Comment on attachment 161911
add missing FindEnchant.cmake file

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

&gt; Source/cmake/FindEnchant.cmake:16
&gt; +#   This library is free software; you can redistribute it and/or
&gt; +#   modify it under the terms of the GNU Library General Public
&gt; +#   License as published by the Free Software Foundation; either
&gt; +#   version 2 of the License, or (at your option) any later version.
&gt; +#
&gt; +#   This library is distributed in the hope that it will be useful,
&gt; +#   but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; +#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; +#   Library General Public License for more details.
&gt; +#
&gt; +#   You should have received a copy of the GNU Library General Public License
&gt; +#   along with this library; see the file COPYING.LIB.  If not, write to
&gt; +#   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; +#   Boston, MA 02110-1301, USA.

Would be good if you could add some documentation at the top (like the one in FindCairo.cmake). Most of our Find modules are BSD-licensed as well; are you sure LGPLv2 is preferred here?

&gt; Source/cmake/FindEnchant.cmake:21
&gt; +if( NOT WIN32 )
&gt; +    find_package(PkgConfig)
&gt; +    pkg_check_modules(Enchant enchant)
&gt; +endif( NOT WIN32 )

The capitalization of the calls here is wrong, and using pkg-config on Windows if it&apos;s present should be harmless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710623</commentid>
    <comment_count>7</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-09-03 07:02:24 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; libenchant-dev package should be installed. Gyuyoung, could you install this package? Thanks.

FYI, installed the package on our buildbots - so it shouldn&apos;t break anything on those once it lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710625</commentid>
    <comment_count>8</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-03 07:05:56 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; libenchant-dev package should be installed. Gyuyoung, could you install this package? Thanks.
&gt; 
&gt; FYI, installed the package on our buildbots - so it shouldn&apos;t break anything on those once it lands.

Thanks. I will submit a new patch as soon as I apply Kubo&apos;s suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710661</commentid>
    <comment_count>9</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-03 08:03:23 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 161911 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161911&amp;action=review
&gt; 
&gt; &gt; Source/cmake/FindEnchant.cmake:16
&gt; &gt; +#   This library is free software; you can redistribute it and/or
&gt; &gt; +#   modify it under the terms of the GNU Library General Public
&gt; &gt; +#   License as published by the Free Software Foundation; either
&gt; &gt; +#   version 2 of the License, or (at your option) any later version.
&gt; &gt; +#
&gt; &gt; +#   This library is distributed in the hope that it will be useful,
&gt; &gt; +#   but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; &gt; +#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; &gt; +#   Library General Public License for more details.
&gt; &gt; +#
&gt; &gt; +#   You should have received a copy of the GNU Library General Public License
&gt; &gt; +#   along with this library; see the file COPYING.LIB.  If not, write to
&gt; &gt; +#   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; &gt; +#   Boston, MA 02110-1301, USA.
&gt; 
&gt; Would be good if you could add some documentation at the top (like the one in FindCairo.cmake). Most of our Find modules are BSD-licensed as well; are you sure LGPLv2 is preferred here?

Thanks for the hints. Added docs and replaced license to BSD.

&gt; 
&gt; &gt; Source/cmake/FindEnchant.cmake:21
&gt; &gt; +if( NOT WIN32 )
&gt; &gt; +    find_package(PkgConfig)
&gt; &gt; +    pkg_check_modules(Enchant enchant)
&gt; &gt; +endif( NOT WIN32 )
&gt; 
&gt; The capitalization of the calls here is wrong, and using pkg-config on Windows if it&apos;s present should be harmless.

Ok. Just removed this block similarly to FindCairo.cmake and used better names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710662</commentid>
    <comment_count>10</comment_count>
      <attachid>161930</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-03 08:04:58 -0700</bug_when>
    <thetext>Created attachment 161930
refactoring of FindEnchant.cmake</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710774</commentid>
    <comment_count>11</comment_count>
      <attachid>161930</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-03 18:33:44 -0700</bug_when>
    <thetext>Comment on attachment 161930
refactoring of FindEnchant.cmake

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

&gt; Source/WebKit2/PlatformEfl.cmake:129
&gt; +    &quot;${WEBCORE_DIR}/platform/text/enchant&quot;

Wrong alphabetical order.

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:2
&gt; + * Copyright (C) 2012 Samsung Electronics

I was told BSD license is more useful. So, could you use BSD instead of LGPL ?

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:53
&gt; +OwnPtr&lt;WebCore::TextCheckerEnchant&gt; m_textCheckerEnchant = WebCore::TextCheckerEnchant::create();

Why this variable is not private member variable ?

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:96
&gt; +void WebKitTextChecker::checkSpellingOfString(uint64_t tag, WKStringRef text, int32_t* misspellingLocation, int32_t* misspellingLength, const void *)

s/const void */const void*/g

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:133
&gt; +    // FIXME: call client&apos;s function.

Generally, FIXME: is placed before notImplemented().

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.h:36
&gt; +

Unneeded line.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:87
&gt; +// EWK_TEXT_CHECKER_CALLBACK_SET(Ewk_Text_Checker_String_Grammar_Check, string_grammar_check)

I think we should not keep commented macro or function.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:86
&gt; +// EAPI void ewk_text_checker_string_grammar_check_cb_set(Ewk_Text_Checker_String_Grammar_Check cb);

I think we should not keep commented function declaration.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:91
&gt; +// EAPI void ewk_text_checker_ui_spelling_grammar_string_update_cb_set(Ewk_Text_Checker_UI_Spelling_Grammar_String_Update cb);

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_private.h:4
&gt; + * This library is free software; you can redistribute it and/or

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:33
&gt; +    bool enableContinuousSpellChecking:1;

s/Checking:1/Checking : 1/g

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:34
&gt; +    bool enableGrammarChecking:1;

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:62
&gt; +    // TODO: Consider to delegate calling of this method in WebProcess to do not delay/block UIProcess.

WebKit coding style guides to use FIXME: instead of TODO:

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:4
&gt; + * This library is free software; you can redistribute it and/or

ditto.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:81
&gt; +        return;

A new line ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710863</commentid>
    <comment_count>12</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-04 00:47:05 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 161930 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161930&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/PlatformEfl.cmake:129
&gt; &gt; +    &quot;${WEBCORE_DIR}/platform/text/enchant&quot;
&gt; 
&gt; Wrong alphabetical order.

Thanks. Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:2
&gt; &gt; + * Copyright (C) 2012 Samsung Electronics
&gt; 
&gt; I was told BSD license is more useful. So, could you use BSD instead of LGPL ?

Ok, I didn&apos;t know that WebKit-EFL tends to use BSD license over LGPL. I just copied the license from ewk_view.cpp.
Anyway. All newly crated files (7) have BSD license from now :)

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:53
&gt; &gt; +OwnPtr&lt;WebCore::TextCheckerEnchant&gt; m_textCheckerEnchant = WebCore::TextCheckerEnchant::create();
&gt; 
&gt; Why this variable is not private member variable ?

WebKitTextChecker class has got only static methods to easy initialize WKTextChecker&apos;s client (see ewk_text_checker.cpp). We can directly pass those callbacks without additional wrapper like WebKit-GTK does.
Additional advantage of this solution is to easy accessible methods from EnchantHelper subclass (mainly used in ewk_text_checker_setting.cpp) so we do not have keep WebKitTextChecker object anywhere.

According to above reasons I would like to avoid defining class with the constructor only to keep &apos;m_textCheckerEnchant&apos; as private member.
Of course we can consider typical solution used in singletons like method &apos;initialize()&apos; that will be responsible for initialization of &apos;m_textCheckerEnchant&apos;. But does it make sense to initialize only one variable?

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:96
&gt; &gt; +void WebKitTextChecker::checkSpellingOfString(uint64_t tag, WKStringRef text, int32_t* misspellingLocation, int32_t* misspellingLength, const void *)
&gt; 
&gt; s/const void */const void*/g

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:133
&gt; &gt; +    // FIXME: call client&apos;s function.
&gt; 
&gt; Generally, FIXME: is placed before notImplemented().

Fixed in the whole file.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.h:36
&gt; &gt; +
&gt; 
&gt; Unneeded line.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:87
&gt; &gt; +// EWK_TEXT_CHECKER_CALLBACK_SET(Ewk_Text_Checker_String_Grammar_Check, string_grammar_check)
&gt; 
&gt; I think we should not keep commented macro or function.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:86
&gt; &gt; +// EAPI void ewk_text_checker_string_grammar_check_cb_set(Ewk_Text_Checker_String_Grammar_Check cb);
&gt; 
&gt; I think we should not keep commented function declaration.

Those methods were commented out because they are connected with grammar checking feature which is not supported by Enchant. Removed.


&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:33
&gt; &gt; +    bool enableContinuousSpellChecking:1;
&gt; 
&gt; s/Checking:1/Checking : 1/g
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:34
&gt; &gt; +    bool enableGrammarChecking:1;
&gt; 
&gt; ditto.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:62
&gt; &gt; +    // TODO: Consider to delegate calling of this method in WebProcess to do not delay/block UIProcess.
&gt; 
&gt; WebKit coding style guides to use FIXME: instead of TODO:

Fixed.


&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:81
&gt; &gt; +        return;
&gt; 
&gt; A new line ?

Makes sense. Added</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710865</commentid>
    <comment_count>13</comment_count>
      <attachid>161980</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-04 00:48:36 -0700</bug_when>
    <thetext>Created attachment 161980
apply Gyuyoung&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710866</commentid>
    <comment_count>14</comment_count>
      <attachid>161980</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-04 00:51:55 -0700</bug_when>
    <thetext>Comment on attachment 161980
apply Gyuyoung&apos;s suggestions

Attachment 161980 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13739440</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711961</commentid>
    <comment_count>15</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-05 05:06:54 -0700</bug_when>
    <thetext>I install libenchant-dev to efl ews. Please submit patch again to test it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711965</commentid>
    <comment_count>16</comment_count>
      <attachid>162222</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-05 05:12:55 -0700</bug_when>
    <thetext>Created attachment 162222
no change, just to make efl ews happy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712059</commentid>
    <comment_count>17</comment_count>
      <attachid>162222</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-05 08:06:03 -0700</bug_when>
    <thetext>Comment on attachment 162222
no change, just to make efl ews happy

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

Public API of WK2 is added with unit test. Please prepare unit test as well.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:67
&gt; +EAPI void ewk_text_checker_setting_grammar_checking_changed_cb_set(Ewk_Text_Checker_Setting_Grammar_Checking_Changed cb);

It looks function name is ambiguous. Can&apos;t function name be reduced ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:116
&gt; + * If @languages is @c 0, the default language is used.

We decided to use NULL instead of 0 in description.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:123
&gt; + *        of the form &apos;en_US&apos;, ie, language_VARIANT, may be @c 0.

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712098</commentid>
    <comment_count>18</comment_count>
      <attachid>162222</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-05 08:50:08 -0700</bug_when>
    <thetext>Comment on attachment 162222
no change, just to make efl ews happy

Attachment 162222 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13761569

New failing tests:
http/tests/cache/subresource-expiration-1.html
http/tests/cache/stopped-revalidation.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713026</commentid>
    <comment_count>19</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-06 01:45:44 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 162222 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=162222&amp;action=review
&gt; 
&gt; Public API of WK2 is added with unit test. Please prepare unit test as well.

See comment 1 please. I didn&apos;t want to add those to the main implementation to do not increase it. In my opinion this patch is enough huge. Anyway API has been approved yet.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:67
&gt; &gt; +EAPI void ewk_text_checker_setting_grammar_checking_changed_cb_set(Ewk_Text_Checker_Setting_Grammar_Checking_Changed cb);
&gt; 
&gt; It looks function name is ambiguous. Can&apos;t function name be reduced ?

Here I just mixed names from WKTextChecker and ewk names.
This function sets callback function to notify client when grammar checking setting has been changed. You can find more details in doxygen doc.
Anyway there are a lot of similar functions (see API from ewk_text_checker and ewk_text_checker_setting. Any suggestion?

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:116
&gt; &gt; + * If @languages is @c 0, the default language is used.
&gt; 
&gt; We decided to use NULL instead of 0 in description.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:123
&gt; &gt; + *        of the form &apos;en_US&apos;, ie, language_VARIANT, may be @c 0.
&gt; 
&gt; ditto.

Right. I will replace 0 -&gt; NULL in next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713061</commentid>
    <comment_count>20</comment_count>
      <attachid>162222</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-09-06 02:17:40 -0700</bug_when>
    <thetext>Comment on attachment 162222
no change, just to make efl ews happy

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

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:157
&gt; +        for (Vector&lt;String&gt;::const_iterator iter = guesses.begin(); iter != guesses.end(); ++iter) {

Coding style says to avoid iterators and use indexes instead for better readability.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:50
&gt; +typedef uint64_t (*Ewk_Text_Checker_Unique_Spell_Document_Tag_Get)(const Evas_Object *o);

Missing doc?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:68
&gt; + * @param cb a new callback to set or @c 0 to restore the default WebKit callback implementation

@c NULL

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:79
&gt; + * @param cb a new callback to set or @c 0 to restore the default WebKit callback implementation

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:86
&gt; + * @param cb a new callback to set or @c 0 to restore the default WebKit callback implementation

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:90
&gt; +EAPI void ewk_text_checker_ui_spelling_status_get_cb_set(Ewk_Text_Checker_UI_Spelling_Status_Get cb);

Missing doc?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:91
&gt; +EAPI void ewk_text_checker_ui_toggle_spelling_status_get_cb_set(Ewk_Text_Checker_UI_Toggle_Spelling_Status_Get cb);

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:92
&gt; +EAPI void ewk_text_checker_ui_spelling_misspelled_word_update_cb_set(Ewk_Text_Checker_UI_Spelling_Misspelled_Word_Update cb);

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:102
&gt; + * @param cb a new callback to set or @c 0 to restore the default WebKit callback implementation

@c NULL

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:109
&gt; + * @param cb a new callback to set or @c 0 to restore the default WebKit callback implementation

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:116
&gt; + * @param cb a new callback to set or @c 0 to restore the default WebKit callback implementation

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:76
&gt; +    ewkTextCheckerSetting.spellCheckingLanguages.swap(languages);

What&apos;s the point of swapping here? Why can&apos;t we simply do:
ewkTextCheckerSetting.spellCheckingLanguages = newLanguages; ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:151
&gt; +    String::fromUTF8(languages).split(static_cast&lt;UChar&gt;(&apos;,&apos;), newLanguages);

Is the casting really needed?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:40
&gt; +typedef void (*Ewk_Text_Checker_Setting_Continuous_Spell_Checking_Changed)(Eina_Bool enable);

Missing doc?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:41
&gt; +typedef void (*Ewk_Text_Checker_Setting_Grammar_Checking_Changed)(Eina_Bool enable);

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:52
&gt; + * @param cb a new callback function to set or @c 0 to invalidate the previous one

@c NULL

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:65
&gt; + * @param cb a new callback function to set or @c 0 to invalidate the previous one

@c NULL

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:72
&gt; + * @return @c EINA_TRUE if continuous spell checking is enabled or @ EINA_FALSE if it&apos;s disabled

@c EINA_FALSE

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:95
&gt; + * @return @c EINA_TRUE if continuous spell checking is enabled or @ EINA_FALSE if it&apos;s disabled

@c EINA_FALSE

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:113
&gt; + * Sets @languages as the list of languages to use by default WebKit

You probably know better than me but just in case: Shouldn&apos;t it be @a languages?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713081</commentid>
    <comment_count>21</comment_count>
      <attachid>162222</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-06 02:42:31 -0700</bug_when>
    <thetext>Comment on attachment 162222
no change, just to make efl ews happy

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

&gt;&gt; Here I just mixed names from WKTextChecker and ewk names.
&gt;&gt; This function sets callback function to notify client when grammar checking setting has been changed. You can find more details in doxygen doc.
&gt;&gt; Anyway there are a lot of similar functions (see API from ewk_text_checker and ewk_text_checker_setting. Any suggestion?

As you said, this function names are similar to existing API names. So, I couldn&apos;t fine better name yet. If there is no better suggestion, I agree to use this API names.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:73
&gt; +void static _ewk_text_checker_setting_spell_checking_languages_set(const Vector&lt;String&gt;&amp; newLanguages)

Is there any reason to use *void static* ?  AFAIK, *static void* is more general in WebKit for internal function. By the way, I wonder why this internal function only follows efl coding style for function name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713285</commentid>
    <comment_count>22</comment_count>
      <attachid>162506</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-06 07:58:45 -0700</bug_when>
    <thetext>Created attachment 162506
apply Christophe&apos;s and Gyuyoung suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713293</commentid>
    <comment_count>23</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-06 08:05:36 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 162222 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=162222&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:157
&gt; &gt; +        for (Vector&lt;String&gt;::const_iterator iter = guesses.begin(); iter != guesses.end(); ++iter) {
&gt; 
&gt; Coding style says to avoid iterators and use indexes instead for better readability.

Changed to indexes. Additionally size of vector is cached :)

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:50
&gt; &gt; +typedef uint64_t (*Ewk_Text_Checker_Unique_Spell_Document_Tag_Get)(const Evas_Object *o);
&gt; 
&gt; Missing doc?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:68
&gt; &gt; + * @param cb a new callback to set or @c 0 to restore the default WebKit callback implementation
&gt; 
&gt; @c NULL
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:79
&gt; &gt; + * @param cb a new callback to set or @c 0 to restore the default WebKit callback implementation
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:86
&gt; &gt; + * @param cb a new callback to set or @c 0 to restore the default WebKit callback implementation
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:90
&gt; &gt; +EAPI void ewk_text_checker_ui_spelling_status_get_cb_set(Ewk_Text_Checker_UI_Spelling_Status_Get cb);
&gt; 
&gt; Missing doc?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:91
&gt; &gt; +EAPI void ewk_text_checker_ui_toggle_spelling_status_get_cb_set(Ewk_Text_Checker_UI_Toggle_Spelling_Status_Get cb);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:92
&gt; &gt; +EAPI void ewk_text_checker_ui_spelling_misspelled_word_update_cb_set(Ewk_Text_Checker_UI_Spelling_Misspelled_Word_Update cb);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:102
&gt; &gt; + * @param cb a new callback to set or @c 0 to restore the default WebKit callback implementation
&gt; 
&gt; @c NULL
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:109
&gt; &gt; + * @param cb a new callback to set or @c 0 to restore the default WebKit callback implementation
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:116
&gt; &gt; + * @param cb a new callback to set or @c 0 to restore the default WebKit callback implementation
&gt; 
&gt; Ditto.

I added the missing docs, all 0 were replaced to NULL.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:76
&gt; &gt; +    ewkTextCheckerSetting.spellCheckingLanguages.swap(languages);
&gt; 
&gt; What&apos;s the point of swapping here? Why can&apos;t we simply do:
&gt; ewkTextCheckerSetting.spellCheckingLanguages = newLanguages; ?

Removed unnecessary assignment. 

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:151
&gt; &gt; +    String::fromUTF8(languages).split(static_cast&lt;UChar&gt;(&apos;,&apos;), newLanguages);
&gt; 
&gt; Is the casting really needed?

I tested this one - no needed. Removed. Thanks :)

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:40
&gt; &gt; +typedef void (*Ewk_Text_Checker_Setting_Continuous_Spell_Checking_Changed)(Eina_Bool enable);
&gt; 
&gt; Missing doc?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:41
&gt; &gt; +typedef void (*Ewk_Text_Checker_Setting_Grammar_Checking_Changed)(Eina_Bool enable);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:52
&gt; &gt; + * @param cb a new callback function to set or @c 0 to invalidate the previous one
&gt; 
&gt; @c NULL
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:65
&gt; &gt; + * @param cb a new callback function to set or @c 0 to invalidate the previous one
&gt; 
&gt; @c NULL
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:72
&gt; &gt; + * @return @c EINA_TRUE if continuous spell checking is enabled or @ EINA_FALSE if it&apos;s disabled
&gt; 
&gt; @c EINA_FALSE
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:95
&gt; &gt; + * @return @c EINA_TRUE if continuous spell checking is enabled or @ EINA_FALSE if it&apos;s disabled
&gt; 
&gt; @c EINA_FALSE

Fixed/Added.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:113
&gt; &gt; + * Sets @languages as the list of languages to use by default WebKit
&gt; 
&gt; You probably know better than me but just in case: Shouldn&apos;t it be @a languages?

Yes, it should be :) Fixed.
Thanks for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713294</commentid>
    <comment_count>24</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-06 08:06:55 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 162222 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=162222&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:73
&gt; &gt; +void static _ewk_text_checker_setting_spell_checking_languages_set(const Vector&lt;String&gt;&amp; newLanguages)
&gt; 
&gt; Is there any reason to use *void static* ?  AFAIK, *static void* is more general in WebKit for internal function. By the way, I wonder why this internal function only follows efl coding style for function name.

Thanks, my mistake. Fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717026</commentid>
    <comment_count>25</comment_count>
      <attachid>163324</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-11 03:43:34 -0700</bug_when>
    <thetext>Created attachment 163324
add ewk_text_checker_setting_spell_checking_languages_get

Added &apos;ewk_text_checker_setting_spell_checking_languages_get&apos; method to support unit tests (it ensures possibility to test ewk_text_checker_setting_spell_checking_languages_set method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719265</commentid>
    <comment_count>26</comment_count>
      <attachid>163324</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-13 02:25:59 -0700</bug_when>
    <thetext>Comment on attachment 163324
add ewk_text_checker_setting_spell_checking_languages_get

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

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.h:40
&gt; +class WebKitTextChecker {

I&apos;ve read comment #12, but still I don&apos;t see the advantage of defining a class this way. Why having a class full of all static members instead of just having a regular header file with functions implemented in the .cpp file (not using a class)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719280</commentid>
    <comment_count>27</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-13 02:51:21 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 163324 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163324&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.h:40
&gt; &gt; +class WebKitTextChecker {
&gt; 
&gt; I&apos;ve read comment #12, but still I don&apos;t see the advantage of defining a class this way. Why having a class full of all static members instead of just having a regular header file with functions implemented in the .cpp file (not using a class)?

Thanks for your review. This suggestion makes sense to me. I will apply it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719414</commentid>
    <comment_count>28</comment_count>
      <attachid>163862</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-13 06:43:58 -0700</bug_when>
    <thetext>Created attachment 163862
remove WebKitTextChecker class

Removed WebKitTextChecker class
Added ewk_text_checker_setting_available_spell_checking_languages_get() API based on bug 96518
Moved the client&apos;s callback from WebKitTextChecker to ewk_text_checker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719438</commentid>
    <comment_count>29</comment_count>
      <attachid>163862</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-13 07:22:02 -0700</bug_when>
    <thetext>Comment on attachment 163862
remove WebKitTextChecker class

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

&gt; Source/WebCore/PlatformEfl.cmake:341
&gt; +        platform/text/enchant/TextCheckerEnchant.cpp

I have removed duplicated #ifdef guard. TextCheckerEnchant.cpp file is already guarded by #if ENABLE(SPELLCHECK). So, we don&apos;t need to guard this again.

&gt; Source/WebKit2/PlatformEfl.cmake:334
&gt; +    LIST(APPEND WebKit2_INCLUDE_DIRECTORIES

Why do you append WebKit2_INCLUDE_DIRECTORIES twice ?

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

Please use WKEinaSharedString instead of strdup.

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

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:163
&gt; ++ * Gets the the list of spell checking languages in use.

Remove &apos;+&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719440</commentid>
    <comment_count>30</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-13 07:27:58 -0700</bug_when>
    <thetext>(In reply to comment #29)
 
&gt; &gt; Source/WebCore/PlatformEfl.cmake:341
&gt; &gt; +        platform/text/enchant/TextCheckerEnchant.cpp
&gt; 
&gt; I have removed duplicated #ifdef guard. TextCheckerEnchant.cpp file is already guarded by #if ENABLE(SPELLCHECK). So, we don&apos;t need to guard this again.

WebCore/PlatformEfl.cpp is still using duplicated guard. If you don&apos;t wanna change this here, I don&apos;t mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719454</commentid>
    <comment_count>31</comment_count>
      <attachid>163862</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-13 07:37:54 -0700</bug_when>
    <thetext>Comment on attachment 163862
remove WebKitTextChecker class

Attachment 163862 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13855002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720520</commentid>
    <comment_count>32</comment_count>
      <attachid>164090</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-14 03:29:59 -0700</bug_when>
    <thetext>Created attachment 164090
apply Gyuyoung&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720525</commentid>
    <comment_count>33</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-14 03:38:40 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 163862 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163862&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/PlatformEfl.cmake:341
&gt; &gt; +        platform/text/enchant/TextCheckerEnchant.cpp
&gt; 
&gt; I have removed duplicated #ifdef guard. TextCheckerEnchant.cpp file is already guarded by #if ENABLE(SPELLCHECK). So, we don&apos;t need to guard this again.

Removed the guard from cmake files for both (WebCore/PlatformEfl,cmake and WebKit2/PlatformEfl,cmake).

&gt; 
&gt; &gt; Source/WebKit2/PlatformEfl.cmake:334
&gt; &gt; +    LIST(APPEND WebKit2_INCLUDE_DIRECTORIES
&gt; 
&gt; Why do you append WebKit2_INCLUDE_DIRECTORIES twice ?

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:154
&gt; &gt; +        listOflanguages = eina_list_append(listOflanguages, strdup(languages[i].utf8().data()));
&gt; 
&gt; Please use WKEinaSharedString instead of strdup.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.cpp:178
&gt; &gt; +        listOflanguages = eina_list_append(listOflanguages, strdup(languages[i].utf8().data()));
&gt; 
&gt; ditto.

It&apos;s not possible :) WKEinaSharedString was involved to internal usage. Those list are exported to API. Used eina_stringshare_add instead.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_setting.h:163
&gt; &gt; ++ * Gets the the list of spell checking languages in use.
&gt; 
&gt; Remove &apos;+&apos;

Thanks. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726622</commentid>
    <comment_count>34</comment_count>
      <attachid>165373</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-24 07:08:14 -0700</bug_when>
    <thetext>Created attachment 165373
changed ewk_text_checker_setting to ewk_text_checker_settings (plural)

1) This patch uses ewk_text_checker_settings.{h.cpp} (plural one) as file which keeps global preferences also uses ewk_settings.
2) Added proper license for the newly created files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726626</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-24 07:12:00 -0700</bug_when>
    <thetext>Attachment 165373 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/efl/ewk_text_checker_settings.h:31:  #ifndef header guard has wrong style, please use: ewk_text_checker_settings_h  [build/header_guard] [5]
Source/WebKit2/UIProcess/API/efl/EWebKit2.h:44:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726638</commentid>
    <comment_count>36</comment_count>
      <attachid>165377</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-24 07:28:06 -0700</bug_when>
    <thetext>Created attachment 165377
fixing coding style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727213</commentid>
    <comment_count>37</comment_count>
      <attachid>165377</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-24 19:54:33 -0700</bug_when>
    <thetext>Comment on attachment 165377
fixing coding style

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

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:45
&gt; +static OwnPtr&lt;WebCore::TextCheckerEnchant&gt; textCheckerEnchant = WebCore::TextCheckerEnchant::create();

I think it would be good if you use DEFINE_STATIC_LOCAL macro as below,

static OwnPtr&lt;WebPluginLoadObserver&gt;&amp; textCheckerEnchant()
{
    DEFINE_STATIC_LOCAL(OwnPtr&lt;WebCore::TextCheckerEnchant&gt;, nextPluginLoadObserver, WebCore::TextCheckerEnchant::create());
    return textCheckerEnchant;
}

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:46
&gt; +static Ewk_Text_Checker* ewkTextCheckerCallback = ewkTextChecker();

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:99
&gt; +    // FIXME: call client&apos;s function.

call -&gt; Call ?

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:140
&gt; +            free(item);

Use delete instead of free.

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.h:63
&gt; +Vector&lt;String&gt; availableSpellCheckingLanguages();

Is it better to add const keyword ?

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.h:65
&gt; +Vector&lt;String&gt; loadedSpellCheckingLanguages();

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_settings.cpp:103
&gt; +void ewk_text_checker_settings_enable_continuous_spell_checking_set(Eina_Bool enable)

In ewk_settings.cpp, enabled is placed in front of _set|_get. I think we need to be consistent with them.

ewk_settings_developer_extras_enabled_get
ewk_settings_javascript_enabled_get

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_settings.cpp:131
&gt; +void ewk_text_checker_settings_enable_grammar_checking_set(Eina_Bool enable)

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_settings.cpp:146
&gt; +Eina_List* ewk_text_checker_settings_available_spell_checking_languages_get()

ditto ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_settings.cpp:155
&gt; +

Unneeded line.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:2
&gt; + * Copyright (C) 2012 Samsung Electronics

Generally, latest copyright is placed to below.

&gt; Source/cmake/OptionsEfl.cmake:171
&gt; +OPTION(ENABLE_SPELLCHECK &quot;Enable spellchecking feature (requires enchant)&quot; ON)

Why not move this to WEBKIT_OPTION_DEFAULT_PORT_VALUE list as well as add this to WebKitFeatures.cmake ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727586</commentid>
    <comment_count>38</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-25 06:51:40 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; (From update of attachment 165377 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165377&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:45
&gt; &gt; +static OwnPtr&lt;WebCore::TextCheckerEnchant&gt; textCheckerEnchant = WebCore::TextCheckerEnchant::create();
&gt; 
&gt; I think it would be good if you use DEFINE_STATIC_LOCAL macro as below,
&gt; 
&gt; static OwnPtr&lt;WebPluginLoadObserver&gt;&amp; textCheckerEnchant()
&gt; {
&gt;     DEFINE_STATIC_LOCAL(OwnPtr&lt;WebCore::TextCheckerEnchant&gt;, nextPluginLoadObserver, WebCore::TextCheckerEnchant::create());
&gt;     return textCheckerEnchant;
&gt; }

It&apos;s nice suggestion and as I understand your intension is to not define the static variables. IMHO we can not use this macro in this case because of the destructor in never called for the given object. In the shortcut the macro does:
static Foo* foo2 = new Foo(); // no one is take care of deleting it
Destructor will be called when we define object like this:
static Foo foo2; // delete on application exit.

IMO OwnPtr doesn&apos;t help us in this case as we create it by new (please correct me If I am wrong).

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:46
&gt; &gt; +static Ewk_Text_Checker* ewkTextCheckerCallback = ewkTextChecker();
&gt; 
&gt; ditto.

Not possible, ewkTextChecker() it&apos;s not the constuctor, this is just simply helper functions avoid calling ewkTextChecker()-&gt;userCallbackFunction()

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:99
&gt; &gt; +    // FIXME: call client&apos;s function.
&gt; 
&gt; call -&gt; Call ?

You&apos;re right.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:140
&gt; &gt; +            free(item);
&gt; 
&gt; Use delete instead of free.

The item is created by application side (using malloc). We have to call free() in this case.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.h:63
&gt; &gt; +Vector&lt;String&gt; availableSpellCheckingLanguages();
&gt; 
&gt; Is it better to add const keyword ?

The function is not a member of class. We resign of creating a class for keeping a static methods only.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.h:65
&gt; &gt; +Vector&lt;String&gt; loadedSpellCheckingLanguages();
&gt; 
&gt; ditto.

Ditto :)

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_settings.cpp:103
&gt; &gt; +void ewk_text_checker_settings_enable_continuous_spell_checking_set(Eina_Bool enable)
&gt; 
&gt; In ewk_settings.cpp, enabled is placed in front of _set|_get. I think we need to be consistent with them.
&gt; 
&gt; ewk_settings_developer_extras_enabled_get
&gt; ewk_settings_javascript_enabled_get
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_settings.cpp:131
&gt; &gt; +void ewk_text_checker_settings_enable_grammar_checking_set(Eina_Bool enable)
&gt; 
&gt; ditto.

Ok, I will apply your suggestion.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_settings.cpp:146
&gt; &gt; +Eina_List* ewk_text_checker_settings_available_spell_checking_languages_get()
&gt; 
&gt; ditto ?

Are you proposing: ewk_text_checker_settings_spell_checking_languages_enabled_get() ?

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_settings.cpp:155
&gt; &gt; +
&gt; 
&gt; Unneeded line.

Right.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:2
&gt; &gt; + * Copyright (C) 2012 Samsung Electronics
&gt; 
&gt; Generally, latest copyright is placed to below.

Ok.

&gt; 
&gt; &gt; Source/cmake/OptionsEfl.cmake:171
&gt; &gt; +OPTION(ENABLE_SPELLCHECK &quot;Enable spellchecking feature (requires enchant)&quot; ON)
&gt; 
&gt; Why not move this to WEBKIT_OPTION_DEFAULT_PORT_VALUE list as well as add this to WebKitFeatures.cmake ?

I can try:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727655</commentid>
    <comment_count>39</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-25 08:10:58 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_settings.cpp:103
&gt; &gt; +void ewk_text_checker_settings_enable_continuous_spell_checking_set(Eina_Bool enable)
&gt; 
&gt; In ewk_settings.cpp, enabled is placed in front of _set|_get. I think we need to be consistent with them.
&gt; 
&gt; ewk_settings_developer_extras_enabled_get

ewk_settings API is based on WKPreferences:
WKPreferencesSetDeveloperExtrasEnabled -&gt; ewk_settings_developer_extras_enabled_get

IMHO it&apos;s better to use simple tense instead of past, &apos;enabled&apos; for getter makes sense but for setter doesn&apos;t sound well. I followed API from WK1:

ewk_view_setting_enable_developer_extras_get

I&apos;d like to listen all API proposals as changing the API blocks adding unit tests and landing this patch.

Kubo, Christophe could you express your feeling about ewk_text_checker_settings and ewk_text_checker APIs? Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729343</commentid>
    <comment_count>40</comment_count>
      <attachid>165957</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-27 02:28:02 -0700</bug_when>
    <thetext>Created attachment 165957
apply Gyuyoung&apos;s comments

This patch doesn&apos;t contain any API changes - those should be discussed more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729363</commentid>
    <comment_count>41</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-27 02:57:09 -0700</bug_when>
    <thetext>The spellchecking feature consist of API to:
 1) manipulate settings (toggle both spell and grammar checking, notification about the setting change)
 2) overwrite the default spellchecker implementation - our implementation doesn&apos;t support grammar checking (only spell checking), user is able to define own implementation by callback functions. It&apos;s the main purpose of WKTextChecker.h - to move the implementation to the client side. We partially deliver it in WebKit internally but exposing those callbacks do not limit client to define own callbacks.

Do you along with them? Feel free to express all your opinions about API.

ewk_text_checker_settings.h File Reference

Typedefs:
typedef void(* 	Ewk_Text_Checker_Settings_Continuous_Spell_Checking_Changed )(Eina_Bool enable)
typedef void(* 	Ewk_Text_Checker_Settings_Grammar_Checking_Changed )(Eina_Bool enable)

Functions:
EAPI void 	ewk_text_checker_settings_continuous_spell_checking_changed_cb_set (Ewk_Text_Checker_Settings_Continuous_Spell_Checking_Changed cb)
EAPI void 	ewk_text_checker_settings_grammar_checking_changed_cb_set (Ewk_Text_Checker_Settings_Grammar_Checking_Changed cb)
EAPI Eina_Bool 	ewk_text_checker_settings_enable_continuous_spell_checking_get (void)
EAPI void 	ewk_text_checker_settings_enable_continuous_spell_checking_set (Eina_Bool enable)
EAPI Eina_Bool 	ewk_text_checker_settings_enable_grammar_checking_get (void)
EAPI void 	ewk_text_checker_settings_enable_grammar_checking_set (Eina_Bool enable)
EAPI Eina_List * 	ewk_text_checker_settings_available_spell_checking_languages_get (void)
EAPI void 	ewk_text_checker_settings_spell_checking_languages_set (const char *languages)
EAPI Eina_List * 	ewk_text_checker_settings_spell_checking_languages_get (void)

ewk_text_checker.h File Reference

Typedefs:
typedef uint64_t(* 	Ewk_Text_Checker_Unique_Spell_Document_Tag_Get )(const Evas_Object *o)
typedef void(* 	Ewk_Text_Checker_Unique_Spell_Document_Tag_Close )(uint64_t tag)
typedef void(* 	Ewk_Text_Checker_String_Spelling_Check )(uint64_t tag, const char *text, int32_t *misspelling_location, int32_t *misspelling_length)
typedef Eina_Bool(* 	Ewk_Text_Checker_UI_Spelling_Status_Get )(void)
typedef void(* 	Ewk_Text_Checker_UI_Spelling_Status_Toggle )(void)
typedef void(* 	Ewk_Text_Checker_UI_Spelling_Misspelled_Word_Update )(uint64_t tag, const char *misspelled_word)
typedef Eina_List *(* 	Ewk_Text_Checker_Word_Guesses_Get )(uint64_t tag, const char *word)
typedef void(* 	Ewk_Text_Checker_Word_Learn )(uint64_t tag, const char *word)
typedef void(* 	Ewk_Text_Checker_Word_Ignore )(uint64_t tag, const char *word)

Functions:
EAPI void 	ewk_text_checker_unique_spell_document_tag_get_cb_set (Ewk_Text_Checker_Unique_Spell_Document_Tag_Get cb)
EAPI void 	ewk_text_checker_unique_spell_document_tag_close_cb_set (Ewk_Text_Checker_Unique_Spell_Document_Tag_Close cb)
EAPI void 	ewk_text_checker_string_spelling_check_cb_set (Ewk_Text_Checker_String_Spelling_Check cb)
EAPI void 	ewk_text_checker_ui_spelling_status_get_cb_set (Ewk_Text_Checker_UI_Spelling_Status_Get cb)
EAPI void 	ewk_text_checker_ui_spelling_status_toggle_cb_set (Ewk_Text_Checker_UI_Spelling_Status_Toggle cb)
EAPI void 	ewk_text_checker_ui_spelling_misspelled_word_update_cb_set (Ewk_Text_Checker_UI_Spelling_Misspelled_Word_Update cb)
EAPI void 	ewk_text_checker_word_guesses_get_cb_set (Ewk_Text_Checker_Word_Guesses_Get cb)
EAPI void 	ewk_text_checker_word_learn_cb_set (Ewk_Text_Checker_Word_Learn cb)
EAPI void 	ewk_text_checker_word_ignore_cb_set (Ewk_Text_Checker_Word_Ignore cb)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739691</commentid>
    <comment_count>42</comment_count>
      <attachid>165957</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-11 01:13:02 -0700</bug_when>
    <thetext>Comment on attachment 165957
apply Gyuyoung&apos;s comments

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

This patch has supported more than text checker API supported by gtk port. Do you think we really need to support these APIs all ?

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:125
&gt; +    // FIXME: call client&apos;s function.

Nit : call -&gt; Call ?

&gt; Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp:142
&gt; +

Looks unneeded line.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:87
&gt; +typedef Eina_Bool (*Ewk_Text_Checker_UI_Spelling_Status_Get)(void);

What does *UI* mean in this callback ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_settings.cpp:29
&gt; +#if ENABLE(SPELLCHECK)

New line ?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:-30
&gt; -#include &lt;WebCore/NotImplemented.h&gt;

New line ?

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:75
&gt; +#endif

You need to use UNUSED_PARAM to avoid unused parameter build warning.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:86
&gt; +#endif

ditto.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:100
&gt; +#endif

ditto.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:107
&gt; +#else

ditto.

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:158
&gt; +#if ENABLE(SPELLCHECK)

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739931</commentid>
    <comment_count>43</comment_count>
      <attachid>168222</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-11 07:02:27 -0700</bug_when>
    <thetext>Created attachment 168222
updated patch

1) Apply Gyuyoung&apos;s suggestions
2) Remove UI callbacks - WebKit2-EFL doesn&apos;t need them.
3) Use new API syntax - ewk_foo_bar_enabled_{get,set} etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740553</commentid>
    <comment_count>44</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-11 19:54:10 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; (From update of attachment 165957 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165957&amp;action=review
&gt; 
&gt; This patch has supported more than text checker API supported by gtk port. Do you think we really need to support these APIs all ?

How do you think about my question ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740704</commentid>
    <comment_count>45</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-12 01:05:00 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; (In reply to comment #42)
&gt; &gt; (From update of attachment 165957 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165957&amp;action=review
&gt; &gt; 
&gt; &gt; This patch has supported more than text checker API supported by gtk port. Do you think we really need to support these APIs all ?
&gt; 
&gt; How do you think about my question ?

WK1-Gtk exposes the following callbacks (webkitspellchecker.h):
 - check_spelling_of_string
 - get_guesses_for_word
 - update_spell_checking_languages
 - get_autocorrect_suggestions_for_misspelled_word
 - learn_word
 - ignore_word
Additionally settings are manipulated via (webkitwebsettings.cpp)

WK2-Gtk doesn&apos;t expose those callback at all. Only spelling settings can be manipulated via WebKitWebContext.h file.

Whole spelling implementation in WK2 is exposed to the application side (see WKTextChecker.h) The WK2-EFL implementation contains an internal implementation (as WK2-Gtk) based on Enchant implemetation and additionally exposes the callback as (Wk1-GTK). So the client may overwrite the default spelling implementation. IMHO we do not force the client to use Enchant library, he would use any spelling library on demand.

I&apos;ve already removed UI&apos;s nad grammar callbacks.
We can remove grammar settings from (ewk_text_checker_settings.{h.cpp}) too and to move spelling settings to the global settings file (ewk_settings.h). What&apos;s you opinion on that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740872</commentid>
    <comment_count>46</comment_count>
      <attachid>168409</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-12 06:04:19 -0700</bug_when>
    <thetext>Created attachment 168409
reduce implementation

1. Remove &apos;grammar checking settings&apos;.
   It doesn&apos;t make sense to export API which allows to enable &apos;grammar checking&apos; if the core implementation is missing.

2. Move  spelling settings to the ewk_setting.{h,cpp} files.
   The files mostly manipulate settings which are related to the view object. Text checker settings (in fact spelling settings) are not connected to any view object but keeping them somewhere else may be confusing.

3. ewk_text_checker_settings.{h,cpp} is no needed any more :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740924</commentid>
    <comment_count>47</comment_count>
      <attachid>168421</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-12 08:20:47 -0700</bug_when>
    <thetext>Created attachment 168421
fix undefined references for API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741460</commentid>
    <comment_count>48</comment_count>
      <attachid>168421</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-13 03:24:24 -0700</bug_when>
    <thetext>Comment on attachment 168421
fix undefined references for API

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

Looks good to me now except for my comment. However, Someone else might want to have a final look.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.h:32
&gt; + * If application wants to enable the feature, API from @a ewk_text_checker_setting.h

ewk_text_checker_setting.h is not needed anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741785</commentid>
    <comment_count>49</comment_count>
      <attachid>168634</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-14 23:59:39 -0700</bug_when>
    <thetext>Created attachment 168634
patch for landing

I will set cq flag when the unit tests (bug 95956) get (in)formal review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741801</commentid>
    <comment_count>50</comment_count>
      <attachid>168634</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-15 00:17:44 -0700</bug_when>
    <thetext>Comment on attachment 168634
patch for landing

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_settings.h:288
&gt; +EAPI void ewk_settings_spell_checking_languages_enabled_set(const char *languages);

This makes it sound like it is taking a boolean in argument. Why the &quot;_enabled&quot; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742023</commentid>
    <comment_count>51</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-15 07:04:18 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; (From update of attachment 168634 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168634&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_settings.h:288
&gt; &gt; +EAPI void ewk_settings_spell_checking_languages_enabled_set(const char *languages);
&gt; 
&gt; This makes it sound like it is taking a boolean in argument. Why the &quot;_enabled&quot; ?

There are three functions to manipulate the languages:
- ewk_settings_spell_checking_languages_get(): general getter, gets all languages available on your OS,

- ewk_settings_spell_checking_languages_enabled_set(): sets languages to performing spelling, so languages which are enabled 

- ewk_settings_spell_checking_languages_enabled_get(): gets languages in use (which are enabled)

Shouldn&apos;t we use &apos;_enabled&apos; for those API? IMHO it doesn&apos;t violate much :) Anyway it was suggestion from comment 35.
Of course we can use for example &apos;in_use&apos; etc. but IMHO _enabled sounds better in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743002</commentid>
    <comment_count>52</comment_count>
      <attachid>168634</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-16 02:35:43 -0700</bug_when>
    <thetext>Comment on attachment 168634
patch for landing

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_settings.h:288
&gt;&gt;&gt; +EAPI void ewk_settings_spell_checking_languages_enabled_set(const char *languages);
&gt;&gt; 
&gt;&gt; This makes it sound like it is taking a boolean in argument. Why the &quot;_enabled&quot; ?
&gt; 
&gt; There are three functions to manipulate the languages:
&gt; - ewk_settings_spell_checking_languages_get(): general getter, gets all languages available on your OS,
&gt; 
&gt; - ewk_settings_spell_checking_languages_enabled_set(): sets languages to performing spelling, so languages which are enabled 
&gt; 
&gt; - ewk_settings_spell_checking_languages_enabled_get(): gets languages in use (which are enabled)
&gt; 
&gt; Shouldn&apos;t we use &apos;_enabled&apos; for those API? IMHO it doesn&apos;t violate much :) Anyway it was suggestion from comment 35.
&gt; Of course we can use for example &apos;in_use&apos; etc. but IMHO _enabled sounds better in this case.

ewk_settings_spell_checking_languages_set is better for me. If we use _enabled, it looks this API is just enable/disable specific functionality via a flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743017</commentid>
    <comment_count>53</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-16 02:57:40 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; (From update of attachment 168634 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168634&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_settings.h:288
&gt; &gt;&gt;&gt; +EAPI void ewk_settings_spell_checking_languages_enabled_set(const char *languages);
&gt; &gt;&gt; 
&gt; &gt;&gt; This makes it sound like it is taking a boolean in argument. Why the &quot;_enabled&quot; ?
&gt; &gt; 
&gt; &gt; There are three functions to manipulate the languages:
&gt; &gt; - ewk_settings_spell_checking_languages_get(): general getter, gets all languages available on your OS,
&gt; &gt; 
&gt; &gt; - ewk_settings_spell_checking_languages_enabled_set(): sets languages to performing spelling, so languages which are enabled 
&gt; &gt; 
&gt; &gt; - ewk_settings_spell_checking_languages_enabled_get(): gets languages in use (which are enabled)
&gt; &gt; 
&gt; &gt; Shouldn&apos;t we use &apos;_enabled&apos; for those API? IMHO it doesn&apos;t violate much :) Anyway it was suggestion from comment 35.
&gt; &gt; Of course we can use for example &apos;in_use&apos; etc. but IMHO _enabled sounds better in this case.
&gt; 
&gt; ewk_settings_spell_checking_languages_set is better for me. If we use _enabled, it looks this API is just enable/disable specific functionality via a flag.

Ok, thanks for your opinion. I propose the following API:

- ewk_settings_spell_checking_AVAILABLE_languages_get(): general getter, gets all languages available/installed on your OS,

- ewk_settings_spell_checking_languages_set(): sets languages to check spelling
 
- ewk_settings_spell_checking_languages_get(): gets languages in use

What&apos;s your opinion on that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743020</commentid>
    <comment_count>54</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-16 03:03:39 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; (In reply to comment #52)
&gt; &gt; (From update of attachment 168634 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168634&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_settings.h:288
&gt; &gt; &gt;&gt;&gt; +EAPI void ewk_settings_spell_checking_languages_enabled_set(const char *languages);
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; This makes it sound like it is taking a boolean in argument. Why the &quot;_enabled&quot; ?
&gt; &gt; &gt; 
&gt; &gt; &gt; There are three functions to manipulate the languages:
&gt; &gt; &gt; - ewk_settings_spell_checking_languages_get(): general getter, gets all languages available on your OS,
&gt; &gt; &gt; 
&gt; &gt; &gt; - ewk_settings_spell_checking_languages_enabled_set(): sets languages to performing spelling, so languages which are enabled 
&gt; &gt; &gt; 
&gt; &gt; &gt; - ewk_settings_spell_checking_languages_enabled_get(): gets languages in use (which are enabled)
&gt; &gt; &gt; 
&gt; &gt; &gt; Shouldn&apos;t we use &apos;_enabled&apos; for those API? IMHO it doesn&apos;t violate much :) Anyway it was suggestion from comment 35.
&gt; &gt; &gt; Of course we can use for example &apos;in_use&apos; etc. but IMHO _enabled sounds better in this case.
&gt; &gt; 
&gt; &gt; ewk_settings_spell_checking_languages_set is better for me. If we use _enabled, it looks this API is just enable/disable specific functionality via a flag.
&gt; 
&gt; Ok, thanks for your opinion. I propose the following API:
&gt; 
&gt; - ewk_settings_spell_checking_AVAILABLE_languages_get(): general getter, gets all languages available/installed on your OS,
&gt; 
&gt; - ewk_settings_spell_checking_languages_set(): sets languages to check spelling
&gt; 
&gt; - ewk_settings_spell_checking_languages_get(): gets languages in use
&gt; 
&gt; What&apos;s your opinion on that?

Looks more clear API names than before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743136</commentid>
    <comment_count>55</comment_count>
      <attachid>168945</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-16 07:43:57 -0700</bug_when>
    <thetext>Created attachment 168945
change API to more convenient names 

Asking for review once again as API has been changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743761</commentid>
    <comment_count>56</comment_count>
      <attachid>168945</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-16 18:22:12 -0700</bug_when>
    <thetext>Comment on attachment 168945
change API to more convenient names 

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:45
&gt;  #include &lt;wtf/text/WTFString.h&gt;

New line ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_settings.cpp:31
&gt;  #include &lt;WebKit2/WKPreferencesPrivate.h&gt;

New line ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:29
&gt; +#if ENABLE(SPELLCHECK)

New line ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker_private.h:29
&gt; +#if ENABLE(SPELLCHECK)

New line ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743918</commentid>
    <comment_count>57</comment_count>
      <attachid>169100</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-17 00:01:16 -0700</bug_when>
    <thetext>Created attachment 169100
polish the patch regarding to Gyuyoung&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744084</commentid>
    <comment_count>58</comment_count>
      <attachid>169100</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-17 03:01:30 -0700</bug_when>
    <thetext>Comment on attachment 169100
polish the patch regarding to Gyuyoung&apos;s comments

Rejecting attachment 169100 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
nt): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Assertion failed on HTMLFormControlElement.cpp: updateFromElementCallback()

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.

Full output: http://queues.webkit.org/results/14400382</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744102</commentid>
    <comment_count>59</comment_count>
      <attachid>169100</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-17 03:18:28 -0700</bug_when>
    <thetext>Comment on attachment 169100
polish the patch regarding to Gyuyoung&apos;s comments

There is no any problems with rebase on my local repository. Let&apos;s try to add it one more time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744111</commentid>
    <comment_count>60</comment_count>
      <attachid>169100</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-17 03:30:57 -0700</bug_when>
    <thetext>Comment on attachment 169100
polish the patch regarding to Gyuyoung&apos;s comments

Clearing flags on attachment: 169100

Committed r131579: &lt;http://trac.webkit.org/changeset/131579&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744112</commentid>
    <comment_count>61</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-17 03:31:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161908</attachid>
            <date>2012-09-03 05:56:06 -0700</date>
            <delta_ts>2012-09-03 06:04:28 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>56243</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxMGE0YzJjLi5lODAyYjYw
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDktMDMgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qICA8bS5yb2pAc2FzbXVuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZM
XSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZXMgc3BlbGxjaGVja2luZyBm
ZWF0dXJlIGZvciBXSzItRWZsLgorCisgICAgICAgICogU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50
LmNtYWtlOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZTog
RGVmaW5lcyBTUEVMTENIRUNLIG1hY3JvLgorCiAyMDEyLTA4LTMxICBUb255IENoYW5nICA8dG9u
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIEVOQUJMRV9DU1MzX0ZMRVhCT1ggY29t
cGlsZSB0aW1lIGZsYWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmZjJlMjU4Li42ZWY5ZDUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDktMDMgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6
YWprb3dza2lAc2Ftc3VuZy5jb20+LCBNaWNoYWwgUm9qICA8bS5yb2pAc2Ftc3VuZy5jb20+CisK
KyAgICAgICAgW1dLMl1bRUZMXSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1
cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxh
dGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBlbmNoYW50LXJlbGF0ZWQgY29tcGlsZXIgZmxh
Z3M6IGhlYWRlciBwYXRocyBhbmQgdGhlIGxpYnJhcnkgZmxhZy4KKworICAgICAgICAqIHBsYXRm
b3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwOgorICAgICAgICAoVGV4dENo
ZWNrZXJFbmNoYW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoVGV4dENoZWNr
ZXJFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChUZXh0Q2hlY2tlckVuY2hh
bnQ6OmdldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICBVc2VzIG5ld2x5IGNyZWF0
ZWQgJ2FyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCknIG1ldGhvZC4KKworICAgICAgICAqIHBs
YXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDaGVja2VyRW5jaGFudDo6YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQpOgorICAg
ICAgICBEZWZpbmVzIGFuIGluIGxpbmUgbWV0aG9kIHRvIHJldHVybiBpbmZvcm1hdGlvbiB3aGV0
aGVyIGRpY3Rpb25hcmllcyBoYXZlIGJlZW4gbG9hZGVkLgorICAgICAgICBJdCdzIHVzZWQgYnkg
V2ViS2l0VGV4dENoZWNrZXIgYW5kIFRleHRDaGVja2VyRW5jaGFudC4KKwogMjAxMi0wOS0wMyAg
QW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IHVzZSBsaW5raWZ5UmVzb3VyY2VBc05vZGUsIG5vdCBsaW5raWZ5TG9jYXRpb24gd2hl
biBsaW5raWZ5aW5nIHJlc291cmNlcyBpbiBUaW1lbGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCA0NTRlZWU4Li4zMWEzMDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
ODgsNiArODgsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0vUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3Bw
CiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3Bw
CisgIHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCiApCiAKIElG
IChFTkFCTEVfQkFUVEVSWV9TVEFUVVMpCkBAIC0zMjQsMyArMzI1LDcgQEAgSUYgKEVOQUJMRV9X
RUJfQVVESU8pCiAgIEFERF9ERUZJTklUSU9OUygtRFVOSU5TVEFMTEVEX0FVRElPX1JFU09VUkNF
U19ESVI9IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2F1ZGlvL3Jlc291cmNlcyIpCiBFTkRJRiAo
KQogCitJRiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNM
VURFX0RJUkVDVE9SSUVTICR7RW5jaGFudF9JTkNMVURFX0RJUlN9KQorICAgIExJU1QoQVBQRU5E
IFdlYkNvcmVfTElCUkFSSUVTICR7RW5jaGFudF9MSUJSQVJJRVN9KQorRU5ESUYoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5j
aGFudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNr
ZXJFbmNoYW50LmNwcAppbmRleCBmNzJmYjBjLi5hYjNhOWQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50
LmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6bGVhcm5Xb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCkKIAogdm9pZCBUZXh0Q2hlY2tlckVuY2hhbnQ6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0
aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKQogewotICAgIGlmIChtX2VuY2hhbnREaWN0aW9u
YXJpZXMuaXNFbXB0eSgpKQorICAgIGlmICghYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IG51bWJlck9mQ2hhcmFjdGVycyA9IHN0cmlu
Zy5sZW5ndGgoKTsKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIG1pc3NwZQog
VmVjdG9yPFN0cmluZz4gVGV4dENoZWNrZXJFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25z
dCBTdHJpbmcmIHdvcmQpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKLSAgICBpZiAo
bV9lbmNoYW50RGljdGlvbmFyaWVzLmlzRW1wdHkoKSkKKyAgICBpZiAoIWFyZURpY3Rpb25hcmll
c0luaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybiBndWVzc2VzOwogCiAgICAgZm9yIChWZWN0
b3I8RW5jaGFudERpY3QqPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fZW5jaGFudERpY3Rpb25h
cmllcy5iZWdpbigpOyBpdGVyICE9IG1fZW5jaGFudERpY3Rpb25hcmllcy5lbmQoKTsgKytpdGVy
KSB7CkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBUZXh0Q2hlY2tlckVuY2hhbnQ6OnVwZGF0ZVNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmcKIFZlY3RvcjxT
dHJpbmc+IFRleHRDaGVja2VyRW5jaGFudDo6Z2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcygpCiB7
CiAgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOwotICAgIGlmIChtX2VuY2hhbnREaWN0aW9u
YXJpZXMuaXNFbXB0eSgpKQorICAgIGlmICghYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkK
ICAgICAgICAgcmV0dXJuIGxhbmd1YWdlczsKIAogICAgIC8vIEdldCBhIFZlY3RvcjxDU3RyaW5n
PiB3aXRoIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyBpbiB1c2UuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmgKaW5k
ZXggMTc4MGI0NS4uYWQ2ZmYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaApAQCAtNDMsNiArNDMsNyBA
QCBwdWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4gZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3Ry
aW5nJik7CiAgICAgdm9pZCB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBsYW5ndWFnZXMpOwogICAgIFZlY3RvcjxTdHJpbmc+IGdldFNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMoKTsKKyAgICBib29sIGFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCkgY29u
c3QgeyByZXR1cm4gIW1fZW5jaGFudERpY3Rpb25hcmllcy5pc0VtcHR5KCk7IH0KIAogcHJpdmF0
ZToKICAgICBUZXh0Q2hlY2tlckVuY2hhbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxMTMyNzdkLi42YWQw
ZjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI2IEBACisyMDEyLTA5LTAzICBHcnplZ29yeiBD
emFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFsIFJvaiAgPG0ucm9q
QHNhbXN1bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gSW1wbGVtZW50YXRpb24gb2Ygc3Bl
bGxjaGVja2luZyBmZWF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTE4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRzIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGZvciBXZWJLaXQyLUVGTCB0
aGF0IGlzIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKworICAgICAgICBBZGRpdGlvbmFsbHkg
dGhlIHBhdGNoIHByb3ZpZGVzIEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNw
ZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhcyBFbmNoYW50IGxpYnJhcnkgZG9l
c24ndCBlbnN1cmUgZ3JhbW1hciBjaGVja2luZy4KKyAgICAgICAgQXBwbGljYXRpb24gaXMgYWJs
ZSB0byBvdmVyd3JpdGUgaXQgKGJvdGggZ3JhbW1hciBhbmQgc3BlbGwgY2hlY2tpbmcpIGJ5IGRl
ZmluaW5nCisgICAgICAgIGl0cyBvd24gaW1wbGVtZW50YXRpb24gYW5kIHNldHRpbmcgYXBwcm9w
cmlhdGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6
CisgICAgICAgIEFkZCBlbmNoYW50LXJlbGF0ZWQgY29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRo
cyBhbmQgdGhlIGxpYnJhcnkgZmxhZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmg6CisgICAgICAgIEFkZCBmaWxlcyB0aGF0IGNvbnRhaW4gQVBJIHRvIHRoZSBtYWlu
IFdlYktpdDItRUZMJ3MgaGVhZGVyIHRvIGJlIGF2YWlsYWJsZSBmb3IgYXBwbGljYXRpb25zLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgSW1wbGVtZW50cyBjYWxsYmFja3MgZnVuY3Rpb25zIG9mIFdLVGV4dENoZWNr
ZXIuCisKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVj
a2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6aXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6
OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0
Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktp
dFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKToKKyAgICAgICAgKFdlYktp
dDo6V2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjp1
cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJL
aXRUZXh0Q2hlY2tlcjo6Z3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRU
ZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNr
ZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICBUaG9zZSBtZXRob2RzIGFyZSBkaXJlY3RseSBnaXZl
biBhcyBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIFdLVGV4dENoZWNrZXIncyBjbGllbnQuCisgICAg
ICAgIFRoZWlyIHJlYXNvbiBpcyB0byBjaG9vc2UgYmV0d2VlbiBXZWJLaXQncyBzcGVsbGluZyBp
bXBsZW1lbnRhdGlvbiBhbmQgY2xpZW50J3Mgb25lcy4KKworICAgICAgICAoV2ViS2l0OjpXZWJL
aXRUZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6dXBk
YXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFRoZSBtZXRob2RzIGFyZSB1c2Vk
IGJ5IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHAgZmlsZSBhbmQgYWxsb3cgdG8gZG8gbm90
CisgICAgICAgIGV4cG9zZSAnbV90ZXh0Q2hlY2tlckVuY2hhbnQnLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmlu
ZXMgY2xhc3Mgd2hpY2ggY2hvb3NlcyBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9uIG9m
IHNwZWxsaW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KKworICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdFRleHRDaGVja2VyKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNr
ZXI6OmV3a1RleHRDaGVja2VyKToKKyAgICAgICAgUmV0dXJucyBzdHJ1Y3QgdGhhdCBrZWVwcyBj
bGllbnQncyBjYWxsYmFja3MuCisKKyAgICAgICAgKEVuY2hhbnRIZWxwZXIpOgorICAgICAgICBL
ZWVwcyBpbmZvcm1hdGlvbiBiYXNlZCBvbiBUZXh0Q2hlY2tlckVuY2hhbnQgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAg
ICAgIChfRXdrX0NvbnRleHQ6Ol9Fd2tfQ29udGV4dCk6CisgICAgICAgIEluaXRpYWx6ZXMgc3Bl
bGxjaGVja2VyIGZlYXR1cmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4
dF9jaGVja2VyLmNwcDogQWRkZWQuCisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX2NsaWVudF9h
dHRhY2gpOgorICAgICAgICBTZXRzIFdLVGV4dENoZWNrZXIgY2xpZW50IGFuZCByZWdpc3RlcnMg
V2ViS2l0VGV4dENoZWNrZXIncyBjYWxsYmFja3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdGV4dF9jaGVja2VyLmg6IEFkZGVkLgorICAgICAgICBEZWZpbmVzIEFQSSB0byBz
ZXQgY2xpZW50J3Mgc3BlbGxpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChf
RXdrX1RleHRfQ2hlY2tlcik6CisgICAgICAgIERlZmluZXMgc3RydWN0IHdpdGggY2xpZW50J3Mg
Y2FsbGJhY2tzIHJlc3BvbmlzYmxlIGZvciBzcGVsbGluZy4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHA6IEFkZGVkLgorICAgICAgICAo
X2lkbGVyQ29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VkKToKKyAgICAgICAgKF9pZGxlckdy
YW1tYXJDaGVja2luZ0NoYW5nZWQpOgorICAgICAgICAoX2lkbGVyU2V0U3BlbGxDaGVja2luZ0xh
bmd1YWdlcyk6CisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBpcyBub3RpZmllZCBhYm91dCBzcGVs
bGluZyBzZXR0aW5ncyBjaGFuZ2UgKHRoZXkgbWF5IGJlIGNoYW5nZWQKKyAgICAgICAgdGhyb3Vn
aCBjb250ZXh0IG1lbnUgb3B0aW9uKSBvbiBpZGxlciB0byBkbyBub3QgYmxvY2sgV2ViS2l0Lgor
CisgICAgICAgIChfZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlc19zZXQpOgorICAgICAgICBIZWxwZXIgdGhhdCBjb252ZXJ0cyBzdHJpbmcgd2l0aCBsYW5n
dWFnZXMgdmFsdWVzIHRvIHRoZSBjb252ZW5pZW50IHZlY3Rvci4KKworICAgICAgICAoZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9z
ZXQpOgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2dyYW1tYXJfY2hlY2tpbmdf
Y2hhbmdlZF9jYl9zZXQpOgorICAgICAgICBTZXRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgdXNl
ZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuIHRoZSBzcGVsbGluZyBzZXR0aW5ncworICAgICAg
ICB3ZXJlIGNoYW5nZWQgYnkgV2ViS2l0LgorCisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KToKKyAgICAgICAgKGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19z
ZXQpOgorICAgICAgICBBUEkgdG8gc2V0L2dldCB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2lu
Zy4KKworICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2No
ZWNraW5nX2dldCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dy
YW1tYXJfY2hlY2tpbmdfc2V0KToKKyAgICAgICAgQVBJIHRvIHNldC9nZXQgdGhlIGdyYW1tYXIg
Y2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXNfc2V0KToKKyAgICAgICAgU2V0cyBsYW5ndWFnZXMgdG8gdXNlIGJ5IFdl
YktpdCBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBFbmNoYW50IGxpYnJhcnkuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaDogQWRkZWQuCisg
ICAgICAgIEFkZHMgQVBJIGZvciBtYW5pcHVsYXRpbmcgc3BlbGwgY2hlY2tlciBmZWF0dXJlLgor
CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjpzdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2Vy
Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6OlRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5n
RW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1bmlx
dWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNsb3Nl
U3BlbGxEb2N1bWVudFdpdGhUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hl
Y2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNr
R3JhbW1hck9mU3RyaW5nKTogUmVtb3ZlZCBXZWJDb3JlIG5hbWFzcGFjZSBhcyBpdCdzIGFscmVh
ZHkgZGVmaW5lZCBmb3IgdGhlIHdob2xlIGZpbGUuCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6
OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICBUaG9zZSBtZXRob2RzIGNhbGwgV0tUZXh0Q2hlY2tl
ciBjbGllbnQgbWV0aG9kcy4KKwogMjAxMi0wOS0wMyAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlz
dG9waGUuZHVtZXpAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gU2tpcCBFV0syVW5p
dFRlc3RCYXNlLmV3a19jb29raWVfbWFuYWdlcl9wZXJtYW5lbnRfc3RvcmFnZSBBUEkgdGVzdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA1NmNhMGMxLi44OGZiNzBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZQpAQCAtNDcsNiArNDcsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NP
VVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9OZXR3b3JrSW5mb1Byb3ZpZGVyLmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL1ZpYnJhdGlvblByb3ZpZGVyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRl
eHRDaGVja2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlz
dC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5j
cHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTYwLDYgKzYxLDgg
QEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X21haW4uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fcG9saWN5X2Rl
Y2lzaW9uLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uY3Bw
CisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKKyAgICBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3VybF9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxf
cmVzcG9uc2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVz
dC5jcHAKQEAgLTEyMyw2ICsxMjYsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX01FU1NBR0VTX0lO
X0ZJTEVTCiBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9L2xsaW50IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9l
ZmwiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvZW5jaGFudCIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3ZnL2dyYXBoaWNz
IgpAQCAtMjE0LDYgKzIxOCw4IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW4uaCIKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0
aW9uX3BvbGljeV9kZWNpc2lvbi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5oIgorICAgICIke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oIgor
ICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3JlcXVlc3QuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuaCIKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfc2No
ZW1lX3JlcXVlc3QuaCIKQEAgLTMxMSwzICszMTcsOCBAQCBJRiAoRU5BQkxFX0lOU1BFQ1RPUikK
ICAgICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTiAiKi5naWYiCiAgICAgICAgICAgICAgICAg
ICAgICAgIFBBVFRFUk4gIioucG5nIikKIEVORElGICgpCisKK0lGIChFTkFCTEVfU1BFTExDSEVD
SykKKyAgICBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMgJHtFbmNoYW50
X0lOQ0xVREVfRElSU30pCisgICAgTElTVChBUFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMgJHtFbmNo
YW50X0xJQlJBUklFU30pCitFTkRJRigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRVdlYktpdDIuaAppbmRleCBmMWMwOTBlLi4xNjc5ZGNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRl
ICJld2tfbWFpbi5oIgogI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbi5o
IgogI2luY2x1ZGUgImV3a19wb3B1cF9tZW51X2l0ZW0uaCIKKyNpbmNsdWRlICJld2tfdGV4dF9j
aGVja2VyLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgiCiAjaW5jbHVk
ZSAiZXdrX3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgogI2lu
Y2x1ZGUgImV3a191cmxfc2NoZW1lX3JlcXVlc3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWEyYTUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCkBAIC0wLDAg
KzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFRleHRDaGVja2VyLmgiCisKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRl
ICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldl
YlN0cmluZy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oIgorI2luY2x1
ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gSW5pdGlhbGl6ZSBjbGllbnQn
cyBmdW5jdGlvbnMgdG8gQGMgMCB0byBiZSBzdXJlIHRoYXQgdGhleSBhcmUgbm90IGRlZmluZWQu
CitFd2tfVGV4dF9DaGVja2VyIFdlYktpdFRleHRDaGVja2VyOjptX2V3a1RleHRDaGVja2VyIHsK
KyAgICAwLCAvLyB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldAorICAgIDAsIC8vIHVuaXF1
ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UKKyAgICAwLCAvLyBzdHJpbmdfc3BlbGxpbmdfY2hl
Y2sKKyAgICAvLyAwLCBzdHJpbmdfZ3JhbW1hcl9jaGVjaworICAgIDAsIC8vIHVpX3NwZWxsaW5n
X3N0YXR1c19nZXQKKyAgICAwLCAvLyB1aV90b2dnbGVfc3BlbGxpbmdfc3RhdHVzX2dldAorICAg
IDAsIC8vIHVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGUKKyAgICAvLyAwLCB1aV9z
cGVsbGluZ19ncmFtbWFyX3N0cmluZ191cGRhdGUKKyAgICAwLCAvLyB3b3JkX2d1ZXNzZXNfZ2V0
CisgICAgMCwgLy8gd29yZF9sZWFybgorICAgIDAgLy8gd29yZF9pZ25vcmUKK307CisKK093blB0
cjxXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ+IG1fdGV4dENoZWNrZXJFbmNoYW50ID0gV2Vi
Q29yZTo6VGV4dENoZWNrZXJFbmNoYW50OjpjcmVhdGUoKTsKKworYm9vbCBXZWJLaXRUZXh0Q2hl
Y2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoY29uc3Qgdm9pZCopCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBub3QgY2FsbGVkIGJ5
IFdlYktpdDIvV2ViQ29yZS4gSnVzdCBrZWVwIGl0IGZvciBBUEkgY29tcGF0aWJpbGl0eS4KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNrZXI6OmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCk7
Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqKQoreworICAgIGV3a190ZXh0X2NoZWNr
ZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoZW5hYmxlZCk7
Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNrZXI6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChj
b25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJs
ZV9ncmFtbWFyX2NoZWNraW5nX2dldCgpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpz
ZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCopCit7Cisg
ICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldChl
bmFibGVkKTsKK30KKwordWludDY0X3QgV2ViS2l0VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9j
dW1lbnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChtX2V3a1Rl
eHRDaGVja2VyLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KQorICAgICAgICByZXR1cm4g
bV9ld2tUZXh0Q2hlY2tlci51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCh0b0ltcGwocGFn
ZSktPnZpZXdXaWRnZXQoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJLaXRUZXh0
Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZv
aWQqKQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90
YWdfY2xvc2UpCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIudW5pcXVlX3NwZWxsX2RvY3VtZW50
X3RhZ19jbG9zZSh0YWcpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpjaGVja1NwZWxs
aW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCAq
KQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnN0cmluZ19zcGVsbGluZ19jaGVjaykKKyAg
ICAgICAgbV9ld2tUZXh0Q2hlY2tlci5zdHJpbmdfc3BlbGxpbmdfY2hlY2sodGFnLCB0b0ltcGwo
dGV4dCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3Nw
ZWxsaW5nTGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIG1fdGV4dENoZWNrZXJFbmNoYW50LT5j
aGVja1NwZWxsaW5nT2ZTdHJpbmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxsaW5n
TG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNr
ZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKHVpbnQ2NF90LCBXS1N0cmluZ1JlZiwgV0tBcnJheVJl
ZiosIGludDMyX3QqLCBpbnQzMl90KiwgY29uc3Qgdm9pZCopCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAvLyBGSVhNRTogY2FsbCBjbGllbnQncyBmdW5jdGlvbi4KK30KKworYm9vbCBX
ZWJLaXRUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZyhjb25zdCB2b2lkKikKK3sKKyAg
ICBpZiAobV9ld2tUZXh0Q2hlY2tlci51aV9zcGVsbGluZ19zdGF0dXNfZ2V0KQorICAgICAgICBy
ZXR1cm4gbV9ld2tUZXh0Q2hlY2tlci51aV9zcGVsbGluZ19zdGF0dXNfZ2V0KCk7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5n
VUlJc1Nob3dpbmcoY29uc3Qgdm9pZCopCit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNrZXIudWlf
dG9nZ2xlX3NwZWxsaW5nX3N0YXR1c19nZXQpCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIudWlf
dG9nZ2xlX3NwZWxsaW5nX3N0YXR1c19nZXQoKTsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAobV9ld2tUZXh0
Q2hlY2tlci51aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRlKQorICAgICAgICBtX2V3
a1RleHRDaGVja2VyLnVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGUodGFnLCB0b0lt
cGwobWlzc3BlbGxlZFdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBX
ZWJLaXRUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHVpbnQ2
NF90LCBXS1N0cmluZ1JlZiwgV0tHcmFtbWFyRGV0YWlsUmVmLCBjb25zdCB2b2lkKikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEZJWE1FOiBjYWxsIGNsaWVudCdzIGZ1bmN0aW9u
LgorfQorCitXS0FycmF5UmVmIFdlYktpdFRleHRDaGVja2VyOjpndWVzc2VzRm9yV29yZCh1aW50
NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIFdLTXV0YWJs
ZUFycmF5UmVmIHN1Z2dlc3Rpb25zRm9yV29yZCA9IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7CisK
KyAgICBpZiAobV9ld2tUZXh0Q2hlY2tlci53b3JkX2d1ZXNzZXNfZ2V0KSB7CisgICAgICAgIEVp
bmFfTGlzdCogbGlzdCA9IG1fZXdrVGV4dENoZWNrZXIud29yZF9ndWVzc2VzX2dldCh0YWcsIHRv
SW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHZvaWQqIGl0ZW07
CisKKyAgICAgICAgRUlOQV9MSVNUX0ZSRUUobGlzdCwgaXRlbSkgeworICAgICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoc3RhdGljX2Nhc3Q8Y2hhcio+KGl0ZW0pKSk7CisgICAgICAgICAgICBX
S0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOwor
ICAgICAgICAgICAgZnJlZShpdGVtKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IG1fdGV4dENoZWNrZXJFbmNoYW50LT5nZXRHdWVz
c2VzRm9yV29yZCh0b0ltcGwod29yZCktPnN0cmluZygpKTsKKworICAgICAgICBmb3IgKFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3Vlc3Nlcy5iZWdpbigpOyBpdGVyICE9
IGd1ZXNzZXMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
aXRlci0+dXRmOCgpLmRhdGEoKSkpOworICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oc3Vn
Z2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9uLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBzdWdnZXN0aW9uc0ZvcldvcmQ7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNr
ZXI6OmxlYXJuV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQq
KQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLndvcmRfbGVhcm4pCisgICAgICAgIG1fZXdr
VGV4dENoZWNrZXIud29yZF9sZWFybih0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgZWxzZQorICAgICAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+bGVhcm5X
b3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2Vy
OjppZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCop
Cit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNrZXIud29yZF9pZ25vcmUpCisgICAgICAgIG1fZXdr
VGV4dENoZWNrZXIud29yZF9pZ25vcmUodGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmlnbm9y
ZVdvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNr
ZXI6OkVuY2hhbnRIZWxwZXI6OmFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCkKK3sKKyAgICBy
ZXR1cm4gbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCk7
Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OkVuY2hhbnRIZWxwZXI6OnVwZGF0ZVNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcykKK3sKKyAg
ICBpZiAoIW1fdGV4dENoZWNrZXJFbmNoYW50LT5hcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCgp
KQorICAgICAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1
YWdlcyhsYW5ndWFnZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShTUEVMTENIRUNLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uY2Q4ZThkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0VGV4dENo
ZWNrZXJfaAorI2RlZmluZSBXZWJLaXRUZXh0Q2hlY2tlcl9oCisKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKworI2luY2x1ZGUgIlRleHRDaGVja2VyRW5jaGFudC5oIgorI2luY2x1ZGUgIldLQXJy
YXkuaCIKKyNpbmNsdWRlICJXS1BhZ2UuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5oIgorI2luY2x1
ZGUgImV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Ly8gQ2xhc3MgY2hvb3NlcyBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9uIG9mIHNwZWxs
aW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KK2NsYXNzIFdlYktpdFRleHRDaGVja2VyIHsKK3B1Ymxp
YzoKKworICAgIC8vIENhbGxiYWNrcyByZXF1aXJlZCBieSBXS1RleHRDaGVja2VyLgorICAgIHN0
YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworICAgIHN0YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldENvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOworICAgIHN0YXRpYyBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgdWlu
dDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1
aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCisgICAgc3RhdGljIHZvaWQg
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50
MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGNoZWNrR3JhbW1hck9mU3Ry
aW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgV0tBcnJheVJlZiogZ3JhbW1hckRl
dGFpbHMsIGludDMyX3QqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCogYmFkR3JhbW1hckxl
bmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgYm9vbCBzcGVsbGlu
Z1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3Rh
dGljIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh1aW50NjRfdCB0YWcs
IFdLU3RyaW5nUmVmIG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAg
ICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3Qg
dGFnLCBXS1N0cmluZ1JlZiBiYWRHcmFtbWFyUGhyYXNlLCBXS0dyYW1tYXJEZXRhaWxSZWYgZ3Jh
bW1hckRldGFpbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgV0tBcnJh
eVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGxlYXJuV29yZCh1aW50NjRfdCB0
YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRp
YyB2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKKworICAgIC8vIEFjY2VzcyB0byBjbGllbnQncyBjYWxsYmFja3Mu
CisgICAgc3RhdGljIEV3a19UZXh0X0NoZWNrZXIqIGV3a1RleHRDaGVja2VyKCkgeyByZXR1cm4g
Jm1fZXdrVGV4dENoZWNrZXI7IH0KKworICAgIGNsYXNzIEVuY2hhbnRIZWxwZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIGJvb2wgYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKTsK
KyAgICAgICAgc3RhdGljIHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKTsKKyAgICB9OworCitwcml2YXRlOgorICAgIHN0YXRp
YyBFd2tfVGV4dF9DaGVja2VyIG1fZXdrVGV4dENoZWNrZXI7CisKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisjZW5kaWYgLy8gV2Vi
S2l0VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwCmluZGV4IDYwYzc5ZTEuLjBjZDY2MzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTM2LDYgKzM2LDEw
IEBACiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNpbmNs
dWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogCkBAIC05OCw2ICsxMDIsMTIgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAj
ZW5kaWYKICAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9hdHRhY2go
dGhpcyk7CiAgICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2godGhpcyk7
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgICAgIGV3a190ZXh0X2NoZWNrZXJfY2xpZW50
X2F0dGFjaCgpOworICAgICAgICBpZiAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpKQorICAgICAgICAgICAgZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7CisjZW5kaWYKKwog
ICAgIH0KIAogICAgIH5fRXdrX0NvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44M2M2YzEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKQEAgLTAsMCArMSw5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCisKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0
VGV4dENoZWNrZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworI2RlZmluZSBFV0tf
VEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05BTUUsIE5BTUUpICBcCit2b2lkIGV3a190
ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSBjYikgICAgIFwKK3sgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFdl
YktpdFRleHRDaGVja2VyOjpld2tUZXh0Q2hlY2tlcigpLT5OQU1FID0gY2I7ICAgXAorfQorCisv
KioKKyAqIEF0dGFjaGVzIHNwZWxsY2hlY2tlciBmZWF0dXJlLgorICoKKyAqIEBpbnRlcm5hbAor
ICoKKyAqIFRoZSBkZWZhdWx0IHNwZWxsY2hlY2tlciBmZWF0dXJlIGlzIGJhc2VkIG9uIEVuY2hh
bnQgbGlicmFyeS4KKyAqIENsaWVudCBtYXkgdXNlIG93biBpbXBsZW1lbnRhdGlvbiBvZiBzcGVs
bGNoZWNrZXIgcHJldmlvdXNseSBzZXQKKyAqIHRocm91Z2ggdGhlIGNhbGxiYWNrIGZ1bmN0aW9u
cy4KKyAqLwordm9pZCBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9hdHRhY2goKQoreworICAgIHN0
YXRpYyBib29sIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IGZhbHNlOworICAgIGlm
IChkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IFdLVGV4dENoZWNrZXJDbGllbnQgdGV4dENoZWNrZXJDbGllbnQgeworICAgICAgICBrV0tUZXh0
Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICAwLCAvLyBjbGllbnRJbmZvCisg
ICAgICAgIFdlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dl
ZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6aXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5n
RW5hYmxlZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRU
YWcsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFn
LAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nLAorICAg
ICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcsCisgICAgICAgIFdl
YktpdFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nLAorICAgICAgICBXZWJLaXRUZXh0
Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZywKKyAgICAgICAgV2ViS2l0VGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQsCisgICAgICAgIFdlYktp
dFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcsCisgICAgICAg
IFdlYktpdFRleHRDaGVja2VyOjpndWVzc2VzRm9yV29yZCwKKyAgICAgICAgV2ViS2l0VGV4dENo
ZWNrZXI6OmxlYXJuV29yZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQK
KyAgICB9OworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRleHRDaGVja2VyQ2xpZW50KTsK
KworICAgIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IHRydWU7Cit9CisKKyNlbHNl
CisKKy8vIERlZmluZXMgYW4gZW1wdHkgQVBJIHRvIGRvIG5vdCBicmVhayBidWlsZC4KKyNkZWZp
bmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBOQU1FKSAgXAordm9p
ZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUpICAgICAgICBcCit7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K30KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKworRVdLX1RFWFRfQ0hFQ0tFUl9DQUxM
QkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldCwg
dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UsIHVu
aXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjaywgc3RyaW5nX3NwZWxs
aW5nX2NoZWNrKQorLy8gRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hl
Y2tlcl9TdHJpbmdfR3JhbW1hcl9DaGVjaywgc3RyaW5nX2dyYW1tYXJfY2hlY2spCitFV0tfVEVY
VF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1
c19HZXQsIHVpX3NwZWxsaW5nX3N0YXR1c19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1VJX1RvZ2dsZV9TcGVsbGluZ19TdGF0dXNfR2V0LCB1aV90
b2dnbGVfc3BlbGxpbmdfc3RhdHVzX2dldCkKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VU
KEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3BlbGxlZF9Xb3JkX1VwZGF0ZSwgdWlf
c3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZSkKKy8vIEVXS19URVhUX0NIRUNLRVJfQ0FM
TEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfR3JhbW1hcl9TdHJpbmdfVXBk
YXRlLCB1aV9zcGVsbGluZ19ncmFtbWFyX3N0cmluZ191cGRhdGUpCitFV0tfVEVYVF9DSEVDS0VS
X0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXQsIHdvcmRfZ3Vl
c3Nlc19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2Vy
X1dvcmRfTGVhcm4sIHdvcmRfbGVhcm4pCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChF
d2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlLCB3b3JkX2lnbm9yZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjE5MmYzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oCkBAIC0wLDAg
KzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
LyoqCisgKiBAZmlsZSBld2tfdGV4dF9jaGVja2VyLmgKKyAqIEBicmllZiBQcm92aWRlcyBBUEkg
dG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRp
b24uCisgKgorICogVGhlcmUgaXMgb25lIHNwZWxsY2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0
aW9uIGFuZCBpdCdzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKiBJdCBhbGxvd3MgdG8gY2hlY2sg
c3BlbGxpbmcgaW4gdGhlIGVkaXRhYmxlIGFyZWFzLgorICogSWYgYXBwbGljYXRpb24gd2FudHMg
dG8gZW5hYmxlIHRoZSBmZWF0dXJlLCBBUEkgZnJvbSBAYSBld2tfdGV4dF9jaGVja2VyX3NldHRp
bmcuaAorICogc2hvdWxkIGJlIHVzZWQuCisgKgorICogVGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxs
Y2hlY2tlciBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5Lgor
ICogSXQgZG9lc24ndCBlbnN1cmUgZ3JhbW1hciBjaGVja2luZy4gQXBwbGljYXRpb24gaXMgYWJs
ZSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQKKyAqIFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVt
ZW50YXRpb24gYnkgZGVmaW5pbmcgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZwor
ICogYXBwcm9wcmlhdGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorICovCisKKyNpZm5kZWYgZXdrX3Rl
eHRfY2hlY2tlcl9oCisjZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfaAorCisjaW5jbHVkZSA8RXZh
cy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVk
ZWYgdWludDY0X3QgKCpFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdf
R2V0KShjb25zdCBFdmFzX09iamVjdCAqbyk7Cit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVj
a2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UpKHVpbnQ2NF90IHRhZyk7Cit0eXBl
ZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjaykodWludDY0
X3QgdGFnLCBjb25zdCBjaGFyICp0ZXh0LCBpbnQzMl90ICptaXNzcGVsbGluZ19sb2NhdGlvbiwg
aW50MzJfdCAqbWlzc3BlbGxpbmdfbGVuZ3RoKTsKKy8vIHR5cGVkZWYgdm9pZCAoKkV3a19UZXh0
X0NoZWNrZXJfU3RyaW5nX0dyYW1tYXJfQ2hlY2spKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAq
dGV4dCwgRWluYV9MaXN0ICoqbGlzdCwgaW50MzJfdCAqYmFkX2dyYW1tYXJfbG9jYXRpb24sIGlu
dDMyX3QgKmJhZF9ncmFtbWFyX2xlbmd0aCk7Cit0eXBlZGVmIEVpbmFfQm9vbCAoKkV3a19UZXh0
X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX0dldCkodm9pZCk7Cit0eXBlZGVmIHZvaWQgKCpF
d2tfVGV4dF9DaGVja2VyX1VJX1RvZ2dsZV9TcGVsbGluZ19TdGF0dXNfR2V0KSh2b2lkKTsKK3R5
cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3BlbGxlZF9Xb3Jk
X1VwZGF0ZSkodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICptaXNzcGVsbGVkX3dvcmQpOworLy8g
dHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19HcmFtbWFyX1N0cmlu
Z19VcGRhdGUpKHVpbnQ2NF90IHRhZywgRXdrX0dyYW1tYXJfRGV0YWlsIGJhZF9ncmFtbWFyX3Bo
cmFzZSwgRXdrX0dyYW1tYXJfRGV0YWlsIGdyYW1tYXJfZGV0YWlsKTsKK3R5cGVkZWYgRWluYV9M
aXN0ICooKkV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldCkodWludDY0X3QgdGFnLCBj
b25zdCBjaGFyICp3b3JkKTsKK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfV29yZF9M
ZWFybikodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp3b3JkKTsKK3R5cGVkZWYgdm9pZCAoKkV3
a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29y
ZCk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhIHVuaXF1ZSBz
cGVsbCBkb2N1bWVudCB0YWcuCisgKgorICogVGhpcyBjYWxsYmFjayB3aWxsIHJldHVybiBhIHRh
ZyAoaWRlbnRpZmllcikgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUuCisgKiBVbmlx
dWUgdGFncyBoZWxwIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBvdGhlciBvYmplY3RzIHRoYXQg
YXJlIGNoZWNrZWQgZm9yIHNwZWxsaW5nIG1pc3Rha2VzLgorICoKKyAqIEBzZWUgZXdrX3RleHRf
Y2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlX2NiX3NldAorICoKKyAqIEBw
YXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgMCB0byByZXN0b3JlIHRoZSBkZWZh
dWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3Rl
eHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldF9jYl9zZXQoRXdrX1RleHRf
Q2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldCBjYik7CisKKy8qKgorICogU2V0
cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNsb3NlIGEgdW5pcXVlIHNwZWxsIGRvY3VtZW50IHRh
Zy4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIHdpbGwgbm90aWZ5IHRoZSByZWNlaXZlciB0aGF0IHRo
ZSB1c2VyIGhhcyBmaW5pc2hlZCB3aXRoIHRoZSB0YWdnZWQgZG9jdW1lbnQuCisgKgorICogQHNl
ZSBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0X2NiX3NldAor
ICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgMCB0byByZXN0b3Jl
IHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZv
aWQgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlX2NiX3Nl
dChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UgY2IpOwor
CisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZWFyY2ggZm9yIGEgbWlzc3Bl
bGxlZCB3b3JkIGluIHRoZSBnaXZlbiBzdHJpbmcuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNh
bGxiYWNrIHRvIHNldCBvciBAYyAwIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxi
YWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3N0cmlu
Z19zcGVsbGluZ19jaGVja19jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdf
Q2hlY2sgY2IpOworCisvLyBFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfZ3JhbW1h
cl9jaGVja19jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfR3JhbW1hcl9DaGVjayBjYik7
CisKK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VpX3NwZWxsaW5nX3N0YXR1c19nZXRfY2Jf
c2V0KEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX0dldCBjYik7CitFQVBJIHZv
aWQgZXdrX3RleHRfY2hlY2tlcl91aV90b2dnbGVfc3BlbGxpbmdfc3RhdHVzX2dldF9jYl9zZXQo
RXdrX1RleHRfQ2hlY2tlcl9VSV9Ub2dnbGVfU3BlbGxpbmdfU3RhdHVzX0dldCBjYik7CitFQVBJ
IHZvaWQgZXdrX3RleHRfY2hlY2tlcl91aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRl
X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX01pc3NwZWxsZWRfV29yZF9VcGRh
dGUgY2IpOworLy8gRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfdWlfc3BlbGxpbmdfZ3JhbW1h
cl9zdHJpbmdfdXBkYXRlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX0dyYW1t
YXJfU3RyaW5nX1VwZGF0ZSBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9u
IHRvIGdldCBhbiBhcnJheSBvZiBzdWdnZXN0ZWQgc3BlbGxpbmdzIGZvciBhIG1pc3NwZWxsZWQg
d29yZC4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBkeW5hbWlj
YWxseSBhbGxvY2F0ZWQgc3RyaW5ncyAoYXMgY2hhciopIGFuZAorICogY2FsbGVyIGlzIHJlc3Bv
bnNpYmxlIGZvciBkZXN0cm95aW5nIHRoZW0uCisgKgorICogQHNlZSBFSU5BX0xJU1RfRlJFRS4K
KyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9y
ZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2
b2lkIGV3a190ZXh0X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9jYl9zZXQoRXdrX1RleHRfQ2hl
Y2tlcl9Xb3JkX0d1ZXNzZXNfR2V0IGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVu
Y3Rpb24gdG8gYWRkIHRoZSB3b3JkIHRvIHRoZSBzcGVsbCBjaGVja2VyIGRpY3Rpb25hcnkuCisg
KgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyAwIHRvIHJlc3RvcmUg
dGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9p
ZCBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29y
ZF9MZWFybiBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRlbGwg
dGhlIHNwZWxsIGNoZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4gd29yZC4KKyAqCisgKiBAcGFyYW0g
Y2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBX
ZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2No
ZWNrZXJfd29yZF9pZ25vcmVfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUgY2Ip
OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a190ZXh0X2No
ZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3RleHRfY2hlY2tlcl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yMWI5ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgKQEAgLTAsMCArMSw1MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfcHJp
dmF0ZV9oCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVj
a2VyLmgiCisKKy8qKgorICogQGJyaWVmIFN0cnVjdHVyZSB0aGF0IGtlZXBzIGNsaWVudCdzIGNh
bGxiYWNrIGZ1bmN0aW9ucy4KKyAqCisgKiBAaW50ZXJuYWwKKyAqLworc3RydWN0IF9Fd2tfVGV4
dF9DaGVja2VyIHsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9U
YWdfR2V0IHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0OworICAgIEV3a19UZXh0X0NoZWNr
ZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19DbG9zZSB1bmlxdWVfc3BlbGxfZG9jdW1lbnRf
dGFnX2Nsb3NlOworICAgIEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrIHN0
cmluZ19zcGVsbGluZ19jaGVjazsKKyAgICAvLyBFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19HcmFt
bWFyX0NoZWNrIHN0cmluZ19ncmFtbWFyX2NoZWNrOworICAgIEV3a19UZXh0X0NoZWNrZXJfVUlf
U3BlbGxpbmdfU3RhdHVzX0dldCB1aV9zcGVsbGluZ19zdGF0dXNfZ2V0OworICAgIEV3a19UZXh0
X0NoZWNrZXJfVUlfVG9nZ2xlX1NwZWxsaW5nX1N0YXR1c19HZXQgdWlfdG9nZ2xlX3NwZWxsaW5n
X3N0YXR1c19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19NaXNzcGVsbGVk
X1dvcmRfVXBkYXRlIHVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGU7CisgICAgLy8g
RXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19HcmFtbWFyX1N0cmluZ19VcGRhdGUgdWlfc3Bl
bGxpbmdfZ3JhbW1hcl9zdHJpbmdfdXBkYXRlOworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9H
dWVzc2VzX0dldCB3b3JkX2d1ZXNzZXNfZ2V0OworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9M
ZWFybiB3b3JkX2xlYXJuOworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUgd29yZF9p
Z25vcmU7Cit9OwordHlwZWRlZiBfRXdrX1RleHRfQ2hlY2tlciBFd2tfVGV4dF9DaGVja2VyOwor
CisvLyBNYWtlcyBpdCB2aXNpYmxlIGZvciBXVFIuCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tl
cl9jbGllbnRfYXR0YWNoKCk7CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKyNlbmRp
ZiAvLyBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3NzM1MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJf
c2V0dGluZy5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nLmgiCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRl
ICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKyNpbmNs
dWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIHN0cnVj
dCB7CisgICAgYm9vbCBlbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZzoxOworICAgIGJvb2wg
ZW5hYmxlR3JhbW1hckNoZWNraW5nOjE7CisgICAgc3RydWN0IHsKKyAgICAgICAgRXdrX1RleHRf
Q2hlY2tlcl9TZXR0aW5nX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlZCBjb250aW51
b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQ7CisgICAgICAgIEV3a19UZXh0X0NoZWNrZXJfU2V0dGlu
Z19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQgZ3JhbW1hckNoZWNraW5nQ2hhbmdlZDsKKyAgICB9
IHNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzOworICAgIFZlY3RvcjxTdHJpbmc+IHNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXM7Cit9IGV3a1RleHRDaGVja2VyU2V0dGluZyA9IHsgZmFsc2UsIGZhbHNlLCB7
MCwgMH0sIFZlY3RvcjxTdHJpbmc+KCl9OworCitzdGF0aWMgRWluYV9Cb29sIF9pZGxlckNvbnRp
bnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCh2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNr
ZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5n
Q2hhbmdlZCkKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2Fs
bGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCgKKyAgICAgICAgICAgIGV3a1Rl
eHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZyk7CisKKyAgICBy
ZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9pZGxl
ckdyYW1tYXJDaGVja2luZ0NoYW5nZWQodm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2Vy
U2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKQor
ICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3MuZ3Jh
bW1hckNoZWNraW5nQ2hhbmdlZCgKKyAgICAgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5l
bmFibGVHcmFtbWFyQ2hlY2tpbmcpOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNF
TDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfaWRsZXJTZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KHZvaWQqKQoreworICAgIC8vIFRPRE86IENvbnNpZGVyIHRvIGRlbGVnYXRlIGNhbGxpbmcgb2Yg
dGhpcyBtZXRob2QgaW4gV2ViUHJvY2VzcyB0byBkbyBub3QgZGVsYXkvYmxvY2sgVUlQcm9jZXNz
LgorICAgIFdlYktpdFRleHRDaGVja2VyOjpFbmNoYW50SGVscGVyOjp1cGRhdGVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKGV3a1RleHRDaGVja2VyU2V0dGluZy5zcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KTsKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2b2lkIHN0YXRpYyBf
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29u
c3QgVmVjdG9yPFN0cmluZz4mIG5ld0xhbmd1YWdlcykKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBs
YW5ndWFnZXMgPSBuZXdMYW5ndWFnZXM7CisgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMuc3dhcChsYW5ndWFnZXMpOworICAgIGVjb3JlX2lkbGVyX2FkZChf
aWRsZXJTZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzLCAwKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
U1BFTExDSEVDSykKKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfY29udGludW91c19z
cGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdfQ29u
dGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VkIGNhbGxiYWNrKQoreworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxi
YWNrcy5jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQgPSBjYWxsYmFjazsKKyNlbmRpZgor
fQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19ncmFtbWFyX2NoZWNraW5nX2NoYW5n
ZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19HcmFtbWFyX0NoZWNraW5nX0NoYW5n
ZWQgY2FsbGJhY2spCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgZXdrVGV4dENoZWNr
ZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmdyYW1tYXJDaGVja2luZ0NoYW5nZWQg
PSBjYWxsYmFjazsKKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpCit7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250
aW51b3VzU3BlbGxDaGVja2luZzsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9
CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX3NldChFaW5hX0Jvb2wgZW5hYmxlKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIGVuYWJsZSA9ICEhZW5hYmxlOworICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmcu
ZW5hYmxlQ29udGludW91c1NwZWxsQ2hlY2tpbmcgIT0gZW5hYmxlKSB7CisgICAgICAgIGV3a1Rl
eHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZyA9IGVuYWJsZTsK
KworICAgICAgICBXS1RleHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3Rh
dGVDaGFuZ2VkKGVuYWJsZSk7CisKKyAgICAgICAgLy8gU2V0cyBkZWZhdWx0IGxhbmd1YWdlIGlm
IHVzZXIgZGlkbid0IHNwZWNpZnkgYW55LgorICAgICAgICBpZiAoZW5hYmxlICYmICFXZWJLaXRU
ZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkK
KyAgICAgICAgICAgIF9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX3NldChWZWN0b3I8U3RyaW5nPigpKTsKKworICAgICAgICBpZiAoZXdrVGV4dENoZWNr
ZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5n
Q2hhbmdlZCkKKyAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChfaWRsZXJDb250aW51b3VzU3Bl
bGxDaGVja2luZ0NoYW5nZWQsIDApOworICAgIH0KKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX2dldCgpCit7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyU2V0dGluZy5l
bmFibGVHcmFtbWFyQ2hlY2tpbmc7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
fQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9jaGVja2lu
Z19zZXQoRWluYV9Cb29sIGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBl
bmFibGUgPSAhIWVuYWJsZTsKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5nLmVuYWJsZUdy
YW1tYXJDaGVja2luZyAhPSBlbmFibGUpIHsKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5n
LmVuYWJsZUdyYW1tYXJDaGVja2luZyA9IGVuYWJsZTsKKworICAgICAgICBXS1RleHRDaGVja2Vy
R3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGUpOworCisgICAgICAgIGlm
IChld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3MuZ3JhbW1hckNo
ZWNraW5nQ2hhbmdlZCkKKyAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChfaWRsZXJHcmFtbWFy
Q2hlY2tpbmdDaGFuZ2VkLCAwKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBld2tfdGV4dF9j
aGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChjb25zdCBjaGFyKiBs
YW5ndWFnZXMpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgVmVjdG9yPFN0cmluZz4g
bmV3TGFuZ3VhZ2VzOworICAgIFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2VzKS5zcGxpdChzdGF0
aWNfY2FzdDxVQ2hhcj4oJywnKSwgbmV3TGFuZ3VhZ2VzKTsKKworICAgIF9ld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChuZXdMYW5ndWFnZXMpOwor
I2VuZGlmCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjBkY2Q2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaApAQCAtMCwwICsxLDEyNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKy8qKgorICog
QGZpbGUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgKKyAqIEBicmllZiBBUEkgZm9yIG1hbmlw
dWxhdGluZyBzcGVsbCBjaGVja2VyIGZlYXR1cmUuCisgKi8KKworI2lmbmRlZiBld2tfdGV4dF9j
aGVja2VyX3NldHRpbmdfaAorI2RlZmluZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfaAorCisj
aW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2Vu
ZGlmCisKK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19Db250aW51b3Vz
X1NwZWxsX0NoZWNraW5nX0NoYW5nZWQpKEVpbmFfQm9vbCBlbmFibGUpOwordHlwZWRlZiB2b2lk
ICgqRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0dyYW1tYXJfQ2hlY2tpbmdfQ2hhbmdlZCkoRWlu
YV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQg
dG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbiB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBz
ZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBTcGVjaWZ5aW5nIG9mIHRoaXMg
Y2FsbGJhY2sgaXMgbmVlZGVkIGlmIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byByZWNlaXZlIG5v
dGlmaWNhdGlvbnMKKyAqIG9uY2UgV2ViS2l0IGNoYW5nZXMgdGhpcyBzZXR0aW5nLgorICogSWYg
dGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBpbnRlcmVzdGVkLCB0aGlzIGNhbGxiYWNrIGlzIG5vdCBz
ZXQuCisgKiBDaGFuZ2luZyBvZiB0aGlzIHNldHRpbmcgYXQgdGhlIFdlYktpdCBsZXZlbCBjYW4g
YmUgbWFkZSBhcyBhIHJlc3VsdCBvZiBtb2RpZnlpbmcKKyAqIG9wdGlvbnMgaW4gYSBDb250ZXh0
IE1lbnUgYnkgYSB1c2VyLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayBmdW5jdGlv
biB0byBzZXQgb3IgQGMgMCB0byBpbnZhbGlkYXRlIHRoZSBwcmV2aW91cyBvbmUKKyAqLworRUFQ
SSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2NoYW5nZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19Db250aW51b3VzX1NwZWxs
X0NoZWNraW5nX0NoYW5nZWQgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlv
biB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4gdGhlIGdyYW1tYXIgY2hlY2tpbmcgc2V0
dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogU3BlY2lmeWluZyBvZiB0aGlzIGNh
bGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3Rp
ZmljYXRpb25zCisgKiBvbmNlIFdlYktpdCBjaGFuZ2VzIHRoaXMgc2V0dGluZy4KKyAqIElmIHRo
ZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0
LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJl
IG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBN
ZW51IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24g
dG8gc2V0IG9yIEBjIDAgdG8gaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMgb25lCisgKi8KK0VBUEkg
dm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZ3JhbW1hcl9jaGVja2luZ19jaGFuZ2VkX2Ni
X3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdfR3JhbW1hcl9DaGVja2luZ19DaGFuZ2VkIGNi
KTsKKworLyoqCisgKiBRdWVyaWVzIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5h
YmxlZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIGlzIGVuYWJsZWQgb3IgQCBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLwor
RUFQSSBFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2dldCh2b2lkKTsKKworLyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGNv
bnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCisgKgorICogQWRkaXRpb25hbGx5LCB0aGlzIGZ1bmN0
aW9uIGNhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gKGlmIGRlZmluZWQpIHRvIG5vdGlmeQorICog
dGhlIGNsaWVudCBhYm91dCB0aGUgY2hhbmdlIG9mIHRoZSBzZXR0aW5nLgorICogVGhpcyBmZWF0
dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKgorICogQHNlZSBld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldAorICoKKyAq
IEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRvIGVuYWJsZSBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIG9yIEBjIEVJTkFfRkFMU0UgdG8gZGlzYWJsZQorICovCitFQVBJIHZvaWQgZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldChF
aW5hX0Jvb2wgZW5hYmxlKTsKKworLyoqCisgKiBRdWVyaWVzIGlmIGdyYW1tYXIgY2hlY2tpbmcg
aXMgZW5hYmxlZC4KKyAqCisgKiBBcHBsaWNhdGlvbiBtYXkgb3ZlcndyaXRlIHdlYmtpdCBncmFt
bWFyIGNoZWNraW5nIGltcGxlbWVudGF0aW9uIGJ5IHNldHRpbmcgY2FsbGJhY2sgZnVuY3Rpb25z
CisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXIuaAorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAIEVJTkFfRkFMU0Ug
aWYgaXQncyBkaXNhYmxlZAorICovCitFQVBJIEVpbmFfQm9vbCBld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KHZvaWQpOworCisvKioKKyAqIEVuYWJs
ZXMvZGlzYWJsZXMgZ3JhbW1hciBjaGVja2luZy4KKyAqCisgKiBBZGRpdGlvbmFsbHksIHRoaXMg
ZnVuY3Rpb24gY2FsbHMgYSBjYWxsYmFjayBmdW5jdGlvbiAoaWYgZGVmaW5lZCkgdG8gbm90aWZ5
CisgKiB0aGUgY2xpZW50IGFib3V0IHRoZSBjaGFuZ2Ugb2YgdGhlIHNldHRpbmcuCisgKiBUaGlz
IGZlYXR1cmUgaXMgZGlzYWJsZWQgYW5kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgV2ViS2l0LUVGTCBi
eSBkZWZhdWx0LgorICoKKyAqIEBzZWUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2dyYW1tYXJf
Y2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQKKyAqCisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJV
RSB0byBlbmFibGUgZ3JhbW1hciBjaGVja2luZyBvciBAYyBFSU5BX0ZBTFNFIHRvIGRpc2FibGUK
KyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9j
aGVja2luZ19zZXQoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogU2V0cyBAbGFuZ3VhZ2Vz
IGFzIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB0byB1c2UgYnkgZGVmYXVsdCBXZWJLaXQKKyAqIGlt
cGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tlciBmZWF0dXJlIHdpdGggRW5jaGFudCBsaWJyYXJ5
IHN1cHBvcnQuCisgKgorICogSWYgQGxhbmd1YWdlcyBpcyBAYyAwLCB0aGUgZGVmYXVsdCBsYW5n
dWFnZSBpcyB1c2VkLgorICogSWYgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgY2FuIG5vdCBiZSBkZXRl
cm1pbmVkIHRoZW4gYW55IGF2YWlsYWJsZSBkaWN0aW9uYXJ5IHdpbGwgYmUgdXNlZC4KKyAqCisg
KiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGludmFsaWRhdGVzIHRoZSBwcmV2aW91c2x5IHNldCBsYW5n
dWFnZXMuCisgKiAgICAgICBUaGUgZGljdGlvbmFyaWVzIGFyZSByZXF1ZXN0ZWQgYXN5bmNocm9u
b3VzbHkuCisgKgorICogQHBhcmFtIGxhbmd1YWdlcyBhIGxpc3Qgb2YgY29tbWEgKCcsJykgc2Vw
YXJhdGVkIGxhbmd1YWdlIGNvZGVzCisgKiAgICAgICAgb2YgdGhlIGZvcm0gJ2VuX1VTJywgaWUs
IGxhbmd1YWdlX1ZBUklBTlQsIG1heSBiZSBAYyAwLgorICovCitFQVBJIHZvaWQgZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hhciAq
bGFuZ3VhZ2VzKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8v
IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCmluZGV4IGFhMzNmMmYuLjdkNjdhOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCkBAIC0xLDUg
KzEsNyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjksOSBAQAogI2lu
Y2x1ZGUgIlRleHRDaGVja2VyLmgiCiAKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTM3LDkxICs0MSwxNDIgQEAgc3RhdGljIFRleHRDaGVja2VyU3RhdGUg
dGV4dENoZWNrZXJTdGF0ZTsKIAogY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENoZWNrZXI6
OnN0YXRlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOworICAgIGlmIChk
aWRJbml0aWFsaXplU3RhdGUpCisgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOworCisg
ICAgV2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaGFyZWQo
KS0+Y2xpZW50KCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAg
ICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5ncmFt
bWFyQ2hlY2tpbmdFbmFibGVkKCk7CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOwor
I2VuZGlmCiAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CiB9CiAKIGJvb2wgVGV4dENoZWNr
ZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNsaWVudCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOwor
I2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRDaGVja2Vy
OjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47
CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9
IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2xpZW50KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVj
a2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRDaGVja2VyOjpz
ZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgaWYg
KHN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID09IGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChpc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQpOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmNvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICB0ZXh0Q2hl
Y2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNl
bmRpZgogfQogCiB2b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVD
aGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJM
RShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkID0gZW5hYmxlZDsKKyNlbmRpZgogfQogCi1pbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVT
cGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSopCitpbnQ2NF90IFRleHRDaGVja2VyOjp1bmlx
dWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7CisjZWxz
ZQogICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3Bl
bGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCkKK3ZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxE
b2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKKyNlbmRpZgogfQogCi12b2lkIFRl
eHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNoYXIqLCB1
aW50MzJfdCwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVs
bGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQs
IHVpbnQzMl90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYg
bWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNr
U3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwg
bWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworI2VuZGlmCiB9CiAKLXZv
aWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFy
KiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBp
bnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwgVmVj
dG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50MzJfdCYgYmFkR3JhbW1hckxv
Y2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmco
dGV4dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3Jh
bW1hckxlbmd0aCk7CisjZW5kaWYKIH0KIAogYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlz
U2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVD
SykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zcGVsbGlu
Z1VJSXNTaG93aW5nKCk7CisjZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB2
b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2Vy
OjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOworI2VuZGlm
CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdv
cmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBT
dHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIG1pc3Nw
ZWxsZWRXb3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1h
ckRldGFpbCYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQ
aHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6
c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVs
bERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKKyNlbmRpZgog
fQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90LCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit2b2lkIFRleHRDaGVja2Vy
OjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmlu
ZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1
bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6
bGVhcm5Xb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjpsZWFy
bldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3
b3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qs
IGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3Bl
bGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworI2VuZGlmCiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlv
bnNFZmwuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCA4Njc1YmU4
Li43ZWM5N2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysg
Yi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQpAQCAtMTcxLDMgKzE3MSw4IEBAIElGIChX
VEZfVVNFX1RJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgIEZJTkRfUEFDS0FHRShPcGVuR0wgUkVRVUlS
RUQpCiBFTkRJRigpCiAKK09QVElPTihFTkFCTEVfU1BFTExDSEVDSyAiRW5hYmxlIHNwZWxsY2hl
Y2tpbmcgZmVhdHVyZSAocmVxdWlyZXMgZW5jaGFudCkiIE9OKQorSUYgKEVOQUJMRV9TUEVMTENI
RUNLKQorICAgICAgRklORF9QQUNLQUdFKEVuY2hhbnQgUkVRVUlSRUQpCisgICAgICBBRERfREVG
SU5JVElPTlMoLURFTkFCTEVfU1BFTExDSEVDSz0xKQorRU5ESUYoKQo=
</data>
<flag name="commit-queue"
          id="172839"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161911</attachid>
            <date>2012-09-03 06:02:45 -0700</date>
            <delta_ts>2012-09-03 08:04:58 -0700</delta_ts>
            <desc>add missing FindEnchant.cmake file</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>57617</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxMGE0YzJjLi5lODAyYjYw
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDktMDMgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qICA8bS5yb2pAc2FzbXVuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZM
XSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZXMgc3BlbGxjaGVja2luZyBm
ZWF0dXJlIGZvciBXSzItRWZsLgorCisgICAgICAgICogU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50
LmNtYWtlOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZTog
RGVmaW5lcyBTUEVMTENIRUNLIG1hY3JvLgorCiAyMDEyLTA4LTMxICBUb255IENoYW5nICA8dG9u
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIEVOQUJMRV9DU1MzX0ZMRVhCT1ggY29t
cGlsZSB0aW1lIGZsYWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmZjJlMjU4Li42ZWY5ZDUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDktMDMgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6
YWprb3dza2lAc2Ftc3VuZy5jb20+LCBNaWNoYWwgUm9qICA8bS5yb2pAc2Ftc3VuZy5jb20+CisK
KyAgICAgICAgW1dLMl1bRUZMXSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1
cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxh
dGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBlbmNoYW50LXJlbGF0ZWQgY29tcGlsZXIgZmxh
Z3M6IGhlYWRlciBwYXRocyBhbmQgdGhlIGxpYnJhcnkgZmxhZy4KKworICAgICAgICAqIHBsYXRm
b3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwOgorICAgICAgICAoVGV4dENo
ZWNrZXJFbmNoYW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoVGV4dENoZWNr
ZXJFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChUZXh0Q2hlY2tlckVuY2hh
bnQ6OmdldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICBVc2VzIG5ld2x5IGNyZWF0
ZWQgJ2FyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCknIG1ldGhvZC4KKworICAgICAgICAqIHBs
YXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDaGVja2VyRW5jaGFudDo6YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQpOgorICAg
ICAgICBEZWZpbmVzIGFuIGluIGxpbmUgbWV0aG9kIHRvIHJldHVybiBpbmZvcm1hdGlvbiB3aGV0
aGVyIGRpY3Rpb25hcmllcyBoYXZlIGJlZW4gbG9hZGVkLgorICAgICAgICBJdCdzIHVzZWQgYnkg
V2ViS2l0VGV4dENoZWNrZXIgYW5kIFRleHRDaGVja2VyRW5jaGFudC4KKwogMjAxMi0wOS0wMyAg
QW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IHVzZSBsaW5raWZ5UmVzb3VyY2VBc05vZGUsIG5vdCBsaW5raWZ5TG9jYXRpb24gd2hl
biBsaW5raWZ5aW5nIHJlc291cmNlcyBpbiBUaW1lbGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCA0NTRlZWU4Li4zMWEzMDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
ODgsNiArODgsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0vUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3Bw
CiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3Bw
CisgIHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCiApCiAKIElG
IChFTkFCTEVfQkFUVEVSWV9TVEFUVVMpCkBAIC0zMjQsMyArMzI1LDcgQEAgSUYgKEVOQUJMRV9X
RUJfQVVESU8pCiAgIEFERF9ERUZJTklUSU9OUygtRFVOSU5TVEFMTEVEX0FVRElPX1JFU09VUkNF
U19ESVI9IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2F1ZGlvL3Jlc291cmNlcyIpCiBFTkRJRiAo
KQogCitJRiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNM
VURFX0RJUkVDVE9SSUVTICR7RW5jaGFudF9JTkNMVURFX0RJUlN9KQorICAgIExJU1QoQVBQRU5E
IFdlYkNvcmVfTElCUkFSSUVTICR7RW5jaGFudF9MSUJSQVJJRVN9KQorRU5ESUYoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5j
aGFudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNr
ZXJFbmNoYW50LmNwcAppbmRleCBmNzJmYjBjLi5hYjNhOWQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50
LmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6bGVhcm5Xb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCkKIAogdm9pZCBUZXh0Q2hlY2tlckVuY2hhbnQ6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0
aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKQogewotICAgIGlmIChtX2VuY2hhbnREaWN0aW9u
YXJpZXMuaXNFbXB0eSgpKQorICAgIGlmICghYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IG51bWJlck9mQ2hhcmFjdGVycyA9IHN0cmlu
Zy5sZW5ndGgoKTsKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIG1pc3NwZQog
VmVjdG9yPFN0cmluZz4gVGV4dENoZWNrZXJFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25z
dCBTdHJpbmcmIHdvcmQpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKLSAgICBpZiAo
bV9lbmNoYW50RGljdGlvbmFyaWVzLmlzRW1wdHkoKSkKKyAgICBpZiAoIWFyZURpY3Rpb25hcmll
c0luaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybiBndWVzc2VzOwogCiAgICAgZm9yIChWZWN0
b3I8RW5jaGFudERpY3QqPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fZW5jaGFudERpY3Rpb25h
cmllcy5iZWdpbigpOyBpdGVyICE9IG1fZW5jaGFudERpY3Rpb25hcmllcy5lbmQoKTsgKytpdGVy
KSB7CkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBUZXh0Q2hlY2tlckVuY2hhbnQ6OnVwZGF0ZVNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmcKIFZlY3RvcjxT
dHJpbmc+IFRleHRDaGVja2VyRW5jaGFudDo6Z2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcygpCiB7
CiAgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOwotICAgIGlmIChtX2VuY2hhbnREaWN0aW9u
YXJpZXMuaXNFbXB0eSgpKQorICAgIGlmICghYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkK
ICAgICAgICAgcmV0dXJuIGxhbmd1YWdlczsKIAogICAgIC8vIEdldCBhIFZlY3RvcjxDU3RyaW5n
PiB3aXRoIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyBpbiB1c2UuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmgKaW5k
ZXggMTc4MGI0NS4uYWQ2ZmYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaApAQCAtNDMsNiArNDMsNyBA
QCBwdWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4gZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3Ry
aW5nJik7CiAgICAgdm9pZCB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBsYW5ndWFnZXMpOwogICAgIFZlY3RvcjxTdHJpbmc+IGdldFNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMoKTsKKyAgICBib29sIGFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCkgY29u
c3QgeyByZXR1cm4gIW1fZW5jaGFudERpY3Rpb25hcmllcy5pc0VtcHR5KCk7IH0KIAogcHJpdmF0
ZToKICAgICBUZXh0Q2hlY2tlckVuY2hhbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxMTMyNzdkLi42YWQw
ZjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI2IEBACisyMDEyLTA5LTAzICBHcnplZ29yeiBD
emFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFsIFJvaiAgPG0ucm9q
QHNhbXN1bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gSW1wbGVtZW50YXRpb24gb2Ygc3Bl
bGxjaGVja2luZyBmZWF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTE4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRzIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGZvciBXZWJLaXQyLUVGTCB0
aGF0IGlzIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKworICAgICAgICBBZGRpdGlvbmFsbHkg
dGhlIHBhdGNoIHByb3ZpZGVzIEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNw
ZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhcyBFbmNoYW50IGxpYnJhcnkgZG9l
c24ndCBlbnN1cmUgZ3JhbW1hciBjaGVja2luZy4KKyAgICAgICAgQXBwbGljYXRpb24gaXMgYWJs
ZSB0byBvdmVyd3JpdGUgaXQgKGJvdGggZ3JhbW1hciBhbmQgc3BlbGwgY2hlY2tpbmcpIGJ5IGRl
ZmluaW5nCisgICAgICAgIGl0cyBvd24gaW1wbGVtZW50YXRpb24gYW5kIHNldHRpbmcgYXBwcm9w
cmlhdGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6
CisgICAgICAgIEFkZCBlbmNoYW50LXJlbGF0ZWQgY29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRo
cyBhbmQgdGhlIGxpYnJhcnkgZmxhZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmg6CisgICAgICAgIEFkZCBmaWxlcyB0aGF0IGNvbnRhaW4gQVBJIHRvIHRoZSBtYWlu
IFdlYktpdDItRUZMJ3MgaGVhZGVyIHRvIGJlIGF2YWlsYWJsZSBmb3IgYXBwbGljYXRpb25zLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgSW1wbGVtZW50cyBjYWxsYmFja3MgZnVuY3Rpb25zIG9mIFdLVGV4dENoZWNr
ZXIuCisKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVj
a2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6aXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6
OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0
Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktp
dFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKToKKyAgICAgICAgKFdlYktp
dDo6V2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjp1
cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJL
aXRUZXh0Q2hlY2tlcjo6Z3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRU
ZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNr
ZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICBUaG9zZSBtZXRob2RzIGFyZSBkaXJlY3RseSBnaXZl
biBhcyBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIFdLVGV4dENoZWNrZXIncyBjbGllbnQuCisgICAg
ICAgIFRoZWlyIHJlYXNvbiBpcyB0byBjaG9vc2UgYmV0d2VlbiBXZWJLaXQncyBzcGVsbGluZyBp
bXBsZW1lbnRhdGlvbiBhbmQgY2xpZW50J3Mgb25lcy4KKworICAgICAgICAoV2ViS2l0OjpXZWJL
aXRUZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6dXBk
YXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFRoZSBtZXRob2RzIGFyZSB1c2Vk
IGJ5IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHAgZmlsZSBhbmQgYWxsb3cgdG8gZG8gbm90
CisgICAgICAgIGV4cG9zZSAnbV90ZXh0Q2hlY2tlckVuY2hhbnQnLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmlu
ZXMgY2xhc3Mgd2hpY2ggY2hvb3NlcyBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9uIG9m
IHNwZWxsaW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KKworICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdFRleHRDaGVja2VyKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNr
ZXI6OmV3a1RleHRDaGVja2VyKToKKyAgICAgICAgUmV0dXJucyBzdHJ1Y3QgdGhhdCBrZWVwcyBj
bGllbnQncyBjYWxsYmFja3MuCisKKyAgICAgICAgKEVuY2hhbnRIZWxwZXIpOgorICAgICAgICBL
ZWVwcyBpbmZvcm1hdGlvbiBiYXNlZCBvbiBUZXh0Q2hlY2tlckVuY2hhbnQgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAg
ICAgIChfRXdrX0NvbnRleHQ6Ol9Fd2tfQ29udGV4dCk6CisgICAgICAgIEluaXRpYWx6ZXMgc3Bl
bGxjaGVja2VyIGZlYXR1cmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4
dF9jaGVja2VyLmNwcDogQWRkZWQuCisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX2NsaWVudF9h
dHRhY2gpOgorICAgICAgICBTZXRzIFdLVGV4dENoZWNrZXIgY2xpZW50IGFuZCByZWdpc3RlcnMg
V2ViS2l0VGV4dENoZWNrZXIncyBjYWxsYmFja3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdGV4dF9jaGVja2VyLmg6IEFkZGVkLgorICAgICAgICBEZWZpbmVzIEFQSSB0byBz
ZXQgY2xpZW50J3Mgc3BlbGxpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChf
RXdrX1RleHRfQ2hlY2tlcik6CisgICAgICAgIERlZmluZXMgc3RydWN0IHdpdGggY2xpZW50J3Mg
Y2FsbGJhY2tzIHJlc3BvbmlzYmxlIGZvciBzcGVsbGluZy4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHA6IEFkZGVkLgorICAgICAgICAo
X2lkbGVyQ29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VkKToKKyAgICAgICAgKF9pZGxlckdy
YW1tYXJDaGVja2luZ0NoYW5nZWQpOgorICAgICAgICAoX2lkbGVyU2V0U3BlbGxDaGVja2luZ0xh
bmd1YWdlcyk6CisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBpcyBub3RpZmllZCBhYm91dCBzcGVs
bGluZyBzZXR0aW5ncyBjaGFuZ2UgKHRoZXkgbWF5IGJlIGNoYW5nZWQKKyAgICAgICAgdGhyb3Vn
aCBjb250ZXh0IG1lbnUgb3B0aW9uKSBvbiBpZGxlciB0byBkbyBub3QgYmxvY2sgV2ViS2l0Lgor
CisgICAgICAgIChfZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlc19zZXQpOgorICAgICAgICBIZWxwZXIgdGhhdCBjb252ZXJ0cyBzdHJpbmcgd2l0aCBsYW5n
dWFnZXMgdmFsdWVzIHRvIHRoZSBjb252ZW5pZW50IHZlY3Rvci4KKworICAgICAgICAoZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9z
ZXQpOgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2dyYW1tYXJfY2hlY2tpbmdf
Y2hhbmdlZF9jYl9zZXQpOgorICAgICAgICBTZXRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgdXNl
ZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuIHRoZSBzcGVsbGluZyBzZXR0aW5ncworICAgICAg
ICB3ZXJlIGNoYW5nZWQgYnkgV2ViS2l0LgorCisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KToKKyAgICAgICAgKGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19z
ZXQpOgorICAgICAgICBBUEkgdG8gc2V0L2dldCB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2lu
Zy4KKworICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2No
ZWNraW5nX2dldCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dy
YW1tYXJfY2hlY2tpbmdfc2V0KToKKyAgICAgICAgQVBJIHRvIHNldC9nZXQgdGhlIGdyYW1tYXIg
Y2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXNfc2V0KToKKyAgICAgICAgU2V0cyBsYW5ndWFnZXMgdG8gdXNlIGJ5IFdl
YktpdCBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBFbmNoYW50IGxpYnJhcnkuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaDogQWRkZWQuCisg
ICAgICAgIEFkZHMgQVBJIGZvciBtYW5pcHVsYXRpbmcgc3BlbGwgY2hlY2tlciBmZWF0dXJlLgor
CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjpzdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2Vy
Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6OlRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5n
RW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1bmlx
dWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNsb3Nl
U3BlbGxEb2N1bWVudFdpdGhUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hl
Y2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNr
R3JhbW1hck9mU3RyaW5nKTogUmVtb3ZlZCBXZWJDb3JlIG5hbWFzcGFjZSBhcyBpdCdzIGFscmVh
ZHkgZGVmaW5lZCBmb3IgdGhlIHdob2xlIGZpbGUuCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6
OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICBUaG9zZSBtZXRob2RzIGNhbGwgV0tUZXh0Q2hlY2tl
ciBjbGllbnQgbWV0aG9kcy4KKwogMjAxMi0wOS0wMyAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlz
dG9waGUuZHVtZXpAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gU2tpcCBFV0syVW5p
dFRlc3RCYXNlLmV3a19jb29raWVfbWFuYWdlcl9wZXJtYW5lbnRfc3RvcmFnZSBBUEkgdGVzdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA1NmNhMGMxLi44OGZiNzBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZQpAQCAtNDcsNiArNDcsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NP
VVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9OZXR3b3JrSW5mb1Byb3ZpZGVyLmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL1ZpYnJhdGlvblByb3ZpZGVyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRl
eHRDaGVja2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlz
dC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5j
cHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTYwLDYgKzYxLDgg
QEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X21haW4uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fcG9saWN5X2Rl
Y2lzaW9uLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uY3Bw
CisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKKyAgICBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3VybF9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxf
cmVzcG9uc2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVz
dC5jcHAKQEAgLTEyMyw2ICsxMjYsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX01FU1NBR0VTX0lO
X0ZJTEVTCiBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9L2xsaW50IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9l
ZmwiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvZW5jaGFudCIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3ZnL2dyYXBoaWNz
IgpAQCAtMjE0LDYgKzIxOCw4IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW4uaCIKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0
aW9uX3BvbGljeV9kZWNpc2lvbi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5oIgorICAgICIke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oIgor
ICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3JlcXVlc3QuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuaCIKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfc2No
ZW1lX3JlcXVlc3QuaCIKQEAgLTMxMSwzICszMTcsOCBAQCBJRiAoRU5BQkxFX0lOU1BFQ1RPUikK
ICAgICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTiAiKi5naWYiCiAgICAgICAgICAgICAgICAg
ICAgICAgIFBBVFRFUk4gIioucG5nIikKIEVORElGICgpCisKK0lGIChFTkFCTEVfU1BFTExDSEVD
SykKKyAgICBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMgJHtFbmNoYW50
X0lOQ0xVREVfRElSU30pCisgICAgTElTVChBUFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMgJHtFbmNo
YW50X0xJQlJBUklFU30pCitFTkRJRigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRVdlYktpdDIuaAppbmRleCBmMWMwOTBlLi4xNjc5ZGNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRl
ICJld2tfbWFpbi5oIgogI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbi5o
IgogI2luY2x1ZGUgImV3a19wb3B1cF9tZW51X2l0ZW0uaCIKKyNpbmNsdWRlICJld2tfdGV4dF9j
aGVja2VyLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgiCiAjaW5jbHVk
ZSAiZXdrX3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgogI2lu
Y2x1ZGUgImV3a191cmxfc2NoZW1lX3JlcXVlc3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWEyYTUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCkBAIC0wLDAg
KzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFRleHRDaGVja2VyLmgiCisKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRl
ICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldl
YlN0cmluZy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oIgorI2luY2x1
ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gSW5pdGlhbGl6ZSBjbGllbnQn
cyBmdW5jdGlvbnMgdG8gQGMgMCB0byBiZSBzdXJlIHRoYXQgdGhleSBhcmUgbm90IGRlZmluZWQu
CitFd2tfVGV4dF9DaGVja2VyIFdlYktpdFRleHRDaGVja2VyOjptX2V3a1RleHRDaGVja2VyIHsK
KyAgICAwLCAvLyB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldAorICAgIDAsIC8vIHVuaXF1
ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UKKyAgICAwLCAvLyBzdHJpbmdfc3BlbGxpbmdfY2hl
Y2sKKyAgICAvLyAwLCBzdHJpbmdfZ3JhbW1hcl9jaGVjaworICAgIDAsIC8vIHVpX3NwZWxsaW5n
X3N0YXR1c19nZXQKKyAgICAwLCAvLyB1aV90b2dnbGVfc3BlbGxpbmdfc3RhdHVzX2dldAorICAg
IDAsIC8vIHVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGUKKyAgICAvLyAwLCB1aV9z
cGVsbGluZ19ncmFtbWFyX3N0cmluZ191cGRhdGUKKyAgICAwLCAvLyB3b3JkX2d1ZXNzZXNfZ2V0
CisgICAgMCwgLy8gd29yZF9sZWFybgorICAgIDAgLy8gd29yZF9pZ25vcmUKK307CisKK093blB0
cjxXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ+IG1fdGV4dENoZWNrZXJFbmNoYW50ID0gV2Vi
Q29yZTo6VGV4dENoZWNrZXJFbmNoYW50OjpjcmVhdGUoKTsKKworYm9vbCBXZWJLaXRUZXh0Q2hl
Y2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoY29uc3Qgdm9pZCopCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBub3QgY2FsbGVkIGJ5
IFdlYktpdDIvV2ViQ29yZS4gSnVzdCBrZWVwIGl0IGZvciBBUEkgY29tcGF0aWJpbGl0eS4KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNrZXI6OmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCk7
Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqKQoreworICAgIGV3a190ZXh0X2NoZWNr
ZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoZW5hYmxlZCk7
Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNrZXI6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChj
b25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJs
ZV9ncmFtbWFyX2NoZWNraW5nX2dldCgpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpz
ZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCopCit7Cisg
ICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldChl
bmFibGVkKTsKK30KKwordWludDY0X3QgV2ViS2l0VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9j
dW1lbnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChtX2V3a1Rl
eHRDaGVja2VyLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KQorICAgICAgICByZXR1cm4g
bV9ld2tUZXh0Q2hlY2tlci51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCh0b0ltcGwocGFn
ZSktPnZpZXdXaWRnZXQoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJLaXRUZXh0
Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZv
aWQqKQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90
YWdfY2xvc2UpCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIudW5pcXVlX3NwZWxsX2RvY3VtZW50
X3RhZ19jbG9zZSh0YWcpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpjaGVja1NwZWxs
aW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCAq
KQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnN0cmluZ19zcGVsbGluZ19jaGVjaykKKyAg
ICAgICAgbV9ld2tUZXh0Q2hlY2tlci5zdHJpbmdfc3BlbGxpbmdfY2hlY2sodGFnLCB0b0ltcGwo
dGV4dCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3Nw
ZWxsaW5nTGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIG1fdGV4dENoZWNrZXJFbmNoYW50LT5j
aGVja1NwZWxsaW5nT2ZTdHJpbmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxsaW5n
TG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNr
ZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKHVpbnQ2NF90LCBXS1N0cmluZ1JlZiwgV0tBcnJheVJl
ZiosIGludDMyX3QqLCBpbnQzMl90KiwgY29uc3Qgdm9pZCopCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAvLyBGSVhNRTogY2FsbCBjbGllbnQncyBmdW5jdGlvbi4KK30KKworYm9vbCBX
ZWJLaXRUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZyhjb25zdCB2b2lkKikKK3sKKyAg
ICBpZiAobV9ld2tUZXh0Q2hlY2tlci51aV9zcGVsbGluZ19zdGF0dXNfZ2V0KQorICAgICAgICBy
ZXR1cm4gbV9ld2tUZXh0Q2hlY2tlci51aV9zcGVsbGluZ19zdGF0dXNfZ2V0KCk7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5n
VUlJc1Nob3dpbmcoY29uc3Qgdm9pZCopCit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNrZXIudWlf
dG9nZ2xlX3NwZWxsaW5nX3N0YXR1c19nZXQpCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIudWlf
dG9nZ2xlX3NwZWxsaW5nX3N0YXR1c19nZXQoKTsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAobV9ld2tUZXh0
Q2hlY2tlci51aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRlKQorICAgICAgICBtX2V3
a1RleHRDaGVja2VyLnVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGUodGFnLCB0b0lt
cGwobWlzc3BlbGxlZFdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBX
ZWJLaXRUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHVpbnQ2
NF90LCBXS1N0cmluZ1JlZiwgV0tHcmFtbWFyRGV0YWlsUmVmLCBjb25zdCB2b2lkKikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEZJWE1FOiBjYWxsIGNsaWVudCdzIGZ1bmN0aW9u
LgorfQorCitXS0FycmF5UmVmIFdlYktpdFRleHRDaGVja2VyOjpndWVzc2VzRm9yV29yZCh1aW50
NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIFdLTXV0YWJs
ZUFycmF5UmVmIHN1Z2dlc3Rpb25zRm9yV29yZCA9IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7CisK
KyAgICBpZiAobV9ld2tUZXh0Q2hlY2tlci53b3JkX2d1ZXNzZXNfZ2V0KSB7CisgICAgICAgIEVp
bmFfTGlzdCogbGlzdCA9IG1fZXdrVGV4dENoZWNrZXIud29yZF9ndWVzc2VzX2dldCh0YWcsIHRv
SW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHZvaWQqIGl0ZW07
CisKKyAgICAgICAgRUlOQV9MSVNUX0ZSRUUobGlzdCwgaXRlbSkgeworICAgICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoc3RhdGljX2Nhc3Q8Y2hhcio+KGl0ZW0pKSk7CisgICAgICAgICAgICBX
S0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOwor
ICAgICAgICAgICAgZnJlZShpdGVtKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IG1fdGV4dENoZWNrZXJFbmNoYW50LT5nZXRHdWVz
c2VzRm9yV29yZCh0b0ltcGwod29yZCktPnN0cmluZygpKTsKKworICAgICAgICBmb3IgKFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3Vlc3Nlcy5iZWdpbigpOyBpdGVyICE9
IGd1ZXNzZXMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
aXRlci0+dXRmOCgpLmRhdGEoKSkpOworICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oc3Vn
Z2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9uLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBzdWdnZXN0aW9uc0ZvcldvcmQ7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNr
ZXI6OmxlYXJuV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQq
KQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLndvcmRfbGVhcm4pCisgICAgICAgIG1fZXdr
VGV4dENoZWNrZXIud29yZF9sZWFybih0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgZWxzZQorICAgICAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+bGVhcm5X
b3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2Vy
OjppZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCop
Cit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNrZXIud29yZF9pZ25vcmUpCisgICAgICAgIG1fZXdr
VGV4dENoZWNrZXIud29yZF9pZ25vcmUodGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmlnbm9y
ZVdvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNr
ZXI6OkVuY2hhbnRIZWxwZXI6OmFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCkKK3sKKyAgICBy
ZXR1cm4gbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCk7
Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OkVuY2hhbnRIZWxwZXI6OnVwZGF0ZVNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcykKK3sKKyAg
ICBpZiAoIW1fdGV4dENoZWNrZXJFbmNoYW50LT5hcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCgp
KQorICAgICAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1
YWdlcyhsYW5ndWFnZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShTUEVMTENIRUNLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uY2Q4ZThkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0VGV4dENo
ZWNrZXJfaAorI2RlZmluZSBXZWJLaXRUZXh0Q2hlY2tlcl9oCisKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKworI2luY2x1ZGUgIlRleHRDaGVja2VyRW5jaGFudC5oIgorI2luY2x1ZGUgIldLQXJy
YXkuaCIKKyNpbmNsdWRlICJXS1BhZ2UuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5oIgorI2luY2x1
ZGUgImV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Ly8gQ2xhc3MgY2hvb3NlcyBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9uIG9mIHNwZWxs
aW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KK2NsYXNzIFdlYktpdFRleHRDaGVja2VyIHsKK3B1Ymxp
YzoKKworICAgIC8vIENhbGxiYWNrcyByZXF1aXJlZCBieSBXS1RleHRDaGVja2VyLgorICAgIHN0
YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworICAgIHN0YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldENvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOworICAgIHN0YXRpYyBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgdWlu
dDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1
aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCisgICAgc3RhdGljIHZvaWQg
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50
MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGNoZWNrR3JhbW1hck9mU3Ry
aW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgV0tBcnJheVJlZiogZ3JhbW1hckRl
dGFpbHMsIGludDMyX3QqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCogYmFkR3JhbW1hckxl
bmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgYm9vbCBzcGVsbGlu
Z1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3Rh
dGljIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh1aW50NjRfdCB0YWcs
IFdLU3RyaW5nUmVmIG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAg
ICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3Qg
dGFnLCBXS1N0cmluZ1JlZiBiYWRHcmFtbWFyUGhyYXNlLCBXS0dyYW1tYXJEZXRhaWxSZWYgZ3Jh
bW1hckRldGFpbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgV0tBcnJh
eVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGxlYXJuV29yZCh1aW50NjRfdCB0
YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRp
YyB2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKKworICAgIC8vIEFjY2VzcyB0byBjbGllbnQncyBjYWxsYmFja3Mu
CisgICAgc3RhdGljIEV3a19UZXh0X0NoZWNrZXIqIGV3a1RleHRDaGVja2VyKCkgeyByZXR1cm4g
Jm1fZXdrVGV4dENoZWNrZXI7IH0KKworICAgIGNsYXNzIEVuY2hhbnRIZWxwZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIGJvb2wgYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKTsK
KyAgICAgICAgc3RhdGljIHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKTsKKyAgICB9OworCitwcml2YXRlOgorICAgIHN0YXRp
YyBFd2tfVGV4dF9DaGVja2VyIG1fZXdrVGV4dENoZWNrZXI7CisKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisjZW5kaWYgLy8gV2Vi
S2l0VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwCmluZGV4IDYwYzc5ZTEuLjBjZDY2MzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTM2LDYgKzM2LDEw
IEBACiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNpbmNs
dWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogCkBAIC05OCw2ICsxMDIsMTIgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAj
ZW5kaWYKICAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9hdHRhY2go
dGhpcyk7CiAgICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2godGhpcyk7
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgICAgIGV3a190ZXh0X2NoZWNrZXJfY2xpZW50
X2F0dGFjaCgpOworICAgICAgICBpZiAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpKQorICAgICAgICAgICAgZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7CisjZW5kaWYKKwog
ICAgIH0KIAogICAgIH5fRXdrX0NvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44M2M2YzEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKQEAgLTAsMCArMSw5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCisKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0
VGV4dENoZWNrZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworI2RlZmluZSBFV0tf
VEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05BTUUsIE5BTUUpICBcCit2b2lkIGV3a190
ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSBjYikgICAgIFwKK3sgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFdl
YktpdFRleHRDaGVja2VyOjpld2tUZXh0Q2hlY2tlcigpLT5OQU1FID0gY2I7ICAgXAorfQorCisv
KioKKyAqIEF0dGFjaGVzIHNwZWxsY2hlY2tlciBmZWF0dXJlLgorICoKKyAqIEBpbnRlcm5hbAor
ICoKKyAqIFRoZSBkZWZhdWx0IHNwZWxsY2hlY2tlciBmZWF0dXJlIGlzIGJhc2VkIG9uIEVuY2hh
bnQgbGlicmFyeS4KKyAqIENsaWVudCBtYXkgdXNlIG93biBpbXBsZW1lbnRhdGlvbiBvZiBzcGVs
bGNoZWNrZXIgcHJldmlvdXNseSBzZXQKKyAqIHRocm91Z2ggdGhlIGNhbGxiYWNrIGZ1bmN0aW9u
cy4KKyAqLwordm9pZCBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9hdHRhY2goKQoreworICAgIHN0
YXRpYyBib29sIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IGZhbHNlOworICAgIGlm
IChkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IFdLVGV4dENoZWNrZXJDbGllbnQgdGV4dENoZWNrZXJDbGllbnQgeworICAgICAgICBrV0tUZXh0
Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICAwLCAvLyBjbGllbnRJbmZvCisg
ICAgICAgIFdlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dl
ZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6aXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5n
RW5hYmxlZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRU
YWcsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFn
LAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nLAorICAg
ICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcsCisgICAgICAgIFdl
YktpdFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nLAorICAgICAgICBXZWJLaXRUZXh0
Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZywKKyAgICAgICAgV2ViS2l0VGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQsCisgICAgICAgIFdlYktp
dFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcsCisgICAgICAg
IFdlYktpdFRleHRDaGVja2VyOjpndWVzc2VzRm9yV29yZCwKKyAgICAgICAgV2ViS2l0VGV4dENo
ZWNrZXI6OmxlYXJuV29yZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQK
KyAgICB9OworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRleHRDaGVja2VyQ2xpZW50KTsK
KworICAgIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IHRydWU7Cit9CisKKyNlbHNl
CisKKy8vIERlZmluZXMgYW4gZW1wdHkgQVBJIHRvIGRvIG5vdCBicmVhayBidWlsZC4KKyNkZWZp
bmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBOQU1FKSAgXAordm9p
ZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUpICAgICAgICBcCit7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K30KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKworRVdLX1RFWFRfQ0hFQ0tFUl9DQUxM
QkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldCwg
dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UsIHVu
aXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjaywgc3RyaW5nX3NwZWxs
aW5nX2NoZWNrKQorLy8gRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hl
Y2tlcl9TdHJpbmdfR3JhbW1hcl9DaGVjaywgc3RyaW5nX2dyYW1tYXJfY2hlY2spCitFV0tfVEVY
VF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1
c19HZXQsIHVpX3NwZWxsaW5nX3N0YXR1c19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1VJX1RvZ2dsZV9TcGVsbGluZ19TdGF0dXNfR2V0LCB1aV90
b2dnbGVfc3BlbGxpbmdfc3RhdHVzX2dldCkKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VU
KEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3BlbGxlZF9Xb3JkX1VwZGF0ZSwgdWlf
c3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZSkKKy8vIEVXS19URVhUX0NIRUNLRVJfQ0FM
TEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfR3JhbW1hcl9TdHJpbmdfVXBk
YXRlLCB1aV9zcGVsbGluZ19ncmFtbWFyX3N0cmluZ191cGRhdGUpCitFV0tfVEVYVF9DSEVDS0VS
X0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXQsIHdvcmRfZ3Vl
c3Nlc19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2Vy
X1dvcmRfTGVhcm4sIHdvcmRfbGVhcm4pCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChF
d2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlLCB3b3JkX2lnbm9yZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjE5MmYzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oCkBAIC0wLDAg
KzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
LyoqCisgKiBAZmlsZSBld2tfdGV4dF9jaGVja2VyLmgKKyAqIEBicmllZiBQcm92aWRlcyBBUEkg
dG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRp
b24uCisgKgorICogVGhlcmUgaXMgb25lIHNwZWxsY2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0
aW9uIGFuZCBpdCdzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKiBJdCBhbGxvd3MgdG8gY2hlY2sg
c3BlbGxpbmcgaW4gdGhlIGVkaXRhYmxlIGFyZWFzLgorICogSWYgYXBwbGljYXRpb24gd2FudHMg
dG8gZW5hYmxlIHRoZSBmZWF0dXJlLCBBUEkgZnJvbSBAYSBld2tfdGV4dF9jaGVja2VyX3NldHRp
bmcuaAorICogc2hvdWxkIGJlIHVzZWQuCisgKgorICogVGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxs
Y2hlY2tlciBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5Lgor
ICogSXQgZG9lc24ndCBlbnN1cmUgZ3JhbW1hciBjaGVja2luZy4gQXBwbGljYXRpb24gaXMgYWJs
ZSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQKKyAqIFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVt
ZW50YXRpb24gYnkgZGVmaW5pbmcgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZwor
ICogYXBwcm9wcmlhdGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorICovCisKKyNpZm5kZWYgZXdrX3Rl
eHRfY2hlY2tlcl9oCisjZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfaAorCisjaW5jbHVkZSA8RXZh
cy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVk
ZWYgdWludDY0X3QgKCpFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdf
R2V0KShjb25zdCBFdmFzX09iamVjdCAqbyk7Cit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVj
a2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UpKHVpbnQ2NF90IHRhZyk7Cit0eXBl
ZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjaykodWludDY0
X3QgdGFnLCBjb25zdCBjaGFyICp0ZXh0LCBpbnQzMl90ICptaXNzcGVsbGluZ19sb2NhdGlvbiwg
aW50MzJfdCAqbWlzc3BlbGxpbmdfbGVuZ3RoKTsKKy8vIHR5cGVkZWYgdm9pZCAoKkV3a19UZXh0
X0NoZWNrZXJfU3RyaW5nX0dyYW1tYXJfQ2hlY2spKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAq
dGV4dCwgRWluYV9MaXN0ICoqbGlzdCwgaW50MzJfdCAqYmFkX2dyYW1tYXJfbG9jYXRpb24sIGlu
dDMyX3QgKmJhZF9ncmFtbWFyX2xlbmd0aCk7Cit0eXBlZGVmIEVpbmFfQm9vbCAoKkV3a19UZXh0
X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX0dldCkodm9pZCk7Cit0eXBlZGVmIHZvaWQgKCpF
d2tfVGV4dF9DaGVja2VyX1VJX1RvZ2dsZV9TcGVsbGluZ19TdGF0dXNfR2V0KSh2b2lkKTsKK3R5
cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3BlbGxlZF9Xb3Jk
X1VwZGF0ZSkodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICptaXNzcGVsbGVkX3dvcmQpOworLy8g
dHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19HcmFtbWFyX1N0cmlu
Z19VcGRhdGUpKHVpbnQ2NF90IHRhZywgRXdrX0dyYW1tYXJfRGV0YWlsIGJhZF9ncmFtbWFyX3Bo
cmFzZSwgRXdrX0dyYW1tYXJfRGV0YWlsIGdyYW1tYXJfZGV0YWlsKTsKK3R5cGVkZWYgRWluYV9M
aXN0ICooKkV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldCkodWludDY0X3QgdGFnLCBj
b25zdCBjaGFyICp3b3JkKTsKK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfV29yZF9M
ZWFybikodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp3b3JkKTsKK3R5cGVkZWYgdm9pZCAoKkV3
a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29y
ZCk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhIHVuaXF1ZSBz
cGVsbCBkb2N1bWVudCB0YWcuCisgKgorICogVGhpcyBjYWxsYmFjayB3aWxsIHJldHVybiBhIHRh
ZyAoaWRlbnRpZmllcikgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUuCisgKiBVbmlx
dWUgdGFncyBoZWxwIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBvdGhlciBvYmplY3RzIHRoYXQg
YXJlIGNoZWNrZWQgZm9yIHNwZWxsaW5nIG1pc3Rha2VzLgorICoKKyAqIEBzZWUgZXdrX3RleHRf
Y2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlX2NiX3NldAorICoKKyAqIEBw
YXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgMCB0byByZXN0b3JlIHRoZSBkZWZh
dWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3Rl
eHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldF9jYl9zZXQoRXdrX1RleHRf
Q2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldCBjYik7CisKKy8qKgorICogU2V0
cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNsb3NlIGEgdW5pcXVlIHNwZWxsIGRvY3VtZW50IHRh
Zy4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIHdpbGwgbm90aWZ5IHRoZSByZWNlaXZlciB0aGF0IHRo
ZSB1c2VyIGhhcyBmaW5pc2hlZCB3aXRoIHRoZSB0YWdnZWQgZG9jdW1lbnQuCisgKgorICogQHNl
ZSBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0X2NiX3NldAor
ICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgMCB0byByZXN0b3Jl
IHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZv
aWQgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlX2NiX3Nl
dChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UgY2IpOwor
CisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZWFyY2ggZm9yIGEgbWlzc3Bl
bGxlZCB3b3JkIGluIHRoZSBnaXZlbiBzdHJpbmcuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNh
bGxiYWNrIHRvIHNldCBvciBAYyAwIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxi
YWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3N0cmlu
Z19zcGVsbGluZ19jaGVja19jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdf
Q2hlY2sgY2IpOworCisvLyBFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfZ3JhbW1h
cl9jaGVja19jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfR3JhbW1hcl9DaGVjayBjYik7
CisKK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VpX3NwZWxsaW5nX3N0YXR1c19nZXRfY2Jf
c2V0KEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX0dldCBjYik7CitFQVBJIHZv
aWQgZXdrX3RleHRfY2hlY2tlcl91aV90b2dnbGVfc3BlbGxpbmdfc3RhdHVzX2dldF9jYl9zZXQo
RXdrX1RleHRfQ2hlY2tlcl9VSV9Ub2dnbGVfU3BlbGxpbmdfU3RhdHVzX0dldCBjYik7CitFQVBJ
IHZvaWQgZXdrX3RleHRfY2hlY2tlcl91aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRl
X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX01pc3NwZWxsZWRfV29yZF9VcGRh
dGUgY2IpOworLy8gRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfdWlfc3BlbGxpbmdfZ3JhbW1h
cl9zdHJpbmdfdXBkYXRlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX0dyYW1t
YXJfU3RyaW5nX1VwZGF0ZSBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9u
IHRvIGdldCBhbiBhcnJheSBvZiBzdWdnZXN0ZWQgc3BlbGxpbmdzIGZvciBhIG1pc3NwZWxsZWQg
d29yZC4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBkeW5hbWlj
YWxseSBhbGxvY2F0ZWQgc3RyaW5ncyAoYXMgY2hhciopIGFuZAorICogY2FsbGVyIGlzIHJlc3Bv
bnNpYmxlIGZvciBkZXN0cm95aW5nIHRoZW0uCisgKgorICogQHNlZSBFSU5BX0xJU1RfRlJFRS4K
KyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9y
ZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2
b2lkIGV3a190ZXh0X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9jYl9zZXQoRXdrX1RleHRfQ2hl
Y2tlcl9Xb3JkX0d1ZXNzZXNfR2V0IGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVu
Y3Rpb24gdG8gYWRkIHRoZSB3b3JkIHRvIHRoZSBzcGVsbCBjaGVja2VyIGRpY3Rpb25hcnkuCisg
KgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyAwIHRvIHJlc3RvcmUg
dGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9p
ZCBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29y
ZF9MZWFybiBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRlbGwg
dGhlIHNwZWxsIGNoZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4gd29yZC4KKyAqCisgKiBAcGFyYW0g
Y2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBX
ZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2No
ZWNrZXJfd29yZF9pZ25vcmVfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUgY2Ip
OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a190ZXh0X2No
ZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3RleHRfY2hlY2tlcl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yMWI5ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgKQEAgLTAsMCArMSw1MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfcHJp
dmF0ZV9oCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVj
a2VyLmgiCisKKy8qKgorICogQGJyaWVmIFN0cnVjdHVyZSB0aGF0IGtlZXBzIGNsaWVudCdzIGNh
bGxiYWNrIGZ1bmN0aW9ucy4KKyAqCisgKiBAaW50ZXJuYWwKKyAqLworc3RydWN0IF9Fd2tfVGV4
dF9DaGVja2VyIHsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9U
YWdfR2V0IHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0OworICAgIEV3a19UZXh0X0NoZWNr
ZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19DbG9zZSB1bmlxdWVfc3BlbGxfZG9jdW1lbnRf
dGFnX2Nsb3NlOworICAgIEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrIHN0
cmluZ19zcGVsbGluZ19jaGVjazsKKyAgICAvLyBFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19HcmFt
bWFyX0NoZWNrIHN0cmluZ19ncmFtbWFyX2NoZWNrOworICAgIEV3a19UZXh0X0NoZWNrZXJfVUlf
U3BlbGxpbmdfU3RhdHVzX0dldCB1aV9zcGVsbGluZ19zdGF0dXNfZ2V0OworICAgIEV3a19UZXh0
X0NoZWNrZXJfVUlfVG9nZ2xlX1NwZWxsaW5nX1N0YXR1c19HZXQgdWlfdG9nZ2xlX3NwZWxsaW5n
X3N0YXR1c19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19NaXNzcGVsbGVk
X1dvcmRfVXBkYXRlIHVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGU7CisgICAgLy8g
RXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19HcmFtbWFyX1N0cmluZ19VcGRhdGUgdWlfc3Bl
bGxpbmdfZ3JhbW1hcl9zdHJpbmdfdXBkYXRlOworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9H
dWVzc2VzX0dldCB3b3JkX2d1ZXNzZXNfZ2V0OworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9M
ZWFybiB3b3JkX2xlYXJuOworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUgd29yZF9p
Z25vcmU7Cit9OwordHlwZWRlZiBfRXdrX1RleHRfQ2hlY2tlciBFd2tfVGV4dF9DaGVja2VyOwor
CisvLyBNYWtlcyBpdCB2aXNpYmxlIGZvciBXVFIuCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tl
cl9jbGllbnRfYXR0YWNoKCk7CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKyNlbmRp
ZiAvLyBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3NzM1MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJf
c2V0dGluZy5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nLmgiCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRl
ICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKyNpbmNs
dWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIHN0cnVj
dCB7CisgICAgYm9vbCBlbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZzoxOworICAgIGJvb2wg
ZW5hYmxlR3JhbW1hckNoZWNraW5nOjE7CisgICAgc3RydWN0IHsKKyAgICAgICAgRXdrX1RleHRf
Q2hlY2tlcl9TZXR0aW5nX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlZCBjb250aW51
b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQ7CisgICAgICAgIEV3a19UZXh0X0NoZWNrZXJfU2V0dGlu
Z19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQgZ3JhbW1hckNoZWNraW5nQ2hhbmdlZDsKKyAgICB9
IHNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzOworICAgIFZlY3RvcjxTdHJpbmc+IHNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXM7Cit9IGV3a1RleHRDaGVja2VyU2V0dGluZyA9IHsgZmFsc2UsIGZhbHNlLCB7
MCwgMH0sIFZlY3RvcjxTdHJpbmc+KCl9OworCitzdGF0aWMgRWluYV9Cb29sIF9pZGxlckNvbnRp
bnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCh2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNr
ZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5n
Q2hhbmdlZCkKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2Fs
bGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCgKKyAgICAgICAgICAgIGV3a1Rl
eHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZyk7CisKKyAgICBy
ZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9pZGxl
ckdyYW1tYXJDaGVja2luZ0NoYW5nZWQodm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2Vy
U2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKQor
ICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3MuZ3Jh
bW1hckNoZWNraW5nQ2hhbmdlZCgKKyAgICAgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5l
bmFibGVHcmFtbWFyQ2hlY2tpbmcpOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNF
TDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfaWRsZXJTZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KHZvaWQqKQoreworICAgIC8vIFRPRE86IENvbnNpZGVyIHRvIGRlbGVnYXRlIGNhbGxpbmcgb2Yg
dGhpcyBtZXRob2QgaW4gV2ViUHJvY2VzcyB0byBkbyBub3QgZGVsYXkvYmxvY2sgVUlQcm9jZXNz
LgorICAgIFdlYktpdFRleHRDaGVja2VyOjpFbmNoYW50SGVscGVyOjp1cGRhdGVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKGV3a1RleHRDaGVja2VyU2V0dGluZy5zcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KTsKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2b2lkIHN0YXRpYyBf
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29u
c3QgVmVjdG9yPFN0cmluZz4mIG5ld0xhbmd1YWdlcykKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBs
YW5ndWFnZXMgPSBuZXdMYW5ndWFnZXM7CisgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMuc3dhcChsYW5ndWFnZXMpOworICAgIGVjb3JlX2lkbGVyX2FkZChf
aWRsZXJTZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzLCAwKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
U1BFTExDSEVDSykKKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfY29udGludW91c19z
cGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdfQ29u
dGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VkIGNhbGxiYWNrKQoreworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxi
YWNrcy5jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQgPSBjYWxsYmFjazsKKyNlbmRpZgor
fQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19ncmFtbWFyX2NoZWNraW5nX2NoYW5n
ZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19HcmFtbWFyX0NoZWNraW5nX0NoYW5n
ZWQgY2FsbGJhY2spCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgZXdrVGV4dENoZWNr
ZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmdyYW1tYXJDaGVja2luZ0NoYW5nZWQg
PSBjYWxsYmFjazsKKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpCit7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250
aW51b3VzU3BlbGxDaGVja2luZzsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9
CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX3NldChFaW5hX0Jvb2wgZW5hYmxlKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIGVuYWJsZSA9ICEhZW5hYmxlOworICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmcu
ZW5hYmxlQ29udGludW91c1NwZWxsQ2hlY2tpbmcgIT0gZW5hYmxlKSB7CisgICAgICAgIGV3a1Rl
eHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZyA9IGVuYWJsZTsK
KworICAgICAgICBXS1RleHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3Rh
dGVDaGFuZ2VkKGVuYWJsZSk7CisKKyAgICAgICAgLy8gU2V0cyBkZWZhdWx0IGxhbmd1YWdlIGlm
IHVzZXIgZGlkbid0IHNwZWNpZnkgYW55LgorICAgICAgICBpZiAoZW5hYmxlICYmICFXZWJLaXRU
ZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkK
KyAgICAgICAgICAgIF9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX3NldChWZWN0b3I8U3RyaW5nPigpKTsKKworICAgICAgICBpZiAoZXdrVGV4dENoZWNr
ZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5n
Q2hhbmdlZCkKKyAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChfaWRsZXJDb250aW51b3VzU3Bl
bGxDaGVja2luZ0NoYW5nZWQsIDApOworICAgIH0KKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX2dldCgpCit7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyU2V0dGluZy5l
bmFibGVHcmFtbWFyQ2hlY2tpbmc7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
fQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9jaGVja2lu
Z19zZXQoRWluYV9Cb29sIGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBl
bmFibGUgPSAhIWVuYWJsZTsKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5nLmVuYWJsZUdy
YW1tYXJDaGVja2luZyAhPSBlbmFibGUpIHsKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5n
LmVuYWJsZUdyYW1tYXJDaGVja2luZyA9IGVuYWJsZTsKKworICAgICAgICBXS1RleHRDaGVja2Vy
R3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGUpOworCisgICAgICAgIGlm
IChld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3MuZ3JhbW1hckNo
ZWNraW5nQ2hhbmdlZCkKKyAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChfaWRsZXJHcmFtbWFy
Q2hlY2tpbmdDaGFuZ2VkLCAwKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBld2tfdGV4dF9j
aGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChjb25zdCBjaGFyKiBs
YW5ndWFnZXMpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgVmVjdG9yPFN0cmluZz4g
bmV3TGFuZ3VhZ2VzOworICAgIFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2VzKS5zcGxpdChzdGF0
aWNfY2FzdDxVQ2hhcj4oJywnKSwgbmV3TGFuZ3VhZ2VzKTsKKworICAgIF9ld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChuZXdMYW5ndWFnZXMpOwor
I2VuZGlmCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjBkY2Q2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaApAQCAtMCwwICsxLDEyNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKy8qKgorICog
QGZpbGUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgKKyAqIEBicmllZiBBUEkgZm9yIG1hbmlw
dWxhdGluZyBzcGVsbCBjaGVja2VyIGZlYXR1cmUuCisgKi8KKworI2lmbmRlZiBld2tfdGV4dF9j
aGVja2VyX3NldHRpbmdfaAorI2RlZmluZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfaAorCisj
aW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2Vu
ZGlmCisKK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19Db250aW51b3Vz
X1NwZWxsX0NoZWNraW5nX0NoYW5nZWQpKEVpbmFfQm9vbCBlbmFibGUpOwordHlwZWRlZiB2b2lk
ICgqRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0dyYW1tYXJfQ2hlY2tpbmdfQ2hhbmdlZCkoRWlu
YV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQg
dG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbiB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBz
ZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBTcGVjaWZ5aW5nIG9mIHRoaXMg
Y2FsbGJhY2sgaXMgbmVlZGVkIGlmIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byByZWNlaXZlIG5v
dGlmaWNhdGlvbnMKKyAqIG9uY2UgV2ViS2l0IGNoYW5nZXMgdGhpcyBzZXR0aW5nLgorICogSWYg
dGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBpbnRlcmVzdGVkLCB0aGlzIGNhbGxiYWNrIGlzIG5vdCBz
ZXQuCisgKiBDaGFuZ2luZyBvZiB0aGlzIHNldHRpbmcgYXQgdGhlIFdlYktpdCBsZXZlbCBjYW4g
YmUgbWFkZSBhcyBhIHJlc3VsdCBvZiBtb2RpZnlpbmcKKyAqIG9wdGlvbnMgaW4gYSBDb250ZXh0
IE1lbnUgYnkgYSB1c2VyLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayBmdW5jdGlv
biB0byBzZXQgb3IgQGMgMCB0byBpbnZhbGlkYXRlIHRoZSBwcmV2aW91cyBvbmUKKyAqLworRUFQ
SSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2NoYW5nZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19Db250aW51b3VzX1NwZWxs
X0NoZWNraW5nX0NoYW5nZWQgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlv
biB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4gdGhlIGdyYW1tYXIgY2hlY2tpbmcgc2V0
dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogU3BlY2lmeWluZyBvZiB0aGlzIGNh
bGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3Rp
ZmljYXRpb25zCisgKiBvbmNlIFdlYktpdCBjaGFuZ2VzIHRoaXMgc2V0dGluZy4KKyAqIElmIHRo
ZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0
LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJl
IG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBN
ZW51IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24g
dG8gc2V0IG9yIEBjIDAgdG8gaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMgb25lCisgKi8KK0VBUEkg
dm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZ3JhbW1hcl9jaGVja2luZ19jaGFuZ2VkX2Ni
X3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdfR3JhbW1hcl9DaGVja2luZ19DaGFuZ2VkIGNi
KTsKKworLyoqCisgKiBRdWVyaWVzIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5h
YmxlZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIGlzIGVuYWJsZWQgb3IgQCBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLwor
RUFQSSBFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2dldCh2b2lkKTsKKworLyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGNv
bnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCisgKgorICogQWRkaXRpb25hbGx5LCB0aGlzIGZ1bmN0
aW9uIGNhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gKGlmIGRlZmluZWQpIHRvIG5vdGlmeQorICog
dGhlIGNsaWVudCBhYm91dCB0aGUgY2hhbmdlIG9mIHRoZSBzZXR0aW5nLgorICogVGhpcyBmZWF0
dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKgorICogQHNlZSBld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldAorICoKKyAq
IEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRvIGVuYWJsZSBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIG9yIEBjIEVJTkFfRkFMU0UgdG8gZGlzYWJsZQorICovCitFQVBJIHZvaWQgZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldChF
aW5hX0Jvb2wgZW5hYmxlKTsKKworLyoqCisgKiBRdWVyaWVzIGlmIGdyYW1tYXIgY2hlY2tpbmcg
aXMgZW5hYmxlZC4KKyAqCisgKiBBcHBsaWNhdGlvbiBtYXkgb3ZlcndyaXRlIHdlYmtpdCBncmFt
bWFyIGNoZWNraW5nIGltcGxlbWVudGF0aW9uIGJ5IHNldHRpbmcgY2FsbGJhY2sgZnVuY3Rpb25z
CisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXIuaAorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAIEVJTkFfRkFMU0Ug
aWYgaXQncyBkaXNhYmxlZAorICovCitFQVBJIEVpbmFfQm9vbCBld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KHZvaWQpOworCisvKioKKyAqIEVuYWJs
ZXMvZGlzYWJsZXMgZ3JhbW1hciBjaGVja2luZy4KKyAqCisgKiBBZGRpdGlvbmFsbHksIHRoaXMg
ZnVuY3Rpb24gY2FsbHMgYSBjYWxsYmFjayBmdW5jdGlvbiAoaWYgZGVmaW5lZCkgdG8gbm90aWZ5
CisgKiB0aGUgY2xpZW50IGFib3V0IHRoZSBjaGFuZ2Ugb2YgdGhlIHNldHRpbmcuCisgKiBUaGlz
IGZlYXR1cmUgaXMgZGlzYWJsZWQgYW5kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgV2ViS2l0LUVGTCBi
eSBkZWZhdWx0LgorICoKKyAqIEBzZWUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2dyYW1tYXJf
Y2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQKKyAqCisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJV
RSB0byBlbmFibGUgZ3JhbW1hciBjaGVja2luZyBvciBAYyBFSU5BX0ZBTFNFIHRvIGRpc2FibGUK
KyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9j
aGVja2luZ19zZXQoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogU2V0cyBAbGFuZ3VhZ2Vz
IGFzIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB0byB1c2UgYnkgZGVmYXVsdCBXZWJLaXQKKyAqIGlt
cGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tlciBmZWF0dXJlIHdpdGggRW5jaGFudCBsaWJyYXJ5
IHN1cHBvcnQuCisgKgorICogSWYgQGxhbmd1YWdlcyBpcyBAYyAwLCB0aGUgZGVmYXVsdCBsYW5n
dWFnZSBpcyB1c2VkLgorICogSWYgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgY2FuIG5vdCBiZSBkZXRl
cm1pbmVkIHRoZW4gYW55IGF2YWlsYWJsZSBkaWN0aW9uYXJ5IHdpbGwgYmUgdXNlZC4KKyAqCisg
KiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGludmFsaWRhdGVzIHRoZSBwcmV2aW91c2x5IHNldCBsYW5n
dWFnZXMuCisgKiAgICAgICBUaGUgZGljdGlvbmFyaWVzIGFyZSByZXF1ZXN0ZWQgYXN5bmNocm9u
b3VzbHkuCisgKgorICogQHBhcmFtIGxhbmd1YWdlcyBhIGxpc3Qgb2YgY29tbWEgKCcsJykgc2Vw
YXJhdGVkIGxhbmd1YWdlIGNvZGVzCisgKiAgICAgICAgb2YgdGhlIGZvcm0gJ2VuX1VTJywgaWUs
IGxhbmd1YWdlX1ZBUklBTlQsIG1heSBiZSBAYyAwLgorICovCitFQVBJIHZvaWQgZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hhciAq
bGFuZ3VhZ2VzKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8v
IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCmluZGV4IGFhMzNmMmYuLjdkNjdhOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCkBAIC0xLDUg
KzEsNyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjksOSBAQAogI2lu
Y2x1ZGUgIlRleHRDaGVja2VyLmgiCiAKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTM3LDkxICs0MSwxNDIgQEAgc3RhdGljIFRleHRDaGVja2VyU3RhdGUg
dGV4dENoZWNrZXJTdGF0ZTsKIAogY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENoZWNrZXI6
OnN0YXRlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOworICAgIGlmIChk
aWRJbml0aWFsaXplU3RhdGUpCisgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOworCisg
ICAgV2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaGFyZWQo
KS0+Y2xpZW50KCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAg
ICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5ncmFt
bWFyQ2hlY2tpbmdFbmFibGVkKCk7CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOwor
I2VuZGlmCiAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CiB9CiAKIGJvb2wgVGV4dENoZWNr
ZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNsaWVudCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOwor
I2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRDaGVja2Vy
OjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47
CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9
IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2xpZW50KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVj
a2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRDaGVja2VyOjpz
ZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgaWYg
KHN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID09IGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChpc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQpOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmNvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICB0ZXh0Q2hl
Y2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNl
bmRpZgogfQogCiB2b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVD
aGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJM
RShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkID0gZW5hYmxlZDsKKyNlbmRpZgogfQogCi1pbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVT
cGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSopCitpbnQ2NF90IFRleHRDaGVja2VyOjp1bmlx
dWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7CisjZWxz
ZQogICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3Bl
bGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCkKK3ZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxE
b2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKKyNlbmRpZgogfQogCi12b2lkIFRl
eHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNoYXIqLCB1
aW50MzJfdCwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVs
bGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQs
IHVpbnQzMl90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYg
bWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNr
U3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwg
bWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworI2VuZGlmCiB9CiAKLXZv
aWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFy
KiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBp
bnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwgVmVj
dG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50MzJfdCYgYmFkR3JhbW1hckxv
Y2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmco
dGV4dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3Jh
bW1hckxlbmd0aCk7CisjZW5kaWYKIH0KIAogYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlz
U2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVD
SykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zcGVsbGlu
Z1VJSXNTaG93aW5nKCk7CisjZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB2
b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2Vy
OjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOworI2VuZGlm
CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdv
cmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBT
dHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIG1pc3Nw
ZWxsZWRXb3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1h
ckRldGFpbCYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQ
aHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6
c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVs
bERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKKyNlbmRpZgog
fQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90LCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit2b2lkIFRleHRDaGVja2Vy
OjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmlu
ZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1
bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6
bGVhcm5Xb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjpsZWFy
bldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3
b3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qs
IGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3Bl
bGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworI2VuZGlmCiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0ZpbmRF
bmNoYW50LmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYjk5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UKQEAgLTAsMCArMSwzMyBAQAorIyAgIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisjCisjICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisjICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorIworIyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMK
KyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
IyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCitpZiggTk9UIFdJTjMyICkKKyAgICBm
aW5kX3BhY2thZ2UoUGtnQ29uZmlnKQorICAgIHBrZ19jaGVja19tb2R1bGVzKEVuY2hhbnQgZW5j
aGFudCkKK2VuZGlmKCBOT1QgV0lOMzIgKQorCitGSU5EX1BBVEgoRW5jaGFudF9JTkNMVURFX0RJ
UlMgTkFNRVMgZW5jaGFudC5oCisgIFBBVEhTCisgICR7UENfRW5jaGFudF9JTkNMVURFRElSfQor
ICAke1BDX0VuY2hhbnRfSU5DTFVERV9ESVJTfQorKQorCitGSU5EX0xJQlJBUlkoRW5jaGFudF9M
SUJSQVJJRVMgTkFNRVMgZW5jaGFudAorICBQQVRIUworICAke1BDX0VuY2hhbnRfTElCRElSfQor
ICAke1BDX0VuY2hhbnRfTElCUkFSWV9ESVJTfQorKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtl
L09wdGlvbnNFZmwuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCA4
Njc1YmU4Li43ZWM5N2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFr
ZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQpAQCAtMTcxLDMgKzE3MSw4IEBA
IElGIChXVEZfVVNFX1RJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgIEZJTkRfUEFDS0FHRShPcGVuR0wg
UkVRVUlSRUQpCiBFTkRJRigpCiAKK09QVElPTihFTkFCTEVfU1BFTExDSEVDSyAiRW5hYmxlIHNw
ZWxsY2hlY2tpbmcgZmVhdHVyZSAocmVxdWlyZXMgZW5jaGFudCkiIE9OKQorSUYgKEVOQUJMRV9T
UEVMTENIRUNLKQorICAgICAgRklORF9QQUNLQUdFKEVuY2hhbnQgUkVRVUlSRUQpCisgICAgICBB
RERfREVGSU5JVElPTlMoLURFTkFCTEVfU1BFTExDSEVDSz0xKQorRU5ESUYoKQo=
</data>
<flag name="commit-queue"
          id="172843"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161930</attachid>
            <date>2012-09-03 08:04:58 -0700</date>
            <delta_ts>2012-09-04 00:48:36 -0700</delta_ts>
            <desc>refactoring of FindEnchant.cmake</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>58287</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxMGE0YzJjLi5lODAyYjYw
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDktMDMgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qICA8bS5yb2pAc2FzbXVuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZM
XSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZXMgc3BlbGxjaGVja2luZyBm
ZWF0dXJlIGZvciBXSzItRWZsLgorCisgICAgICAgICogU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50
LmNtYWtlOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZTog
RGVmaW5lcyBTUEVMTENIRUNLIG1hY3JvLgorCiAyMDEyLTA4LTMxICBUb255IENoYW5nICA8dG9u
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIEVOQUJMRV9DU1MzX0ZMRVhCT1ggY29t
cGlsZSB0aW1lIGZsYWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmZjJlMjU4Li42ZWY5ZDUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDktMDMgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6
YWprb3dza2lAc2Ftc3VuZy5jb20+LCBNaWNoYWwgUm9qICA8bS5yb2pAc2Ftc3VuZy5jb20+CisK
KyAgICAgICAgW1dLMl1bRUZMXSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1
cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxh
dGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBlbmNoYW50LXJlbGF0ZWQgY29tcGlsZXIgZmxh
Z3M6IGhlYWRlciBwYXRocyBhbmQgdGhlIGxpYnJhcnkgZmxhZy4KKworICAgICAgICAqIHBsYXRm
b3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwOgorICAgICAgICAoVGV4dENo
ZWNrZXJFbmNoYW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoVGV4dENoZWNr
ZXJFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChUZXh0Q2hlY2tlckVuY2hh
bnQ6OmdldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICBVc2VzIG5ld2x5IGNyZWF0
ZWQgJ2FyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCknIG1ldGhvZC4KKworICAgICAgICAqIHBs
YXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDaGVja2VyRW5jaGFudDo6YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQpOgorICAg
ICAgICBEZWZpbmVzIGFuIGluIGxpbmUgbWV0aG9kIHRvIHJldHVybiBpbmZvcm1hdGlvbiB3aGV0
aGVyIGRpY3Rpb25hcmllcyBoYXZlIGJlZW4gbG9hZGVkLgorICAgICAgICBJdCdzIHVzZWQgYnkg
V2ViS2l0VGV4dENoZWNrZXIgYW5kIFRleHRDaGVja2VyRW5jaGFudC4KKwogMjAxMi0wOS0wMyAg
QW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IHVzZSBsaW5raWZ5UmVzb3VyY2VBc05vZGUsIG5vdCBsaW5raWZ5TG9jYXRpb24gd2hl
biBsaW5raWZ5aW5nIHJlc291cmNlcyBpbiBUaW1lbGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCA0NTRlZWU4Li5jZTg5ZDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
ODgsNiArODgsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0vUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3Bw
CiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3Bw
CisgIHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCiApCiAKIElG
IChFTkFCTEVfQkFUVEVSWV9TVEFUVVMpCkBAIC0zMjQsMyArMzI1LDcgQEAgSUYgKEVOQUJMRV9X
RUJfQVVESU8pCiAgIEFERF9ERUZJTklUSU9OUygtRFVOSU5TVEFMTEVEX0FVRElPX1JFU09VUkNF
U19ESVI9IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2F1ZGlvL3Jlc291cmNlcyIpCiBFTkRJRiAo
KQogCitJRiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNM
VURFX0RJUkVDVE9SSUVTICR7RU5DSEFOVF9JTkNMVURFX0RJUlN9KQorICAgIExJU1QoQVBQRU5E
IFdlYkNvcmVfTElCUkFSSUVTICR7RU5DSEFOVF9MSUJSQVJJRVN9KQorRU5ESUYoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5j
aGFudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNr
ZXJFbmNoYW50LmNwcAppbmRleCBmNzJmYjBjLi5hYjNhOWQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50
LmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6bGVhcm5Xb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCkKIAogdm9pZCBUZXh0Q2hlY2tlckVuY2hhbnQ6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0
aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKQogewotICAgIGlmIChtX2VuY2hhbnREaWN0aW9u
YXJpZXMuaXNFbXB0eSgpKQorICAgIGlmICghYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IG51bWJlck9mQ2hhcmFjdGVycyA9IHN0cmlu
Zy5sZW5ndGgoKTsKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIG1pc3NwZQog
VmVjdG9yPFN0cmluZz4gVGV4dENoZWNrZXJFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25z
dCBTdHJpbmcmIHdvcmQpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKLSAgICBpZiAo
bV9lbmNoYW50RGljdGlvbmFyaWVzLmlzRW1wdHkoKSkKKyAgICBpZiAoIWFyZURpY3Rpb25hcmll
c0luaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybiBndWVzc2VzOwogCiAgICAgZm9yIChWZWN0
b3I8RW5jaGFudERpY3QqPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fZW5jaGFudERpY3Rpb25h
cmllcy5iZWdpbigpOyBpdGVyICE9IG1fZW5jaGFudERpY3Rpb25hcmllcy5lbmQoKTsgKytpdGVy
KSB7CkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBUZXh0Q2hlY2tlckVuY2hhbnQ6OnVwZGF0ZVNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmcKIFZlY3RvcjxT
dHJpbmc+IFRleHRDaGVja2VyRW5jaGFudDo6Z2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcygpCiB7
CiAgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOwotICAgIGlmIChtX2VuY2hhbnREaWN0aW9u
YXJpZXMuaXNFbXB0eSgpKQorICAgIGlmICghYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkK
ICAgICAgICAgcmV0dXJuIGxhbmd1YWdlczsKIAogICAgIC8vIEdldCBhIFZlY3RvcjxDU3RyaW5n
PiB3aXRoIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyBpbiB1c2UuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmgKaW5k
ZXggMTc4MGI0NS4uYWQ2ZmYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaApAQCAtNDMsNiArNDMsNyBA
QCBwdWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4gZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3Ry
aW5nJik7CiAgICAgdm9pZCB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBsYW5ndWFnZXMpOwogICAgIFZlY3RvcjxTdHJpbmc+IGdldFNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMoKTsKKyAgICBib29sIGFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCkgY29u
c3QgeyByZXR1cm4gIW1fZW5jaGFudERpY3Rpb25hcmllcy5pc0VtcHR5KCk7IH0KIAogcHJpdmF0
ZToKICAgICBUZXh0Q2hlY2tlckVuY2hhbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxMTMyNzdkLi42YWQw
ZjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI2IEBACisyMDEyLTA5LTAzICBHcnplZ29yeiBD
emFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFsIFJvaiAgPG0ucm9q
QHNhbXN1bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gSW1wbGVtZW50YXRpb24gb2Ygc3Bl
bGxjaGVja2luZyBmZWF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTE4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRzIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGZvciBXZWJLaXQyLUVGTCB0
aGF0IGlzIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKworICAgICAgICBBZGRpdGlvbmFsbHkg
dGhlIHBhdGNoIHByb3ZpZGVzIEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNw
ZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhcyBFbmNoYW50IGxpYnJhcnkgZG9l
c24ndCBlbnN1cmUgZ3JhbW1hciBjaGVja2luZy4KKyAgICAgICAgQXBwbGljYXRpb24gaXMgYWJs
ZSB0byBvdmVyd3JpdGUgaXQgKGJvdGggZ3JhbW1hciBhbmQgc3BlbGwgY2hlY2tpbmcpIGJ5IGRl
ZmluaW5nCisgICAgICAgIGl0cyBvd24gaW1wbGVtZW50YXRpb24gYW5kIHNldHRpbmcgYXBwcm9w
cmlhdGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6
CisgICAgICAgIEFkZCBlbmNoYW50LXJlbGF0ZWQgY29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRo
cyBhbmQgdGhlIGxpYnJhcnkgZmxhZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmg6CisgICAgICAgIEFkZCBmaWxlcyB0aGF0IGNvbnRhaW4gQVBJIHRvIHRoZSBtYWlu
IFdlYktpdDItRUZMJ3MgaGVhZGVyIHRvIGJlIGF2YWlsYWJsZSBmb3IgYXBwbGljYXRpb25zLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgSW1wbGVtZW50cyBjYWxsYmFja3MgZnVuY3Rpb25zIG9mIFdLVGV4dENoZWNr
ZXIuCisKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVj
a2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6aXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6
OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0
Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktp
dFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKToKKyAgICAgICAgKFdlYktp
dDo6V2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjp1
cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJL
aXRUZXh0Q2hlY2tlcjo6Z3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRU
ZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNr
ZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICBUaG9zZSBtZXRob2RzIGFyZSBkaXJlY3RseSBnaXZl
biBhcyBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIFdLVGV4dENoZWNrZXIncyBjbGllbnQuCisgICAg
ICAgIFRoZWlyIHJlYXNvbiBpcyB0byBjaG9vc2UgYmV0d2VlbiBXZWJLaXQncyBzcGVsbGluZyBp
bXBsZW1lbnRhdGlvbiBhbmQgY2xpZW50J3Mgb25lcy4KKworICAgICAgICAoV2ViS2l0OjpXZWJL
aXRUZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6dXBk
YXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFRoZSBtZXRob2RzIGFyZSB1c2Vk
IGJ5IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHAgZmlsZSBhbmQgYWxsb3cgdG8gZG8gbm90
CisgICAgICAgIGV4cG9zZSAnbV90ZXh0Q2hlY2tlckVuY2hhbnQnLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmlu
ZXMgY2xhc3Mgd2hpY2ggY2hvb3NlcyBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9uIG9m
IHNwZWxsaW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KKworICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdFRleHRDaGVja2VyKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNr
ZXI6OmV3a1RleHRDaGVja2VyKToKKyAgICAgICAgUmV0dXJucyBzdHJ1Y3QgdGhhdCBrZWVwcyBj
bGllbnQncyBjYWxsYmFja3MuCisKKyAgICAgICAgKEVuY2hhbnRIZWxwZXIpOgorICAgICAgICBL
ZWVwcyBpbmZvcm1hdGlvbiBiYXNlZCBvbiBUZXh0Q2hlY2tlckVuY2hhbnQgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAg
ICAgIChfRXdrX0NvbnRleHQ6Ol9Fd2tfQ29udGV4dCk6CisgICAgICAgIEluaXRpYWx6ZXMgc3Bl
bGxjaGVja2VyIGZlYXR1cmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4
dF9jaGVja2VyLmNwcDogQWRkZWQuCisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX2NsaWVudF9h
dHRhY2gpOgorICAgICAgICBTZXRzIFdLVGV4dENoZWNrZXIgY2xpZW50IGFuZCByZWdpc3RlcnMg
V2ViS2l0VGV4dENoZWNrZXIncyBjYWxsYmFja3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdGV4dF9jaGVja2VyLmg6IEFkZGVkLgorICAgICAgICBEZWZpbmVzIEFQSSB0byBz
ZXQgY2xpZW50J3Mgc3BlbGxpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChf
RXdrX1RleHRfQ2hlY2tlcik6CisgICAgICAgIERlZmluZXMgc3RydWN0IHdpdGggY2xpZW50J3Mg
Y2FsbGJhY2tzIHJlc3BvbmlzYmxlIGZvciBzcGVsbGluZy4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHA6IEFkZGVkLgorICAgICAgICAo
X2lkbGVyQ29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VkKToKKyAgICAgICAgKF9pZGxlckdy
YW1tYXJDaGVja2luZ0NoYW5nZWQpOgorICAgICAgICAoX2lkbGVyU2V0U3BlbGxDaGVja2luZ0xh
bmd1YWdlcyk6CisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBpcyBub3RpZmllZCBhYm91dCBzcGVs
bGluZyBzZXR0aW5ncyBjaGFuZ2UgKHRoZXkgbWF5IGJlIGNoYW5nZWQKKyAgICAgICAgdGhyb3Vn
aCBjb250ZXh0IG1lbnUgb3B0aW9uKSBvbiBpZGxlciB0byBkbyBub3QgYmxvY2sgV2ViS2l0Lgor
CisgICAgICAgIChfZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlc19zZXQpOgorICAgICAgICBIZWxwZXIgdGhhdCBjb252ZXJ0cyBzdHJpbmcgd2l0aCBsYW5n
dWFnZXMgdmFsdWVzIHRvIHRoZSBjb252ZW5pZW50IHZlY3Rvci4KKworICAgICAgICAoZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9z
ZXQpOgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2dyYW1tYXJfY2hlY2tpbmdf
Y2hhbmdlZF9jYl9zZXQpOgorICAgICAgICBTZXRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgdXNl
ZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuIHRoZSBzcGVsbGluZyBzZXR0aW5ncworICAgICAg
ICB3ZXJlIGNoYW5nZWQgYnkgV2ViS2l0LgorCisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KToKKyAgICAgICAgKGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19z
ZXQpOgorICAgICAgICBBUEkgdG8gc2V0L2dldCB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2lu
Zy4KKworICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2No
ZWNraW5nX2dldCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dy
YW1tYXJfY2hlY2tpbmdfc2V0KToKKyAgICAgICAgQVBJIHRvIHNldC9nZXQgdGhlIGdyYW1tYXIg
Y2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXNfc2V0KToKKyAgICAgICAgU2V0cyBsYW5ndWFnZXMgdG8gdXNlIGJ5IFdl
YktpdCBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBFbmNoYW50IGxpYnJhcnkuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaDogQWRkZWQuCisg
ICAgICAgIEFkZHMgQVBJIGZvciBtYW5pcHVsYXRpbmcgc3BlbGwgY2hlY2tlciBmZWF0dXJlLgor
CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjpzdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2Vy
Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6OlRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5n
RW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1bmlx
dWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNsb3Nl
U3BlbGxEb2N1bWVudFdpdGhUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hl
Y2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNr
R3JhbW1hck9mU3RyaW5nKTogUmVtb3ZlZCBXZWJDb3JlIG5hbWFzcGFjZSBhcyBpdCdzIGFscmVh
ZHkgZGVmaW5lZCBmb3IgdGhlIHdob2xlIGZpbGUuCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6
OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICBUaG9zZSBtZXRob2RzIGNhbGwgV0tUZXh0Q2hlY2tl
ciBjbGllbnQgbWV0aG9kcy4KKwogMjAxMi0wOS0wMyAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlz
dG9waGUuZHVtZXpAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gU2tpcCBFV0syVW5p
dFRlc3RCYXNlLmV3a19jb29raWVfbWFuYWdlcl9wZXJtYW5lbnRfc3RvcmFnZSBBUEkgdGVzdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA1NmNhMGMxLi42OTQ3YmIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZQpAQCAtNDcsNiArNDcsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NP
VVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9OZXR3b3JrSW5mb1Byb3ZpZGVyLmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL1ZpYnJhdGlvblByb3ZpZGVyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRl
eHRDaGVja2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlz
dC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5j
cHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTYwLDYgKzYxLDgg
QEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X21haW4uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fcG9saWN5X2Rl
Y2lzaW9uLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uY3Bw
CisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKKyAgICBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3VybF9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxf
cmVzcG9uc2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVz
dC5jcHAKQEAgLTEyMyw2ICsxMjYsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX01FU1NBR0VTX0lO
X0ZJTEVTCiBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9L2xsaW50IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9l
ZmwiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvZW5jaGFudCIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3ZnL2dyYXBoaWNz
IgpAQCAtMjE0LDYgKzIxOCw4IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW4uaCIKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0
aW9uX3BvbGljeV9kZWNpc2lvbi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5oIgorICAgICIke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oIgor
ICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3JlcXVlc3QuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuaCIKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfc2No
ZW1lX3JlcXVlc3QuaCIKQEAgLTMxMSwzICszMTcsOCBAQCBJRiAoRU5BQkxFX0lOU1BFQ1RPUikK
ICAgICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTiAiKi5naWYiCiAgICAgICAgICAgICAgICAg
ICAgICAgIFBBVFRFUk4gIioucG5nIikKIEVORElGICgpCisKK0lGIChFTkFCTEVfU1BFTExDSEVD
SykKKyAgICBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMgJHtFTkNIQU5U
X0lOQ0xVREVfRElSU30pCisgICAgTElTVChBUFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMgJHtFTkNI
QU5UX0xJQlJBUklFU30pCitFTkRJRigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRVdlYktpdDIuaAppbmRleCBmMWMwOTBlLi4xNjc5ZGNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRl
ICJld2tfbWFpbi5oIgogI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbi5o
IgogI2luY2x1ZGUgImV3a19wb3B1cF9tZW51X2l0ZW0uaCIKKyNpbmNsdWRlICJld2tfdGV4dF9j
aGVja2VyLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgiCiAjaW5jbHVk
ZSAiZXdrX3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgogI2lu
Y2x1ZGUgImV3a191cmxfc2NoZW1lX3JlcXVlc3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWEyYTUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCkBAIC0wLDAg
KzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFRleHRDaGVja2VyLmgiCisKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRl
ICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldl
YlN0cmluZy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oIgorI2luY2x1
ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gSW5pdGlhbGl6ZSBjbGllbnQn
cyBmdW5jdGlvbnMgdG8gQGMgMCB0byBiZSBzdXJlIHRoYXQgdGhleSBhcmUgbm90IGRlZmluZWQu
CitFd2tfVGV4dF9DaGVja2VyIFdlYktpdFRleHRDaGVja2VyOjptX2V3a1RleHRDaGVja2VyIHsK
KyAgICAwLCAvLyB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldAorICAgIDAsIC8vIHVuaXF1
ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UKKyAgICAwLCAvLyBzdHJpbmdfc3BlbGxpbmdfY2hl
Y2sKKyAgICAvLyAwLCBzdHJpbmdfZ3JhbW1hcl9jaGVjaworICAgIDAsIC8vIHVpX3NwZWxsaW5n
X3N0YXR1c19nZXQKKyAgICAwLCAvLyB1aV90b2dnbGVfc3BlbGxpbmdfc3RhdHVzX2dldAorICAg
IDAsIC8vIHVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGUKKyAgICAvLyAwLCB1aV9z
cGVsbGluZ19ncmFtbWFyX3N0cmluZ191cGRhdGUKKyAgICAwLCAvLyB3b3JkX2d1ZXNzZXNfZ2V0
CisgICAgMCwgLy8gd29yZF9sZWFybgorICAgIDAgLy8gd29yZF9pZ25vcmUKK307CisKK093blB0
cjxXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ+IG1fdGV4dENoZWNrZXJFbmNoYW50ID0gV2Vi
Q29yZTo6VGV4dENoZWNrZXJFbmNoYW50OjpjcmVhdGUoKTsKKworYm9vbCBXZWJLaXRUZXh0Q2hl
Y2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoY29uc3Qgdm9pZCopCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBub3QgY2FsbGVkIGJ5
IFdlYktpdDIvV2ViQ29yZS4gSnVzdCBrZWVwIGl0IGZvciBBUEkgY29tcGF0aWJpbGl0eS4KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNrZXI6OmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCk7
Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqKQoreworICAgIGV3a190ZXh0X2NoZWNr
ZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoZW5hYmxlZCk7
Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNrZXI6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChj
b25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJs
ZV9ncmFtbWFyX2NoZWNraW5nX2dldCgpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpz
ZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCopCit7Cisg
ICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldChl
bmFibGVkKTsKK30KKwordWludDY0X3QgV2ViS2l0VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9j
dW1lbnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChtX2V3a1Rl
eHRDaGVja2VyLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KQorICAgICAgICByZXR1cm4g
bV9ld2tUZXh0Q2hlY2tlci51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCh0b0ltcGwocGFn
ZSktPnZpZXdXaWRnZXQoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJLaXRUZXh0
Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZv
aWQqKQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90
YWdfY2xvc2UpCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIudW5pcXVlX3NwZWxsX2RvY3VtZW50
X3RhZ19jbG9zZSh0YWcpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpjaGVja1NwZWxs
aW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCAq
KQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnN0cmluZ19zcGVsbGluZ19jaGVjaykKKyAg
ICAgICAgbV9ld2tUZXh0Q2hlY2tlci5zdHJpbmdfc3BlbGxpbmdfY2hlY2sodGFnLCB0b0ltcGwo
dGV4dCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3Nw
ZWxsaW5nTGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIG1fdGV4dENoZWNrZXJFbmNoYW50LT5j
aGVja1NwZWxsaW5nT2ZTdHJpbmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxsaW5n
TG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNr
ZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKHVpbnQ2NF90LCBXS1N0cmluZ1JlZiwgV0tBcnJheVJl
ZiosIGludDMyX3QqLCBpbnQzMl90KiwgY29uc3Qgdm9pZCopCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAvLyBGSVhNRTogY2FsbCBjbGllbnQncyBmdW5jdGlvbi4KK30KKworYm9vbCBX
ZWJLaXRUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZyhjb25zdCB2b2lkKikKK3sKKyAg
ICBpZiAobV9ld2tUZXh0Q2hlY2tlci51aV9zcGVsbGluZ19zdGF0dXNfZ2V0KQorICAgICAgICBy
ZXR1cm4gbV9ld2tUZXh0Q2hlY2tlci51aV9zcGVsbGluZ19zdGF0dXNfZ2V0KCk7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5n
VUlJc1Nob3dpbmcoY29uc3Qgdm9pZCopCit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNrZXIudWlf
dG9nZ2xlX3NwZWxsaW5nX3N0YXR1c19nZXQpCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIudWlf
dG9nZ2xlX3NwZWxsaW5nX3N0YXR1c19nZXQoKTsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAobV9ld2tUZXh0
Q2hlY2tlci51aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRlKQorICAgICAgICBtX2V3
a1RleHRDaGVja2VyLnVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGUodGFnLCB0b0lt
cGwobWlzc3BlbGxlZFdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBX
ZWJLaXRUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHVpbnQ2
NF90LCBXS1N0cmluZ1JlZiwgV0tHcmFtbWFyRGV0YWlsUmVmLCBjb25zdCB2b2lkKikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEZJWE1FOiBjYWxsIGNsaWVudCdzIGZ1bmN0aW9u
LgorfQorCitXS0FycmF5UmVmIFdlYktpdFRleHRDaGVja2VyOjpndWVzc2VzRm9yV29yZCh1aW50
NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIFdLTXV0YWJs
ZUFycmF5UmVmIHN1Z2dlc3Rpb25zRm9yV29yZCA9IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7CisK
KyAgICBpZiAobV9ld2tUZXh0Q2hlY2tlci53b3JkX2d1ZXNzZXNfZ2V0KSB7CisgICAgICAgIEVp
bmFfTGlzdCogbGlzdCA9IG1fZXdrVGV4dENoZWNrZXIud29yZF9ndWVzc2VzX2dldCh0YWcsIHRv
SW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHZvaWQqIGl0ZW07
CisKKyAgICAgICAgRUlOQV9MSVNUX0ZSRUUobGlzdCwgaXRlbSkgeworICAgICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoc3RhdGljX2Nhc3Q8Y2hhcio+KGl0ZW0pKSk7CisgICAgICAgICAgICBX
S0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOwor
ICAgICAgICAgICAgZnJlZShpdGVtKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IG1fdGV4dENoZWNrZXJFbmNoYW50LT5nZXRHdWVz
c2VzRm9yV29yZCh0b0ltcGwod29yZCktPnN0cmluZygpKTsKKworICAgICAgICBmb3IgKFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3Vlc3Nlcy5iZWdpbigpOyBpdGVyICE9
IGd1ZXNzZXMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
aXRlci0+dXRmOCgpLmRhdGEoKSkpOworICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oc3Vn
Z2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9uLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBzdWdnZXN0aW9uc0ZvcldvcmQ7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNr
ZXI6OmxlYXJuV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQq
KQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLndvcmRfbGVhcm4pCisgICAgICAgIG1fZXdr
VGV4dENoZWNrZXIud29yZF9sZWFybih0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgZWxzZQorICAgICAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+bGVhcm5X
b3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2Vy
OjppZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCop
Cit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNrZXIud29yZF9pZ25vcmUpCisgICAgICAgIG1fZXdr
VGV4dENoZWNrZXIud29yZF9pZ25vcmUodGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmlnbm9y
ZVdvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNr
ZXI6OkVuY2hhbnRIZWxwZXI6OmFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCkKK3sKKyAgICBy
ZXR1cm4gbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCk7
Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OkVuY2hhbnRIZWxwZXI6OnVwZGF0ZVNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcykKK3sKKyAg
ICBpZiAoIW1fdGV4dENoZWNrZXJFbmNoYW50LT5hcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCgp
KQorICAgICAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1
YWdlcyhsYW5ndWFnZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShTUEVMTENIRUNLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uY2Q4ZThkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0VGV4dENo
ZWNrZXJfaAorI2RlZmluZSBXZWJLaXRUZXh0Q2hlY2tlcl9oCisKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKworI2luY2x1ZGUgIlRleHRDaGVja2VyRW5jaGFudC5oIgorI2luY2x1ZGUgIldLQXJy
YXkuaCIKKyNpbmNsdWRlICJXS1BhZ2UuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5oIgorI2luY2x1
ZGUgImV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Ly8gQ2xhc3MgY2hvb3NlcyBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9uIG9mIHNwZWxs
aW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KK2NsYXNzIFdlYktpdFRleHRDaGVja2VyIHsKK3B1Ymxp
YzoKKworICAgIC8vIENhbGxiYWNrcyByZXF1aXJlZCBieSBXS1RleHRDaGVja2VyLgorICAgIHN0
YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworICAgIHN0YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldENvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOworICAgIHN0YXRpYyBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgdWlu
dDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1
aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCisgICAgc3RhdGljIHZvaWQg
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50
MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGNoZWNrR3JhbW1hck9mU3Ry
aW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgV0tBcnJheVJlZiogZ3JhbW1hckRl
dGFpbHMsIGludDMyX3QqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCogYmFkR3JhbW1hckxl
bmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgYm9vbCBzcGVsbGlu
Z1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3Rh
dGljIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh1aW50NjRfdCB0YWcs
IFdLU3RyaW5nUmVmIG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAg
ICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3Qg
dGFnLCBXS1N0cmluZ1JlZiBiYWRHcmFtbWFyUGhyYXNlLCBXS0dyYW1tYXJEZXRhaWxSZWYgZ3Jh
bW1hckRldGFpbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgV0tBcnJh
eVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGxlYXJuV29yZCh1aW50NjRfdCB0
YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRp
YyB2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKKworICAgIC8vIEFjY2VzcyB0byBjbGllbnQncyBjYWxsYmFja3Mu
CisgICAgc3RhdGljIEV3a19UZXh0X0NoZWNrZXIqIGV3a1RleHRDaGVja2VyKCkgeyByZXR1cm4g
Jm1fZXdrVGV4dENoZWNrZXI7IH0KKworICAgIGNsYXNzIEVuY2hhbnRIZWxwZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIGJvb2wgYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKTsK
KyAgICAgICAgc3RhdGljIHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKTsKKyAgICB9OworCitwcml2YXRlOgorICAgIHN0YXRp
YyBFd2tfVGV4dF9DaGVja2VyIG1fZXdrVGV4dENoZWNrZXI7CisKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisjZW5kaWYgLy8gV2Vi
S2l0VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwCmluZGV4IDYwYzc5ZTEuLjBjZDY2MzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTM2LDYgKzM2LDEw
IEBACiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNpbmNs
dWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogCkBAIC05OCw2ICsxMDIsMTIgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAj
ZW5kaWYKICAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9hdHRhY2go
dGhpcyk7CiAgICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2godGhpcyk7
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgICAgIGV3a190ZXh0X2NoZWNrZXJfY2xpZW50
X2F0dGFjaCgpOworICAgICAgICBpZiAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpKQorICAgICAgICAgICAgZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7CisjZW5kaWYKKwog
ICAgIH0KIAogICAgIH5fRXdrX0NvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44M2M2YzEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKQEAgLTAsMCArMSw5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCisKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0
VGV4dENoZWNrZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworI2RlZmluZSBFV0tf
VEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05BTUUsIE5BTUUpICBcCit2b2lkIGV3a190
ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSBjYikgICAgIFwKK3sgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFdl
YktpdFRleHRDaGVja2VyOjpld2tUZXh0Q2hlY2tlcigpLT5OQU1FID0gY2I7ICAgXAorfQorCisv
KioKKyAqIEF0dGFjaGVzIHNwZWxsY2hlY2tlciBmZWF0dXJlLgorICoKKyAqIEBpbnRlcm5hbAor
ICoKKyAqIFRoZSBkZWZhdWx0IHNwZWxsY2hlY2tlciBmZWF0dXJlIGlzIGJhc2VkIG9uIEVuY2hh
bnQgbGlicmFyeS4KKyAqIENsaWVudCBtYXkgdXNlIG93biBpbXBsZW1lbnRhdGlvbiBvZiBzcGVs
bGNoZWNrZXIgcHJldmlvdXNseSBzZXQKKyAqIHRocm91Z2ggdGhlIGNhbGxiYWNrIGZ1bmN0aW9u
cy4KKyAqLwordm9pZCBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9hdHRhY2goKQoreworICAgIHN0
YXRpYyBib29sIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IGZhbHNlOworICAgIGlm
IChkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IFdLVGV4dENoZWNrZXJDbGllbnQgdGV4dENoZWNrZXJDbGllbnQgeworICAgICAgICBrV0tUZXh0
Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICAwLCAvLyBjbGllbnRJbmZvCisg
ICAgICAgIFdlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dl
ZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6aXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5n
RW5hYmxlZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRU
YWcsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFn
LAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nLAorICAg
ICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcsCisgICAgICAgIFdl
YktpdFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nLAorICAgICAgICBXZWJLaXRUZXh0
Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZywKKyAgICAgICAgV2ViS2l0VGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQsCisgICAgICAgIFdlYktp
dFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcsCisgICAgICAg
IFdlYktpdFRleHRDaGVja2VyOjpndWVzc2VzRm9yV29yZCwKKyAgICAgICAgV2ViS2l0VGV4dENo
ZWNrZXI6OmxlYXJuV29yZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQK
KyAgICB9OworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRleHRDaGVja2VyQ2xpZW50KTsK
KworICAgIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IHRydWU7Cit9CisKKyNlbHNl
CisKKy8vIERlZmluZXMgYW4gZW1wdHkgQVBJIHRvIGRvIG5vdCBicmVhayBidWlsZC4KKyNkZWZp
bmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBOQU1FKSAgXAordm9p
ZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUpICAgICAgICBcCit7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K30KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKworRVdLX1RFWFRfQ0hFQ0tFUl9DQUxM
QkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldCwg
dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UsIHVu
aXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjaywgc3RyaW5nX3NwZWxs
aW5nX2NoZWNrKQorLy8gRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hl
Y2tlcl9TdHJpbmdfR3JhbW1hcl9DaGVjaywgc3RyaW5nX2dyYW1tYXJfY2hlY2spCitFV0tfVEVY
VF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1
c19HZXQsIHVpX3NwZWxsaW5nX3N0YXR1c19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1VJX1RvZ2dsZV9TcGVsbGluZ19TdGF0dXNfR2V0LCB1aV90
b2dnbGVfc3BlbGxpbmdfc3RhdHVzX2dldCkKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VU
KEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3BlbGxlZF9Xb3JkX1VwZGF0ZSwgdWlf
c3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZSkKKy8vIEVXS19URVhUX0NIRUNLRVJfQ0FM
TEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfR3JhbW1hcl9TdHJpbmdfVXBk
YXRlLCB1aV9zcGVsbGluZ19ncmFtbWFyX3N0cmluZ191cGRhdGUpCitFV0tfVEVYVF9DSEVDS0VS
X0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXQsIHdvcmRfZ3Vl
c3Nlc19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2Vy
X1dvcmRfTGVhcm4sIHdvcmRfbGVhcm4pCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChF
d2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlLCB3b3JkX2lnbm9yZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjE5MmYzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oCkBAIC0wLDAg
KzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
LyoqCisgKiBAZmlsZSBld2tfdGV4dF9jaGVja2VyLmgKKyAqIEBicmllZiBQcm92aWRlcyBBUEkg
dG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRp
b24uCisgKgorICogVGhlcmUgaXMgb25lIHNwZWxsY2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0
aW9uIGFuZCBpdCdzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKiBJdCBhbGxvd3MgdG8gY2hlY2sg
c3BlbGxpbmcgaW4gdGhlIGVkaXRhYmxlIGFyZWFzLgorICogSWYgYXBwbGljYXRpb24gd2FudHMg
dG8gZW5hYmxlIHRoZSBmZWF0dXJlLCBBUEkgZnJvbSBAYSBld2tfdGV4dF9jaGVja2VyX3NldHRp
bmcuaAorICogc2hvdWxkIGJlIHVzZWQuCisgKgorICogVGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxs
Y2hlY2tlciBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5Lgor
ICogSXQgZG9lc24ndCBlbnN1cmUgZ3JhbW1hciBjaGVja2luZy4gQXBwbGljYXRpb24gaXMgYWJs
ZSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQKKyAqIFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVt
ZW50YXRpb24gYnkgZGVmaW5pbmcgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZwor
ICogYXBwcm9wcmlhdGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorICovCisKKyNpZm5kZWYgZXdrX3Rl
eHRfY2hlY2tlcl9oCisjZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfaAorCisjaW5jbHVkZSA8RXZh
cy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVk
ZWYgdWludDY0X3QgKCpFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdf
R2V0KShjb25zdCBFdmFzX09iamVjdCAqbyk7Cit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVj
a2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UpKHVpbnQ2NF90IHRhZyk7Cit0eXBl
ZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjaykodWludDY0
X3QgdGFnLCBjb25zdCBjaGFyICp0ZXh0LCBpbnQzMl90ICptaXNzcGVsbGluZ19sb2NhdGlvbiwg
aW50MzJfdCAqbWlzc3BlbGxpbmdfbGVuZ3RoKTsKKy8vIHR5cGVkZWYgdm9pZCAoKkV3a19UZXh0
X0NoZWNrZXJfU3RyaW5nX0dyYW1tYXJfQ2hlY2spKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAq
dGV4dCwgRWluYV9MaXN0ICoqbGlzdCwgaW50MzJfdCAqYmFkX2dyYW1tYXJfbG9jYXRpb24sIGlu
dDMyX3QgKmJhZF9ncmFtbWFyX2xlbmd0aCk7Cit0eXBlZGVmIEVpbmFfQm9vbCAoKkV3a19UZXh0
X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX0dldCkodm9pZCk7Cit0eXBlZGVmIHZvaWQgKCpF
d2tfVGV4dF9DaGVja2VyX1VJX1RvZ2dsZV9TcGVsbGluZ19TdGF0dXNfR2V0KSh2b2lkKTsKK3R5
cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3BlbGxlZF9Xb3Jk
X1VwZGF0ZSkodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICptaXNzcGVsbGVkX3dvcmQpOworLy8g
dHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19HcmFtbWFyX1N0cmlu
Z19VcGRhdGUpKHVpbnQ2NF90IHRhZywgRXdrX0dyYW1tYXJfRGV0YWlsIGJhZF9ncmFtbWFyX3Bo
cmFzZSwgRXdrX0dyYW1tYXJfRGV0YWlsIGdyYW1tYXJfZGV0YWlsKTsKK3R5cGVkZWYgRWluYV9M
aXN0ICooKkV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldCkodWludDY0X3QgdGFnLCBj
b25zdCBjaGFyICp3b3JkKTsKK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfV29yZF9M
ZWFybikodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp3b3JkKTsKK3R5cGVkZWYgdm9pZCAoKkV3
a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29y
ZCk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhIHVuaXF1ZSBz
cGVsbCBkb2N1bWVudCB0YWcuCisgKgorICogVGhpcyBjYWxsYmFjayB3aWxsIHJldHVybiBhIHRh
ZyAoaWRlbnRpZmllcikgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUuCisgKiBVbmlx
dWUgdGFncyBoZWxwIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBvdGhlciBvYmplY3RzIHRoYXQg
YXJlIGNoZWNrZWQgZm9yIHNwZWxsaW5nIG1pc3Rha2VzLgorICoKKyAqIEBzZWUgZXdrX3RleHRf
Y2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlX2NiX3NldAorICoKKyAqIEBw
YXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgMCB0byByZXN0b3JlIHRoZSBkZWZh
dWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3Rl
eHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldF9jYl9zZXQoRXdrX1RleHRf
Q2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldCBjYik7CisKKy8qKgorICogU2V0
cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNsb3NlIGEgdW5pcXVlIHNwZWxsIGRvY3VtZW50IHRh
Zy4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIHdpbGwgbm90aWZ5IHRoZSByZWNlaXZlciB0aGF0IHRo
ZSB1c2VyIGhhcyBmaW5pc2hlZCB3aXRoIHRoZSB0YWdnZWQgZG9jdW1lbnQuCisgKgorICogQHNl
ZSBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0X2NiX3NldAor
ICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgMCB0byByZXN0b3Jl
IHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZv
aWQgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlX2NiX3Nl
dChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UgY2IpOwor
CisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZWFyY2ggZm9yIGEgbWlzc3Bl
bGxlZCB3b3JkIGluIHRoZSBnaXZlbiBzdHJpbmcuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNh
bGxiYWNrIHRvIHNldCBvciBAYyAwIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxi
YWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3N0cmlu
Z19zcGVsbGluZ19jaGVja19jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdf
Q2hlY2sgY2IpOworCisvLyBFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfZ3JhbW1h
cl9jaGVja19jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfR3JhbW1hcl9DaGVjayBjYik7
CisKK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VpX3NwZWxsaW5nX3N0YXR1c19nZXRfY2Jf
c2V0KEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX0dldCBjYik7CitFQVBJIHZv
aWQgZXdrX3RleHRfY2hlY2tlcl91aV90b2dnbGVfc3BlbGxpbmdfc3RhdHVzX2dldF9jYl9zZXQo
RXdrX1RleHRfQ2hlY2tlcl9VSV9Ub2dnbGVfU3BlbGxpbmdfU3RhdHVzX0dldCBjYik7CitFQVBJ
IHZvaWQgZXdrX3RleHRfY2hlY2tlcl91aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRl
X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX01pc3NwZWxsZWRfV29yZF9VcGRh
dGUgY2IpOworLy8gRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfdWlfc3BlbGxpbmdfZ3JhbW1h
cl9zdHJpbmdfdXBkYXRlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX0dyYW1t
YXJfU3RyaW5nX1VwZGF0ZSBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9u
IHRvIGdldCBhbiBhcnJheSBvZiBzdWdnZXN0ZWQgc3BlbGxpbmdzIGZvciBhIG1pc3NwZWxsZWQg
d29yZC4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBkeW5hbWlj
YWxseSBhbGxvY2F0ZWQgc3RyaW5ncyAoYXMgY2hhciopIGFuZAorICogY2FsbGVyIGlzIHJlc3Bv
bnNpYmxlIGZvciBkZXN0cm95aW5nIHRoZW0uCisgKgorICogQHNlZSBFSU5BX0xJU1RfRlJFRS4K
KyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9y
ZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2
b2lkIGV3a190ZXh0X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9jYl9zZXQoRXdrX1RleHRfQ2hl
Y2tlcl9Xb3JkX0d1ZXNzZXNfR2V0IGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVu
Y3Rpb24gdG8gYWRkIHRoZSB3b3JkIHRvIHRoZSBzcGVsbCBjaGVja2VyIGRpY3Rpb25hcnkuCisg
KgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyAwIHRvIHJlc3RvcmUg
dGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9p
ZCBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29y
ZF9MZWFybiBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRlbGwg
dGhlIHNwZWxsIGNoZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4gd29yZC4KKyAqCisgKiBAcGFyYW0g
Y2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBX
ZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2No
ZWNrZXJfd29yZF9pZ25vcmVfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUgY2Ip
OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a190ZXh0X2No
ZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3RleHRfY2hlY2tlcl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yMWI5ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgKQEAgLTAsMCArMSw1MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfcHJp
dmF0ZV9oCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVj
a2VyLmgiCisKKy8qKgorICogQGJyaWVmIFN0cnVjdHVyZSB0aGF0IGtlZXBzIGNsaWVudCdzIGNh
bGxiYWNrIGZ1bmN0aW9ucy4KKyAqCisgKiBAaW50ZXJuYWwKKyAqLworc3RydWN0IF9Fd2tfVGV4
dF9DaGVja2VyIHsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9U
YWdfR2V0IHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0OworICAgIEV3a19UZXh0X0NoZWNr
ZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19DbG9zZSB1bmlxdWVfc3BlbGxfZG9jdW1lbnRf
dGFnX2Nsb3NlOworICAgIEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrIHN0
cmluZ19zcGVsbGluZ19jaGVjazsKKyAgICAvLyBFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19HcmFt
bWFyX0NoZWNrIHN0cmluZ19ncmFtbWFyX2NoZWNrOworICAgIEV3a19UZXh0X0NoZWNrZXJfVUlf
U3BlbGxpbmdfU3RhdHVzX0dldCB1aV9zcGVsbGluZ19zdGF0dXNfZ2V0OworICAgIEV3a19UZXh0
X0NoZWNrZXJfVUlfVG9nZ2xlX1NwZWxsaW5nX1N0YXR1c19HZXQgdWlfdG9nZ2xlX3NwZWxsaW5n
X3N0YXR1c19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19NaXNzcGVsbGVk
X1dvcmRfVXBkYXRlIHVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGU7CisgICAgLy8g
RXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19HcmFtbWFyX1N0cmluZ19VcGRhdGUgdWlfc3Bl
bGxpbmdfZ3JhbW1hcl9zdHJpbmdfdXBkYXRlOworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9H
dWVzc2VzX0dldCB3b3JkX2d1ZXNzZXNfZ2V0OworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9M
ZWFybiB3b3JkX2xlYXJuOworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUgd29yZF9p
Z25vcmU7Cit9OwordHlwZWRlZiBfRXdrX1RleHRfQ2hlY2tlciBFd2tfVGV4dF9DaGVja2VyOwor
CisvLyBNYWtlcyBpdCB2aXNpYmxlIGZvciBXVFIuCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tl
cl9jbGllbnRfYXR0YWNoKCk7CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKyNlbmRp
ZiAvLyBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3NzM1MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJf
c2V0dGluZy5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nLmgiCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRl
ICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKyNpbmNs
dWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIHN0cnVj
dCB7CisgICAgYm9vbCBlbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZzoxOworICAgIGJvb2wg
ZW5hYmxlR3JhbW1hckNoZWNraW5nOjE7CisgICAgc3RydWN0IHsKKyAgICAgICAgRXdrX1RleHRf
Q2hlY2tlcl9TZXR0aW5nX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlZCBjb250aW51
b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQ7CisgICAgICAgIEV3a19UZXh0X0NoZWNrZXJfU2V0dGlu
Z19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQgZ3JhbW1hckNoZWNraW5nQ2hhbmdlZDsKKyAgICB9
IHNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzOworICAgIFZlY3RvcjxTdHJpbmc+IHNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXM7Cit9IGV3a1RleHRDaGVja2VyU2V0dGluZyA9IHsgZmFsc2UsIGZhbHNlLCB7
MCwgMH0sIFZlY3RvcjxTdHJpbmc+KCl9OworCitzdGF0aWMgRWluYV9Cb29sIF9pZGxlckNvbnRp
bnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCh2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNr
ZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5n
Q2hhbmdlZCkKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2Fs
bGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCgKKyAgICAgICAgICAgIGV3a1Rl
eHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZyk7CisKKyAgICBy
ZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9pZGxl
ckdyYW1tYXJDaGVja2luZ0NoYW5nZWQodm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2Vy
U2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKQor
ICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3MuZ3Jh
bW1hckNoZWNraW5nQ2hhbmdlZCgKKyAgICAgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5l
bmFibGVHcmFtbWFyQ2hlY2tpbmcpOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNF
TDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfaWRsZXJTZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KHZvaWQqKQoreworICAgIC8vIFRPRE86IENvbnNpZGVyIHRvIGRlbGVnYXRlIGNhbGxpbmcgb2Yg
dGhpcyBtZXRob2QgaW4gV2ViUHJvY2VzcyB0byBkbyBub3QgZGVsYXkvYmxvY2sgVUlQcm9jZXNz
LgorICAgIFdlYktpdFRleHRDaGVja2VyOjpFbmNoYW50SGVscGVyOjp1cGRhdGVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKGV3a1RleHRDaGVja2VyU2V0dGluZy5zcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KTsKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2b2lkIHN0YXRpYyBf
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29u
c3QgVmVjdG9yPFN0cmluZz4mIG5ld0xhbmd1YWdlcykKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBs
YW5ndWFnZXMgPSBuZXdMYW5ndWFnZXM7CisgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMuc3dhcChsYW5ndWFnZXMpOworICAgIGVjb3JlX2lkbGVyX2FkZChf
aWRsZXJTZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzLCAwKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
U1BFTExDSEVDSykKKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfY29udGludW91c19z
cGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdfQ29u
dGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VkIGNhbGxiYWNrKQoreworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxi
YWNrcy5jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQgPSBjYWxsYmFjazsKKyNlbmRpZgor
fQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19ncmFtbWFyX2NoZWNraW5nX2NoYW5n
ZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19HcmFtbWFyX0NoZWNraW5nX0NoYW5n
ZWQgY2FsbGJhY2spCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgZXdrVGV4dENoZWNr
ZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmdyYW1tYXJDaGVja2luZ0NoYW5nZWQg
PSBjYWxsYmFjazsKKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpCit7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250
aW51b3VzU3BlbGxDaGVja2luZzsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9
CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX3NldChFaW5hX0Jvb2wgZW5hYmxlKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIGVuYWJsZSA9ICEhZW5hYmxlOworICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmcu
ZW5hYmxlQ29udGludW91c1NwZWxsQ2hlY2tpbmcgIT0gZW5hYmxlKSB7CisgICAgICAgIGV3a1Rl
eHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZyA9IGVuYWJsZTsK
KworICAgICAgICBXS1RleHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3Rh
dGVDaGFuZ2VkKGVuYWJsZSk7CisKKyAgICAgICAgLy8gU2V0cyBkZWZhdWx0IGxhbmd1YWdlIGlm
IHVzZXIgZGlkbid0IHNwZWNpZnkgYW55LgorICAgICAgICBpZiAoZW5hYmxlICYmICFXZWJLaXRU
ZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkK
KyAgICAgICAgICAgIF9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX3NldChWZWN0b3I8U3RyaW5nPigpKTsKKworICAgICAgICBpZiAoZXdrVGV4dENoZWNr
ZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5n
Q2hhbmdlZCkKKyAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChfaWRsZXJDb250aW51b3VzU3Bl
bGxDaGVja2luZ0NoYW5nZWQsIDApOworICAgIH0KKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX2dldCgpCit7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyU2V0dGluZy5l
bmFibGVHcmFtbWFyQ2hlY2tpbmc7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
fQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9jaGVja2lu
Z19zZXQoRWluYV9Cb29sIGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBl
bmFibGUgPSAhIWVuYWJsZTsKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5nLmVuYWJsZUdy
YW1tYXJDaGVja2luZyAhPSBlbmFibGUpIHsKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5n
LmVuYWJsZUdyYW1tYXJDaGVja2luZyA9IGVuYWJsZTsKKworICAgICAgICBXS1RleHRDaGVja2Vy
R3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGUpOworCisgICAgICAgIGlm
IChld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3MuZ3JhbW1hckNo
ZWNraW5nQ2hhbmdlZCkKKyAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChfaWRsZXJHcmFtbWFy
Q2hlY2tpbmdDaGFuZ2VkLCAwKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBld2tfdGV4dF9j
aGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChjb25zdCBjaGFyKiBs
YW5ndWFnZXMpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgVmVjdG9yPFN0cmluZz4g
bmV3TGFuZ3VhZ2VzOworICAgIFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2VzKS5zcGxpdChzdGF0
aWNfY2FzdDxVQ2hhcj4oJywnKSwgbmV3TGFuZ3VhZ2VzKTsKKworICAgIF9ld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChuZXdMYW5ndWFnZXMpOwor
I2VuZGlmCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjBkY2Q2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaApAQCAtMCwwICsxLDEyNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKy8qKgorICog
QGZpbGUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgKKyAqIEBicmllZiBBUEkgZm9yIG1hbmlw
dWxhdGluZyBzcGVsbCBjaGVja2VyIGZlYXR1cmUuCisgKi8KKworI2lmbmRlZiBld2tfdGV4dF9j
aGVja2VyX3NldHRpbmdfaAorI2RlZmluZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfaAorCisj
aW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2Vu
ZGlmCisKK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19Db250aW51b3Vz
X1NwZWxsX0NoZWNraW5nX0NoYW5nZWQpKEVpbmFfQm9vbCBlbmFibGUpOwordHlwZWRlZiB2b2lk
ICgqRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0dyYW1tYXJfQ2hlY2tpbmdfQ2hhbmdlZCkoRWlu
YV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQg
dG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbiB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBz
ZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBTcGVjaWZ5aW5nIG9mIHRoaXMg
Y2FsbGJhY2sgaXMgbmVlZGVkIGlmIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byByZWNlaXZlIG5v
dGlmaWNhdGlvbnMKKyAqIG9uY2UgV2ViS2l0IGNoYW5nZXMgdGhpcyBzZXR0aW5nLgorICogSWYg
dGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBpbnRlcmVzdGVkLCB0aGlzIGNhbGxiYWNrIGlzIG5vdCBz
ZXQuCisgKiBDaGFuZ2luZyBvZiB0aGlzIHNldHRpbmcgYXQgdGhlIFdlYktpdCBsZXZlbCBjYW4g
YmUgbWFkZSBhcyBhIHJlc3VsdCBvZiBtb2RpZnlpbmcKKyAqIG9wdGlvbnMgaW4gYSBDb250ZXh0
IE1lbnUgYnkgYSB1c2VyLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayBmdW5jdGlv
biB0byBzZXQgb3IgQGMgMCB0byBpbnZhbGlkYXRlIHRoZSBwcmV2aW91cyBvbmUKKyAqLworRUFQ
SSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2NoYW5nZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19Db250aW51b3VzX1NwZWxs
X0NoZWNraW5nX0NoYW5nZWQgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlv
biB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4gdGhlIGdyYW1tYXIgY2hlY2tpbmcgc2V0
dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogU3BlY2lmeWluZyBvZiB0aGlzIGNh
bGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3Rp
ZmljYXRpb25zCisgKiBvbmNlIFdlYktpdCBjaGFuZ2VzIHRoaXMgc2V0dGluZy4KKyAqIElmIHRo
ZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0
LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJl
IG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBN
ZW51IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24g
dG8gc2V0IG9yIEBjIDAgdG8gaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMgb25lCisgKi8KK0VBUEkg
dm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZ3JhbW1hcl9jaGVja2luZ19jaGFuZ2VkX2Ni
X3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdfR3JhbW1hcl9DaGVja2luZ19DaGFuZ2VkIGNi
KTsKKworLyoqCisgKiBRdWVyaWVzIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5h
YmxlZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIGlzIGVuYWJsZWQgb3IgQCBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLwor
RUFQSSBFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2dldCh2b2lkKTsKKworLyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGNv
bnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCisgKgorICogQWRkaXRpb25hbGx5LCB0aGlzIGZ1bmN0
aW9uIGNhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gKGlmIGRlZmluZWQpIHRvIG5vdGlmeQorICog
dGhlIGNsaWVudCBhYm91dCB0aGUgY2hhbmdlIG9mIHRoZSBzZXR0aW5nLgorICogVGhpcyBmZWF0
dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKgorICogQHNlZSBld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldAorICoKKyAq
IEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRvIGVuYWJsZSBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIG9yIEBjIEVJTkFfRkFMU0UgdG8gZGlzYWJsZQorICovCitFQVBJIHZvaWQgZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldChF
aW5hX0Jvb2wgZW5hYmxlKTsKKworLyoqCisgKiBRdWVyaWVzIGlmIGdyYW1tYXIgY2hlY2tpbmcg
aXMgZW5hYmxlZC4KKyAqCisgKiBBcHBsaWNhdGlvbiBtYXkgb3ZlcndyaXRlIHdlYmtpdCBncmFt
bWFyIGNoZWNraW5nIGltcGxlbWVudGF0aW9uIGJ5IHNldHRpbmcgY2FsbGJhY2sgZnVuY3Rpb25z
CisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXIuaAorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAIEVJTkFfRkFMU0Ug
aWYgaXQncyBkaXNhYmxlZAorICovCitFQVBJIEVpbmFfQm9vbCBld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KHZvaWQpOworCisvKioKKyAqIEVuYWJs
ZXMvZGlzYWJsZXMgZ3JhbW1hciBjaGVja2luZy4KKyAqCisgKiBBZGRpdGlvbmFsbHksIHRoaXMg
ZnVuY3Rpb24gY2FsbHMgYSBjYWxsYmFjayBmdW5jdGlvbiAoaWYgZGVmaW5lZCkgdG8gbm90aWZ5
CisgKiB0aGUgY2xpZW50IGFib3V0IHRoZSBjaGFuZ2Ugb2YgdGhlIHNldHRpbmcuCisgKiBUaGlz
IGZlYXR1cmUgaXMgZGlzYWJsZWQgYW5kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgV2ViS2l0LUVGTCBi
eSBkZWZhdWx0LgorICoKKyAqIEBzZWUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2dyYW1tYXJf
Y2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQKKyAqCisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJV
RSB0byBlbmFibGUgZ3JhbW1hciBjaGVja2luZyBvciBAYyBFSU5BX0ZBTFNFIHRvIGRpc2FibGUK
KyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9j
aGVja2luZ19zZXQoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogU2V0cyBAbGFuZ3VhZ2Vz
IGFzIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB0byB1c2UgYnkgZGVmYXVsdCBXZWJLaXQKKyAqIGlt
cGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tlciBmZWF0dXJlIHdpdGggRW5jaGFudCBsaWJyYXJ5
IHN1cHBvcnQuCisgKgorICogSWYgQGxhbmd1YWdlcyBpcyBAYyAwLCB0aGUgZGVmYXVsdCBsYW5n
dWFnZSBpcyB1c2VkLgorICogSWYgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgY2FuIG5vdCBiZSBkZXRl
cm1pbmVkIHRoZW4gYW55IGF2YWlsYWJsZSBkaWN0aW9uYXJ5IHdpbGwgYmUgdXNlZC4KKyAqCisg
KiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGludmFsaWRhdGVzIHRoZSBwcmV2aW91c2x5IHNldCBsYW5n
dWFnZXMuCisgKiAgICAgICBUaGUgZGljdGlvbmFyaWVzIGFyZSByZXF1ZXN0ZWQgYXN5bmNocm9u
b3VzbHkuCisgKgorICogQHBhcmFtIGxhbmd1YWdlcyBhIGxpc3Qgb2YgY29tbWEgKCcsJykgc2Vw
YXJhdGVkIGxhbmd1YWdlIGNvZGVzCisgKiAgICAgICAgb2YgdGhlIGZvcm0gJ2VuX1VTJywgaWUs
IGxhbmd1YWdlX1ZBUklBTlQsIG1heSBiZSBAYyAwLgorICovCitFQVBJIHZvaWQgZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hhciAq
bGFuZ3VhZ2VzKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8v
IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCmluZGV4IGFhMzNmMmYuLjdkNjdhOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCkBAIC0xLDUg
KzEsNyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjksOSBAQAogI2lu
Y2x1ZGUgIlRleHRDaGVja2VyLmgiCiAKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTM3LDkxICs0MSwxNDIgQEAgc3RhdGljIFRleHRDaGVja2VyU3RhdGUg
dGV4dENoZWNrZXJTdGF0ZTsKIAogY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENoZWNrZXI6
OnN0YXRlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOworICAgIGlmIChk
aWRJbml0aWFsaXplU3RhdGUpCisgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOworCisg
ICAgV2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaGFyZWQo
KS0+Y2xpZW50KCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAg
ICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5ncmFt
bWFyQ2hlY2tpbmdFbmFibGVkKCk7CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOwor
I2VuZGlmCiAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CiB9CiAKIGJvb2wgVGV4dENoZWNr
ZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNsaWVudCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOwor
I2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRDaGVja2Vy
OjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47
CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9
IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2xpZW50KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVj
a2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRDaGVja2VyOjpz
ZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgaWYg
KHN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID09IGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChpc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQpOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmNvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICB0ZXh0Q2hl
Y2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNl
bmRpZgogfQogCiB2b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVD
aGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJM
RShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkID0gZW5hYmxlZDsKKyNlbmRpZgogfQogCi1pbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVT
cGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSopCitpbnQ2NF90IFRleHRDaGVja2VyOjp1bmlx
dWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7CisjZWxz
ZQogICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3Bl
bGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCkKK3ZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxE
b2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKKyNlbmRpZgogfQogCi12b2lkIFRl
eHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNoYXIqLCB1
aW50MzJfdCwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVs
bGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQs
IHVpbnQzMl90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYg
bWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNr
U3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwg
bWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworI2VuZGlmCiB9CiAKLXZv
aWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFy
KiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBp
bnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwgVmVj
dG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50MzJfdCYgYmFkR3JhbW1hckxv
Y2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmco
dGV4dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3Jh
bW1hckxlbmd0aCk7CisjZW5kaWYKIH0KIAogYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlz
U2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVD
SykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zcGVsbGlu
Z1VJSXNTaG93aW5nKCk7CisjZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB2
b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2Vy
OjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOworI2VuZGlm
CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdv
cmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBT
dHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIG1pc3Nw
ZWxsZWRXb3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1h
ckRldGFpbCYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQ
aHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6
c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVs
bERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKKyNlbmRpZgog
fQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90LCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit2b2lkIFRleHRDaGVja2Vy
OjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmlu
ZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1
bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6
bGVhcm5Xb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjpsZWFy
bldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3
b3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qs
IGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3Bl
bGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworI2VuZGlmCiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0ZpbmRF
bmNoYW50LmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OWM3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UKQEAgLTAsMCArMSw0MyBAQAorIyAtIFRyeSB0byBm
aW5kIEVuY2hhbnQKKyMgT25jZSBkb25lLCB0aGlzIHdpbGwgZGVmaW5lCisjCisjICBFTkNIQU5U
X0lOQ0xVREVfRElSUyAtIHRoZSBFbmNoYW50IGluY2x1ZGUgZHJlY3RvcmllcworIyAgRU5DSEFO
VF9MSUJSQVJJRVMgLSBsaW5rIHRoZXNlIHRvIHVzZSBFbmNoYW50CisjCisjIENvcHlyaWdodCAo
QykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
CisjIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgSVRTCisj
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworIyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwKKyMgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyMgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorIyBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworRklORF9QQUNLQUdFKFBrZ0Nv
bmZpZykKK1BLR19DSEVDS19NT0RVTEVTKFBDX0VOQ0hBTlQgZW5jaGFudCkKKworRklORF9QQVRI
KEVOQ0hBTlRfSU5DTFVERV9ESVJTCisgICAgTkFNRVMgZW5jaGFudC5oCisgICAgUEFUSFMgJHtQ
Q19FTkNIQU5UX0lOQ0xVREVESVJ9CisgICAgICAgICAgJHtQQ19FTkNIQU5UX0lOQ0xVREVfRElS
U30KKykKKworRklORF9MSUJSQVJZKEVOQ0hBTlRfTElCUkFSSUVTCisgICAgTkFNRVMgZW5jaGFu
dAorICAgIFBBVEhTICR7UENfRU5DSEFOVF9MSUJESVJ9CisgICAgICAgICAgJHtQQ19FTkNIQU5U
X0xJQlJBUllfRElSU30KKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNt
YWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggODY3NWJlOC4uN2VjOTdk
NiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIGIvU291cmNl
L2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTE3MSwzICsxNzEsOCBAQCBJRiAoV1RGX1VTRV9U
SUxFRF9CQUNLSU5HX1NUT1JFKQogICBGSU5EX1BBQ0tBR0UoT3BlbkdMIFJFUVVJUkVEKQogRU5E
SUYoKQogCitPUFRJT04oRU5BQkxFX1NQRUxMQ0hFQ0sgIkVuYWJsZSBzcGVsbGNoZWNraW5nIGZl
YXR1cmUgKHJlcXVpcmVzIGVuY2hhbnQpIiBPTikKK0lGIChFTkFCTEVfU1BFTExDSEVDSykKKyAg
ICAgIEZJTkRfUEFDS0FHRShFbmNoYW50IFJFUVVJUkVEKQorICAgICAgQUREX0RFRklOSVRJT05T
KC1ERU5BQkxFX1NQRUxMQ0hFQ0s9MSkKK0VORElGKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161980</attachid>
            <date>2012-09-04 00:48:36 -0700</date>
            <delta_ts>2012-09-05 05:12:55 -0700</delta_ts>
            <desc>apply Gyuyoung&apos;s suggestions</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>60947</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4ZTJmZGUzLi5hZjc2NjAz
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDktMDMgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qICA8bS5yb2pAc2FzbXVuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZM
XSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZXMgc3BlbGxjaGVja2luZyBm
ZWF0dXJlIGZvciBXSzItRWZsLgorCisgICAgICAgICogU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50
LmNtYWtlOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZTog
RGVmaW5lcyBTUEVMTENIRUNLIG1hY3JvLgorCiAyMDEyLTA5LTAzICBKaW53b28gU29uZyAgPGpp
bndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBVc2UgV2ViS2l0VmVyc2lv
bi5oIHRvIGdldCB2ZXJzaW9uIGluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTI2MjYwYS4uN2Q5
ZDUzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA5LTAzICBHcnplZ29yeiBD
emFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFsIFJvaiAgPG0ucm9q
QHNhbXN1bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gSW1wbGVtZW50YXRpb24gb2Ygc3Bl
bGxjaGVja2luZyBmZWF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTE4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICBBZGQgZW5jaGFudC1yZWxh
dGVkIGNvbXBpbGVyIGZsYWdzOiBoZWFkZXIgcGF0aHMgYW5kIHRoZSBsaWJyYXJ5IGZsYWcuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcDoK
KyAgICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAg
ICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAo
VGV4dENoZWNrZXJFbmNoYW50OjpnZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAg
VXNlcyBuZXdseSBjcmVhdGVkICdhcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCgpJyBtZXRob2Qu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmFyZURpY3Rpb25hcmllc0lu
aXRpYWxpemVkKToKKyAgICAgICAgRGVmaW5lcyBhbiBpbiBsaW5lIG1ldGhvZCB0byByZXR1cm4g
aW5mb3JtYXRpb24gd2hldGhlciBkaWN0aW9uYXJpZXMgaGF2ZSBiZWVuIGxvYWRlZC4KKyAgICAg
ICAgSXQncyB1c2VkIGJ5IFdlYktpdFRleHRDaGVja2VyIGFuZCBUZXh0Q2hlY2tlckVuY2hhbnQu
CisKIDIwMTItMDktMDMgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFNoYXJlIGltbXV0YWJsZSBFbGVtZW50QXR0cmlidXRlRGF0YSBiZXR3ZWVuIGVsZW1lbnRz
IHdpdGggaWRlbnRpY2FsIGF0dHJpYnV0ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4
IDQ1NGVlZTguLmNlODlkNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZs
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC04OCw2ICs4
OCw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICBwbGF0Zm9ybS9QbGF0Zm9ybVN0
cmF0ZWdpZXMuY3BwCiAgIHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKICAgcGxh
dGZvcm0vdGV4dC9lZmwvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUVmbC5jcHAKKyAgcGxh
dGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAKICkKIAogSUYgKEVOQUJM
RV9CQVRURVJZX1NUQVRVUykKQEAgLTMyNCwzICszMjUsNyBAQCBJRiAoRU5BQkxFX1dFQl9BVURJ
TykKICAgQUREX0RFRklOSVRJT05TKC1EVU5JTlNUQUxMRURfQVVESU9fUkVTT1VSQ0VTX0RJUj0i
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vYXVkaW8vcmVzb3VyY2VzIikKIEVORElGICgpCiAKK0lG
IChFTkFCTEVfU1BFTExDSEVDSykKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElS
RUNUT1JJRVMgJHtFTkNIQU5UX0lOQ0xVREVfRElSU30pCisgICAgTElTVChBUFBFTkQgV2ViQ29y
ZV9MSUJSQVJJRVMgJHtFTkNIQU5UX0xJQlJBUklFU30pCitFTkRJRigpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hh
bnQuY3BwCmluZGV4IGY3MmZiMGMuLmFiM2E5ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCkBA
IC02OCw3ICs2OCw3IEBAIHZvaWQgVGV4dENoZWNrZXJFbmNoYW50OjpsZWFybldvcmQoY29uc3Qg
U3RyaW5nJiB3b3JkKQogCiB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGlu
dCYgbWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgaWYgKG1fZW5jaGFudERpY3Rpb25hcmllcy5p
c0VtcHR5KCkpCisgICAgaWYgKCFhcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzaXplX3QgbnVtYmVyT2ZDaGFyYWN0ZXJzID0gc3RyaW5nLmxlbmd0
aCgpOwpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgVGV4dENoZWNrZXJFbmNoYW50OjpjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbWlzc3BlCiBWZWN0b3I8
U3RyaW5nPiBUZXh0Q2hlY2tlckVuY2hhbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmlu
ZyYgd29yZCkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwotICAgIGlmIChtX2VuY2hh
bnREaWN0aW9uYXJpZXMuaXNFbXB0eSgpKQorICAgIGlmICghYXJlRGljdGlvbmFyaWVzSW5pdGlh
bGl6ZWQoKSkKICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CiAKICAgICBmb3IgKFZlY3RvcjxFbmNo
YW50RGljdCo+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9lbmNoYW50RGljdGlvbmFyaWVzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9lbmNoYW50RGljdGlvbmFyaWVzLmVuZCgpOyArK2l0ZXIpIHsKQEAg
LTE3Niw3ICsxNzYsNyBAQCB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6dXBkYXRlU3BlbGxDaGVj
a2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZwogVmVjdG9yPFN0cmluZz4g
VGV4dENoZWNrZXJFbmNoYW50OjpnZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKIHsKICAgICBW
ZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7Ci0gICAgaWYgKG1fZW5jaGFudERpY3Rpb25hcmllcy5p
c0VtcHR5KCkpCisgICAgaWYgKCFhcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCgpKQogICAgICAg
ICByZXR1cm4gbGFuZ3VhZ2VzOwogCiAgICAgLy8gR2V0IGEgVmVjdG9yPENTdHJpbmc+IHdpdGgg
dGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIGluIHVzZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaAppbmRleCAxNzgw
YjQ1Li5hZDZmZjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2Vu
Y2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oCkBAIC00Myw2ICs0Myw3IEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8U3RyaW5nPiBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmKTsK
ICAgICB2b2lkIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGxhbmd1YWdlcyk7CiAgICAgVmVjdG9yPFN0cmluZz4gZ2V0U3BlbGxDaGVja2luZ0xhbmd1
YWdlcygpOworICAgIGJvb2wgYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJl
dHVybiAhbV9lbmNoYW50RGljdGlvbmFyaWVzLmlzRW1wdHkoKTsgfQogCiBwcml2YXRlOgogICAg
IFRleHRDaGVja2VyRW5jaGFudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDEzMjgwMzAuLjRlZmUxMTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMjYgQEAKKzIwMTItMDktMDMgIEdyemVnb3J6IEN6YWprb3dz
a2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+LCBNaWNoYWwgUm9qICA8bS5yb2pAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNr
aW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MTg1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZHMgc3BlbGxpbmcgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDItRUZMIHRoYXQgaXMg
YmFzZWQgb24gRW5jaGFudCBsaWJyYXJ5LgorCisgICAgICAgIEFkZGl0aW9uYWxseSB0aGUgcGF0
Y2ggcHJvdmlkZXMgQVBJIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVj
a2VyIGltcGxlbWVudGF0aW9uCisgICAgICAgIGFzIEVuY2hhbnQgbGlicmFyeSBkb2Vzbid0IGVu
c3VyZSBncmFtbWFyIGNoZWNraW5nLgorICAgICAgICBBcHBsaWNhdGlvbiBpcyBhYmxlIHRvIG92
ZXJ3cml0ZSBpdCAoYm90aCBncmFtbWFyIGFuZCBzcGVsbCBjaGVja2luZykgYnkgZGVmaW5pbmcK
KyAgICAgICAgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZyBhcHByb3ByaWF0ZSBj
YWxsYmFjayBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgQWRkIGVuY2hhbnQtcmVsYXRlZCBjb21waWxlciBmbGFnczogaGVhZGVyIHBhdGhzIGFuZCB0
aGUgbGlicmFyeSBmbGFnLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIu
aDoKKyAgICAgICAgQWRkIGZpbGVzIHRoYXQgY29udGFpbiBBUEkgdG8gdGhlIG1haW4gV2ViS2l0
Mi1FRkwncyBoZWFkZXIgdG8gYmUgYXZhaWxhYmxlIGZvciBhcHBsaWNhdGlvbnMuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHA6IEFkZGVkLgorICAg
ICAgICBJbXBsZW1lbnRzIGNhbGxiYWNrcyBmdW5jdGlvbnMgb2YgV0tUZXh0Q2hlY2tlci4KKwor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6Omlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0
VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjppc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0R3Jh
bW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2Vy
Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENo
ZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJL
aXRUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViS2l0VGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRD
aGVja2VyOjpndWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVj
a2VyOjpsZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6aWdu
b3JlV29yZCk6CisgICAgICAgIFRob3NlIG1ldGhvZHMgYXJlIGRpcmVjdGx5IGdpdmVuIGFzIGNh
bGxiYWNrIGZ1bmN0aW9ucyBmb3IgV0tUZXh0Q2hlY2tlcidzIGNsaWVudC4KKyAgICAgICAgVGhl
aXIgcmVhc29uIGlzIHRvIGNob29zZSBiZXR3ZWVuIFdlYktpdCdzIHNwZWxsaW5nIGltcGxlbWVu
dGF0aW9uIGFuZCBjbGllbnQncyBvbmVzLgorCisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRD
aGVja2VyOjpFbmNoYW50SGVscGVyOjphcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpFbmNoYW50SGVscGVyOjp1cGRhdGVTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgVGhlIG1ldGhvZHMgYXJlIHVzZWQgYnkgZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nLmNwcCBmaWxlIGFuZCBhbGxvdyB0byBkbyBub3QKKyAgICAg
ICAgZXhwb3NlICdtX3RleHRDaGVja2VyRW5jaGFudCcuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oOiBBZGRlZC4KKyAgICAgICAgRGVmaW5lcyBjbGFz
cyB3aGljaCBjaG9vc2VzIGJldHdlZW4gY2xpZW50J3MgaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxp
bmcgYW5kIHRoZSBXZWJLaXQgb25lLgorCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0VGV4dENoZWNrZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6ZXdr
VGV4dENoZWNrZXIpOgorICAgICAgICBSZXR1cm5zIHN0cnVjdCB0aGF0IGtlZXBzIGNsaWVudCdz
IGNhbGxiYWNrcy4KKworICAgICAgICAoRW5jaGFudEhlbHBlcik6CisgICAgICAgIEtlZXBzIGlu
Zm9ybWF0aW9uIGJhc2VkIG9uIFRleHRDaGVja2VyRW5jaGFudCBpbXBsZW1lbnRhdGlvbi4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAgICAgICAgKF9F
d2tfQ29udGV4dDo6X0V3a19Db250ZXh0KToKKyAgICAgICAgSW5pdGlhbHplcyBzcGVsbGNoZWNr
ZXIgZmVhdHVyZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNr
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfY2xpZW50X2F0dGFjaCk6
CisgICAgICAgIFNldHMgV0tUZXh0Q2hlY2tlciBjbGllbnQgYW5kIHJlZ2lzdGVycyBXZWJLaXRU
ZXh0Q2hlY2tlcidzIGNhbGxiYWNrcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZXMgQVBJIHRvIHNldCBjbGll
bnQncyBzcGVsbGluZyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKF9Fd2tfVGV4
dF9DaGVja2VyKToKKyAgICAgICAgRGVmaW5lcyBzdHJ1Y3Qgd2l0aCBjbGllbnQncyBjYWxsYmFj
a3MgcmVzcG9uaXNibGUgZm9yIHNwZWxsaW5nLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmNwcDogQWRkZWQuCisgICAgICAgIChfaWRsZXJD
b250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQpOgorICAgICAgICAoX2lkbGVyR3JhbW1hckNo
ZWNraW5nQ2hhbmdlZCk6CisgICAgICAgIChfaWRsZXJTZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KToKKyAgICAgICAgVGhlIGFwcGxpY2F0aW9uIGlzIG5vdGlmaWVkIGFib3V0IHNwZWxsaW5nIHNl
dHRpbmdzIGNoYW5nZSAodGhleSBtYXkgYmUgY2hhbmdlZAorICAgICAgICB0aHJvdWdoIGNvbnRl
eHQgbWVudSBvcHRpb24pIG9uIGlkbGVyIHRvIGRvIG5vdCBibG9jayBXZWJLaXQuCisKKyAgICAg
ICAgKF9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3Nl
dCk6CisgICAgICAgIEhlbHBlciB0aGF0IGNvbnZlcnRzIHN0cmluZyB3aXRoIGxhbmd1YWdlcyB2
YWx1ZXMgdG8gdGhlIGNvbnZlbmllbnQgdmVjdG9yLgorCisgICAgICAgIChld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldCk6Cisg
ICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZ3JhbW1hcl9jaGVja2luZ19jaGFuZ2Vk
X2NiX3NldCk6CisgICAgICAgIFNldHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyB1c2VkIHRvIG5v
dGlmeSB0aGUgY2xpZW50IHdoZW4gdGhlIHNwZWxsaW5nIHNldHRpbmdzCisgICAgICAgIHdlcmUg
Y2hhbmdlZCBieSBXZWJLaXQuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19l
bmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19nZXQpOgorICAgICAgICAoZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldCk6Cisg
ICAgICAgIEFQSSB0byBzZXQvZ2V0IHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nLgorCisg
ICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdf
Z2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9j
aGVja2luZ19zZXQpOgorICAgICAgICBBUEkgdG8gc2V0L2dldCB0aGUgZ3JhbW1hciBjaGVja2lu
Zy4KKworICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlc19zZXQpOgorICAgICAgICBTZXRzIGxhbmd1YWdlcyB0byB1c2UgYnkgV2ViS2l0IGlt
cGxlbWVudGF0aW9uIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oOiBBZGRlZC4KKyAgICAgICAg
QWRkcyBBUEkgZm9yIG1hbmlwdWxhdGluZyBzcGVsbCBjaGVja2VyIGZlYXR1cmUuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVk
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxs
RG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERv
Y3VtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxs
aW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFy
T2ZTdHJpbmcpOiBSZW1vdmVkIFdlYkNvcmUgbmFtYXNwYWNlIGFzIGl0J3MgYWxyZWFkeSBkZWZp
bmVkIGZvciB0aGUgd2hvbGUgZmlsZS4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNw
ZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dG9nZ2xl
U3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJL
aXQ6OlRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpsZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aWdu
b3JlV29yZCk6CisgICAgICAgIFRob3NlIG1ldGhvZHMgY2FsbCBXS1RleHRDaGVja2VyIGNsaWVu
dCBtZXRob2RzLgorCiAyMDEyLTA5LTAzICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5n
LmNvbT4KIAogICAgICAgICBbV0syXVtXVFJdIEltcGxlbWVudCBXZWJLaXRFbmFibGVDYXJldEJy
b3dzaW5nIGF0dHJpYnV0ZSBpbiB0ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZQppbmRleCA5ZjFiOTllLi5jNGMzODA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZQpAQCAtNDcsNiArNDcsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMK
ICAgICBVSVByb2Nlc3MvQVBJL2VmbC9OZXR3b3JrSW5mb1Byb3ZpZGVyLmNwcAogICAgIFVJUHJv
Y2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1Zp
YnJhdGlvblByb3ZpZGVyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVj
a2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAK
ICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKICAg
ICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTYxLDYgKzYyLDggQEAgTElT
VChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmln
YXRpb25fcG9saWN5X2RlY2lzaW9uLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1
cF9tZW51X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcAor
ICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCisgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a191cmxfcmVxdWVzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jl
c3BvbnNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfc2NoZW1lX3JlcXVlc3Qu
Y3BwCkBAIC0xMjYsNiArMTI5LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2VmbCIKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL25ldHdvcmsvc291cCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lbmNo
YW50IgogICAgICIke1dFQkNPUkVfRElSfS9zdmcvZ3JhcGhpY3MiCiAgICAgIiR7V0VCS0lUMl9E
SVJ9L1NoYXJlZC9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9zb3VwIgpAQCAtMjE2
LDYgKzIyMCw4IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fcG9saWN5X2RlY2lz
aW9uLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElS
fS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuaCIKKyAgICAiJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaCIKKyAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXJfc2V0dGluZy5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9yZXF1ZXN0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VS
Q0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmgiCiAgICAgIiR7Q01B
S0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9y
ZXF1ZXN0LmgiCkBAIC0zMTQsMyArMzIwLDggQEAgSUYgKEVOQUJMRV9JTlNQRUNUT1IpCiAgICAg
ICAgICAgICAgICAgICAgICAgIFBBVFRFUk4gIiouZ2lmIgogICAgICAgICAgICAgICAgICAgICAg
ICBQQVRURVJOICIqLnBuZyIpCiBFTkRJRiAoKQorCitJRiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisg
ICAgTElTVChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTICR7RU5DSEFOVF9JTkNM
VURFX0RJUlN9KQorICAgIExJU1QoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTICR7RU5DSEFOVF9M
SUJSQVJJRVN9KQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRVdlYktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmgKaW5kZXggNzUwY2I0OC4uZGU1ZjRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiZXdr
X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmgiCiAjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVf
aXRlbS5oIgogI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2No
ZWNrZXIuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKICNpbmNsdWRl
ICJld2tfdXJsX3JlcXVlc3QuaCIKICNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlLmgiCiAjaW5j
bHVkZSAiZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMGQ0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKQEAgLTAsMCAr
MSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNr
ZXIuaCIKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJheS5o
IgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisj
aW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
LmgiCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBJbml0aWFs
aXplIGNsaWVudCdzIGZ1bmN0aW9ucyB0byBAYyAwIHRvIGJlIHN1cmUgdGhhdCB0aGV5IGFyZSBu
b3QgZGVmaW5lZC4KK0V3a19UZXh0X0NoZWNrZXIgV2ViS2l0VGV4dENoZWNrZXI6Om1fZXdrVGV4
dENoZWNrZXIgeworICAgIDAsIC8vIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0CisgICAg
MCwgLy8gdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZQorICAgIDAsIC8vIHN0cmluZ19z
cGVsbGluZ19jaGVjaworICAgIDAsIC8vIHVpX3NwZWxsaW5nX3N0YXR1c19nZXQKKyAgICAwLCAv
LyB1aV90b2dnbGVfc3BlbGxpbmdfc3RhdHVzX2dldAorICAgIDAsIC8vIHVpX3NwZWxsaW5nX21p
c3NwZWxsZWRfd29yZF91cGRhdGUKKyAgICAwLCAvLyB3b3JkX2d1ZXNzZXNfZ2V0CisgICAgMCwg
Ly8gd29yZF9sZWFybgorICAgIDAgLy8gd29yZF9pZ25vcmUKK307CisKK093blB0cjxXZWJDb3Jl
OjpUZXh0Q2hlY2tlckVuY2hhbnQ+IG1fdGV4dENoZWNrZXJFbmNoYW50ID0gV2ViQ29yZTo6VGV4
dENoZWNrZXJFbmNoYW50OjpjcmVhdGUoKTsKKworYm9vbCBXZWJLaXRUZXh0Q2hlY2tlcjo6aXND
b250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoY29uc3Qgdm9pZCopCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBub3QgY2FsbGVkIGJ5IFdlYktpdDIv
V2ViQ29yZS4gSnVzdCBrZWVwIGl0IGZvciBBUEkgY29tcGF0aWJpbGl0eS4KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCk7Cit9CisKK3Zv
aWQgV2ViS2l0VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChi
b29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqKQoreworICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoZW5hYmxlZCk7Cit9CisKK2Jv
b2wgV2ViS2l0VGV4dENoZWNrZXI6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChjb25zdCB2b2lk
KikKK3sKKyAgICByZXR1cm4gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFy
X2NoZWNraW5nX2dldCgpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpzZXRHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCopCit7CisgICAgZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldChlbmFibGVkKTsK
K30KKwordWludDY0X3QgV2ViS2l0VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWco
V0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2Vy
LnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KQorICAgICAgICByZXR1cm4gbV9ld2tUZXh0
Q2hlY2tlci51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCh0b0ltcGwocGFnZSktPnZpZXdX
aWRnZXQoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6
Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqKQorewor
ICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2Up
CisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9z
ZSh0YWcpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJp
bmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCopCit7CisgICAg
aWYgKG1fZXdrVGV4dENoZWNrZXIuc3RyaW5nX3NwZWxsaW5nX2NoZWNrKQorICAgICAgICBtX2V3
a1RleHRDaGVja2VyLnN0cmluZ19zcGVsbGluZ19jaGVjayh0YWcsIHRvSW1wbCh0ZXh0KS0+c3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5n
dGgpOworICAgIGVsc2UKKyAgICAgICAgbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmNoZWNrU3BlbGxp
bmdPZlN0cmluZyh0b0ltcGwodGV4dCktPnN0cmluZygpLCAqbWlzc3BlbGxpbmdMb2NhdGlvbiwg
Km1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcodWludDY0X3QsIFdLU3RyaW5nUmVmLCBXS0FycmF5UmVmKiwgaW50MzJf
dCosIGludDMyX3QqLCBjb25zdCB2b2lkKikKK3sKKyAgICAvLyBGSVhNRTogY2FsbCBjbGllbnQn
cyBmdW5jdGlvbi4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFdlYktpdFRleHRD
aGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqKQoreworICAgIGlmIChtX2V3
a1RleHRDaGVja2VyLnVpX3NwZWxsaW5nX3N0YXR1c19nZXQpCisgICAgICAgIHJldHVybiBtX2V3
a1RleHRDaGVja2VyLnVpX3NwZWxsaW5nX3N0YXR1c19nZXQoKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2lu
Zyhjb25zdCB2b2lkKikKK3sKKyAgICBpZiAobV9ld2tUZXh0Q2hlY2tlci51aV90b2dnbGVfc3Bl
bGxpbmdfc3RhdHVzX2dldCkKKyAgICAgICAgbV9ld2tUZXh0Q2hlY2tlci51aV90b2dnbGVfc3Bl
bGxpbmdfc3RhdHVzX2dldCgpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjp1cGRhdGVT
cGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgbWlz
c3BlbGxlZFdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnVp
X3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGUpCisgICAgICAgIG1fZXdrVGV4dENoZWNr
ZXIudWlfc3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZSh0YWcsIHRvSW1wbChtaXNzcGVs
bGVkV29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYktpdFRleHRD
aGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3QsIFdLU3Ry
aW5nUmVmLCBXS0dyYW1tYXJEZXRhaWxSZWYsIGNvbnN0IHZvaWQqKQoreworICAgIC8vIEZJWE1F
OiBjYWxsIGNsaWVudCdzIGZ1bmN0aW9uLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1dL
QXJyYXlSZWYgV2ViS2l0VGV4dENoZWNrZXI6Omd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywg
V0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgV0tNdXRhYmxlQXJyYXlSZWYg
c3VnZ2VzdGlvbnNGb3JXb3JkID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsKKworICAgIGlmICht
X2V3a1RleHRDaGVja2VyLndvcmRfZ3Vlc3Nlc19nZXQpIHsKKyAgICAgICAgRWluYV9MaXN0KiBs
aXN0ID0gbV9ld2tUZXh0Q2hlY2tlci53b3JkX2d1ZXNzZXNfZ2V0KHRhZywgdG9JbXBsKHdvcmQp
LT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgdm9pZCogaXRlbTsKKworICAgICAg
ICBFSU5BX0xJU1RfRlJFRShsaXN0LCBpdGVtKSB7CisgICAgICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhzdGF0aWNfY2FzdDxjaGFyKj4oaXRlbSkpKTsKKyAgICAgICAgICAgIFdLQXJyYXlBcHBl
bmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlvbi5nZXQoKSk7CisgICAgICAgICAg
ICBmcmVlKGl0ZW0pOworICAgICAgICB9CisKKyAgICB9IGVsc2UgeworICAgICAgICBWZWN0b3I8
U3RyaW5nPiBndWVzc2VzID0gbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmdldEd1ZXNzZXNGb3JXb3Jk
KHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworCisgICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBndWVzc2VzLmJlZ2luKCk7IGl0ZXIgIT0gZ3Vlc3Nlcy5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vn
Z2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhpdGVyLT51dGY4
KCkuZGF0YSgpKSk7CisgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0Zv
cldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHN1Z2dlc3Rpb25zRm9yV29yZDsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6bGVhcm5X
b3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAg
aWYgKG1fZXdrVGV4dENoZWNrZXIud29yZF9sZWFybikKKyAgICAgICAgbV9ld2tUZXh0Q2hlY2tl
ci53b3JkX2xlYXJuKHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fdGV4dENoZWNrZXJFbmNoYW50LT5sZWFybldvcmQodG9JbXBs
KHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6Omlnbm9yZVdv
cmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBp
ZiAobV9ld2tUZXh0Q2hlY2tlci53b3JkX2lnbm9yZSkKKyAgICAgICAgbV9ld2tUZXh0Q2hlY2tl
ci53b3JkX2lnbm9yZSh0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgZWxzZQorICAgICAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+aWdub3JlV29yZCh0b0lt
cGwod29yZCktPnN0cmluZygpKTsKK30KKworYm9vbCBXZWJLaXRUZXh0Q2hlY2tlcjo6RW5jaGFu
dEhlbHBlcjo6YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKQoreworICAgIHJldHVybiBtX3Rl
eHRDaGVja2VyRW5jaGFudC0+YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKTsKK30KKwordm9p
ZCBXZWJLaXRUZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6dXBkYXRlU3BlbGxDaGVja2luZ0xh
bmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKQoreworICAgIGlmICghbV90
ZXh0Q2hlY2tlckVuY2hhbnQtPmFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCkpCisgICAgICAg
IG1fdGV4dENoZWNrZXJFbmNoYW50LT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1
YWdlcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQ
RUxMQ0hFQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9X
ZWJLaXRUZXh0Q2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2Vi
S2l0VGV4dENoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWI0
NTg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
V2ViS2l0VGV4dENoZWNrZXIuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJLaXRUZXh0
Q2hlY2tlcl9oCisjZGVmaW5lIFdlYktpdFRleHRDaGVja2VyX2gKKworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorCisjaW5jbHVkZSAiVGV4dENoZWNrZXJFbmNoYW50LmgiCisjaW5jbHVkZSAiV0tB
cnJheS5oIgorI2luY2x1ZGUgIldLUGFnZS5oIgorI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5j
bHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CisvLyBDbGFzcyBjaG9vc2VzIGJldHdlZW4gY2xpZW50J3MgaW1wbGVtZW50YXRpb24gb2Ygc3Bl
bGxpbmcgYW5kIHRoZSBXZWJLaXQgb25lLgorY2xhc3MgV2ViS2l0VGV4dENoZWNrZXIgeworcHVi
bGljOgorICAgIC8vIENhbGxiYWNrcyByZXF1aXJlZCBieSBXS1RleHRDaGVja2VyLgorICAgIHN0
YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworICAgIHN0YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldENvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOworICAgIHN0YXRpYyBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgdWlu
dDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1
aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCisgICAgc3RhdGljIHZvaWQg
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50
MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGNoZWNrR3JhbW1hck9mU3Ry
aW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgV0tBcnJheVJlZiogZ3JhbW1hckRl
dGFpbHMsIGludDMyX3QqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCogYmFkR3JhbW1hckxl
bmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgYm9vbCBzcGVsbGlu
Z1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3Rh
dGljIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh1aW50NjRfdCB0YWcs
IFdLU3RyaW5nUmVmIG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAg
ICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3Qg
dGFnLCBXS1N0cmluZ1JlZiBiYWRHcmFtbWFyUGhyYXNlLCBXS0dyYW1tYXJEZXRhaWxSZWYgZ3Jh
bW1hckRldGFpbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgV0tBcnJh
eVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGxlYXJuV29yZCh1aW50NjRfdCB0
YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRp
YyB2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKKworICAgIC8vIEFjY2VzcyB0byBjbGllbnQncyBjYWxsYmFja3Mu
CisgICAgc3RhdGljIEV3a19UZXh0X0NoZWNrZXIqIGV3a1RleHRDaGVja2VyKCkgeyByZXR1cm4g
Jm1fZXdrVGV4dENoZWNrZXI7IH0KKworICAgIGNsYXNzIEVuY2hhbnRIZWxwZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIGJvb2wgYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKTsK
KyAgICAgICAgc3RhdGljIHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKTsKKyAgICB9OworCitwcml2YXRlOgorICAgIHN0YXRp
YyBFd2tfVGV4dF9DaGVja2VyIG1fZXdrVGV4dENoZWNrZXI7CisKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisjZW5kaWYgLy8gV2Vi
S2l0VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwCmluZGV4IDYwYzc5ZTEuLjBjZDY2MzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTM2LDYgKzM2LDEw
IEBACiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNpbmNs
dWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogCkBAIC05OCw2ICsxMDIsMTIgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAj
ZW5kaWYKICAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9hdHRhY2go
dGhpcyk7CiAgICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2godGhpcyk7
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgICAgIGV3a190ZXh0X2NoZWNrZXJfY2xpZW50
X2F0dGFjaCgpOworICAgICAgICBpZiAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpKQorICAgICAgICAgICAgZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7CisjZW5kaWYKKwog
ICAgIH0KIAogICAgIH5fRXdrX0NvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xM2ZlMTNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKQEAgLTAsMCArMSw5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCisK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5j
bHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
I2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05BTUUsIE5BTUUpICBc
Cit2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSBjYikgICAg
IFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIFdlYktpdFRleHRDaGVja2VyOjpld2tUZXh0Q2hlY2tlcigpLT5OQU1FID0gY2I7
ICAgXAorfQorCisvKioKKyAqIEF0dGFjaGVzIHNwZWxsY2hlY2tlciBmZWF0dXJlLgorICoKKyAq
IEBpbnRlcm5hbAorICoKKyAqIFRoZSBkZWZhdWx0IHNwZWxsY2hlY2tlciBmZWF0dXJlIGlzIGJh
c2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKyAqIENsaWVudCBtYXkgdXNlIG93biBpbXBsZW1lbnRh
dGlvbiBvZiBzcGVsbGNoZWNrZXIgcHJldmlvdXNseSBzZXQKKyAqIHRocm91Z2ggdGhlIGNhbGxi
YWNrIGZ1bmN0aW9ucy4KKyAqLwordm9pZCBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9hdHRhY2go
KQoreworICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IGZh
bHNlOworICAgIGlmIChkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIFdLVGV4dENoZWNrZXJDbGllbnQgdGV4dENoZWNrZXJDbGllbnQgeworICAg
ICAgICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICAwLCAvLyBj
bGllbnRJbmZvCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nQWxsb3dlZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OmlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0Q29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6aXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0R3Jh
bW1hckNoZWNraW5nRW5hYmxlZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OnVuaXF1ZVNw
ZWxsRG9jdW1lbnRUYWcsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9j
dW1lbnRXaXRoVGFnLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09m
U3RyaW5nLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcs
CisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nLAorICAgICAg
ICBXZWJLaXRUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZywKKyAgICAgICAg
V2ViS2l0VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQsCisg
ICAgICAgIFdlYktpdFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpndWVzc2VzRm9yV29yZCwKKyAgICAgICAg
V2ViS2l0VGV4dENoZWNrZXI6OmxlYXJuV29yZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6
Omlnbm9yZVdvcmQKKyAgICB9OworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRleHRDaGVj
a2VyQ2xpZW50KTsKKworICAgIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IHRydWU7
Cit9CisKKyNlbHNlCisKKy8vIERlZmluZXMgYW4gZW1wdHkgQVBJIHRvIGRvIG5vdCBicmVhayBi
dWlsZC4KKyNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBO
QU1FKSAgXAordm9pZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUp
ICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKK30KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKworRVdLX1RFWFRf
Q0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1l
bnRfVGFnX0dldCwgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCitFV0tfVEVYVF9DSEVD
S0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9U
YWdfQ2xvc2UsIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UpCitFV0tfVEVYVF9DSEVD
S0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjaywg
c3RyaW5nX3NwZWxsaW5nX2NoZWNrKQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdr
X1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfR2V0LCB1aV9zcGVsbGluZ19zdGF0dXNf
Z2V0KQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VSV9U
b2dnbGVfU3BlbGxpbmdfU3RhdHVzX0dldCwgdWlfdG9nZ2xlX3NwZWxsaW5nX3N0YXR1c19nZXQp
CitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxs
aW5nX01pc3NwZWxsZWRfV29yZF9VcGRhdGUsIHVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91
cGRhdGUpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dv
cmRfR3Vlc3Nlc19HZXQsIHdvcmRfZ3Vlc3Nlc19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExC
QUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm4sIHdvcmRfbGVhcm4pCitFV0tfVEVY
VF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlLCB3b3Jk
X2lnbm9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190
ZXh0X2NoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTM4YzA1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3RleHRfY2hlY2tlci5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSBld2tfdGV4
dF9jaGVja2VyLmgKKyAqIEBicmllZiBQcm92aWRlcyBBUEkgdG8gb3ZlcndyaXRlIHRoZSBkZWZh
dWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24uCisgKgorICogVGhlcmUgaXMg
b25lIHNwZWxsY2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0aW9uIGFuZCBpdCdzIGRpc2FibGVk
IGJ5IGRlZmF1bHQuCisgKiBJdCBhbGxvd3MgdG8gY2hlY2sgc3BlbGxpbmcgaW4gdGhlIGVkaXRh
YmxlIGFyZWFzLgorICogSWYgYXBwbGljYXRpb24gd2FudHMgdG8gZW5hYmxlIHRoZSBmZWF0dXJl
LCBBUEkgZnJvbSBAYSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaAorICogc2hvdWxkIGJlIHVz
ZWQuCisgKgorICogVGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlv
biBpcyBiYXNlZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICogSXQgZG9lc24ndCBlbnN1cmUg
Z3JhbW1hciBjaGVja2luZy4gQXBwbGljYXRpb24gaXMgYWJsZSB0byBvdmVyd3JpdGUgdGhlIGRl
ZmF1bHQKKyAqIFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24gYnkgZGVmaW5pbmcg
aXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZworICogYXBwcm9wcmlhdGUgY2FsbGJh
Y2sgZnVuY3Rpb25zLgorICovCisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9oCisjZGVmaW5l
IGV3a190ZXh0X2NoZWNrZXJfaAorCisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1
c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgdWludDY0X3QgKCpFd2tfVGV4
dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0KShjb25zdCBFdmFzX09iamVj
dCAqbyk7Cit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1
bWVudF9UYWdfQ2xvc2UpKHVpbnQ2NF90IHRhZyk7Cit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9D
aGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjaykodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp0
ZXh0LCBpbnQzMl90ICptaXNzcGVsbGluZ19sb2NhdGlvbiwgaW50MzJfdCAqbWlzc3BlbGxpbmdf
bGVuZ3RoKTsKK3R5cGVkZWYgRWluYV9Cb29sICgqRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGlu
Z19TdGF0dXNfR2V0KSh2b2lkKTsKK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfVUlf
VG9nZ2xlX1NwZWxsaW5nX1N0YXR1c19HZXQpKHZvaWQpOwordHlwZWRlZiB2b2lkICgqRXdrX1Rl
eHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19NaXNzcGVsbGVkX1dvcmRfVXBkYXRlKSh1aW50NjRfdCB0
YWcsIGNvbnN0IGNoYXIgKm1pc3NwZWxsZWRfd29yZCk7Cit0eXBlZGVmIEVpbmFfTGlzdCAqKCpF
d2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXQpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hh
ciAqd29yZCk7Cit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm4pKHVp
bnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7Cit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9D
aGVja2VyX1dvcmRfSWdub3JlKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOworCisv
KioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgYSB1bmlxdWUgc3BlbGwgZG9j
dW1lbnQgdGFnLgorICoKKyAqIFRoaXMgY2FsbGJhY2sgd2lsbCByZXR1cm4gYSB0YWcgKGlkZW50
aWZpZXIpIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLgorICogVW5pcXVlIHRhZ3Mg
aGVscCB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggb3RoZXIgb2JqZWN0cyB0aGF0IGFyZSBjaGVj
a2VkIGZvciBzcGVsbGluZyBtaXN0YWtlcy4KKyAqCisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXJf
dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZV9jYl9zZXQKKyAqCisgKiBAcGFyYW0gY2Ig
YSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJL
aXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNr
ZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJf
VW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19HZXQgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxs
YmFjayBmdW5jdGlvbiB0byBjbG9zZSBhIHVuaXF1ZSBzcGVsbCBkb2N1bWVudCB0YWcuCisgKgor
ICogVGhpcyBjYWxsYmFjayB3aWxsIG5vdGlmeSB0aGUgcmVjZWl2ZXIgdGhhdCB0aGUgdXNlciBo
YXMgZmluaXNoZWQgd2l0aCB0aGUgdGFnZ2VkIGRvY3VtZW50LgorICoKKyAqIEBzZWUgZXdrX3Rl
eHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldF9jYl9zZXQKKyAqCisgKiBA
cGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9yZSB0aGUgZGVm
YXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190
ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZV9jYl9zZXQoRXdrX1Rl
eHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlIGNiKTsKKworLyoqCisg
KiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2VhcmNoIGZvciBhIG1pc3NwZWxsZWQgd29y
ZCBpbiB0aGUgZ2l2ZW4gc3RyaW5nLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0
byBzZXQgb3IgQGMgMCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBs
ZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxp
bmdfY2hlY2tfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrIGNi
KTsKKworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfdWlfc3BlbGxpbmdfc3RhdHVzX2dldF9j
Yl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfR2V0IGNiKTsKK0VBUEkg
dm9pZCBld2tfdGV4dF9jaGVja2VyX3VpX3RvZ2dsZV9zcGVsbGluZ19zdGF0dXNfZ2V0X2NiX3Nl
dChFd2tfVGV4dF9DaGVja2VyX1VJX1RvZ2dsZV9TcGVsbGluZ19TdGF0dXNfR2V0IGNiKTsKK0VB
UEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRh
dGVfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3BlbGxlZF9Xb3JkX1Vw
ZGF0ZSBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhbiBh
cnJheSBvZiBzdWdnZXN0ZWQgc3BlbGxpbmdzIGZvciBhIG1pc3NwZWxsZWQgd29yZC4KKyAqCisg
KiBUaGlzIGNhbGxiYWNrIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBkeW5hbWljYWxseSBhbGxvY2F0
ZWQgc3RyaW5ncyAoYXMgY2hhciopIGFuZAorICogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBk
ZXN0cm95aW5nIHRoZW0uCisgKgorICogQHNlZSBFSU5BX0xJU1RfRlJFRS4KKyAqCisgKiBAcGFy
YW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9yZSB0aGUgZGVmYXVs
dCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0
X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1
ZXNzZXNfR2V0IGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYWRk
IHRoZSB3b3JkIHRvIHRoZSBzcGVsbCBjaGVja2VyIGRpY3Rpb25hcnkuCisgKgorICogQHBhcmFt
IGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyAwIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQg
V2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9j
aGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29yZF9MZWFybiBjYik7
CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRlbGwgdGhlIHNwZWxsIGNo
ZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4gd29yZC4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2Fs
bGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJh
Y2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfd29yZF9p
Z25vcmVfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUgY2IpOworCisjaWZkZWYg
X19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a190ZXh0X2NoZWNrZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tl
cl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODg2
ZGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdr
X3RleHRfY2hlY2tlcl9wcml2YXRlX2gKKyNkZWZpbmUgZXdrX3RleHRfY2hlY2tlcl9wcml2YXRl
X2gKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXIu
aCIKKworLyoqCisgKiBAYnJpZWYgU3RydWN0dXJlIHRoYXQga2VlcHMgY2xpZW50J3MgY2FsbGJh
Y2sgZnVuY3Rpb25zLgorICoKKyAqIEBpbnRlcm5hbAorICovCitzdHJ1Y3QgX0V3a19UZXh0X0No
ZWNrZXIgeworICAgIEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19H
ZXQgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9V
bmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdf
Y2xvc2U7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2sgc3RyaW5n
X3NwZWxsaW5nX2NoZWNrOworICAgIEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVz
X0dldCB1aV9zcGVsbGluZ19zdGF0dXNfZ2V0OworICAgIEV3a19UZXh0X0NoZWNrZXJfVUlfVG9n
Z2xlX1NwZWxsaW5nX1N0YXR1c19HZXQgdWlfdG9nZ2xlX3NwZWxsaW5nX3N0YXR1c19nZXQ7Cisg
ICAgRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19NaXNzcGVsbGVkX1dvcmRfVXBkYXRlIHVp
X3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGU7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9X
b3JkX0d1ZXNzZXNfR2V0IHdvcmRfZ3Vlc3Nlc19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9X
b3JkX0xlYXJuIHdvcmRfbGVhcm47CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZSB3
b3JkX2lnbm9yZTsKK307Cit0eXBlZGVmIF9Fd2tfVGV4dF9DaGVja2VyIEV3a19UZXh0X0NoZWNr
ZXI7CisKKy8vIE1ha2VzIGl0IHZpc2libGUgZm9yIFdUUi4KK0VBUEkgdm9pZCBld2tfdGV4dF9j
aGVja2VyX2NsaWVudF9hdHRhY2goKTsKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQor
I2VuZGlmIC8vIGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWY3YzJmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5nLmNwcApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKKworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorI2luY2x1ZGUgIldLVGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0
Q2hlY2tlci5oIgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCitzdGF0aWMgc3RydWN0IHsKKyAgICBib29sIGVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nIDogMTsKKyAgICBib29sIGVuYWJsZUdyYW1tYXJDaGVja2luZyA6IDE7CisgICAgc3RydWN0
IHsKKyAgICAgICAgRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0NvbnRpbnVvdXNfU3BlbGxfQ2hl
Y2tpbmdfQ2hhbmdlZCBjb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQ7CisgICAgICAgIEV3
a19UZXh0X0NoZWNrZXJfU2V0dGluZ19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQgZ3JhbW1hckNo
ZWNraW5nQ2hhbmdlZDsKKyAgICB9IHNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzOworICAgIFZlY3Rv
cjxTdHJpbmc+IHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXM7Cit9IGV3a1RleHRDaGVja2VyU2V0dGlu
ZyA9IHsgZmFsc2UsIGZhbHNlLCB7MCwgMH0sIFZlY3RvcjxTdHJpbmc+KCl9OworCitzdGF0aWMg
RWluYV9Cb29sIF9pZGxlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCh2b2lkKikKK3sK
KyAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmNv
bnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCkKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0
aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdl
ZCgKKyAgICAgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250aW51b3VzU3Bl
bGxDaGVja2luZyk7CisKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCitz
dGF0aWMgRWluYV9Cb29sIF9pZGxlckdyYW1tYXJDaGVja2luZ0NoYW5nZWQodm9pZCopCit7Cisg
ICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5ncmFt
bWFyQ2hlY2tpbmdDaGFuZ2VkKQorICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGlu
Z0NoYW5nZWRDYWxsYmFja3MuZ3JhbW1hckNoZWNraW5nQ2hhbmdlZCgKKyAgICAgICAgICAgIGV3
a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVHcmFtbWFyQ2hlY2tpbmcpOworCisgICAgcmV0dXJu
IEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfaWRsZXJTZXRT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKHZvaWQqKQoreworICAgIC8vIEZJWE1FOiBDb25zaWRlciB0
byBkZWxlZ2F0ZSBjYWxsaW5nIG9mIHRoaXMgbWV0aG9kIGluIFdlYlByb2Nlc3MgdG8gZG8gbm90
IGRlbGF5L2Jsb2NrIFVJUHJvY2Vzcy4KKyAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6RW5jaGFudEhl
bHBlcjo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhld2tUZXh0Q2hlY2tlclNldHRpbmcu
c3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7CisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNF
TDsKK30KKwordm9pZCBzdGF0aWMgX2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuZXdMYW5ndWFnZXMpCit7
CisgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzID0gbmV3TGFuZ3VhZ2VzOworICAgIGV3a1Rl
eHRDaGVja2VyU2V0dGluZy5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzLnN3YXAobGFuZ3VhZ2VzKTsK
KyAgICBlY29yZV9pZGxlcl9hZGQoX2lkbGVyU2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcywgMCk7
Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisKK3ZvaWQgZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQoRXdrX1Rl
eHRfQ2hlY2tlcl9TZXR0aW5nX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlZCBjYWxs
YmFjaykKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBld2tUZXh0Q2hlY2tlclNldHRp
bmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3MuY29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2Vk
ID0gY2FsbGJhY2s7CisjZW5kaWYKK30KKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
Z3JhbW1hcl9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdf
R3JhbW1hcl9DaGVja2luZ19DaGFuZ2VkIGNhbGxiYWNrKQoreworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5n
cmFtbWFyQ2hlY2tpbmdDaGFuZ2VkID0gY2FsbGJhY2s7CisjZW5kaWYKK30KKworRWluYV9Cb29s
IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19nZXQoKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBld2tUZXh0Q2hl
Y2tlclNldHRpbmcuZW5hYmxlQ29udGludW91c1NwZWxsQ2hlY2tpbmc7CisjZWxzZQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19l
bmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoRWluYV9Cb29sIGVuYWJsZSkKK3sK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBlbmFibGUgPSAhIWVuYWJsZTsKKyAgICBpZiAo
ZXdrVGV4dENoZWNrZXJTZXR0aW5nLmVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nICE9IGVu
YWJsZSkgeworICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmcgPSBlbmFibGU7CisKKyAgICAgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGUpOworCisgICAgICAgIC8vIFNl
dHMgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4KKyAgICAgICAg
aWYgKGVuYWJsZSAmJiAhV2ViS2l0VGV4dENoZWNrZXI6OkVuY2hhbnRIZWxwZXI6OmFyZURpY3Rp
b25hcmllc0luaXRpYWxpemVkKCkpCisgICAgICAgICAgICBfZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoVmVjdG9yPFN0cmluZz4oKSk7CisKKyAg
ICAgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5j
b250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQpCisgICAgICAgICAgICBlY29yZV9pZGxlcl9h
ZGQoX2lkbGVyQ29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VkLCAwKTsKKyAgICB9CisjZW5k
aWYKK30KKworRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1h
cl9jaGVja2luZ19nZXQoKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBl
d2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlR3JhbW1hckNoZWNraW5nOworI2Vsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
ZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KEVpbmFfQm9vbCBlbmFibGUpCit7CisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisgICAgZW5hYmxlID0gISFlbmFibGU7CisgICAgaWYgKGV3a1RleHRD
aGVja2VyU2V0dGluZy5lbmFibGVHcmFtbWFyQ2hlY2tpbmcgIT0gZW5hYmxlKSB7CisgICAgICAg
IGV3a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVHcmFtbWFyQ2hlY2tpbmcgPSBlbmFibGU7CisK
KyAgICAgICAgV0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQo
ZW5hYmxlKTsKKworICAgICAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNldHRpbmdDaGFu
Z2VkQ2FsbGJhY2tzLmdyYW1tYXJDaGVja2luZ0NoYW5nZWQpCisgICAgICAgICAgICBlY29yZV9p
ZGxlcl9hZGQoX2lkbGVyR3JhbW1hckNoZWNraW5nQ2hhbmdlZCwgMCk7CisgICAgfQorI2VuZGlm
Cit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlc19zZXQoY29uc3QgY2hhciogbGFuZ3VhZ2VzKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIFZlY3RvcjxTdHJpbmc+IG5ld0xhbmd1YWdlczsKKyAgICBTdHJpbmc6OmZyb21VVEY4
KGxhbmd1YWdlcykuc3BsaXQoc3RhdGljX2Nhc3Q8VUNoYXI+KCcsJyksIG5ld0xhbmd1YWdlcyk7
CisKKyAgICBfZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
c19zZXQobmV3TGFuZ3VhZ2VzKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2U4NjgwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlIGV3a190ZXh0X2NoZWNrZXJf
c2V0dGluZy5oCisgKiBAYnJpZWYgQVBJIGZvciBtYW5pcHVsYXRpbmcgc3BlbGwgY2hlY2tlciBm
ZWF0dXJlLgorICovCisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2gKKyNkZWZp
bmUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lm
ZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHZvaWQgKCpF
d2tfVGV4dF9DaGVja2VyX1NldHRpbmdfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2Vk
KShFaW5hX0Jvb2wgZW5hYmxlKTsKK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU2V0
dGluZ19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQpKEVpbmFfQm9vbCBlbmFibGUpOworCisvKioK
KyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdo
ZW4gdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBX
ZWJLaXQuCisgKgorICogU3BlY2lmeWluZyBvZiB0aGlzIGNhbGxiYWNrIGlzIG5lZWRlZCBpZiB0
aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCisgKiBvbmNlIFdl
YktpdCBjaGFuZ2VzIHRoaXMgc2V0dGluZy4KKyAqIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3Qg
aW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0LgorICogQ2hhbmdpbmcgb2YgdGhp
cyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJlIG1hZGUgYXMgYSByZXN1bHQgb2Yg
bW9kaWZ5aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBNZW51IGJ5IGEgdXNlci4KKyAqCisg
KiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0IG9yIEBjIDAgdG8gaW52
YWxpZGF0ZSB0aGUgcHJldmlvdXMgb25lCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4
dF9DaGVja2VyX1NldHRpbmdfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VkIGNiKTsK
KworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNs
aWVudCB3aGVuIHRoZSBncmFtbWFyIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2Vi
S2l0LgorICoKKyAqIFNwZWNpZnlpbmcgb2YgdGhpcyBjYWxsYmFjayBpcyBuZWVkZWQgaWYgdGhl
IGFwcGxpY2F0aW9uIHdhbnRzIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucworICogb25jZSBXZWJL
aXQgY2hhbmdlcyB0aGlzIHNldHRpbmcuCisgKiBJZiB0aGUgYXBwbGljYXRpb24gaXMgbm90IGlu
dGVyZXN0ZWQsIHRoaXMgY2FsbGJhY2sgaXMgbm90IHNldC4KKyAqIENoYW5naW5nIG9mIHRoaXMg
c2V0dGluZyBhdCB0aGUgV2ViS2l0IGxldmVsIGNhbiBiZSBtYWRlIGFzIGEgcmVzdWx0IG9mIG1v
ZGlmeWluZworICogb3B0aW9ucyBpbiBhIENvbnRleHQgTWVudSBieSBhIHVzZXIuCisgKgorICog
QHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNldCBvciBAYyAwIHRvIGludmFs
aWRhdGUgdGhlIHByZXZpb3VzIG9uZQorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9z
ZXR0aW5nX2dyYW1tYXJfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9T
ZXR0aW5nX0dyYW1tYXJfQ2hlY2tpbmdfQ2hhbmdlZCBjYik7CisKKy8qKgorICogUXVlcmllcyBp
ZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQuCisgKgorICogQHJldHVybiBA
YyBFSU5BX1RSVUUgaWYgY29udGludW91cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkIG9yIEAg
RUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19nZXQodm9p
ZCk7CisKKy8qKgorICogRW5hYmxlcy9kaXNhYmxlcyBjb250aW51b3VzIHNwZWxsIGNoZWNraW5n
LgorICoKKyAqIEFkZGl0aW9uYWxseSwgdGhpcyBmdW5jdGlvbiBjYWxscyBhIGNhbGxiYWNrIGZ1
bmN0aW9uIChpZiBkZWZpbmVkKSB0byBub3RpZnkKKyAqIHRoZSBjbGllbnQgYWJvdXQgdGhlIGNo
YW5nZSBvZiB0aGUgc2V0dGluZy4KKyAqIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZh
dWx0LgorICoKKyAqIEBzZWUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQKKyAqCisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFf
VFJVRSB0byBlbmFibGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBvciBAYyBFSU5BX0ZBTFNF
IHRvIGRpc2FibGUKKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFi
bGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8q
KgorICogUXVlcmllcyBpZiBncmFtbWFyIGNoZWNraW5nIGlzIGVuYWJsZWQuCisgKgorICogQXBw
bGljYXRpb24gbWF5IG92ZXJ3cml0ZSB3ZWJraXQgZ3JhbW1hciBjaGVja2luZyBpbXBsZW1lbnRh
dGlvbiBieSBzZXR0aW5nIGNhbGxiYWNrIGZ1bmN0aW9ucworICogQHNlZSBld2tfdGV4dF9jaGVj
a2VyLmgKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIGlzIGVuYWJsZWQgb3IgQCBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLwor
RUFQSSBFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2No
ZWNraW5nX2dldCh2b2lkKTsKKworLyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGdyYW1tYXIgY2hl
Y2tpbmcuCisgKgorICogQWRkaXRpb25hbGx5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGEgY2FsbGJh
Y2sgZnVuY3Rpb24gKGlmIGRlZmluZWQpIHRvIG5vdGlmeQorICogdGhlIGNsaWVudCBhYm91dCB0
aGUgY2hhbmdlIG9mIHRoZSBzZXR0aW5nLgorICogVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGFu
ZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IFdlYktpdC1FRkwgYnkgZGVmYXVsdC4KKyAqCisgKiBAc2Vl
IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19ncmFtbWFyX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0
CisgKgorICogQHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUgdG8gZW5hYmxlIGdyYW1tYXIgY2hl
Y2tpbmcgb3IgQGMgRUlOQV9GQUxTRSB0byBkaXNhYmxlCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KEVpbmFfQm9vbCBl
bmFibGUpOworCisvKioKKyAqIFNldHMgQGxhbmd1YWdlcyBhcyB0aGUgbGlzdCBvZiBsYW5ndWFn
ZXMgdG8gdXNlIGJ5IGRlZmF1bHQgV2ViS2l0CisgKiBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNo
ZWNrZXIgZmVhdHVyZSB3aXRoIEVuY2hhbnQgbGlicmFyeSBzdXBwb3J0LgorICoKKyAqIElmIEBs
YW5ndWFnZXMgaXMgQGMgMCwgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgdXNlZC4KKyAqIElmIHRo
ZSBkZWZhdWx0IGxhbmd1YWdlIGNhbiBub3QgYmUgZGV0ZXJtaW5lZCB0aGVuIGFueSBhdmFpbGFi
bGUgZGljdGlvbmFyeSB3aWxsIGJlIHVzZWQuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBp
bnZhbGlkYXRlcyB0aGUgcHJldmlvdXNseSBzZXQgbGFuZ3VhZ2VzLgorICogICAgICAgVGhlIGRp
Y3Rpb25hcmllcyBhcmUgcmVxdWVzdGVkIGFzeW5jaHJvbm91c2x5LgorICoKKyAqIEBwYXJhbSBs
YW5ndWFnZXMgYSBsaXN0IG9mIGNvbW1hICgnLCcpIHNlcGFyYXRlZCBsYW5ndWFnZSBjb2Rlcwor
ICogICAgICAgIG9mIHRoZSBmb3JtICdlbl9VUycsIGllLCBsYW5ndWFnZV9WQVJJQU5ULCBtYXkg
YmUgQGMgMC4KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0IGNoYXIgKmxhbmd1YWdlcyk7CisKKyNpZmRlZiBf
X2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBld2tfdGV4dF9jaGVja2VyX3NldHRp
bmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tl
ckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNw
cAppbmRleCBhYTMzZjJmLi5lZDkyMWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcApAQCAtMSw1ICsxLDcgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEg
TW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI5LDkgQEAKICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgog
CiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXZWJUZXh0Q2hl
Y2tlci5oIgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zNyw5MSAr
NDEsMTQ0IEBAIHN0YXRpYyBUZXh0Q2hlY2tlclN0YXRlIHRleHRDaGVja2VyU3RhdGU7CiAKIGNv
bnN0IFRleHRDaGVja2VyU3RhdGUmIFRleHRDaGVja2VyOjpzdGF0ZSgpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBzdGF0aWMgYm9vbCBkaWRJ
bml0aWFsaXplU3RhdGUgPSBmYWxzZTsKKyAgICBpZiAoZGlkSW5pdGlhbGl6ZVN0YXRlKQorICAg
ICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKKworICAgIFdlYlRleHRDaGVja2VyQ2xpZW50
JiBjbGllbnQgPSBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpOworICAgIHRleHRD
aGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBjbGllbnQuY29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQgPSBjbGllbnQuZ3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwor
CisgICAgZGlkSW5pdGlhbGl6ZVN0YXRlID0gdHJ1ZTsKKyNlbmRpZgogICAgIHJldHVybiB0ZXh0
Q2hlY2tlclN0YXRlOwogfQogCiBib29sIFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nQWxsb3dlZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5j
b250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKTsKKyNlbHNlCiAgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZChib29sKQordm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBpZiAoc3Rh
dGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4dENoZWNrZXJTdGF0
ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgaWYgKHN0YXRlKCkuaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkID09IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBpc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQ7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7
CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4
dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVk
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAg
dGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOworI2Vu
ZGlmCiB9CiAKLWludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2Vi
UGFnZVByb3h5KikKK2ludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWco
V2ViUGFnZVByb3h5KiBwYWdlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkudW5pcXVlU3BlbGxEb2N1bWVudFRhZyhwYWdlKTsKKyNlbHNlCiAgICAgcmV0dXJuIDA7Cisj
ZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhp
bnQ2NF90KQordm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2
NF90IHRhZykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2xvc2VTcGVsbERvY3Vt
ZW50V2l0aFRhZyh0YWcpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQzMl90Jiwg
aW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRf
dCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBp
bnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNw
ZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBtaXNzcGVsbGluZ0xvY2F0aW9u
LCBtaXNzcGVsbGluZ0xlbmd0aCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hl
Y2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgVmVjdG9y
PFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBUZXh0
Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBj
b25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4m
IGdyYW1tYXJEZXRhaWxzLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QmIGJh
ZEdyYW1tYXJMZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrR3Jh
bW1hck9mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBncmFt
bWFyRGV0YWlscywgYmFkR3JhbW1hckxvY2F0aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKKyNlbmRp
ZgogfQogCiBib29sIFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyNl
bHNlCiAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS50b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hl
Y2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90LCBjb25zdCBT
dHJpbmcmKQordm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdv
cmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRhZywgbWlzc3BlbGxlZFdvcmQpOworI2VuZGlm
CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
ZyhpbnQ2NF90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikKK3ZvaWQgVGV4
dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhpbnQ2NF90IHNwZWxs
RG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1h
ckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVO
QUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCku
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIGJhZEdy
YW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNr
ZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIFZlY3RvcjxTdHJpbmc+JikKK3ZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3Jk
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJp
bmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkLCBndWVz
c2VzKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCwg
Y29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90IHNwZWxs
RG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+
Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworI2VuZGlmCiB9CiAK
LXZvaWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3Zv
aWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25z
dCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmlnbm9yZVdv
cmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UgYi9Tb3Vy
Y2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZDY5YzcxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kRW5jaGFu
dC5jbWFrZQpAQCAtMCwwICsxLDQzIEBACisjIC0gVHJ5IHRvIGZpbmQgRW5jaGFudAorIyBPbmNl
IGRvbmUsIHRoaXMgd2lsbCBkZWZpbmUKKyMKKyMgIEVOQ0hBTlRfSU5DTFVERV9ESVJTIC0gdGhl
IEVuY2hhbnQgaW5jbHVkZSBkcmVjdG9yaWVzCisjICBFTkNIQU5UX0xJQlJBUklFUyAtIGxpbmsg
dGhlc2UgdG8gdXNlIEVuY2hhbnQKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMKKyMgSVMnJyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBJVFMKKyMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisjIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CisjIE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorIyBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUgorIyBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisjIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitGSU5EX1BBQ0tBR0UoUGtnQ29uZmlnKQorUEtHX0NIRUNLX01P
RFVMRVMoUENfRU5DSEFOVCBlbmNoYW50KQorCitGSU5EX1BBVEgoRU5DSEFOVF9JTkNMVURFX0RJ
UlMKKyAgICBOQU1FUyBlbmNoYW50LmgKKyAgICBQQVRIUyAke1BDX0VOQ0hBTlRfSU5DTFVERURJ
Un0KKyAgICAgICAgICAke1BDX0VOQ0hBTlRfSU5DTFVERV9ESVJTfQorKQorCitGSU5EX0xJQlJB
UlkoRU5DSEFOVF9MSUJSQVJJRVMKKyAgICBOQU1FUyBlbmNoYW50CisgICAgUEFUSFMgJHtQQ19F
TkNIQU5UX0xJQkRJUn0KKyAgICAgICAgICAke1BDX0VOQ0hBTlRfTElCUkFSWV9ESVJTfQorKQpk
aWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc0VmbC5jbWFrZQppbmRleCA2MzNkMWI5Li42ZmNjOGRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5j
bWFrZQpAQCAtMTYzLDMgKzE2Myw4IEBAIElGIChXVEZfVVNFX1RJTEVEX0JBQ0tJTkdfU1RPUkUp
CiAgIEZJTkRfUEFDS0FHRShPcGVuR0wgUkVRVUlSRUQpCiBFTkRJRigpCiAKK09QVElPTihFTkFC
TEVfU1BFTExDSEVDSyAiRW5hYmxlIHNwZWxsY2hlY2tpbmcgZmVhdHVyZSAocmVxdWlyZXMgZW5j
aGFudCkiIE9OKQorSUYgKEVOQUJMRV9TUEVMTENIRUNLKQorICAgICAgRklORF9QQUNLQUdFKEVu
Y2hhbnQgUkVRVUlSRUQpCisgICAgICBBRERfREVGSU5JVElPTlMoLURFTkFCTEVfU1BFTExDSEVD
Sz0xKQorRU5ESUYoKQo=
</data>
<flag name="commit-queue"
          id="172934"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162222</attachid>
            <date>2012-09-05 05:12:55 -0700</date>
            <delta_ts>2012-09-06 07:58:45 -0700</delta_ts>
            <desc>no change, just to make efl ews happy</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>60947</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4ZTJmZGUzLi5hZjc2NjAz
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDktMDMgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qICA8bS5yb2pAc2FzbXVuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZM
XSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZXMgc3BlbGxjaGVja2luZyBm
ZWF0dXJlIGZvciBXSzItRWZsLgorCisgICAgICAgICogU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50
LmNtYWtlOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZTog
RGVmaW5lcyBTUEVMTENIRUNLIG1hY3JvLgorCiAyMDEyLTA5LTAzICBKaW53b28gU29uZyAgPGpp
bndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBVc2UgV2ViS2l0VmVyc2lv
bi5oIHRvIGdldCB2ZXJzaW9uIGluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTI2MjYwYS4uN2Q5
ZDUzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA5LTAzICBHcnplZ29yeiBD
emFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFsIFJvaiAgPG0ucm9q
QHNhbXN1bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gSW1wbGVtZW50YXRpb24gb2Ygc3Bl
bGxjaGVja2luZyBmZWF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTE4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICBBZGQgZW5jaGFudC1yZWxh
dGVkIGNvbXBpbGVyIGZsYWdzOiBoZWFkZXIgcGF0aHMgYW5kIHRoZSBsaWJyYXJ5IGZsYWcuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcDoK
KyAgICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAg
ICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAo
VGV4dENoZWNrZXJFbmNoYW50OjpnZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAg
VXNlcyBuZXdseSBjcmVhdGVkICdhcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCgpJyBtZXRob2Qu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmFyZURpY3Rpb25hcmllc0lu
aXRpYWxpemVkKToKKyAgICAgICAgRGVmaW5lcyBhbiBpbiBsaW5lIG1ldGhvZCB0byByZXR1cm4g
aW5mb3JtYXRpb24gd2hldGhlciBkaWN0aW9uYXJpZXMgaGF2ZSBiZWVuIGxvYWRlZC4KKyAgICAg
ICAgSXQncyB1c2VkIGJ5IFdlYktpdFRleHRDaGVja2VyIGFuZCBUZXh0Q2hlY2tlckVuY2hhbnQu
CisKIDIwMTItMDktMDMgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFNoYXJlIGltbXV0YWJsZSBFbGVtZW50QXR0cmlidXRlRGF0YSBiZXR3ZWVuIGVsZW1lbnRz
IHdpdGggaWRlbnRpY2FsIGF0dHJpYnV0ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4
IDQ1NGVlZTguLmNlODlkNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZs
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC04OCw2ICs4
OCw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICBwbGF0Zm9ybS9QbGF0Zm9ybVN0
cmF0ZWdpZXMuY3BwCiAgIHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKICAgcGxh
dGZvcm0vdGV4dC9lZmwvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUVmbC5jcHAKKyAgcGxh
dGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAKICkKIAogSUYgKEVOQUJM
RV9CQVRURVJZX1NUQVRVUykKQEAgLTMyNCwzICszMjUsNyBAQCBJRiAoRU5BQkxFX1dFQl9BVURJ
TykKICAgQUREX0RFRklOSVRJT05TKC1EVU5JTlNUQUxMRURfQVVESU9fUkVTT1VSQ0VTX0RJUj0i
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vYXVkaW8vcmVzb3VyY2VzIikKIEVORElGICgpCiAKK0lG
IChFTkFCTEVfU1BFTExDSEVDSykKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElS
RUNUT1JJRVMgJHtFTkNIQU5UX0lOQ0xVREVfRElSU30pCisgICAgTElTVChBUFBFTkQgV2ViQ29y
ZV9MSUJSQVJJRVMgJHtFTkNIQU5UX0xJQlJBUklFU30pCitFTkRJRigpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hh
bnQuY3BwCmluZGV4IGY3MmZiMGMuLmFiM2E5ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCkBA
IC02OCw3ICs2OCw3IEBAIHZvaWQgVGV4dENoZWNrZXJFbmNoYW50OjpsZWFybldvcmQoY29uc3Qg
U3RyaW5nJiB3b3JkKQogCiB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGlu
dCYgbWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgaWYgKG1fZW5jaGFudERpY3Rpb25hcmllcy5p
c0VtcHR5KCkpCisgICAgaWYgKCFhcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzaXplX3QgbnVtYmVyT2ZDaGFyYWN0ZXJzID0gc3RyaW5nLmxlbmd0
aCgpOwpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgVGV4dENoZWNrZXJFbmNoYW50OjpjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbWlzc3BlCiBWZWN0b3I8
U3RyaW5nPiBUZXh0Q2hlY2tlckVuY2hhbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmlu
ZyYgd29yZCkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwotICAgIGlmIChtX2VuY2hh
bnREaWN0aW9uYXJpZXMuaXNFbXB0eSgpKQorICAgIGlmICghYXJlRGljdGlvbmFyaWVzSW5pdGlh
bGl6ZWQoKSkKICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CiAKICAgICBmb3IgKFZlY3RvcjxFbmNo
YW50RGljdCo+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9lbmNoYW50RGljdGlvbmFyaWVzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9lbmNoYW50RGljdGlvbmFyaWVzLmVuZCgpOyArK2l0ZXIpIHsKQEAg
LTE3Niw3ICsxNzYsNyBAQCB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6dXBkYXRlU3BlbGxDaGVj
a2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZwogVmVjdG9yPFN0cmluZz4g
VGV4dENoZWNrZXJFbmNoYW50OjpnZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKIHsKICAgICBW
ZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7Ci0gICAgaWYgKG1fZW5jaGFudERpY3Rpb25hcmllcy5p
c0VtcHR5KCkpCisgICAgaWYgKCFhcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCgpKQogICAgICAg
ICByZXR1cm4gbGFuZ3VhZ2VzOwogCiAgICAgLy8gR2V0IGEgVmVjdG9yPENTdHJpbmc+IHdpdGgg
dGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIGluIHVzZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaAppbmRleCAxNzgw
YjQ1Li5hZDZmZjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2Vu
Y2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oCkBAIC00Myw2ICs0Myw3IEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8U3RyaW5nPiBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmKTsK
ICAgICB2b2lkIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGxhbmd1YWdlcyk7CiAgICAgVmVjdG9yPFN0cmluZz4gZ2V0U3BlbGxDaGVja2luZ0xhbmd1
YWdlcygpOworICAgIGJvb2wgYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJl
dHVybiAhbV9lbmNoYW50RGljdGlvbmFyaWVzLmlzRW1wdHkoKTsgfQogCiBwcml2YXRlOgogICAg
IFRleHRDaGVja2VyRW5jaGFudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDEzMjgwMzAuLjRlZmUxMTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMjYgQEAKKzIwMTItMDktMDMgIEdyemVnb3J6IEN6YWprb3dz
a2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+LCBNaWNoYWwgUm9qICA8bS5yb2pAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNr
aW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MTg1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZHMgc3BlbGxpbmcgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDItRUZMIHRoYXQgaXMg
YmFzZWQgb24gRW5jaGFudCBsaWJyYXJ5LgorCisgICAgICAgIEFkZGl0aW9uYWxseSB0aGUgcGF0
Y2ggcHJvdmlkZXMgQVBJIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVj
a2VyIGltcGxlbWVudGF0aW9uCisgICAgICAgIGFzIEVuY2hhbnQgbGlicmFyeSBkb2Vzbid0IGVu
c3VyZSBncmFtbWFyIGNoZWNraW5nLgorICAgICAgICBBcHBsaWNhdGlvbiBpcyBhYmxlIHRvIG92
ZXJ3cml0ZSBpdCAoYm90aCBncmFtbWFyIGFuZCBzcGVsbCBjaGVja2luZykgYnkgZGVmaW5pbmcK
KyAgICAgICAgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZyBhcHByb3ByaWF0ZSBj
YWxsYmFjayBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgQWRkIGVuY2hhbnQtcmVsYXRlZCBjb21waWxlciBmbGFnczogaGVhZGVyIHBhdGhzIGFuZCB0
aGUgbGlicmFyeSBmbGFnLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIu
aDoKKyAgICAgICAgQWRkIGZpbGVzIHRoYXQgY29udGFpbiBBUEkgdG8gdGhlIG1haW4gV2ViS2l0
Mi1FRkwncyBoZWFkZXIgdG8gYmUgYXZhaWxhYmxlIGZvciBhcHBsaWNhdGlvbnMuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHA6IEFkZGVkLgorICAg
ICAgICBJbXBsZW1lbnRzIGNhbGxiYWNrcyBmdW5jdGlvbnMgb2YgV0tUZXh0Q2hlY2tlci4KKwor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6Omlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0
VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjppc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0R3Jh
bW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2Vy
Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENo
ZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJL
aXRUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6
V2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViS2l0VGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRD
aGVja2VyOjpndWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVj
a2VyOjpsZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6aWdu
b3JlV29yZCk6CisgICAgICAgIFRob3NlIG1ldGhvZHMgYXJlIGRpcmVjdGx5IGdpdmVuIGFzIGNh
bGxiYWNrIGZ1bmN0aW9ucyBmb3IgV0tUZXh0Q2hlY2tlcidzIGNsaWVudC4KKyAgICAgICAgVGhl
aXIgcmVhc29uIGlzIHRvIGNob29zZSBiZXR3ZWVuIFdlYktpdCdzIHNwZWxsaW5nIGltcGxlbWVu
dGF0aW9uIGFuZCBjbGllbnQncyBvbmVzLgorCisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRD
aGVja2VyOjpFbmNoYW50SGVscGVyOjphcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpFbmNoYW50SGVscGVyOjp1cGRhdGVTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgVGhlIG1ldGhvZHMgYXJlIHVzZWQgYnkgZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nLmNwcCBmaWxlIGFuZCBhbGxvdyB0byBkbyBub3QKKyAgICAg
ICAgZXhwb3NlICdtX3RleHRDaGVja2VyRW5jaGFudCcuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oOiBBZGRlZC4KKyAgICAgICAgRGVmaW5lcyBjbGFz
cyB3aGljaCBjaG9vc2VzIGJldHdlZW4gY2xpZW50J3MgaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxp
bmcgYW5kIHRoZSBXZWJLaXQgb25lLgorCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0VGV4dENoZWNrZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6ZXdr
VGV4dENoZWNrZXIpOgorICAgICAgICBSZXR1cm5zIHN0cnVjdCB0aGF0IGtlZXBzIGNsaWVudCdz
IGNhbGxiYWNrcy4KKworICAgICAgICAoRW5jaGFudEhlbHBlcik6CisgICAgICAgIEtlZXBzIGlu
Zm9ybWF0aW9uIGJhc2VkIG9uIFRleHRDaGVja2VyRW5jaGFudCBpbXBsZW1lbnRhdGlvbi4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAgICAgICAgKF9F
d2tfQ29udGV4dDo6X0V3a19Db250ZXh0KToKKyAgICAgICAgSW5pdGlhbHplcyBzcGVsbGNoZWNr
ZXIgZmVhdHVyZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNr
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfY2xpZW50X2F0dGFjaCk6
CisgICAgICAgIFNldHMgV0tUZXh0Q2hlY2tlciBjbGllbnQgYW5kIHJlZ2lzdGVycyBXZWJLaXRU
ZXh0Q2hlY2tlcidzIGNhbGxiYWNrcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZXMgQVBJIHRvIHNldCBjbGll
bnQncyBzcGVsbGluZyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKF9Fd2tfVGV4
dF9DaGVja2VyKToKKyAgICAgICAgRGVmaW5lcyBzdHJ1Y3Qgd2l0aCBjbGllbnQncyBjYWxsYmFj
a3MgcmVzcG9uaXNibGUgZm9yIHNwZWxsaW5nLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmNwcDogQWRkZWQuCisgICAgICAgIChfaWRsZXJD
b250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQpOgorICAgICAgICAoX2lkbGVyR3JhbW1hckNo
ZWNraW5nQ2hhbmdlZCk6CisgICAgICAgIChfaWRsZXJTZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KToKKyAgICAgICAgVGhlIGFwcGxpY2F0aW9uIGlzIG5vdGlmaWVkIGFib3V0IHNwZWxsaW5nIHNl
dHRpbmdzIGNoYW5nZSAodGhleSBtYXkgYmUgY2hhbmdlZAorICAgICAgICB0aHJvdWdoIGNvbnRl
eHQgbWVudSBvcHRpb24pIG9uIGlkbGVyIHRvIGRvIG5vdCBibG9jayBXZWJLaXQuCisKKyAgICAg
ICAgKF9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3Nl
dCk6CisgICAgICAgIEhlbHBlciB0aGF0IGNvbnZlcnRzIHN0cmluZyB3aXRoIGxhbmd1YWdlcyB2
YWx1ZXMgdG8gdGhlIGNvbnZlbmllbnQgdmVjdG9yLgorCisgICAgICAgIChld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldCk6Cisg
ICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZ3JhbW1hcl9jaGVja2luZ19jaGFuZ2Vk
X2NiX3NldCk6CisgICAgICAgIFNldHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyB1c2VkIHRvIG5v
dGlmeSB0aGUgY2xpZW50IHdoZW4gdGhlIHNwZWxsaW5nIHNldHRpbmdzCisgICAgICAgIHdlcmUg
Y2hhbmdlZCBieSBXZWJLaXQuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19l
bmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19nZXQpOgorICAgICAgICAoZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldCk6Cisg
ICAgICAgIEFQSSB0byBzZXQvZ2V0IHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nLgorCisg
ICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdf
Z2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9j
aGVja2luZ19zZXQpOgorICAgICAgICBBUEkgdG8gc2V0L2dldCB0aGUgZ3JhbW1hciBjaGVja2lu
Zy4KKworICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlc19zZXQpOgorICAgICAgICBTZXRzIGxhbmd1YWdlcyB0byB1c2UgYnkgV2ViS2l0IGlt
cGxlbWVudGF0aW9uIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oOiBBZGRlZC4KKyAgICAgICAg
QWRkcyBBUEkgZm9yIG1hbmlwdWxhdGluZyBzcGVsbCBjaGVja2VyIGZlYXR1cmUuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVk
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxs
RG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERv
Y3VtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxs
aW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFy
T2ZTdHJpbmcpOiBSZW1vdmVkIFdlYkNvcmUgbmFtYXNwYWNlIGFzIGl0J3MgYWxyZWFkeSBkZWZp
bmVkIGZvciB0aGUgd2hvbGUgZmlsZS4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNw
ZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dG9nZ2xl
U3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJL
aXQ6OlRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpsZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aWdu
b3JlV29yZCk6CisgICAgICAgIFRob3NlIG1ldGhvZHMgY2FsbCBXS1RleHRDaGVja2VyIGNsaWVu
dCBtZXRob2RzLgorCiAyMDEyLTA5LTAzICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5n
LmNvbT4KIAogICAgICAgICBbV0syXVtXVFJdIEltcGxlbWVudCBXZWJLaXRFbmFibGVDYXJldEJy
b3dzaW5nIGF0dHJpYnV0ZSBpbiB0ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZQppbmRleCA5ZjFiOTllLi5jNGMzODA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZQpAQCAtNDcsNiArNDcsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMK
ICAgICBVSVByb2Nlc3MvQVBJL2VmbC9OZXR3b3JrSW5mb1Byb3ZpZGVyLmNwcAogICAgIFVJUHJv
Y2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1Zp
YnJhdGlvblByb3ZpZGVyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVj
a2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAK
ICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKICAg
ICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTYxLDYgKzYyLDggQEAgTElT
VChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmln
YXRpb25fcG9saWN5X2RlY2lzaW9uLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1
cF9tZW51X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcAor
ICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCisgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a191cmxfcmVxdWVzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jl
c3BvbnNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfc2NoZW1lX3JlcXVlc3Qu
Y3BwCkBAIC0xMjYsNiArMTI5LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2VmbCIKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL25ldHdvcmsvc291cCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lbmNo
YW50IgogICAgICIke1dFQkNPUkVfRElSfS9zdmcvZ3JhcGhpY3MiCiAgICAgIiR7V0VCS0lUMl9E
SVJ9L1NoYXJlZC9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9zb3VwIgpAQCAtMjE2
LDYgKzIyMCw4IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fcG9saWN5X2RlY2lz
aW9uLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElS
fS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuaCIKKyAgICAiJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaCIKKyAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXJfc2V0dGluZy5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9yZXF1ZXN0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VS
Q0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmgiCiAgICAgIiR7Q01B
S0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9y
ZXF1ZXN0LmgiCkBAIC0zMTQsMyArMzIwLDggQEAgSUYgKEVOQUJMRV9JTlNQRUNUT1IpCiAgICAg
ICAgICAgICAgICAgICAgICAgIFBBVFRFUk4gIiouZ2lmIgogICAgICAgICAgICAgICAgICAgICAg
ICBQQVRURVJOICIqLnBuZyIpCiBFTkRJRiAoKQorCitJRiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisg
ICAgTElTVChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTICR7RU5DSEFOVF9JTkNM
VURFX0RJUlN9KQorICAgIExJU1QoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTICR7RU5DSEFOVF9M
SUJSQVJJRVN9KQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRVdlYktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmgKaW5kZXggNzUwY2I0OC4uZGU1ZjRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiZXdr
X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmgiCiAjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVf
aXRlbS5oIgogI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2No
ZWNrZXIuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKICNpbmNsdWRl
ICJld2tfdXJsX3JlcXVlc3QuaCIKICNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlLmgiCiAjaW5j
bHVkZSAiZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMGQ0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKQEAgLTAsMCAr
MSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNr
ZXIuaCIKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJheS5o
IgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisj
aW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
LmgiCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBJbml0aWFs
aXplIGNsaWVudCdzIGZ1bmN0aW9ucyB0byBAYyAwIHRvIGJlIHN1cmUgdGhhdCB0aGV5IGFyZSBu
b3QgZGVmaW5lZC4KK0V3a19UZXh0X0NoZWNrZXIgV2ViS2l0VGV4dENoZWNrZXI6Om1fZXdrVGV4
dENoZWNrZXIgeworICAgIDAsIC8vIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0CisgICAg
MCwgLy8gdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZQorICAgIDAsIC8vIHN0cmluZ19z
cGVsbGluZ19jaGVjaworICAgIDAsIC8vIHVpX3NwZWxsaW5nX3N0YXR1c19nZXQKKyAgICAwLCAv
LyB1aV90b2dnbGVfc3BlbGxpbmdfc3RhdHVzX2dldAorICAgIDAsIC8vIHVpX3NwZWxsaW5nX21p
c3NwZWxsZWRfd29yZF91cGRhdGUKKyAgICAwLCAvLyB3b3JkX2d1ZXNzZXNfZ2V0CisgICAgMCwg
Ly8gd29yZF9sZWFybgorICAgIDAgLy8gd29yZF9pZ25vcmUKK307CisKK093blB0cjxXZWJDb3Jl
OjpUZXh0Q2hlY2tlckVuY2hhbnQ+IG1fdGV4dENoZWNrZXJFbmNoYW50ID0gV2ViQ29yZTo6VGV4
dENoZWNrZXJFbmNoYW50OjpjcmVhdGUoKTsKKworYm9vbCBXZWJLaXRUZXh0Q2hlY2tlcjo6aXND
b250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoY29uc3Qgdm9pZCopCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBub3QgY2FsbGVkIGJ5IFdlYktpdDIv
V2ViQ29yZS4gSnVzdCBrZWVwIGl0IGZvciBBUEkgY29tcGF0aWJpbGl0eS4KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCk7Cit9CisKK3Zv
aWQgV2ViS2l0VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChi
b29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqKQoreworICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoZW5hYmxlZCk7Cit9CisKK2Jv
b2wgV2ViS2l0VGV4dENoZWNrZXI6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChjb25zdCB2b2lk
KikKK3sKKyAgICByZXR1cm4gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFy
X2NoZWNraW5nX2dldCgpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpzZXRHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCopCit7CisgICAgZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldChlbmFibGVkKTsK
K30KKwordWludDY0X3QgV2ViS2l0VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWco
V0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2Vy
LnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KQorICAgICAgICByZXR1cm4gbV9ld2tUZXh0
Q2hlY2tlci51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCh0b0ltcGwocGFnZSktPnZpZXdX
aWRnZXQoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6
Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqKQorewor
ICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2Up
CisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9z
ZSh0YWcpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJp
bmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCopCit7CisgICAg
aWYgKG1fZXdrVGV4dENoZWNrZXIuc3RyaW5nX3NwZWxsaW5nX2NoZWNrKQorICAgICAgICBtX2V3
a1RleHRDaGVja2VyLnN0cmluZ19zcGVsbGluZ19jaGVjayh0YWcsIHRvSW1wbCh0ZXh0KS0+c3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5n
dGgpOworICAgIGVsc2UKKyAgICAgICAgbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmNoZWNrU3BlbGxp
bmdPZlN0cmluZyh0b0ltcGwodGV4dCktPnN0cmluZygpLCAqbWlzc3BlbGxpbmdMb2NhdGlvbiwg
Km1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcodWludDY0X3QsIFdLU3RyaW5nUmVmLCBXS0FycmF5UmVmKiwgaW50MzJf
dCosIGludDMyX3QqLCBjb25zdCB2b2lkKikKK3sKKyAgICAvLyBGSVhNRTogY2FsbCBjbGllbnQn
cyBmdW5jdGlvbi4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFdlYktpdFRleHRD
aGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqKQoreworICAgIGlmIChtX2V3
a1RleHRDaGVja2VyLnVpX3NwZWxsaW5nX3N0YXR1c19nZXQpCisgICAgICAgIHJldHVybiBtX2V3
a1RleHRDaGVja2VyLnVpX3NwZWxsaW5nX3N0YXR1c19nZXQoKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2lu
Zyhjb25zdCB2b2lkKikKK3sKKyAgICBpZiAobV9ld2tUZXh0Q2hlY2tlci51aV90b2dnbGVfc3Bl
bGxpbmdfc3RhdHVzX2dldCkKKyAgICAgICAgbV9ld2tUZXh0Q2hlY2tlci51aV90b2dnbGVfc3Bl
bGxpbmdfc3RhdHVzX2dldCgpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjp1cGRhdGVT
cGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgbWlz
c3BlbGxlZFdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnVp
X3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGUpCisgICAgICAgIG1fZXdrVGV4dENoZWNr
ZXIudWlfc3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZSh0YWcsIHRvSW1wbChtaXNzcGVs
bGVkV29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYktpdFRleHRD
aGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3QsIFdLU3Ry
aW5nUmVmLCBXS0dyYW1tYXJEZXRhaWxSZWYsIGNvbnN0IHZvaWQqKQoreworICAgIC8vIEZJWE1F
OiBjYWxsIGNsaWVudCdzIGZ1bmN0aW9uLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1dL
QXJyYXlSZWYgV2ViS2l0VGV4dENoZWNrZXI6Omd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywg
V0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgV0tNdXRhYmxlQXJyYXlSZWYg
c3VnZ2VzdGlvbnNGb3JXb3JkID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsKKworICAgIGlmICht
X2V3a1RleHRDaGVja2VyLndvcmRfZ3Vlc3Nlc19nZXQpIHsKKyAgICAgICAgRWluYV9MaXN0KiBs
aXN0ID0gbV9ld2tUZXh0Q2hlY2tlci53b3JkX2d1ZXNzZXNfZ2V0KHRhZywgdG9JbXBsKHdvcmQp
LT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgdm9pZCogaXRlbTsKKworICAgICAg
ICBFSU5BX0xJU1RfRlJFRShsaXN0LCBpdGVtKSB7CisgICAgICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhzdGF0aWNfY2FzdDxjaGFyKj4oaXRlbSkpKTsKKyAgICAgICAgICAgIFdLQXJyYXlBcHBl
bmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlvbi5nZXQoKSk7CisgICAgICAgICAg
ICBmcmVlKGl0ZW0pOworICAgICAgICB9CisKKyAgICB9IGVsc2UgeworICAgICAgICBWZWN0b3I8
U3RyaW5nPiBndWVzc2VzID0gbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmdldEd1ZXNzZXNGb3JXb3Jk
KHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworCisgICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBndWVzc2VzLmJlZ2luKCk7IGl0ZXIgIT0gZ3Vlc3Nlcy5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vn
Z2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhpdGVyLT51dGY4
KCkuZGF0YSgpKSk7CisgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0Zv
cldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHN1Z2dlc3Rpb25zRm9yV29yZDsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6bGVhcm5X
b3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAg
aWYgKG1fZXdrVGV4dENoZWNrZXIud29yZF9sZWFybikKKyAgICAgICAgbV9ld2tUZXh0Q2hlY2tl
ci53b3JkX2xlYXJuKHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fdGV4dENoZWNrZXJFbmNoYW50LT5sZWFybldvcmQodG9JbXBs
KHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6Omlnbm9yZVdv
cmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBp
ZiAobV9ld2tUZXh0Q2hlY2tlci53b3JkX2lnbm9yZSkKKyAgICAgICAgbV9ld2tUZXh0Q2hlY2tl
ci53b3JkX2lnbm9yZSh0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgZWxzZQorICAgICAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+aWdub3JlV29yZCh0b0lt
cGwod29yZCktPnN0cmluZygpKTsKK30KKworYm9vbCBXZWJLaXRUZXh0Q2hlY2tlcjo6RW5jaGFu
dEhlbHBlcjo6YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKQoreworICAgIHJldHVybiBtX3Rl
eHRDaGVja2VyRW5jaGFudC0+YXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKTsKK30KKwordm9p
ZCBXZWJLaXRUZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6dXBkYXRlU3BlbGxDaGVja2luZ0xh
bmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKQoreworICAgIGlmICghbV90
ZXh0Q2hlY2tlckVuY2hhbnQtPmFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCkpCisgICAgICAg
IG1fdGV4dENoZWNrZXJFbmNoYW50LT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1
YWdlcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQ
RUxMQ0hFQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9X
ZWJLaXRUZXh0Q2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2Vi
S2l0VGV4dENoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWI0
NTg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
V2ViS2l0VGV4dENoZWNrZXIuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJLaXRUZXh0
Q2hlY2tlcl9oCisjZGVmaW5lIFdlYktpdFRleHRDaGVja2VyX2gKKworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorCisjaW5jbHVkZSAiVGV4dENoZWNrZXJFbmNoYW50LmgiCisjaW5jbHVkZSAiV0tB
cnJheS5oIgorI2luY2x1ZGUgIldLUGFnZS5oIgorI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5j
bHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CisvLyBDbGFzcyBjaG9vc2VzIGJldHdlZW4gY2xpZW50J3MgaW1wbGVtZW50YXRpb24gb2Ygc3Bl
bGxpbmcgYW5kIHRoZSBXZWJLaXQgb25lLgorY2xhc3MgV2ViS2l0VGV4dENoZWNrZXIgeworcHVi
bGljOgorICAgIC8vIENhbGxiYWNrcyByZXF1aXJlZCBieSBXS1RleHRDaGVja2VyLgorICAgIHN0
YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworICAgIHN0YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldENvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOworICAgIHN0YXRpYyBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgdWlu
dDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1
aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCisgICAgc3RhdGljIHZvaWQg
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50
MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGNoZWNrR3JhbW1hck9mU3Ry
aW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgV0tBcnJheVJlZiogZ3JhbW1hckRl
dGFpbHMsIGludDMyX3QqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCogYmFkR3JhbW1hckxl
bmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgYm9vbCBzcGVsbGlu
Z1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3Rh
dGljIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh1aW50NjRfdCB0YWcs
IFdLU3RyaW5nUmVmIG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAg
ICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3Qg
dGFnLCBXS1N0cmluZ1JlZiBiYWRHcmFtbWFyUGhyYXNlLCBXS0dyYW1tYXJEZXRhaWxSZWYgZ3Jh
bW1hckRldGFpbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgV0tBcnJh
eVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGxlYXJuV29yZCh1aW50NjRfdCB0
YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRp
YyB2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKKworICAgIC8vIEFjY2VzcyB0byBjbGllbnQncyBjYWxsYmFja3Mu
CisgICAgc3RhdGljIEV3a19UZXh0X0NoZWNrZXIqIGV3a1RleHRDaGVja2VyKCkgeyByZXR1cm4g
Jm1fZXdrVGV4dENoZWNrZXI7IH0KKworICAgIGNsYXNzIEVuY2hhbnRIZWxwZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIGJvb2wgYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKTsK
KyAgICAgICAgc3RhdGljIHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKTsKKyAgICB9OworCitwcml2YXRlOgorICAgIHN0YXRp
YyBFd2tfVGV4dF9DaGVja2VyIG1fZXdrVGV4dENoZWNrZXI7CisKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisjZW5kaWYgLy8gV2Vi
S2l0VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwCmluZGV4IDYwYzc5ZTEuLjBjZDY2MzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTM2LDYgKzM2LDEw
IEBACiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNpbmNs
dWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogCkBAIC05OCw2ICsxMDIsMTIgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAj
ZW5kaWYKICAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9hdHRhY2go
dGhpcyk7CiAgICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2godGhpcyk7
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgICAgIGV3a190ZXh0X2NoZWNrZXJfY2xpZW50
X2F0dGFjaCgpOworICAgICAgICBpZiAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpKQorICAgICAgICAgICAgZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7CisjZW5kaWYKKwog
ICAgIH0KIAogICAgIH5fRXdrX0NvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xM2ZlMTNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKQEAgLTAsMCArMSw5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCisK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5j
bHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
I2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05BTUUsIE5BTUUpICBc
Cit2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSBjYikgICAg
IFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIFdlYktpdFRleHRDaGVja2VyOjpld2tUZXh0Q2hlY2tlcigpLT5OQU1FID0gY2I7
ICAgXAorfQorCisvKioKKyAqIEF0dGFjaGVzIHNwZWxsY2hlY2tlciBmZWF0dXJlLgorICoKKyAq
IEBpbnRlcm5hbAorICoKKyAqIFRoZSBkZWZhdWx0IHNwZWxsY2hlY2tlciBmZWF0dXJlIGlzIGJh
c2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKyAqIENsaWVudCBtYXkgdXNlIG93biBpbXBsZW1lbnRh
dGlvbiBvZiBzcGVsbGNoZWNrZXIgcHJldmlvdXNseSBzZXQKKyAqIHRocm91Z2ggdGhlIGNhbGxi
YWNrIGZ1bmN0aW9ucy4KKyAqLwordm9pZCBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9hdHRhY2go
KQoreworICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IGZh
bHNlOworICAgIGlmIChkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIFdLVGV4dENoZWNrZXJDbGllbnQgdGV4dENoZWNrZXJDbGllbnQgeworICAg
ICAgICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICAwLCAvLyBj
bGllbnRJbmZvCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nQWxsb3dlZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OmlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0Q29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6aXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0R3Jh
bW1hckNoZWNraW5nRW5hYmxlZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OnVuaXF1ZVNw
ZWxsRG9jdW1lbnRUYWcsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9j
dW1lbnRXaXRoVGFnLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09m
U3RyaW5nLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcs
CisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nLAorICAgICAg
ICBXZWJLaXRUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZywKKyAgICAgICAg
V2ViS2l0VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQsCisg
ICAgICAgIFdlYktpdFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpndWVzc2VzRm9yV29yZCwKKyAgICAgICAg
V2ViS2l0VGV4dENoZWNrZXI6OmxlYXJuV29yZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6
Omlnbm9yZVdvcmQKKyAgICB9OworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRleHRDaGVj
a2VyQ2xpZW50KTsKKworICAgIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IHRydWU7
Cit9CisKKyNlbHNlCisKKy8vIERlZmluZXMgYW4gZW1wdHkgQVBJIHRvIGRvIG5vdCBicmVhayBi
dWlsZC4KKyNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBO
QU1FKSAgXAordm9pZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUp
ICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKK30KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKworRVdLX1RFWFRf
Q0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1l
bnRfVGFnX0dldCwgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCitFV0tfVEVYVF9DSEVD
S0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9U
YWdfQ2xvc2UsIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UpCitFV0tfVEVYVF9DSEVD
S0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjaywg
c3RyaW5nX3NwZWxsaW5nX2NoZWNrKQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdr
X1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfR2V0LCB1aV9zcGVsbGluZ19zdGF0dXNf
Z2V0KQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VSV9U
b2dnbGVfU3BlbGxpbmdfU3RhdHVzX0dldCwgdWlfdG9nZ2xlX3NwZWxsaW5nX3N0YXR1c19nZXQp
CitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxs
aW5nX01pc3NwZWxsZWRfV29yZF9VcGRhdGUsIHVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91
cGRhdGUpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dv
cmRfR3Vlc3Nlc19HZXQsIHdvcmRfZ3Vlc3Nlc19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExC
QUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm4sIHdvcmRfbGVhcm4pCitFV0tfVEVY
VF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlLCB3b3Jk
X2lnbm9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190
ZXh0X2NoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTM4YzA1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3RleHRfY2hlY2tlci5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSBld2tfdGV4
dF9jaGVja2VyLmgKKyAqIEBicmllZiBQcm92aWRlcyBBUEkgdG8gb3ZlcndyaXRlIHRoZSBkZWZh
dWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24uCisgKgorICogVGhlcmUgaXMg
b25lIHNwZWxsY2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0aW9uIGFuZCBpdCdzIGRpc2FibGVk
IGJ5IGRlZmF1bHQuCisgKiBJdCBhbGxvd3MgdG8gY2hlY2sgc3BlbGxpbmcgaW4gdGhlIGVkaXRh
YmxlIGFyZWFzLgorICogSWYgYXBwbGljYXRpb24gd2FudHMgdG8gZW5hYmxlIHRoZSBmZWF0dXJl
LCBBUEkgZnJvbSBAYSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaAorICogc2hvdWxkIGJlIHVz
ZWQuCisgKgorICogVGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlv
biBpcyBiYXNlZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICogSXQgZG9lc24ndCBlbnN1cmUg
Z3JhbW1hciBjaGVja2luZy4gQXBwbGljYXRpb24gaXMgYWJsZSB0byBvdmVyd3JpdGUgdGhlIGRl
ZmF1bHQKKyAqIFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24gYnkgZGVmaW5pbmcg
aXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZworICogYXBwcm9wcmlhdGUgY2FsbGJh
Y2sgZnVuY3Rpb25zLgorICovCisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9oCisjZGVmaW5l
IGV3a190ZXh0X2NoZWNrZXJfaAorCisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1
c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgdWludDY0X3QgKCpFd2tfVGV4
dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0KShjb25zdCBFdmFzX09iamVj
dCAqbyk7Cit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1
bWVudF9UYWdfQ2xvc2UpKHVpbnQ2NF90IHRhZyk7Cit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9D
aGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjaykodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp0
ZXh0LCBpbnQzMl90ICptaXNzcGVsbGluZ19sb2NhdGlvbiwgaW50MzJfdCAqbWlzc3BlbGxpbmdf
bGVuZ3RoKTsKK3R5cGVkZWYgRWluYV9Cb29sICgqRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGlu
Z19TdGF0dXNfR2V0KSh2b2lkKTsKK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfVUlf
VG9nZ2xlX1NwZWxsaW5nX1N0YXR1c19HZXQpKHZvaWQpOwordHlwZWRlZiB2b2lkICgqRXdrX1Rl
eHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19NaXNzcGVsbGVkX1dvcmRfVXBkYXRlKSh1aW50NjRfdCB0
YWcsIGNvbnN0IGNoYXIgKm1pc3NwZWxsZWRfd29yZCk7Cit0eXBlZGVmIEVpbmFfTGlzdCAqKCpF
d2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXQpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hh
ciAqd29yZCk7Cit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm4pKHVp
bnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7Cit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9D
aGVja2VyX1dvcmRfSWdub3JlKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOworCisv
KioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgYSB1bmlxdWUgc3BlbGwgZG9j
dW1lbnQgdGFnLgorICoKKyAqIFRoaXMgY2FsbGJhY2sgd2lsbCByZXR1cm4gYSB0YWcgKGlkZW50
aWZpZXIpIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLgorICogVW5pcXVlIHRhZ3Mg
aGVscCB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggb3RoZXIgb2JqZWN0cyB0aGF0IGFyZSBjaGVj
a2VkIGZvciBzcGVsbGluZyBtaXN0YWtlcy4KKyAqCisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXJf
dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZV9jYl9zZXQKKyAqCisgKiBAcGFyYW0gY2Ig
YSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJL
aXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNr
ZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJf
VW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19HZXQgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxs
YmFjayBmdW5jdGlvbiB0byBjbG9zZSBhIHVuaXF1ZSBzcGVsbCBkb2N1bWVudCB0YWcuCisgKgor
ICogVGhpcyBjYWxsYmFjayB3aWxsIG5vdGlmeSB0aGUgcmVjZWl2ZXIgdGhhdCB0aGUgdXNlciBo
YXMgZmluaXNoZWQgd2l0aCB0aGUgdGFnZ2VkIGRvY3VtZW50LgorICoKKyAqIEBzZWUgZXdrX3Rl
eHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldF9jYl9zZXQKKyAqCisgKiBA
cGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9yZSB0aGUgZGVm
YXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190
ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZV9jYl9zZXQoRXdrX1Rl
eHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlIGNiKTsKKworLyoqCisg
KiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2VhcmNoIGZvciBhIG1pc3NwZWxsZWQgd29y
ZCBpbiB0aGUgZ2l2ZW4gc3RyaW5nLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0
byBzZXQgb3IgQGMgMCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBs
ZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxp
bmdfY2hlY2tfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrIGNi
KTsKKworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfdWlfc3BlbGxpbmdfc3RhdHVzX2dldF9j
Yl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfR2V0IGNiKTsKK0VBUEkg
dm9pZCBld2tfdGV4dF9jaGVja2VyX3VpX3RvZ2dsZV9zcGVsbGluZ19zdGF0dXNfZ2V0X2NiX3Nl
dChFd2tfVGV4dF9DaGVja2VyX1VJX1RvZ2dsZV9TcGVsbGluZ19TdGF0dXNfR2V0IGNiKTsKK0VB
UEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRh
dGVfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3BlbGxlZF9Xb3JkX1Vw
ZGF0ZSBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhbiBh
cnJheSBvZiBzdWdnZXN0ZWQgc3BlbGxpbmdzIGZvciBhIG1pc3NwZWxsZWQgd29yZC4KKyAqCisg
KiBUaGlzIGNhbGxiYWNrIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBkeW5hbWljYWxseSBhbGxvY2F0
ZWQgc3RyaW5ncyAoYXMgY2hhciopIGFuZAorICogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBk
ZXN0cm95aW5nIHRoZW0uCisgKgorICogQHNlZSBFSU5BX0xJU1RfRlJFRS4KKyAqCisgKiBAcGFy
YW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9yZSB0aGUgZGVmYXVs
dCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0
X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1
ZXNzZXNfR2V0IGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYWRk
IHRoZSB3b3JkIHRvIHRoZSBzcGVsbCBjaGVja2VyIGRpY3Rpb25hcnkuCisgKgorICogQHBhcmFt
IGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyAwIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQg
V2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9j
aGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29yZF9MZWFybiBjYik7
CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRlbGwgdGhlIHNwZWxsIGNo
ZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4gd29yZC4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2Fs
bGJhY2sgdG8gc2V0IG9yIEBjIDAgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJh
Y2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfd29yZF9p
Z25vcmVfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUgY2IpOworCisjaWZkZWYg
X19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a190ZXh0X2NoZWNrZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tl
cl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODg2
ZGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdr
X3RleHRfY2hlY2tlcl9wcml2YXRlX2gKKyNkZWZpbmUgZXdrX3RleHRfY2hlY2tlcl9wcml2YXRl
X2gKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXIu
aCIKKworLyoqCisgKiBAYnJpZWYgU3RydWN0dXJlIHRoYXQga2VlcHMgY2xpZW50J3MgY2FsbGJh
Y2sgZnVuY3Rpb25zLgorICoKKyAqIEBpbnRlcm5hbAorICovCitzdHJ1Y3QgX0V3a19UZXh0X0No
ZWNrZXIgeworICAgIEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19H
ZXQgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9V
bmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdf
Y2xvc2U7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2sgc3RyaW5n
X3NwZWxsaW5nX2NoZWNrOworICAgIEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVz
X0dldCB1aV9zcGVsbGluZ19zdGF0dXNfZ2V0OworICAgIEV3a19UZXh0X0NoZWNrZXJfVUlfVG9n
Z2xlX1NwZWxsaW5nX1N0YXR1c19HZXQgdWlfdG9nZ2xlX3NwZWxsaW5nX3N0YXR1c19nZXQ7Cisg
ICAgRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19NaXNzcGVsbGVkX1dvcmRfVXBkYXRlIHVp
X3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGU7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9X
b3JkX0d1ZXNzZXNfR2V0IHdvcmRfZ3Vlc3Nlc19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9X
b3JkX0xlYXJuIHdvcmRfbGVhcm47CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZSB3
b3JkX2lnbm9yZTsKK307Cit0eXBlZGVmIF9Fd2tfVGV4dF9DaGVja2VyIEV3a19UZXh0X0NoZWNr
ZXI7CisKKy8vIE1ha2VzIGl0IHZpc2libGUgZm9yIFdUUi4KK0VBUEkgdm9pZCBld2tfdGV4dF9j
aGVja2VyX2NsaWVudF9hdHRhY2goKTsKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQor
I2VuZGlmIC8vIGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWY3YzJmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5nLmNwcApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKKworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorI2luY2x1ZGUgIldLVGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0
Q2hlY2tlci5oIgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCitzdGF0aWMgc3RydWN0IHsKKyAgICBib29sIGVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nIDogMTsKKyAgICBib29sIGVuYWJsZUdyYW1tYXJDaGVja2luZyA6IDE7CisgICAgc3RydWN0
IHsKKyAgICAgICAgRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0NvbnRpbnVvdXNfU3BlbGxfQ2hl
Y2tpbmdfQ2hhbmdlZCBjb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQ7CisgICAgICAgIEV3
a19UZXh0X0NoZWNrZXJfU2V0dGluZ19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQgZ3JhbW1hckNo
ZWNraW5nQ2hhbmdlZDsKKyAgICB9IHNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzOworICAgIFZlY3Rv
cjxTdHJpbmc+IHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXM7Cit9IGV3a1RleHRDaGVja2VyU2V0dGlu
ZyA9IHsgZmFsc2UsIGZhbHNlLCB7MCwgMH0sIFZlY3RvcjxTdHJpbmc+KCl9OworCitzdGF0aWMg
RWluYV9Cb29sIF9pZGxlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCh2b2lkKikKK3sK
KyAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmNv
bnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCkKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0
aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdl
ZCgKKyAgICAgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250aW51b3VzU3Bl
bGxDaGVja2luZyk7CisKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCitz
dGF0aWMgRWluYV9Cb29sIF9pZGxlckdyYW1tYXJDaGVja2luZ0NoYW5nZWQodm9pZCopCit7Cisg
ICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5ncmFt
bWFyQ2hlY2tpbmdDaGFuZ2VkKQorICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGlu
Z0NoYW5nZWRDYWxsYmFja3MuZ3JhbW1hckNoZWNraW5nQ2hhbmdlZCgKKyAgICAgICAgICAgIGV3
a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVHcmFtbWFyQ2hlY2tpbmcpOworCisgICAgcmV0dXJu
IEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfaWRsZXJTZXRT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKHZvaWQqKQoreworICAgIC8vIEZJWE1FOiBDb25zaWRlciB0
byBkZWxlZ2F0ZSBjYWxsaW5nIG9mIHRoaXMgbWV0aG9kIGluIFdlYlByb2Nlc3MgdG8gZG8gbm90
IGRlbGF5L2Jsb2NrIFVJUHJvY2Vzcy4KKyAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6RW5jaGFudEhl
bHBlcjo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhld2tUZXh0Q2hlY2tlclNldHRpbmcu
c3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7CisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNF
TDsKK30KKwordm9pZCBzdGF0aWMgX2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuZXdMYW5ndWFnZXMpCit7
CisgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzID0gbmV3TGFuZ3VhZ2VzOworICAgIGV3a1Rl
eHRDaGVja2VyU2V0dGluZy5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzLnN3YXAobGFuZ3VhZ2VzKTsK
KyAgICBlY29yZV9pZGxlcl9hZGQoX2lkbGVyU2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcywgMCk7
Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisKK3ZvaWQgZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQoRXdrX1Rl
eHRfQ2hlY2tlcl9TZXR0aW5nX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlZCBjYWxs
YmFjaykKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBld2tUZXh0Q2hlY2tlclNldHRp
bmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3MuY29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2Vk
ID0gY2FsbGJhY2s7CisjZW5kaWYKK30KKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
Z3JhbW1hcl9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdf
R3JhbW1hcl9DaGVja2luZ19DaGFuZ2VkIGNhbGxiYWNrKQoreworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5n
cmFtbWFyQ2hlY2tpbmdDaGFuZ2VkID0gY2FsbGJhY2s7CisjZW5kaWYKK30KKworRWluYV9Cb29s
IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19nZXQoKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBld2tUZXh0Q2hl
Y2tlclNldHRpbmcuZW5hYmxlQ29udGludW91c1NwZWxsQ2hlY2tpbmc7CisjZWxzZQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19l
bmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoRWluYV9Cb29sIGVuYWJsZSkKK3sK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBlbmFibGUgPSAhIWVuYWJsZTsKKyAgICBpZiAo
ZXdrVGV4dENoZWNrZXJTZXR0aW5nLmVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nICE9IGVu
YWJsZSkgeworICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmcgPSBlbmFibGU7CisKKyAgICAgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGUpOworCisgICAgICAgIC8vIFNl
dHMgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4KKyAgICAgICAg
aWYgKGVuYWJsZSAmJiAhV2ViS2l0VGV4dENoZWNrZXI6OkVuY2hhbnRIZWxwZXI6OmFyZURpY3Rp
b25hcmllc0luaXRpYWxpemVkKCkpCisgICAgICAgICAgICBfZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoVmVjdG9yPFN0cmluZz4oKSk7CisKKyAg
ICAgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5j
b250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQpCisgICAgICAgICAgICBlY29yZV9pZGxlcl9h
ZGQoX2lkbGVyQ29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VkLCAwKTsKKyAgICB9CisjZW5k
aWYKK30KKworRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1h
cl9jaGVja2luZ19nZXQoKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBl
d2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlR3JhbW1hckNoZWNraW5nOworI2Vsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
ZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KEVpbmFfQm9vbCBlbmFibGUpCit7CisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisgICAgZW5hYmxlID0gISFlbmFibGU7CisgICAgaWYgKGV3a1RleHRD
aGVja2VyU2V0dGluZy5lbmFibGVHcmFtbWFyQ2hlY2tpbmcgIT0gZW5hYmxlKSB7CisgICAgICAg
IGV3a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVHcmFtbWFyQ2hlY2tpbmcgPSBlbmFibGU7CisK
KyAgICAgICAgV0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQo
ZW5hYmxlKTsKKworICAgICAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNldHRpbmdDaGFu
Z2VkQ2FsbGJhY2tzLmdyYW1tYXJDaGVja2luZ0NoYW5nZWQpCisgICAgICAgICAgICBlY29yZV9p
ZGxlcl9hZGQoX2lkbGVyR3JhbW1hckNoZWNraW5nQ2hhbmdlZCwgMCk7CisgICAgfQorI2VuZGlm
Cit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlc19zZXQoY29uc3QgY2hhciogbGFuZ3VhZ2VzKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIFZlY3RvcjxTdHJpbmc+IG5ld0xhbmd1YWdlczsKKyAgICBTdHJpbmc6OmZyb21VVEY4
KGxhbmd1YWdlcykuc3BsaXQoc3RhdGljX2Nhc3Q8VUNoYXI+KCcsJyksIG5ld0xhbmd1YWdlcyk7
CisKKyAgICBfZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
c19zZXQobmV3TGFuZ3VhZ2VzKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2U4NjgwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlIGV3a190ZXh0X2NoZWNrZXJf
c2V0dGluZy5oCisgKiBAYnJpZWYgQVBJIGZvciBtYW5pcHVsYXRpbmcgc3BlbGwgY2hlY2tlciBm
ZWF0dXJlLgorICovCisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2gKKyNkZWZp
bmUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lm
ZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHZvaWQgKCpF
d2tfVGV4dF9DaGVja2VyX1NldHRpbmdfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2Vk
KShFaW5hX0Jvb2wgZW5hYmxlKTsKK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU2V0
dGluZ19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQpKEVpbmFfQm9vbCBlbmFibGUpOworCisvKioK
KyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdo
ZW4gdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBX
ZWJLaXQuCisgKgorICogU3BlY2lmeWluZyBvZiB0aGlzIGNhbGxiYWNrIGlzIG5lZWRlZCBpZiB0
aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCisgKiBvbmNlIFdl
YktpdCBjaGFuZ2VzIHRoaXMgc2V0dGluZy4KKyAqIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3Qg
aW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0LgorICogQ2hhbmdpbmcgb2YgdGhp
cyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJlIG1hZGUgYXMgYSByZXN1bHQgb2Yg
bW9kaWZ5aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBNZW51IGJ5IGEgdXNlci4KKyAqCisg
KiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0IG9yIEBjIDAgdG8gaW52
YWxpZGF0ZSB0aGUgcHJldmlvdXMgb25lCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4
dF9DaGVja2VyX1NldHRpbmdfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VkIGNiKTsK
KworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNs
aWVudCB3aGVuIHRoZSBncmFtbWFyIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2Vi
S2l0LgorICoKKyAqIFNwZWNpZnlpbmcgb2YgdGhpcyBjYWxsYmFjayBpcyBuZWVkZWQgaWYgdGhl
IGFwcGxpY2F0aW9uIHdhbnRzIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucworICogb25jZSBXZWJL
aXQgY2hhbmdlcyB0aGlzIHNldHRpbmcuCisgKiBJZiB0aGUgYXBwbGljYXRpb24gaXMgbm90IGlu
dGVyZXN0ZWQsIHRoaXMgY2FsbGJhY2sgaXMgbm90IHNldC4KKyAqIENoYW5naW5nIG9mIHRoaXMg
c2V0dGluZyBhdCB0aGUgV2ViS2l0IGxldmVsIGNhbiBiZSBtYWRlIGFzIGEgcmVzdWx0IG9mIG1v
ZGlmeWluZworICogb3B0aW9ucyBpbiBhIENvbnRleHQgTWVudSBieSBhIHVzZXIuCisgKgorICog
QHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNldCBvciBAYyAwIHRvIGludmFs
aWRhdGUgdGhlIHByZXZpb3VzIG9uZQorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9z
ZXR0aW5nX2dyYW1tYXJfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9T
ZXR0aW5nX0dyYW1tYXJfQ2hlY2tpbmdfQ2hhbmdlZCBjYik7CisKKy8qKgorICogUXVlcmllcyBp
ZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQuCisgKgorICogQHJldHVybiBA
YyBFSU5BX1RSVUUgaWYgY29udGludW91cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkIG9yIEAg
RUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19nZXQodm9p
ZCk7CisKKy8qKgorICogRW5hYmxlcy9kaXNhYmxlcyBjb250aW51b3VzIHNwZWxsIGNoZWNraW5n
LgorICoKKyAqIEFkZGl0aW9uYWxseSwgdGhpcyBmdW5jdGlvbiBjYWxscyBhIGNhbGxiYWNrIGZ1
bmN0aW9uIChpZiBkZWZpbmVkKSB0byBub3RpZnkKKyAqIHRoZSBjbGllbnQgYWJvdXQgdGhlIGNo
YW5nZSBvZiB0aGUgc2V0dGluZy4KKyAqIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZh
dWx0LgorICoKKyAqIEBzZWUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQKKyAqCisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFf
VFJVRSB0byBlbmFibGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBvciBAYyBFSU5BX0ZBTFNF
IHRvIGRpc2FibGUKKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFi
bGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8q
KgorICogUXVlcmllcyBpZiBncmFtbWFyIGNoZWNraW5nIGlzIGVuYWJsZWQuCisgKgorICogQXBw
bGljYXRpb24gbWF5IG92ZXJ3cml0ZSB3ZWJraXQgZ3JhbW1hciBjaGVja2luZyBpbXBsZW1lbnRh
dGlvbiBieSBzZXR0aW5nIGNhbGxiYWNrIGZ1bmN0aW9ucworICogQHNlZSBld2tfdGV4dF9jaGVj
a2VyLmgKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIGlzIGVuYWJsZWQgb3IgQCBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLwor
RUFQSSBFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2No
ZWNraW5nX2dldCh2b2lkKTsKKworLyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGdyYW1tYXIgY2hl
Y2tpbmcuCisgKgorICogQWRkaXRpb25hbGx5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGEgY2FsbGJh
Y2sgZnVuY3Rpb24gKGlmIGRlZmluZWQpIHRvIG5vdGlmeQorICogdGhlIGNsaWVudCBhYm91dCB0
aGUgY2hhbmdlIG9mIHRoZSBzZXR0aW5nLgorICogVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGFu
ZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IFdlYktpdC1FRkwgYnkgZGVmYXVsdC4KKyAqCisgKiBAc2Vl
IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19ncmFtbWFyX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0
CisgKgorICogQHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUgdG8gZW5hYmxlIGdyYW1tYXIgY2hl
Y2tpbmcgb3IgQGMgRUlOQV9GQUxTRSB0byBkaXNhYmxlCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KEVpbmFfQm9vbCBl
bmFibGUpOworCisvKioKKyAqIFNldHMgQGxhbmd1YWdlcyBhcyB0aGUgbGlzdCBvZiBsYW5ndWFn
ZXMgdG8gdXNlIGJ5IGRlZmF1bHQgV2ViS2l0CisgKiBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNo
ZWNrZXIgZmVhdHVyZSB3aXRoIEVuY2hhbnQgbGlicmFyeSBzdXBwb3J0LgorICoKKyAqIElmIEBs
YW5ndWFnZXMgaXMgQGMgMCwgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgdXNlZC4KKyAqIElmIHRo
ZSBkZWZhdWx0IGxhbmd1YWdlIGNhbiBub3QgYmUgZGV0ZXJtaW5lZCB0aGVuIGFueSBhdmFpbGFi
bGUgZGljdGlvbmFyeSB3aWxsIGJlIHVzZWQuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBp
bnZhbGlkYXRlcyB0aGUgcHJldmlvdXNseSBzZXQgbGFuZ3VhZ2VzLgorICogICAgICAgVGhlIGRp
Y3Rpb25hcmllcyBhcmUgcmVxdWVzdGVkIGFzeW5jaHJvbm91c2x5LgorICoKKyAqIEBwYXJhbSBs
YW5ndWFnZXMgYSBsaXN0IG9mIGNvbW1hICgnLCcpIHNlcGFyYXRlZCBsYW5ndWFnZSBjb2Rlcwor
ICogICAgICAgIG9mIHRoZSBmb3JtICdlbl9VUycsIGllLCBsYW5ndWFnZV9WQVJJQU5ULCBtYXkg
YmUgQGMgMC4KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0IGNoYXIgKmxhbmd1YWdlcyk7CisKKyNpZmRlZiBf
X2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBld2tfdGV4dF9jaGVja2VyX3NldHRp
bmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tl
ckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNw
cAppbmRleCBhYTMzZjJmLi5lZDkyMWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcApAQCAtMSw1ICsxLDcgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEg
TW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI5LDkgQEAKICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgog
CiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXZWJUZXh0Q2hl
Y2tlci5oIgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zNyw5MSAr
NDEsMTQ0IEBAIHN0YXRpYyBUZXh0Q2hlY2tlclN0YXRlIHRleHRDaGVja2VyU3RhdGU7CiAKIGNv
bnN0IFRleHRDaGVja2VyU3RhdGUmIFRleHRDaGVja2VyOjpzdGF0ZSgpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBzdGF0aWMgYm9vbCBkaWRJ
bml0aWFsaXplU3RhdGUgPSBmYWxzZTsKKyAgICBpZiAoZGlkSW5pdGlhbGl6ZVN0YXRlKQorICAg
ICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKKworICAgIFdlYlRleHRDaGVja2VyQ2xpZW50
JiBjbGllbnQgPSBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpOworICAgIHRleHRD
aGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBjbGllbnQuY29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQgPSBjbGllbnQuZ3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwor
CisgICAgZGlkSW5pdGlhbGl6ZVN0YXRlID0gdHJ1ZTsKKyNlbmRpZgogICAgIHJldHVybiB0ZXh0
Q2hlY2tlclN0YXRlOwogfQogCiBib29sIFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nQWxsb3dlZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5j
b250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKTsKKyNlbHNlCiAgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZChib29sKQordm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBpZiAoc3Rh
dGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4dENoZWNrZXJTdGF0
ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgaWYgKHN0YXRlKCkuaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkID09IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBpc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQ7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7
CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4
dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVk
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAg
dGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOworI2Vu
ZGlmCiB9CiAKLWludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2Vi
UGFnZVByb3h5KikKK2ludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWco
V2ViUGFnZVByb3h5KiBwYWdlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkudW5pcXVlU3BlbGxEb2N1bWVudFRhZyhwYWdlKTsKKyNlbHNlCiAgICAgcmV0dXJuIDA7Cisj
ZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhp
bnQ2NF90KQordm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2
NF90IHRhZykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2xvc2VTcGVsbERvY3Vt
ZW50V2l0aFRhZyh0YWcpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQzMl90Jiwg
aW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRf
dCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBp
bnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNw
ZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBtaXNzcGVsbGluZ0xvY2F0aW9u
LCBtaXNzcGVsbGluZ0xlbmd0aCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hl
Y2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgVmVjdG9y
PFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBUZXh0
Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBj
b25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4m
IGdyYW1tYXJEZXRhaWxzLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QmIGJh
ZEdyYW1tYXJMZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrR3Jh
bW1hck9mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBncmFt
bWFyRGV0YWlscywgYmFkR3JhbW1hckxvY2F0aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKKyNlbmRp
ZgogfQogCiBib29sIFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyNl
bHNlCiAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS50b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hl
Y2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90LCBjb25zdCBT
dHJpbmcmKQordm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdv
cmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRhZywgbWlzc3BlbGxlZFdvcmQpOworI2VuZGlm
CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
ZyhpbnQ2NF90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikKK3ZvaWQgVGV4
dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhpbnQ2NF90IHNwZWxs
RG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1h
ckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVO
QUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCku
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIGJhZEdy
YW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNr
ZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIFZlY3RvcjxTdHJpbmc+JikKK3ZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3Jk
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJp
bmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkLCBndWVz
c2VzKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCwg
Y29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90IHNwZWxs
RG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+
Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworI2VuZGlmCiB9CiAK
LXZvaWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3Zv
aWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25z
dCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmlnbm9yZVdv
cmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UgYi9Tb3Vy
Y2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZDY5YzcxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kRW5jaGFu
dC5jbWFrZQpAQCAtMCwwICsxLDQzIEBACisjIC0gVHJ5IHRvIGZpbmQgRW5jaGFudAorIyBPbmNl
IGRvbmUsIHRoaXMgd2lsbCBkZWZpbmUKKyMKKyMgIEVOQ0hBTlRfSU5DTFVERV9ESVJTIC0gdGhl
IEVuY2hhbnQgaW5jbHVkZSBkcmVjdG9yaWVzCisjICBFTkNIQU5UX0xJQlJBUklFUyAtIGxpbmsg
dGhlc2UgdG8gdXNlIEVuY2hhbnQKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMKKyMgSVMnJyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBJVFMKKyMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisjIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CisjIE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorIyBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUgorIyBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisjIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitGSU5EX1BBQ0tBR0UoUGtnQ29uZmlnKQorUEtHX0NIRUNLX01P
RFVMRVMoUENfRU5DSEFOVCBlbmNoYW50KQorCitGSU5EX1BBVEgoRU5DSEFOVF9JTkNMVURFX0RJ
UlMKKyAgICBOQU1FUyBlbmNoYW50LmgKKyAgICBQQVRIUyAke1BDX0VOQ0hBTlRfSU5DTFVERURJ
Un0KKyAgICAgICAgICAke1BDX0VOQ0hBTlRfSU5DTFVERV9ESVJTfQorKQorCitGSU5EX0xJQlJB
UlkoRU5DSEFOVF9MSUJSQVJJRVMKKyAgICBOQU1FUyBlbmNoYW50CisgICAgUEFUSFMgJHtQQ19F
TkNIQU5UX0xJQkRJUn0KKyAgICAgICAgICAke1BDX0VOQ0hBTlRfTElCUkFSWV9ESVJTfQorKQpk
aWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc0VmbC5jbWFrZQppbmRleCA2MzNkMWI5Li42ZmNjOGRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5j
bWFrZQpAQCAtMTYzLDMgKzE2Myw4IEBAIElGIChXVEZfVVNFX1RJTEVEX0JBQ0tJTkdfU1RPUkUp
CiAgIEZJTkRfUEFDS0FHRShPcGVuR0wgUkVRVUlSRUQpCiBFTkRJRigpCiAKK09QVElPTihFTkFC
TEVfU1BFTExDSEVDSyAiRW5hYmxlIHNwZWxsY2hlY2tpbmcgZmVhdHVyZSAocmVxdWlyZXMgZW5j
aGFudCkiIE9OKQorSUYgKEVOQUJMRV9TUEVMTENIRUNLKQorICAgICAgRklORF9QQUNLQUdFKEVu
Y2hhbnQgUkVRVUlSRUQpCisgICAgICBBRERfREVGSU5JVElPTlMoLURFTkFCTEVfU1BFTExDSEVD
Sz0xKQorRU5ESUYoKQo=
</data>
<flag name="commit-queue"
          id="173312"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162506</attachid>
            <date>2012-09-06 07:58:45 -0700</date>
            <delta_ts>2012-09-11 03:43:34 -0700</delta_ts>
            <desc>apply Christophe&apos;s and Gyuyoung suggestions</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>64012</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmNWYwZjFmLi4xNWZjMDRi
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDktMDYgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qICA8bS5yb2pAc2FzbXVuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZM
XSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZXMgc3BlbGxjaGVja2luZyBm
ZWF0dXJlIGZvciBXSzItRWZsLgorCisgICAgICAgICogU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50
LmNtYWtlOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZTog
RGVmaW5lcyBTUEVMTENIRUNLIG1hY3JvLgorCiAyMDEyLTA5LTA1ICBHZW9yZ2UgU3RhaWtvcyAg
PHN0YWlrb3NAd2Via2l0Lm9yZz4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gTWF0Y2ggdGggZWJ1
aWxkIGZsYWdzIGZyb20gdGhlIHBsYXRmb3JtIGxpYnJhcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZDk5Y2Jj
Li4wZTkwOGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDktMDYgIEdyemVn
b3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+LCBNaWNoYWwgUm9qICA8
bS5yb2pAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBJbXBsZW1lbnRhdGlvbiBv
ZiBzcGVsbGNoZWNraW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MTg1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBlbmNoYW50
LXJlbGF0ZWQgY29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRocyBhbmQgdGhlIGxpYnJhcnkgZmxh
Zy4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQu
Y3BwOgorICAgICAgICAoVGV4dENoZWNrZXJFbmNoYW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcp
OgorICAgICAgICAoVGV4dENoZWNrZXJFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAg
ICAgIChUZXh0Q2hlY2tlckVuY2hhbnQ6OmdldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAg
ICAgICBVc2VzIG5ld2x5IGNyZWF0ZWQgJ2FyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCknIG1l
dGhvZC4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hh
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudDo6YXJlRGljdGlvbmFy
aWVzSW5pdGlhbGl6ZWQpOgorICAgICAgICBEZWZpbmVzIGFuIGluIGxpbmUgbWV0aG9kIHRvIHJl
dHVybiBpbmZvcm1hdGlvbiB3aGV0aGVyIGRpY3Rpb25hcmllcyBoYXZlIGJlZW4gbG9hZGVkLgor
ICAgICAgICBJdCdzIHVzZWQgYnkgV2ViS2l0VGV4dENoZWNrZXIgYW5kIFRleHRDaGVja2VyRW5j
aGFudC4KKwogMjAxMi0wOS0wNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgWE1MSHR0cFJlcXVlc3Qub3BlbiBkb2VzIG5vdCBuZWVkIGN1c3RvbSBiaW5kaW5n
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBiOWFmOThlLi43ZTFiZTk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtODgsNiArODgsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAogICBwbGF0Zm9ybS9w
b3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0
ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3BwCisgIHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hl
Y2tlckVuY2hhbnQuY3BwCiApCiAKIElGIChFTkFCTEVfQkFUVEVSWV9TVEFUVVMpCkBAIC0zMjMs
MyArMzI0LDcgQEAgSUYgKEVOQUJMRV9XRUJfQVVESU8pCiAgIEFERF9ERUZJTklUSU9OUygtRFVO
SU5TVEFMTEVEX0FVRElPX1JFU09VUkNFU19ESVI9IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2F1
ZGlvL3Jlc291cmNlcyIpCiBFTkRJRiAoKQogCitJRiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisgICAg
TElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTICR7RU5DSEFOVF9JTkNMVURF
X0RJUlN9KQorICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTICR7RU5DSEFOVF9MSUJS
QVJJRVN9KQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcAppbmRleCBmNzJmYjBjLi5hYjNh
OWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4
dENoZWNrZXJFbmNoYW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2Vu
Y2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFRleHRD
aGVja2VyRW5jaGFudDo6bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKIAogdm9pZCBUZXh0
Q2hlY2tlckVuY2hhbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmlu
ZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKQogewot
ICAgIGlmIChtX2VuY2hhbnREaWN0aW9uYXJpZXMuaXNFbXB0eSgpKQorICAgIGlmICghYXJlRGlj
dGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IG51
bWJlck9mQ2hhcmFjdGVycyA9IHN0cmluZy5sZW5ndGgoKTsKQEAgLTExNyw3ICsxMTcsNyBAQCB2
b2lkIFRleHRDaGVja2VyRW5jaGFudDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBpbnQmIG1pc3NwZQogVmVjdG9yPFN0cmluZz4gVGV4dENoZWNrZXJFbmNoYW50
OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQpCiB7CiAgICAgVmVjdG9yPFN0
cmluZz4gZ3Vlc3NlczsKLSAgICBpZiAobV9lbmNoYW50RGljdGlvbmFyaWVzLmlzRW1wdHkoKSkK
KyAgICBpZiAoIWFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybiBn
dWVzc2VzOwogCiAgICAgZm9yIChWZWN0b3I8RW5jaGFudERpY3QqPjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1fZW5jaGFudERpY3Rpb25hcmllcy5iZWdpbigpOyBpdGVyICE9IG1fZW5jaGFudERp
Y3Rpb25hcmllcy5lbmQoKTsgKytpdGVyKSB7CkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBUZXh0
Q2hlY2tlckVuY2hhbnQ6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIGxhbmcKIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2VyRW5jaGFudDo6Z2V0U3Bl
bGxDaGVja2luZ0xhbmd1YWdlcygpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOwot
ICAgIGlmIChtX2VuY2hhbnREaWN0aW9uYXJpZXMuaXNFbXB0eSgpKQorICAgIGlmICghYXJlRGlj
dGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuIGxhbmd1YWdlczsKIAogICAg
IC8vIEdldCBhIFZlY3RvcjxDU3RyaW5nPiB3aXRoIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyBpbiB1
c2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4
dENoZWNrZXJFbmNoYW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQv
VGV4dENoZWNrZXJFbmNoYW50LmgKaW5kZXggMTc4MGI0NS4uYWQ2ZmYxZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVu
Y2hhbnQuaApAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4gZ2V0
R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1cGRhdGVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpOwogICAgIFZlY3Rv
cjxTdHJpbmc+IGdldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBib29sIGFyZURpY3Rp
b25hcmllc0luaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gIW1fZW5jaGFudERpY3Rpb25hcmll
cy5pc0VtcHR5KCk7IH0KIAogcHJpdmF0ZToKICAgICBUZXh0Q2hlY2tlckVuY2hhbnQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA1NmE5OGYyLi4yOGJkZGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI2IEBA
CisyMDEyLTA5LTA2ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcu
Y29tPiwgTWljaGFsIFJvaiAgPG0ucm9qQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VG
TF0gSW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2luZyBmZWF0dXJlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE4NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHNwZWxsaW5nIGltcGxlbWVu
dGF0aW9uIGZvciBXZWJLaXQyLUVGTCB0aGF0IGlzIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4K
KworICAgICAgICBBZGRpdGlvbmFsbHkgdGhlIHBhdGNoIHByb3ZpZGVzIEFQSSB0byBvdmVyd3Jp
dGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlvbgorICAgICAg
ICBhcyBFbmNoYW50IGxpYnJhcnkgZG9lc24ndCBlbnN1cmUgZ3JhbW1hciBjaGVja2luZy4KKyAg
ICAgICAgQXBwbGljYXRpb24gaXMgYWJsZSB0byBvdmVyd3JpdGUgaXQgKGJvdGggZ3JhbW1hciBh
bmQgc3BlbGwgY2hlY2tpbmcpIGJ5IGRlZmluaW5nCisgICAgICAgIGl0cyBvd24gaW1wbGVtZW50
YXRpb24gYW5kIHNldHRpbmcgYXBwcm9wcmlhdGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorCisgICAg
ICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBlbmNoYW50LXJlbGF0ZWQgY29t
cGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRocyBhbmQgdGhlIGxpYnJhcnkgZmxhZy4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgIEFkZCBmaWxlcyB0aGF0
IGNvbnRhaW4gQVBJIHRvIHRoZSBtYWluIFdlYktpdDItRUZMJ3MgaGVhZGVyIHRvIGJlIGF2YWls
YWJsZSBmb3IgYXBwbGljYXRpb25zLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvV2Vi
S2l0VGV4dENoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgSW1wbGVtZW50cyBjYWxsYmFja3Mg
ZnVuY3Rpb25zIG9mIFdLVGV4dENoZWNrZXIuCisKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxs
b3dlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2Vy
OjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJLaXRUZXh0Q2hlY2tlcjo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRX
aXRoVGFnKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxp
bmdPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpjaGVja0dy
YW1tYXJPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpzcGVs
bGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OnRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hl
Y2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYktpdFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6Z3Vlc3Nlc0ZvcldvcmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICBUaG9zZSBt
ZXRob2RzIGFyZSBkaXJlY3RseSBnaXZlbiBhcyBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIFdLVGV4
dENoZWNrZXIncyBjbGllbnQuCisgICAgICAgIFRoZXkgY2hvb3NlIGJldHdlZW4gV2ViS2l0J3Mg
c3BlbGxpbmcgaW1wbGVtZW50YXRpb24gYW5kIGNsaWVudCdzIG9uZXMuCisKKyAgICAgICAgKFdl
YktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OkVuY2hhbnRIZWxwZXI6OmFyZURpY3Rpb25hcmllc0lu
aXRpYWxpemVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OkVuY2hhbnRI
ZWxwZXI6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICBUaGUgbWV0aG9k
cyBhcmUgdXNlZCBieSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuY3BwIGZpbGUgYW5kIGFsbG93
IHRvIGRvIG5vdAorICAgICAgICBleHBvc2UgJ21fdGV4dENoZWNrZXJFbmNoYW50Jy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmg6IEFkZGVkLgorICAg
ICAgICBEZWZpbmVzIGNsYXNzIHdoaWNoIGNob29zZXMgYmV0d2VlbiBjbGllbnQncyBpbXBsZW1l
bnRhdGlvbiBvZiBzcGVsbGluZyBhbmQgdGhlIFdlYktpdCBvbmUuCisKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJLaXQ6OldlYktp
dFRleHRDaGVja2VyOjpld2tUZXh0Q2hlY2tlcik6CisgICAgICAgIFJldHVybnMgc3RydWN0IHRo
YXQga2VlcHMgY2xpZW50J3MgY2FsbGJhY2tzLgorCisgICAgICAgIChFbmNoYW50SGVscGVyKToK
KyAgICAgICAgS2VlcHMgaW5mb3JtYXRpb24gYmFzZWQgb24gVGV4dENoZWNrZXJFbmNoYW50IGlt
cGxlbWVudGF0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwOgorICAgICAgICAoX0V3a19Db250ZXh0OjpfRXdrX0NvbnRleHQpOgorICAgICAgICBJbml0
aWFsemVzIHNwZWxsY2hlY2tlciBmZWF0dXJlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3RleHRfY2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAoZXdrX3RleHRfY2hlY2tl
cl9jbGllbnRfYXR0YWNoKToKKyAgICAgICAgU2V0cyBXS1RleHRDaGVja2VyIGNsaWVudCBhbmQg
cmVnaXN0ZXJzIFdlYktpdFRleHRDaGVja2VyJ3MgY2FsbGJhY2tzLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oOiBBZGRlZC4KKyAgICAgICAgRGVmaW5l
cyBBUEkgdG8gc2V0IGNsaWVudCdzIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmg6IEFkZGVkLgor
ICAgICAgICAoX0V3a19UZXh0X0NoZWNrZXIpOgorICAgICAgICBEZWZpbmVzIHN0cnVjdCB3aXRo
IGNsaWVudCdzIGNhbGxiYWNrcyByZXNwb25pc2JsZSBmb3Igc3BlbGxpbmcuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuY3BwOiBBZGRlZC4K
KyAgICAgICAgKF9pZGxlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCk6CisgICAgICAg
IChfaWRsZXJHcmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKToKKyAgICAgICAgKF9pZGxlclNldFNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICBUaGUgYXBwbGljYXRpb24gaXMgbm90aWZpZWQg
YWJvdXQgc3BlbGxpbmcgc2V0dGluZ3MgY2hhbmdlICh0aGV5IG1heSBiZSBjaGFuZ2VkCisgICAg
ICAgIHRocm91Z2ggY29udGV4dCBtZW51IG9wdGlvbikgb24gaWRsZXIgdG8gZG8gbm90IGJsb2Nr
IFdlYktpdC4KKworICAgICAgICAoX2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXNfc2V0KToKKyAgICAgICAgSGVscGVyIHRoYXQgY29udmVydHMgc3RyaW5n
IHdpdGggbGFuZ3VhZ2VzIHZhbHVlcyB0byB0aGUgY29udmVuaWVudCB2ZWN0b3IuCisKKyAgICAg
ICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2No
YW5nZWRfY2Jfc2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19ncmFtbWFy
X2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KToKKyAgICAgICAgU2V0cyB0aGUgY2FsbGJhY2sgZnVu
Y3Rpb25zIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbiB0aGUgc3BlbGxpbmcgc2V0dGlu
Z3MKKyAgICAgICAgd2VyZSBjaGFuZ2VkIGJ5IFdlYktpdC4KKworICAgICAgICAoZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCk6Cisg
ICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfc2V0KToKKyAgICAgICAgQVBJIHRvIHNldC9nZXQgdGhlIGNvbnRpbnVvdXMgc3Bl
bGwgY2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVf
Z3JhbW1hcl9jaGVja2luZ19nZXQpOgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
X2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldCk6CisgICAgICAgIEFQSSB0byBzZXQvZ2V0IHRo
ZSBncmFtbWFyIGNoZWNraW5nLgorCisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldCk6CisgICAgICAgIFNldHMgbGFuZ3VhZ2VzIHRv
IHVzZSBieSBXZWJLaXQgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gRW5jaGFudCBsaWJyYXJ5Lgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmg6
IEFkZGVkLgorICAgICAgICBBZGRzIEFQSSBmb3IgbWFuaXB1bGF0aW5nIHNwZWxsIGNoZWNrZXIg
ZmVhdHVyZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpU
ZXh0Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQpOgorICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQp
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmdyYW1t
YXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hl
Y2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6IFJlbW92ZWQgV2ViQ29yZSBuYW1hc3BhY2UgYXMg
aXQncyBhbHJlYWR5IGRlZmluZWQgZm9yIHRoZSB3aG9sZSBmaWxlLgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjppZ25vcmVXb3JkKToKKyAgICAgICAgVGhvc2UgbWV0aG9kcyBjYWxsIFdL
VGV4dENoZWNrZXIgY2xpZW50IG1ldGhvZHMuCisKIDIwMTItMDktMDYgIFJ5dWFuIENob2kgIDxy
eXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gV2ViTWVtb3J5U2Ft
cGxlci5jcHAgaXMgaW5jbHVkZWQgdHdpY2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4
IGI0OTI0N2YuLjk0NzAwMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00NSw2ICs0
NSw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L05ldHdvcmtJbmZvUHJvdmlkZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVu
dEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvVmlicmF0aW9uUHJvdmlkZXIuY3BwCisg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0LmNwcApAQCAtNTksNiArNjAsOCBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJD
RVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24u
Y3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RleHRfY2hlY2tlci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmcuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXF1ZXN0LmNw
cAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCiAgICAgVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5jcHAKQEAgLTEyNiw2ICsxMjksNyBA
QCBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZWZsIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlybyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9zb3VwIgorICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQiCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L3N2Zy9ncmFwaGljcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIKICAgICAi
JHtXRUJLSVQyX0RJUn0vU2hhcmVkL3NvdXAiCkBAIC0yMTYsNiArMjIwLDggQEAgU0VUIChFV2Vi
S2l0Ml9IRUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uaCIKICAgICAiJHtDTUFLRV9D
VVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0u
aCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19zZXR0aW5ncy5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNF
X0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgiCiAgICAg
IiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jl
cXVlc3QuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a191cmxfcmVzcG9uc2UuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfc2NoZW1lX3JlcXVlc3QuaCIKQEAgLTMxNCwzICsz
MjAsOCBAQCBJRiAoRU5BQkxFX0lOU1BFQ1RPUikKICAgICAgICAgICAgICAgICAgICAgICAgUEFU
VEVSTiAiKi5naWYiCiAgICAgICAgICAgICAgICAgICAgICAgIFBBVFRFUk4gIioucG5nIikKIEVO
RElGICgpCisKK0lGIChFTkFCTEVfU1BFTExDSEVDSykKKyAgICBMSVNUKEFQUEVORCBXZWJLaXQy
X0lOQ0xVREVfRElSRUNUT1JJRVMgJHtFTkNIQU5UX0lOQ0xVREVfRElSU30pCisgICAgTElTVChB
UFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMgJHtFTkNIQU5UX0xJQlJBUklFU30pCitFTkRJRigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCA3NTBjYjQ4
Li5kZTVmNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9F
V2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQy
LmgKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVj
aXNpb24uaCIKICNpbmNsdWRlICJld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAjaW5jbHVkZSAiZXdr
X3NldHRpbmdzLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgorI2luY2x1ZGUgImV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgog
I2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKICNpbmNsdWRlICJld2tfdXJsX3NjaGVtZV9y
ZXF1ZXN0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9X
ZWJLaXRUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9X
ZWJLaXRUZXh0Q2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NWViNTFiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlci5oIgorCisjaWYgRU5BQkxFKFNQ
RUxMQ0hFQ0spCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldLQVBJ
Q2FzdC5oIgorI2luY2x1ZGUgIldLTXV0YWJsZUFycmF5LmgiCisjaW5jbHVkZSAiV0tSZXRhaW5Q
dHIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIK
KyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKKyNpbmNsdWRlIDxFaW5hLmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEluaXRpYWxpemUgY2xpZW50J3MgZnVuY3Rpb25z
IHRvIEBjIDAgdG8gYmUgc3VyZSB0aGF0IHRoZXkgYXJlIG5vdCBkZWZpbmVkLgorRXdrX1RleHRf
Q2hlY2tlciBXZWJLaXRUZXh0Q2hlY2tlcjo6bV9ld2tUZXh0Q2hlY2tlciB7CisgICAgMCwgLy8g
dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQKKyAgICAwLCAvLyB1bmlxdWVfc3BlbGxfZG9j
dW1lbnRfdGFnX2Nsb3NlCisgICAgMCwgLy8gc3RyaW5nX3NwZWxsaW5nX2NoZWNrCisgICAgMCwg
Ly8gdWlfc3BlbGxpbmdfc3RhdHVzX2dldAorICAgIDAsIC8vIHVpX3RvZ2dsZV9zcGVsbGluZ19z
dGF0dXNfZ2V0CisgICAgMCwgLy8gdWlfc3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZQor
ICAgIDAsIC8vIHdvcmRfZ3Vlc3Nlc19nZXQKKyAgICAwLCAvLyB3b3JkX2xlYXJuCisgICAgMCAv
LyB3b3JkX2lnbm9yZQorfTsKKworT3duUHRyPFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudD4g
bV90ZXh0Q2hlY2tlckVuY2hhbnQgPSBXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0
ZSgpOworCitib29sIFdlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
QWxsb3dlZChjb25zdCB2b2lkKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFRo
aXMgbWV0aG9kIGlzIG5vdCBjYWxsZWQgYnkgV2ViS2l0Mi9XZWJDb3JlLiBKdXN0IGtlZXAgaXQg
Zm9yIEFQSSBjb21wYXRpYmlsaXR5LgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJL
aXRUZXh0Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3Qgdm9p
ZCopCit7CisgICAgcmV0dXJuIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19nZXQoKTsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9p
ZCopCit7CisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX3NldChlbmFibGVkKTsKK30KKworYm9vbCBXZWJLaXRUZXh0Q2hlY2tlcjo6
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBld2tf
dGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KCk7Cit9CisK
K3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBl
bmFibGVkLCBjb25zdCB2b2lkKikKK3sKKyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5h
YmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KGVuYWJsZWQpOworfQorCit1aW50NjRfdCBXZWJLaXRU
ZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qg
dm9pZCopCit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNrZXIudW5pcXVlX3NwZWxsX2RvY3VtZW50
X3RhZ19nZXQpCisgICAgICAgIHJldHVybiBtX2V3a1RleHRDaGVja2VyLnVuaXF1ZV9zcGVsbF9k
b2N1bWVudF90YWdfZ2V0KHRvSW1wbChwYWdlKS0+dmlld1dpZGdldCgpKTsKKworICAgIHJldHVy
biAwOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRo
VGFnKHVpbnQ2NF90IHRhZywgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNr
ZXIudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSkKKyAgICAgICAgbV9ld2tUZXh0Q2hl
Y2tlci51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKHRhZyk7Cit9CisKK3ZvaWQgV2Vi
S2l0VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3Nw
ZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAobV9ld2tUZXh0Q2hlY2tlci5z
dHJpbmdfc3BlbGxpbmdfY2hlY2spCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIuc3RyaW5nX3Nw
ZWxsaW5nX2NoZWNrKHRhZywgdG9JbXBsKHRleHQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgZWxzZQorICAgICAg
ICBtX3RleHRDaGVja2VyRW5jaGFudC0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRvSW1wbCh0ZXh0
KS0+c3RyaW5nKCksICptaXNzcGVsbGluZ0xvY2F0aW9uLCAqbWlzc3BlbGxpbmdMZW5ndGgpOwor
fQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyh1aW50NjRf
dCwgV0tTdHJpbmdSZWYsIFdLQXJyYXlSZWYqLCBpbnQzMl90KiwgaW50MzJfdCosIGNvbnN0IHZv
aWQqKQoreworICAgIC8vIEZJWE1FOiBjYWxsIGNsaWVudCdzIGZ1bmN0aW9uLgorICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1No
b3dpbmcoY29uc3Qgdm9pZCopCit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNrZXIudWlfc3BlbGxp
bmdfc3RhdHVzX2dldCkKKyAgICAgICAgcmV0dXJuIG1fZXdrVGV4dENoZWNrZXIudWlfc3BlbGxp
bmdfc3RhdHVzX2dldCgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYktpdFRl
eHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqKQoreworICAg
IGlmIChtX2V3a1RleHRDaGVja2VyLnVpX3NwZWxsaW5nX3N0YXR1c190b2dnbGUpCisgICAgICAg
IG1fZXdrVGV4dENoZWNrZXIudWlfc3BlbGxpbmdfc3RhdHVzX3RvZ2dsZSgpOworfQorCit2b2lk
IFdlYktpdFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHVp
bnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgbWlzc3BlbGxlZFdvcmQsIGNvbnN0IHZvaWQqKQorewor
ICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRh
dGUpCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIudWlfc3BlbGxpbmdfbWlzc3BlbGxlZF93b3Jk
X3VwZGF0ZSh0YWcsIHRvSW1wbChtaXNzcGVsbGVkV29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdy
YW1tYXJTdHJpbmcodWludDY0X3QsIFdLU3RyaW5nUmVmLCBXS0dyYW1tYXJEZXRhaWxSZWYsIGNv
bnN0IHZvaWQqKQoreworICAgIC8vIEZJWE1FOiBjYWxsIGNsaWVudCdzIGZ1bmN0aW9uLgorICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1dLQXJyYXlSZWYgV2ViS2l0VGV4dENoZWNrZXI6Omd1
ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCop
Cit7CisgICAgV0tNdXRhYmxlQXJyYXlSZWYgc3VnZ2VzdGlvbnNGb3JXb3JkID0gV0tNdXRhYmxl
QXJyYXlDcmVhdGUoKTsKKworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLndvcmRfZ3Vlc3Nlc19n
ZXQpIHsKKyAgICAgICAgRWluYV9MaXN0KiBsaXN0ID0gbV9ld2tUZXh0Q2hlY2tlci53b3JkX2d1
ZXNzZXNfZ2V0KHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgdm9pZCogaXRlbTsKKworICAgICAgICBFSU5BX0xJU1RfRlJFRShsaXN0LCBpdGVtKSB7
CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdL
LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxjaGFyKj4oaXRlbSkp
KTsKKyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3Vn
Z2VzdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBmcmVlKGl0ZW0pOworICAgICAgICB9CisKKyAg
ICB9IGVsc2UgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gbV90ZXh0Q2hlY2tl
ckVuY2hhbnQtPmdldEd1ZXNzZXNGb3JXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworICAg
ICAgICBzaXplX3QgbnVtYmVyT2ZHdWVzc2VzID0gZ3Vlc3Nlcy5zaXplKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZHdWVzc2VzOyArK2kpIHsKKyAgICAgICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGd1ZXNzZXNbaV0udXRmOCgpLmRhdGEoKSkpOworICAgICAgICAg
ICAgV0tBcnJheUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9uLmdldCgp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdWdnZXN0aW9uc0ZvcldvcmQ7Cit9
CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OmxlYXJuV29yZCh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLndv
cmRfbGVhcm4pCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIud29yZF9sZWFybih0YWcsIHRvSW1w
bCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZWxzZQorICAgICAgICBtX3Rl
eHRDaGVja2VyRW5jaGFudC0+bGVhcm5Xb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworfQor
Cit2b2lkIFdlYktpdFRleHRDaGVja2VyOjppZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJp
bmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNrZXIud29y
ZF9pZ25vcmUpCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIud29yZF9pZ25vcmUodGFnLCB0b0lt
cGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgbV90
ZXh0Q2hlY2tlckVuY2hhbnQtPmlnbm9yZVdvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9
CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNrZXI6OkVuY2hhbnRIZWxwZXI6OmFyZURpY3Rpb25hcmll
c0luaXRpYWxpemVkKCkKK3sKKyAgICByZXR1cm4gbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmFyZURp
Y3Rpb25hcmllc0luaXRpYWxpemVkKCk7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OkVu
Y2hhbnRIZWxwZXI6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGxhbmd1YWdlcykKK3sKKyAgICBpZiAoIW1fdGV4dENoZWNrZXJFbmNoYW50LT5hcmVE
aWN0aW9uYXJpZXNJbml0aWFsaXplZCgpKQorICAgICAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+
dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhsYW5ndWFnZXMpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliNDU4OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmgKQEAg
LTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViS2l0VGV4dENoZWNrZXJfaAorI2RlZmluZSBXZWJL
aXRUZXh0Q2hlY2tlcl9oCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgIlRl
eHRDaGVja2VyRW5jaGFudC5oIgorI2luY2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJXS1Bh
Z2UuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJf
cHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gQ2xhc3MgY2hvb3NlcyBiZXR3
ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsaW5nIGFuZCB0aGUgV2ViS2l0IG9u
ZS4KK2NsYXNzIFdlYktpdFRleHRDaGVja2VyIHsKK3B1YmxpYzoKKyAgICAvLyBDYWxsYmFja3Mg
cmVxdWlyZWQgYnkgV0tUZXh0Q2hlY2tlci4KKyAgICBzdGF0aWMgYm9vbCBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nQWxsb3dlZChjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMg
Ym9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
Ym9vbCBlbmFibGVkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgYm9vbCBp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3Rh
dGljIHZvaWQgc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pOworCisgICAgc3RhdGljIHVpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1l
bnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRp
YyB2b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodWludDY0X3QgdGFnLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyh1
aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRp
b24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsK
KyAgICBzdGF0aWMgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIHRleHQsIFdLQXJyYXlSZWYqIGdyYW1tYXJEZXRhaWxzLCBpbnQzMl90KiBiYWRHcmFt
bWFyTG9jYXRpb24sIGludDMyX3QqIGJhZEdyYW1tYXJMZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pOworCisgICAgc3RhdGljIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZyhjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5n
KGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoTWlzc3BlbGxlZFdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiBtaXNzcGVsbGVk
V29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgdXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgYmFkR3Jh
bW1hclBocmFzZSwgV0tHcmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWwsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOworCisgICAgc3RhdGljIFdLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQodWlu
dDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAg
ICBzdGF0aWMgdm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBpZ25vcmVXb3JkKHVpbnQ2
NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAg
ICAvLyBBY2Nlc3MgdG8gY2xpZW50J3MgY2FsbGJhY2tzLgorICAgIHN0YXRpYyBFd2tfVGV4dF9D
aGVja2VyKiBld2tUZXh0Q2hlY2tlcigpIHsgcmV0dXJuICZtX2V3a1RleHRDaGVja2VyOyB9CisK
KyAgICBjbGFzcyBFbmNoYW50SGVscGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBi
b29sIGFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHVw
ZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdl
cyk7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgRXdrX1RleHRfQ2hlY2tlciBtX2V3
a1RleHRDaGVja2VyOworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShTUEVMTENIRUNLKQorI2VuZGlmIC8vIFdlYktpdFRleHRDaGVja2VyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCA2
MGM3OWUxLi4wY2Q2NjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0zNiw2ICszNiwxMCBAQAogI2luY2x1ZGUgImV3a19kb3du
bG9hZF9qb2JfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAi
ZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9z
ZXR0aW5nLmgiCisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIApAQCAtOTgsNiAr
MTAyLDEyIEBAIHN0cnVjdCBfRXdrX0NvbnRleHQgewogI2VuZGlmCiAgICAgICAgIGV3a19jb250
ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnRfYXR0YWNoKHRoaXMpOwogICAgICAgICBld2tfY29u
dGV4dF9kb3dubG9hZF9jbGllbnRfYXR0YWNoKHRoaXMpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgICAgICBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9hdHRhY2goKTsKKyAgICAgICAgaWYg
KGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19nZXQoKSkKKyAgICAgICAgICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXNfc2V0KDApOworI2VuZGlmCisKICAgICB9CiAKICAgICB+X0V3a19Db250
ZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190
ZXh0X2NoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRjY2E3
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXIuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CisjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgIldlYktpdFRleHRDaGVja2Vy
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKyNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tF
Ul9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBOQU1FKSAgXAordm9pZCBld2tfdGV4dF9jaGVja2Vy
XyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUgY2IpICAgICBcCit7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBXZWJLaXRUZXh0Q2hl
Y2tlcjo6ZXdrVGV4dENoZWNrZXIoKS0+TkFNRSA9IGNiOyAgIFwKK30KKworLyoqCisgKiBBdHRh
Y2hlcyBzcGVsbGNoZWNrZXIgZmVhdHVyZS4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBUaGUg
ZGVmYXVsdCBzcGVsbGNoZWNrZXIgZmVhdHVyZSBpcyBiYXNlZCBvbiBFbmNoYW50IGxpYnJhcnku
CisgKiBDbGllbnQgbWF5IHVzZSBvd24gaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2VyIHBy
ZXZpb3VzbHkgc2V0CisgKiB0aHJvdWdoIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMuCisgKi8KK3Zv
aWQgZXdrX3RleHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBk
aWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQgPSBmYWxzZTsKKyAgICBpZiAoZGlkSW5pdGlh
bGl6ZVRleHRDaGVja2VyQ2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBXS1RleHRDaGVj
a2VyQ2xpZW50IHRleHRDaGVja2VyQ2xpZW50IHsKKyAgICAgICAga1dLVGV4dENoZWNrZXJDbGll
bnRDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgMCwgLy8gY2xpZW50SW5mbworICAgICAgICBXZWJL
aXRUZXh0Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQsCisgICAgICAg
IFdlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCwKKyAg
ICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCwK
KyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQsCisg
ICAgICAgIFdlYktpdFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnLAorICAgICAg
ICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZywKKyAgICAgICAg
V2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZywKKyAgICAgICAgV2ViS2l0
VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nLAorICAgICAgICBXZWJLaXRUZXh0Q2hl
Y2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZywKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OnRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjp1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nLAorICAgICAgICBXZWJLaXRUZXh0
Q2hlY2tlcjo6Z3Vlc3Nlc0ZvcldvcmQsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpsZWFy
bldvcmQsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjppZ25vcmVXb3JkCisgICAgfTsKKyAg
ICBXS1RleHRDaGVja2VyU2V0Q2xpZW50KCZ0ZXh0Q2hlY2tlckNsaWVudCk7CisKKyAgICBkaWRJ
bml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQgPSB0cnVlOworfQorCisjZWxzZQorCisvLyBEZWZp
bmVzIGFuIGVtcHR5IEFQSSB0byBkbyBub3QgYnJlYWsgYnVpbGQuCisjZGVmaW5lIEVXS19URVhU
X0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwgTkFNRSkgIFwKK3ZvaWQgZXdrX3RleHRf
Y2hlY2tlcl8jI05BTUUjI19jYl9zZXQoVFlQRV9OQU1FKSAgICAgICAgXAoreyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZW5kaWYg
Ly8gRU5BQkxFKFNQRUxMQ0hFQ0spCisKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3
a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19HZXQsIHVuaXF1ZV9zcGVs
bF9kb2N1bWVudF90YWdfZ2V0KQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1Rl
eHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlLCB1bmlxdWVfc3BlbGxf
ZG9jdW1lbnRfdGFnX2Nsb3NlKQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1Rl
eHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2ssIHN0cmluZ19zcGVsbGluZ19jaGVjaykK
K0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxp
bmdfU3RhdHVzX0dldCwgdWlfc3BlbGxpbmdfc3RhdHVzX2dldCkKK0VXS19URVhUX0NIRUNLRVJf
Q0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX1RvZ2dsZSwg
dWlfc3BlbGxpbmdfc3RhdHVzX3RvZ2dsZSkKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VU
KEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3BlbGxlZF9Xb3JkX1VwZGF0ZSwgdWlf
c3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZSkKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJB
Q0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldCwgd29yZF9ndWVzc2VzX2dl
dCkKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfV29yZF9M
ZWFybiwgd29yZF9sZWFybikKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0
X0NoZWNrZXJfV29yZF9JZ25vcmUsIHdvcmRfaWdub3JlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmMxZjQ3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmgKQEAgLTAsMCArMSwxOTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvKioKKyAqIEBmaWxlIGV3a190ZXh0X2NoZWNrZXIuaAorICogQGJyaWVmIFByb3ZpZGVz
IEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1l
bnRhdGlvbi4KKyAqCisgKiBUaGVyZSBpcyBvbmUgc3BlbGxjaGVja2VyIG9iamVjdCBwZXIgYXBw
bGljYXRpb24gYW5kIGl0J3MgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAqIEl0IGFsbG93cyB0byBj
aGVjayBzcGVsbGluZyBpbiB0aGUgZWRpdGFibGUgYXJlYXMuCisgKiBJZiBhcHBsaWNhdGlvbiB3
YW50cyB0byBlbmFibGUgdGhlIGZlYXR1cmUsIEFQSSBmcm9tIEBhIGV3a190ZXh0X2NoZWNrZXJf
c2V0dGluZy5oCisgKiBzaG91bGQgYmUgdXNlZC4KKyAqCisgKiBUaGUgZGVmYXVsdCBXZWJLaXQg
c3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBFbmNoYW50IGxpYnJh
cnkuCisgKiBJdCBkb2Vzbid0IGVuc3VyZSBncmFtbWFyIGNoZWNraW5nLiBBcHBsaWNhdGlvbiBp
cyBhYmxlIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdAorICogV2ViS2l0IHNwZWxsY2hlY2tlciBp
bXBsZW1lbnRhdGlvbiBieSBkZWZpbmluZyBpdHMgb3duIGltcGxlbWVudGF0aW9uIGFuZCBzZXR0
aW5nCisgKiBhcHByb3ByaWF0ZSBjYWxsYmFjayBmdW5jdGlvbnMuCisgKi8KKworI2lmbmRlZiBl
d2tfdGV4dF9jaGVja2VyX2gKKyNkZWZpbmUgZXdrX3RleHRfY2hlY2tlcl9oCisKKyNpbmNsdWRl
IDxFdmFzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwor
LyoqCisgKiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8g
cmV0dXJuIGEgdGFnIChpZGVudGlmaWVyKSB3aGljaCBpcyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1
ZS4KKyAqIAorICogVW5pcXVlIHRhZ3MgaGVscCB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggb3Ro
ZXIgb2JqZWN0cyB0aGF0IGFyZSBjaGVja2VkIGZvciBzcGVsbGluZyBtaXN0YWtlcy4KKyAqCisg
KiBAcGFyYW0gbyB0aGUgdmlldyBvYmplY3QgdG8gZ2V0IHVuaXF1ZSB0YWcKKyAqCisgKiBAcmV0
dXJuIHVuaXF1ZSB0YWcgZm9yIHRoZSBnaXZlbiBAYSBvIHZpZXcgb2JqZWN0CisgKi8KK3R5cGVk
ZWYgdWludDY0X3QgKCpFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdf
R2V0KShjb25zdCBFdmFzX09iamVjdCAqbyk7CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFt
ZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNsb3NlIHRoZSBwcnZpb3VzbHkgc2V0IHRh
Zy4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIHdpbGwgbm90aWZ5IHRoZSByZWNlaXZlciB0aGF0IHRo
ZSB1c2VyIGhhcyBmaW5pc2hlZCB3aXRoIHRoZSB0YWdnZWQgZG9jdW1lbnQuCisgKgorICogQHBh
cmFtIHRhZyB0aGUgdGFnIHRvIGJlIGNsb3NlZAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4
dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UpKHVpbnQ2NF90IHRhZyk7
CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9u
IHRvIHNlYXJjaCBmb3IgYSBtaXNzcGVsbGVkIHdvcmRzIGluIHRoZSBnaXZlbiBzdHJpbmcuCisg
KgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3
aGljaCBkb2N1bWVudCB0aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBpbiBt
b3N0IGNhc2VzIG5vdCBuZWNlc3NhcmlseSwganVzdCBmb3IgaWdub3JlZCB3b3JkLAorICogICAg
ICAgIEBjIDAgY2FuIGJlIHBhc3NlZCBpbiBmb3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEg
cGFydGljdWxhciBkb2N1bWVudAorICogQHBhcmFtIHRleHQgdGhlIHRleHQgY29udGFpbmluZyB0
aGUgd29yZHMgdG8gc3BlbGxjaGVjaworICogQHBhcmFtIG1pc3NwZWxsaW5nX2xvY2F0aW9uIGEg
cG9pbnRlciB0byBzdG9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtaXNzcGVsbGVkIEBhIHRleHQs
IEBjIC0xIGlmIHRoZSBAYSB0ZXh0IGlzIGNvcnJlY3QKKyAqIEBwYXJhbSBtaXNzcGVsbGluZ19s
ZW5ndGggYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBsZW5ndGggb2YgbWlzc3BlbGxlZCBAYSB0ZXh0
LCBAYyAwIGlmIHRoZSBAYSB0ZXh0IGlzIGNvcnJlY3QKKyAqLwordHlwZWRlZiB2b2lkICgqRXdr
X1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2spKHVpbnQ2NF90IHRhZywgY29uc3Qg
Y2hhciAqdGV4dCwgaW50MzJfdCAqbWlzc3BlbGxpbmdfbG9jYXRpb24sIGludDMyX3QgKm1pc3Nw
ZWxsaW5nX2xlbmd0aCk7CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNh
bGxiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3RhdHVzIG9mIFVJIFNwZWxsaW5nLgorICoKKyAq
IEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHRoZSBVSSBTcGVsbGluZyBpcyBzaG93biwgQGMgRUlO
QV9GQUxTRSBpZiBpdCdzIGhpZGRlbgorICovCit0eXBlZGVmIEVpbmFfQm9vbCAoKkV3a19UZXh0
X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX0dldCkodm9pZCk7CisKKy8qKgorICogRGVmaW5l
cyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRvZ2dsZSB0aGUgVUkg
U3BlbGxpbmcuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxp
bmdfU3RhdHVzX1RvZ2dsZSkodm9pZCk7CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBm
b3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgVUkgU3BlbGxpbmcgZm9yIHRo
ZSBtaXNzcGVsbGVkIHdvcmQuCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlm
eSB0aGUgc3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVudCB0aGF0IHRoZSBtaXNzcGVsbGVkIHdv
cmQgaXMgYXNzb2NpYXRlZCwKKyAqIEBwYXJhbSBtaXNzcGVsbGVkX3dvcmQgdGhlIG1pc3NwZWxs
ZWQgd29yZAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5n
X01pc3NwZWxsZWRfV29yZF9VcGRhdGUpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqbWlzc3Bl
bGxlZF93b3JkKTsKKworLyoqCisgKiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJh
Y2sgZnVuY3Rpb24gdG8gZ2V0IGEgbGlzdCBvZiBzdWdnZXN0ZWQgc3BlbGxpbmdzIGZvciBhIG1p
c3NwZWxsZWQgQGEgd29yZC4KKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5
IHRoZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRvY3VtZW50IHRoYXQgQGEgdGV4dCBpcyBhc3NvY2lh
dGVkLAorICogICAgICAgIEBjIDAgY2FuIGJlIHBhc3NlZCBmb3IgdGV4dCBub3QgYXNzb2NpYXRl
ZCB3aXRoIGEgcGFydGljdWxhciBkb2N1bWVudAorICogQHBhcmFtIHdvcmQgdGhlIHdvcmQgdG8g
Z2V0IGd1ZXNzZXMKKyAqIEByZXR1cm4gYSBsaXN0IG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBz
dHJpbmdzIChhcyBjaGFyKikgYW5kCisgKiAgICAgICAgIGNhbGxlciBpcyByZXNwb25zaWJsZSBm
b3IgZGVzdHJveWluZyB0aGVtLgorICovCit0eXBlZGVmIEVpbmFfTGlzdCAqKCpFd2tfVGV4dF9D
aGVja2VyX1dvcmRfR3Vlc3Nlc19HZXQpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7
CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFkZCB0aGUgd29yZCB0byB0
aGUgc3BlbGwgY2hlY2tlciBkaWN0aW9uYXJ5LgorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRh
ZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIgd2hpY2ggZG9jdW1lbnQgdGhhdCBAYSB0ZXh0
IGlzIGFzc29jaWF0ZWQsCisgKiAgICAgICAgQGMgMCBjYW4gYmUgcGFzc2VkIGZvciB0ZXh0IG5v
dCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGRvY3VtZW50CisgKiBAcGFyYW0gd29yZCB0
aGUgd29yZCB0byBhZGQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9Xb3Jk
X0xlYXJuKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOworCisvKioKKyAqIFNldHMg
YSBjYWxsYmFjayBmdW5jdGlvbiB0byB0ZWxsIHRoZSBzcGVsbCBjaGVja2VyIHRvIGlnbm9yZSBh
IGdpdmVuIHdvcmQuCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUg
c3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVudCB0aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwK
KyAqICAgICAgICBAYyAwIGNhbiBiZSBwYXNzZWQgZm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0
aCBhIHBhcnRpY3VsYXIgZG9jdW1lbnQKKyAqIEBwYXJhbSB3b3JkIHRoZSB3b3JkIHRvIGlnbm9y
ZQorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlKSh1aW50
NjRfdCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBm
dW5jdGlvbiB0byBnZXQgYSB1bmlxdWUgc3BlbGwgZG9jdW1lbnQgdGFnLgorICoKKyAqIEBwYXJh
bSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZh
dWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3Rl
eHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldF9jYl9zZXQoRXdrX1RleHRf
Q2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldCBjYik7CisKKy8qKgorICogU2V0
cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNsb3NlIGEgdW5pcXVlIHNwZWxsIGRvY3VtZW50IHRh
Zy4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8g
cmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLwor
RUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9z
ZV9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3Nl
IGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2VhcmNoIGZvciBh
IG1pc3NwZWxsZWQgd29yZHMgaW4gdGhlIGdpdmVuIHN0cmluZy4KKyAqCisgKiBAcGFyYW0gY2Ig
YSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBX
ZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2No
ZWNrZXJfc3RyaW5nX3NwZWxsaW5nX2NoZWNrX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1N0cmlu
Z19TcGVsbGluZ19DaGVjayBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9u
IHRvIGdldCB0aGUgc3RhdHVzIG9mIFVJIFNwZWxsaW5nLgorICoKKyAqIEBwYXJhbSBjYiBhIG5l
dyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktp
dCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tl
cl91aV9zcGVsbGluZ19zdGF0dXNfZ2V0X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxs
aW5nX1N0YXR1c19HZXQgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0
byB0b2dnbGUgdGhlIFVJIFNwZWxsaW5nLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFj
ayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFj
ayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91aV9zcGVs
bGluZ19zdGF0dXNfdG9nZ2xlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0
YXR1c19Ub2dnbGUgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB1
cGRhdGUgdGhlIFVJIFNwZWxsaW5nIGZvciB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICoKKyAqIEBw
YXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBk
ZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdr
X3RleHRfY2hlY2tlcl91aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRlX2NiX3NldChF
d2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX01pc3NwZWxsZWRfV29yZF9VcGRhdGUgY2IpOwor
CisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgYW4gYXJyYXkgb2Ygc3Vn
Z2VzdGVkIHNwZWxsaW5ncyBmb3IgYSBtaXNzcGVsbGVkIHdvcmQuCisgKgorICogQHBhcmFtIGNi
IGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQg
V2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9j
aGVja2VyX3dvcmRfZ3Vlc3Nlc19nZXRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVz
c2VzX0dldCBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFkZCB0
aGUgd29yZCB0byB0aGUgc3BlbGwgY2hlY2tlciBkaWN0aW9uYXJ5LgorICoKKyAqIEBwYXJhbSBj
YiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0
IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRf
Y2hlY2tlcl93b3JkX2xlYXJuX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm4gY2Ip
OworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0ZWxsIHRoZSBzcGVsbCBj
aGVja2VyIHRvIGlnbm9yZSBhIGdpdmVuIHdvcmQuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNh
bGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNh
bGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3dv
cmRfaWdub3JlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlIGNiKTsKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfdGV4dF9jaGVja2VyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXJfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlcl9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MTBjNmYzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfcHJp
dmF0ZV9oCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVj
a2VyLmgiCisKKy8qKgorICogQGJyaWVmIFN0cnVjdHVyZSB0aGF0IGtlZXBzIGNsaWVudCdzIGNh
bGxiYWNrIGZ1bmN0aW9ucy4KKyAqCisgKiBAaW50ZXJuYWwKKyAqLworc3RydWN0IF9Fd2tfVGV4
dF9DaGVja2VyIHsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9U
YWdfR2V0IHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0OworICAgIEV3a19UZXh0X0NoZWNr
ZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19DbG9zZSB1bmlxdWVfc3BlbGxfZG9jdW1lbnRf
dGFnX2Nsb3NlOworICAgIEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrIHN0
cmluZ19zcGVsbGluZ19jaGVjazsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0
YXR1c19HZXQgdWlfc3BlbGxpbmdfc3RhdHVzX2dldDsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VJ
X1NwZWxsaW5nX1N0YXR1c19Ub2dnbGUgdWlfc3BlbGxpbmdfc3RhdHVzX3RvZ2dsZTsKKyAgICBF
d2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX01pc3NwZWxsZWRfV29yZF9VcGRhdGUgdWlfc3Bl
bGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZTsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRf
R3Vlc3Nlc19HZXQgd29yZF9ndWVzc2VzX2dldDsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRf
TGVhcm4gd29yZF9sZWFybjsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlIHdvcmRf
aWdub3JlOworfTsKK3R5cGVkZWYgX0V3a19UZXh0X0NoZWNrZXIgRXdrX1RleHRfQ2hlY2tlcjsK
KworLy8gTWFrZXMgaXQgdmlzaWJsZSBmb3IgV1RSLgorRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNr
ZXJfY2xpZW50X2F0dGFjaCgpOworCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisjZW5k
aWYgLy8gZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjM4ZWIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmcuY3BwCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hF
Q0spCisjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgIldlYktpdFRleHRDaGVj
a2VyLmgiCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisK
K3N0YXRpYyBzdHJ1Y3QgeworICAgIGJvb2wgZW5hYmxlQ29udGludW91c1NwZWxsQ2hlY2tpbmcg
OiAxOworICAgIGJvb2wgZW5hYmxlR3JhbW1hckNoZWNraW5nIDogMTsKKyAgICBzdHJ1Y3Qgewor
ICAgICAgICBFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdfQ29udGludW91c19TcGVsbF9DaGVja2lu
Z19DaGFuZ2VkIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZDsKKyAgICAgICAgRXdrX1Rl
eHRfQ2hlY2tlcl9TZXR0aW5nX0dyYW1tYXJfQ2hlY2tpbmdfQ2hhbmdlZCBncmFtbWFyQ2hlY2tp
bmdDaGFuZ2VkOworICAgIH0gc2V0dGluZ0NoYW5nZWRDYWxsYmFja3M7CisgICAgVmVjdG9yPFN0
cmluZz4gc3BlbGxDaGVja2luZ0xhbmd1YWdlczsKK30gZXdrVGV4dENoZWNrZXJTZXR0aW5nID0g
eyBmYWxzZSwgZmFsc2UsIHswLCAwfSwgVmVjdG9yPFN0cmluZz4oKX07CisKK3N0YXRpYyBFaW5h
X0Jvb2wgaWRsZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQodm9pZCopCit7CisgICAg
aWYgKGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5jb250aW51
b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQpCisgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5z
ZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQoCisg
ICAgICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlQ29udGludW91c1NwZWxsQ2hl
Y2tpbmcpOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKworc3RhdGlj
IEVpbmFfQm9vbCBpZGxlckdyYW1tYXJDaGVja2luZ0NoYW5nZWQodm9pZCopCit7CisgICAgaWYg
KGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hl
Y2tpbmdDaGFuZ2VkKQorICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGluZ0NoYW5n
ZWRDYWxsYmFja3MuZ3JhbW1hckNoZWNraW5nQ2hhbmdlZCgKKyAgICAgICAgICAgIGV3a1RleHRD
aGVja2VyU2V0dGluZy5lbmFibGVHcmFtbWFyQ2hlY2tpbmcpOworCisgICAgcmV0dXJuIEVDT1JF
X0NBTExCQUNLX0NBTkNFTDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBpZGxlclNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXNTZXQodm9pZCopCit7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIHRvIGRlbGVn
YXRlIGNhbGxpbmcgb2YgdGhpcyBtZXRob2QgaW4gV2ViUHJvY2VzcyB0byBkbyBub3QgZGVsYXkv
YmxvY2sgVUlQcm9jZXNzLgorICAgIFdlYktpdFRleHRDaGVja2VyOjpFbmNoYW50SGVscGVyOjp1
cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGV3a1RleHRDaGVja2VyU2V0dGluZy5zcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKTsKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQor
CitzdGF0aWMgdm9pZCBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBuZXdMYW5ndWFnZXMpCit7CisgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMgPSBuZXdMYW5ndWFnZXM7IAorICAgIGVjb3JlX2lkbGVyX2FkZChpZGxl
clNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQsIDApOworfQorI2VuZGlmIC8vIEVOQUJMRShTUEVM
TENIRUNLKQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19Db250aW51
b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZWQgY2FsbGJhY2spCit7CisjaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCisgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tz
LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCA9IGNhbGxiYWNrOworI2VuZGlmCit9CisK
K3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2dyYW1tYXJfY2hlY2tpbmdfY2hhbmdlZF9j
Yl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0dyYW1tYXJfQ2hlY2tpbmdfQ2hhbmdlZCBj
YWxsYmFjaykKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBld2tUZXh0Q2hlY2tlclNl
dHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3MuZ3JhbW1hckNoZWNraW5nQ2hhbmdlZCA9IGNh
bGxiYWNrOworI2VuZGlmCit9CisKK0VpbmFfQm9vbCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
ZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCkKK3sKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICByZXR1cm4gZXdrVGV4dENoZWNrZXJTZXR0aW5nLmVuYWJsZUNvbnRpbnVv
dXNTcGVsbENoZWNraW5nOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwor
dm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfc2V0KEVpbmFfQm9vbCBlbmFibGUpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisg
ICAgZW5hYmxlID0gISFlbmFibGU7CisgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZy5lbmFi
bGVDb250aW51b3VzU3BlbGxDaGVja2luZyAhPSBlbmFibGUpIHsKKyAgICAgICAgZXdrVGV4dENo
ZWNrZXJTZXR0aW5nLmVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nID0gZW5hYmxlOworCisg
ICAgICAgIFdLVGV4dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNo
YW5nZWQoZW5hYmxlKTsKKworICAgICAgICAvLyBTZXRzIGRlZmF1bHQgbGFuZ3VhZ2UgaWYgdXNl
ciBkaWRuJ3Qgc3BlY2lmeSBhbnkuCisgICAgICAgIGlmIChlbmFibGUgJiYgIVdlYktpdFRleHRD
aGVja2VyOjpFbmNoYW50SGVscGVyOjphcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCgpKQorICAg
ICAgICAgICAgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldChWZWN0b3I8U3RyaW5nPigpKTsKKwor
ICAgICAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tz
LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCkKKyAgICAgICAgICAgIGVjb3JlX2lkbGVy
X2FkZChpZGxlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCwgMCk7CisgICAgfQorI2Vu
ZGlmCit9CisKK0VpbmFfQm9vbCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dyYW1t
YXJfY2hlY2tpbmdfZ2V0KCkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4g
ZXdrVGV4dENoZWNrZXJTZXR0aW5nLmVuYWJsZUdyYW1tYXJDaGVja2luZzsKKyNlbHNlCisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
X2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldChFaW5hX0Jvb2wgZW5hYmxlKQoreworI2lmIEVO
QUJMRShTUEVMTENIRUNLKQorICAgIGVuYWJsZSA9ICEhZW5hYmxlOworICAgIGlmIChld2tUZXh0
Q2hlY2tlclNldHRpbmcuZW5hYmxlR3JhbW1hckNoZWNraW5nICE9IGVuYWJsZSkgeworICAgICAg
ICBld2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlR3JhbW1hckNoZWNraW5nID0gZW5hYmxlOwor
CisgICAgICAgIFdLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2Vk
KGVuYWJsZSk7CisKKyAgICAgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hh
bmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKQorICAgICAgICAgICAgZWNvcmVf
aWRsZXJfYWRkKGlkbGVyR3JhbW1hckNoZWNraW5nQ2hhbmdlZCwgMCk7CisgICAgfQorI2VuZGlm
Cit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlc19zZXQoY29uc3QgY2hhciogbGFuZ3VhZ2VzKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIFZlY3RvcjxTdHJpbmc+IG5ld0xhbmd1YWdlczsKKyAgICBTdHJpbmc6OmZyb21VVEY4
KGxhbmd1YWdlcykuc3BsaXQoJywnLCBuZXdMYW5ndWFnZXMpOworCisgICAgc3BlbGxDaGVja2lu
Z0xhbmd1YWdlc1NldChuZXdMYW5ndWFnZXMpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZmEwMGQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmcuaApAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUgZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nLmgKKyAqIEBicmllZiBBUEkgZm9yIG1hbmlwdWxhdGluZyBzcGVsbCBj
aGVja2VyIGZlYXR1cmUuCisgKi8KKworI2lmbmRlZiBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
aAorI2RlZmluZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfaAorCisjaW5jbHVkZSA8RWluYS5o
PgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICog
Q3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gbm90
aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0
dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogQHBhcmFtIEBjIEVJTkFfVFJVRSBp
ZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQCBFSU5BX0ZBTFNFIGlm
IGl0J3MgZGlzYWJsZWQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9TZXR0
aW5nX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlZCkoRWluYV9Cb29sIGVuYWJsZSk7
CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBj
bGllbnQgd2hlbgorICogdGhlIGdyYW1tYXIgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBi
eSBXZWJLaXQuCisgKgorICogQHBhcmFtIEBjIEVJTkFfVFJVRSBpZiBncmFtbWFyIGNoZWNraW5n
IGlzIGVuYWJsZWQgb3IgQCBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLwordHlwZWRl
ZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0dyYW1tYXJfQ2hlY2tpbmdfQ2hhbmdl
ZCkoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9u
IHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhlIGNvbnRpbnVvdXMgc3BlbGwg
Y2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogU3BlY2lmeWlu
ZyBvZiB0aGlzIGNhbGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8g
cmVjZWl2ZSBub3RpZmljYXRpb25zCisgKiBvbmNlIFdlYktpdCBjaGFuZ2VzIHRoaXMgc2V0dGlu
Zy4KKyAqIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFj
ayBpcyBub3Qgc2V0LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQg
bGV2ZWwgY2FuIGJlIG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25zIGlu
IGEgQ29udGV4dCBNZW51IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJh
Y2sgZnVuY3Rpb24gdG8gc2V0IG9yIEBjIE5VTEwgdG8gaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMg
b25lCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfY29udGludW91c19z
cGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdfQ29u
dGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VkIGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2Fs
bGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuCisgKiB0aGUgZ3Jh
bW1hciBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBTcGVj
aWZ5aW5nIG9mIHRoaXMgY2FsbGJhY2sgaXMgbmVlZGVkIGlmIHRoZSBhcHBsaWNhdGlvbiB3YW50
cyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMKKyAqIG9uY2UgV2ViS2l0IGNoYW5nZXMgdGhpcyBz
ZXR0aW5nLgorICogSWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBpbnRlcmVzdGVkLCB0aGlzIGNh
bGxiYWNrIGlzIG5vdCBzZXQuCisgKiBDaGFuZ2luZyBvZiB0aGlzIHNldHRpbmcgYXQgdGhlIFdl
YktpdCBsZXZlbCBjYW4gYmUgbWFkZSBhcyBhIHJlc3VsdCBvZiBtb2RpZnlpbmcKKyAqIG9wdGlv
bnMgaW4gYSBDb250ZXh0IE1lbnUgYnkgYSB1c2VyLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBj
YWxsYmFjayBmdW5jdGlvbiB0byBzZXQgb3IgQGMgTlVMTCB0byBpbnZhbGlkYXRlIHRoZSBwcmV2
aW91cyBvbmUKKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19ncmFtbWFy
X2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19HcmFtbWFy
X0NoZWNraW5nX0NoYW5nZWQgY2IpOworCisvKioKKyAqIFF1ZXJpZXMgaWYgY29udGludW91cyBz
cGVsbCBjaGVja2luZyBpcyBlbmFibGVkLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlm
IGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAYyBFSU5BX0ZBTFNFIGlm
IGl0J3MgZGlzYWJsZWQKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCh2b2lkKTsKKworLyoqCisg
KiBFbmFibGVzL2Rpc2FibGVzIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCisgKgorICogQWRk
aXRpb25hbGx5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gKGlmIGRl
ZmluZWQpIHRvIG5vdGlmeQorICogdGhlIGNsaWVudCBhYm91dCB0aGUgY2hhbmdlIG9mIHRoZSBz
ZXR0aW5nLgorICogVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKgorICog
QHNlZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfY29udGludW91c19zcGVsbF9jaGVja2luZ19j
aGFuZ2VkX2NiX3NldAorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRvIGVuYWJs
ZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIG9yIEBjIEVJTkFfRkFMU0UgdG8gZGlzYWJsZQor
ICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX3NldChFaW5hX0Jvb2wgZW5hYmxlKTsKKworLyoqCisgKiBRdWVyaWVz
IGlmIGdyYW1tYXIgY2hlY2tpbmcgaXMgZW5hYmxlZC4KKyAqCisgKiBBcHBsaWNhdGlvbiBtYXkg
b3ZlcndyaXRlIHdlYmtpdCBncmFtbWFyIGNoZWNraW5nIGltcGxlbWVudGF0aW9uIGJ5IHNldHRp
bmcgY2FsbGJhY2sgZnVuY3Rpb25zCisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXIuaAorICoKKyAq
IEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGdyYW1tYXIgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBA
YyBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX2dldCh2b2lkKTsKKwor
LyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGdyYW1tYXIgY2hlY2tpbmcuCisgKgorICogQWRkaXRp
b25hbGx5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gKGlmIGRlZmlu
ZWQpIHRvIG5vdGlmeQorICogdGhlIGNsaWVudCBhYm91dCB0aGUgY2hhbmdlIG9mIHRoZSBzZXR0
aW5nLgorICogVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGFuZCBpcyBub3Qgc3VwcG9ydGVkIGJ5
IFdlYktpdC1FRkwgYnkgZGVmYXVsdC4KKyAqCisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXJfc2V0
dGluZ19ncmFtbWFyX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0CisgKgorICogQHBhcmFtIGVuYWJs
ZSBAYyBFSU5BX1RSVUUgdG8gZW5hYmxlIGdyYW1tYXIgY2hlY2tpbmcgb3IgQGMgRUlOQV9GQUxT
RSB0byBkaXNhYmxlCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5h
YmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KEVpbmFfQm9vbCBlbmFibGUpOworCisvKioKKyAqIFNl
dHMgQGEgbGFuZ3VhZ2VzIGFzIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB0byB1c2UgYnkgZGVmYXVs
dCBXZWJLaXQKKyAqIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tlciBmZWF0dXJlIHdpdGgg
RW5jaGFudCBsaWJyYXJ5IHN1cHBvcnQuCisgKgorICogSWYgQGxhbmd1YWdlcyBpcyBAYyBOVUxM
LCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpcyB1c2VkLgorICogSWYgdGhlIGRlZmF1bHQgbGFuZ3Vh
Z2UgY2FuIG5vdCBiZSBkZXRlcm1pbmVkIHRoZW4gYW55IGF2YWlsYWJsZSBkaWN0aW9uYXJ5IHdp
bGwgYmUgdXNlZC4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGludmFsaWRhdGVzIHRoZSBw
cmV2aW91c2x5IHNldCBsYW5ndWFnZXMuCisgKiAgICAgICBUaGUgZGljdGlvbmFyaWVzIGFyZSBy
ZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkuCisgKgorICogQHBhcmFtIGxhbmd1YWdlcyBhIGxpc3Qg
b2YgY29tbWEgKCcsJykgc2VwYXJhdGVkIGxhbmd1YWdlIGNvZGVzCisgKiAgICAgICAgb2YgdGhl
IGZvcm0gJ2VuX1VTJywgaWUsIGxhbmd1YWdlX1ZBUklBTlQsIG1heSBiZSBAYyBOVUxMLgorICov
CitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlc19zZXQoY29uc3QgY2hhciAqbGFuZ3VhZ2VzKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9
CisjZW5kaWYKKworI2VuZGlmIC8vIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCmluZGV4IGFhMzNm
MmYuLmVkOTIxZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4
dENoZWNrZXJFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENo
ZWNrZXJFZmwuY3BwCkBAIC0xLDUgKzEsNyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBT
YW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJv
bmljcworICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjcsNyArMjksOSBAQAogI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCiAKICNpbmNsdWRlICJU
ZXh0Q2hlY2tlclN0YXRlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCisjZW5k
aWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTM3LDkxICs0MSwxNDQgQEAgc3Rh
dGljIFRleHRDaGVja2VyU3RhdGUgdGV4dENoZWNrZXJTdGF0ZTsKIAogY29uc3QgVGV4dENoZWNr
ZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0
ZSA9IGZhbHNlOworICAgIGlmIChkaWRJbml0aWFsaXplU3RhdGUpCisgICAgICAgIHJldHVybiB0
ZXh0Q2hlY2tlclN0YXRlOworCisgICAgV2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5p
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCA9IGNsaWVudC5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7CisKKyAgICBkaWRJbml0
aWFsaXplU3RhdGUgPSB0cnVlOworI2VuZGlmCiAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7
CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2Vk
KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAg
IHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNvbnRpbnVvdXNTcGVs
bENoZWNraW5nQWxsb3dlZCgpOworI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0K
IAotdm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJv
b2wpCit2b2lkIFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
Ym9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGlmIChzdGF0ZSgpLmlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7
CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworI2Vu
ZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9v
bCkKK3ZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFC
TEUoU1BFTExDSEVDSykKKyAgICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQg
PT0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0
Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZDsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1t
YXJDaGVja2luZ0VuYWJsZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKKyNlbmRpZgogfQog
CiB2b2lkIFRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNo
YW5nZWQoYm9vbCBlbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Z3Jh
bW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICB0ZXh0Q2hlY2tlclN0
YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisjZW5kaWYKIH0KIAotaW50
NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqKQor
aW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkq
IHBhZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykK
KyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51bmlxdWVTcGVs
bERvY3VtZW50VGFnKHBhZ2UpOworI2Vsc2UKICAgICByZXR1cm4gMDsKKyNlbmRpZgogfQogCi12
b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QpCit2b2lk
IFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QgdGFnKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRh
Zyk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5n
KGludDY0X3QsIGNvbnN0IFVDaGFyKiwgdWludDMyX3QsIGludDMyX3QmLCBpbnQzMl90JikKK3Zv
aWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1l
bnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIGludDMyX3QmIG1pc3Nw
ZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRh
ZywgU3RyaW5nKHRleHQsIGxlbmd0aCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5n
TGVuZ3RoKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0
cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBWZWN0b3I8V2ViQ29yZTo6R3Jh
bW1hckRldGFpbD4mLCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVj
a0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0
ZXh0LCB1aW50MzJfdCBsZW5ndGgsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFp
bHMsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0
aCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAg
IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tHcmFtbWFyT2ZTdHJpbmco
c3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRleHQsIGxlbmd0aCksIGdyYW1tYXJEZXRhaWxzLCBi
YWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5ndGgpOworI2VuZGlmCiB9CiAKIGJvb2wg
VGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2xpZW50KCkuc3BlbGxpbmdVSUlzU2hvd2luZygpOworI2Vsc2UKICAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdV
SUlzU2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnRvZ2dsZVNwZWxs
aW5nVUlJc1Nob3dpbmcoKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVT
cGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit2b2lk
IFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29y
ZChzcGVsbERvY3VtZW50VGFnLCBtaXNzcGVsbGVkV29yZCk7CisjZW5kaWYKIH0KIAotdm9pZCBU
ZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3QsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKQordm9pZCBUZXh0Q2hlY2tlcjo6dXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywg
Y29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBncmFt
bWFyRGV0YWlsKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hF
Q0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgYmFkR3JhbW1hclBocmFzZSwg
Z3JhbW1hckRldGFpbCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nl
c0ZvcldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0
cmluZz4mKQordm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwg
VmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgp
Lmd1ZXNzZXNGb3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOworI2VuZGlm
CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcm
KQordm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywg
Y29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5sZWFy
bldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hl
Y2tlcjo6aWdub3JlV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQordm9pZCBUZXh0Q2hlY2tl
cjo6aWdub3JlV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29y
ZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAg
IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuaWdub3JlV29yZChzcGVsbERvY3Vt
ZW50VGFnLCB3b3JkKTsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kRW5jaGFudC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5k
RW5jaGFudC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjljNzFj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlCkBAIC0w
LDAgKzEsNDMgQEAKKyMgLSBUcnkgdG8gZmluZCBFbmNoYW50CisjIE9uY2UgZG9uZSwgdGhpcyB3
aWxsIGRlZmluZQorIworIyAgRU5DSEFOVF9JTkNMVURFX0RJUlMgLSB0aGUgRW5jaGFudCBpbmNs
dWRlIGRyZWN0b3JpZXMKKyMgIEVOQ0hBTlRfTElCUkFSSUVTIC0gbGluayB0aGVzZSB0byB1c2Ug
RW5jaGFudAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUworIyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIE9SIElUUworIyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyMgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsKKyMgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisjIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCisj
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYKKyMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK0ZJTkRfUEFDS0FHRShQa2dDb25maWcpCitQS0dfQ0hFQ0tfTU9EVUxFUyhQQ19FTkNI
QU5UIGVuY2hhbnQpCisKK0ZJTkRfUEFUSChFTkNIQU5UX0lOQ0xVREVfRElSUworICAgIE5BTUVT
IGVuY2hhbnQuaAorICAgIFBBVEhTICR7UENfRU5DSEFOVF9JTkNMVURFRElSfQorICAgICAgICAg
ICR7UENfRU5DSEFOVF9JTkNMVURFX0RJUlN9CispCisKK0ZJTkRfTElCUkFSWShFTkNIQU5UX0xJ
QlJBUklFUworICAgIE5BTUVTIGVuY2hhbnQKKyAgICBQQVRIUyAke1BDX0VOQ0hBTlRfTElCRElS
fQorICAgICAgICAgICR7UENfRU5DSEFOVF9MSUJSQVJZX0RJUlN9CispCmRpZmYgLS1naXQgYS9T
b3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNt
YWtlCmluZGV4IDYyZmQ0ODIuLjQ0MWViMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCkBAIC0xNjMs
MyArMTYzLDggQEAgSUYgKFdURl9VU0VfVElMRURfQkFDS0lOR19TVE9SRSkKICAgRklORF9QQUNL
QUdFKE9wZW5HTCBSRVFVSVJFRCkKIEVORElGKCkKIAorT1BUSU9OKEVOQUJMRV9TUEVMTENIRUNL
ICJFbmFibGUgc3BlbGxjaGVja2luZyBmZWF0dXJlIChyZXF1aXJlcyBlbmNoYW50KSIgT04pCitJ
RiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisgICAgICBGSU5EX1BBQ0tBR0UoRW5jaGFudCBSRVFVSVJF
RCkKKyAgICAgIEFERF9ERUZJTklUSU9OUygtREVOQUJMRV9TUEVMTENIRUNLPTEpCitFTkRJRigp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163324</attachid>
            <date>2012-09-11 03:43:34 -0700</date>
            <delta_ts>2012-09-13 06:43:58 -0700</delta_ts>
            <desc>add ewk_text_checker_setting_spell_checking_languages_get</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>65148</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA0OTk3MDViLi4zYTM0NWZi
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDktMTEgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qICA8bS5yb2pAc2FzbXVuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZM
XSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZXMgc3BlbGxjaGVja2luZyBm
ZWF0dXJlIGZvciBXSzItRWZsLgorCisgICAgICAgICogU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50
LmNtYWtlOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZTog
RGVmaW5lcyBTUEVMTENIRUNLIG1hY3JvLgorCiAyMDEyLTA5LTEwICBUaGlhZ28gTWFyY29zIFAu
IFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgogCiAgICAgICAgIFtDTWFrZV1bRUZM
XSBFbmFibGUgdGhlIExMSW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGFjNDgyMS4uYTRkNTEwMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA5LTExICBHcnplZ29yeiBDemFqa293c2tpICA8
Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFsIFJvaiAgPG0ucm9qQHNhbXN1bmcuY29t
PgorCisgICAgICAgIFtXSzJdW0VGTF0gSW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2luZyBm
ZWF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTE4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICBBZGQgZW5jaGFudC1yZWxhdGVkIGNvbXBpbGVy
IGZsYWdzOiBoZWFkZXIgcGF0aHMgYW5kIHRoZSBsaWJyYXJ5IGZsYWcuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcDoKKyAgICAgICAgKFRl
eHRDaGVja2VyRW5jaGFudDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFRleHRD
aGVja2VyRW5jaGFudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoVGV4dENoZWNrZXJF
bmNoYW50OjpnZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgVXNlcyBuZXdseSBj
cmVhdGVkICdhcmVEaWN0aW9uYXJpZXNJbml0aWFsaXplZCgpJyBtZXRob2QuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKToK
KyAgICAgICAgRGVmaW5lcyBhbiBpbiBsaW5lIG1ldGhvZCB0byByZXR1cm4gaW5mb3JtYXRpb24g
d2hldGhlciBkaWN0aW9uYXJpZXMgaGF2ZSBiZWVuIGxvYWRlZC4KKyAgICAgICAgSXQncyB1c2Vk
IGJ5IFdlYktpdFRleHRDaGVja2VyIGFuZCBUZXh0Q2hlY2tlckVuY2hhbnQuCisKIDIwMTItMDkt
MTEgIERhbiBDYXJuZXkgIDxkY2FybmV5QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlZCBW
OElzb2xhdGVkQ29udGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBiOWFmOThlLi43
ZTFiZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtODgsNiArODgsNyBAQCBMSVNU
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmNw
cAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCiAgIHBsYXRmb3JtL3RleHQv
ZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3BwCisgIHBsYXRmb3JtL3RleHQv
ZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCiApCiAKIElGIChFTkFCTEVfQkFUVEVSWV9T
VEFUVVMpCkBAIC0zMjMsMyArMzI0LDcgQEAgSUYgKEVOQUJMRV9XRUJfQVVESU8pCiAgIEFERF9E
RUZJTklUSU9OUygtRFVOSU5TVEFMTEVEX0FVRElPX1JFU09VUkNFU19ESVI9IiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL2F1ZGlvL3Jlc291cmNlcyIpCiBFTkRJRiAoKQogCitJRiAoRU5BQkxFX1NQ
RUxMQ0hFQ0spCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTICR7
RU5DSEFOVF9JTkNMVURFX0RJUlN9KQorICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVT
ICR7RU5DSEFOVF9MSUJSQVJJRVN9KQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcAppbmRl
eCBmNzJmYjBjLi5hYjNhOWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcApAQCAtNjgsNyArNjgs
NyBAQCB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYgd29y
ZCkKIAogdm9pZCBUZXh0Q2hlY2tlckVuY2hhbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxs
aW5nTGVuZ3RoKQogewotICAgIGlmIChtX2VuY2hhbnREaWN0aW9uYXJpZXMuaXNFbXB0eSgpKQor
ICAgIGlmICghYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgc2l6ZV90IG51bWJlck9mQ2hhcmFjdGVycyA9IHN0cmluZy5sZW5ndGgoKTsKQEAgLTEx
Nyw3ICsxMTcsNyBAQCB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6Y2hlY2tTcGVsbGluZ09mU3Ry
aW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIG1pc3NwZQogVmVjdG9yPFN0cmluZz4gVGV4
dENoZWNrZXJFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQpCiB7
CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKLSAgICBpZiAobV9lbmNoYW50RGljdGlvbmFy
aWVzLmlzRW1wdHkoKSkKKyAgICBpZiAoIWFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCkpCiAg
ICAgICAgIHJldHVybiBndWVzc2VzOwogCiAgICAgZm9yIChWZWN0b3I8RW5jaGFudERpY3QqPjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fZW5jaGFudERpY3Rpb25hcmllcy5iZWdpbigpOyBpdGVy
ICE9IG1fZW5jaGFudERpY3Rpb25hcmllcy5lbmQoKTsgKytpdGVyKSB7CkBAIC0xNzYsNyArMTc2
LDcgQEAgdm9pZCBUZXh0Q2hlY2tlckVuY2hhbnQ6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmcKIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2Vy
RW5jaGFudDo6Z2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcygpCiB7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gbGFuZ3VhZ2VzOwotICAgIGlmIChtX2VuY2hhbnREaWN0aW9uYXJpZXMuaXNFbXB0eSgpKQor
ICAgIGlmICghYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuIGxh
bmd1YWdlczsKIAogICAgIC8vIEdldCBhIFZlY3RvcjxDU3RyaW5nPiB3aXRoIHRoZSBsaXN0IG9m
IGxhbmd1YWdlcyBpbiB1c2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmgKaW5kZXggMTc4MGI0NS4uYWQ2ZmYx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRD
aGVja2VyRW5jaGFudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5jaGFu
dC9UZXh0Q2hlY2tlckVuY2hhbnQuaApAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgVmVj
dG9yPFN0cmluZz4gZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1
cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFn
ZXMpOwogICAgIFZlY3RvcjxTdHJpbmc+IGdldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAg
ICBib29sIGFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gIW1fZW5j
aGFudERpY3Rpb25hcmllcy5pc0VtcHR5KCk7IH0KIAogcHJpdmF0ZToKICAgICBUZXh0Q2hlY2tl
ckVuY2hhbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0YmI2Yjg5Li44NmRiZTM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMwIEBACisyMDEyLTA5LTExICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFq
a293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFsIFJvaiAgPG0ucm9qQHNhbXN1bmcuY29tPgorCisg
ICAgICAgIFtXSzJdW0VGTF0gSW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2luZyBmZWF0dXJl
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE4NTQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHNw
ZWxsaW5nIGltcGxlbWVudGF0aW9uIGZvciBXZWJLaXQyLUVGTCB0aGF0IGlzIGJhc2VkIG9uIEVu
Y2hhbnQgbGlicmFyeS4KKworICAgICAgICBBZGRpdGlvbmFsbHkgdGhlIHBhdGNoIHByb3ZpZGVz
IEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1l
bnRhdGlvbgorICAgICAgICBhcyBFbmNoYW50IGxpYnJhcnkgZG9lc24ndCBlbnN1cmUgZ3JhbW1h
ciBjaGVja2luZy4KKyAgICAgICAgQXBwbGljYXRpb24gaXMgYWJsZSB0byBvdmVyd3JpdGUgaXQg
KGJvdGggZ3JhbW1hciBhbmQgc3BlbGwgY2hlY2tpbmcpIGJ5IGRlZmluaW5nCisgICAgICAgIGl0
cyBvd24gaW1wbGVtZW50YXRpb24gYW5kIHNldHRpbmcgYXBwcm9wcmlhdGUgY2FsbGJhY2sgZnVu
Y3Rpb25zLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBlbmNo
YW50LXJlbGF0ZWQgY29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRocyBhbmQgdGhlIGxpYnJhcnkg
ZmxhZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAg
IEFkZCBmaWxlcyB0aGF0IGNvbnRhaW4gQVBJIHRvIHRoZSBtYWluIFdlYktpdDItRUZMJ3MgaGVh
ZGVyIHRvIGJlIGF2YWlsYWJsZSBmb3IgYXBwbGljYXRpb25zLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgSW1wbGVt
ZW50cyBjYWxsYmFja3MgZnVuY3Rpb25zIG9mIFdLVGV4dENoZWNrZXIuCisKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2Vy
Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YktpdFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2lu
Z0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6dW5pcXVlU3Bl
bGxEb2N1bWVudFRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjpjbG9z
ZVNwZWxsRG9jdW1lbnRXaXRoVGFnKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNr
ZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRD
aGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRl
eHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0
VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJLaXRUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYktpdFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6Z3Vl
c3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6bGVhcm5X
b3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgor
ICAgICAgICBUaG9zZSBtZXRob2RzIGFyZSBkaXJlY3RseSBnaXZlbiBhcyBjYWxsYmFjayBmdW5j
dGlvbnMgZm9yIFdLVGV4dENoZWNrZXIncyBjbGllbnQuCisgICAgICAgIFRoZXkgY2hvb3NlIGJl
dHdlZW4gV2ViS2l0J3Mgc3BlbGxpbmcgaW1wbGVtZW50YXRpb24gYW5kIGNsaWVudCdzIG9uZXMu
CisKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OkVuY2hhbnRIZWxwZXI6OmFy
ZURpY3Rpb25hcmllc0luaXRpYWxpemVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENo
ZWNrZXI6OkVuY2hhbnRIZWxwZXI6OnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJLaXRUZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6dXBkYXRlU3BlbGxDaGVj
a2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFRoZSBtZXRob2RzIGFyZSB1c2VkIGJ5IGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZy5jcHAgZmlsZSBhbmQgYWxsb3cgdG8gZG8gbm90CisgICAgICAgIGV4
cG9zZSAnbV90ZXh0Q2hlY2tlckVuY2hhbnQnLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvV2ViS2l0VGV4dENoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZXMgY2xhc3Mgd2hp
Y2ggY2hvb3NlcyBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsaW5nIGFu
ZCB0aGUgV2ViS2l0IG9uZS4KKworICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdFRl
eHRDaGVja2VyKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0VGV4dENoZWNrZXI6OmV3a1RleHRD
aGVja2VyKToKKyAgICAgICAgUmV0dXJucyBzdHJ1Y3QgdGhhdCBrZWVwcyBjbGllbnQncyBjYWxs
YmFja3MuCisKKyAgICAgICAgKEVuY2hhbnRIZWxwZXIpOgorICAgICAgICBLZWVwcyBpbmZvcm1h
dGlvbiBiYXNlZCBvbiBUZXh0Q2hlY2tlckVuY2hhbnQgaW1wbGVtZW50YXRpb24uCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAgICAgIChfRXdrX0Nv
bnRleHQ6Ol9Fd2tfQ29udGV4dCk6CisgICAgICAgIEluaXRpYWx6ZXMgc3BlbGxjaGVja2VyIGZl
YXR1cmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNw
cDogQWRkZWQuCisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX2NsaWVudF9hdHRhY2gpOgorICAg
ICAgICBTZXRzIFdLVGV4dENoZWNrZXIgY2xpZW50IGFuZCByZWdpc3RlcnMgV2ViS2l0VGV4dENo
ZWNrZXIncyBjYWxsYmFja3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4
dF9jaGVja2VyLmg6IEFkZGVkLgorICAgICAgICBEZWZpbmVzIEFQSSB0byBzZXQgY2xpZW50J3Mg
c3BlbGxpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChfRXdrX1RleHRfQ2hl
Y2tlcik6CisgICAgICAgIERlZmluZXMgc3RydWN0IHdpdGggY2xpZW50J3MgY2FsbGJhY2tzIHJl
c3BvbmlzYmxlIGZvciBzcGVsbGluZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoaWRsZXJDb250aW51
b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQpOgorICAgICAgICAoaWRsZXJHcmFtbWFyQ2hlY2tpbmdD
aGFuZ2VkKToKKyAgICAgICAgVGhlIGFwcGxpY2F0aW9uIGlzIG5vdGlmaWVkIGFib3V0IHNwZWxs
aW5nIHNldHRpbmdzIGNoYW5nZSAodGhleSBtYXkgYmUgY2hhbmdlZAorICAgICAgICB0aHJvdWdo
IGNvbnRleHQgbWVudSBvcHRpb24pIG9uIGlkbGVyIHRvIGRvIG5vdCBibG9jayBXZWJLaXQuCisK
KyAgICAgICAgKGlkbGVyU3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldCk6CisgICAgICAgIFRoZSBk
aWN0aW9uYXJpZXMgYXJlIHJlcXVlc3RlZCBvbiBpZGxlciB0byBkbyBub3QgYmxvY2sgV2ViS2l0
LgorCisgICAgICAgIChzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KToKKyAgICAgICAgSGVscGVy
IHRoYXQgY29udmVydHMgc3RyaW5nIHdpdGggbGFuZ3VhZ2VzIHZhbHVlcyB0byB0aGUgY29udmVu
aWVudCB2ZWN0b3IuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KToKKyAgICAgICAgKGV3a190ZXh0X2No
ZWNrZXJfc2V0dGluZ19ncmFtbWFyX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KToKKyAgICAgICAg
U2V0cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hl
biB0aGUgc3BlbGxpbmcgc2V0dGluZ3MKKyAgICAgICAgd2VyZSBjaGFuZ2VkIGJ5IFdlYktpdC4K
KworICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2dldCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5h
YmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfc2V0KToKKyAgICAgICAgQVBJIHRvIHNldC9n
ZXQgdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190ZXh0X2No
ZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9jaGVja2luZ19nZXQpOgorICAgICAgICAoZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldCk6CisgICAg
ICAgIEFQSSB0byBzZXQvZ2V0IHRoZSBncmFtbWFyIGNoZWNraW5nLgorCisgICAgICAgIChld2tf
dGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCk6CisgICAg
ICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3Nl
dCk6CisgICAgICAgIEFQSSB0byBzZXQvZ2V0IGxhbmd1YWdlcyB0byB1c2UgYnkgV2ViS2l0IGlt
cGxlbWVudGF0aW9uIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oOiBBZGRlZC4KKyAgICAgICAg
QWRkcyBBUEkgZm9yIG1hbmlwdWxhdGluZyBzcGVsbCBjaGVja2VyIGZlYXR1cmUuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVk
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxs
RG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERv
Y3VtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxs
aW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFy
T2ZTdHJpbmcpOiBSZW1vdmVkIFdlYkNvcmUgbmFtYXNwYWNlIGFzIGl0J3MgYWxyZWFkeSBkZWZp
bmVkIGZvciB0aGUgd2hvbGUgZmlsZS4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNw
ZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dG9nZ2xl
U3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJL
aXQ6OlRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpsZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aWdu
b3JlV29yZCk6CisgICAgICAgIFRob3NlIG1ldGhvZHMgY2FsbCBXS1RleHRDaGVja2VyIGNsaWVu
dCBtZXRob2RzLgorCiAyMDEyLTA5LTExICBCeXVuZ3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5n
LmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIFdLRWluYVNoYXJlZFN0cmluZyBuZWVkcyBhIGZ1
bmN0aW9uIHRvIGFkb3B0IGVpbmEgc3RyaW5nc2hhcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDA4YzhjZmYuLjdlMmFjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00
NSw2ICs0NSw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL05ldHdvcmtJbmZvUHJvdmlkZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvUGFn
ZUNsaWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvVmlicmF0aW9uUHJvdmlkZXIu
Y3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcAogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0LmNwcApAQCAtNTksNiArNjAsOCBAQCBMSVNUKEFQUEVORCBXZWJLaXQy
X1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVj
aXNpb24uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5jcHAK
ICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCisgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4
dF9jaGVja2VyX3NldHRpbmcuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXF1
ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5jcHAKQEAgLTEyNiw2ICsx
MjksNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZWZsIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlybyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9zb3Vw
IgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3N2Zy9ncmFwaGljcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIK
ICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL3NvdXAiCkBAIC0yMjIsNiArMjI2LDggQEAgU0VU
IChFV2ViS2l0Ml9IRUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uaCIKICAgICAiJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51
X2l0ZW0uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19zZXR0aW5ncy5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oIgorICAgICIke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dXJsX3JlcXVlc3QuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJD
RV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfc2NoZW1lX3JlcXVlc3QuaCIKQEAgLTMy
MCwzICszMjYsOCBAQCBJRiAoRU5BQkxFX0lOU1BFQ1RPUikKICAgICAgICAgICAgICAgICAgICAg
ICAgUEFUVEVSTiAiKi5naWYiCiAgICAgICAgICAgICAgICAgICAgICAgIFBBVFRFUk4gIioucG5n
IikKIEVORElGICgpCisKK0lGIChFTkFCTEVfU1BFTExDSEVDSykKKyAgICBMSVNUKEFQUEVORCBX
ZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMgJHtFTkNIQU5UX0lOQ0xVREVfRElSU30pCisgICAg
TElTVChBUFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMgJHtFTkNIQU5UX0xJQlJBUklFU30pCitFTkRJ
RigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0
Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCA3
NTBjYjQ4Li5kZTVmNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmgKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9wb2xp
Y3lfZGVjaXNpb24uaCIKICNpbmNsdWRlICJld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAjaW5jbHVk
ZSAiZXdrX3NldHRpbmdzLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgorI2luY2x1
ZGUgImV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVz
dC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKICNpbmNsdWRlICJld2tfdXJsX3Nj
aGVtZV9yZXF1ZXN0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMTExMmVmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlci5oIgorCisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLTXV0YWJsZUFycmF5LmgiCisjaW5jbHVkZSAiV0tS
ZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJTdHJp
bmcuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKKyNpbmNsdWRlIDxF
aW5hLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEluaXRpYWxpemUgY2xpZW50J3MgZnVu
Y3Rpb25zIHRvIEBjIDAgdG8gYmUgc3VyZSB0aGF0IHRoZXkgYXJlIG5vdCBkZWZpbmVkLgorRXdr
X1RleHRfQ2hlY2tlciBXZWJLaXRUZXh0Q2hlY2tlcjo6bV9ld2tUZXh0Q2hlY2tlciB7CisgICAg
MCwgLy8gdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQKKyAgICAwLCAvLyB1bmlxdWVfc3Bl
bGxfZG9jdW1lbnRfdGFnX2Nsb3NlCisgICAgMCwgLy8gc3RyaW5nX3NwZWxsaW5nX2NoZWNrCisg
ICAgMCwgLy8gdWlfc3BlbGxpbmdfc3RhdHVzX2dldAorICAgIDAsIC8vIHVpX3RvZ2dsZV9zcGVs
bGluZ19zdGF0dXNfZ2V0CisgICAgMCwgLy8gdWlfc3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3Vw
ZGF0ZQorICAgIDAsIC8vIHdvcmRfZ3Vlc3Nlc19nZXQKKyAgICAwLCAvLyB3b3JkX2xlYXJuCisg
ICAgMCAvLyB3b3JkX2lnbm9yZQorfTsKKworT3duUHRyPFdlYkNvcmU6OlRleHRDaGVja2VyRW5j
aGFudD4gbV90ZXh0Q2hlY2tlckVuY2hhbnQgPSBXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6
OmNyZWF0ZSgpOworCitib29sIFdlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nQWxsb3dlZChjb25zdCB2b2lkKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IC8vIFRoaXMgbWV0aG9kIGlzIG5vdCBjYWxsZWQgYnkgV2ViS2l0Mi9XZWJDb3JlLiBKdXN0IGtl
ZXAgaXQgZm9yIEFQSSBjb21wYXRpYmlsaXR5LgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBXZWJLaXRUZXh0Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29u
c3Qgdm9pZCopCit7CisgICAgcmV0dXJuIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19nZXQoKTsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hl
Y2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29u
c3Qgdm9pZCopCit7CisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX3NldChlbmFibGVkKTsKK30KKworYm9vbCBXZWJLaXRUZXh0Q2hl
Y2tlcjo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJldHVy
biBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KCk7
Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQo
Ym9vbCBlbmFibGVkLCBjb25zdCB2b2lkKikKK3sKKyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRp
bmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KGVuYWJsZWQpOworfQorCit1aW50NjRfdCBX
ZWJLaXRUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwg
Y29uc3Qgdm9pZCopCit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNrZXIudW5pcXVlX3NwZWxsX2Rv
Y3VtZW50X3RhZ19nZXQpCisgICAgICAgIHJldHVybiBtX2V3a1RleHRDaGVja2VyLnVuaXF1ZV9z
cGVsbF9kb2N1bWVudF90YWdfZ2V0KHRvSW1wbChwYWdlKS0+dmlld1dpZGdldCgpKTsKKworICAg
IHJldHVybiAwOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1l
bnRXaXRoVGFnKHVpbnQ2NF90IHRhZywgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKG1fZXdrVGV4
dENoZWNrZXIudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSkKKyAgICAgICAgbV9ld2tU
ZXh0Q2hlY2tlci51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKHRhZyk7Cit9CisKK3Zv
aWQgV2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcs
IFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3Qq
IG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAobV9ld2tUZXh0Q2hl
Y2tlci5zdHJpbmdfc3BlbGxpbmdfY2hlY2spCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIuc3Ry
aW5nX3NwZWxsaW5nX2NoZWNrKHRhZywgdG9JbXBsKHRleHQpLT5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgZWxzZQor
ICAgICAgICBtX3RleHRDaGVja2VyRW5jaGFudC0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRvSW1w
bCh0ZXh0KS0+c3RyaW5nKCksICptaXNzcGVsbGluZ0xvY2F0aW9uLCAqbWlzc3BlbGxpbmdMZW5n
dGgpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyh1
aW50NjRfdCwgV0tTdHJpbmdSZWYsIFdLQXJyYXlSZWYqLCBpbnQzMl90KiwgaW50MzJfdCosIGNv
bnN0IHZvaWQqKQoreworICAgIC8vIEZJWE1FOiBjYWxsIGNsaWVudCdzIGZ1bmN0aW9uLgorICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNrZXI6OnNwZWxsaW5n
VUlJc1Nob3dpbmcoY29uc3Qgdm9pZCopCit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNrZXIudWlf
c3BlbGxpbmdfc3RhdHVzX2dldCkKKyAgICAgICAgcmV0dXJuIG1fZXdrVGV4dENoZWNrZXIudWlf
c3BlbGxpbmdfc3RhdHVzX2dldCgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdl
YktpdFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqKQor
eworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnVpX3NwZWxsaW5nX3N0YXR1c190b2dnbGUpCisg
ICAgICAgIG1fZXdrVGV4dENoZWNrZXIudWlfc3BlbGxpbmdfc3RhdHVzX3RvZ2dsZSgpOworfQor
Cit2b2lkIFdlYktpdFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRX
b3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgbWlzc3BlbGxlZFdvcmQsIGNvbnN0IHZvaWQq
KQoreworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLnVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29y
ZF91cGRhdGUpCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIudWlfc3BlbGxpbmdfbWlzc3BlbGxl
ZF93b3JkX3VwZGF0ZSh0YWcsIHRvSW1wbChtaXNzcGVsbGVkV29yZCktPnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3QsIFdLU3RyaW5nUmVmLCBXS0dyYW1tYXJEZXRhaWxS
ZWYsIGNvbnN0IHZvaWQqKQoreworICAgIC8vIEZJWE1FOiBjYWxsIGNsaWVudCdzIGZ1bmN0aW9u
LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1dLQXJyYXlSZWYgV2ViS2l0VGV4dENoZWNr
ZXI6Omd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qg
dm9pZCopCit7CisgICAgV0tNdXRhYmxlQXJyYXlSZWYgc3VnZ2VzdGlvbnNGb3JXb3JkID0gV0tN
dXRhYmxlQXJyYXlDcmVhdGUoKTsKKworICAgIGlmIChtX2V3a1RleHRDaGVja2VyLndvcmRfZ3Vl
c3Nlc19nZXQpIHsKKyAgICAgICAgRWluYV9MaXN0KiBsaXN0ID0gbV9ld2tUZXh0Q2hlY2tlci53
b3JkX2d1ZXNzZXNfZ2V0KHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgdm9pZCogaXRlbTsKKworICAgICAgICBFSU5BX0xJU1RfRlJFRShsaXN0LCBp
dGVtKSB7CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihB
ZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxjaGFyKj4o
aXRlbSkpKTsKKyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29y
ZCwgc3VnZ2VzdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBmcmVlKGl0ZW0pOworICAgICAgICB9
CisKKyAgICB9IGVsc2UgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gbV90ZXh0
Q2hlY2tlckVuY2hhbnQtPmdldEd1ZXNzZXNGb3JXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkp
OworICAgICAgICBzaXplX3QgbnVtYmVyT2ZHdWVzc2VzID0gZ3Vlc3Nlcy5zaXplKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZHdWVzc2VzOyArK2kpIHsKKyAgICAg
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGd1ZXNzZXNbaV0udXRmOCgpLmRhdGEoKSkpOworICAg
ICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9u
LmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdWdnZXN0aW9uc0Zvcldv
cmQ7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OmxlYXJuV29yZCh1aW50NjRfdCB0YWcs
IFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChtX2V3a1RleHRDaGVj
a2VyLndvcmRfbGVhcm4pCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIud29yZF9sZWFybih0YWcs
IHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZWxzZQorICAgICAg
ICBtX3RleHRDaGVja2VyRW5jaGFudC0+bGVhcm5Xb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkp
OworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjppZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywg
V0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKG1fZXdrVGV4dENoZWNr
ZXIud29yZF9pZ25vcmUpCisgICAgICAgIG1fZXdrVGV4dENoZWNrZXIud29yZF9pZ25vcmUodGFn
LCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAg
ICAgbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmlnbm9yZVdvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmco
KSk7Cit9CisKK2Jvb2wgV2ViS2l0VGV4dENoZWNrZXI6OkVuY2hhbnRIZWxwZXI6OmFyZURpY3Rp
b25hcmllc0luaXRpYWxpemVkKCkKK3sKKyAgICByZXR1cm4gbV90ZXh0Q2hlY2tlckVuY2hhbnQt
PmFyZURpY3Rpb25hcmllc0luaXRpYWxpemVkKCk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFdlYktp
dFRleHRDaGVja2VyOjpFbmNoYW50SGVscGVyOjpzcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKK3sK
KyAgICByZXR1cm4gbV90ZXh0Q2hlY2tlckVuY2hhbnQtPmdldFNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMoKTsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6RW5jaGFudEhlbHBlcjo6dXBkYXRl
U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKQor
eworICAgIG1fdGV4dENoZWNrZXJFbmNoYW50LT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KGxhbmd1YWdlcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKFNQRUxMQ0hFQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvV2ViS2l0VGV4dENoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5jNWI0OGJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRUZXh0Q2hlY2tlcl9oCisjZGVmaW5lIFdlYktpdFRleHRDaGVja2VyX2gKKworI2lmIEVOQUJM
RShTUEVMTENIRUNLKQorCisjaW5jbHVkZSAiVGV4dENoZWNrZXJFbmNoYW50LmgiCisjaW5jbHVk
ZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLUGFnZS5oIgorI2luY2x1ZGUgIldLU3RyaW5nLmgi
CisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCisvLyBDbGFzcyBjaG9vc2VzIGJldHdlZW4gY2xpZW50J3MgaW1wbGVtZW50YXRpb24g
b2Ygc3BlbGxpbmcgYW5kIHRoZSBXZWJLaXQgb25lLgorY2xhc3MgV2ViS2l0VGV4dENoZWNrZXIg
eworcHVibGljOgorICAgIC8vIENhbGxiYWNrcyByZXF1aXJlZCBieSBXS1RleHRDaGVja2VyLgor
ICAgIHN0YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIHNldENv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworICAgIHN0YXRpYyBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChjb25z
dCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0
aWMgdWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0
aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCisgICAgc3RhdGlj
IHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4
dCwgaW50MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5n
dGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGNoZWNrR3JhbW1h
ck9mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgV0tBcnJheVJlZiogZ3Jh
bW1hckRldGFpbHMsIGludDMyX3QqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCogYmFkR3Jh
bW1hckxlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMgYm9vbCBz
cGVsbGluZ1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2
b2lkIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cisg
ICAgc3RhdGljIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh1aW50NjRf
dCB0YWcsIFdLU3RyaW5nUmVmIG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWlu
dDY0X3QgdGFnLCBXS1N0cmluZ1JlZiBiYWRHcmFtbWFyUGhyYXNlLCBXS0dyYW1tYXJEZXRhaWxS
ZWYgZ3JhbW1hckRldGFpbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKyAgICBzdGF0aWMg
V0tBcnJheVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGxlYXJuV29yZCh1aW50
NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAg
IHN0YXRpYyB2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKworICAgIC8vIEFjY2VzcyB0byBjbGllbnQncyBjYWxs
YmFja3MuCisgICAgc3RhdGljIEV3a19UZXh0X0NoZWNrZXIqIGV3a1RleHRDaGVja2VyKCkgeyBy
ZXR1cm4gJm1fZXdrVGV4dENoZWNrZXI7IH0KKworICAgIGNsYXNzIEVuY2hhbnRIZWxwZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGJvb2wgYXJlRGljdGlvbmFyaWVzSW5pdGlhbGl6
ZWQoKTsKKyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKTsKKyAgICB9OworCitwcml2YXRlOgorICAg
IHN0YXRpYyBFd2tfVGV4dF9DaGVja2VyIG1fZXdrVGV4dENoZWNrZXI7CisKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisjZW5kaWYg
Ly8gV2ViS2l0VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IDYwYzc5ZTEuLjBjZDY2MzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTM2LDYg
KzM2LDEwIEBACiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIK
KyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKKyNlbmRpZgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwogCkBAIC05OCw2ICsxMDIsMTIgQEAgc3RydWN0IF9Fd2tfQ29udGV4
dCB7CiAjZW5kaWYKICAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9h
dHRhY2godGhpcyk7CiAgICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2go
dGhpcyk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgICAgIGV3a190ZXh0X2NoZWNrZXJf
Y2xpZW50X2F0dGFjaCgpOworICAgICAgICBpZiAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2Vu
YWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpKQorICAgICAgICAgICAgZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7CisjZW5k
aWYKKwogICAgIH0KIAogICAgIH5fRXdrX0NvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGNjYTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKQEAgLTAsMCAr
MSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2Vy
LmgiCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgi
CisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKworI2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05BTUUsIE5B
TUUpICBcCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSBj
YikgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIFdlYktpdFRleHRDaGVja2VyOjpld2tUZXh0Q2hlY2tlcigpLT5OQU1F
ID0gY2I7ICAgXAorfQorCisvKioKKyAqIEF0dGFjaGVzIHNwZWxsY2hlY2tlciBmZWF0dXJlLgor
ICoKKyAqIEBpbnRlcm5hbAorICoKKyAqIFRoZSBkZWZhdWx0IHNwZWxsY2hlY2tlciBmZWF0dXJl
IGlzIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKyAqIENsaWVudCBtYXkgdXNlIG93biBpbXBs
ZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNrZXIgcHJldmlvdXNseSBzZXQKKyAqIHRocm91Z2ggdGhl
IGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqLwordm9pZCBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9h
dHRhY2goKQoreworICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVu
dCA9IGZhbHNlOworICAgIGlmIChkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdLVGV4dENoZWNrZXJDbGllbnQgdGV4dENoZWNrZXJDbGllbnQg
eworICAgICAgICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICAw
LCAvLyBjbGllbnRJbmZvCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nQWxsb3dlZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OmlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tl
cjo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6
c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCwKKyAgICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OnVu
aXF1ZVNwZWxsRG9jdW1lbnRUYWcsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpjbG9zZVNw
ZWxsRG9jdW1lbnRXaXRoVGFnLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVs
bGluZ09mU3RyaW5nLAorICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZT
dHJpbmcsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nLAor
ICAgICAgICBXZWJLaXRUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZywKKyAg
ICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdv
cmQsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1t
YXJTdHJpbmcsCisgICAgICAgIFdlYktpdFRleHRDaGVja2VyOjpndWVzc2VzRm9yV29yZCwKKyAg
ICAgICAgV2ViS2l0VGV4dENoZWNrZXI6OmxlYXJuV29yZCwKKyAgICAgICAgV2ViS2l0VGV4dENo
ZWNrZXI6Omlnbm9yZVdvcmQKKyAgICB9OworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRl
eHRDaGVja2VyQ2xpZW50KTsKKworICAgIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9
IHRydWU7Cit9CisKKyNlbHNlCisKKy8vIERlZmluZXMgYW4gZW1wdHkgQVBJIHRvIGRvIG5vdCBi
cmVhayBidWlsZC4KKyNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9O
QU1FLCBOQU1FKSAgXAordm9pZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBF
X05BTUUpICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKK30KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKworRVdL
X1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxf
RG9jdW1lbnRfVGFnX0dldCwgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCitFV0tfVEVY
VF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1
bWVudF9UYWdfQ2xvc2UsIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UpCitFV0tfVEVY
VF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19D
aGVjaywgc3RyaW5nX3NwZWxsaW5nX2NoZWNrKQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19T
RVQoRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfR2V0LCB1aV9zcGVsbGluZ19z
dGF0dXNfZ2V0KQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tl
cl9VSV9TcGVsbGluZ19TdGF0dXNfVG9nZ2xlLCB1aV9zcGVsbGluZ19zdGF0dXNfdG9nZ2xlKQor
RVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGlu
Z19NaXNzcGVsbGVkX1dvcmRfVXBkYXRlLCB1aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBk
YXRlKQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3Jk
X0d1ZXNzZXNfR2V0LCB3b3JkX2d1ZXNzZXNfZ2V0KQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFD
S19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuLCB3b3JkX2xlYXJuKQorRVdLX1RFWFRf
Q0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZSwgd29yZF9p
Z25vcmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dGV4dF9jaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4
dF9jaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmNDc0OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190
ZXh0X2NoZWNrZXIuaApAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUgZXdrX3RleHRf
Y2hlY2tlci5oCisgKiBAYnJpZWYgUHJvdmlkZXMgQVBJIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVs
dCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZXJlIGlzIG9u
ZSBzcGVsbGNoZWNrZXIgb2JqZWN0IHBlciBhcHBsaWNhdGlvbiBhbmQgaXQncyBkaXNhYmxlZCBi
eSBkZWZhdWx0LgorICogSXQgYWxsb3dzIHRvIGNoZWNrIHNwZWxsaW5nIGluIHRoZSBlZGl0YWJs
ZSBhcmVhcy4KKyAqIElmIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGVuYWJsZSB0aGUgZmVhdHVyZSwg
QVBJIGZyb20gQGEgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgKKyAqIHNob3VsZCBiZSB1c2Vk
LgorICoKKyAqIFRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24g
aXMgYmFzZWQgb24gdGhlIEVuY2hhbnQgbGlicmFyeS4KKyAqIEl0IGRvZXNuJ3QgZW5zdXJlIGdy
YW1tYXIgY2hlY2tpbmcuIEFwcGxpY2F0aW9uIGlzIGFibGUgdG8gb3ZlcndyaXRlIHRoZSBkZWZh
dWx0CisgKiBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uIGJ5IGRlZmluaW5nIGl0
cyBvd24gaW1wbGVtZW50YXRpb24gYW5kIHNldHRpbmcKKyAqIGFwcHJvcHJpYXRlIGNhbGxiYWNr
IGZ1bmN0aW9ucy4KKyAqLworCisjaWZuZGVmIGV3a190ZXh0X2NoZWNrZXJfaAorI2RlZmluZSBl
d2tfdGV4dF9jaGVja2VyX2gKKworI2luY2x1ZGUgPEV2YXMuaD4KKworI2lmZGVmIF9fY3BsdXNw
bHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUg
Zm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byByZXR1cm4gYSB0YWcgKGlkZW50aWZpZXIpIHdo
aWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLgorICogCisgKiBVbmlxdWUgdGFncyBoZWxw
IHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBvdGhlciBvYmplY3RzIHRoYXQgYXJlIGNoZWNrZWQg
Zm9yIHNwZWxsaW5nIG1pc3Rha2VzLgorICoKKyAqIEBwYXJhbSBvIHRoZSB2aWV3IG9iamVjdCB0
byBnZXQgdW5pcXVlIHRhZworICoKKyAqIEByZXR1cm4gdW5pcXVlIHRhZyBmb3IgdGhlIGdpdmVu
IEBhIG8gdmlldyBvYmplY3QKKyAqLwordHlwZWRlZiB1aW50NjRfdCAoKkV3a19UZXh0X0NoZWNr
ZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19HZXQpKGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsK
KworLyoqCisgKiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24g
dG8gY2xvc2UgdGhlIHBydmlvdXNseSBzZXQgdGFnLgorICoKKyAqIFRoaXMgY2FsbGJhY2sgd2ls
bCBub3RpZnkgdGhlIHJlY2VpdmVyIHRoYXQgdGhlIHVzZXIgaGFzIGZpbmlzaGVkIHdpdGggdGhl
IHRhZ2dlZCBkb2N1bWVudC4KKyAqCisgKiBAcGFyYW0gdGFnIHRoZSB0YWcgdG8gYmUgY2xvc2Vk
CisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3Vt
ZW50X1RhZ19DbG9zZSkodWludDY0X3QgdGFnKTsKKworLyoqCisgKiBEZWZpbmVzIGEgdHlwZSBu
YW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2VhcmNoIGZvciBhIG1pc3NwZWxsZWQg
d29yZHMgaW4gdGhlIGdpdmVuIHN0cmluZy4KKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcg
dG8gbm90aWZ5IHRoZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRvY3VtZW50IHRoYXQgQGEgdGV4dCBp
cyBhc3NvY2lhdGVkLAorICogICAgICAgIGluIG1vc3QgY2FzZXMgbm90IG5lY2Vzc2FyaWx5LCBq
dXN0IGZvciBpZ25vcmVkIHdvcmQsCisgKiAgICAgICAgQGMgMCBjYW4gYmUgcGFzc2VkIGluIGZv
ciB0ZXh0IG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGRvY3VtZW50CisgKiBAcGFy
YW0gdGV4dCB0aGUgdGV4dCBjb250YWluaW5nIHRoZSB3b3JkcyB0byBzcGVsbGNoZWNrCisgKiBA
cGFyYW0gbWlzc3BlbGxpbmdfbG9jYXRpb24gYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBiZWdpbm5p
bmcgb2YgdGhlIG1pc3NwZWxsZWQgQGEgdGV4dCwgQGMgLTEgaWYgdGhlIEBhIHRleHQgaXMgY29y
cmVjdAorICogQHBhcmFtIG1pc3NwZWxsaW5nX2xlbmd0aCBhIHBvaW50ZXIgdG8gc3RvcmUgdGhl
IGxlbmd0aCBvZiBtaXNzcGVsbGVkIEBhIHRleHQsIEBjIDAgaWYgdGhlIEBhIHRleHQgaXMgY29y
cmVjdAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGlu
Z19DaGVjaykodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp0ZXh0LCBpbnQzMl90ICptaXNzcGVs
bGluZ19sb2NhdGlvbiwgaW50MzJfdCAqbWlzc3BlbGxpbmdfbGVuZ3RoKTsKKworLyoqCisgKiBE
ZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBz
dGF0dXMgb2YgVUkgU3BlbGxpbmcuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgdGhl
IFVJIFNwZWxsaW5nIGlzIHNob3duLCBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgaGlkZGVuCisgKi8K
K3R5cGVkZWYgRWluYV9Cb29sICgqRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNf
R2V0KSh2b2lkKTsKKworLyoqCisgKiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJh
Y2sgZnVuY3Rpb24gdG8gdG9nZ2xlIHRoZSBVSSBTcGVsbGluZy4KKyAqLwordHlwZWRlZiB2b2lk
ICgqRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfVG9nZ2xlKSh2b2lkKTsKKwor
LyoqCisgKiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8g
dXBkYXRlIHRoZSBVSSBTcGVsbGluZyBmb3IgdGhlIG1pc3NwZWxsZWQgd29yZC4KKyAqCisgKiBA
cGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRv
Y3VtZW50IHRoYXQgdGhlIG1pc3NwZWxsZWQgd29yZCBpcyBhc3NvY2lhdGVkLAorICogQHBhcmFt
IG1pc3NwZWxsZWRfd29yZCB0aGUgbWlzc3BlbGxlZCB3b3JkCisgKi8KK3R5cGVkZWYgdm9pZCAo
KkV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3BlbGxlZF9Xb3JkX1VwZGF0ZSkodWlu
dDY0X3QgdGFnLCBjb25zdCBjaGFyICptaXNzcGVsbGVkX3dvcmQpOworCisvKioKKyAqIERlZmlu
ZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgYSBsaXN0IG9m
IHN1Z2dlc3RlZCBzcGVsbGluZ3MgZm9yIGEgbWlzc3BlbGxlZCBAYSB3b3JkLgorICoKKyAqIEBw
YXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIgd2hpY2ggZG9j
dW1lbnQgdGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAgICAgICAgQGMgMCBjYW4gYmUg
cGFzc2VkIGZvciB0ZXh0IG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGRvY3VtZW50
CisgKiBAcGFyYW0gd29yZCB0aGUgd29yZCB0byBnZXQgZ3Vlc3NlcworICogQHJldHVybiBhIGxp
c3Qgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cmluZ3MgKGFzIGNoYXIqKSBhbmQKKyAqICAg
ICAgICAgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZXN0cm95aW5nIHRoZW0uCisgKi8KK3R5
cGVkZWYgRWluYV9MaXN0ICooKkV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldCkodWlu
dDY0X3QgdGFnLCBjb25zdCBjaGFyICp3b3JkKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sg
ZnVuY3Rpb24gdG8gYWRkIHRoZSB3b3JkIHRvIHRoZSBzcGVsbCBjaGVja2VyIGRpY3Rpb25hcnku
CisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tl
ciB3aGljaCBkb2N1bWVudCB0aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBA
YyAwIGNhbiBiZSBwYXNzZWQgZm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3Vs
YXIgZG9jdW1lbnQKKyAqIEBwYXJhbSB3b3JkIHRoZSB3b3JkIHRvIGFkZAorICovCit0eXBlZGVm
IHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm4pKHVpbnQ2NF90IHRhZywgY29uc3Qg
Y2hhciAqd29yZCk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRlbGwg
dGhlIHNwZWxsIGNoZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4gd29yZC4KKyAqCisgKiBAcGFyYW0g
dGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRvY3VtZW50
IHRoYXQgQGEgdGV4dCBpcyBhc3NvY2lhdGVkLAorICogICAgICAgIEBjIDAgY2FuIGJlIHBhc3Nl
ZCBmb3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBkb2N1bWVudAorICog
QHBhcmFtIHdvcmQgdGhlIHdvcmQgdG8gaWdub3JlCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19U
ZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7
CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhIHVuaXF1ZSBzcGVs
bCBkb2N1bWVudCB0YWcuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBv
ciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVu
dGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1
bWVudF90YWdfZ2V0X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVu
dF9UYWdfR2V0IGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2xv
c2UgYSB1bmlxdWUgc3BlbGwgZG9jdW1lbnQgdGFnLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBj
YWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBj
YWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91
bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1Vu
aXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxs
YmFjayBmdW5jdGlvbiB0byBzZWFyY2ggZm9yIGEgbWlzc3BlbGxlZCB3b3JkcyBpbiB0aGUgZ2l2
ZW4gc3RyaW5nLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMg
TlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlv
bgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tf
Y2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrIGNiKTsKKworLyoq
CisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzdGF0dXMgb2YgVUkgU3Bl
bGxpbmcuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxM
IHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisg
Ki8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VpX3NwZWxsaW5nX3N0YXR1c19nZXRfY2Jf
c2V0KEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX0dldCBjYik7CisKKy8qKgor
ICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRvZ2dsZSB0aGUgVUkgU3BlbGxpbmcuCisg
KgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3Rv
cmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkg
dm9pZCBld2tfdGV4dF9jaGVja2VyX3VpX3NwZWxsaW5nX3N0YXR1c190b2dnbGVfY2Jfc2V0KEV3
a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX1RvZ2dsZSBjYik7CisKKy8qKgorICog
U2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgVUkgU3BlbGxpbmcgZm9yIHRo
ZSBtaXNzcGVsbGVkIHdvcmQuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNl
dCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxl
bWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VpX3NwZWxsaW5nX21p
c3NwZWxsZWRfd29yZF91cGRhdGVfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdf
TWlzc3BlbGxlZF9Xb3JkX1VwZGF0ZSBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1
bmN0aW9uIHRvIGdldCBhbiBhcnJheSBvZiBzdWdnZXN0ZWQgc3BlbGxpbmdzIGZvciBhIG1pc3Nw
ZWxsZWQgd29yZC4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBj
IE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRp
b24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9jYl9z
ZXQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNfR2V0IGNiKTsKKworLyoqCisgKiBTZXRz
IGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYWRkIHRoZSB3b3JkIHRvIHRoZSBzcGVsbCBjaGVja2Vy
IGRpY3Rpb25hcnkuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBA
YyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0
aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KEV3
a19UZXh0X0NoZWNrZXJfV29yZF9MZWFybiBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNr
IGZ1bmN0aW9uIHRvIHRlbGwgdGhlIHNwZWxsIGNoZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4gd29y
ZC4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8g
cmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLwor
RUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfd29yZF9pZ25vcmVfY2Jfc2V0KEV3a19UZXh0X0No
ZWNrZXJfV29yZF9JZ25vcmUgY2IpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgor
I2VuZGlmIC8vIGV3a190ZXh0X2NoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGM2ZjM0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRl
LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlX2gK
KyNkZWZpbmUgZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlX2gKKworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXIuaCIKKworLyoqCisgKiBAYnJpZWYgU3Ry
dWN0dXJlIHRoYXQga2VlcHMgY2xpZW50J3MgY2FsbGJhY2sgZnVuY3Rpb25zLgorICoKKyAqIEBp
bnRlcm5hbAorICovCitzdHJ1Y3QgX0V3a19UZXh0X0NoZWNrZXIgeworICAgIEV3a19UZXh0X0No
ZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19HZXQgdW5pcXVlX3NwZWxsX2RvY3VtZW50
X3RhZ19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFn
X0Nsb3NlIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2U7CisgICAgRXdrX1RleHRfQ2hl
Y2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2sgc3RyaW5nX3NwZWxsaW5nX2NoZWNrOworICAgIEV3
a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX0dldCB1aV9zcGVsbGluZ19zdGF0dXNf
Z2V0OworICAgIEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX1RvZ2dsZSB1aV9z
cGVsbGluZ19zdGF0dXNfdG9nZ2xlOworICAgIEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdf
TWlzc3BlbGxlZF9Xb3JkX1VwZGF0ZSB1aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRl
OworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldCB3b3JkX2d1ZXNzZXNfZ2V0
OworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9MZWFybiB3b3JkX2xlYXJuOworICAgIEV3a19U
ZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUgd29yZF9pZ25vcmU7Cit9OwordHlwZWRlZiBfRXdrX1Rl
eHRfQ2hlY2tlciBFd2tfVGV4dF9DaGVja2VyOworCisvLyBNYWtlcyBpdCB2aXNpYmxlIGZvciBX
VFIuCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCk7CisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKyNlbmRpZiAvLyBld2tfdGV4dF9jaGVja2VyX3ByaXZh
dGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMjg3ZTEzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHAKQEAgLTAsMCArMSwxNjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nLmgiCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1RleHRDaGVja2Vy
LmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGJvb2wgZW5h
YmxlQ29udGludW91c1NwZWxsQ2hlY2tpbmcgOiAxOworICAgIGJvb2wgZW5hYmxlR3JhbW1hckNo
ZWNraW5nIDogMTsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFd2tfVGV4dF9DaGVja2VyX1NldHRp
bmdfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VkIGNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nQ2hhbmdlZDsKKyAgICAgICAgRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0dyYW1tYXJfQ2hl
Y2tpbmdfQ2hhbmdlZCBncmFtbWFyQ2hlY2tpbmdDaGFuZ2VkOworICAgIH0gc2V0dGluZ0NoYW5n
ZWRDYWxsYmFja3M7CisgICAgVmVjdG9yPFN0cmluZz4gc3BlbGxDaGVja2luZ0xhbmd1YWdlczsK
K30gZXdrVGV4dENoZWNrZXJTZXR0aW5nID0geyBmYWxzZSwgZmFsc2UsIHswLCAwfSwgVmVjdG9y
PFN0cmluZz4oKX07CisKK3N0YXRpYyBFaW5hX0Jvb2wgaWRsZXJDb250aW51b3VzU3BlbGxDaGVj
a2luZ0NoYW5nZWQodm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0
aW5nQ2hhbmdlZENhbGxiYWNrcy5jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQpCisgICAg
ICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5jb250aW51
b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQoCisgICAgICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRp
bmcuZW5hYmxlQ29udGludW91c1NwZWxsQ2hlY2tpbmcpOworCisgICAgcmV0dXJuIEVDT1JFX0NB
TExCQUNLX0NBTkNFTDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBpZGxlckdyYW1tYXJDaGVja2lu
Z0NoYW5nZWQodm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5n
Q2hhbmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKQorICAgICAgICBld2tUZXh0
Q2hlY2tlclNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3MuZ3JhbW1hckNoZWNraW5nQ2hh
bmdlZCgKKyAgICAgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVHcmFtbWFyQ2hl
Y2tpbmcpOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKworc3RhdGlj
IEVpbmFfQm9vbCBpZGxlclNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQodm9pZCopCit7CisgICAg
Ly8gRklYTUU6IENvbnNpZGVyIHRvIGRlbGVnYXRlIGNhbGxpbmcgb2YgdGhpcyBtZXRob2QgaW4g
V2ViUHJvY2VzcyB0byBkbyBub3QgZGVsYXkvYmxvY2sgVUlQcm9jZXNzLgorICAgIFdlYktpdFRl
eHRDaGVja2VyOjpFbmNoYW50SGVscGVyOjp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGV3
a1RleHRDaGVja2VyU2V0dGluZy5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzKTsKKyAgICByZXR1cm4g
RUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCitzdGF0aWMgdm9pZCBzcGVsbENoZWNraW5nTGFu
Z3VhZ2VzU2V0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuZXdMYW5ndWFnZXMpCit7CisgICAgZXdr
VGV4dENoZWNrZXJTZXR0aW5nLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMgPSBuZXdMYW5ndWFnZXM7
IAorICAgIGVjb3JlX2lkbGVyX2FkZChpZGxlclNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQsIDAp
OworfQorI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorCit2b2lkIGV3a190ZXh0X2NoZWNr
ZXJfc2V0dGluZ19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KEV3a19U
ZXh0X0NoZWNrZXJfU2V0dGluZ19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZWQgY2Fs
bGJhY2spCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgZXdrVGV4dENoZWNrZXJTZXR0
aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdl
ZCA9IGNhbGxiYWNrOworI2VuZGlmCit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
X2dyYW1tYXJfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5n
X0dyYW1tYXJfQ2hlY2tpbmdfQ2hhbmdlZCBjYWxsYmFjaykKK3sKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKyAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3Mu
Z3JhbW1hckNoZWNraW5nQ2hhbmdlZCA9IGNhbGxiYWNrOworI2VuZGlmCit9CisKK0VpbmFfQm9v
bCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZ2V0KCkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4gZXdrVGV4dENo
ZWNrZXJTZXR0aW5nLmVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nOworI2Vsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
ZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfc2V0KEVpbmFfQm9vbCBlbmFibGUpCit7
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgZW5hYmxlID0gISFlbmFibGU7CisgICAgaWYg
KGV3a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZyAhPSBl
bmFibGUpIHsKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLmVuYWJsZUNvbnRpbnVvdXNT
cGVsbENoZWNraW5nID0gZW5hYmxlOworCisgICAgICAgIFdLVGV4dENoZWNrZXJDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxlKTsKKworICAgICAgICAvLyBT
ZXRzIGRlZmF1bHQgbGFuZ3VhZ2UgaWYgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhbnkuCisgICAgICAg
IGlmIChlbmFibGUgJiYgIVdlYktpdFRleHRDaGVja2VyOjpFbmNoYW50SGVscGVyOjphcmVEaWN0
aW9uYXJpZXNJbml0aWFsaXplZCgpKQorICAgICAgICAgICAgc3BlbGxDaGVja2luZ0xhbmd1YWdl
c1NldChWZWN0b3I8U3RyaW5nPigpKTsKKworICAgICAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0
aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdl
ZCkKKyAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChpZGxlckNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nQ2hhbmdlZCwgMCk7CisgICAgfQorI2VuZGlmCit9CisKK0VpbmFfQm9vbCBld2tfdGV4dF9j
aGVja2VyX3NldHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KCkKK3sKKyNpZiBFTkFC
TEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4gZXdrVGV4dENoZWNrZXJTZXR0aW5nLmVuYWJsZUdy
YW1tYXJDaGVja2luZzsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3Zv
aWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldChF
aW5hX0Jvb2wgZW5hYmxlKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGVuYWJsZSA9
ICEhZW5hYmxlOworICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlR3JhbW1hckNo
ZWNraW5nICE9IGVuYWJsZSkgeworICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxl
R3JhbW1hckNoZWNraW5nID0gZW5hYmxlOworCisgICAgICAgIFdLVGV4dENoZWNrZXJHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZSk7CisKKyAgICAgICAgaWYgKGV3a1Rl
eHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hlY2tpbmdD
aGFuZ2VkKQorICAgICAgICAgICAgZWNvcmVfaWRsZXJfYWRkKGlkbGVyR3JhbW1hckNoZWNraW5n
Q2hhbmdlZCwgMCk7CisgICAgfQorI2VuZGlmCit9CitFaW5hX0xpc3QqIGV3a190ZXh0X2NoZWNr
ZXJfc2V0dGluZ19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCkKK3sKKyAgICBFaW5hX0xp
c3QqIGxpc3RPZmxhbmd1YWdlcyA9IDA7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgVmVj
dG9yPFN0cmluZz4gbGFuZ3VhZ2VzID0gV2ViS2l0VGV4dENoZWNrZXI6OkVuY2hhbnRIZWxwZXI6
OnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZMYW51YWdlcyA9
IGxhbmd1YWdlcy5zaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9m
TGFudWFnZXM7ICsraSkKKyAgICAgICAgbGlzdE9mbGFuZ3VhZ2VzID0gZWluYV9saXN0X2FwcGVu
ZChsaXN0T2ZsYW5ndWFnZXMsIHN0cmR1cChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOwor
CisjZW5kaWYKKyAgICByZXR1cm4gbGlzdE9mbGFuZ3VhZ2VzOworfQorCit2b2lkIGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0IGNoYXIq
IGxhbmd1YWdlcykKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5n
PiBuZXdMYW5ndWFnZXM7CisgICAgU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZXMpLnNwbGl0KCcs
JywgbmV3TGFuZ3VhZ2VzKTsKKworICAgIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQobmV3TGFu
Z3VhZ2VzKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41NTBkOWNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgKQEAgLTAs
MCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmlj
cworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oCisg
KiBAYnJpZWYgQVBJIGZvciBtYW5pcHVsYXRpbmcgc3BlbGwgY2hlY2tlciBmZWF0dXJlLgorICov
CisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2gKKyNkZWZpbmUgZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nX2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3BsdXNw
bHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIENyZWF0ZXMgYSB0eXBlIG5hbWUg
Zm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4K
KyAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkg
V2ViS2l0LgorICoKKyAqIEBwYXJhbSBAYyBFSU5BX1RSVUUgaWYgY29udGludW91cyBzcGVsbCBj
aGVja2luZyBpcyBlbmFibGVkIG9yIEAgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8K
K3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19Db250aW51b3VzX1NwZWxs
X0NoZWNraW5nX0NoYW5nZWQpKEVpbmFfQm9vbCBlbmFibGUpOworCisvKioKKyAqIFNldHMgYSBj
YWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4KKyAqIHRoZSBn
cmFtbWFyIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0LgorICoKKyAqIEBw
YXJhbSBAYyBFSU5BX1RSVUUgaWYgZ3JhbW1hciBjaGVja2luZyBpcyBlbmFibGVkIG9yIEAgRUlO
QV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0No
ZWNrZXJfU2V0dGluZ19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQpKEVpbmFfQm9vbCBlbmFibGUp
OworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUg
Y2xpZW50IHdoZW4KKyAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2Fz
IGNoYW5nZWQgYnkgV2ViS2l0LgorICoKKyAqIFNwZWNpZnlpbmcgb2YgdGhpcyBjYWxsYmFjayBp
cyBuZWVkZWQgaWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9u
cworICogb25jZSBXZWJLaXQgY2hhbmdlcyB0aGlzIHNldHRpbmcuCisgKiBJZiB0aGUgYXBwbGlj
YXRpb24gaXMgbm90IGludGVyZXN0ZWQsIHRoaXMgY2FsbGJhY2sgaXMgbm90IHNldC4KKyAqIENo
YW5naW5nIG9mIHRoaXMgc2V0dGluZyBhdCB0aGUgV2ViS2l0IGxldmVsIGNhbiBiZSBtYWRlIGFz
IGEgcmVzdWx0IG9mIG1vZGlmeWluZworICogb3B0aW9ucyBpbiBhIENvbnRleHQgTWVudSBieSBh
IHVzZXIuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNldCBv
ciBAYyBOVUxMIHRvIGludmFsaWRhdGUgdGhlIHByZXZpb3VzIG9uZQorICovCitFQVBJIHZvaWQg
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdl
ZF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tp
bmdfQ2hhbmdlZCBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQg
dG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhlIGdyYW1tYXIgY2hlY2tpbmcgc2V0dGlu
ZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogU3BlY2lmeWluZyBvZiB0aGlzIGNhbGxi
YWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3RpZmlj
YXRpb25zCisgKiBvbmNlIFdlYktpdCBjaGFuZ2VzIHRoaXMgc2V0dGluZy4KKyAqIElmIHRoZSBh
cHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0Lgor
ICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJlIG1h
ZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBNZW51
IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24gdG8g
c2V0IG9yIEBjIE5VTEwgdG8gaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMgb25lCisgKi8KK0VBUEkg
dm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZ3JhbW1hcl9jaGVja2luZ19jaGFuZ2VkX2Ni
X3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdfR3JhbW1hcl9DaGVja2luZ19DaGFuZ2VkIGNi
KTsKKworLyoqCisgKiBRdWVyaWVzIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5h
YmxlZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8K
K0VBUEkgRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91
c19zcGVsbF9jaGVja2luZ19nZXQodm9pZCk7CisKKy8qKgorICogRW5hYmxlcy9kaXNhYmxlcyBj
b250aW51b3VzIHNwZWxsIGNoZWNraW5nLgorICoKKyAqIEFkZGl0aW9uYWxseSwgdGhpcyBmdW5j
dGlvbiBjYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIChpZiBkZWZpbmVkKSB0byBub3RpZnkKKyAq
IHRoZSBjbGllbnQgYWJvdXQgdGhlIGNoYW5nZSBvZiB0aGUgc2V0dGluZy4KKyAqIFRoaXMgZmVh
dHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICoKKyAqIEBzZWUgZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQKKyAqCisg
KiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSB0byBlbmFibGUgY29udGludW91cyBzcGVsbCBj
aGVja2luZyBvciBAYyBFSU5BX0ZBTFNFIHRvIGRpc2FibGUKKyAqLworRUFQSSB2b2lkIGV3a190
ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQo
RWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogUXVlcmllcyBpZiBncmFtbWFyIGNoZWNraW5n
IGlzIGVuYWJsZWQuCisgKgorICogQXBwbGljYXRpb24gbWF5IG92ZXJ3cml0ZSB3ZWJraXQgZ3Jh
bW1hciBjaGVja2luZyBpbXBsZW1lbnRhdGlvbiBieSBzZXR0aW5nIGNhbGxiYWNrIGZ1bmN0aW9u
cworICogQHNlZSBld2tfdGV4dF9jaGVja2VyLmgKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBpZiBncmFtbWFyIGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdz
IGRpc2FibGVkCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19l
bmFibGVfZ3JhbW1hcl9jaGVja2luZ19nZXQodm9pZCk7CisKKy8qKgorICogRW5hYmxlcy9kaXNh
YmxlcyBncmFtbWFyIGNoZWNraW5nLgorICoKKyAqIEFkZGl0aW9uYWxseSwgdGhpcyBmdW5jdGlv
biBjYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIChpZiBkZWZpbmVkKSB0byBub3RpZnkKKyAqIHRo
ZSBjbGllbnQgYWJvdXQgdGhlIGNoYW5nZSBvZiB0aGUgc2V0dGluZy4KKyAqIFRoaXMgZmVhdHVy
ZSBpcyBkaXNhYmxlZCBhbmQgaXMgbm90IHN1cHBvcnRlZCBieSBXZWJLaXQtRUZMIGJ5IGRlZmF1
bHQuCisgKgorICogQHNlZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZ3JhbW1hcl9jaGVja2lu
Z19jaGFuZ2VkX2NiX3NldAorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRvIGVu
YWJsZSBncmFtbWFyIGNoZWNraW5nIG9yIEBjIEVJTkFfRkFMU0UgdG8gZGlzYWJsZQorICovCitF
QVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5n
X3NldChFaW5hX0Jvb2wgZW5hYmxlKTsKKworLyoKKyAqIEdldHMgdGhlIHRoZSBsaXN0IG9mIHNw
ZWxsIGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1c2UuCisgKgorICogQHNlZSBld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldAorICoKKyAqIEByZXR1cm4g
dGhlIGxpc3Qgb2Ygc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIChpdGVtIHR5cGUgaXMgY2hhciAq
KSBpbiB1c2UsCisgKiAgICAgICAgIHRoZSBsaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZy
ZWVkIGFmdGVyIHVzZQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQodm9pZCk7CisKKy8qKgorICogU2V0cyBA
YSBsYW5ndWFnZXMgYXMgdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIHVzZSBieSBkZWZhdWx0IFdl
YktpdAorICogaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2VyIGZlYXR1cmUgd2l0aCBFbmNo
YW50IGxpYnJhcnkgc3VwcG9ydC4KKyAqCisgKiBJZiBAbGFuZ3VhZ2VzIGlzIEBjIE5VTEwsIHRo
ZSBkZWZhdWx0IGxhbmd1YWdlIGlzIHVzZWQuCisgKiBJZiB0aGUgZGVmYXVsdCBsYW5ndWFnZSBj
YW4gbm90IGJlIGRldGVybWluZWQgdGhlbiBhbnkgYXZhaWxhYmxlIGRpY3Rpb25hcnkgd2lsbCBi
ZSB1c2VkLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gaW52YWxpZGF0ZXMgdGhlIHByZXZp
b3VzbHkgc2V0IGxhbmd1YWdlcy4KKyAqICAgICAgIFRoZSBkaWN0aW9uYXJpZXMgYXJlIHJlcXVl
c3RlZCBhc3luY2hyb25vdXNseS4KKyAqCisgKiBAcGFyYW0gbGFuZ3VhZ2VzIGEgbGlzdCBvZiBj
b21tYSAoJywnKSBzZXBhcmF0ZWQgbGFuZ3VhZ2UgY29kZXMKKyAqICAgICAgICBvZiB0aGUgZm9y
bSAnZW5fVVMnLCBpZSwgbGFuZ3VhZ2VfVkFSSUFOVCwgbWF5IGJlIEBjIE5VTEwuCisgKi8KK0VB
UEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
X3NldChjb25zdCBjaGFyICpsYW5ndWFnZXMpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNl
bmRpZgorCisjZW5kaWYgLy8gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKaW5kZXggYWEzM2YyZi4u
ZWQ5MjFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hl
Y2tlckVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tl
ckVmbC5jcHAKQEAgLTEsNSArMSw3IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNz
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Nyw3ICsyOSw5IEBACiAjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKIAogI2luY2x1ZGUgIlRleHRD
aGVja2VyU3RhdGUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiV2ViVGV4dENoZWNrZXIuaCIKKyNlbmRpZgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMzcsOTEgKzQxLDE0NCBAQCBzdGF0aWMg
VGV4dENoZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBUZXh0Q2hlY2tlclN0
YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZVN0YXRlID0g
ZmFsc2U7CisgICAgaWYgKGRpZEluaXRpYWxpemVTdGF0ZSkKKyAgICAgICAgcmV0dXJuIHRleHRD
aGVja2VyU3RhdGU7CisKKyAgICBXZWJUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50ID0gV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkID0gY2xpZW50LmdyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKKworICAgIGRpZEluaXRpYWxp
emVTdGF0ZSA9IHRydWU7CisjZW5kaWYKICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKIH0K
IAogYm9vbCBUZXh0Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0
dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY29udGludW91c1NwZWxsQ2hl
Y2tpbmdBbGxvd2VkKCk7CisjZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCi12
b2lkIFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkK
K3ZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29s
IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKKyAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldENvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CisjZW5kaWYK
IH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sKQor
dm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorICAgIGlmIChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9PSBp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHRleHRDaGVj
a2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0R3JhbW1hckNo
ZWNraW5nRW5hYmxlZChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOworI2VuZGlmCiB9CiAKIHZv
aWQgVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdl
ZChib29sIGVuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkID0gZW5hYmxlZDsKKyNlbmRpZgogfQogCiB2b2lkIFRleHRDaGVja2VyOjpncmFtbWFy
Q2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3RhdGUu
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNlbmRpZgogfQogCi1pbnQ2NF90
IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSopCitpbnQ2
NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFn
ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAg
IHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9j
dW1lbnRUYWcocGFnZSk7CisjZWxzZQogICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKLXZvaWQg
VGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCkKK3ZvaWQgVGV4
dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hl
Y2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsK
KyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50
NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBU
ZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRh
ZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3BlbGxp
bmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hh
cmVkKCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBT
dHJpbmcodGV4dCwgbGVuZ3RoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5n
dGgpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KGludDY0X3QsIGNvbnN0IFVDaGFyKiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFy
RGV0YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3Jh
bW1hck9mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQs
IHVpbnQzMl90IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywg
aW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2Vi
VGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVs
bERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdy
YW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7CisjZW5kaWYKIH0KIAogYm9vbCBUZXh0
Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS5zcGVsbGluZ1VJSXNTaG93aW5nKCk7CisjZWxzZQogICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgogfQogCiB2b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNT
aG93aW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdV
SUlzU2hvd2luZygpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4
dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNw
ZWxsRG9jdW1lbnRUYWcsIG1pc3NwZWxsZWRXb3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRD
aGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25z
dCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJE
ZXRhaWwpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykK
KyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlX
aXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFt
bWFyRGV0YWlsKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9y
V29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5n
PiYpCit2b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0
b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJM
RShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuZ3Vl
c3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7CisjZW5kaWYKIH0K
IAotdm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit2
b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25z
dCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmxlYXJuV29y
ZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2Vy
OjppZ25vcmVXb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjpp
Z25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2Vi
VGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRU
YWcsIHdvcmQpOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNo
YW50LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OWM3MWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UKQEAgLTAsMCAr
MSw0MyBAQAorIyAtIFRyeSB0byBmaW5kIEVuY2hhbnQKKyMgT25jZSBkb25lLCB0aGlzIHdpbGwg
ZGVmaW5lCisjCisjICBFTkNIQU5UX0lOQ0xVREVfRElSUyAtIHRoZSBFbmNoYW50IGluY2x1ZGUg
ZHJlY3RvcmllcworIyAgRU5DSEFOVF9MSUJSQVJJRVMgLSBsaW5rIHRoZXNlIHRvIHVzZSBFbmNo
YW50CisjCisjIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTCisjIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgT1IgSVRTCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOworIyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyMgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyMgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRgorIyBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworRklORF9QQUNLQUdFKFBrZ0NvbmZpZykKK1BLR19DSEVDS19NT0RVTEVTKFBDX0VOQ0hBTlQg
ZW5jaGFudCkKKworRklORF9QQVRIKEVOQ0hBTlRfSU5DTFVERV9ESVJTCisgICAgTkFNRVMgZW5j
aGFudC5oCisgICAgUEFUSFMgJHtQQ19FTkNIQU5UX0lOQ0xVREVESVJ9CisgICAgICAgICAgJHtQ
Q19FTkNIQU5UX0lOQ0xVREVfRElSU30KKykKKworRklORF9MSUJSQVJZKEVOQ0hBTlRfTElCUkFS
SUVTCisgICAgTkFNRVMgZW5jaGFudAorICAgIFBBVEhTICR7UENfRU5DSEFOVF9MSUJESVJ9Cisg
ICAgICAgICAgJHtQQ19FTkNIQU5UX0xJQlJBUllfRElSU30KKykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UK
aW5kZXggNTI1YmYwZi4uMTc3NTE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNF
ZmwuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTE2NCwzICsx
NjQsOCBAQCBJRiAoV1RGX1VTRV9USUxFRF9CQUNLSU5HX1NUT1JFKQogICBGSU5EX1BBQ0tBR0Uo
T3BlbkdMIFJFUVVJUkVEKQogRU5ESUYoKQogCitPUFRJT04oRU5BQkxFX1NQRUxMQ0hFQ0sgIkVu
YWJsZSBzcGVsbGNoZWNraW5nIGZlYXR1cmUgKHJlcXVpcmVzIGVuY2hhbnQpIiBPTikKK0lGIChF
TkFCTEVfU1BFTExDSEVDSykKKyAgICAgIEZJTkRfUEFDS0FHRShFbmNoYW50IFJFUVVJUkVEKQor
ICAgICAgQUREX0RFRklOSVRJT05TKC1ERU5BQkxFX1NQRUxMQ0hFQ0s9MSkKK0VORElGKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163862</attachid>
            <date>2012-09-13 06:43:58 -0700</date>
            <delta_ts>2012-09-14 03:29:59 -0700</delta_ts>
            <desc>remove WebKitTextChecker class</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>61881</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzYzM3NjU5Li5hNjNiNjJk
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDktMTMgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYXNtdW5nLmNvbT4KKworICAgICAgICBbV0syXVtFRkxd
IEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlcyBzcGVsbGNoZWNraW5nIGZl
YXR1cmUgZm9yIFdLMi1FZmwuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvRmluZEVuY2hhbnQu
Y21ha2U6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlOiBE
ZWZpbmVzIFNQRUxMQ0hFQ0sgbWFjcm8uCisKIDIwMTItMDktMTMgIE9zd2FsZCBCdWRkZW5oYWdl
biAgPG9zd2FsZC5idWRkZW5oYWdlbkBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBGbGxvdyBy
ZW5hbWUgb2YgcXRfbW9kdWxlX2NvbmZpZy5wcmYgdG8gcXRfbW9kdWxlLnByZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGU2ZWU1MmUuLjhlMGE1ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0w
OS0xMyAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4sIE1p
Y2hhbCBSb2ogPG0ucm9qQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gSW1wbGVt
ZW50YXRpb24gb2Ygc3BlbGxjaGVja2luZyBmZWF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE4NTQgCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAg
QWRkcyBlbmNoYW50LXJlbGF0ZWQgY29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRocyBhbmQgdGhl
IGxpYnJhcnkgZmxhZy4KKwogMjAxMi0wOS0xMyAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTk1JOiBpbnN0cnVtZW50IEtV
UkwgZGlyZWN0bHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDc5M2M4MjEuLjk3MWJk
ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0zMzAsMyArMzMwLDE0IEBAIElGIChF
TkFCTEVfV0VCX0FVRElPKQogICBBRERfREVGSU5JVElPTlMoLURVTklOU1RBTExFRF9BVURJT19S
RVNPVVJDRVNfRElSPSIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9hdWRpby9yZXNvdXJjZXMiKQog
RU5ESUYgKCkKIAorSUYgKEVOQUJMRV9TUEVMTENIRUNLKQorICAgIExJU1QoQVBQRU5EIFdlYkNv
cmVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAke0VOQ0hBTlRfSU5DTFVERV9ESVJTfQor
ICAgICkKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAke0VOQ0hB
TlRfTElCUkFSSUVTfQorICAgICkKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAg
ICAgICAgcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAKKyAgICAp
CitFTkRJRigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzMyMTQ1Yy4uZTg0YTMwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyMSBAQAorMjAxMi0wOS0xMyAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtv
d3NraUBzYW1zdW5nLmNvbT4sIE1pY2hhbCBSb2ogPG0ucm9qQHNhbXN1bmcuY29tPgorCisgICAg
ICAgIEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNwZWxsaW5nIGltcGxlbWVu
dGF0aW9uIGZvciBXZWJLaXQyLUVGTCB0aGF0IGlzIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4K
KworICAgICAgICBBZGRpdGlvbmFsbHkgdGhlIHBhdGNoIHByb3ZpZGVzIEFQSSB0byBvdmVyd3Jp
dGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlvbgorICAgICAg
ICBhcyBFbmNoYW50IGxpYnJhcnkgZG9lc24ndCBlbnN1cmUgZ3JhbW1hciBjaGVja2luZy4KKyAg
ICAgICAgQXBwbGljYXRpb24gaXMgYWJsZSB0byBvdmVyd3JpdGUgaXQgKGJvdGggZ3JhbW1hciBh
bmQgc3BlbGwgY2hlY2tpbmcpIGJ5IGRlZmluaW5nCisgICAgICAgIGl0cyBvd24gaW1wbGVtZW50
YXRpb24gYW5kIHNldHRpbmcgYXBwcm9wcmlhdGUgY2FsbGJhY2sgZnVuY3Rpb25zLiAKKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICBBZGQgZW5jaGFudC1yZWxhdGVkIGNv
bXBpbGVyIGZsYWdzOiBoZWFkZXIgcGF0aHMgYW5kIHRoZSBsaWJyYXJ5IGZsYWcuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oOgorICAgICAgICBBZGQgZmlsZXMgdGhh
dCBjb250YWluIHRoZSBBUEkgdG8gdGhlIG1haW4gV2ViS2l0Mi1FRkwncyBoZWFkZXIgdG8gYmUg
YXZhaWxhYmxlIGZvciBhcHBsaWNhdGlvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9XZWJLaXRUZXh0Q2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnQgY2FsbGJh
Y2tzIGZ1bmN0aW9ucyBvZiBXS1RleHRDaGVja2VyLgorCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAg
IChXZWJLaXQ6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdl
YktpdDo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktp
dDo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6c2V0R3JhbW1h
ckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OnVuaXF1ZVNwZWxsRG9jdW1lbnRU
YWcpOgorICAgICAgICAoV2ViS2l0OjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKToKKyAgICAg
ICAgKFdlYktpdDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6Y2hl
Y2tHcmFtbWFyT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpzcGVsbGluZ1VJSXNTaG93aW5n
KToKKyAgICAgICAgKFdlYktpdDo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAg
IChXZWJLaXQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAo
V2ViS2l0Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpndWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OmxlYXJuV29yZCk6CisgICAg
ICAgIChXZWJLaXQ6Omlnbm9yZVdvcmQpOgorICAgICAgICBUaG9zZSBtZXRob2RzIGFyZSBkaXJl
Y3RseSBnaXZlbiBhcyBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIFdLVGV4dENoZWNrZXIncyBjbGll
bnQuCisgICAgICAgIFRoZXkgY2hvb3NlIGJldHdlZW4gV2ViS2l0J3Mgc3BlbGxpbmcgaW1wbGVt
ZW50YXRpb24gYW5kIGNsaWVudCdzIG9uZXMuIAorCisgICAgICAgIChXZWJLaXQ6OmF2YWlsYWJs
ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVTcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6bG9hZGVkU3BlbGxDaGVja2luZ0xh
bmd1YWdlcyk6CisgICAgICAgIFRoZXkgYXJlIHVzZWQgYnkgZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nLmNwcCBmaWxlIGFuZCBhbGxvdyB0byBkbyBub3QKKyAgICAgICAgZXhwb3NlICdtX3RleHRD
aGVja2VyRW5jaGFudCcuIAorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4
dENoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSB0aGUgZnVuY3Rpb25zIHdoaWNoIGNo
b29zZXMgYmV0d2VlbiBjbGllbnQncyBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGluZyBhbmQgdGhl
IFdlYktpdCBvbmUuCisKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoX0V3a19Db250ZXh0OjpfRXdrX0NvbnRl
eHQpOgorICAgICAgICBJbml0aWFsaXplIHNwZWxsY2hlY2tlciBmZWF0dXJlLgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoZXdrVGV4dENoZWNrZXIpOgorICAgICAgICBHZXQgdGhlIGNsaWVudCdzIGNhbGxiYWNrIGZ1
bmN0aW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIu
aDogQWRkZWQuCisgICAgICAgIERlZmluZSBBUEkgdG8gc2V0IHRoZSBjbGllbnQncyBvd24gc3Bl
bGxpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dGV4dF9jaGVja2VyX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChfRXdrX1RleHRfQ2hlY2tl
cik6CisgICAgICAgIERlZmluZSBzdHJ1Y3Qgd2l0aCBjbGllbnQncyBjYWxsYmFja3MgcmVzcG9u
aXNibGUgZm9yIHNwZWxsaW5nLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nLmNwcDogQWRkZWQuCisgICAgICAgIChpZGxlckdyYW1tYXJDaGVj
a2luZ0NoYW5nZWQpOgorICAgICAgICAoaWRsZXJTcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KToK
KyAgICAgICAgVGhlIGFwcGxpY2F0aW9uIGlzIG5vdGlmaWVkIGFib3V0IHNwZWxsaW5nIHNldHRp
bmdzIGNoYW5nZSAodGhleSBtYXkgYmUgY2hhbmdlZAorICAgICAgICB0aHJvdWdoIGNvbnRleHQg
bWVudSBvcHRpb24pIG9uIGlkbGVyIHRvIGRvIG5vdCBibG9jayBXZWJLaXQuIAorCisgICAgICAg
IChzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KToKKyAgICAgICAgVGhlIGRpY3Rpb25hcmllcyBh
cmUgcmVxdWVzdGVkIG9uIGlkbGVyIHRvIGRvIG5vdCBibG9jayBXZWJLaXQuCisKKyAgICAgICAg
KGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5n
ZWRfY2Jfc2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19ncmFtbWFyX2No
ZWNraW5nX2NoYW5nZWRfY2Jfc2V0KToKKyAgICAgICAgU2V0IHRoZSBjYWxsYmFjayBmdW5jdGlv
bnMgdXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuIHRoZSBzcGVsbGluZyBzZXR0aW5ncwor
ICAgICAgICB3ZXJlIGNoYW5nZWQgYnkgV2ViS2l0LiAKKworICAgICAgICAoZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCk6CisgICAg
ICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfc2V0KToKKyAgICAgICAgQVBJIHRvIHNldC9nZXQgdGhlIGNvbnRpbnVvdXMgc3BlbGwg
Y2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3Jh
bW1hcl9jaGVja2luZ19nZXQpOgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2Vu
YWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldCk6CisgICAgICAgIEFQSSB0byBzZXQvZ2V0IHRoZSBn
cmFtbWFyIGNoZWNraW5nLgorCisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfYXZh
aWxhYmxlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQpOgorICAgICAgICAoZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQpOgorICAgICAgICAo
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQpOgor
ICAgICAgICBBUEkgdG8gc2V0L2dldCBsYW5ndWFnZXMgdG8gdXNlIGJ5IFdlYktpdCBpbXBsZW1l
bnRhdGlvbiBiYXNlZCBvbiBFbmNoYW50IGxpYnJhcnkuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaDogQWRkZWQuCisgICAgICAgIEFkZCBB
UEkgZm9yIG1hbmlwdWxhdGluZyBzcGVsbCBjaGVja2VyIGZlYXR1cmUuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNl
dENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRD
aGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1l
bnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50
V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZT
dHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJp
bmcpOiBSZW1vdmUgV2ViQ29yZSBuYW1hc3BhY2UgYXMgaXQncyBhbHJlYWR5IGRlZmluZWQgZm9y
IHRoZSB3aG9sZSBmaWxlLgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c3BlbGxpbmdV
SUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGlu
Z1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjppZ25vcmVXb3Jk
KToKKyAgICAgICAgVGhvc2UgY2FsbCBXS1RleHRDaGVja2VyIGNsaWVudCBtZXRob2RzLgorCiAy
MDEyLTA5LTEzICBPc3dhbGQgQnVkZGVuaGFnZW4gIDxvc3dhbGQuYnVkZGVuaGFnZW5Abm9raWEu
Y29tPgogCiAgICAgICAgIFtRdF0gRml4IGJ1aWxkIGFnYWluc3QgbmFtZXNwYWNlZCBRdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA1MWI4ZTczLi43ODFjNjFhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQpAQCAtNTIsNiArNTIsOCBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJD
RVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24u
Y3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RleHRfY2hlY2tlci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmcuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXF1ZXN0LmNw
cAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCiAgICAgVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5jcHAKQEAgLTIyMSw2ICsyMjMsOCBA
QCBTRVQgKEVXZWJLaXQyX0hFQURFUlMKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbi5oIgogICAg
ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVw
X21lbnVfaXRlbS5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3NldHRpbmdzLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElS
fS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmgiCisgICAgIiR7Q01BS0VfQ1VS
UkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRp
bmcuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a191cmxfcmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oIgogICAgICIke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5oIgpA
QCAtMzE5LDMgKzMyMywxOCBAQCBJRiAoRU5BQkxFX0lOU1BFQ1RPUikKICAgICAgICAgICAgICAg
ICAgICAgICAgUEFUVEVSTiAiKi5naWYiCiAgICAgICAgICAgICAgICAgICAgICAgIFBBVFRFUk4g
IioucG5nIikKIEVORElGICgpCisKK0lGIChFTkFCTEVfU1BFTExDSEVDSykKKyAgICBMSVNUKEFQ
UEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgJHtFTkNIQU5UX0lOQ0xV
REVfRElSU30KKyAgICApCisgICAgTElTVChBUFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMKKyAgICAg
ICAgJHtFTkNIQU5UX0xJQlJBUklFU30KKyAgICApCisgICAgTElTVChBUFBFTkQgV2ViS2l0Ml9J
TkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQv
ZW5jaGFudAorICAgICkKKyAgICBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKKyAgICAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCisgICAgKQorRU5ESUYoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5kZXggNzUwY2I0
OC4uZGU1ZjRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0
Mi5oCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25fcG9saWN5X2Rl
Y2lzaW9uLmgiCiAjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfaXRlbS5oIgogI2luY2x1ZGUgImV3
a19zZXR0aW5ncy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXIuaCIKKyNpbmNsdWRlICJl
d2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKICNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3QuaCIK
ICNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9zY2hlbWVf
cmVxdWVzdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
V2ViS2l0VGV4dENoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
V2ViS2l0VGV4dENoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmVmZDhiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXS0FQ
SUNhc3QuaCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldLUmV0YWlu
UHRyLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgi
CisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nLmgiCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgT3duUHRyPFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudD4gdGV4dENo
ZWNrZXJFbmNoYW50ID0gV2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50OjpjcmVhdGUoKTsKK3N0
YXRpYyBFd2tfVGV4dF9DaGVja2VyKiBld2tUZXh0Q2hlY2tlckNhbGxiYWNrID0gZXdrVGV4dENo
ZWNrZXIoKTsKKworYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZChjb25zdCB2
b2lkKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFRoaXMgbWV0aG9kIGlzIG5v
dCBjYWxsZWQgYnkgV2ViS2l0Mi9XZWJDb3JlLiBKdXN0IGtlZXAgaXQgZm9yIEFQSSBjb21wYXRp
YmlsaXR5LgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4gZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpOworfQorCit2
b2lkIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0
IHZvaWQqKQoreworICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91
c19zcGVsbF9jaGVja2luZ19zZXQoZW5hYmxlZCk7Cit9CisKK2Jvb2wgaXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KCk7Cit9CisKK3ZvaWQgc2V0R3JhbW1h
ckNoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqKQoreworICAgIGV3a190
ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9jaGVja2luZ19zZXQoZW5hYmxlZCk7
Cit9CisKK3VpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNv
bnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT51bmlxdWVfc3Bl
bGxfZG9jdW1lbnRfdGFnX2dldCkKKyAgICAgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyQ2FsbGJh
Y2stPnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KHRvSW1wbChwYWdlKS0+dmlld1dpZGdl
dCgpKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhU
YWcodWludDY0X3QgdGFnLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJD
YWxsYmFjay0+dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSkKKyAgICAgICAgZXdrVGV4
dENoZWNrZXJDYWxsYmFjay0+dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSh0YWcpOwor
fQorCit2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVm
IHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5n
TGVuZ3RoLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+
c3RyaW5nX3NwZWxsaW5nX2NoZWNrKQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT5z
dHJpbmdfc3BlbGxpbmdfY2hlY2sodGFnLCB0b0ltcGwodGV4dCktPnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICBlbHNl
CisgICAgICAgIHRleHRDaGVja2VyRW5jaGFudC0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRvSW1w
bCh0ZXh0KS0+c3RyaW5nKCksICptaXNzcGVsbGluZ0xvY2F0aW9uLCAqbWlzc3BlbGxpbmdMZW5n
dGgpOworfQorCit2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKHVpbnQ2NF90LCBXS1N0cmluZ1Jl
ZiwgV0tBcnJheVJlZiosIGludDMyX3QqLCBpbnQzMl90KiwgY29uc3Qgdm9pZCopCit7CisgICAg
Ly8gRklYTUU6IGNhbGwgY2xpZW50J3MgZnVuY3Rpb24uCisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqKQoreworICAgIGlmIChl
d2tUZXh0Q2hlY2tlckNhbGxiYWNrLT51aV9zcGVsbGluZ19zdGF0dXNfZ2V0KQorICAgICAgICBy
ZXR1cm4gZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+dWlfc3BlbGxpbmdfc3RhdHVzX2dldCgpOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmco
Y29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnVpX3NwZWxs
aW5nX3N0YXR1c190b2dnbGUpCisgICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnVpX3Nw
ZWxsaW5nX3N0YXR1c190b2dnbGUoKTsKK30KKwordm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgbWlzc3BlbGxlZFdvcmQsIGNv
bnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT51aV9zcGVsbGlu
Z19taXNzcGVsbGVkX3dvcmRfdXBkYXRlKQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNr
LT51aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRlKHRhZywgdG9JbXBsKG1pc3NwZWxs
ZWRXb3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgdXBkYXRlU3BlbGxp
bmdVSVdpdGhHcmFtbWFyU3RyaW5nKHVpbnQ2NF90LCBXS1N0cmluZ1JlZiwgV0tHcmFtbWFyRGV0
YWlsUmVmLCBjb25zdCB2b2lkKikKK3sKKyAgICAvLyBGSVhNRTogY2FsbCBjbGllbnQncyBmdW5j
dGlvbi4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitXS0FycmF5UmVmIGd1ZXNzZXNGb3JX
b3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAg
V0tNdXRhYmxlQXJyYXlSZWYgc3VnZ2VzdGlvbnNGb3JXb3JkID0gV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKTsKKworICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT53b3JkX2d1ZXNzZXNfZ2V0
KSB7CisgICAgICAgIEVpbmFfTGlzdCogbGlzdCA9IGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPndv
cmRfZ3Vlc3Nlc19nZXQodGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICB2b2lkKiBpdGVtOworCisgICAgICAgIEVJTkFfTElTVF9GUkVFKGxpc3QsIGl0
ZW0pIHsKKyAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0YXRpY19jYXN0PGNoYXIqPihp
dGVtKSkpOworICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNGb3JXb3Jk
LCBzdWdnZXN0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIGZyZWUoaXRlbSk7CisgICAgICAgIH0K
KworICAgIH0gZWxzZSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXMgPSB0ZXh0Q2hl
Y2tlckVuY2hhbnQtPmdldEd1ZXNzZXNGb3JXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOwor
ICAgICAgICBzaXplX3QgbnVtYmVyT2ZHdWVzc2VzID0gZ3Vlc3Nlcy5zaXplKCk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZHdWVzc2VzOyArK2kpIHsKKyAgICAgICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKGd1ZXNzZXNbaV0udXRmOCgpLmRhdGEoKSkpOworICAgICAg
ICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9uLmdl
dCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdWdnZXN0aW9uc0ZvcldvcmQ7
Cit9CisKK3ZvaWQgbGVhcm5Xb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29u
c3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPndvcmRfbGVhcm4p
CisgICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPndvcmRfbGVhcm4odGFnLCB0b0ltcGwo
d29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgdGV4dENo
ZWNrZXJFbmNoYW50LT5sZWFybldvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKK3Zv
aWQgaWdub3JlV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQq
KQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT53b3JkX2lnbm9yZSkKKyAgICAg
ICAgZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+d29yZF9pZ25vcmUodGFnLCB0b0ltcGwod29yZCkt
PnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgdGV4dENoZWNrZXJF
bmNoYW50LT5pZ25vcmVXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworfQorCitWZWN0b3I8
U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKK3sKKyAgICByZXR1cm4g
dGV4dENoZWNrZXJFbmNoYW50LT5hdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9
CisKK3ZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgbGFuZ3VhZ2VzKQoreworICAgIHRleHRDaGVja2VyRW5jaGFudC0+dXBkYXRlU3BlbGxDaGVj
a2luZ0xhbmd1YWdlcyhsYW5ndWFnZXMpOworfQorCitWZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKCkKK3sKKyAgICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50LT5s
b2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hYTFkMDFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaApAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRUZXh0Q2hlY2tlcl9oCisjZGVmaW5lIFdlYktpdFRleHRDaGVj
a2VyX2gKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5jbHVkZSAiVGV4dENoZWNrZXJF
bmNoYW50LmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLUGFnZS5oIgorI2lu
Y2x1ZGUgIldLU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBUaGUgZnVuY3Rp
b25zIG1haW5seSBjaG9vc2VzIGJldHdlZW4gY2xpZW50J3MgaW1wbGVtZW50YXRpb24gb2Ygc3Bl
bGxpbmcgYW5kIHRoZSBXZWJLaXQgb25lLgorCisvLyBDYWxsYmFja3MgcmVxdWlyZWQgYnkgV0tU
ZXh0Q2hlY2tlci4KK2Jvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7Citib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK2Jvb2wgaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBzZXRH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5m
byk7CisKK3VpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVp
bnQ2NF90IHRhZywgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK3ZvaWQgY2hlY2tTcGVsbGlu
Z09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOwordm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIHRleHQsIFdLQXJyYXlSZWYqIGdyYW1tYXJEZXRhaWxzLCBpbnQzMl90KiBiYWRHcmFt
bWFyTG9jYXRpb24sIGludDMyX3QqIGJhZEdyYW1tYXJMZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pOworCitib29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoY29uc3Qgdm9pZCogY2xpZW50SW5m
byk7Cit2b2lkIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoY29uc3Qgdm9pZCogY2xpZW50SW5m
byk7Cit2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQodWludDY0X3QgdGFn
LCBXS1N0cmluZ1JlZiBtaXNzcGVsbGVkV29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2
b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIGJhZEdyYW1tYXJQaHJhc2UsIFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWls
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKworV0tBcnJheVJlZiBndWVzc2VzRm9yV29yZCh1
aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwor
dm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKK3ZvaWQgaWdub3JlV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVm
IHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCisvLyBFbmNoYW50J3MgaGVscGVyLgor
VmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwordm9pZCB1
cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFn
ZXMpOworVmVjdG9yPFN0cmluZz4gbG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorI2Vu
ZGlmIC8vIFdlYktpdFRleHRDaGVja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCBlMjNmNmIwLi4yMzVlNGExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0z
Niw2ICszNiwxMCBAQAogI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRl
LmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgiCisjZW5kaWYKIAogdXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKIApAQCAtOTgsNiArMTAyLDEyIEBAIHN0cnVjdCBfRXdrX0Nv
bnRleHQgewogI2VuZGlmCiAgICAgICAgIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGll
bnRfYXR0YWNoKHRoaXMpOwogICAgICAgICBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfYXR0
YWNoKHRoaXMpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgICAgICBld2tfdGV4dF9jaGVj
a2VyX2NsaWVudF9hdHRhY2goKTsKKyAgICAgICAgaWYgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19nZXQoKSkKKyAgICAgICAgICAgIGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KDApOwor
I2VuZGlmCisKICAgICB9CiAKICAgICB+X0V3a19Db250ZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjNWVkMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCkBAIC0w
LDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2No
ZWNrZXIuaCIKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorI2luY2x1ZGUgIldLVGV4dENoZWNr
ZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgImV3a190ZXh0
X2NoZWNrZXJfcHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisvLyBJbml0
aWFsaXplcyBjbGllbnQncyBmdW5jdGlvbnMgdG8gQGMgMCB0byBiZSBzdXJlIHRoYXQgdGhleSBh
cmUgbm90IGRlZmluZWQuCitzdGF0aWMgRXdrX1RleHRfQ2hlY2tlciBld2tUZXh0Q2hlY2tlckNh
bGxiYWNrID0geworICAgIDAsIC8vIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0CisgICAg
MCwgLy8gdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZQorICAgIDAsIC8vIHN0cmluZ19z
cGVsbGluZ19jaGVjaworICAgIDAsIC8vIHVpX3NwZWxsaW5nX3N0YXR1c19nZXQKKyAgICAwLCAv
LyB1aV90b2dnbGVfc3BlbGxpbmdfc3RhdHVzX2dldAorICAgIDAsIC8vIHVpX3NwZWxsaW5nX21p
c3NwZWxsZWRfd29yZF91cGRhdGUKKyAgICAwLCAvLyB3b3JkX2d1ZXNzZXNfZ2V0CisgICAgMCwg
Ly8gd29yZF9sZWFybgorICAgIDAgLy8gd29yZF9pZ25vcmUKK307CisKKyNkZWZpbmUgRVdLX1RF
WFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBOQU1FKSAgXAordm9pZCBld2tfdGV4
dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUgY2IpICAgICBcCit7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBld2tU
ZXh0Q2hlY2tlckNhbGxiYWNrLk5BTUUgPSBjYjsgICAgICAgICAgICAgICAgICAgXAorfQorCisv
KioKKyAqIEF0dGFjaGVzIHNwZWxsY2hlY2tlciBmZWF0dXJlLgorICoKKyAqIEBpbnRlcm5hbAor
ICoKKyAqIFRoZSBkZWZhdWx0IHNwZWxsY2hlY2tlciBmZWF0dXJlIGlzIGJhc2VkIG9uIEVuY2hh
bnQgbGlicmFyeS4KKyAqIENsaWVudCBtYXkgdXNlIG93biBpbXBsZW1lbnRhdGlvbiBvZiBzcGVs
bGNoZWNrZXIgcHJldmlvdXNseSBzZXQKKyAqIHRocm91Z2ggdGhlIGNhbGxiYWNrIGZ1bmN0aW9u
cy4KKyAqLwordm9pZCBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9hdHRhY2goKQoreworICAgIHN0
YXRpYyBib29sIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IGZhbHNlOworICAgIGlm
IChkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IFdLVGV4dENoZWNrZXJDbGllbnQgdGV4dENoZWNrZXJDbGllbnQgPSB7CisgICAgICAgIGtXS1Rl
eHRDaGVja2VyQ2xpZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIDAsIC8vIGNsaWVudEluZm8K
KyAgICAgICAgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQsCisgICAgICAgIGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBzZXRDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQsCisgICAgICAgIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCwKKyAgICAg
ICAgc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCwKKyAgICAgICAgdW5pcXVlU3BlbGxEb2N1bWVu
dFRhZywKKyAgICAgICAgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZywKKyAgICAgICAgY2hlY2tT
cGVsbGluZ09mU3RyaW5nLAorICAgICAgICBjaGVja0dyYW1tYXJPZlN0cmluZywKKyAgICAgICAg
c3BlbGxpbmdVSUlzU2hvd2luZywKKyAgICAgICAgdG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZywK
KyAgICAgICAgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCwKKyAgICAgICAgdXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nLAorICAgICAgICBndWVzc2VzRm9yV29yZCwK
KyAgICAgICAgbGVhcm5Xb3JkLAorICAgICAgICBpZ25vcmVXb3JkCisgICAgfTsKKyAgICBXS1Rl
eHRDaGVja2VyU2V0Q2xpZW50KCZ0ZXh0Q2hlY2tlckNsaWVudCk7CisKKyAgICBkaWRJbml0aWFs
aXplVGV4dENoZWNrZXJDbGllbnQgPSB0cnVlOworfQorCisvKgorICogR2V0cyB0byB0aGUgY2xp
ZW50J3MgY2FsbGJhY2tzLgorICoKKyAqIEBpbnRlcm5hbAorICoKKyAqIFRoZSBjbGllbnQndCBj
YWxsYmFja3MgYXJlIG5vdCBkZWZpbmVkIGJ5IGRlZmF1bHQuCisgKiBJZiB0aGUgY2xpZW50IGhh
c24ndCBzZXQgdGhlIGNhbGxiYWNrLCB0aGUgY29ycmVzcG9uZGluZyBjYWxsYmFjayB3aWxsCisg
KiByZXR1cm4gQGMgMCBhbmQgdGhlIGRlZmF1bHQgV2ViS2l0IGltcGxlbWVudGF0aW9uIHdpbGwg
YmUgdXNlZCBmb3IgdGhpcworICogZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBAcmV0dXJuIHRoZSBz
dHJ1Y3Qgd2l0aCB0aGUgY2xpZW50J3MgY2FsbGJhY2tzLgorICovCitFd2tfVGV4dF9DaGVja2Vy
KiBld2tUZXh0Q2hlY2tlcigpCit7CisgICAgcmV0dXJuICZld2tUZXh0Q2hlY2tlckNhbGxiYWNr
OworfQorCisjZWxzZQorCisvLyBEZWZpbmVzIGFuIGVtcHR5IEFQSSB0byBkbyBub3QgYnJlYWsg
YnVpbGQuCisjZGVmaW5lIEVXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwg
TkFNRSkgIFwKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl8jI05BTUUjI19jYl9zZXQoVFlQRV9OQU1F
KSAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCit9CisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisKK0VXS19URVhU
X0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3Vt
ZW50X1RhZ19HZXQsIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KQorRVdLX1RFWFRfQ0hF
Q0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRf
VGFnX0Nsb3NlLCB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQorRVdLX1RFWFRfQ0hF
Q0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2ss
IHN0cmluZ19zcGVsbGluZ19jaGVjaykKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3
a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX0dldCwgdWlfc3BlbGxpbmdfc3RhdHVz
X2dldCkKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVUlf
U3BlbGxpbmdfU3RhdHVzX1RvZ2dsZSwgdWlfc3BlbGxpbmdfc3RhdHVzX3RvZ2dsZSkKK0VXS19U
RVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlz
c3BlbGxlZF9Xb3JkX1VwZGF0ZSwgdWlfc3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZSkK
K0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVz
c2VzX0dldCwgd29yZF9ndWVzc2VzX2dldCkKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VU
KEV3a19UZXh0X0NoZWNrZXJfV29yZF9MZWFybiwgd29yZF9sZWFybikKK0VXS19URVhUX0NIRUNL
RVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmUsIHdvcmRfaWdub3Jl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRf
Y2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hl
Y2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYzI3N2MKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyLmgKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ft
c3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlIGV3a190ZXh0X2NoZWNr
ZXIuaAorICogQGJyaWVmIFByb3ZpZGVzIEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2Vi
S2l0IHNwZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGVyZSBpcyBvbmUgc3Bl
bGxjaGVja2VyIG9iamVjdCBwZXIgYXBwbGljYXRpb24gYW5kIGl0J3MgZGlzYWJsZWQgYnkgZGVm
YXVsdC4KKyAqIEl0IGFsbG93cyB0byBjaGVjayBzcGVsbGluZyBpbiB0aGUgZWRpdGFibGUgYXJl
YXMuCisgKiBJZiBhcHBsaWNhdGlvbiB3YW50cyB0byBlbmFibGUgdGhlIGZlYXR1cmUsIEFQSSBm
cm9tIEBhIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oCisgKiBzaG91bGQgYmUgdXNlZC4KKyAq
CisgKiBUaGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uIGlzIGJh
c2VkIG9uIHRoZSBFbmNoYW50IGxpYnJhcnkuCisgKiBJdCBkb2Vzbid0IGVuc3VyZSBncmFtbWFy
IGNoZWNraW5nLiBBcHBsaWNhdGlvbiBpcyBhYmxlIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdAor
ICogV2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlvbiBieSBkZWZpbmluZyBpdHMgb3du
IGltcGxlbWVudGF0aW9uIGFuZCBzZXR0aW5nCisgKiBhcHByb3ByaWF0ZSBjYWxsYmFjayBmdW5j
dGlvbnMuCisgKi8KKworI2lmbmRlZiBld2tfdGV4dF9jaGVja2VyX2gKKyNkZWZpbmUgZXdrX3Rl
eHRfY2hlY2tlcl9oCisKKyNpbmNsdWRlIDxFdmFzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0
aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmV0dXJuIGEgdGFnIChpZGVudGlmaWVyKSB3aGljaCBp
cyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZS4KKyAqCisgKiBVbmlxdWUgdGFncyBoZWxwIHRvIGF2
b2lkIGNvbGxpc2lvbnMgd2l0aCBvdGhlciBvYmplY3RzIHRoYXQgYXJlIGNoZWNrZWQgZm9yIHNw
ZWxsaW5nIG1pc3Rha2VzLgorICoKKyAqIEBwYXJhbSBvIHRoZSB2aWV3IG9iamVjdCB0byBnZXQg
dW5pcXVlIHRhZworICoKKyAqIEByZXR1cm4gdW5pcXVlIHRhZyBmb3IgdGhlIGdpdmVuIEBhIG8g
dmlldyBvYmplY3QKKyAqLwordHlwZWRlZiB1aW50NjRfdCAoKkV3a19UZXh0X0NoZWNrZXJfVW5p
cXVlX1NwZWxsX0RvY3VtZW50X1RhZ19HZXQpKGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKworLyoq
CisgKiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2xv
c2UgdGhlIHBydmlvdXNseSBzZXQgdGFnLgorICoKKyAqIFRoaXMgY2FsbGJhY2sgd2lsbCBub3Rp
ZnkgdGhlIHJlY2VpdmVyIHRoYXQgdGhlIHVzZXIgaGFzIGZpbmlzaGVkIHdpdGggdGhlIHRhZ2dl
ZCBkb2N1bWVudC4KKyAqCisgKiBAcGFyYW0gdGFnIHRoZSB0YWcgdG8gYmUgY2xvc2VkCisgKi8K
K3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1Rh
Z19DbG9zZSkodWludDY0X3QgdGFnKTsKKworLyoqCisgKiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZv
ciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2VhcmNoIGZvciBhIG1pc3NwZWxsZWQgd29yZHMg
aW4gdGhlIGdpdmVuIHN0cmluZy4KKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90
aWZ5IHRoZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRvY3VtZW50IHRoYXQgQGEgdGV4dCBpcyBhc3Nv
Y2lhdGVkLAorICogICAgICAgIGluIG1vc3QgY2FzZXMgbm90IG5lY2Vzc2FyaWx5LCBqdXN0IGZv
ciBpZ25vcmVkIHdvcmQsCisgKiAgICAgICAgQGMgMCBjYW4gYmUgcGFzc2VkIGluIGZvciB0ZXh0
IG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGRvY3VtZW50CisgKiBAcGFyYW0gdGV4
dCB0aGUgdGV4dCBjb250YWluaW5nIHRoZSB3b3JkcyB0byBzcGVsbGNoZWNrCisgKiBAcGFyYW0g
bWlzc3BlbGxpbmdfbG9jYXRpb24gYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBiZWdpbm5pbmcgb2Yg
dGhlIG1pc3NwZWxsZWQgQGEgdGV4dCwgQGMgLTEgaWYgdGhlIEBhIHRleHQgaXMgY29ycmVjdAor
ICogQHBhcmFtIG1pc3NwZWxsaW5nX2xlbmd0aCBhIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGxlbmd0
aCBvZiBtaXNzcGVsbGVkIEBhIHRleHQsIEBjIDAgaWYgdGhlIEBhIHRleHQgaXMgY29ycmVjdAor
ICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVj
aykodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp0ZXh0LCBpbnQzMl90ICptaXNzcGVsbGluZ19s
b2NhdGlvbiwgaW50MzJfdCAqbWlzc3BlbGxpbmdfbGVuZ3RoKTsKKworLyoqCisgKiBEZWZpbmVz
IGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzdGF0dXMg
b2YgVUkgU3BlbGxpbmcuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgdGhlIFVJIFNw
ZWxsaW5nIGlzIHNob3duLCBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgaGlkZGVuCisgKi8KK3R5cGVk
ZWYgRWluYV9Cb29sICgqRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfR2V0KSh2
b2lkKTsKKworLyoqCisgKiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVu
Y3Rpb24gdG8gdG9nZ2xlIHRoZSBVSSBTcGVsbGluZy4KKyAqLwordHlwZWRlZiB2b2lkICgqRXdr
X1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfVG9nZ2xlKSh2b2lkKTsKKworLyoqCisg
KiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdXBkYXRl
IHRoZSBVSSBTcGVsbGluZyBmb3IgdGhlIG1pc3NwZWxsZWQgd29yZC4KKyAqCisgKiBAcGFyYW0g
dGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRvY3VtZW50
IHRoYXQgdGhlIG1pc3NwZWxsZWQgd29yZCBpcyBhc3NvY2lhdGVkLAorICogQHBhcmFtIG1pc3Nw
ZWxsZWRfd29yZCB0aGUgbWlzc3BlbGxlZCB3b3JkCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19U
ZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3BlbGxlZF9Xb3JkX1VwZGF0ZSkodWludDY0X3Qg
dGFnLCBjb25zdCBjaGFyICptaXNzcGVsbGVkX3dvcmQpOworCisvKioKKyAqIERlZmluZXMgYSB0
eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgYSBsaXN0IG9mIHN1Z2dl
c3RlZCBzcGVsbGluZ3MgZm9yIGEgbWlzc3BlbGxlZCBAYSB3b3JkLgorICoKKyAqIEBwYXJhbSB0
YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIgd2hpY2ggZG9jdW1lbnQg
dGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAgICAgICAgQGMgMCBjYW4gYmUgcGFzc2Vk
IGZvciB0ZXh0IG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGRvY3VtZW50CisgKiBA
cGFyYW0gd29yZCB0aGUgd29yZCB0byBnZXQgZ3Vlc3NlcworICogQHJldHVybiBhIGxpc3Qgb2Yg
ZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cmluZ3MgKGFzIGNoYXIqKSBhbmQKKyAqICAgICAgICAg
Y2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZXN0cm95aW5nIHRoZW0uCisgKi8KK3R5cGVkZWYg
RWluYV9MaXN0ICooKkV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldCkodWludDY0X3Qg
dGFnLCBjb25zdCBjaGFyICp3b3JkKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rp
b24gdG8gYWRkIHRoZSB3b3JkIHRvIHRoZSBzcGVsbCBjaGVja2VyIGRpY3Rpb25hcnkuCisgKgor
ICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3aGlj
aCBkb2N1bWVudCB0aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBAYyAwIGNh
biBiZSBwYXNzZWQgZm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZG9j
dW1lbnQKKyAqIEBwYXJhbSB3b3JkIHRoZSB3b3JkIHRvIGFkZAorICovCit0eXBlZGVmIHZvaWQg
KCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm4pKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAq
d29yZCk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRlbGwgdGhlIHNw
ZWxsIGNoZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4gd29yZC4KKyAqCisgKiBAcGFyYW0gdGFnIHVu
aXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRvY3VtZW50IHRoYXQg
QGEgdGV4dCBpcyBhc3NvY2lhdGVkLAorICogICAgICAgIEBjIDAgY2FuIGJlIHBhc3NlZCBmb3Ig
dGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBkb2N1bWVudAorICogQHBhcmFt
IHdvcmQgdGhlIHdvcmQgdG8gaWdub3JlCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0No
ZWNrZXJfV29yZF9JZ25vcmUpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7CisKKy8q
KgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhIHVuaXF1ZSBzcGVsbCBkb2N1
bWVudCB0YWcuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBO
VUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9u
CisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90
YWdfZ2V0X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdf
R2V0IGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2xvc2UgYSB1
bmlxdWUgc3BlbGwgZG9jdW1lbnQgdGFnLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFj
ayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFj
ayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVf
c3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9T
cGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBm
dW5jdGlvbiB0byBzZWFyY2ggZm9yIGEgbWlzc3BlbGxlZCB3b3JkcyBpbiB0aGUgZ2l2ZW4gc3Ry
aW5nLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0
byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICov
CitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tfY2Jfc2V0
KEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrIGNiKTsKKworLyoqCisgKiBT
ZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzdGF0dXMgb2YgVUkgU3BlbGxpbmcu
CisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJl
c3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VB
UEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VpX3NwZWxsaW5nX3N0YXR1c19nZXRfY2Jfc2V0KEV3
a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX0dldCBjYik7CisKKy8qKgorICogU2V0
cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRvZ2dsZSB0aGUgVUkgU3BlbGxpbmcuCisgKgorICog
QHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhl
IGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBl
d2tfdGV4dF9jaGVja2VyX3VpX3NwZWxsaW5nX3N0YXR1c190b2dnbGVfY2Jfc2V0KEV3a19UZXh0
X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX1RvZ2dsZSBjYik7CisKKy8qKgorICogU2V0cyBh
IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgVUkgU3BlbGxpbmcgZm9yIHRoZSBtaXNz
cGVsbGVkIHdvcmQuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBA
YyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0
aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VpX3NwZWxsaW5nX21pc3NwZWxs
ZWRfd29yZF91cGRhdGVfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3Bl
bGxlZF9Xb3JkX1VwZGF0ZSBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9u
IHRvIGdldCBhbiBhcnJheSBvZiBzdWdnZXN0ZWQgc3BlbGxpbmdzIGZvciBhIG1pc3NwZWxsZWQg
d29yZC4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwg
dG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAq
LworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9jYl9zZXQoRXdr
X1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNfR2V0IGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2Fs
bGJhY2sgZnVuY3Rpb24gdG8gYWRkIHRoZSB3b3JkIHRvIHRoZSBzcGVsbCBjaGVja2VyIGRpY3Rp
b25hcnkuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxM
IHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisg
Ki8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KEV3a19UZXh0
X0NoZWNrZXJfV29yZF9MZWFybiBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0
aW9uIHRvIHRlbGwgdGhlIHNwZWxsIGNoZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4gd29yZC4KKyAq
CisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9y
ZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2
b2lkIGV3a190ZXh0X2NoZWNrZXJfd29yZF9pZ25vcmVfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJf
V29yZF9JZ25vcmUgY2IpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlm
IC8vIGV3a190ZXh0X2NoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2JhMTcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgKQEAg
LTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlX2gKKyNkZWZp
bmUgZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlX2gKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQor
I2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXIuaCIKKworLyoqCisgKiBAYnJpZWYgU3RydWN0dXJl
IHRoYXQga2VlcHMgY2xpZW50J3MgY2FsbGJhY2sgZnVuY3Rpb25zLgorICoKKyAqIEBpbnRlcm5h
bAorICovCitzdHJ1Y3QgX0V3a19UZXh0X0NoZWNrZXIgeworICAgIEV3a19UZXh0X0NoZWNrZXJf
VW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19HZXQgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19n
ZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3Nl
IHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2U7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9T
dHJpbmdfU3BlbGxpbmdfQ2hlY2sgc3RyaW5nX3NwZWxsaW5nX2NoZWNrOworICAgIEV3a19UZXh0
X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX0dldCB1aV9zcGVsbGluZ19zdGF0dXNfZ2V0Owor
ICAgIEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX1RvZ2dsZSB1aV9zcGVsbGlu
Z19zdGF0dXNfdG9nZ2xlOworICAgIEV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfTWlzc3Bl
bGxlZF9Xb3JkX1VwZGF0ZSB1aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRlOworICAg
IEV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldCB3b3JkX2d1ZXNzZXNfZ2V0OworICAg
IEV3a19UZXh0X0NoZWNrZXJfV29yZF9MZWFybiB3b3JkX2xlYXJuOworICAgIEV3a19UZXh0X0No
ZWNrZXJfV29yZF9JZ25vcmUgd29yZF9pZ25vcmU7Cit9OwordHlwZWRlZiBfRXdrX1RleHRfQ2hl
Y2tlciBFd2tfVGV4dF9DaGVja2VyOworCitFd2tfVGV4dF9DaGVja2VyKiBld2tUZXh0Q2hlY2tl
cigpOworCisvLyBNYWtlcyBpdCB2aXNpYmxlIGZvciBXVFIuCitFQVBJIHZvaWQgZXdrX3RleHRf
Y2hlY2tlcl9jbGllbnRfYXR0YWNoKCk7CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykK
KyNlbmRpZiAvLyBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Zy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkZGNlNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXJfc2V0dGluZy5jcHAKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgiCisKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4
dENoZWNrZXIuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CisKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGJvb2wgZW5hYmxlQ29udGludW91c1NwZWxsQ2hlY2tp
bmcgOiAxOworICAgIGJvb2wgZW5hYmxlR3JhbW1hckNoZWNraW5nIDogMTsKKyAgICBzdHJ1Y3Qg
eworICAgICAgICBFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdfQ29udGludW91c19TcGVsbF9DaGVj
a2luZ19DaGFuZ2VkIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZDsKKyAgICAgICAgRXdr
X1RleHRfQ2hlY2tlcl9TZXR0aW5nX0dyYW1tYXJfQ2hlY2tpbmdfQ2hhbmdlZCBncmFtbWFyQ2hl
Y2tpbmdDaGFuZ2VkOworICAgIH0gc2V0dGluZ0NoYW5nZWRDYWxsYmFja3M7CisgICAgVmVjdG9y
PFN0cmluZz4gc3BlbGxDaGVja2luZ0xhbmd1YWdlczsKK30gZXdrVGV4dENoZWNrZXJTZXR0aW5n
ID0geyBmYWxzZSwgZmFsc2UsIHswLCAwfSwgVmVjdG9yPFN0cmluZz4oKX07CisKK3N0YXRpYyBF
aW5hX0Jvb2wgaWRsZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQodm9pZCopCit7Cisg
ICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5jb250
aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQpCisgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGlu
Zy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQo
CisgICAgICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlQ29udGludW91c1NwZWxs
Q2hlY2tpbmcpOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKworc3Rh
dGljIEVpbmFfQm9vbCBpZGxlckdyYW1tYXJDaGVja2luZ0NoYW5nZWQodm9pZCopCit7CisgICAg
aWYgKGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5ncmFtbWFy
Q2hlY2tpbmdDaGFuZ2VkKQorICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGluZ0No
YW5nZWRDYWxsYmFja3MuZ3JhbW1hckNoZWNraW5nQ2hhbmdlZCgKKyAgICAgICAgICAgIGV3a1Rl
eHRDaGVja2VyU2V0dGluZy5lbmFibGVHcmFtbWFyQ2hlY2tpbmcpOworCisgICAgcmV0dXJuIEVD
T1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBpZGxlclNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXNTZXQodm9pZCopCit7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIHRvIGRl
bGVnYXRlIGNhbGxpbmcgb2YgdGhpcyBtZXRob2QgaW4gV2ViUHJvY2VzcyB0byBkbyBub3QgZGVs
YXkvYmxvY2sgVUlQcm9jZXNzLgorICAgIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoZXdr
VGV4dENoZWNrZXJTZXR0aW5nLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOworICAgIHJldHVybiBF
Q09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisKK3N0YXRpYyB2b2lkIHNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXNTZXQoY29uc3QgVmVjdG9yPFN0cmluZz4mIG5ld0xhbmd1YWdlcykKK3sKKyAgICBld2tU
ZXh0Q2hlY2tlclNldHRpbmcuc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IG5ld0xhbmd1YWdlczsK
KyAgICBlY29yZV9pZGxlcl9hZGQoaWRsZXJTcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0LCAwKTsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKwordm9pZCBld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4
dF9DaGVja2VyX1NldHRpbmdfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VkIGNhbGxi
YWNrKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGV3a1RleHRDaGVja2VyU2V0dGlu
Zy5zZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQg
PSBjYWxsYmFjazsKKyNlbmRpZgorfQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19n
cmFtbWFyX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19H
cmFtbWFyX0NoZWNraW5nX0NoYW5nZWQgY2FsbGJhY2spCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hF
Q0spCisgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmdy
YW1tYXJDaGVja2luZ0NoYW5nZWQgPSBjYWxsYmFjazsKKyNlbmRpZgorfQorCitFaW5hX0Jvb2wg
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2dldCgpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIGV3a1RleHRDaGVj
a2VyU2V0dGluZy5lbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZzsKKyNlbHNlCisgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2Vu
YWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldChFaW5hX0Jvb2wgZW5hYmxlKQorewor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGVuYWJsZSA9ICEhZW5hYmxlOworICAgIGlmIChl
d2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlQ29udGludW91c1NwZWxsQ2hlY2tpbmcgIT0gZW5h
YmxlKSB7CisgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVDb250aW51b3VzU3Bl
bGxDaGVja2luZyA9IGVuYWJsZTsKKworICAgICAgICBXS1RleHRDaGVja2VyQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZSk7CisKKyAgICAgICAgLy8gU2V0
cyBkZWZhdWx0IGxhbmd1YWdlIGlmIHVzZXIgZGlkbid0IHNwZWNpZnkgYW55LgorICAgICAgICBp
ZiAoZW5hYmxlICYmIGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KFZlY3RvcjxTdHJpbmc+KCkpOwor
CisgICAgICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFj
a3MuY29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VkKQorICAgICAgICAgICAgZWNvcmVfaWRs
ZXJfYWRkKGlkbGVyQ29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VkLCAwKTsKKyAgICB9Cisj
ZW5kaWYKK30KKworRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3Jh
bW1hcl9jaGVja2luZ19nZXQoKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVy
biBld2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlR3JhbW1hckNoZWNraW5nOworI2Vsc2UKKyAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRp
bmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KEVpbmFfQm9vbCBlbmFibGUpCit7CisjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgZW5hYmxlID0gISFlbmFibGU7CisgICAgaWYgKGV3a1Rl
eHRDaGVja2VyU2V0dGluZy5lbmFibGVHcmFtbWFyQ2hlY2tpbmcgIT0gZW5hYmxlKSB7CisgICAg
ICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5lbmFibGVHcmFtbWFyQ2hlY2tpbmcgPSBlbmFibGU7
CisKKyAgICAgICAgV0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5n
ZWQoZW5hYmxlKTsKKworICAgICAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNldHRpbmdD
aGFuZ2VkQ2FsbGJhY2tzLmdyYW1tYXJDaGVja2luZ0NoYW5nZWQpCisgICAgICAgICAgICBlY29y
ZV9pZGxlcl9hZGQoaWRsZXJHcmFtbWFyQ2hlY2tpbmdDaGFuZ2VkLCAwKTsKKyAgICB9CisjZW5k
aWYKK30KKworRWluYV9MaXN0KiBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfYXZhaWxhYmxlX3Nw
ZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKQoreworICAgIEVpbmFfTGlzdCogbGlzdE9mbGFu
Z3VhZ2VzID0gMDsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5nPiBs
YW5ndWFnZXMgPSBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7CisgICAgc2l6ZV90
IG51bWJlck9mTGFudWFnZXMgPSBsYW5ndWFnZXMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkxhbnVhZ2VzOyArK2kpCisgICAgICAgIGxpc3RPZmxhbmd1YWdl
cyA9IGVpbmFfbGlzdF9hcHBlbmQobGlzdE9mbGFuZ3VhZ2VzLCBzdHJkdXAobGFuZ3VhZ2VzW2ld
LnV0ZjgoKS5kYXRhKCkpKTsKKworI2VuZGlmCisgICAgcmV0dXJuIGxpc3RPZmxhbmd1YWdlczsK
K30KKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzX3NldChjb25zdCBjaGFyKiBsYW5ndWFnZXMpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CisgICAgVmVjdG9yPFN0cmluZz4gbmV3TGFuZ3VhZ2VzOworICAgIFN0cmluZzo6ZnJvbVVURjgo
bGFuZ3VhZ2VzKS5zcGxpdCgnLCcsIG5ld0xhbmd1YWdlcyk7CisKKyAgICBzcGVsbENoZWNraW5n
TGFuZ3VhZ2VzU2V0KG5ld0xhbmd1YWdlcyk7CisjZW5kaWYKK30KKworRWluYV9MaXN0KiBld2tf
dGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpCit7Cisg
ICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMgPSAwOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcyA9IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZMYW51YWdlcyA9IGxhbmd1YWdlcy5zaXplKCk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mTGFudWFnZXM7ICsraSkKKyAg
ICAgICAgbGlzdE9mbGFuZ3VhZ2VzID0gZWluYV9saXN0X2FwcGVuZChsaXN0T2ZsYW5ndWFnZXMs
IHN0cmR1cChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOworCisjZW5kaWYKKyAgICByZXR1
cm4gbGlzdE9mbGFuZ3VhZ2VzOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWQxNGE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgKQEAg
LTAsMCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJv
bmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5o
CisgKiBAYnJpZWYgQVBJIGZvciBtYW5pcHVsYXRpbmcgc3BlbGwgY2hlY2tlciBmZWF0dXJlLgor
ICovCisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2gKKyNkZWZpbmUgZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nX2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3Bs
dXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIENyZWF0ZXMgYSB0eXBlIG5h
bWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdo
ZW4KKyAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQg
YnkgV2ViS2l0LgorICoKKyAqIEBwYXJhbSBAYyBFSU5BX1RSVUUgaWYgY29udGludW91cyBzcGVs
bCBjaGVja2luZyBpcyBlbmFibGVkIG9yIEAgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisg
Ki8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19Db250aW51b3VzX1Nw
ZWxsX0NoZWNraW5nX0NoYW5nZWQpKEVpbmFfQm9vbCBlbmFibGUpOworCisvKioKKyAqIFNldHMg
YSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4KKyAqIHRo
ZSBncmFtbWFyIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0LgorICoKKyAq
IEBwYXJhbSBAYyBFSU5BX1RSVUUgaWYgZ3JhbW1hciBjaGVja2luZyBpcyBlbmFibGVkIG9yIEAg
RUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0
X0NoZWNrZXJfU2V0dGluZ19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQpKEVpbmFfQm9vbCBlbmFi
bGUpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0
aGUgY2xpZW50IHdoZW4KKyAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNldHRpbmcg
d2FzIGNoYW5nZWQgYnkgV2ViS2l0LgorICoKKyAqIFNwZWNpZnlpbmcgb2YgdGhpcyBjYWxsYmFj
ayBpcyBuZWVkZWQgaWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHJlY2VpdmUgbm90aWZpY2F0
aW9ucworICogb25jZSBXZWJLaXQgY2hhbmdlcyB0aGlzIHNldHRpbmcuCisgKiBJZiB0aGUgYXBw
bGljYXRpb24gaXMgbm90IGludGVyZXN0ZWQsIHRoaXMgY2FsbGJhY2sgaXMgbm90IHNldC4KKyAq
IENoYW5naW5nIG9mIHRoaXMgc2V0dGluZyBhdCB0aGUgV2ViS2l0IGxldmVsIGNhbiBiZSBtYWRl
IGFzIGEgcmVzdWx0IG9mIG1vZGlmeWluZworICogb3B0aW9ucyBpbiBhIENvbnRleHQgTWVudSBi
eSBhIHVzZXIuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNl
dCBvciBAYyBOVUxMIHRvIGludmFsaWRhdGUgdGhlIHByZXZpb3VzIG9uZQorICovCitFQVBJIHZv
aWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hh
bmdlZF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0NvbnRpbnVvdXNfU3BlbGxfQ2hl
Y2tpbmdfQ2hhbmdlZCBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHVz
ZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhlIGdyYW1tYXIgY2hlY2tpbmcgc2V0
dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogU3BlY2lmeWluZyBvZiB0aGlzIGNh
bGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3Rp
ZmljYXRpb25zCisgKiBvbmNlIFdlYktpdCBjaGFuZ2VzIHRoaXMgc2V0dGluZy4KKyAqIElmIHRo
ZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0
LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJl
IG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBN
ZW51IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24g
dG8gc2V0IG9yIEBjIE5VTEwgdG8gaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMgb25lCisgKi8KK0VB
UEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZ3JhbW1hcl9jaGVja2luZ19jaGFuZ2Vk
X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdfR3JhbW1hcl9DaGVja2luZ19DaGFuZ2Vk
IGNiKTsKKworLyoqCisgKiBRdWVyaWVzIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMg
ZW5hYmxlZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxs
IGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisg
Ki8KK0VBUEkgRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19nZXQodm9pZCk7CisKKy8qKgorICogRW5hYmxlcy9kaXNhYmxl
cyBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nLgorICoKKyAqIEFkZGl0aW9uYWxseSwgdGhpcyBm
dW5jdGlvbiBjYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIChpZiBkZWZpbmVkKSB0byBub3RpZnkK
KyAqIHRoZSBjbGllbnQgYWJvdXQgdGhlIGNoYW5nZSBvZiB0aGUgc2V0dGluZy4KKyAqIFRoaXMg
ZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICoKKyAqIEBzZWUgZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5nX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQKKyAq
CisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSB0byBlbmFibGUgY29udGludW91cyBzcGVs
bCBjaGVja2luZyBvciBAYyBFSU5BX0ZBTFNFIHRvIGRpc2FibGUKKyAqLworRUFQSSB2b2lkIGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19z
ZXQoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogUXVlcmllcyBpZiBncmFtbWFyIGNoZWNr
aW5nIGlzIGVuYWJsZWQuCisgKgorICogQXBwbGljYXRpb24gbWF5IG92ZXJ3cml0ZSB3ZWJraXQg
Z3JhbW1hciBjaGVja2luZyBpbXBsZW1lbnRhdGlvbiBieSBzZXR0aW5nIGNhbGxiYWNrIGZ1bmN0
aW9ucworICogQHNlZSBld2tfdGV4dF9jaGVja2VyLmgKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBpZiBncmFtbWFyIGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBp
dCdzIGRpc2FibGVkCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z19lbmFibGVfZ3JhbW1hcl9jaGVja2luZ19nZXQodm9pZCk7CisKKy8qKgorICogRW5hYmxlcy9k
aXNhYmxlcyBncmFtbWFyIGNoZWNraW5nLgorICoKKyAqIEFkZGl0aW9uYWxseSwgdGhpcyBmdW5j
dGlvbiBjYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIChpZiBkZWZpbmVkKSB0byBub3RpZnkKKyAq
IHRoZSBjbGllbnQgYWJvdXQgdGhlIGNoYW5nZSBvZiB0aGUgc2V0dGluZy4KKyAqIFRoaXMgZmVh
dHVyZSBpcyBkaXNhYmxlZCBhbmQgaXMgbm90IHN1cHBvcnRlZCBieSBXZWJLaXQtRUZMIGJ5IGRl
ZmF1bHQuCisgKgorICogQHNlZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZ3JhbW1hcl9jaGVj
a2luZ19jaGFuZ2VkX2NiX3NldAorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRv
IGVuYWJsZSBncmFtbWFyIGNoZWNraW5nIG9yIEBjIEVJTkFfRkFMU0UgdG8gZGlzYWJsZQorICov
CitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNr
aW5nX3NldChFaW5hX0Jvb2wgZW5hYmxlKTsKKworLyoKKyAqIEdldHMgdGhlIHRoZSBsaXN0IG9m
IGFsbCBpbnN0YWxsZWQgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzLgorICoKKyAqIEBzZWUgZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQKKyAqCisg
KiBAcmV0dXJuIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMg
KGl0ZW0gdHlwZSBpcyBjaGFyICopIGluIHVzZSwKKyAqICAgICAgICAgdGhlIGxpc3QgYW5kIGl0
cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIgdXNlCisgKi8KK0VBUEkgRWluYV9MaXN0ICpl
d2tfdGV4dF9jaGVja2VyX3NldHRpbmdfYXZhaWxhYmxlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
c19nZXQodm9pZCk7CisKKy8qCisgKiBHZXRzIHRoZSB0aGUgbGlzdCBvZiBhbGwgaW5zdGFsbGVk
IHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcy4KKyAqCisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXJf
c2V0dGluZ19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0CisgKgorICogQHJldHVybiB0aGUg
bGlzdCBvZiBhdmFpbGFibGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIChpdGVtIHR5cGUgaXMg
Y2hhciAqKQorICogICAgICAgICBpbiB1c2UsIHRoZSBsaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxk
IGJlIGZyZWVkIGFmdGVyIHVzZQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nX2F2YWlsYWJsZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KHZvaWQpOwor
CisvKioKKyAqIFNldHMgQGEgbGFuZ3VhZ2VzIGFzIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB0byB1
c2UgYnkgZGVmYXVsdCBXZWJLaXQKKyAqIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tlciBm
ZWF0dXJlIHdpdGggRW5jaGFudCBsaWJyYXJ5IHN1cHBvcnQuCisgKgorICogSWYgQGxhbmd1YWdl
cyBpcyBAYyBOVUxMLCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpcyB1c2VkLgorICogSWYgdGhlIGRl
ZmF1bHQgbGFuZ3VhZ2UgY2FuIG5vdCBiZSBkZXRlcm1pbmVkIHRoZW4gYW55IGF2YWlsYWJsZSBk
aWN0aW9uYXJ5IHdpbGwgYmUgdXNlZC4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGludmFs
aWRhdGVzIHRoZSBwcmV2aW91c2x5IHNldCBsYW5ndWFnZXMuCisgKiAgICAgICBUaGUgZGljdGlv
bmFyaWVzIGFyZSByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkuCisgKgorICogQHBhcmFtIGxhbmd1
YWdlcyBhIGxpc3Qgb2YgY29tbWEgKCcsJykgc2VwYXJhdGVkIGxhbmd1YWdlIGNvZGVzCisgKiAg
ICAgICAgb2YgdGhlIGZvcm0gJ2VuX1VTJywgaWUsIGxhbmd1YWdlX1ZBUklBTlQsIG1heSBiZSBA
YyBOVUxMLgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2No
ZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hhciAqbGFuZ3VhZ2VzKTsKKworLyoKKysgKiBH
ZXRzIHRoZSB0aGUgbGlzdCBvZiBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLgorKyAq
CisrICogQHNlZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzX3NldAorKyAqCisrICogQHJldHVybiB0aGUgbGlzdCBvZiBzcGVsbCBjaGVja2luZyBsYW5n
dWFnZXMgKGl0ZW0gdHlwZSBpcyBjaGFyICopIGluIHVzZSwKKysgKiAgICAgICAgIHRoZSBsaXN0
IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyIHVzZQorKyAqLworRUFQSSBFaW5h
X0xpc3QgKmV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNf
Z2V0KHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8g
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKaW5kZXggYWEzM2YyZi4uZWQ5MjFlZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKQEAgLTEsNSAr
MSw3IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJp
Z2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyOSw5IEBACiAjaW5j
bHVkZSAiVGV4dENoZWNrZXIuaCIKIAogI2luY2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CisjaW5jbHVkZSAiV2ViVGV4dENoZWNrZXIuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIApAQCAtMzcsOTEgKzQxLDE0NCBAQCBzdGF0aWMgVGV4dENoZWNrZXJTdGF0ZSB0
ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6
c3RhdGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CisgICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZVN0YXRlID0gZmFsc2U7CisgICAgaWYgKGRp
ZEluaXRpYWxpemVTdGF0ZSkKKyAgICAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CisKKyAg
ICBXZWJUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50ID0gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jbGllbnQoKTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkID0gY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAg
IHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gY2xpZW50LmdyYW1t
YXJDaGVja2luZ0VuYWJsZWQoKTsKKworICAgIGRpZEluaXRpYWxpemVTdGF0ZSA9IHRydWU7Cisj
ZW5kaWYKICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKIH0KIAogYm9vbCBUZXh0Q2hlY2tl
cjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIFdlYlRleHRDaGVja2Vy
OjpzaGFyZWQoKS0+Y2xpZW50KCkuY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7Cisj
ZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpz
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkKK3ZvaWQgVGV4dENoZWNrZXI6
OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQ
RUxMQ0hFQ0spCisgICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQgPT0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQg
PSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6
c2hhcmVkKCktPmNsaWVudCgpLnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hl
Y2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sKQordm9pZCBUZXh0Q2hlY2tlcjo6
c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGlm
IChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9PSBpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChpc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQpOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmNv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICB0ZXh0
Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsK
KyNlbmRpZgogfQogCiB2b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3Rh
dGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVO
QUJMRShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkID0gZW5hYmxlZDsKKyNlbmRpZgogfQogCi1pbnQ2NF90IFRleHRDaGVja2VyOjp1bmlx
dWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSopCitpbnQ2NF90IFRleHRDaGVja2VyOjp1
bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0Q2hl
Y2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7Cisj
ZWxzZQogICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNsb3Nl
U3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCkKK3ZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3Bl
bGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNs
aWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKKyNlbmRpZgogfQogCi12b2lk
IFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNoYXIq
LCB1aW50MzJfdCwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tT
cGVsbGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRl
eHQsIHVpbnQzMl90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJf
dCYgbWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFC
TEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNo
ZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3Ro
KSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworI2VuZGlmCiB9CiAK
LXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVD
aGFyKiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3Qm
LCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0
X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwg
VmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50MzJfdCYgYmFkR3JhbW1h
ckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJp
bmcodGV4dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFk
R3JhbW1hckxlbmd0aCk7CisjZW5kaWYKIH0KIAogYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxpbmdV
SUlzU2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zcGVs
bGluZ1VJSXNTaG93aW5nKCk7CisjZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQog
CiB2b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOworI2Vu
ZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxl
ZFdvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25z
dCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIG1p
c3NwZWxsZWRXb3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVs
bGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgR3Jh
bW1hckRldGFpbCYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1t
YXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1t
YXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhz
cGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKKyNlbmRp
ZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90LCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit2b2lkIFRleHRDaGVj
a2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0
cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nl
cykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAg
IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxE
b2N1bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tl
cjo6bGVhcm5Xb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjps
ZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFn
LCB3b3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0
X3QsIGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworI2VuZGlm
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0Zp
bmRFbmNoYW50LmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OWM3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UKQEAgLTAsMCArMSw0MyBAQAorIyAtIFRyeSB0
byBmaW5kIEVuY2hhbnQKKyMgT25jZSBkb25lLCB0aGlzIHdpbGwgZGVmaW5lCisjCisjICBFTkNI
QU5UX0lOQ0xVREVfRElSUyAtIHRoZSBFbmNoYW50IGluY2x1ZGUgZHJlY3RvcmllcworIyAgRU5D
SEFOVF9MSUJSQVJJRVMgLSBsaW5rIHRoZXNlIHRvIHVzZSBFbmNoYW50CisjCisjIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTCisjIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgSVRT
CisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworIyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwKKyMgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyMgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorIyBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworRklORF9QQUNLQUdFKFBr
Z0NvbmZpZykKK1BLR19DSEVDS19NT0RVTEVTKFBDX0VOQ0hBTlQgZW5jaGFudCkKKworRklORF9Q
QVRIKEVOQ0hBTlRfSU5DTFVERV9ESVJTCisgICAgTkFNRVMgZW5jaGFudC5oCisgICAgUEFUSFMg
JHtQQ19FTkNIQU5UX0lOQ0xVREVESVJ9CisgICAgICAgICAgJHtQQ19FTkNIQU5UX0lOQ0xVREVf
RElSU30KKykKKworRklORF9MSUJSQVJZKEVOQ0hBTlRfTElCUkFSSUVTCisgICAgTkFNRVMgZW5j
aGFudAorICAgIFBBVEhTICR7UENfRU5DSEFOVF9MSUJESVJ9CisgICAgICAgICAgJHtQQ19FTkNI
QU5UX0xJQlJBUllfRElSU30KKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZs
LmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggNTQ5MDU2YS4uZjFl
YmE4YSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIGIvU291
cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTE2OCwzICsxNjgsOCBAQCBJRiAoV1RGX1VT
RV9USUxFRF9CQUNLSU5HX1NUT1JFKQogICBGSU5EX1BBQ0tBR0UoT3BlbkdMIFJFUVVJUkVEKQog
RU5ESUYoKQogCitPUFRJT04oRU5BQkxFX1NQRUxMQ0hFQ0sgIkVuYWJsZSBzcGVsbGNoZWNraW5n
IGZlYXR1cmUgKHJlcXVpcmVzIGVuY2hhbnQpIiBPTikKK0lGIChFTkFCTEVfU1BFTExDSEVDSykK
KyAgICAgIEZJTkRfUEFDS0FHRShFbmNoYW50IFJFUVVJUkVEKQorICAgICAgQUREX0RFRklOSVRJ
T05TKC1ERU5BQkxFX1NQRUxMQ0hFQ0s9MSkKK0VORElGKCkK
</data>
<flag name="commit-queue"
          id="175472"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164090</attachid>
            <date>2012-09-14 03:29:59 -0700</date>
            <delta_ts>2012-09-24 07:08:14 -0700</delta_ts>
            <desc>apply Gyuyoung&apos;s comments</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>62343</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmM2FlNjkyLi45N2YzYmFh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDktMTMgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYXNtdW5nLmNvbT4KKworICAgICAgICBbV0syXVtFRkxd
IEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNwZWxsY2hlY2tpbmcgZmVh
dHVyZSBmb3IgV0syLUVmbC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kRW5jaGFudC5j
bWFrZTogQWRkZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2U6IERl
ZmluZSBTUEVMTENIRUNLIG1hY3JvLgorCiAyMDEyLTA5LTEzICBSYXBoYWVsIEt1Ym8gZGEgQ29z
dGEgIDxyYXBoYWVsLmt1Ym8uZGEuY29zdGFAaW50ZWwuY29tPgogCiAgICAgICAgIFtDTWFrZV0g
UmVtb3ZlIHNvbWUgcmVkdW5kYW50IHdhcm5pbmcgZmxhZ3MgYW5kIGVuYWJsZSBhIGZldyBtb3Jl
IHdhcm5pbmdzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGYyODE5MmEuLjJmM2JiOTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMyBAQAorMjAxMi0wOS0xMyAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtv
d3NraUBzYW1zdW5nLmNvbT4sIE1pY2hhbCBSb2ogPG0ucm9qQHNhbXN1bmcuY29tPgorCisgICAg
ICAgIFtXSzJdW0VGTF0gSW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2luZyBmZWF0dXJlLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE4NTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3Jt
RWZsLmNtYWtlOgorICAgICAgICBBZGQgZW5jaGFudC1yZWxhdGVkIGNvbXBpbGVyIGZsYWdzOiBo
ZWFkZXIgcGF0aHMgYW5kIHRoZSBsaWJyYXJ5IGZsYWcuCisKIDIwMTItMDktMTMgIEtldmluIEZ1
bmsgIDxrZXZpbi5mdW5rQGtkYWIuY29tPgogCiAgICAgICAgIE1ha2UgY29tcGlsZSB3aXRoIGJv
dGggT1MoV0lOQ0UpIGFuZCBQTEFURk9STShRVCkgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5j
bWFrZQppbmRleCA3MGQ2OGQ3Li40ZGU0ODk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpA
QCAtODIsNiArODIsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0v
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVgu
Y3BwCiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwu
Y3BwCisgIHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCiApCiAK
IElGIChFTkFCTEVfQkFUVEVSWV9TVEFUVVMpCkBAIC0zMjksMyArMzMwLDExIEBAIElGIChFTkFC
TEVfV0VCX0FVRElPKQogICBBRERfREVGSU5JVElPTlMoLURVTklOU1RBTExFRF9BVURJT19SRVNP
VVJDRVNfRElSPSIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9hdWRpby9yZXNvdXJjZXMiKQogRU5E
SUYgKCkKIAorSUYgKEVOQUJMRV9TUEVMTENIRUNLKQorICAgIExJU1QoQVBQRU5EIFdlYkNvcmVf
SU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAke0VOQ0hBTlRfSU5DTFVERV9ESVJTfQorICAg
ICkKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAke0VOQ0hBTlRf
TElCUkFSSUVTfQorICAgICkKK0VORElGKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBmMmFmZDAxLi42NDI2Yjgx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIxIEBACisyMDEyLTA5LTEzICBHcnplZ29yeiBDemFq
a293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFsIFJvaiA8bS5yb2pAc2Ft
c3VuZy5jb20+CisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2luZyBmZWF0
dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE4
NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
c3BlbGxpbmcgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDItRUZMIHRoYXQgaXMgYmFzZWQgb24g
RW5jaGFudCBsaWJyYXJ5LgorCisgICAgICAgIEFkZGl0aW9uYWxseSB0aGUgcGF0Y2ggcHJvdmlk
ZXMgQVBJIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxl
bWVudGF0aW9uCisgICAgICAgIGFzIEVuY2hhbnQgbGlicmFyeSBkb2Vzbid0IGVuc3VyZSBncmFt
bWFyIGNoZWNraW5nLgorICAgICAgICBBcHBsaWNhdGlvbiBpcyBhYmxlIHRvIG92ZXJ3cml0ZSBp
dCAoYm90aCBncmFtbWFyIGFuZCBzcGVsbCBjaGVja2luZykgYnkgZGVmaW5pbmcKKyAgICAgICAg
aXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZyBhcHByb3ByaWF0ZSBjYWxsYmFjayBm
dW5jdGlvbnMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgQWRkIGVu
Y2hhbnQtcmVsYXRlZCBjb21waWxlciBmbGFnczogaGVhZGVyIHBhdGhzIGFuZCB0aGUgbGlicmFy
eSBmbGFnLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaDoKKyAgICAg
ICAgQWRkIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgQVBJIHRvIHRoZSBtYWluIFdlYktpdDItRUZM
J3MgaGVhZGVyIHRvIGJlIGF2YWlsYWJsZSBmb3IgYXBwbGljYXRpb25zLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNhbGxiYWNrcyBmdW5jdGlvbnMgb2YgV0tUZXh0Q2hlY2tlci4KKworICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Fs
bG93ZWQpOgorICAgICAgICAoV2ViS2l0Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6
CisgICAgICAgIChXZWJLaXQ6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChX
ZWJLaXQ6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0Ojp1bmlx
dWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6Y2xvc2VTcGVsbERvY3VtZW50
V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6c3Bl
bGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OnRvZ2dsZVNwZWxsaW5nVUlJc1No
b3dpbmcpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRX
b3JkKToKKyAgICAgICAgKFdlYktpdDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KToKKyAgICAgICAgKFdlYktpdDo6Z3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0Ojps
ZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjppZ25vcmVXb3JkKToKKyAgICAgICAgVGhvc2Ug
bWV0aG9kcyBhcmUgZGlyZWN0bHkgZ2l2ZW4gYXMgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciBXS1Rl
eHRDaGVja2VyJ3MgY2xpZW50LgorICAgICAgICBUaGV5IGNob29zZSBiZXR3ZWVuIFdlYktpdCdz
IHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGFuZCBjbGllbnQncyBvbmVzLgorCisgICAgICAgIChX
ZWJLaXQ6OmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAoV2ViS2l0
Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6bG9hZGVk
U3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFRoZXkgYXJlIHVzZWQgYnkgZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nLmNwcCBmaWxlIGFuZCBhbGxvdyB0byBkbyBub3QKKyAgICAgICAg
ZXhwb3NlICdtX3RleHRDaGVja2VyRW5jaGFudCcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oOiBBZGRlZC4KKyAgICAgICAgRGVmaW5lIHRoZSBmdW5j
dGlvbnMgd2hpY2ggY2hvb3NlcyBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9uIG9mIHNw
ZWxsaW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KKworICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAgICAgIChfRXdrX0NvbnRl
eHQ6Ol9Fd2tfQ29udGV4dCk6CisgICAgICAgIEluaXRpYWxpemUgc3BlbGxjaGVja2VyIGZlYXR1
cmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcDog
QWRkZWQuCisgICAgICAgIChld2tUZXh0Q2hlY2tlcik6CisgICAgICAgIEdldCB0aGUgY2xpZW50
J3MgY2FsbGJhY2sgZnVuY3Rpb25zLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3RleHRfY2hlY2tlci5oOiBBZGRlZC4KKyAgICAgICAgRGVmaW5lIEFQSSB0byBzZXQgdGhlIGNs
aWVudCdzIG93biBzcGVsbGluZyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKF9F
d2tfVGV4dF9DaGVja2VyKToKKyAgICAgICAgRGVmaW5lIHN0cnVjdCB3aXRoIGNsaWVudCdzIGNh
bGxiYWNrcyByZXNwb25pc2JsZSBmb3Igc3BlbGxpbmcuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKGlk
bGVyR3JhbW1hckNoZWNraW5nQ2hhbmdlZCk6CisgICAgICAgIChpZGxlclNwZWxsQ2hlY2tpbmdM
YW5ndWFnZXNTZXQpOgorICAgICAgICBUaGUgYXBwbGljYXRpb24gaXMgbm90aWZpZWQgYWJvdXQg
c3BlbGxpbmcgc2V0dGluZ3MgY2hhbmdlICh0aGV5IG1heSBiZSBjaGFuZ2VkCisgICAgICAgIHRo
cm91Z2ggY29udGV4dCBtZW51IG9wdGlvbikgb24gaWRsZXIgdG8gZG8gbm90IGJsb2NrIFdlYktp
dC4KKworICAgICAgICAoc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldCk6CisgICAgICAgIFRoZSBk
aWN0aW9uYXJpZXMgYXJlIHJlcXVlc3RlZCBvbiBpZGxlciB0byBkbyBub3QgYmxvY2sgV2ViS2l0
LgorCisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfY29udGludW91c19zcGVsbF9j
aGVja2luZ19jaGFuZ2VkX2NiX3NldCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRp
bmdfZ3JhbW1hcl9jaGVja2luZ19jaGFuZ2VkX2NiX3NldCk6CisgICAgICAgIFNldCB0aGUgY2Fs
bGJhY2sgZnVuY3Rpb25zIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbiB0aGUgc3BlbGxp
bmcgc2V0dGluZ3MKKyAgICAgICAgd2VyZSBjaGFuZ2VkIGJ5IFdlYktpdC4KKworICAgICAgICAo
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2dldCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfc2V0KToKKyAgICAgICAgQVBJIHRvIHNldC9nZXQgdGhlIGNvbnRp
bnVvdXMgc3BlbGwgY2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z19lbmFibGVfZ3JhbW1hcl9jaGVja2luZ19nZXQpOgorICAgICAgICAoZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldCk6CisgICAgICAgIEFQSSB0byBz
ZXQvZ2V0IHRoZSBncmFtbWFyIGNoZWNraW5nLgorCisgICAgICAgIChld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdfYXZhaWxhYmxlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQpOgorICAgICAg
ICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQp
OgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlc19nZXQpOgorICAgICAgICBBUEkgdG8gc2V0L2dldCBsYW5ndWFnZXMgdG8gdXNlIGJ5IFdl
YktpdCBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBFbmNoYW50IGxpYnJhcnkuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaDogQWRkZWQuCisg
ICAgICAgIEFkZCBBUEkgZm9yIG1hbmlwdWxhdGluZyBzcGVsbCBjaGVja2VyIGZlYXR1cmUuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6
OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVuaXF1
ZVNwZWxsRG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2xvc2VT
cGVsbERvY3VtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVj
a1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcpOiBSZW1vdmUgV2ViQ29yZSBuYW1hc3BhY2UgYXMgaXQncyBhbHJlYWR5
IGRlZmluZWQgZm9yIHRoZSB3aG9sZSBmaWxlLgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6c3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp0
b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6
OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViS2l0OjpU
ZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXI6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2Vy
OjppZ25vcmVXb3JkKToKKyAgICAgICAgVGhvc2UgY2FsbCBXS1RleHRDaGVja2VyIGNsaWVudCBt
ZXRob2RzLgorCiAyMDEyLTA5LTEzICBLd2FuZ1lvbmcgQ2hvaSAgPGt5MC5jaG9pQHNhbXN1bmcu
Y29tPgogCiAgICAgICAgIFtXSzJdIEFkZCBjb2xvciBwaWNrZXIgQVBJIHN1cHBvcnQgZm9yIFdl
YktpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggOTQxOGQ5MS4uZTJlNmU5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTM5LDYgKzM5LDcgQEAgTElTVChBUFBFTkQgV2Vi
S2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvTmV0d29ya0luZm9Qcm92aWRlci5j
cHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKICAgICBVSVByb2Nl
c3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92aWRlci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9X
ZWJLaXRUZXh0Q2hlY2tlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3
YXJkX2xpc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC01Myw2
ICs1NCw4IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbi5jcHAKICAgICBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfcG9wdXBfbWVudV9pdGVtLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19z
ZXR0aW5ncy5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcAor
ICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3JlcXVlc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3VybF9yZXNwb25zZS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Nj
aGVtZV9yZXF1ZXN0LmNwcApAQCAtMTIwLDYgKzEyMyw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJf
SU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9lZmwiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvIgogICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL3RleHQvZW5jaGFudCIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3ZnL2dyYXBoaWNzIgogICAg
ICIke1dFQktJVDJfRElSfS9TaGFyZWQvZWZsIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQv
c291cCIKQEAgLTIyMiw2ICsyMjYsOCBAQCBTRVQgKEVXZWJLaXQyX0hFQURFUlMKICAgICAiJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9u
X3BvbGljeV9kZWNpc2lvbi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5oIgogICAgICIke0NNQUtFX0NVUlJF
TlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgiCisgICAgIiR7
Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVj
a2VyLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJD
RV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVxdWVzdC5oIgogICAgICIke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5o
IgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3VybF9zY2hlbWVfcmVxdWVzdC5oIgpAQCAtMzIwLDMgKzMyNiwxMiBAQCBJRiAoRU5BQkxFX0lO
U1BFQ1RPUikKICAgICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTiAiKi5naWYiCiAgICAgICAg
ICAgICAgICAgICAgICAgIFBBVFRFUk4gIioucG5nIikKIEVORElGICgpCisKK0lGIChFTkFCTEVf
U1BFTExDSEVDSykKKyAgICBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMK
KyAgICAgICAgJHtFTkNIQU5UX0lOQ0xVREVfRElSU30KKyAgICApCisgICAgTElTVChBUFBFTkQg
V2ViS2l0Ml9MSUJSQVJJRVMKKyAgICAgICAgJHtFTkNIQU5UX0xJQlJBUklFU30KKyAgICApCitF
TkRJRigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2Vi
S2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRl
eCA3NTBjYjQ4Li5kZTVmNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0VXZWJLaXQyLmgKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9w
b2xpY3lfZGVjaXNpb24uaCIKICNpbmNsdWRlICJld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAjaW5j
bHVkZSAiZXdrX3NldHRpbmdzLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgorI2lu
Y2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oIgogI2luY2x1ZGUgImV3a191cmxfcmVx
dWVzdC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKICNpbmNsdWRlICJld2tfdXJs
X3NjaGVtZV9yZXF1ZXN0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZWZkOGJhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApAQCAtMCwwICsxLDE4OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlci5oIgorCisjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLTXV0YWJsZUFycmF5LmgiCisjaW5jbHVkZSAi
V0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJT
dHJpbmcuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRl
ICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaCIKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3N0YXRpYyBPd25QdHI8V2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50
PiB0ZXh0Q2hlY2tlckVuY2hhbnQgPSBXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0
ZSgpOworc3RhdGljIEV3a19UZXh0X0NoZWNrZXIqIGV3a1RleHRDaGVja2VyQ2FsbGJhY2sgPSBl
d2tUZXh0Q2hlY2tlcigpOworCitib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2Vk
KGNvbnN0IHZvaWQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gVGhpcyBtZXRo
b2QgaXMgbm90IGNhbGxlZCBieSBXZWJLaXQyL1dlYkNvcmUuIEp1c3Qga2VlcCBpdCBmb3IgQVBJ
IGNvbXBhdGliaWxpdHkuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIGlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCk7
Cit9CisKK3ZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxl
ZCwgY29uc3Qgdm9pZCopCit7CisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldChlbmFibGVkKTsKK30KKworYm9vbCBpc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQoY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIGV3a190ZXh0X2No
ZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9jaGVja2luZ19nZXQoKTsKK30KKwordm9pZCBz
ZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCopCit7Cisg
ICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldChl
bmFibGVkKTsKK30KKwordWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYg
cGFnZSwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnVu
aXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KQorICAgICAgICByZXR1cm4gZXdrVGV4dENoZWNr
ZXJDYWxsYmFjay0+dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQodG9JbXBsKHBhZ2UpLT52
aWV3V2lkZ2V0KCkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgY2xvc2VTcGVsbERvY3Vt
ZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0
Q2hlY2tlckNhbGxiYWNrLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQorICAgICAg
ICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3Nl
KHRhZyk7Cit9CisKK3ZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tT
dHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlz
c3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlckNh
bGxiYWNrLT5zdHJpbmdfc3BlbGxpbmdfY2hlY2spCisgICAgICAgIGV3a1RleHRDaGVja2VyQ2Fs
bGJhY2stPnN0cmluZ19zcGVsbGluZ19jaGVjayh0YWcsIHRvSW1wbCh0ZXh0KS0+c3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwor
ICAgIGVsc2UKKyAgICAgICAgdGV4dENoZWNrZXJFbmNoYW50LT5jaGVja1NwZWxsaW5nT2ZTdHJp
bmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxsaW5nTG9jYXRpb24sICptaXNzcGVs
bGluZ0xlbmd0aCk7Cit9CisKK3ZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcodWludDY0X3QsIFdL
U3RyaW5nUmVmLCBXS0FycmF5UmVmKiwgaW50MzJfdCosIGludDMyX3QqLCBjb25zdCB2b2lkKikK
K3sKKyAgICAvLyBGSVhNRTogY2FsbCBjbGllbnQncyBmdW5jdGlvbi4KKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitib29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoY29uc3Qgdm9pZCopCit7Cisg
ICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnVpX3NwZWxsaW5nX3N0YXR1c19nZXQpCisg
ICAgICAgIHJldHVybiBld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT51aV9zcGVsbGluZ19zdGF0dXNf
Z2V0KCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgdG9nZ2xlU3BlbGxpbmdVSUlz
U2hvd2luZyhjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+
dWlfc3BlbGxpbmdfc3RhdHVzX3RvZ2dsZSkKKyAgICAgICAgZXdrVGV4dENoZWNrZXJDYWxsYmFj
ay0+dWlfc3BlbGxpbmdfc3RhdHVzX3RvZ2dsZSgpOworfQorCit2b2lkIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoTWlzc3BlbGxlZFdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiBtaXNzcGVsbGVk
V29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnVp
X3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGUpCisgICAgICAgIGV3a1RleHRDaGVja2Vy
Q2FsbGJhY2stPnVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGUodGFnLCB0b0ltcGwo
bWlzc3BlbGxlZFdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCB1cGRh
dGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3QsIFdLU3RyaW5nUmVmLCBXS0dy
YW1tYXJEZXRhaWxSZWYsIGNvbnN0IHZvaWQqKQoreworICAgIC8vIEZJWE1FOiBjYWxsIGNsaWVu
dCdzIGZ1bmN0aW9uLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1dLQXJyYXlSZWYgZ3Vl
c3Nlc0ZvcldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikK
K3sKKyAgICBXS011dGFibGVBcnJheVJlZiBzdWdnZXN0aW9uc0ZvcldvcmQgPSBXS011dGFibGVB
cnJheUNyZWF0ZSgpOworCisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPndvcmRfZ3Vl
c3Nlc19nZXQpIHsKKyAgICAgICAgRWluYV9MaXN0KiBsaXN0ID0gZXdrVGV4dENoZWNrZXJDYWxs
YmFjay0+d29yZF9ndWVzc2VzX2dldCh0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIHZvaWQqIGl0ZW07CisKKyAgICAgICAgRUlOQV9MSVNUX0ZSRUUo
bGlzdCwgaXRlbSkgeworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Z2dl
c3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RhdGljX2Nhc3Q8
Y2hhcio+KGl0ZW0pKSk7CisgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9u
c0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOworICAgICAgICAgICAgZnJlZShpdGVtKTsKKyAg
ICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9
IHRleHRDaGVja2VyRW5jaGFudC0+Z2V0R3Vlc3Nlc0ZvcldvcmQodG9JbXBsKHdvcmQpLT5zdHJp
bmcoKSk7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkd1ZXNzZXMgPSBndWVzc2VzLnNpemUoKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkd1ZXNzZXM7ICsraSkgewor
ICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ3Vlc3Nlc1tpXS51dGY4KCkuZGF0YSgpKSk7
CisgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dl
c3Rpb24uZ2V0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN1Z2dlc3Rpb25z
Rm9yV29yZDsKK30KKwordm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3
b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+d29y
ZF9sZWFybikKKyAgICAgICAgZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+d29yZF9sZWFybih0YWcs
IHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZWxzZQorICAgICAg
ICB0ZXh0Q2hlY2tlckVuY2hhbnQtPmxlYXJuV29yZCh0b0ltcGwod29yZCktPnN0cmluZygpKTsK
K30KKwordm9pZCBpZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29u
c3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPndvcmRfaWdub3Jl
KQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT53b3JkX2lnbm9yZSh0YWcsIHRvSW1w
bCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZWxzZQorICAgICAgICB0ZXh0
Q2hlY2tlckVuY2hhbnQtPmlnbm9yZVdvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9CisK
K1ZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQoreworICAg
IHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQtPmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMoKTsKK30KKwordm9pZCB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBsYW5ndWFnZXMpCit7CisgICAgdGV4dENoZWNrZXJFbmNoYW50LT51cGRhdGVT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IGxv
YWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQoreworICAgIHJldHVybiB0ZXh0Q2hlY2tlckVu
Y2hhbnQtPmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMWQwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmlj
cworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYktpdFRleHRDaGVja2VyX2gKKyNkZWZpbmUgV2ViS2l0
VGV4dENoZWNrZXJfaAorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJUZXh0
Q2hlY2tlckVuY2hhbnQuaCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tQYWdl
LmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRo
ZSBmdW5jdGlvbnMgbWFpbmx5IGNob29zZSBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9u
IG9mIHNwZWxsaW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KKworLy8gQ2FsbGJhY2tzIHJlcXVpcmVk
IGJ5IFdLVGV4dENoZWNrZXIuCitib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2Vk
KGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZChjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgc2V0Q29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Citi
b29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3Zv
aWQgc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworCit1aW50NjRfdCB1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdLUGFnZVJlZiBw
YWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0
aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCit2b2lkIGNoZWNr
U3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3Qq
IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcodWludDY0X3QgdGFn
LCBXS1N0cmluZ1JlZiB0ZXh0LCBXS0FycmF5UmVmKiBncmFtbWFyRGV0YWlscywgaW50MzJfdCog
YmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90KiBiYWRHcmFtbWFyTGVuZ3RoLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKworYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOwordm9pZCB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOwordm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHVpbnQ2
NF90IHRhZywgV0tTdHJpbmdSZWYgbWlzc3BlbGxlZFdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOwordm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3QgdGFn
LCBXS1N0cmluZ1JlZiBiYWRHcmFtbWFyUGhyYXNlLCBXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1h
ckRldGFpbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK1dLQXJyYXlSZWYgZ3Vlc3Nlc0Zv
cldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKK3ZvaWQgbGVhcm5Xb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0
cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKworLy8gRW5jaGFudCdzIGhl
bHBlci4KK1ZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsK
K3ZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYg
bGFuZ3VhZ2VzKTsKK1ZlY3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMo
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVD
SykKKyNlbmRpZiAvLyBXZWJLaXRUZXh0Q2hlY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggZTIzZjZiMC4uMjM1ZTRhMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNw
cApAQCAtMzYsNiArMzYsMTAgQEAKICNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iX3ByaXZhdGUu
aCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2lmIEVOQUJMRShTUEVMTENIRUNLKQorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJf
cHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oIgorI2VuZGlm
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKQEAgLTk4LDYgKzEwMiwxMiBAQCBzdHJ1Y3Qg
X0V3a19Db250ZXh0IHsKICNlbmRpZgogICAgICAgICBld2tfY29udGV4dF9yZXF1ZXN0X21hbmFn
ZXJfY2xpZW50X2F0dGFjaCh0aGlzKTsKICAgICAgICAgZXdrX2NvbnRleHRfZG93bmxvYWRfY2xp
ZW50X2F0dGFjaCh0aGlzKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICAgICAgZXdrX3Rl
eHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCk7CisgICAgICAgIGlmIChld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCkpCisgICAgICAg
ICAgICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3Nl
dCgwKTsKKyNlbmRpZgorCiAgICAgfQogCiAgICAgfl9Fd2tfQ29udGV4dCgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYzVlZDEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNw
cApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tf
dGV4dF9jaGVja2VyLmgiCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1Rl
eHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJl
d2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
Ly8gSW5pdGlhbGl6ZXMgY2xpZW50J3MgZnVuY3Rpb25zIHRvIEBjIDAgdG8gYmUgc3VyZSB0aGF0
IHRoZXkgYXJlIG5vdCBkZWZpbmVkLgorc3RhdGljIEV3a19UZXh0X0NoZWNrZXIgZXdrVGV4dENo
ZWNrZXJDYWxsYmFjayA9IHsKKyAgICAwLCAvLyB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dl
dAorICAgIDAsIC8vIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UKKyAgICAwLCAvLyBz
dHJpbmdfc3BlbGxpbmdfY2hlY2sKKyAgICAwLCAvLyB1aV9zcGVsbGluZ19zdGF0dXNfZ2V0Cisg
ICAgMCwgLy8gdWlfdG9nZ2xlX3NwZWxsaW5nX3N0YXR1c19nZXQKKyAgICAwLCAvLyB1aV9zcGVs
bGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRlCisgICAgMCwgLy8gd29yZF9ndWVzc2VzX2dldAor
ICAgIDAsIC8vIHdvcmRfbGVhcm4KKyAgICAwIC8vIHdvcmRfaWdub3JlCit9OworCisjZGVmaW5l
IEVXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwgTkFNRSkgIFwKK3ZvaWQg
ZXdrX3RleHRfY2hlY2tlcl8jI05BTUUjI19jYl9zZXQoVFlQRV9OQU1FIGNiKSAgICAgXAoreyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgZXdrVGV4dENoZWNrZXJDYWxsYmFjay5OQU1FID0gY2I7ICAgICAgICAgICAgICAgICAgIFwK
K30KKworLyoqCisgKiBBdHRhY2hlcyBzcGVsbGNoZWNrZXIgZmVhdHVyZS4KKyAqCisgKiBAaW50
ZXJuYWwKKyAqCisgKiBUaGUgZGVmYXVsdCBzcGVsbGNoZWNrZXIgZmVhdHVyZSBpcyBiYXNlZCBv
biBFbmNoYW50IGxpYnJhcnkuCisgKiBDbGllbnQgbWF5IHVzZSBvd24gaW1wbGVtZW50YXRpb24g
b2Ygc3BlbGxjaGVja2VyIHByZXZpb3VzbHkgc2V0CisgKiB0aHJvdWdoIHRoZSBjYWxsYmFjayBm
dW5jdGlvbnMuCisgKi8KK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCkKK3sK
KyAgICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQgPSBmYWxzZTsK
KyAgICBpZiAoZGlkSW5pdGlhbGl6ZVRleHRDaGVja2VyQ2xpZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBXS1RleHRDaGVja2VyQ2xpZW50IHRleHRDaGVja2VyQ2xpZW50ID0geworICAgICAg
ICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICAwLCAvLyBjbGll
bnRJbmZvCisgICAgICAgIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkLAorICAgICAg
ICBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCwKKyAgICAgICAgc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQs
CisgICAgICAgIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQsCisgICAgICAgIHVuaXF1ZVNwZWxs
RG9jdW1lbnRUYWcsCisgICAgICAgIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcsCisgICAgICAg
IGNoZWNrU3BlbGxpbmdPZlN0cmluZywKKyAgICAgICAgY2hlY2tHcmFtbWFyT2ZTdHJpbmcsCisg
ICAgICAgIHNwZWxsaW5nVUlJc1Nob3dpbmcsCisgICAgICAgIHRvZ2dsZVNwZWxsaW5nVUlJc1No
b3dpbmcsCisgICAgICAgIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQsCisgICAg
ICAgIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZywKKyAgICAgICAgZ3Vlc3Nlc0Zv
cldvcmQsCisgICAgICAgIGxlYXJuV29yZCwKKyAgICAgICAgaWdub3JlV29yZAorICAgIH07Cisg
ICAgV0tUZXh0Q2hlY2tlclNldENsaWVudCgmdGV4dENoZWNrZXJDbGllbnQpOworCisgICAgZGlk
SW5pdGlhbGl6ZVRleHRDaGVja2VyQ2xpZW50ID0gdHJ1ZTsKK30KKworLyoKKyAqIEdldHMgdG8g
dGhlIGNsaWVudCdzIGNhbGxiYWNrcy4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBUaGUgY2xp
ZW50J3QgY2FsbGJhY2tzIGFyZSBub3QgZGVmaW5lZCBieSBkZWZhdWx0LgorICogSWYgdGhlIGNs
aWVudCBoYXNuJ3Qgc2V0IHRoZSBjYWxsYmFjaywgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbGJhY2sg
d2lsbAorICogcmV0dXJuIEBjIDAgYW5kIHRoZSBkZWZhdWx0IFdlYktpdCBpbXBsZW1lbnRhdGlv
biB3aWxsIGJlIHVzZWQgZm9yIHRoaXMKKyAqIGZ1bmN0aW9uYWxpdHkuCisgKgorICogQHJldHVy
biB0aGUgc3RydWN0IHdpdGggdGhlIGNsaWVudCdzIGNhbGxiYWNrcy4KKyAqLworRXdrX1RleHRf
Q2hlY2tlciogZXdrVGV4dENoZWNrZXIoKQoreworICAgIHJldHVybiAmZXdrVGV4dENoZWNrZXJD
YWxsYmFjazsKK30KKworI2Vsc2UKKworLy8gRGVmaW5lcyBhbiBlbXB0eSBBUEkgdG8gZG8gbm90
IGJyZWFrIGJ1aWxkLgorI2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBF
X05BTUUsIE5BTUUpICBcCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZ
UEVfTkFNRSkgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorfQorI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorCitF
V0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVs
bF9Eb2N1bWVudF9UYWdfR2V0LCB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCkKK0VXS19U
RVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0Rv
Y3VtZW50X1RhZ19DbG9zZSwgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSkKK0VXS19U
RVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5n
X0NoZWNrLCBzdHJpbmdfc3BlbGxpbmdfY2hlY2spCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1c19HZXQsIHVpX3NwZWxsaW5n
X3N0YXR1c19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVj
a2VyX1VJX1NwZWxsaW5nX1N0YXR1c19Ub2dnbGUsIHVpX3NwZWxsaW5nX3N0YXR1c190b2dnbGUp
CitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxs
aW5nX01pc3NwZWxsZWRfV29yZF9VcGRhdGUsIHVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91
cGRhdGUpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dv
cmRfR3Vlc3Nlc19HZXQsIHdvcmRfZ3Vlc3Nlc19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExC
QUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm4sIHdvcmRfbGVhcm4pCitFV0tfVEVY
VF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlLCB3b3Jk
X2lnbm9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190
ZXh0X2NoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWMyNzdj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3RleHRfY2hlY2tlci5oCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSBld2tfdGV4
dF9jaGVja2VyLmgKKyAqIEBicmllZiBQcm92aWRlcyBBUEkgdG8gb3ZlcndyaXRlIHRoZSBkZWZh
dWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24uCisgKgorICogVGhlcmUgaXMg
b25lIHNwZWxsY2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0aW9uIGFuZCBpdCdzIGRpc2FibGVk
IGJ5IGRlZmF1bHQuCisgKiBJdCBhbGxvd3MgdG8gY2hlY2sgc3BlbGxpbmcgaW4gdGhlIGVkaXRh
YmxlIGFyZWFzLgorICogSWYgYXBwbGljYXRpb24gd2FudHMgdG8gZW5hYmxlIHRoZSBmZWF0dXJl
LCBBUEkgZnJvbSBAYSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaAorICogc2hvdWxkIGJlIHVz
ZWQuCisgKgorICogVGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlv
biBpcyBiYXNlZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICogSXQgZG9lc24ndCBlbnN1cmUg
Z3JhbW1hciBjaGVja2luZy4gQXBwbGljYXRpb24gaXMgYWJsZSB0byBvdmVyd3JpdGUgdGhlIGRl
ZmF1bHQKKyAqIFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24gYnkgZGVmaW5pbmcg
aXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZworICogYXBwcm9wcmlhdGUgY2FsbGJh
Y2sgZnVuY3Rpb25zLgorICovCisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9oCisjZGVmaW5l
IGV3a190ZXh0X2NoZWNrZXJfaAorCisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1
c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFt
ZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJldHVybiBhIHRhZyAoaWRlbnRpZmllcikg
d2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUuCisgKgorICogVW5pcXVlIHRhZ3MgaGVs
cCB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggb3RoZXIgb2JqZWN0cyB0aGF0IGFyZSBjaGVja2Vk
IGZvciBzcGVsbGluZyBtaXN0YWtlcy4KKyAqCisgKiBAcGFyYW0gbyB0aGUgdmlldyBvYmplY3Qg
dG8gZ2V0IHVuaXF1ZSB0YWcKKyAqCisgKiBAcmV0dXJuIHVuaXF1ZSB0YWcgZm9yIHRoZSBnaXZl
biBAYSBvIHZpZXcgb2JqZWN0CisgKi8KK3R5cGVkZWYgdWludDY0X3QgKCpFd2tfVGV4dF9DaGVj
a2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0KShjb25zdCBFdmFzX09iamVjdCAqbyk7
CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9u
IHRvIGNsb3NlIHRoZSBwcnZpb3VzbHkgc2V0IHRhZy4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIHdp
bGwgbm90aWZ5IHRoZSByZWNlaXZlciB0aGF0IHRoZSB1c2VyIGhhcyBmaW5pc2hlZCB3aXRoIHRo
ZSB0YWdnZWQgZG9jdW1lbnQuCisgKgorICogQHBhcmFtIHRhZyB0aGUgdGFnIHRvIGJlIGNsb3Nl
ZAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1
bWVudF9UYWdfQ2xvc2UpKHVpbnQ2NF90IHRhZyk7CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUg
bmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNlYXJjaCBmb3IgYSBtaXNzcGVsbGVk
IHdvcmRzIGluIHRoZSBnaXZlbiBzdHJpbmcuCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFn
IHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVudCB0aGF0IEBhIHRleHQg
aXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBpbiBtb3N0IGNhc2VzIG5vdCBuZWNlc3NhcmlseSwg
anVzdCBmb3IgaWdub3JlZCB3b3JkLAorICogICAgICAgIEBjIDAgY2FuIGJlIHBhc3NlZCBpbiBm
b3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBkb2N1bWVudAorICogQHBh
cmFtIHRleHQgdGhlIHRleHQgY29udGFpbmluZyB0aGUgd29yZHMgdG8gc3BlbGxjaGVjaworICog
QHBhcmFtIG1pc3NwZWxsaW5nX2xvY2F0aW9uIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgYmVnaW5u
aW5nIG9mIHRoZSBtaXNzcGVsbGVkIEBhIHRleHQsIEBjIC0xIGlmIHRoZSBAYSB0ZXh0IGlzIGNv
cnJlY3QKKyAqIEBwYXJhbSBtaXNzcGVsbGluZ19sZW5ndGggYSBwb2ludGVyIHRvIHN0b3JlIHRo
ZSBsZW5ndGggb2YgbWlzc3BlbGxlZCBAYSB0ZXh0LCBAYyAwIGlmIHRoZSBAYSB0ZXh0IGlzIGNv
cnJlY3QKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxp
bmdfQ2hlY2spKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqdGV4dCwgaW50MzJfdCAqbWlzc3Bl
bGxpbmdfbG9jYXRpb24sIGludDMyX3QgKm1pc3NwZWxsaW5nX2xlbmd0aCk7CisKKy8qKgorICog
RGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUg
c3RhdHVzIG9mIFVJIFNwZWxsaW5nLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHRo
ZSBVSSBTcGVsbGluZyBpcyBzaG93biwgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGhpZGRlbgorICov
Cit0eXBlZGVmIEVpbmFfQm9vbCAoKkV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVz
X0dldCkodm9pZCk7CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxi
YWNrIGZ1bmN0aW9uIHRvIHRvZ2dsZSB0aGUgVUkgU3BlbGxpbmcuCisgKi8KK3R5cGVkZWYgdm9p
ZCAoKkV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX1RvZ2dsZSkodm9pZCk7CisK
Ky8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRv
IHVwZGF0ZSB0aGUgVUkgU3BlbGxpbmcgZm9yIHRoZSBtaXNzcGVsbGVkIHdvcmQuCisgKgorICog
QHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3aGljaCBk
b2N1bWVudCB0aGF0IHRoZSBtaXNzcGVsbGVkIHdvcmQgaXMgYXNzb2NpYXRlZCwKKyAqIEBwYXJh
bSBtaXNzcGVsbGVkX3dvcmQgdGhlIG1pc3NwZWxsZWQgd29yZAorICovCit0eXBlZGVmIHZvaWQg
KCpFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX01pc3NwZWxsZWRfV29yZF9VcGRhdGUpKHVp
bnQ2NF90IHRhZywgY29uc3QgY2hhciAqbWlzc3BlbGxlZF93b3JkKTsKKworLyoqCisgKiBEZWZp
bmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGEgbGlzdCBv
ZiBzdWdnZXN0ZWQgc3BlbGxpbmdzIGZvciBhIG1pc3NwZWxsZWQgQGEgd29yZC4KKyAqCisgKiBA
cGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRv
Y3VtZW50IHRoYXQgQGEgdGV4dCBpcyBhc3NvY2lhdGVkLAorICogICAgICAgIEBjIDAgY2FuIGJl
IHBhc3NlZCBmb3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBkb2N1bWVu
dAorICogQHBhcmFtIHdvcmQgdGhlIHdvcmQgdG8gZ2V0IGd1ZXNzZXMKKyAqIEByZXR1cm4gYSBs
aXN0IG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJpbmdzIChhcyBjaGFyKikgYW5kCisgKiAg
ICAgICAgIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGVzdHJveWluZyB0aGVtLgorICovCit0
eXBlZGVmIEVpbmFfTGlzdCAqKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXQpKHVp
bnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNr
IGZ1bmN0aW9uIHRvIGFkZCB0aGUgd29yZCB0byB0aGUgc3BlbGwgY2hlY2tlciBkaWN0aW9uYXJ5
LgorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNr
ZXIgd2hpY2ggZG9jdW1lbnQgdGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAgICAgICAg
QGMgMCBjYW4gYmUgcGFzc2VkIGZvciB0ZXh0IG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1
bGFyIGRvY3VtZW50CisgKiBAcGFyYW0gd29yZCB0aGUgd29yZCB0byBhZGQKKyAqLwordHlwZWRl
ZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuKSh1aW50NjRfdCB0YWcsIGNvbnN0
IGNoYXIgKndvcmQpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0ZWxs
IHRoZSBzcGVsbCBjaGVja2VyIHRvIGlnbm9yZSBhIGdpdmVuIHdvcmQuCisgKgorICogQHBhcmFt
IHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVu
dCB0aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBAYyAwIGNhbiBiZSBwYXNz
ZWQgZm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZG9jdW1lbnQKKyAq
IEBwYXJhbSB3b3JkIHRoZSB3b3JkIHRvIGlnbm9yZQorICovCit0eXBlZGVmIHZvaWQgKCpFd2tf
VGV4dF9DaGVja2VyX1dvcmRfSWdub3JlKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKndvcmQp
OworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgYSB1bmlxdWUgc3Bl
bGwgZG9jdW1lbnQgdGFnLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQg
b3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1l
bnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9j
dW1lbnRfdGFnX2dldF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1l
bnRfVGFnX0dldCBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNs
b3NlIGEgdW5pcXVlIHNwZWxsIGRvY3VtZW50IHRhZy4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcg
Y2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQg
Y2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJf
dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZV9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9V
bmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlIGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2Fs
bGJhY2sgZnVuY3Rpb24gdG8gc2VhcmNoIGZvciBhIG1pc3NwZWxsZWQgd29yZHMgaW4gdGhlIGdp
dmVuIHN0cmluZy4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBj
IE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRp
b24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc3RyaW5nX3NwZWxsaW5nX2NoZWNr
X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjayBjYik7CisKKy8q
KgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3RhdHVzIG9mIFVJIFNw
ZWxsaW5nLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVM
TCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgor
ICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91aV9zcGVsbGluZ19zdGF0dXNfZ2V0X2Ni
X3NldChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1c19HZXQgY2IpOworCisvKioK
KyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0b2dnbGUgdGhlIFVJIFNwZWxsaW5nLgor
ICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0
b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJ
IHZvaWQgZXdrX3RleHRfY2hlY2tlcl91aV9zcGVsbGluZ19zdGF0dXNfdG9nZ2xlX2NiX3NldChF
d2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1c19Ub2dnbGUgY2IpOworCisvKioKKyAq
IFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB1cGRhdGUgdGhlIFVJIFNwZWxsaW5nIGZvciB0
aGUgbWlzc3BlbGxlZCB3b3JkLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBz
ZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBs
ZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91aV9zcGVsbGluZ19t
aXNzcGVsbGVkX3dvcmRfdXBkYXRlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5n
X01pc3NwZWxsZWRfV29yZF9VcGRhdGUgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBm
dW5jdGlvbiB0byBnZXQgYW4gYXJyYXkgb2Ygc3VnZ2VzdGVkIHNwZWxsaW5ncyBmb3IgYSBtaXNz
cGVsbGVkIHdvcmQuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBA
YyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0
aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3dvcmRfZ3Vlc3Nlc19nZXRfY2Jf
c2V0KEV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldCBjYik7CisKKy8qKgorICogU2V0
cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFkZCB0aGUgd29yZCB0byB0aGUgc3BlbGwgY2hlY2tl
ciBkaWN0aW9uYXJ5LgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3Ig
QGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRh
dGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl93b3JkX2xlYXJuX2NiX3NldChF
d2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm4gY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFj
ayBmdW5jdGlvbiB0byB0ZWxsIHRoZSBzcGVsbCBjaGVja2VyIHRvIGlnbm9yZSBhIGdpdmVuIHdv
cmQuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRv
IHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8K
K0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3NldChFd2tfVGV4dF9D
aGVja2VyX1dvcmRfSWdub3JlIGNiKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYK
KyNlbmRpZiAvLyBld2tfdGV4dF9jaGVja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiYTE3MAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0
ZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBF
bGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9o
CisjZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCisKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCisKKy8qKgorICogQGJyaWVmIFN0
cnVjdHVyZSB0aGF0IGtlZXBzIGNsaWVudCdzIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqCisgKiBA
aW50ZXJuYWwKKyAqLworc3RydWN0IF9Fd2tfVGV4dF9DaGVja2VyIHsKKyAgICBFd2tfVGV4dF9D
aGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0IHVuaXF1ZV9zcGVsbF9kb2N1bWVu
dF90YWdfZ2V0OworICAgIEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1Rh
Z19DbG9zZSB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlOworICAgIEV3a19UZXh0X0No
ZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrIHN0cmluZ19zcGVsbGluZ19jaGVjazsKKyAgICBF
d2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1c19HZXQgdWlfc3BlbGxpbmdfc3RhdHVz
X2dldDsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1c19Ub2dnbGUgdWlf
c3BlbGxpbmdfc3RhdHVzX3RvZ2dsZTsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5n
X01pc3NwZWxsZWRfV29yZF9VcGRhdGUgdWlfc3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0
ZTsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXQgd29yZF9ndWVzc2VzX2dl
dDsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm4gd29yZF9sZWFybjsKKyAgICBFd2tf
VGV4dF9DaGVja2VyX1dvcmRfSWdub3JlIHdvcmRfaWdub3JlOworfTsKK3R5cGVkZWYgX0V3a19U
ZXh0X0NoZWNrZXIgRXdrX1RleHRfQ2hlY2tlcjsKKworRXdrX1RleHRfQ2hlY2tlciogZXdrVGV4
dENoZWNrZXIoKTsKKworLy8gTWFrZXMgaXQgdmlzaWJsZSBmb3IgV1RSLgorRUFQSSB2b2lkIGV3
a190ZXh0X2NoZWNrZXJfY2xpZW50X2F0dGFjaCgpOworCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxM
Q0hFQ0spCisjZW5kaWYgLy8gZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Zy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDBhNzQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dGV4dF9jaGVja2VyX3NldHRpbmcuY3BwCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfc2V0dGluZy5oIgorCisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgIldl
YktpdFRleHRDaGVja2VyLmgiCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OworCitzdGF0aWMgc3RydWN0IHsKKyAgICBib29sIGVuYWJsZUNvbnRpbnVvdXNTcGVs
bENoZWNraW5nIDogMTsKKyAgICBib29sIGVuYWJsZUdyYW1tYXJDaGVja2luZyA6IDE7CisgICAg
c3RydWN0IHsKKyAgICAgICAgRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0NvbnRpbnVvdXNfU3Bl
bGxfQ2hlY2tpbmdfQ2hhbmdlZCBjb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQ7CisgICAg
ICAgIEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQgZ3Jh
bW1hckNoZWNraW5nQ2hhbmdlZDsKKyAgICB9IHNldHRpbmdDaGFuZ2VkQ2FsbGJhY2tzOworICAg
IFZlY3RvcjxTdHJpbmc+IHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXM7Cit9IGV3a1RleHRDaGVja2Vy
U2V0dGluZyA9IHsgZmFsc2UsIGZhbHNlLCB7MCwgMH0sIFZlY3RvcjxTdHJpbmc+KCl9OworCitz
dGF0aWMgRWluYV9Cb29sIGlkbGVyQ29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VkKHZvaWQq
KQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFj
a3MuY29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VkKQorICAgICAgICBld2tUZXh0Q2hlY2tl
clNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3MuY29udGludW91c1NwZWxsQ2hlY2tpbmdD
aGFuZ2VkKAorICAgICAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLmVuYWJsZUNvbnRpbnVv
dXNTcGVsbENoZWNraW5nKTsKKworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cit9
CisKK3N0YXRpYyBFaW5hX0Jvb2wgaWRsZXJHcmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKHZvaWQqKQor
eworICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3Mu
Z3JhbW1hckNoZWNraW5nQ2hhbmdlZCkKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNl
dHRpbmdDaGFuZ2VkQ2FsbGJhY2tzLmdyYW1tYXJDaGVja2luZ0NoYW5nZWQoCisgICAgICAgICAg
ICBld2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlR3JhbW1hckNoZWNraW5nKTsKKworICAgIHJl
dHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgaWRsZXJT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KHZvaWQqKQoreworICAgIC8vIEZJWE1FOiBDb25zaWRl
ciB0byBkZWxlZ2F0ZSBjYWxsaW5nIG9mIHRoaXMgbWV0aG9kIGluIFdlYlByb2Nlc3MgdG8gZG8g
bm90IGRlbGF5L2Jsb2NrIFVJUHJvY2Vzcy4KKyAgICB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzKGV3a1RleHRDaGVja2VyU2V0dGluZy5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzKTsKKyAgICBy
ZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCitzdGF0aWMgdm9pZCBzcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzU2V0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuZXdMYW5ndWFnZXMpCit7Cisg
ICAgZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMgPSBuZXdMYW5n
dWFnZXM7CisgICAgZWNvcmVfaWRsZXJfYWRkKGlkbGVyU3BlbGxDaGVja2luZ0xhbmd1YWdlc1Nl
dCwgMCk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisKK3ZvaWQgZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQo
RXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdl
ZCBjYWxsYmFjaykKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBld2tUZXh0Q2hlY2tl
clNldHRpbmcuc2V0dGluZ0NoYW5nZWRDYWxsYmFja3MuY29udGludW91c1NwZWxsQ2hlY2tpbmdD
aGFuZ2VkID0gY2FsbGJhY2s7CisjZW5kaWYKK30KKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdfZ3JhbW1hcl9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1Nl
dHRpbmdfR3JhbW1hcl9DaGVja2luZ19DaGFuZ2VkIGNhbGxiYWNrKQoreworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorICAgIGV3a1RleHRDaGVja2VyU2V0dGluZy5zZXR0aW5nQ2hhbmdlZENhbGxi
YWNrcy5ncmFtbWFyQ2hlY2tpbmdDaGFuZ2VkID0gY2FsbGJhY2s7CisjZW5kaWYKK30KKworRWlu
YV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9j
aGVja2luZ19nZXQoKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBld2tU
ZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlQ29udGludW91c1NwZWxsQ2hlY2tpbmc7CisjZWxzZQor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0
dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoRWluYV9Cb29sIGVuYWJs
ZSkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBlbmFibGUgPSAhIWVuYWJsZTsKKyAg
ICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5nLmVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5n
ICE9IGVuYWJsZSkgeworICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmcgPSBlbmFibGU7CisKKyAgICAgICAgV0tUZXh0Q2hlY2tlckNvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGUpOworCisgICAgICAg
IC8vIFNldHMgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4KKyAg
ICAgICAgaWYgKGVuYWJsZSAmJiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkuaXNFbXB0
eSgpKQorICAgICAgICAgICAgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldChWZWN0b3I8U3RyaW5n
PigpKTsKKworICAgICAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5nLnNldHRpbmdDaGFuZ2Vk
Q2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCkKKyAgICAgICAgICAgIGVj
b3JlX2lkbGVyX2FkZChpZGxlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCwgMCk7Cisg
ICAgfQorI2VuZGlmCit9CisKK0VpbmFfQm9vbCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5h
YmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KCkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAg
ICByZXR1cm4gZXdrVGV4dENoZWNrZXJTZXR0aW5nLmVuYWJsZUdyYW1tYXJDaGVja2luZzsKKyNl
bHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldChFaW5hX0Jvb2wgZW5hYmxlKQor
eworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGVuYWJsZSA9ICEhZW5hYmxlOworICAgIGlm
IChld2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlR3JhbW1hckNoZWNraW5nICE9IGVuYWJsZSkg
eworICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmcuZW5hYmxlR3JhbW1hckNoZWNraW5nID0g
ZW5hYmxlOworCisgICAgICAgIFdLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkU3Rh
dGVDaGFuZ2VkKGVuYWJsZSk7CisKKyAgICAgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZy5z
ZXR0aW5nQ2hhbmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKQorICAgICAgICAg
ICAgZWNvcmVfaWRsZXJfYWRkKGlkbGVyR3JhbW1hckNoZWNraW5nQ2hhbmdlZCwgMCk7CisgICAg
fQorI2VuZGlmCit9CisKK0VpbmFfTGlzdCogZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2F2YWls
YWJsZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCkKK3sKKyAgICBFaW5hX0xpc3QqIGxp
c3RPZmxhbmd1YWdlcyA9IDA7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgVmVjdG9yPFN0
cmluZz4gbGFuZ3VhZ2VzID0gYXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworICAg
IHNpemVfdCBudW1iZXJPZkxhbnVhZ2VzID0gbGFuZ3VhZ2VzLnNpemUoKTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZMYW51YWdlczsgKytpKQorICAgICAgICBsaXN0T2Zs
YW5ndWFnZXMgPSBlaW5hX2xpc3RfYXBwZW5kKGxpc3RPZmxhbmd1YWdlcywgZWluYV9zdHJpbmdz
aGFyZV9hZGQobGFuZ3VhZ2VzW2ldLnV0ZjgoKS5kYXRhKCkpKTsKKworI2VuZGlmCisgICAgcmV0
dXJuIGxpc3RPZmxhbmd1YWdlczsKK30KKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChjb25zdCBjaGFyKiBsYW5ndWFnZXMpCit7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgVmVjdG9yPFN0cmluZz4gbmV3TGFuZ3VhZ2VzOwor
ICAgIFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2VzKS5zcGxpdCgnLCcsIG5ld0xhbmd1YWdlcyk7
CisKKyAgICBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KG5ld0xhbmd1YWdlcyk7CisjZW5kaWYK
K30KKworRWluYV9MaXN0KiBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdf
bGFuZ3VhZ2VzX2dldCgpCit7CisgICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMgPSAwOwor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcyA9IGxv
YWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZMYW51YWdl
cyA9IGxhbmd1YWdlcy5zaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJl
ck9mTGFudWFnZXM7ICsraSkKKyAgICAgICAgbGlzdE9mbGFuZ3VhZ2VzID0gZWluYV9saXN0X2Fw
cGVuZChsaXN0T2ZsYW5ndWFnZXMsIGVpbmFfc3RyaW5nc2hhcmVfYWRkKGxhbmd1YWdlc1tpXS51
dGY4KCkuZGF0YSgpKSk7CisKKyNlbmRpZgorICAgIHJldHVybiBsaXN0T2ZsYW5ndWFnZXM7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyX3NldHRpbmcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190
ZXh0X2NoZWNrZXJfc2V0dGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjgzNmQ5OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgor
ICogQGZpbGUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgKKyAqIEBicmllZiBBUEkgZm9yIG1h
bmlwdWxhdGluZyBzcGVsbCBjaGVja2VyIGZlYXR1cmUuCisgKi8KKworI2lmbmRlZiBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdfaAorI2RlZmluZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfaAor
CisjaW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgewor
I2VuZGlmCisKKy8qKgorICogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1
bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhlIGNvbnRpbnVvdXMg
c3BlbGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogQHBh
cmFtIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQg
b3IgQCBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdr
X1RleHRfQ2hlY2tlcl9TZXR0aW5nX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlZCko
RWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHVz
ZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhlIGdyYW1tYXIgY2hlY2tpbmcgc2V0
dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogQHBhcmFtIEBjIEVJTkFfVFJVRSBp
ZiBncmFtbWFyIGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQCBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlz
YWJsZWQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nX0dyYW1t
YXJfQ2hlY2tpbmdfQ2hhbmdlZCkoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogU2V0cyBh
IGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhl
IGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQu
CisgKgorICogU3BlY2lmeWluZyBvZiB0aGlzIGNhbGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBw
bGljYXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCisgKiBvbmNlIFdlYktpdCBj
aGFuZ2VzIHRoaXMgc2V0dGluZy4KKyAqIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJl
c3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0
aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJlIG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5
aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBNZW51IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFy
YW0gY2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0IG9yIEBjIE5VTEwgdG8gaW52YWxp
ZGF0ZSB0aGUgcHJldmlvdXMgb25lCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4dF9D
aGVja2VyX1NldHRpbmdfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VkIGNiKTsKKwor
LyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNsaWVu
dCB3aGVuCisgKiB0aGUgZ3JhbW1hciBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdl
YktpdC4KKyAqCisgKiBTcGVjaWZ5aW5nIG9mIHRoaXMgY2FsbGJhY2sgaXMgbmVlZGVkIGlmIHRo
ZSBhcHBsaWNhdGlvbiB3YW50cyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMKKyAqIG9uY2UgV2Vi
S2l0IGNoYW5nZXMgdGhpcyBzZXR0aW5nLgorICogSWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBp
bnRlcmVzdGVkLCB0aGlzIGNhbGxiYWNrIGlzIG5vdCBzZXQuCisgKiBDaGFuZ2luZyBvZiB0aGlz
IHNldHRpbmcgYXQgdGhlIFdlYktpdCBsZXZlbCBjYW4gYmUgbWFkZSBhcyBhIHJlc3VsdCBvZiBt
b2RpZnlpbmcKKyAqIG9wdGlvbnMgaW4gYSBDb250ZXh0IE1lbnUgYnkgYSB1c2VyLgorICoKKyAq
IEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQgb3IgQGMgTlVMTCB0byBp
bnZhbGlkYXRlIHRoZSBwcmV2aW91cyBvbmUKKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNr
ZXJfc2V0dGluZ19ncmFtbWFyX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNr
ZXJfU2V0dGluZ19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQgY2IpOworCisvKioKKyAqIFF1ZXJp
ZXMgaWYgY29udGludW91cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkLgorICoKKyAqIEByZXR1
cm4gQGMgRUlOQV9UUlVFIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBv
ciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dl
dCh2b2lkKTsKKworLyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGNvbnRpbnVvdXMgc3BlbGwgY2hl
Y2tpbmcuCisgKgorICogQWRkaXRpb25hbGx5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGEgY2FsbGJh
Y2sgZnVuY3Rpb24gKGlmIGRlZmluZWQpIHRvIG5vdGlmeQorICogdGhlIGNsaWVudCBhYm91dCB0
aGUgY2hhbmdlIG9mIHRoZSBzZXR0aW5nLgorICogVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5
IGRlZmF1bHQuCisgKgorICogQHNlZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfY29udGludW91
c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldAorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMg
RUlOQV9UUlVFIHRvIGVuYWJsZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIG9yIEBjIEVJTkFf
RkFMU0UgdG8gZGlzYWJsZQorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
X2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldChFaW5hX0Jvb2wgZW5hYmxlKTsK
KworLyoqCisgKiBRdWVyaWVzIGlmIGdyYW1tYXIgY2hlY2tpbmcgaXMgZW5hYmxlZC4KKyAqCisg
KiBBcHBsaWNhdGlvbiBtYXkgb3ZlcndyaXRlIHdlYmtpdCBncmFtbWFyIGNoZWNraW5nIGltcGxl
bWVudGF0aW9uIGJ5IHNldHRpbmcgY2FsbGJhY2sgZnVuY3Rpb25zCisgKiBAc2VlIGV3a190ZXh0
X2NoZWNrZXIuaAorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGdyYW1tYXIgY2hlY2tp
bmcgaXMgZW5hYmxlZCBvciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLworRUFQ
SSBFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNr
aW5nX2dldCh2b2lkKTsKKworLyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGdyYW1tYXIgY2hlY2tp
bmcuCisgKgorICogQWRkaXRpb25hbGx5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGEgY2FsbGJhY2sg
ZnVuY3Rpb24gKGlmIGRlZmluZWQpIHRvIG5vdGlmeQorICogdGhlIGNsaWVudCBhYm91dCB0aGUg
Y2hhbmdlIG9mIHRoZSBzZXR0aW5nLgorICogVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGFuZCBp
cyBub3Qgc3VwcG9ydGVkIGJ5IFdlYktpdC1FRkwgYnkgZGVmYXVsdC4KKyAqCisgKiBAc2VlIGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ19ncmFtbWFyX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0Cisg
KgorICogQHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUgdG8gZW5hYmxlIGdyYW1tYXIgY2hlY2tp
bmcgb3IgQGMgRUlOQV9GQUxTRSB0byBkaXNhYmxlCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9j
aGVja2VyX3NldHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KEVpbmFfQm9vbCBlbmFi
bGUpOworCisvKgorICogR2V0cyB0aGUgdGhlIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBhbmQgaW5z
dGFsbGVkIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyB0byB1c2UuCisgKgorICogQHNlZSBld2tf
dGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldAorICoKKyAq
IEByZXR1cm4gdGhlIGxpc3Qgd2l0aCBhdmFpbGFibGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2Vz
LCBvciBAYyBOVUxMIG9uIGZhaWx1cmUKKyAqICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRz
IGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciwgdXNlIGVpbmFfc3RyaW5nc2hhcmVfZGVsKCkK
KyAqLworRUFQSSBFaW5hX0xpc3QgKmV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19hdmFpbGFibGVf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCh2b2lkKTsKKworLyoqCisgKiBTZXRzIEBhIGxh
bmd1YWdlcyBhcyB0aGUgbGlzdCBvZiBsYW5ndWFnZXMgdG8gdXNlIGJ5IGRlZmF1bHQgV2ViS2l0
CisgKiBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNrZXIgZmVhdHVyZSB3aXRoIEVuY2hhbnQg
bGlicmFyeSBzdXBwb3J0LgorICoKKyAqIElmIEBsYW5ndWFnZXMgaXMgQGMgTlVMTCwgdGhlIGRl
ZmF1bHQgbGFuZ3VhZ2UgaXMgdXNlZC4KKyAqIElmIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGNhbiBu
b3QgYmUgZGV0ZXJtaW5lZCB0aGVuIGFueSBhdmFpbGFibGUgZGljdGlvbmFyeSB3aWxsIGJlIHVz
ZWQuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBpbnZhbGlkYXRlcyB0aGUgcHJldmlvdXNs
eSBzZXQgbGFuZ3VhZ2VzLgorICogICAgICAgVGhlIGRpY3Rpb25hcmllcyBhcmUgcmVxdWVzdGVk
IGFzeW5jaHJvbm91c2x5LgorICoKKyAqIEBwYXJhbSBsYW5ndWFnZXMgYSBsaXN0IG9mIGNvbW1h
ICgnLCcpIHNlcGFyYXRlZCBsYW5ndWFnZSBjb2RlcworICogICAgICAgIG9mIHRoZSBmb3JtICdl
bl9VUycsIGllLCBsYW5ndWFnZV9WQVJJQU5ULCBtYXkgYmUgQGMgTlVMTC4KKyAqLworRUFQSSB2
b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0
KGNvbnN0IGNoYXIgKmxhbmd1YWdlcyk7CisKKy8qCisgKiBHZXRzIHRoZSB0aGUgbGlzdCBvZiB0
aGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIGluIHVzZS4KKyAqCisgKiBAc2VlIGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZ19hdmFpbGFibGVfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldAor
ICogQHNlZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
X3NldAorICoKKyAqIEByZXR1cm4gdGhlIGxpc3Qgd2l0aCB0aGUgc3BlbGwgY2hlY2tpbmcgbGFu
Z3VhZ2VzIGluIHVzZSwKKyAqICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1zIHNo
b3VsZCBiZSBmcmVlZCBhZnRlciwgdXNlIGVpbmFfc3RyaW5nc2hhcmVfZGVsKCkKKyAqLworRUFQ
SSBFaW5hX0xpc3QgKmV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVja2luZ19sYW5n
dWFnZXNfZ2V0KHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5k
aWYgLy8gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKaW5kZXggYWEzM2YyZi4uZWQ5MjFlZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKQEAg
LTEsNSArMSw3IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMg
Q29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyOSw5IEBA
CiAjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKIAogI2luY2x1ZGUgIlRleHRDaGVja2VyU3RhdGUu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCisjaW5jbHVkZSAiV2ViVGV4dENoZWNrZXIuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIApAQCAtMzcsOTEgKzQxLDE0NCBAQCBzdGF0aWMgVGV4dENoZWNrZXJT
dGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hl
Y2tlcjo6c3RhdGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCisgICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZVN0YXRlID0gZmFsc2U7CisgICAg
aWYgKGRpZEluaXRpYWxpemVTdGF0ZSkKKyAgICAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7
CisKKyAgICBXZWJUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50ID0gV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jbGllbnQoKTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkID0gY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgp
OworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gY2xpZW50
LmdyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKKworICAgIGRpZEluaXRpYWxpemVTdGF0ZSA9IHRy
dWU7CisjZW5kaWYKICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKIH0KIAogYm9vbCBUZXh0
Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2Vk
KCk7CisjZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVj
a2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkKK3ZvaWQgVGV4dENo
ZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisgICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQgPT0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKKyAgICBXZWJUZXh0Q2hl
Y2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CisjZW5kaWYKIH0KIAotdm9pZCBU
ZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sKQordm9pZCBUZXh0Q2hl
Y2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQor
ICAgIGlmIChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9PSBpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHRleHRDaGVja2VyU3RhdGUuaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOworICAgIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0R3JhbW1hckNoZWNraW5nRW5hYmxl
ZChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4dENoZWNr
ZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJs
ZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAg
ICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5h
YmxlZDsKKyNlbmRpZgogfQogCiB2b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFi
bGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNlbmRpZgogfQogCi1pbnQ2NF90IFRleHRDaGVja2Vy
Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSopCitpbnQ2NF90IFRleHRDaGVj
a2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFn
ZSk7CisjZWxzZQogICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6
OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCkKK3ZvaWQgVGV4dENoZWNrZXI6OmNs
b3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKKyNlbmRpZgogfQog
Ci12b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCwgY29uc3Qg
VUNoYXIqLCB1aW50MzJfdCwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBUZXh0Q2hlY2tlcjo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNo
YXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwg
aW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwg
bGVuZ3RoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworI2VuZGlm
CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIGNv
bnN0IFVDaGFyKiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGlu
dDMyX3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxl
bmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50MzJfdCYgYmFk
R3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFn
LCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlv
biwgYmFkR3JhbW1hckxlbmd0aCk7CisjZW5kaWYKIH0KIAogYm9vbCBUZXh0Q2hlY2tlcjo6c3Bl
bGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS5zcGVsbGluZ1VJSXNTaG93aW5nKCk7CisjZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgogfQogCiB2b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRl
eHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygp
OworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlz
c3BlbGxlZFdvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFn
LCBjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5j
bGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNwZWxsRG9jdW1lbnRU
YWcsIG1pc3NwZWxsZWRXb3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRh
dGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29u
c3QgR3JhbW1hckRldGFpbCYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJh
ZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0
cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsK
KyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit2b2lkIFRl
eHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYg
Z3Vlc3NlcykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQo
c3BlbGxEb2N1bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0
Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVj
a2VyOjpsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdv
cmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3Vt
ZW50VGFnLCB3b3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3Jk
KGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwor
I2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL2Nt
YWtlL0ZpbmRFbmNoYW50LmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OWM3MWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UKQEAgLTAsMCArMSw0MyBAQAorIyAt
IFRyeSB0byBmaW5kIEVuY2hhbnQKKyMgT25jZSBkb25lLCB0aGlzIHdpbGwgZGVmaW5lCisjCisj
ICBFTkNIQU5UX0lOQ0xVREVfRElSUyAtIHRoZSBFbmNoYW50IGluY2x1ZGUgZHJlY3Rvcmllcwor
IyAgRU5DSEFOVF9MSUJSQVJJRVMgLSBsaW5rIHRoZXNlIHRvIHVzZSBFbmNoYW50CisjCisjIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTCisjIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
T1IgSVRTCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OworIyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwKKyMgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyMgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgor
IyBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworRklORF9QQUNL
QUdFKFBrZ0NvbmZpZykKK1BLR19DSEVDS19NT0RVTEVTKFBDX0VOQ0hBTlQgZW5jaGFudCkKKwor
RklORF9QQVRIKEVOQ0hBTlRfSU5DTFVERV9ESVJTCisgICAgTkFNRVMgZW5jaGFudC5oCisgICAg
UEFUSFMgJHtQQ19FTkNIQU5UX0lOQ0xVREVESVJ9CisgICAgICAgICAgJHtQQ19FTkNIQU5UX0lO
Q0xVREVfRElSU30KKykKKworRklORF9MSUJSQVJZKEVOQ0hBTlRfTElCUkFSSUVTCisgICAgTkFN
RVMgZW5jaGFudAorICAgIFBBVEhTICR7UENfRU5DSEFOVF9MSUJESVJ9CisgICAgICAgICAgJHtQ
Q19FTkNIQU5UX0xJQlJBUllfRElSU30KKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggNTQ5MDU2
YS4uZjFlYmE4YSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysr
IGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTE2OCwzICsxNjgsOCBAQCBJRiAo
V1RGX1VTRV9USUxFRF9CQUNLSU5HX1NUT1JFKQogICBGSU5EX1BBQ0tBR0UoT3BlbkdMIFJFUVVJ
UkVEKQogRU5ESUYoKQogCitPUFRJT04oRU5BQkxFX1NQRUxMQ0hFQ0sgIkVuYWJsZSBzcGVsbGNo
ZWNraW5nIGZlYXR1cmUgKHJlcXVpcmVzIGVuY2hhbnQpIiBPTikKK0lGIChFTkFCTEVfU1BFTExD
SEVDSykKKyAgICAgIEZJTkRfUEFDS0FHRShFbmNoYW50IFJFUVVJUkVEKQorICAgICAgQUREX0RF
RklOSVRJT05TKC1ERU5BQkxFX1NQRUxMQ0hFQ0s9MSkKK0VORElGKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165373</attachid>
            <date>2012-09-24 07:08:14 -0700</date>
            <delta_ts>2012-09-24 07:28:06 -0700</delta_ts>
            <desc>changed ewk_text_checker_setting to ewk_text_checker_settings (plural)</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>62682</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA0MzFmNjMyLi5iMGFmZTc2
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDktMjQgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYXNtdW5nLmNvbT4KKworICAgICAgICBbV0syXVtFRkxd
IEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNwZWxsY2hlY2tpbmcgZmVh
dHVyZSBmb3IgV0syLUVmbC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kRW5jaGFudC5j
bWFrZTogQWRkZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2U6IERl
ZmluZSBTUEVMTENIRUNLIG1hY3JvLgorCiAyMDEyLTA5LTI0ICBWaXZlayBHYWxhdGFnZSAgPHZp
dmVrZ2FsYXRhZ2VAZ21haWwuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGltcGxlbWVu
dCB0ZXN0aW5nIGhhcm5lc3MgZm9yIHB1cmUgcHJvdG9jb2wgdGVzdHMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzNkYjVlZi4uY2I4MDVkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA5LTI0
ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFs
IFJvaiA8bS5yb2pAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBJbXBsZW1lbnRh
dGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBl
bmNoYW50LXJlbGF0ZWQgY29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRocyBhbmQgdGhlIGxpYnJh
cnkgZmxhZy4KKwogMjAxMi0wOS0yNCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOkVYQ19CQURfQUNDRVNTIHVwb24gY2xvc2lu
ZyBwYWdlIHdpdGggbm9kZSBoaWdobGlnaHRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRl
eCA3MGQ2OGQ3Li40ZGU0ODk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtODIsNiAr
ODIsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0vUGxhdGZvcm1T
dHJhdGVnaWVzLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCiAgIHBs
YXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3BwCisgIHBs
YXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCiApCiAKIElGIChFTkFC
TEVfQkFUVEVSWV9TVEFUVVMpCkBAIC0zMjksMyArMzMwLDExIEBAIElGIChFTkFCTEVfV0VCX0FV
RElPKQogICBBRERfREVGSU5JVElPTlMoLURVTklOU1RBTExFRF9BVURJT19SRVNPVVJDRVNfRElS
PSIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9hdWRpby9yZXNvdXJjZXMiKQogRU5ESUYgKCkKIAor
SUYgKEVOQUJMRV9TUEVMTENIRUNLKQorICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9E
SVJFQ1RPUklFUworICAgICAgICAke0VOQ0hBTlRfSU5DTFVERV9ESVJTfQorICAgICkKKyAgICBM
SVNUKEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAke0VOQ0hBTlRfTElCUkFSSUVT
fQorICAgICkKK0VORElGKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzYmM4NWRjLi44YzNhOThlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTIxIEBACisyMDEyLTA5LTI0ICBHcnplZ29yeiBDemFqa293c2tpICA8
Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFsIFJvaiA8bS5yb2pAc2Ftc3VuZy5jb20+
CisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2luZyBmZWF0dXJlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE4NTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3BlbGxpbmcg
aW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDItRUZMIHRoYXQgaXMgYmFzZWQgb24gRW5jaGFudCBs
aWJyYXJ5LgorCisgICAgICAgIEFkZGl0aW9uYWxseSB0aGUgcGF0Y2ggcHJvdmlkZXMgQVBJIHRv
IG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9u
CisgICAgICAgIGFzIEVuY2hhbnQgbGlicmFyeSBkb2Vzbid0IGVuc3VyZSBncmFtbWFyIGNoZWNr
aW5nLgorICAgICAgICBBcHBsaWNhdGlvbiBpcyBhYmxlIHRvIG92ZXJ3cml0ZSBpdCAoYm90aCBn
cmFtbWFyIGFuZCBzcGVsbCBjaGVja2luZykgYnkgZGVmaW5pbmcKKyAgICAgICAgaXRzIG93biBp
bXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZyBhcHByb3ByaWF0ZSBjYWxsYmFjayBmdW5jdGlvbnMu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgQWRkIGVuY2hhbnQtcmVs
YXRlZCBjb21waWxlciBmbGFnczogaGVhZGVyIHBhdGhzIGFuZCB0aGUgbGlicmFyeSBmbGFnLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaDoKKyAgICAgICAgQWRkIGZp
bGVzIHRoYXQgY29udGFpbiB0aGUgQVBJIHRvIHRoZSBtYWluIFdlYktpdDItRUZMJ3MgaGVhZGVy
IHRvIGJlIGF2YWlsYWJsZSBmb3IgYXBwbGljYXRpb25zLgorCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgSW1wbGVtZW50
IGNhbGxiYWNrcyBmdW5jdGlvbnMgb2YgV0tUZXh0Q2hlY2tlci4KKworICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQpOgor
ICAgICAgICAoV2ViS2l0Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAg
ICAgIChXZWJLaXQ6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OnNl
dEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0Ojp1bmlxdWVTcGVsbERv
Y3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyk6
CisgICAgICAgIChXZWJLaXQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJL
aXQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6c3BlbGxpbmdVSUlz
U2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgor
ICAgICAgICAoV2ViS2l0Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToKKyAg
ICAgICAgKFdlYktpdDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6Z3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpsZWFybldvcmQp
OgorICAgICAgICAoV2ViS2l0OjppZ25vcmVXb3JkKToKKyAgICAgICAgVGhvc2UgbWV0aG9kcyBh
cmUgZGlyZWN0bHkgZ2l2ZW4gYXMgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciBXS1RleHRDaGVja2Vy
J3MgY2xpZW50LgorICAgICAgICBUaGV5IGNob29zZSBiZXR3ZWVuIFdlYktpdCdzIHNwZWxsaW5n
IGltcGxlbWVudGF0aW9uIGFuZCBjbGllbnQncyBvbmVzLgorCisgICAgICAgIChXZWJLaXQ6OmF2
YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6bG9hZGVkU3BlbGxDaGVj
a2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFRoZXkgYXJlIHVzZWQgYnkgZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5ncy5jcHAgZmlsZSBhbmQgYWxsb3cgdG8gZG8gbm90CisgICAgICAgIGV4cG9zZSAn
bV90ZXh0Q2hlY2tlckVuY2hhbnQnLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvV2Vi
S2l0VGV4dENoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSB0aGUgZnVuY3Rpb25zIHdo
aWNoIGNob29zZXMgYmV0d2VlbiBjbGllbnQncyBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGluZyBh
bmQgdGhlIFdlYktpdCBvbmUuCisKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoX0V3a19Db250ZXh0OjpfRXdr
X0NvbnRleHQpOgorICAgICAgICBJbml0aWFsaXplIHNwZWxsY2hlY2tlciBmZWF0dXJlLgorCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoZXdrVGV4dENoZWNrZXIpOgorICAgICAgICBHZXQgdGhlIGNsaWVudCdzIGNhbGxi
YWNrIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSBBUEkgdG8gc2V0IHRoZSBjbGllbnQncyBv
d24gc3BlbGxpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChfRXdrX1RleHRf
Q2hlY2tlcik6CisgICAgICAgIERlZmluZSBzdHJ1Y3Qgd2l0aCBjbGllbnQncyBjYWxsYmFja3Mg
cmVzcG9uaXNibGUgZm9yIHNwZWxsaW5nLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5jcHA6IEFkZGVkLgorICAgICAgICAoaWRsZXJHcmFt
bWFyQ2hlY2tpbmdDaGFuZ2VkKToKKyAgICAgICAgKGlkbGVyU3BlbGxDaGVja2luZ0xhbmd1YWdl
c1NldCk6CisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBpcyBub3RpZmllZCBhYm91dCBzcGVsbGlu
ZyBzZXR0aW5ncyBjaGFuZ2UgKHRoZXkgbWF5IGJlIGNoYW5nZWQKKyAgICAgICAgdGhyb3VnaCBj
b250ZXh0IG1lbnUgb3B0aW9uKSBvbiBpZGxlciB0byBkbyBub3QgYmxvY2sgV2ViS2l0LgorCisg
ICAgICAgIChzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KToKKyAgICAgICAgVGhlIGRpY3Rpb25h
cmllcyBhcmUgcmVxdWVzdGVkIG9uIGlkbGVyIHRvIGRvIG5vdCBibG9jayBXZWJLaXQuCisKKyAg
ICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19jaGFuZ2VkX2NiX3NldCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2dy
YW1tYXJfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQpOgorICAgICAgICBTZXQgdGhlIGNhbGxiYWNr
IGZ1bmN0aW9ucyB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4gdGhlIHNwZWxsaW5nIHNl
dHRpbmdzCisgICAgICAgIHdlcmUgY2hhbmdlZCBieSBXZWJLaXQuCisKKyAgICAgICAgKGV3a190
ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0
KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfc2V0KToKKyAgICAgICAgQVBJIHRvIHNldC9nZXQgdGhlIGNvbnRpbnVv
dXMgc3BlbGwgY2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Nf
ZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJf
c2V0dGluZ3NfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KToKKyAgICAgICAgQVBJIHRvIHNl
dC9nZXQgdGhlIGdyYW1tYXIgY2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJf
c2V0dGluZ3NfYXZhaWxhYmxlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQpOgorICAgICAg
ICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0
KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX2dldCk6CisgICAgICAgIEFQSSB0byBzZXQvZ2V0IGxhbmd1YWdlcyB0byB1c2UgYnkg
V2ViS2l0IGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3MuaDogQWRkZWQu
CisgICAgICAgIEFkZCBBUEkgZm9yIG1hbmlwdWxhdGluZyBzcGVsbCBjaGVja2VyIGZlYXR1cmUu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAg
ICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0
YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tp
bmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVu
aXF1ZVNwZWxsRG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2xv
c2VTcGVsbERvY3VtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpj
aGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hl
Y2tHcmFtbWFyT2ZTdHJpbmcpOiBSZW1vdmUgV2ViQ29yZSBuYW1hc3BhY2UgYXMgaXQncyBhbHJl
YWR5IGRlZmluZWQgZm9yIHRoZSB3aG9sZSBmaWxlLgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hl
Y2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2Vy
Ojp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdl
YktpdDo6VGV4dENoZWNrZXI6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyOjppZ25vcmVXb3JkKToKKyAgICAgICAgVGhvc2UgY2FsbCBXS1RleHRDaGVja2VyIGNsaWVu
dCBtZXRob2RzLgorCiAyMDEyLTA5LTI0ICBCeXVuZ3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5n
LmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIENoYW5nZSB0aGUgaW5zdGFsbCBwYXRoIGZvciBs
aWJld2syVW5pdFRlc3RJbmplY3RlZEJ1bmRsZVNhbXBsZS5zby4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwu
Y21ha2UKaW5kZXggZTc3MmUzOC4uMzFmODg1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UK
QEAgLTQwLDYgKzQwLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9j
ZXNzL0FQSS9lZmwvTmV0d29ya0luZm9Qcm92aWRlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2Vm
bC9QYWdlQ2xpZW50SW1wbC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92
aWRlci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKICAg
ICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCiAgICAgVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC01NCw2ICs1NSw4IEBAIExJU1QoQVBQRU5EIFdl
YktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX3BvbGlj
eV9kZWNpc2lvbi5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9pdGVt
LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKKyAgICBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ3MuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Vy
bF9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3Bw
CiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5jcHAKQEAgLTEy
MSw2ICsxMjQsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZWZsIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlybyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29y
ay9zb3VwIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3N2Zy9ncmFwaGljcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVk
L2VmbCIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL3NvdXAiCkBAIC0yMjQsNiArMjI4LDgg
QEAgU0VUIChFV2ViS2l0Ml9IRUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElS
fS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAgICAgIiR7Q01BS0Vf
Q1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuaCIKICAg
ICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190b3Vj
aC5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RleHRfY2hlY2tlci5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5oIgogICAgICIke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXF1ZXN0Lmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dXJsX3Jlc3BvbnNlLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmgiCkBAIC0zMjcsMyArMzMzLDEyIEBA
IElGIChFTkFCTEVfSU5TUEVDVE9SKQogICAgICAgICAgICAgICAgICAgICAgICBQQVRURVJOICIq
LmdpZiIKICAgICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTiAiKi5wbmciKQogRU5ESUYgKCkK
KworSUYgKEVOQUJMRV9TUEVMTENIRUNLKQorICAgIExJU1QoQVBQRU5EIFdlYktpdDJfSU5DTFVE
RV9ESVJFQ1RPUklFUworICAgICAgICAke0VOQ0hBTlRfSU5DTFVERV9ESVJTfQorICAgICkKKyAg
ICBMSVNUKEFQUEVORCBXZWJLaXQyX0xJQlJBUklFUworICAgICAgICAke0VOQ0hBTlRfTElCUkFS
SUVTfQorICAgICkKK0VORElGKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9F
V2ViS2l0Mi5oCmluZGV4IDEzZWZhYjEuLmY4NzZlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgImV3
a19wb3B1cF9tZW51X2l0ZW0uaCIKICNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKICNpbmNsdWRl
ICJld2tfdG91Y2guaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCisjaW5jbHVkZSAi
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdC5o
IgogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKICNpbmNsdWRlICJld2tfdXJsX3NjaGVt
ZV9yZXF1ZXN0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uY2E3YjQzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlci5oIgor
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLTXV0YWJsZUFycmF5LmgiCisjaW5j
bHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNp
bmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzLmgiCisjaW5jbHVkZSA8RWluYS5oPgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgT3duUHRyPFdlYkNvcmU6OlRleHRDaGVja2Vy
RW5jaGFudD4gdGV4dENoZWNrZXJFbmNoYW50ID0gV2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50
OjpjcmVhdGUoKTsKK3N0YXRpYyBFd2tfVGV4dF9DaGVja2VyKiBld2tUZXh0Q2hlY2tlckNhbGxi
YWNrID0gZXdrVGV4dENoZWNrZXIoKTsKKworYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
QWxsb3dlZChjb25zdCB2b2lkKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFRo
aXMgbWV0aG9kIGlzIG5vdCBjYWxsZWQgYnkgV2ViS2l0Mi9XZWJDb3JlLiBKdXN0IGtlZXAgaXQg
Zm9yIEFQSSBjb21wYXRpYmlsaXR5LgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4g
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19nZXQoKTsKK30KKwordm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9v
bCBlbmFibGVkLCBjb25zdCB2b2lkKikKK3sKKyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdz
X2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldChlbmFibGVkKTsKK30KKworYm9v
bCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KCk7Cit9
CisKK3ZvaWQgc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZv
aWQqKQoreworICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2dyYW1tYXJfY2hl
Y2tpbmdfc2V0KGVuYWJsZWQpOworfQorCit1aW50NjRfdCB1bmlxdWVTcGVsbERvY3VtZW50VGFn
KFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJD
YWxsYmFjay0+dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCisgICAgICAgIHJldHVybiBl
d2tUZXh0Q2hlY2tlckNhbGxiYWNrLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCh0b0lt
cGwocGFnZSktPnZpZXdXaWRnZXQoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBjbG9z
ZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2NF90IHRhZywgY29uc3Qgdm9pZCopCit7CisgICAg
aWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xv
c2UpCisgICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnVuaXF1ZV9zcGVsbF9kb2N1bWVu
dF90YWdfY2xvc2UodGFnKTsKK30KKwordm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0
X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1Rl
eHRDaGVja2VyQ2FsbGJhY2stPnN0cmluZ19zcGVsbGluZ19jaGVjaykKKyAgICAgICAgZXdrVGV4
dENoZWNrZXJDYWxsYmFjay0+c3RyaW5nX3NwZWxsaW5nX2NoZWNrKHRhZywgdG9JbXBsKHRleHQp
LT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGlu
Z0xlbmd0aCk7CisgICAgZWxzZQorICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQtPmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyh0b0ltcGwodGV4dCktPnN0cmluZygpLCAqbWlzc3BlbGxpbmdMb2NhdGlv
biwgKm1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKwordm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyh1
aW50NjRfdCwgV0tTdHJpbmdSZWYsIFdLQXJyYXlSZWYqLCBpbnQzMl90KiwgaW50MzJfdCosIGNv
bnN0IHZvaWQqKQoreworICAgIC8vIEZJWE1FOiBjYWxsIGNsaWVudCdzIGZ1bmN0aW9uLgorICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgc3BlbGxpbmdVSUlzU2hvd2luZyhjb25zdCB2
b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+dWlfc3BlbGxpbmdfc3Rh
dHVzX2dldCkKKyAgICAgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnVpX3NwZWxs
aW5nX3N0YXR1c19nZXQoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCB0b2dnbGVT
cGVsbGluZ1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tl
ckNhbGxiYWNrLT51aV9zcGVsbGluZ19zdGF0dXNfdG9nZ2xlKQorICAgICAgICBld2tUZXh0Q2hl
Y2tlckNhbGxiYWNrLT51aV9zcGVsbGluZ19zdGF0dXNfdG9nZ2xlKCk7Cit9CisKK3ZvaWQgdXBk
YXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVm
IG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJD
YWxsYmFjay0+dWlfc3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZSkKKyAgICAgICAgZXdr
VGV4dENoZWNrZXJDYWxsYmFjay0+dWlfc3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZSh0
YWcsIHRvSW1wbChtaXNzcGVsbGVkV29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworfQor
Cit2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyh1aW50NjRfdCwgV0tTdHJp
bmdSZWYsIFdLR3JhbW1hckRldGFpbFJlZiwgY29uc3Qgdm9pZCopCit7CisgICAgLy8gRklYTUU6
IGNhbGwgY2xpZW50J3MgZnVuY3Rpb24uCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworV0tB
cnJheVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNv
bnN0IHZvaWQqKQoreworICAgIFdLTXV0YWJsZUFycmF5UmVmIHN1Z2dlc3Rpb25zRm9yV29yZCA9
IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7CisKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFj
ay0+d29yZF9ndWVzc2VzX2dldCkgeworICAgICAgICBFaW5hX0xpc3QqIGxpc3QgPSBld2tUZXh0
Q2hlY2tlckNhbGxiYWNrLT53b3JkX2d1ZXNzZXNfZ2V0KHRhZywgdG9JbXBsKHdvcmQpLT5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgdm9pZCogaXRlbTsKKworICAgICAgICBFSU5B
X0xJU1RfRlJFRShsaXN0LCBpdGVtKSB7CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhz
dGF0aWNfY2FzdDxjaGFyKj4oaXRlbSkpKTsKKyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVt
KHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBmcmVl
KGl0ZW0pOworICAgICAgICB9CisKKyAgICB9IGVsc2UgeworICAgICAgICBWZWN0b3I8U3RyaW5n
PiBndWVzc2VzID0gdGV4dENoZWNrZXJFbmNoYW50LT5nZXRHdWVzc2VzRm9yV29yZCh0b0ltcGwo
d29yZCktPnN0cmluZygpKTsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mR3Vlc3NlcyA9IGd1ZXNz
ZXMuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mR3Vlc3Nl
czsgKytpKSB7CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlv
bihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhndWVzc2VzW2ldLnV0Zjgo
KS5kYXRhKCkpKTsKKyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9y
V29yZCwgc3VnZ2VzdGlvbi5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
c3VnZ2VzdGlvbnNGb3JXb3JkOworfQorCit2b2lkIGxlYXJuV29yZCh1aW50NjRfdCB0YWcsIFdL
U3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlckNh
bGxiYWNrLT53b3JkX2xlYXJuKQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT53b3Jk
X2xlYXJuKHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBl
bHNlCisgICAgICAgIHRleHRDaGVja2VyRW5jaGFudC0+bGVhcm5Xb3JkKHRvSW1wbCh3b3JkKS0+
c3RyaW5nKCkpOworfQorCit2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1Jl
ZiB3b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+
d29yZF9pZ25vcmUpCisgICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPndvcmRfaWdub3Jl
KHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBlbHNlCisg
ICAgICAgIHRleHRDaGVja2VyRW5jaGFudC0+aWdub3JlV29yZCh0b0ltcGwod29yZCktPnN0cmlu
ZygpKTsKK30KKworVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdl
cygpCit7CisgICAgcmV0dXJuIHRleHRDaGVja2VyRW5jaGFudC0+YXZhaWxhYmxlU3BlbGxDaGVj
a2luZ0xhbmd1YWdlcygpOworfQorCit2b2lkIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcykKK3sKKyAgICB0ZXh0Q2hlY2tlckVuY2hh
bnQtPnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMobGFuZ3VhZ2VzKTsKK30KKworVmVjdG9y
PFN0cmluZz4gbG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpCit7CisgICAgcmV0dXJuIHRl
eHRDaGVja2VyRW5jaGFudC0+bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNr
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2Vy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3NGQyZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVj
a2VyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViS2l0VGV4dENo
ZWNrZXJfaAorI2RlZmluZSBXZWJLaXRUZXh0Q2hlY2tlcl9oCisKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKworI2luY2x1ZGUgIlRleHRDaGVja2VyRW5jaGFudC5oIgorI2luY2x1ZGUgIldLQXJy
YXkuaCIKKyNpbmNsdWRlICJXS1BhZ2UuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworLy8gVGhlIGZ1bmN0aW9ucyBtYWlubHkgY2hvb3NlIGJldHdlZW4g
Y2xpZW50J3MgaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxpbmcgYW5kIHRoZSBXZWJLaXQgb25lLgor
CisvLyBDYWxsYmFja3MgcmVxdWlyZWQgYnkgV0tUZXh0Q2hlY2tlci4KK2Jvb2wgaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Citib29sIGlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwor
dm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKTsKK2Jvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wg
ZW5hYmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK3VpbnQ2NF90IHVuaXF1ZVNwZWxs
RG9jdW1lbnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9p
ZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2NF90IHRhZywgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbyk7CisKK3ZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tT
dHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlz
c3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBjaGVja0dyYW1t
YXJPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIFdLQXJyYXlSZWYqIGdy
YW1tYXJEZXRhaWxzLCBpbnQzMl90KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QqIGJhZEdy
YW1tYXJMZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCitib29sIHNwZWxsaW5nVUlJ
c1Nob3dpbmcoY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIHRvZ2dsZVNwZWxsaW5nVUlJ
c1Nob3dpbmcoY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIHVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiBtaXNzcGVsbGVkV29y
ZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIGJhZEdyYW1tYXJQaHJhc2UsIFdL
R3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsK
KworV0tBcnJheVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdv
cmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBsZWFybldvcmQodWludDY0X3QgdGFn
LCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgaWdub3Jl
V29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOworCisvLyBFbmNoYW50J3MgaGVscGVyLgorVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlU3Bl
bGxDaGVja2luZ0xhbmd1YWdlcygpOwordm9pZCB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpOworVmVjdG9yPFN0cmluZz4gbG9hZGVk
U3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorI2VuZGlmIC8vIFdlYktpdFRleHRDaGVja2VyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApp
bmRleCBiMzRmZjc3Li5lOTQ3NzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0zOCw2ICszOCwxMCBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAi
ZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9z
ZXR0aW5ncy5oIgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKQEAgLTEwMyw2ICsxMDcsMTIgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7
CiAjZW5kaWYKICAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9hdHRh
Y2godGhpcyk7CiAgICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2godGhp
cyk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgICAgIGV3a190ZXh0X2NoZWNrZXJfY2xp
ZW50X2F0dGFjaCgpOworICAgICAgICBpZiAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFi
bGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19nZXQoKSkKKyAgICAgICAgICAgIGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldCgwKTsKKyNlbmRp
ZgorCiAgICAgfQogCiAgICAgfl9Fd2tfQ29udGV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMDI0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApAQCAtMCwwICsx
LDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tf
dGV4dF9jaGVja2VyLmgiCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1Rl
eHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJl
d2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
Ly8gSW5pdGlhbGl6ZXMgY2xpZW50J3MgZnVuY3Rpb25zIHRvIEBjIDAgdG8gYmUgc3VyZSB0aGF0
IHRoZXkgYXJlIG5vdCBkZWZpbmVkLgorc3RhdGljIEV3a19UZXh0X0NoZWNrZXIgZXdrVGV4dENo
ZWNrZXJDYWxsYmFjayA9IHsKKyAgICAwLCAvLyB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dl
dAorICAgIDAsIC8vIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UKKyAgICAwLCAvLyBz
dHJpbmdfc3BlbGxpbmdfY2hlY2sKKyAgICAwLCAvLyB1aV9zcGVsbGluZ19zdGF0dXNfZ2V0Cisg
ICAgMCwgLy8gdWlfdG9nZ2xlX3NwZWxsaW5nX3N0YXR1c19nZXQKKyAgICAwLCAvLyB1aV9zcGVs
bGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRlCisgICAgMCwgLy8gd29yZF9ndWVzc2VzX2dldAor
ICAgIDAsIC8vIHdvcmRfbGVhcm4KKyAgICAwIC8vIHdvcmRfaWdub3JlCit9OworCisjZGVmaW5l
IEVXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwgTkFNRSkgIFwKK3ZvaWQg
ZXdrX3RleHRfY2hlY2tlcl8jI05BTUUjI19jYl9zZXQoVFlQRV9OQU1FIGNiKSAgICAgXAoreyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgZXdrVGV4dENoZWNrZXJDYWxsYmFjay5OQU1FID0gY2I7ICAgICAgICAgICAgICAgICAgIFwK
K30KKworLyoqCisgKiBBdHRhY2hlcyBzcGVsbGNoZWNrZXIgZmVhdHVyZS4KKyAqCisgKiBAaW50
ZXJuYWwKKyAqCisgKiBUaGUgZGVmYXVsdCBzcGVsbGNoZWNrZXIgZmVhdHVyZSBpcyBiYXNlZCBv
biBFbmNoYW50IGxpYnJhcnkuCisgKiBDbGllbnQgbWF5IHVzZSBvd24gaW1wbGVtZW50YXRpb24g
b2Ygc3BlbGxjaGVja2VyIHByZXZpb3VzbHkgc2V0CisgKiB0aHJvdWdoIHRoZSBjYWxsYmFjayBm
dW5jdGlvbnMuCisgKi8KK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCkKK3sK
KyAgICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQgPSBmYWxzZTsK
KyAgICBpZiAoZGlkSW5pdGlhbGl6ZVRleHRDaGVja2VyQ2xpZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBXS1RleHRDaGVja2VyQ2xpZW50IHRleHRDaGVja2VyQ2xpZW50ID0geworICAgICAg
ICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICAwLCAvLyBjbGll
bnRJbmZvCisgICAgICAgIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkLAorICAgICAg
ICBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCwKKyAgICAgICAgc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQs
CisgICAgICAgIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQsCisgICAgICAgIHVuaXF1ZVNwZWxs
RG9jdW1lbnRUYWcsCisgICAgICAgIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcsCisgICAgICAg
IGNoZWNrU3BlbGxpbmdPZlN0cmluZywKKyAgICAgICAgY2hlY2tHcmFtbWFyT2ZTdHJpbmcsCisg
ICAgICAgIHNwZWxsaW5nVUlJc1Nob3dpbmcsCisgICAgICAgIHRvZ2dsZVNwZWxsaW5nVUlJc1No
b3dpbmcsCisgICAgICAgIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQsCisgICAg
ICAgIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZywKKyAgICAgICAgZ3Vlc3Nlc0Zv
cldvcmQsCisgICAgICAgIGxlYXJuV29yZCwKKyAgICAgICAgaWdub3JlV29yZAorICAgIH07Cisg
ICAgV0tUZXh0Q2hlY2tlclNldENsaWVudCgmdGV4dENoZWNrZXJDbGllbnQpOworCisgICAgZGlk
SW5pdGlhbGl6ZVRleHRDaGVja2VyQ2xpZW50ID0gdHJ1ZTsKK30KKworLyoKKyAqIEdldHMgdG8g
dGhlIGNsaWVudCdzIGNhbGxiYWNrcy4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBUaGUgY2xp
ZW50J3QgY2FsbGJhY2tzIGFyZSBub3QgZGVmaW5lZCBieSBkZWZhdWx0LgorICogSWYgdGhlIGNs
aWVudCBoYXNuJ3Qgc2V0IHRoZSBjYWxsYmFjaywgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbGJhY2sg
d2lsbAorICogcmV0dXJuIEBjIDAgYW5kIHRoZSBkZWZhdWx0IFdlYktpdCBpbXBsZW1lbnRhdGlv
biB3aWxsIGJlIHVzZWQgZm9yIHRoaXMKKyAqIGZ1bmN0aW9uYWxpdHkuCisgKgorICogQHJldHVy
biB0aGUgc3RydWN0IHdpdGggdGhlIGNsaWVudCdzIGNhbGxiYWNrcy4KKyAqLworRXdrX1RleHRf
Q2hlY2tlciogZXdrVGV4dENoZWNrZXIoKQoreworICAgIHJldHVybiAmZXdrVGV4dENoZWNrZXJD
YWxsYmFjazsKK30KKworI2Vsc2UKKworLy8gRGVmaW5lcyBhbiBlbXB0eSBBUEkgdG8gZG8gbm90
IGJyZWFrIGJ1aWxkLgorI2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBF
X05BTUUsIE5BTUUpICBcCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZ
UEVfTkFNRSkgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorfQorI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorCitF
V0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVs
bF9Eb2N1bWVudF9UYWdfR2V0LCB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCkKK0VXS19U
RVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0Rv
Y3VtZW50X1RhZ19DbG9zZSwgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSkKK0VXS19U
RVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5n
X0NoZWNrLCBzdHJpbmdfc3BlbGxpbmdfY2hlY2spCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1c19HZXQsIHVpX3NwZWxsaW5n
X3N0YXR1c19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVj
a2VyX1VJX1NwZWxsaW5nX1N0YXR1c19Ub2dnbGUsIHVpX3NwZWxsaW5nX3N0YXR1c190b2dnbGUp
CitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxs
aW5nX01pc3NwZWxsZWRfV29yZF9VcGRhdGUsIHVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91
cGRhdGUpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dv
cmRfR3Vlc3Nlc19HZXQsIHdvcmRfZ3Vlc3Nlc19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExC
QUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm4sIHdvcmRfbGVhcm4pCitFV0tfVEVY
VF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlLCB3b3Jk
X2lnbm9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190
ZXh0X2NoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTE1MGRl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3RleHRfY2hlY2tlci5oCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBA
ZmlsZSBld2tfdGV4dF9jaGVja2VyLmgKKyAqIEBicmllZiBQcm92aWRlcyBBUEkgdG8gb3Zlcndy
aXRlIHRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24uCisgKgor
ICogVGhlcmUgaXMgb25lIHNwZWxsY2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0aW9uIGFuZCBp
dCdzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKiBJdCBhbGxvd3MgdG8gY2hlY2sgc3BlbGxpbmcg
aW4gdGhlIGVkaXRhYmxlIGFyZWFzLgorICogSWYgYXBwbGljYXRpb24gd2FudHMgdG8gZW5hYmxl
IHRoZSBmZWF0dXJlLCBBUEkgZnJvbSBAYSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaAorICog
c2hvdWxkIGJlIHVzZWQuCisgKgorICogVGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hlY2tlciBp
bXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICogSXQgZG9l
c24ndCBlbnN1cmUgZ3JhbW1hciBjaGVja2luZy4gQXBwbGljYXRpb24gaXMgYWJsZSB0byBvdmVy
d3JpdGUgdGhlIGRlZmF1bHQKKyAqIFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24g
YnkgZGVmaW5pbmcgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZworICogYXBwcm9w
cmlhdGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorICovCisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tl
cl9oCisjZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfaAorCisjaW5jbHVkZSA8RXZhcy5oPgorCisj
aWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogRGVmaW5l
cyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJldHVybiBhIHRhZyAo
aWRlbnRpZmllcikgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUuCisgKgorICogVW5p
cXVlIHRhZ3MgaGVscCB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggb3RoZXIgb2JqZWN0cyB0aGF0
IGFyZSBjaGVja2VkIGZvciBzcGVsbGluZyBtaXN0YWtlcy4KKyAqCisgKiBAcGFyYW0gbyB0aGUg
dmlldyBvYmplY3QgdG8gZ2V0IHVuaXF1ZSB0YWcKKyAqCisgKiBAcmV0dXJuIHVuaXF1ZSB0YWcg
Zm9yIHRoZSBnaXZlbiBAYSBvIHZpZXcgb2JqZWN0CisgKi8KK3R5cGVkZWYgdWludDY0X3QgKCpF
d2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0KShjb25zdCBFdmFz
X09iamVjdCAqbyk7CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxi
YWNrIGZ1bmN0aW9uIHRvIGNsb3NlIHRoZSBwcnZpb3VzbHkgc2V0IHRhZy4KKyAqCisgKiBUaGlz
IGNhbGxiYWNrIHdpbGwgbm90aWZ5IHRoZSByZWNlaXZlciB0aGF0IHRoZSB1c2VyIGhhcyBmaW5p
c2hlZCB3aXRoIHRoZSB0YWdnZWQgZG9jdW1lbnQuCisgKgorICogQHBhcmFtIHRhZyB0aGUgdGFn
IHRvIGJlIGNsb3NlZAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1VuaXF1
ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UpKHVpbnQ2NF90IHRhZyk7CisKKy8qKgorICogRGVm
aW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNlYXJjaCBmb3Ig
YSBtaXNzcGVsbGVkIHdvcmRzIGluIHRoZSBnaXZlbiBzdHJpbmcuCisgKgorICogQHBhcmFtIHRh
ZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVudCB0
aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBpbiBtb3N0IGNhc2VzIG5vdCBu
ZWNlc3NhcmlseSwganVzdCBmb3IgaWdub3JlZCB3b3JkLAorICogICAgICAgIEBjIDAgY2FuIGJl
IHBhc3NlZCBpbiBmb3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBkb2N1
bWVudAorICogQHBhcmFtIHRleHQgdGhlIHRleHQgY29udGFpbmluZyB0aGUgd29yZHMgdG8gc3Bl
bGxjaGVjaworICogQHBhcmFtIG1pc3NwZWxsaW5nX2xvY2F0aW9uIGEgcG9pbnRlciB0byBzdG9y
ZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtaXNzcGVsbGVkIEBhIHRleHQsIEBjIC0xIGlmIHRoZSBA
YSB0ZXh0IGlzIGNvcnJlY3QKKyAqIEBwYXJhbSBtaXNzcGVsbGluZ19sZW5ndGggYSBwb2ludGVy
IHRvIHN0b3JlIHRoZSBsZW5ndGggb2YgbWlzc3BlbGxlZCBAYSB0ZXh0LCBAYyAwIGlmIHRoZSBA
YSB0ZXh0IGlzIGNvcnJlY3QKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9T
dHJpbmdfU3BlbGxpbmdfQ2hlY2spKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqdGV4dCwgaW50
MzJfdCAqbWlzc3BlbGxpbmdfbG9jYXRpb24sIGludDMyX3QgKm1pc3NwZWxsaW5nX2xlbmd0aCk7
CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9u
IHRvIGdldCB0aGUgc3RhdHVzIG9mIFVJIFNwZWxsaW5nLgorICoKKyAqIEByZXR1cm4gQGMgRUlO
QV9UUlVFIGlmIHRoZSBVSSBTcGVsbGluZyBpcyBzaG93biwgQGMgRUlOQV9GQUxTRSBpZiBpdCdz
IGhpZGRlbgorICovCit0eXBlZGVmIEVpbmFfQm9vbCAoKkV3a19UZXh0X0NoZWNrZXJfVUlfU3Bl
bGxpbmdfU3RhdHVzX0dldCkodm9pZCk7CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBm
b3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRvZ2dsZSB0aGUgVUkgU3BlbGxpbmcuCisgKi8K
K3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfVUlfU3BlbGxpbmdfU3RhdHVzX1RvZ2ds
ZSkodm9pZCk7CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNr
IGZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgVUkgU3BlbGxpbmcgZm9yIHRoZSBtaXNzcGVsbGVkIHdv
cmQuCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hl
Y2tlciB3aGljaCBkb2N1bWVudCB0aGF0IHRoZSBtaXNzcGVsbGVkIHdvcmQgaXMgYXNzb2NpYXRl
ZCwKKyAqIEBwYXJhbSBtaXNzcGVsbGVkX3dvcmQgdGhlIG1pc3NwZWxsZWQgd29yZAorICovCit0
eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX01pc3NwZWxsZWRfV29y
ZF9VcGRhdGUpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqbWlzc3BlbGxlZF93b3JkKTsKKwor
LyoqCisgKiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8g
Z2V0IGEgbGlzdCBvZiBzdWdnZXN0ZWQgc3BlbGxpbmdzIGZvciBhIG1pc3NwZWxsZWQgQGEgd29y
ZC4KKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBzcGVsbCBjaGVj
a2VyIHdoaWNoIGRvY3VtZW50IHRoYXQgQGEgdGV4dCBpcyBhc3NvY2lhdGVkLAorICogICAgICAg
IEBjIDAgY2FuIGJlIHBhc3NlZCBmb3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGlj
dWxhciBkb2N1bWVudAorICogQHBhcmFtIHdvcmQgdGhlIHdvcmQgdG8gZ2V0IGd1ZXNzZXMKKyAq
IEByZXR1cm4gYSBsaXN0IG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJpbmdzIChhcyBjaGFy
KikgYW5kCisgKiAgICAgICAgIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGVzdHJveWluZyB0
aGVtLgorICovCit0eXBlZGVmIEVpbmFfTGlzdCAqKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vl
c3Nlc19HZXQpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7CisKKy8qKgorICogU2V0
cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFkZCB0aGUgd29yZCB0byB0aGUgc3BlbGwgY2hlY2tl
ciBkaWN0aW9uYXJ5LgorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhl
IHNwZWxsIGNoZWNrZXIgd2hpY2ggZG9jdW1lbnQgdGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQs
CisgKiAgICAgICAgQGMgMCBjYW4gYmUgcGFzc2VkIGZvciB0ZXh0IG5vdCBhc3NvY2lhdGVkIHdp
dGggYSBwYXJ0aWN1bGFyIGRvY3VtZW50CisgKiBAcGFyYW0gd29yZCB0aGUgd29yZCB0byBhZGQK
KyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuKSh1aW50NjRf
dCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5j
dGlvbiB0byB0ZWxsIHRoZSBzcGVsbCBjaGVja2VyIHRvIGlnbm9yZSBhIGdpdmVuIHdvcmQuCisg
KgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3
aGljaCBkb2N1bWVudCB0aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBAYyAw
IGNhbiBiZSBwYXNzZWQgZm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIg
ZG9jdW1lbnQKKyAqIEBwYXJhbSB3b3JkIHRoZSB3b3JkIHRvIGlnbm9yZQorICovCit0eXBlZGVm
IHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlKSh1aW50NjRfdCB0YWcsIGNvbnN0
IGNoYXIgKndvcmQpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQg
YSB1bmlxdWUgc3BlbGwgZG9jdW1lbnQgdGFnLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxs
YmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxs
YmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91bmlx
dWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVf
U3BlbGxfRG9jdW1lbnRfVGFnX0dldCBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1
bmN0aW9uIHRvIGNsb3NlIGEgdW5pcXVlIHNwZWxsIGRvY3VtZW50IHRhZy4KKyAqCisgKiBAcGFy
YW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVm
YXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190
ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZV9jYl9zZXQoRXdrX1Rl
eHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlIGNiKTsKKworLyoqCisg
KiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2VhcmNoIGZvciBhIG1pc3NwZWxsZWQgd29y
ZHMgaW4gdGhlIGdpdmVuIHN0cmluZy4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sg
dG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sg
aW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc3RyaW5nX3Nw
ZWxsaW5nX2NoZWNrX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVj
ayBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3Rh
dHVzIG9mIFVJIFNwZWxsaW5nLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBz
ZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBs
ZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91aV9zcGVsbGluZ19z
dGF0dXNfZ2V0X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1c19HZXQg
Y2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0b2dnbGUgdGhlIFVJ
IFNwZWxsaW5nLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMg
TlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlv
bgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91aV9zcGVsbGluZ19zdGF0dXNfdG9n
Z2xlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1c19Ub2dnbGUgY2Ip
OworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB1cGRhdGUgdGhlIFVJIFNw
ZWxsaW5nIGZvciB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBj
YWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBj
YWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91
aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRlX2NiX3NldChFd2tfVGV4dF9DaGVja2Vy
X1VJX1NwZWxsaW5nX01pc3NwZWxsZWRfV29yZF9VcGRhdGUgY2IpOworCisvKioKKyAqIFNldHMg
YSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgYW4gYXJyYXkgb2Ygc3VnZ2VzdGVkIHNwZWxsaW5n
cyBmb3IgYSBtaXNzcGVsbGVkIHdvcmQuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNr
IHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNr
IGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3dvcmRfZ3Vl
c3Nlc19nZXRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldCBjYik7CisK
Ky8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFkZCB0aGUgd29yZCB0byB0aGUg
c3BlbGwgY2hlY2tlciBkaWN0aW9uYXJ5LgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFj
ayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFj
ayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl93b3JkX2xl
YXJuX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm4gY2IpOworCisvKioKKyAqIFNl
dHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0ZWxsIHRoZSBzcGVsbCBjaGVja2VyIHRvIGlnbm9y
ZSBhIGdpdmVuIHdvcmQuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBv
ciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVu
dGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3Nl
dChFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlIGNiKTsKKworI2lmZGVmIF9fY3BsdXNwbHVz
Cit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfdGV4dF9jaGVja2VyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlNDE5YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXJfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3
a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0
ZV9oCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2Vy
LmgiCisKKy8qKgorICogQGJyaWVmIFN0cnVjdHVyZSB0aGF0IGtlZXBzIGNsaWVudCdzIGNhbGxi
YWNrIGZ1bmN0aW9ucy4KKyAqCisgKiBAaW50ZXJuYWwKKyAqLworc3RydWN0IF9Fd2tfVGV4dF9D
aGVja2VyIHsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdf
R2V0IHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0OworICAgIEV3a19UZXh0X0NoZWNrZXJf
VW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19DbG9zZSB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFn
X2Nsb3NlOworICAgIEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrIHN0cmlu
Z19zcGVsbGluZ19jaGVjazsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1
c19HZXQgdWlfc3BlbGxpbmdfc3RhdHVzX2dldDsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VJX1Nw
ZWxsaW5nX1N0YXR1c19Ub2dnbGUgdWlfc3BlbGxpbmdfc3RhdHVzX3RvZ2dsZTsKKyAgICBFd2tf
VGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX01pc3NwZWxsZWRfV29yZF9VcGRhdGUgdWlfc3BlbGxp
bmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZTsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vl
c3Nlc19HZXQgd29yZF9ndWVzc2VzX2dldDsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVh
cm4gd29yZF9sZWFybjsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlIHdvcmRfaWdu
b3JlOworfTsKK3R5cGVkZWYgX0V3a19UZXh0X0NoZWNrZXIgRXdrX1RleHRfQ2hlY2tlcjsKKwor
RXdrX1RleHRfQ2hlY2tlciogZXdrVGV4dENoZWNrZXIoKTsKKworLy8gTWFrZXMgaXQgdmlzaWJs
ZSBmb3IgV1RSLgorRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfY2xpZW50X2F0dGFjaCgpOwor
CisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisjZW5kaWYgLy8gZXdrX3RleHRfY2hlY2tl
cl9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDJhMzJiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3MuY3BwCkBAIC0w
LDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAq
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
ImV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3MuaCIKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQor
I2luY2x1ZGUgIldLVGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlci5o
IgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGlj
IHN0cnVjdCB7CisgICAgYm9vbCBlbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZyA6IDE7Cisg
ICAgYm9vbCBlbmFibGVHcmFtbWFyQ2hlY2tpbmcgOiAxOworICAgIHN0cnVjdCB7CisgICAgICAg
IEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFu
Z2VkIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZDsKKyAgICAgICAgRXdrX1RleHRfQ2hl
Y2tlcl9TZXR0aW5nc19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQgZ3JhbW1hckNoZWNraW5nQ2hh
bmdlZDsKKyAgICB9IHNldHRpbmdzQ2hhbmdlZENhbGxiYWNrczsKKyAgICBWZWN0b3I8U3RyaW5n
PiBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzOworfSBld2tUZXh0Q2hlY2tlclNldHRpbmdzID0geyBm
YWxzZSwgZmFsc2UsIHswLCAwfSwgVmVjdG9yPFN0cmluZz4oKSB9OworCitzdGF0aWMgRWluYV9C
b29sIGlkbGVyQ29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VkKHZvaWQqKQoreworICAgIGlm
IChld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRpbmdzQ2hhbmdlZENhbGxiYWNrcy5jb250aW51
b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQpCisgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3Mu
c2V0dGluZ3NDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCgK
KyAgICAgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3MuZW5hYmxlQ29udGludW91c1NwZWxs
Q2hlY2tpbmcpOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKworc3Rh
dGljIEVpbmFfQm9vbCBpZGxlckdyYW1tYXJDaGVja2luZ0NoYW5nZWQodm9pZCopCit7CisgICAg
aWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3Muc2V0dGluZ3NDaGFuZ2VkQ2FsbGJhY2tzLmdyYW1t
YXJDaGVja2luZ0NoYW5nZWQpCisgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3Muc2V0dGlu
Z3NDaGFuZ2VkQ2FsbGJhY2tzLmdyYW1tYXJDaGVja2luZ0NoYW5nZWQoCisgICAgICAgICAgICBl
d2tUZXh0Q2hlY2tlclNldHRpbmdzLmVuYWJsZUdyYW1tYXJDaGVja2luZyk7CisKKyAgICByZXR1
cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCitzdGF0aWMgRWluYV9Cb29sIGlkbGVyU3Bl
bGxDaGVja2luZ0xhbmd1YWdlc1NldCh2b2lkKikKK3sKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIg
dG8gZGVsZWdhdGUgY2FsbGluZyBvZiB0aGlzIG1ldGhvZCBpbiBXZWJQcm9jZXNzIHRvIGRvIG5v
dCBkZWxheS9ibG9jayBVSVByb2Nlc3MuCisgICAgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdl
cyhld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOworICAgIHJl
dHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisKK3N0YXRpYyB2b2lkIHNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXNTZXQoY29uc3QgVmVjdG9yPFN0cmluZz4mIG5ld0xhbmd1YWdlcykKK3sKKyAg
ICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMgPSBuZXdMYW5n
dWFnZXM7CisgICAgZWNvcmVfaWRsZXJfYWRkKGlkbGVyU3BlbGxDaGVja2luZ0xhbmd1YWdlc1Nl
dCwgMCk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisKK3ZvaWQgZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0
KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFu
Z2VkIGNhbGxiYWNrKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGV3a1RleHRDaGVj
a2VyU2V0dGluZ3Muc2V0dGluZ3NDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nQ2hhbmdlZCA9IGNhbGxiYWNrOworI2VuZGlmCit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nc19ncmFtbWFyX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNr
ZXJfU2V0dGluZ3NfR3JhbW1hcl9DaGVja2luZ19DaGFuZ2VkIGNhbGxiYWNrKQoreworI2lmIEVO
QUJMRShTUEVMTENIRUNLKQorICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3Muc2V0dGluZ3NDaGFu
Z2VkQ2FsbGJhY2tzLmdyYW1tYXJDaGVja2luZ0NoYW5nZWQgPSBjYWxsYmFjazsKKyNlbmRpZgor
fQorCitFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfY29udGludW91
c19zcGVsbF9jaGVja2luZ19nZXQoKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJl
dHVybiBld2tUZXh0Q2hlY2tlclNldHRpbmdzLmVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5n
OworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBld2tfdGV4dF9j
aGVja2VyX3NldHRpbmdzX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldChFaW5h
X0Jvb2wgZW5hYmxlKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGVuYWJsZSA9ICEh
ZW5hYmxlOworICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLmVuYWJsZUNvbnRpbnVvdXNT
cGVsbENoZWNraW5nICE9IGVuYWJsZSkgeworICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdz
LmVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nID0gZW5hYmxlOworCisgICAgICAgIFdLVGV4
dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxl
KTsKKworICAgICAgICAvLyBTZXRzIGRlZmF1bHQgbGFuZ3VhZ2UgaWYgdXNlciBkaWRuJ3Qgc3Bl
Y2lmeSBhbnkuCisgICAgICAgIGlmIChlbmFibGUgJiYgbG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1
YWdlcygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQo
VmVjdG9yPFN0cmluZz4oKSk7CisKKyAgICAgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3Mu
c2V0dGluZ3NDaGFuZ2VkQ2FsbGJhY2tzLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCkK
KyAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChpZGxlckNvbnRpbnVvdXNTcGVsbENoZWNraW5n
Q2hhbmdlZCwgMCk7CisgICAgfQorI2VuZGlmCit9CisKK0VpbmFfQm9vbCBld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdzX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX2dldCgpCit7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyU2V0dGluZ3MuZW5hYmxlR3Jh
bW1hckNoZWNraW5nOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9p
ZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldChF
aW5hX0Jvb2wgZW5hYmxlKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGVuYWJsZSA9
ICEhZW5hYmxlOworICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLmVuYWJsZUdyYW1tYXJD
aGVja2luZyAhPSBlbmFibGUpIHsKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5lbmFi
bGVHcmFtbWFyQ2hlY2tpbmcgPSBlbmFibGU7CisKKyAgICAgICAgV0tUZXh0Q2hlY2tlckdyYW1t
YXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxlKTsKKworICAgICAgICBpZiAoZXdr
VGV4dENoZWNrZXJTZXR0aW5ncy5zZXR0aW5nc0NoYW5nZWRDYWxsYmFja3MuZ3JhbW1hckNoZWNr
aW5nQ2hhbmdlZCkKKyAgICAgICAgICAgIGVjb3JlX2lkbGVyX2FkZChpZGxlckdyYW1tYXJDaGVj
a2luZ0NoYW5nZWQsIDApOworICAgIH0KKyNlbmRpZgorfQorCitFaW5hX0xpc3QqIGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZ3NfYXZhaWxhYmxlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQo
KQoreworICAgIEVpbmFfTGlzdCogbGlzdE9mbGFuZ3VhZ2VzID0gMDsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXMgPSBhdmFpbGFibGVTcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKCk7CisgICAgc2l6ZV90IG51bWJlck9mTGFudWFnZXMgPSBsYW5ndWFn
ZXMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkxhbnVhZ2Vz
OyArK2kpCisgICAgICAgIGxpc3RPZmxhbmd1YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQobGlzdE9m
bGFuZ3VhZ2VzLCBlaW5hX3N0cmluZ3NoYXJlX2FkZChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEo
KSkpOworCisjZW5kaWYKKyAgICByZXR1cm4gbGlzdE9mbGFuZ3VhZ2VzOworfQorCit2b2lkIGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChjb25z
dCBjaGFyKiBsYW5ndWFnZXMpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgVmVjdG9y
PFN0cmluZz4gbmV3TGFuZ3VhZ2VzOworICAgIFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2VzKS5z
cGxpdCgnLCcsIG5ld0xhbmd1YWdlcyk7CisKKyAgICBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0
KG5ld0xhbmd1YWdlcyk7CisjZW5kaWYKK30KKworRWluYV9MaXN0KiBld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKQoreworICAgIEVpbmFfTGlz
dCogbGlzdE9mbGFuZ3VhZ2VzID0gMDsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0
b3I8U3RyaW5nPiBsYW5ndWFnZXMgPSBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cisg
ICAgc2l6ZV90IG51bWJlck9mTGFudWFnZXMgPSBsYW5ndWFnZXMuc2l6ZSgpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkxhbnVhZ2VzOyArK2kpCisgICAgICAgIGxpc3RP
Zmxhbmd1YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQobGlzdE9mbGFuZ3VhZ2VzLCBlaW5hX3N0cmlu
Z3NoYXJlX2FkZChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOworCisjZW5kaWYKKyAgICBy
ZXR1cm4gbGlzdE9mbGFuZ3VhZ2VzOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ODU4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmdz
LmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBF
bGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlIGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZy5oCisgKiBAYnJpZWYgQVBJIGZvciBtYW5pcHVsYXRpbmcgc3BlbGwg
Y2hlY2tlciBmZWF0dXJlLgorICovCisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
X2gKKyNkZWZpbmUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2gKKworI2luY2x1ZGUgPEVpbmEu
aD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAq
IENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5v
dGlmeSB0aGUgY2xpZW50IHdoZW4KKyAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNl
dHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0LgorICoKKyAqIEBwYXJhbSBAYyBFSU5BX1RSVUUg
aWYgY29udGludW91cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkIG9yIEAgRUlOQV9GQUxTRSBp
ZiBpdCdzIGRpc2FibGVkCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU2V0
dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VkKShFaW5hX0Jvb2wgZW5hYmxl
KTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhl
IGNsaWVudCB3aGVuCisgKiB0aGUgZ3JhbW1hciBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2Vk
IGJ5IFdlYktpdC4KKyAqCisgKiBAcGFyYW0gQGMgRUlOQV9UUlVFIGlmIGdyYW1tYXIgY2hlY2tp
bmcgaXMgZW5hYmxlZCBvciBAIEVJTkFfRkFMU0UgaWYgaXQncyBkaXNhYmxlZAorICovCit0eXBl
ZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdzX0dyYW1tYXJfQ2hlY2tpbmdfQ2hh
bmdlZCkoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0
aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhlIGNvbnRpbnVvdXMgc3Bl
bGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogU3BlY2lm
eWluZyBvZiB0aGlzIGNhbGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMg
dG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCisgKiBvbmNlIFdlYktpdCBjaGFuZ2VzIHRoaXMgc2V0
dGluZy4KKyAqIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3RlZCwgdGhpcyBjYWxs
YmFjayBpcyBub3Qgc2V0LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJL
aXQgbGV2ZWwgY2FuIGJlIG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25z
IGluIGEgQ29udGV4dCBNZW51IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2Fs
bGJhY2sgZnVuY3Rpb24gdG8gc2V0IG9yIEBjIE5VTEwgdG8gaW52YWxpZGF0ZSB0aGUgcHJldmlv
dXMgb25lCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5n
c19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZWQgY2IpOworCisvKioKKyAqIFNldHMg
YSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4KKyAqIHRo
ZSBncmFtbWFyIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0LgorICoKKyAq
IFNwZWNpZnlpbmcgb2YgdGhpcyBjYWxsYmFjayBpcyBuZWVkZWQgaWYgdGhlIGFwcGxpY2F0aW9u
IHdhbnRzIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucworICogb25jZSBXZWJLaXQgY2hhbmdlcyB0
aGlzIHNldHRpbmcuCisgKiBJZiB0aGUgYXBwbGljYXRpb24gaXMgbm90IGludGVyZXN0ZWQsIHRo
aXMgY2FsbGJhY2sgaXMgbm90IHNldC4KKyAqIENoYW5naW5nIG9mIHRoaXMgc2V0dGluZyBhdCB0
aGUgV2ViS2l0IGxldmVsIGNhbiBiZSBtYWRlIGFzIGEgcmVzdWx0IG9mIG1vZGlmeWluZworICog
b3B0aW9ucyBpbiBhIENvbnRleHQgTWVudSBieSBhIHVzZXIuCisgKgorICogQHBhcmFtIGNiIGEg
bmV3IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNldCBvciBAYyBOVUxMIHRvIGludmFsaWRhdGUgdGhl
IHByZXZpb3VzIG9uZQorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19n
cmFtbWFyX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ3Nf
R3JhbW1hcl9DaGVja2luZ19DaGFuZ2VkIGNiKTsKKworLyoqCisgKiBRdWVyaWVzIGlmIGNvbnRp
bnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9G
QUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a190ZXh0X2NoZWNr
ZXJfc2V0dGluZ3NfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KHZvaWQpOwor
CisvKioKKyAqIEVuYWJsZXMvZGlzYWJsZXMgY29udGludW91cyBzcGVsbCBjaGVja2luZy4KKyAq
CisgKiBBZGRpdGlvbmFsbHksIHRoaXMgZnVuY3Rpb24gY2FsbHMgYSBjYWxsYmFjayBmdW5jdGlv
biAoaWYgZGVmaW5lZCkgdG8gbm90aWZ5CisgKiB0aGUgY2xpZW50IGFib3V0IHRoZSBjaGFuZ2Ug
b2YgdGhlIHNldHRpbmcuCisgKiBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4K
KyAqCisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2NoYW5nZWRfY2Jfc2V0CisgKgorICogQHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUg
dG8gZW5hYmxlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgb3IgQGMgRUlOQV9GQUxTRSB0byBk
aXNhYmxlCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2VuYWJsZV9j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldChFaW5hX0Jvb2wgZW5hYmxlKTsKKworLyoqCisg
KiBRdWVyaWVzIGlmIGdyYW1tYXIgY2hlY2tpbmcgaXMgZW5hYmxlZC4KKyAqCisgKiBBcHBsaWNh
dGlvbiBtYXkgb3ZlcndyaXRlIHdlYmtpdCBncmFtbWFyIGNoZWNraW5nIGltcGxlbWVudGF0aW9u
IGJ5IHNldHRpbmcgY2FsbGJhY2sgZnVuY3Rpb25zCisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXIu
aAorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGdyYW1tYXIgY2hlY2tpbmcgaXMgZW5h
YmxlZCBvciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLworRUFQSSBFaW5hX0Jv
b2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfZ3JhbW1hcl9jaGVja2luZ19nZXQo
dm9pZCk7CisKKy8qKgorICogRW5hYmxlcy9kaXNhYmxlcyBncmFtbWFyIGNoZWNraW5nLgorICoK
KyAqIEFkZGl0aW9uYWxseSwgdGhpcyBmdW5jdGlvbiBjYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9u
IChpZiBkZWZpbmVkKSB0byBub3RpZnkKKyAqIHRoZSBjbGllbnQgYWJvdXQgdGhlIGNoYW5nZSBv
ZiB0aGUgc2V0dGluZy4KKyAqIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBhbmQgaXMgbm90IHN1
cHBvcnRlZCBieSBXZWJLaXQtRUZMIGJ5IGRlZmF1bHQuCisgKgorICogQHNlZSBld2tfdGV4dF9j
aGVja2VyX3NldHRpbmdfZ3JhbW1hcl9jaGVja2luZ19jaGFuZ2VkX2NiX3NldAorICoKKyAqIEBw
YXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRvIGVuYWJsZSBncmFtbWFyIGNoZWNraW5nIG9yIEBj
IEVJTkFfRkFMU0UgdG8gZGlzYWJsZQorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9z
ZXR0aW5nc19lbmFibGVfZ3JhbW1hcl9jaGVja2luZ19zZXQoRWluYV9Cb29sIGVuYWJsZSk7CisK
Ky8qCisgKiBHZXRzIHRoZSB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGFuZCBpbnN0YWxsZWQg
c3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIHRvIHVzZS4KKyAqCisgKiBAc2VlIGV3a190ZXh0X2No
ZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0CisgKgorICogQHJldHVy
biB0aGUgbGlzdCB3aXRoIGF2YWlsYWJsZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMsIG9yIEBj
IE5VTEwgb24gZmFpbHVyZQorICogICAgICAgICB0aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMg
c2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1c2UgZWluYV9zdHJpbmdzaGFyZV9kZWwoKQorICovCitF
QVBJIEVpbmFfTGlzdCAqZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19hdmFpbGFibGVfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCh2b2lkKTsKKworLyoqCisgKiBTZXRzIEBhIGxhbmd1YWdl
cyBhcyB0aGUgbGlzdCBvZiBsYW5ndWFnZXMgdG8gdXNlIGJ5IGRlZmF1bHQgV2ViS2l0CisgKiBp
bXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNrZXIgZmVhdHVyZSB3aXRoIEVuY2hhbnQgbGlicmFy
eSBzdXBwb3J0LgorICoKKyAqIElmIEBsYW5ndWFnZXMgaXMgQGMgTlVMTCwgdGhlIGRlZmF1bHQg
bGFuZ3VhZ2UgaXMgdXNlZC4KKyAqIElmIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGNhbiBub3QgYmUg
ZGV0ZXJtaW5lZCB0aGVuIGFueSBhdmFpbGFibGUgZGljdGlvbmFyeSB3aWxsIGJlIHVzZWQuCisg
KgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBpbnZhbGlkYXRlcyB0aGUgcHJldmlvdXNseSBzZXQg
bGFuZ3VhZ2VzLgorICogICAgICAgVGhlIGRpY3Rpb25hcmllcyBhcmUgcmVxdWVzdGVkIGFzeW5j
aHJvbm91c2x5LgorICoKKyAqIEBwYXJhbSBsYW5ndWFnZXMgYSBsaXN0IG9mIGNvbW1hICgnLCcp
IHNlcGFyYXRlZCBsYW5ndWFnZSBjb2RlcworICogICAgICAgIG9mIHRoZSBmb3JtICdlbl9VUycs
IGllLCBsYW5ndWFnZV9WQVJJQU5ULCBtYXkgYmUgQGMgTlVMTC4KKyAqLworRUFQSSB2b2lkIGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChjb25z
dCBjaGFyICpsYW5ndWFnZXMpOworCisvKgorICogR2V0cyB0aGUgdGhlIGxpc3Qgb2YgdGhlIHNw
ZWxsIGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1c2UuCisgKgorICogQHNlZSBld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdfYXZhaWxhYmxlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQKKyAqIEBz
ZWUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQK
KyAqCisgKiBAcmV0dXJuIHRoZSBsaXN0IHdpdGggdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdl
cyBpbiB1c2UsCisgKiAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQg
YmUgZnJlZWQgYWZ0ZXIsIHVzZSBlaW5hX3N0cmluZ3NoYXJlX2RlbCgpCisgKi8KK0VBUEkgRWlu
YV9MaXN0ICpld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
c19nZXQodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAv
LyBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAppbmRleCA3NWE4YTk5Li41OTlkYzU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcApAQCAtMSw1
ICsxLDcgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5
cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI5LDkgQEAKICNp
bmNsdWRlICJUZXh0Q2hlY2tlci5oIgogCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpZiBFTkFCTEUoU1BFTExDSEVD
SykKKyNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlci5oIgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCkBAIC0zNyw5MSArNDEsMTQ0IEBAIHN0YXRpYyBUZXh0Q2hlY2tlclN0YXRl
IHRleHRDaGVja2VyU3RhdGU7CiAKIGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIFRleHRDaGVja2Vy
OjpzdGF0ZSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVD
SykKKyAgICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplU3RhdGUgPSBmYWxzZTsKKyAgICBpZiAo
ZGlkSW5pdGlhbGl6ZVN0YXRlKQorICAgICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKKwor
ICAgIFdlYlRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQgPSBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQgPSBjbGllbnQuY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Cisg
ICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBjbGllbnQuZ3Jh
bW1hckNoZWNraW5nRW5hYmxlZCgpOworCisgICAgZGlkSW5pdGlhbGl6ZVN0YXRlID0gdHJ1ZTsK
KyNlbmRpZgogICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwogfQogCiBib29sIFRleHRDaGVj
a2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAg
cmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY29udGludW91c1NwZWxs
Q2hlY2tpbmdBbGxvd2VkKCk7CisjZWxzZQorICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0K
IAotdm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJv
b2wpCit2b2lkIFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
Ym9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGlmIChzdGF0ZSgpLmlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7
CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworI2Vu
ZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9v
bCkKK3ZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFC
TEUoU1BFTExDSEVDSykKKyAgICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQg
PT0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0
Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZDsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1t
YXJDaGVja2luZ0VuYWJsZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKKyNlbmRpZgogfQog
Ci12b2lkIFRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNo
YW5nZWQoYm9vbCAvKmVuYWJsZWQqLykKK3ZvaWQgVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICB0ZXh0Q2hlY2tlclN0YXRl
LmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNlbmRpZgogfQog
Ci12b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJv
b2wgLyplbmFibGVkKi8pCit2b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVk
U3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lm
IEVOQUJMRShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkID0gZW5hYmxlZDsKKyNlbmRpZgogfQogCi1pbnQ2NF90IFRleHRDaGVja2VyOjp1
bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSopCitpbnQ2NF90IFRleHRDaGVja2Vy
Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7
CisjZWxzZQogICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNs
b3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCkKK3ZvaWQgVGV4dENoZWNrZXI6OmNsb3Nl
U3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKKyNlbmRpZgogfQogCi12
b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNo
YXIqLCB1aW50MzJfdCwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBUZXh0Q2hlY2tlcjo6Y2hl
Y2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIq
IHRleHQsIHVpbnQzMl90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50
MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgp
LmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVu
Z3RoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworI2VuZGlmCiB9
CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIGNvbnN0
IFVDaGFyKiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMy
X3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0
aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50MzJfdCYgYmFkR3Jh
bW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBT
dHJpbmcodGV4dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwg
YmFkR3JhbW1hckxlbmd0aCk7CisjZW5kaWYKIH0KIAogYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxp
bmdVSUlzU2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5z
cGVsbGluZ1VJSXNTaG93aW5nKCk7CisjZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgog
fQogCiB2b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOwor
I2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3Bl
bGxlZFdvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0
ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBj
b25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNwZWxsRG9jdW1lbnRUYWcs
IG1pc3NwZWxsZWRXb3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
R3JhbW1hckRldGFpbCYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdy
YW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdy
YW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hl
Y2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
ZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKKyNl
bmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90LCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit2b2lkIFRleHRD
aGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3NlcykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQor
ICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3Bl
bGxEb2N1bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hl
Y2tlcjo6bGVhcm5Xb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2Vy
OjpsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50
VGFnLCB3b3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGlu
dDY0X3QsIGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0
X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworI2Vu
ZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtl
L0ZpbmRFbmNoYW50LmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OWM3MWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UKQEAgLTAsMCArMSw0MyBAQAorIyAtIFRy
eSB0byBmaW5kIEVuY2hhbnQKKyMgT25jZSBkb25lLCB0aGlzIHdpbGwgZGVmaW5lCisjCisjICBF
TkNIQU5UX0lOQ0xVREVfRElSUyAtIHRoZSBFbmNoYW50IGluY2x1ZGUgZHJlY3RvcmllcworIyAg
RU5DSEFOVF9MSUJSQVJJRVMgLSBsaW5rIHRoZXNlIHRvIHVzZSBFbmNoYW50CisjCisjIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTCisjIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1Ig
SVRTCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOwor
IyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwKKyMgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyMgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorIyBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworRklORF9QQUNLQUdF
KFBrZ0NvbmZpZykKK1BLR19DSEVDS19NT0RVTEVTKFBDX0VOQ0hBTlQgZW5jaGFudCkKKworRklO
RF9QQVRIKEVOQ0hBTlRfSU5DTFVERV9ESVJTCisgICAgTkFNRVMgZW5jaGFudC5oCisgICAgUEFU
SFMgJHtQQ19FTkNIQU5UX0lOQ0xVREVESVJ9CisgICAgICAgICAgJHtQQ19FTkNIQU5UX0lOQ0xV
REVfRElSU30KKykKKworRklORF9MSUJSQVJZKEVOQ0hBTlRfTElCUkFSSUVTCisgICAgTkFNRVMg
ZW5jaGFudAorICAgIFBBVEhTICR7UENfRU5DSEFOVF9MSUJESVJ9CisgICAgICAgICAgJHtQQ19F
TkNIQU5UX0xJQlJBUllfRElSU30KKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25z
RWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggNTQ5MDU2YS4u
ZjFlYmE4YSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIGIv
U291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTE2OCwzICsxNjgsOCBAQCBJRiAoV1RG
X1VTRV9USUxFRF9CQUNLSU5HX1NUT1JFKQogICBGSU5EX1BBQ0tBR0UoT3BlbkdMIFJFUVVJUkVE
KQogRU5ESUYoKQogCitPUFRJT04oRU5BQkxFX1NQRUxMQ0hFQ0sgIkVuYWJsZSBzcGVsbGNoZWNr
aW5nIGZlYXR1cmUgKHJlcXVpcmVzIGVuY2hhbnQpIiBPTikKK0lGIChFTkFCTEVfU1BFTExDSEVD
SykKKyAgICAgIEZJTkRfUEFDS0FHRShFbmNoYW50IFJFUVVJUkVEKQorICAgICAgQUREX0RFRklO
SVRJT05TKC1ERU5BQkxFX1NQRUxMQ0hFQ0s9MSkKK0VORElGKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165377</attachid>
            <date>2012-09-24 07:28:06 -0700</date>
            <delta_ts>2012-09-27 02:28:02 -0700</delta_ts>
            <desc>fixing coding style</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>62710</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA0MzFmNjMyLi5iMGFmZTc2
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDktMjQgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYXNtdW5nLmNvbT4KKworICAgICAgICBbV0syXVtFRkxd
IEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNwZWxsY2hlY2tpbmcgZmVh
dHVyZSBmb3IgV0syLUVmbC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kRW5jaGFudC5j
bWFrZTogQWRkZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2U6IERl
ZmluZSBTUEVMTENIRUNLIG1hY3JvLgorCiAyMDEyLTA5LTI0ICBWaXZlayBHYWxhdGFnZSAgPHZp
dmVrZ2FsYXRhZ2VAZ21haWwuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGltcGxlbWVu
dCB0ZXN0aW5nIGhhcm5lc3MgZm9yIHB1cmUgcHJvdG9jb2wgdGVzdHMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2YzNjYxYS4uZmFmNjUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA5LTI0
ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFs
IFJvaiA8bS5yb2pAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBJbXBsZW1lbnRh
dGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBl
bmNoYW50LXJlbGF0ZWQgY29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRocyBhbmQgdGhlIGxpYnJh
cnkgZmxhZy4KKwogMjAxMi0wOS0yNCAgUGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5j
b20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogZG9uJ3QgYWxsb3cgZXhjZXB0aW9uIGluIGZy
b250LWVuZCB3aGVuIGV4cGFuZGluZyBmdW5jdGlvbiBzY29wZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5j
bWFrZQppbmRleCA3MGQ2OGQ3Li40ZGU0ODk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpA
QCAtODIsNiArODIsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0v
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVgu
Y3BwCiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwu
Y3BwCisgIHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCiApCiAK
IElGIChFTkFCTEVfQkFUVEVSWV9TVEFUVVMpCkBAIC0zMjksMyArMzMwLDExIEBAIElGIChFTkFC
TEVfV0VCX0FVRElPKQogICBBRERfREVGSU5JVElPTlMoLURVTklOU1RBTExFRF9BVURJT19SRVNP
VVJDRVNfRElSPSIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9hdWRpby9yZXNvdXJjZXMiKQogRU5E
SUYgKCkKIAorSUYgKEVOQUJMRV9TUEVMTENIRUNLKQorICAgIExJU1QoQVBQRU5EIFdlYkNvcmVf
SU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAke0VOQ0hBTlRfSU5DTFVERV9ESVJTfQorICAg
ICkKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAke0VOQ0hBTlRf
TElCUkFSSUVTfQorICAgICkKK0VORElGKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzYmM4NWRjLi44YzNhOThl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIxIEBACisyMDEyLTA5LTI0ICBHcnplZ29yeiBDemFq
a293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFsIFJvaiA8bS5yb2pAc2Ft
c3VuZy5jb20+CisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2luZyBmZWF0
dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE4
NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
c3BlbGxpbmcgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDItRUZMIHRoYXQgaXMgYmFzZWQgb24g
RW5jaGFudCBsaWJyYXJ5LgorCisgICAgICAgIEFkZGl0aW9uYWxseSB0aGUgcGF0Y2ggcHJvdmlk
ZXMgQVBJIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxl
bWVudGF0aW9uCisgICAgICAgIGFzIEVuY2hhbnQgbGlicmFyeSBkb2Vzbid0IGVuc3VyZSBncmFt
bWFyIGNoZWNraW5nLgorICAgICAgICBBcHBsaWNhdGlvbiBpcyBhYmxlIHRvIG92ZXJ3cml0ZSBp
dCAoYm90aCBncmFtbWFyIGFuZCBzcGVsbCBjaGVja2luZykgYnkgZGVmaW5pbmcKKyAgICAgICAg
aXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZyBhcHByb3ByaWF0ZSBjYWxsYmFjayBm
dW5jdGlvbnMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgQWRkIGVu
Y2hhbnQtcmVsYXRlZCBjb21waWxlciBmbGFnczogaGVhZGVyIHBhdGhzIGFuZCB0aGUgbGlicmFy
eSBmbGFnLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaDoKKyAgICAg
ICAgQWRkIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgQVBJIHRvIHRoZSBtYWluIFdlYktpdDItRUZM
J3MgaGVhZGVyIHRvIGJlIGF2YWlsYWJsZSBmb3IgYXBwbGljYXRpb25zLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNhbGxiYWNrcyBmdW5jdGlvbnMgb2YgV0tUZXh0Q2hlY2tlci4KKworICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Fs
bG93ZWQpOgorICAgICAgICAoV2ViS2l0Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6
CisgICAgICAgIChXZWJLaXQ6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChX
ZWJLaXQ6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0Ojp1bmlx
dWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6Y2xvc2VTcGVsbERvY3VtZW50
V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6c3Bl
bGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OnRvZ2dsZVNwZWxsaW5nVUlJc1No
b3dpbmcpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRX
b3JkKToKKyAgICAgICAgKFdlYktpdDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KToKKyAgICAgICAgKFdlYktpdDo6Z3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0Ojps
ZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjppZ25vcmVXb3JkKToKKyAgICAgICAgVGhvc2Ug
bWV0aG9kcyBhcmUgZGlyZWN0bHkgZ2l2ZW4gYXMgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciBXS1Rl
eHRDaGVja2VyJ3MgY2xpZW50LgorICAgICAgICBUaGV5IGNob29zZSBiZXR3ZWVuIFdlYktpdCdz
IHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGFuZCBjbGllbnQncyBvbmVzLgorCisgICAgICAgIChX
ZWJLaXQ6OmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAoV2ViS2l0
Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6bG9hZGVk
U3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFRoZXkgYXJlIHVzZWQgYnkgZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5ncy5jcHAgZmlsZSBhbmQgYWxsb3cgdG8gZG8gbm90CisgICAgICAg
IGV4cG9zZSAnbV90ZXh0Q2hlY2tlckVuY2hhbnQnLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSB0aGUgZnVu
Y3Rpb25zIHdoaWNoIGNob29zZXMgYmV0d2VlbiBjbGllbnQncyBpbXBsZW1lbnRhdGlvbiBvZiBz
cGVsbGluZyBhbmQgdGhlIFdlYktpdCBvbmUuCisKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoX0V3a19Db250
ZXh0OjpfRXdrX0NvbnRleHQpOgorICAgICAgICBJbml0aWFsaXplIHNwZWxsY2hlY2tlciBmZWF0
dXJlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHA6
IEFkZGVkLgorICAgICAgICAoZXdrVGV4dENoZWNrZXIpOgorICAgICAgICBHZXQgdGhlIGNsaWVu
dCdzIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSBBUEkgdG8gc2V0IHRoZSBj
bGllbnQncyBvd24gc3BlbGxpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChf
RXdrX1RleHRfQ2hlY2tlcik6CisgICAgICAgIERlZmluZSBzdHJ1Y3Qgd2l0aCBjbGllbnQncyBj
YWxsYmFja3MgcmVzcG9uaXNibGUgZm9yIHNwZWxsaW5nLgorCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5jcHA6IEFkZGVkLgorICAgICAgICAo
aWRsZXJHcmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKToKKyAgICAgICAgKGlkbGVyU3BlbGxDaGVja2lu
Z0xhbmd1YWdlc1NldCk6CisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBpcyBub3RpZmllZCBhYm91
dCBzcGVsbGluZyBzZXR0aW5ncyBjaGFuZ2UgKHRoZXkgbWF5IGJlIGNoYW5nZWQKKyAgICAgICAg
dGhyb3VnaCBjb250ZXh0IG1lbnUgb3B0aW9uKSBvbiBpZGxlciB0byBkbyBub3QgYmxvY2sgV2Vi
S2l0LgorCisgICAgICAgIChzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KToKKyAgICAgICAgVGhl
IGRpY3Rpb25hcmllcyBhcmUgcmVxdWVzdGVkIG9uIGlkbGVyIHRvIGRvIG5vdCBibG9jayBXZWJL
aXQuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfY29udGludW91c19zcGVs
bF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdzX2dyYW1tYXJfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQpOgorICAgICAgICBTZXQgdGhl
IGNhbGxiYWNrIGZ1bmN0aW9ucyB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4gdGhlIHNw
ZWxsaW5nIHNldHRpbmdzCisgICAgICAgIHdlcmUgY2hhbmdlZCBieSBXZWJLaXQuCisKKyAgICAg
ICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfZ2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfc2V0KToKKyAgICAgICAgQVBJIHRvIHNldC9nZXQgdGhl
IGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJf
c2V0dGluZ3NfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KToKKyAgICAgICAgKGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KToKKyAgICAgICAg
QVBJIHRvIHNldC9nZXQgdGhlIGdyYW1tYXIgY2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZ3NfYXZhaWxhYmxlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQp
OgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5n
dWFnZXNfc2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Nfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzX2dldCk6CisgICAgICAgIEFQSSB0byBzZXQvZ2V0IGxhbmd1YWdlcyB0
byB1c2UgYnkgV2ViS2l0IGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Mu
aDogQWRkZWQuCisgICAgICAgIEFkZCBBUEkgZm9yIG1hbmlwdWxhdGluZyBzcGVsbCBjaGVja2Vy
IGZlYXR1cmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFt
bWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hl
Y2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRD
aGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hl
Y2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOiBSZW1vdmUgV2ViQ29yZSBuYW1hc3BhY2UgYXMg
aXQncyBhbHJlYWR5IGRlZmluZWQgZm9yIHRoZSB3aG9sZSBmaWxlLgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjppZ25vcmVXb3JkKToKKyAgICAgICAgVGhvc2UgY2FsbCBXS1RleHRDaGVj
a2VyIGNsaWVudCBtZXRob2RzLgorCiAyMDEyLTA5LTI0ICBCeXVuZ3dvbyBMZWUgIDxidzgwLmxl
ZUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIENoYW5nZSB0aGUgaW5zdGFsbCBw
YXRoIGZvciBsaWJld2syVW5pdFRlc3RJbmplY3RlZEJ1bmRsZVNhbXBsZS5zby4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKaW5kZXggZTc3MmUzOC4uMjMzM2UwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UKQEAgLTQwLDYgKzQwLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvTmV0d29ya0luZm9Qcm92aWRlci5jcHAKICAgICBVSVByb2Nl
c3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9WaWJy
YXRpb25Qcm92aWRlci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tl
ci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCiAg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC01NCw2ICs1NSw4IEBAIExJU1Qo
QVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0
aW9uX3BvbGljeV9kZWNpc2lvbi5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfcG9wdXBf
bWVudV9pdGVtLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKKyAg
ICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcAorICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3MuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3VybF9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVz
cG9uc2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5j
cHAKQEAgLTEyMSw2ICsxMjQsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZWZsIgogICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vbmV0d29yay9zb3VwIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0L2VuY2hh
bnQiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2Zy9ncmFwaGljcyIKICAgICAiJHtXRUJLSVQyX0RJ
Un0vU2hhcmVkL2VmbCIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL3NvdXAiCkBAIC0yMjMs
NiArMjI3LDggQEAgU0VUIChFV2ViS2l0Ml9IRUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNp
b24uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19wb3B1cF9tZW51X2l0ZW0uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oIgorICAgICIke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oIgorICAgICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5ncy5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3RvdWNoLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElS
fS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3JlcXVlc3QuaCIKICAgICAiJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuaCIKQEAg
LTMyNywzICszMzMsMTIgQEAgSUYgKEVOQUJMRV9JTlNQRUNUT1IpCiAgICAgICAgICAgICAgICAg
ICAgICAgIFBBVFRFUk4gIiouZ2lmIgogICAgICAgICAgICAgICAgICAgICAgICBQQVRURVJOICIq
LnBuZyIpCiBFTkRJRiAoKQorCitJRiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisgICAgTElTVChBUFBF
TkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICR7RU5DSEFOVF9JTkNMVURF
X0RJUlN9CisgICAgKQorICAgIExJU1QoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCisgICAgICAg
ICR7RU5DSEFOVF9MSUJSQVJJRVN9CisgICAgKQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5kZXggMTNlZmFiMS4uMDJkMjIxZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC00MCw2ICs0MCw4
IEBACiAjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmgiCiAjaW5jbHVk
ZSAiZXdrX3BvcHVwX21lbnVfaXRlbS5oIgogI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgorI2lu
Y2x1ZGUgImV3a190ZXh0X2NoZWNrZXIuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiZXdrX3RvdWNoLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhN2I0MzQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKQEAg
LTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJv
bmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwor
ICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRl
ICJXS011dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiZXdrX3Rl
eHRfY2hlY2tlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
cy5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIE93
blB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ+IHRleHRDaGVja2VyRW5jaGFudCA9IFdl
YkNvcmU6OlRleHRDaGVja2VyRW5jaGFudDo6Y3JlYXRlKCk7CitzdGF0aWMgRXdrX1RleHRfQ2hl
Y2tlciogZXdrVGV4dENoZWNrZXJDYWxsYmFjayA9IGV3a1RleHRDaGVja2VyKCk7CisKK2Jvb2wg
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoY29uc3Qgdm9pZCopCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBub3QgY2FsbGVkIGJ5IFdlYktp
dDIvV2ViQ29yZS4gSnVzdCBrZWVwIGl0IGZvciBBUEkgY29tcGF0aWJpbGl0eS4KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29u
c3Qgdm9pZCopCit7CisgICAgcmV0dXJuIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxl
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCk7Cit9CisKK3ZvaWQgc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCopCit7CisgICAg
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19zZXQoZW5hYmxlZCk7Cit9CisKK2Jvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGNvbnN0
IHZvaWQqKQoreworICAgIHJldHVybiBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2VuYWJsZV9n
cmFtbWFyX2NoZWNraW5nX2dldCgpOworfQorCit2b2lkIHNldEdyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkKikKK3sKKyAgICBld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdzX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldChlbmFibGVkKTsKK30KKwordWludDY0
X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCopCit7
CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90
YWdfZ2V0KQorICAgICAgICByZXR1cm4gZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+dW5pcXVlX3Nw
ZWxsX2RvY3VtZW50X3RhZ19nZXQodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpOworCisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0
YWcsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT51bmlx
dWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxi
YWNrLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKHRhZyk7Cit9CisKK3ZvaWQgY2hl
Y2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJf
dCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0
IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT5zdHJpbmdfc3BlbGxp
bmdfY2hlY2spCisgICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnN0cmluZ19zcGVsbGlu
Z19jaGVjayh0YWcsIHRvSW1wbCh0ZXh0KS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIGVsc2UKKyAgICAgICAgdGV4
dENoZWNrZXJFbmNoYW50LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodG9JbXBsKHRleHQpLT5zdHJp
bmcoKSwgKm1pc3NwZWxsaW5nTG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK3Zv
aWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcodWludDY0X3QsIFdLU3RyaW5nUmVmLCBXS0FycmF5UmVm
KiwgaW50MzJfdCosIGludDMyX3QqLCBjb25zdCB2b2lkKikKK3sKKyAgICAvLyBGSVhNRTogY2Fs
bCBjbGllbnQncyBmdW5jdGlvbi4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIHNw
ZWxsaW5nVUlJc1Nob3dpbmcoY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2Vy
Q2FsbGJhY2stPnVpX3NwZWxsaW5nX3N0YXR1c19nZXQpCisgICAgICAgIHJldHVybiBld2tUZXh0
Q2hlY2tlckNhbGxiYWNrLT51aV9zcGVsbGluZ19zdGF0dXNfZ2V0KCk7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgdG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZyhjb25zdCB2b2lkKikK
K3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+dWlfc3BlbGxpbmdfc3RhdHVzX3Rv
Z2dsZSkKKyAgICAgICAgZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+dWlfc3BlbGxpbmdfc3RhdHVz
X3RvZ2dsZSgpOworfQorCit2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQo
dWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiBtaXNzcGVsbGVkV29yZCwgY29uc3Qgdm9pZCopCit7
CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnVpX3NwZWxsaW5nX21pc3NwZWxsZWRf
d29yZF91cGRhdGUpCisgICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnVpX3NwZWxsaW5n
X21pc3NwZWxsZWRfd29yZF91cGRhdGUodGFnLCB0b0ltcGwobWlzc3BlbGxlZFdvcmQpLT5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1t
YXJTdHJpbmcodWludDY0X3QsIFdLU3RyaW5nUmVmLCBXS0dyYW1tYXJEZXRhaWxSZWYsIGNvbnN0
IHZvaWQqKQoreworICAgIC8vIEZJWE1FOiBjYWxsIGNsaWVudCdzIGZ1bmN0aW9uLgorICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK1dLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3Qg
dGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBXS011dGFibGVBcnJh
eVJlZiBzdWdnZXN0aW9uc0ZvcldvcmQgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOworCisgICAg
aWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPndvcmRfZ3Vlc3Nlc19nZXQpIHsKKyAgICAgICAg
RWluYV9MaXN0KiBsaXN0ID0gZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+d29yZF9ndWVzc2VzX2dl
dCh0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHZv
aWQqIGl0ZW07CisKKyAgICAgICAgRUlOQV9MSVNUX0ZSRUUobGlzdCwgaXRlbSkgeworICAgICAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RhdGljX2Nhc3Q8Y2hhcio+KGl0ZW0pKSk7CisgICAg
ICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24u
Z2V0KCkpOworICAgICAgICAgICAgZnJlZShpdGVtKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNl
IHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IHRleHRDaGVja2VyRW5jaGFudC0+
Z2V0R3Vlc3Nlc0ZvcldvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7CisgICAgICAgIHNpemVf
dCBudW1iZXJPZkd1ZXNzZXMgPSBndWVzc2VzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkd1ZXNzZXM7ICsraSkgeworICAgICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoZ3Vlc3Nlc1tpXS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgICAgICBXS0FycmF5
QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHN1Z2dlc3Rpb25zRm9yV29yZDsKK30KKwordm9pZCBs
ZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sK
KyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+d29yZF9sZWFybikKKyAgICAgICAgZXdr
VGV4dENoZWNrZXJDYWxsYmFjay0+d29yZF9sZWFybih0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgZWxzZQorICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQt
PmxlYXJuV29yZCh0b0ltcGwod29yZCktPnN0cmluZygpKTsKK30KKwordm9pZCBpZ25vcmVXb3Jk
KHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYg
KGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPndvcmRfaWdub3JlKQorICAgICAgICBld2tUZXh0Q2hl
Y2tlckNhbGxiYWNrLT53b3JkX2lnbm9yZSh0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgZWxzZQorICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQtPmlnbm9y
ZVdvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IGF2YWls
YWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQoreworICAgIHJldHVybiB0ZXh0Q2hlY2tlckVu
Y2hhbnQtPmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK30KKwordm9pZCB1cGRh
dGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMp
Cit7CisgICAgdGV4dENoZWNrZXJFbmNoYW50LT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KGxhbmd1YWdlcyk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMoKQoreworICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQtPmxvYWRlZFNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjA4NzRkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYktpdFRleHRDaGVja2VyX2gKKyNkZWZpbmUgV2ViS2l0VGV4dENoZWNr
ZXJfaAorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckVu
Y2hhbnQuaCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tQYWdlLmgiCisjaW5j
bHVkZSAiV0tTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRoZSBmdW5jdGlv
bnMgbWFpbmx5IGNob29zZSBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9uIG9mIHNwZWxs
aW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KKworLy8gQ2FsbGJhY2tzIHJlcXVpcmVkIGJ5IFdLVGV4
dENoZWNrZXIuCitib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pOworYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Citib29sIGlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgc2V0R3Jh
bW1hckNoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OworCit1aW50NjRfdCB1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdLUGFnZVJlZiBwYWdlLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50
NjRfdCB0YWcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCit2b2lkIGNoZWNrU3BlbGxpbmdP
ZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxs
aW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKTsKK3ZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmlu
Z1JlZiB0ZXh0LCBXS0FycmF5UmVmKiBncmFtbWFyRGV0YWlscywgaW50MzJfdCogYmFkR3JhbW1h
ckxvY2F0aW9uLCBpbnQzMl90KiBiYWRHcmFtbWFyTGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKKworYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Owordm9pZCB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Owordm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHVpbnQ2NF90IHRhZywg
V0tTdHJpbmdSZWYgbWlzc3BlbGxlZFdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9p
ZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmlu
Z1JlZiBiYWRHcmFtbWFyUGhyYXNlLCBXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbCwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK1dLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQodWlu
dDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3Zv
aWQgbGVhcm5Xb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7Cit2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3
b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKworLy8gRW5jaGFudCdzIGhlbHBlci4KK1Zl
Y3RvcjxTdHJpbmc+IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK3ZvaWQgdXBk
YXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2Vz
KTsKK1ZlY3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKyNlbmRp
ZiAvLyBXZWJLaXRUZXh0Q2hlY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggYjM0ZmY3Ny4uZTk0Nzc3MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtMzgs
NiArMzgsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2lmIEVOQUJM
RShTUEVMTENIRUNLKQorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3MuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC0xMDMsNiArMTA3LDEy
IEBAIHN0cnVjdCBfRXdrX0NvbnRleHQgewogI2VuZGlmCiAgICAgICAgIGV3a19jb250ZXh0X3Jl
cXVlc3RfbWFuYWdlcl9jbGllbnRfYXR0YWNoKHRoaXMpOwogICAgICAgICBld2tfY29udGV4dF9k
b3dubG9hZF9jbGllbnRfYXR0YWNoKHRoaXMpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAg
ICAgICBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9hdHRhY2goKTsKKyAgICAgICAgaWYgKGV3a190
ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0
KCkpCisgICAgICAgICAgICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX3NwZWxsX2NoZWNraW5n
X2xhbmd1YWdlc19zZXQoMCk7CisjZW5kaWYKKwogICAgIH0KIAogICAgIH5fRXdrX0NvbnRleHQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRf
Y2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjAyNDIzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlci5jcHAKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgorCisjaWYgRU5BQkxFKFNQ
RUxMQ0hFQ0spCisjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgIldlYktpdFRl
eHRDaGVja2VyLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8vIEluaXRpYWxpemVzIGNsaWVudCdzIGZ1bmN0aW9u
cyB0byBAYyAwIHRvIGJlIHN1cmUgdGhhdCB0aGV5IGFyZSBub3QgZGVmaW5lZC4KK3N0YXRpYyBF
d2tfVGV4dF9DaGVja2VyIGV3a1RleHRDaGVja2VyQ2FsbGJhY2sgPSB7CisgICAgMCwgLy8gdW5p
cXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQKKyAgICAwLCAvLyB1bmlxdWVfc3BlbGxfZG9jdW1l
bnRfdGFnX2Nsb3NlCisgICAgMCwgLy8gc3RyaW5nX3NwZWxsaW5nX2NoZWNrCisgICAgMCwgLy8g
dWlfc3BlbGxpbmdfc3RhdHVzX2dldAorICAgIDAsIC8vIHVpX3RvZ2dsZV9zcGVsbGluZ19zdGF0
dXNfZ2V0CisgICAgMCwgLy8gdWlfc3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZQorICAg
IDAsIC8vIHdvcmRfZ3Vlc3Nlc19nZXQKKyAgICAwLCAvLyB3b3JkX2xlYXJuCisgICAgMCAvLyB3
b3JkX2lnbm9yZQorfTsKKworI2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChU
WVBFX05BTUUsIE5BTUUpICBcCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0
KFRZUEVfTkFNRSBjYikgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2suTkFNRSA9
IGNiOyAgICAgICAgICAgICAgICAgICBcCit9CisKKy8qKgorICogQXR0YWNoZXMgc3BlbGxjaGVj
a2VyIGZlYXR1cmUuCisgKgorICogQGludGVybmFsCisgKgorICogVGhlIGRlZmF1bHQgc3BlbGxj
aGVja2VyIGZlYXR1cmUgaXMgYmFzZWQgb24gRW5jaGFudCBsaWJyYXJ5LgorICogQ2xpZW50IG1h
eSB1c2Ugb3duIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tlciBwcmV2aW91c2x5IHNldAor
ICogdGhyb3VnaCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorICovCit2b2lkIGV3a190ZXh0X2No
ZWNrZXJfY2xpZW50X2F0dGFjaCgpCit7CisgICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZVRl
eHRDaGVja2VyQ2xpZW50ID0gZmFsc2U7CisgICAgaWYgKGRpZEluaXRpYWxpemVUZXh0Q2hlY2tl
ckNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tUZXh0Q2hlY2tlckNsaWVudCB0ZXh0
Q2hlY2tlckNsaWVudCA9IHsKKyAgICAgICAga1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVy
c2lvbiwKKyAgICAgICAgMCwgLy8gY2xpZW50SW5mbworICAgICAgICBpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nQWxsb3dlZCwKKyAgICAgICAgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQsCisgICAgICAgIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCwKKyAgICAgICAg
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkLAorICAgICAgICB1bmlxdWVTcGVsbERvY3VtZW50VGFnLAorICAgICAgICBjbG9zZVNwZWxs
RG9jdW1lbnRXaXRoVGFnLAorICAgICAgICBjaGVja1NwZWxsaW5nT2ZTdHJpbmcsCisgICAgICAg
IGNoZWNrR3JhbW1hck9mU3RyaW5nLAorICAgICAgICBzcGVsbGluZ1VJSXNTaG93aW5nLAorICAg
ICAgICB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nLAorICAgICAgICB1cGRhdGVTcGVsbGluZ1VJ
V2l0aE1pc3NwZWxsZWRXb3JkLAorICAgICAgICB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcsCisgICAgICAgIGd1ZXNzZXNGb3JXb3JkLAorICAgICAgICBsZWFybldvcmQsCisgICAg
ICAgIGlnbm9yZVdvcmQKKyAgICB9OworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRleHRD
aGVja2VyQ2xpZW50KTsKKworICAgIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IHRy
dWU7Cit9CisKKy8qCisgKiBHZXRzIHRvIHRoZSBjbGllbnQncyBjYWxsYmFja3MuCisgKgorICog
QGludGVybmFsCisgKgorICogVGhlIGNsaWVudCd0IGNhbGxiYWNrcyBhcmUgbm90IGRlZmluZWQg
YnkgZGVmYXVsdC4KKyAqIElmIHRoZSBjbGllbnQgaGFzbid0IHNldCB0aGUgY2FsbGJhY2ssIHRo
ZSBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIHdpbGwKKyAqIHJldHVybiBAYyAwIGFuZCB0aGUgZGVm
YXVsdCBXZWJLaXQgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGZvciB0aGlzCisgKiBmdW5j
dGlvbmFsaXR5LgorICoKKyAqIEByZXR1cm4gdGhlIHN0cnVjdCB3aXRoIHRoZSBjbGllbnQncyBj
YWxsYmFja3MuCisgKi8KK0V3a19UZXh0X0NoZWNrZXIqIGV3a1RleHRDaGVja2VyKCkKK3sKKyAg
ICByZXR1cm4gJmV3a1RleHRDaGVja2VyQ2FsbGJhY2s7Cit9CisKKyNlbHNlCisKKy8vIERlZmlu
ZXMgYW4gZW1wdHkgQVBJIHRvIGRvIG5vdCBicmVhayBidWlsZC4KKyNkZWZpbmUgRVdLX1RFWFRf
Q0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBOQU1FKSAgXAordm9pZCBld2tfdGV4dF9j
aGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUpICAgICAgICBcCit7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbmRpZiAv
LyBFTkFCTEUoU1BFTExDSEVDSykKKworRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdr
X1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldCwgdW5pcXVlX3NwZWxs
X2RvY3VtZW50X3RhZ19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4
dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UsIHVuaXF1ZV9zcGVsbF9k
b2N1bWVudF90YWdfY2xvc2UpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4
dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjaywgc3RyaW5nX3NwZWxsaW5nX2NoZWNrKQor
RVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGlu
Z19TdGF0dXNfR2V0LCB1aV9zcGVsbGluZ19zdGF0dXNfZ2V0KQorRVdLX1RFWFRfQ0hFQ0tFUl9D
QUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfVG9nZ2xlLCB1
aV9zcGVsbGluZ19zdGF0dXNfdG9nZ2xlKQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQo
RXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19NaXNzcGVsbGVkX1dvcmRfVXBkYXRlLCB1aV9z
cGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRlKQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFD
S19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNfR2V0LCB3b3JkX2d1ZXNzZXNfZ2V0
KQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xl
YXJuLCB3b3JkX2xlYXJuKQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRf
Q2hlY2tlcl9Xb3JkX0lnbm9yZSwgd29yZF9pZ25vcmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjkxNTBkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaApAQCAtMCwwICsxLDE5NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUgZXdrX3RleHRfY2hlY2tlci5oCisgKiBAYnJp
ZWYgUHJvdmlkZXMgQVBJIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVj
a2VyIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZXJlIGlzIG9uZSBzcGVsbGNoZWNrZXIgb2Jq
ZWN0IHBlciBhcHBsaWNhdGlvbiBhbmQgaXQncyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICogSXQg
YWxsb3dzIHRvIGNoZWNrIHNwZWxsaW5nIGluIHRoZSBlZGl0YWJsZSBhcmVhcy4KKyAqIElmIGFw
cGxpY2F0aW9uIHdhbnRzIHRvIGVuYWJsZSB0aGUgZmVhdHVyZSwgQVBJIGZyb20gQGEgZXdrX3Rl
eHRfY2hlY2tlcl9zZXR0aW5nLmgKKyAqIHNob3VsZCBiZSB1c2VkLgorICoKKyAqIFRoZSBkZWZh
dWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIEVu
Y2hhbnQgbGlicmFyeS4KKyAqIEl0IGRvZXNuJ3QgZW5zdXJlIGdyYW1tYXIgY2hlY2tpbmcuIEFw
cGxpY2F0aW9uIGlzIGFibGUgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0CisgKiBXZWJLaXQgc3Bl
bGxjaGVja2VyIGltcGxlbWVudGF0aW9uIGJ5IGRlZmluaW5nIGl0cyBvd24gaW1wbGVtZW50YXRp
b24gYW5kIHNldHRpbmcKKyAqIGFwcHJvcHJpYXRlIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqLwor
CisjaWZuZGVmIGV3a190ZXh0X2NoZWNrZXJfaAorI2RlZmluZSBld2tfdGV4dF9jaGVja2VyX2gK
KworI2luY2x1ZGUgPEV2YXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsK
KyNlbmRpZgorCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBm
dW5jdGlvbiB0byByZXR1cm4gYSB0YWcgKGlkZW50aWZpZXIpIHdoaWNoIGlzIGd1YXJhbnRlZWQg
dG8gYmUgdW5pcXVlLgorICoKKyAqIFVuaXF1ZSB0YWdzIGhlbHAgdG8gYXZvaWQgY29sbGlzaW9u
cyB3aXRoIG90aGVyIG9iamVjdHMgdGhhdCBhcmUgY2hlY2tlZCBmb3Igc3BlbGxpbmcgbWlzdGFr
ZXMuCisgKgorICogQHBhcmFtIG8gdGhlIHZpZXcgb2JqZWN0IHRvIGdldCB1bmlxdWUgdGFnCisg
KgorICogQHJldHVybiB1bmlxdWUgdGFnIGZvciB0aGUgZ2l2ZW4gQGEgbyB2aWV3IG9iamVjdAor
ICovCit0eXBlZGVmIHVpbnQ2NF90ICgqRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9j
dW1lbnRfVGFnX0dldCkoY29uc3QgRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIERlZmluZXMg
YSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBjbG9zZSB0aGUgcHJ2aW91
c2x5IHNldCB0YWcuCisgKgorICogVGhpcyBjYWxsYmFjayB3aWxsIG5vdGlmeSB0aGUgcmVjZWl2
ZXIgdGhhdCB0aGUgdXNlciBoYXMgZmluaXNoZWQgd2l0aCB0aGUgdGFnZ2VkIGRvY3VtZW50Lgor
ICoKKyAqIEBwYXJhbSB0YWcgdGhlIHRhZyB0byBiZSBjbG9zZWQKKyAqLwordHlwZWRlZiB2b2lk
ICgqRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlKSh1aW50
NjRfdCB0YWcpOworCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFj
ayBmdW5jdGlvbiB0byBzZWFyY2ggZm9yIGEgbWlzc3BlbGxlZCB3b3JkcyBpbiB0aGUgZ2l2ZW4g
c3RyaW5nLgorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxs
IGNoZWNrZXIgd2hpY2ggZG9jdW1lbnQgdGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAg
ICAgICAgaW4gbW9zdCBjYXNlcyBub3QgbmVjZXNzYXJpbHksIGp1c3QgZm9yIGlnbm9yZWQgd29y
ZCwKKyAqICAgICAgICBAYyAwIGNhbiBiZSBwYXNzZWQgaW4gZm9yIHRleHQgbm90IGFzc29jaWF0
ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZG9jdW1lbnQKKyAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IGNv
bnRhaW5pbmcgdGhlIHdvcmRzIHRvIHNwZWxsY2hlY2sKKyAqIEBwYXJhbSBtaXNzcGVsbGluZ19s
b2NhdGlvbiBhIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWlzc3BlbGxl
ZCBAYSB0ZXh0LCBAYyAtMSBpZiB0aGUgQGEgdGV4dCBpcyBjb3JyZWN0CisgKiBAcGFyYW0gbWlz
c3BlbGxpbmdfbGVuZ3RoIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgbGVuZ3RoIG9mIG1pc3NwZWxs
ZWQgQGEgdGV4dCwgQGMgMCBpZiB0aGUgQGEgdGV4dCBpcyBjb3JyZWN0CisgKi8KK3R5cGVkZWYg
dm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrKSh1aW50NjRfdCB0
YWcsIGNvbnN0IGNoYXIgKnRleHQsIGludDMyX3QgKm1pc3NwZWxsaW5nX2xvY2F0aW9uLCBpbnQz
Ml90ICptaXNzcGVsbGluZ19sZW5ndGgpOworCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUg
Zm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIHN0YXR1cyBvZiBVSSBTcGVsbGlu
Zy4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiB0aGUgVUkgU3BlbGxpbmcgaXMgc2hv
d24sIEBjIEVJTkFfRkFMU0UgaWYgaXQncyBoaWRkZW4KKyAqLwordHlwZWRlZiBFaW5hX0Jvb2wg
KCpFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1c19HZXQpKHZvaWQpOworCisvKioK
KyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byB0b2dn
bGUgdGhlIFVJIFNwZWxsaW5nLgorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2Vy
X1VJX1NwZWxsaW5nX1N0YXR1c19Ub2dnbGUpKHZvaWQpOworCisvKioKKyAqIERlZmluZXMgYSB0
eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byB1cGRhdGUgdGhlIFVJIFNwZWxs
aW5nIGZvciB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRh
ZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIgd2hpY2ggZG9jdW1lbnQgdGhhdCB0aGUgbWlz
c3BlbGxlZCB3b3JkIGlzIGFzc29jaWF0ZWQsCisgKiBAcGFyYW0gbWlzc3BlbGxlZF93b3JkIHRo
ZSBtaXNzcGVsbGVkIHdvcmQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9V
SV9TcGVsbGluZ19NaXNzcGVsbGVkX1dvcmRfVXBkYXRlKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNo
YXIgKm1pc3NwZWxsZWRfd29yZCk7CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3Ig
dGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhIGxpc3Qgb2Ygc3VnZ2VzdGVkIHNwZWxsaW5n
cyBmb3IgYSBtaXNzcGVsbGVkIEBhIHdvcmQuCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFn
IHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVudCB0aGF0IEBhIHRleHQg
aXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBAYyAwIGNhbiBiZSBwYXNzZWQgZm9yIHRleHQgbm90
IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZG9jdW1lbnQKKyAqIEBwYXJhbSB3b3JkIHRo
ZSB3b3JkIHRvIGdldCBndWVzc2VzCisgKiBAcmV0dXJuIGEgbGlzdCBvZiBkeW5hbWljYWxseSBh
bGxvY2F0ZWQgc3RyaW5ncyAoYXMgY2hhciopIGFuZAorICogICAgICAgICBjYWxsZXIgaXMgcmVz
cG9uc2libGUgZm9yIGRlc3Ryb3lpbmcgdGhlbS4KKyAqLwordHlwZWRlZiBFaW5hX0xpc3QgKigq
RXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNfR2V0KSh1aW50NjRfdCB0YWcsIGNvbnN0IGNo
YXIgKndvcmQpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBhZGQgdGhl
IHdvcmQgdG8gdGhlIHNwZWxsIGNoZWNrZXIgZGljdGlvbmFyeS4KKyAqCisgKiBAcGFyYW0gdGFn
IHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRvY3VtZW50IHRo
YXQgQGEgdGV4dCBpcyBhc3NvY2lhdGVkLAorICogICAgICAgIEBjIDAgY2FuIGJlIHBhc3NlZCBm
b3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBkb2N1bWVudAorICogQHBh
cmFtIHdvcmQgdGhlIHdvcmQgdG8gYWRkCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0No
ZWNrZXJfV29yZF9MZWFybikodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp3b3JkKTsKKworLyoq
CisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGVsbCB0aGUgc3BlbGwgY2hlY2tlciB0
byBpZ25vcmUgYSBnaXZlbiB3b3JkLgorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBu
b3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIgd2hpY2ggZG9jdW1lbnQgdGhhdCBAYSB0ZXh0IGlzIGFz
c29jaWF0ZWQsCisgKiAgICAgICAgQGMgMCBjYW4gYmUgcGFzc2VkIGZvciB0ZXh0IG5vdCBhc3Nv
Y2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGRvY3VtZW50CisgKiBAcGFyYW0gd29yZCB0aGUgd29y
ZCB0byBpZ25vcmUKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0ln
bm9yZSkodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp3b3JkKTsKKworLyoqCisgKiBTZXRzIGEg
Y2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGEgdW5pcXVlIHNwZWxsIGRvY3VtZW50IHRhZy4KKyAq
CisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9y
ZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2
b2lkIGV3a190ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXRfY2Jfc2V0
KEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19HZXQgY2IpOworCisv
KioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBjbG9zZSBhIHVuaXF1ZSBzcGVsbCBk
b2N1bWVudCB0YWcuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBA
YyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0
aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVu
dF90YWdfY2xvc2VfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50
X1RhZ19DbG9zZSBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNl
YXJjaCBmb3IgYSBtaXNzcGVsbGVkIHdvcmRzIGluIHRoZSBnaXZlbiBzdHJpbmcuCisgKgorICog
QHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhl
IGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBl
d2tfdGV4dF9jaGVja2VyX3N0cmluZ19zcGVsbGluZ19jaGVja19jYl9zZXQoRXdrX1RleHRfQ2hl
Y2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2sgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFj
ayBmdW5jdGlvbiB0byBnZXQgdGhlIHN0YXR1cyBvZiBVSSBTcGVsbGluZy4KKyAqCisgKiBAcGFy
YW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVm
YXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190
ZXh0X2NoZWNrZXJfdWlfc3BlbGxpbmdfc3RhdHVzX2dldF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tl
cl9VSV9TcGVsbGluZ19TdGF0dXNfR2V0IGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sg
ZnVuY3Rpb24gdG8gdG9nZ2xlIHRoZSBVSSBTcGVsbGluZy4KKyAqCisgKiBAcGFyYW0gY2IgYSBu
ZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJL
aXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNr
ZXJfdWlfc3BlbGxpbmdfc3RhdHVzX3RvZ2dsZV9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9VSV9T
cGVsbGluZ19TdGF0dXNfVG9nZ2xlIGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVu
Y3Rpb24gdG8gdXBkYXRlIHRoZSBVSSBTcGVsbGluZyBmb3IgdGhlIG1pc3NwZWxsZWQgd29yZC4K
KyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVz
dG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQ
SSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfdWlfc3BlbGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0
ZV9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19NaXNzcGVsbGVkX1dvcmRfVXBk
YXRlIGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGFuIGFy
cmF5IG9mIHN1Z2dlc3RlZCBzcGVsbGluZ3MgZm9yIGEgbWlzc3BlbGxlZCB3b3JkLgorICoKKyAq
IEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRo
ZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQg
ZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1ZXNzZXNfZ2V0X2NiX3NldChFd2tfVGV4dF9DaGVja2Vy
X1dvcmRfR3Vlc3Nlc19HZXQgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlv
biB0byBhZGQgdGhlIHdvcmQgdG8gdGhlIHNwZWxsIGNoZWNrZXIgZGljdGlvbmFyeS4KKyAqCisg
KiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0
aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lk
IGV3a190ZXh0X2NoZWNrZXJfd29yZF9sZWFybl9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9Xb3Jk
X0xlYXJuIGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGVsbCB0
aGUgc3BlbGwgY2hlY2tlciB0byBpZ25vcmUgYSBnaXZlbiB3b3JkLgorICoKKyAqIEBwYXJhbSBj
YiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0
IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRf
Y2hlY2tlcl93b3JkX2lnbm9yZV9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZSBj
Yik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLy8gZXdrX3RleHRf
Y2hlY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjYwZTQxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaApAQCAtMCwwICsxLDU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaAorI2RlZmlu
ZSBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaAorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisj
aW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgorCisvKioKKyAqIEBicmllZiBTdHJ1Y3R1cmUg
dGhhdCBrZWVwcyBjbGllbnQncyBjYWxsYmFjayBmdW5jdGlvbnMuCisgKgorICogQGludGVybmFs
CisgKi8KK3N0cnVjdCBfRXdrX1RleHRfQ2hlY2tlciB7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9V
bmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldCB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dl
dDsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2Ug
dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZTsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1N0
cmluZ19TcGVsbGluZ19DaGVjayBzdHJpbmdfc3BlbGxpbmdfY2hlY2s7CisgICAgRXdrX1RleHRf
Q2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfR2V0IHVpX3NwZWxsaW5nX3N0YXR1c19nZXQ7Cisg
ICAgRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfVG9nZ2xlIHVpX3NwZWxsaW5n
X3N0YXR1c190b2dnbGU7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19NaXNzcGVs
bGVkX1dvcmRfVXBkYXRlIHVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGU7CisgICAg
RXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNfR2V0IHdvcmRfZ3Vlc3Nlc19nZXQ7CisgICAg
RXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuIHdvcmRfbGVhcm47CisgICAgRXdrX1RleHRfQ2hl
Y2tlcl9Xb3JkX0lnbm9yZSB3b3JkX2lnbm9yZTsKK307Cit0eXBlZGVmIF9Fd2tfVGV4dF9DaGVj
a2VyIEV3a19UZXh0X0NoZWNrZXI7CisKK0V3a19UZXh0X0NoZWNrZXIqIGV3a1RleHRDaGVja2Vy
KCk7CisKKy8vIE1ha2VzIGl0IHZpc2libGUgZm9yIFdUUi4KK0VBUEkgdm9pZCBld2tfdGV4dF9j
aGVja2VyX2NsaWVudF9hdHRhY2goKTsKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQor
I2VuZGlmIC8vIGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYTMyYjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyX3NldHRpbmdzLmNwcApAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzLmgiCisK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5j
bHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGJvb2wgZW5hYmxlQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmcgOiAxOworICAgIGJvb2wgZW5hYmxlR3JhbW1hckNoZWNraW5nIDog
MTsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdzX0NvbnRp
bnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlZCBjb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5n
ZWQ7CisgICAgICAgIEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ3NfR3JhbW1hcl9DaGVja2luZ19D
aGFuZ2VkIGdyYW1tYXJDaGVja2luZ0NoYW5nZWQ7CisgICAgfSBzZXR0aW5nc0NoYW5nZWRDYWxs
YmFja3M7CisgICAgVmVjdG9yPFN0cmluZz4gc3BlbGxDaGVja2luZ0xhbmd1YWdlczsKK30gZXdr
VGV4dENoZWNrZXJTZXR0aW5ncyA9IHsgZmFsc2UsIGZhbHNlLCB7MCwgMH0sIFZlY3RvcjxTdHJp
bmc+KCkgfTsKKworc3RhdGljIEVpbmFfQm9vbCBpZGxlckNvbnRpbnVvdXNTcGVsbENoZWNraW5n
Q2hhbmdlZCh2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5zZXR0aW5n
c0NoYW5nZWRDYWxsYmFja3MuY29udGludW91c1NwZWxsQ2hlY2tpbmdDaGFuZ2VkKQorICAgICAg
ICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRpbmdzQ2hhbmdlZENhbGxiYWNrcy5jb250aW51
b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQoCisgICAgICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRp
bmdzLmVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKTsKKworICAgIHJldHVybiBFQ09SRV9D
QUxMQkFDS19DQU5DRUw7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgaWRsZXJHcmFtbWFyQ2hlY2tp
bmdDaGFuZ2VkKHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRp
bmdzQ2hhbmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKQorICAgICAgICBld2tU
ZXh0Q2hlY2tlclNldHRpbmdzLnNldHRpbmdzQ2hhbmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hlY2tp
bmdDaGFuZ2VkKAorICAgICAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5lbmFibGVHcmFt
bWFyQ2hlY2tpbmcpOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKwor
c3RhdGljIEVpbmFfQm9vbCBpZGxlclNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQodm9pZCopCit7
CisgICAgLy8gRklYTUU6IENvbnNpZGVyIHRvIGRlbGVnYXRlIGNhbGxpbmcgb2YgdGhpcyBtZXRo
b2QgaW4gV2ViUHJvY2VzcyB0byBkbyBub3QgZGVsYXkvYmxvY2sgVUlQcm9jZXNzLgorICAgIHVw
ZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5zcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKTsKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQor
CitzdGF0aWMgdm9pZCBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBuZXdMYW5ndWFnZXMpCit7CisgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5zcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzID0gbmV3TGFuZ3VhZ2VzOworICAgIGVjb3JlX2lkbGVyX2FkZChpZGxl
clNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQsIDApOworfQorI2VuZGlmIC8vIEVOQUJMRShTUEVM
TENIRUNLKQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfY29udGludW91c19zcGVs
bF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdzX0NvbnRp
bnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlZCBjYWxsYmFjaykKK3sKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRpbmdzQ2hhbmdlZENhbGxi
YWNrcy5jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQgPSBjYWxsYmFjazsKKyNlbmRpZgor
fQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZ3JhbW1hcl9jaGVja2luZ19jaGFu
Z2VkX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdzX0dyYW1tYXJfQ2hlY2tpbmdfQ2hh
bmdlZCBjYWxsYmFjaykKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBld2tUZXh0Q2hl
Y2tlclNldHRpbmdzLnNldHRpbmdzQ2hhbmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hlY2tpbmdDaGFu
Z2VkID0gY2FsbGJhY2s7CisjZW5kaWYKK30KKworRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJf
c2V0dGluZ3NfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCkKK3sKKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4gZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5lbmFi
bGVDb250aW51b3VzU3BlbGxDaGVja2luZzsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfY29udGludW91
c19zcGVsbF9jaGVja2luZ19zZXQoRWluYV9Cb29sIGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICBlbmFibGUgPSAhIWVuYWJsZTsKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJT
ZXR0aW5ncy5lbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZyAhPSBlbmFibGUpIHsKKyAgICAg
ICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5lbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZyA9
IGVuYWJsZTsKKworICAgICAgICBXS1RleHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZSk7CisKKyAgICAgICAgLy8gU2V0cyBkZWZhdWx0IGxh
bmd1YWdlIGlmIHVzZXIgZGlkbid0IHNwZWNpZnkgYW55LgorICAgICAgICBpZiAoZW5hYmxlICYm
IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBz
cGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KFZlY3RvcjxTdHJpbmc+KCkpOworCisgICAgICAgIGlm
IChld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRpbmdzQ2hhbmdlZENhbGxiYWNrcy5jb250aW51
b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQpCisgICAgICAgICAgICBlY29yZV9pZGxlcl9hZGQoaWRs
ZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQsIDApOworICAgIH0KKyNlbmRpZgorfQor
CitFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfZ3JhbW1hcl9jaGVj
a2luZ19nZXQoKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBld2tUZXh0
Q2hlY2tlclNldHRpbmdzLmVuYWJsZUdyYW1tYXJDaGVja2luZzsKKyNlbHNlCisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFi
bGVfZ3JhbW1hcl9jaGVja2luZ19zZXQoRWluYV9Cb29sIGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICBlbmFibGUgPSAhIWVuYWJsZTsKKyAgICBpZiAoZXdrVGV4dENoZWNr
ZXJTZXR0aW5ncy5lbmFibGVHcmFtbWFyQ2hlY2tpbmcgIT0gZW5hYmxlKSB7CisgICAgICAgIGV3
a1RleHRDaGVja2VyU2V0dGluZ3MuZW5hYmxlR3JhbW1hckNoZWNraW5nID0gZW5hYmxlOworCisg
ICAgICAgIFdLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVu
YWJsZSk7CisKKyAgICAgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3Muc2V0dGluZ3NDaGFu
Z2VkQ2FsbGJhY2tzLmdyYW1tYXJDaGVja2luZ0NoYW5nZWQpCisgICAgICAgICAgICBlY29yZV9p
ZGxlcl9hZGQoaWRsZXJHcmFtbWFyQ2hlY2tpbmdDaGFuZ2VkLCAwKTsKKyAgICB9CisjZW5kaWYK
K30KKworRWluYV9MaXN0KiBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2F2YWlsYWJsZV9zcGVs
bF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCkKK3sKKyAgICBFaW5hX0xpc3QqIGxpc3RPZmxhbmd1
YWdlcyA9IDA7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgVmVjdG9yPFN0cmluZz4gbGFu
Z3VhZ2VzID0gYXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworICAgIHNpemVfdCBu
dW1iZXJPZkxhbnVhZ2VzID0gbGFuZ3VhZ2VzLnNpemUoKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZMYW51YWdlczsgKytpKQorICAgICAgICBsaXN0T2ZsYW5ndWFnZXMg
PSBlaW5hX2xpc3RfYXBwZW5kKGxpc3RPZmxhbmd1YWdlcywgZWluYV9zdHJpbmdzaGFyZV9hZGQo
bGFuZ3VhZ2VzW2ldLnV0ZjgoKS5kYXRhKCkpKTsKKworI2VuZGlmCisgICAgcmV0dXJuIGxpc3RP
Zmxhbmd1YWdlczsKK30KKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX3NwZWxsX2No
ZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hhciogbGFuZ3VhZ2VzKQoreworI2lmIEVOQUJM
RShTUEVMTENIRUNLKQorICAgIFZlY3RvcjxTdHJpbmc+IG5ld0xhbmd1YWdlczsKKyAgICBTdHJp
bmc6OmZyb21VVEY4KGxhbmd1YWdlcykuc3BsaXQoJywnLCBuZXdMYW5ndWFnZXMpOworCisgICAg
c3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldChuZXdMYW5ndWFnZXMpOworI2VuZGlmCit9CisKK0Vp
bmFfTGlzdCogZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXNfZ2V0KCkKK3sKKyAgICBFaW5hX0xpc3QqIGxpc3RPZmxhbmd1YWdlcyA9IDA7CisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzID0gbG9hZGVkU3Bl
bGxDaGVja2luZ0xhbmd1YWdlcygpOworICAgIHNpemVfdCBudW1iZXJPZkxhbnVhZ2VzID0gbGFu
Z3VhZ2VzLnNpemUoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZMYW51
YWdlczsgKytpKQorICAgICAgICBsaXN0T2ZsYW5ndWFnZXMgPSBlaW5hX2xpc3RfYXBwZW5kKGxp
c3RPZmxhbmd1YWdlcywgZWluYV9zdHJpbmdzaGFyZV9hZGQobGFuZ3VhZ2VzW2ldLnV0ZjgoKS5k
YXRhKCkpKTsKKworI2VuZGlmCisgICAgcmV0dXJuIGxpc3RPZmxhbmd1YWdlczsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJf
c2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXJfc2V0dGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjcy
N2FhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5oCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLyoqCisgKiBAZmlsZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaAorICogQGJyaWVmIEFQ
SSBmb3IgbWFuaXB1bGF0aW5nIHNwZWxsIGNoZWNrZXIgZmVhdHVyZS4KKyAqLworCisjaWZuZGVm
IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfaAorI2RlZmluZSBld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdzX2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRl
cm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBj
YWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4KKyAqIHRoZSBj
b250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0Lgor
ICoKKyAqIEBwYXJhbSBAYyBFSU5BX1RSVUUgaWYgY29udGludW91cyBzcGVsbCBjaGVja2luZyBp
cyBlbmFibGVkIG9yIEAgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8KK3R5cGVkZWYg
dm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2lu
Z19DaGFuZ2VkKShFaW5hX0Jvb2wgZW5hYmxlKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sg
ZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuCisgKiB0aGUgZ3JhbW1hciBj
aGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBAcGFyYW0gQGMg
RUlOQV9UUlVFIGlmIGdyYW1tYXIgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAIEVJTkFfRkFMU0Ug
aWYgaXQncyBkaXNhYmxlZAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1Nl
dHRpbmdzX0dyYW1tYXJfQ2hlY2tpbmdfQ2hhbmdlZCkoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8q
KgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQg
d2hlbgorICogdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdl
ZCBieSBXZWJLaXQuCisgKgorICogU3BlY2lmeWluZyBvZiB0aGlzIGNhbGxiYWNrIGlzIG5lZWRl
ZCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCisgKiBv
bmNlIFdlYktpdCBjaGFuZ2VzIHRoaXMgc2V0dGluZy4KKyAqIElmIHRoZSBhcHBsaWNhdGlvbiBp
cyBub3QgaW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0LgorICogQ2hhbmdpbmcg
b2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwgY2FuIGJlIG1hZGUgYXMgYSByZXN1
bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25zIGluIGEgQ29udGV4dCBNZW51IGJ5IGEgdXNlci4K
KyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0IG9yIEBjIE5V
TEwgdG8gaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMgb25lCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9z
ZXQoRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0No
YW5nZWQgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5v
dGlmeSB0aGUgY2xpZW50IHdoZW4KKyAqIHRoZSBncmFtbWFyIGNoZWNraW5nIHNldHRpbmcgd2Fz
IGNoYW5nZWQgYnkgV2ViS2l0LgorICoKKyAqIFNwZWNpZnlpbmcgb2YgdGhpcyBjYWxsYmFjayBp
cyBuZWVkZWQgaWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9u
cworICogb25jZSBXZWJLaXQgY2hhbmdlcyB0aGlzIHNldHRpbmcuCisgKiBJZiB0aGUgYXBwbGlj
YXRpb24gaXMgbm90IGludGVyZXN0ZWQsIHRoaXMgY2FsbGJhY2sgaXMgbm90IHNldC4KKyAqIENo
YW5naW5nIG9mIHRoaXMgc2V0dGluZyBhdCB0aGUgV2ViS2l0IGxldmVsIGNhbiBiZSBtYWRlIGFz
IGEgcmVzdWx0IG9mIG1vZGlmeWluZworICogb3B0aW9ucyBpbiBhIENvbnRleHQgTWVudSBieSBh
IHVzZXIuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNldCBv
ciBAYyBOVUxMIHRvIGludmFsaWRhdGUgdGhlIHByZXZpb3VzIG9uZQorICovCitFQVBJIHZvaWQg
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19ncmFtbWFyX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0
KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ3NfR3JhbW1hcl9DaGVja2luZ19DaGFuZ2VkIGNiKTsK
KworLyoqCisgKiBRdWVyaWVzIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxl
ZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNoZWNr
aW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8KK0VB
UEkgRWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfZ2V0KHZvaWQpOworCisvKioKKyAqIEVuYWJsZXMvZGlzYWJsZXMgY29u
dGludW91cyBzcGVsbCBjaGVja2luZy4KKyAqCisgKiBBZGRpdGlvbmFsbHksIHRoaXMgZnVuY3Rp
b24gY2FsbHMgYSBjYWxsYmFjayBmdW5jdGlvbiAoaWYgZGVmaW5lZCkgdG8gbm90aWZ5CisgKiB0
aGUgY2xpZW50IGFib3V0IHRoZSBjaGFuZ2Ugb2YgdGhlIHNldHRpbmcuCisgKiBUaGlzIGZlYXR1
cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXJf
c2V0dGluZ19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0CisgKgorICog
QHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUgdG8gZW5hYmxlIGNvbnRpbnVvdXMgc3BlbGwgY2hl
Y2tpbmcgb3IgQGMgRUlOQV9GQUxTRSB0byBkaXNhYmxlCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdzX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldChF
aW5hX0Jvb2wgZW5hYmxlKTsKKworLyoqCisgKiBRdWVyaWVzIGlmIGdyYW1tYXIgY2hlY2tpbmcg
aXMgZW5hYmxlZC4KKyAqCisgKiBBcHBsaWNhdGlvbiBtYXkgb3ZlcndyaXRlIHdlYmtpdCBncmFt
bWFyIGNoZWNraW5nIGltcGxlbWVudGF0aW9uIGJ5IHNldHRpbmcgY2FsbGJhY2sgZnVuY3Rpb25z
CisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXIuaAorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IGlmIGdyYW1tYXIgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3Mg
ZGlzYWJsZWQKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19l
bmFibGVfZ3JhbW1hcl9jaGVja2luZ19nZXQodm9pZCk7CisKKy8qKgorICogRW5hYmxlcy9kaXNh
YmxlcyBncmFtbWFyIGNoZWNraW5nLgorICoKKyAqIEFkZGl0aW9uYWxseSwgdGhpcyBmdW5jdGlv
biBjYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIChpZiBkZWZpbmVkKSB0byBub3RpZnkKKyAqIHRo
ZSBjbGllbnQgYWJvdXQgdGhlIGNoYW5nZSBvZiB0aGUgc2V0dGluZy4KKyAqIFRoaXMgZmVhdHVy
ZSBpcyBkaXNhYmxlZCBhbmQgaXMgbm90IHN1cHBvcnRlZCBieSBXZWJLaXQtRUZMIGJ5IGRlZmF1
bHQuCisgKgorICogQHNlZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZ3JhbW1hcl9jaGVja2lu
Z19jaGFuZ2VkX2NiX3NldAorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRvIGVu
YWJsZSBncmFtbWFyIGNoZWNraW5nIG9yIEBjIEVJTkFfRkFMU0UgdG8gZGlzYWJsZQorICovCitF
QVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfZ3JhbW1hcl9jaGVja2lu
Z19zZXQoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qCisgKiBHZXRzIHRoZSB0aGUgbGlzdCBvZiBh
bGwgYXZhaWxhYmxlIGFuZCBpbnN0YWxsZWQgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIHRvIHVz
ZS4KKyAqCisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVja2luZ19s
YW5ndWFnZXNfc2V0CisgKgorICogQHJldHVybiB0aGUgbGlzdCB3aXRoIGF2YWlsYWJsZSBzcGVs
bCBjaGVja2luZyBsYW5ndWFnZXMsIG9yIEBjIE5VTEwgb24gZmFpbHVyZQorICogICAgICAgICB0
aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1c2UgZWlu
YV9zdHJpbmdzaGFyZV9kZWwoKQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nc19hdmFpbGFibGVfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCh2b2lkKTsK
KworLyoqCisgKiBTZXRzIEBhIGxhbmd1YWdlcyBhcyB0aGUgbGlzdCBvZiBsYW5ndWFnZXMgdG8g
dXNlIGJ5IGRlZmF1bHQgV2ViS2l0CisgKiBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNrZXIg
ZmVhdHVyZSB3aXRoIEVuY2hhbnQgbGlicmFyeSBzdXBwb3J0LgorICoKKyAqIElmIEBsYW5ndWFn
ZXMgaXMgQGMgTlVMTCwgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgdXNlZC4KKyAqIElmIHRoZSBk
ZWZhdWx0IGxhbmd1YWdlIGNhbiBub3QgYmUgZGV0ZXJtaW5lZCB0aGVuIGFueSBhdmFpbGFibGUg
ZGljdGlvbmFyeSB3aWxsIGJlIHVzZWQuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBpbnZh
bGlkYXRlcyB0aGUgcHJldmlvdXNseSBzZXQgbGFuZ3VhZ2VzLgorICogICAgICAgVGhlIGRpY3Rp
b25hcmllcyBhcmUgcmVxdWVzdGVkIGFzeW5jaHJvbm91c2x5LgorICoKKyAqIEBwYXJhbSBsYW5n
dWFnZXMgYSBsaXN0IG9mIGNvbW1hICgnLCcpIHNlcGFyYXRlZCBsYW5ndWFnZSBjb2RlcworICog
ICAgICAgIG9mIHRoZSBmb3JtICdlbl9VUycsIGllLCBsYW5ndWFnZV9WQVJJQU5ULCBtYXkgYmUg
QGMgTlVMTC4KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Nfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChjb25zdCBjaGFyICpsYW5ndWFnZXMpOworCisvKgorICog
R2V0cyB0aGUgdGhlIGxpc3Qgb2YgdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1c2Uu
CisgKgorICogQHNlZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfYXZhaWxhYmxlX3NwZWxsX2No
ZWNraW5nX2xhbmd1YWdlc19nZXQKKyAqIEBzZWUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3Nw
ZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQKKyAqCisgKiBAcmV0dXJuIHRoZSBsaXN0IHdpdGgg
dGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1c2UsCisgKiAgICAgICAgIHRoZSBFaW5h
X0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIsIHVzZSBlaW5hX3N0cmlu
Z3NoYXJlX2RlbCgpCisgKi8KK0VBUEkgRWluYV9MaXN0ICpld2tfdGV4dF9jaGVja2VyX3NldHRp
bmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVz
cGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKaW5k
ZXggNzVhOGE5OS4uNTk5ZGM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9UZXh0Q2hlY2tlckVmbC5jcHAKQEAgLTEsNSArMSw3IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmls
aXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNyw3ICsyOSw5IEBACiAjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKIAogI2lu
Y2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiV2ViVGV4dENoZWNrZXIu
aCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMzcsOTEgKzQxLDE0
NCBAQCBzdGF0aWMgVGV4dENoZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBU
ZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgc3RhdGljIGJvb2wgZGlkSW5pdGlh
bGl6ZVN0YXRlID0gZmFsc2U7CisgICAgaWYgKGRpZEluaXRpYWxpemVTdGF0ZSkKKyAgICAgICAg
cmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CisKKyAgICBXZWJUZXh0Q2hlY2tlckNsaWVudCYgY2xp
ZW50ID0gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKTsKKyAgICB0ZXh0Q2hlY2tl
clN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gY2xpZW50LmNvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkID0gY2xpZW50LmdyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKKworICAg
IGRpZEluaXRpYWxpemVTdGF0ZSA9IHRydWU7CisjZW5kaWYKICAgICByZXR1cm4gdGV4dENoZWNr
ZXJTdGF0ZTsKIH0KIAogYm9vbCBUZXh0Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0FsbG93ZWQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOworI2Vsc2UKKyAg
ICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKQordm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVD
SykKKyAgICBpZiAoc3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
dGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQo
KS0+Y2xpZW50KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpz
ZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRDaGVja2VyOjpzZXRHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgaWYgKHN0YXRl
KCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID09IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQgPSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQ7CisgICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgLyplbmFibGVkKi8pCit2b2lk
IFRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQo
Ym9vbCBlbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCA9IGVuYWJsZWQ7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNo
ZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIC8qZW5hYmxlZCovKQordm9pZCBUZXh0Q2hl
Y2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICB0ZXh0
Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisjZW5kaWYK
IH0KIAotaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdl
UHJveHkqKQoraW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQ
YWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51
bmlxdWVTcGVsbERvY3VtZW50VGFnKHBhZ2UpOworI2Vsc2UKICAgICByZXR1cm4gMDsKKyNlbmRp
ZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0
X3QpCit2b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3Qg
dGFnKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisg
ICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRX
aXRoVGFnKHRhZyk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGlu
Z09mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFyKiwgdWludDMyX3QsIGludDMyX3QmLCBpbnQz
Ml90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90IHNw
ZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIGludDMy
X3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxE
b2N1bWVudFRhZywgU3RyaW5nKHRleHQsIGxlbmd0aCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1p
c3NwZWxsaW5nTGVuZ3RoKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVja0dy
YW1tYXJPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBWZWN0b3I8V2Vi
Q29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVj
a2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3Jh
bW1hckRldGFpbHMsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3Jh
bW1hckxlbmd0aCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tHcmFtbWFy
T2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRleHQsIGxlbmd0aCksIGdyYW1tYXJE
ZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5ndGgpOworI2VuZGlmCiB9
CiAKIGJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc3BlbGxpbmdVSUlzU2hvd2luZygpOworI2Vsc2UK
ICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6dG9nZ2xl
U3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFC
TEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2Vy
Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3QsIGNvbnN0IFN0cmlu
ZyYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3Jk
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNz
cGVsbGVkV29yZChzcGVsbERvY3VtZW50VGFnLCBtaXNzcGVsbGVkV29yZCk7CisjZW5kaWYKIH0K
IAotdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGlu
dDY0X3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKQordm9pZCBUZXh0Q2hl
Y2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1
bWVudFRhZywgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0
YWlsJiBncmFtbWFyRGV0YWlsKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51cGRh
dGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgYmFkR3JhbW1h
clBocmFzZSwgZ3JhbW1hckRldGFpbCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6
Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
VmVjdG9yPFN0cmluZz4mKQordm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50
NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYg
Y29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMp
OworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90LCBjb25z
dCBTdHJpbmcmKQordm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qgc3BlbGxEb2N1
bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS5sZWFybldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CisjZW5kaWYKIH0KIAotdm9p
ZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQordm9pZCBU
ZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0
cmluZyYgd29yZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuaWdub3JlV29yZChz
cGVsbERvY3VtZW50VGFnLCB3b3JkKTsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kRW5jaGFudC5jbWFrZSBiL1NvdXJjZS9j
bWFrZS9GaW5kRW5jaGFudC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kNjljNzFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNt
YWtlCkBAIC0wLDAgKzEsNDMgQEAKKyMgLSBUcnkgdG8gZmluZCBFbmNoYW50CisjIE9uY2UgZG9u
ZSwgdGhpcyB3aWxsIGRlZmluZQorIworIyAgRU5DSEFOVF9JTkNMVURFX0RJUlMgLSB0aGUgRW5j
aGFudCBpbmNsdWRlIGRyZWN0b3JpZXMKKyMgIEVOQ0hBTlRfTElCUkFSSUVTIC0gbGluayB0aGVz
ZSB0byB1c2UgRW5jaGFudAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJv
bmljcworIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVIgQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUworIyBJUycnIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIElUUworIyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyMgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorIyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKKyMgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisjIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SCisjIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK0ZJTkRfUEFDS0FHRShQa2dDb25maWcpCitQS0dfQ0hFQ0tfTU9EVUxF
UyhQQ19FTkNIQU5UIGVuY2hhbnQpCisKK0ZJTkRfUEFUSChFTkNIQU5UX0lOQ0xVREVfRElSUwor
ICAgIE5BTUVTIGVuY2hhbnQuaAorICAgIFBBVEhTICR7UENfRU5DSEFOVF9JTkNMVURFRElSfQor
ICAgICAgICAgICR7UENfRU5DSEFOVF9JTkNMVURFX0RJUlN9CispCisKK0ZJTkRfTElCUkFSWShF
TkNIQU5UX0xJQlJBUklFUworICAgIE5BTUVTIGVuY2hhbnQKKyAgICBQQVRIUyAke1BDX0VOQ0hB
TlRfTElCRElSfQorICAgICAgICAgICR7UENfRU5DSEFOVF9MSUJSQVJZX0RJUlN9CispCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRp
b25zRWZsLmNtYWtlCmluZGV4IDU0OTA1NmEuLmYxZWJhOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9j
bWFrZS9PcHRpb25zRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtl
CkBAIC0xNjgsMyArMTY4LDggQEAgSUYgKFdURl9VU0VfVElMRURfQkFDS0lOR19TVE9SRSkKICAg
RklORF9QQUNLQUdFKE9wZW5HTCBSRVFVSVJFRCkKIEVORElGKCkKIAorT1BUSU9OKEVOQUJMRV9T
UEVMTENIRUNLICJFbmFibGUgc3BlbGxjaGVja2luZyBmZWF0dXJlIChyZXF1aXJlcyBlbmNoYW50
KSIgT04pCitJRiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisgICAgICBGSU5EX1BBQ0tBR0UoRW5jaGFu
dCBSRVFVSVJFRCkKKyAgICAgIEFERF9ERUZJTklUSU9OUygtREVOQUJMRV9TUEVMTENIRUNLPTEp
CitFTkRJRigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165957</attachid>
            <date>2012-09-27 02:28:02 -0700</date>
            <delta_ts>2012-10-11 07:02:27 -0700</delta_ts>
            <desc>apply Gyuyoung&apos;s comments</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>64581</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAwNDc2NTQ2Li4zZWM1MGVk
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTItMDktMjQgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYXNtdW5nLmNvbT4KKworICAgICAgICBbV0syXVtFRkxd
IEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNwZWxsY2hlY2tpbmcgZmVh
dHVyZSBmb3IgV0syLUVmbC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kRW5jaGFudC5j
bWFrZTogQWRkZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2U6IEVu
YWJsZSBzcGVsbGNoZWNraW5nIGZlYXR1cmUgZm9yIFdlYktpdDItRUZMLgorICAgICAgICAqIFNv
dXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZTogRGVmaW5lIHRoZSBTUEVMTENIRUNLIG1h
Y3JvLgorICAgICAgICBUaGUgc3BlbGxjaGVja2luZyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBv
biB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICAgICAgICBJdCBjYW4gYmUgdXNlZCBieSBvdGhlciBX
ZWJLaXQgcG9ydHMuCisgICAgICAgICogU291cmNlL2NtYWtlY29uZmlnLmguY21ha2U6IEFkZCB0
aGUgZmVhdHVyZS4KKwogMjAxMi0wOS0yNyAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0
Lm9yZz4KIAogICAgICAgICBTdWdnZXN0aW9uUGlja2VyIHNob3VsZCBzdXBwb3J0IHJ0bApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDBhNjA2YTguLjZiYzRhMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxMi0wOS0yNCAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBzYW1zdW5nLmNv
bT4sIE1pY2hhbCBSb2ogPG0ucm9qQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0g
SW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2luZyBmZWF0dXJlLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE4NTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAg
ICAgICBBZGQgZW5jaGFudC1yZWxhdGVkIGNvbXBpbGVyIGZsYWdzOiBoZWFkZXIgcGF0aHMgYW5k
IHRoZSBsaWJyYXJ5IGZsYWcuCisKIDIwMTItMDktMjcgIFlvc2hpZnVtaSBJbm91ZSAgPHlvc2lu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbRm9ybXNdIEJhc2VNdWx0aXBsZUZpZWxkc0RhdGVB
bmRUaW1lSW5wdXRUeXBlIGNsYXNzIHNob3VsZCBpbmhlcml0IERhdGVUaW1lRWRpdEVsZW1lbnQ6
OkVkaXRDb250cm9sT3duZXIgcmF0aGVyIHRoYW4gY29udGFpbmluZwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCA1ZjM1YjQ1Li5jZDA3YWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQpAQCAtODIsNiArODIsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZv
cm0vUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9T
SVguY3BwCiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VF
ZmwuY3BwCisgIHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCiAp
CiAKIElGIChFTkFCTEVfQkFUVEVSWV9TVEFUVVMpCkBAIC0zMjUsMyArMzI2LDExIEBAIElGIChF
TkFCTEVfV0VCX0FVRElPKQogICBBRERfREVGSU5JVElPTlMoLURVTklOU1RBTExFRF9BVURJT19S
RVNPVVJDRVNfRElSPSIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9hdWRpby9yZXNvdXJjZXMiKQog
RU5ESUYgKCkKIAorSUYgKEVOQUJMRV9TUEVMTENIRUNLKQorICAgIExJU1QoQVBQRU5EIFdlYkNv
cmVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAke0VOQ0hBTlRfSU5DTFVERV9ESVJTfQor
ICAgICkKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAke0VOQ0hB
TlRfTElCUkFSSUVTfQorICAgICkKK0VORElGKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA4ZjVhNmZhLi4wNTgx
Y2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIxIEBACisyMDEyLTA5LTI0ICBHcnplZ29yeiBD
emFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFsIFJvaiA8bS5yb2pA
c2Ftc3VuZy5jb20+CisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2luZyBm
ZWF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTE4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgc3BlbGxpbmcgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDItRUZMIHRoYXQgaXMgYmFzZWQg
b24gRW5jaGFudCBsaWJyYXJ5LgorCisgICAgICAgIEFkZGl0aW9uYWxseSB0aGUgcGF0Y2ggcHJv
dmlkZXMgQVBJIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGlt
cGxlbWVudGF0aW9uCisgICAgICAgIGFzIEVuY2hhbnQgbGlicmFyeSBkb2Vzbid0IGVuc3VyZSBn
cmFtbWFyIGNoZWNraW5nLgorICAgICAgICBBcHBsaWNhdGlvbiBpcyBhYmxlIHRvIG92ZXJ3cml0
ZSBpdCAoYm90aCBncmFtbWFyIGFuZCBzcGVsbCBjaGVja2luZykgYnkgZGVmaW5pbmcKKyAgICAg
ICAgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZyBhcHByb3ByaWF0ZSBjYWxsYmFj
ayBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgQWRk
IGVuY2hhbnQtcmVsYXRlZCBjb21waWxlciBmbGFnczogaGVhZGVyIHBhdGhzIGFuZCB0aGUgbGli
cmFyeSBmbGFnLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaDoKKyAg
ICAgICAgQWRkIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgQVBJIHRvIHRoZSBtYWluIFdlYktpdDIt
RUZMJ3MgaGVhZGVyIHRvIGJlIGF2YWlsYWJsZSBmb3IgYXBwbGljYXRpb25zLgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgSW1wbGVtZW50IGNhbGxiYWNrcyBmdW5jdGlvbnMgb2YgV0tUZXh0Q2hlY2tlci4KKworICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6aXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0FsbG93ZWQpOgorICAgICAgICAoV2ViS2l0Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0Ojp1
bmlxdWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6Y2xvc2VTcGVsbERvY3Vt
ZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6
c3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OnRvZ2dsZVNwZWxsaW5nVUlJ
c1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxs
ZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3Ry
aW5nKToKKyAgICAgICAgKFdlYktpdDo6Z3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0
OjpsZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjppZ25vcmVXb3JkKToKKyAgICAgICAgVGhv
c2UgbWV0aG9kcyBhcmUgZGlyZWN0bHkgZ2l2ZW4gYXMgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciBX
S1RleHRDaGVja2VyJ3MgY2xpZW50LgorICAgICAgICBUaGV5IGNob29zZSBiZXR3ZWVuIFdlYktp
dCdzIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGFuZCBjbGllbnQncyBvbmVzLgorCisgICAgICAg
IChXZWJLaXQ6OmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAoV2Vi
S2l0Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6bG9h
ZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFRoZXkgYXJlIHVzZWQgYnkgZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5ncy5jcHAgZmlsZSBhbmQgYWxsb3cgdG8gZG8gbm90CisgICAg
ICAgIGV4cG9zZSAnbV90ZXh0Q2hlY2tlckVuY2hhbnQnLgorCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSB0aGUg
ZnVuY3Rpb25zIHdoaWNoIGNob29zZXMgYmV0d2VlbiBjbGllbnQncyBpbXBsZW1lbnRhdGlvbiBv
ZiBzcGVsbGluZyBhbmQgdGhlIFdlYktpdCBvbmUuCisKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoX0V3a19D
b250ZXh0OjpfRXdrX0NvbnRleHQpOgorICAgICAgICBJbml0aWFsaXplIHNwZWxsY2hlY2tlciBm
ZWF0dXJlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5j
cHA6IEFkZGVkLgorICAgICAgICAoZXdrVGV4dENoZWNrZXIpOgorICAgICAgICBHZXQgdGhlIGNs
aWVudCdzIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a190ZXh0X2NoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSBBUEkgdG8gc2V0IHRo
ZSBjbGllbnQncyBvd24gc3BlbGxpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAg
IChfRXdrX1RleHRfQ2hlY2tlcik6CisgICAgICAgIERlZmluZSBzdHJ1Y3Qgd2l0aCBjbGllbnQn
cyBjYWxsYmFja3MgcmVzcG9uaXNibGUgZm9yIHNwZWxsaW5nLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5jcHA6IEFkZGVkLgorICAgICAg
ICAoaWRsZXJHcmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKToKKyAgICAgICAgKGlkbGVyU3BlbGxDaGVj
a2luZ0xhbmd1YWdlc1NldCk6CisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBpcyBub3RpZmllZCBh
Ym91dCBzcGVsbGluZyBzZXR0aW5ncyBjaGFuZ2UgKHRoZXkgbWF5IGJlIGNoYW5nZWQKKyAgICAg
ICAgdGhyb3VnaCBjb250ZXh0IG1lbnUgb3B0aW9uKSBvbiBpZGxlciB0byBkbyBub3QgYmxvY2sg
V2ViS2l0LgorCisgICAgICAgIChzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KToKKyAgICAgICAg
VGhlIGRpY3Rpb25hcmllcyBhcmUgcmVxdWVzdGVkIG9uIGlkbGVyIHRvIGRvIG5vdCBibG9jayBX
ZWJLaXQuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdzX2dyYW1tYXJfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQpOgorICAgICAgICBTZXQg
dGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4gdGhl
IHNwZWxsaW5nIHNldHRpbmdzCisgICAgICAgIHdlcmUgY2hhbmdlZCBieSBXZWJLaXQuCisKKyAg
ICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfZ2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxl
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfc2V0KToKKyAgICAgICAgQVBJIHRvIHNldC9nZXQg
dGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190ZXh0X2NoZWNr
ZXJfc2V0dGluZ3NfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KToKKyAgICAgICAgKGV3a190
ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KToKKyAgICAg
ICAgQVBJIHRvIHNldC9nZXQgdGhlIGdyYW1tYXIgY2hlY2tpbmcuCisKKyAgICAgICAgKGV3a190
ZXh0X2NoZWNrZXJfc2V0dGluZ3NfYXZhaWxhYmxlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19n
ZXQpOgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9jaGVja2luZ19s
YW5ndWFnZXNfc2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Nfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCk6CisgICAgICAgIEFQSSB0byBzZXQvZ2V0IGxhbmd1YWdl
cyB0byB1c2UgYnkgV2ViS2l0IGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFy
eS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z3MuaDogQWRkZWQuCisgICAgICAgIEFkZCBBUEkgZm9yIG1hbmlwdWxhdGluZyBzcGVsbCBjaGVj
a2VyIGZlYXR1cmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAg
ICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpn
cmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOiBSZW1vdmUgV2ViQ29yZSBuYW1hc3BhY2Ug
YXMgaXQncyBhbHJlYWR5IGRlZmluZWQgZm9yIHRoZSB3aG9sZSBmaWxlLgorICAgICAgICAoV2Vi
S2l0OjpUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpOgorICAg
ICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3Ry
aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJL
aXQ6OlRleHRDaGVja2VyOjppZ25vcmVXb3JkKToKKyAgICAgICAgVGhvc2UgY2FsbCBXS1RleHRD
aGVja2VyIGNsaWVudCBtZXRob2RzLgorCiAyMDEyLTA5LTI2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgRml4IFhQQ1NlcnZpY2VzIHN5bWxpbmsgdG8gbm90IGJlIHRv
IGFuIGFic29sdXRlIHBhdGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggZDM5MzJiNi4u
MzYwNWExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTQwLDYgKzQwLDcgQEAgTElT
VChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvTmV0d29ya0lu
Zm9Qcm92aWRlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAK
ICAgICBVSVByb2Nlc3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92aWRlci5jcHAKKyAgICBVSVByb2Nl
c3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwCkBAIC01NCw2ICs1NSw4IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbi5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9pdGVtLmNwcAogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z3MuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXF1ZXN0LmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5jcHAKQEAgLTEyMiw2ICsxMjUsNyBAQCBMSVNUKEFQ
UEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZWZsIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyIK
ICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9zb3VwIgorICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2Zy9n
cmFwaGljcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIKICAgICAiJHtXRUJLSVQy
X0RJUn0vU2hhcmVkL3NvdXAiCkBAIC0yMjQsNiArMjI4LDggQEAgU0VUIChFV2ViS2l0Ml9IRUFE
RVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uaCIKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5n
cy5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RleHRfY2hlY2tlci5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5oIgogICAgICIke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RvdWNoLmgiCiAgICAg
IiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jl
cXVlc3QuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a191cmxfcmVzcG9uc2UuaCIKQEAgLTMyOCwzICszMzQsMTIgQEAgSUYgKEVOQUJMRV9J
TlNQRUNUT1IpCiAgICAgICAgICAgICAgICAgICAgICAgIFBBVFRFUk4gIiouZ2lmIgogICAgICAg
ICAgICAgICAgICAgICAgICBQQVRURVJOICIqLnBuZyIpCiBFTkRJRiAoKQorCitJRiAoRU5BQkxF
X1NQRUxMQ0hFQ0spCisgICAgTElTVChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVT
CisgICAgICAgICR7RU5DSEFOVF9JTkNMVURFX0RJUlN9CisgICAgKQorICAgIExJU1QoQVBQRU5E
IFdlYktpdDJfTElCUkFSSUVTCisgICAgICAgICR7RU5DSEFOVF9MSUJSQVJJRVN9CisgICAgKQor
RU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdl
YktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5k
ZXggMTNlZmFiMS4uMDJkMjIxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9FV2ViS2l0Mi5oCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uLmgiCiAjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfaXRlbS5oIgogI2lu
Y2x1ZGUgImV3a19zZXR0aW5ncy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXIuaCIKKyNp
bmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiZXdrX3RvdWNo
LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNw
b25zZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2Vi
S2l0VGV4dENoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2Vi
S2l0VGV4dENoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNl
OTM3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKworI2lm
IEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgorI2luY2x1ZGUg
IldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2Vi
U3RyaW5nLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisjaW5jbHVk
ZSAiZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworc3RhdGljIE93blB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hh
bnQ+IHRleHRDaGVja2VyRW5jaGFudCA9IFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudDo6Y3Jl
YXRlKCk7CitzdGF0aWMgRXdrX1RleHRfQ2hlY2tlciogZXdrVGV4dENoZWNrZXJDYWxsYmFjayA9
IGV3a1RleHRDaGVja2VyKCk7CisKK2Jvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93
ZWQoY29uc3Qgdm9pZCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBUaGlzIG1l
dGhvZCBpcyBub3QgY2FsbGVkIGJ5IFdlYktpdDIvV2ViQ29yZS4gSnVzdCBrZWVwIGl0IGZvciBB
UEkgY29tcGF0aWJpbGl0eS4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIGV3a190
ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0
KCk7Cit9CisKK3ZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5h
YmxlZCwgY29uc3Qgdm9pZCopCit7CisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFi
bGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoZW5hYmxlZCk7Cit9CisKK2Jvb2wgaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdzX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX2dldCgpOworfQorCit2
b2lkIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkKikK
K3sKKyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5n
X3NldChlbmFibGVkKTsKK30KKwordWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1Bh
Z2VSZWYgcGFnZSwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJh
Y2stPnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KQorICAgICAgICByZXR1cm4gZXdrVGV4
dENoZWNrZXJDYWxsYmFjay0+dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQodG9JbXBsKHBh
Z2UpLT52aWV3V2lkZ2V0KCkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgY2xvc2VTcGVs
bERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChl
d2tUZXh0Q2hlY2tlckNhbGxiYWNrLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQor
ICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFn
X2Nsb3NlKHRhZyk7Cit9CisKK3ZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRh
ZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJf
dCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hl
Y2tlckNhbGxiYWNrLT5zdHJpbmdfc3BlbGxpbmdfY2hlY2spCisgICAgICAgIGV3a1RleHRDaGVj
a2VyQ2FsbGJhY2stPnN0cmluZ19zcGVsbGluZ19jaGVjayh0YWcsIHRvSW1wbCh0ZXh0KS0+c3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5n
dGgpOworICAgIGVsc2UKKyAgICAgICAgdGV4dENoZWNrZXJFbmNoYW50LT5jaGVja1NwZWxsaW5n
T2ZTdHJpbmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxsaW5nTG9jYXRpb24sICpt
aXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK3ZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcodWludDY0
X3QsIFdLU3RyaW5nUmVmLCBXS0FycmF5UmVmKiwgaW50MzJfdCosIGludDMyX3QqLCBjb25zdCB2
b2lkKikKK3sKKyAgICAvLyBGSVhNRTogQ2FsbCBjbGllbnQncyBmdW5jdGlvbi4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitib29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoY29uc3Qgdm9pZCop
Cit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPnVpX3NwZWxsaW5nX3N0YXR1c19n
ZXQpCisgICAgICAgIHJldHVybiBld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT51aV9zcGVsbGluZ19z
dGF0dXNfZ2V0KCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgdG9nZ2xlU3BlbGxp
bmdVSUlzU2hvd2luZyhjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxs
YmFjay0+dWlfc3BlbGxpbmdfc3RhdHVzX3RvZ2dsZSkKKyAgICAgICAgZXdrVGV4dENoZWNrZXJD
YWxsYmFjay0+dWlfc3BlbGxpbmdfc3RhdHVzX3RvZ2dsZSgpOworfQorCit2b2lkIHVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiBtaXNz
cGVsbGVkV29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJh
Y2stPnVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGUpCisgICAgICAgIGV3a1RleHRD
aGVja2VyQ2FsbGJhY2stPnVpX3NwZWxsaW5nX21pc3NwZWxsZWRfd29yZF91cGRhdGUodGFnLCB0
b0ltcGwobWlzc3BlbGxlZFdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9p
ZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3QsIFdLU3RyaW5nUmVm
LCBXS0dyYW1tYXJEZXRhaWxSZWYsIGNvbnN0IHZvaWQqKQoreworICAgIC8vIEZJWE1FOiBjYWxs
IGNsaWVudCdzIGZ1bmN0aW9uLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1dLQXJyYXlS
ZWYgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2
b2lkKikKK3sKKyAgICBXS011dGFibGVBcnJheVJlZiBzdWdnZXN0aW9uc0ZvcldvcmQgPSBXS011
dGFibGVBcnJheUNyZWF0ZSgpOworCisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPndv
cmRfZ3Vlc3Nlc19nZXQpIHsKKyAgICAgICAgRWluYV9MaXN0KiBsaXN0ID0gZXdrVGV4dENoZWNr
ZXJDYWxsYmFjay0+d29yZF9ndWVzc2VzX2dldCh0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHZvaWQqIGl0ZW07CisKKyAgICAgICAgRUlOQV9MSVNU
X0ZSRUUobGlzdCwgaXRlbSkgeworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RhdGlj
X2Nhc3Q8Y2hhcio+KGl0ZW0pKSk7CisgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShzdWdn
ZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOworICAgICAgICAgICAgZnJlZShpdGVt
KTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vl
c3NlcyA9IHRleHRDaGVja2VyRW5jaGFudC0+Z2V0R3Vlc3Nlc0ZvcldvcmQodG9JbXBsKHdvcmQp
LT5zdHJpbmcoKSk7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkd1ZXNzZXMgPSBndWVzc2VzLnNp
emUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkd1ZXNzZXM7ICsr
aSkgeworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ3Vlc3Nlc1tpXS51dGY4KCkuZGF0
YSgpKSk7CisgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQs
IHN1Z2dlc3Rpb24uZ2V0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN1Z2dl
c3Rpb25zRm9yV29yZDsKK30KKwordm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmlu
Z1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFj
ay0+d29yZF9sZWFybikKKyAgICAgICAgZXdrVGV4dENoZWNrZXJDYWxsYmFjay0+d29yZF9sZWFy
bih0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZWxzZQor
ICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQtPmxlYXJuV29yZCh0b0ltcGwod29yZCktPnN0cmlu
ZygpKTsKK30KKwordm9pZCBpZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29y
ZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2stPndvcmRf
aWdub3JlKQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrLT53b3JkX2lnbm9yZSh0YWcs
IHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZWxzZQorICAgICAg
ICB0ZXh0Q2hlY2tlckVuY2hhbnQtPmlnbm9yZVdvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7
Cit9CisKK1ZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQor
eworICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQtPmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdM
YW5ndWFnZXMoKTsKK30KKwordm9pZCB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpCit7CisgICAgdGV4dENoZWNrZXJFbmNoYW50LT51
cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Cit9CisKK1ZlY3RvcjxTdHJp
bmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQoreworICAgIHJldHVybiB0ZXh0Q2hl
Y2tlckVuY2hhbnQtPmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NzRkMmQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5o
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVj
dHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYktpdFRleHRDaGVja2Vy
X2gKKyNkZWZpbmUgV2ViS2l0VGV4dENoZWNrZXJfaAorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CisKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckVuY2hhbnQuaCIKKyNpbmNsdWRlICJXS0FycmF5Lmgi
CisjaW5jbHVkZSAiV0tQYWdlLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKKy8vIFRoZSBmdW5jdGlvbnMgbWFpbmx5IGNob29zZSBiZXR3ZWVuIGNsaWVu
dCdzIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsaW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KKworLy8g
Q2FsbGJhY2tzIHJlcXVpcmVkIGJ5IFdLVGV4dENoZWNrZXIuCitib29sIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdBbGxvd2VkKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworYm9vbCBpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQg
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbyk7Citib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKK3ZvaWQgc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGVuYWJs
ZWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCit1aW50NjRfdCB1bmlxdWVTcGVsbERvY3Vt
ZW50VGFnKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgY2xv
c2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOworCit2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5n
UmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxs
aW5nTGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgY2hlY2tHcmFtbWFyT2ZT
dHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBXS0FycmF5UmVmKiBncmFtbWFy
RGV0YWlscywgaW50MzJfdCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90KiBiYWRHcmFtbWFy
TGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKworYm9vbCBzcGVsbGluZ1VJSXNTaG93
aW5nKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCB0b2dnbGVTcGVsbGluZ1VJSXNTaG93
aW5nKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgbWlzc3BlbGxlZFdvcmQsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiBiYWRHcmFtbWFyUGhyYXNlLCBXS0dyYW1t
YXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK1dL
QXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgbGVhcm5Xb3JkKHVpbnQ2NF90IHRhZywgV0tT
dHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIGlnbm9yZVdvcmQo
dWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsK
KworLy8gRW5jaGFudCdzIGhlbHBlci4KK1ZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZVNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMoKTsKK3ZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKTsKK1ZlY3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMoKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoU1BFTExDSEVDSykKKyNlbmRpZiAvLyBXZWJLaXRUZXh0Q2hlY2tlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXgg
YjM0ZmY3Ny4uZTk0Nzc3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0LmNwcApAQCAtMzgsNiArMzgsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorI2lmIEVOQUJMRShTUEVMTENIRUNLKQorI2luY2x1ZGUgImV3a190
ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z3MuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CkBAIC0xMDMsNiArMTA3LDEyIEBAIHN0cnVjdCBfRXdrX0NvbnRleHQgewogI2Vu
ZGlmCiAgICAgICAgIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnRfYXR0YWNoKHRo
aXMpOwogICAgICAgICBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfYXR0YWNoKHRoaXMpOwor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgICAgICBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9h
dHRhY2goKTsKKyAgICAgICAgaWYgKGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCkpCisgICAgICAgICAgICBld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7CisjZW5kaWYKKwog
ICAgIH0KIAogICAgIH5fRXdrX0NvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41ZjAyNDIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKQEAgLTAsMCArMSwxMjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RleHRf
Y2hlY2tlci5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiV0tUZXh0Q2hl
Y2tlci5oIgorI2luY2x1ZGUgIldlYktpdFRleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiZXdrX3Rl
eHRfY2hlY2tlcl9wcml2YXRlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8vIElu
aXRpYWxpemVzIGNsaWVudCdzIGZ1bmN0aW9ucyB0byBAYyAwIHRvIGJlIHN1cmUgdGhhdCB0aGV5
IGFyZSBub3QgZGVmaW5lZC4KK3N0YXRpYyBFd2tfVGV4dF9DaGVja2VyIGV3a1RleHRDaGVja2Vy
Q2FsbGJhY2sgPSB7CisgICAgMCwgLy8gdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQKKyAg
ICAwLCAvLyB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlCisgICAgMCwgLy8gc3RyaW5n
X3NwZWxsaW5nX2NoZWNrCisgICAgMCwgLy8gdWlfc3BlbGxpbmdfc3RhdHVzX2dldAorICAgIDAs
IC8vIHVpX3RvZ2dsZV9zcGVsbGluZ19zdGF0dXNfZ2V0CisgICAgMCwgLy8gdWlfc3BlbGxpbmdf
bWlzc3BlbGxlZF93b3JkX3VwZGF0ZQorICAgIDAsIC8vIHdvcmRfZ3Vlc3Nlc19nZXQKKyAgICAw
LCAvLyB3b3JkX2xlYXJuCisgICAgMCAvLyB3b3JkX2lnbm9yZQorfTsKKworI2RlZmluZSBFV0tf
VEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05BTUUsIE5BTUUpICBcCit2b2lkIGV3a190
ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSBjYikgICAgIFwKK3sgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGV3
a1RleHRDaGVja2VyQ2FsbGJhY2suTkFNRSA9IGNiOyAgICAgICAgICAgICAgICAgICBcCit9CisK
Ky8qKgorICogQXR0YWNoZXMgc3BlbGxjaGVja2VyIGZlYXR1cmUuCisgKgorICogQGludGVybmFs
CisgKgorICogVGhlIGRlZmF1bHQgc3BlbGxjaGVja2VyIGZlYXR1cmUgaXMgYmFzZWQgb24gRW5j
aGFudCBsaWJyYXJ5LgorICogQ2xpZW50IG1heSB1c2Ugb3duIGltcGxlbWVudGF0aW9uIG9mIHNw
ZWxsY2hlY2tlciBwcmV2aW91c2x5IHNldAorICogdGhyb3VnaCB0aGUgY2FsbGJhY2sgZnVuY3Rp
b25zLgorICovCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfY2xpZW50X2F0dGFjaCgpCit7CisgICAg
c3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZVRleHRDaGVja2VyQ2xpZW50ID0gZmFsc2U7CisgICAg
aWYgKGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV0tUZXh0Q2hlY2tlckNsaWVudCB0ZXh0Q2hlY2tlckNsaWVudCA9IHsKKyAgICAgICAga1dL
VGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgMCwgLy8gY2xpZW50SW5m
bworICAgICAgICBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCwKKyAgICAgICAgaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQsCisgICAgICAgIHNldENvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCwKKyAgICAgICAgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkLAorICAg
ICAgICBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICB1bmlxdWVTcGVsbERvY3Vt
ZW50VGFnLAorICAgICAgICBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnLAorICAgICAgICBjaGVj
a1NwZWxsaW5nT2ZTdHJpbmcsCisgICAgICAgIGNoZWNrR3JhbW1hck9mU3RyaW5nLAorICAgICAg
ICBzcGVsbGluZ1VJSXNTaG93aW5nLAorICAgICAgICB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5n
LAorICAgICAgICB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkLAorICAgICAgICB1
cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcsCisgICAgICAgIGd1ZXNzZXNGb3JXb3Jk
LAorICAgICAgICBsZWFybldvcmQsCisgICAgICAgIGlnbm9yZVdvcmQKKyAgICB9OworICAgIFdL
VGV4dENoZWNrZXJTZXRDbGllbnQoJnRleHRDaGVja2VyQ2xpZW50KTsKKworICAgIGRpZEluaXRp
YWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IHRydWU7Cit9CisKKy8qCisgKiBHZXRzIHRvIHRoZSBj
bGllbnQncyBjYWxsYmFja3MuCisgKgorICogQGludGVybmFsCisgKgorICogVGhlIGNsaWVudCd0
IGNhbGxiYWNrcyBhcmUgbm90IGRlZmluZWQgYnkgZGVmYXVsdC4KKyAqIElmIHRoZSBjbGllbnQg
aGFzbid0IHNldCB0aGUgY2FsbGJhY2ssIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIHdpbGwK
KyAqIHJldHVybiBAYyAwIGFuZCB0aGUgZGVmYXVsdCBXZWJLaXQgaW1wbGVtZW50YXRpb24gd2ls
bCBiZSB1c2VkIGZvciB0aGlzCisgKiBmdW5jdGlvbmFsaXR5LgorICoKKyAqIEByZXR1cm4gdGhl
IHN0cnVjdCB3aXRoIHRoZSBjbGllbnQncyBjYWxsYmFja3MuCisgKi8KK0V3a19UZXh0X0NoZWNr
ZXIqIGV3a1RleHRDaGVja2VyKCkKK3sKKyAgICByZXR1cm4gJmV3a1RleHRDaGVja2VyQ2FsbGJh
Y2s7Cit9CisKKyNlbHNlCisKKy8vIERlZmluZXMgYW4gZW1wdHkgQVBJIHRvIGRvIG5vdCBicmVh
ayBidWlsZC4KKyNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1F
LCBOQU1FKSAgXAordm9pZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05B
TUUpICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKK30KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKworRVdLX1RF
WFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9j
dW1lbnRfVGFnX0dldCwgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCitFV0tfVEVYVF9D
SEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVu
dF9UYWdfQ2xvc2UsIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UpCitFV0tfVEVYVF9D
SEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVj
aywgc3RyaW5nX3NwZWxsaW5nX2NoZWNrKQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQo
RXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfR2V0LCB1aV9zcGVsbGluZ19zdGF0
dXNfZ2V0KQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9V
SV9TcGVsbGluZ19TdGF0dXNfVG9nZ2xlLCB1aV9zcGVsbGluZ19zdGF0dXNfdG9nZ2xlKQorRVdL
X1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19N
aXNzcGVsbGVkX1dvcmRfVXBkYXRlLCB1aV9zcGVsbGluZ19taXNzcGVsbGVkX3dvcmRfdXBkYXRl
KQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1
ZXNzZXNfR2V0LCB3b3JkX2d1ZXNzZXNfZ2V0KQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19T
RVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuLCB3b3JkX2xlYXJuKQorRVdLX1RFWFRfQ0hF
Q0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZSwgd29yZF9pZ25v
cmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4
dF9jaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxNTBkZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0
X2NoZWNrZXIuaApAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUg
ZXdrX3RleHRfY2hlY2tlci5oCisgKiBAYnJpZWYgUHJvdmlkZXMgQVBJIHRvIG92ZXJ3cml0ZSB0
aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFRo
ZXJlIGlzIG9uZSBzcGVsbGNoZWNrZXIgb2JqZWN0IHBlciBhcHBsaWNhdGlvbiBhbmQgaXQncyBk
aXNhYmxlZCBieSBkZWZhdWx0LgorICogSXQgYWxsb3dzIHRvIGNoZWNrIHNwZWxsaW5nIGluIHRo
ZSBlZGl0YWJsZSBhcmVhcy4KKyAqIElmIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGVuYWJsZSB0aGUg
ZmVhdHVyZSwgQVBJIGZyb20gQGEgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgKKyAqIHNob3Vs
ZCBiZSB1c2VkLgorICoKKyAqIFRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVt
ZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIEVuY2hhbnQgbGlicmFyeS4KKyAqIEl0IGRvZXNuJ3Qg
ZW5zdXJlIGdyYW1tYXIgY2hlY2tpbmcuIEFwcGxpY2F0aW9uIGlzIGFibGUgdG8gb3ZlcndyaXRl
IHRoZSBkZWZhdWx0CisgKiBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uIGJ5IGRl
ZmluaW5nIGl0cyBvd24gaW1wbGVtZW50YXRpb24gYW5kIHNldHRpbmcKKyAqIGFwcHJvcHJpYXRl
IGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqLworCisjaWZuZGVmIGV3a190ZXh0X2NoZWNrZXJfaAor
I2RlZmluZSBld2tfdGV4dF9jaGVja2VyX2gKKworI2luY2x1ZGUgPEV2YXMuaD4KKworI2lmZGVm
IF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIERlZmluZXMgYSB0
eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byByZXR1cm4gYSB0YWcgKGlkZW50
aWZpZXIpIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLgorICoKKyAqIFVuaXF1ZSB0
YWdzIGhlbHAgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIG90aGVyIG9iamVjdHMgdGhhdCBhcmUg
Y2hlY2tlZCBmb3Igc3BlbGxpbmcgbWlzdGFrZXMuCisgKgorICogQHBhcmFtIG8gdGhlIHZpZXcg
b2JqZWN0IHRvIGdldCB1bmlxdWUgdGFnCisgKgorICogQHJldHVybiB1bmlxdWUgdGFnIGZvciB0
aGUgZ2l2ZW4gQGEgbyB2aWV3IG9iamVjdAorICovCit0eXBlZGVmIHVpbnQ2NF90ICgqRXdrX1Rl
eHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldCkoY29uc3QgRXZhc19PYmpl
Y3QgKm8pOworCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBm
dW5jdGlvbiB0byBjbG9zZSB0aGUgcHJ2aW91c2x5IHNldCB0YWcuCisgKgorICogVGhpcyBjYWxs
YmFjayB3aWxsIG5vdGlmeSB0aGUgcmVjZWl2ZXIgdGhhdCB0aGUgdXNlciBoYXMgZmluaXNoZWQg
d2l0aCB0aGUgdGFnZ2VkIGRvY3VtZW50LgorICoKKyAqIEBwYXJhbSB0YWcgdGhlIHRhZyB0byBi
ZSBjbG9zZWQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3Bl
bGxfRG9jdW1lbnRfVGFnX0Nsb3NlKSh1aW50NjRfdCB0YWcpOworCisvKioKKyAqIERlZmluZXMg
YSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZWFyY2ggZm9yIGEgbWlz
c3BlbGxlZCB3b3JkcyBpbiB0aGUgZ2l2ZW4gc3RyaW5nLgorICoKKyAqIEBwYXJhbSB0YWcgdW5p
cXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIgd2hpY2ggZG9jdW1lbnQgdGhhdCBA
YSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAgICAgICAgaW4gbW9zdCBjYXNlcyBub3QgbmVjZXNz
YXJpbHksIGp1c3QgZm9yIGlnbm9yZWQgd29yZCwKKyAqICAgICAgICBAYyAwIGNhbiBiZSBwYXNz
ZWQgaW4gZm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZG9jdW1lbnQK
KyAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IGNvbnRhaW5pbmcgdGhlIHdvcmRzIHRvIHNwZWxsY2hl
Y2sKKyAqIEBwYXJhbSBtaXNzcGVsbGluZ19sb2NhdGlvbiBhIHBvaW50ZXIgdG8gc3RvcmUgdGhl
IGJlZ2lubmluZyBvZiB0aGUgbWlzc3BlbGxlZCBAYSB0ZXh0LCBAYyAtMSBpZiB0aGUgQGEgdGV4
dCBpcyBjb3JyZWN0CisgKiBAcGFyYW0gbWlzc3BlbGxpbmdfbGVuZ3RoIGEgcG9pbnRlciB0byBz
dG9yZSB0aGUgbGVuZ3RoIG9mIG1pc3NwZWxsZWQgQGEgdGV4dCwgQGMgMCBpZiB0aGUgQGEgdGV4
dCBpcyBjb3JyZWN0CisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU3RyaW5n
X1NwZWxsaW5nX0NoZWNrKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKnRleHQsIGludDMyX3Qg
Km1pc3NwZWxsaW5nX2xvY2F0aW9uLCBpbnQzMl90ICptaXNzcGVsbGluZ19sZW5ndGgpOworCisv
KioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBn
ZXQgdGhlIHN0YXR1cyBvZiBVSSBTcGVsbGluZy4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJV
RSBpZiB0aGUgVUkgU3BlbGxpbmcgaXMgc2hvd24sIEBjIEVJTkFfRkFMU0UgaWYgaXQncyBoaWRk
ZW4KKyAqLwordHlwZWRlZiBFaW5hX0Jvb2wgKCpFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5n
X1N0YXR1c19HZXQpKHZvaWQpOworCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRo
ZSBjYWxsYmFjayBmdW5jdGlvbiB0byB0b2dnbGUgdGhlIFVJIFNwZWxsaW5nLgorICovCit0eXBl
ZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1VJX1NwZWxsaW5nX1N0YXR1c19Ub2dnbGUpKHZv
aWQpOworCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5j
dGlvbiB0byB1cGRhdGUgdGhlIFVJIFNwZWxsaW5nIGZvciB0aGUgbWlzc3BlbGxlZCB3b3JkLgor
ICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIg
d2hpY2ggZG9jdW1lbnQgdGhhdCB0aGUgbWlzc3BlbGxlZCB3b3JkIGlzIGFzc29jaWF0ZWQsCisg
KiBAcGFyYW0gbWlzc3BlbGxlZF93b3JkIHRoZSBtaXNzcGVsbGVkIHdvcmQKKyAqLwordHlwZWRl
ZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19NaXNzcGVsbGVkX1dvcmRfVXBk
YXRlKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKm1pc3NwZWxsZWRfd29yZCk7CisKKy8qKgor
ICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBh
IGxpc3Qgb2Ygc3VnZ2VzdGVkIHNwZWxsaW5ncyBmb3IgYSBtaXNzcGVsbGVkIEBhIHdvcmQuCisg
KgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3
aGljaCBkb2N1bWVudCB0aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBAYyAw
IGNhbiBiZSBwYXNzZWQgZm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIg
ZG9jdW1lbnQKKyAqIEBwYXJhbSB3b3JkIHRoZSB3b3JkIHRvIGdldCBndWVzc2VzCisgKiBAcmV0
dXJuIGEgbGlzdCBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5ncyAoYXMgY2hhciopIGFu
ZAorICogICAgICAgICBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGRlc3Ryb3lpbmcgdGhlbS4K
KyAqLwordHlwZWRlZiBFaW5hX0xpc3QgKigqRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNf
R2V0KSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOworCisvKioKKyAqIFNldHMgYSBj
YWxsYmFjayBmdW5jdGlvbiB0byBhZGQgdGhlIHdvcmQgdG8gdGhlIHNwZWxsIGNoZWNrZXIgZGlj
dGlvbmFyeS4KKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBzcGVs
bCBjaGVja2VyIHdoaWNoIGRvY3VtZW50IHRoYXQgQGEgdGV4dCBpcyBhc3NvY2lhdGVkLAorICog
ICAgICAgIEBjIDAgY2FuIGJlIHBhc3NlZCBmb3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEg
cGFydGljdWxhciBkb2N1bWVudAorICogQHBhcmFtIHdvcmQgdGhlIHdvcmQgdG8gYWRkCisgKi8K
K3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfV29yZF9MZWFybikodWludDY0X3QgdGFn
LCBjb25zdCBjaGFyICp3b3JkKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24g
dG8gdGVsbCB0aGUgc3BlbGwgY2hlY2tlciB0byBpZ25vcmUgYSBnaXZlbiB3b3JkLgorICoKKyAq
IEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIgd2hpY2gg
ZG9jdW1lbnQgdGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAgICAgICAgQGMgMCBjYW4g
YmUgcGFzc2VkIGZvciB0ZXh0IG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGRvY3Vt
ZW50CisgKiBAcGFyYW0gd29yZCB0aGUgd29yZCB0byBpZ25vcmUKKyAqLwordHlwZWRlZiB2b2lk
ICgqRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZSkodWludDY0X3QgdGFnLCBjb25zdCBjaGFy
ICp3b3JkKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGEgdW5p
cXVlIHNwZWxsIGRvY3VtZW50IHRhZy4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sg
dG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sg
aW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfdW5pcXVlX3Nw
ZWxsX2RvY3VtZW50X3RhZ19nZXRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxs
X0RvY3VtZW50X1RhZ19HZXQgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlv
biB0byBjbG9zZSBhIHVuaXF1ZSBzcGVsbCBkb2N1bWVudCB0YWcuCisgKgorICogQHBhcmFtIGNi
IGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQg
V2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9j
aGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2VfY2Jfc2V0KEV3a19UZXh0X0No
ZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19DbG9zZSBjYik7CisKKy8qKgorICogU2V0
cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNlYXJjaCBmb3IgYSBtaXNzcGVsbGVkIHdvcmRzIGlu
IHRoZSBnaXZlbiBzdHJpbmcuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNl
dCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxl
bWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3N0cmluZ19zcGVsbGlu
Z19jaGVja19jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2sgY2Ip
OworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIHN0YXR1cyBv
ZiBVSSBTcGVsbGluZy4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9y
IEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50
YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfdWlfc3BlbGxpbmdfc3RhdHVz
X2dldF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfR2V0IGNiKTsK
KworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdG9nZ2xlIHRoZSBVSSBTcGVs
bGluZy4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwg
dG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAq
LworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfdWlfc3BlbGxpbmdfc3RhdHVzX3RvZ2dsZV9j
Yl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfVG9nZ2xlIGNiKTsKKwor
LyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBVSSBTcGVsbGlu
ZyBmb3IgdGhlIG1pc3NwZWxsZWQgd29yZC4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJh
Y2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJh
Y2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfdWlfc3Bl
bGxpbmdfbWlzc3BlbGxlZF93b3JkX3VwZGF0ZV9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9VSV9T
cGVsbGluZ19NaXNzcGVsbGVkX1dvcmRfVXBkYXRlIGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2Fs
bGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGFuIGFycmF5IG9mIHN1Z2dlc3RlZCBzcGVsbGluZ3MgZm9y
IGEgbWlzc3BlbGxlZCB3b3JkLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBz
ZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBs
ZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1ZXNzZXNf
Z2V0X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXQgY2IpOworCisvKioK
KyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBhZGQgdGhlIHdvcmQgdG8gdGhlIHNwZWxs
IGNoZWNrZXIgZGljdGlvbmFyeS4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8g
c2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1w
bGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfd29yZF9sZWFybl9j
Yl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuIGNiKTsKKworLyoqCisgKiBTZXRzIGEg
Y2FsbGJhY2sgZnVuY3Rpb24gdG8gdGVsbCB0aGUgc3BlbGwgY2hlY2tlciB0byBpZ25vcmUgYSBn
aXZlbiB3b3JkLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMg
TlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlv
bgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl93b3JkX2lnbm9yZV9jYl9zZXQoRXdr
X1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZSBjYik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQor
I2VuZGlmCisjZW5kaWYgLy8gZXdrX3RleHRfY2hlY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZTQxOWIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2Vy
X3ByaXZhdGUuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfdGV4
dF9jaGVja2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaAor
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgor
CisvKioKKyAqIEBicmllZiBTdHJ1Y3R1cmUgdGhhdCBrZWVwcyBjbGllbnQncyBjYWxsYmFjayBm
dW5jdGlvbnMuCisgKgorICogQGludGVybmFsCisgKi8KK3N0cnVjdCBfRXdrX1RleHRfQ2hlY2tl
ciB7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldCB1
bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldDsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1
ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2UgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9z
ZTsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVjayBzdHJpbmdfc3Bl
bGxpbmdfY2hlY2s7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGluZ19TdGF0dXNfR2V0
IHVpX3NwZWxsaW5nX3N0YXR1c19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VSV9TcGVsbGlu
Z19TdGF0dXNfVG9nZ2xlIHVpX3NwZWxsaW5nX3N0YXR1c190b2dnbGU7CisgICAgRXdrX1RleHRf
Q2hlY2tlcl9VSV9TcGVsbGluZ19NaXNzcGVsbGVkX1dvcmRfVXBkYXRlIHVpX3NwZWxsaW5nX21p
c3NwZWxsZWRfd29yZF91cGRhdGU7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNf
R2V0IHdvcmRfZ3Vlc3Nlc19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuIHdv
cmRfbGVhcm47CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZSB3b3JkX2lnbm9yZTsK
K307Cit0eXBlZGVmIF9Fd2tfVGV4dF9DaGVja2VyIEV3a19UZXh0X0NoZWNrZXI7CisKK0V3a19U
ZXh0X0NoZWNrZXIqIGV3a1RleHRDaGVja2VyKCk7CisKKy8vIE1ha2VzIGl0IHZpc2libGUgZm9y
IFdUUi4KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9hdHRhY2goKTsKKworI2Vu
ZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorI2VuZGlmIC8vIGV3a190ZXh0X2NoZWNrZXJfcHJp
dmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dGV4dF9jaGVja2VyX3NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmQ5ZDBmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzLmNwcApAQCAtMCwwICsx
LDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tf
dGV4dF9jaGVja2VyX3NldHRpbmdzLmgiCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNs
dWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKyNp
bmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyBzdHJ1
Y3QgeworICAgIGJvb2wgZW5hYmxlQ29udGludW91c1NwZWxsQ2hlY2tpbmcgOiAxOworICAgIGJv
b2wgZW5hYmxlR3JhbW1hckNoZWNraW5nIDogMTsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFd2tf
VGV4dF9DaGVja2VyX1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlZCBj
b250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQ7CisgICAgICAgIEV3a19UZXh0X0NoZWNrZXJf
U2V0dGluZ3NfR3JhbW1hcl9DaGVja2luZ19DaGFuZ2VkIGdyYW1tYXJDaGVja2luZ0NoYW5nZWQ7
CisgICAgfSBzZXR0aW5nc0NoYW5nZWRDYWxsYmFja3M7CisgICAgVmVjdG9yPFN0cmluZz4gc3Bl
bGxDaGVja2luZ0xhbmd1YWdlczsKK30gZXdrVGV4dENoZWNrZXJTZXR0aW5ncyA9IHsgZmFsc2Us
IGZhbHNlLCB7MCwgMH0sIFZlY3RvcjxTdHJpbmc+KCkgfTsKKworc3RhdGljIEVpbmFfQm9vbCBp
ZGxlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nQ2hhbmdlZCh2b2lkKikKK3sKKyAgICBpZiAoZXdr
VGV4dENoZWNrZXJTZXR0aW5ncy5zZXR0aW5nc0NoYW5nZWRDYWxsYmFja3MuY29udGludW91c1Nw
ZWxsQ2hlY2tpbmdDaGFuZ2VkKQorICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRp
bmdzQ2hhbmdlZENhbGxiYWNrcy5jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQoCisgICAg
ICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLmVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nKTsKKworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisKK3N0YXRpYyBF
aW5hX0Jvb2wgaWRsZXJHcmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKHZvaWQqKQoreworICAgIGlmIChl
d2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRpbmdzQ2hhbmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hl
Y2tpbmdDaGFuZ2VkKQorICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRpbmdzQ2hh
bmdlZENhbGxiYWNrcy5ncmFtbWFyQ2hlY2tpbmdDaGFuZ2VkKAorICAgICAgICAgICAgZXdrVGV4
dENoZWNrZXJTZXR0aW5ncy5lbmFibGVHcmFtbWFyQ2hlY2tpbmcpOworCisgICAgcmV0dXJuIEVD
T1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBpZGxlclNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXNTZXQodm9pZCopCit7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIHRvIGRl
bGVnYXRlIGNhbGxpbmcgb2YgdGhpcyBtZXRob2QgaW4gV2ViUHJvY2VzcyB0byBkbyBub3QgZGVs
YXkvYmxvY2sgVUlQcm9jZXNzLgorICAgIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoZXdr
VGV4dENoZWNrZXJTZXR0aW5ncy5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzKTsKKyAgICByZXR1cm4g
RUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCitzdGF0aWMgdm9pZCBzcGVsbENoZWNraW5nTGFu
Z3VhZ2VzU2V0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuZXdMYW5ndWFnZXMpCit7CisgICAgZXdr
VGV4dENoZWNrZXJTZXR0aW5ncy5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzID0gbmV3TGFuZ3VhZ2Vz
OworICAgIGVjb3JlX2lkbGVyX2FkZChpZGxlclNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQsIDAp
OworfQorI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorCit2b2lkIGV3a190ZXh0X2NoZWNr
ZXJfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tf
VGV4dF9DaGVja2VyX1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlZCBj
YWxsYmFjaykKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBld2tUZXh0Q2hlY2tlclNl
dHRpbmdzLnNldHRpbmdzQ2hhbmdlZENhbGxiYWNrcy5jb250aW51b3VzU3BlbGxDaGVja2luZ0No
YW5nZWQgPSBjYWxsYmFjazsKKyNlbmRpZgorfQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0
dGluZ3NfZ3JhbW1hcl9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1Nl
dHRpbmdzX0dyYW1tYXJfQ2hlY2tpbmdfQ2hhbmdlZCBjYWxsYmFjaykKK3sKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRpbmdzQ2hhbmdlZENh
bGxiYWNrcy5ncmFtbWFyQ2hlY2tpbmdDaGFuZ2VkID0gY2FsbGJhY2s7CisjZW5kaWYKK30KKwor
RWluYV9Cb29sIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfZ2V0KCkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4g
ZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5lbmFibGVDb250aW51b3VzU3BlbGxDaGVja2luZzsKKyNl
bHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nc19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoRWluYV9Cb29s
IGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBlbmFibGUgPSAhIWVuYWJs
ZTsKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5lbmFibGVDb250aW51b3VzU3BlbGxD
aGVja2luZyAhPSBlbmFibGUpIHsKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5lbmFi
bGVDb250aW51b3VzU3BlbGxDaGVja2luZyA9IGVuYWJsZTsKKworICAgICAgICBXS1RleHRDaGVj
a2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZSk7CisK
KyAgICAgICAgLy8gU2V0cyBkZWZhdWx0IGxhbmd1YWdlIGlmIHVzZXIgZGlkbid0IHNwZWNpZnkg
YW55LgorICAgICAgICBpZiAoZW5hYmxlICYmIGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMo
KS5pc0VtcHR5KCkpCisgICAgICAgICAgICBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KFZlY3Rv
cjxTdHJpbmc+KCkpOworCisgICAgICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRp
bmdzQ2hhbmdlZENhbGxiYWNrcy5jb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5nZWQpCisgICAg
ICAgICAgICBlY29yZV9pZGxlcl9hZGQoaWRsZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0NoYW5n
ZWQsIDApOworICAgIH0KKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tlcl9z
ZXR0aW5nc19lbmFibGVfZ3JhbW1hcl9jaGVja2luZ19nZXQoKQoreworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorICAgIHJldHVybiBld2tUZXh0Q2hlY2tlclNldHRpbmdzLmVuYWJsZUdyYW1tYXJD
aGVja2luZzsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfZ3JhbW1hcl9jaGVja2luZ19zZXQoRWluYV9C
b29sIGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBlbmFibGUgPSAhIWVu
YWJsZTsKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5lbmFibGVHcmFtbWFyQ2hlY2tp
bmcgIT0gZW5hYmxlKSB7CisgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3MuZW5hYmxlR3Jh
bW1hckNoZWNraW5nID0gZW5hYmxlOworCisgICAgICAgIFdLVGV4dENoZWNrZXJHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZSk7CisKKyAgICAgICAgaWYgKGV3a1RleHRD
aGVja2VyU2V0dGluZ3Muc2V0dGluZ3NDaGFuZ2VkQ2FsbGJhY2tzLmdyYW1tYXJDaGVja2luZ0No
YW5nZWQpCisgICAgICAgICAgICBlY29yZV9pZGxlcl9hZGQoaWRsZXJHcmFtbWFyQ2hlY2tpbmdD
aGFuZ2VkLCAwKTsKKyAgICB9CisjZW5kaWYKK30KKworRWluYV9MaXN0KiBld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdzX2F2YWlsYWJsZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCkKK3sK
KyAgICBFaW5hX0xpc3QqIGxpc3RPZmxhbmd1YWdlcyA9IDA7CisjaWYgRU5BQkxFKFNQRUxMQ0hF
Q0spCisgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzID0gYXZhaWxhYmxlU3BlbGxDaGVja2lu
Z0xhbmd1YWdlcygpOworICAgIHNpemVfdCBudW1iZXJPZkxhbnVhZ2VzID0gbGFuZ3VhZ2VzLnNp
emUoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZMYW51YWdlczsgKytp
KQorICAgICAgICBsaXN0T2ZsYW5ndWFnZXMgPSBlaW5hX2xpc3RfYXBwZW5kKGxpc3RPZmxhbmd1
YWdlcywgZWluYV9zdHJpbmdzaGFyZV9hZGQobGFuZ3VhZ2VzW2ldLnV0ZjgoKS5kYXRhKCkpKTsK
KyNlbmRpZgorICAgIHJldHVybiBsaXN0T2ZsYW5ndWFnZXM7Cit9CisKK3ZvaWQgZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGNvbnN0IGNoYXIq
IGxhbmd1YWdlcykKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5n
PiBuZXdMYW5ndWFnZXM7CisgICAgU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZXMpLnNwbGl0KCcs
JywgbmV3TGFuZ3VhZ2VzKTsKKworICAgIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQobmV3TGFu
Z3VhZ2VzKTsKKyNlbmRpZgorfQorCitFaW5hX0xpc3QqIGV3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpCit7CisgICAgRWluYV9MaXN0KiBsaXN0
T2ZsYW5ndWFnZXMgPSAwOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFZlY3RvcjxTdHJp
bmc+IGxhbmd1YWdlcyA9IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBzaXpl
X3QgbnVtYmVyT2ZMYW51YWdlcyA9IGxhbmd1YWdlcy5zaXplKCk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bWJlck9mTGFudWFnZXM7ICsraSkKKyAgICAgICAgbGlzdE9mbGFuZ3Vh
Z2VzID0gZWluYV9saXN0X2FwcGVuZChsaXN0T2ZsYW5ndWFnZXMsIGVpbmFfc3RyaW5nc2hhcmVf
YWRkKGxhbmd1YWdlc1tpXS51dGY4KCkuZGF0YSgpKSk7CisKKyNlbmRpZgorICAgIHJldHVybiBs
aXN0T2ZsYW5ndWFnZXM7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3MjdhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3MuaApAQCAt
MCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisg
KiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUgZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nLmgKKyAqIEBicmllZiBBUEkgZm9yIG1hbmlwdWxhdGluZyBzcGVsbCBjaGVja2Vy
IGZlYXR1cmUuCisgKi8KKworI2lmbmRlZiBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2gKKyNk
ZWZpbmUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19oCisKKyNpbmNsdWRlIDxFaW5hLmg+CisK
KyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBDcmVh
dGVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkg
dGhlIGNsaWVudCB3aGVuCisgKiB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBzZXR0aW5n
IHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBAcGFyYW0gQGMgRUlOQV9UUlVFIGlmIGNv
bnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAIEVJTkFfRkFMU0UgaWYgaXQn
cyBkaXNhYmxlZAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdz
X0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlZCkoRWluYV9Cb29sIGVuYWJsZSk7CisK
Ky8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGll
bnQgd2hlbgorICogdGhlIGdyYW1tYXIgY2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBX
ZWJLaXQuCisgKgorICogQHBhcmFtIEBjIEVJTkFfVFJVRSBpZiBncmFtbWFyIGNoZWNraW5nIGlz
IGVuYWJsZWQgb3IgQCBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLwordHlwZWRlZiB2
b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nc19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZWQp
KEVpbmFfQm9vbCBlbmFibGUpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB1
c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4KKyAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0LgorICoKKyAqIFNwZWNpZnlpbmcg
b2YgdGhpcyBjYWxsYmFjayBpcyBuZWVkZWQgaWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHJl
Y2VpdmUgbm90aWZpY2F0aW9ucworICogb25jZSBXZWJLaXQgY2hhbmdlcyB0aGlzIHNldHRpbmcu
CisgKiBJZiB0aGUgYXBwbGljYXRpb24gaXMgbm90IGludGVyZXN0ZWQsIHRoaXMgY2FsbGJhY2sg
aXMgbm90IHNldC4KKyAqIENoYW5naW5nIG9mIHRoaXMgc2V0dGluZyBhdCB0aGUgV2ViS2l0IGxl
dmVsIGNhbiBiZSBtYWRlIGFzIGEgcmVzdWx0IG9mIG1vZGlmeWluZworICogb3B0aW9ucyBpbiBh
IENvbnRleHQgTWVudSBieSBhIHVzZXIuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNr
IGZ1bmN0aW9uIHRvIHNldCBvciBAYyBOVUxMIHRvIGludmFsaWRhdGUgdGhlIHByZXZpb3VzIG9u
ZQorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ3NfQ29u
dGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VkIGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2Fs
bGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuCisgKiB0aGUgZ3Jh
bW1hciBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBTcGVj
aWZ5aW5nIG9mIHRoaXMgY2FsbGJhY2sgaXMgbmVlZGVkIGlmIHRoZSBhcHBsaWNhdGlvbiB3YW50
cyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMKKyAqIG9uY2UgV2ViS2l0IGNoYW5nZXMgdGhpcyBz
ZXR0aW5nLgorICogSWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBpbnRlcmVzdGVkLCB0aGlzIGNh
bGxiYWNrIGlzIG5vdCBzZXQuCisgKiBDaGFuZ2luZyBvZiB0aGlzIHNldHRpbmcgYXQgdGhlIFdl
YktpdCBsZXZlbCBjYW4gYmUgbWFkZSBhcyBhIHJlc3VsdCBvZiBtb2RpZnlpbmcKKyAqIG9wdGlv
bnMgaW4gYSBDb250ZXh0IE1lbnUgYnkgYSB1c2VyLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBj
YWxsYmFjayBmdW5jdGlvbiB0byBzZXQgb3IgQGMgTlVMTCB0byBpbnZhbGlkYXRlIHRoZSBwcmV2
aW91cyBvbmUKKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZ3JhbW1h
cl9jaGVja2luZ19jaGFuZ2VkX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdzX0dyYW1t
YXJfQ2hlY2tpbmdfQ2hhbmdlZCBjYik7CisKKy8qKgorICogUXVlcmllcyBpZiBjb250aW51b3Vz
IHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUg
aWYgY29udGludW91cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkIG9yIEBjIEVJTkFfRkFMU0Ug
aWYgaXQncyBkaXNhYmxlZAorICovCitFQVBJIEVpbmFfQm9vbCBld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdzX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCh2b2lkKTsKKworLyoq
CisgKiBFbmFibGVzL2Rpc2FibGVzIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCisgKgorICog
QWRkaXRpb25hbGx5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gKGlm
IGRlZmluZWQpIHRvIG5vdGlmeQorICogdGhlIGNsaWVudCBhYm91dCB0aGUgY2hhbmdlIG9mIHRo
ZSBzZXR0aW5nLgorICogVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKgor
ICogQHNlZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19jaGFuZ2VkX2NiX3NldAorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRvIGVu
YWJsZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIG9yIEBjIEVJTkFfRkFMU0UgdG8gZGlzYWJs
ZQorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19zZXQoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogUXVl
cmllcyBpZiBncmFtbWFyIGNoZWNraW5nIGlzIGVuYWJsZWQuCisgKgorICogQXBwbGljYXRpb24g
bWF5IG92ZXJ3cml0ZSB3ZWJraXQgZ3JhbW1hciBjaGVja2luZyBpbXBsZW1lbnRhdGlvbiBieSBz
ZXR0aW5nIGNhbGxiYWNrIGZ1bmN0aW9ucworICogQHNlZSBld2tfdGV4dF9jaGVja2VyLmgKKyAq
CisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBncmFtbWFyIGNoZWNraW5nIGlzIGVuYWJsZWQg
b3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KHZvaWQp
OworCisvKioKKyAqIEVuYWJsZXMvZGlzYWJsZXMgZ3JhbW1hciBjaGVja2luZy4KKyAqCisgKiBB
ZGRpdGlvbmFsbHksIHRoaXMgZnVuY3Rpb24gY2FsbHMgYSBjYWxsYmFjayBmdW5jdGlvbiAoaWYg
ZGVmaW5lZCkgdG8gbm90aWZ5CisgKiB0aGUgY2xpZW50IGFib3V0IHRoZSBjaGFuZ2Ugb2YgdGhl
IHNldHRpbmcuCisgKiBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYW5kIGlzIG5vdCBzdXBwb3J0
ZWQgYnkgV2ViS2l0LUVGTCBieSBkZWZhdWx0LgorICoKKyAqIEBzZWUgZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nX2dyYW1tYXJfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQKKyAqCisgKiBAcGFyYW0g
ZW5hYmxlIEBjIEVJTkFfVFJVRSB0byBlbmFibGUgZ3JhbW1hciBjaGVja2luZyBvciBAYyBFSU5B
X0ZBTFNFIHRvIGRpc2FibGUKKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z3NfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KEVpbmFfQm9vbCBlbmFibGUpOworCisvKgor
ICogR2V0cyB0aGUgdGhlIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBhbmQgaW5zdGFsbGVkIHNwZWxs
IGNoZWNraW5nIGxhbmd1YWdlcyB0byB1c2UuCisgKgorICogQHNlZSBld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldAorICoKKyAqIEByZXR1cm4gdGhl
IGxpc3Qgd2l0aCBhdmFpbGFibGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzLCBvciBAYyBOVUxM
IG9uIGZhaWx1cmUKKyAqICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1zIHNob3Vs
ZCBiZSBmcmVlZCBhZnRlciwgdXNlIGVpbmFfc3RyaW5nc2hhcmVfZGVsKCkKKyAqLworRUFQSSBF
aW5hX0xpc3QgKmV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfYXZhaWxhYmxlX3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlc19nZXQodm9pZCk7CisKKy8qKgorICogU2V0cyBAYSBsYW5ndWFnZXMgYXMg
dGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIHVzZSBieSBkZWZhdWx0IFdlYktpdAorICogaW1wbGVt
ZW50YXRpb24gb2Ygc3BlbGxjaGVja2VyIGZlYXR1cmUgd2l0aCBFbmNoYW50IGxpYnJhcnkgc3Vw
cG9ydC4KKyAqCisgKiBJZiBAbGFuZ3VhZ2VzIGlzIEBjIE5VTEwsIHRoZSBkZWZhdWx0IGxhbmd1
YWdlIGlzIHVzZWQuCisgKiBJZiB0aGUgZGVmYXVsdCBsYW5ndWFnZSBjYW4gbm90IGJlIGRldGVy
bWluZWQgdGhlbiBhbnkgYXZhaWxhYmxlIGRpY3Rpb25hcnkgd2lsbCBiZSB1c2VkLgorICoKKyAq
IEBub3RlIFRoaXMgZnVuY3Rpb24gaW52YWxpZGF0ZXMgdGhlIHByZXZpb3VzbHkgc2V0IGxhbmd1
YWdlcy4KKyAqICAgICAgIFRoZSBkaWN0aW9uYXJpZXMgYXJlIHJlcXVlc3RlZCBhc3luY2hyb25v
dXNseS4KKyAqCisgKiBAcGFyYW0gbGFuZ3VhZ2VzIGEgbGlzdCBvZiBjb21tYSAoJywnKSBzZXBh
cmF0ZWQgbGFuZ3VhZ2UgY29kZXMKKyAqICAgICAgICBvZiB0aGUgZm9ybSAnZW5fVVMnLCBpZSwg
bGFuZ3VhZ2VfVkFSSUFOVCwgbWF5IGJlIEBjIE5VTEwuCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hh
ciAqbGFuZ3VhZ2VzKTsKKworLyoKKyAqIEdldHMgdGhlIHRoZSBsaXN0IG9mIHRoZSBzcGVsbCBj
aGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLgorICoKKyAqIEBzZWUgZXdrX3RleHRfY2hlY2tlcl9z
ZXR0aW5nX2F2YWlsYWJsZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0CisgKiBAc2VlIGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0CisgKgor
ICogQHJldHVybiB0aGUgbGlzdCB3aXRoIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4g
dXNlLAorICogICAgICAgICB0aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZy
ZWVkIGFmdGVyLCB1c2UgZWluYV9zdHJpbmdzaGFyZV9kZWwoKQorICovCitFQVBJIEVpbmFfTGlz
dCAqZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0
KHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvVGV4dENoZWNrZXJFZmwuY3BwCmluZGV4IDc1YThhOTkuLjIxMzE2Y2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCkBAIC0xLDUgKzEs
NyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9y
dGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjksOSBAQAogI2luY2x1
ZGUgIlRleHRDaGVja2VyLmgiCiAKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2lmIEVOQUJMRShTUEVMTENIRUNLKQor
I2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKQEAgLTM3LDkxICs0MSwxNDQgQEAgc3RhdGljIFRleHRDaGVja2VyU3RhdGUgdGV4
dENoZWNrZXJTdGF0ZTsKIAogY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0
YXRlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQor
ICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOworICAgIGlmIChkaWRJ
bml0aWFsaXplU3RhdGUpCisgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOworCisgICAg
V2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+
Y2xpZW50KCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICB0
ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5ncmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCk7CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOworI2Vu
ZGlmCiAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6
OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6
c2hhcmVkKCktPmNsaWVudCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOworI2Vs
c2UKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6c2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRDaGVja2VyOjpz
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
ID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0g
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7CisgICAgV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNr
ZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCkKK3ZvaWQgVGV4dENoZWNrZXI6OnNl
dEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBpZiAo
c3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPT0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKKyAgICBXZWJUZXh0Q2hl
Y2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpjb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCAvKmVuYWJsZWQqLykK
K3ZvaWQgVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hh
bmdlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkID0gZW5hYmxlZDsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpncmFt
bWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgLyplbmFibGVkKi8pCit2b2lkIFRl
eHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAg
IHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNl
bmRpZgogfQogCi1pbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdl
YlBhZ2VQcm94eSopCitpbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFn
KFdlYlBhZ2VQcm94eSogcGFnZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJM
RShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7CisjZWxzZQogICAgIHJldHVybiAwOwor
I2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWco
aW50NjRfdCkKK3ZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50
NjRfdCB0YWcpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVD
SykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1
bWVudFdpdGhUYWcodGFnKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgaW50MzJfdCYs
IGludDMyX3QmKQordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0
X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwg
aW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhz
cGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwgbWlzc3BlbGxpbmdMb2NhdGlv
biwgbWlzc3BlbGxpbmdMZW5ndGgpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNo
ZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFyKiwgdWludDMyX3QsIFZlY3Rv
cjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4
dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywg
Y29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+
JiBncmFtbWFyRGV0YWlscywgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBi
YWRHcmFtbWFyTGVuZ3RoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQ
RUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja0dy
YW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwgZ3Jh
bW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7CisjZW5k
aWYKIH0KIAogYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4gV2Vi
VGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zcGVsbGluZ1VJSXNTaG93aW5nKCk7Cisj
ZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB2b2lkIFRleHRDaGVja2VyOjp0
b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lm
IEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCwgY29uc3Qg
U3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxl
ZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRX
b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisg
ICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0
aE1pc3NwZWxsZWRXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIG1pc3NwZWxsZWRXb3JkKTsKKyNlbmRp
ZgogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCit2b2lkIFRl
eHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1t
YXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgp
LnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRH
cmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVj
a2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBWZWN0b3I8U3RyaW5nPiYpCit2b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29y
ZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3Ry
aW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCwgZ3Vl
c3Nlcyk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qs
IGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKKyNlbmRpZgogfQog
Ci12b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit2
b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29u
c3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQ
RUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVX
b3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlIGIvU291
cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQ2OWM3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21ha2UvRmluZEVuY2hh
bnQuY21ha2UKQEAgLTAsMCArMSw0MyBAQAorIyAtIFRyeSB0byBmaW5kIEVuY2hhbnQKKyMgT25j
ZSBkb25lLCB0aGlzIHdpbGwgZGVmaW5lCisjCisjICBFTkNIQU5UX0lOQ0xVREVfRElSUyAtIHRo
ZSBFbmNoYW50IGluY2x1ZGUgZHJlY3RvcmllcworIyAgRU5DSEFOVF9MSUJSQVJJRVMgLSBsaW5r
IHRoZXNlIHRvIHVzZSBFbmNoYW50CisjCisjIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTCisjIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgSVRTCisjIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworIyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyMgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IKKyMgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorIyBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworRklORF9QQUNLQUdFKFBrZ0NvbmZpZykKK1BLR19DSEVDS19N
T0RVTEVTKFBDX0VOQ0hBTlQgZW5jaGFudCkKKworRklORF9QQVRIKEVOQ0hBTlRfSU5DTFVERV9E
SVJTCisgICAgTkFNRVMgZW5jaGFudC5oCisgICAgUEFUSFMgJHtQQ19FTkNIQU5UX0lOQ0xVREVE
SVJ9CisgICAgICAgICAgJHtQQ19FTkNIQU5UX0lOQ0xVREVfRElSU30KKykKKworRklORF9MSUJS
QVJZKEVOQ0hBTlRfTElCUkFSSUVTCisgICAgTkFNRVMgZW5jaGFudAorICAgIFBBVEhTICR7UENf
RU5DSEFOVF9MSUJESVJ9CisgICAgICAgICAgJHtQQ19FTkNIQU5UX0xJQlJBUllfRElSU30KKykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtl
L09wdGlvbnNFZmwuY21ha2UKaW5kZXggMGFlNGVjZS4uMjZiYTFjOCAxMDA2NDQKLS0tIGEvU291
cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwu
Y21ha2UKQEAgLTgxLDYgKzgxLDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1JFR0lPTlMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfU0hBRE9XX0RPTSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9TSEFSRURfV09SS0VSUyBPTikKK1dFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9TUEVMTENIRUNLIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX1RPVUNIX0VWRU5UUyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9WSUJSQVRJT04gT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfVklERU8gT04pCkBAIC0xNjksMyArMTcwLDcgQEAgSUYgKFdURl9VU0Vf
VElMRURfQkFDS0lOR19TVE9SRSkKICAgRklORF9QQUNLQUdFKE9wZW5HTCBSRVFVSVJFRCkKIEVO
RElGKCkKIAorSUYgKEVOQUJMRV9TUEVMTENIRUNLKQorICAgICAgRklORF9QQUNLQUdFKEVuY2hh
bnQgUkVRVUlSRUQpCisgICAgICBBRERfREVGSU5JVElPTlMoLURFTkFCTEVfU1BFTExDSEVDSz0x
KQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtl
IGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCmluZGV4IGIyMWIzMzIuLjVmM2Fi
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQorKysgYi9T
b3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKQEAgLTk4LDYgKzk4LDcgQEAgTUFDUk8g
KFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1ND
UklQVEVEX1NQRUVDSCAiVG9nZ2xlIFNjcmlwdGVkIFNwZWVjaCBBUEkgc3VwcG9ydCIgT0ZGKQog
ICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TSEFET1dfRE9NICJUb2dnbGUgU2hhZG93
IERPTSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NIQVJF
RF9XT1JLRVJTICJUb2dnbGUgU2hhcmVkV29ya2VycyBzdXBwb3J0IiBPRkYpCisgICAgV0VCS0lU
X09QVElPTl9ERUZJTkUoRU5BQkxFX1NQRUxMQ0hFQ0sgIlRvZ2dsZSBTcGVsbGNoZWNraW5nIHN1
cHBvcnQgKHJlcXVpcmVzIEVuY2hhbnQpIiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUo
RU5BQkxFX1NRTF9EQVRBQkFTRSAiVG9nZ2xlIFNRTCBEYXRhYmFzZSBTdXBwb3J0IiBPTikKICAg
ICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU1RZTEVfU0NPUEVEICJUb2dnbGUgPHN0eWxl
IHNjb3BlZD4gc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9T
VkcgIlRvZ2dsZSBTVkcgc3VwcG9ydCIgT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Vjb25m
aWcuaC5jbWFrZSBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCmluZGV4IGM1ODc5MjEuLjE2
NzdlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCisrKyBiL1NvdXJj
ZS9jbWFrZWNvbmZpZy5oLmNtYWtlCkBAIC05Miw2ICs5Miw3IEBACiAjY21ha2VkZWZpbmUwMSBF
TkFCTEVfU0hBRE9XX0RPTQogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NIQVJFRF9XT1JLRVJTCiAj
Y21ha2VkZWZpbmUwMSBFTkFCTEVfU01PT1RIX1NDUk9MTElORworI2NtYWtlZGVmaW5lMDEgRU5B
QkxFX1NQRUxMQ0hFQ0sKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TUUxfREFUQUJBU0UKICNjbWFr
ZWRlZmluZTAxIEVOQUJMRV9TVFlMRV9TQ09QRUQKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TVkcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168222</attachid>
            <date>2012-10-11 07:02:27 -0700</date>
            <delta_ts>2012-10-12 06:04:19 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>61436</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxMzkzMmMxLi5lNmZkYWU3
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTItMDktMjQgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYXNtdW5nLmNvbT4KKworICAgICAgICBbV0syXVtFRkxd
IEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVmaW5lIFNQRUxMQ0hFQ0sgbWFjcm8g
YW5kIGVuYWJsZSBpdCBmb3IgV0syLUVmbC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5k
RW5jaGFudC5jbWFrZTogQWRkZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwu
Y21ha2U6IEVuYWJsZSBzcGVsbGNoZWNraW5nIGZlYXR1cmUgZm9yIFdlYktpdDItRUZMLgorICAg
ICAgICAqIFNvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZTogRGVmaW5lIHRoZSBTUEVM
TENIRUNLIG1hY3JvLgorICAgICAgICBUaGUgc3BlbGxjaGVja2luZyBpbXBsZW1lbnRhdGlvbiBp
cyBiYXNlZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICAgICAgICBJdCBjYW4gYmUgdXNlZCBi
eSBvdGhlciBXZWJLaXQgcG9ydHMuCisgICAgICAgICogU291cmNlL2NtYWtlY29uZmlnLmguY21h
a2U6IEFkZCB0aGUgZmVhdHVyZS4KKwogMjAxMi0xMC0xMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzA5MzcsIHIx
MzA5NDksIHIxMzA5NTUsIGFuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGY4OWViY2QuLjEwYjJjMjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wOS0yNCAgR3J6ZWdvcnogQ3phamtvd3NraSAg
PGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4sIE1pY2hhbCBSb2ogPG0ucm9qQHNhbXN1bmcuY29t
PgorCisgICAgICAgIFtXSzJdW0VGTF0gSW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2luZyBm
ZWF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTE4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICBBZGQgZW5jaGFudC1yZWxhdGVkIGNvbXBpbGVy
IGZsYWdzOiBoZWFkZXIgcGF0aHMgYW5kIHRoZSBsaWJyYXJ5IGZsYWcuCisKIDIwMTItMTAtMTEg
IFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogVHlwZUVycm9yIGluIENvbnNvbGVNZXNzYWdlLmpzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZs
LmNtYWtlCmluZGV4IDJhMTdjOWIuLjg3NzM3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC04NCw2ICs4NCw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICBwbGF0Zm9y
bS9QbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCiAgIHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJ
WC5jcHAKICAgcGxhdGZvcm0vdGV4dC9lZmwvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUVm
bC5jcHAKKyAgcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAKICkK
IAogSUYgKEVOQUJMRV9CQVRURVJZX1NUQVRVUykKQEAgLTMyNSwzICszMjYsMTIgQEAgSUYgKEVO
QUJMRV9XRUJfQVVESU8pCiAgIElOU1RBTEwoRklMRVMgJHtXRUJfQVVESU9fREFUQX0gREVTVElO
QVRJT04gJHtXRUJfQVVESU9fRElSfSkKICAgQUREX0RFRklOSVRJT05TKC1EVU5JTlNUQUxMRURf
QVVESU9fUkVTT1VSQ0VTX0RJUj0iJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vYXVkaW8vcmVzb3Vy
Y2VzIikKIEVORElGICgpCisKK0lGIChFTkFCTEVfU1BFTExDSEVDSykKKyAgICBMSVNUKEFQUEVO
RCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgJHtFTkNIQU5UX0lOQ0xVREVf
RElSU30KKyAgICApCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAg
JHtFTkNIQU5UX0xJQlJBUklFU30KKyAgICApCitFTkRJRigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjU0NWJm
MS4uYjIwMDkxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAxMi0wOS0yNCAgR3J6
ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4sIE1pY2hhbCBSb2og
PG0ucm9qQHNhbXN1bmcuY29tPgorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hl
Y2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGZvciBXZWJLaXQyLUVGTCB0aGF0IGlz
IGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKworICAgICAgICBBZGRpdGlvbmFsbHkgdGhlIHBh
dGNoIHByb3ZpZGVzIEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hl
Y2tlciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhcyBFbmNoYW50IGxpYnJhcnkgZG9lc24ndCBl
bnN1cmUgZ3JhbW1hciBjaGVja2luZy4KKyAgICAgICAgQXBwbGljYXRpb24gaXMgYWJsZSB0byBv
dmVyd3JpdGUgaXQgKGJvdGggZ3JhbW1hciBhbmQgc3BlbGwgY2hlY2tpbmcpIGJ5IGRlZmluaW5n
CisgICAgICAgIGl0cyBvd24gaW1wbGVtZW50YXRpb24gYW5kIHNldHRpbmcgYXBwcm9wcmlhdGUg
Y2FsbGJhY2sgZnVuY3Rpb25zLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAg
ICAgIEFkZCBlbmNoYW50LXJlbGF0ZWQgY29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRocyBhbmQg
dGhlIGxpYnJhcnkgZmxhZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQy
Lmg6CisgICAgICAgIEFkZCBmaWxlcyB0aGF0IGNvbnRhaW4gdGhlIEFQSSB0byB0aGUgbWFpbiBX
ZWJLaXQyLUVGTCdzIGhlYWRlciB0byBiZSBhdmFpbGFibGUgZm9yIGFwcGxpY2F0aW9ucy4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcDogQWRkZWQu
CisgICAgICAgIEltcGxlbWVudCBjYWxsYmFja3MgZnVuY3Rpb25zIG9mIFdLVGV4dENoZWNrZXIu
CisKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6c2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KToKKyAgICAgICAgKFdlYktpdDo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpjbG9z
ZVNwZWxsRG9jdW1lbnRXaXRoVGFnKToKKyAgICAgICAgKFdlYktpdDo6Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6Z3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpsZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjppZ25vcmVXb3JkKToKKyAgICAgICAg
VGhvc2UgbWV0aG9kcyBhcmUgZGlyZWN0bHkgZ2l2ZW4gYXMgY2FsbGJhY2sgZnVuY3Rpb25zIGZv
ciBXS1RleHRDaGVja2VyJ3MgY2xpZW50LgorICAgICAgICBUaGV5IGNob29zZSBiZXR3ZWVuIFdl
YktpdCdzIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGFuZCBjbGllbnQncyBvbmVzLgorCisgICAg
ICAgIChXZWJLaXQ6OmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAo
V2ViS2l0Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6
bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFRoZXkgYXJlIHVzZWQgYnkg
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5jcHAgZmlsZSBhbmQgYWxsb3cgdG8gZG8gbm90Cisg
ICAgICAgIGV4cG9zZSAnbV90ZXh0Q2hlY2tlckVuY2hhbnQnLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSB0
aGUgZnVuY3Rpb25zIHdoaWNoIGNob29zZXMgYmV0d2VlbiBjbGllbnQncyBpbXBsZW1lbnRhdGlv
biBvZiBzcGVsbGluZyBhbmQgdGhlIFdlYktpdCBvbmUuCisKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoX0V3
a19Db250ZXh0OjpfRXdrX0NvbnRleHQpOgorICAgICAgICBBdHRhY2ggdGhlIHNwZWxsY2hlY2tl
ciBmZWF0dXJlIGZvciB0aGUgY29udGV4dC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a190ZXh0X2NoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGV3a190ZXh0X2NoZWNrZXJf
Y2FsbGJhY2tzX2dldCk6CisgICAgICAgIEdldCB0aGUgY2xpZW50J3MgY2FsbGJhY2sgZnVuY3Rp
b25zLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oOiBB
ZGRlZC4KKyAgICAgICAgRGVmaW5lIEFQSSB0byBzZXQgdGhlIGNsaWVudCdzIG93biBzcGVsbGlu
ZyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0
X2NoZWNrZXJfcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKF9Fd2tfVGV4dF9DaGVja2VyKToK
KyAgICAgICAgRGVmaW5lIHN0cnVjdCB3aXRoIGNsaWVudCdzIGNhbGxiYWNrcyByZXNwb25pc2Js
ZSBmb3Igc3BlbGxpbmcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyX3NldHRpbmdzLmNwcDogQWRkZWQuCisgICAgICAgIChvbkNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nSWRsZXIpOgorICAgICAgICAob25HcmFtbWFyQ2hlY2tpbmdJZGxlcik6CisgICAgICAg
IFRoZSBhcHBsaWNhdGlvbiBpcyBub3RpZmllZCBhYm91dCBzcGVsbGluZyBzZXR0aW5ncyBjaGFu
Z2UgKHRoZXkgbWF5IGJlIGNoYW5nZWQKKyAgICAgICAgdGhyb3VnaCBjb250ZXh0IG1lbnUgb3B0
aW9uKSBvbiBpZGxlciB0byBkbyBub3QgYmxvY2sgV2ViS2l0LgorCisgICAgICAgIChzcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzU2V0VXBkYXRlKToKKyAgICAgICAgVGhlIGRpY3Rpb25hcmllcyBhcmUg
cmVxdWVzdGVkIG9uIGlkbGVyIHRvIGRvIG5vdCBibG9jayBXZWJLaXQuCisKKyAgICAgICAgKHNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQpOgorICAgICAgICBTZXQgdGhlIGxhbmd1YWdlcy4KKwor
ICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2NoYW5nZV9jYl9zZXQpOgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19n
cmFtbWFyX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQpOgorICAgICAgICBTZXQgdGhlIGNhbGxiYWNr
IGZ1bmN0aW9ucyB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4gdGhlIHNwZWxsaW5nIHNl
dHRpbmdzCisgICAgICAgIHdlcmUgY2hhbmdlZCBieSBXZWJLaXQuCisKKyAgICAgICAgKGV3a190
ZXh0X2NoZWNrZXJfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dl
dCk6CisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZF9zZXQpOgorICAgICAgICBBUEkgdG8gc2V0L2dldCB0aGUgY29udGlu
dW91cyBzcGVsbCBjaGVja2luZy4KKworICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
c19ncmFtbWFyX2NoZWNraW5nX2VuYWJsZWRfZ2V0KToKKyAgICAgICAgKGV3a190ZXh0X2NoZWNr
ZXJfc2V0dGluZ3NfZ3JhbW1hcl9jaGVja2luZ19lbmFibGVkX3NldCk6CisgICAgICAgIEFQSSB0
byBzZXQvZ2V0IHRoZSBncmFtbWFyIGNoZWNraW5nLgorCisgICAgICAgIChld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQpOgorICAgICAgICAoZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9z
ZXQpOgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9jaGVja2luZ19s
YW5ndWFnZXNfZW5hYmxlZF9nZXQpOgorICAgICAgICBBUEkgdG8gc2V0L2dldCBsYW5ndWFnZXMg
dG8gdXNlIGJ5IFdlYktpdCBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBFbmNoYW50IGxpYnJhcnku
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3NldHRpbmdz
Lmg6IEFkZGVkLgorICAgICAgICBBZGQgQVBJIGZvciBtYW5pcHVsYXRpbmcgc3BlbGwgY2hlY2tl
ciBmZWF0dXJlLgorCisgICAgICAgICogVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCk6CisgICAgICAg
IChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQp
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z3Jh
bW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRD
aGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKTogUmVtb3ZlIFdlYkNvcmUgbmFtYXNwYWNlIGFz
IGl0J3MgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGUgd2hvbGUgZmlsZS4KKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpU
ZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToKKyAgICAg
ICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpsZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlcjo6aWdub3JlV29yZCk6CisgICAgICAgIFRob3NlIGNhbGwgV0tUZXh0Q2hl
Y2tlciBjbGllbnQgbWV0aG9kcy4KKwogMjAxMi0xMC0xMCAgSmVyIE5vYmxlICA8amVyLm5vYmxl
QGFwcGxlLmNvbT4KIAogICAgICAgICBEaXNhbGxvdyBmdWxsIHNjcmVlbiBtb2RlIGtleWJvYXJk
IGFjY2VzcyBieSBkZWZhdWx0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBhMTJmNDRh
Li41NGRhMjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtNDYsNiArNDYsNyBAQCBM
SVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9OZXR3b3Jr
SW5mb1Byb3ZpZGVyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNw
cAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1ZpYnJhdGlvblByb3ZpZGVyLmNwcAorICAgIFVJUHJv
Y2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFj
a19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5jcHAKQEAgLTY0LDYgKzY1LDggQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5jcHAKICAgICBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfcmVzb3VyY2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRp
bmdzLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCisgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3JlcXVlc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3VybF9yZXNwb25zZS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVt
ZV9yZXF1ZXN0LmNwcApAQCAtMTM1LDYgKzEzOCw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfSU5D
TFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9lZmwiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvIgogICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L3RleHQvZW5jaGFudCIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3ZnL2dyYXBoaWNzIgogICAgICIk
e1dFQktJVDJfRElSfS9TaGFyZWQvZWZsIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvc291
cCIKQEAgLTI0MCw2ICsyNDQsOCBAQCBTRVQgKEVXZWJLaXQyX0hFQURFUlMKICAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0
ZW0uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19yZXNvdXJjZS5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0Vf
RElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmgiCisgICAgIiR7Q01BS0Vf
Q1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3Nl
dHRpbmdzLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdG91Y2guaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a191cmxfcmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09V
UkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oIgpAQCAtMzY3LDMg
KzM3MywxMiBAQCBJRiAoRU5BQkxFX0lOU1BFQ1RPUikKICAgICAgICAgICAgICAgICAgICAgICAg
UEFUVEVSTiAiKi5naWYiCiAgICAgICAgICAgICAgICAgICAgICAgIFBBVFRFUk4gIioucG5nIikK
IEVORElGICgpCisKK0lGIChFTkFCTEVfU1BFTExDSEVDSykKKyAgICBMSVNUKEFQUEVORCBXZWJL
aXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgJHtFTkNIQU5UX0lOQ0xVREVfRElSU30K
KyAgICApCisgICAgTElTVChBUFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMKKyAgICAgICAgJHtFTkNI
QU5UX0xJQlJBUklFU30KKyAgICApCitFTkRJRigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCAwMGRkODExLi5hZTY5NTRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTQzLDYgKzQzLDggQEAKICNp
bmNsdWRlICJld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAjaW5jbHVkZSAiZXdrX3Jlc291cmNlLmgi
CiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5o
IgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJld2tf
dG91Y2guaCIKICNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3QuaCIKICNpbmNsdWRlICJld2tfdXJs
X3Jlc3BvbnNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYWQ3NzRjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlci5oIgor
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLTXV0YWJsZUFycmF5LmgiCisjaW5j
bHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNp
bmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzLmgiCisjaW5jbHVkZSA8RWluYS5oPgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgT3duUHRyPFdlYkNvcmU6OlRleHRDaGVja2Vy
RW5jaGFudD4gdGV4dENoZWNrZXJFbmNoYW50ID0gV2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50
OjpjcmVhdGUoKTsKKworc3RhdGljIEV3a19UZXh0X0NoZWNrZXIqIGV3a1RleHRDaGVja2VyQ2Fs
bGJhY2tzID0gZXdrX3RleHRfY2hlY2tlcl9jYWxsYmFja3NfZ2V0KCk7CisKK2Jvb2wgaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X2dldCgpOworfQorCit2b2lkIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29s
IGVuYWJsZWQsIGNvbnN0IHZvaWQqKQoreworICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Nf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChlbmFibGVkKTsKK30KKworYm9v
bCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZ3JhbW1hcl9jaGVja2luZ19lbmFibGVkX2dldCgpOwor
fQorCit2b2lkIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBjb25zdCB2
b2lkKikKK3sKKyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2dyYW1tYXJfY2hlY2tpbmdf
ZW5hYmxlZF9zZXQoZW5hYmxlZCk7Cit9CisKK3VpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRU
YWcoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tl
ckNhbGxiYWNrcy0+dW5pcXVlU3BlbGxEb2N1bWVudFRhZykKKyAgICAgICAgcmV0dXJuIGV3a1Rl
eHRDaGVja2VyQ2FsbGJhY2tzLT51bmlxdWVTcGVsbERvY3VtZW50VGFnKHRvSW1wbChwYWdlKS0+
dmlld1dpZGdldCgpKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIGNsb3NlU3BlbGxEb2N1
bWVudFdpdGhUYWcodWludDY0X3QgdGFnLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4
dENoZWNrZXJDYWxsYmFja3MtPmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcpCisgICAgICAgIGV3
a1RleHRDaGVja2VyQ2FsbGJhY2tzLT5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7Cit9
CisKK3ZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYg
dGV4dCwgaW50MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdM
ZW5ndGgsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRhZywgdG9JbXBsKHRleHQpLT5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgZWxz
ZQorICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQtPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0b0lt
cGwodGV4dCktPnN0cmluZygpLCAqbWlzc3BlbGxpbmdMb2NhdGlvbiwgKm1pc3NwZWxsaW5nTGVu
Z3RoKTsKK30KKworV0tBcnJheVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIFdLTXV0YWJsZUFycmF5UmVmIHN1Z2dl
c3Rpb25zRm9yV29yZCA9IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7CisKKyAgICBpZiAoZXdrVGV4
dENoZWNrZXJDYWxsYmFja3MtPmd1ZXNzZXNGb3JXb3JkKSB7CisgICAgICAgIEVpbmFfTGlzdCog
bGlzdCA9IGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT5ndWVzc2VzRm9yV29yZCh0YWcsIHRvSW1w
bCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHZvaWQqIGl0ZW07CisK
KyAgICAgICAgRUlOQV9MSVNUX0ZSRUUobGlzdCwgaXRlbSkgeworICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoc3RhdGljX2Nhc3Q8Y2hhcio+KGl0ZW0pKSk7CisgICAgICAgICAgICBXS0Fy
cmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOworICAg
ICAgICAgICAgZnJlZShpdGVtKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGd1ZXNzZXMgPSB0ZXh0Q2hlY2tlckVuY2hhbnQtPmdldEd1ZXNzZXNGb3JX
b3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworICAgICAgICBzaXplX3QgbnVtYmVyT2ZHdWVz
c2VzID0gZ3Vlc3Nlcy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZHdWVzc2VzOyArK2kpIHsKKyAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGd1ZXNz
ZXNbaV0udXRmOCgpLmRhdGEoKSkpOworICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oc3Vn
Z2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9uLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBzdWdnZXN0aW9uc0ZvcldvcmQ7Cit9CisKK3ZvaWQgbGVhcm5Xb3JkKHVpbnQ2
NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1Rl
eHRDaGVja2VyQ2FsbGJhY2tzLT5sZWFybldvcmQpCisgICAgICAgIGV3a1RleHRDaGVja2VyQ2Fs
bGJhY2tzLT5sZWFybldvcmQodGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIGVsc2UKKyAgICAgICAgdGV4dENoZWNrZXJFbmNoYW50LT5sZWFybldvcmQodG9J
bXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKK3ZvaWQgaWdub3JlV29yZCh1aW50NjRfdCB0YWcs
IFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tl
ckNhbGxiYWNrcy0+aWdub3JlV29yZCkKKyAgICAgICAgZXdrVGV4dENoZWNrZXJDYWxsYmFja3Mt
Pmlnbm9yZVdvcmQodGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgdGV4dENoZWNrZXJFbmNoYW50LT5pZ25vcmVXb3JkKHRvSW1wbCh3
b3JkKS0+c3RyaW5nKCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKCkKK3sKKyAgICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50LT5hdmFpbGFi
bGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK3ZvaWQgdXBkYXRlU3BlbGxDaGVja2lu
Z0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKQoreworICAgIHRleHRD
aGVja2VyRW5jaGFudC0+dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhsYW5ndWFnZXMpOwor
fQorCitWZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKK3sKKyAg
ICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50LT5sb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxM
Q0hFQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJL
aXRUZXh0Q2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0
VGV4dENoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWVkMGZl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2Vi
S2l0VGV4dENoZWNrZXIuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRUZXh0Q2hlY2tlcl9oCisjZGVmaW5lIFdlYktpdFRleHRDaGVja2VyX2gKKworI2lmIEVO
QUJMRShTUEVMTENIRUNLKQorCisjaW5jbHVkZSAiVGV4dENoZWNrZXJFbmNoYW50LmgiCisjaW5j
bHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLUGFnZS5oIgorI2luY2x1ZGUgIldLU3RyaW5n
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBUaGUgZnVuY3Rpb25zIG1haW5seSBjaG9v
c2UgYmV0d2VlbiBjbGllbnQncyBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGluZyBhbmQgdGhlIFdl
YktpdCBvbmUuCisKKy8vIENhbGxiYWNrcyByZXF1aXJlZCBieSBXS1RleHRDaGVja2VyLgorYm9v
bCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKiBjbGllbnRJbmZv
KTsKK3ZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Citib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZChj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChi
b29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCit1aW50NjRfdCB1bmlxdWVT
cGVsbERvY3VtZW50VGFnKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsK
K3ZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOworCit2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcs
IFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3Qq
IG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK1dLQXJyYXlSZWYg
Z3Vlc3Nlc0ZvcldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKK3ZvaWQgbGVhcm5Xb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYg
d29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIGlnbm9yZVdvcmQodWludDY0X3Qg
dGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKworLy8gRW5j
aGFudCdzIGhlbHBlci4KK1ZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMoKTsKK3ZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgbGFuZ3VhZ2VzKTsKK1ZlY3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdM
YW5ndWFnZXMoKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
U1BFTExDSEVDSykKKyNlbmRpZiAvLyBXZWJLaXRUZXh0Q2hlY2tlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggMDJlZGRiNC4u
NjU1M2RkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmNwcApAQCAtNDAsNiArNDAsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0
ZW0uaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorI2lmIEVOQUJMRShTUEVMTENIRUNLKQorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNr
ZXJfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3MuaCIKKyNl
bmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CkBAIC0xMTQsNiArMTE4LDEzIEBAIHN0cnVjdCBfRXdrX0NvbnRleHQgewogICAgICAgICBld2tf
Y29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50X2F0dGFjaCh0aGlzKTsKICAgICAgICAgZXdr
X2NvbnRleHRfZG93bmxvYWRfY2xpZW50X2F0dGFjaCh0aGlzKTsKICAgICAgICAgZXdrX2NvbnRl
eHRfaGlzdG9yeV9jbGllbnRfYXR0YWNoKHRoaXMpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQor
ICAgICAgICBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9hdHRhY2goKTsKKyAgICAgICAgaWYgKGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X2dldCgpKSB7CisgICAgICAgICAgICAvLyBMb2FkIHRoZSBkZWZhdWx0IGxhbmd1YWdlLgorICAg
ICAgICAgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXNfZW5hYmxlZF9zZXQoMCk7CisgICAgICAgIH0KKyNlbmRpZgogICAgIH0KIAogICAgIH5fRXdr
X0NvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdGV4dF9jaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w
ZTAyZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgorCisjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUg
IldlYktpdFRleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRl
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8vIEluaXRpYWxpemVzIGNsaWVudCdz
IGZ1bmN0aW9ucyB0byBAYyAwIHRvIGJlIHN1cmUgdGhhdCB0aGV5IGFyZSBub3QgZGVmaW5lZC4K
K3N0YXRpYyBFd2tfVGV4dF9DaGVja2VyIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzID0geworICAg
IDAsIC8vIHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcKKyAgICAwLCAvLyBjbG9zZVNwZWxsRG9jdW1l
bnRXaXRoVGFnCisgICAgMCwgLy8gY2hlY2tTcGVsbGluZ09mU3RyaW5nCisgICAgMCwgLy8gZ3Vl
c3Nlc0ZvcldvcmQKKyAgICAwLCAvLyBsZWFybldvcmQKKyAgICAwIC8vIGlnbm9yZVdvcmQKK307
CisKKyNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBOQU1F
KSAgXAordm9pZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUgY2Ip
ICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy5OQU1FID0gY2I7ICAgICAgICAg
ICAgICAgICAgXAorfQorCisvKioKKyAqIEF0dGFjaGVzIHNwZWxsY2hlY2tlciBmZWF0dXJlLgor
ICoKKyAqIEBpbnRlcm5hbAorICoKKyAqIFRoZSBkZWZhdWx0IHNwZWxsY2hlY2tlciBmZWF0dXJl
IGlzIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKyAqIENsaWVudCBtYXkgdXNlIG93biBpbXBs
ZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNrZXIgcHJldmlvdXNseSBzZXQKKyAqIHRocm91Z2ggdGhl
IGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqLwordm9pZCBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9h
dHRhY2goKQoreworICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVu
dCA9IGZhbHNlOworICAgIGlmIChkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdLVGV4dENoZWNrZXJDbGllbnQgdGV4dENoZWNrZXJDbGllbnQg
PSB7CisgICAgICAgIGtXS1RleHRDaGVja2VyQ2xpZW50Q3VycmVudFZlcnNpb24sCisgICAgICAg
IDAsIC8vIGNsaWVudEluZm8KKyAgICAgICAgMCwgLy8gaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0FsbG93ZWQKKyAgICAgICAgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQsCisgICAg
ICAgIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCwKKyAgICAgICAgaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkLAorICAgICAgICBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkLAorICAg
ICAgICB1bmlxdWVTcGVsbERvY3VtZW50VGFnLAorICAgICAgICBjbG9zZVNwZWxsRG9jdW1lbnRX
aXRoVGFnLAorICAgICAgICBjaGVja1NwZWxsaW5nT2ZTdHJpbmcsCisgICAgICAgIDAsIC8vIGNo
ZWNrR3JhbW1hck9mU3RyaW5nCisgICAgICAgIDAsIC8vIHNwZWxsaW5nVUlJc1Nob3dpbmcKKyAg
ICAgICAgMCwgLy8gdG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZworICAgICAgICAwLCAvLyB1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkCisgICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZworICAgICAgICBndWVzc2VzRm9yV29yZCwKKyAgICAgICAg
bGVhcm5Xb3JkLAorICAgICAgICBpZ25vcmVXb3JkCisgICAgfTsKKyAgICBXS1RleHRDaGVja2Vy
U2V0Q2xpZW50KCZ0ZXh0Q2hlY2tlckNsaWVudCk7CisKKyAgICBkaWRJbml0aWFsaXplVGV4dENo
ZWNrZXJDbGllbnQgPSB0cnVlOworfQorCisvKgorICogR2V0cyB0aGUgY2xpZW50J3MgY2FsbGJh
Y2tzLgorICoKKyAqIEBpbnRlcm5hbAorICoKKyAqIFRoZSBjbGllbnQndCBjYWxsYmFja3MgYXJl
IG5vdCBkZWZpbmVkIGJ5IGRlZmF1bHQuCisgKiBJZiB0aGUgY2xpZW50IGhhc24ndCBzZXQgdGhl
IGNhbGxiYWNrLCB0aGUgY29ycmVzcG9uZGluZyBjYWxsYmFjayB3aWxsCisgKiByZXR1cm4gQGMg
MCBhbmQgdGhlIGRlZmF1bHQgV2ViS2l0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBmb3Ig
dGhpcworICogZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBAcmV0dXJuIHRoZSBzdHJ1Y3Qgd2l0aCB0
aGUgY2xpZW50J3MgY2FsbGJhY2tzLgorICovCitFd2tfVGV4dF9DaGVja2VyKiBld2tfdGV4dF9j
aGVja2VyX2NhbGxiYWNrc19nZXQoKQoreworICAgIHJldHVybiAmZXdrVGV4dENoZWNrZXJDYWxs
YmFja3M7Cit9CisKKyNlbHNlCisKKy8vIERlZmluZXMgYW4gZW1wdHkgQVBJIHRvIGRvIG5vdCBi
cmVhayBidWlsZC4KKyNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9O
QU1FLCBOQU1FKSAgXAordm9pZCBld2tfdGV4dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBF
X05BTUUpICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKK30KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKworRVdL
X1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxf
RG9jdW1lbnRfVGFnX0dldF9DYiwgdW5pcXVlU3BlbGxEb2N1bWVudFRhZykKK0VXS19URVhUX0NI
RUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50
X1RhZ19DbG9zZV9DYiwgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZykKK0VXS19URVhUX0NIRUNL
RVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrX0Ni
LCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChF
d2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXRfQ2IsIGd1ZXNzZXNGb3JXb3JkKQorRVdL
X1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0Ni
LCBsZWFybldvcmQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVj
a2VyX1dvcmRfSWdub3JlX0NiLCBpZ25vcmVXb3JkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmIzOTQ5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmgKQEAgLTAsMCArMSwxNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlIGV3a190ZXh0X2NoZWNrZXIuaAorICogQGJyaWVm
IFByb3ZpZGVzIEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hlY2tl
ciBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGVyZSBpcyBvbmUgc3BlbGxjaGVja2VyIG9iamVj
dCBwZXIgYXBwbGljYXRpb24gYW5kIGl0J3MgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAqIEl0IGFs
bG93cyB0byBjaGVjayBzcGVsbGluZyBpbiB0aGUgZWRpdGFibGUgYXJlYXMuCisgKiBJZiBhcHBs
aWNhdGlvbiB3YW50cyB0byBlbmFibGUgdGhlIGZlYXR1cmUsIEFQSSBmcm9tIEBhIGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZy5oCisgKiBzaG91bGQgYmUgdXNlZC4KKyAqCisgKiBUaGUgZGVmYXVs
dCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBFbmNo
YW50IGxpYnJhcnkuCisgKiBJdCBkb2Vzbid0IGVuc3VyZSBncmFtbWFyIGNoZWNraW5nLiBBcHBs
aWNhdGlvbiBpcyBhYmxlIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdAorICogV2ViS2l0IHNwZWxs
Y2hlY2tlciBpbXBsZW1lbnRhdGlvbiBieSBkZWZpbmluZyBpdHMgb3duIGltcGxlbWVudGF0aW9u
IGFuZCBzZXR0aW5nCisgKiBhcHByb3ByaWF0ZSBjYWxsYmFjayBmdW5jdGlvbnMuCisgKi8KKwor
I2lmbmRlZiBld2tfdGV4dF9jaGVja2VyX2gKKyNkZWZpbmUgZXdrX3RleHRfY2hlY2tlcl9oCisK
KyNpbmNsdWRlIDxFdmFzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7Cisj
ZW5kaWYKKworLyoqCisgKiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVu
Y3Rpb24gdG8gcmV0dXJuIGEgdGFnIChpZGVudGlmaWVyKSB3aGljaCBpcyBndWFyYW50ZWVkIHRv
IGJlIHVuaXF1ZS4KKyAqCisgKiBVbmlxdWUgdGFncyBoZWxwIHRvIGF2b2lkIGNvbGxpc2lvbnMg
d2l0aCBvdGhlciBvYmplY3RzIHRoYXQgYXJlIGNoZWNrZWQgZm9yIHNwZWxsaW5nIG1pc3Rha2Vz
LgorICoKKyAqIEBwYXJhbSBvIHRoZSB2aWV3IG9iamVjdCB0byBnZXQgdW5pcXVlIHRhZworICoK
KyAqIEByZXR1cm4gdW5pcXVlIHRhZyBmb3IgdGhlIGdpdmVuIEBhIG8gdmlldyBvYmplY3QKKyAq
LwordHlwZWRlZiB1aW50NjRfdCAoKkV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3Vt
ZW50X1RhZ19HZXRfQ2IpKGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCisgKiBEZWZpbmVz
IGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2xvc2UgdGhlIHBydmlv
dXNseSBzZXQgdGFnLgorICoKKyAqIFRoaXMgY2FsbGJhY2sgd2lsbCBub3RpZnkgdGhlIHJlY2Vp
dmVyIHRoYXQgdGhlIHVzZXIgaGFzIGZpbmlzaGVkIHdpdGggdGhlIHRhZ2dlZCBkb2N1bWVudC4K
KyAqCisgKiBAcGFyYW0gdGFnIHRoZSB0YWcgdG8gYmUgY2xvc2VkCisgKi8KK3R5cGVkZWYgdm9p
ZCAoKkV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19DbG9zZV9DYiko
dWludDY0X3QgdGFnKTsKKworLyoqCisgKiBEZWZpbmVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2Fs
bGJhY2sgZnVuY3Rpb24gdG8gc2VhcmNoIGZvciBhIG1pc3NwZWxsZWQgd29yZHMgaW4gdGhlIGdp
dmVuIHN0cmluZy4KKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBz
cGVsbCBjaGVja2VyIHdoaWNoIGRvY3VtZW50IHRoYXQgQGEgdGV4dCBpcyBhc3NvY2lhdGVkLAor
ICogICAgICAgIGluIG1vc3QgY2FzZXMgbm90IG5lY2Vzc2FyaWx5LCBqdXN0IGZvciBpZ25vcmVk
IHdvcmQsCisgKiAgICAgICAgQGMgMCBjYW4gYmUgcGFzc2VkIGluIGZvciB0ZXh0IG5vdCBhc3Nv
Y2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGRvY3VtZW50CisgKiBAcGFyYW0gdGV4dCB0aGUgdGV4
dCBjb250YWluaW5nIHRoZSB3b3JkcyB0byBzcGVsbGNoZWNrCisgKiBAcGFyYW0gbWlzc3BlbGxp
bmdfbG9jYXRpb24gYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1pc3Nw
ZWxsZWQgQGEgdGV4dCwgQGMgLTEgaWYgdGhlIEBhIHRleHQgaXMgY29ycmVjdAorICogQHBhcmFt
IG1pc3NwZWxsaW5nX2xlbmd0aCBhIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGxlbmd0aCBvZiBtaXNz
cGVsbGVkIEBhIHRleHQsIEBjIDAgaWYgdGhlIEBhIHRleHQgaXMgY29ycmVjdAorICovCit0eXBl
ZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19DYikodWlu
dDY0X3QgdGFnLCBjb25zdCBjaGFyICp0ZXh0LCBpbnQzMl90ICptaXNzcGVsbGluZ19sb2NhdGlv
biwgaW50MzJfdCAqbWlzc3BlbGxpbmdfbGVuZ3RoKTsKKworLyoqCisgKiBEZWZpbmVzIGEgdHlw
ZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGEgbGlzdCBvZiBzdWdnZXN0
ZWQgc3BlbGxpbmdzIGZvciBhIG1pc3NwZWxsZWQgQGEgd29yZC4KKyAqCisgKiBAcGFyYW0gdGFn
IHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRvY3VtZW50IHRo
YXQgQGEgdGV4dCBpcyBhc3NvY2lhdGVkLAorICogICAgICAgIEBjIDAgY2FuIGJlIHBhc3NlZCBm
b3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBkb2N1bWVudAorICogQHBh
cmFtIHdvcmQgdGhlIHdvcmQgdG8gZ2V0IGd1ZXNzZXMKKyAqIEByZXR1cm4gYSBsaXN0IG9mIGR5
bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJpbmdzIChhcyBjaGFyKikgYW5kCisgKiAgICAgICAgIGNh
bGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGVzdHJveWluZyB0aGVtLgorICovCit0eXBlZGVmIEVp
bmFfTGlzdCAqKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXRfQ2IpKHVpbnQ2NF90
IHRhZywgY29uc3QgY2hhciAqd29yZCk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0
aW9uIHRvIGFkZCB0aGUgd29yZCB0byB0aGUgc3BlbGwgY2hlY2tlciBkaWN0aW9uYXJ5LgorICoK
KyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIgd2hp
Y2ggZG9jdW1lbnQgdGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAgICAgICAgQGMgMCBj
YW4gYmUgcGFzc2VkIGZvciB0ZXh0IG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGRv
Y3VtZW50CisgKiBAcGFyYW0gd29yZCB0aGUgd29yZCB0byBhZGQKKyAqLwordHlwZWRlZiB2b2lk
ICgqRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0NiKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNo
YXIgKndvcmQpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0ZWxsIHRo
ZSBzcGVsbCBjaGVja2VyIHRvIGlnbm9yZSBhIGdpdmVuIHdvcmQuCisgKgorICogQHBhcmFtIHRh
ZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVudCB0
aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBAYyAwIGNhbiBiZSBwYXNzZWQg
Zm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZG9jdW1lbnQKKyAqIEBw
YXJhbSB3b3JkIHRoZSB3b3JkIHRvIGlnbm9yZQorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4
dF9DaGVja2VyX1dvcmRfSWdub3JlX0NiKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKndvcmQp
OworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgYSB1bmlxdWUgc3Bl
bGwgZG9jdW1lbnQgdGFnLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQg
b3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1l
bnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9j
dW1lbnRfdGFnX2dldF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1l
bnRfVGFnX0dldF9DYiBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRv
IGNsb3NlIGEgdW5pcXVlIHNwZWxsIGRvY3VtZW50IHRhZy4KKyAqCisgKiBAcGFyYW0gY2IgYSBu
ZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJL
aXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNr
ZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZV9jYl9zZXQoRXdrX1RleHRfQ2hlY2tl
cl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlX0NiIGNiKTsKKworLyoqCisgKiBTZXRz
IGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2VhcmNoIGZvciBhIG1pc3NwZWxsZWQgd29yZHMgaW4g
dGhlIGdpdmVuIHN0cmluZy4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0
IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVt
ZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc3RyaW5nX3NwZWxsaW5n
X2NoZWNrX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19DYiBj
Yik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhbiBhcnJheSBv
ZiBzdWdnZXN0ZWQgc3BlbGxpbmdzIGZvciBhIG1pc3NwZWxsZWQgd29yZC4KKyAqCisgKiBAcGFy
YW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVm
YXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190
ZXh0X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9Xb3Jk
X0d1ZXNzZXNfR2V0X0NiIGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24g
dG8gYWRkIHRoZSB3b3JkIHRvIHRoZSBzcGVsbCBjaGVja2VyIGRpY3Rpb25hcnkuCisgKgorICog
QHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhl
IGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBl
d2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29yZF9M
ZWFybl9DYiBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRlbGwg
dGhlIHNwZWxsIGNoZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4gd29yZC4KKyAqCisgKiBAcGFyYW0g
Y2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVs
dCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0
X2NoZWNrZXJfd29yZF9pZ25vcmVfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmVf
Q2IgY2IpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a190
ZXh0X2NoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hZTg5ZThiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlX2gKKyNk
ZWZpbmUgZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlX2gKKworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXIuaCIKKworLyoqCisgKiBAYnJpZWYgU3RydWN0
dXJlIGtlZXBzIGNsaWVudCdzIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqCisgKiBAaW50ZXJuYWwK
KyAqLworc3RydWN0IF9Fd2tfVGV4dF9DaGVja2VyIHsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1Vu
aXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0X0NiIHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWc7Cisg
ICAgRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlX0NiIGNs
b3NlU3BlbGxEb2N1bWVudFdpdGhUYWc7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3Bl
bGxpbmdfQ2hlY2tfQ2IgY2hlY2tTcGVsbGluZ09mU3RyaW5nOworICAgIEV3a19UZXh0X0NoZWNr
ZXJfV29yZF9HdWVzc2VzX0dldF9DYiBndWVzc2VzRm9yV29yZDsKKyAgICBFd2tfVGV4dF9DaGVj
a2VyX1dvcmRfTGVhcm5fQ2IgbGVhcm5Xb3JkOworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9J
Z25vcmVfQ2IgaWdub3JlV29yZDsKK307Cit0eXBlZGVmIF9Fd2tfVGV4dF9DaGVja2VyIEV3a19U
ZXh0X0NoZWNrZXI7CisKK0V3a19UZXh0X0NoZWNrZXIqIGV3a190ZXh0X2NoZWNrZXJfY2FsbGJh
Y2tzX2dldCgpOworCisvLyBNYWtlcyBpdCB2aXNpYmxlIGZvciBXVFIuCitFQVBJIHZvaWQgZXdr
X3RleHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCk7CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExD
SEVDSykKKyNlbmRpZiAvLyBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTcyYmZl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5ncy5jcHAKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
cy5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJXS1RleHRDaGVja2Vy
LmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGJvb2wgaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgOiAxOworICAgIGJvb2wgaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkIDogMTsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFd2tfVGV4dF9DaGVja2Vy
X1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIG9uQ29udGludW91
c1NwZWxsQ2hlY2tpbmc7CisgICAgICAgIEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ3NfR3JhbW1h
cl9DaGVja2luZ19DaGFuZ2VfQ2Igb25HcmFtbWFyQ2hlY2tpbmc7CisgICAgfSBzZXR0aW5nc0No
YW5nZUNhbGxiYWNrczsKKyAgICBWZWN0b3I8U3RyaW5nPiBzcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
OworfSBld2tUZXh0Q2hlY2tlclNldHRpbmdzID0geyBmYWxzZSwgZmFsc2UsIHswLCAwfSwgVmVj
dG9yPFN0cmluZz4oKSB9OworCitzdGF0aWMgRWluYV9Cb29sIG9uQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdJZGxlcih2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5zZXR0
aW5nc0NoYW5nZUNhbGxiYWNrcy5vbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nKQorICAgICAgICBl
d2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRpbmdzQ2hhbmdlQ2FsbGJhY2tzLm9uQ29udGludW91
c1NwZWxsQ2hlY2tpbmcoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5pc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCk7IAorCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30K
Kworc3RhdGljIEVpbmFfQm9vbCBvbkdyYW1tYXJDaGVja2luZ0lkbGVyKHZvaWQqKQoreworICAg
IGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRpbmdzQ2hhbmdlQ2FsbGJhY2tzLm9uR3Jh
bW1hckNoZWNraW5nKQorICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNldHRpbmdzQ2hh
bmdlQ2FsbGJhY2tzLm9uR3JhbW1hckNoZWNraW5nKGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKKworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5D
RUw7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldFVwZGF0
ZSh2b2lkKikKK3sKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgdG8gZGVsZWdhdGUgY2FsbGluZyBv
ZiB0aGlzIG1ldGhvZCBpbiBXZWJQcm9jZXNzIHRvIGRvIG5vdCBkZWxheS9ibG9jayBVSVByb2Nl
c3MuCisgICAgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhld2tUZXh0Q2hlY2tlclNldHRp
bmdzLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19D
QU5DRUw7Cit9CisKK3N0YXRpYyB2b2lkIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIG5ld0xhbmd1YWdlcykKK3sKKyAgICBld2tUZXh0Q2hlY2tlclNldHRp
bmdzLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMgPSBuZXdMYW5ndWFnZXM7CisgICAgZWNvcmVfaWRs
ZXJfYWRkKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXRVcGRhdGUsIDApOworfQorI2VuZGlmIC8v
IEVOQUJMRShTUEVMTENIRUNLKQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0
dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2IgY2FsbGJhY2spCit7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5zZXR0aW5n
c0NoYW5nZUNhbGxiYWNrcy5vbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nID0gY2FsbGJhY2s7Cisj
ZW5kaWYKK30KKwordm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2dyYW1tYXJfY2hlY2tp
bmdfY2hhbmdlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdzX0dyYW1tYXJfQ2hlY2tp
bmdfQ2hhbmdlX0NiIGNhbGxiYWNrKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGV3
a1RleHRDaGVja2VyU2V0dGluZ3Muc2V0dGluZ3NDaGFuZ2VDYWxsYmFja3Mub25HcmFtbWFyQ2hl
Y2tpbmcgPSBjYWxsYmFjazsKKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkKK3sKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4gZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5p
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KEVpbmFfQm9vbCBlbmFibGUpCit7CisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisgICAgZW5hYmxlID0gISFlbmFibGU7CisgICAgaWYgKGV3a1RleHRD
aGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgIT0gZW5hYmxl
KSB7CisgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQgPSBlbmFibGU7CisKKyAgICAgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGUpOworCisgICAgICAgIC8vIFNl
dHMgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4KKyAgICAgICAg
aWYgKGVuYWJsZSAmJiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldChWZWN0b3I8U3RyaW5nPigpKTsK
KworICAgICAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5zZXR0aW5nc0NoYW5nZUNhbGxi
YWNrcy5vbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nKQorICAgICAgICAgICAgZWNvcmVfaWRsZXJf
YWRkKG9uQ29udGludW91c1NwZWxsQ2hlY2tpbmdJZGxlciwgMCk7CisgICAgfQorI2VuZGlmCit9
CisKK0VpbmFfQm9vbCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2dyYW1tYXJfY2hlY2tpbmdf
ZW5hYmxlZF9nZXQoKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBld2tU
ZXh0Q2hlY2tlclNldHRpbmdzLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKKyNlbHNlCisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
c19ncmFtbWFyX2NoZWNraW5nX2VuYWJsZWRfc2V0KEVpbmFfQm9vbCBlbmFibGUpCit7CisjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgZW5hYmxlID0gISFlbmFibGU7CisgICAgaWYgKGV3a1Rl
eHRDaGVja2VyU2V0dGluZ3MuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkICE9IGVuYWJsZSkgewor
ICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9
IGVuYWJsZTsKKworICAgICAgICBXS1RleHRDaGVja2VyR3JhbW1hckNoZWNraW5nRW5hYmxlZFN0
YXRlQ2hhbmdlZChlbmFibGUpOworCisgICAgICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdz
LnNldHRpbmdzQ2hhbmdlQ2FsbGJhY2tzLm9uR3JhbW1hckNoZWNraW5nKQorICAgICAgICAgICAg
ZWNvcmVfaWRsZXJfYWRkKG9uR3JhbW1hckNoZWNraW5nSWRsZXIsIDApOworICAgIH0KKyNlbmRp
ZgorfQorCitFaW5hX0xpc3QqIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Nfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzX2dldCgpCit7CisgICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMgPSAw
OworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcyA9
IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZM
YW51YWdlcyA9IGxhbmd1YWdlcy5zaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bWJlck9mTGFudWFnZXM7ICsraSkKKyAgICAgICAgbGlzdE9mbGFuZ3VhZ2VzID0gZWluYV9s
aXN0X2FwcGVuZChsaXN0T2ZsYW5ndWFnZXMsIGVpbmFfc3RyaW5nc2hhcmVfYWRkKGxhbmd1YWdl
c1tpXS51dGY4KCkuZGF0YSgpKSk7CisjZW5kaWYKKyAgICByZXR1cm4gbGlzdE9mbGFuZ3VhZ2Vz
OworfQorCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX2VuYWJsZWRfc2V0KGNvbnN0IGNoYXIqIGxhbmd1YWdlcykKK3sKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5nPiBuZXdMYW5ndWFnZXM7CisgICAgU3RyaW5n
Ojpmcm9tVVRGOChsYW5ndWFnZXMpLnNwbGl0KCcsJywgbmV3TGFuZ3VhZ2VzKTsKKworICAgIHNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQobmV3TGFuZ3VhZ2VzKTsKKyNlbmRpZgorfQorCitFaW5h
X0xpc3QqIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
X2VuYWJsZWRfZ2V0KCkKK3sKKyAgICBFaW5hX0xpc3QqIGxpc3RPZmxhbmd1YWdlcyA9IDA7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzID0gbG9h
ZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworICAgIHNpemVfdCBudW1iZXJPZkxhbnVhZ2Vz
ID0gbGFuZ3VhZ2VzLnNpemUoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVy
T2ZMYW51YWdlczsgKytpKQorICAgICAgICBsaXN0T2ZsYW5ndWFnZXMgPSBlaW5hX2xpc3RfYXBw
ZW5kKGxpc3RPZmxhbmd1YWdlcywgZWluYV9zdHJpbmdzaGFyZV9hZGQobGFuZ3VhZ2VzW2ldLnV0
ZjgoKS5kYXRhKCkpKTsKKworI2VuZGlmCisgICAgcmV0dXJuIGxpc3RPZmxhbmd1YWdlczsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXJfc2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190
ZXh0X2NoZWNrZXJfc2V0dGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xNjFhOWJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5ncy5oCkBAIC0wLDAgKzEsMTY3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLyoqCisgKiBAZmlsZSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzLmgKKyAqIEBi
cmllZiBBUEkgZm9yIG1hbmlwdWxhdGluZyBzcGVsbCBjaGVja2VyIGZlYXR1cmUuCisgKi8KKwor
I2lmbmRlZiBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2gKKyNkZWZpbmUgZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5nc19oCisKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1
cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZv
ciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuCisg
KiB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdl
YktpdC4KKyAqCisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNw
ZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVk
CisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ3NfQ29udGludW91
c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2IpKEVpbmFfQm9vbCBlbmFibGUpOworCisvKioKKyAq
IFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4K
KyAqIHRoZSBncmFtbWFyIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0Lgor
ICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIGlmIGdyYW1tYXIgY2hlY2tpbmcgaXMg
ZW5hYmxlZCBvciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLwordHlwZWRlZiB2
b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9TZXR0aW5nc19HcmFtbWFyX0NoZWNraW5nX0NoYW5nZV9D
YikoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9u
IHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhlIGNvbnRpbnVvdXMgc3BlbGwg
Y2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogU3BlY2lmeWlu
ZyBvZiB0aGlzIGNhbGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8g
cmVjZWl2ZSBub3RpZmljYXRpb25zCisgKiBvbmNlIFdlYktpdCBjaGFuZ2VzIHRoaXMgc2V0dGlu
Zy4KKyAqIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFj
ayBpcyBub3Qgc2V0LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQg
bGV2ZWwgY2FuIGJlIG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25zIGlu
IGEgQ29udGV4dCBNZW51IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJh
Y2sgZnVuY3Rpb24gdG8gc2V0IG9yIEBjIE5VTEwgdG8gaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMg
b25lCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1NldHRpbmdzX0Nv
bnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIGNiKTsKKworLyoqCisgKiBTZXRzIGEg
Y2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuCisgKiB0aGUg
Z3JhbW1hciBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBT
cGVjaWZ5aW5nIG9mIHRoaXMgY2FsbGJhY2sgaXMgbmVlZGVkIGlmIHRoZSBhcHBsaWNhdGlvbiB3
YW50cyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMKKyAqIG9uY2UgV2ViS2l0IGNoYW5nZXMgdGhp
cyBzZXR0aW5nLgorICogSWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBpbnRlcmVzdGVkLCB0aGlz
IGNhbGxiYWNrIGlzIG5vdCBzZXQuCisgKiBDaGFuZ2luZyBvZiB0aGlzIHNldHRpbmcgYXQgdGhl
IFdlYktpdCBsZXZlbCBjYW4gYmUgbWFkZSBhcyBhIHJlc3VsdCBvZiBtb2RpZnlpbmcKKyAqIG9w
dGlvbnMgaW4gYSBDb250ZXh0IE1lbnUgYnkgYSB1c2VyLgorICoKKyAqIEBwYXJhbSBjYiBhIG5l
dyBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQgb3IgQGMgTlVMTCB0byBpbnZhbGlkYXRlIHRoZSBw
cmV2aW91cyBvbmUKKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZ3Jh
bW1hcl9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU2V0dGluZ3NfR3Jh
bW1hcl9DaGVja2luZ19DaGFuZ2VfQ2IgY2IpOworCisvKioKKyAqIFF1ZXJpZXMgaWYgY29udGlu
dW91cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9U
UlVFIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAYyBFSU5BX0ZB
TFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KHZvaWQpOwor
CisvKioKKyAqIEVuYWJsZXMvZGlzYWJsZXMgY29udGludW91cyBzcGVsbCBjaGVja2luZy4KKyAq
CisgKiBBZGRpdGlvbmFsbHksIHRoaXMgZnVuY3Rpb24gY2FsbHMgYSBjYWxsYmFjayBmdW5jdGlv
biAoaWYgZGVmaW5lZCkgdG8gbm90aWZ5CisgKiB0aGUgY2xpZW50IGFib3V0IHRoZSBjaGFuZ2Ug
b2YgdGhlIHNldHRpbmcuCisgKiBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4K
KyAqCisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9j
aGVja2luZ19jaGFuZ2VfY2Jfc2V0CisgKgorICogQHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUg
dG8gZW5hYmxlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgb3IgQGMgRUlOQV9GQUxTRSB0byBk
aXNhYmxlCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgor
ICogUXVlcmllcyBpZiBncmFtbWFyIGNoZWNraW5nIGlzIGVuYWJsZWQuCisgKgorICogQXBwbGlj
YXRpb24gbWF5IG92ZXJ3cml0ZSB3ZWJraXQgZ3JhbW1hciBjaGVja2luZyBpbXBsZW1lbnRhdGlv
biBieSBzZXR0aW5nIGNhbGxiYWNrIGZ1bmN0aW9ucworICogQHNlZSBld2tfdGV4dF9jaGVja2Vy
LmgKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBncmFtbWFyIGNoZWNraW5nIGlzIGVu
YWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8KK0VBUEkgRWluYV9C
b29sIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZ3JhbW1hcl9jaGVja2luZ19lbmFibGVkX2dl
dCh2b2lkKTsKKworLyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGdyYW1tYXIgY2hlY2tpbmcuCisg
KgorICogQWRkaXRpb25hbGx5LCB0aGlzIGZ1bmN0aW9uIGNhbGxzIGEgY2FsbGJhY2sgZnVuY3Rp
b24gKGlmIGRlZmluZWQpIHRvIG5vdGlmeQorICogdGhlIGNsaWVudCBhYm91dCB0aGUgY2hhbmdl
IG9mIHRoZSBzZXR0aW5nLgorICogVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGFuZCBpcyBub3Qg
c3VwcG9ydGVkIGJ5IFdlYktpdC1FRkwgYnkgZGVmYXVsdC4KKyAqCisgKiBAc2VlIGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZ3NfZ3JhbW1hcl9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0CisgKgorICog
QHBhcmFtIGVuYWJsZSBAYyBFSU5BX1RSVUUgdG8gZW5hYmxlIGdyYW1tYXIgY2hlY2tpbmcgb3Ig
QGMgRUlOQV9GQUxTRSB0byBkaXNhYmxlCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdzX2dyYW1tYXJfY2hlY2tpbmdfZW5hYmxlZF9zZXQoRWluYV9Cb29sIGVuYWJsZSk7
CisKKy8qKgorICogR2V0cyB0aGUgdGhlIGxpc3Qgb2YgYWxsIGluc3RhbGxlZCBhbmQgYXZhaWxh
YmxlIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgdG8gdXNlLgorICoKKyAqIEBzZWUgZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9z
ZXQKKyAqCisgKiBAcmV0dXJuIHRoZSBsaXN0IHdpdGggYXZhaWxhYmxlIHNwZWxsIGNoZWNraW5n
IGxhbmd1YWdlcywgb3IgQGMgTlVMTCBvbiBmYWlsdXJlCisgKiAgICAgICAgIHRoZSBFaW5hX0xp
c3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIsIHVzZSBlaW5hX3N0cmluZ3No
YXJlX2RlbCgpCisgKi8KK0VBUEkgRWluYV9MaXN0ICpld2tfdGV4dF9jaGVja2VyX3NldHRpbmdz
X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQodm9pZCk7CisKKy8qKgorICogU2V0cyBAYSBs
YW5ndWFnZXMgYXMgdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIHVzZSBieSBkZWZhdWx0IFdlYktp
dAorICogaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2VyIGZlYXR1cmUgd2l0aCBFbmNoYW50
IGxpYnJhcnkgc3VwcG9ydC4KKyAqCisgKiBJZiBAbGFuZ3VhZ2VzIGlzIEBjIE5VTEwsIHRoZSBk
ZWZhdWx0IGxhbmd1YWdlIGlzIHVzZWQuCisgKiBJZiB0aGUgZGVmYXVsdCBsYW5ndWFnZSBjYW4g
bm90IGJlIGRldGVybWluZWQgdGhlbiBhbnkgYXZhaWxhYmxlIGRpY3Rpb25hcnkgd2lsbCBiZSB1
c2VkLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gaW52YWxpZGF0ZXMgdGhlIHByZXZpb3Vz
bHkgc2V0IGxhbmd1YWdlcy4KKyAqICAgICAgIFRoZSBkaWN0aW9uYXJpZXMgYXJlIHJlcXVlc3Rl
ZCBhc3luY2hyb25vdXNseS4KKyAqCisgKiBAcGFyYW0gbGFuZ3VhZ2VzIGEgbGlzdCBvZiBjb21t
YSAoJywnKSBzZXBhcmF0ZWQgbGFuZ3VhZ2UgY29kZXMKKyAqICAgICAgICBvZiB0aGUgZm9ybSAn
ZW5fVVMnLCBpZSwgbGFuZ3VhZ2VfVkFSSUFOVCwgbWF5IGJlIEBjIE5VTEwuCisgKi8KK0VBUEkg
dm9pZCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19l
bmFibGVkX3NldChjb25zdCBjaGFyICpsYW5ndWFnZXMpOworCisvKioKKyAqIEdldHMgdGhlIHRo
ZSBsaXN0IG9mIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLgorICoKKyAqIEBz
ZWUgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0
CisgKiBAc2VlIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzX2VuYWJsZWRfc2V0CisgKgorICogQHJldHVybiB0aGUgbGlzdCB3aXRoIHRoZSBzcGVsbCBj
aGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLAorICogICAgICAgICB0aGUgRWluYV9MaXN0IGFuZCBp
dHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1c2UgZWluYV9zdHJpbmdzaGFyZV9kZWwo
KQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9nZXQodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1
cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKaW5kZXgg
NzVhOGE5OS4uNjM5MThiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9UZXh0Q2hlY2tlckVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9U
ZXh0Q2hlY2tlckVmbC5jcHAKQEAgLTEsNSArMSw3IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNyw3ICsyOSwxMCBAQAogI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCiAKICNpbmNs
dWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiV2ViVGV4dENoZWNrZXIu
aCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMzcsOTEgKzQyLDE4
NSBAQCBzdGF0aWMgVGV4dENoZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwogCiBjb25zdCBU
ZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgc3RhdGljIGJvb2wgZGlkSW5pdGlh
bGl6ZVN0YXRlID0gZmFsc2U7CisgICAgaWYgKGRpZEluaXRpYWxpemVTdGF0ZSkKKyAgICAgICAg
cmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CisKKyAgICBXZWJUZXh0Q2hlY2tlckNsaWVudCYgY2xp
ZW50ID0gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKTsKKyAgICB0ZXh0Q2hlY2tl
clN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gY2xpZW50LmNvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkID0gY2xpZW50LmdyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKKworICAg
IGRpZEluaXRpYWxpemVTdGF0ZSA9IHRydWU7CisjZW5kaWYKICAgICByZXR1cm4gdGV4dENoZWNr
ZXJTdGF0ZTsKIH0KIAogYm9vbCBUZXh0Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0FsbG93ZWQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hF
Q0spCisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY29udGlu
dW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7CisjZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoYm9vbCkKK3ZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZChib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgaWYgKHN0YXRlKCku
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHRleHRDaGVja2VyU3RhdGUuaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZDsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldENvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5n
RW5hYmxlZChib29sKQordm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxl
ZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGlmIChzdGF0ZSgpLmlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCA9PSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkuc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKKyNlbmRp
ZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRT
dGF0ZUNoYW5nZWQoYm9vbCAvKmVuYWJsZWQqLykKK3ZvaWQgVGV4dENoZWNrZXI6OmNvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICB0ZXh0Q2hlY2tl
clN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNr
ZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCAvKmVuYWJsZWQqLykK
K3ZvaWQgVGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9v
bCBlbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hF
Q0spCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBlbmFi
bGVkOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CisjZW5kaWYKIH0KIAotaW50
NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqKQor
aW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkq
IHBhZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykK
KyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51bmlxdWVTcGVs
bERvY3VtZW50VGFnKHBhZ2UpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocGFnZSk7CiAgICAg
cmV0dXJuIDA7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3Vt
ZW50V2l0aFRhZyhpbnQ2NF90KQordm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50
V2l0aFRhZyhpbnQ2NF90IHRhZykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJM
RShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2xv
c2VTcGVsbERvY3VtZW50V2l0aFRhZyh0YWcpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFn
KTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmco
aW50NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgaW50MzJfdCYsIGludDMyX3QmKQordm9p
ZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVu
dFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6
c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFn
LCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdM
ZW5ndGgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CisgICAg
VU5VU0VEX1BBUkFNKHRleHQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworICAgIFVOVVNF
RF9QQVJBTShtaXNzcGVsbGluZ0xvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0obWlzc3BlbGxp
bmdMZW5ndGgpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9m
U3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFyKiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpH
cmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNo
ZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIq
IHRleHQsIHVpbnQzMl90IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0
YWlscywgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVu
Z3RoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisg
ICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmlu
ZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMs
IGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKKyAgICBVTlVTRURfUEFSQU0odGV4dCk7CisgICAg
VU5VU0VEX1BBUkFNKGxlbmd0aCk7CisgICAgVU5VU0VEX1BBUkFNKGdyYW1tYXJEZXRhaWxzKTsK
KyAgICBVTlVTRURfUEFSQU0oYmFkR3JhbW1hckxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0o
YmFkR3JhbW1hckxlbmd0aCk7CisjZW5kaWYKIH0KIAogYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxp
bmdVSUlzU2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5z
cGVsbGluZ1VJSXNTaG93aW5nKCk7CisjZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgog
fQogCiB2b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOwor
I2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3Bl
bGxlZFdvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0
ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBj
b25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNwZWxsRG9jdW1lbnRUYWcs
IG1pc3NwZWxsZWRXb3JkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRU
YWcpOworICAgIFVOVVNFRF9QQVJBTShtaXNzcGVsbGVkV29yZCk7CisjZW5kaWYKIH0KIAotdm9p
ZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3Qs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKQordm9pZCBUZXh0Q2hlY2tlcjo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRh
ZywgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBn
cmFtbWFyRGV0YWlsKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51cGRhdGVTcGVs
bGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgYmFkR3JhbW1hclBocmFz
ZSwgZ3JhbW1hckRldGFpbCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50
VGFnKTsKKyAgICBVTlVTRURfUEFSQU0oYmFkR3JhbW1hclBocmFzZSk7CisgICAgVU5VU0VEX1BB
UkFNKGdyYW1tYXJEZXRhaWwpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmdldEd1
ZXNzZXNGb3JXb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFZlY3Rv
cjxTdHJpbmc+JikKK3ZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmICwgVmVj
dG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFC
TEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmd1
ZXNzZXNGb3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CisgICAgVU5VU0VEX1BBUkFNKHdvcmQp
OworICAgIFVOVVNFRF9QQVJBTShndWVzc2VzKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVj
a2VyOjpsZWFybldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6
OmxlYXJuV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRU
YWcsIHdvcmQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHdvcmQpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6Omln
bm9yZVdvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4dENoZWNrZXI6Omlnbm9y
ZVdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmlnbm9yZVdvcmQoc3BlbGxEb2N1bWVudFRhZywg
d29yZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKKyAgICBV
TlVTRURfUEFSQU0od29yZCk7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UgYi9Tb3VyY2UvY21ha2Uv
RmluZEVuY2hhbnQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY5
YzcxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kRW5jaGFudC5jbWFrZQpA
QCAtMCwwICsxLDQzIEBACisjIC0gVHJ5IHRvIGZpbmQgRW5jaGFudAorIyBPbmNlIGRvbmUsIHRo
aXMgd2lsbCBkZWZpbmUKKyMKKyMgIEVOQ0hBTlRfSU5DTFVERV9ESVJTIC0gdGhlIEVuY2hhbnQg
aW5jbHVkZSBkcmVjdG9yaWVzCisjICBFTkNIQU5UX0xJQlJBUklFUyAtIGxpbmsgdGhlc2UgdG8g
dXNlIEVuY2hhbnQKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMKKyMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBPUiBJVFMKKyMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisjIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7CisjIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorIyBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UgorIyBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGCisjIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitGSU5EX1BBQ0tBR0UoUGtnQ29uZmlnKQorUEtHX0NIRUNLX01PRFVMRVMoUENf
RU5DSEFOVCBlbmNoYW50KQorCitGSU5EX1BBVEgoRU5DSEFOVF9JTkNMVURFX0RJUlMKKyAgICBO
QU1FUyBlbmNoYW50LmgKKyAgICBQQVRIUyAke1BDX0VOQ0hBTlRfSU5DTFVERURJUn0KKyAgICAg
ICAgICAke1BDX0VOQ0hBTlRfSU5DTFVERV9ESVJTfQorKQorCitGSU5EX0xJQlJBUlkoRU5DSEFO
VF9MSUJSQVJJRVMKKyAgICBOQU1FUyBlbmNoYW50CisgICAgUEFUSFMgJHtQQ19FTkNIQU5UX0xJ
QkRJUn0KKyAgICAgICAgICAke1BDX0VOQ0hBTlRfTElCUkFSWV9ESVJTfQorKQpkaWZmIC0tZ2l0
IGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0Vm
bC5jbWFrZQppbmRleCBiMjc3MWU5Li5kODgyZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2Uv
T3B0aW9uc0VmbC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQpAQCAt
ODIsNiArODIsNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVH
SU9OUyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9TSEFET1dfRE9NIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX1NIQVJFRF9XT1JLRVJTIE9OKQorV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1NQRUxMQ0hFQ0sgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfVE9VQ0hfRVZFTlRTIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1ZJQlJBVElPTiBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9WSURFTyBPTikKQEAgLTE3OCwzICsxNzksNyBAQCBJRiAoV1RGX1VTRV9USUxFRF9CQUNL
SU5HX1NUT1JFKQogICBGSU5EX1BBQ0tBR0UoT3BlbkdMIFJFUVVJUkVEKQogRU5ESUYoKQogCitJ
RiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisgICAgICBGSU5EX1BBQ0tBR0UoRW5jaGFudCBSRVFVSVJF
RCkKKyAgICAgIEFERF9ERUZJTklUSU9OUygtREVOQUJMRV9TUEVMTENIRUNLPTEpCitFTkRJRigp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UgYi9Tb3VyY2Uv
Y21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKaW5kZXggNTk3ODhlOS4uODY2NTU5YiAxMDA2NDQK
LS0tIGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFr
ZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQpAQCAtOTcsNiArOTcsNyBAQCBNQUNSTyAoV0VCS0lUX09Q
VElPTl9CRUdJTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0NSSVBURURfU1BF
RUNIICJUb2dnbGUgU2NyaXB0ZWQgU3BlZWNoIEFQSSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lU
X09QVElPTl9ERUZJTkUoRU5BQkxFX1NIQURPV19ET00gIlRvZ2dsZSBTaGFkb3cgRE9NIHN1cHBv
cnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0hBUkVEX1dPUktFUlMg
IlRvZ2dsZSBTaGFyZWRXb3JrZXJzIHN1cHBvcnQiIE9GRikKKyAgICBXRUJLSVRfT1BUSU9OX0RF
RklORShFTkFCTEVfU1BFTExDSEVDSyAiVG9nZ2xlIFNwZWxsY2hlY2tpbmcgc3VwcG9ydCAocmVx
dWlyZXMgRW5jaGFudCkiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU1FM
X0RBVEFCQVNFICJUb2dnbGUgU1FMIERhdGFiYXNlIFN1cHBvcnQiIE9OKQogICAgIFdFQktJVF9P
UFRJT05fREVGSU5FKEVOQUJMRV9TVFlMRV9TQ09QRUQgIlRvZ2dsZSA8c3R5bGUgc2NvcGVkPiBz
dXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NWRyAiVG9nZ2xl
IFNWRyBzdXBwb3J0IiBPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtl
IGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKaW5kZXggYzQ1YjkyMC4uNjc0OGNhMCAxMDA2
NDQKLS0tIGEvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKKysrIGIvU291cmNlL2NtYWtlY29u
ZmlnLmguY21ha2UKQEAgLTkzLDYgKzkzLDcgQEAKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TSEFE
T1dfRE9NCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0hBUkVEX1dPUktFUlMKICNjbWFrZWRlZmlu
ZTAxIEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HCisjY21ha2VkZWZpbmUwMSBFTkFCTEVfU1BFTExD
SEVDSwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NRTF9EQVRBQkFTRQogI2NtYWtlZGVmaW5lMDEg
RU5BQkxFX1NUWUxFX1NDT1BFRAogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NWRwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168409</attachid>
            <date>2012-10-12 06:04:19 -0700</date>
            <delta_ts>2012-10-12 08:20:47 -0700</delta_ts>
            <desc>reduce implementation</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>54345</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxMzkzMmMxLi5lNmZkYWU3
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTItMDktMjQgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYXNtdW5nLmNvbT4KKworICAgICAgICBbV0syXVtFRkxd
IEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVmaW5lIFNQRUxMQ0hFQ0sgbWFjcm8g
YW5kIGVuYWJsZSBpdCBmb3IgV0syLUVmbC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5k
RW5jaGFudC5jbWFrZTogQWRkZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwu
Y21ha2U6IEVuYWJsZSBzcGVsbGNoZWNraW5nIGZlYXR1cmUgZm9yIFdlYktpdDItRUZMLgorICAg
ICAgICAqIFNvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZTogRGVmaW5lIHRoZSBTUEVM
TENIRUNLIG1hY3JvLgorICAgICAgICBUaGUgc3BlbGxjaGVja2luZyBpbXBsZW1lbnRhdGlvbiBp
cyBiYXNlZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICAgICAgICBJdCBjYW4gYmUgdXNlZCBi
eSBvdGhlciBXZWJLaXQgcG9ydHMuCisgICAgICAgICogU291cmNlL2NtYWtlY29uZmlnLmguY21h
a2U6IEFkZCB0aGUgZmVhdHVyZS4KKwogMjAxMi0xMC0xMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzA5MzcsIHIx
MzA5NDksIHIxMzA5NTUsIGFuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGY4OWViY2QuLjEwYjJjMjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wOS0yNCAgR3J6ZWdvcnogQ3phamtvd3NraSAg
PGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4sIE1pY2hhbCBSb2ogPG0ucm9qQHNhbXN1bmcuY29t
PgorCisgICAgICAgIFtXSzJdW0VGTF0gSW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2luZyBm
ZWF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTE4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICBBZGQgZW5jaGFudC1yZWxhdGVkIGNvbXBpbGVy
IGZsYWdzOiBoZWFkZXIgcGF0aHMgYW5kIHRoZSBsaWJyYXJ5IGZsYWcuCisKIDIwMTItMTAtMTEg
IFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogVHlwZUVycm9yIGluIENvbnNvbGVNZXNzYWdlLmpzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZs
LmNtYWtlCmluZGV4IDJhMTdjOWIuLjg3NzM3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC04NCw2ICs4NCw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICBwbGF0Zm9y
bS9QbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCiAgIHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJ
WC5jcHAKICAgcGxhdGZvcm0vdGV4dC9lZmwvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUVm
bC5jcHAKKyAgcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAKICkK
IAogSUYgKEVOQUJMRV9CQVRURVJZX1NUQVRVUykKQEAgLTMyNSwzICszMjYsMTIgQEAgSUYgKEVO
QUJMRV9XRUJfQVVESU8pCiAgIElOU1RBTEwoRklMRVMgJHtXRUJfQVVESU9fREFUQX0gREVTVElO
QVRJT04gJHtXRUJfQVVESU9fRElSfSkKICAgQUREX0RFRklOSVRJT05TKC1EVU5JTlNUQUxMRURf
QVVESU9fUkVTT1VSQ0VTX0RJUj0iJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vYXVkaW8vcmVzb3Vy
Y2VzIikKIEVORElGICgpCisKK0lGIChFTkFCTEVfU1BFTExDSEVDSykKKyAgICBMSVNUKEFQUEVO
RCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgJHtFTkNIQU5UX0lOQ0xVREVf
RElSU30KKyAgICApCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAg
JHtFTkNIQU5UX0xJQlJBUklFU30KKyAgICApCitFTkRJRigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjU0NWJm
MS4uZDA5ODJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0wOS0yNCAgR3J6
ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4sIE1pY2hhbCBSb2og
PG0ucm9qQHNhbXN1bmcuY29tPgorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hl
Y2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGZvciBXZWJLaXQyLUVGTCB0aGF0IGlz
IGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKworICAgICAgICBBZGRpdGlvbmFsbHkgdGhlIHBh
dGNoIHByb3ZpZGVzIEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hl
Y2tlciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhcyBFbmNoYW50IGxpYnJhcnkgZG9lc24ndCBl
bnN1cmUgZ3JhbW1hciBjaGVja2luZy4KKyAgICAgICAgQXBwbGljYXRpb24gaXMgYWJsZSB0byBv
dmVyd3JpdGUgaXQgKGJvdGggZ3JhbW1hciBhbmQgc3BlbGwgY2hlY2tpbmcpIGJ5IGRlZmluaW5n
CisgICAgICAgIGl0cyBvd24gaW1wbGVtZW50YXRpb24gYW5kIHNldHRpbmcgYXBwcm9wcmlhdGUg
Y2FsbGJhY2sgZnVuY3Rpb25zLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAg
ICAgIEFkZCBlbmNoYW50LXJlbGF0ZWQgY29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRocyBhbmQg
dGhlIGxpYnJhcnkgZmxhZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQy
Lmg6CisgICAgICAgIEFkZCBld2tfdGV4dF9jaGVja2VyLmggdG8gdGhlIG1haW4gV2ViS2l0Mi1F
RkwncyBoZWFkZXIgdG8gYmUgYXZhaWxhYmxlIGZvciBhcHBsaWNhdGlvbnMuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAg
ICBJbXBsZW1lbnQgY2FsbGJhY2tzIGZ1bmN0aW9ucyBvZiBXS1RleHRDaGVja2VyLgorCisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpOgorICAgICAg
ICAoV2ViS2l0OjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKToKKyAgICAgICAgKFdlYktpdDo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6Z3Vlc3Nlc0ZvcldvcmQp
OgorICAgICAgICAoV2ViS2l0OjpsZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjppZ25vcmVX
b3JkKToKKyAgICAgICAgVGhvc2UgbWV0aG9kcyBhcmUgZGlyZWN0bHkgZ2l2ZW4gYXMgY2FsbGJh
Y2sgZnVuY3Rpb25zIGZvciBXS1RleHRDaGVja2VyJ3MgY2xpZW50LgorICAgICAgICBUaGV5IGNo
b29zZSBiZXR3ZWVuIFdlYktpdCdzIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGFuZCBjbGllbnQn
cyBvbmVzLgorCisgICAgICAgIChXZWJLaXQ6OmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAg
ICAgICAgKFdlYktpdDo6bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFRo
ZXkgYXJlIHVzZWQgYnkgZXdrX3NldHRpbmdzLmNwcCBmaWxlIGFuZCBhbGxvdyB0byBkbyBub3QK
KyAgICAgICAgZXhwb3NlICd0ZXh0Q2hlY2tlckVuY2hhbnQnLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSB0
aGUgZnVuY3Rpb25zIHdoaWNoIGNob29zZSBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9u
IG9mCisgICAgICAgIHNwZWxsaW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KKworICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAg
ICAgIChfRXdrX0NvbnRleHQ6Ol9Fd2tfQ29udGV4dCk6CisgICAgICAgIEF0dGFjaCB0aGUgc3Bl
bGxjaGVja2VyIGZlYXR1cmUgZm9yIHRoZSBjb250ZXh0LgorCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAoZXdrX3RleHRf
Y2hlY2tlcl9jYWxsYmFja3NfZ2V0KToKKyAgICAgICAgR2V0IHRoZSBjbGllbnQncyBjYWxsYmFj
ayBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVj
a2VyLmg6IEFkZGVkLgorICAgICAgICBEZWZpbmUgQVBJIHRvIHNldCB0aGUgY2xpZW50J3Mgb3du
IHNwZWxsaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoX0V3a19UZXh0X0No
ZWNrZXIpOgorICAgICAgICBEZWZpbmUgc3RydWN0IHdpdGggY2xpZW50J3MgY2FsbGJhY2tzIHJl
c3BvbmlzYmxlIGZvciBzcGVsbGluZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19zZXR0aW5ncy5jcHA6CisgICAgICAgIChvbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nSWRsZXIp
OgorICAgICAgICBUaGUgYXBwbGljYXRpb24gaXMgbm90aWZpZWQgYWJvdXQgc3BlbGxpbmcgc2V0
dGluZyBjaGFuZ2UuCisgICAgICAgIEl0IG1heSBiZSBjaGFuZ2VkIHRocm91Z2ggY29udGV4dCBt
ZW51IG9wdGlvbiBvbiBpZGxlcgorICAgICAgICB0byBkbyBub3QgYmxvY2sgV2ViS2l0LgorCisg
ICAgICAgIChzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0VXBkYXRlKToKKyAgICAgICAgVGhlIGRp
Y3Rpb25hcmllcyBhcmUgcmVxdWVzdGVkIG9uIGlkbGVyIHRvIGRvIG5vdCBibG9jayBXZWJLaXQu
CisKKyAgICAgICAgKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQpOgorICAgICAgICBTZXQgdGhl
IGxhbmd1YWdlcy4KKworICAgICAgICAoZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfY2hhbmdlX2NiX3NldCk6CisgICAgICAgIFNldCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24g
dXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuIHRoZSBzcGVsbGluZworICAgICAgICBzZXR0
aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKworICAgICAgICAoZXdrX3NldHRpbmdzX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQpOgorICAgICAgICAoZXdrX3NldHRpbmdz
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQpOgorICAgICAgICBBUEkgdG8g
c2V0L2dldCB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZy4KKworICAgICAgICAoZXdrX3Nl
dHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQpOgorICAgICAgICAoZXdrX3NldHRp
bmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19lbmFibGVkX3NldCk6CisgICAgICAgIChld2tf
c2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfZ2V0KToKKyAgICAgICAg
QVBJIHRvIGdldC9zZXQgbGFuZ3VhZ2VzIHRvIHVzZSBieSBXZWJLaXQgaW1wbGVtZW50YXRpb24g
YmFzZWQgb24gRW5jaGFudCBsaWJyYXJ5LgorCisgICAgICAgICogVUlQcm9jZXNzL2VmbC9UZXh0
Q2hlY2tlckVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzdGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxs
b3dlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c2V0R3JhbW1h
ckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpU
ZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAg
IChXZWJLaXQ6OlRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKTogUmVtb3ZlIFdlYkNv
cmUgbmFtYXNwYWNlIGFzIGl0J3MgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGUgd2hvbGUgZmlsZS4K
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZyk6Cisg
ICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxs
ZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlX
aXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpnZXRHdWVz
c2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpsZWFybldvcmQpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aWdub3JlV29yZCk6CisgICAgICAgIFRob3Nl
IGNhbGwgV0tUZXh0Q2hlY2tlciBjbGllbnQgbWV0aG9kcy4KKwogMjAxMi0xMC0xMCAgSmVyIE5v
YmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBEaXNhbGxvdyBmdWxsIHNjcmVl
biBtb2RlIGtleWJvYXJkIGFjY2VzcyBieSBkZWZhdWx0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCBhMTJmNDRhLi5lOGJhNTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
NDYsNiArNDYsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3Mv
QVBJL2VmbC9OZXR3b3JrSW5mb1Byb3ZpZGVyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1Bh
Z2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1ZpYnJhdGlvblByb3ZpZGVy
LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKICAgICBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKICAgICBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTY0LDYgKzY1LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0
Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5jcHAK
ICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfcmVzb3VyY2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3NldHRpbmdzLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXF1ZXN0LmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5jcHAKQEAgLTEzNSw2ICsxMzcsNyBAQCBMSVNU
KEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZWZsIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
byIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9zb3VwIgorICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2
Zy9ncmFwaGljcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIKICAgICAiJHtXRUJL
SVQyX0RJUn0vU2hhcmVkL3NvdXAiCkBAIC0yNDAsNiArMjQzLDcgQEAgU0VUIChFV2ViS2l0Ml9I
RUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElS
fS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcmVzb3VyY2UuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oIgorICAgICIke0NN
QUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tl
ci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RvdWNoLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdXJsX3JlcXVlc3QuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9E
SVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuaCIKQEAgLTM2NywzICszNzEs
MTIgQEAgSUYgKEVOQUJMRV9JTlNQRUNUT1IpCiAgICAgICAgICAgICAgICAgICAgICAgIFBBVFRF
Uk4gIiouZ2lmIgogICAgICAgICAgICAgICAgICAgICAgICBQQVRURVJOICIqLnBuZyIpCiBFTkRJ
RiAoKQorCitJRiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisgICAgTElTVChBUFBFTkQgV2ViS2l0Ml9J
TkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICR7RU5DSEFOVF9JTkNMVURFX0RJUlN9CisgICAg
KQorICAgIExJU1QoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCisgICAgICAgICR7RU5DSEFOVF9M
SUJSQVJJRVN9CisgICAgKQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0VXZWJLaXQyLmgKaW5kZXggMDBkZDgxMS4uOWFhNzg2ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVk
ZSAiZXdrX3BvcHVwX21lbnVfaXRlbS5oIgogI2luY2x1ZGUgImV3a19yZXNvdXJjZS5oIgogI2lu
Y2x1ZGUgImV3a19zZXR0aW5ncy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXIuaCIKICNp
bmNsdWRlICJld2tfdG91Y2guaCIKICNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3QuaCIKICNpbmNs
dWRlICJld2tfdXJsX3Jlc3BvbnNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMzdkYjQ1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApAQCAtMCwwICsxLDEzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0
Q2hlY2tlci5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLTXV0YWJsZUFy
cmF5LmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKKyNp
bmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFaW5hLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBPd25QdHI8V2ViQ29yZTo6VGV4dENoZWNrZXJF
bmNoYW50PiB0ZXh0Q2hlY2tlckVuY2hhbnQgPSBXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6
OmNyZWF0ZSgpOworCitzdGF0aWMgRXdrX1RleHRfQ2hlY2tlciogZXdrVGV4dENoZWNrZXJDYWxs
YmFja3MgPSBld2tfdGV4dF9jaGVja2VyX2NhbGxiYWNrc19nZXQoKTsKKworYm9vbCBpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4gZXdr
X3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKK30KKwor
dm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBjb25z
dCB2b2lkKikKK3sKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19l
bmFibGVkX3NldChlbmFibGVkKTsKK30KKwordWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRh
ZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2Vy
Q2FsbGJhY2tzLT51bmlxdWVTcGVsbERvY3VtZW50VGFnKQorICAgICAgICByZXR1cm4gZXdrVGV4
dENoZWNrZXJDYWxsYmFja3MtPnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcodG9JbXBsKHBhZ2UpLT52
aWV3V2lkZ2V0KCkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgY2xvc2VTcGVsbERvY3Vt
ZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0
Q2hlY2tlckNhbGxiYWNrcy0+Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZykKKyAgICAgICAgZXdr
VGV4dENoZWNrZXJDYWxsYmFja3MtPmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKK30K
Kwordm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0
ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xl
bmd0aCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT5j
aGVja1NwZWxsaW5nT2ZTdHJpbmcpCisgICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT5j
aGVja1NwZWxsaW5nT2ZTdHJpbmcodGFnLCB0b0ltcGwodGV4dCktPnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICBlbHNl
CisgICAgICAgIHRleHRDaGVja2VyRW5jaGFudC0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRvSW1w
bCh0ZXh0KS0+c3RyaW5nKCksICptaXNzcGVsbGluZ0xvY2F0aW9uLCAqbWlzc3BlbGxpbmdMZW5n
dGgpOworfQorCitXS0FycmF5UmVmIGd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJp
bmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgV0tNdXRhYmxlQXJyYXlSZWYgc3VnZ2Vz
dGlvbnNGb3JXb3JkID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsKKworICAgIGlmIChld2tUZXh0
Q2hlY2tlckNhbGxiYWNrcy0+Z3Vlc3Nlc0ZvcldvcmQpIHsKKyAgICAgICAgRWluYV9MaXN0KiBs
aXN0ID0gZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPmd1ZXNzZXNGb3JXb3JkKHRhZywgdG9JbXBs
KHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgdm9pZCogaXRlbTsKKwor
ICAgICAgICBFSU5BX0xJU1RfRlJFRShsaXN0LCBpdGVtKSB7CisgICAgICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxjaGFyKj4oaXRlbSkpKTsKKyAgICAgICAgICAgIFdLQXJy
YXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlvbi5nZXQoKSk7CisgICAg
ICAgICAgICBmcmVlKGl0ZW0pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgVmVj
dG9yPFN0cmluZz4gZ3Vlc3NlcyA9IHRleHRDaGVja2VyRW5jaGFudC0+Z2V0R3Vlc3Nlc0Zvcldv
cmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkd1ZXNz
ZXMgPSBndWVzc2VzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1i
ZXJPZkd1ZXNzZXM7ICsraSkgeworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ3Vlc3Nl
c1tpXS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShzdWdn
ZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHN1Z2dlc3Rpb25zRm9yV29yZDsKK30KKwordm9pZCBsZWFybldvcmQodWludDY0
X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4
dENoZWNrZXJDYWxsYmFja3MtPmxlYXJuV29yZCkKKyAgICAgICAgZXdrVGV4dENoZWNrZXJDYWxs
YmFja3MtPmxlYXJuV29yZCh0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgZWxzZQorICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQtPmxlYXJuV29yZCh0b0lt
cGwod29yZCktPnN0cmluZygpKTsKK30KKwordm9pZCBpZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywg
V0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2Vy
Q2FsbGJhY2tzLT5pZ25vcmVXb3JkKQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+
aWdub3JlV29yZCh0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgZWxzZQorICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQtPmlnbm9yZVdvcmQodG9JbXBsKHdv
cmQpLT5zdHJpbmcoKSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZVNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMoKQoreworICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQtPmF2YWlsYWJs
ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK30KKwordm9pZCB1cGRhdGVTcGVsbENoZWNraW5n
TGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpCit7CisgICAgdGV4dENo
ZWNrZXJFbmNoYW50LT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Cit9
CisKK1ZlY3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQoreworICAg
IHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQtPmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExD
SEVDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktp
dFRleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRU
ZXh0Q2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMjMyNDQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJL
aXRUZXh0Q2hlY2tlci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YktpdFRleHRDaGVja2VyX2gKKyNkZWZpbmUgV2ViS2l0VGV4dENoZWNrZXJfaAorCisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckVuY2hhbnQuaCIKKyNpbmNs
dWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tQYWdlLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRoZSBmdW5jdGlvbnMgbWFpbmx5IGNob29z
ZSBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsaW5nIGFuZCB0aGUgV2Vi
S2l0IG9uZS4KKworLy8gQ2FsbGJhY2tzIHJlcXVpcmVkIGJ5IFdLVGV4dENoZWNrZXIuCitib29s
IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Owordm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKwordWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRh
ZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIGNsb3NlU3Bl
bGxEb2N1bWVudFdpdGhUYWcodWludDY0X3QgdGFnLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsK
Kwordm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0
ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xl
bmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CitXS0FycmF5UmVmIGd1ZXNzZXNGb3JXb3Jk
KHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7
Cit2b2lkIGxlYXJuV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pOwordm9pZCBpZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdS
ZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKy8vIEVuY2hhbnQncyBoZWxwZXIu
CitWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit2b2lk
IHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1
YWdlcyk7CitWZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisj
ZW5kaWYgLy8gV2ViS2l0VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IDAyZWRkYjQuLjc0NzExZjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAg
LTQwLDYgKzQwLDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJl
d2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC0xMTQsNiArMTE4LDEzIEBAIHN0cnVj
dCBfRXdrX0NvbnRleHQgewogICAgICAgICBld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xp
ZW50X2F0dGFjaCh0aGlzKTsKICAgICAgICAgZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X2F0
dGFjaCh0aGlzKTsKICAgICAgICAgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfYXR0YWNoKHRo
aXMpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgICAgICBld2tfdGV4dF9jaGVja2VyX2Ns
aWVudF9hdHRhY2goKTsKKyAgICAgICAgaWYgKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxs
X2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpIHsKKyAgICAgICAgICAgIC8vIExvYWQgdGhlIGRlZmF1
bHQgbGFuZ3VhZ2UuCisgICAgICAgICAgICBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX2VuYWJsZWRfc2V0KDApOworICAgICAgICB9CisjZW5kaWYKICAgICB9CiAKICAgICB+
X0V3a19Db250ZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19zZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfc2V0dGluZ3MuY3BwCmluZGV4IDhkMzViNDkuLjM5NTdmZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcApAQCAtMjksOSArMjks
NDUgQEAKICNpbmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPFdlYktp
dDIvV0tQcmVmZXJlbmNlcy5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJlbmNlc1ByaXZh
dGUuaD4KKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgi
CisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjZW5k
aWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAorI2lmIEVOQUJMRShTUEVMTENIRUNLKQor
c3RhdGljIHN0cnVjdCB7CisgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCA6IDE7CisgICAgVmVjdG9yPFN0cmluZz4gc3BlbGxDaGVja2luZ0xhbmd1YWdlczsKKyAgICBF
d2tfU2V0dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2Igb25Db250aW51
b3VzU3BlbGxDaGVja2luZzsKK30gZXdrVGV4dENoZWNrZXJTZXR0aW5ncyA9IHsgZmFsc2UsIFZl
Y3RvcjxTdHJpbmc+KCksIDAgfTsKKworc3RhdGljIEVpbmFfQm9vbCBvbkNvbnRpbnVvdXNTcGVs
bENoZWNraW5nSWRsZXIodm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3Mu
b25Db250aW51b3VzU3BlbGxDaGVja2luZykKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5n
cy5vbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nKGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNL
X0NBTkNFTDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0
VXBkYXRlKHZvaWQqKQoreworICAgIC8vIEZJWE1FOiBDb25zaWRlciB0byBkZWxlZ2F0ZSBjYWxs
aW5nIG9mIHRoaXMgbWV0aG9kIGluIFdlYlByb2Nlc3MgdG8gZG8gbm90IGRlbGF5L2Jsb2NrIFVJ
UHJvY2Vzcy4KKyAgICB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGV3a1RleHRDaGVja2Vy
U2V0dGluZ3Muc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7CisgICAgcmV0dXJuIEVDT1JFX0NBTExC
QUNLX0NBTkNFTDsKK30KKworc3RhdGljIHZvaWQgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldChj
b25zdCBWZWN0b3I8U3RyaW5nPiYgbmV3TGFuZ3VhZ2VzKQoreworICAgIGV3a1RleHRDaGVja2Vy
U2V0dGluZ3Muc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IG5ld0xhbmd1YWdlczsKKyAgICBlY29y
ZV9pZGxlcl9hZGQoc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldFVwZGF0ZSwgMCk7Cit9CisjZW5k
aWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisKIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfZnVsbHNj
cmVlbl9lbmFibGVkX3NldChFd2tfU2V0dGluZ3MqIHNldHRpbmdzLCBFaW5hX0Jvb2wgZW5hYmxl
KQogewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKQEAgLTE0OCwzICsxODQsNzUgQEAgRWlu
YV9Cb29sIGV3a19zZXR0aW5nc19ETlNfcHJlZmV0Y2hpbmdfZW5hYmxlZF9nZXQoY29uc3QgRXdr
X1NldHRpbmdzKiBzZXR0aW5ncykKIAogICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0RE5TUHJl
ZmV0Y2hpbmdFbmFibGVkKHNldHRpbmdzLT5wcmVmZXJlbmNlcy5nZXQoKSk7CiB9CisKK3ZvaWQg
ZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldChFd2tf
U2V0dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2IgY2FsbGJhY2spCit7
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5vbkNv
bnRpbnVvdXNTcGVsbENoZWNraW5nID0gY2FsbGJhY2s7CisjZW5kaWYKK30KKworRWluYV9Cb29s
IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkKK3sK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4gZXdrVGV4dENoZWNrZXJTZXR0aW5n
cy5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKKyNlbHNlCisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCit9CisKK3ZvaWQgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfZW5hYmxlZF9zZXQoRWluYV9Cb29sIGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKyAgICBlbmFibGUgPSAhIWVuYWJsZTsKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0
aW5ncy5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCAhPSBlbmFibGUpIHsKKyAgICAg
ICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCA9IGVuYWJsZTsKKworICAgICAgICBXS1RleHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZSk7CisKKyAgICAgICAgLy8gU2V0cyBkZWZhdWx0
IGxhbmd1YWdlIGlmIHVzZXIgZGlkbid0IHNwZWNpZnkgYW55LgorICAgICAgICBpZiAoZW5hYmxl
ICYmIGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KFZlY3RvcjxTdHJpbmc+KCkpOworCisgICAgICAg
IGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLm9uQ29udGludW91c1NwZWxsQ2hlY2tpbmcpCisg
ICAgICAgICAgICBlY29yZV9pZGxlcl9hZGQob25Db250aW51b3VzU3BlbGxDaGVja2luZ0lkbGVy
LCAwKTsKKyAgICB9CisjZW5kaWYKK30KKworRWluYV9MaXN0KiBld2tfc2V0dGluZ3Nfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpCit7CisgICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFn
ZXMgPSAwOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1
YWdlcyA9IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBzaXplX3QgbnVt
YmVyT2ZMYW51YWdlcyA9IGxhbmd1YWdlcy5zaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bWJlck9mTGFudWFnZXM7ICsraSkKKyAgICAgICAgbGlzdE9mbGFuZ3VhZ2VzID0g
ZWluYV9saXN0X2FwcGVuZChsaXN0T2ZsYW5ndWFnZXMsIGVpbmFfc3RyaW5nc2hhcmVfYWRkKGxh
bmd1YWdlc1tpXS51dGY4KCkuZGF0YSgpKSk7CisjZW5kaWYKKyAgICByZXR1cm4gbGlzdE9mbGFu
Z3VhZ2VzOworfQorCit2b2lkIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNf
ZW5hYmxlZF9zZXQoY29uc3QgY2hhciogbGFuZ3VhZ2VzKQoreworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorICAgIFZlY3RvcjxTdHJpbmc+IG5ld0xhbmd1YWdlczsKKyAgICBTdHJpbmc6OmZyb21V
VEY4KGxhbmd1YWdlcykuc3BsaXQoJywnLCBuZXdMYW5ndWFnZXMpOworCisgICAgc3BlbGxDaGVj
a2luZ0xhbmd1YWdlc1NldChuZXdMYW5ndWFnZXMpOworI2VuZGlmCit9CisKK0VpbmFfTGlzdCog
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19lbmFibGVkX2dldCgpCit7Cisg
ICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMgPSAwOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcyA9IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZMYW51YWdlcyA9IGxhbmd1YWdlcy5zaXplKCk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mTGFudWFnZXM7ICsraSkKKyAg
ICAgICAgbGlzdE9mbGFuZ3VhZ2VzID0gZWluYV9saXN0X2FwcGVuZChsaXN0T2ZsYW5ndWFnZXMs
IGVpbmFfc3RyaW5nc2hhcmVfYWRkKGxhbmd1YWdlc1tpXS51dGY4KCkuZGF0YSgpKSk7CisKKyNl
bmRpZgorICAgIHJldHVybiBsaXN0T2ZsYW5ndWFnZXM7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oCmluZGV4IDI4MzkwNmEuLmRiMDg0YzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5n
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5o
CkBAIC00NCw2ICs0NCwxNSBAQCBleHRlcm4gIkMiIHsKIHR5cGVkZWYgc3RydWN0IF9Fd2tfU2V0
dGluZ3MgRXdrX1NldHRpbmdzOwogCiAvKioKKyAqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIHRo
ZSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4KKyAqIHRo
ZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0
LgorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIGlmIGNvbnRpbnVvdXMgc3BlbGwg
Y2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAq
LwordHlwZWRlZiB2b2lkICgqRXdrX1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdf
Q2hhbmdlX0NiKShFaW5hX0Jvb2wgZW5hYmxlKTsKKworCisvKioKICAqIEVuYWJsZXMvZGlzYWJs
ZXMgdGhlIEphdmFzY3JpcHQgRnVsbHNjcmVlbiBBUEkuIFRoZSBKYXZhc2NyaXB0IEFQSSBhbGxv
d3MKICAqIHRvIHJlcXVlc3QgZnVsbCBzY3JlZW4gbW9kZSwgZm9yIG1vcmUgaW5mb3JtYXRpb24g
c2VlOgogICogaHR0cDovL2R2Y3MudzMub3JnL2hnL2Z1bGxzY3JlZW4vcmF3LWZpbGUvdGlwL092
ZXJ2aWV3Lmh0bWwKQEAgLTIxMCw2ICsyMTksNzYgQEAgRUFQSSBFaW5hX0Jvb2wgZXdrX3NldHRp
bmdzX0ROU19wcmVmZXRjaGluZ19lbmFibGVkX3NldChFd2tfU2V0dGluZ3MgKnNldHRpbmdzLAog
ICovCiBFQVBJIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfRE5TX3ByZWZldGNoaW5nX2VuYWJsZWRf
Z2V0KGNvbnN0IEV3a19TZXR0aW5ncyAqc2V0dGluZ3MpOwogCisvKioKKyAqIFNldHMgYSBjYWxs
YmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4KKyAqIHRoZSBjb250
aW51b3VzIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0LgorICoK
KyAqIFNwZWNpZnlpbmcgb2YgdGhpcyBjYWxsYmFjayBpcyBuZWVkZWQgaWYgdGhlIGFwcGxpY2F0
aW9uIHdhbnRzIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucworICogb25jZSBXZWJLaXQgY2hhbmdl
cyB0aGlzIHNldHRpbmcuCisgKiBJZiB0aGUgYXBwbGljYXRpb24gaXMgbm90IGludGVyZXN0ZWQs
IHRoaXMgY2FsbGJhY2sgaXMgbm90IHNldC4KKyAqIENoYW5naW5nIG9mIHRoaXMgc2V0dGluZyBh
dCB0aGUgV2ViS2l0IGxldmVsIGNhbiBiZSBtYWRlIGFzIGEgcmVzdWx0IG9mIG1vZGlmeWluZwor
ICogb3B0aW9ucyBpbiBhIENvbnRleHQgTWVudSBieSBhIHVzZXIuCisgKgorICogQHBhcmFtIGNi
IGEgbmV3IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNldCBvciBAYyBOVUxMIHRvIGludmFsaWRhdGUg
dGhlIHByZXZpb3VzIG9uZQorICovCitFQVBJIHZvaWQgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNf
c3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldChFd2tfU2V0dGluZ3NfQ29udGludW91c19TcGVs
bF9DaGVja2luZ19DaGFuZ2VfQ2IgY2IpOworCisvKioKKyAqIFF1ZXJpZXMgaWYgY29udGludW91
cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAYyBFSU5BX0ZBTFNF
IGlmIGl0J3MgZGlzYWJsZWQKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQodm9pZCk7CisKKy8qKgorICogRW5hYmxl
cy9kaXNhYmxlcyBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nLgorICoKKyAqIEFkZGl0aW9uYWxs
eSwgdGhpcyBmdW5jdGlvbiBjYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIChpZiBkZWZpbmVkKSB0
byBub3RpZnkKKyAqIHRoZSBjbGllbnQgYWJvdXQgdGhlIGNoYW5nZSBvZiB0aGUgc2V0dGluZy4K
KyAqIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICoKKyAqIEBzZWUgZXdr
X3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldAorICoKKyAq
IEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRvIGVuYWJsZSBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIG9yIEBjIEVJTkFfRkFMU0UgdG8gZGlzYWJsZQorICovCitFQVBJIHZvaWQgZXdrX3Nl
dHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoRWluYV9Cb29sIGVu
YWJsZSk7CisKKy8qKgorICogR2V0cyB0aGUgdGhlIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSB0aGUg
c3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIHRvIHVzZS4KKyAqCisgKiBAc2VlIGV3a19zZXR0aW5n
c19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9zZXQKKyAqCisgKiBAcmV0dXJuIHRo
ZSBsaXN0IHdpdGggYXZhaWxhYmxlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcywgb3IgQGMgTlVM
TCBvbiBmYWlsdXJlCisgKiAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91
bGQgYmUgZnJlZWQgYWZ0ZXIsIHVzZSBlaW5hX3N0cmluZ3NoYXJlX2RlbCgpCisgKi8KK0VBUEkg
RWluYV9MaXN0ICpld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCh2b2lk
KTsKKworLyoqCisgKiBTZXRzIEBhIGxhbmd1YWdlcyBhcyB0aGUgbGlzdCBvZiBsYW5ndWFnZXMg
dG8gdXNlIGJ5IGRlZmF1bHQgV2ViS2l0CisgKiBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNr
ZXIgZmVhdHVyZSB3aXRoIEVuY2hhbnQgbGlicmFyeSBzdXBwb3J0LgorICoKKyAqIElmIEBsYW5n
dWFnZXMgaXMgQGMgTlVMTCwgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgdXNlZC4KKyAqIElmIHRo
ZSBkZWZhdWx0IGxhbmd1YWdlIGNhbiBub3QgYmUgZGV0ZXJtaW5lZCB0aGVuIGFueSBhdmFpbGFi
bGUgZGljdGlvbmFyeSB3aWxsIGJlIHVzZWQuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBp
bnZhbGlkYXRlcyB0aGUgcHJldmlvdXNseSBzZXQgbGFuZ3VhZ2VzLgorICogICAgICAgVGhlIGRp
Y3Rpb25hcmllcyBhcmUgcmVxdWVzdGVkIGFzeW5jaHJvbm91c2x5LgorICoKKyAqIEBwYXJhbSBs
YW5ndWFnZXMgYSBsaXN0IG9mIGNvbW1hICgnLCcpIHNlcGFyYXRlZCBsYW5ndWFnZSBjb2Rlcwor
ICogICAgICAgIG9mIHRoZSBmb3JtICdlbl9VUycsIGllLCBsYW5ndWFnZV9WQVJJQU5ULCBtYXkg
YmUgQGMgTlVMTC4KKyAqLworRUFQSSB2b2lkIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19s
YW5ndWFnZXNfZW5hYmxlZF9zZXQoY29uc3QgY2hhciAqbGFuZ3VhZ2VzKTsKKworLyoqCisgKiBH
ZXRzIHRoZSB0aGUgbGlzdCBvZiB0aGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIGluIHVzZS4K
KyAqCisgKiBAc2VlIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0Cisg
KiBAc2VlIEV3a19TZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9zZXQK
KyAqCisgKiBAcmV0dXJuIHRoZSBsaXN0IHdpdGggdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdl
cyBpbiB1c2UsCisgKiAgICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQg
YmUgZnJlZWQgYWZ0ZXIsIHVzZSBlaW5hX3N0cmluZ3NoYXJlX2RlbCgpCisgKi8KK0VBUEkgRWlu
YV9MaXN0ICpld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfZ2V0
KHZvaWQpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzNlZjNmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKQEAg
LTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJv
bmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwor
ICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiZXdrX3RleHRfY2hlY2tlci5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVk
ZSAiV0tUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgIldlYktpdFRleHRDaGVja2VyLmgiCisjaW5j
bHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKKy8vIEluaXRpYWxpemVzIHRoZSBjbGllbnQncyBmdW5jdGlvbnMgdG8gQGMgMCB0byBi
ZSBzdXJlIHRoYXQgdGhleSBhcmUgbm90IGRlZmluZWQuCitzdGF0aWMgRXdrX1RleHRfQ2hlY2tl
ciBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcyA9IHsKKyAgICAwLCAvLyB1bmlxdWVTcGVsbERvY3Vt
ZW50VGFnCisgICAgMCwgLy8gY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZworICAgIDAsIC8vIGNo
ZWNrU3BlbGxpbmdPZlN0cmluZworICAgIDAsIC8vIGd1ZXNzZXNGb3JXb3JkCisgICAgMCwgLy8g
bGVhcm5Xb3JkCisgICAgMCAvLyBpZ25vcmVXb3JkCit9OworCisjZGVmaW5lIEVXS19URVhUX0NI
RUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwgTkFNRSkgIFwKK3ZvaWQgZXdrX3RleHRfY2hl
Y2tlcl8jI05BTUUjI19jYl9zZXQoVFlQRV9OQU1FIGNiKSAgICAgXAoreyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZXdrVGV4dENo
ZWNrZXJDYWxsYmFja3MuTkFNRSA9IGNiOyAgICAgICAgICAgICAgICAgIFwKK30KKworLyoqCisg
KiBBdHRhY2hlcyBzcGVsbGNoZWNrZXIgZmVhdHVyZS4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisg
KiBUaGUgZGVmYXVsdCBzcGVsbGNoZWNrZXIgZmVhdHVyZSBpcyBiYXNlZCBvbiBFbmNoYW50IGxp
YnJhcnkuCisgKiBDbGllbnQgbWF5IHVzZSBvd24gaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVj
a2VyIHByZXZpb3VzbHkgc2V0CisgKiB0aHJvdWdoIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMuCisg
Ki8KK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCkKK3sKKyAgICBzdGF0aWMg
Ym9vbCBkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQgPSBmYWxzZTsKKyAgICBpZiAoZGlk
SW5pdGlhbGl6ZVRleHRDaGVja2VyQ2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBXS1Rl
eHRDaGVja2VyQ2xpZW50IHRleHRDaGVja2VyQ2xpZW50ID0geworICAgICAgICBrV0tUZXh0Q2hl
Y2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICAwLCAvLyBjbGllbnRJbmZvCisgICAg
ICAgIDAsIC8vIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkCisgICAgICAgIGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBzZXRDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQsCisgICAgICAgIDAsIC8vIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZAor
ICAgICAgICAwLCAvLyBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkCisgICAgICAgIHVuaXF1ZVNw
ZWxsRG9jdW1lbnRUYWcsCisgICAgICAgIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcsCisgICAg
ICAgIGNoZWNrU3BlbGxpbmdPZlN0cmluZywKKyAgICAgICAgMCwgLy8gY2hlY2tHcmFtbWFyT2ZT
dHJpbmcKKyAgICAgICAgMCwgLy8gc3BlbGxpbmdVSUlzU2hvd2luZworICAgICAgICAwLCAvLyB0
b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nCisgICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQKKyAgICAgICAgMCwgLy8gdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFt
bWFyU3RyaW5nCisgICAgICAgIGd1ZXNzZXNGb3JXb3JkLAorICAgICAgICBsZWFybldvcmQsCisg
ICAgICAgIGlnbm9yZVdvcmQKKyAgICB9OworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRl
eHRDaGVja2VyQ2xpZW50KTsKKworICAgIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9
IHRydWU7Cit9CisKKy8qCisgKiBHZXRzIHRoZSBjbGllbnQncyBjYWxsYmFja3MuCisgKgorICog
QGludGVybmFsCisgKgorICogVGhlIGNsaWVudCd0IGNhbGxiYWNrcyBhcmUgbm90IGRlZmluZWQg
YnkgZGVmYXVsdC4KKyAqIElmIHRoZSBjbGllbnQgaGFzbid0IHNldCB0aGUgY2FsbGJhY2ssIHRo
ZSBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIHdpbGwKKyAqIHJldHVybiBAYyAwIGFuZCB0aGUgZGVm
YXVsdCBXZWJLaXQgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGZvciB0aGlzCisgKiBmdW5j
dGlvbmFsaXR5LgorICoKKyAqIEByZXR1cm4gdGhlIHN0cnVjdCB3aXRoIHRoZSBjbGllbnQncyBj
YWxsYmFja3MuCisgKi8KK0V3a19UZXh0X0NoZWNrZXIqIGV3a190ZXh0X2NoZWNrZXJfY2FsbGJh
Y2tzX2dldCgpCit7CisgICAgcmV0dXJuICZld2tUZXh0Q2hlY2tlckNhbGxiYWNrczsKK30KKwor
I2Vsc2UKKworLy8gRGVmaW5lcyBhbiBlbXB0eSBBUEkgdG8gZG8gbm90IGJyZWFrIGJ1aWxkLgor
I2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05BTUUsIE5BTUUpICBc
Cit2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSkgICAgICAg
IFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorfQorI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorCitFV0tfVEVYVF9DSEVDS0VS
X0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdf
R2V0X0NiLCB1bmlxdWVTcGVsbERvY3VtZW50VGFnKQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFD
S19TRVQoRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlX0Ni
LCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19T
RVQoRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2tfQ2IsIGNoZWNrU3BlbGxp
bmdPZlN0cmluZykKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNr
ZXJfV29yZF9HdWVzc2VzX0dldF9DYiwgZ3Vlc3Nlc0ZvcldvcmQpCitFV0tfVEVYVF9DSEVDS0VS
X0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm5fQ2IsIGxlYXJuV29yZCkK
K0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25v
cmVfQ2IsIGlnbm9yZVdvcmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdGV4dF9jaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYjM5NDk5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8qKgorICogQGZpbGUgZXdrX3RleHRfY2hlY2tlci5oCisgKiBAYnJpZWYgUHJvdmlkZXMgQVBJ
IHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0
aW9uLgorICoKKyAqIFRoZXJlIGlzIG9uZSBzcGVsbGNoZWNrZXIgb2JqZWN0IHBlciBhcHBsaWNh
dGlvbiBhbmQgaXQncyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICogSXQgYWxsb3dzIHRvIGNoZWNr
IHNwZWxsaW5nIGluIHRoZSBlZGl0YWJsZSBhcmVhcy4KKyAqIElmIGFwcGxpY2F0aW9uIHdhbnRz
IHRvIGVuYWJsZSB0aGUgZmVhdHVyZSwgQVBJIGZyb20gQGEgZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nLmgKKyAqIHNob3VsZCBiZSB1c2VkLgorICoKKyAqIFRoZSBkZWZhdWx0IFdlYktpdCBzcGVs
bGNoZWNrZXIgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIEVuY2hhbnQgbGlicmFyeS4K
KyAqIEl0IGRvZXNuJ3QgZW5zdXJlIGdyYW1tYXIgY2hlY2tpbmcuIEFwcGxpY2F0aW9uIGlzIGFi
bGUgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0CisgKiBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxl
bWVudGF0aW9uIGJ5IGRlZmluaW5nIGl0cyBvd24gaW1wbGVtZW50YXRpb24gYW5kIHNldHRpbmcK
KyAqIGFwcHJvcHJpYXRlIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqLworCisjaWZuZGVmIGV3a190
ZXh0X2NoZWNrZXJfaAorI2RlZmluZSBld2tfdGV4dF9jaGVja2VyX2gKKworI2luY2x1ZGUgPEV2
YXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioK
KyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byByZXR1
cm4gYSB0YWcgKGlkZW50aWZpZXIpIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLgor
ICoKKyAqIFVuaXF1ZSB0YWdzIGhlbHAgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIG90aGVyIG9i
amVjdHMgdGhhdCBhcmUgY2hlY2tlZCBmb3Igc3BlbGxpbmcgbWlzdGFrZXMuCisgKgorICogQHBh
cmFtIG8gdGhlIHZpZXcgb2JqZWN0IHRvIGdldCB1bmlxdWUgdGFnCisgKgorICogQHJldHVybiB1
bmlxdWUgdGFnIGZvciB0aGUgZ2l2ZW4gQGEgbyB2aWV3IG9iamVjdAorICovCit0eXBlZGVmIHVp
bnQ2NF90ICgqRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9D
YikoY29uc3QgRXZhc19PYmplY3QgKm8pOworCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUg
Zm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBjbG9zZSB0aGUgcHJ2aW91c2x5IHNldCB0YWcu
CisgKgorICogVGhpcyBjYWxsYmFjayB3aWxsIG5vdGlmeSB0aGUgcmVjZWl2ZXIgdGhhdCB0aGUg
dXNlciBoYXMgZmluaXNoZWQgd2l0aCB0aGUgdGFnZ2VkIGRvY3VtZW50LgorICoKKyAqIEBwYXJh
bSB0YWcgdGhlIHRhZyB0byBiZSBjbG9zZWQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRf
Q2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlX0NiKSh1aW50NjRfdCB0YWcp
OworCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlv
biB0byBzZWFyY2ggZm9yIGEgbWlzc3BlbGxlZCB3b3JkcyBpbiB0aGUgZ2l2ZW4gc3RyaW5nLgor
ICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIg
d2hpY2ggZG9jdW1lbnQgdGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAgICAgICAgaW4g
bW9zdCBjYXNlcyBub3QgbmVjZXNzYXJpbHksIGp1c3QgZm9yIGlnbm9yZWQgd29yZCwKKyAqICAg
ICAgICBAYyAwIGNhbiBiZSBwYXNzZWQgaW4gZm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBh
IHBhcnRpY3VsYXIgZG9jdW1lbnQKKyAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IGNvbnRhaW5pbmcg
dGhlIHdvcmRzIHRvIHNwZWxsY2hlY2sKKyAqIEBwYXJhbSBtaXNzcGVsbGluZ19sb2NhdGlvbiBh
IHBvaW50ZXIgdG8gc3RvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWlzc3BlbGxlZCBAYSB0ZXh0
LCBAYyAtMSBpZiB0aGUgQGEgdGV4dCBpcyBjb3JyZWN0CisgKiBAcGFyYW0gbWlzc3BlbGxpbmdf
bGVuZ3RoIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgbGVuZ3RoIG9mIG1pc3NwZWxsZWQgQGEgdGV4
dCwgQGMgMCBpZiB0aGUgQGEgdGV4dCBpcyBjb3JyZWN0CisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3
a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrX0NiKSh1aW50NjRfdCB0YWcsIGNv
bnN0IGNoYXIgKnRleHQsIGludDMyX3QgKm1pc3NwZWxsaW5nX2xvY2F0aW9uLCBpbnQzMl90ICpt
aXNzcGVsbGluZ19sZW5ndGgpOworCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRo
ZSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgYSBsaXN0IG9mIHN1Z2dlc3RlZCBzcGVsbGluZ3Mg
Zm9yIGEgbWlzc3BlbGxlZCBAYSB3b3JkLgorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0
byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIgd2hpY2ggZG9jdW1lbnQgdGhhdCBAYSB0ZXh0IGlz
IGFzc29jaWF0ZWQsCisgKiAgICAgICAgQGMgMCBjYW4gYmUgcGFzc2VkIGZvciB0ZXh0IG5vdCBh
c3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGRvY3VtZW50CisgKiBAcGFyYW0gd29yZCB0aGUg
d29yZCB0byBnZXQgZ3Vlc3NlcworICogQHJldHVybiBhIGxpc3Qgb2YgZHluYW1pY2FsbHkgYWxs
b2NhdGVkIHN0cmluZ3MgKGFzIGNoYXIqKSBhbmQKKyAqICAgICAgICAgY2FsbGVyIGlzIHJlc3Bv
bnNpYmxlIGZvciBkZXN0cm95aW5nIHRoZW0uCisgKi8KK3R5cGVkZWYgRWluYV9MaXN0ICooKkV3
a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldF9DYikodWludDY0X3QgdGFnLCBjb25zdCBj
aGFyICp3b3JkKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYWRkIHRo
ZSB3b3JkIHRvIHRoZSBzcGVsbCBjaGVja2VyIGRpY3Rpb25hcnkuCisgKgorICogQHBhcmFtIHRh
ZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVudCB0
aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBAYyAwIGNhbiBiZSBwYXNzZWQg
Zm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZG9jdW1lbnQKKyAqIEBw
YXJhbSB3b3JkIHRoZSB3b3JkIHRvIGFkZAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9D
aGVja2VyX1dvcmRfTGVhcm5fQ2IpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7CisK
Ky8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRlbGwgdGhlIHNwZWxsIGNoZWNr
ZXIgdG8gaWdub3JlIGEgZ2l2ZW4gd29yZC4KKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcg
dG8gbm90aWZ5IHRoZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRvY3VtZW50IHRoYXQgQGEgdGV4dCBp
cyBhc3NvY2lhdGVkLAorICogICAgICAgIEBjIDAgY2FuIGJlIHBhc3NlZCBmb3IgdGV4dCBub3Qg
YXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBkb2N1bWVudAorICogQHBhcmFtIHdvcmQgdGhl
IHdvcmQgdG8gaWdub3JlCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfV29y
ZF9JZ25vcmVfQ2IpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7CisKKy8qKgorICog
U2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhIHVuaXF1ZSBzcGVsbCBkb2N1bWVudCB0
YWcuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRv
IHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8K
K0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0
X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0X0Ni
IGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2xvc2UgYSB1bmlx
dWUgc3BlbGwgZG9jdW1lbnQgdGFnLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0
byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBp
bXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3Bl
bGxfZG9jdW1lbnRfdGFnX2Nsb3NlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVs
bF9Eb2N1bWVudF9UYWdfQ2xvc2VfQ2IgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBm
dW5jdGlvbiB0byBzZWFyY2ggZm9yIGEgbWlzc3BlbGxlZCB3b3JkcyBpbiB0aGUgZ2l2ZW4gc3Ry
aW5nLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0
byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICov
CitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tfY2Jfc2V0
KEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrX0NiIGNiKTsKKworLyoqCisg
KiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGFuIGFycmF5IG9mIHN1Z2dlc3RlZCBz
cGVsbGluZ3MgZm9yIGEgbWlzc3BlbGxlZCB3b3JkLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBj
YWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBj
YWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl93
b3JkX2d1ZXNzZXNfZ2V0X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXRf
Q2IgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBhZGQgdGhlIHdv
cmQgdG8gdGhlIHNwZWxsIGNoZWNrZXIgZGljdGlvbmFyeS4KKyAqCisgKiBAcGFyYW0gY2IgYSBu
ZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJL
aXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNr
ZXJfd29yZF9sZWFybl9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0NiIGNiKTsK
KworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGVsbCB0aGUgc3BlbGwgY2hl
Y2tlciB0byBpZ25vcmUgYSBnaXZlbiB3b3JkLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxs
YmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxs
YmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl93b3Jk
X2lnbm9yZV9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYiBjYik7CisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLy8gZXdrX3RleHRfY2hlY2tlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190
ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmFlODllOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaApAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfdGV4
dF9jaGVja2VyX3ByaXZhdGVfaAorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAi
ZXdrX3RleHRfY2hlY2tlci5oIgorCisvKioKKyAqIEBicmllZiBTdHJ1Y3R1cmUga2VlcHMgY2xp
ZW50J3MgY2FsbGJhY2sgZnVuY3Rpb25zLgorICoKKyAqIEBpbnRlcm5hbAorICovCitzdHJ1Y3Qg
X0V3a19UZXh0X0NoZWNrZXIgeworICAgIEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0Rv
Y3VtZW50X1RhZ19HZXRfQ2IgdW5pcXVlU3BlbGxEb2N1bWVudFRhZzsKKyAgICBFd2tfVGV4dF9D
aGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2VfQ2IgY2xvc2VTcGVsbERvY3Vt
ZW50V2l0aFRhZzsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19D
YiBjaGVja1NwZWxsaW5nT2ZTdHJpbmc7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNz
ZXNfR2V0X0NiIGd1ZXNzZXNGb3JXb3JkOworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9MZWFy
bl9DYiBsZWFybldvcmQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYiBpZ25v
cmVXb3JkOworfTsKK3R5cGVkZWYgX0V3a19UZXh0X0NoZWNrZXIgRXdrX1RleHRfQ2hlY2tlcjsK
KworRXdrX1RleHRfQ2hlY2tlciogZXdrX3RleHRfY2hlY2tlcl9jYWxsYmFja3NfZ2V0KCk7CisK
Ky8vIE1ha2VzIGl0IHZpc2libGUgZm9yIFdUUi4KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2Vy
X2NsaWVudF9hdHRhY2goKTsKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorI2VuZGlm
IC8vIGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCmluZGV4IDc1YThhOTkuLjYzOTE4YmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCkBAIC0x
LDUgKzEsNyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNz
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjksMTAgQEAK
ICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgogCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCisjZW5kaWYKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTM3LDkxICs0MiwxODUgQEAgc3RhdGljIFRleHRDaGVja2Vy
U3RhdGUgdGV4dENoZWNrZXJTdGF0ZTsKIAogY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENo
ZWNrZXI6OnN0YXRlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOworICAg
IGlmIChkaWRJbml0aWFsaXplU3RhdGUpCisgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRl
OworCisgICAgV2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2xpZW50KCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGNsaWVu
dC5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0
cnVlOworI2VuZGlmCiAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CiB9CiAKIGJvb2wgVGV4
dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dl
ZCgpOworI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hl
Y2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRD
aGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVO
QUJMRShTUEVMTENIRUNLKQorICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7CisgICAgV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworI2VuZGlmCiB9CiAKLXZv
aWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCkKK3ZvaWQgVGV4
dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVD
SykKKyAgICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPT0gaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRl
LmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKKyAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tl
cjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgLyplbmFi
bGVkKi8pCit2b2lkIFRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRT
dGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbmFi
bGVkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFi
bGVkU3RhdGVDaGFuZ2VkKGJvb2wgLyplbmFibGVkKi8pCit2b2lkIFRleHRDaGVja2VyOjpncmFt
bWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3Rh
dGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGVuYWJsZWQpOworI2VuZGlmCiB9CiAKLWludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1
ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KikKK2ludDY0X3QgVGV4dENoZWNrZXI6OnVu
aXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVudFRhZyhwYWdlKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAK
LXZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCkKK3Zv
aWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWco
dGFnKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhZyk7CisjZW5kaWYKIH0KIAotdm9pZCBU
ZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFyKiwg
dWludDMyX3QsIGludDMyX3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0
LCB1aW50MzJfdCBsZW5ndGgsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3Qm
IG1pc3NwZWxsaW5nTGVuZ3RoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVj
a1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRleHQsIGxlbmd0aCks
IG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0KTsKKyAg
ICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKKyAgICBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdMb2Nh
dGlvbik7CisgICAgVU5VU0VEX1BBUkFNKG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyNlbmRpZgogfQog
Ci12b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBV
Q2hhciosIHVpbnQzMl90LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQzMl90
JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2
NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgs
IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJhZEdyYW1t
YXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCkuY2hlY2tHcmFtbWFyT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3Ry
aW5nKHRleHQsIGxlbmd0aCksIGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJh
ZEdyYW1tYXJMZW5ndGgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRh
Zyk7CisgICAgVU5VU0VEX1BBUkFNKHRleHQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwor
ICAgIFVOVVNFRF9QQVJBTShncmFtbWFyRGV0YWlscyk7CisgICAgVU5VU0VEX1BBUkFNKGJhZEdy
YW1tYXJMb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGJhZEdyYW1tYXJMZW5ndGgpOworI2Vu
ZGlmCiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc3BlbGxpbmdVSUlzU2hvd2luZygpOwor
I2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6
dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRD
aGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3QsIGNvbnN0
IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxs
ZWRXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVk
V29yZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQor
ICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZChzcGVsbERvY3VtZW50VGFnLCBtaXNzcGVsbGVkV29yZCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKKyAgICBVTlVTRURfUEFSQU0o
bWlzc3BlbGxlZFdvcmQpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhpbnQ2NF90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBH
cmFtbWFyRGV0YWlsJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgYmFkR3Jh
bW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KHNwZWxsRG9jdW1lbnRUYWcsIGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CisgICAgVU5VU0VEX1BBUkFN
KGJhZEdyYW1tYXJQaHJhc2UpOworICAgIFVOVVNFRF9QQVJBTShncmFtbWFyRGV0YWlsKTsKKyNl
bmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90LCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit2b2lkIFRleHRD
aGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiAsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2Vi
VGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVsbERvY3Vt
ZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9j
dW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsKKyAgICBVTlVTRURfUEFSQU0oZ3Vl
c3Nlcyk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qs
IGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsK
KyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3QsIGNvbnN0
IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1
bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CisgICAgVU5VU0VEX1BBUkFNKHdvcmQpOworI2Vu
ZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtl
L0ZpbmRFbmNoYW50LmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OWM3MWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UKQEAgLTAsMCArMSw0MyBAQAorIyAtIFRy
eSB0byBmaW5kIEVuY2hhbnQKKyMgT25jZSBkb25lLCB0aGlzIHdpbGwgZGVmaW5lCisjCisjICBF
TkNIQU5UX0lOQ0xVREVfRElSUyAtIHRoZSBFbmNoYW50IGluY2x1ZGUgZHJlY3RvcmllcworIyAg
RU5DSEFOVF9MSUJSQVJJRVMgLSBsaW5rIHRoZXNlIHRvIHVzZSBFbmNoYW50CisjCisjIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTCisjIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1Ig
SVRTCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOwor
IyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwKKyMgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyMgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorIyBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworRklORF9QQUNLQUdF
KFBrZ0NvbmZpZykKK1BLR19DSEVDS19NT0RVTEVTKFBDX0VOQ0hBTlQgZW5jaGFudCkKKworRklO
RF9QQVRIKEVOQ0hBTlRfSU5DTFVERV9ESVJTCisgICAgTkFNRVMgZW5jaGFudC5oCisgICAgUEFU
SFMgJHtQQ19FTkNIQU5UX0lOQ0xVREVESVJ9CisgICAgICAgICAgJHtQQ19FTkNIQU5UX0lOQ0xV
REVfRElSU30KKykKKworRklORF9MSUJSQVJZKEVOQ0hBTlRfTElCUkFSSUVTCisgICAgTkFNRVMg
ZW5jaGFudAorICAgIFBBVEhTICR7UENfRU5DSEFOVF9MSUJESVJ9CisgICAgICAgICAgJHtQQ19F
TkNIQU5UX0xJQlJBUllfRElSU30KKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25z
RWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggYjI3NzFlOS4u
ZDg4MmQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIGIv
U291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTgyLDYgKzgyLDcgQEAgV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFR0lPTlMgT04pCiBXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgT04pCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hBRE9XX0RPTSBPTikKIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFSRURfV09SS0VSUyBPTikK
K1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TUEVMTENIRUNLIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1RPVUNIX0VWRU5UUyBPTikK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WSUJSQVRJT04gT04pCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVklERU8gT04pCkBAIC0xNzgs
MyArMTc5LDcgQEAgSUYgKFdURl9VU0VfVElMRURfQkFDS0lOR19TVE9SRSkKICAgRklORF9QQUNL
QUdFKE9wZW5HTCBSRVFVSVJFRCkKIEVORElGKCkKIAorSUYgKEVOQUJMRV9TUEVMTENIRUNLKQor
ICAgICAgRklORF9QQUNLQUdFKEVuY2hhbnQgUkVRVUlSRUQpCisgICAgICBBRERfREVGSU5JVElP
TlMoLURFTkFCTEVfU1BFTExDSEVDSz0xKQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2Nt
YWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNt
YWtlCmluZGV4IDU5Nzg4ZTkuLjg2NjU1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJL
aXRGZWF0dXJlcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UK
QEAgLTk3LDYgKzk3LDcgQEAgTUFDUk8gKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgV0VCS0lU
X09QVElPTl9ERUZJTkUoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCAiVG9nZ2xlIFNjcmlwdGVkIFNw
ZWVjaCBBUEkgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9T
SEFET1dfRE9NICJUb2dnbGUgU2hhZG93IERPTSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09Q
VElPTl9ERUZJTkUoRU5BQkxFX1NIQVJFRF9XT1JLRVJTICJUb2dnbGUgU2hhcmVkV29ya2VycyBz
dXBwb3J0IiBPRkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NQRUxMQ0hFQ0sg
IlRvZ2dsZSBTcGVsbGNoZWNraW5nIHN1cHBvcnQgKHJlcXVpcmVzIEVuY2hhbnQpIiBPRkYpCiAg
ICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NRTF9EQVRBQkFTRSAiVG9nZ2xlIFNRTCBE
YXRhYmFzZSBTdXBwb3J0IiBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU1RZ
TEVfU0NPUEVEICJUb2dnbGUgPHN0eWxlIHNjb3BlZD4gc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJ
VF9PUFRJT05fREVGSU5FKEVOQUJMRV9TVkcgIlRvZ2dsZSBTVkcgc3VwcG9ydCIgT04pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZSBiL1NvdXJjZS9jbWFrZWNvbmZpZy5o
LmNtYWtlCmluZGV4IGM0NWI5MjAuLjY3NDhjYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZWNv
bmZpZy5oLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCkBAIC05Myw2ICs5
Myw3IEBACiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0hBRE9XX0RPTQogI2NtYWtlZGVmaW5lMDEg
RU5BQkxFX1NIQVJFRF9XT1JLRVJTCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU01PT1RIX1NDUk9M
TElORworI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NQRUxMQ0hFQ0sKICNjbWFrZWRlZmluZTAxIEVO
QUJMRV9TUUxfREFUQUJBU0UKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TVFlMRV9TQ09QRUQKICNj
bWFrZWRlZmluZTAxIEVOQUJMRV9TVkcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168421</attachid>
            <date>2012-10-12 08:20:47 -0700</date>
            <delta_ts>2012-10-14 23:59:39 -0700</delta_ts>
            <desc>fix undefined references for API</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>54433</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA5ODkwZDA0Li41YzQ4ODE2
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTItMTAtMTIgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYXNtdW5nLmNvbT4KKworICAgICAgICBbV0syXVtFRkxd
IEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVmaW5lIFNQRUxMQ0hFQ0sgbWFjcm8g
YW5kIGVuYWJsZSBpdCBmb3IgV0syLUVmbC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5k
RW5jaGFudC5jbWFrZTogQWRkZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwu
Y21ha2U6IEVuYWJsZSBzcGVsbGNoZWNraW5nIGZlYXR1cmUgZm9yIFdlYktpdDItRUZMLgorICAg
ICAgICAqIFNvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZTogRGVmaW5lIHRoZSBTUEVM
TENIRUNLIG1hY3JvLgorICAgICAgICBUaGUgc3BlbGxjaGVja2luZyBpbXBsZW1lbnRhdGlvbiBp
cyBiYXNlZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICAgICAgICBJdCBjYW4gYmUgdXNlZCBi
eSBvdGhlciBXZWJLaXQgcG9ydHMuCisgICAgICAgICogU291cmNlL2NtYWtlY29uZmlnLmguY21h
a2U6IEFkZCB0aGUgZmVhdHVyZS4KKwogMjAxMi0xMC0xMiAgQmFsYXpzIEtlbGVtZW4gIDxrYmFs
YXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzMDM4
OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAxMTI4Mjk1Li44MDUxNzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTItMTAtMTIgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ft
c3VuZy5jb20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYW1zdW5nLmNvbT4KKworICAgICAgICBbV0sy
XVtFRkxdIEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFr
ZToKKyAgICAgICAgQWRkIGVuY2hhbnQtcmVsYXRlZCBjb21waWxlciBmbGFnczogaGVhZGVyIHBh
dGhzIGFuZCB0aGUgbGlicmFyeSBmbGFnLgorCiAyMDEyLTEwLTEyICBZdXJ5IFNlbWlraGF0c2t5
ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgZGVs
ZXRlIHdhdGNoIGV4cHJlc3Npb24gZmFydGhlciBmcm9tIHRoZSBleHBhbmQgdHJpYW5nbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMmExN2M5Yi4uODc3MzdjZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTg0LDYgKzg0LDcgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgIHBsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAKICAgcGxhdGZvcm0vcG9zaXgv
RmlsZVN5c3RlbVBPU0lYLmNwcAogICBwbGF0Zm9ybS90ZXh0L2VmbC9UZXh0QnJlYWtJdGVyYXRv
ckludGVybmFsSUNVRWZsLmNwcAorICBwbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJF
bmNoYW50LmNwcAogKQogCiBJRiAoRU5BQkxFX0JBVFRFUllfU1RBVFVTKQpAQCAtMzI1LDMgKzMy
NiwxMiBAQCBJRiAoRU5BQkxFX1dFQl9BVURJTykKICAgSU5TVEFMTChGSUxFUyAke1dFQl9BVURJ
T19EQVRBfSBERVNUSU5BVElPTiAke1dFQl9BVURJT19ESVJ9KQogICBBRERfREVGSU5JVElPTlMo
LURVTklOU1RBTExFRF9BVURJT19SRVNPVVJDRVNfRElSPSIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9hdWRpby9yZXNvdXJjZXMiKQogRU5ESUYgKCkKKworSUYgKEVOQUJMRV9TUEVMTENIRUNLKQor
ICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAke0VO
Q0hBTlRfSU5DTFVERV9ESVJTfQorICAgICkKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0xJQlJB
UklFUworICAgICAgICAke0VOQ0hBTlRfTElCUkFSSUVTfQorICAgICkKK0VORElGKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCA1OTljOGE0Li42NzkzYzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA5IEBACisy
MDEyLTEwLTEyICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29t
PiwgTWljaGFsIFJvaiA8bS5yb2pAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgSW1wbGVtZW50YXRp
b24gb2Ygc3BlbGxjaGVja2luZyBmZWF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc3BlbGxpbmcgaW1wbGVtZW50YXRpb24gZm9yIFdlYktp
dDItRUZMIHRoYXQgaXMgYmFzZWQgb24gRW5jaGFudCBsaWJyYXJ5LgorCisgICAgICAgIEFkZGl0
aW9uYWxseSB0aGUgcGF0Y2ggcHJvdmlkZXMgQVBJIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBX
ZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uCisgICAgICAgIGFzIEVuY2hhbnQgbGli
cmFyeSBkb2Vzbid0IGVuc3VyZSBncmFtbWFyIGNoZWNraW5nLgorICAgICAgICBBcHBsaWNhdGlv
biBpcyBhYmxlIHRvIG92ZXJ3cml0ZSBpdCAoYm90aCBncmFtbWFyIGFuZCBzcGVsbCBjaGVja2lu
ZykgYnkgZGVmaW5pbmcKKyAgICAgICAgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGlu
ZyBhcHByb3ByaWF0ZSBjYWxsYmFjayBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVm
bC5jbWFrZToKKyAgICAgICAgQWRkIGVuY2hhbnQtcmVsYXRlZCBjb21waWxlciBmbGFnczogaGVh
ZGVyIHBhdGhzIGFuZCB0aGUgbGlicmFyeSBmbGFnLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvRVdlYktpdDIuaDoKKyAgICAgICAgQWRkIGV3a190ZXh0X2NoZWNrZXIuaCB0byB0aGUg
bWFpbiBXZWJLaXQyLUVGTCdzIGhlYWRlciB0byBiZSBhdmFpbGFibGUgZm9yIGFwcGxpY2F0aW9u
cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcDog
QWRkZWQuCisgICAgICAgIEltcGxlbWVudCBjYWxsYmFja3MgZnVuY3Rpb25zIG9mIFdLVGV4dENo
ZWNrZXIuCisKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6c2V0Q29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6dW5pcXVlU3BlbGxEb2N1bWVu
dFRhZyk6CisgICAgICAgIChXZWJLaXQ6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcpOgorICAg
ICAgICAoV2ViS2l0OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0Ojpn
dWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OmxlYXJuV29yZCk6CisgICAgICAgIChX
ZWJLaXQ6Omlnbm9yZVdvcmQpOgorICAgICAgICBUaG9zZSBtZXRob2RzIGFyZSBkaXJlY3RseSBn
aXZlbiBhcyBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIFdLVGV4dENoZWNrZXIncyBjbGllbnQuCisg
ICAgICAgIFRoZXkgY2hvb3NlIGJldHdlZW4gV2ViS2l0J3Mgc3BlbGxpbmcgaW1wbGVtZW50YXRp
b24gYW5kIGNsaWVudCdzIG9uZXMuCisKKyAgICAgICAgKFdlYktpdDo6YXZhaWxhYmxlU3BlbGxD
aGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChXZWJLaXQ6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdM
YW5ndWFnZXMpOgorICAgICAgICAoV2ViS2l0Ojpsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KToKKyAgICAgICAgVGhleSBhcmUgdXNlZCBieSBld2tfc2V0dGluZ3MuY3BwIGZpbGUgYW5kIGFs
bG93IHRvIGRvIG5vdAorICAgICAgICBleHBvc2UgJ3RleHRDaGVja2VyRW5jaGFudCcuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oOiBBZGRlZC4KKyAg
ICAgICAgRGVmaW5lIHRoZSBmdW5jdGlvbnMgd2hpY2ggY2hvb3NlIGJldHdlZW4gY2xpZW50J3Mg
aW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgc3BlbGxpbmcgYW5kIHRoZSBXZWJLaXQgb25lLgor
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmNwcDoKKyAgICAgICAgKF9Fd2tfQ29udGV4dDo6X0V3a19Db250ZXh0KToKKyAgICAgICAg
QXR0YWNoIHRoZSBzcGVsbGNoZWNrZXIgZmVhdHVyZSBmb3IgdGhlIGNvbnRleHQuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcDogQWRkZWQuCisgICAg
ICAgIChld2tfdGV4dF9jaGVja2VyX2NhbGxiYWNrc19nZXQpOgorICAgICAgICBHZXQgdGhlIGNs
aWVudCdzIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a190ZXh0X2NoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSBBUEkgdG8gc2V0IHRo
ZSBjbGllbnQncyBvd24gc3BlbGxpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAg
IChfRXdrX1RleHRfQ2hlY2tlcik6CisgICAgICAgIERlZmluZSBzdHJ1Y3Qgd2l0aCBjbGllbnQn
cyBjYWxsYmFja3MgcmVzcG9uaXNibGUgZm9yIHNwZWxsaW5nLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcDoKKyAgICAgICAgKG9uQ29udGludW91c1NwZWxs
Q2hlY2tpbmdJZGxlcik6CisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBpcyBub3RpZmllZCBhYm91
dCBzcGVsbGluZyBzZXR0aW5nIGNoYW5nZS4KKyAgICAgICAgSXQgbWF5IGJlIGNoYW5nZWQgdGhy
b3VnaCBjb250ZXh0IG1lbnUgb3B0aW9uIG9uIGlkbGVyCisgICAgICAgIHRvIGRvIG5vdCBibG9j
ayBXZWJLaXQuCisKKyAgICAgICAgKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXRVcGRhdGUpOgor
ICAgICAgICBUaGUgZGljdGlvbmFyaWVzIGFyZSByZXF1ZXN0ZWQgb24gaWRsZXIgdG8gZG8gbm90
IGJsb2NrIFdlYktpdC4KKworICAgICAgICAoc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldCk6Cisg
ICAgICAgIFNldCB0aGUgbGFuZ3VhZ2VzLgorCisgICAgICAgIChld2tfc2V0dGluZ3NfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KToKKyAgICAgICAgU2V0IHRoZSBjYWxs
YmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0aGUgY2xpZW50IHdoZW4gdGhlIHNwZWxsaW5n
CisgICAgICAgIHNldHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0LgorCisgICAgICAgIChld2tf
c2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCk6CisgICAgICAg
IChld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCk6Cisg
ICAgICAgIEFQSSB0byBzZXQvZ2V0IHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nLgorCisg
ICAgICAgIChld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCk6CisgICAg
ICAgIChld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfc2V0KToK
KyAgICAgICAgKGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9n
ZXQpOgorICAgICAgICBBUEkgdG8gZ2V0L3NldCBsYW5ndWFnZXMgdG8gdXNlIGJ5IFdlYktpdCBp
bXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBFbmNoYW50IGxpYnJhcnkuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldENv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRU
YWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0
aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJp
bmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcp
OiBSZW1vdmUgV2ViQ29yZSBuYW1hc3BhY2UgYXMgaXQncyBhbHJlYWR5IGRlZmluZWQgZm9yIHRo
ZSB3aG9sZSBmaWxlLgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlz
U2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJ
SXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5n
VUlXaXRoTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6
OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjppZ25vcmVXb3JkKToK
KyAgICAgICAgVGhvc2UgY2FsbCBXS1RleHRDaGVja2VyIGNsaWVudCBtZXRob2RzLgorCiAyMDEy
LTEwLTEyICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTMxMTYwLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZQppbmRleCBhMTJmNDRhLi5lOGJhNTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpA
QCAtNDYsNiArNDYsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nl
c3MvQVBJL2VmbC9OZXR3b3JrSW5mb1Byb3ZpZGVyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L1BhZ2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1ZpYnJhdGlvblByb3Zp
ZGVyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKICAgICBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKICAgICBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTY0LDYgKzY1LDcgQEAgTElTVChBUFBFTkQgV2Vi
S2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5j
cHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfcmVzb3VyY2UuY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0
X2NoZWNrZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXF1ZXN0LmNwcAog
ICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5jcHAKQEAgLTEzNSw2ICsxMzcsNyBAQCBM
SVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vZWZsIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlybyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9zb3VwIgorICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3N2Zy9ncmFwaGljcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIKICAgICAiJHtX
RUJLSVQyX0RJUn0vU2hhcmVkL3NvdXAiCkBAIC0yNDAsNiArMjQzLDcgQEAgU0VUIChFV2ViS2l0
Ml9IRUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0Vf
RElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcmVzb3VyY2UuaCIKICAgICAiJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oIgorICAgICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hl
Y2tlci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3RvdWNoLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdXJsX3JlcXVlc3QuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJD
RV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuaCIKQEAgLTM2NywzICsz
NzEsMTIgQEAgSUYgKEVOQUJMRV9JTlNQRUNUT1IpCiAgICAgICAgICAgICAgICAgICAgICAgIFBB
VFRFUk4gIiouZ2lmIgogICAgICAgICAgICAgICAgICAgICAgICBQQVRURVJOICIqLnBuZyIpCiBF
TkRJRiAoKQorCitJRiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisgICAgTElTVChBUFBFTkQgV2ViS2l0
Ml9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICR7RU5DSEFOVF9JTkNMVURFX0RJUlN9Cisg
ICAgKQorICAgIExJU1QoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCisgICAgICAgICR7RU5DSEFO
VF9MSUJSQVJJRVN9CisgICAgKQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0VXZWJLaXQyLmgKaW5kZXggMDBkZDgxMS4uOWFhNzg2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC00Myw2ICs0Myw3IEBACiAjaW5j
bHVkZSAiZXdrX3BvcHVwX21lbnVfaXRlbS5oIgogI2luY2x1ZGUgImV3a19yZXNvdXJjZS5oIgog
I2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXIuaCIK
ICNpbmNsdWRlICJld2tfdG91Y2guaCIKICNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3QuaCIKICNp
bmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMmZmMzljNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApAQCAtMCwwICsxLDEz
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRU
ZXh0Q2hlY2tlci5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLTXV0YWJs
ZUFycmF5LmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFaW5hLmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBPd25QdHI8V2ViQ29yZTo6VGV4dENoZWNr
ZXJFbmNoYW50PiB0ZXh0Q2hlY2tlckVuY2hhbnQgPSBXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hh
bnQ6OmNyZWF0ZSgpOworCitzdGF0aWMgRXdrX1RleHRfQ2hlY2tlciogZXdrVGV4dENoZWNrZXJD
YWxsYmFja3MgPSBld2tfdGV4dF9jaGVja2VyX2NhbGxiYWNrc19nZXQoKTsKKworYm9vbCBpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4g
ZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKK30K
Kwordm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBj
b25zdCB2b2lkKikKK3sKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX3NldChlbmFibGVkKTsKK30KKwordWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVu
dFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVj
a2VyQ2FsbGJhY2tzLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCkKKyAgICAgICAgcmV0
dXJuIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dl
dCh0b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2NF90IHRhZywgY29uc3Qgdm9pZCopCit7
CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRf
dGFnX2Nsb3NlKQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+dW5pcXVlX3NwZWxs
X2RvY3VtZW50X3RhZ19jbG9zZSh0YWcpOworfQorCit2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9j
YXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKikKK3sKKyAgICBp
ZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPnN0cmluZ19zcGVsbGluZ19jaGVjaykKKyAgICAg
ICAgZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPnN0cmluZ19zcGVsbGluZ19jaGVjayh0YWcsIHRv
SW1wbCh0ZXh0KS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwg
bWlzc3BlbGxpbmdMZW5ndGgpOworICAgIGVsc2UKKyAgICAgICAgdGV4dENoZWNrZXJFbmNoYW50
LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxs
aW5nTG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK1dLQXJyYXlSZWYgZ3Vlc3Nl
c0ZvcldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sK
KyAgICBXS011dGFibGVBcnJheVJlZiBzdWdnZXN0aW9uc0ZvcldvcmQgPSBXS011dGFibGVBcnJh
eUNyZWF0ZSgpOworCisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53b3JkX2d1ZXNz
ZXNfZ2V0KSB7CisgICAgICAgIEVpbmFfTGlzdCogbGlzdCA9IGV3a1RleHRDaGVja2VyQ2FsbGJh
Y2tzLT53b3JkX2d1ZXNzZXNfZ2V0KHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgdm9pZCogaXRlbTsKKworICAgICAgICBFSU5BX0xJU1RfRlJFRShs
aXN0LCBpdGVtKSB7CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2Vz
dGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxj
aGFyKj4oaXRlbSkpKTsKKyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25z
Rm9yV29yZCwgc3VnZ2VzdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBmcmVlKGl0ZW0pOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IHRl
eHRDaGVja2VyRW5jaGFudC0+Z2V0R3Vlc3Nlc0ZvcldvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmco
KSk7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkd1ZXNzZXMgPSBndWVzc2VzLnNpemUoKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkd1ZXNzZXM7ICsraSkgeworICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ3Vlc3Nlc1tpXS51dGY4KCkuZGF0YSgpKSk7Cisg
ICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rp
b24uZ2V0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN1Z2dlc3Rpb25zRm9y
V29yZDsKK30KKwordm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3Jk
LCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPndvcmRf
bGVhcm4pCisgICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53b3JkX2xlYXJuKHRhZywg
dG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBlbHNlCisgICAgICAg
IHRleHRDaGVja2VyRW5jaGFudC0+bGVhcm5Xb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOwor
fQorCit2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25z
dCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPndvcmRfaWdub3Jl
KQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+d29yZF9pZ25vcmUodGFnLCB0b0lt
cGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgdGV4
dENoZWNrZXJFbmNoYW50LT5pZ25vcmVXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworfQor
CitWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKK3sKKyAg
ICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50LT5hdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzKCk7Cit9CisKK3ZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKQoreworICAgIHRleHRDaGVja2VyRW5jaGFudC0+dXBkYXRl
U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhsYW5ndWFnZXMpOworfQorCitWZWN0b3I8U3RyaW5nPiBs
b2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKK3sKKyAgICByZXR1cm4gdGV4dENoZWNrZXJF
bmNoYW50LT5sb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTIzMjQ0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaApAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAq
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJLaXRUZXh0Q2hlY2tlcl9oCisj
ZGVmaW5lIFdlYktpdFRleHRDaGVja2VyX2gKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisj
aW5jbHVkZSAiVGV4dENoZWNrZXJFbmNoYW50LmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2lu
Y2x1ZGUgIldLUGFnZS5oIgorI2luY2x1ZGUgIldLU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCisvLyBUaGUgZnVuY3Rpb25zIG1haW5seSBjaG9vc2UgYmV0d2VlbiBjbGllbnQncyBp
bXBsZW1lbnRhdGlvbiBvZiBzcGVsbGluZyBhbmQgdGhlIFdlYktpdCBvbmUuCisKKy8vIENhbGxi
YWNrcyByZXF1aXJlZCBieSBXS1RleHRDaGVja2VyLgorYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5m
byk7CisKK3VpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVp
bnQ2NF90IHRhZywgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK3ZvaWQgY2hlY2tTcGVsbGlu
Z09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworV0tBcnJheVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBsZWFybldvcmQodWlu
dDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3Zv
aWQgaWdub3JlV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOworCisvLyBFbmNoYW50J3MgaGVscGVyLgorVmVjdG9yPFN0cmluZz4gYXZh
aWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwordm9pZCB1cGRhdGVTcGVsbENoZWNraW5n
TGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpOworVmVjdG9yPFN0cmlu
Zz4gbG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorI2VuZGlmIC8vIFdlYktpdFRleHRD
aGVja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmNwcAppbmRleCAwMmVkZGI0Li43NDcxMWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC00MCw2ICs0MCwxMCBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisj
aW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2
YXRlLmgiCisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwpAQCAtMTE0LDYgKzExOCwxMyBAQCBzdHJ1Y3QgX0V3a19Db250ZXh0IHsKICAg
ICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9hdHRhY2godGhpcyk7CiAg
ICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2godGhpcyk7CiAgICAgICAg
IGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0dGFjaCh0aGlzKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICAgICAgZXdrX3RleHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCk7CisgICAg
ICAgIGlmIChld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dl
dCgpKSB7CisgICAgICAgICAgICAvLyBMb2FkIHRoZSBkZWZhdWx0IGxhbmd1YWdlLgorICAgICAg
ICAgICAgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19lbmFibGVkX3NldCgw
KTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfQogCiAgICAgfl9Fd2tfQ29udGV4dCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcAppbmRl
eCBhOWY2YjA5Li5mOGY0N2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKQEAgLTI5LDkgKzI5LDQ1IEBACiAjaW5jbHVkZSAiZXdr
X3NldHRpbmdzX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJLaXQyL1dLUHJlZmVyZW5jZXMuaD4K
ICNpbmNsdWRlIDxXZWJLaXQyL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaWYgRU5BQkxFKFNQ
RUxMQ0hFQ0spCisjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgIldlYktpdFRl
eHRDaGVja2VyLmgiCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CiAKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKK3N0YXRpYyBzdHJ1Y3QgeworICAg
IGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgOiAxOworICAgIFZlY3RvcjxT
dHJpbmc+IHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXM7CisgICAgRXdrX1NldHRpbmdzX0NvbnRpbnVv
dXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIG9uQ29udGludW91c1NwZWxsQ2hlY2tpbmc7Cit9
IGV3a1RleHRDaGVja2VyU2V0dGluZ3MgPSB7IGZhbHNlLCBWZWN0b3I8U3RyaW5nPigpLCAwIH07
CisKK3N0YXRpYyBFaW5hX0Jvb2wgb25Db250aW51b3VzU3BlbGxDaGVja2luZ0lkbGVyKHZvaWQq
KQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLm9uQ29udGludW91c1NwZWxsQ2hl
Y2tpbmcpCisgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxD
aGVja2luZyhld2tUZXh0Q2hlY2tlclNldHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKTsKKworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisKK3N0YXRp
YyBFaW5hX0Jvb2wgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldFVwZGF0ZSh2b2lkKikKK3sKKyAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgdG8gZGVsZWdhdGUgY2FsbGluZyBvZiB0aGlzIG1ldGhvZCBp
biBXZWJQcm9jZXNzIHRvIGRvIG5vdCBkZWxheS9ibG9jayBVSVByb2Nlc3MuCisgICAgdXBkYXRl
U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMpOworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisKK3N0
YXRpYyB2b2lkIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQoY29uc3QgVmVjdG9yPFN0cmluZz4m
IG5ld0xhbmd1YWdlcykKK3sKKyAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMgPSBuZXdMYW5ndWFnZXM7CisgICAgZWNvcmVfaWRsZXJfYWRkKHNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXNTZXRVcGRhdGUsIDApOworfQorI2VuZGlmIC8vIEVOQUJMRShTUEVMTENI
RUNLKQorCiBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2Z1bGxzY3JlZW5fZW5hYmxlZF9zZXQoRXdr
X1NldHRpbmdzKiBzZXR0aW5ncywgRWluYV9Cb29sIGVuYWJsZSkKIHsKICNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCkBAIC0xNDgsMyArMTg0LDc1IEBAIEVpbmFfQm9vbCBld2tfc2V0dGluZ3Nf
ZG5zX3ByZWZldGNoaW5nX2VuYWJsZWRfZ2V0KGNvbnN0IEV3a19TZXR0aW5ncyogc2V0dGluZ3Mp
CiAKICAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldEROU1ByZWZldGNoaW5nRW5hYmxlZChzZXR0
aW5ncy0+cHJlZmVyZW5jZXMuZ2V0KCkpOwogfQorCit2b2lkIGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQoRXdrX1NldHRpbmdzX0NvbnRpbnVvdXNf
U3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIGNhbGxiYWNrKQoreworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxDaGVja2lu
ZyA9IGNhbGxiYWNrOworI2VuZGlmCit9CisKK0VpbmFfQm9vbCBld2tfc2V0dGluZ3NfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hF
Q0spCisgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQ7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2
b2lkIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KEVp
bmFfQm9vbCBlbmFibGUpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgZW5hYmxlID0g
ISFlbmFibGU7CisgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQgIT0gZW5hYmxlKSB7CisgICAgICAgIGV3a1RleHRDaGVja2VyU2V0
dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGU7CisKKyAgICAg
ICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdl
ZChlbmFibGUpOworCisgICAgICAgIC8vIFNldHMgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2VyIGRp
ZG4ndCBzcGVjaWZ5IGFueS4KKyAgICAgICAgaWYgKGVuYWJsZSAmJiBsb2FkZWRTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgc3BlbGxDaGVja2luZ0xhbmd1
YWdlc1NldChWZWN0b3I8U3RyaW5nPigpKTsKKworICAgICAgICBpZiAoZXdrVGV4dENoZWNrZXJT
ZXR0aW5ncy5vbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nKQorICAgICAgICAgICAgZWNvcmVfaWRs
ZXJfYWRkKG9uQ29udGludW91c1NwZWxsQ2hlY2tpbmdJZGxlciwgMCk7CisgICAgfQorI2VuZGlm
Cit9CisKK0VpbmFfTGlzdCogZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19n
ZXQoKQoreworICAgIEVpbmFfTGlzdCogbGlzdE9mbGFuZ3VhZ2VzID0gMDsKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXMgPSBhdmFpbGFibGVTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKCk7CisgICAgc2l6ZV90IG51bWJlck9mTGFudWFnZXMgPSBsYW5n
dWFnZXMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkxhbnVh
Z2VzOyArK2kpCisgICAgICAgIGxpc3RPZmxhbmd1YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQobGlz
dE9mbGFuZ3VhZ2VzLCBlaW5hX3N0cmluZ3NoYXJlX2FkZChsYW5ndWFnZXNbaV0udXRmOCgpLmRh
dGEoKSkpOworI2VuZGlmCisgICAgcmV0dXJuIGxpc3RPZmxhbmd1YWdlczsKK30KKwordm9pZCBl
d2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfc2V0KGNvbnN0IGNo
YXIqIGxhbmd1YWdlcykKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3Ry
aW5nPiBuZXdMYW5ndWFnZXM7CisgICAgU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZXMpLnNwbGl0
KCcsJywgbmV3TGFuZ3VhZ2VzKTsKKworICAgIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQobmV3
TGFuZ3VhZ2VzKTsKKyNlbmRpZgorfQorCitFaW5hX0xpc3QqIGV3a19zZXR0aW5nc19zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9nZXQoKQoreworICAgIEVpbmFfTGlzdCogbGlzdE9m
bGFuZ3VhZ2VzID0gMDsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5n
PiBsYW5ndWFnZXMgPSBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7CisgICAgc2l6ZV90
IG51bWJlck9mTGFudWFnZXMgPSBsYW5ndWFnZXMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkxhbnVhZ2VzOyArK2kpCisgICAgICAgIGxpc3RPZmxhbmd1YWdl
cyA9IGVpbmFfbGlzdF9hcHBlbmQobGlzdE9mbGFuZ3VhZ2VzLCBlaW5hX3N0cmluZ3NoYXJlX2Fk
ZChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOworCisjZW5kaWYKKyAgICByZXR1cm4gbGlz
dE9mbGFuZ3VhZ2VzOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3NldHRpbmdzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfc2V0dGluZ3MuaAppbmRleCA4YjE3ZDFjLi4xZjg5NjdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuaApAQCAtNDQsNiArNDQsMTUgQEAg
ZXh0ZXJuICJDIiB7CiB0eXBlZGVmIHN0cnVjdCBfRXdrX1NldHRpbmdzIEV3a19TZXR0aW5nczsK
IAogLyoqCisgKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24g
dXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuCisgKiB0aGUgY29udGludW91cyBzcGVsbCBj
aGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBAcGFyYW0gZW5h
YmxlIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQg
b3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3
a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZV9DYikoRWluYV9Cb29s
IGVuYWJsZSk7CisKKworLyoqCiAgKiBFbmFibGVzL2Rpc2FibGVzIHRoZSBKYXZhc2NyaXB0IEZ1
bGxzY3JlZW4gQVBJLiBUaGUgSmF2YXNjcmlwdCBBUEkgYWxsb3dzCiAgKiB0byByZXF1ZXN0IGZ1
bGwgc2NyZWVuIG1vZGUsIGZvciBtb3JlIGluZm9ybWF0aW9uIHNlZToKICAqIGh0dHA6Ly9kdmNz
LnczLm9yZy9oZy9mdWxsc2NyZWVuL3Jhdy1maWxlL3RpcC9PdmVydmlldy5odG1sCkBAIC0yMTks
NiArMjI4LDc2IEBAIEVBUEkgRWluYV9Cb29sIGV3a19zZXR0aW5nc19kbnNfcHJlZmV0Y2hpbmdf
ZW5hYmxlZF9zZXQoRXdrX1NldHRpbmdzICpzZXR0aW5ncywKICAqLwogRUFQSSBFaW5hX0Jvb2wg
ZXdrX3NldHRpbmdzX2Ruc19wcmVmZXRjaGluZ19lbmFibGVkX2dldChjb25zdCBFd2tfU2V0dGlu
Z3MgKnNldHRpbmdzKTsKIAorLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0
byBub3RpZnkgdGhlIGNsaWVudCB3aGVuCisgKiB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2lu
ZyBzZXR0aW5nIHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBTcGVjaWZ5aW5nIG9mIHRo
aXMgY2FsbGJhY2sgaXMgbmVlZGVkIGlmIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byByZWNlaXZl
IG5vdGlmaWNhdGlvbnMKKyAqIG9uY2UgV2ViS2l0IGNoYW5nZXMgdGhpcyBzZXR0aW5nLgorICog
SWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBpbnRlcmVzdGVkLCB0aGlzIGNhbGxiYWNrIGlzIG5v
dCBzZXQuCisgKiBDaGFuZ2luZyBvZiB0aGlzIHNldHRpbmcgYXQgdGhlIFdlYktpdCBsZXZlbCBj
YW4gYmUgbWFkZSBhcyBhIHJlc3VsdCBvZiBtb2RpZnlpbmcKKyAqIG9wdGlvbnMgaW4gYSBDb250
ZXh0IE1lbnUgYnkgYSB1c2VyLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayBmdW5j
dGlvbiB0byBzZXQgb3IgQGMgTlVMTCB0byBpbnZhbGlkYXRlIHRoZSBwcmV2aW91cyBvbmUKKyAq
LworRUFQSSB2b2lkIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5n
ZV9jYl9zZXQoRXdrX1NldHRpbmdzX0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0Ni
IGNiKTsKKworLyoqCisgKiBRdWVyaWVzIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMg
ZW5hYmxlZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxs
IGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisg
Ki8KK0VBUEkgRWluYV9Cb29sIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2VuYWJsZWRfZ2V0KHZvaWQpOworCisvKioKKyAqIEVuYWJsZXMvZGlzYWJsZXMgY29udGludW91
cyBzcGVsbCBjaGVja2luZy4KKyAqCisgKiBBZGRpdGlvbmFsbHksIHRoaXMgZnVuY3Rpb24gY2Fs
bHMgYSBjYWxsYmFjayBmdW5jdGlvbiAoaWYgZGVmaW5lZCkgdG8gbm90aWZ5CisgKiB0aGUgY2xp
ZW50IGFib3V0IHRoZSBjaGFuZ2Ugb2YgdGhlIHNldHRpbmcuCisgKiBUaGlzIGZlYXR1cmUgaXMg
ZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBAc2VlIGV3a19zZXR0aW5nc19jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQKKyAqCisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJ
TkFfVFJVRSB0byBlbmFibGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBvciBAYyBFSU5BX0ZB
TFNFIHRvIGRpc2FibGUKKyAqLworRUFQSSB2b2lkIGV3a19zZXR0aW5nc19jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KEVpbmFfQm9vbCBlbmFibGUpOworCisvKioKKyAqIEdl
dHMgdGhlIHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1
YWdlcyB0byB1c2UuCisgKgorICogQHNlZSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzX2VuYWJsZWRfc2V0CisgKgorICogQHJldHVybiB0aGUgbGlzdCB3aXRoIGF2YWlsYWJs
ZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMsIG9yIEBjIE5VTEwgb24gZmFpbHVyZQorICogICAg
ICAgICB0aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1
c2UgZWluYV9zdHJpbmdzaGFyZV9kZWwoKQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX3NldHRp
bmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQodm9pZCk7CisKKy8qKgorICogU2V0cyBA
YSBsYW5ndWFnZXMgYXMgdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIHVzZSBieSBkZWZhdWx0IFdl
YktpdAorICogaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2VyIGZlYXR1cmUgd2l0aCBFbmNo
YW50IGxpYnJhcnkgc3VwcG9ydC4KKyAqCisgKiBJZiBAbGFuZ3VhZ2VzIGlzIEBjIE5VTEwsIHRo
ZSBkZWZhdWx0IGxhbmd1YWdlIGlzIHVzZWQuCisgKiBJZiB0aGUgZGVmYXVsdCBsYW5ndWFnZSBj
YW4gbm90IGJlIGRldGVybWluZWQgdGhlbiBhbnkgYXZhaWxhYmxlIGRpY3Rpb25hcnkgd2lsbCBi
ZSB1c2VkLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gaW52YWxpZGF0ZXMgdGhlIHByZXZp
b3VzbHkgc2V0IGxhbmd1YWdlcy4KKyAqICAgICAgIFRoZSBkaWN0aW9uYXJpZXMgYXJlIHJlcXVl
c3RlZCBhc3luY2hyb25vdXNseS4KKyAqCisgKiBAcGFyYW0gbGFuZ3VhZ2VzIGEgbGlzdCBvZiBj
b21tYSAoJywnKSBzZXBhcmF0ZWQgbGFuZ3VhZ2UgY29kZXMKKyAqICAgICAgICBvZiB0aGUgZm9y
bSAnZW5fVVMnLCBpZSwgbGFuZ3VhZ2VfVkFSSUFOVCwgbWF5IGJlIEBjIE5VTEwuCisgKi8KK0VB
UEkgdm9pZCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfc2V0
KGNvbnN0IGNoYXIgKmxhbmd1YWdlcyk7CisKKy8qKgorICogR2V0cyB0aGUgdGhlIGxpc3Qgb2Yg
dGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyBpbiB1c2UuCisgKgorICogQHNlZSBld2tfc2V0
dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldAorICogQHNlZSBFd2tfU2V0dGluZ3Nf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfc2V0CisgKgorICogQHJldHVybiB0aGUg
bGlzdCB3aXRoIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLAorICogICAgICAg
ICB0aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1c2Ug
ZWluYV9zdHJpbmdzaGFyZV9kZWwoKQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX3NldHRpbmdz
X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19lbmFibGVkX2dldCh2b2lkKTsKKwogI2lmZGVmIF9f
Y3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uN2I1ODQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTIzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXIu
aCIKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorI2luY2x1ZGUgIldLVGV4dENoZWNrZXIuaCIK
KyNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNr
ZXJfcHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisvLyBJbml0aWFsaXpl
cyB0aGUgY2xpZW50J3MgZnVuY3Rpb25zIHRvIEBjIDAgdG8gYmUgc3VyZSB0aGF0IHRoZXkgYXJl
IG5vdCBkZWZpbmVkLgorc3RhdGljIEV3a19UZXh0X0NoZWNrZXIgZXdrVGV4dENoZWNrZXJDYWxs
YmFja3MgPSB7CisgICAgMCwgLy8gdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQKKyAgICAw
LCAvLyB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlCisgICAgMCwgLy8gc3RyaW5nX3Nw
ZWxsaW5nX2NoZWNrCisgICAgMCwgLy8gd29yZF9ndWVzc2VzX2dldAorICAgIDAsIC8vIHdvcmRf
bGVhcm4KKyAgICAwIC8vIHdvcmRfaWdub3JlCit9OworCisjZGVmaW5lIEVXS19URVhUX0NIRUNL
RVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwgTkFNRSkgIFwKK3ZvaWQgZXdrX3RleHRfY2hlY2tl
cl8jI05BTUUjI19jYl9zZXQoVFlQRV9OQU1FIGNiKSAgICAgXAoreyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZXdrVGV4dENoZWNr
ZXJDYWxsYmFja3MuTkFNRSA9IGNiOyAgICAgICAgICAgICAgICAgIFwKK30KKworLyoqCisgKiBB
dHRhY2hlcyBzcGVsbGNoZWNrZXIgZmVhdHVyZS4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBU
aGUgZGVmYXVsdCBzcGVsbGNoZWNrZXIgZmVhdHVyZSBpcyBiYXNlZCBvbiBFbmNoYW50IGxpYnJh
cnkuCisgKiBDbGllbnQgbWF5IHVzZSBvd24gaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2Vy
IHByZXZpb3VzbHkgc2V0CisgKiB0aHJvdWdoIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMuCisgKi8K
K3ZvaWQgZXdrX3RleHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCkKK3sKKyAgICBzdGF0aWMgYm9v
bCBkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQgPSBmYWxzZTsKKyAgICBpZiAoZGlkSW5p
dGlhbGl6ZVRleHRDaGVja2VyQ2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBXS1RleHRD
aGVja2VyQ2xpZW50IHRleHRDaGVja2VyQ2xpZW50ID0geworICAgICAgICBrV0tUZXh0Q2hlY2tl
ckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICAwLCAvLyBjbGllbnRJbmZvCisgICAgICAg
IDAsIC8vIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkCisgICAgICAgIGlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICBzZXRDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQsCisgICAgICAgIDAsIC8vIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZAorICAg
ICAgICAwLCAvLyBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkCisgICAgICAgIHVuaXF1ZVNwZWxs
RG9jdW1lbnRUYWcsCisgICAgICAgIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcsCisgICAgICAg
IGNoZWNrU3BlbGxpbmdPZlN0cmluZywKKyAgICAgICAgMCwgLy8gY2hlY2tHcmFtbWFyT2ZTdHJp
bmcKKyAgICAgICAgMCwgLy8gc3BlbGxpbmdVSUlzU2hvd2luZworICAgICAgICAwLCAvLyB0b2dn
bGVTcGVsbGluZ1VJSXNTaG93aW5nCisgICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQKKyAgICAgICAgMCwgLy8gdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFy
U3RyaW5nCisgICAgICAgIGd1ZXNzZXNGb3JXb3JkLAorICAgICAgICBsZWFybldvcmQsCisgICAg
ICAgIGlnbm9yZVdvcmQKKyAgICB9OworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRleHRD
aGVja2VyQ2xpZW50KTsKKworICAgIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IHRy
dWU7Cit9CisKKy8qCisgKiBHZXRzIHRoZSBjbGllbnQncyBjYWxsYmFja3MuCisgKgorICogQGlu
dGVybmFsCisgKgorICogVGhlIGNsaWVudCd0IGNhbGxiYWNrcyBhcmUgbm90IGRlZmluZWQgYnkg
ZGVmYXVsdC4KKyAqIElmIHRoZSBjbGllbnQgaGFzbid0IHNldCB0aGUgY2FsbGJhY2ssIHRoZSBj
b3JyZXNwb25kaW5nIGNhbGxiYWNrIHdpbGwKKyAqIHJldHVybiBAYyAwIGFuZCB0aGUgZGVmYXVs
dCBXZWJLaXQgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGZvciB0aGlzCisgKiBmdW5jdGlv
bmFsaXR5LgorICoKKyAqIEByZXR1cm4gdGhlIHN0cnVjdCB3aXRoIHRoZSBjbGllbnQncyBjYWxs
YmFja3MuCisgKi8KK0V3a19UZXh0X0NoZWNrZXIqIGV3a190ZXh0X2NoZWNrZXJfY2FsbGJhY2tz
X2dldCgpCit7CisgICAgcmV0dXJuICZld2tUZXh0Q2hlY2tlckNhbGxiYWNrczsKK30KKworI2Vs
c2UKKworLy8gRGVmaW5lcyBhbiBlbXB0eSBBUEkgdG8gZG8gbm90IGJyZWFrIGJ1aWxkLgorI2Rl
ZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBFX05BTUUsIE5BTUUpICBcCit2
b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSkgICAgICAgIFwK
K3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorfQorI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorCitFV0tfVEVYVF9DSEVDS0VSX0NB
TExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0
X0NiLCB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCkKK0VXS19URVhUX0NIRUNLRVJfQ0FM
TEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19DbG9z
ZV9DYiwgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSkKK0VXS19URVhUX0NIRUNLRVJf
Q0FMTEJBQ0tfU0VUKEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrX0NiLCBz
dHJpbmdfc3BlbGxpbmdfY2hlY2spCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tf
VGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXRfQ2IsIHdvcmRfZ3Vlc3Nlc19nZXQpCitFV0tf
VEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm5fQ2Is
IHdvcmRfbGVhcm4pCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVj
a2VyX1dvcmRfSWdub3JlX0NiLCB3b3JkX2lnbm9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iMzk0OTk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5oCkBAIC0wLDAgKzEsMTU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSBld2tfdGV4dF9jaGVja2VyLmgKKyAqIEBicmll
ZiBQcm92aWRlcyBBUEkgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNr
ZXIgaW1wbGVtZW50YXRpb24uCisgKgorICogVGhlcmUgaXMgb25lIHNwZWxsY2hlY2tlciBvYmpl
Y3QgcGVyIGFwcGxpY2F0aW9uIGFuZCBpdCdzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKiBJdCBh
bGxvd3MgdG8gY2hlY2sgc3BlbGxpbmcgaW4gdGhlIGVkaXRhYmxlIGFyZWFzLgorICogSWYgYXBw
bGljYXRpb24gd2FudHMgdG8gZW5hYmxlIHRoZSBmZWF0dXJlLCBBUEkgZnJvbSBAYSBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmcuaAorICogc2hvdWxkIGJlIHVzZWQuCisgKgorICogVGhlIGRlZmF1
bHQgV2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgRW5j
aGFudCBsaWJyYXJ5LgorICogSXQgZG9lc24ndCBlbnN1cmUgZ3JhbW1hciBjaGVja2luZy4gQXBw
bGljYXRpb24gaXMgYWJsZSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQKKyAqIFdlYktpdCBzcGVs
bGNoZWNrZXIgaW1wbGVtZW50YXRpb24gYnkgZGVmaW5pbmcgaXRzIG93biBpbXBsZW1lbnRhdGlv
biBhbmQgc2V0dGluZworICogYXBwcm9wcmlhdGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorICovCisK
KyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9oCisjZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfaAor
CisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgewor
I2VuZGlmCisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1
bmN0aW9uIHRvIHJldHVybiBhIHRhZyAoaWRlbnRpZmllcikgd2hpY2ggaXMgZ3VhcmFudGVlZCB0
byBiZSB1bmlxdWUuCisgKgorICogVW5pcXVlIHRhZ3MgaGVscCB0byBhdm9pZCBjb2xsaXNpb25z
IHdpdGggb3RoZXIgb2JqZWN0cyB0aGF0IGFyZSBjaGVja2VkIGZvciBzcGVsbGluZyBtaXN0YWtl
cy4KKyAqCisgKiBAcGFyYW0gbyB0aGUgdmlldyBvYmplY3QgdG8gZ2V0IHVuaXF1ZSB0YWcKKyAq
CisgKiBAcmV0dXJuIHVuaXF1ZSB0YWcgZm9yIHRoZSBnaXZlbiBAYSBvIHZpZXcgb2JqZWN0Cisg
Ki8KK3R5cGVkZWYgdWludDY0X3QgKCpFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1
bWVudF9UYWdfR2V0X0NiKShjb25zdCBFdmFzX09iamVjdCAqbyk7CisKKy8qKgorICogRGVmaW5l
cyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNsb3NlIHRoZSBwcnZp
b3VzbHkgc2V0IHRhZy4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIHdpbGwgbm90aWZ5IHRoZSByZWNl
aXZlciB0aGF0IHRoZSB1c2VyIGhhcyBmaW5pc2hlZCB3aXRoIHRoZSB0YWdnZWQgZG9jdW1lbnQu
CisgKgorICogQHBhcmFtIHRhZyB0aGUgdGFnIHRvIGJlIGNsb3NlZAorICovCit0eXBlZGVmIHZv
aWQgKCpFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2VfQ2Ip
KHVpbnQ2NF90IHRhZyk7CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNh
bGxiYWNrIGZ1bmN0aW9uIHRvIHNlYXJjaCBmb3IgYSBtaXNzcGVsbGVkIHdvcmRzIGluIHRoZSBn
aXZlbiBzdHJpbmcuCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUg
c3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVudCB0aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwK
KyAqICAgICAgICBpbiBtb3N0IGNhc2VzIG5vdCBuZWNlc3NhcmlseSwganVzdCBmb3IgaWdub3Jl
ZCB3b3JkLAorICogICAgICAgIEBjIDAgY2FuIGJlIHBhc3NlZCBpbiBmb3IgdGV4dCBub3QgYXNz
b2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBkb2N1bWVudAorICogQHBhcmFtIHRleHQgdGhlIHRl
eHQgY29udGFpbmluZyB0aGUgd29yZHMgdG8gc3BlbGxjaGVjaworICogQHBhcmFtIG1pc3NwZWxs
aW5nX2xvY2F0aW9uIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtaXNz
cGVsbGVkIEBhIHRleHQsIEBjIC0xIGlmIHRoZSBAYSB0ZXh0IGlzIGNvcnJlY3QKKyAqIEBwYXJh
bSBtaXNzcGVsbGluZ19sZW5ndGggYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBsZW5ndGggb2YgbWlz
c3BlbGxlZCBAYSB0ZXh0LCBAYyAwIGlmIHRoZSBAYSB0ZXh0IGlzIGNvcnJlY3QKKyAqLwordHlw
ZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2tfQ2IpKHVp
bnQ2NF90IHRhZywgY29uc3QgY2hhciAqdGV4dCwgaW50MzJfdCAqbWlzc3BlbGxpbmdfbG9jYXRp
b24sIGludDMyX3QgKm1pc3NwZWxsaW5nX2xlbmd0aCk7CisKKy8qKgorICogRGVmaW5lcyBhIHR5
cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhIGxpc3Qgb2Ygc3VnZ2Vz
dGVkIHNwZWxsaW5ncyBmb3IgYSBtaXNzcGVsbGVkIEBhIHdvcmQuCisgKgorICogQHBhcmFtIHRh
ZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVudCB0
aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBAYyAwIGNhbiBiZSBwYXNzZWQg
Zm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZG9jdW1lbnQKKyAqIEBw
YXJhbSB3b3JkIHRoZSB3b3JkIHRvIGdldCBndWVzc2VzCisgKiBAcmV0dXJuIGEgbGlzdCBvZiBk
eW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5ncyAoYXMgY2hhciopIGFuZAorICogICAgICAgICBj
YWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGRlc3Ryb3lpbmcgdGhlbS4KKyAqLwordHlwZWRlZiBF
aW5hX0xpc3QgKigqRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNfR2V0X0NiKSh1aW50NjRf
dCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5j
dGlvbiB0byBhZGQgdGhlIHdvcmQgdG8gdGhlIHNwZWxsIGNoZWNrZXIgZGljdGlvbmFyeS4KKyAq
CisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBzcGVsbCBjaGVja2VyIHdo
aWNoIGRvY3VtZW50IHRoYXQgQGEgdGV4dCBpcyBhc3NvY2lhdGVkLAorICogICAgICAgIEBjIDAg
Y2FuIGJlIHBhc3NlZCBmb3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBk
b2N1bWVudAorICogQHBhcmFtIHdvcmQgdGhlIHdvcmQgdG8gYWRkCisgKi8KK3R5cGVkZWYgdm9p
ZCAoKkV3a19UZXh0X0NoZWNrZXJfV29yZF9MZWFybl9DYikodWludDY0X3QgdGFnLCBjb25zdCBj
aGFyICp3b3JkKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGVsbCB0
aGUgc3BlbGwgY2hlY2tlciB0byBpZ25vcmUgYSBnaXZlbiB3b3JkLgorICoKKyAqIEBwYXJhbSB0
YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIgd2hpY2ggZG9jdW1lbnQg
dGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAgICAgICAgQGMgMCBjYW4gYmUgcGFzc2Vk
IGZvciB0ZXh0IG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGRvY3VtZW50CisgKiBA
cGFyYW0gd29yZCB0aGUgd29yZCB0byBpZ25vcmUKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1Rl
eHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYikodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp3b3Jk
KTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGEgdW5pcXVlIHNw
ZWxsIGRvY3VtZW50IHRhZy4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0
IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVt
ZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2Rv
Y3VtZW50X3RhZ19nZXRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3Vt
ZW50X1RhZ19HZXRfQ2IgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0
byBjbG9zZSBhIHVuaXF1ZSBzcGVsbCBkb2N1bWVudCB0YWcuCisgKgorICogQHBhcmFtIGNiIGEg
bmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2Vi
S2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVj
a2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2VfY2Jfc2V0KEV3a19UZXh0X0NoZWNr
ZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19DbG9zZV9DYiBjYik7CisKKy8qKgorICogU2V0
cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNlYXJjaCBmb3IgYSBtaXNzcGVsbGVkIHdvcmRzIGlu
IHRoZSBnaXZlbiBzdHJpbmcuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNl
dCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxl
bWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3N0cmluZ19zcGVsbGlu
Z19jaGVja19jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2tfQ2Ig
Y2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgYW4gYXJyYXkg
b2Ygc3VnZ2VzdGVkIHNwZWxsaW5ncyBmb3IgYSBtaXNzcGVsbGVkIHdvcmQuCisgKgorICogQHBh
cmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRl
ZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tf
dGV4dF9jaGVja2VyX3dvcmRfZ3Vlc3Nlc19nZXRfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfV29y
ZF9HdWVzc2VzX0dldF9DYiBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9u
IHRvIGFkZCB0aGUgd29yZCB0byB0aGUgc3BlbGwgY2hlY2tlciBkaWN0aW9uYXJ5LgorICoKKyAq
IEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRo
ZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQg
ZXdrX3RleHRfY2hlY2tlcl93b3JkX2xlYXJuX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1dvcmRf
TGVhcm5fQ2IgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0ZWxs
IHRoZSBzcGVsbCBjaGVja2VyIHRvIGlnbm9yZSBhIGdpdmVuIHdvcmQuCisgKgorICogQHBhcmFt
IGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1
bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4
dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3Jl
X0NiIGNiKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tf
dGV4dF9jaGVja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjAwZmYwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCisj
ZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCisKKyNpZiBFTkFCTEUoU1BFTExDSEVD
SykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCisKKy8qKgorICogQGJyaWVmIFN0cnVj
dHVyZSBrZWVwcyBjbGllbnQncyBjYWxsYmFjayBmdW5jdGlvbnMuCisgKgorICogQGludGVybmFs
CisgKi8KK3N0cnVjdCBfRXdrX1RleHRfQ2hlY2tlciB7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9V
bmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9DYiB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFn
X2dldDsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xv
c2VfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZTsKKyAgICBFd2tfVGV4dF9DaGVj
a2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19DYiBzdHJpbmdfc3BlbGxpbmdfY2hlY2s7CisgICAg
RXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNfR2V0X0NiIHdvcmRfZ3Vlc3Nlc19nZXQ7Cisg
ICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0NiIHdvcmRfbGVhcm47CisgICAgRXdrX1Rl
eHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYiB3b3JkX2lnbm9yZTsKK307Cit0eXBlZGVmIF9Fd2tf
VGV4dF9DaGVja2VyIEV3a19UZXh0X0NoZWNrZXI7CisKK0V3a19UZXh0X0NoZWNrZXIqIGV3a190
ZXh0X2NoZWNrZXJfY2FsbGJhY2tzX2dldCgpOworCisvLyBNYWtlcyBpdCB2aXNpYmxlIGZvciBX
VFIuCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCk7CisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKyNlbmRpZiAvLyBld2tfdGV4dF9jaGVja2VyX3ByaXZh
dGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tl
ckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNw
cAppbmRleCA3NWE4YTk5Li42MzkxOGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcApAQCAtMSw1ICsxLDcgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg
MjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI5LDEwIEBACiAjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIK
IAogI2luY2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdElt
cGxlbWVudGVkLmg+CisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXZWJUZXh0
Q2hlY2tlci5oIgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zNyw5
MSArNDIsMTg1IEBAIHN0YXRpYyBUZXh0Q2hlY2tlclN0YXRlIHRleHRDaGVja2VyU3RhdGU7CiAK
IGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIFRleHRDaGVja2VyOjpzdGF0ZSgpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBzdGF0aWMgYm9vbCBk
aWRJbml0aWFsaXplU3RhdGUgPSBmYWxzZTsKKyAgICBpZiAoZGlkSW5pdGlhbGl6ZVN0YXRlKQor
ICAgICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKKworICAgIFdlYlRleHRDaGVja2VyQ2xp
ZW50JiBjbGllbnQgPSBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpOworICAgIHRl
eHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBjbGllbnQu
Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5p
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBjbGllbnQuZ3JhbW1hckNoZWNraW5nRW5hYmxlZCgp
OworCisgICAgZGlkSW5pdGlhbGl6ZVN0YXRlID0gdHJ1ZTsKKyNlbmRpZgogICAgIHJldHVybiB0
ZXh0Q2hlY2tlclN0YXRlOwogfQogCiBib29sIFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nQWxsb3dlZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKTsKKyNlbHNlCiAgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZChib29sKQordm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBpZiAo
c3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4dENoZWNrZXJT
dGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCku
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkKGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgaWYgKHN0YXRlKCkuaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkID09IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQg
PSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQ7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jbGllbnQoKS5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQp
OworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIC8qZW5hYmxlZCovKQordm9pZCBUZXh0Q2hlY2tlcjo6
Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHRl
eHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVk
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CisjZW5kaWYKIH0KIAotdm9pZCBU
ZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIC8qZW5h
YmxlZCovKQordm9pZCBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hh
bmdlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCA9IGVuYWJsZWQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKKyNlbmRpZgog
fQogCi1pbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQ
cm94eSopCitpbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBh
Z2VQcm94eSogcGFnZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVu
aXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWdl
KTsKICAgICByZXR1cm4gMDsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpjbG9zZVNw
ZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QpCit2b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxs
RG9jdW1lbnRXaXRoVGFnKGludDY0X3QgdGFnKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTSh0YWcpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdP
ZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQzMl90JiwgaW50MzJf
dCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBpbnQzMl90
JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9j
dW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNz
cGVsbGluZ0xlbmd0aCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFn
KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Cisg
ICAgVU5VU0VEX1BBUkFNKG1pc3NwZWxsaW5nTG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSht
aXNzcGVsbGluZ0xlbmd0aCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgVmVjdG9yPFdl
YkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBUZXh0Q2hl
Y2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25z
dCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdy
YW1tYXJEZXRhaWxzLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QmIGJhZEdy
YW1tYXJMZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrR3JhbW1h
ck9mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBncmFtbWFy
RGV0YWlscywgYmFkR3JhbW1hckxvY2F0aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0
KTsKKyAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKKyAgICBVTlVTRURfUEFSQU0oZ3JhbW1hckRl
dGFpbHMpOworICAgIFVOVVNFRF9QQVJBTShiYWRHcmFtbWFyTG9jYXRpb24pOworICAgIFVOVVNF
RF9QQVJBTShiYWRHcmFtbWFyTGVuZ3RoKTsKKyNlbmRpZgogfQogCiBib29sIFRleHRDaGVja2Vy
OjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVO
QUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNs
aWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmco
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAg
V2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS50b2dnbGVTcGVsbGluZ1VJSXNTaG93
aW5nKCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQordm9pZCBUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90IHNwZWxsRG9jdW1l
bnRUYWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1
bWVudFRhZywgbWlzc3BlbGxlZFdvcmQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxE
b2N1bWVudFRhZyk7CisgICAgVU5VU0VEX1BBUkFNKG1pc3NwZWxsZWRXb3JkKTsKKyNlbmRpZgog
fQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
aW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCit2b2lkIFRleHRD
aGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERv
Y3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJE
ZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFC
TEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFt
bWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNwZWxs
RG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTShiYWRHcmFtbWFyUGhyYXNlKTsKKyAgICBV
TlVTRURfUEFSQU0oZ3JhbW1hckRldGFpbCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tl
cjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiwgVmVjdG9yPFN0cmluZz4mKQordm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQo
aW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmlu
ZyYgLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xp
ZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKKyAgICBVTlVTRURfUEFS
QU0od29yZCk7CisgICAgVU5VU0VEX1BBUkFNKGd1ZXNzZXMpOworI2VuZGlmCiB9CiAKLXZvaWQg
VGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQordm9pZCBUZXh0
Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5n
JiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5sZWFybldvcmQoc3BlbGxE
b2N1bWVudFRhZywgd29yZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50
VGFnKTsKKyAgICBVTlVTRURfUEFSQU0od29yZCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hl
Y2tlcjo6aWdub3JlV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQordm9pZCBUZXh0Q2hlY2tl
cjo6aWdub3JlV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29y
ZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAg
IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuaWdub3JlV29yZChzcGVsbERvY3Vt
ZW50VGFnLCB3b3JkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcp
OworICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kRW5jaGFudC5jbWFrZSBiL1NvdXJj
ZS9jbWFrZS9GaW5kRW5jaGFudC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kNjljNzFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50
LmNtYWtlCkBAIC0wLDAgKzEsNDMgQEAKKyMgLSBUcnkgdG8gZmluZCBFbmNoYW50CisjIE9uY2Ug
ZG9uZSwgdGhpcyB3aWxsIGRlZmluZQorIworIyAgRU5DSEFOVF9JTkNMVURFX0RJUlMgLSB0aGUg
RW5jaGFudCBpbmNsdWRlIGRyZWN0b3JpZXMKKyMgIEVOQ0hBTlRfTElCUkFSSUVTIC0gbGluayB0
aGVzZSB0byB1c2UgRW5jaGFudAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVj
dHJvbmljcworIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVIgQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUworIyBJUycnIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIElUUworIyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyMgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorIyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKKyMgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisjIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SCisjIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK0ZJTkRfUEFDS0FHRShQa2dDb25maWcpCitQS0dfQ0hFQ0tfTU9E
VUxFUyhQQ19FTkNIQU5UIGVuY2hhbnQpCisKK0ZJTkRfUEFUSChFTkNIQU5UX0lOQ0xVREVfRElS
UworICAgIE5BTUVTIGVuY2hhbnQuaAorICAgIFBBVEhTICR7UENfRU5DSEFOVF9JTkNMVURFRElS
fQorICAgICAgICAgICR7UENfRU5DSEFOVF9JTkNMVURFX0RJUlN9CispCisKK0ZJTkRfTElCUkFS
WShFTkNIQU5UX0xJQlJBUklFUworICAgIE5BTUVTIGVuY2hhbnQKKyAgICBQQVRIUyAke1BDX0VO
Q0hBTlRfTElCRElSfQorICAgICAgICAgICR7UENfRU5DSEFOVF9MSUJSQVJZX0RJUlN9CispCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9P
cHRpb25zRWZsLmNtYWtlCmluZGV4IGIyNzcxZTkuLmQ4ODJkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNt
YWtlCkBAIC04Miw2ICs4Miw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9SRUdJT05TIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1NIQURPV19ET00gT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfU0hBUkVEX1dPUktFUlMgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfU1BFTExDSEVDSyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9UT1VDSF9FVkVOVFMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfVklCUkFUSU9OIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1ZJREVPIE9OKQpAQCAtMTc4LDMgKzE3OSw3IEBAIElGIChXVEZfVVNFX1RJ
TEVEX0JBQ0tJTkdfU1RPUkUpCiAgIEZJTkRfUEFDS0FHRShPcGVuR0wgUkVRVUlSRUQpCiBFTkRJ
RigpCiAKK0lGIChFTkFCTEVfU1BFTExDSEVDSykKKyAgICAgIEZJTkRfUEFDS0FHRShFbmNoYW50
IFJFUVVJUkVEKQorICAgICAgQUREX0RFRklOSVRJT05TKC1ERU5BQkxFX1NQRUxMQ0hFQ0s9MSkK
K0VORElGKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZSBi
L1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQppbmRleCBmMWQ4NjU5Li5iN2Y3NWQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKKysrIGIvU291
cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCkBAIC05OCw2ICs5OCw3IEBAIE1BQ1JPIChX
RUJLSVRfT1BUSU9OX0JFR0lOKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TQ1JJ
UFRFRF9TUEVFQ0ggIlRvZ2dsZSBTY3JpcHRlZCBTcGVlY2ggQVBJIHN1cHBvcnQiIE9GRikKICAg
ICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU0hBRE9XX0RPTSAiVG9nZ2xlIFNoYWRvdyBE
T00gc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TSEFSRURf
V09SS0VSUyAiVG9nZ2xlIFNoYXJlZFdvcmtlcnMgc3VwcG9ydCIgT0ZGKQorICAgIFdFQktJVF9P
UFRJT05fREVGSU5FKEVOQUJMRV9TUEVMTENIRUNLICJUb2dnbGUgU3BlbGxjaGVja2luZyBzdXBw
b3J0IChyZXF1aXJlcyBFbmNoYW50KSIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVO
QUJMRV9TUUxfREFUQUJBU0UgIlRvZ2dsZSBTUUwgRGF0YWJhc2UgU3VwcG9ydCIgT04pCiAgICAg
V0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NUWUxFX1NDT1BFRCAiVG9nZ2xlIDxzdHlsZSBz
Y29wZWQ+IHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU1ZH
ICJUb2dnbGUgU1ZHIHN1cHBvcnQiIE9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlY29uZmln
LmguY21ha2UgYi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQppbmRleCAzZmI1NTYyLi4yMDUw
NWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQorKysgYi9Tb3VyY2Uv
Y21ha2Vjb25maWcuaC5jbWFrZQpAQCAtOTQsNiArOTQsNyBAQAogI2NtYWtlZGVmaW5lMDEgRU5B
QkxFX1NIQURPV19ET00KICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TSEFSRURfV09SS0VSUwogI2Nt
YWtlZGVmaW5lMDEgRU5BQkxFX1NNT09USF9TQ1JPTExJTkcKKyNjbWFrZWRlZmluZTAxIEVOQUJM
RV9TUEVMTENIRUNLCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU1FMX0RBVEFCQVNFCiAjY21ha2Vk
ZWZpbmUwMSBFTkFCTEVfU1RZTEVfU0NPUEVECiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU1ZHCg==
</data>
<flag name="review"
          id="181387"
          type_id="1"
          status="+"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168634</attachid>
            <date>2012-10-14 23:59:39 -0700</date>
            <delta_ts>2012-10-16 07:43:57 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>54459</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAwMDBmZGQyLi4xZWNjM2Iz
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTItMTAtMTQgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYXNtdW5nLmNvbT4KKworICAgICAgICBbV0syXVtFRkxd
IEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgR3l1eW91bmcgS2ltLgorCisgICAgICAgIERlZmluZSBTUEVMTENIRUNLIG1hY3JvIGFu
ZCBlbmFibGUgaXQgZm9yIFdLMi1FZmwuCisgICAgICAgIFRoZSBzcGVsbGNoZWNraW5nIGltcGxl
bWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBFbmNoYW50IGxpYnJhcnkuCisgICAgICAgIEl0IGNh
biBiZSB1c2VkIGJ5IG90aGVyIFdlYktpdCBwb3J0cy4KKworICAgICAgICAqIFNvdXJjZS9jbWFr
ZS9GaW5kRW5jaGFudC5jbWFrZTogQWRkZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlv
bnNFZmwuY21ha2U6IEVuYWJsZSBzcGVsbGNoZWNraW5nIGZlYXR1cmUgZm9yIFdlYktpdDItRUZM
LgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZTogRGVmaW5lIHRo
ZSBTUEVMTENIRUNLIG1hY3JvLgorICAgICAgICAqIFNvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtl
OiBBZGQgdGhlIGZlYXR1cmUuCisKIDIwMTItMTAtMTQgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFy
b2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzMDY1
Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA4NTM1ODM2Li40Y2U4OGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTItMTAtMTQgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ft
c3VuZy5jb20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYW1zdW5nLmNvbT4KKworICAgICAgICBbV0sy
XVtFRkxdIEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgR3l1eW91bmcgS2ltLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6
CisgICAgICAgIEFkZCBlbmNoYW50LXJlbGF0ZWQgY29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRo
cyBhbmQgdGhlIGxpYnJhcnkgZmxhZy4KKwogMjAxMi0xMC0xNCAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFNpbXBsaWZ5IHVzZXIgY29udGVudCBpbiBXZWJLaXQyIGJ5
IHVzaW5nIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0IGFuZCBXZWJDb3JlOjpVc2VyU2NyaXB0IGRp
cmVjdGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDJhMTdjOWIuLjg3NzM3Y2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC04NCw2ICs4NCw3IEBAIExJU1QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCiAgIHBsYXRm
b3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKICAgcGxhdGZvcm0vdGV4dC9lZmwvVGV4dEJy
ZWFrSXRlcmF0b3JJbnRlcm5hbElDVUVmbC5jcHAKKyAgcGxhdGZvcm0vdGV4dC9lbmNoYW50L1Rl
eHRDaGVja2VyRW5jaGFudC5jcHAKICkKIAogSUYgKEVOQUJMRV9CQVRURVJZX1NUQVRVUykKQEAg
LTMyNSwzICszMjYsMTIgQEAgSUYgKEVOQUJMRV9XRUJfQVVESU8pCiAgIElOU1RBTEwoRklMRVMg
JHtXRUJfQVVESU9fREFUQX0gREVTVElOQVRJT04gJHtXRUJfQVVESU9fRElSfSkKICAgQUREX0RF
RklOSVRJT05TKC1EVU5JTlNUQUxMRURfQVVESU9fUkVTT1VSQ0VTX0RJUj0iJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vYXVkaW8vcmVzb3VyY2VzIikKIEVORElGICgpCisKK0lGIChFTkFCTEVfU1BF
TExDSEVDSykKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAg
ICAgICAgJHtFTkNIQU5UX0lOQ0xVREVfRElSU30KKyAgICApCisgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9MSUJSQVJJRVMKKyAgICAgICAgJHtFTkNIQU5UX0xJQlJBUklFU30KKyAgICApCitFTkRJ
RigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggZTY0YzYwMi4uNjlmOGI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEwOSBAQAorMjAxMi0xMC0xNCAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBz
YW1zdW5nLmNvbT4sIE1pY2hhbCBSb2ogPG0ucm9qQHNhbXN1bmcuY29tPgorCisgICAgICAgIElt
cGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgR3l1eW91bmcgS2ltLgorCisgICAgICAgIEFkZCBzcGVsbGluZyBpbXBsZW1lbnRhdGlvbiBm
b3IgV2ViS2l0Mi1FRkwgdGhhdCBpcyBiYXNlZCBvbiBFbmNoYW50IGxpYnJhcnkuCisKKyAgICAg
ICAgQWRkaXRpb25hbGx5IHRoZSBwYXRjaCBwcm92aWRlcyBBUEkgdG8gb3ZlcndyaXRlIHRoZSBk
ZWZhdWx0IFdlYktpdAorICAgICAgICBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24gYXMgRW5j
aGFudCBsaWJyYXJ5IGRvZXNuJ3QgZW5zdXJlIGdyYW1tYXIgY2hlY2tpbmcuCisgICAgICAgIEFw
cGxpY2F0aW9uIGlzIGFibGUgdG8gb3ZlcndyaXRlIGl0IGJ5IGRlZmluaW5nIGl0cyBvd24gaW1w
bGVtZW50YXRpb24gYW5kCisgICAgICAgIHNldHRpbmcgYXBwcm9wcmlhdGUgY2FsbGJhY2sgZnVu
Y3Rpb25zLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBlbmNo
YW50LXJlbGF0ZWQgY29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRocyBhbmQgdGhlIGxpYnJhcnkg
ZmxhZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAg
IEFkZCBld2tfdGV4dF9jaGVja2VyLmggdG8gdGhlIG1haW4gV2ViS2l0Mi1FRkwncyBoZWFkZXIg
dG8gYmUgYXZhaWxhYmxlIGZvciBhcHBsaWNhdGlvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnQg
dGhlIGNhbGxiYWNrcyBmdW5jdGlvbnMgb2YgV0tUZXh0Q2hlY2tlci4KKworICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYktpdDo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQp
OgorICAgICAgICAoV2ViS2l0OjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgor
ICAgICAgICAoV2ViS2l0Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktp
dDo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Omd1ZXNzZXNGb3JXb3JkKToKKyAgICAg
ICAgKFdlYktpdDo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6aWdub3JlV29yZCk6Cisg
ICAgICAgIFRob3NlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgZ2l2ZW4gYXMgY2FsbGJhY2sgZnVu
Y3Rpb25zIGZvciBXS1RleHRDaGVja2VyJ3MgY2xpZW50LgorICAgICAgICBUaGV5IGNob29zZSBi
ZXR3ZWVuIFdlYktpdCdzIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGFuZCBjbGllbnQncyBvbmVz
LgorCisgICAgICAgIChXZWJLaXQ6OmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgor
ICAgICAgICAoV2ViS2l0Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAg
KFdlYktpdDo6bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFRoZXkgYXJl
IHVzZWQgYnkgZXdrX3NldHRpbmdzLmNwcCBmaWxlIGFuZCBhbGxvdyB0byBkbyBub3QKKyAgICAg
ICAgZXhwb3NlICd0ZXh0Q2hlY2tlckVuY2hhbnQnLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSB0aGUgZnVu
Y3Rpb25zIHdoaWNoIGNob29zZSBiZXR3ZWVuIFdlYktpdCdzIHNwZWxsaW5nIGltcGxlbWVudGF0
aW9uIGFuZAorICAgICAgICB0aGUgY2xpZW50J3Mgb25lcy4KKworICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAgICAgIChf
RXdrX0NvbnRleHQ6Ol9Fd2tfQ29udGV4dCk6CisgICAgICAgIEF0dGFjaCB0aGUgc3BlbGxjaGVj
a2VyIGZlYXR1cmUgZm9yIHRoZSBjb250ZXh0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3RleHRfY2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAoZXdrX3RleHRfY2hlY2tl
cl9jYWxsYmFja3NfZ2V0KToKKyAgICAgICAgQW4gaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2V0IHRo
ZSBjbGllbnQncyBjYWxsYmFjayBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdGV4dF9jaGVja2VyLmg6IEFkZGVkLgorICAgICAgICBEZWZpbmUgQVBJIHRvIHNl
dCB0aGUgY2xpZW50J3Mgb3duIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmg6IEFkZGVkLgorICAg
ICAgICAoX0V3a19UZXh0X0NoZWNrZXIpOgorICAgICAgICBEZWZpbmUgdGhlIHN0cnVjdCB3aXRo
IHRoZSBjbGllbnQncyBjYWxsYmFja3MgcmVzcG9uaXNibGUgZm9yIHNwZWxsaW5nLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcDoKKyAgICAgICAgKG9uQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdJZGxlcik6CisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBpcyBu
b3RpZmllZCBhYm91dCB0aGUgc3BlbGxpbmcgc2V0dGluZyBjaGFuZ2Ugb24gaWRsZXIKKyAgICAg
ICAgdG8gZG8gbm90IGJsb2NrIFdlYktpdC4KKyAgICAgICAgVGhlIHRoZSBjb250aW51b3VzIHNw
ZWxsIGNoZWNraW5nIG1heSBiZSBjaGFuZ2VkIHRocm91Z2ggdGhlIGNvbnRleHQgbWVudSBvcHRp
b24uCisKKyAgICAgICAgKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXRVcGRhdGUpOgorICAgICAg
ICBUaGUgZGljdGlvbmFyaWVzIGFyZSByZXF1ZXN0ZWQgb24gJ2lkbGVyJyB0byBkbyBub3QgYmxv
Y2sgV2ViS2l0LgorCisgICAgICAgIChzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KToKKyAgICAg
ICAgU2V0IHRoZSBsYW5ndWFnZXMuCisKKyAgICAgICAgKGV3a19zZXR0aW5nc19jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQpOgorICAgICAgICBTZXQgdGhlIGNhbGxiYWNr
IGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbiB0aGUgc3BlbGxpbmcKKyAg
ICAgICAgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisKKyAgICAgICAgKGV3a19zZXR0
aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KToKKyAgICAgICAgKGV3
a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KToKKyAgICAg
ICAgQVBJIHRvIHNldC9nZXQgdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCisKKyAgICAg
ICAgKGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KToKKyAgICAgICAg
KGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9zZXQpOgorICAg
ICAgICAoZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19lbmFibGVkX2dldCk6
CisgICAgICAgIEFQSSB0byBnZXQvc2V0IGxhbmd1YWdlcyB0byB1c2UgYnkgV2ViS2l0IGltcGxl
bWVudGF0aW9uIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6
c3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0FsbG93ZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c2V0Q29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6
OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFn
KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6IFJl
bW92ZSBXZWJDb3JlIG5hbWFzcGFjZSBhcyBpdCdzIGFscmVhZHkgZGVmaW5lZCBmb3IgdGhlIHdo
b2xlIGZpbGUuCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93
aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1No
b3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6bGVh
cm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorICAg
ICAgICBUaG9zZSBjYWxsIFdLVGV4dENoZWNrZXIgY2xpZW50J3MgbWV0aG9kcy4KKwogMjAxMi0x
MC0xNCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZp
eCB0aGUgd29ybGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGExMmY0NGEuLmU4YmE1
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00Niw2ICs0Niw3IEBAIExJU1QoQVBQ
RU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL05ldHdvcmtJbmZvUHJv
dmlkZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvVmlicmF0aW9uUHJvdmlkZXIuY3BwCisgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApA
QCAtNjQsNiArNjUsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9pdGVtLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19yZXNvdXJjZS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3Bw
CisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlci5jcHAKICAgICBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdXJsX3JlcXVlc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3VybF9yZXNwb25zZS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9y
ZXF1ZXN0LmNwcApAQCAtMTM1LDYgKzEzNyw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfSU5DTFVE
RV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9lZmwiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3Rl
eHQvZW5jaGFudCIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3ZnL2dyYXBoaWNzIgogICAgICIke1dF
QktJVDJfRElSfS9TaGFyZWQvZWZsIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvc291cCIK
QEAgLTI0MCw2ICsyNDMsNyBAQCBTRVQgKEVXZWJLaXQyX0hFQURFUlMKICAgICAiJHtDTUFLRV9D
VVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0u
aCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19yZXNvdXJjZS5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3NldHRpbmdzLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElS
fS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmgiCiAgICAgIiR7Q01BS0VfQ1VS
UkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdG91Y2guaCIKICAgICAiJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVxdWVz
dC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3VybF9yZXNwb25zZS5oIgpAQCAtMzY3LDMgKzM3MSwxMiBAQCBJRiAoRU5BQkxFX0lOU1BF
Q1RPUikKICAgICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTiAiKi5naWYiCiAgICAgICAgICAg
ICAgICAgICAgICAgIFBBVFRFUk4gIioucG5nIikKIEVORElGICgpCisKK0lGIChFTkFCTEVfU1BF
TExDSEVDSykKKyAgICBMSVNUKEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAg
ICAgICAgJHtFTkNIQU5UX0lOQ0xVREVfRElSU30KKyAgICApCisgICAgTElTVChBUFBFTkQgV2Vi
S2l0Ml9MSUJSQVJJRVMKKyAgICAgICAgJHtFTkNIQU5UX0xJQlJBUklFU30KKyAgICApCitFTkRJ
RigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0
Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCAw
MGRkODExLi45YWE3ODZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJld2tfcG9wdXBfbWVudV9pdGVt
LmgiCiAjaW5jbHVkZSAiZXdrX3Jlc291cmNlLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgi
CisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgogI2luY2x1ZGUgImV3a190b3VjaC5oIgog
I2luY2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2Uu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRl
eHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRl
eHRDaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmYzOWM0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2Vi
S2l0VGV4dENoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFRleHRDaGVja2VyLmgiCisKKyNpZiBFTkFC
TEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
V0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXS1Jl
dGFpblB0ci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlN0cmlu
Zy5oIgorI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNr
ZXJfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RhdGljIE93blB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ+IHRleHRDaGVja2VyRW5j
aGFudCA9IFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudDo6Y3JlYXRlKCk7CisKK3N0YXRpYyBF
d2tfVGV4dF9DaGVja2VyKiBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcyA9IGV3a190ZXh0X2NoZWNr
ZXJfY2FsbGJhY2tzX2dldCgpOworCitib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBld2tfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpOworfQorCit2b2lkIHNldENvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqKQoreworICAgIGV3a19z
ZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KGVuYWJsZWQpOwor
fQorCit1aW50NjRfdCB1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdLUGFnZVJlZiBwYWdlLCBjb25z
dCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPnVuaXF1ZV9zcGVs
bF9kb2N1bWVudF90YWdfZ2V0KQorICAgICAgICByZXR1cm4gZXdrVGV4dENoZWNrZXJDYWxsYmFj
a3MtPnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KHRvSW1wbChwYWdlKS0+dmlld1dpZGdl
dCgpKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhU
YWcodWludDY0X3QgdGFnLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJD
YWxsYmFja3MtPnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UpCisgICAgICAgIGV3a1Rl
eHRDaGVja2VyQ2FsbGJhY2tzLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKHRhZyk7
Cit9CisKK3ZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdS
ZWYgdGV4dCwgaW50MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxp
bmdMZW5ndGgsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNr
cy0+c3RyaW5nX3NwZWxsaW5nX2NoZWNrKQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNr
cy0+c3RyaW5nX3NwZWxsaW5nX2NoZWNrKHRhZywgdG9JbXBsKHRleHQpLT5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAg
ZWxzZQorICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQtPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0
b0ltcGwodGV4dCktPnN0cmluZygpLCAqbWlzc3BlbGxpbmdMb2NhdGlvbiwgKm1pc3NwZWxsaW5n
TGVuZ3RoKTsKK30KKworV0tBcnJheVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdL
U3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIFdLTXV0YWJsZUFycmF5UmVmIHN1
Z2dlc3Rpb25zRm9yV29yZCA9IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7CisKKyAgICBpZiAoZXdr
VGV4dENoZWNrZXJDYWxsYmFja3MtPndvcmRfZ3Vlc3Nlc19nZXQpIHsKKyAgICAgICAgRWluYV9M
aXN0KiBsaXN0ID0gZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPndvcmRfZ3Vlc3Nlc19nZXQodGFn
LCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB2b2lkKiBp
dGVtOworCisgICAgICAgIEVJTkFfTElTVF9GUkVFKGxpc3QsIGl0ZW0pIHsKKyAgICAgICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKHN0YXRpY19jYXN0PGNoYXIqPihpdGVtKSkpOworICAgICAgICAg
ICAgV0tBcnJheUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9uLmdldCgp
KTsKKyAgICAgICAgICAgIGZyZWUoaXRlbSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gdGV4dENoZWNrZXJFbmNoYW50LT5nZXRHdWVz
c2VzRm9yV29yZCh0b0ltcGwod29yZCktPnN0cmluZygpKTsKKyAgICAgICAgc2l6ZV90IG51bWJl
ck9mR3Vlc3NlcyA9IGd1ZXNzZXMuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bWJlck9mR3Vlc3NlczsgKytpKSB7CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhndWVzc2VzW2ldLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJ
dGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlvbi5nZXQoKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gc3VnZ2VzdGlvbnNGb3JXb3JkOworfQorCit2b2lkIGxlYXJuV29y
ZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIGlm
IChld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+d29yZF9sZWFybikKKyAgICAgICAgZXdrVGV4dENo
ZWNrZXJDYWxsYmFja3MtPndvcmRfbGVhcm4odGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgdGV4dENoZWNrZXJFbmNoYW50LT5sZWFy
bldvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKK3ZvaWQgaWdub3JlV29yZCh1aW50
NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tU
ZXh0Q2hlY2tlckNhbGxiYWNrcy0+d29yZF9pZ25vcmUpCisgICAgICAgIGV3a1RleHRDaGVja2Vy
Q2FsbGJhY2tzLT53b3JkX2lnbm9yZSh0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgZWxzZQorICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQtPmlnbm9yZVdv
cmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IGF2YWlsYWJs
ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQoreworICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hh
bnQtPmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK30KKwordm9pZCB1cGRhdGVT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpCit7
CisgICAgdGV4dENoZWNrZXJFbmNoYW50LT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxh
bmd1YWdlcyk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMoKQoreworICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQtPmxvYWRlZFNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjQxMjMyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdFRleHRDaGVja2VyX2gKKyNkZWZpbmUgV2ViS2l0VGV4dENoZWNrZXJf
aAorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckVuY2hh
bnQuaCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tQYWdlLmgiCisjaW5jbHVk
ZSAiV0tTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRoZSBmdW5jdGlvbnMg
bWFpbmx5IGNob29zZSBiZXR3ZWVuIGNsaWVudCdzIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsaW5n
IGFuZCB0aGUgV2ViS2l0IG9uZS4KKworLy8gQ2FsbGJhY2tzIHJlcXVpcmVkIGJ5IFdLVGV4dENo
ZWNrZXIuCitib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOwordm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9v
bCBlbmFibGVkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKwordWludDY0X3QgdW5pcXVlU3Bl
bGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2
b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodWludDY0X3QgdGFnLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKTsKKwordm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBX
S1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBt
aXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CitXS0FycmF5UmVmIGd1
ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7Cit2b2lkIGxlYXJuV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdv
cmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBpZ25vcmVXb3JkKHVpbnQ2NF90IHRh
ZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKKy8vIEVuY2hh
bnQncyBoZWxwZXIuCitWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzKCk7Cit2b2lkIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGxhbmd1YWdlcyk7CitWZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5nTGFu
Z3VhZ2VzKCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQ
RUxMQ0hFQ0spCisjZW5kaWYgLy8gV2ViS2l0VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IDAyZWRkYjQuLjc0
NzExZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dC5jcHAKQEAgLTQwLDYgKzQwLDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVt
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNlbmRpZgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC0xMTQsNiArMTE4
LDEzIEBAIHN0cnVjdCBfRXdrX0NvbnRleHQgewogICAgICAgICBld2tfY29udGV4dF9yZXF1ZXN0
X21hbmFnZXJfY2xpZW50X2F0dGFjaCh0aGlzKTsKICAgICAgICAgZXdrX2NvbnRleHRfZG93bmxv
YWRfY2xpZW50X2F0dGFjaCh0aGlzKTsKICAgICAgICAgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGll
bnRfYXR0YWNoKHRoaXMpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgICAgICBld2tfdGV4
dF9jaGVja2VyX2NsaWVudF9hdHRhY2goKTsKKyAgICAgICAgaWYgKGV3a19zZXR0aW5nc19jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpIHsKKyAgICAgICAgICAgIC8vIExv
YWQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UuCisgICAgICAgICAgICBld2tfc2V0dGluZ3Nfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfc2V0KDApOworICAgICAgICB9CisjZW5kaWYKICAg
ICB9CiAKICAgICB+X0V3a19Db250ZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCmluZGV4IGE5ZjZiMDkuLmY4ZjQ3YTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcApA
QCAtMjksOSArMjksNDUgQEAKICNpbmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJlbmNlcy5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVm
ZXJlbmNlc1ByaXZhdGUuaD4KKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1Rl
eHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlIDxF
Y29yZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAorI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorc3RhdGljIHN0cnVjdCB7CisgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCA6IDE7CisgICAgVmVjdG9yPFN0cmluZz4gc3BlbGxDaGVja2luZ0xhbmd1
YWdlczsKKyAgICBFd2tfU2V0dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2Vf
Q2Igb25Db250aW51b3VzU3BlbGxDaGVja2luZzsKK30gZXdrVGV4dENoZWNrZXJTZXR0aW5ncyA9
IHsgZmFsc2UsIFZlY3RvcjxTdHJpbmc+KCksIDAgfTsKKworc3RhdGljIEVpbmFfQm9vbCBvbkNv
bnRpbnVvdXNTcGVsbENoZWNraW5nSWRsZXIodm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVj
a2VyU2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxDaGVja2luZykKKyAgICAgICAgZXdrVGV4dENo
ZWNrZXJTZXR0aW5ncy5vbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nKGV3a1RleHRDaGVja2VyU2V0
dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworCisgICAgcmV0dXJuIEVD
T1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBzcGVsbENoZWNraW5n
TGFuZ3VhZ2VzU2V0VXBkYXRlKHZvaWQqKQoreworICAgIC8vIEZJWE1FOiBDb25zaWRlciB0byBk
ZWxlZ2F0ZSBjYWxsaW5nIG9mIHRoaXMgbWV0aG9kIGluIFdlYlByb2Nlc3MgdG8gZG8gbm90IGRl
bGF5L2Jsb2NrIFVJUHJvY2Vzcy4KKyAgICB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGV3
a1RleHRDaGVja2VyU2V0dGluZ3Muc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7CisgICAgcmV0dXJu
IEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKworc3RhdGljIHZvaWQgc3BlbGxDaGVja2luZ0xh
bmd1YWdlc1NldChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbmV3TGFuZ3VhZ2VzKQoreworICAgIGV3
a1RleHRDaGVja2VyU2V0dGluZ3Muc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IG5ld0xhbmd1YWdl
czsKKyAgICBlY29yZV9pZGxlcl9hZGQoc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldFVwZGF0ZSwg
MCk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisKIEVpbmFfQm9vbCBld2tfc2V0
dGluZ3NfZnVsbHNjcmVlbl9lbmFibGVkX3NldChFd2tfU2V0dGluZ3MqIHNldHRpbmdzLCBFaW5h
X0Jvb2wgZW5hYmxlKQogewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKQEAgLTE0OCwzICsx
ODQsNzUgQEAgRWluYV9Cb29sIGV3a19zZXR0aW5nc19kbnNfcHJlZmV0Y2hpbmdfZW5hYmxlZF9n
ZXQoY29uc3QgRXdrX1NldHRpbmdzKiBzZXR0aW5ncykKIAogICAgIHJldHVybiBXS1ByZWZlcmVu
Y2VzR2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKHNldHRpbmdzLT5wcmVmZXJlbmNlcy5nZXQoKSk7
CiB9CisKK3ZvaWQgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdl
X2NiX3NldChFd2tfU2V0dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2Ig
Y2FsbGJhY2spCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgZXdrVGV4dENoZWNrZXJT
ZXR0aW5ncy5vbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nID0gY2FsbGJhY2s7CisjZW5kaWYKK30K
KworRWluYV9Cb29sIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJs
ZWRfZ2V0KCkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4gZXdrVGV4dENo
ZWNrZXJTZXR0aW5ncy5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKKyNlbHNlCisg
ICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgZXdrX3NldHRpbmdzX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoRWluYV9Cb29sIGVuYWJsZSkKK3sKKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyAgICBlbmFibGUgPSAhIWVuYWJsZTsKKyAgICBpZiAoZXdrVGV4
dENoZWNrZXJTZXR0aW5ncy5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCAhPSBlbmFi
bGUpIHsKKyAgICAgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5pc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCA9IGVuYWJsZTsKKworICAgICAgICBXS1RleHRDaGVja2VyQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZSk7CisKKyAgICAgICAgLy8g
U2V0cyB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueS4KKyAg
ICAgICAgaWYgKGVuYWJsZSAmJiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkuaXNFbXB0
eSgpKQorICAgICAgICAgICAgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldChWZWN0b3I8U3RyaW5n
PigpKTsKKworICAgICAgICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5vbkNvbnRpbnVvdXNT
cGVsbENoZWNraW5nKQorICAgICAgICAgICAgZWNvcmVfaWRsZXJfYWRkKG9uQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdJZGxlciwgMCk7CisgICAgfQorI2VuZGlmCit9CisKK0VpbmFfTGlzdCogZXdr
X3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKQoreworICAgIEVpbmFfTGlz
dCogbGlzdE9mbGFuZ3VhZ2VzID0gMDsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0
b3I8U3RyaW5nPiBsYW5ndWFnZXMgPSBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7
CisgICAgc2l6ZV90IG51bWJlck9mTGFudWFnZXMgPSBsYW5ndWFnZXMuc2l6ZSgpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkxhbnVhZ2VzOyArK2kpCisgICAgICAgIGxp
c3RPZmxhbmd1YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQobGlzdE9mbGFuZ3VhZ2VzLCBlaW5hX3N0
cmluZ3NoYXJlX2FkZChsYW5ndWFnZXNbaV0udXRmOCgpLmRhdGEoKSkpOworI2VuZGlmCisgICAg
cmV0dXJuIGxpc3RPZmxhbmd1YWdlczsKK30KKwordm9pZCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfc2V0KGNvbnN0IGNoYXIqIGxhbmd1YWdlcykKK3sKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5nPiBuZXdMYW5ndWFnZXM7Cisg
ICAgU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZXMpLnNwbGl0KCcsJywgbmV3TGFuZ3VhZ2VzKTsK
KworICAgIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQobmV3TGFuZ3VhZ2VzKTsKKyNlbmRpZgor
fQorCitFaW5hX0xpc3QqIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5h
YmxlZF9nZXQoKQoreworICAgIEVpbmFfTGlzdCogbGlzdE9mbGFuZ3VhZ2VzID0gMDsKKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXMgPSBsb2FkZWRT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7CisgICAgc2l6ZV90IG51bWJlck9mTGFudWFnZXMgPSBs
YW5ndWFnZXMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkxh
bnVhZ2VzOyArK2kpCisgICAgICAgIGxpc3RPZmxhbmd1YWdlcyA9IGVpbmFfbGlzdF9hcHBlbmQo
bGlzdE9mbGFuZ3VhZ2VzLCBlaW5hX3N0cmluZ3NoYXJlX2FkZChsYW5ndWFnZXNbaV0udXRmOCgp
LmRhdGEoKSkpOworCisjZW5kaWYKKyAgICByZXR1cm4gbGlzdE9mbGFuZ3VhZ2VzOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuaAppbmRleCA4
YjE3ZDFjLi4xZjg5NjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfc2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfc2V0dGluZ3MuaApAQCAtNDQsNiArNDQsMTUgQEAgZXh0ZXJuICJDIiB7CiB0eXBlZGVm
IHN0cnVjdCBfRXdrX1NldHRpbmdzIEV3a19TZXR0aW5nczsKIAogLyoqCisgKiBDcmVhdGVzIGEg
dHlwZSBuYW1lIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNs
aWVudCB3aGVuCisgKiB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBj
aGFuZ2VkIGJ5IFdlYktpdC4KKyAqCisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSBpZiBj
b250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQgb3IgQGMgRUlOQV9GQUxTRSBpZiBp
dCdzIGRpc2FibGVkCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19TZXR0aW5nc19Db250aW51b3Vz
X1NwZWxsX0NoZWNraW5nX0NoYW5nZV9DYikoRWluYV9Cb29sIGVuYWJsZSk7CisKKworLyoqCiAg
KiBFbmFibGVzL2Rpc2FibGVzIHRoZSBKYXZhc2NyaXB0IEZ1bGxzY3JlZW4gQVBJLiBUaGUgSmF2
YXNjcmlwdCBBUEkgYWxsb3dzCiAgKiB0byByZXF1ZXN0IGZ1bGwgc2NyZWVuIG1vZGUsIGZvciBt
b3JlIGluZm9ybWF0aW9uIHNlZToKICAqIGh0dHA6Ly9kdmNzLnczLm9yZy9oZy9mdWxsc2NyZWVu
L3Jhdy1maWxlL3RpcC9PdmVydmlldy5odG1sCkBAIC0yMTksNiArMjI4LDc2IEBAIEVBUEkgRWlu
YV9Cb29sIGV3a19zZXR0aW5nc19kbnNfcHJlZmV0Y2hpbmdfZW5hYmxlZF9zZXQoRXdrX1NldHRp
bmdzICpzZXR0aW5ncywKICAqLwogRUFQSSBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2Ruc19wcmVm
ZXRjaGluZ19lbmFibGVkX2dldChjb25zdCBFd2tfU2V0dGluZ3MgKnNldHRpbmdzKTsKIAorLyoq
CisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgdGhlIGNsaWVudCB3
aGVuCisgKiB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFuZ2Vk
IGJ5IFdlYktpdC4KKyAqCisgKiBTcGVjaWZ5aW5nIG9mIHRoaXMgY2FsbGJhY2sgaXMgbmVlZGVk
IGlmIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMKKyAqIG9u
Y2UgV2ViS2l0IGNoYW5nZXMgdGhpcyBzZXR0aW5nLgorICogSWYgdGhlIGFwcGxpY2F0aW9uIGlz
IG5vdCBpbnRlcmVzdGVkLCB0aGlzIGNhbGxiYWNrIGlzIG5vdCBzZXQuCisgKiBDaGFuZ2luZyBv
ZiB0aGlzIHNldHRpbmcgYXQgdGhlIFdlYktpdCBsZXZlbCBjYW4gYmUgbWFkZSBhcyBhIHJlc3Vs
dCBvZiBtb2RpZnlpbmcKKyAqIG9wdGlvbnMgaW4gYSBDb250ZXh0IE1lbnUgYnkgYSB1c2VyLgor
ICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayBmdW5jdGlvbiB0byBzZXQgb3IgQGMgTlVM
TCB0byBpbnZhbGlkYXRlIHRoZSBwcmV2aW91cyBvbmUKKyAqLworRUFQSSB2b2lkIGV3a19zZXR0
aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQoRXdrX1NldHRpbmdz
X0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIGNiKTsKKworLyoqCisgKiBRdWVy
aWVzIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZC4KKyAqCisgKiBAcmV0
dXJuIEBjIEVJTkFfVFJVRSBpZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQg
b3IgQGMgRUlOQV9GQUxTRSBpZiBpdCdzIGRpc2FibGVkCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3
a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KHZvaWQpOwor
CisvKioKKyAqIEVuYWJsZXMvZGlzYWJsZXMgY29udGludW91cyBzcGVsbCBjaGVja2luZy4KKyAq
CisgKiBBZGRpdGlvbmFsbHksIHRoaXMgZnVuY3Rpb24gY2FsbHMgYSBjYWxsYmFjayBmdW5jdGlv
biAoaWYgZGVmaW5lZCkgdG8gbm90aWZ5CisgKiB0aGUgY2xpZW50IGFib3V0IHRoZSBjaGFuZ2Ug
b2YgdGhlIHNldHRpbmcuCisgKiBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4K
KyAqCisgKiBAc2VlIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5n
ZV9jYl9zZXQKKyAqCisgKiBAcGFyYW0gZW5hYmxlIEBjIEVJTkFfVFJVRSB0byBlbmFibGUgY29u
dGludW91cyBzcGVsbCBjaGVja2luZyBvciBAYyBFSU5BX0ZBTFNFIHRvIGRpc2FibGUKKyAqLwor
RUFQSSB2b2lkIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
c2V0KEVpbmFfQm9vbCBlbmFibGUpOworCisvKioKKyAqIEdldHMgdGhlIHRoZSBsaXN0IG9mIGFs
bCBhdmFpbGFibGUgdGhlIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlcyB0byB1c2UuCisgKgorICog
QHNlZSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfc2V0Cisg
KgorICogQHJldHVybiB0aGUgbGlzdCB3aXRoIGF2YWlsYWJsZSBzcGVsbCBjaGVja2luZyBsYW5n
dWFnZXMsIG9yIEBjIE5VTEwgb24gZmFpbHVyZQorICogICAgICAgICB0aGUgRWluYV9MaXN0IGFu
ZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1c2UgZWluYV9zdHJpbmdzaGFyZV9k
ZWwoKQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlc19nZXQodm9pZCk7CisKKy8qKgorICogU2V0cyBAYSBsYW5ndWFnZXMgYXMgdGhlIGxp
c3Qgb2YgbGFuZ3VhZ2VzIHRvIHVzZSBieSBkZWZhdWx0IFdlYktpdAorICogaW1wbGVtZW50YXRp
b24gb2Ygc3BlbGxjaGVja2VyIGZlYXR1cmUgd2l0aCBFbmNoYW50IGxpYnJhcnkgc3VwcG9ydC4K
KyAqCisgKiBJZiBAbGFuZ3VhZ2VzIGlzIEBjIE5VTEwsIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGlz
IHVzZWQuCisgKiBJZiB0aGUgZGVmYXVsdCBsYW5ndWFnZSBjYW4gbm90IGJlIGRldGVybWluZWQg
dGhlbiBhbnkgYXZhaWxhYmxlIGRpY3Rpb25hcnkgd2lsbCBiZSB1c2VkLgorICoKKyAqIEBub3Rl
IFRoaXMgZnVuY3Rpb24gaW52YWxpZGF0ZXMgdGhlIHByZXZpb3VzbHkgc2V0IGxhbmd1YWdlcy4K
KyAqICAgICAgIFRoZSBkaWN0aW9uYXJpZXMgYXJlIHJlcXVlc3RlZCBhc3luY2hyb25vdXNseS4K
KyAqCisgKiBAcGFyYW0gbGFuZ3VhZ2VzIGEgbGlzdCBvZiBjb21tYSAoJywnKSBzZXBhcmF0ZWQg
bGFuZ3VhZ2UgY29kZXMKKyAqICAgICAgICBvZiB0aGUgZm9ybSAnZW5fVVMnLCBpZSwgbGFuZ3Vh
Z2VfVkFSSUFOVCwgbWF5IGJlIEBjIE5VTEwuCisgKi8KK0VBUEkgdm9pZCBld2tfc2V0dGluZ3Nf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfc2V0KGNvbnN0IGNoYXIgKmxhbmd1YWdl
cyk7CisKKy8qKgorICogR2V0cyB0aGUgdGhlIGxpc3Qgb2YgdGhlIHNwZWxsIGNoZWNraW5nIGxh
bmd1YWdlcyBpbiB1c2UuCisgKgorICogQHNlZSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdf
bGFuZ3VhZ2VzX2dldAorICogQHNlZSBFd2tfU2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzX2VuYWJsZWRfc2V0CisgKgorICogQHJldHVybiB0aGUgbGlzdCB3aXRoIHRoZSBzcGVsbCBj
aGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLAorICogICAgICAgICB0aGUgRWluYV9MaXN0IGFuZCBp
dHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1c2UgZWluYV9zdHJpbmdzaGFyZV9kZWwo
KQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlc19lbmFibGVkX2dldCh2b2lkKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2No
ZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hl
Y2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1ODQ3ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0
X2NoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXIuaCIKKworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorI2luY2x1ZGUgIldLVGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0
Q2hlY2tlci5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OworCisvLyBJbml0aWFsaXplcyB0aGUgY2xpZW50J3MgZnVuY3Rp
b25zIHRvIEBjIDAgdG8gYmUgc3VyZSB0aGF0IHRoZXkgYXJlIG5vdCBkZWZpbmVkLgorc3RhdGlj
IEV3a19UZXh0X0NoZWNrZXIgZXdrVGV4dENoZWNrZXJDYWxsYmFja3MgPSB7CisgICAgMCwgLy8g
dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQKKyAgICAwLCAvLyB1bmlxdWVfc3BlbGxfZG9j
dW1lbnRfdGFnX2Nsb3NlCisgICAgMCwgLy8gc3RyaW5nX3NwZWxsaW5nX2NoZWNrCisgICAgMCwg
Ly8gd29yZF9ndWVzc2VzX2dldAorICAgIDAsIC8vIHdvcmRfbGVhcm4KKyAgICAwIC8vIHdvcmRf
aWdub3JlCit9OworCisjZGVmaW5lIEVXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVf
TkFNRSwgTkFNRSkgIFwKK3ZvaWQgZXdrX3RleHRfY2hlY2tlcl8jI05BTUUjI19jYl9zZXQoVFlQ
RV9OQU1FIGNiKSAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgZXdrVGV4dENoZWNrZXJDYWxsYmFja3MuTkFNRSA9IGNi
OyAgICAgICAgICAgICAgICAgIFwKK30KKworLyoqCisgKiBBdHRhY2hlcyBzcGVsbGNoZWNrZXIg
ZmVhdHVyZS4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBUaGUgZGVmYXVsdCBzcGVsbGNoZWNr
ZXIgZmVhdHVyZSBpcyBiYXNlZCBvbiBFbmNoYW50IGxpYnJhcnkuCisgKiBDbGllbnQgbWF5IHVz
ZSBvd24gaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2VyIHByZXZpb3VzbHkgc2V0CisgKiB0
aHJvdWdoIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMuCisgKi8KK3ZvaWQgZXdrX3RleHRfY2hlY2tl
cl9jbGllbnRfYXR0YWNoKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplVGV4dENo
ZWNrZXJDbGllbnQgPSBmYWxzZTsKKyAgICBpZiAoZGlkSW5pdGlhbGl6ZVRleHRDaGVja2VyQ2xp
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBXS1RleHRDaGVja2VyQ2xpZW50IHRleHRDaGVj
a2VyQ2xpZW50ID0geworICAgICAgICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9u
LAorICAgICAgICAwLCAvLyBjbGllbnRJbmZvCisgICAgICAgIDAsIC8vIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdBbGxvd2VkCisgICAgICAgIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkLAorICAgICAgICBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQsCisgICAgICAg
IDAsIC8vIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZAorICAgICAgICAwLCAvLyBzZXRHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkCisgICAgICAgIHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcsCisgICAgICAg
IGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcsCisgICAgICAgIGNoZWNrU3BlbGxpbmdPZlN0cmlu
ZywKKyAgICAgICAgMCwgLy8gY2hlY2tHcmFtbWFyT2ZTdHJpbmcKKyAgICAgICAgMCwgLy8gc3Bl
bGxpbmdVSUlzU2hvd2luZworICAgICAgICAwLCAvLyB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5n
CisgICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQKKyAgICAg
ICAgMCwgLy8gdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nCisgICAgICAgIGd1ZXNz
ZXNGb3JXb3JkLAorICAgICAgICBsZWFybldvcmQsCisgICAgICAgIGlnbm9yZVdvcmQKKyAgICB9
OworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJnRleHRDaGVja2VyQ2xpZW50KTsKKworICAg
IGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IHRydWU7Cit9CisKKy8qCisgKiBHZXRz
IHRoZSBjbGllbnQncyBjYWxsYmFja3MuCisgKgorICogQGludGVybmFsCisgKgorICogVGhlIGNs
aWVudCd0IGNhbGxiYWNrcyBhcmUgbm90IGRlZmluZWQgYnkgZGVmYXVsdC4KKyAqIElmIHRoZSBj
bGllbnQgaGFzbid0IHNldCB0aGUgY2FsbGJhY2ssIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxiYWNr
IHdpbGwKKyAqIHJldHVybiBAYyAwIGFuZCB0aGUgZGVmYXVsdCBXZWJLaXQgaW1wbGVtZW50YXRp
b24gd2lsbCBiZSB1c2VkIGZvciB0aGlzCisgKiBmdW5jdGlvbmFsaXR5LgorICoKKyAqIEByZXR1
cm4gdGhlIHN0cnVjdCB3aXRoIHRoZSBjbGllbnQncyBjYWxsYmFja3MuCisgKi8KK0V3a19UZXh0
X0NoZWNrZXIqIGV3a190ZXh0X2NoZWNrZXJfY2FsbGJhY2tzX2dldCgpCit7CisgICAgcmV0dXJu
ICZld2tUZXh0Q2hlY2tlckNhbGxiYWNrczsKK30KKworI2Vsc2UKKworLy8gRGVmaW5lcyBhbiBl
bXB0eSBBUEkgdG8gZG8gbm90IGJyZWFrIGJ1aWxkLgorI2RlZmluZSBFV0tfVEVYVF9DSEVDS0VS
X0NBTExCQUNLX1NFVChUWVBFX05BTUUsIE5BTUUpICBcCit2b2lkIGV3a190ZXh0X2NoZWNrZXJf
IyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSkgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorI2VuZGlmIC8vIEVOQUJM
RShTUEVMTENIRUNLKQorCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9D
aGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0X0NiLCB1bmlxdWVfc3BlbGxfZG9j
dW1lbnRfdGFnX2dldCkKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0X0No
ZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19DbG9zZV9DYiwgdW5pcXVlX3NwZWxsX2Rv
Y3VtZW50X3RhZ19jbG9zZSkKK0VXS19URVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKEV3a19UZXh0
X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrX0NiLCBzdHJpbmdfc3BlbGxpbmdfY2hlY2sp
CitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vl
c3Nlc19HZXRfQ2IsIHdvcmRfZ3Vlc3Nlc19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm5fQ2IsIHdvcmRfbGVhcm4pCitFV0tfVEVY
VF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlX0NiLCB3
b3JkX2lnbm9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a190ZXh0X2NoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2Fl
YTg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3RleHRfY2hlY2tlci5oCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisg
KiBAZmlsZSBld2tfdGV4dF9jaGVja2VyLmgKKyAqIEBicmllZiBQcm92aWRlcyBBUEkgdG8gb3Zl
cndyaXRlIHRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24uCisg
KgorICogVGhlcmUgaXMgb25lIHNwZWxsY2hlY2tlciBvYmplY3QgcGVyIGFwcGxpY2F0aW9uIGFu
ZCBpdCdzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKiBJdCBhbGxvd3MgdG8gY2hlY2sgc3BlbGxp
bmcgaW4gdGhlIGVkaXRhYmxlIGFyZWFzLgorICogSWYgYXBwbGljYXRpb24gd2FudHMgdG8gZW5h
YmxlIHRoZSBmZWF0dXJlLCBBUEkgZnJvbSBld2tfc2V0dGluZ3MuaAorICogc2hvdWxkIGJlIHVz
ZWQuCisgKgorICogVGhlIGRlZmF1bHQgV2ViS2l0IHNwZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlv
biBpcyBiYXNlZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICogSXQgZG9lc24ndCBlbnN1cmUg
Z3JhbW1hciBjaGVja2luZy4gQXBwbGljYXRpb24gaXMgYWJsZSB0byBvdmVyd3JpdGUgdGhlIGRl
ZmF1bHQKKyAqIFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24gYnkgZGVmaW5pbmcg
aXRzIG93biBpbXBsZW1lbnRhdGlvbiBhbmQgc2V0dGluZworICogYXBwcm9wcmlhdGUgY2FsbGJh
Y2sgZnVuY3Rpb25zLgorICovCisKKyNpZm5kZWYgZXdrX3RleHRfY2hlY2tlcl9oCisjZGVmaW5l
IGV3a190ZXh0X2NoZWNrZXJfaAorCisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1
c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFt
ZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJldHVybiBhIHRhZyAoaWRlbnRpZmllcikg
d2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUuCisgKgorICogVW5pcXVlIHRhZ3MgaGVs
cCB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggb3RoZXIgb2JqZWN0cyB0aGF0IGFyZSBjaGVja2Vk
IGZvciBzcGVsbGluZyBtaXN0YWtlcy4KKyAqCisgKiBAcGFyYW0gbyB0aGUgdmlldyBvYmplY3Qg
dG8gZ2V0IHVuaXF1ZSB0YWcKKyAqCisgKiBAcmV0dXJuIHVuaXF1ZSB0YWcgZm9yIHRoZSBnaXZl
biBAYSBvIHZpZXcgb2JqZWN0CisgKi8KK3R5cGVkZWYgdWludDY0X3QgKCpFd2tfVGV4dF9DaGVj
a2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0X0NiKShjb25zdCBFdmFzX09iamVjdCAq
byk7CisKKy8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0
aW9uIHRvIGNsb3NlIHRoZSBwcnZpb3VzbHkgc2V0IHRhZy4KKyAqCisgKiBUaGlzIGNhbGxiYWNr
IHdpbGwgbm90aWZ5IHRoZSByZWNlaXZlciB0aGF0IHRoZSB1c2VyIGhhcyBmaW5pc2hlZCB3aXRo
IHRoZSB0YWdnZWQgZG9jdW1lbnQuCisgKgorICogQHBhcmFtIHRhZyB0aGUgdGFnIHRvIGJlIGNs
b3NlZAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9E
b2N1bWVudF9UYWdfQ2xvc2VfQ2IpKHVpbnQ2NF90IHRhZyk7CisKKy8qKgorICogRGVmaW5lcyBh
IHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNlYXJjaCBmb3IgYSBtaXNz
cGVsbGVkIHdvcmRzIGluIHRoZSBnaXZlbiBzdHJpbmcuCisgKgorICogQHBhcmFtIHRhZyB1bmlx
dWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVudCB0aGF0IEBh
IHRleHQgaXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBpbiBtb3N0IGNhc2VzIG5vdCBuZWNlc3Nh
cmlseSwganVzdCBmb3IgaWdub3JlZCB3b3JkLAorICogICAgICAgIEBjIDAgY2FuIGJlIHBhc3Nl
ZCBpbiBmb3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBkb2N1bWVudAor
ICogQHBhcmFtIHRleHQgdGhlIHRleHQgY29udGFpbmluZyB0aGUgd29yZHMgdG8gc3BlbGxjaGVj
aworICogQHBhcmFtIG1pc3NwZWxsaW5nX2xvY2F0aW9uIGEgcG9pbnRlciB0byBzdG9yZSB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBtaXNzcGVsbGVkIEBhIHRleHQsIEBjIC0xIGlmIHRoZSBAYSB0ZXh0
IGlzIGNvcnJlY3QKKyAqIEBwYXJhbSBtaXNzcGVsbGluZ19sZW5ndGggYSBwb2ludGVyIHRvIHN0
b3JlIHRoZSBsZW5ndGggb2YgbWlzc3BlbGxlZCBAYSB0ZXh0LCBAYyAwIGlmIHRoZSBAYSB0ZXh0
IGlzIGNvcnJlY3QKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdf
U3BlbGxpbmdfQ2hlY2tfQ2IpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqdGV4dCwgaW50MzJf
dCAqbWlzc3BlbGxpbmdfbG9jYXRpb24sIGludDMyX3QgKm1pc3NwZWxsaW5nX2xlbmd0aCk7CisK
Ky8qKgorICogRGVmaW5lcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRv
IGdldCBhIGxpc3Qgb2Ygc3VnZ2VzdGVkIHNwZWxsaW5ncyBmb3IgYSBtaXNzcGVsbGVkIEBhIHdv
cmQuCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hl
Y2tlciB3aGljaCBkb2N1bWVudCB0aGF0IEBhIHRleHQgaXMgYXNzb2NpYXRlZCwKKyAqICAgICAg
ICBAYyAwIGNhbiBiZSBwYXNzZWQgZm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRp
Y3VsYXIgZG9jdW1lbnQKKyAqIEBwYXJhbSB3b3JkIHRoZSB3b3JkIHRvIGdldCBndWVzc2VzCisg
KiBAcmV0dXJuIGEgbGlzdCBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5ncyAoYXMgY2hh
ciopIGFuZAorICogICAgICAgICBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGRlc3Ryb3lpbmcg
dGhlbS4KKyAqLwordHlwZWRlZiBFaW5hX0xpc3QgKigqRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1
ZXNzZXNfR2V0X0NiKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKndvcmQpOworCisvKioKKyAq
IFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBhZGQgdGhlIHdvcmQgdG8gdGhlIHNwZWxsIGNo
ZWNrZXIgZGljdGlvbmFyeS4KKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5
IHRoZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRvY3VtZW50IHRoYXQgQGEgdGV4dCBpcyBhc3NvY2lh
dGVkLAorICogICAgICAgIEBjIDAgY2FuIGJlIHBhc3NlZCBmb3IgdGV4dCBub3QgYXNzb2NpYXRl
ZCB3aXRoIGEgcGFydGljdWxhciBkb2N1bWVudAorICogQHBhcmFtIHdvcmQgdGhlIHdvcmQgdG8g
YWRkCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfV29yZF9MZWFybl9DYiko
dWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp3b3JkKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJh
Y2sgZnVuY3Rpb24gdG8gdGVsbCB0aGUgc3BlbGwgY2hlY2tlciB0byBpZ25vcmUgYSBnaXZlbiB3
b3JkLgorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNo
ZWNrZXIgd2hpY2ggZG9jdW1lbnQgdGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAgICAg
ICAgQGMgMCBjYW4gYmUgcGFzc2VkIGZvciB0ZXh0IG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0
aWN1bGFyIGRvY3VtZW50CisgKiBAcGFyYW0gd29yZCB0aGUgd29yZCB0byBpZ25vcmUKKyAqLwor
dHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYikodWludDY0X3Qg
dGFnLCBjb25zdCBjaGFyICp3b3JkKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rp
b24gdG8gZ2V0IGEgdW5pcXVlIHNwZWxsIGRvY3VtZW50IHRhZy4KKyAqCisgKiBAcGFyYW0gY2Ig
YSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBX
ZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2No
ZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXRfY2Jfc2V0KEV3a19UZXh0X0NoZWNr
ZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19HZXRfQ2IgY2IpOworCisvKioKKyAqIFNldHMg
YSBjYWxsYmFjayBmdW5jdGlvbiB0byBjbG9zZSBhIHVuaXF1ZSBzcGVsbCBkb2N1bWVudCB0YWcu
CisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJl
c3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VB
UEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2Vf
Y2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19DbG9zZV9D
YiBjYik7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNlYXJjaCBmb3Ig
YSBtaXNzcGVsbGVkIHdvcmRzIGluIHRoZSBnaXZlbiBzdHJpbmcuCisgKgorICogQHBhcmFtIGNi
IGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQg
V2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9j
aGVja2VyX3N0cmluZ19zcGVsbGluZ19jaGVja19jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9TdHJp
bmdfU3BlbGxpbmdfQ2hlY2tfQ2IgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5j
dGlvbiB0byBnZXQgYW4gYXJyYXkgb2Ygc3VnZ2VzdGVkIHNwZWxsaW5ncyBmb3IgYSBtaXNzcGVs
bGVkIHdvcmQuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBO
VUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9u
CisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3dvcmRfZ3Vlc3Nlc19nZXRfY2Jfc2V0
KEV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldF9DYiBjYik7CisKKy8qKgorICogU2V0
cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFkZCB0aGUgd29yZCB0byB0aGUgc3BlbGwgY2hlY2tl
ciBkaWN0aW9uYXJ5LgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3Ig
QGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRh
dGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl93b3JkX2xlYXJuX2NiX3NldChF
d2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm5fQ2IgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxs
YmFjayBmdW5jdGlvbiB0byB0ZWxsIHRoZSBzcGVsbCBjaGVja2VyIHRvIGlnbm9yZSBhIGdpdmVu
IHdvcmQuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxM
IHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisg
Ki8KK0VBUEkgdm9pZCBld2tfdGV4dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3NldChFd2tfVGV4
dF9DaGVja2VyX1dvcmRfSWdub3JlX0NiIGNiKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9Cisj
ZW5kaWYKKyNlbmRpZiAvLyBld2tfdGV4dF9jaGVja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwZmYwMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJf
cHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ft
c3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a190ZXh0
X2NoZWNrZXJfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCisK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCisK
Ky8qKgorICogQGJyaWVmIFN0cnVjdHVyZSBrZWVwcyBjbGllbnQncyBjYWxsYmFjayBmdW5jdGlv
bnMuCisgKgorICogQGludGVybmFsCisgKi8KK3N0cnVjdCBfRXdrX1RleHRfQ2hlY2tlciB7Cisg
ICAgRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9DYiB1bmlx
dWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldDsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9T
cGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2VfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9z
ZTsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19DYiBzdHJpbmdf
c3BlbGxpbmdfY2hlY2s7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNfR2V0X0Ni
IHdvcmRfZ3Vlc3Nlc19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0NiIHdv
cmRfbGVhcm47CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYiB3b3JkX2lnbm9y
ZTsKK307Cit0eXBlZGVmIF9Fd2tfVGV4dF9DaGVja2VyIEV3a19UZXh0X0NoZWNrZXI7CisKK0V3
a19UZXh0X0NoZWNrZXIqIGV3a190ZXh0X2NoZWNrZXJfY2FsbGJhY2tzX2dldCgpOworCisvLyBN
YWtlcyBpdCB2aXNpYmxlIGZvciBXVFIuCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9jbGll
bnRfYXR0YWNoKCk7CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKyNlbmRpZiAvLyBl
d2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1RleHRDaGVja2VyRWZsLmNwcAppbmRleCA3NWE4YTk5Li42MzkxOGJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcApAQCAtMSw1ICsx
LDcgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBv
cnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjksMTAgQEAK
ICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgogCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCisjZW5kaWYKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTM3LDkxICs0MiwxODUgQEAgc3RhdGljIFRleHRDaGVja2Vy
U3RhdGUgdGV4dENoZWNrZXJTdGF0ZTsKIAogY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENo
ZWNrZXI6OnN0YXRlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOworICAg
IGlmIChkaWRJbml0aWFsaXplU3RhdGUpCisgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRl
OworCisgICAgV2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2xpZW50KCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGNsaWVu
dC5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0
cnVlOworI2VuZGlmCiAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CiB9CiAKIGJvb2wgVGV4
dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dl
ZCgpOworI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hl
Y2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRleHRD
aGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVO
QUJMRShTUEVMTENIRUNLKQorICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7CisgICAgV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworI2VuZGlmCiB9CiAKLXZv
aWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCkKK3ZvaWQgVGV4
dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVD
SykKKyAgICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPT0gaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRl
LmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKKyAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tl
cjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgLyplbmFi
bGVkKi8pCit2b2lkIFRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRT
dGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbmFi
bGVkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFi
bGVkU3RhdGVDaGFuZ2VkKGJvb2wgLyplbmFibGVkKi8pCit2b2lkIFRleHRDaGVja2VyOjpncmFt
bWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3Rh
dGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGVuYWJsZWQpOworI2VuZGlmCiB9CiAKLWludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1
ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KikKK2ludDY0X3QgVGV4dENoZWNrZXI6OnVu
aXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVudFRhZyhwYWdlKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAK
LXZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCkKK3Zv
aWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWco
dGFnKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhZyk7CisjZW5kaWYKIH0KIAotdm9pZCBU
ZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFyKiwg
dWludDMyX3QsIGludDMyX3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0
LCB1aW50MzJfdCBsZW5ndGgsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3Qm
IG1pc3NwZWxsaW5nTGVuZ3RoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVj
a1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRleHQsIGxlbmd0aCks
IG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0KTsKKyAg
ICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKKyAgICBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdMb2Nh
dGlvbik7CisgICAgVU5VU0VEX1BBUkFNKG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyNlbmRpZgogfQog
Ci12b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBV
Q2hhciosIHVpbnQzMl90LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQzMl90
JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2
NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgs
IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJhZEdyYW1t
YXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCkuY2hlY2tHcmFtbWFyT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3Ry
aW5nKHRleHQsIGxlbmd0aCksIGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJh
ZEdyYW1tYXJMZW5ndGgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRh
Zyk7CisgICAgVU5VU0VEX1BBUkFNKHRleHQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwor
ICAgIFVOVVNFRF9QQVJBTShncmFtbWFyRGV0YWlscyk7CisgICAgVU5VU0VEX1BBUkFNKGJhZEdy
YW1tYXJMb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGJhZEdyYW1tYXJMZW5ndGgpOworI2Vu
ZGlmCiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc3BlbGxpbmdVSUlzU2hvd2luZygpOwor
I2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6
dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRD
aGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3QsIGNvbnN0
IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxs
ZWRXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVk
V29yZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQor
ICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZChzcGVsbERvY3VtZW50VGFnLCBtaXNzcGVsbGVkV29yZCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKKyAgICBVTlVTRURfUEFSQU0o
bWlzc3BlbGxlZFdvcmQpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhpbnQ2NF90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBH
cmFtbWFyRGV0YWlsJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgYmFkR3Jh
bW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KHNwZWxsRG9jdW1lbnRUYWcsIGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CisgICAgVU5VU0VEX1BBUkFN
KGJhZEdyYW1tYXJQaHJhc2UpOworICAgIFVOVVNFRF9QQVJBTShncmFtbWFyRGV0YWlsKTsKKyNl
bmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90LCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit2b2lkIFRleHRD
aGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiAsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2Vi
VGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVsbERvY3Vt
ZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9j
dW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsKKyAgICBVTlVTRURfUEFSQU0oZ3Vl
c3Nlcyk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qs
IGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsK
KyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3QsIGNvbnN0
IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1
bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CisgICAgVU5VU0VEX1BBUkFNKHdvcmQpOworI2Vu
ZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtl
L0ZpbmRFbmNoYW50LmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OWM3MWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UKQEAgLTAsMCArMSw0MyBAQAorIyAtIFRy
eSB0byBmaW5kIEVuY2hhbnQKKyMgT25jZSBkb25lLCB0aGlzIHdpbGwgZGVmaW5lCisjCisjICBF
TkNIQU5UX0lOQ0xVREVfRElSUyAtIHRoZSBFbmNoYW50IGluY2x1ZGUgZHJlY3RvcmllcworIyAg
RU5DSEFOVF9MSUJSQVJJRVMgLSBsaW5rIHRoZXNlIHRvIHVzZSBFbmNoYW50CisjCisjIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTCisjIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1Ig
SVRTCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOwor
IyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwKKyMgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyMgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorIyBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworRklORF9QQUNLQUdF
KFBrZ0NvbmZpZykKK1BLR19DSEVDS19NT0RVTEVTKFBDX0VOQ0hBTlQgZW5jaGFudCkKKworRklO
RF9QQVRIKEVOQ0hBTlRfSU5DTFVERV9ESVJTCisgICAgTkFNRVMgZW5jaGFudC5oCisgICAgUEFU
SFMgJHtQQ19FTkNIQU5UX0lOQ0xVREVESVJ9CisgICAgICAgICAgJHtQQ19FTkNIQU5UX0lOQ0xV
REVfRElSU30KKykKKworRklORF9MSUJSQVJZKEVOQ0hBTlRfTElCUkFSSUVTCisgICAgTkFNRVMg
ZW5jaGFudAorICAgIFBBVEhTICR7UENfRU5DSEFOVF9MSUJESVJ9CisgICAgICAgICAgJHtQQ19F
TkNIQU5UX0xJQlJBUllfRElSU30KKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25z
RWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggYjI3NzFlOS4u
ZDg4MmQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIGIv
U291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTgyLDYgKzgyLDcgQEAgV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFR0lPTlMgT04pCiBXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgT04pCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hBRE9XX0RPTSBPTikKIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFSRURfV09SS0VSUyBPTikK
K1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TUEVMTENIRUNLIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1RPVUNIX0VWRU5UUyBPTikK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WSUJSQVRJT04gT04pCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVklERU8gT04pCkBAIC0xNzgs
MyArMTc5LDcgQEAgSUYgKFdURl9VU0VfVElMRURfQkFDS0lOR19TVE9SRSkKICAgRklORF9QQUNL
QUdFKE9wZW5HTCBSRVFVSVJFRCkKIEVORElGKCkKIAorSUYgKEVOQUJMRV9TUEVMTENIRUNLKQor
ICAgICAgRklORF9QQUNLQUdFKEVuY2hhbnQgUkVRVUlSRUQpCisgICAgICBBRERfREVGSU5JVElP
TlMoLURFTkFCTEVfU1BFTExDSEVDSz0xKQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2Nt
YWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNt
YWtlCmluZGV4IGYxZDg2NTkuLmI3Zjc1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJL
aXRGZWF0dXJlcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UK
QEAgLTk4LDYgKzk4LDcgQEAgTUFDUk8gKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgV0VCS0lU
X09QVElPTl9ERUZJTkUoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCAiVG9nZ2xlIFNjcmlwdGVkIFNw
ZWVjaCBBUEkgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9T
SEFET1dfRE9NICJUb2dnbGUgU2hhZG93IERPTSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lUX09Q
VElPTl9ERUZJTkUoRU5BQkxFX1NIQVJFRF9XT1JLRVJTICJUb2dnbGUgU2hhcmVkV29ya2VycyBz
dXBwb3J0IiBPRkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NQRUxMQ0hFQ0sg
IlRvZ2dsZSBTcGVsbGNoZWNraW5nIHN1cHBvcnQgKHJlcXVpcmVzIEVuY2hhbnQpIiBPRkYpCiAg
ICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NRTF9EQVRBQkFTRSAiVG9nZ2xlIFNRTCBE
YXRhYmFzZSBTdXBwb3J0IiBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU1RZ
TEVfU0NPUEVEICJUb2dnbGUgPHN0eWxlIHNjb3BlZD4gc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJ
VF9PUFRJT05fREVGSU5FKEVOQUJMRV9TVkcgIlRvZ2dsZSBTVkcgc3VwcG9ydCIgT04pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZSBiL1NvdXJjZS9jbWFrZWNvbmZpZy5o
LmNtYWtlCmluZGV4IDNmYjU1NjIuLjIwNTA1Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZWNv
bmZpZy5oLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCkBAIC05NCw2ICs5
NCw3IEBACiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0hBRE9XX0RPTQogI2NtYWtlZGVmaW5lMDEg
RU5BQkxFX1NIQVJFRF9XT1JLRVJTCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU01PT1RIX1NDUk9M
TElORworI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NQRUxMQ0hFQ0sKICNjbWFrZWRlZmluZTAxIEVO
QUJMRV9TUUxfREFUQUJBU0UKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TVFlMRV9TQ09QRUQKICNj
bWFrZWRlZmluZTAxIEVOQUJMRV9TVkcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168945</attachid>
            <date>2012-10-16 07:43:57 -0700</date>
            <delta_ts>2012-10-17 00:01:16 -0700</delta_ts>
            <desc>change API to more convenient names </desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>55780</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">CmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggNTljODNhOS4uZDUyNzY5
YiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBA
CisyMDEyLTEwLTE1ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcu
Y29tPiwgTWljaGFsIFJvaiA8bS5yb2pAc2FzbXVuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZM
XSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNraW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTg1NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERlZmluZSBTUEVMTENIRUNLIG1hY3Jv
IGFuZCBlbmFibGUgaXQgZm9yIFdLMi1FZmwuCisgICAgICAgIFRoZSBzcGVsbGNoZWNraW5nIGlt
cGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBFbmNoYW50IGxpYnJhcnkuCisgICAgICAgIEl0
IGNhbiBiZSB1c2VkIGJ5IG90aGVyIFdlYktpdCBwb3J0cy4KKworICAgICAgICAqIFNvdXJjZS9j
bWFrZS9GaW5kRW5jaGFudC5jbWFrZTogQWRkZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09w
dGlvbnNFZmwuY21ha2U6IEVuYWJsZSBzcGVsbGNoZWNraW5nIGZlYXR1cmUgZm9yIFdlYktpdDIt
RUZMLgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZTogRGVmaW5l
IHRoZSBTUEVMTENIRUNLIG1hY3JvLgorICAgICAgICAqIFNvdXJjZS9jbWFrZWNvbmZpZy5oLmNt
YWtlOiBBZGQgdGhlIGZlYXR1cmUuCisKIDIwMTItMTAtMTYgIFNpbW9uIEhhdXNtYW5uICA8c2lt
b24uaGF1c21hbm5AZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0gRml4IHN1cHBvcnQgZm9yIHNp
bGVudCBidWlsZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmYzEyY2QwLi43NGMzYzA0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTItMTAtMTUgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWpr
b3dza2lAc2Ftc3VuZy5jb20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBbV0syXVtFRkxdIEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9y
bUVmbC5jbWFrZToKKyAgICAgICAgQWRkIGVuY2hhbnQtcmVsYXRlZCBjb21waWxlciBmbGFnczog
aGVhZGVyIHBhdGhzIGFuZCB0aGUgbGlicmFyeSBmbGFnLgorCiAyMDEyLTEwLTE2ICBNaWtlIFdl
c3QgIDxta3dzdEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogV2hpdGVs
aXN0IHNhZmUgc3R5bGVzIGZvciAnY29uc29sZS5sb2coJyVjLi4uJywgLi4uKScuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRWZsLmNtYWtlCmluZGV4IGE2ODA3MmYuLjgwMDcyZmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RWZsLmNtYWtlCkBAIC04NSw2ICs4NSw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCiAgIHBsYXRmb3JtL3Bvc2l4L0ZpbGVT
eXN0ZW1QT1NJWC5jcHAKICAgcGxhdGZvcm0vdGV4dC9lZmwvVGV4dEJyZWFrSXRlcmF0b3JJbnRl
cm5hbElDVUVmbC5jcHAKKyAgcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFu
dC5jcHAKICkKIAogSUYgKEVOQUJMRV9CQVRURVJZX1NUQVRVUykKQEAgLTMyNiwzICszMjcsMTIg
QEAgSUYgKEVOQUJMRV9XRUJfQVVESU8pCiAgIElOU1RBTEwoRklMRVMgJHtXRUJfQVVESU9fREFU
QX0gREVTVElOQVRJT04gJHtXRUJfQVVESU9fRElSfSkKICAgQUREX0RFRklOSVRJT05TKC1EVU5J
TlNUQUxMRURfQVVESU9fUkVTT1VSQ0VTX0RJUj0iJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vYXVk
aW8vcmVzb3VyY2VzIikKIEVORElGICgpCisKK0lGIChFTkFCTEVfU1BFTExDSEVDSykKKyAgICBM
SVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgJHtFTkNIQU5U
X0lOQ0xVREVfRElSU30KKyAgICApCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMK
KyAgICAgICAgJHtFTkNIQU5UX0xJQlJBUklFU30KKyAgICApCitFTkRJRigpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNzkyOGE2MC4uNTQ0MTJlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0x
MC0xNSAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4sIE1p
Y2hhbCBSb2ogPG0ucm9qQHNhbXN1bmcuY29tPgorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9m
IHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGZvciBXZWJLaXQyLUVG
TCB0aGF0IGlzIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKworICAgICAgICBBZGRpdGlvbmFs
bHkgdGhlIHBhdGNoIHByb3ZpZGVzIEFQSSB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgV2ViS2l0
CisgICAgICAgIHNwZWxsY2hlY2tlciBpbXBsZW1lbnRhdGlvbiBhcyBFbmNoYW50IGxpYnJhcnkg
ZG9lc24ndCBlbnN1cmUgZ3JhbW1hciBjaGVja2luZy4KKyAgICAgICAgQXBwbGljYXRpb24gaXMg
YWJsZSB0byBvdmVyd3JpdGUgaXQgYnkgZGVmaW5pbmcgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBh
bmQKKyAgICAgICAgc2V0dGluZyBhcHByb3ByaWF0ZSBjYWxsYmFjayBmdW5jdGlvbnMuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgQWRkIGVuY2hhbnQtcmVsYXRlZCBj
b21waWxlciBmbGFnczogaGVhZGVyIHBhdGhzIGFuZCB0aGUgbGlicmFyeSBmbGFnLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaDoKKyAgICAgICAgQWRkIGV3a190ZXh0
X2NoZWNrZXIuaCB0byB0aGUgbWFpbiBXZWJLaXQyLUVGTCdzIGhlYWRlciB0byBiZSBhdmFpbGFi
bGUgZm9yIGFwcGxpY2F0aW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL1dlYktp
dFRleHRDaGVja2VyLmNwcDogQWRkZWQuCisgICAgICAgIEltcGxlbWVudCB0aGUgY2FsbGJhY2tz
IGZ1bmN0aW9ucyBvZiBXS1RleHRDaGVja2VyLgorCisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChX
ZWJLaXQ6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJL
aXQ6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpjbG9zZVNwZWxs
RG9jdW1lbnRXaXRoVGFnKToKKyAgICAgICAgKFdlYktpdDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5n
KToKKyAgICAgICAgKFdlYktpdDo6Z3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0Ojps
ZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjppZ25vcmVXb3JkKToKKyAgICAgICAgVGhvc2Ug
ZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBnaXZlbiBhcyBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIFdL
VGV4dENoZWNrZXIncyBjbGllbnQuCisgICAgICAgIFRoZXkgY2hvb3NlIGJldHdlZW4gV2ViS2l0
J3Mgc3BlbGxpbmcgaW1wbGVtZW50YXRpb24gYW5kIGNsaWVudCdzIG9uZXMuCisKKyAgICAgICAg
KFdlYktpdDo6YXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChXZWJL
aXQ6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAoV2ViS2l0Ojpsb2Fk
ZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgVGhleSBhcmUgdXNlZCBieSBld2tf
c2V0dGluZ3MuY3BwIGZpbGUgYW5kIGFsbG93IHRvIGRvIG5vdAorICAgICAgICBleHBvc2UgJ3Rl
eHRDaGVja2VyRW5jaGFudCcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRU
ZXh0Q2hlY2tlci5oOiBBZGRlZC4KKyAgICAgICAgRGVmaW5lIHRoZSBmdW5jdGlvbnMgd2hpY2gg
Y2hvb3NlIGJldHdlZW4gV2ViS2l0J3Mgc3BlbGxpbmcgaW1wbGVtZW50YXRpb24gYW5kCisgICAg
ICAgIHRoZSBjbGllbnQncyBvbmVzLgorCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAgICAgICAgKF9Fd2tfQ29udGV4dDo6
X0V3a19Db250ZXh0KToKKyAgICAgICAgQXR0YWNoIHRoZSBzcGVsbGNoZWNrZXIgZmVhdHVyZSBm
b3IgdGhlIGNvbnRleHQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyLmNwcDogQWRkZWQuCisgICAgICAgIChld2tfdGV4dF9jaGVja2VyX2NhbGxiYWNrc19n
ZXQpOgorICAgICAgICBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBnZXQgdGhlIGNsaWVudCdzIGNh
bGxiYWNrIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0
X2NoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSBBUEkgdG8gc2V0IHRoZSBjbGllbnQn
cyBvd24gc3BlbGxpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChfRXdrX1Rl
eHRfQ2hlY2tlcik6CisgICAgICAgIERlZmluZSB0aGUgc3RydWN0IHdpdGggdGhlIGNsaWVudCdz
IGNhbGxiYWNrcyByZXNwb25pc2JsZSBmb3Igc3BlbGxpbmcuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwOgorICAgICAgICAob25Db250aW51b3VzU3BlbGxD
aGVja2luZ0lkbGVyKToKKyAgICAgICAgVGhlIGFwcGxpY2F0aW9uIGlzIG5vdGlmaWVkIGFib3V0
IHRoZSBzcGVsbGluZyBzZXR0aW5nIGNoYW5nZSBvbiBpZGxlcgorICAgICAgICB0byBkbyBub3Qg
YmxvY2sgV2ViS2l0LgorICAgICAgICBUaGUgdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcg
bWF5IGJlIGNoYW5nZWQgdGhyb3VnaCB0aGUgY29udGV4dCBtZW51IG9wdGlvbi4KKworICAgICAg
ICAoc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldFVwZGF0ZSk6CisgICAgICAgIFRoZSBkaWN0aW9u
YXJpZXMgYXJlIHJlcXVlc3RlZCBvbiAnaWRsZXInIHRvIGRvIG5vdCBibG9jayBXZWJLaXQuCisK
KyAgICAgICAgKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQpOgorICAgICAgICBTZXQgdGhlIGxh
bmd1YWdlcy4KKworICAgICAgICAoZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfY2hhbmdlX2NiX3NldCk6CisgICAgICAgIFNldCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNl
ZCB0byBub3RpZnkgdGhlIGNsaWVudCB3aGVuIHRoZSBzcGVsbGluZworICAgICAgICBzZXR0aW5n
IHdhcyBjaGFuZ2VkIGJ5IFdlYktpdC4KKworICAgICAgICAoZXdrX3NldHRpbmdzX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQpOgorICAgICAgICAoZXdrX3NldHRpbmdzX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQpOgorICAgICAgICBBUEkgdG8gc2V0
L2dldCB0aGUgY29udGludW91cyBzcGVsbCBjaGVja2luZy4KKworICAgICAgICAoZXdrX3NldHRp
bmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KToKKyAgICAgICAgKGV3
a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KToKKyAgICAgICAgKGV3a19z
ZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KToKKyAgICAgICAgQVBJIHRvIGdl
dC9zZXQgbGFuZ3VhZ2VzIHRvIHVzZSBieSBXZWJLaXQgaW1wbGVtZW50YXRpb24gYmFzZWQgb24g
RW5jaGFudCBsaWJyYXJ5LgorCisgICAgICAgICogVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVm
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzdGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5n
RW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcpOgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKTogUmVtb3ZlIFdlYkNvcmUgbmFtYXNw
YWNlIGFzIGl0J3MgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGUgd2hvbGUgZmlsZS4KKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29y
ZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpsZWFybldvcmQpOgorICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlcjo6aWdub3JlV29yZCk6CisgICAgICAgIFRob3NlIGNhbGwgV0tU
ZXh0Q2hlY2tlciBjbGllbnQncyBtZXRob2RzLgorCiAyMDEyLTEwLTE2ICBTdWRhcnNhbmEgTmFn
aW5lbmkgIDxzdWRhcnNhbmEubmFnaW5lbmlAaW50ZWwuY29tPgogCiAgICAgICAgIFtXSzJdW0VG
TF0gQ3Jhc2ggaW4gX2V3a192aWV3X29uX2Zhdmljb25fY2hhbmdlZCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCmluZGV4IDNlZWE5NDMuLmQyZDUyYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC00Niw2ICs0Niw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL05ldHdvcmtJbmZvUHJvdmlkZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvVmlicmF0aW9u
UHJvdmlkZXIuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3Bw
CiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcAogICAgIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtNjUsNiArNjYsNyBAQCBMSVNUKEFQUEVO
RCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9p
dGVtLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19yZXNvdXJjZS5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3RleHRfY2hlY2tlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3JlcXVlc3Qu
Y3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmNwcApAQCAtMTM2LDYgKzEzOCw3
IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9lZmwiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCisg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvZW5jaGFudCIKICAgICAiJHtXRUJDT1JF
X0RJUn0vc3ZnL2dyYXBoaWNzIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvZWZsIgogICAg
ICIke1dFQktJVDJfRElSfS9TaGFyZWQvc291cCIKQEAgLTI0Miw2ICsyNDUsNyBAQCBTRVQgKEVX
ZWJLaXQyX0hFQURFUlMKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19yZXNvdXJjZS5oIgogICAgICIke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgiCisg
ICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4
dF9jaGVja2VyLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdG91Y2guaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oIgpAQCAtMzQ5
LDMgKzM1MywzMyBAQCBJRiAoRU5BQkxFX0FQSV9URVNUUykKICAgICBBRERfTElCUkFSWShld2sy
VW5pdFRlc3RJbmplY3RlZEJ1bmRsZVNhbXBsZSBTSEFSRUQgJHtURVNUX0lOSkVDVEVEX0JVTkRM
RV9ESVJ9L2luamVjdGVkX2J1bmRsZV9zYW1wbGUuY3BwKQogICAgIFRBUkdFVF9MSU5LX0xJQlJB
UklFUyhld2syVW5pdFRlc3RJbmplY3RlZEJ1bmRsZVNhbXBsZSAke1dlYktpdDJfTElCUkFSWV9O
QU1FfSkKIEVORElGICgpCisKK0lGIChFTkFCTEVfSU5TUEVDVE9SKQorICAgIFNFVChXSzJfV0VC
X0lOU1BFQ1RPUl9ESVIgJHtDTUFLRV9CSU5BUllfRElSfS9XZWJLaXQyL2VmbC93ZWJpbnNwZWN0
b3IpCisgICAgU0VUKFdLMl9XRUJfSU5TUEVDVE9SX0lOU1RBTExfRElSICR7Q01BS0VfSU5TVEFM
TF9QUkVGSVh9LyR7V2ViS2l0Ml9MSUJSQVJZX05BTUV9LSR7UFJPSkVDVF9WRVJTSU9OX01BSk9S
fSkKKyAgICBBRERfREVGSU5JVElPTlMoLURXSzJfV0VCX0lOU1BFQ1RPUl9ESVI9IiR7V0syX1dF
Ql9JTlNQRUNUT1JfRElSfSIpCisgICAgQUREX0RFRklOSVRJT05TKC1EV0syX1dFQl9JTlNQRUNU
T1JfSU5TVEFMTF9ESVI9IiR7V0syX1dFQl9JTlNQRUNUT1JfSU5TVEFMTF9ESVJ9L3dlYmluc3Bl
Y3RvciIpCisgICAgQUREX0NVU1RPTV9UQVJHRVQoCisgICAgICAgIHdrMi13ZWItaW5zcGVjdG9y
LXJlc291cmNlcyBBTEwKKyAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHlf
ZGlyZWN0b3J5ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9mcm9udC1lbmQgJHtXSzJfV0VCX0lO
U1BFQ1RPUl9ESVJ9CisgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5ICR7
V0VCQ09SRV9ESVJ9L0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyAke1dLMl9XRUJf
SU5TUEVDVE9SX0RJUn0KKyAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHkg
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cyAke1dLMl9XRUJfSU5TUEVDVE9SX0RJUn0vSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisg
ICAgICAgIERFUEVORFMgJHtXZWJDb3JlX0xJQlJBUllfTkFNRX0KKyAgICApCisgICAgSU5TVEFM
TChESVJFQ1RPUlkgJHtXSzJfV0VCX0lOU1BFQ1RPUl9ESVJ9CisgICAgICAgIERFU1RJTkFUSU9O
ICR7V0syX1dFQl9JTlNQRUNUT1JfSU5TVEFMTF9ESVJ9CisgICAgICAgIEZJTEVTX01BVENISU5H
IFBBVFRFUk4gIiouanMiCisgICAgICAgICAgICAgICAgICAgICAgIFBBVFRFUk4gIiouaHRtbCIK
KyAgICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTiAiKi5jc3MiCisgICAgICAgICAgICAgICAg
ICAgICAgIFBBVFRFUk4gIiouZ2lmIgorICAgICAgICAgICAgICAgICAgICAgICBQQVRURVJOICIq
LnBuZyIpCitFTkRJRiAoKQorCitJRiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisgICAgTElTVChBUFBF
TkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICR7RU5DSEFOVF9JTkNMVURF
X0RJUlN9CisgICAgKQorICAgIExJU1QoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCisgICAgICAg
ICR7RU5DSEFOVF9MSUJSQVJJRVN9CisgICAgKQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5kZXggN2QyZjg3OS4uMTdhZmIxMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC00NCw2ICs0NCw3
IEBACiAjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfaXRlbS5oIgogI2luY2x1ZGUgImV3a19yZXNv
dXJjZS5oIgogI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2No
ZWNrZXIuaCIKICNpbmNsdWRlICJld2tfdG91Y2guaCIKICNpbmNsdWRlICJld2tfdXJsX3JlcXVl
c3QuaCIKICNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmMzljNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApAQCAt
MCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisg
KiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRUZXh0Q2hlY2tlci5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUg
IldLTXV0YWJsZUFycmF5LmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tfc2V0
dGluZ3MuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRl
IDxFaW5hLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBPd25QdHI8V2ViQ29yZTo6
VGV4dENoZWNrZXJFbmNoYW50PiB0ZXh0Q2hlY2tlckVuY2hhbnQgPSBXZWJDb3JlOjpUZXh0Q2hl
Y2tlckVuY2hhbnQ6OmNyZWF0ZSgpOworCitzdGF0aWMgRXdrX1RleHRfQ2hlY2tlciogZXdrVGV4
dENoZWNrZXJDYWxsYmFja3MgPSBld2tfdGV4dF9jaGVja2VyX2NhbGxiYWNrc19nZXQoKTsKKwor
Ym9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKikKK3sKKyAg
ICByZXR1cm4gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9n
ZXQoKTsKK30KKwordm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBl
bmFibGVkLCBjb25zdCB2b2lkKikKK3sKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVs
bF9jaGVja2luZ19lbmFibGVkX3NldChlbmFibGVkKTsKK30KKwordWludDY0X3QgdW5pcXVlU3Bl
bGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3
a1RleHRDaGVja2VyQ2FsbGJhY2tzLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCkKKyAg
ICAgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT51bmlxdWVfc3BlbGxfZG9jdW1l
bnRfdGFnX2dldCh0b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKSk7CisKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2NF90IHRhZywgY29uc3Qg
dm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT51bmlxdWVfc3BlbGxf
ZG9jdW1lbnRfdGFnX2Nsb3NlKQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+dW5p
cXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSh0YWcpOworfQorCit2b2lkIGNoZWNrU3BlbGxp
bmdPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3Nw
ZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKikK
K3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPnN0cmluZ19zcGVsbGluZ19jaGVj
aykKKyAgICAgICAgZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPnN0cmluZ19zcGVsbGluZ19jaGVj
ayh0YWcsIHRvSW1wbCh0ZXh0KS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbWlzc3BlbGxpbmdM
b2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIGVsc2UKKyAgICAgICAgdGV4dENoZWNr
ZXJFbmNoYW50LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwg
Km1pc3NwZWxsaW5nTG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK1dLQXJyYXlS
ZWYgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2
b2lkKikKK3sKKyAgICBXS011dGFibGVBcnJheVJlZiBzdWdnZXN0aW9uc0ZvcldvcmQgPSBXS011
dGFibGVBcnJheUNyZWF0ZSgpOworCisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53
b3JkX2d1ZXNzZXNfZ2V0KSB7CisgICAgICAgIEVpbmFfTGlzdCogbGlzdCA9IGV3a1RleHRDaGVj
a2VyQ2FsbGJhY2tzLT53b3JkX2d1ZXNzZXNfZ2V0KHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgdm9pZCogaXRlbTsKKworICAgICAgICBFSU5BX0xJ
U1RfRlJFRShsaXN0LCBpdGVtKSB7CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdGF0
aWNfY2FzdDxjaGFyKj4oaXRlbSkpKTsKKyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1
Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBmcmVlKGl0
ZW0pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vl
c3NlcyA9IHRleHRDaGVja2VyRW5jaGFudC0+Z2V0R3Vlc3Nlc0ZvcldvcmQodG9JbXBsKHdvcmQp
LT5zdHJpbmcoKSk7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkd1ZXNzZXMgPSBndWVzc2VzLnNp
emUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkd1ZXNzZXM7ICsr
aSkgeworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ3Vlc3Nlc1tpXS51dGY4KCkuZGF0
YSgpKSk7CisgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQs
IHN1Z2dlc3Rpb24uZ2V0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN1Z2dl
c3Rpb25zRm9yV29yZDsKK30KKwordm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmlu
Z1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFj
a3MtPndvcmRfbGVhcm4pCisgICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53b3JkX2xl
YXJuKHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBlbHNl
CisgICAgICAgIHRleHRDaGVja2VyRW5jaGFudC0+bGVhcm5Xb3JkKHRvSW1wbCh3b3JkKS0+c3Ry
aW5nKCkpOworfQorCit2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3
b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPndv
cmRfaWdub3JlKQorICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+d29yZF9pZ25vcmUo
dGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGVsc2UKKyAg
ICAgICAgdGV4dENoZWNrZXJFbmNoYW50LT5pZ25vcmVXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5n
KCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KCkKK3sKKyAgICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50LT5hdmFpbGFibGVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKCk7Cit9CisKK3ZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKQoreworICAgIHRleHRDaGVja2VyRW5jaGFu
dC0+dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhsYW5ndWFnZXMpOworfQorCitWZWN0b3I8
U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKK3sKKyAgICByZXR1cm4gdGV4
dENoZWNrZXJFbmNoYW50LT5sb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tl
ci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTIzMjQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNr
ZXIuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJLaXRUZXh0Q2hl
Y2tlcl9oCisjZGVmaW5lIFdlYktpdFRleHRDaGVja2VyX2gKKworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorCisjaW5jbHVkZSAiVGV4dENoZWNrZXJFbmNoYW50LmgiCisjaW5jbHVkZSAiV0tBcnJh
eS5oIgorI2luY2x1ZGUgIldLUGFnZS5oIgorI2luY2x1ZGUgIldLU3RyaW5nLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCisvLyBUaGUgZnVuY3Rpb25zIG1haW5seSBjaG9vc2UgYmV0d2VlbiBj
bGllbnQncyBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGluZyBhbmQgdGhlIFdlYktpdCBvbmUuCisK
Ky8vIENhbGxiYWNrcyByZXF1aXJlZCBieSBXS1RleHRDaGVja2VyLgorYm9vbCBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgc2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CisKK3VpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV0tQYWdlUmVm
IHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBjbG9zZVNwZWxsRG9jdW1lbnRX
aXRoVGFnKHVpbnQ2NF90IHRhZywgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK3ZvaWQgY2hl
Y2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJf
dCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOworV0tBcnJheVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0
YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBsZWFy
bldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKK3ZvaWQgaWdub3JlV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOworCisvLyBFbmNoYW50J3MgaGVscGVyLgorVmVjdG9yPFN0
cmluZz4gYXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwordm9pZCB1cGRhdGVTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpOworVmVj
dG9yPFN0cmluZz4gbG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorI2VuZGlmIC8vIFdl
YktpdFRleHRDaGVja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmNwcAppbmRleCBkYjE4NzhiLi43MzRjM2I3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC00Myw2ICs0Mywx
MCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvSWNvbkRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9j
aGVja2VyX3ByaXZhdGUuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC0xMTksNiArMTIzLDEzIEBAIHN0cnVjdCBfRXdrX0Nv
bnRleHQgewogICAgICAgICBld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50X2F0dGFj
aCh0aGlzKTsKICAgICAgICAgZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X2F0dGFjaCh0aGlz
KTsKICAgICAgICAgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfYXR0YWNoKHRoaXMpOworI2lm
IEVOQUJMRShTUEVMTENIRUNLKQorICAgICAgICBld2tfdGV4dF9jaGVja2VyX2NsaWVudF9hdHRh
Y2goKTsKKyAgICAgICAgaWYgKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2VuYWJsZWRfZ2V0KCkpIHsKKyAgICAgICAgICAgIC8vIExvYWQgdGhlIGRlZmF1bHQgbGFuZ3Vh
Z2UuCisgICAgICAgICAgICBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3Nl
dCgwKTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfQogCiAgICAgfl9Fd2tfQ29udGV4dCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3Mu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcApp
bmRleCBhOWY2YjA5Li41NGEzYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKQEAgLTI5LDkgKzI5LDQ1IEBACiAjaW5jbHVkZSAi
ZXdrX3NldHRpbmdzX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJLaXQyL1dLUHJlZmVyZW5jZXMu
aD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgIldlYktp
dFRleHRDaGVja2VyLmgiCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2VuZGlmCiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CiAKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKK3N0YXRpYyBzdHJ1Y3Qgewor
ICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgOiAxOworICAgIFZlY3Rv
cjxTdHJpbmc+IHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXM7CisgICAgRXdrX1NldHRpbmdzX0NvbnRp
bnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIG9uQ29udGludW91c1NwZWxsQ2hlY2tpbmc7
Cit9IGV3a1RleHRDaGVja2VyU2V0dGluZ3MgPSB7IGZhbHNlLCBWZWN0b3I8U3RyaW5nPigpLCAw
IH07CisKK3N0YXRpYyBFaW5hX0Jvb2wgb25Db250aW51b3VzU3BlbGxDaGVja2luZ0lkbGVyKHZv
aWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLm9uQ29udGludW91c1NwZWxs
Q2hlY2tpbmcpCisgICAgICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3Bl
bGxDaGVja2luZyhld2tUZXh0Q2hlY2tlclNldHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKTsKKworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisKK3N0
YXRpYyBFaW5hX0Jvb2wgc3BlbGxDaGVja2luZ0xhbmd1YWdlc1NldFVwZGF0ZSh2b2lkKikKK3sK
KyAgICAvLyBGSVhNRTogQ29uc2lkZXIgdG8gZGVsZWdhdGUgY2FsbGluZyBvZiB0aGlzIG1ldGhv
ZCBpbiBXZWJQcm9jZXNzIHRvIGRvIG5vdCBkZWxheS9ibG9jayBVSVByb2Nlc3MuCisgICAgdXBk
YXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMpOworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisK
K3N0YXRpYyB2b2lkIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIG5ld0xhbmd1YWdlcykKK3sKKyAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMgPSBuZXdMYW5ndWFnZXM7CisgICAgZWNvcmVfaWRsZXJfYWRkKHNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXNTZXRVcGRhdGUsIDApOworfQorI2VuZGlmIC8vIEVOQUJMRShTUEVM
TENIRUNLKQorCiBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2Z1bGxzY3JlZW5fZW5hYmxlZF9zZXQo
RXdrX1NldHRpbmdzKiBzZXR0aW5ncywgRWluYV9Cb29sIGVuYWJsZSkKIHsKICNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCkBAIC0xNDgsMyArMTg0LDc1IEBAIEVpbmFfQm9vbCBld2tfc2V0dGlu
Z3NfZG5zX3ByZWZldGNoaW5nX2VuYWJsZWRfZ2V0KGNvbnN0IEV3a19TZXR0aW5ncyogc2V0dGlu
Z3MpCiAKICAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldEROU1ByZWZldGNoaW5nRW5hYmxlZChz
ZXR0aW5ncy0+cHJlZmVyZW5jZXMuZ2V0KCkpOwogfQorCit2b2lkIGV3a19zZXR0aW5nc19jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQoRXdrX1NldHRpbmdzX0NvbnRpbnVv
dXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiIGNhbGxiYWNrKQoreworI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorICAgIGV3a1RleHRDaGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxDaGVj
a2luZyA9IGNhbGxiYWNrOworI2VuZGlmCit9CisKK0VpbmFfQm9vbCBld2tfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpCit7CisjaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCisgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQ7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQor
Cit2b2lkIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0
KEVpbmFfQm9vbCBlbmFibGUpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgZW5hYmxl
ID0gISFlbmFibGU7CisgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3MuaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQgIT0gZW5hYmxlKSB7CisgICAgICAgIGV3a1RleHRDaGVja2Vy
U2V0dGluZ3MuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGU7CisKKyAg
ICAgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hh
bmdlZChlbmFibGUpOworCisgICAgICAgIC8vIFNldHMgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaWYg
dXNlciBkaWRuJ3Qgc3BlY2lmeSBhbnkuCisgICAgICAgIGlmIChlbmFibGUgJiYgbG9hZGVkU3Bl
bGxDaGVja2luZ0xhbmd1YWdlcygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXNTZXQoVmVjdG9yPFN0cmluZz4oKSk7CisKKyAgICAgICAgaWYgKGV3a1RleHRD
aGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxDaGVja2luZykKKyAgICAgICAgICAgIGVj
b3JlX2lkbGVyX2FkZChvbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nSWRsZXIsIDApOworICAgIH0K
KyNlbmRpZgorfQorCitFaW5hX0xpc3QqIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFp
bGFibGVfbGFuZ3VhZ2VzX2dldCgpCit7CisgICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMg
PSAwOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdl
cyA9IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBzaXplX3QgbnVtYmVy
T2ZMYW51YWdlcyA9IGxhbmd1YWdlcy5zaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bWJlck9mTGFudWFnZXM7ICsraSkKKyAgICAgICAgbGlzdE9mbGFuZ3VhZ2VzID0gZWlu
YV9saXN0X2FwcGVuZChsaXN0T2ZsYW5ndWFnZXMsIGVpbmFfc3RyaW5nc2hhcmVfYWRkKGxhbmd1
YWdlc1tpXS51dGY4KCkuZGF0YSgpKSk7CisjZW5kaWYKKyAgICByZXR1cm4gbGlzdE9mbGFuZ3Vh
Z2VzOworfQorCit2b2lkIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0
KGNvbnN0IGNoYXIqIGxhbmd1YWdlcykKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBW
ZWN0b3I8U3RyaW5nPiBuZXdMYW5ndWFnZXM7CisgICAgU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFn
ZXMpLnNwbGl0KCcsJywgbmV3TGFuZ3VhZ2VzKTsKKworICAgIHNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXNTZXQobmV3TGFuZ3VhZ2VzKTsKKyNlbmRpZgorfQorCitFaW5hX0xpc3QqIGV3a19zZXR0aW5n
c19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCkKK3sKKyAgICBFaW5hX0xpc3QqIGxpc3RP
Zmxhbmd1YWdlcyA9IDA7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgVmVjdG9yPFN0cmlu
Zz4gbGFuZ3VhZ2VzID0gbG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOworICAgIHNpemVf
dCBudW1iZXJPZkxhbnVhZ2VzID0gbGFuZ3VhZ2VzLnNpemUoKTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZMYW51YWdlczsgKytpKQorICAgICAgICBsaXN0T2ZsYW5ndWFn
ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKGxpc3RPZmxhbmd1YWdlcywgZWluYV9zdHJpbmdzaGFyZV9h
ZGQobGFuZ3VhZ2VzW2ldLnV0ZjgoKS5kYXRhKCkpKTsKKworI2VuZGlmCisgICAgcmV0dXJuIGxp
c3RPZmxhbmd1YWdlczsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19zZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3NldHRpbmdzLmgKaW5kZXggOGIxN2QxYy4uMWYxNzhiNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgKQEAgLTQ0LDYgKzQ0LDE1IEBA
IGV4dGVybiAiQyIgewogdHlwZWRlZiBzdHJ1Y3QgX0V3a19TZXR0aW5ncyBFd2tfU2V0dGluZ3M7
CiAKIC8qKgorICogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9u
IHVzZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhlIGNvbnRpbnVvdXMgc3BlbGwg
Y2hlY2tpbmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogQHBhcmFtIGVu
YWJsZSBAYyBFSU5BX1RSVUUgaWYgY29udGludW91cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVk
IG9yIEBjIEVJTkFfRkFMU0UgaWYgaXQncyBkaXNhYmxlZAorICovCit0eXBlZGVmIHZvaWQgKCpF
d2tfU2V0dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2IpKEVpbmFfQm9v
bCBlbmFibGUpOworCisKKy8qKgogICogRW5hYmxlcy9kaXNhYmxlcyB0aGUgSmF2YXNjcmlwdCBG
dWxsc2NyZWVuIEFQSS4gVGhlIEphdmFzY3JpcHQgQVBJIGFsbG93cwogICogdG8gcmVxdWVzdCBm
dWxsIHNjcmVlbiBtb2RlLCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6CiAgKiBodHRwOi8vZHZj
cy53My5vcmcvaGcvZnVsbHNjcmVlbi9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbApAQCAtMjE5
LDYgKzIyOCw3NiBAQCBFQVBJIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfZG5zX3ByZWZldGNoaW5n
X2VuYWJsZWRfc2V0KEV3a19TZXR0aW5ncyAqc2V0dGluZ3MsCiAgKi8KIEVBUEkgRWluYV9Cb29s
IGV3a19zZXR0aW5nc19kbnNfcHJlZmV0Y2hpbmdfZW5hYmxlZF9nZXQoY29uc3QgRXdrX1NldHRp
bmdzICpzZXR0aW5ncyk7CiAKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQg
dG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbgorICogdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tp
bmcgc2V0dGluZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisgKgorICogU3BlY2lmeWluZyBvZiB0
aGlzIGNhbGxiYWNrIGlzIG5lZWRlZCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcmVjZWl2
ZSBub3RpZmljYXRpb25zCisgKiBvbmNlIFdlYktpdCBjaGFuZ2VzIHRoaXMgc2V0dGluZy4KKyAq
IElmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgaW50ZXJlc3RlZCwgdGhpcyBjYWxsYmFjayBpcyBu
b3Qgc2V0LgorICogQ2hhbmdpbmcgb2YgdGhpcyBzZXR0aW5nIGF0IHRoZSBXZWJLaXQgbGV2ZWwg
Y2FuIGJlIG1hZGUgYXMgYSByZXN1bHQgb2YgbW9kaWZ5aW5nCisgKiBvcHRpb25zIGluIGEgQ29u
dGV4dCBNZW51IGJ5IGEgdXNlci4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgZnVu
Y3Rpb24gdG8gc2V0IG9yIEBjIE5VTEwgdG8gaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMgb25lCisg
Ki8KK0VBUEkgdm9pZCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFu
Z2VfY2Jfc2V0KEV3a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0NoZWNraW5nX0NoYW5nZV9D
YiBjYik7CisKKy8qKgorICogUXVlcmllcyBpZiBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIGlz
IGVuYWJsZWQuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgY29udGludW91cyBzcGVs
bCBjaGVja2luZyBpcyBlbmFibGVkIG9yIEBjIEVJTkFfRkFMU0UgaWYgaXQncyBkaXNhYmxlZAor
ICovCitFQVBJIEVpbmFfQm9vbCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX2dldCh2b2lkKTsKKworLyoqCisgKiBFbmFibGVzL2Rpc2FibGVzIGNvbnRpbnVv
dXMgc3BlbGwgY2hlY2tpbmcuCisgKgorICogQWRkaXRpb25hbGx5LCB0aGlzIGZ1bmN0aW9uIGNh
bGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gKGlmIGRlZmluZWQpIHRvIG5vdGlmeQorICogdGhlIGNs
aWVudCBhYm91dCB0aGUgY2hhbmdlIG9mIHRoZSBzZXR0aW5nLgorICogVGhpcyBmZWF0dXJlIGlz
IGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKgorICogQHNlZSBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0CisgKgorICogQHBhcmFtIGVuYWJsZSBAYyBF
SU5BX1RSVUUgdG8gZW5hYmxlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgb3IgQGMgRUlOQV9G
QUxTRSB0byBkaXNhYmxlCisgKi8KK0VBUEkgdm9pZCBld2tfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19lbmFibGVkX3NldChFaW5hX0Jvb2wgZW5hYmxlKTsKKworLyoqCisgKiBH
ZXRzIHRoZSB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHRoZSBzcGVsbCBjaGVja2luZyBsYW5n
dWFnZXMgdG8gdXNlLgorICoKKyAqIEBzZWUgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlc19zZXQKKyAqCisgKiBAcmV0dXJuIHRoZSBsaXN0IHdpdGggYXZhaWxhYmxlIHNwZWxs
IGNoZWNraW5nIGxhbmd1YWdlcywgb3IgQGMgTlVMTCBvbiBmYWlsdXJlCisgKiAgICAgICAgIHRo
ZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIsIHVzZSBlaW5h
X3N0cmluZ3NoYXJlX2RlbCgpCisgKi8KK0VBUEkgRWluYV9MaXN0ICpld2tfc2V0dGluZ3Nfc3Bl
bGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQodm9pZCk7CisKKy8qKgorICogU2V0
cyBAYSBsYW5ndWFnZXMgYXMgdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIHVzZSBieSBkZWZhdWx0
IFdlYktpdAorICogaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxjaGVja2VyIGZlYXR1cmUgd2l0aCBF
bmNoYW50IGxpYnJhcnkgc3VwcG9ydC4KKyAqCisgKiBJZiBAbGFuZ3VhZ2VzIGlzIEBjIE5VTEws
IHRoZSBkZWZhdWx0IGxhbmd1YWdlIGlzIHVzZWQuCisgKiBJZiB0aGUgZGVmYXVsdCBsYW5ndWFn
ZSBjYW4gbm90IGJlIGRldGVybWluZWQgdGhlbiBhbnkgYXZhaWxhYmxlIGRpY3Rpb25hcnkgd2ls
bCBiZSB1c2VkLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gaW52YWxpZGF0ZXMgdGhlIHBy
ZXZpb3VzbHkgc2V0IGxhbmd1YWdlcy4KKyAqICAgICAgIFRoZSBkaWN0aW9uYXJpZXMgYXJlIHJl
cXVlc3RlZCBhc3luY2hyb25vdXNseS4KKyAqCisgKiBAcGFyYW0gbGFuZ3VhZ2VzIGEgbGlzdCBv
ZiBjb21tYSAoJywnKSBzZXBhcmF0ZWQgbGFuZ3VhZ2UgY29kZXMKKyAqICAgICAgICBvZiB0aGUg
Zm9ybSAnZW5fVVMnLCBpZSwgbGFuZ3VhZ2VfVkFSSUFOVCwgbWF5IGJlIEBjIE5VTEwuCisgKi8K
K0VBUEkgdm9pZCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChjb25z
dCBjaGFyICpsYW5ndWFnZXMpOworCisvKioKKyAqIEdldHMgdGhlIHRoZSBsaXN0IG9mIHRoZSBz
cGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLgorICoKKyAqIEBzZWUgZXdrX3NldHRpbmdz
X3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0CisgKiBAc2VlIGV3a19zZXR0
aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0CisgKgorICogQHJldHVybiB0aGUgbGlz
dCB3aXRoIHRoZSBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgaW4gdXNlLAorICogICAgICAgICB0
aGUgRWluYV9MaXN0IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1c2UgZWlu
YV9zdHJpbmdzaGFyZV9kZWwoKQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX3NldHRpbmdzX3Nw
ZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQodm9pZCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwog
fQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdGV4dF9jaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdi
NTg0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdGV4dF9jaGVja2VyLmNwcApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCisKKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVkZSAi
V2ViS2l0VGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUu
aCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworLy8gSW5pdGlhbGl6ZXMgdGhlIGNsaWVu
dCdzIGZ1bmN0aW9ucyB0byBAYyAwIHRvIGJlIHN1cmUgdGhhdCB0aGV5IGFyZSBub3QgZGVmaW5l
ZC4KK3N0YXRpYyBFd2tfVGV4dF9DaGVja2VyIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzID0gewor
ICAgIDAsIC8vIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0CisgICAgMCwgLy8gdW5pcXVl
X3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZQorICAgIDAsIC8vIHN0cmluZ19zcGVsbGluZ19jaGVj
aworICAgIDAsIC8vIHdvcmRfZ3Vlc3Nlc19nZXQKKyAgICAwLCAvLyB3b3JkX2xlYXJuCisgICAg
MCAvLyB3b3JkX2lnbm9yZQorfTsKKworI2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNL
X1NFVChUWVBFX05BTUUsIE5BTUUpICBcCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNf
Y2Jfc2V0KFRZUEVfTkFNRSBjYikgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tz
Lk5BTUUgPSBjYjsgICAgICAgICAgICAgICAgICBcCit9CisKKy8qKgorICogQXR0YWNoZXMgc3Bl
bGxjaGVja2VyIGZlYXR1cmUuCisgKgorICogQGludGVybmFsCisgKgorICogVGhlIGRlZmF1bHQg
c3BlbGxjaGVja2VyIGZlYXR1cmUgaXMgYmFzZWQgb24gRW5jaGFudCBsaWJyYXJ5LgorICogQ2xp
ZW50IG1heSB1c2Ugb3duIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tlciBwcmV2aW91c2x5
IHNldAorICogdGhyb3VnaCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorICovCit2b2lkIGV3a190
ZXh0X2NoZWNrZXJfY2xpZW50X2F0dGFjaCgpCit7CisgICAgc3RhdGljIGJvb2wgZGlkSW5pdGlh
bGl6ZVRleHRDaGVja2VyQ2xpZW50ID0gZmFsc2U7CisgICAgaWYgKGRpZEluaXRpYWxpemVUZXh0
Q2hlY2tlckNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tUZXh0Q2hlY2tlckNsaWVu
dCB0ZXh0Q2hlY2tlckNsaWVudCA9IHsKKyAgICAgICAga1dLVGV4dENoZWNrZXJDbGllbnRDdXJy
ZW50VmVyc2lvbiwKKyAgICAgICAgMCwgLy8gY2xpZW50SW5mbworICAgICAgICAwLCAvLyBpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZAorICAgICAgICBpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCwKKyAgICAgICAgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
LAorICAgICAgICAwLCAvLyBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQKKyAgICAgICAgMCwgLy8g
c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZAorICAgICAgICB1bmlxdWVTcGVsbERvY3VtZW50VGFn
LAorICAgICAgICBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnLAorICAgICAgICBjaGVja1NwZWxs
aW5nT2ZTdHJpbmcsCisgICAgICAgIDAsIC8vIGNoZWNrR3JhbW1hck9mU3RyaW5nCisgICAgICAg
IDAsIC8vIHNwZWxsaW5nVUlJc1Nob3dpbmcKKyAgICAgICAgMCwgLy8gdG9nZ2xlU3BlbGxpbmdV
SUlzU2hvd2luZworICAgICAgICAwLCAvLyB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRX
b3JkCisgICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZworICAg
ICAgICBndWVzc2VzRm9yV29yZCwKKyAgICAgICAgbGVhcm5Xb3JkLAorICAgICAgICBpZ25vcmVX
b3JkCisgICAgfTsKKyAgICBXS1RleHRDaGVja2VyU2V0Q2xpZW50KCZ0ZXh0Q2hlY2tlckNsaWVu
dCk7CisKKyAgICBkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQgPSB0cnVlOworfQorCisv
KgorICogR2V0cyB0aGUgY2xpZW50J3MgY2FsbGJhY2tzLgorICoKKyAqIEBpbnRlcm5hbAorICoK
KyAqIFRoZSBjbGllbnQndCBjYWxsYmFja3MgYXJlIG5vdCBkZWZpbmVkIGJ5IGRlZmF1bHQuCisg
KiBJZiB0aGUgY2xpZW50IGhhc24ndCBzZXQgdGhlIGNhbGxiYWNrLCB0aGUgY29ycmVzcG9uZGlu
ZyBjYWxsYmFjayB3aWxsCisgKiByZXR1cm4gQGMgMCBhbmQgdGhlIGRlZmF1bHQgV2ViS2l0IGlt
cGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBmb3IgdGhpcworICogZnVuY3Rpb25hbGl0eS4KKyAq
CisgKiBAcmV0dXJuIHRoZSBzdHJ1Y3Qgd2l0aCB0aGUgY2xpZW50J3MgY2FsbGJhY2tzLgorICov
CitFd2tfVGV4dF9DaGVja2VyKiBld2tfdGV4dF9jaGVja2VyX2NhbGxiYWNrc19nZXQoKQorewor
ICAgIHJldHVybiAmZXdrVGV4dENoZWNrZXJDYWxsYmFja3M7Cit9CisKKyNlbHNlCisKKy8vIERl
ZmluZXMgYW4gZW1wdHkgQVBJIHRvIGRvIG5vdCBicmVhayBidWlsZC4KKyNkZWZpbmUgRVdLX1RF
WFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBOQU1FKSAgXAordm9pZCBld2tfdGV4
dF9jaGVja2VyXyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUpICAgICAgICBcCit7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKworRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQo
RXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9DYiwgdW5pcXVl
X3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChF
d2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2VfQ2IsIHVuaXF1
ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NF
VChFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19DYiwgc3RyaW5nX3NwZWxs
aW5nX2NoZWNrKQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tl
cl9Xb3JkX0d1ZXNzZXNfR2V0X0NiLCB3b3JkX2d1ZXNzZXNfZ2V0KQorRVdLX1RFWFRfQ0hFQ0tF
Ul9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0NiLCB3b3JkX2xlYXJu
KQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0ln
bm9yZV9DYiwgd29yZF9pZ25vcmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYjdhZWE4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXIuaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8qKgorICogQGZpbGUgZXdrX3RleHRfY2hlY2tlci5oCisgKiBAYnJpZWYgUHJvdmlkZXMg
QVBJIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVu
dGF0aW9uLgorICoKKyAqIFRoZXJlIGlzIG9uZSBzcGVsbGNoZWNrZXIgb2JqZWN0IHBlciBhcHBs
aWNhdGlvbiBhbmQgaXQncyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICogSXQgYWxsb3dzIHRvIGNo
ZWNrIHNwZWxsaW5nIGluIHRoZSBlZGl0YWJsZSBhcmVhcy4KKyAqIElmIGFwcGxpY2F0aW9uIHdh
bnRzIHRvIGVuYWJsZSB0aGUgZmVhdHVyZSwgQVBJIGZyb20gZXdrX3NldHRpbmdzLmgKKyAqIHNo
b3VsZCBiZSB1c2VkLgorICoKKyAqIFRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1w
bGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIEVuY2hhbnQgbGlicmFyeS4KKyAqIEl0IGRvZXNu
J3QgZW5zdXJlIGdyYW1tYXIgY2hlY2tpbmcuIEFwcGxpY2F0aW9uIGlzIGFibGUgdG8gb3Zlcndy
aXRlIHRoZSBkZWZhdWx0CisgKiBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uIGJ5
IGRlZmluaW5nIGl0cyBvd24gaW1wbGVtZW50YXRpb24gYW5kIHNldHRpbmcKKyAqIGFwcHJvcHJp
YXRlIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqLworCisjaWZuZGVmIGV3a190ZXh0X2NoZWNrZXJf
aAorI2RlZmluZSBld2tfdGV4dF9jaGVja2VyX2gKKworI2luY2x1ZGUgPEV2YXMuaD4KKworI2lm
ZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIERlZmluZXMg
YSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byByZXR1cm4gYSB0YWcgKGlk
ZW50aWZpZXIpIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLgorICoKKyAqIFVuaXF1
ZSB0YWdzIGhlbHAgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIG90aGVyIG9iamVjdHMgdGhhdCBh
cmUgY2hlY2tlZCBmb3Igc3BlbGxpbmcgbWlzdGFrZXMuCisgKgorICogQHBhcmFtIG8gdGhlIHZp
ZXcgb2JqZWN0IHRvIGdldCB1bmlxdWUgdGFnCisgKgorICogQHJldHVybiB1bmlxdWUgdGFnIGZv
ciB0aGUgZ2l2ZW4gQGEgbyB2aWV3IG9iamVjdAorICovCit0eXBlZGVmIHVpbnQ2NF90ICgqRXdr
X1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9DYikoY29uc3QgRXZh
c19PYmplY3QgKm8pOworCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxs
YmFjayBmdW5jdGlvbiB0byBjbG9zZSB0aGUgcHJ2aW91c2x5IHNldCB0YWcuCisgKgorICogVGhp
cyBjYWxsYmFjayB3aWxsIG5vdGlmeSB0aGUgcmVjZWl2ZXIgdGhhdCB0aGUgdXNlciBoYXMgZmlu
aXNoZWQgd2l0aCB0aGUgdGFnZ2VkIGRvY3VtZW50LgorICoKKyAqIEBwYXJhbSB0YWcgdGhlIHRh
ZyB0byBiZSBjbG9zZWQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9Vbmlx
dWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlX0NiKSh1aW50NjRfdCB0YWcpOworCisvKioKKyAq
IERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZWFyY2gg
Zm9yIGEgbWlzc3BlbGxlZCB3b3JkcyBpbiB0aGUgZ2l2ZW4gc3RyaW5nLgorICoKKyAqIEBwYXJh
bSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIgd2hpY2ggZG9jdW1l
bnQgdGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAgICAgICAgaW4gbW9zdCBjYXNlcyBu
b3QgbmVjZXNzYXJpbHksIGp1c3QgZm9yIGlnbm9yZWQgd29yZCwKKyAqICAgICAgICBAYyAwIGNh
biBiZSBwYXNzZWQgaW4gZm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIg
ZG9jdW1lbnQKKyAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IGNvbnRhaW5pbmcgdGhlIHdvcmRzIHRv
IHNwZWxsY2hlY2sKKyAqIEBwYXJhbSBtaXNzcGVsbGluZ19sb2NhdGlvbiBhIHBvaW50ZXIgdG8g
c3RvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWlzc3BlbGxlZCBAYSB0ZXh0LCBAYyAtMSBpZiB0
aGUgQGEgdGV4dCBpcyBjb3JyZWN0CisgKiBAcGFyYW0gbWlzc3BlbGxpbmdfbGVuZ3RoIGEgcG9p
bnRlciB0byBzdG9yZSB0aGUgbGVuZ3RoIG9mIG1pc3NwZWxsZWQgQGEgdGV4dCwgQGMgMCBpZiB0
aGUgQGEgdGV4dCBpcyBjb3JyZWN0CisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNr
ZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrX0NiKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKnRl
eHQsIGludDMyX3QgKm1pc3NwZWxsaW5nX2xvY2F0aW9uLCBpbnQzMl90ICptaXNzcGVsbGluZ19s
ZW5ndGgpOworCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBm
dW5jdGlvbiB0byBnZXQgYSBsaXN0IG9mIHN1Z2dlc3RlZCBzcGVsbGluZ3MgZm9yIGEgbWlzc3Bl
bGxlZCBAYSB3b3JkLgorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhl
IHNwZWxsIGNoZWNrZXIgd2hpY2ggZG9jdW1lbnQgdGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQs
CisgKiAgICAgICAgQGMgMCBjYW4gYmUgcGFzc2VkIGZvciB0ZXh0IG5vdCBhc3NvY2lhdGVkIHdp
dGggYSBwYXJ0aWN1bGFyIGRvY3VtZW50CisgKiBAcGFyYW0gd29yZCB0aGUgd29yZCB0byBnZXQg
Z3Vlc3NlcworICogQHJldHVybiBhIGxpc3Qgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cmlu
Z3MgKGFzIGNoYXIqKSBhbmQKKyAqICAgICAgICAgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBk
ZXN0cm95aW5nIHRoZW0uCisgKi8KK3R5cGVkZWYgRWluYV9MaXN0ICooKkV3a19UZXh0X0NoZWNr
ZXJfV29yZF9HdWVzc2VzX0dldF9DYikodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp3b3JkKTsK
KworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYWRkIHRoZSB3b3JkIHRvIHRo
ZSBzcGVsbCBjaGVja2VyIGRpY3Rpb25hcnkuCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFn
IHRvIG5vdGlmeSB0aGUgc3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVudCB0aGF0IEBhIHRleHQg
aXMgYXNzb2NpYXRlZCwKKyAqICAgICAgICBAYyAwIGNhbiBiZSBwYXNzZWQgZm9yIHRleHQgbm90
IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZG9jdW1lbnQKKyAqIEBwYXJhbSB3b3JkIHRo
ZSB3b3JkIHRvIGFkZAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRf
TGVhcm5fQ2IpKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7CisKKy8qKgorICogU2V0
cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRlbGwgdGhlIHNwZWxsIGNoZWNrZXIgdG8gaWdub3Jl
IGEgZ2l2ZW4gd29yZC4KKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRo
ZSBzcGVsbCBjaGVja2VyIHdoaWNoIGRvY3VtZW50IHRoYXQgQGEgdGV4dCBpcyBhc3NvY2lhdGVk
LAorICogICAgICAgIEBjIDAgY2FuIGJlIHBhc3NlZCBmb3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3
aXRoIGEgcGFydGljdWxhciBkb2N1bWVudAorICogQHBhcmFtIHdvcmQgdGhlIHdvcmQgdG8gaWdu
b3JlCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmVfQ2Ip
KHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7CisKKy8qKgorICogU2V0cyBhIGNhbGxi
YWNrIGZ1bmN0aW9uIHRvIGdldCBhIHVuaXF1ZSBzcGVsbCBkb2N1bWVudCB0YWcuCisgKgorICog
QHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhl
IGRlZmF1bHQgV2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBl
d2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0X2NiX3NldChFd2tf
VGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0X0NiIGNiKTsKKworLyoq
CisgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2xvc2UgYSB1bmlxdWUgc3BlbGwgZG9j
dW1lbnQgdGFnLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMg
TlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlv
bgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRf
dGFnX2Nsb3NlX2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9U
YWdfQ2xvc2VfQ2IgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBz
ZWFyY2ggZm9yIGEgbWlzc3BlbGxlZCB3b3JkcyBpbiB0aGUgZ2l2ZW4gc3RyaW5nLgorICoKKyAq
IEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRo
ZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQg
ZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tfY2Jfc2V0KEV3a19UZXh0X0No
ZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrX0NiIGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2Fs
bGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGFuIGFycmF5IG9mIHN1Z2dlc3RlZCBzcGVsbGluZ3MgZm9y
IGEgbWlzc3BlbGxlZCB3b3JkLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBz
ZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBs
ZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1ZXNzZXNf
Z2V0X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXRfQ2IgY2IpOworCisv
KioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBhZGQgdGhlIHdvcmQgdG8gdGhlIHNw
ZWxsIGNoZWNrZXIgZGljdGlvbmFyeS4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sg
dG8gc2V0IG9yIEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sg
aW1wbGVtZW50YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfd29yZF9sZWFy
bl9jYl9zZXQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0NiIGNiKTsKKworLyoqCisgKiBT
ZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGVsbCB0aGUgc3BlbGwgY2hlY2tlciB0byBpZ25v
cmUgYSBnaXZlbiB3b3JkLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQg
b3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1l
bnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl93b3JkX2lnbm9yZV9jYl9z
ZXQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYiBjYik7CisKKyNpZmRlZiBfX2NwbHVz
cGx1cworfQorI2VuZGlmCisjZW5kaWYgLy8gZXdrX3RleHRfY2hlY2tlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJf
cHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMGZmMDMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4
dF9jaGVja2VyX3ByaXZhdGUuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfdGV4dF9jaGVja2VyX3By
aXZhdGVfaAorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisjaW5jbHVkZSAiZXdrX3RleHRfY2hl
Y2tlci5oIgorCisvKioKKyAqIEBicmllZiBTdHJ1Y3R1cmUga2VlcHMgY2xpZW50J3MgY2FsbGJh
Y2sgZnVuY3Rpb25zLgorICoKKyAqIEBpbnRlcm5hbAorICovCitzdHJ1Y3QgX0V3a19UZXh0X0No
ZWNrZXIgeworICAgIEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxsX0RvY3VtZW50X1RhZ19H
ZXRfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tl
cl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlX0NiIHVuaXF1ZV9zcGVsbF9kb2N1bWVu
dF90YWdfY2xvc2U7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2tf
Q2Igc3RyaW5nX3NwZWxsaW5nX2NoZWNrOworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9HdWVz
c2VzX0dldF9DYiB3b3JkX2d1ZXNzZXNfZ2V0OworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9M
ZWFybl9DYiB3b3JkX2xlYXJuOworICAgIEV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmVfQ2Ig
d29yZF9pZ25vcmU7Cit9OwordHlwZWRlZiBfRXdrX1RleHRfQ2hlY2tlciBFd2tfVGV4dF9DaGVj
a2VyOworCitFd2tfVGV4dF9DaGVja2VyKiBld2tfdGV4dF9jaGVja2VyX2NhbGxiYWNrc19nZXQo
KTsKKworLy8gTWFrZXMgaXQgdmlzaWJsZSBmb3IgV1RSLgorRUFQSSB2b2lkIGV3a190ZXh0X2No
ZWNrZXJfY2xpZW50X2F0dGFjaCgpOworCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisj
ZW5kaWYgLy8gZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKaW5kZXggNzVhOGE5OS4uOWVjM2NjMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAK
QEAgLTEsNSArMSw3IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcg
KzI5LDEwIEBACiAjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKIAogI2luY2x1ZGUgIlRleHRDaGVj
a2VyU3RhdGUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisKKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlci5oIgorI2VuZGlmCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zNyw5MSArNDIsMTg1IEBAIHN0YXRpYyBU
ZXh0Q2hlY2tlclN0YXRlIHRleHRDaGVja2VyU3RhdGU7CiAKIGNvbnN0IFRleHRDaGVja2VyU3Rh
dGUmIFRleHRDaGVja2VyOjpzdGF0ZSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyAgICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplU3RhdGUgPSBm
YWxzZTsKKyAgICBpZiAoZGlkSW5pdGlhbGl6ZVN0YXRlKQorICAgICAgICByZXR1cm4gdGV4dENo
ZWNrZXJTdGF0ZTsKKworICAgIFdlYlRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQgPSBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBjbGllbnQuY29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQgPSBjbGllbnQuZ3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOworCisgICAgZGlkSW5pdGlhbGl6
ZVN0YXRlID0gdHJ1ZTsKKyNlbmRpZgogICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwogfQog
CiBib29sIFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1
cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jb250aW51b3VzU3BlbGxDaGVj
a2luZ0FsbG93ZWQoKTsKKyNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKLXZv
aWQgVGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKQor
dm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wg
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBpZiAoc3RhdGUoKS5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworICAg
IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyNlbmRp
ZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wp
Cit2b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgaWYgKHN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID09
IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4dENo
ZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQ7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOworI2VuZGlmCiB9CiAKLXZvaWQg
VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChi
b29sIC8qZW5hYmxlZCovKQordm9pZCBUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oZW5hYmxlZCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNo
ZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIC8qZW5hYmxlZCovKQordm9pZCBUZXh0Q2hl
Y2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICB0ZXh0
Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKKyNlbmRpZgogfQogCi1pbnQ2NF90IFRleHRDaGVj
a2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSopCitpbnQ2NF90IFRleHRD
aGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWco
cGFnZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKICAgICByZXR1cm4gMDsKKyNl
bmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGlu
dDY0X3QpCit2b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0
X3QgdGFnKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1l
bnRXaXRoVGFnKHRhZyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YWcpOworI2VuZGlmCiB9
CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90LCBjb25z
dCBVQ2hhciosIHVpbnQzMl90LCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2Vy
OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBV
Q2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9u
LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xp
ZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0ZXh0
LCBsZW5ndGgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKKyAgICBVTlVTRURfUEFSQU0o
dGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7CisgICAgVU5VU0VEX1BBUkFNKG1pc3Nw
ZWxsaW5nTG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShtaXNzcGVsbGluZ0xlbmd0aCk7Cisj
ZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRf
dCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+
JiwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZT
dHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMy
X3QgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQzMl90
JiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QmIGJhZEdyYW1tYXJMZW5ndGgpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hl
Y2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrR3JhbW1hck9mU3RyaW5nKHNwZWxsRG9jdW1l
bnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hckxv
Y2F0aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNwZWxs
RG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0o
bGVuZ3RoKTsKKyAgICBVTlVTRURfUEFSQU0oZ3JhbW1hckRldGFpbHMpOworICAgIFVOVVNFRF9Q
QVJBTShiYWRHcmFtbWFyTG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShiYWRHcmFtbWFyTGVu
Z3RoKTsKKyNlbmRpZgogfQogCiBib29sIFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5n
KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAg
IHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNwZWxsaW5nVUlJc1No
b3dpbmcoKTsKKyNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKIHZvaWQgVGV4
dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS50b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCk7CisjZW5kaWYKIH0KIAot
dm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2
NF90LCBjb25zdCBTdHJpbmcmKQordm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYg
bWlzc3BlbGxlZFdvcmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRhZywgbWlzc3BlbGxlZFdv
cmQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CisgICAgVU5V
U0VEX1BBUkFNKG1pc3NwZWxsZWRXb3JkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2Vy
Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5n
JiwgY29uc3QgR3JhbW1hckRldGFpbCYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJp
bmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0
YWlsKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOworICAgIFVO
VVNFRF9QQVJBTShiYWRHcmFtbWFyUGhyYXNlKTsKKyAgICBVTlVTRURfUEFSQU0oZ3JhbW1hckRl
dGFpbCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQo
aW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQor
dm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50
VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgLCBWZWN0b3I8U3RyaW5nPiYg
Z3Vlc3NlcykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQo
c3BlbGxEb2N1bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzcGVsbERvY3VtZW50VGFnKTsKKyAgICBVTlVTRURfUEFSQU0od29yZCk7CisgICAgVU5VU0VE
X1BBUkFNKGd1ZXNzZXMpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29y
ZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQordm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS5sZWFybldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKKyAgICBVTlVTRURfUEFS
QU0od29yZCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2
NF90LCBjb25zdCBTdHJpbmcmKQordm9pZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCkuaWdub3JlV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh3
b3JkKTsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9jbWFrZS9GaW5kRW5jaGFudC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kRW5jaGFudC5j
bWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjljNzFjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlCkBAIC0wLDAgKzEsNDMg
QEAKKyMgLSBUcnkgdG8gZmluZCBFbmNoYW50CisjIE9uY2UgZG9uZSwgdGhpcyB3aWxsIGRlZmlu
ZQorIworIyAgRU5DSEFOVF9JTkNMVURFX0RJUlMgLSB0aGUgRW5jaGFudCBpbmNsdWRlIGRyZWN0
b3JpZXMKKyMgIEVOQ0hBTlRfTElCUkFSSUVTIC0gbGluayB0aGVzZSB0byB1c2UgRW5jaGFudAor
IworIyBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUworIyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIE9SIElUUworIyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyMgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsKKyMgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisjIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCisjIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYKKyMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK0ZJ
TkRfUEFDS0FHRShQa2dDb25maWcpCitQS0dfQ0hFQ0tfTU9EVUxFUyhQQ19FTkNIQU5UIGVuY2hh
bnQpCisKK0ZJTkRfUEFUSChFTkNIQU5UX0lOQ0xVREVfRElSUworICAgIE5BTUVTIGVuY2hhbnQu
aAorICAgIFBBVEhTICR7UENfRU5DSEFOVF9JTkNMVURFRElSfQorICAgICAgICAgICR7UENfRU5D
SEFOVF9JTkNMVURFX0RJUlN9CispCisKK0ZJTkRfTElCUkFSWShFTkNIQU5UX0xJQlJBUklFUwor
ICAgIE5BTUVTIGVuY2hhbnQKKyAgICBQQVRIUyAke1BDX0VOQ0hBTlRfTElCRElSfQorICAgICAg
ICAgICR7UENfRU5DSEFOVF9MSUJSQVJZX0RJUlN9CispCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21h
a2UvT3B0aW9uc0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCmluZGV4
IGU5MjlkMjMuLmM4NzY1NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNt
YWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCkBAIC04Miw2ICs4Miw3IEBA
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRUdJT05TIE9OKQogV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NIQURPV19E
T00gT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hBUkVEX1dP
UktFUlMgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU1BFTExD
SEVDSyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9UT1VDSF9F
VkVOVFMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVklCUkFU
SU9OIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1ZJREVPIE9O
KQpAQCAtMTg0LDMgKzE4NSw3IEBAIElGIChXVEZfVVNFX1RJTEVEX0JBQ0tJTkdfU1RPUkUpCiAg
IEZJTkRfUEFDS0FHRShPcGVuR0wgUkVRVUlSRUQpCiBFTkRJRigpCiAKK0lGIChFTkFCTEVfU1BF
TExDSEVDSykKKyAgICAgIEZJTkRfUEFDS0FHRShFbmNoYW50IFJFUVVJUkVEKQorICAgICAgQURE
X0RFRklOSVRJT05TKC1ERU5BQkxFX1NQRUxMQ0hFQ0s9MSkKK0VORElGKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9XZWJLaXRG
ZWF0dXJlcy5jbWFrZQppbmRleCBmMWQ4NjU5Li5iN2Y3NWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
Y21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1
cmVzLmNtYWtlCkBAIC05OCw2ICs5OCw3IEBAIE1BQ1JPIChXRUJLSVRfT1BUSU9OX0JFR0lOKQog
ICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0ggIlRvZ2dsZSBT
Y3JpcHRlZCBTcGVlY2ggQVBJIHN1cHBvcnQiIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklO
RShFTkFCTEVfU0hBRE9XX0RPTSAiVG9nZ2xlIFNoYWRvdyBET00gc3VwcG9ydCIgT0ZGKQogICAg
IFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TSEFSRURfV09SS0VSUyAiVG9nZ2xlIFNoYXJl
ZFdvcmtlcnMgc3VwcG9ydCIgT0ZGKQorICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9T
UEVMTENIRUNLICJUb2dnbGUgU3BlbGxjaGVja2luZyBzdXBwb3J0IChyZXF1aXJlcyBFbmNoYW50
KSIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TUUxfREFUQUJBU0UgIlRv
Z2dsZSBTUUwgRGF0YWJhc2UgU3VwcG9ydCIgT04pCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUo
RU5BQkxFX1NUWUxFX1NDT1BFRCAiVG9nZ2xlIDxzdHlsZSBzY29wZWQ+IHN1cHBvcnQiIE9GRikK
ICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU1ZHICJUb2dnbGUgU1ZHIHN1cHBvcnQi
IE9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UgYi9Tb3VyY2UvY21h
a2Vjb25maWcuaC5jbWFrZQppbmRleCAzZmI1NTYyLi4yMDUwNWNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvY21ha2Vjb25maWcuaC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQpA
QCAtOTQsNiArOTQsNyBAQAogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NIQURPV19ET00KICNjbWFr
ZWRlZmluZTAxIEVOQUJMRV9TSEFSRURfV09SS0VSUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NN
T09USF9TQ1JPTExJTkcKKyNjbWFrZWRlZmluZTAxIEVOQUJMRV9TUEVMTENIRUNLCiAjY21ha2Vk
ZWZpbmUwMSBFTkFCTEVfU1FMX0RBVEFCQVNFCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU1RZTEVf
U0NPUEVECiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU1ZHCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169100</attachid>
            <date>2012-10-17 00:01:16 -0700</date>
            <delta_ts>2012-10-17 03:30:57 -0700</delta_ts>
            <desc>polish the patch regarding to Gyuyoung&apos;s comments</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>54576</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4Mzg2NjBmLi5jOTQ4MTQ1
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTItMTAtMTUgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5j
b20+LCBNaWNoYWwgUm9qIDxtLnJvakBzYXNtdW5nLmNvbT4KKworICAgICAgICBbV0syXVtFRkxd
IEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVmaW5lIFNQRUxMQ0hFQ0sgbWFjcm8g
YW5kIGVuYWJsZSBpdCBmb3IgV0syLUVmbC4KKyAgICAgICAgVGhlIHNwZWxsY2hlY2tpbmcgaW1w
bGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIEVuY2hhbnQgbGlicmFyeS4KKyAgICAgICAgSXQg
Y2FuIGJlIHVzZWQgYnkgb3RoZXIgV2ViS2l0IHBvcnRzLgorCisgICAgICAgICogU291cmNlL2Nt
YWtlL0ZpbmRFbmNoYW50LmNtYWtlOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0
aW9uc0VmbC5jbWFrZTogRW5hYmxlIHNwZWxsY2hlY2tpbmcgZmVhdHVyZSBmb3IgV2ViS2l0Mi1F
RkwuCisgICAgICAgICogU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlOiBEZWZpbmUg
dGhlIFNQRUxMQ0hFQ0sgbWFjcm8uCisgICAgICAgICogU291cmNlL2NtYWtlY29uZmlnLmguY21h
a2U6IEFkZCB0aGUgZmVhdHVyZS4KKwogMjAxMi0xMC0xNiAgUGFibG8gRmxvdXJldCAgPHBhYmxv
ZkBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgUHJlLXByb2Nlc3MgQ1NTR3JhbW1hci55IGJlZm9y
ZSBydW5uaW5nIHRocm91Z2ggYmlzb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWQxYjMyYS4uZjY0ODBmZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEwLTE1ICBHcnplZ29yeiBDemFqa293
c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWljaGFsIFJvaiA8bS5yb2pAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBJbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNr
aW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MTg1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBlbmNoYW50LXJlbGF0ZWQgY29t
cGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRocyBhbmQgdGhlIGxpYnJhcnkgZmxhZy4KKwogMjAxMi0x
MC0xNiAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbU2hh
ZG93IERPTV1bVjhdIFdlYkNvcmU6OlY4RE9NV2luZG93OjppbnN0YWxsUGVyQ29udGV4dFByb3Bl
cnRpZXMoKSBpcyBzbG93IHdoZW4gc2hhZG93RE9NRW5hYmxlZCBmbGFnIGlzIG9uLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZQppbmRleCBhNjgwNzJmLi44MDA3MmZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZQpAQCAtODUsNiArODUsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxl
U3lzdGVtUE9TSVguY3BwCiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50
ZXJuYWxJQ1VFZmwuY3BwCisgIHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hh
bnQuY3BwCiApCiAKIElGIChFTkFCTEVfQkFUVEVSWV9TVEFUVVMpCkBAIC0zMjYsMyArMzI3LDEy
IEBAIElGIChFTkFCTEVfV0VCX0FVRElPKQogICBJTlNUQUxMKEZJTEVTICR7V0VCX0FVRElPX0RB
VEF9IERFU1RJTkFUSU9OICR7V0VCX0FVRElPX0RJUn0pCiAgIEFERF9ERUZJTklUSU9OUygtRFVO
SU5TVEFMTEVEX0FVRElPX1JFU09VUkNFU19ESVI9IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2F1
ZGlvL3Jlc291cmNlcyIpCiBFTkRJRiAoKQorCitJRiAoRU5BQkxFX1NQRUxMQ0hFQ0spCisgICAg
TElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICR7RU5DSEFO
VF9JTkNMVURFX0RJUlN9CisgICAgKQorICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVT
CisgICAgICAgICR7RU5DSEFOVF9MSUJSQVJJRVN9CisgICAgKQorRU5ESUYoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IDkyMzUyOTQuLjhjNDdkMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDkgQEAKKzIwMTIt
MTAtMTUgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+LCBN
aWNoYWwgUm9qIDxtLnJvakBzYW1zdW5nLmNvbT4KKworICAgICAgICBJbXBsZW1lbnRhdGlvbiBv
ZiBzcGVsbGNoZWNraW5nIGZlYXR1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MTg1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBzcGVsbGluZyBpbXBsZW1lbnRhdGlvbiBmb3IgV2ViS2l0Mi1F
RkwgdGhhdCBpcyBiYXNlZCBvbiBFbmNoYW50IGxpYnJhcnkuCisKKyAgICAgICAgQWRkaXRpb25h
bGx5IHRoZSBwYXRjaCBwcm92aWRlcyBBUEkgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IFdlYktp
dAorICAgICAgICBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRpb24gYXMgRW5jaGFudCBsaWJyYXJ5
IGRvZXNuJ3QgZW5zdXJlIGdyYW1tYXIgY2hlY2tpbmcuCisgICAgICAgIEFwcGxpY2F0aW9uIGlz
IGFibGUgdG8gb3ZlcndyaXRlIGl0IGJ5IGRlZmluaW5nIGl0cyBvd24gaW1wbGVtZW50YXRpb24g
YW5kCisgICAgICAgIHNldHRpbmcgYXBwcm9wcmlhdGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorCisg
ICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgIEFkZCBlbmNoYW50LXJlbGF0ZWQg
Y29tcGlsZXIgZmxhZ3M6IGhlYWRlciBwYXRocyBhbmQgdGhlIGxpYnJhcnkgZmxhZy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgIEFkZCBld2tfdGV4
dF9jaGVja2VyLmggdG8gdGhlIG1haW4gV2ViS2l0Mi1FRkwncyBoZWFkZXIgdG8gYmUgYXZhaWxh
YmxlIGZvciBhcHBsaWNhdGlvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9XZWJL
aXRUZXh0Q2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnQgdGhlIGNhbGxiYWNr
cyBmdW5jdGlvbnMgb2YgV0tUZXh0Q2hlY2tlci4KKworICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAo
V2ViS2l0OjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2Vi
S2l0Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6Y2xvc2VTcGVs
bERvY3VtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6OmNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Omd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6
bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6aWdub3JlV29yZCk6CisgICAgICAgIFRob3Nl
IGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgZ2l2ZW4gYXMgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciBX
S1RleHRDaGVja2VyJ3MgY2xpZW50LgorICAgICAgICBUaGV5IGNob29zZSBiZXR3ZWVuIFdlYktp
dCdzIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGFuZCBjbGllbnQncyBvbmVzLgorCisgICAgICAg
IChXZWJLaXQ6OmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAoV2Vi
S2l0Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6bG9h
ZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIFRoZXkgYXJlIHVzZWQgYnkgZXdr
X3NldHRpbmdzLmNwcCBmaWxlIGFuZCBhbGxvdyB0byBkbyBub3QKKyAgICAgICAgZXhwb3NlICd0
ZXh0Q2hlY2tlckVuY2hhbnQnLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0
VGV4dENoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZSB0aGUgZnVuY3Rpb25zIHdoaWNo
IGNob29zZSBiZXR3ZWVuIFdlYktpdCdzIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGFuZAorICAg
ICAgICB0aGUgY2xpZW50J3Mgb25lcy4KKworICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAgICAgIChfRXdrX0NvbnRleHQ6
Ol9Fd2tfQ29udGV4dCk6CisgICAgICAgIEF0dGFjaCB0aGUgc3BlbGxjaGVja2VyIGZlYXR1cmUg
Zm9yIHRoZSBjb250ZXh0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRf
Y2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAoZXdrX3RleHRfY2hlY2tlcl9jYWxsYmFja3Nf
Z2V0KToKKyAgICAgICAgQW4gaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjbGllbnQncyBj
YWxsYmFjayBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4
dF9jaGVja2VyLmg6IEFkZGVkLgorICAgICAgICBEZWZpbmUgQVBJIHRvIHNldCB0aGUgY2xpZW50
J3Mgb3duIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoX0V3a19U
ZXh0X0NoZWNrZXIpOgorICAgICAgICBEZWZpbmUgdGhlIHN0cnVjdCB3aXRoIHRoZSBjbGllbnQn
cyBjYWxsYmFja3MgcmVzcG9uaXNibGUgZm9yIHNwZWxsaW5nLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcDoKKyAgICAgICAgKG9uQ29udGludW91c1NwZWxs
Q2hlY2tpbmdJZGxlcik6CisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBpcyBub3RpZmllZCBhYm91
dCB0aGUgc3BlbGxpbmcgc2V0dGluZyBjaGFuZ2Ugb24gaWRsZXIKKyAgICAgICAgdG8gZG8gbm90
IGJsb2NrIFdlYktpdC4KKyAgICAgICAgVGhlIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5n
IG1heSBiZSBjaGFuZ2VkIHRocm91Z2ggdGhlIGNvbnRleHQgbWVudSBvcHRpb24uCisKKyAgICAg
ICAgKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXRVcGRhdGUpOgorICAgICAgICBUaGUgZGljdGlv
bmFyaWVzIGFyZSByZXF1ZXN0ZWQgb24gJ2lkbGVyJyB0byBkbyBub3QgYmxvY2sgV2ViS2l0Lgor
CisgICAgICAgIChzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KToKKyAgICAgICAgU2V0IHRoZSBs
YW5ndWFnZXMuCisKKyAgICAgICAgKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2NoYW5nZV9jYl9zZXQpOgorICAgICAgICBTZXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHVz
ZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgd2hlbiB0aGUgc3BlbGxpbmcKKyAgICAgICAgc2V0dGlu
ZyB3YXMgY2hhbmdlZCBieSBXZWJLaXQuCisKKyAgICAgICAgKGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KToKKyAgICAgICAgKGV3a19zZXR0aW5nc19j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KToKKyAgICAgICAgQVBJIHRvIHNl
dC9nZXQgdGhlIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcuCisKKyAgICAgICAgKGV3a19zZXR0
aW5nc19zcGVsbF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldCk6CisgICAgICAgIChl
d2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldCk6CisgICAgICAgIChld2tf
c2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCk6CisgICAgICAgIEFQSSB0byBn
ZXQvc2V0IGxhbmd1YWdlcyB0byB1c2UgYnkgV2ViS2l0IGltcGxlbWVudGF0aW9uIGJhc2VkIG9u
IEVuY2hhbnQgbGlicmFyeS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJF
ZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c3RhdGUpOgorICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2lu
Z0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKToKKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6IFJlbW92ZSBXZWJDb3JlIG5hbWFz
cGFjZSBhcyBpdCdzIGFscmVhZHkgZGVmaW5lZCBmb3IgdGhlIHdob2xlIGZpbGUuCisgICAgICAg
IChXZWJLaXQ6OlRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdl
YktpdDo6VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1t
YXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0Zvcldv
cmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICBUaG9zZSBjYWxsIFdL
VGV4dENoZWNrZXIgY2xpZW50J3MgbWV0aG9kcy4KKwogMjAxMi0xMC0xNiAgRG9uZ3dvbyBKb3No
dWEgSW0gIDxkdy5pbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbbWFjXSBGaXggYnVpbGQgYnJl
YWsgLSBwcm9jZXNzUGF0aCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlCmluZGV4IDNlZWE5NDMuLmQ2MDNjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC00Niw2ICs0Niw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJv
Y2Vzcy9BUEkvZWZsL05ldHdvcmtJbmZvUHJvdmlkZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvUGFnZUNsaWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvVmlicmF0aW9uUHJv
dmlkZXIuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCiAg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcAogICAgIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcAogICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtNjUsNiArNjYsNyBAQCBMSVNUKEFQUEVORCBX
ZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9pdGVt
LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19yZXNvdXJjZS5jcHAKICAgICBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3JlcXVlc3QuY3Bw
CiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5jcHAKICAgICBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmNwcApAQCAtMTM2LDYgKzEzOCw3IEBA
IExJU1QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9lZmwiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCisgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvZW5jaGFudCIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vc3ZnL2dyYXBoaWNzIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvZWZsIgogICAgICIk
e1dFQktJVDJfRElSfS9TaGFyZWQvc291cCIKQEAgLTI0Miw2ICsyNDUsNyBAQCBTRVQgKEVXZWJL
aXQyX0hFQURFUlMKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJD
RV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19yZXNvdXJjZS5oIgogICAgICIke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmgiCisgICAg
IiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9j
aGVja2VyLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdG91Y2guaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a191cmxfcmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09V
UkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oIgpAQCAtMzQ5LDMg
KzM1MywxMiBAQCBJRiAoRU5BQkxFX0FQSV9URVNUUykKICAgICBBRERfTElCUkFSWShld2syVW5p
dFRlc3RJbmplY3RlZEJ1bmRsZVNhbXBsZSBTSEFSRUQgJHtURVNUX0lOSkVDVEVEX0JVTkRMRV9E
SVJ9L2luamVjdGVkX2J1bmRsZV9zYW1wbGUuY3BwKQogICAgIFRBUkdFVF9MSU5LX0xJQlJBUklF
Uyhld2syVW5pdFRlc3RJbmplY3RlZEJ1bmRsZVNhbXBsZSAke1dlYktpdDJfTElCUkFSWV9OQU1F
fSkKIEVORElGICgpCisKK0lGIChFTkFCTEVfU1BFTExDSEVDSykKKyAgICBMSVNUKEFQUEVORCBX
ZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgJHtFTkNIQU5UX0lOQ0xVREVfRElS
U30KKyAgICApCisgICAgTElTVChBUFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMKKyAgICAgICAgJHtF
TkNIQU5UX0xJQlJBUklFU30KKyAgICApCitFTkRJRigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCA3ZDJmODc5Li4xN2FmYjExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTQ0LDYgKzQ0LDcgQEAK
ICNpbmNsdWRlICJld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAjaW5jbHVkZSAiZXdrX3Jlc291cmNl
LmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tl
ci5oIgogI2luY2x1ZGUgImV3a190b3VjaC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdC5o
IgogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmYzOWM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCkBAIC0wLDAg
KzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdFRleHRDaGVja2VyLmgiCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tN
dXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUgImV3a19zZXR0aW5n
cy5oIgorI2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVp
bmEuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIE93blB0cjxXZWJDb3JlOjpUZXh0
Q2hlY2tlckVuY2hhbnQ+IHRleHRDaGVja2VyRW5jaGFudCA9IFdlYkNvcmU6OlRleHRDaGVja2Vy
RW5jaGFudDo6Y3JlYXRlKCk7CisKK3N0YXRpYyBFd2tfVGV4dF9DaGVja2VyKiBld2tUZXh0Q2hl
Y2tlckNhbGxiYWNrcyA9IGV3a190ZXh0X2NoZWNrZXJfY2FsbGJhY2tzX2dldCgpOworCitib29s
IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqKQoreworICAgIHJl
dHVybiBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgp
OworfQorCit2b2lkIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJs
ZWQsIGNvbnN0IHZvaWQqKQoreworICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2VuYWJsZWRfc2V0KGVuYWJsZWQpOworfQorCit1aW50NjRfdCB1bmlxdWVTcGVsbERv
Y3VtZW50VGFnKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4
dENoZWNrZXJDYWxsYmFja3MtPnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0KQorICAgICAg
ICByZXR1cm4gZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90
YWdfZ2V0KHRvSW1wbChwYWdlKS0+dmlld1dpZGdldCgpKTsKKworICAgIHJldHVybiAwOworfQor
Cit2b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodWludDY0X3QgdGFnLCBjb25zdCB2b2lk
KikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPnVuaXF1ZV9zcGVsbF9kb2N1
bWVudF90YWdfY2xvc2UpCisgICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT51bmlxdWVf
c3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKHRhZyk7Cit9CisKK3ZvaWQgY2hlY2tTcGVsbGluZ09m
U3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3BlbGxp
bmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQqKQorewor
ICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+c3RyaW5nX3NwZWxsaW5nX2NoZWNrKQor
ICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+c3RyaW5nX3NwZWxsaW5nX2NoZWNrKHRh
ZywgdG9JbXBsKHRleHQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtaXNzcGVsbGluZ0xvY2F0
aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgZWxzZQorICAgICAgICB0ZXh0Q2hlY2tlckVu
Y2hhbnQtPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0b0ltcGwodGV4dCktPnN0cmluZygpLCAqbWlz
c3BlbGxpbmdMb2NhdGlvbiwgKm1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKworV0tBcnJheVJlZiBn
dWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQq
KQoreworICAgIFdLTXV0YWJsZUFycmF5UmVmIHN1Z2dlc3Rpb25zRm9yV29yZCA9IFdLTXV0YWJs
ZUFycmF5Q3JlYXRlKCk7CisKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPndvcmRf
Z3Vlc3Nlc19nZXQpIHsKKyAgICAgICAgRWluYV9MaXN0KiBsaXN0ID0gZXdrVGV4dENoZWNrZXJD
YWxsYmFja3MtPndvcmRfZ3Vlc3Nlc19nZXQodGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICB2b2lkKiBpdGVtOworCisgICAgICAgIEVJTkFfTElTVF9G
UkVFKGxpc3QsIGl0ZW0pIHsKKyAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWdnZXN0aW9uKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0YXRpY19j
YXN0PGNoYXIqPihpdGVtKSkpOworICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oc3VnZ2Vz
dGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIGZyZWUoaXRlbSk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2Vz
ID0gdGV4dENoZWNrZXJFbmNoYW50LT5nZXRHdWVzc2VzRm9yV29yZCh0b0ltcGwod29yZCktPnN0
cmluZygpKTsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mR3Vlc3NlcyA9IGd1ZXNzZXMuc2l6ZSgp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mR3Vlc3NlczsgKytpKSB7
CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdL
LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhndWVzc2VzW2ldLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3Vn
Z2VzdGlvbi5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3VnZ2VzdGlv
bnNGb3JXb3JkOworfQorCit2b2lkIGxlYXJuV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVm
IHdvcmQsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+
d29yZF9sZWFybikKKyAgICAgICAgZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPndvcmRfbGVhcm4o
dGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGVsc2UKKyAg
ICAgICAgdGV4dENoZWNrZXJFbmNoYW50LT5sZWFybldvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmco
KSk7Cit9CisKK3ZvaWQgaWdub3JlV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQs
IGNvbnN0IHZvaWQqKQoreworICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+d29yZF9p
Z25vcmUpCisgICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53b3JkX2lnbm9yZSh0YWcs
IHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZWxzZQorICAgICAg
ICB0ZXh0Q2hlY2tlckVuY2hhbnQtPmlnbm9yZVdvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7
Cit9CisKK1ZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQor
eworICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQtPmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdM
YW5ndWFnZXMoKTsKK30KKwordm9pZCB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpCit7CisgICAgdGV4dENoZWNrZXJFbmNoYW50LT51
cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Cit9CisKK1ZlY3RvcjxTdHJp
bmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQoreworICAgIHJldHVybiB0ZXh0Q2hl
Y2tlckVuY2hhbnQtPmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMjMyNDQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5o
CkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVj
dHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYktpdFRleHRDaGVja2Vy
X2gKKyNkZWZpbmUgV2ViS2l0VGV4dENoZWNrZXJfaAorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CisKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckVuY2hhbnQuaCIKKyNpbmNsdWRlICJXS0FycmF5Lmgi
CisjaW5jbHVkZSAiV0tQYWdlLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKKy8vIFRoZSBmdW5jdGlvbnMgbWFpbmx5IGNob29zZSBiZXR3ZWVuIGNsaWVu
dCdzIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsaW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KKworLy8g
Q2FsbGJhY2tzIHJlcXVpcmVkIGJ5IFdLVGV4dENoZWNrZXIuCitib29sIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordm9pZCBzZXRDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKTsKKwordWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFn
ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhU
YWcodWludDY0X3QgdGFnLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKwordm9pZCBjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbyk7CitXS0FycmF5UmVmIGd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywg
V0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIGxlYXJuV29y
ZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Owordm9pZCBpZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7CisKKy8vIEVuY2hhbnQncyBoZWxwZXIuCitWZWN0b3I8U3RyaW5n
PiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit2b2lkIHVwZGF0ZVNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcyk7CitWZWN0b3I8
U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisjZW5kaWYgLy8gV2ViS2l0
VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHQuY3BwCmluZGV4IDFjZWNlNDEuLmJiYmM1YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTQ0LDYgKzQ0LDExIEBA
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAorI2lmIEVOQUJMRShTUEVMTENIRUNLKQorI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgor
I2luY2x1ZGUgImV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oIgorI2VuZGlmCisKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIApAQCAtMTE5LDYgKzEy
NCwxMyBAQCBzdHJ1Y3QgX0V3a19Db250ZXh0IHsKICAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVz
dF9tYW5hZ2VyX2NsaWVudF9hdHRhY2godGhpcyk7CiAgICAgICAgIGV3a19jb250ZXh0X2Rvd25s
b2FkX2NsaWVudF9hdHRhY2godGhpcyk7CiAgICAgICAgIGV3a19jb250ZXh0X2hpc3RvcnlfY2xp
ZW50X2F0dGFjaCh0aGlzKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICAgICAgZXdrX3Rl
eHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCk7CisgICAgICAgIGlmIChld2tfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKSB7CisgICAgICAgICAgICAvLyBM
b2FkIHRoZSBkZWZhdWx0IGxhbmd1YWdlLgorICAgICAgICAgICAgZXdrX3NldHRpbmdzX3NwZWxs
X2NoZWNraW5nX2xhbmd1YWdlc19zZXQoMCk7CisgICAgICAgIH0KKyNlbmRpZgogICAgIH0KIAog
ICAgIH5fRXdrX0NvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19zZXR0aW5ncy5jcHAKaW5kZXggYTlmNmIwOS4uODAzNzYxMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCkBAIC0zMCw4
ICszMCw0NSBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJlbmNlcy5oPgogI2luY2x1ZGUg
PFdlYktpdDIvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KIAorI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorI2luY2x1ZGUgIldLVGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tl
ci5oIgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwogCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCitzdGF0aWMgc3RydWN0IHsKKyAgICBib29sIGlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkIDogMTsKKyAgICBWZWN0b3I8U3RyaW5nPiBz
cGVsbENoZWNraW5nTGFuZ3VhZ2VzOworICAgIEV3a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxs
X0NoZWNraW5nX0NoYW5nZV9DYiBvbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nOworfSBld2tUZXh0
Q2hlY2tlclNldHRpbmdzID0geyBmYWxzZSwgVmVjdG9yPFN0cmluZz4oKSwgMCB9OworCitzdGF0
aWMgRWluYV9Cb29sIG9uQ29udGludW91c1NwZWxsQ2hlY2tpbmdJZGxlcih2b2lkKikKK3sKKyAg
ICBpZiAoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5vbkNvbnRpbnVvdXNTcGVsbENoZWNraW5nKQor
ICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLm9uQ29udGludW91c1NwZWxsQ2hlY2tpbmco
ZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7
CisKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCitzdGF0aWMgRWluYV9C
b29sIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXRVcGRhdGUodm9pZCopCit7CisgICAgLy8gRklY
TUU6IENvbnNpZGVyIHRvIGRlbGVnYXRlIGNhbGxpbmcgb2YgdGhpcyBtZXRob2QgaW4gV2ViUHJv
Y2VzcyB0byBkbyBub3QgZGVsYXkvYmxvY2sgVUlQcm9jZXNzLgorICAgIHVwZGF0ZVNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMoZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5zcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzKTsKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCitzdGF0aWMgdm9p
ZCBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuZXdMYW5n
dWFnZXMpCit7CisgICAgZXdrVGV4dENoZWNrZXJTZXR0aW5ncy5zcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzID0gbmV3TGFuZ3VhZ2VzOworICAgIGVjb3JlX2lkbGVyX2FkZChzcGVsbENoZWNraW5nTGFu
Z3VhZ2VzU2V0VXBkYXRlLCAwKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKwog
RWluYV9Cb29sIGV3a19zZXR0aW5nc19mdWxsc2NyZWVuX2VuYWJsZWRfc2V0KEV3a19TZXR0aW5n
cyogc2V0dGluZ3MsIEVpbmFfQm9vbCBlbmFibGUpCiB7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQpAQCAtMTQ4LDMgKzE4NSw3NSBAQCBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2Ruc19wcmVm
ZXRjaGluZ19lbmFibGVkX2dldChjb25zdCBFd2tfU2V0dGluZ3MqIHNldHRpbmdzKQogCiAgICAg
cmV0dXJuIFdLUHJlZmVyZW5jZXNHZXRETlNQcmVmZXRjaGluZ0VuYWJsZWQoc2V0dGluZ3MtPnBy
ZWZlcmVuY2VzLmdldCgpKTsKIH0KKwordm9pZCBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVs
bF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KEV3a19TZXR0aW5nc19Db250aW51b3VzX1NwZWxsX0No
ZWNraW5nX0NoYW5nZV9DYiBjYWxsYmFjaykKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAg
ICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLm9uQ29udGludW91c1NwZWxsQ2hlY2tpbmcgPSBjYWxs
YmFjazsKKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAg
IHJldHVybiBld2tUZXh0Q2hlY2tlclNldHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBld2tf
c2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChFaW5hX0Jvb2wg
ZW5hYmxlKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGVuYWJsZSA9ICEhZW5hYmxl
OworICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkICE9IGVuYWJsZSkgeworICAgICAgICBld2tUZXh0Q2hlY2tlclNldHRpbmdzLmlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlOworCisgICAgICAgIFdLVGV4
dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxl
KTsKKworICAgICAgICAvLyBTZXRzIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGlmIHVzZXIgZGlkbid0
IHNwZWNpZnkgYW55LgorICAgICAgICBpZiAoZW5hYmxlICYmIGxvYWRlZFNwZWxsQ2hlY2tpbmdM
YW5ndWFnZXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBzcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
U2V0KFZlY3RvcjxTdHJpbmc+KCkpOworCisgICAgICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRp
bmdzLm9uQ29udGludW91c1NwZWxsQ2hlY2tpbmcpCisgICAgICAgICAgICBlY29yZV9pZGxlcl9h
ZGQob25Db250aW51b3VzU3BlbGxDaGVja2luZ0lkbGVyLCAwKTsKKyAgICB9CisjZW5kaWYKK30K
KworRWluYV9MaXN0KiBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1
YWdlc19nZXQoKQoreworICAgIEVpbmFfTGlzdCogbGlzdE9mbGFuZ3VhZ2VzID0gMDsKKyNpZiBF
TkFCTEUoU1BFTExDSEVDSykKKyAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXMgPSBhdmFpbGFi
bGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7CisgICAgc2l6ZV90IG51bWJlck9mTGFudWFnZXMg
PSBsYW5ndWFnZXMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZkxhbnVhZ2VzOyArK2kpCisgICAgICAgIGxpc3RPZmxhbmd1YWdlcyA9IGVpbmFfbGlzdF9hcHBl
bmQobGlzdE9mbGFuZ3VhZ2VzLCBlaW5hX3N0cmluZ3NoYXJlX2FkZChsYW5ndWFnZXNbaV0udXRm
OCgpLmRhdGEoKSkpOworI2VuZGlmCisgICAgcmV0dXJuIGxpc3RPZmxhbmd1YWdlczsKK30KKwor
dm9pZCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChjb25zdCBjaGFy
KiBsYW5ndWFnZXMpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgVmVjdG9yPFN0cmlu
Zz4gbmV3TGFuZ3VhZ2VzOworICAgIFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2VzKS5zcGxpdCgn
LCcsIG5ld0xhbmd1YWdlcyk7CisKKyAgICBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KG5ld0xh
bmd1YWdlcyk7CisjZW5kaWYKK30KKworRWluYV9MaXN0KiBld2tfc2V0dGluZ3Nfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzX2dldCgpCit7CisgICAgRWluYV9MaXN0KiBsaXN0T2ZsYW5ndWFnZXMg
PSAwOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdl
cyA9IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZM
YW51YWdlcyA9IGxhbmd1YWdlcy5zaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bWJlck9mTGFudWFnZXM7ICsraSkKKyAgICAgICAgbGlzdE9mbGFuZ3VhZ2VzID0gZWluYV9s
aXN0X2FwcGVuZChsaXN0T2ZsYW5ndWFnZXMsIGVpbmFfc3RyaW5nc2hhcmVfYWRkKGxhbmd1YWdl
c1tpXS51dGY4KCkuZGF0YSgpKSk7CisKKyNlbmRpZgorICAgIHJldHVybiBsaXN0T2ZsYW5ndWFn
ZXM7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
c2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5n
cy5oCmluZGV4IDhiMTdkMWMuLjFmMTc4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5oCkBAIC00NCw2ICs0NCwxNSBAQCBleHRlcm4gIkMi
IHsKIHR5cGVkZWYgc3RydWN0IF9Fd2tfU2V0dGluZ3MgRXdrX1NldHRpbmdzOwogCiAvKioKKyAq
IENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5v
dGlmeSB0aGUgY2xpZW50IHdoZW4KKyAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNl
dHRpbmcgd2FzIGNoYW5nZWQgYnkgV2ViS2l0LgorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlO
QV9UUlVFIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBvciBAYyBFSU5B
X0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1NldHRpbmdz
X0NvbnRpbnVvdXNfU3BlbGxfQ2hlY2tpbmdfQ2hhbmdlX0NiKShFaW5hX0Jvb2wgZW5hYmxlKTsK
KworCisvKioKICAqIEVuYWJsZXMvZGlzYWJsZXMgdGhlIEphdmFzY3JpcHQgRnVsbHNjcmVlbiBB
UEkuIFRoZSBKYXZhc2NyaXB0IEFQSSBhbGxvd3MKICAqIHRvIHJlcXVlc3QgZnVsbCBzY3JlZW4g
bW9kZSwgZm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOgogICogaHR0cDovL2R2Y3MudzMub3JnL2hn
L2Z1bGxzY3JlZW4vcmF3LWZpbGUvdGlwL092ZXJ2aWV3Lmh0bWwKQEAgLTIxOSw2ICsyMjgsNzYg
QEAgRUFQSSBFaW5hX0Jvb2wgZXdrX3NldHRpbmdzX2Ruc19wcmVmZXRjaGluZ19lbmFibGVkX3Nl
dChFd2tfU2V0dGluZ3MgKnNldHRpbmdzLAogICovCiBFQVBJIEVpbmFfQm9vbCBld2tfc2V0dGlu
Z3NfZG5zX3ByZWZldGNoaW5nX2VuYWJsZWRfZ2V0KGNvbnN0IEV3a19TZXR0aW5ncyAqc2V0dGlu
Z3MpOwogCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIG5vdGlmeSB0
aGUgY2xpZW50IHdoZW4KKyAqIHRoZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIHNldHRpbmcg
d2FzIGNoYW5nZWQgYnkgV2ViS2l0LgorICoKKyAqIFNwZWNpZnlpbmcgb2YgdGhpcyBjYWxsYmFj
ayBpcyBuZWVkZWQgaWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHJlY2VpdmUgbm90aWZpY2F0
aW9ucworICogb25jZSBXZWJLaXQgY2hhbmdlcyB0aGlzIHNldHRpbmcuCisgKiBJZiB0aGUgYXBw
bGljYXRpb24gaXMgbm90IGludGVyZXN0ZWQsIHRoaXMgY2FsbGJhY2sgaXMgbm90IHNldC4KKyAq
IENoYW5naW5nIG9mIHRoaXMgc2V0dGluZyBhdCB0aGUgV2ViS2l0IGxldmVsIGNhbiBiZSBtYWRl
IGFzIGEgcmVzdWx0IG9mIG1vZGlmeWluZworICogb3B0aW9ucyBpbiBhIENvbnRleHQgTWVudSBi
eSBhIHVzZXIuCisgKgorICogQHBhcmFtIGNiIGEgbmV3IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNl
dCBvciBAYyBOVUxMIHRvIGludmFsaWRhdGUgdGhlIHByZXZpb3VzIG9uZQorICovCitFQVBJIHZv
aWQgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldChF
d2tfU2V0dGluZ3NfQ29udGludW91c19TcGVsbF9DaGVja2luZ19DaGFuZ2VfQ2IgY2IpOworCisv
KioKKyAqIFF1ZXJpZXMgaWYgY29udGludW91cyBzcGVsbCBjaGVja2luZyBpcyBlbmFibGVkLgor
ICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGNvbnRpbnVvdXMgc3BlbGwgY2hlY2tpbmcg
aXMgZW5hYmxlZCBvciBAYyBFSU5BX0ZBTFNFIGlmIGl0J3MgZGlzYWJsZWQKKyAqLworRUFQSSBF
aW5hX0Jvb2wgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9n
ZXQodm9pZCk7CisKKy8qKgorICogRW5hYmxlcy9kaXNhYmxlcyBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nLgorICoKKyAqIEFkZGl0aW9uYWxseSwgdGhpcyBmdW5jdGlvbiBjYWxscyBhIGNhbGxi
YWNrIGZ1bmN0aW9uIChpZiBkZWZpbmVkKSB0byBub3RpZnkKKyAqIHRoZSBjbGllbnQgYWJvdXQg
dGhlIGNoYW5nZSBvZiB0aGUgc2V0dGluZy4KKyAqIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBi
eSBkZWZhdWx0LgorICoKKyAqIEBzZWUgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfY2hhbmdlX2NiX3NldAorICoKKyAqIEBwYXJhbSBlbmFibGUgQGMgRUlOQV9UUlVFIHRv
IGVuYWJsZSBjb250aW51b3VzIHNwZWxsIGNoZWNraW5nIG9yIEBjIEVJTkFfRkFMU0UgdG8gZGlz
YWJsZQorICovCitFQVBJIHZvaWQgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZF9zZXQoRWluYV9Cb29sIGVuYWJsZSk7CisKKy8qKgorICogR2V0cyB0aGUgdGhl
IGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSB0aGUgc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIHRvIHVz
ZS4KKyAqCisgKiBAc2VlIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0
CisgKgorICogQHJldHVybiB0aGUgbGlzdCB3aXRoIGF2YWlsYWJsZSBzcGVsbCBjaGVja2luZyBs
YW5ndWFnZXMsIG9yIEBjIE5VTEwgb24gZmFpbHVyZQorICogICAgICAgICB0aGUgRWluYV9MaXN0
IGFuZCBpdHMgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIGFmdGVyLCB1c2UgZWluYV9zdHJpbmdzaGFy
ZV9kZWwoKQorICovCitFQVBJIEVpbmFfTGlzdCAqZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5n
X2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KHZvaWQpOworCisvKioKKyAqIFNldHMgQGEgbGFuZ3Vh
Z2VzIGFzIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB0byB1c2UgYnkgZGVmYXVsdCBXZWJLaXQKKyAq
IGltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tlciBmZWF0dXJlIHdpdGggRW5jaGFudCBsaWJy
YXJ5IHN1cHBvcnQuCisgKgorICogSWYgQGxhbmd1YWdlcyBpcyBAYyBOVUxMLCB0aGUgZGVmYXVs
dCBsYW5ndWFnZSBpcyB1c2VkLgorICogSWYgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgY2FuIG5vdCBi
ZSBkZXRlcm1pbmVkIHRoZW4gYW55IGF2YWlsYWJsZSBkaWN0aW9uYXJ5IHdpbGwgYmUgdXNlZC4K
KyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGludmFsaWRhdGVzIHRoZSBwcmV2aW91c2x5IHNl
dCBsYW5ndWFnZXMuCisgKiAgICAgICBUaGUgZGljdGlvbmFyaWVzIGFyZSByZXF1ZXN0ZWQgYXN5
bmNocm9ub3VzbHkuCisgKgorICogQHBhcmFtIGxhbmd1YWdlcyBhIGxpc3Qgb2YgY29tbWEgKCcs
Jykgc2VwYXJhdGVkIGxhbmd1YWdlIGNvZGVzCisgKiAgICAgICAgb2YgdGhlIGZvcm0gJ2VuX1VT
JywgaWUsIGxhbmd1YWdlX1ZBUklBTlQsIG1heSBiZSBAYyBOVUxMLgorICovCitFQVBJIHZvaWQg
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQoY29uc3QgY2hhciAqbGFu
Z3VhZ2VzKTsKKworLyoqCisgKiBHZXRzIHRoZSB0aGUgbGlzdCBvZiB0aGUgc3BlbGwgY2hlY2tp
bmcgbGFuZ3VhZ2VzIGluIHVzZS4KKyAqCisgKiBAc2VlIGV3a19zZXR0aW5nc19zcGVsbF9jaGVj
a2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldAorICogQHNlZSBld2tfc2V0dGluZ3Nfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzX3NldAorICoKKyAqIEByZXR1cm4gdGhlIGxpc3Qgd2l0aCB0aGUg
c3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIGluIHVzZSwKKyAqICAgICAgICAgdGhlIEVpbmFfTGlz
dCBhbmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciwgdXNlIGVpbmFfc3RyaW5nc2hh
cmVfZGVsKCkKKyAqLworRUFQSSBFaW5hX0xpc3QgKmV3a19zZXR0aW5nc19zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZXNfZ2V0KHZvaWQpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hl
Y2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVj
a2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjVkNmQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRf
Y2hlY2tlci5jcHAKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlci5oIgorCisjaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCisKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4
dENoZWNrZXIuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKKworLy8gSW5pdGlhbGl6ZXMgdGhlIGNsaWVudCdzIGZ1bmN0
aW9ucyB0byBAYyAwIHRvIGJlIHN1cmUgdGhhdCB0aGV5IGFyZSBub3QgZGVmaW5lZC4KK3N0YXRp
YyBFd2tfVGV4dF9DaGVja2VyIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzID0geworICAgIDAsIC8v
IHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0CisgICAgMCwgLy8gdW5pcXVlX3NwZWxsX2Rv
Y3VtZW50X3RhZ19jbG9zZQorICAgIDAsIC8vIHN0cmluZ19zcGVsbGluZ19jaGVjaworICAgIDAs
IC8vIHdvcmRfZ3Vlc3Nlc19nZXQKKyAgICAwLCAvLyB3b3JkX2xlYXJuCisgICAgMCAvLyB3b3Jk
X2lnbm9yZQorfTsKKworI2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChUWVBF
X05BTUUsIE5BTUUpICBcCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZ
UEVfTkFNRSBjYikgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLk5BTUUgPSBj
YjsgICAgICAgICAgICAgICAgICBcCit9CisKKy8qKgorICogQXR0YWNoZXMgc3BlbGxjaGVja2Vy
IGZlYXR1cmUuCisgKgorICogQGludGVybmFsCisgKgorICogVGhlIGRlZmF1bHQgc3BlbGxjaGVj
a2VyIGZlYXR1cmUgaXMgYmFzZWQgb24gRW5jaGFudCBsaWJyYXJ5LgorICogQ2xpZW50IG1heSB1
c2Ugb3duIGltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tlciBwcmV2aW91c2x5IHNldAorICog
dGhyb3VnaCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorICovCit2b2lkIGV3a190ZXh0X2NoZWNr
ZXJfY2xpZW50X2F0dGFjaCgpCit7CisgICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZVRleHRD
aGVja2VyQ2xpZW50ID0gZmFsc2U7CisgICAgaWYgKGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNs
aWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tUZXh0Q2hlY2tlckNsaWVudCB0ZXh0Q2hl
Y2tlckNsaWVudCA9IHsKKyAgICAgICAga1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVyc2lv
biwKKyAgICAgICAgMCwgLy8gY2xpZW50SW5mbworICAgICAgICAwLCAvLyBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nQWxsb3dlZAorICAgICAgICBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCwKKyAgICAgICAgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAg
ICAwLCAvLyBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQKKyAgICAgICAgMCwgLy8gc2V0R3JhbW1h
ckNoZWNraW5nRW5hYmxlZAorICAgICAgICB1bmlxdWVTcGVsbERvY3VtZW50VGFnLAorICAgICAg
ICBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnLAorICAgICAgICBjaGVja1NwZWxsaW5nT2ZTdHJp
bmcsCisgICAgICAgIDAsIC8vIGNoZWNrR3JhbW1hck9mU3RyaW5nCisgICAgICAgIDAsIC8vIHNw
ZWxsaW5nVUlJc1Nob3dpbmcKKyAgICAgICAgMCwgLy8gdG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2lu
ZworICAgICAgICAwLCAvLyB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkCisgICAg
ICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZworICAgICAgICBndWVz
c2VzRm9yV29yZCwKKyAgICAgICAgbGVhcm5Xb3JkLAorICAgICAgICBpZ25vcmVXb3JkCisgICAg
fTsKKyAgICBXS1RleHRDaGVja2VyU2V0Q2xpZW50KCZ0ZXh0Q2hlY2tlckNsaWVudCk7CisKKyAg
ICBkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQgPSB0cnVlOworfQorCisvKgorICogR2V0
cyB0aGUgY2xpZW50J3MgY2FsbGJhY2tzLgorICoKKyAqIEBpbnRlcm5hbAorICoKKyAqIFRoZSBj
bGllbnQndCBjYWxsYmFja3MgYXJlIG5vdCBkZWZpbmVkIGJ5IGRlZmF1bHQuCisgKiBJZiB0aGUg
Y2xpZW50IGhhc24ndCBzZXQgdGhlIGNhbGxiYWNrLCB0aGUgY29ycmVzcG9uZGluZyBjYWxsYmFj
ayB3aWxsCisgKiByZXR1cm4gQGMgMCBhbmQgdGhlIGRlZmF1bHQgV2ViS2l0IGltcGxlbWVudGF0
aW9uIHdpbGwgYmUgdXNlZCBmb3IgdGhpcworICogZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBAcmV0
dXJuIHRoZSBzdHJ1Y3Qgd2l0aCB0aGUgY2xpZW50J3MgY2FsbGJhY2tzLgorICovCitFd2tfVGV4
dF9DaGVja2VyKiBld2tfdGV4dF9jaGVja2VyX2NhbGxiYWNrc19nZXQoKQoreworICAgIHJldHVy
biAmZXdrVGV4dENoZWNrZXJDYWxsYmFja3M7Cit9CisKKyNlbHNlCisKKy8vIERlZmluZXMgYW4g
ZW1wdHkgQVBJIHRvIGRvIG5vdCBicmVhayBidWlsZC4KKyNkZWZpbmUgRVdLX1RFWFRfQ0hFQ0tF
Ul9DQUxMQkFDS19TRVQoVFlQRV9OQU1FLCBOQU1FKSAgXAordm9pZCBld2tfdGV4dF9jaGVja2Vy
XyMjTkFNRSMjX2NiX3NldChUWVBFX05BTUUpICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbmRpZiAvLyBFTkFC
TEUoU1BFTExDSEVDSykKKworRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRf
Q2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9DYiwgdW5pcXVlX3NwZWxsX2Rv
Y3VtZW50X3RhZ19nZXQpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4dF9D
aGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2VfQ2IsIHVuaXF1ZV9zcGVsbF9k
b2N1bWVudF90YWdfY2xvc2UpCitFV0tfVEVYVF9DSEVDS0VSX0NBTExCQUNLX1NFVChFd2tfVGV4
dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19DYiwgc3RyaW5nX3NwZWxsaW5nX2NoZWNr
KQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1
ZXNzZXNfR2V0X0NiLCB3b3JkX2d1ZXNzZXNfZ2V0KQorRVdLX1RFWFRfQ0hFQ0tFUl9DQUxMQkFD
S19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0NiLCB3b3JkX2xlYXJuKQorRVdLX1RF
WFRfQ0hFQ0tFUl9DQUxMQkFDS19TRVQoRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYiwg
d29yZF9pZ25vcmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdGV4dF9jaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdGV4dF9jaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdh
ZWE4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a190ZXh0X2NoZWNrZXIuaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgor
ICogQGZpbGUgZXdrX3RleHRfY2hlY2tlci5oCisgKiBAYnJpZWYgUHJvdmlkZXMgQVBJIHRvIG92
ZXJ3cml0ZSB0aGUgZGVmYXVsdCBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uLgor
ICoKKyAqIFRoZXJlIGlzIG9uZSBzcGVsbGNoZWNrZXIgb2JqZWN0IHBlciBhcHBsaWNhdGlvbiBh
bmQgaXQncyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICogSXQgYWxsb3dzIHRvIGNoZWNrIHNwZWxs
aW5nIGluIHRoZSBlZGl0YWJsZSBhcmVhcy4KKyAqIElmIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGVu
YWJsZSB0aGUgZmVhdHVyZSwgQVBJIGZyb20gZXdrX3NldHRpbmdzLmgKKyAqIHNob3VsZCBiZSB1
c2VkLgorICoKKyAqIFRoZSBkZWZhdWx0IFdlYktpdCBzcGVsbGNoZWNrZXIgaW1wbGVtZW50YXRp
b24gaXMgYmFzZWQgb24gdGhlIEVuY2hhbnQgbGlicmFyeS4KKyAqIEl0IGRvZXNuJ3QgZW5zdXJl
IGdyYW1tYXIgY2hlY2tpbmcuIEFwcGxpY2F0aW9uIGlzIGFibGUgdG8gb3ZlcndyaXRlIHRoZSBk
ZWZhdWx0CisgKiBXZWJLaXQgc3BlbGxjaGVja2VyIGltcGxlbWVudGF0aW9uIGJ5IGRlZmluaW5n
IGl0cyBvd24gaW1wbGVtZW50YXRpb24gYW5kIHNldHRpbmcKKyAqIGFwcHJvcHJpYXRlIGNhbGxi
YWNrIGZ1bmN0aW9ucy4KKyAqLworCisjaWZuZGVmIGV3a190ZXh0X2NoZWNrZXJfaAorI2RlZmlu
ZSBld2tfdGV4dF9jaGVja2VyX2gKKworI2luY2x1ZGUgPEV2YXMuaD4KKworI2lmZGVmIF9fY3Bs
dXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5h
bWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byByZXR1cm4gYSB0YWcgKGlkZW50aWZpZXIp
IHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLgorICoKKyAqIFVuaXF1ZSB0YWdzIGhl
bHAgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIG90aGVyIG9iamVjdHMgdGhhdCBhcmUgY2hlY2tl
ZCBmb3Igc3BlbGxpbmcgbWlzdGFrZXMuCisgKgorICogQHBhcmFtIG8gdGhlIHZpZXcgb2JqZWN0
IHRvIGdldCB1bmlxdWUgdGFnCisgKgorICogQHJldHVybiB1bmlxdWUgdGFnIGZvciB0aGUgZ2l2
ZW4gQGEgbyB2aWV3IG9iamVjdAorICovCit0eXBlZGVmIHVpbnQ2NF90ICgqRXdrX1RleHRfQ2hl
Y2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9DYikoY29uc3QgRXZhc19PYmplY3Qg
Km8pOworCisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5j
dGlvbiB0byBjbG9zZSB0aGUgcHJ2aW91c2x5IHNldCB0YWcuCisgKgorICogVGhpcyBjYWxsYmFj
ayB3aWxsIG5vdGlmeSB0aGUgcmVjZWl2ZXIgdGhhdCB0aGUgdXNlciBoYXMgZmluaXNoZWQgd2l0
aCB0aGUgdGFnZ2VkIGRvY3VtZW50LgorICoKKyAqIEBwYXJhbSB0YWcgdGhlIHRhZyB0byBiZSBj
bG9zZWQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxf
RG9jdW1lbnRfVGFnX0Nsb3NlX0NiKSh1aW50NjRfdCB0YWcpOworCisvKioKKyAqIERlZmluZXMg
YSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZWFyY2ggZm9yIGEgbWlz
c3BlbGxlZCB3b3JkcyBpbiB0aGUgZ2l2ZW4gc3RyaW5nLgorICoKKyAqIEBwYXJhbSB0YWcgdW5p
cXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNoZWNrZXIgd2hpY2ggZG9jdW1lbnQgdGhhdCBA
YSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAgICAgICAgaW4gbW9zdCBjYXNlcyBub3QgbmVjZXNz
YXJpbHksIGp1c3QgZm9yIGlnbm9yZWQgd29yZCwKKyAqICAgICAgICBAYyAwIGNhbiBiZSBwYXNz
ZWQgaW4gZm9yIHRleHQgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZG9jdW1lbnQK
KyAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IGNvbnRhaW5pbmcgdGhlIHdvcmRzIHRvIHNwZWxsY2hl
Y2sKKyAqIEBwYXJhbSBtaXNzcGVsbGluZ19sb2NhdGlvbiBhIHBvaW50ZXIgdG8gc3RvcmUgdGhl
IGJlZ2lubmluZyBvZiB0aGUgbWlzc3BlbGxlZCBAYSB0ZXh0LCBAYyAtMSBpZiB0aGUgQGEgdGV4
dCBpcyBjb3JyZWN0CisgKiBAcGFyYW0gbWlzc3BlbGxpbmdfbGVuZ3RoIGEgcG9pbnRlciB0byBz
dG9yZSB0aGUgbGVuZ3RoIG9mIG1pc3NwZWxsZWQgQGEgdGV4dCwgQGMgMCBpZiB0aGUgQGEgdGV4
dCBpcyBjb3JyZWN0CisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfU3RyaW5n
X1NwZWxsaW5nX0NoZWNrX0NiKSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIgKnRleHQsIGludDMy
X3QgKm1pc3NwZWxsaW5nX2xvY2F0aW9uLCBpbnQzMl90ICptaXNzcGVsbGluZ19sZW5ndGgpOwor
CisvKioKKyAqIERlZmluZXMgYSB0eXBlIG5hbWUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0
byBnZXQgYSBsaXN0IG9mIHN1Z2dlc3RlZCBzcGVsbGluZ3MgZm9yIGEgbWlzc3BlbGxlZCBAYSB3
b3JkLgorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIHNwZWxsIGNo
ZWNrZXIgd2hpY2ggZG9jdW1lbnQgdGhhdCBAYSB0ZXh0IGlzIGFzc29jaWF0ZWQsCisgKiAgICAg
ICAgQGMgMCBjYW4gYmUgcGFzc2VkIGZvciB0ZXh0IG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0
aWN1bGFyIGRvY3VtZW50CisgKiBAcGFyYW0gd29yZCB0aGUgd29yZCB0byBnZXQgZ3Vlc3Nlcwor
ICogQHJldHVybiBhIGxpc3Qgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cmluZ3MgKGFzIGNo
YXIqKSBhbmQKKyAqICAgICAgICAgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZXN0cm95aW5n
IHRoZW0uCisgKi8KK3R5cGVkZWYgRWluYV9MaXN0ICooKkV3a19UZXh0X0NoZWNrZXJfV29yZF9H
dWVzc2VzX0dldF9DYikodWludDY0X3QgdGFnLCBjb25zdCBjaGFyICp3b3JkKTsKKworLyoqCisg
KiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYWRkIHRoZSB3b3JkIHRvIHRoZSBzcGVsbCBj
aGVja2VyIGRpY3Rpb25hcnkuCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlm
eSB0aGUgc3BlbGwgY2hlY2tlciB3aGljaCBkb2N1bWVudCB0aGF0IEBhIHRleHQgaXMgYXNzb2Np
YXRlZCwKKyAqICAgICAgICBAYyAwIGNhbiBiZSBwYXNzZWQgZm9yIHRleHQgbm90IGFzc29jaWF0
ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZG9jdW1lbnQKKyAqIEBwYXJhbSB3b3JkIHRoZSB3b3JkIHRv
IGFkZAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm5fQ2Ip
KHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciAqd29yZCk7CisKKy8qKgorICogU2V0cyBhIGNhbGxi
YWNrIGZ1bmN0aW9uIHRvIHRlbGwgdGhlIHNwZWxsIGNoZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4g
d29yZC4KKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBzcGVsbCBj
aGVja2VyIHdoaWNoIGRvY3VtZW50IHRoYXQgQGEgdGV4dCBpcyBhc3NvY2lhdGVkLAorICogICAg
ICAgIEBjIDAgY2FuIGJlIHBhc3NlZCBmb3IgdGV4dCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFy
dGljdWxhciBkb2N1bWVudAorICogQHBhcmFtIHdvcmQgdGhlIHdvcmQgdG8gaWdub3JlCisgKi8K
K3R5cGVkZWYgdm9pZCAoKkV3a19UZXh0X0NoZWNrZXJfV29yZF9JZ25vcmVfQ2IpKHVpbnQ2NF90
IHRhZywgY29uc3QgY2hhciAqd29yZCk7CisKKy8qKgorICogU2V0cyBhIGNhbGxiYWNrIGZ1bmN0
aW9uIHRvIGdldCBhIHVuaXF1ZSBzcGVsbCBkb2N1bWVudCB0YWcuCisgKgorICogQHBhcmFtIGNi
IGEgbmV3IGNhbGxiYWNrIHRvIHNldCBvciBAYyBOVUxMIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQg
V2ViS2l0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKi8KK0VBUEkgdm9pZCBld2tfdGV4dF9j
aGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0X2NiX3NldChFd2tfVGV4dF9DaGVj
a2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0X0NiIGNiKTsKKworLyoqCisgKiBTZXRz
IGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2xvc2UgYSB1bmlxdWUgc3BlbGwgZG9jdW1lbnQgdGFn
LgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byBy
ZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitF
QVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3Nl
X2NiX3NldChFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2Vf
Q2IgY2IpOworCisvKioKKyAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBzZWFyY2ggZm9y
IGEgbWlzc3BlbGxlZCB3b3JkcyBpbiB0aGUgZ2l2ZW4gc3RyaW5nLgorICoKKyAqIEBwYXJhbSBj
YiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0
IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICovCitFQVBJIHZvaWQgZXdrX3RleHRf
Y2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tfY2Jfc2V0KEV3a19UZXh0X0NoZWNrZXJfU3Ry
aW5nX1NwZWxsaW5nX0NoZWNrX0NiIGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2FsbGJhY2sgZnVu
Y3Rpb24gdG8gZ2V0IGFuIGFycmF5IG9mIHN1Z2dlc3RlZCBzcGVsbGluZ3MgZm9yIGEgbWlzc3Bl
bGxlZCB3b3JkLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMg
TlVMTCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlv
bgorICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1ZXNzZXNfZ2V0X2NiX3Nl
dChFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXRfQ2IgY2IpOworCisvKioKKyAqIFNl
dHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBhZGQgdGhlIHdvcmQgdG8gdGhlIHNwZWxsIGNoZWNr
ZXIgZGljdGlvbmFyeS4KKyAqCisgKiBAcGFyYW0gY2IgYSBuZXcgY2FsbGJhY2sgdG8gc2V0IG9y
IEBjIE5VTEwgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBXZWJLaXQgY2FsbGJhY2sgaW1wbGVtZW50
YXRpb24KKyAqLworRUFQSSB2b2lkIGV3a190ZXh0X2NoZWNrZXJfd29yZF9sZWFybl9jYl9zZXQo
RXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0NiIGNiKTsKKworLyoqCisgKiBTZXRzIGEgY2Fs
bGJhY2sgZnVuY3Rpb24gdG8gdGVsbCB0aGUgc3BlbGwgY2hlY2tlciB0byBpZ25vcmUgYSBnaXZl
biB3b3JkLgorICoKKyAqIEBwYXJhbSBjYiBhIG5ldyBjYWxsYmFjayB0byBzZXQgb3IgQGMgTlVM
TCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IFdlYktpdCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgor
ICovCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl93b3JkX2lnbm9yZV9jYl9zZXQoRXdrX1Rl
eHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYiBjYik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQor
I2VuZGlmCisjZW5kaWYgLy8gZXdrX3RleHRfY2hlY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NTUwNWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2Vy
X3ByaXZhdGUuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfdGV4
dF9jaGVja2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaAor
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgi
CisKKy8qKgorICogQGJyaWVmIFN0cnVjdHVyZSBrZWVwcyBjbGllbnQncyBjYWxsYmFjayBmdW5j
dGlvbnMuCisgKgorICogQGludGVybmFsCisgKi8KK3N0cnVjdCBfRXdrX1RleHRfQ2hlY2tlciB7
CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0dldF9DYiB1
bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldDsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1
ZV9TcGVsbF9Eb2N1bWVudF9UYWdfQ2xvc2VfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19j
bG9zZTsKKyAgICBFd2tfVGV4dF9DaGVja2VyX1N0cmluZ19TcGVsbGluZ19DaGVja19DYiBzdHJp
bmdfc3BlbGxpbmdfY2hlY2s7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0d1ZXNzZXNfR2V0
X0NiIHdvcmRfZ3Vlc3Nlc19nZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0xlYXJuX0Ni
IHdvcmRfbGVhcm47CisgICAgRXdrX1RleHRfQ2hlY2tlcl9Xb3JkX0lnbm9yZV9DYiB3b3JkX2ln
bm9yZTsKK307Cit0eXBlZGVmIF9Fd2tfVGV4dF9DaGVja2VyIEV3a19UZXh0X0NoZWNrZXI7CisK
K0V3a19UZXh0X0NoZWNrZXIqIGV3a190ZXh0X2NoZWNrZXJfY2FsbGJhY2tzX2dldCgpOworCisv
LyBNYWtlcyBpdCB2aXNpYmxlIGZvciBXVFIuCitFQVBJIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9j
bGllbnRfYXR0YWNoKCk7CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKKyNlbmRpZiAv
LyBld2tfdGV4dF9jaGVja2VyX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAppbmRleCA3NWE4YTk5Li45ZWMzY2MxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcApAQCAtMSw1
ICsxLDcgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjksMTAg
QEAKICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgogCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0
ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCisjZW5kaWYKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTM3LDkxICs0MiwxODUgQEAgc3RhdGljIFRleHRDaGVj
a2VyU3RhdGUgdGV4dENoZWNrZXJTdGF0ZTsKIAogY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4
dENoZWNrZXI6OnN0YXRlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOwor
ICAgIGlmIChkaWRJbml0aWFsaXplU3RhdGUpCisgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0
YXRlOworCisgICAgV2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2Vy
OjpzaGFyZWQoKS0+Y2xpZW50KCk7CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoKTsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGNs
aWVudC5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUg
PSB0cnVlOworI2VuZGlmCiAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CiB9CiAKIGJvb2wg
VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxs
b3dlZCgpOworI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0
Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRl
eHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lm
IEVOQUJMRShTUEVMTENIRUNLKQorICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7CisgICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworI2VuZGlmCiB9CiAK
LXZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCkKK3ZvaWQg
VGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKyAgICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPT0gaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0
YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsK
KyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1tYXJDaGVja2lu
Z0VuYWJsZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hl
Y2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgLypl
bmFibGVkKi8pCit2b2lkIFRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShl
bmFibGVkKTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgLyplbmFibGVkKi8pCit2b2lkIFRleHRDaGVja2VyOjpn
cmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2Vy
U3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGVuYWJsZWQpOworI2VuZGlmCiB9CiAKLWludDY0X3QgVGV4dENoZWNrZXI6OnVu
aXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KikKK2ludDY0X3QgVGV4dENoZWNrZXI6
OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVudFRhZyhwYWdlKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIHJldHVybiAwOworI2VuZGlmCiB9
CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCkK
K3ZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhU
YWcodGFnKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhZyk7CisjZW5kaWYKIH0KIAotdm9p
ZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFy
KiwgdWludDMyX3QsIGludDMyX3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNr
U3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0
ZXh0LCB1aW50MzJfdCBsZW5ndGgsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMy
X3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5j
aGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRleHQsIGxlbmd0
aCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0KTsK
KyAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKKyAgICBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdM
b2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyNlbmRpZgog
fQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90LCBjb25z
dCBVQ2hhciosIHVpbnQzMl90LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQz
Ml90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhp
bnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5n
dGgsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJhZEdy
YW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tHcmFtbWFyT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywg
U3RyaW5nKHRleHQsIGxlbmd0aCksIGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRpb24s
IGJhZEdyYW1tYXJMZW5ndGgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVu
dFRhZyk7CisgICAgVU5VU0VEX1BBUkFNKHRleHQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgp
OworICAgIFVOVVNFRF9QQVJBTShncmFtbWFyRGV0YWlscyk7CisgICAgVU5VU0VEX1BBUkFNKGJh
ZEdyYW1tYXJMb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGJhZEdyYW1tYXJMZW5ndGgpOwor
I2VuZGlmCiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJu
IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc3BlbGxpbmdVSUlzU2hvd2luZygp
OworI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0Q2hlY2tl
cjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNs
aWVudCgpLnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyNlbmRpZgogfQogCi12b2lkIFRl
eHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3QsIGNv
bnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBtaXNzcGVs
bGVkV29yZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChzcGVsbERvY3VtZW50VGFnLCBtaXNzcGVsbGVkV29yZCk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKKyAgICBVTlVTRURfUEFS
QU0obWlzc3BlbGxlZFdvcmQpOworI2VuZGlmCiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhpbnQ2NF90LCBjb25zdCBTdHJpbmcmLCBjb25z
dCBHcmFtbWFyRGV0YWlsJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgYmFk
R3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3Ry
aW5nKHNwZWxsRG9jdW1lbnRUYWcsIGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CisgICAgVU5VU0VEX1BB
UkFNKGJhZEdyYW1tYXJQaHJhc2UpOworICAgIFVOVVNFRF9QQVJBTShncmFtbWFyRGV0YWlsKTsK
KyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit2b2lkIFRl
eHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiAsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2Vz
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAg
V2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVsbERv
Y3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNwZWxs
RG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsKKyAgICBVTlVTRURfUEFSQU0o
Z3Vlc3Nlcyk7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0
X3QsIGNvbnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCBz
cGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh3b3Jk
KTsKKyNlbmRpZgogfQogCi12b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3QsIGNv
bnN0IFN0cmluZyYpCit2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxE
b2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5j
bGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CisgICAgVU5VU0VEX1BBUkFNKHdvcmQpOwor
I2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL2Nt
YWtlL0ZpbmRFbmNoYW50LmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRFbmNoYW50LmNtYWtlCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OWM3MWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvY21ha2UvRmluZEVuY2hhbnQuY21ha2UKQEAgLTAsMCArMSw0MyBAQAorIyAt
IFRyeSB0byBmaW5kIEVuY2hhbnQKKyMgT25jZSBkb25lLCB0aGlzIHdpbGwgZGVmaW5lCisjCisj
ICBFTkNIQU5UX0lOQ0xVREVfRElSUyAtIHRoZSBFbmNoYW50IGluY2x1ZGUgZHJlY3Rvcmllcwor
IyAgRU5DSEFOVF9MSUJSQVJJRVMgLSBsaW5rIHRoZXNlIHRvIHVzZSBFbmNoYW50CisjCisjIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTCisjIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
T1IgSVRTCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OworIyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwKKyMgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyMgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgor
IyBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworRklORF9QQUNL
QUdFKFBrZ0NvbmZpZykKK1BLR19DSEVDS19NT0RVTEVTKFBDX0VOQ0hBTlQgZW5jaGFudCkKKwor
RklORF9QQVRIKEVOQ0hBTlRfSU5DTFVERV9ESVJTCisgICAgTkFNRVMgZW5jaGFudC5oCisgICAg
UEFUSFMgJHtQQ19FTkNIQU5UX0lOQ0xVREVESVJ9CisgICAgICAgICAgJHtQQ19FTkNIQU5UX0lO
Q0xVREVfRElSU30KKykKKworRklORF9MSUJSQVJZKEVOQ0hBTlRfTElCUkFSSUVTCisgICAgTkFN
RVMgZW5jaGFudAorICAgIFBBVEhTICR7UENfRU5DSEFOVF9MSUJESVJ9CisgICAgICAgICAgJHtQ
Q19FTkNIQU5UX0xJQlJBUllfRElSU30KKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggZTkyOWQy
My4uYzg3NjU2YSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysr
IGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTgyLDYgKzgyLDcgQEAgV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFR0lPTlMgT04pCiBXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgT04p
CiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hBRE9XX0RPTSBPTikK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFSRURfV09SS0VSUyBP
TikKK1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TUEVMTENIRUNLIE9O
KQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1RPVUNIX0VWRU5UUyBP
TikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WSUJSQVRJT04gT04p
CiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVklERU8gT04pCkBAIC0x
ODQsMyArMTg1LDcgQEAgSUYgKFdURl9VU0VfVElMRURfQkFDS0lOR19TVE9SRSkKICAgRklORF9Q
QUNLQUdFKE9wZW5HTCBSRVFVSVJFRCkKIEVORElGKCkKIAorSUYgKEVOQUJMRV9TUEVMTENIRUNL
KQorICAgICAgRklORF9QQUNLQUdFKEVuY2hhbnQgUkVRVUlSRUQpCisgICAgICBBRERfREVGSU5J
VElPTlMoLURFTkFCTEVfU1BFTExDSEVDSz0xKQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVz
LmNtYWtlCmluZGV4IGYxZDg2NTkuLmI3Zjc1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9X
ZWJLaXRGZWF0dXJlcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21h
a2UKQEAgLTk4LDYgKzk4LDcgQEAgTUFDUk8gKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgV0VC
S0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCAiVG9nZ2xlIFNjcmlwdGVk
IFNwZWVjaCBBUEkgc3VwcG9ydCIgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJM
RV9TSEFET1dfRE9NICJUb2dnbGUgU2hhZG93IERPTSBzdXBwb3J0IiBPRkYpCiAgICAgV0VCS0lU
X09QVElPTl9ERUZJTkUoRU5BQkxFX1NIQVJFRF9XT1JLRVJTICJUb2dnbGUgU2hhcmVkV29ya2Vy
cyBzdXBwb3J0IiBPRkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NQRUxMQ0hF
Q0sgIlRvZ2dsZSBTcGVsbGNoZWNraW5nIHN1cHBvcnQgKHJlcXVpcmVzIEVuY2hhbnQpIiBPRkYp
CiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1NRTF9EQVRBQkFTRSAiVG9nZ2xlIFNR
TCBEYXRhYmFzZSBTdXBwb3J0IiBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVf
U1RZTEVfU0NPUEVEICJUb2dnbGUgPHN0eWxlIHNjb3BlZD4gc3VwcG9ydCIgT0ZGKQogICAgIFdF
QktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9TVkcgIlRvZ2dsZSBTVkcgc3VwcG9ydCIgT04pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZSBiL1NvdXJjZS9jbWFrZWNvbmZp
Zy5oLmNtYWtlCmluZGV4IDNmYjU1NjIuLjIwNTA1Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFr
ZWNvbmZpZy5oLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCkBAIC05NCw2
ICs5NCw3IEBACiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU0hBRE9XX0RPTQogI2NtYWtlZGVmaW5l
MDEgRU5BQkxFX1NIQVJFRF9XT1JLRVJTCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfU01PT1RIX1ND
Uk9MTElORworI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1NQRUxMQ0hFQ0sKICNjbWFrZWRlZmluZTAx
IEVOQUJMRV9TUUxfREFUQUJBU0UKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TVFlMRV9TQ09QRUQK
ICNjbWFrZWRlZmluZTAxIEVOQUJMRV9TVkcK
</data>

          </attachment>
      

    </bug>

</bugzilla>