<?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>47275</bug_id>
          
          <creation_ts>2010-10-06 09:41:13 -0700</creation_ts>
          <short_desc>Web Inspector: inspector settings/properties/states management should be extracted into separate class.</short_desc>
          <delta_ts>2010-10-15 06:12:23 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>290373</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-06 09:41:13 -0700</bug_when>
    <thetext>We have a lot of flags/values in the InspectorController.
Some flags are persisting into profile.
Others are the part of inspector state for frontend.
All these flags should keep their values after navigation.

It&apos;d be better to extract these flags/values into separate class which will care about their lifetime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290388</commentid>
    <comment_count>1</comment_count>
      <attachid>69952</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-06 09:56:21 -0700</bug_when>
    <thetext>Created attachment 69952
[patch] initial version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290460</commentid>
    <comment_count>2</comment_count>
      <attachid>69952</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-10-06 11:14:28 -0700</bug_when>
    <thetext>Comment on attachment 69952
[patch] initial version.

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

&gt; WebCore/inspector/InspectorState.cpp:61
&gt; +#define REGISTER_INSPECTOR_PROPERTY(name, value, stateName, preferencesName)\
&gt; +m_##name.init(this, value);\
&gt; +m_inspectorCookie.set(&amp;m_##name, &quot;name&quot;);\
&gt; +if (stateName)\
&gt; +m_inspectorState.set(&amp;m_##name, &quot;stateName&quot;);\
&gt; +if (preferencesName)\
&gt; +m_inspectorPreferences.set(&amp;m_##name, &quot;preferenceName&quot;);
&gt; +
&gt; +InspectorState::InspectorState(InspectorClient* client)
&gt; +    : m_client(client)
&gt; +{
&gt; +    REGISTER_INSPECTOR_PROPERTY(monitoringXHR, false, &quot;monitoringXHR&quot;, &quot;xhrMonitor&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(resourceTrackingEnabled, false, &quot;resourceTrackingEnabled&quot;, 0);
&gt; +    REGISTER_INSPECTOR_PROPERTY(resourceTrackingAlwaysEnabled, false, 0, &quot;resourceTrackingEnabled&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(timelineProfilerEnabled, false, &quot;timelineProfilerEnabled&quot;, 0);
&gt; +    REGISTER_INSPECTOR_PROPERTY(searchingForNode, false, &quot;searchingForNodeEnabled&quot;, 0);
&gt; +    REGISTER_INSPECTOR_PROPERTY(profilerAlwaysEnabled, false, 0, &quot;profilerEnabled&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(frontendSettings, &quot;&quot;, 0, &quot;frontendSettings&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(debuggerAlwaysEnabled, false, 0, &quot;debuggerEnabled&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(lastActivePanel, InspectorController::LastActivePanel, 0, &quot;lastActivePanel&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(inspectorStartsAttached, true, 0, &quot;InspectorStartsAttached&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(inspectorAttachedHeight, InspectorController::defaultAttachedHeight, 0, &quot;inspectorAttachedHeight&quot;);

Consider declaring the list of properties as a macros accepting another macros. This way you could generate getter/setter declarations and implementations that would pass stateName and preferenceName directly into propertyUpdeted and get rid of InspectorPropertyBase completely.

&gt; WebCore/inspector/InspectorState.h:67
&gt; +    static void save(InspectorObject* container, const String&amp; name, bool value) { container-&gt;setBoolean(name, value); }
&gt; +    static void save(InspectorObject* container, const String&amp; name, const String&amp; value) { container-&gt;setString(name, value); }
&gt; +    static void save(InspectorObject* container, const String&amp; name, long value) { container-&gt;setNumber(name, value); }
&gt; +    static void restore(const InspectorObject* const container, const String&amp; name, bool* value) { container-&gt;getBoolean(name, value); }
&gt; +    static void restore(const InspectorObject* const container, const String&amp; name, String* value) { container-&gt;getString(name, value); }
&gt; +    static void restore(const InspectorObject* const container, const String&amp; name, long* value) { container-&gt;getNumber(name, value); }
&gt; +
&gt; +    static String asString(bool value) { return value ? &quot;true&quot; : &quot;false&quot;; }
&gt; +    static String asString(const String&amp; value) { return value; }
&gt; +    static String asString(const long value) { return String::number(value); }
&gt; +    static void fromString(const String&amp; stringValue, bool* value) { *value = stringValue == &quot;true&quot;; }
&gt; +    static void fromString(const String&amp; stringValue, String* value) { *value = stringValue; }
&gt; +    static void fromString(const String&amp; stringValue, long* value) { *value = stringValue.toInt(); }

Consider moving these methods into property type-specific descendants.

&gt; WebCore/inspector/InspectorState.h:70
&gt; +template &lt;typename ValueType, typename OwnerType&gt;

Please remove OwnerType parameter since it&apos;s always InspectorState.

&gt; WebCore/inspector/InspectorState.h:115
&gt; +    INSPECTOR_PROPERTY(bool, monitoringXHR, setMonitoringXHR);

Would be better to combine this declarations with those in the constructor.

&gt; WebCore/inspector/InspectorState.h:127
&gt; +    PassRefPtr&lt;InspectorObject&gt; getState() { return propertyMapToInspectorObject(m_inspectorState); }

Should be buildXXX as in other places

&gt; WebCore/inspector/InspectorState.h:128
&gt; +    void restoreFromJSONString(const String&amp; json);

restoreFromCookie

&gt; WebKit/win/WebCoreSupport/WebInspectorClient.cpp:367
&gt; +        shouldAttach = m_inspectedWebView-&gt;page()-&gt;inspectorController()-&gt;inspectorStartsAttached();

I think this can be handled on WebKit side without calls to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290977</commentid>
    <comment_count>3</comment_count>
      <attachid>70079</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-07 06:55:53 -0700</bug_when>
    <thetext>Created attachment 70079
[patch] initial version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290996</commentid>
    <comment_count>4</comment_count>
      <attachid>70079</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-10-07 07:26:32 -0700</bug_when>
    <thetext>Comment on attachment 70079
[patch] initial version.

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

&gt; WebCore/inspector/InspectorState.cpp:60
&gt; +    REGISTER_INSPECTOR_PROPERTY(monitoringXHR, false, &quot;monitoringXHR&quot;, &quot;xhrMonitor&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(resourceTrackingEnabled, false, &quot;resourceTrackingEnabled&quot;, &quot;&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(resourceTrackingAlwaysEnabled, false, &quot;&quot;, &quot;resourceTrackingEnabled&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(timelineProfilerEnabled, false, &quot;timelineProfilerEnabled&quot;, &quot;&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(searchingForNode, false, &quot;searchingForNodeEnabled&quot;, &quot;&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(profilerAlwaysEnabled, false, &quot;&quot;, &quot;profilerEnabled&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(frontendSettings, &quot;&quot;, &quot;&quot;, &quot;frontendSettings&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(debuggerAlwaysEnabled, false, &quot;&quot;, &quot;debuggerEnabled&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(lastActivePanel, InspectorController::LastActivePanel, &quot;&quot;, &quot;lastActivePanel&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(inspectorStartsAttached, true, &quot;&quot;, &quot;InspectorStartsAttached&quot;);
&gt; +    REGISTER_INSPECTOR_PROPERTY(inspectorAttachedHeight, InspectorController::defaultAttachedHeight, &quot;&quot;, &quot;inspectorAttachedHeight&quot;);

I am still convinced that we&apos;d better have one list of the property descriptions and use it both in the header and here.

&gt; WebCore/inspector/InspectorState.cpp:82
&gt; +        if ((*i)-&gt;m_stateName.length())

simply  if ((*i)-&gt;m_stateName)

&gt; WebCore/inspector/InspectorState.cpp:90
&gt; +        if ((*i)-&gt;m_preferenceName.length()) {

simply  if ((*i)-&gt;m_preferenceName) {

&gt; WebCore/inspector/InspectorState.cpp:102
&gt; +        if ((*i)-&gt;m_stateName.length())

ditto

&gt; WebCore/inspector/InspectorState.cpp:106
&gt; +    if (property-&gt;m_preferenceName.length())

ditto

&gt; WebCore/inspector/InspectorState.h:3
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

Fix copyright.

&gt; WebCore/inspector/InspectorState.h:105
&gt; +    friend class InspectorProperty&lt;bool&gt;;

This is not needed anymore, please remove.

&gt; WebCore/inspector/InspectorState.h:129
&gt; +    void propertyUpdated(InspectorPropertyBase* property);

why not make it private?

&gt; WebCore/inspector/InspectorValues.h:182
&gt; +    void set(const String&amp; name, bool value) { setBoolean(name, value); }
&gt; +    void set(const String&amp; name, const String&amp; value) { setString(name, value); }
&gt; +    void set(const String&amp; name, double value) { setNumber(name, value); }
&gt; +    void set(const String&amp; name, long value) { setNumber(name, value); }
&gt; +
&gt; +    void get(const String&amp; name, bool* value) const { getBoolean(name, value); }
&gt; +    void get(const String&amp; name, String* value) const { getString(name, value); }
&gt; +    void get(const String&amp; name, double* value) const { getNumber(name, value); }
&gt; +    void get(const String&amp; name, long* value) const { getNumber(name, value); }

I think we should have either overloaded setters/getters or separate ones with method names including types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291011</commentid>
    <comment_count>5</comment_count>
      <attachid>70079</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-07 07:49:27 -0700</bug_when>
    <thetext>Comment on attachment 70079
[patch] initial version.

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

&gt; WebCore/inspector/InspectorController.cpp:123
&gt; +const char* const InspectorController::LastActivePanel = &quot;lastActivePanel&quot;;

Const names start with lower case.

&gt; WebCore/inspector/InspectorState.h:18
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY

Should be Google :)

&gt; WebCore/inspector/InspectorState.h:51
&gt; +    virtual void saveToContainerAs(InspectorObject* container, const String&amp; name) const = 0;

Should be PassRefPtr&lt;InspectorValue&gt; toInspectorValue() and fromInspectorValue.

&gt; WebCore/inspector/InspectorState.h:111
&gt; +    INSPECTOR_PROPERTY(bool, monitoringXHR, setMonitoringXHR);

Could we please use a simple approach where we register and set properties using classical OOP? (think chromium&apos;s PrefsService).

&gt; WebCore/inspector/InspectorValues.h:174
&gt; +    void set(const String&amp; name, bool value) { setBoolean(name, value); }

set(&quot;foo&quot;, long_long) will result in setBoolean. I am not sure we are ready to this. Should we use traits instead?

&gt; WebKit/win/WebCoreSupport/WebInspectorClient.cpp:276
&gt; +    m_inspectedWebView-&gt;page()-&gt;inspectorController()-&gt;setInspectorStartsAttached(true);

We should store this setting from within inspector controller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291509</commentid>
    <comment_count>6</comment_count>
      <attachid>70213</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-08 02:12:25 -0700</bug_when>
    <thetext>Created attachment 70213
[patch] third iteration.


(In reply to comment #5)
&gt; (From update of attachment 70079 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70079&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/InspectorController.cpp:123
&gt; &gt; +const char* const InspectorController::LastActivePanel = &quot;lastActivePanel&quot;;
&gt; 
&gt; Const names start with lower case.

it&apos;d be better to do that in a separate patch.


&gt; 
&gt; &gt; WebCore/inspector/InspectorState.h:18
&gt; &gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; 
&gt; Should be Google :)

done.


&gt; 
&gt; &gt; WebCore/inspector/InspectorState.h:51
&gt; &gt; +    virtual void saveToContainerAs(InspectorObject* container, const String&amp; name) const = 0;
&gt; 
&gt; Should be PassRefPtr&lt;InspectorValue&gt; toInspectorValue() and fromInspectorValue.

done.

&gt; 
&gt; &gt; WebCore/inspector/InspectorState.h:111
&gt; &gt; +    INSPECTOR_PROPERTY(bool, monitoringXHR, setMonitoringXHR);
&gt; 
&gt; Could we please use a simple approach where we register and set properties using classical OOP? (think chromium&apos;s PrefsService).

It looks like Java style. In that case we will have a lot of code like 
m_state-&gt;setBoolean(someInteresingPropertyName, true); instead of 
m_state-&gt;setSomeInteresingProperty(true);

My variant a bit shorter and type safer.


&gt; &gt; WebCore/inspector/InspectorValues.h:174
&gt; &gt; +    void set(const String&amp; name, bool value) { setBoolean(name, value); }
&gt; 
&gt; set(&quot;foo&quot;, long_long) will result in setBoolean. I am not sure we are ready to this. Should we use traits instead?

done.


&gt; &gt; WebKit/win/WebCoreSupport/WebInspectorClient.cpp:276
&gt; &gt; +    m_inspectedWebView-&gt;page()-&gt;inspectorController()-&gt;setInspectorStartsAttached(true);
&gt; 
&gt; We should store this setting from within inspector controller.

will do that as a separate patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291517</commentid>
    <comment_count>7</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-08 02:28:14 -0700</bug_when>
    <thetext>proposed patch allows us to have strong type checking for set operations at compile time.

If you call setSomeBooleanProperty(1.0) then you will get compile time error like this:


WebCore/inspector/InspectorState.h: In member function &apos;void WebCore::InspectorProperty&lt;ValueType&gt;::set(ArgumentType) [with ArgumentType = int, ValueType = long int]&apos;:
WebCore/inspector/InspectorState.h:153:   instantiated from &apos;void WebCore::InspectorState::setInspectorAttachedHeight(const argType&amp;) [with argType = int]&apos;
WebCore/inspector/InspectorController.cpp:210:   instantiated from here
WebCore/inspector/InspectorState.h:97: error: &apos;Implicit_conversion_guard__Please_use_exact_type_for_set_operation&apos; was not declared in this scope
distcc[59007] ERROR: compile WebCore/inspector/InspectorController.cpp on localhost failed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291601</commentid>
    <comment_count>8</comment_count>
      <attachid>70213</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-10-08 06:21:03 -0700</bug_when>
    <thetext>Comment on attachment 70213
[patch] third iteration.

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

&gt; WebCore/inspector/InspectorState.h:113
&gt; +struct property_type_traits&lt;String&gt; {

Stick to style guide when naming the structs.

&gt; WebCore/inspector/InspectorState.h:154
&gt; +    void propertyUpdated(InspectorPropertyBase* property);

Should be private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291605</commentid>
    <comment_count>9</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-08 06:23:38 -0700</bug_when>
    <thetext>This is amazing how overly complex solution for a simple problem could be. Macro, templates, virtual methods, ugliness all over for a primitive registry sounds like over-engineering to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291615</commentid>
    <comment_count>10</comment_count>
      <attachid>70213</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-08 06:46:54 -0700</bug_when>
    <thetext>Comment on attachment 70213
[patch] third iteration.

My colleagues are suggesting that I should r- the patch in case I have concerns of the kind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292073</commentid>
    <comment_count>11</comment_count>
      <attachid>70347</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-09 02:25:00 -0700</bug_when>
    <thetext>Created attachment 70347
[patch] polished but very complex solution :) without InspectorProperty* classes and theirs virtual functions. Just for try bots.

has no virtual functions
has strong type checking
has no overhead on get* operations.
debugger friendly :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292074</commentid>
    <comment_count>12</comment_count>
      <attachid>70348</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-09 02:26:03 -0700</bug_when>
    <thetext>Created attachment 70348
[patch] OOP version for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292076</commentid>
    <comment_count>13</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-09 02:38:00 -0700</bug_when>
    <thetext>Attachment 70348 did not build on qt:
Build output: http://queues.webkit.org/results/4291005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292083</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-09 02:59:09 -0700</bug_when>
    <thetext>Attachment 70348 did not build on mac:
Build output: http://queues.webkit.org/results/4336005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292085</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-09 03:28:20 -0700</bug_when>
    <thetext>Attachment 70348 did not build on chromium:
Build output: http://queues.webkit.org/results/4334004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292106</commentid>
    <comment_count>16</comment_count>
      <attachid>70348</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-09 06:45:10 -0700</bug_when>
    <thetext>Comment on attachment 70348
[patch] OOP version for review.

Just missed the InspectorState files :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292152</commentid>
    <comment_count>17</comment_count>
      <attachid>70359</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-09 11:57:46 -0700</bug_when>
    <thetext>Created attachment 70359
[patch] OOP version for review. Now with new files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293386</commentid>
    <comment_count>18</comment_count>
      <attachid>70359</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-13 06:21:09 -0700</bug_when>
    <thetext>Comment on attachment 70359
[patch] OOP version for review. Now with new files.

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

Looks good. Few nits and we can land this.

&gt; WebCore/inspector/InspectorState.cpp:86
&gt; +void InspectorState::restoreFromSettings()

loadFromSettings

&gt; WebCore/inspector/InspectorState.h:87
&gt; +    void registerBoolean(InspectorPropertyId propertyId, bool value, const String&amp; stateName, const String&amp; preferenceName) { m_properties.set(propertyId, Property::create(InspectorBasicValue::create(value), stateName, preferenceName));}

Could you move implementation into the .cpp file?

&gt; WebCore/inspector/InspectorState.h:94
&gt; +inline InspectorState::Property InspectorState::Property::create(PassRefPtr&lt;InspectorValue&gt; value, const String&amp; stateName, const String&amp; preferenceName)

Should also be in cpp

&gt; WebCore/inspector/InspectorValues.cpp:656
&gt; +bool InspectorObject::getNumber(const String&amp; name, long* output) const

Do you need this change?

&gt; WebCore/inspector/InspectorValues.h:109
&gt; +    static PassRefPtr&lt;InspectorBasicValue&gt; create(long value)

Where is this one used? Why is overloaded double value not used?

&gt; WebCore/inspector/InspectorValues.h:130
&gt; +    explicit InspectorBasicValue(long value) : InspectorValue(TypeNumber), m_doubleValue((double)value) { }

ditto

&gt; WebKit/mac/WebCoreSupport/WebInspectorClient.mm:361
&gt; +    _shouldAttach = [_inspectedWebView page]-&gt;inspectorController()-&gt;inspectorStartsAttached();

Please add FIXME here.

&gt; WebKit/mac/WebCoreSupport/WebInspectorClient.mm:-397
&gt; -    [_inspectedWebView page]-&gt;inspectorController()-&gt;setSetting(InspectorController::inspectorStartsAttachedSettingName(), &quot;true&quot;);

ditto

&gt; WebKit/mac/WebCoreSupport/WebInspectorClient.mm:-408
&gt; -    [_inspectedWebView page]-&gt;inspectorController()-&gt;setSetting(InspectorController::inspectorStartsAttachedSettingName(), &quot;false&quot;);

ditto

&gt; WebKit/win/WebCoreSupport/WebInspectorClient.cpp:-276
&gt; -    m_inspectedWebView-&gt;page()-&gt;inspectorController()-&gt;setSetting(InspectorController::inspectorStartsAttachedSettingName(), &quot;true&quot;);

ditto

&gt; WebKit/win/WebCoreSupport/WebInspectorClient.cpp:-287
&gt; -    m_inspectedWebView-&gt;page()-&gt;inspectorController()-&gt;setSetting(InspectorController::inspectorStartsAttachedSettingName(), &quot;false&quot;);

ditto

&gt; WebKit/win/WebCoreSupport/WebInspectorClient.cpp:367
&gt; +        shouldAttach = m_inspectedWebView-&gt;page()-&gt;inspectorController()-&gt;inspectorStartsAttached();

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294024</commentid>
    <comment_count>19</comment_count>
      <attachid>70720</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-14 02:19:13 -0700</bug_when>
    <thetext>Created attachment 70720
[patch] third iteration. OOP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294027</commentid>
    <comment_count>20</comment_count>
      <attachid>70720</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-14 02:42:13 -0700</bug_when>
    <thetext>Comment on attachment 70720
[patch] third iteration. OOP

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

&gt; WebCore/inspector/InspectorController.cpp:242
&gt; +        m_state-&gt;setBoolean(InspectorState::pauseOnExceptionsState, m_debuggerAgent-&gt;pauseOnExceptionsState());

This should be setNumber.

&gt; WebCore/inspector/InspectorController.cpp:244
&gt; +    *state = m_state-&gt;getStateObjectForFrontend();

Nit: &quot;toInspectorObject&quot; ?

&gt; WebCore/inspector/InspectorController.cpp:394
&gt; +    m_state-&gt;setString(InspectorState::lastActivePanel, panelName);

Please add // FIXME: move last panel setting to the front-end?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294078</commentid>
    <comment_count>21</comment_count>
      <attachid>70732</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-14 06:14:37 -0700</bug_when>
    <thetext>Created attachment 70732
[patch] fourth iteration. OOP

(In reply to comment #20)
&gt; (From update of attachment 70720 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70720&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/InspectorController.cpp:242
&gt; &gt; +        m_state-&gt;setBoolean(InspectorState::pauseOnExceptionsState, m_debuggerAgent-&gt;pauseOnExceptionsState());
&gt; 
&gt; This should be setNumber.

My fault. 
Did you notice that such kind of mistakes would be caught by template version at compile time?

&gt; 
&gt; &gt; WebCore/inspector/InspectorController.cpp:244
&gt; &gt; +    *state = m_state-&gt;getStateObjectForFrontend();
&gt; 
&gt; Nit: &quot;toInspectorObject&quot; ?

I think it&apos;d be better to call it generateStateObjectForFrontend.

&gt; 
&gt; &gt; WebCore/inspector/InspectorController.cpp:394
&gt; &gt; +    m_state-&gt;setString(InspectorState::lastActivePanel, panelName);
&gt; 
&gt; Please add // FIXME: move last panel setting to the front-end?

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294084</commentid>
    <comment_count>22</comment_count>
      <attachid>70735</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-14 06:40:23 -0700</bug_when>
    <thetext>Created attachment 70735
[patch] next iteration. rebaselined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294088</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-14 06:57:11 -0700</bug_when>
    <thetext>Attachment 70735 did not build on mac:
Build output: http://queues.webkit.org/results/4412024</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294089</commentid>
    <comment_count>24</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-14 06:59:21 -0700</bug_when>
    <thetext>Attachment 70735 did not build on qt:
Build output: http://queues.webkit.org/results/4436030</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294092</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-14 07:06:13 -0700</bug_when>
    <thetext>Attachment 70735 did not build on chromium:
Build output: http://queues.webkit.org/results/4406037</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294098</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-14 07:18:55 -0700</bug_when>
    <thetext>Attachment 70735 did not build on gtk:
Build output: http://queues.webkit.org/results/4409031</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294106</commentid>
    <comment_count>27</comment_count>
      <attachid>70737</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-14 07:25:24 -0700</bug_when>
    <thetext>Created attachment 70737
[patch] next iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294305</commentid>
    <comment_count>28</comment_count>
      <attachid>70737</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-14 13:13:05 -0700</bug_when>
    <thetext>Comment on attachment 70737
[patch] next iteration.

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

&gt; WebCore/inspector/InspectorController.cpp:400
&gt; +    if (!enabled() || !m_state-&gt;getBoolean(InspectorState::searchingForNode))

Use !searchingForNodeInPage() here?

&gt; WebCore/inspector/InspectorController.cpp:415
&gt; +    ASSERT(m_state-&gt;getBoolean(InspectorState::searchingForNode));

ditto

&gt; WebCore/inspector/InspectorController.cpp:454
&gt; +    if (m_state-&gt;getBoolean(InspectorState::searchingForNode) == enabled)

ditto

&gt; WebCore/inspector/InspectorController.cpp:1111
&gt; +    if (!enabled() || !m_state-&gt;getBoolean(InspectorState::resourceTrackingEnabled))

resourceTrackingEnabled() ?

&gt; WebCore/inspector/InspectorController.cpp:1140
&gt; +    if (m_state-&gt;getBoolean(InspectorState::resourceTrackingEnabled) == enable)

ditto

&gt; WebCore/inspector/InspectorState.cpp:44
&gt; +    registerBoolean(resourceTrackingAlwaysEnabled, false, (const char*)0, &quot;resourceTrackingEnabled&quot;);

This is likely to add the confusion (resourceTrackingAlwaysEnabled is persisted as &quot;resourceTrackingEnabled&quot;.

&gt; WebCore/inspector/InspectorState.cpp:170
&gt; +InspectorState::Property InspectorState::Property::create(PassRefPtr&lt;InspectorValue&gt; value, const String&amp; stateName, const String&amp; preferenceName)

stateName is not used anywhere other than in the front-end. InspectorController itself uses enum literals. Should we rename &quot;stateName&quot; to &quot;frontendAlias&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294636</commentid>
    <comment_count>29</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-15 01:32:07 -0700</bug_when>
    <thetext>Committed r69844
	M	WebKit/win/ChangeLog
	M	WebKit/win/WebCoreSupport/WebInspectorClient.cpp
	M	WebKit/mac/WebCoreSupport/WebInspectorClient.mm
	M	WebKit/mac/ChangeLog
	M	WebCore/WebCore.exp.in
	M	WebCore/WebCore.pro
	M	WebCore/ChangeLog
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/GNUmakefile.am
	M	WebCore/WebCore.gypi
	A	WebCore/inspector/InspectorState.cpp
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/inspector/InspectorFrontendClientLocal.cpp
	A	WebCore/inspector/InspectorState.h
	M	WebCore/inspector/InspectorController.h
	M	WebCore/CMakeLists.txt
	M	WebCore/WebCore.xcodeproj/project.pbxproj
r69844 = 47c617dabd41d8f7c7ae430a14bf4fa300196946 (refs/remotes/trunk)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294718</commentid>
    <comment_count>30</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-15 06:12:23 -0700</bug_when>
    <thetext>I think you&apos;ll find &quot;webkit-patch land&quot; or &quot;webkit-patch land-from-bug&quot; takes care of much of this patch-maintenance for you.  If you have webkit-patch troubles, let Adam or I know (by filing a bug), we&apos;d be happy to fix them.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69952</attachid>
            <date>2010-10-06 09:56:21 -0700</date>
            <delta_ts>2010-10-07 06:55:53 -0700</delta_ts>
            <desc>[patch] initial version.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>56480</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDIxNzI1MmUuLjc1YTNjNzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExMSw2ICsxMTExLDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmNwcAogICAgIGluc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmNw
cApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCBkOTYwMmRhLi43MzNmZDE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEwLTEwLTA2ICBJbHlhIFRpa2hv
bm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnNwZWN0b3Igc2V0dGluZ3Mv
cHJvcGVydGllcy9zdGF0ZXMgbWFuYWdlbWVudAorICAgICAgICBzaG91bGQgYmUgZXh0cmFjdGVk
IGludG8gc2VwYXJhdGUgY2xhc3MuCisKKyAgICAgICAgV2UgaGF2ZSBhIGxvdCBvZiBmbGFncy92
YWx1ZXMgaW4gSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICAgICAgU29tZSBmbGFncyBhcmUgcGVy
c2lzdGluZyBpbnRvIHByb2ZpbGUuCisgICAgICAgIE90aGVycyBhcmUgcGFydCBvZiBpbnNwZWN0
b3Igc3RhdGUgZm9yIGZyb250ZW5kLgorICAgICAgICBBbGwgdGhlc2UgZmxhZ3Mgc2hvdWxkIGtl
ZXAgdGhlaXIgdmFsdWVzIGFmdGVyIG5hdmlnYXRpb24uCisgICAgICAgIEl0J2QgYmUgYmV0dGVy
IHRvIGV4dHJhY3QgdGhlc2UgZmxhZ3MvdmFsdWVzIGludG8gc2VwYXJhdGUKKyAgICAgICAgY2xh
c3Mgd2hpY2ggd2lsbCBjYXJlIGFib3V0IHRoZWlycyBsaWZldGltZS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyNzUKKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNv
cmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBy
bzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpzYXZlU2Vzc2lvblNldHRpbmdzKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0SW5zcGVjdG9yU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0U2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2VhcmNoaW5nRm9yTm9k
ZUluUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJj
ZVRyYWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JBdHRhY2hlZEhlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JBdHRhY2hlZEhlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9yZUxhc3RBY3Rp
dmVQYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjptb3VzZURp
ZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpoYW5kbGVNb3VzZVByZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OnNldFNlYXJjaGluZ0Zvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVQcm9maWxlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRUcmFja2VkUmVzb3VyY2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNh
Y2hlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJG
b3JJbml0aWFsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0SW1wb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5zdXJlU2V0dGluZ3NMb2FkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2Zp
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGlu
ZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJs
ZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Fi
bGVQcm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbmFi
bGVEZWJ1Z2dlckZyb21Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6bG9hZEJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnNhdmVCcmVha3BvaW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpyZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbUpTT05TdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3RhdGU6OnJlc3RvcmVGcm9tU2V0dGluZ3MpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3RhdGU6OnByb3BlcnR5VXBkYXRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdGF0ZTo6cHJvcGVydHlNYXBUb0luc3BlY3Rvck9iamVjdCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUHJvcGVydHlCYXNlOjpJbnNwZWN0b3JQcm9wZXJ0eUJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUHJvcGVydHlCYXNlOjp+SW5zcGVjdG9yUHJvcGVydHlCYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb3BlcnR5QmFzZTo6c2F2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQcm9wZXJ0eUJhc2U6OnJlc3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUHJvcGVydHlCYXNlOjphc1N0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JQcm9wZXJ0eUJhc2U6OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUHJvcGVydHk6Okluc3BlY3RvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclByb3BlcnR5Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBy
b3BlcnR5OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvcGVydHk6OnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9wZXJ0eTo6c2F2ZVRvQ29udGFpbmVyQXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvcGVydHk6OnJlc3RvcmVGcm9tQ29udGFp
bmVyQXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvcGVydHk6OnRvU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb3BlcnR5Ojpmcm9tU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRTdGF0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmpl
Y3Q6OmdldE51bWJlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oOgor
CiAyMDEwLTEwLTAzICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCBidWlsZCBmaXggZm9yIHI2ODk5Ni4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDc4OWE5MGMuLjcw
MWJhYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtMTgxMCw2ICsxODEwLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggXAogCVdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2UuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3Bw
IFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oIFwKIAlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdG9yYWdlQWdlbnQuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggYTA0NTExMS4uNzc3MzZmYSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0xMTk5
LDcgKzExOTksNiBAQCBfX1pON1dlYkNvcmUyMkdlb2xvY2F0aW9uU2VydmljZU1vY2s4c2V0RXJy
b3JFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTNQb3NpdGlvbkVycgogI2VuZGlmCiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTBzZXRTZXR0
aW5nRVJLTjNXVEY2U3RyaW5nRVM0XwogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
MTJDb25zb2xlUGFuZWxFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMlNjcmlw
dHNQYW5lbEUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEzUHJvZmlsZXNQYW5l
bEUKQEAgLTEyMTAsMTIgKzEyMDksMTIgQEAgX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9s
bGVyMTVkaXNhYmxlUHJvZmlsZXJFYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
MThkaXNjb25uZWN0RnJvbnRlbmRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
MjBzdG9wVGltZWxpbmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIyMXN0YXJ0VGltZWxpbmVQcm9maWxlckV2CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRy
b2xsZXIyM2luc3BlY3RvclN0YXJ0c0F0dGFjaGVkRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9y
Q29udHJvbGxlcjI1ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZEVsUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnNldEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50RU4zV1RGMTBQYXNzT3duUHRySU5TXzIzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFRUUKK19f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNo
ZWRFYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFydFVzZXJJbml0aWF0
ZWRQcm9maWxpbmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzdG9wVXNl
ckluaXRpYXRlZFByb2ZpbGluZ0V2Ci1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIz
NGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWVFdgotX19aTjdXZWJDb3JlMTlJbnNw
ZWN0b3JDb250cm9sbGVyMzRpbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lRXYKIF9f
Wk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIzMWlzUmVjb3JkaW5nVXNlckluaXRpYXRl
ZFByb2ZpbGVFdgogX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1cHJvZmlsZXJF
bmFibGVkRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjRzaG93RXYKQEAgLTEy
MzUsNyArMTIzNCw2IEBAIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bEMyRVBOU18xOUluc3BlY3RvckNvbnRyb2xsZXJFUE5TXzRQYWdlCiBfX1pON1dlYkNvcmUyOElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxEMkV2CiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyMTdkcmF3Tm9kZUhpZ2hsaWdodEVSTlNfMTVHcmFwaGljc0NvbnRleHRFCiBfX1pO
SzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyN2VuYWJsZWRFdgotX19aTks3V2ViQ29yZTE5
SW5zcGVjdG9yQ29udHJvbGxlcjdzZXR0aW5nRVJLTjNXVEY2U3RyaW5nRQogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoSkFWQV9CUklER0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGExN2Y2MWMuLmYwNTk2Y2YgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xOTA2
LDYgKzE5MDYsOCBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFn
ZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oJywKKyAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yU3RhdGUuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0b3Jh
Z2VBZ2VudC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdl
bnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3Bw
JywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJv
CmluZGV4IGQ3Njk5MjEuLjIyZGIxMTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8K
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTAwMSw2ICsxMDAxLDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlLmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCBcCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5jcHAgXApAQCAtMTg3OCw2ICsxODc5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCBcCisgICAg
aW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9y
YWdlQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBcCiAg
ICAgaW5zcGVjdG9yL1NjcmlwdEdDRXZlbnRMaXN0ZW5lci5oIFwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCmluZGV4IDRmODQ3YTMuLjI3YTM2NTggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNTI2MTEsNiArNTI2MTEsMTQgQEAKIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3Bl
Y3RvclN0YXRlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JTdGF0ZS5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
clN0b3JhZ2VBZ2VudC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiODY4NDA4Li5hN2RhMTVkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEzNCw2ICsxMTM0LDgg
QEAKIAkJNEY0RjVGRkIxMUNCRDJFMTAwQTE4NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGNEY1RkZBMTFD
QkQyRDIwMEExODZCRiAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgKi87IH07CiAJCTRGNzA3QTk5
MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjcwN0E5NzExRUY2Nzk0
MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwICovOyB9OwogCQk0Rjcw
N0E5QTExRUY2Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGNzA3QTk4MTFFRjY3
OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oICovOyB9OworCQk0RkEz
QjkwQTEyNUNEMTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEZBM0I5MDgxMjVDRDEyMTAwMzAwQkFE
IC8qIEluc3BlY3RvclN0YXRlLmNwcCAqLzsgfTsKKwkJNEZBM0I5MEIxMjVDRDEyMjAwMzAwQkFE
IC8qIEluc3BlY3RvclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0RkEzQjkwOTEyNUNEMTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuaCAq
LzsgfTsKIAkJNEZEOEQwRjIxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEZEOEQwRjAxMTlD
NzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuY3BwICovOyB9OwogCQk0RkQ4RDBGMzExOUM3
MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEZEOEQwRjExMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdD
RXZlbnQuaCAqLzsgfTsKIAkJNTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE4NDY3
MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcxNjksNiArNzE3MSw4IEBACiAJCTRGNEY1RkZD
MTFDQkQzMDEwMEExODZCRiAvKiBJbnNwZWN0b3JGcm9udGVuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JGcm9udGVuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0RjcwN0E5NzExRUY2Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
RjcwN0E5ODExRUY2Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEZBM0I5MDgxMjVDRDEyMTAwMzAw
QkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluc3BlY3RvclN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTRGRDhEMEYwMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdEdDRXZlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RkQ4RDBGMTExOUM3MThCMDAyRkE4MjUg
LyogU2NyaXB0R0NFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jp
cHRHQ0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY3MEIwODYw
MkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhY2hlZFBhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMTI2LDYg
KzEyMTMwLDggQEAKIAkJCQk5RjBENkIyRDEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5oICovLAogCQkJCTQxRjA2MjAwMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JSZXNvdXJjZS5jcHAgKi8sCiAJCQkJNDFGMDYxRkYwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3Bl
Y3RvclJlc291cmNlLmggKi8sCisJCQkJNEZBM0I5MDgxMjVDRDEyMTAwMzAwQkFEIC8qIEluc3Bl
Y3RvclN0YXRlLmNwcCAqLywKKwkJCQk0RkEzQjkwOTEyNUNEMTIyMDAzMDBCQUQgLyogSW5zcGVj
dG9yU3RhdGUuaCAqLywKIAkJCQk3QUIwQjFCRTEyMTFBNjIyMDBBNzY5NDAgLyogSW5zcGVjdG9y
U3RvcmFnZUFnZW50LmNwcCAqLywKIAkJCQk3QUIwQjFCRjEyMTFBNjIyMDBBNzY5NDAgLyogSW5z
cGVjdG9yU3RvcmFnZUFnZW50LmggKi8sCiAJCQkJNzU0MTMzQTkxMDJFMDBGNDAwMDc1RDAwIC8q
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwICovLApAQCAtMjA5NjEsNiArMjA5NjcsNyBAQAog
CQkJCTA4MTY2OEQ0MTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwODE2NjhEQTEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91
dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGOEUxMUExMjU2NTkyNjAwMjMwRkY3IC8q
IFByb3h5U2VydmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0RkEzQjkwQjEyNUNEMTIyMDAzMDBC
QUQgLyogSW5zcGVjdG9yU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjEwMjAsNiArMjEwMjcs
NyBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAx
NDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2Rl
IDIuNCI7CisJCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9y
RW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMjM0
OTEsNiArMjM0OTksNyBAQAogCQkJCTA4MTY2OEQ5MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0
TGF5b3V0RW5naW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjhFMTMzMTI1NjVBNDQwMDIz
MEZGNyAvKiBQcm94eVNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUY4RTFDMzEyNTY3
M0UwMDAyMzBGRjcgLyogUHJveHlTZXJ2ZXJDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
RkEzQjkwQTEyNUNEMTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGI1Y2Zm
OGQuLmE0ODMyYWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CkBAIC02OSw2ICs2OSw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
clJlc291cmNlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JTdG9yYWdlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCkBAIC0xMTYsMzUgKzExNywxNCBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBmcm9udGVuZFNldHRpbmdzU2V0dGluZ05hbWUgPSAiZnJvbnRlbmRTZXR0aW5n
cyI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkZWJ1Z2dlckFsd2F5c0VuYWJsZWRTZXR0
aW5nTmFtZSA9ICJkZWJ1Z2dlckVuYWJsZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxh
c3RBY3RpdmVQYW5lbCA9ICJsYXN0QWN0aXZlUGFuZWwiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IG1vbml0b3JpbmdYSFJTZXR0aW5nTmFtZSA9ICJ4aHJNb25pdG9yIjsKLXN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCByZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lID0g
InJlc291cmNlVHJhY2tpbmdFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBwcm9m
aWxlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSA9ICJwcm9maWxlckVuYWJsZWQiOwotCi1zdGF0
aWMgY29uc3QgY2hhciogY29uc3QgbW9uaXRvcmluZ1hIUlN0YXRlTmFtZSA9ICJtb25pdG9yaW5n
WEhSRW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgcmVzb3VyY2VUcmFja2luZ0Vu
YWJsZWRTdGF0ZU5hbWUgPSAicmVzb3VyY2VUcmFja2luZ0VuYWJsZWQiOwotc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IHNlYXJjaGluZ0Zvck5vZGVFbmFibGVkU3RhdGVOYW1lID0gInNlYXJjaGlu
Z0Zvck5vZGVFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB0aW1lbGluZVByb2Zp
bGVyRW5hYmxlZFN0YXRlTmFtZSA9ICJ0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCI7Ci1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZVN0YXRlTmFtZSA9ICJwYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlIjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3Rv
ckF0dGFjaGVkSGVpZ2h0TmFtZSA9ICJpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCI7Ci0KK2NvbnN0
IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6Okxhc3RBY3RpdmVQYW5lbCA9ICJsYXN0
QWN0aXZlUGFuZWwiOwogY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6RWxl
bWVudHNQYW5lbCA9ICJlbGVtZW50cyI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250
cm9sbGVyOjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpTY3JpcHRzUGFuZWwgPSAic2NyaXB0cyI7CiBjb25zdCBjaGFyKiBj
b25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpQcm9maWxlc1BhbmVsID0gInByb2ZpbGVzIjsKIAor
Y29uc3QgdW5zaWduZWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVmYXVsdEF0dGFjaGVkSGVpZ2h0
ID0gMzAwOwogCi1jb25zdCBTdHJpbmcmIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0
YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBzZXR0aW5nTmFtZSwgKCJpbnNwZWN0b3JTdGFydHNBdHRhY2hlZCIpKTsKLSAgICByZXR1
cm4gc2V0dGluZ05hbWU7Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNo
ZWRIZWlnaHQgPSAzMDA7CiBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0
ID0gMjUwLjBmOwogc3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlv
ID0gMC43NWY7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUNvbnNvbGVNZXNzYWdlcyA9
IDEwMDA7CkBAIC0xNTYsMTMgKzEzNiwxMCBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0
b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgICwg
bV9vcGVuaW5nRnJvbnRlbmQoZmFsc2UpCiAgICAgLCBtX2Nzc1N0b3JlKG5ldyBJbnNwZWN0b3JD
U1NTdG9yZSh0aGlzKSkKICAgICAsIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQoMCkKLSAg
ICAsIG1fc2hvd0FmdGVyVmlzaWJsZShsYXN0QWN0aXZlUGFuZWwpCisgICAgLCBtX3Nob3dBZnRl
clZpc2libGUoTGFzdEFjdGl2ZVBhbmVsKQogICAgICwgbV9zZXNzaW9uU2V0dGluZ3MoSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSkKICAgICAsIG1fZ3JvdXBMZXZlbCgwKQotICAgICwgbV9zZWFy
Y2hpbmdGb3JOb2RlKGZhbHNlKQotICAgICwgbV9tb25pdG9yaW5nWEhSKGZhbHNlKQogICAgICwg
bV9wcmV2aW91c01lc3NhZ2UoMCkKLSAgICAsIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoZmFs
c2UpCiAgICAgLCBtX3NldHRpbmdzTG9hZGVkKGZhbHNlKQogICAgICwgbV9pbnNwZWN0b3JCYWNr
ZW5kKEluc3BlY3RvckJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1faW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKHRoaXMpKQpAQCAt
MTczLDYgKzE1MCw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIo
UGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgLCBtX3Byb2ZpbGVyQWdl
bnQoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKHRoaXMpKQogI2VuZGlmCiB7CisgICAg
bV9zdGF0ZSA9IG5ldyBJbnNwZWN0b3JTdGF0ZShjbGllbnQpOwogICAgIEFTU0VSVF9BUkcocGFn
ZSwgcGFnZSk7CiAgICAgQVNTRVJUX0FSRyhjbGllbnQsIGNsaWVudCk7CiB9CkBAIC0yMTYsODEg
KzE5NCw2MyBAQCBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZWQoKSBjb25zdAogICAg
IHJldHVybiBtX2luc3BlY3RlZFBhZ2UtPnNldHRpbmdzKCktPmRldmVsb3BlckV4dHJhc0VuYWJs
ZWQoKTsKIH0KIAotU3RyaW5nIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldHRpbmcoY29uc3QgU3Ry
aW5nJiBrZXkpIGNvbnN0Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNhdmVBcHBsaWNhdGlv
blNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpCiB7Ci0gICAgU2V0dGluZ3M6Oml0ZXJh
dG9yIGl0ID0gbV9zZXR0aW5ncy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ICE9IG1fc2V0dGluZ3Mu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwotCi0gICAgU3RyaW5nIHZhbHVlOwot
ICAgIG1fY2xpZW50LT5wb3B1bGF0ZVNldHRpbmcoa2V5LCAmdmFsdWUpOwotICAgIG1fc2V0dGlu
Z3Muc2V0KGtleSwgdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKKyAgICBtX3N0YXRlLT5zZXRG
cm9udGVuZFNldHRpbmdzKHNldHRpbmdzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlU2Vzc2lvblNldHRpbmdzKGNvbnN0IFN0cmluZyYg
c2V0dGluZ3NKU09OKQogewotICAgIG1fc2V0dGluZ3Muc2V0KGtleSwgdmFsdWUpOwotICAgIG1f
Y2xpZW50LT5zdG9yZVNldHRpbmcoa2V5LCB2YWx1ZSk7CisgICAgbV9zZXNzaW9uU2V0dGluZ3Mg
PSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHNldHRpbmdzSlNPTik7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBz
ZXR0aW5ncykKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZUluc3BlY3RvclN0YXRl
RnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvckNvb2tpZSkKIHsKLSAgICBzZXRTZXR0
aW5nKGZyb250ZW5kU2V0dGluZ3NTZXR0aW5nTmFtZSwgc2V0dGluZ3MpOworICAgIG1fc3RhdGUt
PnJlc3RvcmVGcm9tSlNPTlN0cmluZyhpbnNwZWN0b3JDb29raWUpOworICAgIGlmIChtX3N0YXRl
LT50aW1lbGluZVByb2ZpbGVyRW5hYmxlZCgpKQorICAgICAgICBzdGFydFRpbWVsaW5lUHJvZmls
ZXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlU2Vzc2lvblNldHRpbmdz
KGNvbnN0IFN0cmluZyYgc2V0dGluZ3NKU09OKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpn
ZXRJbnNwZWN0b3JTdGF0ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3RhdGUpCiB7Ci0gICAg
bV9zZXNzaW9uU2V0dGluZ3MgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHNldHRpbmdzSlNP
Tik7CisgICAgKnN0YXRlID0gbV9zdGF0ZS0+Z2V0U3RhdGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpnZXRJbnNwZWN0b3JTdGF0ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piog
c3RhdGUpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNldHRpbmdzKFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBzZXR0aW5ncykKIHsKLSAgICAoKnN0YXRlKS0+c2V0Qm9vbGVhbihtb25p
dG9yaW5nWEhSU3RhdGVOYW1lLCBtX21vbml0b3JpbmdYSFIpOwotICAgICgqc3RhdGUpLT5zZXRC
b29sZWFuKHJlc291cmNlVHJhY2tpbmdFbmFibGVkU3RhdGVOYW1lLCBtX3Jlc291cmNlVHJhY2tp
bmdFbmFibGVkKTsKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBpZiAobV9k
ZWJ1Z2dlckFnZW50KQotICAgICAgICAoKnN0YXRlKS0+c2V0TnVtYmVyKHBhdXNlT25FeGNlcHRp
b25zU3RhdGVTdGF0ZU5hbWUsIG1fZGVidWdnZXJBZ2VudC0+cGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSgpKTsKLSNlbmRpZgorICAgICpzZXR0aW5ncyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgKCpzZXR0aW5ncyktPnNldFN0cmluZygiYXBwbGljYXRpb24iLCBtX3N0YXRlLT5mcm9u
dGVuZFNldHRpbmdzKCkpOworICAgICgqc2V0dGluZ3MpLT5zZXRTdHJpbmcoInNlc3Npb24iLCBt
X3Nlc3Npb25TZXR0aW5ncy0+dG9KU09OU3RyaW5nKCkpOwogfQogCi12b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCkKK2Jvb2wgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gc3RhdGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHN0
YXRlLT5zZXRCb29sZWFuKG1vbml0b3JpbmdYSFJTdGF0ZU5hbWUsIG1fbW9uaXRvcmluZ1hIUik7
Ci0gICAgc3RhdGUtPnNldEJvb2xlYW4ocmVzb3VyY2VUcmFja2luZ0VuYWJsZWRTdGF0ZU5hbWUs
IG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpOwotICAgIHN0YXRlLT5zZXRCb29sZWFuKHRpbWVs
aW5lUHJvZmlsZXJFbmFibGVkU3RhdGVOYW1lLCBtX3RpbWVsaW5lQWdlbnQpOwotICAgIHN0YXRl
LT5zZXRCb29sZWFuKHNlYXJjaGluZ0Zvck5vZGVFbmFibGVkU3RhdGVOYW1lLCBtX3NlYXJjaGlu
Z0Zvck5vZGUpOwotICAgIG1fY2xpZW50LT51cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZShzdGF0
ZS0+dG9KU09OU3RyaW5nKCkpOworICAgIHJldHVybiBtX3N0YXRlLT5zZWFyY2hpbmdGb3JOb2Rl
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZUluc3BlY3RvclN0YXRl
RnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXRlU3RyaW5nKQorYm9vbCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiBpbnNwZWN0b3JTdGF0ZVZhbHVlID0gSW5zcGVjdG9yVmFs
dWU6OnBhcnNlSlNPTihpbnNwZWN0b3JTdGF0ZVN0cmluZyk7Ci0gICAgaWYgKCFpbnNwZWN0b3JT
dGF0ZVZhbHVlKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG1fc3RhdGUtPnJlc291cmNl
VHJhY2tpbmdFbmFibGVkKCk7Cit9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbnNw
ZWN0b3JTdGF0ZSA9IGluc3BlY3RvclN0YXRlVmFsdWUtPmFzT2JqZWN0KCk7Ci0gICAgaWYgKCFp
bnNwZWN0b3JTdGF0ZSkKLSAgICAgICAgcmV0dXJuOworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVy
OjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpCit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmluc3Bl
Y3RvclN0YXJ0c0F0dGFjaGVkKCk7Cit9CiAKLSAgICBpbnNwZWN0b3JTdGF0ZS0+Z2V0Qm9vbGVh
bihtb25pdG9yaW5nWEhSU3RhdGVOYW1lLCAmbV9tb25pdG9yaW5nWEhSKTsKLSAgICBpbnNwZWN0
b3JTdGF0ZS0+Z2V0Qm9vbGVhbihyZXNvdXJjZVRyYWNraW5nRW5hYmxlZFN0YXRlTmFtZSwgJm1f
cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpOwotICAgIGluc3BlY3RvclN0YXRlLT5nZXRCb29sZWFu
KHNlYXJjaGluZ0Zvck5vZGVFbmFibGVkU3RhdGVOYW1lLCAmbV9zZWFyY2hpbmdGb3JOb2RlKTsK
K3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoYm9v
bCBhdHRhY2hlZCkKK3sKKyAgICBtX3N0YXRlLT5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChh
dHRhY2hlZCk7Cit9CiAKLSAgICBib29sIHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkID0gZmFsc2U7
Ci0gICAgaW5zcGVjdG9yU3RhdGUtPmdldEJvb2xlYW4odGltZWxpbmVQcm9maWxlckVuYWJsZWRT
dGF0ZU5hbWUsICZ0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCk7Ci0gICAgaWYgKHRpbWVsaW5lUHJv
ZmlsZXJFbmFibGVkKQotICAgICAgICBzdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKLSAgICBlbHNl
Ci0gICAgICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7Cit2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGludCBoZWlnaHQpCit7CisgICAgbV9zdGF0
ZS0+c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoaGVpZ2h0KTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpnZXRTZXR0aW5ncyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc2V0dGlu
Z3MpCitpbnQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKSBj
b25zdAogewotICAgICpzZXR0aW5ncyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
KCpzZXR0aW5ncyktPnNldFN0cmluZygiYXBwbGljYXRpb24iLCBzZXR0aW5nKGZyb250ZW5kU2V0
dGluZ3NTZXR0aW5nTmFtZSkpOwotICAgICgqc2V0dGluZ3MpLT5zZXRTdHJpbmcoInNlc3Npb24i
LCBtX3Nlc3Npb25TZXR0aW5ncy0+dG9KU09OU3RyaW5nKCkpOworICAgIHJldHVybiBtX3N0YXRl
LT5pbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6Omluc3BlY3QoTm9kZSogbm9kZSkKQEAgLTQyNiwxMiArMzg2LDEyIEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6bWFya1RpbWVsaW5lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9yZUxhc3RBY3RpdmVQYW5lbChjb25zdCBTdHJpbmcm
IHBhbmVsTmFtZSkKIHsKLSAgICBzZXRTZXR0aW5nKGxhc3RBY3RpdmVQYW5lbCwgcGFuZWxOYW1l
KTsKKyAgICBtX3N0YXRlLT5zZXRMYXN0QWN0aXZlUGFuZWwocGFuZWxOYW1lKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkKQogewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFt
X3NlYXJjaGluZ0Zvck5vZGUpCisgICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fc3RhdGUtPnNlYXJj
aGluZ0Zvck5vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IHJlc3Vs
dC5pbm5lck5vZGUoKTsKQEAgLTQ0Niw3ICs0MDYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmhhbmRsZU1vdXNlUHJlc3MoKQogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBBU1NFUlQobV9zZWFyY2hpbmdGb3JOb2RlKTsKKyAgICBBU1NFUlQobV9zdGF0
ZS0+c2VhcmNoaW5nRm9yTm9kZSgpKTsKICAgICBpZiAoIW1faGlnaGxpZ2h0ZWROb2RlKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQ4NSwxMiArNDQ1LDExIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6aW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChGcmFtZSogZnJhbWUpCiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJs
ZWQpCiB7Ci0gICAgaWYgKG1fc2VhcmNoaW5nRm9yTm9kZSA9PSBlbmFibGVkKQorICAgIGlmICht
X3N0YXRlLT5zZWFyY2hpbmdGb3JOb2RlKCkgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwot
ICAgIG1fc2VhcmNoaW5nRm9yTm9kZSA9IGVuYWJsZWQ7Ci0gICAgaWYgKCFtX3NlYXJjaGluZ0Zv
ck5vZGUpCisgICAgbV9zdGF0ZS0+c2V0U2VhcmNoaW5nRm9yTm9kZShlbmFibGVkKTsKKyAgICBp
ZiAoIW1fc3RhdGUtPnNlYXJjaGluZ0Zvck5vZGUoKSkKICAgICAgICAgaGlkZUhpZ2hsaWdodCgp
OwotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0
YXRlKQpAQCAtNTAyLDExICs0NjEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNl
YXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoYm9vbCBlbmFibGVkLCBib29s
KiBuZXdTdGF0ZSkKIHsKICAgICAqbmV3U3RhdGUgPSBlbmFibGVkOwotICAgIGlmIChtX21vbml0
b3JpbmdYSFIgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fbW9uaXRvcmluZ1hI
UiA9IGVuYWJsZWQ7Ci0gICAgc2V0U2V0dGluZyhtb25pdG9yaW5nWEhSU2V0dGluZ05hbWUsIGVu
YWJsZWQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tp
ZSgpOworICAgIG1fc3RhdGUtPnNldE1vbml0b3JpbmdYSFIoZW5hYmxlZCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZyb250ZW5kKCkKQEAgLTU3MCw3ICs1MjUsNyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVs
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHBhbmVsID09IGxhc3RBY3RpdmVQ
YW5lbCkKKyAgICBpZiAocGFuZWwgPT0gTGFzdEFjdGl2ZVBhbmVsKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX2Zyb250ZW5kLT5zaG93UGFuZWwocGFuZWwpOwpAQCAtNjA2LDcgKzU2MSw3IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKCkKICAgICB1bmJp
bmRBbGxSZXNvdXJjZXMoKTsKICAgICBzdG9wVGltZWxpbmVQcm9maWxlcigpOwogCi0gICAgbV9z
aG93QWZ0ZXJWaXNpYmxlID0gbGFzdEFjdGl2ZVBhbmVsOworICAgIG1fc2hvd0FmdGVyVmlzaWJs
ZSA9IExhc3RBY3RpdmVQYW5lbDsKIAogICAgIGhpZGVIaWdobGlnaHQoKTsKIApAQCAtNjQ0LDgg
KzU5OSw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3Rz
KCkKICAgICBpZiAoIW1fZnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3No
b3dBZnRlclZpc2libGUgPT0gbGFzdEFjdGl2ZVBhbmVsKQotICAgICAgICBtX3Nob3dBZnRlclZp
c2libGUgPSBzZXR0aW5nKGxhc3RBY3RpdmVQYW5lbCk7CisgICAgaWYgKG1fc2hvd0FmdGVyVmlz
aWJsZSA9PSBMYXN0QWN0aXZlUGFuZWwpCisgICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IG1f
c3RhdGUtPmxhc3RBY3RpdmVQYW5lbCgpOwogCiAgICAgc2hvd1BhbmVsKG1fc2hvd0FmdGVyVmlz
aWJsZSk7CiAKQEAgLTcwMyw4ICs2NTgsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJl
c3RvcmVEZWJ1Z2dlcigpCiAgICAgaWYgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmlzRGVidWdn
ZXJBbHdheXNFbmFibGVkKCkpCiAgICAgICAgIGVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGZh
bHNlKTsKICAgICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIGRlYnVnZ2VyRW5hYmxlZCA9IHNldHRp
bmcoZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUpOwotICAgICAgICBpZiAoZGVidWdn
ZXJFbmFibGVkID09ICJ0cnVlIiB8fCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKQorICAgICAg
ICBpZiAobV9zdGF0ZS0+ZGVidWdnZXJBbHdheXNFbmFibGVkKCkgfHwgbV9hdHRhY2hEZWJ1Z2dl
cldoZW5TaG93bikKICAgICAgICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7CiAgICAgfQogI2VuZGlm
CkBAIC03MTUsMTEgKzY2OSw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZVBy
b2ZpbGVyKCkKICAgICBBU1NFUlQobV9mcm9udGVuZCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCiAgICAgbV9wcm9maWxlckFnZW50LT5zZXRGcm9udGVuZChtX2Zyb250ZW5kLmdl
dCgpKTsKLSAgICBpZiAoIVNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCgp
KSB7Ci0gICAgICAgIFN0cmluZyBwcm9maWxlckVuYWJsZWRTZXR0aW5nID0gc2V0dGluZyhwcm9m
aWxlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSk7Ci0gICAgICAgIGlmIChwcm9maWxlckVuYWJs
ZWRTZXR0aW5nID09ICJ0cnVlIikKLSAgICAgICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7Ci0gICAg
fQorICAgIGlmICghU2NyaXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNFbmFibGVkKCkgJiYg
bV9zdGF0ZS0+cHJvZmlsZXJBbHdheXNFbmFibGVkKCkpCisgICAgICAgIGVuYWJsZVByb2ZpbGVy
KCk7CiAjZW5kaWYKIH0KIApAQCAtODg1LDcgKzgzNiw3IEBAIEluc3BlY3RvclJlc291cmNlKiBJ
bnNwZWN0b3JDb250cm9sbGVyOjpnZXRUcmFja2VkUmVzb3VyY2UodW5zaWduZWQgbG9uZyBpZGVu
dGlmCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1f
cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpCisgICAgaWYgKG1fc3RhdGUtPnJlc291cmNlVHJhY2tp
bmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBtX3Jlc291cmNlcy5nZXQoaWRlbnRpZmllciku
Z2V0KCk7CiAKICAgICBib29sIGlzTWFpblJlc291cmNlID0gbV9tYWluUmVzb3VyY2UgJiYgbV9t
YWluUmVzb3VyY2UtPmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyOwpAQCAtOTE2LDcgKzg2Nyw3
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNh
Y2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsCiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7
CiAgICAgYm9vbCBpc01haW5SZXNvdXJjZSA9IGlzTWFpblJlc291cmNlTG9hZGVyKGxvYWRlciwg
S1VSTChQYXJzZWRVUkxTdHJpbmcsIGNhY2hlZFJlc291cmNlLT51cmwoKSkpOwogICAgIGVuc3Vy
ZVNldHRpbmdzTG9hZGVkKCk7Ci0gICAgaWYgKCFpc01haW5SZXNvdXJjZSAmJiAhbV9yZXNvdXJj
ZVRyYWNraW5nRW5hYmxlZCkKKyAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFtX3N0YXRlLT5y
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8
SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gSW5zcGVjdG9yUmVzb3VyY2U6OmNyZWF0ZUNh
Y2hlZChtX2luc3BlY3RlZFBhZ2UtPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIo
KSwgbG9hZGVyLCBjYWNoZWRSZXNvdXJjZSk7CkBAIC05NDAsNyArODkxLDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLAogCiAgICAgYm9vbCBpc01haW5SZXNvdXJjZSA9IGlzTWFpblJlc291cmNl
TG9hZGVyKGxvYWRlciwgcmVxdWVzdC51cmwoKSk7CiAgICAgZW5zdXJlU2V0dGluZ3NMb2FkZWQo
KTsKLSAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVk
KQorICAgIGlmICghaXNNYWluUmVzb3VyY2UgJiYgIW1fc3RhdGUtPnJlc291cmNlVHJhY2tpbmdF
bmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJj
ZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JSZXNvdXJjZTo6Y3JlYXRlKGlkZW50aWZpZXIsIGxvYWRl
ciwgcmVxdWVzdC51cmwoKSk7CkBAIC0xMTI3LDEwICsxMDc4LDEwIEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxv
bmcgaWRlbnRpCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtX21vbml0b3JpbmdYSFIpCisgICAgaWYgKG1fc3RhdGUtPm1vbml0b3JpbmdYSFIoKSkKICAg
ICAgICAgYWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBl
LCBMb2dNZXNzYWdlTGV2ZWwsICJYSFIgZmluaXNoZWQgbG9hZGluZzogXCIiICsgdXJsICsgIlwi
LiIsIHNlbmRMaW5lTnVtYmVyLCBzZW5kVVJMKTsKIAotICAgIGlmICghbV9yZXNvdXJjZVRyYWNr
aW5nRW5hYmxlZCkKKyAgICBpZiAoIW1fc3RhdGUtPnJlc291cmNlVHJhY2tpbmdFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIEluc3BlY3RvclJlc291cmNlKiByZXNvdXJjZSA9IG1f
cmVzb3VyY2VzLmdldChpZGVudGlmaWVyKS5nZXQoKTsKQEAgLTExNDUsNyArMTA5Niw3IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcgaWRlbnRpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0
SW1wb3J0ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0
cmluZykKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZCkKKyAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9zdGF0ZS0+cmVzb3VyY2VUcmFja2luZ0VuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW5zcGVjdG9yUmVzb3VyY2UqIHJlc291cmNl
ID0gbV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOwpAQCAtMTE2NCw4ICsxMTE1LDcg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZChi
b29sIGVuYWJsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFn
ZSk7Ci0gICAgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCA9IGVuYWJsZTsKLSAgICB1cGRhdGVJ
bnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldFJlc291cmNlVHJhY2tpbmdF
bmFibGVkKGVuYWJsZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0UmVzb3Vy
Y2VUcmFja2luZ0VuYWJsZWQoYm9vbCBlbmFibGUsIGJvb2wgYWx3YXlzLCBib29sKiBuZXdTdGF0
ZSkKQEAgLTExNzMsMTggKzExMjMsMTYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRS
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJsZSwgYm9vbCBhbHdheXMsIGIKICAgICAq
bmV3U3RhdGUgPSBlbmFibGU7CiAKICAgICBpZiAoYWx3YXlzKQotICAgICAgICBzZXRTZXR0aW5n
KHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsIGVuYWJsZSA/ICJ0cnVl
IiA6ICJmYWxzZSIpOworICAgICAgICBtX3N0YXRlLT5zZXRSZXNvdXJjZVRyYWNraW5nQWx3YXlz
RW5hYmxlZChlbmFibGUpOwogCi0gICAgaWYgKG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQgPT0g
ZW5hYmxlKQorICAgIGlmIChtX3N0YXRlLT5yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpID09IGVu
YWJsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7Ci0g
ICAgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCA9IGVuYWJsZTsKKyAgICBtX3N0YXRlLT5zZXRS
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZChlbmFibGUpOwogCiAgICAgaWYgKGVuYWJsZSkKICAgICAg
ICAgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2No
ZWR1bGVSZWZyZXNoKHRydWUpOwotCi0gICAgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbnN1cmVTZXR0aW5nc0xvYWRlZCgpCkBA
IC0xMTkzLDE1ICsxMTQxLDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5zdXJlU2V0
dGluZ3NMb2FkZWQoKQogICAgICAgICByZXR1cm47CiAgICAgbV9zZXR0aW5nc0xvYWRlZCA9IHRy
dWU7CiAKLSAgICBTdHJpbmcgcmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWQgPSBzZXR0aW5n
KHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkU2V0dGluZ05hbWUpOwotICAgIGlmIChyZXNv
dXJjZVRyYWNraW5nQWx3YXlzRW5hYmxlZCA9PSAidHJ1ZSIpCi0gICAgICAgIG1fcmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQgPSB0cnVlOwotCi0gICAgU3RyaW5nIG1vbml0b3JpbmdYSFJBbHdheXNF
bmFibGVkID0gc2V0dGluZyhtb25pdG9yaW5nWEhSU2V0dGluZ05hbWUpOwotICAgIGlmIChtb25p
dG9yaW5nWEhSQWx3YXlzRW5hYmxlZCA9PSAidHJ1ZSIpCi0gICAgICAgIG1fbW9uaXRvcmluZ1hI
UiA9IHRydWU7CisgICAgbV9zdGF0ZS0+cmVzdG9yZUZyb21TZXR0aW5ncygpOwogCi0gICAgdXBk
YXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKTsKKyAgICBpZiAobV9zdGF0ZS0+cmVzb3VyY2VUcmFj
a2luZ0Fsd2F5c0VuYWJsZWQoKSkKKyAgICAgICAgbV9zdGF0ZS0+c2V0UmVzb3VyY2VUcmFja2lu
Z0VuYWJsZWQodHJ1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1l
bGluZVByb2ZpbGVyKCkKQEAgLTEyMTYsNyArMTE1OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKCkKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAg
ICAgbV9mcm9udGVuZC0+dGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQoKTsKIAotICAgIHVwZGF0
ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CisgICAgbV9zdGF0ZS0+c2V0VGltZWxpbmVQcm9maWxl
ckVuYWJsZWQodHJ1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWVs
aW5lUHJvZmlsZXIoKQpAQCAtMTIzMSw3ICsxMTc0LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpzdG9wVGltZWxpbmVQcm9maWxlcigpCiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAg
IG1fZnJvbnRlbmQtPnRpbWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkKCk7CiAKLSAgICB1cGRhdGVJ
bnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldFRpbWVsaW5lUHJvZmlsZXJF
bmFibGVkKGZhbHNlKTsKIH0KIAogI2lmIEVOQUJMRShXT1JLRVJTKQpAQCAtMTYwMywxNCArMTU0
NiwxNCBAQCBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzLCBi
b29sIHNraXBSZWNvbXBpbGUpCiB7CiAgICAgaWYgKGFsd2F5cykKLSAgICAgICAgc2V0U2V0dGlu
Zyhwcm9maWxlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSwgInRydWUiKTsKKyAgICAgICAgbV9z
dGF0ZS0+c2V0UHJvZmlsZXJBbHdheXNFbmFibGVkKHRydWUpOwogICAgIG1fcHJvZmlsZXJBZ2Vu
dC0+ZW5hYmxlKHNraXBSZWNvbXBpbGUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmRpc2FibGVQcm9maWxlcihib29sIGFsd2F5cykKIHsKICAgICBpZiAoYWx3YXlzKQotICAgICAg
ICBzZXRTZXR0aW5nKHByb2ZpbGVyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lLCAiZmFsc2UiKTsK
KyAgICAgICAgbV9zdGF0ZS0+c2V0UHJvZmlsZXJBbHdheXNFbmFibGVkKGZhbHNlKTsKICAgICBt
X3Byb2ZpbGVyQWdlbnQtPmRpc2FibGUoKTsKIH0KICNlbmRpZgpAQCAtMTYyMCw3ICsxNTYzLDcg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVEZWJ1Z2dlckZyb21Gcm9udGVuZChi
b29sIGFsd2F5cykKIHsKICAgICBBU1NFUlQoIWRlYnVnZ2VyRW5hYmxlZCgpKTsKICAgICBpZiAo
YWx3YXlzKQotICAgICAgICBzZXRTZXR0aW5nKGRlYnVnZ2VyQWx3YXlzRW5hYmxlZFNldHRpbmdO
YW1lLCAidHJ1ZSIpOworICAgICAgICBtX3N0YXRlLT5zZXREZWJ1Z2dlckFsd2F5c0VuYWJsZWQo
dHJ1ZSk7CiAKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIApAQCAtMTY1MSw3ICsxNTk0
LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdh
eXMpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNldFNldHRp
bmcoZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsICJmYWxzZSIpOworICAgICAgICBt
X3N0YXRlLT5zZXREZWJ1Z2dlckFsd2F5c0VuYWJsZWQoZmFsc2UpOwogCiAgICAgQVNTRVJUKG1f
aW5zcGVjdGVkUGFnZSk7CiAKQEAgLTE3MjQsMTIgKzE2NjcsMTQgQEAgU3RyaW5nIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmJyZWFrcG9pbnRzU2V0dGluZ0tleSgpCiAKIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IEluc3BlY3RvckNvbnRyb2xsZXI6OmxvYWRCcmVha3BvaW50cygpCiB7Ci0gICAg
cmV0dXJuIEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oc2V0dGluZyhicmVha3BvaW50c1NldHRp
bmdLZXkoKSkpOworICAgIFN0cmluZyBqc29uU3RyaW5nOworICAgIG1fY2xpZW50LT5wb3B1bGF0
ZVNldHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5KCksICZqc29uU3RyaW5nKTsKKyAgICByZXR1
cm4gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihqc29uU3RyaW5nKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzYXZlQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJyZWFrcG9pbnRzKQogewotICAgIHNldFNldHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5
KCksIGJyZWFrcG9pbnRzLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9jbGllbnQtPnN0b3JlU2V0
dGluZyhicmVha3BvaW50c1NldHRpbmdLZXkoKSwgYnJlYWtwb2ludHMtPnRvSlNPTlN0cmluZygp
KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5k
ZXggNTYxNmUwMi4uMDM4OGYwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaApAQCAtNjksNiArNjksNyBAQCBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKIGNs
YXNzIEluc3BlY3Rvck9iamVjdDsKIGNsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ7CiBjbGFz
cyBJbnNwZWN0b3JSZXNvdXJjZTsKK2NsYXNzIEluc3BlY3RvclN0YXRlOwogY2xhc3MgSW5zcGVj
dG9yU3RvcmFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDsKIGNsYXNzIElu
c3BlY3RvclZhbHVlOwpAQCAtMTAzLDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEhh
c2hNYXA8aW50LCBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gPiBEYXRhYmFzZVJl
c291cmNlc01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW5zcGVjdG9yRE9N
U3RvcmFnZVJlc291cmNlPiA+IERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA7CiAKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgTGFzdEFjdGl2ZVBhbmVsOwogICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBDb25zb2xlUGFuZWw7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IEVsZW1l
bnRzUGFuZWw7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFByb2ZpbGVzUGFuZWw7CkBA
IC0xMjMsMTMgKzEyNSwxMSBAQCBwdWJsaWM6CiAgICAgUGFnZSogaW5zcGVjdGVkUGFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQogICAgIHZvaWQgcmVsb2FkUGFnZSgpOwog
Ci0gICAgU3RyaW5nIHNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OwotICAgIHZvaWQg
c2V0U2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAg
dm9pZCBzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKTsKICAg
ICB2b2lkIHNhdmVTZXNzaW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBnZXRT
ZXR0aW5ncyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiopOwogCi0gICAgdm9pZCByZXN0b3JlSW5z
cGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdGUpOworICAg
IHZvaWQgcmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3Bl
Y3RvckNvb2tpZSk7CiAKICAgICB2b2lkIGluc3BlY3QoTm9kZSopOwogICAgIHZvaWQgaGlnaGxp
Z2h0KE5vZGUqKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckNv
bnNvbGVNZXNzYWdlcygpOwogICAgIGNvbnN0IFZlY3RvcjxPd25QdHI8Q29uc29sZU1lc3NhZ2U+
ID4mIGNvbnNvbGVNZXNzYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc29sZU1lc3NhZ2VzOyB9
CiAKLSAgICBib29sIHNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3Nl
YXJjaGluZ0Zvck5vZGU7IH0KKyAgICBib29sIHNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25z
dDsKICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQm
LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKICAgICB2b2lkIGhhbmRsZU1vdXNlUHJlc3MoKTsK
IApAQCAtMTc4LDcgKzE3OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UmVzb3VyY2VUcmFj
a2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKTsKICAgICB2b2lkIHNldFJlc291cmNlVHJhY2tpbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCBhbHdheXMsIGJvb2wqIG5ld1N0YXRlKTsKLSAgICBi
b29sIHJlc291cmNlVHJhY2tpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVRy
YWNraW5nRW5hYmxlZDsgfQorICAgIGJvb2wgcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKSBjb25z
dDsKIAogICAgIHZvaWQgZW5zdXJlU2V0dGluZ3NMb2FkZWQoKTsKIApAQCAtMjcyLDcgKzI3Miwx
MiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgp
OwogICAgIHZvaWQgc2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYgc291cmNl
KTsKIAotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0
dGluZ05hbWUoKTsKKyAgICBib29sIGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCk7CisgICAgdm9p
ZCBzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChib29sKTsKKyAgICB2b2lkIHNldEluc3BlY3Rv
ckF0dGFjaGVkSGVpZ2h0KGludCBoZWlnaHQpOworICAgIGludCBpbnNwZWN0b3JBdHRhY2hlZEhl
aWdodCgpIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hl
ZEhlaWdodDsKIAogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2ll
KCk7CkBAIC0zNDcsNiArMzUyLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SW5zcGVjdG9yU3Rv
cmFnZUFnZW50PiBtX3N0b3JhZ2VBZ2VudDsKICAgICBPd25QdHI8SW5zcGVjdG9yQ1NTU3RvcmU+
IG1fY3NzU3RvcmU7CiAgICAgT3duUHRyPEluc3BlY3RvclRpbWVsaW5lQWdlbnQ+IG1fdGltZWxp
bmVBZ2VudDsKKyAgICBPd25QdHI8SW5zcGVjdG9yU3RhdGU+IG1fc3RhdGU7CiAKICNpZiBFTkFC
TEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogICAgIE93blB0cjxJbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQ+IG1fYXBwbGljYXRpb25DYWNoZUFnZW50OwpAQCAtMzczLDEwICszNzks
NyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbV9zZXNzaW9uU2V0dGlu
Z3M7CiAjZW5kaWYKICAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7Ci0gICAgYm9vbCBtX3NlYXJj
aGluZ0Zvck5vZGU7Ci0gICAgYm9vbCBtX21vbml0b3JpbmdYSFI7CiAgICAgQ29uc29sZU1lc3Nh
Z2UqIG1fcHJldmlvdXNNZXNzYWdlOwotICAgIGJvb2wgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZDsKICAgICBib29sIG1fc2V0dGluZ3NMb2FkZWQ7CiAgICAgUmVmUHRyPEluc3BlY3RvckJhY2tl
bmQ+IG1faW5zcGVjdG9yQmFja2VuZDsKICAgICBPd25QdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCmluZGV4IDc3NjE2ZGEuLjQ4
MTJiMmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwuY3BwCkBAIC00Nyw3ICs0Nyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSA9ICJp
bnNwZWN0b3JBdHRhY2hlZEhlaWdodCI7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEF0
dGFjaGVkSGVpZ2h0ID0gMzAwOwogc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhl
aWdodCA9IDI1MC4wZjsKIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRS
YXRpbyA9IDAuNzVmOwpAQCAtMTA4LDcgKzEwNyw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQog
ewogICAgIHVuc2lnbmVkIHRvdGFsSGVpZ2h0ID0gbV9mcm9udGVuZFBhZ2UtPm1haW5GcmFtZSgp
LT52aWV3KCktPnZpc2libGVIZWlnaHQoKSArIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVj
dGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CiAgICAgdW5z
aWduZWQgYXR0YWNoZWRIZWlnaHQgPSBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGhl
aWdodCwgdG90YWxIZWlnaHQpOwotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0U2V0dGlu
ZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUsIFN0cmluZzo6bnVtYmVyKGF0dGFjaGVkSGVp
Z2h0KSk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRJbnNwZWN0b3JBdHRhY2hlZEhl
aWdodChhdHRhY2hlZEhlaWdodCk7CiAgICAgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoYXR0YWNo
ZWRIZWlnaHQpOwogfQogCkBAIC0xMzQsMTAgKzEzMyw5IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCkKIHZvaWQgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KCkK
IHsKICAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQo
KTsKLSAgICBTdHJpbmcgYXR0YWNoZWRIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNl
dHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lKTsKKyAgICBpbnQgYXR0YWNoZWRIZWln
aHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7CiAg
ICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQu
dG9JbnQoJnN1Y2Nlc3MpOwotICAgIHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3Mg
PyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVpZ2h0KSA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsK
KyAgICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGF0dGFjaGVkSGVpZ2h0KSA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKICAgICAKICAg
ICAvLyBUaGlzIGNhbGwgbWlnaHQgbm90IGdvIHRocm91Z2ggKGlmIHRoZSB3aW5kb3cgc3RhcnRz
IG91dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUgd2luZG93IGlzIGluaXRpYWxseSBjcmVhdGVkIGF0
dGFjaGVkLAogICAgIC8vIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRvdyBpcyBuZXZl
ciBjYWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHNldCB0aGUgYXR0YWNoZWRXaW5k
b3dIZWlnaHQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5j
cHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4ZmZkZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKKworI2luY2x1ZGUgIkluc3Bl
Y3RvckNsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2RlZmluZSBSRUdJU1RF
Ul9JTlNQRUNUT1JfUFJPUEVSVFkobmFtZSwgdmFsdWUsIHN0YXRlTmFtZSwgcHJlZmVyZW5jZXNO
YW1lKVwKK21fIyNuYW1lLmluaXQodGhpcywgdmFsdWUpO1wKK21faW5zcGVjdG9yQ29va2llLnNl
dCgmbV8jI25hbWUsICJuYW1lIik7XAoraWYgKHN0YXRlTmFtZSlcCittX2luc3BlY3RvclN0YXRl
LnNldCgmbV8jI25hbWUsICJzdGF0ZU5hbWUiKTtcCitpZiAocHJlZmVyZW5jZXNOYW1lKVwKK21f
aW5zcGVjdG9yUHJlZmVyZW5jZXMuc2V0KCZtXyMjbmFtZSwgInByZWZlcmVuY2VOYW1lIik7CisK
K0luc3BlY3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZShJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkK
KyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICBSRUdJU1RFUl9JTlNQRUNUT1JfUFJPUEVS
VFkobW9uaXRvcmluZ1hIUiwgZmFsc2UsICJtb25pdG9yaW5nWEhSIiwgInhock1vbml0b3IiKTsK
KyAgICBSRUdJU1RFUl9JTlNQRUNUT1JfUFJPUEVSVFkocmVzb3VyY2VUcmFja2luZ0VuYWJsZWQs
IGZhbHNlLCAicmVzb3VyY2VUcmFja2luZ0VuYWJsZWQiLCAwKTsKKyAgICBSRUdJU1RFUl9JTlNQ
RUNUT1JfUFJPUEVSVFkocmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWQsIGZhbHNlLCAwLCAi
cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQiKTsKKyAgICBSRUdJU1RFUl9JTlNQRUNUT1JfUFJPUEVS
VFkodGltZWxpbmVQcm9maWxlckVuYWJsZWQsIGZhbHNlLCAidGltZWxpbmVQcm9maWxlckVuYWJs
ZWQiLCAwKTsKKyAgICBSRUdJU1RFUl9JTlNQRUNUT1JfUFJPUEVSVFkoc2VhcmNoaW5nRm9yTm9k
ZSwgZmFsc2UsICJzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZCIsIDApOworICAgIFJFR0lTVEVSX0lO
U1BFQ1RPUl9QUk9QRVJUWShwcm9maWxlckFsd2F5c0VuYWJsZWQsIGZhbHNlLCAwLCAicHJvZmls
ZXJFbmFibGVkIik7CisgICAgUkVHSVNURVJfSU5TUEVDVE9SX1BST1BFUlRZKGZyb250ZW5kU2V0
dGluZ3MsICIiLCAwLCAiZnJvbnRlbmRTZXR0aW5ncyIpOworICAgIFJFR0lTVEVSX0lOU1BFQ1RP
Ul9QUk9QRVJUWShkZWJ1Z2dlckFsd2F5c0VuYWJsZWQsIGZhbHNlLCAwLCAiZGVidWdnZXJFbmFi
bGVkIik7CisgICAgUkVHSVNURVJfSU5TUEVDVE9SX1BST1BFUlRZKGxhc3RBY3RpdmVQYW5lbCwg
SW5zcGVjdG9yQ29udHJvbGxlcjo6TGFzdEFjdGl2ZVBhbmVsLCAwLCAibGFzdEFjdGl2ZVBhbmVs
Iik7CisgICAgUkVHSVNURVJfSU5TUEVDVE9SX1BST1BFUlRZKGluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkLCB0cnVlLCAwLCAiSW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQiKTsKKyAgICBSRUdJU1RFUl9J
TlNQRUNUT1JfUFJPUEVSVFkoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQsIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRlZmF1bHRBdHRhY2hlZEhlaWdodCwgMCwgImluc3BlY3RvckF0dGFjaGVkSGVpZ2h0
Iik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlc3RvcmVGcm9tSlNPTlN0cmluZyhjb25z
dCBTdHJpbmcmIGpzb24pCit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc29uVmFsdWUg
PSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGpzb24pOworICAgIGlmICghanNvblZhbHVlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uT2JqZWN0
ID0ganNvblZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghanNvbk9iamVjdCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZm9yIChJbnNwZWN0b3JQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1f
aW5zcGVjdG9yQ29va2llLmJlZ2luKCk7IGkgIT0gbV9pbnNwZWN0b3JDb29raWUuZW5kKCk7ICsr
aSkKKyAgICAgICAgaS0+Zmlyc3QtPnJlc3RvcmVGcm9tQ29udGFpbmVyQXMoaS0+c2Vjb25kLCBq
c29uT2JqZWN0LmdldCgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JTdGF0ZTo6cmVzdG9yZUZyb21T
ZXR0aW5ncygpCit7CisgICAgZm9yIChJbnNwZWN0b3JQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9
IG1faW5zcGVjdG9yUHJlZmVyZW5jZXMuYmVnaW4oKTsgaSAhPSBtX2luc3BlY3RvclByZWZlcmVu
Y2VzLmVuZCgpOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBtX2NsaWVu
dC0+cG9wdWxhdGVTZXR0aW5nKGktPnNlY29uZCwgJnZhbHVlKTsKKyAgICAgICAgaS0+Zmlyc3Qt
PmZyb21TdHJpbmcodmFsdWUpOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JTdGF0ZTo6cHJv
cGVydHlVcGRhdGVkKEluc3BlY3RvclByb3BlcnR5QmFzZSogcHJvcGVydHkpCit7CisgICAgaWYg
KG1faW5zcGVjdG9yQ29va2llLmZpbmQocHJvcGVydHkpICE9IG1faW5zcGVjdG9yQ29va2llLmVu
ZCgpKQorICAgICAgICBtX2NsaWVudC0+dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUocHJvcGVy
dHlNYXBUb0luc3BlY3Rvck9iamVjdChtX2luc3BlY3RvckNvb2tpZSktPnRvSlNPTlN0cmluZygp
KTsKKworICAgIEluc3BlY3RvclByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9pbnNwZWN0b3JQ
cmVmZXJlbmNlcy5maW5kKHByb3BlcnR5KTsKKyAgICBpZiAoaSAhPSBtX2luc3BlY3RvclByZWZl
cmVuY2VzLmVuZCgpKQorICAgICAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGktPnNlY29uZCwg
cHJvcGVydHktPnRvU3RyaW5nKCkpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
SW5zcGVjdG9yU3RhdGU6OnByb3BlcnR5TWFwVG9JbnNwZWN0b3JPYmplY3QoSW5zcGVjdG9yUHJv
cGVydHlNYXAmIG1hcCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGZvciAoSW5zcGVjdG9yUHJvcGVydHlNYXA6
Oml0ZXJhdG9yIGk9IG1hcC5iZWdpbigpOyBpICE9IG1hcC5lbmQoKTsgKytpKQorICAgICAgICBp
LT5maXJzdC0+c2F2ZVRvQ29udGFpbmVyQXMoaS0+c2Vjb25kLCBvYmplY3QuZ2V0KCkpOworICAg
IHJldHVybiBvYmplY3QucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3RhdGUuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1MzgzYQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmgKQEAgLTAsMCArMSwxNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBJbnNwZWN0b3JTdGF0ZV9oCisjZGVmaW5lIEluc3BlY3RvclN0YXRlX2gKKwor
I2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworY2xhc3Mg
SW5zcGVjdG9yU3RhdGU7CisKK2NsYXNzIEluc3BlY3RvclByb3BlcnR5QmFzZSB7CitwdWJsaWM6
CisgICAgSW5zcGVjdG9yUHJvcGVydHlCYXNlKCkge30KKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JQ
cm9wZXJ0eUJhc2UoKSB7fQorCisgICAgdmlydHVhbCB2b2lkIHNhdmVUb0NvbnRhaW5lckFzKGNv
bnN0IFN0cmluZyYgbmFtZSwgSW5zcGVjdG9yT2JqZWN0KiBjb250YWluZXIpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZUZyb21Db250YWluZXJBcyhjb25zdCBTdHJpbmcmIG5h
bWUsIEluc3BlY3Rvck9iamVjdCogY29udGFpbmVyKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcg
dG9TdHJpbmcoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmdWYWx1ZSkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIHZvaWQg
c2F2ZShJbnNwZWN0b3JPYmplY3QqIGNvbnRhaW5lciwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
IHZhbHVlKSB7IGNvbnRhaW5lci0+c2V0Qm9vbGVhbihuYW1lLCB2YWx1ZSk7IH0KKyAgICBzdGF0
aWMgdm9pZCBzYXZlKEluc3BlY3Rvck9iamVjdCogY29udGFpbmVyLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgY29udGFpbmVyLT5zZXRTdHJpbmcobmFtZSwgdmFs
dWUpOyB9CisgICAgc3RhdGljIHZvaWQgc2F2ZShJbnNwZWN0b3JPYmplY3QqIGNvbnRhaW5lciwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBsb25nIHZhbHVlKSB7IGNvbnRhaW5lci0+c2V0TnVtYmVyKG5h
bWUsIHZhbHVlKTsgfQorICAgIHN0YXRpYyB2b2lkIHJlc3RvcmUoY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0KiBjb25zdCBjb250YWluZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWUpIHsg
Y29udGFpbmVyLT5nZXRCb29sZWFuKG5hbWUsIHZhbHVlKTsgfQorICAgIHN0YXRpYyB2b2lkIHJl
c3RvcmUoY29uc3QgSW5zcGVjdG9yT2JqZWN0KiBjb25zdCBjb250YWluZXIsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgU3RyaW5nKiB2YWx1ZSkgeyBjb250YWluZXItPmdldFN0cmluZyhuYW1lLCB2YWx1
ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCByZXN0b3JlKGNvbnN0IEluc3BlY3Rvck9iamVjdCogY29u
c3QgY29udGFpbmVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIGxvbmcqIHZhbHVlKSB7IGNvbnRhaW5l
ci0+Z2V0TnVtYmVyKG5hbWUsIHZhbHVlKTsgfQorCisgICAgc3RhdGljIFN0cmluZyBhc1N0cmlu
Zyhib29sIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA/ICJ0cnVlIiA6ICJmYWxzZSI7IH0KKyAgICBz
dGF0aWMgU3RyaW5nIGFzU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgcmV0dXJuIHZhbHVl
OyB9CisgICAgc3RhdGljIFN0cmluZyBhc1N0cmluZyhjb25zdCBsb25nIHZhbHVlKSB7IHJldHVy
biBTdHJpbmc6Om51bWJlcih2YWx1ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBmcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyaW5nVmFsdWUsIGJvb2wqIHZhbHVlKSB7ICp2YWx1ZSA9IHN0cmluZ1Zh
bHVlID09ICJ0cnVlIjsgfQorICAgIHN0YXRpYyB2b2lkIGZyb21TdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmdWYWx1ZSwgU3RyaW5nKiB2YWx1ZSkgeyAqdmFsdWUgPSBzdHJpbmdWYWx1ZTsgfQor
ICAgIHN0YXRpYyB2b2lkIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwgbG9u
ZyogdmFsdWUpIHsgKnZhbHVlID0gc3RyaW5nVmFsdWUudG9JbnQoKTsgfQorfTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgT3duZXJUeXBlPgorY2xhc3MgSW5zcGVj
dG9yUHJvcGVydHkgOiBwdWJsaWMgSW5zcGVjdG9yUHJvcGVydHlCYXNlIHsKK3B1YmxpYzoKKyAg
ICBJbnNwZWN0b3JQcm9wZXJ0eSgpIHt9CisgICAgdm9pZCBpbml0KE93bmVyVHlwZSogb3duZXIs
IFZhbHVlVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fb3duZXIgPSBvd25lcjsKKyAgICAg
ICAgbV92YWx1ZSA9IHZhbHVlOworICAgIH0KKyAgICBWYWx1ZVR5cGUgZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorICAgIHZvaWQgc2V0KFZhbHVlVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmIChtX3ZhbHVlID09IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIG1fdmFsdWUgPSB2YWx1ZTsKKworICAgICAgICBtX293bmVyLT5wcm9wZXJ0eVVwZGF0ZWQo
dGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHNhdmVUb0NvbnRhaW5lckFzKGNvbnN0
IFN0cmluZyYgbmFtZSwgSW5zcGVjdG9yT2JqZWN0KiBjb250YWluZXIpIGNvbnN0IHsgc2F2ZShj
b250YWluZXIsIG5hbWUsIG1fdmFsdWUpOyB9CisgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVGcm9t
Q29udGFpbmVyQXMoY29uc3QgU3RyaW5nJiBuYW1lLCBJbnNwZWN0b3JPYmplY3QqIGNvbnRhaW5l
cikgeyByZXN0b3JlKGNvbnRhaW5lciwgbmFtZSwgJm1fdmFsdWUpOyB9CisgICAgdmlydHVhbCBT
dHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBJbnNwZWN0b3JQcm9wZXJ0eUJhc2U6OmFz
U3RyaW5nKG1fdmFsdWUpOyB9CisgICAgdmlydHVhbCB2b2lkIGZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmdWYWx1ZSkgeyBJbnNwZWN0b3JQcm9wZXJ0eUJhc2U6OmZyb21TdHJpbmcoc3Ry
aW5nVmFsdWUsICZtX3ZhbHVlKTsgfQorCitwcml2YXRlOgorICAgIFZhbHVlVHlwZSBtX3ZhbHVl
OworICAgIE93bmVyVHlwZSogbV9vd25lcjsKK307CisKKyNkZWZpbmUgSU5TUEVDVE9SX1BST1BF
UlRZKHR5cGUsIG5hbWUsIHNldHRlck5hbWUpXAordHlwZSBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV8jI25hbWUuZ2V0KCk7IH1cCit2b2lkIHNldHRlck5hbWUodHlwZSBuYW1lKSB7IG1fIyNuYW1l
LnNldChuYW1lKTsgfVwKK3ByaXZhdGU6XAorSW5zcGVjdG9yUHJvcGVydHk8dHlwZSwgSW5zcGVj
dG9yU3RhdGU+IG1fIyNuYW1lO1wKK3B1YmxpYzoKKworY2xhc3MgSW5zcGVjdG9yU3RhdGUgewor
cHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JQcm9wZXJ0eTxib29sLCBJbnNwZWN0
b3JTdGF0ZT47CisgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvclByb3BlcnR5PFN0cmluZywgSW5z
cGVjdG9yU3RhdGU+OworICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JQcm9wZXJ0eTxsb25nLCBJ
bnNwZWN0b3JTdGF0ZT47CisKKyAgICBJbnNwZWN0b3JTdGF0ZShJbnNwZWN0b3JDbGllbnQqIGNs
aWVudCk7CisKKyAgICBJTlNQRUNUT1JfUFJPUEVSVFkoYm9vbCwgbW9uaXRvcmluZ1hIUiwgc2V0
TW9uaXRvcmluZ1hIUik7CisgICAgSU5TUEVDVE9SX1BST1BFUlRZKGJvb2wsIHJlc291cmNlVHJh
Y2tpbmdFbmFibGVkLCBzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk7CisgICAgSU5TUEVDVE9S
X1BST1BFUlRZKGJvb2wsIHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkLCBzZXRSZXNvdXJj
ZVRyYWNraW5nQWx3YXlzRW5hYmxlZCk7CisgICAgSU5TUEVDVE9SX1BST1BFUlRZKGJvb2wsIHRp
bWVsaW5lUHJvZmlsZXJFbmFibGVkLCBzZXRUaW1lbGluZVByb2ZpbGVyRW5hYmxlZCk7CisgICAg
SU5TUEVDVE9SX1BST1BFUlRZKGJvb2wsIHNlYXJjaGluZ0Zvck5vZGUsIHNldFNlYXJjaGluZ0Zv
ck5vZGUpOworICAgIElOU1BFQ1RPUl9QUk9QRVJUWShib29sLCBwcm9maWxlckFsd2F5c0VuYWJs
ZWQsIHNldFByb2ZpbGVyQWx3YXlzRW5hYmxlZCk7CisgICAgSU5TUEVDVE9SX1BST1BFUlRZKFN0
cmluZywgZnJvbnRlbmRTZXR0aW5ncywgc2V0RnJvbnRlbmRTZXR0aW5ncyk7CisgICAgSU5TUEVD
VE9SX1BST1BFUlRZKGJvb2wsIGRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwgc2V0RGVidWdnZXJBbHdh
eXNFbmFibGVkKTsKKyAgICBJTlNQRUNUT1JfUFJPUEVSVFkoU3RyaW5nLCBsYXN0QWN0aXZlUGFu
ZWwsIHNldExhc3RBY3RpdmVQYW5lbCk7CisgICAgSU5TUEVDVE9SX1BST1BFUlRZKGJvb2wsIGlu
c3BlY3RvclN0YXJ0c0F0dGFjaGVkLCBzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCk7CisgICAg
SU5TUEVDVE9SX1BST1BFUlRZKGxvbmcsIGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0LCBzZXRJbnNw
ZWN0b3JBdHRhY2hlZEhlaWdodCk7CisKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
Z2V0U3RhdGUoKSB7IHJldHVybiBwcm9wZXJ0eU1hcFRvSW5zcGVjdG9yT2JqZWN0KG1faW5zcGVj
dG9yU3RhdGUpOyB9CisgICAgdm9pZCByZXN0b3JlRnJvbUpTT05TdHJpbmcoY29uc3QgU3RyaW5n
JiBqc29uKTsKKyAgICB2b2lkIHJlc3RvcmVGcm9tU2V0dGluZ3MoKTsKKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgcHJvcGVydHlVcGRhdGVkKEluc3BlY3RvclByb3BlcnR5QmFzZSogcHJvcGVydHkp
OworCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxJbnNwZWN0b3JQcm9wZXJ0eUJhc2Uq
LCBTdHJpbmc+IEluc3BlY3RvclByb3BlcnR5TWFwOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eU1hcFRvSW5zcGVjdG9yT2JqZWN0KEluc3BlY3RvclBy
b3BlcnR5TWFwJiBtYXApOworCisgICAgSW5zcGVjdG9yUHJvcGVydHlNYXAgbV9pbnNwZWN0b3JT
dGF0ZTsKKyAgICBJbnNwZWN0b3JQcm9wZXJ0eU1hcCBtX2luc3BlY3RvckNvb2tpZTsKKyAgICBJ
bnNwZWN0b3JQcm9wZXJ0eU1hcCBtX2luc3BlY3RvclByZWZlcmVuY2VzOworCisgICAgSW5zcGVj
dG9yQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckNvbnRyb2xsZXJfaCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwCmluZGV4IGM5NmU5NTMuLjE5YjY1NGYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcApAQCAtNjQ5LDYgKzY0OSwxNCBAQCBib29sIEluc3BlY3Rvck9i
amVjdDo6Z2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKiBvdXRwdXQpIGNvbnN0
CiAgICAgcmV0dXJuIHZhbHVlLT5hc051bWJlcihvdXRwdXQpOwogfQogCitib29sIEluc3BlY3Rv
ck9iamVjdDo6Z2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgbG9uZyogb3V0cHV0KSBjb25z
dAoreworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CisgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YWx1ZS0+YXNO
dW1iZXIob3V0cHV0KTsKK30KKwogYm9vbCBJbnNwZWN0b3JPYmplY3Q6OmdldFN0cmluZyhjb25z
dCBTdHJpbmcmIG5hbWUsIFN0cmluZyogb3V0cHV0KSBjb25zdAogewogICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oCmluZGV4IDQwMzZmNTUuLjRkZWMwYzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oCkBAIC0xODEsNiArMTgxLDcgQEAgcHVibGljOgogICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBib29sIGdldEJvb2xlYW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiBvdXRwdXQpIGNvbnN0OwogICAgIGJvb2wgZ2V0TnVtYmVyKGNvbnN0
IFN0cmluZyYgbmFtZSwgZG91YmxlKiBvdXRwdXQpIGNvbnN0OworICAgIGJvb2wgZ2V0TnVtYmVy
KGNvbnN0IFN0cmluZyYgbmFtZSwgbG9uZyogb3V0cHV0KSBjb25zdDsKICAgICBib29sIGdldFN0
cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyogb3V0cHV0KSBjb25zdDsKICAgICBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZ2V0QXJyYXkoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0
L21hYy9DaGFuZ2VMb2cKaW5kZXggMmY2ZjIyYy4uZjA4ODZjYyAxMDA2NDQKLS0tIGEvV2ViS2l0
L21hYy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBA
QAorMjAxMC0xMC0wNiAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogaW5zcGVjdG9yIHNldHRpbmdzL3Byb3BlcnRpZXMvc3RhdGVzIG1hbmFnZW1lbnQKKyAg
ICAgICAgc2hvdWxkIGJlIGV4dHJhY3RlZCBpbnRvIHNlcGFyYXRlIGNsYXNzLgorCisgICAgICAg
IFdlIGhhdmUgYSBsb3Qgb2YgZmxhZ3MvdmFsdWVzIGluIEluc3BlY3RvckNvbnRyb2xsZXIuCisg
ICAgICAgIFNvbWUgZmxhZ3MgYXJlIHBlcnNpc3RpbmcgaW50byBwcm9maWxlLgorICAgICAgICBP
dGhlcnMgYXJlIHBhcnQgb2YgaW5zcGVjdG9yIHN0YXRlIGZvciBmcm9udGVuZC4KKyAgICAgICAg
QWxsIHRoZXNlIGZsYWdzIHNob3VsZCBrZWVwIHRoZWlyIHZhbHVlcyBhZnRlciBuYXZpZ2F0aW9u
LgorICAgICAgICBJdCdkIGJlIGJldHRlciB0byBleHRyYWN0IHRoZXNlIGZsYWdzL3ZhbHVlcyBp
bnRvIHNlcGFyYXRlCisgICAgICAgIGNsYXNzIHdoaWNoIHdpbGwgY2FyZSBhYm91dCB0aGVpcnMg
bGlmZXRpbWUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ3Mjc1CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQu
bW06CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgc2hvd1dpbmRvdzpd
KToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhdHRhY2hdKToKKyAg
ICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBkZXRhY2hdKToKKwogMjAxMC0x
MC0wMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZp
eCBTbm93IExlb3BhcmQgYnVpbGQuCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5tbSBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50Lm1tCmluZGV4IGQ0ZDAyMTMuLmQ2ZGM4NzkgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCisrKyBiL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCkBAIC0zNTgsOCArMzU4
LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6dXBkYXRlV2luZG93VGl0bGUo
KSBjb25zdAogICAgIF92aXNpYmxlID0gWUVTOwogICAgIAogICAgIC8vIElmIG5vIHByZWZlcmVu
Y2UgaXMgc2V0IC0gZGVmYXVsdCB0byBhbiBhdHRhY2hlZCB3aW5kb3cuIFRoaXMgaXMgaW1wb3J0
YW50IGZvciBpbnNwZWN0b3IgTGF5b3V0VGVzdHMuCi0gICAgU3RyaW5nIHNob3VsZEF0dGFjaCA9
IFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXR0aW5n
KEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUo
KSk7Ci0gICAgX3Nob3VsZEF0dGFjaCA9IHNob3VsZEF0dGFjaCAhPSAiZmFsc2UiOworICAgIF9z
aG91bGRBdHRhY2ggPSBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKICAgICAKICAgICBpZiAoX3Nob3VsZEF0
dGFjaCAmJiAhX2Zyb250ZW5kQ2xpZW50LT5jYW5BdHRhY2hXaW5kb3coKSkKICAgICAgICAgX3No
b3VsZEF0dGFjaCA9IE5POwpAQCAtMzk0LDcgKzM5Myw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkgY29uc3QKICAgICBpZiAoX2F0dGFjaGVk
VG9JbnNwZWN0ZWRXZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKLSAgICBbX2luc3BlY3RlZFdl
YlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJ0cnVlIik7
CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNl
dEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKHRydWUpOwogCiAgICAgW3NlbGYgY2xvc2VdOwogICAg
IFtzZWxmIHNob3dXaW5kb3c6bmlsXTsKQEAgLTQwNSw3ICs0MDQsNyBAQCB2b2lkIFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0CiAgICAgaWYgKCFf
YXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtfaW5z
cGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRTZXR0aW5nKElu
c3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSwg
ImZhbHNlIik7CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGZhbHNlKTsKIAogICAgIFtzZWxmIGNs
b3NlXTsKICAgICBbc2VsZiBzaG93V2luZG93Om5pbF07CmRpZmYgLS1naXQgYS9XZWJLaXQvd2lu
L0NoYW5nZUxvZyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IGVlYWJkZTguLjhhNDg5NjYg
MTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93aW4vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMTAtMDYgIElseWEgVGlraG9ub3Zza3kgIDxsb2lz
bG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGluc3BlY3RvciBzZXR0aW5ncy9wcm9wZXJ0aWVzL3N0
YXRlcyBtYW5hZ2VtZW50CisgICAgICAgIHNob3VsZCBiZSBleHRyYWN0ZWQgaW50byBzZXBhcmF0
ZSBjbGFzcy4KKworICAgICAgICBXZSBoYXZlIGEgbG90IG9mIGZsYWdzL3ZhbHVlcyBpbiBJbnNw
ZWN0b3JDb250cm9sbGVyLgorICAgICAgICBTb21lIGZsYWdzIGFyZSBwZXJzaXN0aW5nIGludG8g
cHJvZmlsZS4KKyAgICAgICAgT3RoZXJzIGFyZSBwYXJ0IG9mIGluc3BlY3RvciBzdGF0ZSBmb3Ig
ZnJvbnRlbmQuCisgICAgICAgIEFsbCB0aGVzZSBmbGFncyBzaG91bGQga2VlcCB0aGVpciB2YWx1
ZXMgYWZ0ZXIgbmF2aWdhdGlvbi4KKyAgICAgICAgSXQnZCBiZSBiZXR0ZXIgdG8gZXh0cmFjdCB0
aGVzZSBmbGFncy92YWx1ZXMgaW50byBzZXBhcmF0ZQorICAgICAgICBjbGFzcyB3aGljaCB3aWxs
IGNhcmUgYWJvdXQgdGhlaXJzIGxpZmV0aW1lLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI3NQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50OjphdHRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2hv
d1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKToKKwogMjAxMC0xMC0wMSAgTWFyayBSb3dlICA8
bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1dlYktp
dC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1dlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAppbmRleCAxYjc5ZGRlLi4wMzAy
MDA5IDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5jcHAKKysrIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGll
bnQuY3BwCkBAIC0yNzMsNyArMjczLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6YXR0YWNoV2luZG93KCkKICAgICBpZiAobV9hdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
c2V0U2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNl
dHRpbmdOYW1lKCksICJ0cnVlIik7CisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQodHJ1ZSk7CiAK
ICAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiAgICAgc2hvd1dpbmRvd1dp
dGhvdXROb3RpZmljYXRpb25zKCk7CkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6ZGV0YWNoV2luZG93KCkKICAgICBpZiAoIW1fYXR0YWNoZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9y
U3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAiZmFsc2UiKTsKKyAgICBtX2luc3BlY3RlZFdl
YlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JTdGFydHNB
dHRhY2hlZChmYWxzZSk7CiAKICAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7
CiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CkBAIC0zNjQsOCArMzY0LDcg
QEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3Rp
ZmljYXRpb25zKCkKICAgICAgICAgc2hvdWxkQXR0YWNoID0gdHJ1ZTsKICAgICBlbHNlIHsKICAg
ICAgICAgLy8gSWYgbm8gcHJlZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0IHRvIGFuIGF0dGFjaGVk
IHdpbmRvdy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGluc3BlY3RvciBMYXlvdXRUZXN0cy4KLSAg
ICAgICAgU3RyaW5nIHNob3VsZEF0dGFjaFByZWYgPSBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2Uo
KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omlu
c3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSk7Ci0gICAgICAgIHNob3VsZEF0dGFj
aCA9IHNob3VsZEF0dGFjaFByZWYgIT0gImZhbHNlIjsKKyAgICAgICAgc2hvdWxkQXR0YWNoID0g
bV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVj
dG9yU3RhcnRzQXR0YWNoZWQoKTsKIAogICAgICAgICBpZiAoc2hvdWxkQXR0YWNoICYmICFjYW5B
dHRhY2hXaW5kb3coKSkKICAgICAgICAgICAgIHNob3VsZEF0dGFjaCA9IGZhbHNlOwo=
</data>
<flag name="review"
          id="59718"
          type_id="1"
          status="-"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70079</attachid>
            <date>2010-10-07 06:55:53 -0700</date>
            <delta_ts>2010-10-08 02:12:25 -0700</delta_ts>
            <desc>[patch] initial version.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>56831</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDVlNTJlOGUuLmRiZWU1Y2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExMSw2ICsxMTExLDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmNwcAogICAgIGluc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmNw
cApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCBlYmUwNWJmLi5lNTUwZGYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEwLTEwLTA2ICBJbHlhIFRpa2hv
bm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnNwZWN0b3Igc2V0dGluZ3Mv
cHJvcGVydGllcy9zdGF0ZXMgbWFuYWdlbWVudAorICAgICAgICBzaG91bGQgYmUgZXh0cmFjdGVk
IGludG8gc2VwYXJhdGUgY2xhc3MuCisKKyAgICAgICAgV2UgaGF2ZSBhIGxvdCBvZiBmbGFncy92
YWx1ZXMgaW4gSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICAgICAgU29tZSBmbGFncyBhcmUgcGVy
c2lzdGluZyBpbnRvIHByb2ZpbGUuCisgICAgICAgIE90aGVycyBhcmUgcGFydCBvZiBpbnNwZWN0
b3Igc3RhdGUgZm9yIGZyb250ZW5kLgorICAgICAgICBBbGwgdGhlc2UgZmxhZ3Mgc2hvdWxkIGtl
ZXAgdGhlaXIgdmFsdWVzIGFmdGVyIG5hdmlnYXRpb24uCisgICAgICAgIEl0J2QgYmUgYmV0dGVy
IHRvIGV4dHJhY3QgdGhlc2UgZmxhZ3MvdmFsdWVzIGludG8gc2VwYXJhdGUKKyAgICAgICAgY2xh
c3Mgd2hpY2ggd2lsbCBjYXJlIGFib3V0IHRoZWlycyBsaWZldGltZS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyNzUKKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNv
cmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBy
bzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpzYXZlU2Vzc2lvblNldHRpbmdzKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0SW5zcGVjdG9yU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0U2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2VhcmNoaW5nRm9yTm9k
ZUluUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJj
ZVRyYWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JBdHRhY2hlZEhlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JBdHRhY2hlZEhlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9yZUxhc3RBY3Rp
dmVQYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjptb3VzZURp
ZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpoYW5kbGVNb3VzZVByZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OnNldFNlYXJjaGluZ0Zvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVQcm9maWxlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRUcmFja2VkUmVzb3VyY2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNh
Y2hlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJG
b3JJbml0aWFsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0SW1wb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5zdXJlU2V0dGluZ3NMb2FkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2Zp
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGlu
ZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJs
ZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Fi
bGVQcm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbmFi
bGVEZWJ1Z2dlckZyb21Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6bG9hZEJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnNhdmVCcmVha3BvaW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpyZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbUpTT05TdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3RhdGU6OnJlc3RvcmVGcm9tU2V0dGluZ3MpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3RhdGU6OnByb3BlcnR5VXBkYXRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdGF0ZTo6cHJvcGVydHlNYXBUb0luc3BlY3Rvck9iamVjdCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUHJvcGVydHlCYXNlOjpJbnNwZWN0b3JQcm9wZXJ0eUJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUHJvcGVydHlCYXNlOjp+SW5zcGVjdG9yUHJvcGVydHlCYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb3BlcnR5QmFzZTo6c2F2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQcm9wZXJ0eUJhc2U6OnJlc3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUHJvcGVydHlCYXNlOjphc1N0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JQcm9wZXJ0eUJhc2U6OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUHJvcGVydHk6Okluc3BlY3RvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclByb3BlcnR5Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBy
b3BlcnR5OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvcGVydHk6OnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9wZXJ0eTo6c2F2ZVRvQ29udGFpbmVyQXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvcGVydHk6OnJlc3RvcmVGcm9tQ29udGFp
bmVyQXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvcGVydHk6OnRvU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb3BlcnR5Ojpmcm9tU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRTdGF0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmpl
Y3Q6OmdldE51bWJlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oOgor
CiAyMDEwLTEwLTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAxMzMyMTdhLi5mOGIw
MDllIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTE4MjcsNiArMTgyNyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIFwKIAlXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlLmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCBc
CisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaCBcCiAJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3RvcmFnZUFnZW50LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5l
QWdlbnQuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCmluZGV4IDY1ZDJhZTkuLjExNDhkZTUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KKysrIGIvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMTE5OCw3
ICsxMTk4LDYgQEAgX19aTjdXZWJDb3JlMjJHZW9sb2NhdGlvblNlcnZpY2VNb2NrOHNldEVycm9y
RU4zV1RGMTBQYXNzUmVmUHRySU5TXzEzUG9zaXRpb25FcnIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEwc2V0U2V0dGlu
Z0VSS04zV1RGNlN0cmluZ0VTNF8KIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEy
Q29uc29sZVBhbmVsRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJTY3JpcHRz
UGFuZWxFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxM1Byb2ZpbGVzUGFuZWxF
CkBAIC0xMjA5LDEyICsxMjA4LDEyIEBAIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjE1ZGlzYWJsZVByb2ZpbGVyRWIKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE4
ZGlzY29ubmVjdEZyb250ZW5kRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIw
c3RvcFRpbWVsaW5lUHJvZmlsZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
MjFzdGFydFRpbWVsaW5lUHJvZmlsZXJFdgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9s
bGVyMjNpbnNwZWN0b3JTdGFydHNBdHRhY2hlZEV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIyNWV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRFbFJLTjNXVEY2U3RyaW5nRQogX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVu
dEVOM1dURjEwUGFzc093blB0cklOU18yM0luc3BlY3RvckZyb250ZW5kQ2xpZW50RUVFCitfX1pO
N1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVk
RWIKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI3c3RhcnRVc2VySW5pdGlhdGVk
UHJvZmlsaW5nRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c3RvcFVzZXJJ
bml0aWF0ZWRQcm9maWxpbmdFdgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMzRp
bnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lRXYKLV9fWk43V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjM0aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2CiBfX1pO
SzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMzFpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQ
cm9maWxlRXYKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNXByb2ZpbGVyRW5h
YmxlZEV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI0c2hvd0V2CkBAIC0xMjM0
LDcgKzEyMzMsNiBAQCBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxD
MkVQTlNfMTlJbnNwZWN0b3JDb250cm9sbGVyRVBOU180UGFnZQogX19aTjdXZWJDb3JlMjhJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsRDJFdgogX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjE3ZHJhd05vZGVIaWdobGlnaHRFUk5TXzE1R3JhcGhpY3NDb250ZXh0RQogX19aTks3
V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjdlbmFibGVkRXYKLV9fWk5LN1dlYkNvcmUxOUlu
c3BlY3RvckNvbnRyb2xsZXI3c2V0dGluZ0VSS04zV1RGNlN0cmluZ0UKICNlbmRpZgogCiAjaWYg
RU5BQkxFKEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlOGIyY2ZiLi5mMTVmNjQ0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTkzNCw2
ICsxOTM0LDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwJywKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCcsCisgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvclN0YXRlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdl
QWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50
LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCcs
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpp
bmRleCAzN2Q3YTQ2Li45ZjA4ODE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTEwMDEsNiArMTAwMSw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIFwKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JSZXNvdXJjZS5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAgXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
Y3BwIFwKQEAgLTE4NzgsNiArMTg3OSw3IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclByb2Zp
bGVyQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggXAorICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFn
ZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggXAogICAg
IGluc3BlY3Rvci9TY3JpcHRHQ0V2ZW50TGlzdGVuZXIuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagppbmRleCA3NGQ2M2RhLi44MzI2ODk4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKQEAgLTUyODI3LDYgKzUyODI3LDE0IEBACiAJCQkJPg0KIAkJCTwv
RmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0
b3JTdGF0ZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3RhdGUuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JT
dG9yYWdlQWdlbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGYxZWZlOS4uOTMzODI0OSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMzQsNiArMTEzNCw4IEBA
CiAJCTRGNEY1RkZCMTFDQkQyRTEwMEExODZCRiAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjRGNUZGQTExQ0JE
MkQyMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwICovOyB9OwogCQk0RjcwN0E5OTEx
RUY2Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY3MDdBOTcxMUVGNjc5NDAw
QUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCAqLzsgfTsKIAkJNEY3MDdB
OUExMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjcwN0E5ODExRUY2Nzk0
MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCAqLzsgfTsKKwkJNEZBM0I5
MEExMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAv
KiBJbnNwZWN0b3JTdGF0ZS5jcHAgKi87IH07CisJCTRGQTNCOTBCMTI1Q0QxMjIwMDMwMEJBRCAv
KiBJbnNwZWN0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmggKi87
IH07CiAJCTRGRDhEMEYyMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhEMEYwMTE5Qzcx
OEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAqLzsgfTsKIAkJNEZEOEQwRjMxMTlDNzE4
QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhEMEYxMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2
ZW50LmggKi87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxODQ2NzBC
MDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MTk5LDYgKzcyMDEsOCBAQAogCQk0RjRGNUZGQzEx
Q0JEMzAxMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNEY3MDdBOTcxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEY3
MDdBOTgxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJB
RCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnNwZWN0b3JTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRG
QTNCOTA5MTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0RkQ4RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRHQ0V2ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEZEOEQwRjExMTlDNzE4QjAwMkZBODI1IC8q
IFNjcmlwdEdDRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0
R0NFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJB
MDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWNoZWRQYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjE4Niw2ICsx
MjE5MCw4IEBACiAJCQkJOUYwRDZCMkQxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2Zp
bGVyQWdlbnQuaCAqLywKIAkJCQk0MUYwNjIwMDBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9y
UmVzb3VyY2UuY3BwICovLAogCQkJCTQxRjA2MUZGMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JSZXNvdXJjZS5oICovLAorCQkJCTRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAvKiBJbnNwZWN0
b3JTdGF0ZS5jcHAgKi8sCisJCQkJNEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3Rv
clN0YXRlLmggKi8sCiAJCQkJN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0
b3JhZ2VBZ2VudC5jcHAgKi8sCiAJCQkJN0FCMEIxQkYxMjExQTYyMjAwQTc2OTQwIC8qIEluc3Bl
Y3RvclN0b3JhZ2VBZ2VudC5oICovLAogCQkJCTc1NDEzM0E5MTAyRTAwRjQwMDA3NUQwMCAvKiBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCAqLywKQEAgLTIxMDY2LDYgKzIxMDcyLDcgQEAKIAkJ
CQk4OTNDNDgzQjEyNDk1NDcyMDAyQjNEODYgLyogSlNFbnRyeVN5bmMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg5M0M0ODNEMTI0OTU0NzIwMDJCM0Q4NiAvKiBKU0ZpbGVFbnRyeVN5bmMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg5MEFFMEUxMTI1NkEwNzkwMEY1OTY4QyAvKiBEaXJlY3RvcnlSZWFk
ZXJCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0RkEzQjkwQjEyNUNEMTIyMDAzMDBCQUQgLyog
SW5zcGVjdG9yU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjExMjUsNiArMjExMzIsNyBAQAog
CQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0
MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9q
ZWN0ICJXZWJDb3JlIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7
CisJCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2Rp
bmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMjM2MTEsNiAr
MjM2MTksNyBAQAogCQkJCTg5M0M0ODNBMTI0OTU0NzIwMDJCM0Q4NiAvKiBKU0VudHJ5U3luYy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTNDNDgzQzEyNDk1NDcyMDAyQjNEODYgLyogSlNGaWxl
RW50cnlTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5M0M0ODUzMTI0OTlCMDYwMDJCM0Q4
NiAvKiBKU0VudHJ5U3luY0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0RkEzQjkwQTEy
NUNEMTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDVkOTNhNTAuLjYyYzgw
ZjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC02OSw2
ICs2OSw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNl
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdG9y
YWdlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yVmFsdWVzLmgiCkBAIC0xMTYsMzggKzExNywxNyBAQCB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBmcm9udGVuZFNldHRpbmdzU2V0dGluZ05hbWUgPSAiZnJvbnRlbmRTZXR0aW5ncyI7Ci0KLXN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkZWJ1Z2dlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSA9
ICJkZWJ1Z2dlckVuYWJsZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxhc3RBY3RpdmVQ
YW5lbCA9ICJsYXN0QWN0aXZlUGFuZWwiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IG1vbml0
b3JpbmdYSFJTZXR0aW5nTmFtZSA9ICJ4aHJNb25pdG9yIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCByZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lID0gInJlc291cmNl
VHJhY2tpbmdFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBwcm9maWxlckFsd2F5
c0VuYWJsZWRTZXR0aW5nTmFtZSA9ICJwcm9maWxlckVuYWJsZWQiOwotCi1zdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgbW9uaXRvcmluZ1hIUlN0YXRlTmFtZSA9ICJtb25pdG9yaW5nWEhSRW5hYmxl
ZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgcmVzb3VyY2VUcmFja2luZ0VuYWJsZWRTdGF0
ZU5hbWUgPSAicmVzb3VyY2VUcmFja2luZ0VuYWJsZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IHNlYXJjaGluZ0Zvck5vZGVFbmFibGVkU3RhdGVOYW1lID0gInNlYXJjaGluZ0Zvck5vZGVF
bmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB0aW1lbGluZVByb2ZpbGVyRW5hYmxl
ZFN0YXRlTmFtZSA9ICJ0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZVN0YXRlTmFtZSA9ICJwYXVzZU9uRXhjZXB0
aW9uc1N0YXRlIjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvckF0dGFjaGVk
SGVpZ2h0TmFtZSA9ICJpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCI7Ci0KIHN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCB4aHJOYXRpdmVCcmVha3BvaW50VHlwZSA9ICJYSFIiOwogc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IGV2ZW50TGlzdGVuZXJOYXRpdmVCcmVha3BvaW50VHlwZSA9ICJFdmVudExp
c3RlbmVyIjsKIAorY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6TGFzdEFj
dGl2ZVBhbmVsID0gImxhc3RBY3RpdmVQYW5lbCI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0
b3JDb250cm9sbGVyOjpFbGVtZW50c1BhbmVsID0gImVsZW1lbnRzIjsKIGNvbnN0IGNoYXIqIGNv
bnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OkNvbnNvbGVQYW5lbCA9ICJjb25zb2xlIjsKIGNvbnN0
IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OlNjcmlwdHNQYW5lbCA9ICJzY3JpcHRz
IjsKIGNvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OlByb2ZpbGVzUGFuZWwg
PSAicHJvZmlsZXMiOwogCitjb25zdCB1bnNpZ25lZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkZWZh
dWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7CiAKLWNvbnN0IFN0cmluZyYgSW5zcGVjdG9yQ29udHJv
bGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIHNldHRpbmdOYW1lLCAoImluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkIikpOwotICAgIHJldHVybiBzZXR0aW5nTmFtZTsKLX0KLQotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodCA9IDMwMDsKIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5p
bXVtQXR0YWNoZWRIZWlnaHQgPSAyNTAuMGY7CiBzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0
dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1ZjsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVt
Q29uc29sZU1lc3NhZ2VzID0gMTAwMDsKQEAgLTE1OSwxMyArMTM5LDEwIEBAIEluc3BlY3RvckNv
bnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50
KiBjbGllbnQpCiAgICAgLCBtX29wZW5pbmdGcm9udGVuZChmYWxzZSkKICAgICAsIG1fY3NzU3Rv
cmUobmV3IEluc3BlY3RvckNTU1N0b3JlKHRoaXMpKQogICAgICwgbV9leHBpcmVkQ29uc29sZU1l
c3NhZ2VDb3VudCgwKQotICAgICwgbV9zaG93QWZ0ZXJWaXNpYmxlKGxhc3RBY3RpdmVQYW5lbCkK
KyAgICAsIG1fc2hvd0FmdGVyVmlzaWJsZShMYXN0QWN0aXZlUGFuZWwpCiAgICAgLCBtX3Nlc3Np
b25TZXR0aW5ncyhJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKQogICAgICwgbV9ncm91cExldmVs
KDApCi0gICAgLCBtX3NlYXJjaGluZ0Zvck5vZGUoZmFsc2UpCi0gICAgLCBtX21vbml0b3JpbmdY
SFIoZmFsc2UpCiAgICAgLCBtX3ByZXZpb3VzTWVzc2FnZSgwKQotICAgICwgbV9yZXNvdXJjZVRy
YWNraW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fc2V0dGluZ3NMb2FkZWQoZmFsc2UpCiAgICAg
LCBtX2luc3BlY3RvckJhY2tlbmQoSW5zcGVjdG9yQmFja2VuZDo6Y3JlYXRlKHRoaXMpKQogICAg
ICwgbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihuZXcgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIodGhpcykpCkBAIC0xNzYsNiArMTUzLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5z
cGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAg
ICAsIG1fcHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUodGhpcykp
CiAjZW5kaWYKIHsKKyAgICBtX3N0YXRlID0gbmV3IEluc3BlY3RvclN0YXRlKGNsaWVudCk7CiAg
ICAgQVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsKICAgICBBU1NFUlRfQVJHKGNsaWVudCwgY2xpZW50
KTsKIH0KQEAgLTIxOSwyNyArMTk3LDM5IEBAIGJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5h
YmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW5zcGVjdGVkUGFnZS0+c2V0dGluZ3MoKS0+ZGV2
ZWxvcGVyRXh0cmFzRW5hYmxlZCgpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxl
cjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKQoreworICAgIHJldHVybiBtX3N0YXRlLT5pbnNw
ZWN0b3JTdGFydHNBdHRhY2hlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNl
dEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGJvb2wgYXR0YWNoZWQpCiB7Ci0gICAgU2V0dGluZ3M6
Oml0ZXJhdG9yIGl0ID0gbV9zZXR0aW5ncy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ICE9IG1fc2V0
dGluZ3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIG1fc3RhdGUtPnNl
dEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGF0dGFjaGVkKTsKK30KIAotICAgIFN0cmluZyB2YWx1
ZTsKLSAgICBtX2NsaWVudC0+cG9wdWxhdGVTZXR0aW5nKGtleSwgJnZhbHVlKTsKLSAgICBtX3Nl
dHRpbmdzLnNldChrZXksIHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Cit2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGludCBoZWlnaHQpCit7Cisg
ICAgbV9zdGF0ZS0+c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoaGVpZ2h0KTsKK30KKworaW50
IEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zdGF0ZS0+aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlKQorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZWFyY2hpbmdGb3JO
b2RlSW5QYWdlKCkgY29uc3QKIHsKLSAgICBtX3NldHRpbmdzLnNldChrZXksIHZhbHVlKTsKLSAg
ICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGtleSwgdmFsdWUpOworICAgIHJldHVybiBtX3N0YXRl
LT5zZWFyY2hpbmdGb3JOb2RlKCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVz
b3VyY2VUcmFja2luZ0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlLT5yZXNv
dXJjZVRyYWNraW5nRW5hYmxlZCgpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNh
dmVBcHBsaWNhdGlvblNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpCiB7Ci0gICAgc2V0
U2V0dGluZyhmcm9udGVuZFNldHRpbmdzU2V0dGluZ05hbWUsIHNldHRpbmdzKTsKKyAgICBtX3N0
YXRlLT5zZXRGcm9udGVuZFNldHRpbmdzKHNldHRpbmdzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzYXZlU2Vzc2lvblNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3NKU09O
KQpAQCAtMjQ5LDUwICsyMzksMjQgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlU2Vz
c2lvblNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3NKU09OKQogCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmdldEluc3BlY3RvclN0YXRlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBz
dGF0ZSkKIHsKLSAgICAoKnN0YXRlKS0+c2V0Qm9vbGVhbihtb25pdG9yaW5nWEhSU3RhdGVOYW1l
LCBtX21vbml0b3JpbmdYSFIpOwotICAgICgqc3RhdGUpLT5zZXRCb29sZWFuKHJlc291cmNlVHJh
Y2tpbmdFbmFibGVkU3RhdGVOYW1lLCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKTsKICNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KQotICAg
ICAgICAoKnN0YXRlKS0+c2V0TnVtYmVyKHBhdXNlT25FeGNlcHRpb25zU3RhdGVTdGF0ZU5hbWUs
IG1fZGVidWdnZXJBZ2VudC0+cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpKTsKKyAgICAgICAgbV9z
dGF0ZS0+c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShtX2RlYnVnZ2VyQWdlbnQtPnBhdXNlT25F
eGNlcHRpb25zU3RhdGUoKSk7CiAjZW5kaWYKKyAgICAqc3RhdGUgPSBtX3N0YXRlLT5nZXRTdGF0
ZU9iamVjdEZvckZyb250ZW5kKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6dXBk
YXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHN0YXRlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBzdGF0ZS0+c2V0Qm9vbGVh
bihtb25pdG9yaW5nWEhSU3RhdGVOYW1lLCBtX21vbml0b3JpbmdYSFIpOwotICAgIHN0YXRlLT5z
ZXRCb29sZWFuKHJlc291cmNlVHJhY2tpbmdFbmFibGVkU3RhdGVOYW1lLCBtX3Jlc291cmNlVHJh
Y2tpbmdFbmFibGVkKTsKLSAgICBzdGF0ZS0+c2V0Qm9vbGVhbih0aW1lbGluZVByb2ZpbGVyRW5h
YmxlZFN0YXRlTmFtZSwgbV90aW1lbGluZUFnZW50KTsKLSAgICBzdGF0ZS0+c2V0Qm9vbGVhbihz
ZWFyY2hpbmdGb3JOb2RlRW5hYmxlZFN0YXRlTmFtZSwgbV9zZWFyY2hpbmdGb3JOb2RlKTsKLSAg
ICBtX2NsaWVudC0+dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoc3RhdGUtPnRvSlNPTlN0cmlu
ZygpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3Rh
dGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdGVTdHJpbmcpCit2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3Qg
U3RyaW5nJiBpbnNwZWN0b3JTdGF0ZUNvb2tpZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IGluc3BlY3RvclN0YXRlVmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGluc3Bl
Y3RvclN0YXRlU3RyaW5nKTsKLSAgICBpZiAoIWluc3BlY3RvclN0YXRlVmFsdWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluc3BlY3RvclN0YXRlID0g
aW5zcGVjdG9yU3RhdGVWYWx1ZS0+YXNPYmplY3QoKTsKLSAgICBpZiAoIWluc3BlY3RvclN0YXRl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnNwZWN0b3JTdGF0ZS0+Z2V0Qm9vbGVhbihtb25p
dG9yaW5nWEhSU3RhdGVOYW1lLCAmbV9tb25pdG9yaW5nWEhSKTsKLSAgICBpbnNwZWN0b3JTdGF0
ZS0+Z2V0Qm9vbGVhbihyZXNvdXJjZVRyYWNraW5nRW5hYmxlZFN0YXRlTmFtZSwgJm1fcmVzb3Vy
Y2VUcmFja2luZ0VuYWJsZWQpOwotICAgIGluc3BlY3RvclN0YXRlLT5nZXRCb29sZWFuKHNlYXJj
aGluZ0Zvck5vZGVFbmFibGVkU3RhdGVOYW1lLCAmbV9zZWFyY2hpbmdGb3JOb2RlKTsKLQotICAg
IGJvb2wgdGltZWxpbmVQcm9maWxlckVuYWJsZWQgPSBmYWxzZTsKLSAgICBpbnNwZWN0b3JTdGF0
ZS0+Z2V0Qm9vbGVhbih0aW1lbGluZVByb2ZpbGVyRW5hYmxlZFN0YXRlTmFtZSwgJnRpbWVsaW5l
UHJvZmlsZXJFbmFibGVkKTsKLSAgICBpZiAodGltZWxpbmVQcm9maWxlckVuYWJsZWQpCisgICAg
bV9zdGF0ZS0+cmVzdG9yZUZyb21JbnNwZWN0b3JDb29raWUoaW5zcGVjdG9yU3RhdGVDb29raWUp
OworICAgIGlmIChtX3N0YXRlLT50aW1lbGluZVByb2ZpbGVyRW5hYmxlZCgpKQogICAgICAgICBz
dGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIHN0b3BUaW1lbGluZVBy
b2ZpbGVyKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0U2V0dGluZ3MoUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4qIHNldHRpbmdzKQogewogICAgICpzZXR0aW5ncyA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgKCpzZXR0aW5ncyktPnNldFN0cmluZygiYXBwbGlj
YXRpb24iLCBzZXR0aW5nKGZyb250ZW5kU2V0dGluZ3NTZXR0aW5nTmFtZSkpOworICAgICgqc2V0
dGluZ3MpLT5zZXRTdHJpbmcoImFwcGxpY2F0aW9uIiwgbV9zdGF0ZS0+ZnJvbnRlbmRTZXR0aW5n
cygpKTsKICAgICAoKnNldHRpbmdzKS0+c2V0U3RyaW5nKCJzZXNzaW9uIiwgbV9zZXNzaW9uU2V0
dGluZ3MtPnRvSlNPTlN0cmluZygpKTsKIH0KIApAQCAtNDI5LDEyICszOTMsMTIgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjptYXJrVGltZWxpbmUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0
cmluZyYgcGFuZWxOYW1lKQogewotICAgIHNldFNldHRpbmcobGFzdEFjdGl2ZVBhbmVsLCBwYW5l
bE5hbWUpOworICAgIG1fc3RhdGUtPnNldExhc3RBY3RpdmVQYW5lbChwYW5lbE5hbWUpOwogfQog
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkg
fHwgIW1fc2VhcmNoaW5nRm9yTm9kZSkKKyAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9zdGF0ZS0+
c2VhcmNoaW5nRm9yTm9kZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBOb2RlKiBub2RlID0g
cmVzdWx0LmlubmVyTm9kZSgpOwpAQCAtNDQ5LDcgKzQxMyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6aGFuZGxlTW91c2VQcmVzcygpCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEFTU0VSVChtX3NlYXJjaGluZ0Zvck5vZGUpOworICAgIEFTU0VSVCht
X3N0YXRlLT5zZWFyY2hpbmdGb3JOb2RlKCkpOwogICAgIGlmICghbV9oaWdobGlnaHRlZE5vZGUp
CiAgICAgICAgIHJldHVybjsKIApAQCAtNDg4LDEyICs0NTIsMTEgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBmcmFt
ZSkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCisgICAg
aWYgKG1fc3RhdGUtPnNlYXJjaGluZ0Zvck5vZGUoKSA9PSBlbmFibGVkKQogICAgICAgICByZXR1
cm47Ci0gICAgbV9zZWFyY2hpbmdGb3JOb2RlID0gZW5hYmxlZDsKLSAgICBpZiAoIW1fc2VhcmNo
aW5nRm9yTm9kZSkKKyAgICBtX3N0YXRlLT5zZXRTZWFyY2hpbmdGb3JOb2RlKGVuYWJsZWQpOwor
ICAgIGlmICghbV9zdGF0ZS0+c2VhcmNoaW5nRm9yTm9kZSgpKQogICAgICAgICBoaWRlSGlnaGxp
Z2h0KCk7Ci0gICAgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9vbCog
bmV3U3RhdGUpCkBAIC01MDUsMTEgKzQ2OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKQogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRNb25pdG9yaW5nWEhSRW5hYmxlZChib29sIGVuYWJsZWQs
IGJvb2wqIG5ld1N0YXRlKQogewogICAgICpuZXdTdGF0ZSA9IGVuYWJsZWQ7Ci0gICAgaWYgKG1f
bW9uaXRvcmluZ1hIUiA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9tb25pdG9y
aW5nWEhSID0gZW5hYmxlZDsKLSAgICBzZXRTZXR0aW5nKG1vbml0b3JpbmdYSFJTZXR0aW5nTmFt
ZSwgZW5hYmxlZCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRl
Q29va2llKCk7CisgICAgbV9zdGF0ZS0+c2V0TW9uaXRvcmluZ1hIUihlbmFibGVkKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQpAQCAtNTczLDcgKzUz
Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKGNvbnN0IFN0cmluZyYg
cGFuZWwpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocGFuZWwgPT0gbGFzdEFj
dGl2ZVBhbmVsKQorICAgIGlmIChwYW5lbCA9PSBMYXN0QWN0aXZlUGFuZWwpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fZnJvbnRlbmQtPnNob3dQYW5lbChwYW5lbCk7CkBAIC02MDksNyArNTY4
LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoKQogICAg
IHVuYmluZEFsbFJlc291cmNlcygpOwogICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CiAKLSAg
ICBtX3Nob3dBZnRlclZpc2libGUgPSBsYXN0QWN0aXZlUGFuZWw7CisgICAgbV9zaG93QWZ0ZXJW
aXNpYmxlID0gTGFzdEFjdGl2ZVBhbmVsOwogCiAgICAgaGlkZUhpZ2hsaWdodCgpOwogCkBAIC02
NDcsOCArNjA2LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9i
amVjdHMoKQogICAgIGlmICghbV9mcm9udGVuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1fc2hvd0FmdGVyVmlzaWJsZSA9PSBsYXN0QWN0aXZlUGFuZWwpCi0gICAgICAgIG1fc2hvd0Fm
dGVyVmlzaWJsZSA9IHNldHRpbmcobGFzdEFjdGl2ZVBhbmVsKTsKKyAgICBpZiAobV9zaG93QWZ0
ZXJWaXNpYmxlID09IExhc3RBY3RpdmVQYW5lbCkKKyAgICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxl
ID0gbV9zdGF0ZS0+bGFzdEFjdGl2ZVBhbmVsKCk7CiAKICAgICBzaG93UGFuZWwobV9zaG93QWZ0
ZXJWaXNpYmxlKTsKIApAQCAtNzA2LDggKzY2NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6cmVzdG9yZURlYnVnZ2VyKCkKICAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aXNE
ZWJ1Z2dlckFsd2F5c0VuYWJsZWQoKSkKICAgICAgICAgZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRl
bmQoZmFsc2UpOwogICAgIGVsc2UgewotICAgICAgICBTdHJpbmcgZGVidWdnZXJFbmFibGVkID0g
c2V0dGluZyhkZWJ1Z2dlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSk7Ci0gICAgICAgIGlmIChk
ZWJ1Z2dlckVuYWJsZWQgPT0gInRydWUiIHx8IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24pCisg
ICAgICAgIGlmIChtX3N0YXRlLT5kZWJ1Z2dlckFsd2F5c0VuYWJsZWQoKSB8fCBtX2F0dGFjaERl
YnVnZ2VyV2hlblNob3duKQogICAgICAgICAgICAgZW5hYmxlRGVidWdnZXIoKTsKICAgICB9CiAj
ZW5kaWYKQEAgLTcxOCwxMSArNjc2LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0
b3JlUHJvZmlsZXIoKQogICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKICNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKICAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldEZyb250ZW5kKG1fZnJvbnRl
bmQuZ2V0KCkpOwotICAgIGlmICghU2NyaXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNFbmFi
bGVkKCkpIHsKLSAgICAgICAgU3RyaW5nIHByb2ZpbGVyRW5hYmxlZFNldHRpbmcgPSBzZXR0aW5n
KHByb2ZpbGVyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lKTsKLSAgICAgICAgaWYgKHByb2ZpbGVy
RW5hYmxlZFNldHRpbmcgPT0gInRydWUiKQotICAgICAgICAgICAgZW5hYmxlUHJvZmlsZXIoKTsK
LSAgICB9CisgICAgaWYgKCFTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJsZWQo
KSAmJiBtX3N0YXRlLT5wcm9maWxlckFsd2F5c0VuYWJsZWQoKSkKKyAgICAgICAgZW5hYmxlUHJv
ZmlsZXIoKTsKICNlbmRpZgogfQogCkBAIC04OTUsNyArODUwLDcgQEAgSW5zcGVjdG9yUmVzb3Vy
Y2UqIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFRyYWNrZWRSZXNvdXJjZSh1bnNpZ25lZCBsb25n
IGlkZW50aWYKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBp
ZiAobV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkKKyAgICBpZiAobV9zdGF0ZS0+cmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIG1fcmVzb3VyY2VzLmdldChpZGVudGlm
aWVyKS5nZXQoKTsKIAogICAgIGJvb2wgaXNNYWluUmVzb3VyY2UgPSBtX21haW5SZXNvdXJjZSAm
JiBtX21haW5SZXNvdXJjZS0+aWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7CkBAIC05MjYsNyAr
ODgxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVt
b3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQ
YWdlKTsKICAgICBib29sIGlzTWFpblJlc291cmNlID0gaXNNYWluUmVzb3VyY2VMb2FkZXIobG9h
ZGVyLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgY2FjaGVkUmVzb3VyY2UtPnVybCgpKSk7CiAgICAg
ZW5zdXJlU2V0dGluZ3NMb2FkZWQoKTsKLSAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFtX3Jl
c291cmNlVHJhY2tpbmdFbmFibGVkKQorICAgIGlmICghaXNNYWluUmVzb3VyY2UgJiYgIW1fc3Rh
dGUtPnJlc291cmNlVHJhY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
ZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JSZXNvdXJjZTo6Y3Jl
YXRlQ2FjaGVkKG1faW5zcGVjdGVkUGFnZS0+cHJvZ3Jlc3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRp
ZmllcigpLCBsb2FkZXIsIGNhY2hlZFJlc291cmNlKTsKQEAgLTk1MCw3ICs5MDUsNyBAQCB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsCiAKICAgICBib29sIGlzTWFpblJlc291cmNlID0gaXNNYWluUmVz
b3VyY2VMb2FkZXIobG9hZGVyLCByZXF1ZXN0LnVybCgpKTsKICAgICBlbnN1cmVTZXR0aW5nc0xv
YWRlZCgpOwotICAgIGlmICghaXNNYWluUmVzb3VyY2UgJiYgIW1fcmVzb3VyY2VUcmFja2luZ0Vu
YWJsZWQpCisgICAgaWYgKCFpc01haW5SZXNvdXJjZSAmJiAhbV9zdGF0ZS0+cmVzb3VyY2VUcmFj
a2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEluc3BlY3RvclJl
c291cmNlPiByZXNvdXJjZSA9IEluc3BlY3RvclJlc291cmNlOjpjcmVhdGUoaWRlbnRpZmllciwg
bG9hZGVyLCByZXF1ZXN0LnVybCgpKTsKQEAgLTExMzcsMTAgKzEwOTIsMTAgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGkKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fbW9uaXRvcmluZ1hIUikKKyAgICBpZiAobV9zdGF0ZS0+bW9uaXRvcmluZ1hIUigp
KQogICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2Fn
ZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgIlhIUiBmaW5pc2hlZCBsb2FkaW5nOiBcIiIgKyB1cmwg
KyAiXCIuIiwgc2VuZExpbmVOdW1iZXIsIHNlbmRVUkwpOwogCi0gICAgaWYgKCFtX3Jlc291cmNl
VHJhY2tpbmdFbmFibGVkKQorICAgIGlmICghbV9zdGF0ZS0+cmVzb3VyY2VUcmFja2luZ0VuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW5zcGVjdG9yUmVzb3VyY2UqIHJlc291cmNl
ID0gbV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOwpAQCAtMTE1NSw3ICsxMTEwLDcg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJl
cXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
Y3JpcHRJbXBvcnRlZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291
cmNlU3RyaW5nKQogewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3Jlc291cmNlVHJhY2tpbmdF
bmFibGVkKQorICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3N0YXRlLT5yZXNvdXJjZVRyYWNraW5n
RW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnNwZWN0b3JSZXNvdXJjZSogcmVz
b3VyY2UgPSBtX3Jlc291cmNlcy5nZXQoaWRlbnRpZmllcikuZ2V0KCk7CkBAIC0xMTc0LDggKzEx
MjksNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFJlc291cmNlVHJhY2tpbmdFbmFi
bGVkKGJvb2wgZW5hYmxlKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9pbnNwZWN0
ZWRQYWdlKTsKLSAgICBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkID0gZW5hYmxlOwotICAgIHVw
ZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CisgICAgbV9zdGF0ZS0+c2V0UmVzb3VyY2VUcmFj
a2luZ0VuYWJsZWQoZW5hYmxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRS
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJsZSwgYm9vbCBhbHdheXMsIGJvb2wqIG5l
d1N0YXRlKQpAQCAtMTE4MywxOCArMTEzNywxNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlLCBib29sIGFsd2F5cywgYgog
ICAgICpuZXdTdGF0ZSA9IGVuYWJsZTsKIAogICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNldFNl
dHRpbmcocmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSwgZW5hYmxlID8g
InRydWUiIDogImZhbHNlIik7CisgICAgICAgIG1fc3RhdGUtPnNldFJlc291cmNlVHJhY2tpbmdB
bHdheXNFbmFibGVkKGVuYWJsZSk7CiAKLSAgICBpZiAobV9yZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZCA9PSBlbmFibGUpCisgICAgaWYgKG1fc3RhdGUtPnJlc291cmNlVHJhY2tpbmdFbmFibGVkKCkg
PT0gZW5hYmxlKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdl
KTsKLSAgICBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkID0gZW5hYmxlOworICAgIG1fc3RhdGUt
PnNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKGVuYWJsZSk7CiAKICAgICBpZiAoZW5hYmxlKQog
ICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5uYXZpZ2F0aW9uU2NoZWR1bGVy
KCktPnNjaGVkdWxlUmVmcmVzaCh0cnVlKTsKLQotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29v
a2llKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5zdXJlU2V0dGluZ3NMb2Fk
ZWQoKQpAQCAtMTIwMywxNSArMTE1NSwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVu
c3VyZVNldHRpbmdzTG9hZGVkKCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2V0dGluZ3NMb2Fk
ZWQgPSB0cnVlOwogCi0gICAgU3RyaW5nIHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkID0g
c2V0dGluZyhyZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lKTsKLSAgICBp
ZiAocmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWQgPT0gInRydWUiKQotICAgICAgICBtX3Jl
c291cmNlVHJhY2tpbmdFbmFibGVkID0gdHJ1ZTsKLQotICAgIFN0cmluZyBtb25pdG9yaW5nWEhS
QWx3YXlzRW5hYmxlZCA9IHNldHRpbmcobW9uaXRvcmluZ1hIUlNldHRpbmdOYW1lKTsKLSAgICBp
ZiAobW9uaXRvcmluZ1hIUkFsd2F5c0VuYWJsZWQgPT0gInRydWUiKQotICAgICAgICBtX21vbml0
b3JpbmdYSFIgPSB0cnVlOworICAgIG1fc3RhdGUtPnJlc3RvcmVGcm9tU2V0dGluZ3MoKTsKIAot
ICAgIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CisgICAgaWYgKG1fc3RhdGUtPnJlc291
cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkKCkpCisgICAgICAgIG1fc3RhdGUtPnNldFJlc291cmNl
VHJhY2tpbmdFbmFibGVkKHRydWUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0
YXJ0VGltZWxpbmVQcm9maWxlcigpCkBAIC0xMjI2LDcgKzExNzMsNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxlcigpCiAgICAgaWYgKG1fZnJvbnRlbmQp
CiAgICAgICAgIG1fZnJvbnRlbmQtPnRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCk7CiAKLSAg
ICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldFRpbWVsaW5l
UHJvZmlsZXJFbmFibGVkKHRydWUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0
b3BUaW1lbGluZVByb2ZpbGVyKCkKQEAgLTEyNDEsNyArMTE4OCw3IEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c3RvcFRpbWVsaW5lUHJvZmlsZXIoKQogICAgIGlmIChtX2Zyb250ZW5kKQog
ICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCgpOwogCi0gICAg
dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKTsKKyAgICBtX3N0YXRlLT5zZXRUaW1lbGluZVBy
b2ZpbGVyRW5hYmxlZChmYWxzZSk7CiB9CiAKICNpZiBFTkFCTEUoV09SS0VSUykKQEAgLTE2MTMs
MTQgKzE1NjAsMTQgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlckVuYWJsZWQo
KSBjb25zdAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVQcm9maWxlcihib29sIGFs
d2F5cywgYm9vbCBza2lwUmVjb21waWxlKQogewogICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNl
dFNldHRpbmcocHJvZmlsZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsICJ0cnVlIik7CisgICAg
ICAgIG1fc3RhdGUtPnNldFByb2ZpbGVyQWx3YXlzRW5hYmxlZCh0cnVlKTsKICAgICBtX3Byb2Zp
bGVyQWdlbnQtPmVuYWJsZShza2lwUmVjb21waWxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpCiB7CiAgICAgaWYgKGFsd2F5cykK
LSAgICAgICAgc2V0U2V0dGluZyhwcm9maWxlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSwgImZh
bHNlIik7CisgICAgICAgIG1fc3RhdGUtPnNldFByb2ZpbGVyQWx3YXlzRW5hYmxlZChmYWxzZSk7
CiAgICAgbV9wcm9maWxlckFnZW50LT5kaXNhYmxlKCk7CiB9CiAjZW5kaWYKQEAgLTE2MzAsNyAr
MTU3Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdnZXJGcm9tRnJv
bnRlbmQoYm9vbCBhbHdheXMpCiB7CiAgICAgQVNTRVJUKCFkZWJ1Z2dlckVuYWJsZWQoKSk7CiAg
ICAgaWYgKGFsd2F5cykKLSAgICAgICAgc2V0U2V0dGluZyhkZWJ1Z2dlckFsd2F5c0VuYWJsZWRT
ZXR0aW5nTmFtZSwgInRydWUiKTsKKyAgICAgICAgbV9zdGF0ZS0+c2V0RGVidWdnZXJBbHdheXNF
bmFibGVkKHRydWUpOwogCiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CiAKQEAgLTE2NjEs
NyArMTYwOCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZURlYnVnZ2VyKGJv
b2wgYWx3YXlzKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYWx3YXlzKQotICAgICAgICBz
ZXRTZXR0aW5nKGRlYnVnZ2VyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lLCAiZmFsc2UiKTsKKyAg
ICAgICAgbV9zdGF0ZS0+c2V0RGVidWdnZXJBbHdheXNFbmFibGVkKGZhbHNlKTsKIAogICAgIEFT
U0VSVChtX2luc3BlY3RlZFBhZ2UpOwogCkBAIC0xNzcwLDEyICsxNzE3LDE0IEBAIFN0cmluZyBJ
bnNwZWN0b3JDb250cm9sbGVyOjpicmVha3BvaW50c1NldHRpbmdLZXkoKQogCiBQYXNzUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JDb250cm9sbGVyOjpsb2FkQnJlYWtwb2ludHMoKQog
ewotICAgIHJldHVybiBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHNldHRpbmcoYnJlYWtwb2lu
dHNTZXR0aW5nS2V5KCkpKTsKKyAgICBTdHJpbmcganNvblN0cmluZzsKKyAgICBtX2NsaWVudC0+
cG9wdWxhdGVTZXR0aW5nKGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpLCAmanNvblN0cmluZyk7Cisg
ICAgcmV0dXJuIEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvblN0cmluZyk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZUJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBicmVha3BvaW50cykKIHsKLSAgICBzZXRTZXR0aW5nKGJyZWFrcG9pbnRzU2V0
dGluZ0tleSgpLCBicmVha3BvaW50cy0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fY2xpZW50LT5z
dG9yZVNldHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5KCksIGJyZWFrcG9pbnRzLT50b0pTT05T
dHJpbmcoKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oCmluZGV4IDVlNmM3ZGUuLjgwMmI5NTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmgKQEAgLTY5LDYgKzY5LDcgQEAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnNwZWN0b3JQcm9maWxlckFnZW50
OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CitjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKIGNsYXNz
IEluc3BlY3RvclN0b3JhZ2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CiBj
bGFzcyBJbnNwZWN0b3JWYWx1ZTsKQEAgLTEwMyw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+ID4gRGF0
YWJhc2VSZXNvdXJjZXNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3Bl
Y3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBET01TdG9yYWdlUmVzb3VyY2VzTWFwOwogCisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IExhc3RBY3RpdmVQYW5lbDsKICAgICBzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgQ29uc29sZVBhbmVsOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBFbGVtZW50c1BhbmVsOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBQcm9maWxlc1Bh
bmVsOwpAQCAtMTIzLDEzICsxMjUsMTEgQEAgcHVibGljOgogICAgIFBhZ2UqIGluc3BlY3RlZFBh
Z2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KICAgICB2b2lkIHJlbG9hZFBh
Z2UoKTsKIAotICAgIFN0cmluZyBzZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKLSAg
ICB2b2lkIHNldFNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUp
OwogICAgIHZvaWQgc2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0aW5n
cyk7CiAgICAgdm9pZCBzYXZlU2Vzc2lvblNldHRpbmdzKGNvbnN0IFN0cmluZyYpOwogICAgIHZv
aWQgZ2V0U2V0dGluZ3MoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qKTsKIAotICAgIHZvaWQgcmVz
dG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXRl
KTsKKyAgICB2b2lkIHJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3QgU3RyaW5n
JiBpbnNwZWN0b3JDb29raWUpOwogCiAgICAgdm9pZCBpbnNwZWN0KE5vZGUqKTsKICAgICB2b2lk
IGhpZ2hsaWdodChOb2RlKik7CkBAIC0xNTMsNyArMTUzLDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKICAgICBjb25zdCBWZWN0b3I8T3duUHRyPENvbnNvbGVN
ZXNzYWdlPiA+JiBjb25zb2xlTWVzc2FnZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnNvbGVNZXNz
YWdlczsgfQogCi0gICAgYm9vbCBzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9zZWFyY2hpbmdGb3JOb2RlOyB9CisgICAgYm9vbCBzZWFyY2hpbmdGb3JOb2RlSW5QYWdl
KCkgY29uc3Q7CiAgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0
UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAgICAgdm9pZCBoYW5kbGVNb3VzZVBy
ZXNzKCk7CiAKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFJlc291
cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCk7CiAgICAgdm9pZCBzZXRSZXNvdXJjZVRy
YWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGJvb2wgYWx3YXlzLCBib29sKiBuZXdTdGF0ZSk7
Ci0gICAgYm9vbCByZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b3VyY2VUcmFja2luZ0VuYWJsZWQ7IH0KKyAgICBib29sIHJlc291cmNlVHJhY2tpbmdFbmFibGVk
KCkgY29uc3Q7CiAKICAgICB2b2lkIGVuc3VyZVNldHRpbmdzTG9hZGVkKCk7CiAKQEAgLTI3MSwx
MCArMjcxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRl
T25Mb2FkKCk7CiAgICAgdm9pZCBzZXRJbnNwZWN0b3JFeHRlbnNpb25BUEkoY29uc3QgU3RyaW5n
JiBzb3VyY2UpOwogCi0gICAgc3RhdGljIGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhcnRzQXR0
YWNoZWRTZXR0aW5nTmFtZSgpOworICAgIGJvb2wgaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsK
KyAgICB2b2lkIHNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGJvb2wpOworICAgIHZvaWQgc2V0
SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoaW50IGhlaWdodCk7CisgICAgaW50IGluc3BlY3RvckF0
dGFjaGVkSGVpZ2h0KCkgY29uc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVs
dEF0dGFjaGVkSGVpZ2h0OwogCiBwcml2YXRlOgotICAgIHZvaWQgdXBkYXRlSW5zcGVjdG9yU3Rh
dGVDb29raWUoKTsKICAgICB2b2lkIGdldEluc3BlY3RvclN0YXRlKFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+KiBzdGF0ZSk7CiAKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKQEAg
LTM0Niw2ICszNTAsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3JTdG9yYWdlQWdl
bnQ+IG1fc3RvcmFnZUFnZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JDU1NTdG9yZT4gbV9jc3NT
dG9yZTsKICAgICBPd25QdHI8SW5zcGVjdG9yVGltZWxpbmVBZ2VudD4gbV90aW1lbGluZUFnZW50
OworICAgIE93blB0cjxJbnNwZWN0b3JTdGF0ZT4gbV9zdGF0ZTsKIAogI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgT3duUHRyPEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudD4gbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQ7CkBAIC0zNzIsMTAgKzM3Nyw3IEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtX3Nlc3Npb25TZXR0aW5nczsKICNl
bmRpZgogICAgIHVuc2lnbmVkIG1fZ3JvdXBMZXZlbDsKLSAgICBib29sIG1fc2VhcmNoaW5nRm9y
Tm9kZTsKLSAgICBib29sIG1fbW9uaXRvcmluZ1hIUjsKICAgICBDb25zb2xlTWVzc2FnZSogbV9w
cmV2aW91c01lc3NhZ2U7Ci0gICAgYm9vbCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkOwogICAg
IGJvb2wgbV9zZXR0aW5nc0xvYWRlZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZD4gbV9p
bnNwZWN0b3JCYWNrZW5kOwogICAgIE93blB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKaW5kZXggNzc2MTZkYS4uNDgxMmIyYSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5jcHAKQEAgLTQ3LDcgKzQ3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lID0gImluc3BlY3Rv
ckF0dGFjaGVkSGVpZ2h0IjsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRI
ZWlnaHQgPSAzMDA7CiBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0g
MjUwLjBmOwogc3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0g
MC43NWY7CkBAIC0xMDgsNyArMTA3LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7CiAgICAg
dW5zaWduZWQgdG90YWxIZWlnaHQgPSBtX2Zyb250ZW5kUGFnZS0+bWFpbkZyYW1lKCktPnZpZXco
KS0+dmlzaWJsZUhlaWdodCgpICsgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdl
KCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKICAgICB1bnNpZ25lZCBh
dHRhY2hlZEhlaWdodCA9IGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0LCB0
b3RhbEhlaWdodCk7Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRTZXR0aW5nKGluc3Bl
Y3RvckF0dGFjaGVkSGVpZ2h0TmFtZSwgU3RyaW5nOjpudW1iZXIoYXR0YWNoZWRIZWlnaHQpKTsK
KyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGF0
dGFjaGVkSGVpZ2h0KTsKICAgICBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdo
dCk7CiB9CiAKQEAgLTEzNCwxMCArMTMzLDkgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dExvY2FsOjpzZXRBdHRhY2hlZFdpbmRvdyhib29sIGF0dGFjaGVkKQogdm9pZCBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsOjpyZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHQoKQogewogICAg
IHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmlu
c3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotICAg
IFN0cmluZyBhdHRhY2hlZEhlaWdodCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0dGluZyhp
bnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOworICAgIGludCBhdHRhY2hlZEhlaWdodCA9IG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKTsKICAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOwotICAgIGludCBoZWlnaHQgPSBhdHRhY2hlZEhlaWdodC50b0ludCgm
c3VjY2Vzcyk7Ci0gICAgdW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihoZWlnaHQpIDogZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OworICAgIHVu
c2lnbmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
YXR0YWNoZWRIZWlnaHQpIDogZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OwogICAgIAogICAgIC8vIFRo
aXMgY2FsbCBtaWdodCBub3QgZ28gdGhyb3VnaCAoaWYgdGhlIHdpbmRvdyBzdGFydHMgb3V0IGRl
dGFjaGVkKSwgYnV0IGlmIHRoZSB3aW5kb3cgaXMgaW5pdGlhbGx5IGNyZWF0ZWQgYXR0YWNoZWQs
CiAgICAgLy8gSW5zcGVjdG9yQ29udHJvbGxlcjo6YXR0YWNoV2luZG93IGlzIG5ldmVyIGNhbGxl
ZCwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gc2V0IHRoZSBhdHRhY2hlZFdpbmRvd0hlaWdo
dC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4wYjk0NjgxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3RhdGUuY3BwCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xp
ZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjZGVmaW5lIFJFR0lTVEVSX0lOU1BF
Q1RPUl9QUk9QRVJUWShuYW1lLCB2YWx1ZSwgc3RhdGVOYW1lLCBwcmVmZXJlbmNlTmFtZSlcCisg
ICAgbV8jI25hbWUubV92YWx1ZSA9IHZhbHVlO1wKKyAgICBtXyMjbmFtZS5tX25hbWUgPSAibmFt
ZSI7XAorICAgIG1fIyNuYW1lLm1fc3RhdGVOYW1lID0gc3RhdGVOYW1lO1wKKyAgICBtXyMjbmFt
ZS5tX3ByZWZlcmVuY2VOYW1lID0gcHJlZmVyZW5jZU5hbWU7XAorICAgIG1faW5zcGVjdG9yUHJv
cGVydGllcy5hcHBlbmQoJm1fIyNuYW1lKTsKKworSW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0
YXRlKEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorewor
ICAgIFJFR0lTVEVSX0lOU1BFQ1RPUl9QUk9QRVJUWShtb25pdG9yaW5nWEhSLCBmYWxzZSwgIm1v
bml0b3JpbmdYSFIiLCAieGhyTW9uaXRvciIpOworICAgIFJFR0lTVEVSX0lOU1BFQ1RPUl9QUk9Q
RVJUWShyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCwgZmFsc2UsICJyZXNvdXJjZVRyYWNraW5nRW5h
YmxlZCIsICIiKTsKKyAgICBSRUdJU1RFUl9JTlNQRUNUT1JfUFJPUEVSVFkocmVzb3VyY2VUcmFj
a2luZ0Fsd2F5c0VuYWJsZWQsIGZhbHNlLCAiIiwgInJlc291cmNlVHJhY2tpbmdFbmFibGVkIik7
CisgICAgUkVHSVNURVJfSU5TUEVDVE9SX1BST1BFUlRZKHRpbWVsaW5lUHJvZmlsZXJFbmFibGVk
LCBmYWxzZSwgInRpbWVsaW5lUHJvZmlsZXJFbmFibGVkIiwgIiIpOworICAgIFJFR0lTVEVSX0lO
U1BFQ1RPUl9QUk9QRVJUWShzZWFyY2hpbmdGb3JOb2RlLCBmYWxzZSwgInNlYXJjaGluZ0Zvck5v
ZGVFbmFibGVkIiwgIiIpOworICAgIFJFR0lTVEVSX0lOU1BFQ1RPUl9QUk9QRVJUWShwcm9maWxl
ckFsd2F5c0VuYWJsZWQsIGZhbHNlLCAiIiwgInByb2ZpbGVyRW5hYmxlZCIpOworICAgIFJFR0lT
VEVSX0lOU1BFQ1RPUl9QUk9QRVJUWShmcm9udGVuZFNldHRpbmdzLCAiIiwgIiIsICJmcm9udGVu
ZFNldHRpbmdzIik7CisgICAgUkVHSVNURVJfSU5TUEVDVE9SX1BST1BFUlRZKGRlYnVnZ2VyQWx3
YXlzRW5hYmxlZCwgZmFsc2UsICIiLCAiZGVidWdnZXJFbmFibGVkIik7CisgICAgUkVHSVNURVJf
SU5TUEVDVE9SX1BST1BFUlRZKGxhc3RBY3RpdmVQYW5lbCwgSW5zcGVjdG9yQ29udHJvbGxlcjo6
TGFzdEFjdGl2ZVBhbmVsLCAiIiwgImxhc3RBY3RpdmVQYW5lbCIpOworICAgIFJFR0lTVEVSX0lO
U1BFQ1RPUl9QUk9QRVJUWShpbnNwZWN0b3JTdGFydHNBdHRhY2hlZCwgdHJ1ZSwgIiIsICJJbnNw
ZWN0b3JTdGFydHNBdHRhY2hlZCIpOworICAgIFJFR0lTVEVSX0lOU1BFQ1RPUl9QUk9QRVJUWShp
bnNwZWN0b3JBdHRhY2hlZEhlaWdodCwgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVmYXVsdEF0dGFj
aGVkSGVpZ2h0LCAiIiwgImluc3BlY3RvckF0dGFjaGVkSGVpZ2h0Iik7CisgICAgUkVHSVNURVJf
SU5TUEVDVE9SX1BST1BFUlRZKHBhdXNlT25FeGNlcHRpb25zU3RhdGUsIDAsICJwYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlIiwgIiIpOworfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJv
bUluc3BlY3RvckNvb2tpZShjb25zdCBTdHJpbmcmIGpzb24pCit7CisgICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBqc29uVmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGpzb24pOwor
ICAgIGlmICghanNvblZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBqc29uT2JqZWN0ID0ganNvblZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICgh
anNvbk9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChJbnNwZWN0b3JQcm9wZXJ0
eVZlY3Rvcjo6aXRlcmF0b3IgaSA9IG1faW5zcGVjdG9yUHJvcGVydGllcy5iZWdpbigpOyBpICE9
IG1faW5zcGVjdG9yUHJvcGVydGllcy5lbmQoKTsgKytpKQorICAgICAgICAoKmkpLT5yZXN0b3Jl
RnJvbUNvbnRhaW5lckFzKGpzb25PYmplY3QuZ2V0KCksICgqaSktPm1fbmFtZSk7Cit9CisKK1Bh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RhdGVPYmplY3RG
b3JGcm9udGVuZCgpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3RhdGVPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGZvciAoSW5zcGVjdG9yUHJvcGVydHlW
ZWN0b3I6Oml0ZXJhdG9yIGkgPSBtX2luc3BlY3RvclByb3BlcnRpZXMuYmVnaW4oKTsgaSAhPSBt
X2luc3BlY3RvclByb3BlcnRpZXMuZW5kKCk7ICsraSkKKyAgICAgICAgaWYgKCgqaSktPm1fc3Rh
dGVOYW1lLmxlbmd0aCgpKQorICAgICAgICAgICAgKCppKS0+c2F2ZVRvQ29udGFpbmVyQXMoc3Rh
dGVPYmplY3QuZ2V0KCksICgqaSktPm1fc3RhdGVOYW1lKTsKKyAgICByZXR1cm4gc3RhdGVPYmpl
Y3QucmVsZWFzZSgpOworfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbVNldHRp
bmdzKCkKK3sKKyAgICBmb3IgKEluc3BlY3RvclByb3BlcnR5VmVjdG9yOjppdGVyYXRvciBpID0g
bV9pbnNwZWN0b3JQcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0gbV9pbnNwZWN0b3JQcm9wZXJ0aWVz
LmVuZCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCgqaSktPm1fcHJlZmVyZW5jZU5hbWUubGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5w
b3B1bGF0ZVNldHRpbmcoKCppKS0+bV9wcmVmZXJlbmNlTmFtZSwgJnZhbHVlKTsKKyAgICAgICAg
ICAgICgqaSktPmZyb21TdHJpbmcodmFsdWUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IEluc3BlY3RvclN0YXRlOjpwcm9wZXJ0eVVwZGF0ZWQoSW5zcGVjdG9yUHJvcGVydHlCYXNlKiBw
cm9wZXJ0eSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb29raWVPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGZvciAoSW5zcGVjdG9yUHJvcGVydHlWZWN0
b3I6Oml0ZXJhdG9yIGkgPSBtX2luc3BlY3RvclByb3BlcnRpZXMuYmVnaW4oKTsgaSAhPSBtX2lu
c3BlY3RvclByb3BlcnRpZXMuZW5kKCk7ICsraSkKKyAgICAgICAgaWYgKCgqaSktPm1fc3RhdGVO
YW1lLmxlbmd0aCgpKQorICAgICAgICAgICAgKCppKS0+c2F2ZVRvQ29udGFpbmVyQXMoY29va2ll
T2JqZWN0LmdldCgpLCAoKmkpLT5tX3N0YXRlTmFtZSk7CisgICAgbV9jbGllbnQtPnVwZGF0ZUlu
c3BlY3RvclN0YXRlQ29va2llKGNvb2tpZU9iamVjdC0+dG9KU09OU3RyaW5nKCkpOworCisgICAg
aWYgKHByb3BlcnR5LT5tX3ByZWZlcmVuY2VOYW1lLmxlbmd0aCgpKQorICAgICAgICBtX2NsaWVu
dC0+c3RvcmVTZXR0aW5nKHByb3BlcnR5LT5tX3ByZWZlcmVuY2VOYW1lLCBwcm9wZXJ0eS0+dG9T
dHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0
ZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mY2EyYzMwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3Bl
Y3RvclN0YXRlX2gKKyNkZWZpbmUgSW5zcGVjdG9yU3RhdGVfaAorCisjaW5jbHVkZSAiSW5zcGVj
dG9yVmFsdWVzLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBJbnNwZWN0b3JTdGF0ZTsK
KworY2xhc3MgSW5zcGVjdG9yUHJvcGVydHlCYXNlIHsKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xh
c3MgSW5zcGVjdG9yU3RhdGU7CisKKyAgICBJbnNwZWN0b3JQcm9wZXJ0eUJhc2UoKSB7fQorICAg
IHZpcnR1YWwgfkluc3BlY3RvclByb3BlcnR5QmFzZSgpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2F2ZVRvQ29udGFpbmVyQXMoSW5zcGVjdG9yT2JqZWN0KiBjb250YWluZXIsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlRnJvbUNvbnRhaW5l
ckFzKEluc3BlY3Rvck9iamVjdCogY29udGFpbmVyLCBjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsK
KyAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVlKSA9IDA7CisKK3ByaXZhdGU6
CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV9zdGF0ZU5hbWU7CisgICAgU3RyaW5n
IG1fcHJlZmVyZW5jZU5hbWU7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlPgor
Y2xhc3MgSW5zcGVjdG9yUHJvcGVydHkgOiBwdWJsaWMgSW5zcGVjdG9yUHJvcGVydHlCYXNlIHsK
K3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yU3RhdGU7CisKKyAgICBJbnNwZWN0
b3JQcm9wZXJ0eSgpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2F2ZVRvQ29udGFpbmVyQXMoSW5z
cGVjdG9yT2JqZWN0KiBjb250YWluZXIsIGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QgeyBjb250
YWluZXItPnNldChuYW1lLCBtX3ZhbHVlKTsgfQorICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlRnJv
bUNvbnRhaW5lckFzKEluc3BlY3Rvck9iamVjdCogY29udGFpbmVyLCBjb25zdCBTdHJpbmcmIG5h
bWUpIHsgY29udGFpbmVyLT5nZXQobmFtZSwgJm1fdmFsdWUpOyB9CisKKyAgICB2aXJ0dWFsIFN0
cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIHRvU3RyaW5nSW1wbCgpOyB9CisgICAgdmly
dHVhbCB2b2lkIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSkgeyBmcm9tU3Ry
aW5nSW1wbChzdHJpbmdWYWx1ZSk7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgdG9TdHJpbmdJ
bXBsKCkgY29uc3Q7CisgICAgdm9pZCBmcm9tU3RyaW5nSW1wbChjb25zdCBTdHJpbmcmIHN0cmlu
Z1ZhbHVlKTsKKyAgICBWYWx1ZVR5cGUgbV92YWx1ZTsKK307CisKKwordGVtcGxhdGUgPD4gaW5s
aW5lIFN0cmluZyBJbnNwZWN0b3JQcm9wZXJ0eTxib29sPjo6dG9TdHJpbmdJbXBsKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZSA/ICJ0cnVlIiA6ICJmYWxzZSI7IH0KK3RlbXBsYXRlIDw+IGlubGlu
ZSBTdHJpbmcgSW5zcGVjdG9yUHJvcGVydHk8U3RyaW5nPjo6dG9TdHJpbmdJbXBsKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQordGVtcGxhdGUgPD4gaW5saW5lIFN0cmluZyBJbnNwZWN0b3JQ
cm9wZXJ0eTxsb25nPjo6dG9TdHJpbmdJbXBsKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nOjpudW1i
ZXIobV92YWx1ZSk7IH0KKwordGVtcGxhdGUgPD4gaW5saW5lIHZvaWQgSW5zcGVjdG9yUHJvcGVy
dHk8Ym9vbD46OmZyb21TdHJpbmdJbXBsKGNvbnN0IFN0cmluZyYgc3RyaW5nVmFsdWUpIHsgbV92
YWx1ZSA9IHN0cmluZ1ZhbHVlID09ICJ0cnVlIjsgfQordGVtcGxhdGUgPD4gaW5saW5lIHZvaWQg
SW5zcGVjdG9yUHJvcGVydHk8U3RyaW5nPjo6ZnJvbVN0cmluZ0ltcGwoY29uc3QgU3RyaW5nJiBz
dHJpbmdWYWx1ZSkgeyBtX3ZhbHVlID0gc3RyaW5nVmFsdWU7IH0KK3RlbXBsYXRlIDw+IGlubGlu
ZSB2b2lkIEluc3BlY3RvclByb3BlcnR5PGxvbmc+Ojpmcm9tU3RyaW5nSW1wbChjb25zdCBTdHJp
bmcmIHN0cmluZ1ZhbHVlKSB7IG1fdmFsdWUgPSBzdHJpbmdWYWx1ZS50b0ludCgpOyB9CisKKyNk
ZWZpbmUgSU5TUEVDVE9SX1BST1BFUlRZKHR5cGUsIG5hbWUsIHNldHRlck5hbWUpXAorICAgIHR5
cGUgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fIyNuYW1lLm1fdmFsdWU7IH1cCisgICAgdm9pZCBz
ZXR0ZXJOYW1lKGNvbnN0IHR5cGUmIHZhbHVlKVwKKyAgICB7XAorICAgICAgICBpZiAobV8jI25h
bWUubV92YWx1ZSA9PSB2YWx1ZSlcCisgICAgICAgICAgICByZXR1cm47XAorICAgICAgICBtXyMj
bmFtZS5tX3ZhbHVlID0gdmFsdWU7XAorICAgICAgICBwcm9wZXJ0eVVwZGF0ZWQoJm1fIyNuYW1l
KTtcCisgICAgfVwKK3ByaXZhdGU6XAorICAgIEluc3BlY3RvclByb3BlcnR5PHR5cGU+IG1fIyNu
YW1lO1wKK3B1YmxpYzoKKworY2xhc3MgSW5zcGVjdG9yU3RhdGUgeworcHVibGljOgorICAgIGZy
aWVuZCBjbGFzcyBJbnNwZWN0b3JQcm9wZXJ0eTxib29sPjsKKyAgICBmcmllbmQgY2xhc3MgSW5z
cGVjdG9yUHJvcGVydHk8U3RyaW5nPjsKKyAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yUHJvcGVy
dHk8bG9uZz47CisKKyAgICBJbnNwZWN0b3JTdGF0ZShJbnNwZWN0b3JDbGllbnQqIGNsaWVudCk7
CisKKyAgICBJTlNQRUNUT1JfUFJPUEVSVFkoYm9vbCwgbW9uaXRvcmluZ1hIUiwgc2V0TW9uaXRv
cmluZ1hIUik7CisgICAgSU5TUEVDVE9SX1BST1BFUlRZKGJvb2wsIHJlc291cmNlVHJhY2tpbmdF
bmFibGVkLCBzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk7CisgICAgSU5TUEVDVE9SX1BST1BF
UlRZKGJvb2wsIHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkLCBzZXRSZXNvdXJjZVRyYWNr
aW5nQWx3YXlzRW5hYmxlZCk7CisgICAgSU5TUEVDVE9SX1BST1BFUlRZKGJvb2wsIHRpbWVsaW5l
UHJvZmlsZXJFbmFibGVkLCBzZXRUaW1lbGluZVByb2ZpbGVyRW5hYmxlZCk7CisgICAgSU5TUEVD
VE9SX1BST1BFUlRZKGJvb2wsIHNlYXJjaGluZ0Zvck5vZGUsIHNldFNlYXJjaGluZ0Zvck5vZGUp
OworICAgIElOU1BFQ1RPUl9QUk9QRVJUWShib29sLCBwcm9maWxlckFsd2F5c0VuYWJsZWQsIHNl
dFByb2ZpbGVyQWx3YXlzRW5hYmxlZCk7CisgICAgSU5TUEVDVE9SX1BST1BFUlRZKFN0cmluZywg
ZnJvbnRlbmRTZXR0aW5ncywgc2V0RnJvbnRlbmRTZXR0aW5ncyk7CisgICAgSU5TUEVDVE9SX1BS
T1BFUlRZKGJvb2wsIGRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwgc2V0RGVidWdnZXJBbHdheXNFbmFi
bGVkKTsKKyAgICBJTlNQRUNUT1JfUFJPUEVSVFkoU3RyaW5nLCBsYXN0QWN0aXZlUGFuZWwsIHNl
dExhc3RBY3RpdmVQYW5lbCk7CisgICAgSU5TUEVDVE9SX1BST1BFUlRZKGJvb2wsIGluc3BlY3Rv
clN0YXJ0c0F0dGFjaGVkLCBzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCk7CisgICAgSU5TUEVD
VE9SX1BST1BFUlRZKGxvbmcsIGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0LCBzZXRJbnNwZWN0b3JB
dHRhY2hlZEhlaWdodCk7CisgICAgSU5TUEVDVE9SX1BST1BFUlRZKGxvbmcsIHBhdXNlT25FeGNl
cHRpb25zU3RhdGUsIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOworCisgICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGdldFN0YXRlT2JqZWN0Rm9yRnJvbnRlbmQoKTsKKyAgICB2b2lk
IHJlc3RvcmVGcm9tSW5zcGVjdG9yQ29va2llKGNvbnN0IFN0cmluZyYganNvblN0cmluZyk7Cisg
ICAgdm9pZCByZXN0b3JlRnJvbVNldHRpbmdzKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHBy
b3BlcnR5VXBkYXRlZChJbnNwZWN0b3JQcm9wZXJ0eUJhc2UqIHByb3BlcnR5KTsKKworcHJpdmF0
ZToKKyAgICB0eXBlZGVmIFZlY3RvcjxJbnNwZWN0b3JQcm9wZXJ0eUJhc2UqPiBJbnNwZWN0b3JQ
cm9wZXJ0eVZlY3RvcjsKKyAgICBJbnNwZWN0b3JQcm9wZXJ0eVZlY3RvciBtX2luc3BlY3RvclBy
b3BlcnRpZXM7CisgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckNvbnRyb2xsZXJf
aCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IGM5NmU5NTMuLjE5YjY1
NGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApAQCAtNjQ5LDYgKzY0OSwx
NCBAQCBib29sIEluc3BlY3Rvck9iamVjdDo6Z2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwg
ZG91YmxlKiBvdXRwdXQpIGNvbnN0CiAgICAgcmV0dXJuIHZhbHVlLT5hc051bWJlcihvdXRwdXQp
OwogfQogCitib29sIEluc3BlY3Rvck9iamVjdDo6Z2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgbG9uZyogb3V0cHV0KSBjb25zdAoreworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFs
dWUgPSBnZXQobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiB2YWx1ZS0+YXNOdW1iZXIob3V0cHV0KTsKK30KKwogYm9vbCBJbnNwZWN0b3JP
YmplY3Q6OmdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyogb3V0cHV0KSBjb25z
dAogewogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4IDQwMzZmNTUuLjQ1NmNiYjUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC0xNzEsNiArMTcxLDE2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgYXNPYmplY3QoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG91dHB1dCk7
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXNPYmplY3QoKTsKIAor
ICAgIHZvaWQgc2V0KGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCB2YWx1ZSkgeyBzZXRCb29sZWFu
KG5hbWUsIHZhbHVlKTsgfQorICAgIHZvaWQgc2V0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkgeyBzZXRTdHJpbmcobmFtZSwgdmFsdWUpOyB9CisgICAgdm9pZCBzZXQo
Y29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgdmFsdWUpIHsgc2V0TnVtYmVyKG5hbWUsIHZhbHVl
KTsgfQorICAgIHZvaWQgc2V0KGNvbnN0IFN0cmluZyYgbmFtZSwgbG9uZyB2YWx1ZSkgeyBzZXRO
dW1iZXIobmFtZSwgdmFsdWUpOyB9CisKKyAgICB2b2lkIGdldChjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wqIHZhbHVlKSBjb25zdCB7IGdldEJvb2xlYW4obmFtZSwgdmFsdWUpOyB9CisgICAgdm9p
ZCBnZXQoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcqIHZhbHVlKSBjb25zdCB7IGdldFN0cmlu
ZyhuYW1lLCB2YWx1ZSk7IH0KKyAgICB2b2lkIGdldChjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJs
ZSogdmFsdWUpIGNvbnN0IHsgZ2V0TnVtYmVyKG5hbWUsIHZhbHVlKTsgfQorICAgIHZvaWQgZ2V0
KGNvbnN0IFN0cmluZyYgbmFtZSwgbG9uZyogdmFsdWUpIGNvbnN0IHsgZ2V0TnVtYmVyKG5hbWUs
IHZhbHVlKTsgfQorCiAgICAgdm9pZCBzZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCk7CiAgICAgdm9pZCBzZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUpOwogICAg
IHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJik7CkBAIC0x
ODEsNiArMTkxLDcgQEAgcHVibGljOgogICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgU3Ry
aW5nJiBuYW1lKSBjb25zdDsKICAgICBib29sIGdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiBvdXRwdXQpIGNvbnN0OwogICAgIGJvb2wgZ2V0TnVtYmVyKGNvbnN0IFN0cmluZyYg
bmFtZSwgZG91YmxlKiBvdXRwdXQpIGNvbnN0OworICAgIGJvb2wgZ2V0TnVtYmVyKGNvbnN0IFN0
cmluZyYgbmFtZSwgbG9uZyogb3V0cHV0KSBjb25zdDsKICAgICBib29sIGdldFN0cmluZyhjb25z
dCBTdHJpbmcmIG5hbWUsIFN0cmluZyogb3V0cHV0KSBjb25zdDsKICAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAg
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZ2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKaW5kZXggZDQyMGJlZi4uYWFhYjE0NSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0x
MC0wNiAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW5z
cGVjdG9yIHNldHRpbmdzL3Byb3BlcnRpZXMvc3RhdGVzIG1hbmFnZW1lbnQKKyAgICAgICAgc2hv
dWxkIGJlIGV4dHJhY3RlZCBpbnRvIHNlcGFyYXRlIGNsYXNzLgorCisgICAgICAgIFdlIGhhdmUg
YSBsb3Qgb2YgZmxhZ3MvdmFsdWVzIGluIEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIFNv
bWUgZmxhZ3MgYXJlIHBlcnNpc3RpbmcgaW50byBwcm9maWxlLgorICAgICAgICBPdGhlcnMgYXJl
IHBhcnQgb2YgaW5zcGVjdG9yIHN0YXRlIGZvciBmcm9udGVuZC4KKyAgICAgICAgQWxsIHRoZXNl
IGZsYWdzIHNob3VsZCBrZWVwIHRoZWlyIHZhbHVlcyBhZnRlciBuYXZpZ2F0aW9uLgorICAgICAg
ICBJdCdkIGJlIGJldHRlciB0byBleHRyYWN0IHRoZXNlIGZsYWdzL3ZhbHVlcyBpbnRvIHNlcGFy
YXRlCisgICAgICAgIGNsYXNzIHdoaWNoIHdpbGwgY2FyZSBhYm91dCB0aGVpcnMgbGlmZXRpbWUu
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mjc1
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW06CisgICAg
ICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgc2hvd1dpbmRvdzpdKToKKyAgICAg
ICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhdHRhY2hdKToKKyAgICAgICAgKC1b
V2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBkZXRhY2hdKToKKwogMjAxMC0xMC0wNSAgUGhp
bGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JDbGllbnQubW0gYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5tbQppbmRleCBkNGQwMjEzLi5kNmRjODc5IDEwMDY0NAotLS0gYS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQorKysgYi9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQpAQCAtMzU4LDggKzM1OCw3
IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkg
Y29uc3QKICAgICBfdmlzaWJsZSA9IFlFUzsKICAgICAKICAgICAvLyBJZiBubyBwcmVmZXJlbmNl
IGlzIHNldCAtIGRlZmF1bHQgdG8gYW4gYXR0YWNoZWQgd2luZG93LiBUaGlzIGlzIGltcG9ydGFu
dCBmb3IgaW5zcGVjdG9yIExheW91dFRlc3RzLgotICAgIFN0cmluZyBzaG91bGRBdHRhY2ggPSBb
X2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0dGluZyhJ
bnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCkp
OwotICAgIF9zaG91bGRBdHRhY2ggPSBzaG91bGRBdHRhY2ggIT0gImZhbHNlIjsKKyAgICBfc2hv
dWxkQXR0YWNoID0gW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPmluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCk7CiAgICAgCiAgICAgaWYgKF9zaG91bGRBdHRh
Y2ggJiYgIV9mcm9udGVuZENsaWVudC0+Y2FuQXR0YWNoV2luZG93KCkpCiAgICAgICAgIF9zaG91
bGRBdHRhY2ggPSBOTzsKQEAgLTM5NCw3ICszOTMsNyBAQCB2b2lkIFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0CiAgICAgaWYgKF9hdHRhY2hlZFRv
SW5zcGVjdGVkV2ViVmlldykKICAgICAgICAgcmV0dXJuOwogCi0gICAgW19pbnNwZWN0ZWRXZWJW
aWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29u
dHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAidHJ1ZSIpOwor
ICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRJ
bnNwZWN0b3JTdGFydHNBdHRhY2hlZCh0cnVlKTsKIAogICAgIFtzZWxmIGNsb3NlXTsKICAgICBb
c2VsZiBzaG93V2luZG93Om5pbF07CkBAIC00MDUsNyArNDA0LDcgQEAgdm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6dXBkYXRlV2luZG93VGl0bGUoKSBjb25zdAogICAgIGlmICghX2F0
dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKLSAgICBbX2luc3Bl
Y3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNw
ZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJm
YWxzZSIpOworICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChmYWxzZSk7CiAKICAgICBbc2VsZiBjbG9z
ZV07CiAgICAgW3NlbGYgc2hvd1dpbmRvdzpuaWxdOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cgYi9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBlODA3MTRhLi5iMTZmYjRiIDEw
MDY0NAotLS0gYS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9XZWJLaXQvd2luL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI0IEBACisyMDEwLTEwLTA2ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xv
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnNwZWN0b3Igc2V0dGluZ3MvcHJvcGVydGllcy9zdGF0
ZXMgbWFuYWdlbWVudAorICAgICAgICBzaG91bGQgYmUgZXh0cmFjdGVkIGludG8gc2VwYXJhdGUg
Y2xhc3MuCisKKyAgICAgICAgV2UgaGF2ZSBhIGxvdCBvZiBmbGFncy92YWx1ZXMgaW4gSW5zcGVj
dG9yQ29udHJvbGxlci4KKyAgICAgICAgU29tZSBmbGFncyBhcmUgcGVyc2lzdGluZyBpbnRvIHBy
b2ZpbGUuCisgICAgICAgIE90aGVycyBhcmUgcGFydCBvZiBpbnNwZWN0b3Igc3RhdGUgZm9yIGZy
b250ZW5kLgorICAgICAgICBBbGwgdGhlc2UgZmxhZ3Mgc2hvdWxkIGtlZXAgdGhlaXIgdmFsdWVz
IGFmdGVyIG5hdmlnYXRpb24uCisgICAgICAgIEl0J2QgYmUgYmV0dGVyIHRvIGV4dHJhY3QgdGhl
c2UgZmxhZ3MvdmFsdWVzIGludG8gc2VwYXJhdGUKKyAgICAgICAgY2xhc3Mgd2hpY2ggd2lsbCBj
YXJlIGFib3V0IHRoZWlycyBsaWZldGltZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyNzUKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpk
ZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNob3dX
aW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucyk6CisKIDIwMTAtMTAtMDQgIEpvbiBIb25leWN1dHQg
IDxqaG9uZXljdXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBQcmV2ZW50IGFuIGFzc2VydGlvbiBm
YWlsdXJlIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSBhIHByb3RlY3Rpb24gc3BhY2UKZGlmZiAtLWdp
dCBhL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAppbmRleCAxYjc5
ZGRlLi4wMzAyMDA5IDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5jcHAKKysrIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNw
ZWN0b3JDbGllbnQuY3BwCkBAIC0yNzMsNyArMjczLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6YXR0YWNoV2luZG93KCkKICAgICBpZiAobV9hdHRhY2hlZCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRy
b2xsZXIoKS0+c2V0U2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNB
dHRhY2hlZFNldHRpbmdOYW1lKCksICJ0cnVlIik7CisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5w
YWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQo
dHJ1ZSk7CiAKICAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiAgICAgc2hv
d1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBX
ZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGV0YWNoV2luZG93KCkKICAgICBpZiAoIW1fYXR0
YWNoZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6
aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAiZmFsc2UiKTsKKyAgICBtX2lu
c3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0
b3JTdGFydHNBdHRhY2hlZChmYWxzZSk7CiAKICAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmlj
YXRpb25zKCk7CiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CkBAIC0zNjQs
OCArMzY0LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRvd1dp
dGhvdXROb3RpZmljYXRpb25zKCkKICAgICAgICAgc2hvdWxkQXR0YWNoID0gdHJ1ZTsKICAgICBl
bHNlIHsKICAgICAgICAgLy8gSWYgbm8gcHJlZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0IHRvIGFu
IGF0dGFjaGVkIHdpbmRvdy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGluc3BlY3RvciBMYXlvdXRU
ZXN0cy4KLSAgICAgICAgU3RyaW5nIHNob3VsZEF0dGFjaFByZWYgPSBtX2luc3BlY3RlZFdlYlZp
ZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXR0aW5nKEluc3BlY3RvckNvbnRy
b2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSk7Ci0gICAgICAgIHNo
b3VsZEF0dGFjaCA9IHNob3VsZEF0dGFjaFByZWYgIT0gImZhbHNlIjsKKyAgICAgICAgc2hvdWxk
QXR0YWNoID0gbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKIAogICAgICAgICBpZiAoc2hvdWxkQXR0YWNo
ICYmICFjYW5BdHRhY2hXaW5kb3coKSkKICAgICAgICAgICAgIHNob3VsZEF0dGFjaCA9IGZhbHNl
Owo=
</data>
<flag name="review"
          id="59864"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70213</attachid>
            <date>2010-10-08 02:12:25 -0700</date>
            <delta_ts>2010-10-09 02:25:00 -0700</delta_ts>
            <desc>[patch] third iteration.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>56975</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDUzMzFlYWUuLjI3Y2FlYzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExNCw2ICsxMTE0LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDc4M2IxMy4uNWM5ODE1ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NCBAQAorMjAxMC0xMC0wNiAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW5zcGVjdG9yIHNldHRpbmdzL3By
b3BlcnRpZXMvc3RhdGVzIG1hbmFnZW1lbnQKKyAgICAgICAgc2hvdWxkIGJlIGV4dHJhY3RlZCBp
bnRvIHNlcGFyYXRlIGNsYXNzLgorCisgICAgICAgIFdlIGhhdmUgYSBsb3Qgb2YgZmxhZ3MvdmFs
dWVzIGluIEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIFNvbWUgZmxhZ3MgYXJlIHBlcnNp
c3RpbmcgaW50byBwcm9maWxlLgorICAgICAgICBPdGhlcnMgYXJlIHBhcnQgb2YgaW5zcGVjdG9y
IHN0YXRlIGZvciBmcm9udGVuZC4KKyAgICAgICAgQWxsIHRoZXNlIGZsYWdzIHNob3VsZCBrZWVw
IHRoZWlyIHZhbHVlcyBhZnRlciBuYXZpZ2F0aW9uLgorICAgICAgICBJdCdkIGJlIGJldHRlciB0
byBleHRyYWN0IHRoZXNlIGZsYWdzL3ZhbHVlcyBpbnRvIHNlcGFyYXRlCisgICAgICAgIGNsYXNz
IHdoaWNoIHdpbGwgY2FyZSBhYm91dCB0aGVpcnMgbGlmZXRpbWUuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mjc1CisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
LmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldEluc3BlY3RvclN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNldHRpbmdzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNlYXJjaGluZ0Zvck5vZGVJ
blBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcmVMYXN0QWN0aXZl
UGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
aGFuZGxlTW91c2VQcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRTZWFyY2hpbmdGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNldE1vbml0b3JpbmdYSFJFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OnNob3dQYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlUHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0VHJhY2tlZFJlc291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppZGVudGlmaWVyRm9y
SW5pdGlhbFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdEltcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OnNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuc3VyZVNldHRpbmdzTG9hZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxl
cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGltZWxpbmVQ
cm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVQ
cm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxl
UHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxl
RGVidWdnZXJGcm9tRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlzYWJsZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OmxvYWRCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpzYXZlQnJlYWtwb2ludHMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bDo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdGF0ZTo6cmVzdG9yZUZyb21KU09OU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbVNldHRpbmdzKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0YXRlOjpwcm9wZXJ0eVVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3RhdGU6OnByb3BlcnR5TWFwVG9JbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclByb3BlcnR5QmFzZTo6SW5zcGVjdG9yUHJvcGVydHlCYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclByb3BlcnR5QmFzZTo6fkluc3BlY3RvclByb3BlcnR5QmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9wZXJ0eUJhc2U6OnNhdmUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUHJvcGVydHlCYXNlOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclByb3BlcnR5QmFzZTo6YXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUHJvcGVydHlCYXNlOjpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclByb3BlcnR5OjpJbnNwZWN0b3JQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JQcm9wZXJ0eTo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9w
ZXJ0eTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb3BlcnR5OjpzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvcGVydHk6OnNhdmVUb0NvbnRhaW5lckFzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb3BlcnR5OjpyZXN0b3JlRnJvbUNvbnRhaW5l
ckFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb3BlcnR5Ojp0b1N0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9wZXJ0eTo6ZnJvbVN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RhdGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0
OjpnZXROdW1iZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKwog
MjAxMC0xMC0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNGEyNTQ3Yi4uOGNmZTUz
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCkBAIC0xODI5LDYgKzE4MjksOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAJV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JSZXNvdXJjZS5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAgXAor
CVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmggXAogCVdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0b3JhZ2VBZ2VudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgppbmRleCBlZmY5OWQ4Li5hOGE4ZDZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEyMDEsNyArMTIw
MSw2IEBAIF9fWk43V2ViQ29yZTIyR2VvbG9jYXRpb25TZXJ2aWNlTW9jazhzZXRFcnJvckVOM1dU
RjEwUGFzc1JlZlB0cklOU18xM1Bvc2l0aW9uRXJyCiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMHNldFNldHRpbmdFUktO
M1dURjZTdHJpbmdFUzRfCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMkNvbnNv
bGVQYW5lbEUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyU2NyaXB0c1BhbmVs
RQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTNQcm9maWxlc1BhbmVsRQpAQCAt
MTIxMiwxMiArMTIxMSwxMiBAQCBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNWRp
c2FibGVQcm9maWxlckViCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxOGRpc2Nv
bm5lY3RGcm9udGVuZEV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMHN0b3BU
aW1lbGluZVByb2ZpbGVyRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIxc3Rh
cnRUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIz
aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9s
bGVyMjVldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kRWxSS04zV1RGNlN0cmluZ0UKIF9fWk43V2Vi
Q29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFTjNX
VEYxMFBhc3NPd25QdHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQorX19aTjdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZEViCiBf
X1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNlckluaXRpYXRlZFByb2Zp
bGluZ0V2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnN0b3BVc2VySW5pdGlh
dGVkUHJvZmlsaW5nRXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjM0aW5zcGVj
dG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2Ci1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIzNGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWVFdgogX19aTks3V2Vi
Q29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjMxaXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmls
ZUV2CiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVwcm9maWxlckVuYWJsZWRF
dgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dFdgpAQCAtMTIzNyw3ICsx
MjM2LDYgQEAgX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsQzJFUE5T
XzE5SW5zcGVjdG9yQ29udHJvbGxlckVQTlNfNFBhZ2UKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbEQyRXYKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIxN2RyYXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29udGV4dEUKIF9fWk5LN1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXI3ZW5hYmxlZEV2Ci1fX1pOSzdXZWJDb3JlMTlJbnNwZWN0
b3JDb250cm9sbGVyN3NldHRpbmdFUktOM1dURjZTdHJpbmdFCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShKQVZBX0JSSURHRSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggMzM2N2NlZS4uZTdlNmMyNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE5MzcsNiArMTkz
Nyw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCcsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgnLAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0
b3JTdGF0ZS5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50
LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5oJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAnLApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNmJj
ZmVlZi4uMmY5NzQwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJD
b3JlL1dlYkNvcmUucHJvCkBAIC0xMDAyLDYgKzEwMDIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2UuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAg
XApAQCAtMTg4Miw2ICsxODgzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCBcCisgICAgaW5zcGVj
dG9yL0luc3BlY3RvclN0YXRlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdl
bnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagppbmRleCBmNTQ2YTA5Li45OWM1YjRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTUyODM1LDYgKzUyODM1LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JTdGF0
ZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3RhdGUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JTdG9yYWdl
QWdlbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTRiM2NhMi4uNTE0MGI5OSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMzQsNiArMTEzNCw4IEBACiAJCTRG
NEY1RkZCMTFDQkQyRTEwMEExODZCRiAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjRGNUZGQTExQ0JEMkQyMDBB
MTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwICovOyB9OwogCQk0RjcwN0E5OTExRUY2Nzk0
MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY3MDdBOTcxMUVGNjc5NDAwQUNEQTY5
IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCAqLzsgfTsKIAkJNEY3MDdBOUExMUVG
Njc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjcwN0E5ODExRUY2Nzk0MDBBQ0RB
NjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCAqLzsgfTsKKwkJNEZBM0I5MEExMjVD
RDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAvKiBJbnNw
ZWN0b3JTdGF0ZS5jcHAgKi87IH07CisJCTRGQTNCOTBCMTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNw
ZWN0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmggKi87IH07CiAJ
CTRGRDhEMEYyMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhEMEYwMTE5QzcxOEIwMDJG
QTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAqLzsgfTsKIAkJNEZEOEQwRjMxMTlDNzE4QjAwMkZB
ODI1IC8qIFNjcmlwdEdDRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRGRDhEMEYxMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50Lmgg
Ki87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxODQ2NzBCMDg2MDJB
MDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC03MjA2LDYgKzcyMDgsOCBAQAogCQk0RjRGNUZGQzExQ0JEMzAx
MDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNEY3MDdBOTcxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEY3MDdBOTgx
MUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAvKiBJ
bnNwZWN0b3JTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnNwZWN0b3JTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRGQTNCOTA5
MTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0RkQ4RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRHQ0V2ZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEZEOEQwRjExMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlw
dEdDRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0R0NFdmVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJBMDA0QTgy
NUYgLyogQ2FjaGVkUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNo
ZWRQYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjIwNCw2ICsxMjIwOCw4
IEBACiAJCQkJOUYwRDZCMkQxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdl
bnQuaCAqLywKIAkJCQk0MUYwNjIwMDBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3Vy
Y2UuY3BwICovLAogCQkJCTQxRjA2MUZGMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNv
dXJjZS5oICovLAorCQkJCTRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0
ZS5jcHAgKi8sCisJCQkJNEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRl
LmggKi8sCiAJCQkJN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0b3JhZ2VB
Z2VudC5jcHAgKi8sCiAJCQkJN0FCMEIxQkYxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0
b3JhZ2VBZ2VudC5oICovLAogCQkJCTgyQUIxNzZGMTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0
b3JTdHlsZVNoZWV0LmNwcCAqLywKQEAgLTIxMDkxLDYgKzIxMDk3LDcgQEAKIAkJCQk4OTBBRTBF
MTEyNTZBMDc5MDBGNTk2OEMgLyogRGlyZWN0b3J5UmVhZGVyQmFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODJBQjE3NzQxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hlZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTgyQUIxNzc2MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JV
dGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTRGQTNCOTBCMTI1Q0QxMjIwMDMwMEJBRCAv
KiBJbnNwZWN0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMzY0MCw2ICsyMzY0Nyw3IEBA
CiAJCQkJODkzQzQ4NTMxMjQ5OUIwNjAwMkIzRDg2IC8qIEpTRW50cnlTeW5jQ3VzdG9tLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTgyQUIxNzczMTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JT
dHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQUIxNzc1MTI1QzgyNjcwMEM1MDY5
RCAvKiBJbnNwZWN0b3JVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEZBM0I5MEEx
MjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAxYjY2ODUxLi4yMjM5
NzE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNjks
NiArNjksNyBAQAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1
ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJj
ZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3Rv
cmFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvclZhbHVlcy5oIgpAQCAtMTE2LDQwICsxMTcsMTcgQEAgdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgY2hhciogY29u
c3QgZnJvbnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lID0gImZyb250ZW5kU2V0dGluZ3MiOwotCi1z
dGF0aWMgY29uc3QgY2hhciogY29uc3QgZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUg
PSAiZGVidWdnZXJFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsYXN0QWN0aXZl
UGFuZWwgPSAibGFzdEFjdGl2ZVBhbmVsIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBtb25p
dG9yaW5nWEhSU2V0dGluZ05hbWUgPSAieGhyTW9uaXRvciI7Ci1zdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgcmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSA9ICJyZXNvdXJj
ZVRyYWNraW5nRW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgcHJvZmlsZXJBbHdh
eXNFbmFibGVkU2V0dGluZ05hbWUgPSAicHJvZmlsZXJFbmFibGVkIjsKLQotc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IG1vbml0b3JpbmdYSFJTdGF0ZU5hbWUgPSAibW9uaXRvcmluZ1hIUkVuYWJs
ZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJlc291cmNlVHJhY2tpbmdFbmFibGVkU3Rh
dGVOYW1lID0gInJlc291cmNlVHJhY2tpbmdFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZFN0YXRlTmFtZSA9ICJzZWFyY2hpbmdGb3JOb2Rl
RW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgdGltZWxpbmVQcm9maWxlckVuYWJs
ZWRTdGF0ZU5hbWUgPSAidGltZWxpbmVQcm9maWxlckVuYWJsZWQiOwotc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IHBhdXNlT25FeGNlcHRpb25zU3RhdGVTdGF0ZU5hbWUgPSAicGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0b3JBdHRhY2hl
ZEhlaWdodE5hbWUgPSAiaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiOwotCiBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgeGhyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiWEhSIjsKIHN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBldmVudExpc3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiRXZlbnRM
aXN0ZW5lciI7CiAKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6Okxhc3RB
Y3RpdmVQYW5lbCA9ICJsYXN0QWN0aXZlUGFuZWwiOwogY29uc3QgY2hhciogY29uc3QgSW5zcGVj
dG9yQ29udHJvbGxlcjo6RWxlbWVudHNQYW5lbCA9ICJlbGVtZW50cyI7CiBjb25zdCBjaGFyKiBj
b25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7CiBjb25z
dCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTY3JpcHRzUGFuZWwgPSAic2NyaXB0
cyI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpQcm9maWxlc1BhbmVs
ID0gInByb2ZpbGVzIjsKIAorY29uc3QgdW5zaWduZWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVm
YXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOwogCi1jb25zdCBTdHJpbmcmIEluc3BlY3RvckNvbnRy
b2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKQotewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzZXR0aW5nTmFtZSwgKCJpbnNwZWN0b3JTdGFydHNBdHRh
Y2hlZCIpKTsKLSAgICByZXR1cm4gc2V0dGluZ05hbWU7Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWlu
aW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwLjBmOwotc3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1B
dHRhY2hlZEhlaWdodFJhdGlvID0gMC43NWY7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11
bUNvbnNvbGVNZXNzYWdlcyA9IDEwMDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZXhwaXJlQ29u
c29sZU1lc3NhZ2VzU3RlcCA9IDEwMDsKIApAQCAtMTU5LDEzICsxMzcsMTAgQEAgSW5zcGVjdG9y
Q29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGll
bnQqIGNsaWVudCkKICAgICAsIG1fb3BlbmluZ0Zyb250ZW5kKGZhbHNlKQogICAgICwgbV9jc3NT
dG9yZShuZXcgSW5zcGVjdG9yQ1NTU3RvcmUodGhpcykpCiAgICAgLCBtX2V4cGlyZWRDb25zb2xl
TWVzc2FnZUNvdW50KDApCi0gICAgLCBtX3Nob3dBZnRlclZpc2libGUobGFzdEFjdGl2ZVBhbmVs
KQorICAgICwgbV9zaG93QWZ0ZXJWaXNpYmxlKExhc3RBY3RpdmVQYW5lbCkKICAgICAsIG1fc2Vz
c2lvblNldHRpbmdzKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpCiAgICAgLCBtX2dyb3VwTGV2
ZWwoMCkKLSAgICAsIG1fc2VhcmNoaW5nRm9yTm9kZShmYWxzZSkKLSAgICAsIG1fbW9uaXRvcmlu
Z1hIUihmYWxzZSkKICAgICAsIG1fcHJldmlvdXNNZXNzYWdlKDApCi0gICAgLCBtX3Jlc291cmNl
VHJhY2tpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9zZXR0aW5nc0xvYWRlZChmYWxzZSkKICAg
ICAsIG1faW5zcGVjdG9yQmFja2VuZChJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUodGhpcykpCiAg
ICAgLCBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG5ldyBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcih0aGlzKSkKQEAgLTE3Niw2ICsxNTEsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJ
bnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQog
ICAgICwgbV9wcm9maWxlckFnZW50KEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZSh0aGlz
KSkKICNlbmRpZgogeworICAgIG1fc3RhdGUgPSBuZXcgSW5zcGVjdG9yU3RhdGUoY2xpZW50KTsK
ICAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwogICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGll
bnQpOwogfQpAQCAtMjE5LDI3ICsxOTUsMzkgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpl
bmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLT5zZXR0aW5ncygpLT5k
ZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAorYm9vbCBJbnNwZWN0b3JDb250cm9s
bGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpCit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmlu
c3BlY3RvclN0YXJ0c0F0dGFjaGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoYm9vbCBhdHRhY2hlZCkKIHsKLSAgICBTZXR0aW5n
czo6aXRlcmF0b3IgaXQgPSBtX3NldHRpbmdzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXQgIT0gbV9z
ZXR0aW5ncy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgbV9zdGF0ZS0+
c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoYXR0YWNoZWQpOworfQogCi0gICAgU3RyaW5nIHZh
bHVlOwotICAgIG1fY2xpZW50LT5wb3B1bGF0ZVNldHRpbmcoa2V5LCAmdmFsdWUpOwotICAgIG1f
c2V0dGluZ3Muc2V0KGtleSwgdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKK3ZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpCit7
CisgICAgbV9zdGF0ZS0+c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoaGVpZ2h0KTsKK30KKwor
aW50IEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zdGF0ZS0+aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZWFyY2hpbmdG
b3JOb2RlSW5QYWdlKCkgY29uc3QKIHsKLSAgICBtX3NldHRpbmdzLnNldChrZXksIHZhbHVlKTsK
LSAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGtleSwgdmFsdWUpOworICAgIHJldHVybiBtX3N0
YXRlLT5zZWFyY2hpbmdGb3JOb2RlKCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6
cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlLT5y
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnNhdmVBcHBsaWNhdGlvblNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpCiB7Ci0gICAg
c2V0U2V0dGluZyhmcm9udGVuZFNldHRpbmdzU2V0dGluZ05hbWUsIHNldHRpbmdzKTsKKyAgICBt
X3N0YXRlLT5zZXRGcm9udGVuZFNldHRpbmdzKHNldHRpbmdzKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzYXZlU2Vzc2lvblNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3NK
U09OKQpAQCAtMjQ5LDUwICsyMzcsMjQgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZl
U2Vzc2lvblNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3NKU09OKQogCiB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmdldEluc3BlY3RvclN0YXRlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiBzdGF0ZSkKIHsKLSAgICAoKnN0YXRlKS0+c2V0Qm9vbGVhbihtb25pdG9yaW5nWEhSU3RhdGVO
YW1lLCBtX21vbml0b3JpbmdYSFIpOwotICAgICgqc3RhdGUpLT5zZXRCb29sZWFuKHJlc291cmNl
VHJhY2tpbmdFbmFibGVkU3RhdGVOYW1lLCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKTsKICNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KQot
ICAgICAgICAoKnN0YXRlKS0+c2V0TnVtYmVyKHBhdXNlT25FeGNlcHRpb25zU3RhdGVTdGF0ZU5h
bWUsIG1fZGVidWdnZXJBZ2VudC0+cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpKTsKKyAgICAgICAg
bV9zdGF0ZS0+c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShtX2RlYnVnZ2VyQWdlbnQtPnBhdXNl
T25FeGNlcHRpb25zU3RhdGUoKSk7CiAjZW5kaWYKKyAgICAqc3RhdGUgPSBtX3N0YXRlLT5nZXRT
dGF0ZU9iamVjdEZvckZyb250ZW5kKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHN0YXRlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBzdGF0ZS0+c2V0Qm9v
bGVhbihtb25pdG9yaW5nWEhSU3RhdGVOYW1lLCBtX21vbml0b3JpbmdYSFIpOwotICAgIHN0YXRl
LT5zZXRCb29sZWFuKHJlc291cmNlVHJhY2tpbmdFbmFibGVkU3RhdGVOYW1lLCBtX3Jlc291cmNl
VHJhY2tpbmdFbmFibGVkKTsKLSAgICBzdGF0ZS0+c2V0Qm9vbGVhbih0aW1lbGluZVByb2ZpbGVy
RW5hYmxlZFN0YXRlTmFtZSwgbV90aW1lbGluZUFnZW50KTsKLSAgICBzdGF0ZS0+c2V0Qm9vbGVh
bihzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZFN0YXRlTmFtZSwgbV9zZWFyY2hpbmdGb3JOb2RlKTsK
LSAgICBtX2NsaWVudC0+dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoc3RhdGUtPnRvSlNPTlN0
cmluZygpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9y
U3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdGVTdHJpbmcpCit2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29u
c3QgU3RyaW5nJiBpbnNwZWN0b3JTdGF0ZUNvb2tpZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGluc3BlY3RvclN0YXRlVmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGlu
c3BlY3RvclN0YXRlU3RyaW5nKTsKLSAgICBpZiAoIWluc3BlY3RvclN0YXRlVmFsdWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluc3BlY3RvclN0YXRl
ID0gaW5zcGVjdG9yU3RhdGVWYWx1ZS0+YXNPYmplY3QoKTsKLSAgICBpZiAoIWluc3BlY3RvclN0
YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnNwZWN0b3JTdGF0ZS0+Z2V0Qm9vbGVhbiht
b25pdG9yaW5nWEhSU3RhdGVOYW1lLCAmbV9tb25pdG9yaW5nWEhSKTsKLSAgICBpbnNwZWN0b3JT
dGF0ZS0+Z2V0Qm9vbGVhbihyZXNvdXJjZVRyYWNraW5nRW5hYmxlZFN0YXRlTmFtZSwgJm1fcmVz
b3VyY2VUcmFja2luZ0VuYWJsZWQpOwotICAgIGluc3BlY3RvclN0YXRlLT5nZXRCb29sZWFuKHNl
YXJjaGluZ0Zvck5vZGVFbmFibGVkU3RhdGVOYW1lLCAmbV9zZWFyY2hpbmdGb3JOb2RlKTsKLQot
ICAgIGJvb2wgdGltZWxpbmVQcm9maWxlckVuYWJsZWQgPSBmYWxzZTsKLSAgICBpbnNwZWN0b3JT
dGF0ZS0+Z2V0Qm9vbGVhbih0aW1lbGluZVByb2ZpbGVyRW5hYmxlZFN0YXRlTmFtZSwgJnRpbWVs
aW5lUHJvZmlsZXJFbmFibGVkKTsKLSAgICBpZiAodGltZWxpbmVQcm9maWxlckVuYWJsZWQpCisg
ICAgbV9zdGF0ZS0+cmVzdG9yZUZyb21JbnNwZWN0b3JDb29raWUoaW5zcGVjdG9yU3RhdGVDb29r
aWUpOworICAgIGlmIChtX3N0YXRlLT50aW1lbGluZVByb2ZpbGVyRW5hYmxlZCgpKQogICAgICAg
ICBzdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIHN0b3BUaW1lbGlu
ZVByb2ZpbGVyKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0U2V0dGluZ3Mo
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHNldHRpbmdzKQogewogICAgICpzZXR0aW5ncyA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgKCpzZXR0aW5ncyktPnNldFN0cmluZygiYXBw
bGljYXRpb24iLCBzZXR0aW5nKGZyb250ZW5kU2V0dGluZ3NTZXR0aW5nTmFtZSkpOworICAgICgq
c2V0dGluZ3MpLT5zZXRTdHJpbmcoImFwcGxpY2F0aW9uIiwgbV9zdGF0ZS0+ZnJvbnRlbmRTZXR0
aW5ncygpKTsKICAgICAoKnNldHRpbmdzKS0+c2V0U3RyaW5nKCJzZXNzaW9uIiwgbV9zZXNzaW9u
U2V0dGluZ3MtPnRvSlNPTlN0cmluZygpKTsKIH0KIApAQCAtNDI5LDEyICszOTEsMTIgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjptYXJrVGltZWxpbmUoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0
IFN0cmluZyYgcGFuZWxOYW1lKQogewotICAgIHNldFNldHRpbmcobGFzdEFjdGl2ZVBhbmVsLCBw
YW5lbE5hbWUpOworICAgIG1fc3RhdGUtPnNldExhc3RBY3RpdmVQYW5lbChwYW5lbE5hbWUpOwog
fQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNv
bnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQpCiB7Ci0gICAgaWYgKCFlbmFibGVk
KCkgfHwgIW1fc2VhcmNoaW5nRm9yTm9kZSkKKyAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9zdGF0
ZS0+c2VhcmNoaW5nRm9yTm9kZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBOb2RlKiBub2Rl
ID0gcmVzdWx0LmlubmVyTm9kZSgpOwpAQCAtNDQ5LDcgKzQxMSw3IEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6aGFuZGxlTW91c2VQcmVzcygpCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3NlYXJjaGluZ0Zvck5vZGUpOworICAgIEFTU0VS
VChtX3N0YXRlLT5zZWFyY2hpbmdGb3JOb2RlKCkpOwogICAgIGlmICghbV9oaWdobGlnaHRlZE5v
ZGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDg4LDEyICs0NTAsMTEgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBm
cmFtZSkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJv
b2wgZW5hYmxlZCkKIHsKLSAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCisg
ICAgaWYgKG1fc3RhdGUtPnNlYXJjaGluZ0Zvck5vZGUoKSA9PSBlbmFibGVkKQogICAgICAgICBy
ZXR1cm47Ci0gICAgbV9zZWFyY2hpbmdGb3JOb2RlID0gZW5hYmxlZDsKLSAgICBpZiAoIW1fc2Vh
cmNoaW5nRm9yTm9kZSkKKyAgICBtX3N0YXRlLT5zZXRTZWFyY2hpbmdGb3JOb2RlKGVuYWJsZWQp
OworICAgIGlmICghbV9zdGF0ZS0+c2VhcmNoaW5nRm9yTm9kZSgpKQogICAgICAgICBoaWRlSGln
aGxpZ2h0KCk7Ci0gICAgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9v
bCogbmV3U3RhdGUpCkBAIC01MDUsMTEgKzQ2Niw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKQogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRNb25pdG9yaW5nWEhSRW5hYmxlZChib29sIGVuYWJs
ZWQsIGJvb2wqIG5ld1N0YXRlKQogewogICAgICpuZXdTdGF0ZSA9IGVuYWJsZWQ7Ci0gICAgaWYg
KG1fbW9uaXRvcmluZ1hIUiA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9tb25p
dG9yaW5nWEhSID0gZW5hYmxlZDsKLSAgICBzZXRTZXR0aW5nKG1vbml0b3JpbmdYSFJTZXR0aW5n
TmFtZSwgZW5hYmxlZCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotICAgIHVwZGF0ZUluc3BlY3RvclN0
YXRlQ29va2llKCk7CisgICAgbV9zdGF0ZS0+c2V0TW9uaXRvcmluZ1hIUihlbmFibGVkKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQpAQCAtNTczLDcg
KzUzMCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKGNvbnN0IFN0cmlu
ZyYgcGFuZWwpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocGFuZWwgPT0gbGFz
dEFjdGl2ZVBhbmVsKQorICAgIGlmIChwYW5lbCA9PSBMYXN0QWN0aXZlUGFuZWwpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fZnJvbnRlbmQtPnNob3dQYW5lbChwYW5lbCk7CkBAIC02MDksNyAr
NTY2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoKQog
ICAgIHVuYmluZEFsbFJlc291cmNlcygpOwogICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CiAK
LSAgICBtX3Nob3dBZnRlclZpc2libGUgPSBsYXN0QWN0aXZlUGFuZWw7CisgICAgbV9zaG93QWZ0
ZXJWaXNpYmxlID0gTGFzdEFjdGl2ZVBhbmVsOwogCiAgICAgaGlkZUhpZ2hsaWdodCgpOwogCkBA
IC02NDcsOCArNjA0LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlw
dE9iamVjdHMoKQogICAgIGlmICghbV9mcm9udGVuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKG1fc2hvd0FmdGVyVmlzaWJsZSA9PSBsYXN0QWN0aXZlUGFuZWwpCi0gICAgICAgIG1fc2hv
d0FmdGVyVmlzaWJsZSA9IHNldHRpbmcobGFzdEFjdGl2ZVBhbmVsKTsKKyAgICBpZiAobV9zaG93
QWZ0ZXJWaXNpYmxlID09IExhc3RBY3RpdmVQYW5lbCkKKyAgICAgICAgbV9zaG93QWZ0ZXJWaXNp
YmxlID0gbV9zdGF0ZS0+bGFzdEFjdGl2ZVBhbmVsKCk7CiAKICAgICBzaG93UGFuZWwobV9zaG93
QWZ0ZXJWaXNpYmxlKTsKIApAQCAtNzA2LDggKzY2Myw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzdG9yZURlYnVnZ2VyKCkKICAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
aXNEZWJ1Z2dlckFsd2F5c0VuYWJsZWQoKSkKICAgICAgICAgZW5hYmxlRGVidWdnZXJGcm9tRnJv
bnRlbmQoZmFsc2UpOwogICAgIGVsc2UgewotICAgICAgICBTdHJpbmcgZGVidWdnZXJFbmFibGVk
ID0gc2V0dGluZyhkZWJ1Z2dlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSk7Ci0gICAgICAgIGlm
IChkZWJ1Z2dlckVuYWJsZWQgPT0gInRydWUiIHx8IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24p
CisgICAgICAgIGlmIChtX3N0YXRlLT5kZWJ1Z2dlckFsd2F5c0VuYWJsZWQoKSB8fCBtX2F0dGFj
aERlYnVnZ2VyV2hlblNob3duKQogICAgICAgICAgICAgZW5hYmxlRGVidWdnZXIoKTsKICAgICB9
CiAjZW5kaWYKQEAgLTcxOCwxMSArNjc0LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpy
ZXN0b3JlUHJvZmlsZXIoKQogICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKICNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKICAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldEZyb250ZW5kKG1fZnJv
bnRlbmQuZ2V0KCkpOwotICAgIGlmICghU2NyaXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNF
bmFibGVkKCkpIHsKLSAgICAgICAgU3RyaW5nIHByb2ZpbGVyRW5hYmxlZFNldHRpbmcgPSBzZXR0
aW5nKHByb2ZpbGVyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lKTsKLSAgICAgICAgaWYgKHByb2Zp
bGVyRW5hYmxlZFNldHRpbmcgPT0gInRydWUiKQotICAgICAgICAgICAgZW5hYmxlUHJvZmlsZXIo
KTsKLSAgICB9CisgICAgaWYgKCFTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJs
ZWQoKSAmJiBtX3N0YXRlLT5wcm9maWxlckFsd2F5c0VuYWJsZWQoKSkKKyAgICAgICAgZW5hYmxl
UHJvZmlsZXIoKTsKICNlbmRpZgogfQogCkBAIC04OTUsNyArODQ4LDcgQEAgSW5zcGVjdG9yUmVz
b3VyY2UqIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFRyYWNrZWRSZXNvdXJjZSh1bnNpZ25lZCBs
b25nIGlkZW50aWYKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBpZiAobV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkKKyAgICBpZiAobV9zdGF0ZS0+cmVzb3Vy
Y2VUcmFja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIG1fcmVzb3VyY2VzLmdldChpZGVu
dGlmaWVyKS5nZXQoKTsKIAogICAgIGJvb2wgaXNNYWluUmVzb3VyY2UgPSBtX21haW5SZXNvdXJj
ZSAmJiBtX21haW5SZXNvdXJjZS0+aWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7CkBAIC05MjYs
NyArODc5LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VGcm9t
TWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwKICAgICBBU1NFUlQobV9pbnNwZWN0
ZWRQYWdlKTsKICAgICBib29sIGlzTWFpblJlc291cmNlID0gaXNNYWluUmVzb3VyY2VMb2FkZXIo
bG9hZGVyLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgY2FjaGVkUmVzb3VyY2UtPnVybCgpKSk7CiAg
ICAgZW5zdXJlU2V0dGluZ3NMb2FkZWQoKTsKLSAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFt
X3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKQorICAgIGlmICghaXNNYWluUmVzb3VyY2UgJiYgIW1f
c3RhdGUtPnJlc291cmNlVHJhY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JSZXNvdXJjZTo6
Y3JlYXRlQ2FjaGVkKG1faW5zcGVjdGVkUGFnZS0+cHJvZ3Jlc3MoKS0+Y3JlYXRlVW5pcXVlSWRl
bnRpZmllcigpLCBsb2FkZXIsIGNhY2hlZFJlc291cmNlKTsKQEAgLTk1MCw3ICs5MDMsNyBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsCiAKICAgICBib29sIGlzTWFpblJlc291cmNlID0gaXNNYWlu
UmVzb3VyY2VMb2FkZXIobG9hZGVyLCByZXF1ZXN0LnVybCgpKTsKICAgICBlbnN1cmVTZXR0aW5n
c0xvYWRlZCgpOwotICAgIGlmICghaXNNYWluUmVzb3VyY2UgJiYgIW1fcmVzb3VyY2VUcmFja2lu
Z0VuYWJsZWQpCisgICAgaWYgKCFpc01haW5SZXNvdXJjZSAmJiAhbV9zdGF0ZS0+cmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEluc3BlY3Rv
clJlc291cmNlPiByZXNvdXJjZSA9IEluc3BlY3RvclJlc291cmNlOjpjcmVhdGUoaWRlbnRpZmll
ciwgbG9hZGVyLCByZXF1ZXN0LnVybCgpKTsKQEAgLTExMzcsMTAgKzEwOTAsMTAgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5z
aWduZWQgbG9uZyBpZGVudGkKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1fbW9uaXRvcmluZ1hIUikKKyAgICBpZiAobV9zdGF0ZS0+bW9uaXRvcmluZ1hI
UigpKQogICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVz
c2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgIlhIUiBmaW5pc2hlZCBsb2FkaW5nOiBcIiIgKyB1
cmwgKyAiXCIuIiwgc2VuZExpbmVOdW1iZXIsIHNlbmRVUkwpOwogCi0gICAgaWYgKCFtX3Jlc291
cmNlVHJhY2tpbmdFbmFibGVkKQorICAgIGlmICghbV9zdGF0ZS0+cmVzb3VyY2VUcmFja2luZ0Vu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW5zcGVjdG9yUmVzb3VyY2UqIHJlc291
cmNlID0gbV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOwpAQCAtMTE1NSw3ICsxMTA4
LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0
cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzY3JpcHRJbXBvcnRlZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlU3RyaW5nKQogewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3Jlc291cmNlVHJhY2tp
bmdFbmFibGVkKQorICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3N0YXRlLT5yZXNvdXJjZVRyYWNr
aW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnNwZWN0b3JSZXNvdXJjZSog
cmVzb3VyY2UgPSBtX3Jlc291cmNlcy5nZXQoaWRlbnRpZmllcikuZ2V0KCk7CkBAIC0xMTc0LDgg
KzExMjcsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFJlc291cmNlVHJhY2tpbmdF
bmFibGVkKGJvb2wgZW5hYmxlKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9pbnNw
ZWN0ZWRQYWdlKTsKLSAgICBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkID0gZW5hYmxlOwotICAg
IHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CisgICAgbV9zdGF0ZS0+c2V0UmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQoZW5hYmxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
ZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJsZSwgYm9vbCBhbHdheXMsIGJvb2wq
IG5ld1N0YXRlKQpAQCAtMTE4MywxOCArMTEzNSwxNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlLCBib29sIGFsd2F5cywg
YgogICAgICpuZXdTdGF0ZSA9IGVuYWJsZTsKIAogICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNl
dFNldHRpbmcocmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSwgZW5hYmxl
ID8gInRydWUiIDogImZhbHNlIik7CisgICAgICAgIG1fc3RhdGUtPnNldFJlc291cmNlVHJhY2tp
bmdBbHdheXNFbmFibGVkKGVuYWJsZSk7CiAKLSAgICBpZiAobV9yZXNvdXJjZVRyYWNraW5nRW5h
YmxlZCA9PSBlbmFibGUpCisgICAgaWYgKG1fc3RhdGUtPnJlc291cmNlVHJhY2tpbmdFbmFibGVk
KCkgPT0gZW5hYmxlKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQ
YWdlKTsKLSAgICBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkID0gZW5hYmxlOworICAgIG1fc3Rh
dGUtPnNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKGVuYWJsZSk7CiAKICAgICBpZiAoZW5hYmxl
KQogICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5uYXZpZ2F0aW9uU2NoZWR1
bGVyKCktPnNjaGVkdWxlUmVmcmVzaCh0cnVlKTsKLQotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRl
Q29va2llKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5zdXJlU2V0dGluZ3NM
b2FkZWQoKQpAQCAtMTIwMywxNSArMTE1MywxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmVuc3VyZVNldHRpbmdzTG9hZGVkKCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2V0dGluZ3NM
b2FkZWQgPSB0cnVlOwogCi0gICAgU3RyaW5nIHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVk
ID0gc2V0dGluZyhyZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lKTsKLSAg
ICBpZiAocmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWQgPT0gInRydWUiKQotICAgICAgICBt
X3Jlc291cmNlVHJhY2tpbmdFbmFibGVkID0gdHJ1ZTsKLQotICAgIFN0cmluZyBtb25pdG9yaW5n
WEhSQWx3YXlzRW5hYmxlZCA9IHNldHRpbmcobW9uaXRvcmluZ1hIUlNldHRpbmdOYW1lKTsKLSAg
ICBpZiAobW9uaXRvcmluZ1hIUkFsd2F5c0VuYWJsZWQgPT0gInRydWUiKQotICAgICAgICBtX21v
bml0b3JpbmdYSFIgPSB0cnVlOworICAgIG1fc3RhdGUtPnJlc3RvcmVGcm9tU2V0dGluZ3MoKTsK
IAotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CisgICAgaWYgKG1fc3RhdGUtPnJl
c291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkKCkpCisgICAgICAgIG1fc3RhdGUtPnNldFJlc291
cmNlVHJhY2tpbmdFbmFibGVkKHRydWUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnN0YXJ0VGltZWxpbmVQcm9maWxlcigpCkBAIC0xMjI2LDcgKzExNzEsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxlcigpCiAgICAgaWYgKG1fZnJvbnRl
bmQpCiAgICAgICAgIG1fZnJvbnRlbmQtPnRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCk7CiAK
LSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldFRpbWVs
aW5lUHJvZmlsZXJFbmFibGVkKHRydWUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkKQEAgLTEyNDEsNyArMTE4Niw3IEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c3RvcFRpbWVsaW5lUHJvZmlsZXIoKQogICAgIGlmIChtX2Zyb250ZW5k
KQogICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCgpOwogCi0g
ICAgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKTsKKyAgICBtX3N0YXRlLT5zZXRUaW1lbGlu
ZVByb2ZpbGVyRW5hYmxlZChmYWxzZSk7CiB9CiAKICNpZiBFTkFCTEUoV09SS0VSUykKQEAgLTE2
MTMsMTQgKzE1NTgsMTQgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlckVuYWJs
ZWQoKSBjb25zdAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVQcm9maWxlcihib29s
IGFsd2F5cywgYm9vbCBza2lwUmVjb21waWxlKQogewogICAgIGlmIChhbHdheXMpCi0gICAgICAg
IHNldFNldHRpbmcocHJvZmlsZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsICJ0cnVlIik7Cisg
ICAgICAgIG1fc3RhdGUtPnNldFByb2ZpbGVyQWx3YXlzRW5hYmxlZCh0cnVlKTsKICAgICBtX3By
b2ZpbGVyQWdlbnQtPmVuYWJsZShza2lwUmVjb21waWxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpCiB7CiAgICAgaWYgKGFsd2F5
cykKLSAgICAgICAgc2V0U2V0dGluZyhwcm9maWxlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSwg
ImZhbHNlIik7CisgICAgICAgIG1fc3RhdGUtPnNldFByb2ZpbGVyQWx3YXlzRW5hYmxlZChmYWxz
ZSk7CiAgICAgbV9wcm9maWxlckFnZW50LT5kaXNhYmxlKCk7CiB9CiAjZW5kaWYKQEAgLTE2MzAs
NyArMTU3NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdnZXJGcm9t
RnJvbnRlbmQoYm9vbCBhbHdheXMpCiB7CiAgICAgQVNTRVJUKCFkZWJ1Z2dlckVuYWJsZWQoKSk7
CiAgICAgaWYgKGFsd2F5cykKLSAgICAgICAgc2V0U2V0dGluZyhkZWJ1Z2dlckFsd2F5c0VuYWJs
ZWRTZXR0aW5nTmFtZSwgInRydWUiKTsKKyAgICAgICAgbV9zdGF0ZS0+c2V0RGVidWdnZXJBbHdh
eXNFbmFibGVkKHRydWUpOwogCiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CiAKQEAgLTE2
NjEsNyArMTYwNiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZURlYnVnZ2Vy
KGJvb2wgYWx3YXlzKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYWx3YXlzKQotICAgICAg
ICBzZXRTZXR0aW5nKGRlYnVnZ2VyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lLCAiZmFsc2UiKTsK
KyAgICAgICAgbV9zdGF0ZS0+c2V0RGVidWdnZXJBbHdheXNFbmFibGVkKGZhbHNlKTsKIAogICAg
IEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogCkBAIC0xNzY1LDEyICsxNzEwLDE0IEBAIFN0cmlu
ZyBJbnNwZWN0b3JDb250cm9sbGVyOjpicmVha3BvaW50c1NldHRpbmdLZXkoKQogCiBQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JDb250cm9sbGVyOjpsb2FkQnJlYWtwb2ludHMo
KQogewotICAgIHJldHVybiBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHNldHRpbmcoYnJlYWtw
b2ludHNTZXR0aW5nS2V5KCkpKTsKKyAgICBTdHJpbmcganNvblN0cmluZzsKKyAgICBtX2NsaWVu
dC0+cG9wdWxhdGVTZXR0aW5nKGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpLCAmanNvblN0cmluZyk7
CisgICAgcmV0dXJuIEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvblN0cmluZyk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZUJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBicmVha3BvaW50cykKIHsKLSAgICBzZXRTZXR0aW5nKGJyZWFrcG9pbnRz
U2V0dGluZ0tleSgpLCBicmVha3BvaW50cy0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fY2xpZW50
LT5zdG9yZVNldHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5KCksIGJyZWFrcG9pbnRzLT50b0pT
T05TdHJpbmcoKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oCmluZGV4IDBjMjg4NWUuLmE4NzUxMjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmgKQEAgLTY5LDYgKzY5LDcgQEAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnNwZWN0b3JQcm9maWxlckFn
ZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CitjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKIGNs
YXNzIEluc3BlY3RvclN0b3JhZ2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7
CiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKQEAgLTEwMyw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAg
dHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+ID4g
RGF0YWJhc2VSZXNvdXJjZXNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPElu
c3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBET01TdG9yYWdlUmVzb3VyY2VzTWFwOwogCisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IExhc3RBY3RpdmVQYW5lbDsKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgQ29uc29sZVBhbmVsOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBFbGVtZW50c1BhbmVsOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBQcm9maWxl
c1BhbmVsOwpAQCAtMTIzLDEzICsxMjUsMTEgQEAgcHVibGljOgogICAgIFBhZ2UqIGluc3BlY3Rl
ZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KICAgICB2b2lkIHJlbG9h
ZFBhZ2UoKTsKIAotICAgIFN0cmluZyBzZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsK
LSAgICB2b2lkIHNldFNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUpOwogICAgIHZvaWQgc2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0
aW5ncyk7CiAgICAgdm9pZCBzYXZlU2Vzc2lvblNldHRpbmdzKGNvbnN0IFN0cmluZyYpOwogICAg
IHZvaWQgZ2V0U2V0dGluZ3MoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qKTsKIAotICAgIHZvaWQg
cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0
YXRlKTsKKyAgICB2b2lkIHJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3QgU3Ry
aW5nJiBpbnNwZWN0b3JDb29raWUpOwogCiAgICAgdm9pZCBpbnNwZWN0KE5vZGUqKTsKICAgICB2
b2lkIGhpZ2hsaWdodChOb2RlKik7CkBAIC0xNTMsNyArMTUzLDcgQEAgcHVibGljOgogICAgIHZv
aWQgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKICAgICBjb25zdCBWZWN0b3I8T3duUHRyPENvbnNv
bGVNZXNzYWdlPiA+JiBjb25zb2xlTWVzc2FnZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnNvbGVN
ZXNzYWdlczsgfQogCi0gICAgYm9vbCBzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWFyY2hpbmdGb3JOb2RlOyB9CisgICAgYm9vbCBzZWFyY2hpbmdGb3JOb2RlSW5Q
YWdlKCkgY29uc3Q7CiAgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRU
ZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAgICAgdm9pZCBoYW5kbGVNb3Vz
ZVByZXNzKCk7CiAKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFJl
c291cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCk7CiAgICAgdm9pZCBzZXRSZXNvdXJj
ZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGJvb2wgYWx3YXlzLCBib29sKiBuZXdTdGF0
ZSk7Ci0gICAgYm9vbCByZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQ7IH0KKyAgICBib29sIHJlc291cmNlVHJhY2tpbmdFbmFi
bGVkKCkgY29uc3Q7CiAKICAgICB2b2lkIGVuc3VyZVNldHRpbmdzTG9hZGVkKCk7CiAKQEAgLTI3
MSwxMCArMjcxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1
YXRlT25Mb2FkKCk7CiAgICAgdm9pZCBzZXRJbnNwZWN0b3JFeHRlbnNpb25BUEkoY29uc3QgU3Ry
aW5nJiBzb3VyY2UpOwogCi0gICAgc3RhdGljIGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhcnRz
QXR0YWNoZWRTZXR0aW5nTmFtZSgpOworICAgIGJvb2wgaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQo
KTsKKyAgICB2b2lkIHNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGJvb2wpOworICAgIHZvaWQg
c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpOworICAgIGludCBpbnNwZWN0
b3JBdHRhY2hlZEhlaWdodCgpIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRl
ZmF1bHRBdHRhY2hlZEhlaWdodDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZUluc3BlY3Rv
clN0YXRlQ29va2llKCk7CiAgICAgdm9pZCBnZXRJbnNwZWN0b3JTdGF0ZShSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0Piogc3RhdGUpOwogCiAgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvckJhY2tlbmQ7
CkBAIC0zNDYsNiArMzUwLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFn
ZUFnZW50PiBtX3N0b3JhZ2VBZ2VudDsKICAgICBPd25QdHI8SW5zcGVjdG9yQ1NTU3RvcmU+IG1f
Y3NzU3RvcmU7CiAgICAgT3duUHRyPEluc3BlY3RvclRpbWVsaW5lQWdlbnQ+IG1fdGltZWxpbmVB
Z2VudDsKKyAgICBPd25QdHI8SW5zcGVjdG9yU3RhdGU+IG1fc3RhdGU7CiAKICNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogICAgIE93blB0cjxJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQ+IG1fYXBwbGljYXRpb25DYWNoZUFnZW50OwpAQCAtMzcyLDEwICszNzcsNyBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbV9zZXNzaW9uU2V0dGluZ3M7
CiAjZW5kaWYKICAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7Ci0gICAgYm9vbCBtX3NlYXJjaGlu
Z0Zvck5vZGU7Ci0gICAgYm9vbCBtX21vbml0b3JpbmdYSFI7CiAgICAgQ29uc29sZU1lc3NhZ2Uq
IG1fcHJldmlvdXNNZXNzYWdlOwotICAgIGJvb2wgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZDsK
ICAgICBib29sIG1fc2V0dGluZ3NMb2FkZWQ7CiAgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmQ+
IG1faW5zcGVjdG9yQmFja2VuZDsKICAgICBPd25QdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCmluZGV4IDc3NjE2ZGEuLjQ4MTJi
MmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwCkBAIC00Nyw3ICs0Nyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSA9ICJpbnNw
ZWN0b3JBdHRhY2hlZEhlaWdodCI7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEF0dGFj
aGVkSGVpZ2h0ID0gMzAwOwogc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdo
dCA9IDI1MC4wZjsKIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRp
byA9IDAuNzVmOwpAQCAtMTA4LDcgKzEwNyw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbDo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogewog
ICAgIHVuc2lnbmVkIHRvdGFsSGVpZ2h0ID0gbV9mcm9udGVuZFBhZ2UtPm1haW5GcmFtZSgpLT52
aWV3KCktPnZpc2libGVIZWlnaHQoKSArIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVk
UGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CiAgICAgdW5zaWdu
ZWQgYXR0YWNoZWRIZWlnaHQgPSBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdo
dCwgdG90YWxIZWlnaHQpOwotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0U2V0dGluZyhp
bnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUsIFN0cmluZzo6bnVtYmVyKGF0dGFjaGVkSGVpZ2h0
KSk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRJbnNwZWN0b3JBdHRhY2hlZEhlaWdo
dChhdHRhY2hlZEhlaWdodCk7CiAgICAgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoYXR0YWNoZWRI
ZWlnaHQpOwogfQogCkBAIC0xMzQsMTAgKzEzMyw5IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCkKIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KCkKIHsK
ICAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsK
LSAgICBTdHJpbmcgYXR0YWNoZWRIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldHRp
bmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lKTsKKyAgICBpbnQgYXR0YWNoZWRIZWlnaHQg
PSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7CiAgICAg
Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9J
bnQoJnN1Y2Nlc3MpOwotICAgIHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVpZ2h0KSA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKKyAg
ICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGF0dGFjaGVkSGVpZ2h0KSA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKICAgICAKICAgICAv
LyBUaGlzIGNhbGwgbWlnaHQgbm90IGdvIHRocm91Z2ggKGlmIHRoZSB3aW5kb3cgc3RhcnRzIG91
dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUgd2luZG93IGlzIGluaXRpYWxseSBjcmVhdGVkIGF0dGFj
aGVkLAogICAgIC8vIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRvdyBpcyBuZXZlciBj
YWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHNldCB0aGUgYXR0YWNoZWRXaW5kb3dI
ZWlnaHQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYzk4NTk5OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKKworI2luY2x1ZGUgIkluc3Bl
Y3RvckNsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2RlZmluZSBJTklUX0lO
U1BFQ1RPUl9QUk9QRVJUWSh0eXBlLCBuYW1lLCBzZXR0ZXJOYW1lLCBkZWZhdWx0VmFsdWUsIHN0
YXRlTmFtZSwgcHJlZmVyZW5jZU5hbWUpXAorICAgIG1fIyNuYW1lLm1fdmFsdWUgPSBkZWZhdWx0
VmFsdWU7XAorICAgIG1fIyNuYW1lLm1fbmFtZSA9ICJuYW1lIjtcCisgICAgbV8jI25hbWUubV9z
dGF0ZU5hbWUgPSBzdGF0ZU5hbWU7XAorICAgIG1fIyNuYW1lLm1fcHJlZmVyZW5jZU5hbWUgPSBw
cmVmZXJlbmNlTmFtZTtcCisgICAgbV9pbnNwZWN0b3JQcm9wZXJ0aWVzLmFwcGVuZCgmbV8jI25h
bWUpOworCitJbnNwZWN0b3JTdGF0ZTo6SW5zcGVjdG9yU3RhdGUoSW5zcGVjdG9yQ2xpZW50KiBj
bGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7CisgICAgSU5TUEVDVE9SX1NUQVRFX1BS
T1BFUlRJRVMoSU5JVF9JTlNQRUNUT1JfUFJPUEVSVFkpOworfQorCit2b2lkIEluc3BlY3RvclN0
YXRlOjpyZXN0b3JlRnJvbUluc3BlY3RvckNvb2tpZShjb25zdCBTdHJpbmcmIGpzb24pCit7Cisg
ICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc29uVmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFy
c2VKU09OKGpzb24pOworICAgIGlmICghanNvblZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uT2JqZWN0ID0ganNvblZhbHVlLT5hc09iamVj
dCgpOworICAgIGlmICghanNvbk9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChJ
bnNwZWN0b3JQcm9wZXJ0eVZlY3Rvcjo6aXRlcmF0b3IgaSA9IG1faW5zcGVjdG9yUHJvcGVydGll
cy5iZWdpbigpOyBpICE9IG1faW5zcGVjdG9yUHJvcGVydGllcy5lbmQoKTsgKytpKQorICAgICAg
ICAoKmkpLT5mcm9tSW5zcGVjdG9yVmFsdWUoanNvbk9iamVjdC0+Z2V0KCgqaSktPm1fbmFtZSku
Z2V0KCkpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3RhdGU6
OmdldFN0YXRlT2JqZWN0Rm9yRnJvbnRlbmQoKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHN0YXRlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBmb3IgKElu
c3BlY3RvclByb3BlcnR5VmVjdG9yOjppdGVyYXRvciBpID0gbV9pbnNwZWN0b3JQcm9wZXJ0aWVz
LmJlZ2luKCk7IGkgIT0gbV9pbnNwZWN0b3JQcm9wZXJ0aWVzLmVuZCgpOyArK2kpCisgICAgICAg
IGlmICgoKmkpLT5tX3N0YXRlTmFtZS5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0YXRlT2JqZWN0
LT5zZXRWYWx1ZSgoKmkpLT5tX3N0YXRlTmFtZSwgKCppKS0+dG9JbnNwZWN0b3JWYWx1ZSgpKTsK
KyAgICByZXR1cm4gc3RhdGVPYmplY3QucmVsZWFzZSgpOworfQorCit2b2lkIEluc3BlY3RvclN0
YXRlOjpyZXN0b3JlRnJvbVNldHRpbmdzKCkKK3sKKyAgICBmb3IgKEluc3BlY3RvclByb3BlcnR5
VmVjdG9yOjppdGVyYXRvciBpID0gbV9pbnNwZWN0b3JQcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0g
bV9pbnNwZWN0b3JQcm9wZXJ0aWVzLmVuZCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCgqaSktPm1f
cHJlZmVyZW5jZU5hbWUubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAg
ICAgICAgICAgIG1fY2xpZW50LT5wb3B1bGF0ZVNldHRpbmcoKCppKS0+bV9wcmVmZXJlbmNlTmFt
ZSwgJnZhbHVlKTsKKyAgICAgICAgICAgICgqaSktPmZyb21TdHJpbmcodmFsdWUpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjpwcm9wZXJ0eVVwZGF0ZWQoSW5z
cGVjdG9yUHJvcGVydHlCYXNlKiBwcm9wZXJ0eSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBjb29raWVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGZvciAo
SW5zcGVjdG9yUHJvcGVydHlWZWN0b3I6Oml0ZXJhdG9yIGkgPSBtX2luc3BlY3RvclByb3BlcnRp
ZXMuYmVnaW4oKTsgaSAhPSBtX2luc3BlY3RvclByb3BlcnRpZXMuZW5kKCk7ICsraSkKKyAgICAg
ICAgaWYgKCgqaSktPm1fc3RhdGVOYW1lLmxlbmd0aCgpKQorICAgICAgICAgICAgY29va2llT2Jq
ZWN0LT5zZXRWYWx1ZSgoKmkpLT5tX3N0YXRlTmFtZSwgKCppKS0+dG9JbnNwZWN0b3JWYWx1ZSgp
KTsKKyAgICBtX2NsaWVudC0+dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoY29va2llT2JqZWN0
LT50b0pTT05TdHJpbmcoKSk7CisKKyAgICBpZiAocHJvcGVydHktPm1fcHJlZmVyZW5jZU5hbWUu
bGVuZ3RoKCkpCisgICAgICAgIG1fY2xpZW50LT5zdG9yZVNldHRpbmcocHJvcGVydHktPm1fcHJl
ZmVyZW5jZU5hbWUsIHByb3BlcnR5LT50b1N0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMTRlOTgKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oCkBAIC0w
LDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yU3RhdGVfaAorI2RlZmluZSBJbnNwZWN0
b3JTdGF0ZV9oCisKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKworI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNkZWZpbmUgSU5TUEVDVE9S
X1NUQVRFX1BST1BFUlRJRVMoQVBQTFkpXAorQVBQTFkoYm9vbCwgbW9uaXRvcmluZ1hIUiwgc2V0
TW9uaXRvcmluZ1hIUiwgZmFsc2UsICJtb25pdG9yaW5nWEhSIiwgInhock1vbml0b3IiKTtcCitB
UFBMWShib29sLCByZXNvdXJjZVRyYWNraW5nRW5hYmxlZCwgc2V0UmVzb3VyY2VUcmFja2luZ0Vu
YWJsZWQsIGZhbHNlLCAicmVzb3VyY2VUcmFja2luZ0VuYWJsZWQiLCAiIik7XAorQVBQTFkoYm9v
bCwgcmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWQsIHNldFJlc291cmNlVHJhY2tpbmdBbHdh
eXNFbmFibGVkLCBmYWxzZSwgIiIsICJyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCIpO1wKK0FQUExZ
KGJvb2wsIHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkLCBzZXRUaW1lbGluZVByb2ZpbGVyRW5hYmxl
ZCwgZmFsc2UsICJ0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCIsICIiKTtcCitBUFBMWShib29sLCBz
ZWFyY2hpbmdGb3JOb2RlLCBzZXRTZWFyY2hpbmdGb3JOb2RlLCBmYWxzZSwgInNlYXJjaGluZ0Zv
ck5vZGVFbmFibGVkIiwgIiIpO1wKK0FQUExZKGJvb2wsIHByb2ZpbGVyQWx3YXlzRW5hYmxlZCwg
c2V0UHJvZmlsZXJBbHdheXNFbmFibGVkLCBmYWxzZSwgIiIsICJwcm9maWxlckVuYWJsZWQiKTtc
CitBUFBMWShTdHJpbmcsIGZyb250ZW5kU2V0dGluZ3MsIHNldEZyb250ZW5kU2V0dGluZ3MsICIi
LCAiIiwgImZyb250ZW5kU2V0dGluZ3MiKTtcCitBUFBMWShib29sLCBkZWJ1Z2dlckFsd2F5c0Vu
YWJsZWQsIHNldERlYnVnZ2VyQWx3YXlzRW5hYmxlZCwgZmFsc2UsICIiLCAiZGVidWdnZXJFbmFi
bGVkIik7XAorQVBQTFkoU3RyaW5nLCBsYXN0QWN0aXZlUGFuZWwsIHNldExhc3RBY3RpdmVQYW5l
bCwgSW5zcGVjdG9yQ29udHJvbGxlcjo6TGFzdEFjdGl2ZVBhbmVsLCAiIiwgImxhc3RBY3RpdmVQ
YW5lbCIpO1wKK0FQUExZKGJvb2wsIGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkLCBzZXRJbnNwZWN0
b3JTdGFydHNBdHRhY2hlZCwgdHJ1ZSwgIiIsICJJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCIpO1wK
K0FQUExZKGxvbmcsIGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0LCBzZXRJbnNwZWN0b3JBdHRhY2hl
ZEhlaWdodCwgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVmYXVsdEF0dGFjaGVkSGVpZ2h0LCAiIiwg
Imluc3BlY3RvckF0dGFjaGVkSGVpZ2h0Iik7XAorQVBQTFkobG9uZywgcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSwgc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSwgMCwgInBhdXNlT25FeGNlcHRpb25z
U3RhdGUiLCAiIik7CisKK2NsYXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNzIEluc3BlY3RvclN0
YXRlOworCitjbGFzcyBJbnNwZWN0b3JQcm9wZXJ0eUJhc2UgeworcHVibGljOgorICAgIGZyaWVu
ZCBjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKKworICAgIEluc3BlY3RvclByb3BlcnR5QmFzZSgpIHt9
CisgICAgdmlydHVhbCB+SW5zcGVjdG9yUHJvcGVydHlCYXNlKCkge30KKworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdG9JbnNwZWN0b3JWYWx1ZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgZnJvbUluc3BlY3RvclZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1
ZSkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nVmFsdWUpID0gMDsKKwor
cHJpdmF0ZToKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmluZyBtX3N0YXRlTmFtZTsKKyAg
ICBTdHJpbmcgbV9wcmVmZXJlbmNlTmFtZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBwcm9w
ZXJ0eVR5cGU+CitzdHJ1Y3QgcHJvcGVydHlfdHlwZV90cmFpdHMgeworfTsKKwordGVtcGxhdGUg
PHR5cGVuYW1lIFZhbHVlVHlwZT4KK2NsYXNzIEluc3BlY3RvclByb3BlcnR5IDogcHVibGljIElu
c3BlY3RvclByb3BlcnR5QmFzZSB7Citwcml2YXRlOgorICAgIHR5cGVkZWYgcHJvcGVydHlfdHlw
ZV90cmFpdHM8VmFsdWVUeXBlPiB0cmFpdHNUeXBlOworcHVibGljOgorICAgIGZyaWVuZCBjbGFz
cyBJbnNwZWN0b3JTdGF0ZTsKKworICAgIEluc3BlY3RvclByb3BlcnR5KCkge30KKworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdG9JbnNwZWN0b3JWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIHRyYWl0c1R5cGU6OnRvSW5zcGVjdG9yVmFsdWUobV92YWx1ZSk7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgZnJvbUluc3BlY3RvclZhbHVlKEluc3BlY3RvclZhbHVlKiBpbnNwZWN0b3JW
YWx1ZSkgeyByZXR1cm4gdHJhaXRzVHlwZTo6ZnJvbUluc3BlY3RvclZhbHVlKGluc3BlY3RvclZh
bHVlLCAmbV92YWx1ZSk7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gdHJhaXRzVHlwZTo6dG9TdHJpbmcobV92YWx1ZSk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVlKSB7IHRyYWl0c1R5cGU6OmZy
b21TdHJpbmcoc3RyaW5nVmFsdWUsICZtX3ZhbHVlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEFyZ3VtZW50VHlwZT4KKyAgICB2b2lkIHNldChBcmd1bWVudFR5cGUgYXJndW1lbnQpIHsg
SW1wbGljaXRfY29udmVyc2lvbl9ndWFyZF9fUGxlYXNlX3VzZV9leGFjdF90eXBlX2Zvcl9zZXRf
b3BlcmF0aW9uKGFyZ3VtZW50KTsgfQorcHJpdmF0ZToKKyAgICBTdHJpbmcgdG9TdHJpbmdJbXBs
KCkgY29uc3Q7CisgICAgdm9pZCBmcm9tU3RyaW5nSW1wbChjb25zdCBTdHJpbmcmIHN0cmluZ1Zh
bHVlKTsKKyAgICBWYWx1ZVR5cGUgbV92YWx1ZTsKK307CisKK3RlbXBsYXRlIDw+IHRlbXBsYXRl
IDw+IGlubGluZSB2b2lkIEluc3BlY3RvclByb3BlcnR5PGJvb2w+OjpzZXQ8Ym9vbD4oYm9vbCBh
cmd1bWVudCkgeyBtX3ZhbHVlID0gYXJndW1lbnQ7IH0KK3RlbXBsYXRlIDw+CitzdHJ1Y3QgcHJv
cGVydHlfdHlwZV90cmFpdHM8Ym9vbD4geworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiB0b0luc3BlY3RvclZhbHVlKGJvb2wgdmFsdWUpIHsgcmV0dXJuIEluc3BlY3RvckJh
c2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgYm9vbCBmcm9tSW5zcGVjdG9y
VmFsdWUoSW5zcGVjdG9yVmFsdWUqIGluc3BlY3RvclZhbHVlLCBib29sKiB2YWx1ZSkgeyByZXR1
cm4gaW5zcGVjdG9yVmFsdWUtPmFzQm9vbGVhbih2YWx1ZSk7IH0KKyAgICBzdGF0aWMgU3RyaW5n
IHRvU3RyaW5nKGJvb2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gInRydWUiIDogImZhbHNlIjsg
fQorICAgIHN0YXRpYyB2b2lkIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwg
Ym9vbCogdmFsdWUpIHsgKnZhbHVlID0gc3RyaW5nVmFsdWUgPT0gInRydWUiOyB9Cit9OworCit0
ZW1wbGF0ZSA8PiB0ZW1wbGF0ZSA8PiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JQcm9wZXJ0eTxTdHJp
bmc+OjpzZXQ8U3RyaW5nPihTdHJpbmcgYXJndW1lbnQpIHsgbV92YWx1ZSA9IGFyZ3VtZW50OyB9
Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IHByb3BlcnR5X3R5cGVfdHJhaXRzPFN0cmluZz4geworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB0b0luc3BlY3RvclZhbHVlKGNvbnN0
IFN0cmluZyYgdmFsdWUpIHsgcmV0dXJuIEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKTsg
fQorICAgIHN0YXRpYyBib29sIGZyb21JbnNwZWN0b3JWYWx1ZShJbnNwZWN0b3JWYWx1ZSogaW5z
cGVjdG9yVmFsdWUsIFN0cmluZyogdmFsdWUpIHsgcmV0dXJuIGluc3BlY3RvclZhbHVlLT5hc1N0
cmluZyh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisgICAgc3RhdGljIHZvaWQgZnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZ1ZhbHVlLCBTdHJpbmcqIHZhbHVlKSB7ICp2YWx1ZSA9IHN0cmluZ1Zh
bHVlOyB9Cit9OworCit0ZW1wbGF0ZSA8PiB0ZW1wbGF0ZSA8PiBpbmxpbmUgdm9pZCBJbnNwZWN0
b3JQcm9wZXJ0eTxsb25nPjo6c2V0PGxvbmc+KGxvbmcgYXJndW1lbnQpIHsgbV92YWx1ZSA9IGFy
Z3VtZW50OyB9Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IHByb3BlcnR5X3R5cGVfdHJhaXRzPGxvbmc+
IHsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdG9JbnNwZWN0b3JWYWx1
ZShsb25nIHZhbHVlKSB7IHJldHVybiBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUp
OyB9CisgICAgc3RhdGljIGJvb2wgZnJvbUluc3BlY3RvclZhbHVlKEluc3BlY3RvclZhbHVlKiBp
bnNwZWN0b3JWYWx1ZSwgbG9uZyogdmFsdWUpIHsgcmV0dXJuIGluc3BlY3RvclZhbHVlLT5hc051
bWJlcih2YWx1ZSk7IH0KKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGxvbmcgdmFsdWUpIHsg
cmV0dXJuIFN0cmluZzo6bnVtYmVyKHZhbHVlKTsgfQorICAgIHN0YXRpYyB2b2lkIGZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwgbG9uZyogdmFsdWUpIHsgKnZhbHVlID0gc3Ry
aW5nVmFsdWUudG9JbnQoKTsgfQorfTsKKworI2RlZmluZSBERUNMQVJFX0lOU1BFQ1RPUl9QUk9Q
RVJUWSh0eXBlLCBuYW1lLCBzZXR0ZXJOYW1lLCBkZWZhdWx0VmFsdWUsIHN0YXRlTmFtZSwgcHJl
ZmVyZW5jZU5hbWUpXAordHlwZSBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV8jI25hbWUubV92YWx1
ZTsgfVwKK3RlbXBsYXRlIDx0eXBlbmFtZSBhcmdUeXBlPlwKK3ZvaWQgc2V0dGVyTmFtZShjb25z
dCBhcmdUeXBlJiB2YWx1ZSlcCit7XAorICAgIGlmIChtXyMjbmFtZS5tX3ZhbHVlID09IHZhbHVl
KVwKKyAgICAgICAgcmV0dXJuO1wKKyAgICBtXyMjbmFtZS5zZXQ8YXJnVHlwZT4odmFsdWUpO1wK
KyAgICBwcm9wZXJ0eVVwZGF0ZWQoJm1fIyNuYW1lKTtcCit9XAorcHJpdmF0ZTpcCisgICAgSW5z
cGVjdG9yUHJvcGVydHk8dHlwZT4gbV8jI25hbWU7XAorcHVibGljOgorCitjbGFzcyBJbnNwZWN0
b3JTdGF0ZSB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yU3RhdGUoSW5zcGVjdG9yQ2xpZW50KiBj
bGllbnQpOworCisgICAgSU5TUEVDVE9SX1NUQVRFX1BST1BFUlRJRVMoREVDTEFSRV9JTlNQRUNU
T1JfUFJPUEVSVFkpOworCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldFN0YXRl
T2JqZWN0Rm9yRnJvbnRlbmQoKTsKKyAgICB2b2lkIHJlc3RvcmVGcm9tSW5zcGVjdG9yQ29va2ll
KGNvbnN0IFN0cmluZyYganNvblN0cmluZyk7CisgICAgdm9pZCByZXN0b3JlRnJvbVNldHRpbmdz
KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHByb3BlcnR5VXBkYXRlZChJbnNwZWN0b3JQcm9w
ZXJ0eUJhc2UqIHByb3BlcnR5KTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFZlY3RvcjxJbnNw
ZWN0b3JQcm9wZXJ0eUJhc2UqPiBJbnNwZWN0b3JQcm9wZXJ0eVZlY3RvcjsKKyAgICBJbnNwZWN0
b3JQcm9wZXJ0eVZlY3RvciBtX2luc3BlY3RvclByb3BlcnRpZXM7CisgICAgSW5zcGVjdG9yQ2xp
ZW50KiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
ICFkZWZpbmVkKEluc3BlY3RvckNvbnRyb2xsZXJfaCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuY3BwCmluZGV4IGM5NmU5NTMuLjE5YjY1NGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmNwcApAQCAtNjQ5LDYgKzY0OSwxNCBAQCBib29sIEluc3BlY3Rvck9iamVjdDo6
Z2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKiBvdXRwdXQpIGNvbnN0CiAgICAg
cmV0dXJuIHZhbHVlLT5hc051bWJlcihvdXRwdXQpOwogfQogCitib29sIEluc3BlY3Rvck9iamVj
dDo6Z2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgbG9uZyogb3V0cHV0KSBjb25zdAorewor
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CisgICAgaWYgKCF2
YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YWx1ZS0+YXNOdW1iZXIo
b3V0cHV0KTsKK30KKwogYm9vbCBJbnNwZWN0b3JPYmplY3Q6OmdldFN0cmluZyhjb25zdCBTdHJp
bmcmIG5hbWUsIFN0cmluZyogb3V0cHV0KSBjb25zdAogewogICAgIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmlu
ZGV4IDQwMzZmNTUuLjRlYzkwYjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBA
IC0xMDYsNiArMTA2LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
bnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGxvbmcgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKKyAgICB9
CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBjcmVhdGUoZG91
YmxlIHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JC
YXNpY1ZhbHVlKHZhbHVlKSk7CkBAIC0xMjIsNiArMTI3LDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGJvb2wgdmFsdWUpIDogSW5zcGVjdG9y
VmFsdWUoVHlwZUJvb2xlYW4pLCBtX2Jvb2xWYWx1ZSh2YWx1ZSkgeyB9CiAgICAgZXhwbGljaXQg
SW5zcGVjdG9yQmFzaWNWYWx1ZShpbnQgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZU51bWJl
ciksIG1fZG91YmxlVmFsdWUoKGRvdWJsZSl2YWx1ZSkgeyB9CisgICAgZXhwbGljaXQgSW5zcGVj
dG9yQmFzaWNWYWx1ZShsb25nIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVOdW1iZXIpLCBt
X2RvdWJsZVZhbHVlKChkb3VibGUpdmFsdWUpIHsgfQogICAgIGV4cGxpY2l0IEluc3BlY3RvckJh
c2ljVmFsdWUoZG91YmxlIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVOdW1iZXIpLCBtX2Rv
dWJsZVZhbHVlKHZhbHVlKSB7IH0KIAogICAgIHVuaW9uIHsKQEAgLTE4MSw2ICsxODcsNyBAQCBw
dWJsaWM6CiAgICAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
OwogICAgIGJvb2wgZ2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIG91dHB1dCkg
Y29uc3Q7CiAgICAgYm9vbCBnZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUqIG91
dHB1dCkgY29uc3Q7CisgICAgYm9vbCBnZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBsb25n
KiBvdXRwdXQpIGNvbnN0OwogICAgIGJvb2wgZ2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwg
U3RyaW5nKiBvdXRwdXQpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBn
ZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBmOGFh
ZWE5Li4wNmU3ZmE0IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJL
aXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEwLTEwLTA2ICBJbHlhIFRpa2hv
bm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnNwZWN0b3Igc2V0dGluZ3Mv
cHJvcGVydGllcy9zdGF0ZXMgbWFuYWdlbWVudAorICAgICAgICBzaG91bGQgYmUgZXh0cmFjdGVk
IGludG8gc2VwYXJhdGUgY2xhc3MuCisKKyAgICAgICAgV2UgaGF2ZSBhIGxvdCBvZiBmbGFncy92
YWx1ZXMgaW4gSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICAgICAgU29tZSBmbGFncyBhcmUgcGVy
c2lzdGluZyBpbnRvIHByb2ZpbGUuCisgICAgICAgIE90aGVycyBhcmUgcGFydCBvZiBpbnNwZWN0
b3Igc3RhdGUgZm9yIGZyb250ZW5kLgorICAgICAgICBBbGwgdGhlc2UgZmxhZ3Mgc2hvdWxkIGtl
ZXAgdGhlaXIgdmFsdWVzIGFmdGVyIG5hdmlnYXRpb24uCisgICAgICAgIEl0J2QgYmUgYmV0dGVy
IHRvIGV4dHJhY3QgdGhlc2UgZmxhZ3MvdmFsdWVzIGludG8gc2VwYXJhdGUKKyAgICAgICAgY2xh
c3Mgd2hpY2ggd2lsbCBjYXJlIGFib3V0IHRoZWlycyBsaWZldGltZS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyNzUKKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbToKKyAgICAgICAgKC1bV2ViSW5zcGVj
dG9yV2luZG93Q29udHJvbGxlciBzaG93V2luZG93Ol0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0
b3JXaW5kb3dDb250cm9sbGVyIGF0dGFjaF0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5k
b3dDb250cm9sbGVyIGRldGFjaF0pOgorCiAyMDEwLTEwLTA3ICBBbnRvbmlvIEdvbWVzICA8YWdv
bWVzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0gYi9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQppbmRleCBkNGQw
MjEzLi5kNmRjODc5IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5tbQpAQCAtMzU4LDggKzM1OCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkgY29uc3QKICAgICBfdmlzaWJsZSA9IFlFUzsK
ICAgICAKICAgICAvLyBJZiBubyBwcmVmZXJlbmNlIGlzIHNldCAtIGRlZmF1bHQgdG8gYW4gYXR0
YWNoZWQgd2luZG93LiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW5zcGVjdG9yIExheW91dFRlc3Rz
LgotICAgIFN0cmluZyBzaG91bGRBdHRhY2ggPSBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0
b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCkpOwotICAgIF9zaG91bGRBdHRhY2ggPSBzaG91
bGRBdHRhY2ggIT0gImZhbHNlIjsKKyAgICBfc2hvdWxkQXR0YWNoID0gW19pbnNwZWN0ZWRXZWJW
aWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmluc3BlY3RvclN0YXJ0c0F0dGFjaGVk
KCk7CiAgICAgCiAgICAgaWYgKF9zaG91bGRBdHRhY2ggJiYgIV9mcm9udGVuZENsaWVudC0+Y2Fu
QXR0YWNoV2luZG93KCkpCiAgICAgICAgIF9zaG91bGRBdHRhY2ggPSBOTzsKQEAgLTM5NCw3ICsz
OTMsNyBAQCB2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRs
ZSgpIGNvbnN0CiAgICAgaWYgKF9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0
YWNoZWRTZXR0aW5nTmFtZSgpLCAidHJ1ZSIpOworICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdl
XS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCh0cnVl
KTsKIAogICAgIFtzZWxmIGNsb3NlXTsKICAgICBbc2VsZiBzaG93V2luZG93Om5pbF07CkBAIC00
MDUsNyArNDA0LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6dXBkYXRlV2lu
ZG93VGl0bGUoKSBjb25zdAogICAgIGlmICghX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JT
dGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJmYWxzZSIpOworICAgIFtfaW5zcGVjdGVkV2Vi
VmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JTdGFydHNBdHRh
Y2hlZChmYWxzZSk7CiAKICAgICBbc2VsZiBjbG9zZV07CiAgICAgW3NlbGYgc2hvd1dpbmRvdzpu
aWxdOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9XZWJLaXQvd2luL0NoYW5n
ZUxvZwppbmRleCBlODA3MTRhLi5iMTZmYjRiIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL0NoYW5n
ZUxvZworKysgYi9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEwLTEw
LTA2ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnNw
ZWN0b3Igc2V0dGluZ3MvcHJvcGVydGllcy9zdGF0ZXMgbWFuYWdlbWVudAorICAgICAgICBzaG91
bGQgYmUgZXh0cmFjdGVkIGludG8gc2VwYXJhdGUgY2xhc3MuCisKKyAgICAgICAgV2UgaGF2ZSBh
IGxvdCBvZiBmbGFncy92YWx1ZXMgaW4gSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICAgICAgU29t
ZSBmbGFncyBhcmUgcGVyc2lzdGluZyBpbnRvIHByb2ZpbGUuCisgICAgICAgIE90aGVycyBhcmUg
cGFydCBvZiBpbnNwZWN0b3Igc3RhdGUgZm9yIGZyb250ZW5kLgorICAgICAgICBBbGwgdGhlc2Ug
ZmxhZ3Mgc2hvdWxkIGtlZXAgdGhlaXIgdmFsdWVzIGFmdGVyIG5hdmlnYXRpb24uCisgICAgICAg
IEl0J2QgYmUgYmV0dGVyIHRvIGV4dHJhY3QgdGhlc2UgZmxhZ3MvdmFsdWVzIGludG8gc2VwYXJh
dGUKKyAgICAgICAgY2xhc3Mgd2hpY2ggd2lsbCBjYXJlIGFib3V0IHRoZWlycyBsaWZldGltZS4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyNzUK
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93KToKKyAgICAgICAg
KFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucyk6
CisKIDIwMTAtMTAtMDQgIEpvbiBIb25leWN1dHQgIDxqaG9uZXljdXR0QGFwcGxlLmNvbT4KIAog
ICAgICAgICBQcmV2ZW50IGFuIGFzc2VydGlvbiBmYWlsdXJlIHdoZW4gdHJ5aW5nIHRvIGNyZWF0
ZSBhIHByb3RlY3Rpb24gc3BhY2UKZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50LmNwcAppbmRleCAxYjc5ZGRlLi4wMzAyMDA5IDEwMDY0NAotLS0gYS9X
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKKysrIGIvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC0yNzMsNyAr
MjczLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93KCkK
ICAgICBpZiAobV9hdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pbnNwZWN0ZWRX
ZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNwZWN0
b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJ0cnVl
Iik7CisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQodHJ1ZSk7CiAKICAgICBjbG9zZVdpbmRvd1dp
dGhvdXROb3RpZmljYXRpb25zKCk7CiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25z
KCk7CkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
ZGV0YWNoV2luZG93KCkKICAgICBpZiAoIW1fYXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNl
dFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0
aW5nTmFtZSgpLCAiZmFsc2UiKTsKKyAgICBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChmYWxzZSk7CiAK
ICAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiAgICAgc2hvd1dpbmRvd1dp
dGhvdXROb3RpZmljYXRpb25zKCk7CkBAIC0zNjQsOCArMzY0LDcgQEAgdm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCkKICAgICAg
ICAgc2hvdWxkQXR0YWNoID0gdHJ1ZTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSWYgbm8gcHJl
ZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0IHRvIGFuIGF0dGFjaGVkIHdpbmRvdy4gVGhpcyBpcyBp
bXBvcnRhbnQgZm9yIGluc3BlY3RvciBMYXlvdXRUZXN0cy4KLSAgICAgICAgU3RyaW5nIHNob3Vs
ZEF0dGFjaFByZWYgPSBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5zZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkU2V0dGluZ05hbWUoKSk7Ci0gICAgICAgIHNob3VsZEF0dGFjaCA9IHNob3VsZEF0dGFjaFBy
ZWYgIT0gImZhbHNlIjsKKyAgICAgICAgc2hvdWxkQXR0YWNoID0gbV9pbnNwZWN0ZWRXZWJWaWV3
LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQo
KTsKIAogICAgICAgICBpZiAoc2hvdWxkQXR0YWNoICYmICFjYW5BdHRhY2hXaW5kb3coKSkKICAg
ICAgICAgICAgIHNob3VsZEF0dGFjaCA9IGZhbHNlOwo=
</data>
<flag name="review"
          id="60026"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70347</attachid>
            <date>2010-10-09 02:25:00 -0700</date>
            <delta_ts>2010-10-14 02:19:13 -0700</delta_ts>
            <desc>[patch] polished but very complex solution :) without InspectorProperty* classes and theirs virtual functions. Just for try bots.</desc>
            <filename>inspectorState.cpp</filename>
            <type>text/plain</type>
            <size>55269</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDUzMzFlYWUuLjI3Y2FlYzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExNCw2ICsxMTE0LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2M0ZGE2My4uMmFlYWNlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NCBAQAorMjAxMC0xMC0wNiAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW5zcGVjdG9yIHNldHRpbmdzL3By
b3BlcnRpZXMvc3RhdGVzIG1hbmFnZW1lbnQKKyAgICAgICAgc2hvdWxkIGJlIGV4dHJhY3RlZCBp
bnRvIHNlcGFyYXRlIGNsYXNzLgorCisgICAgICAgIFdlIGhhdmUgYSBsb3Qgb2YgZmxhZ3MvdmFs
dWVzIGluIEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIFNvbWUgZmxhZ3MgYXJlIHBlcnNp
c3RpbmcgaW50byBwcm9maWxlLgorICAgICAgICBPdGhlcnMgYXJlIHBhcnQgb2YgaW5zcGVjdG9y
IHN0YXRlIGZvciBmcm9udGVuZC4KKyAgICAgICAgQWxsIHRoZXNlIGZsYWdzIHNob3VsZCBrZWVw
IHRoZWlyIHZhbHVlcyBhZnRlciBuYXZpZ2F0aW9uLgorICAgICAgICBJdCdkIGJlIGJldHRlciB0
byBleHRyYWN0IHRoZXNlIGZsYWdzL3ZhbHVlcyBpbnRvIHNlcGFyYXRlCisgICAgICAgIGNsYXNz
IHdoaWNoIHdpbGwgY2FyZSBhYm91dCB0aGVpcnMgbGlmZXRpbWUuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mjc1CisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
LmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldEluc3BlY3RvclN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNldHRpbmdzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNlYXJjaGluZ0Zvck5vZGVJ
blBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcmVMYXN0QWN0aXZl
UGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
aGFuZGxlTW91c2VQcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRTZWFyY2hpbmdGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNldE1vbml0b3JpbmdYSFJFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OnNob3dQYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlUHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0VHJhY2tlZFJlc291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppZGVudGlmaWVyRm9y
SW5pdGlhbFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdEltcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OnNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuc3VyZVNldHRpbmdzTG9hZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxl
cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGltZWxpbmVQ
cm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVQ
cm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxl
UHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxl
RGVidWdnZXJGcm9tRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlzYWJsZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OmxvYWRCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpzYXZlQnJlYWtwb2ludHMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bDo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdGF0ZTo6cmVzdG9yZUZyb21KU09OU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbVNldHRpbmdzKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0YXRlOjpwcm9wZXJ0eVVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3RhdGU6OnByb3BlcnR5TWFwVG9JbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclByb3BlcnR5QmFzZTo6SW5zcGVjdG9yUHJvcGVydHlCYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclByb3BlcnR5QmFzZTo6fkluc3BlY3RvclByb3BlcnR5QmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9wZXJ0eUJhc2U6OnNhdmUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUHJvcGVydHlCYXNlOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclByb3BlcnR5QmFzZTo6YXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUHJvcGVydHlCYXNlOjpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclByb3BlcnR5OjpJbnNwZWN0b3JQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JQcm9wZXJ0eTo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9w
ZXJ0eTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb3BlcnR5OjpzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvcGVydHk6OnNhdmVUb0NvbnRhaW5lckFzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb3BlcnR5OjpyZXN0b3JlRnJvbUNvbnRhaW5l
ckFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb3BlcnR5Ojp0b1N0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9wZXJ0eTo6ZnJvbVN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RhdGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0
OjpnZXROdW1iZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKwog
MjAxMC0xMC0wOSAgUHJhdGlrIFNvbGFua2kgIDxwc29sYW5raUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDRhMjU0N2IuLjhjZmU1Mzkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQpAQCAtMTgyOSw2ICsxODI5LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggXAogCVdlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2UuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIFwKKwlX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dG9yYWdlQWdlbnQuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KaW5kZXggZDFkYzAyMS4uOTc0NDA2YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgorKysgYi9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0xMjA1LDcgKzEyMDUs
NiBAQCBfX1pON1dlYkNvcmUyMkdlb2xvY2F0aW9uU2VydmljZU1vY2s4c2V0RXJyb3JFTjNXVEYx
MFBhc3NSZWZQdHJJTlNfMTNQb3NpdGlvbkVycgogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTBzZXRTZXR0aW5nRVJLTjNX
VEY2U3RyaW5nRVM0XwogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJDb25zb2xl
UGFuZWxFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMlNjcmlwdHNQYW5lbEUK
IF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEzUHJvZmlsZXNQYW5lbEUKQEAgLTEy
MTYsMTIgKzEyMTUsMTIgQEAgX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNh
YmxlUHJvZmlsZXJFYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMThkaXNjb25u
ZWN0RnJvbnRlbmRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjBzdG9wVGlt
ZWxpbmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMXN0YXJ0
VGltZWxpbmVQcm9maWxlckV2CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyM2lu
c3BlY3RvclN0YXJ0c0F0dGFjaGVkRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjI1ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZEVsUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50RU4zV1RG
MTBQYXNzT3duUHRySU5TXzIzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFRUUKK19fWk43V2ViQ29y
ZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRFYgogX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxp
bmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzdG9wVXNlckluaXRpYXRl
ZFByb2ZpbGluZ0V2Ci1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIzNGluc3BlY3Rv
clN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWVFdgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250
cm9sbGVyMzRpbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lRXYKIF9fWk5LN1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXIzMWlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGVF
dgogX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1cHJvZmlsZXJFbmFibGVkRXYK
IF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjRzaG93RXYKQEAgLTEyNDEsNyArMTI0
MCw2IEBAIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbEMyRVBOU18x
OUluc3BlY3RvckNvbnRyb2xsZXJFUE5TXzRQYWdlCiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWxEMkV2CiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
MTdkcmF3Tm9kZUhpZ2hsaWdodEVSTlNfMTVHcmFwaGljc0NvbnRleHRFCiBfX1pOSzdXZWJDb3Jl
MTlJbnNwZWN0b3JDb250cm9sbGVyN2VuYWJsZWRFdgotX19aTks3V2ViQ29yZTE5SW5zcGVjdG9y
Q29udHJvbGxlcjdzZXR0aW5nRVJLTjNXVEY2U3RyaW5nRQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
SkFWQV9CUklER0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDMzNjdjZWUuLmU3ZTZjMjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xOTM3LDYgKzE5Mzcs
OCBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oJywKKyAgICAgICAgICAgICdpbnNwZWN0
b3IvSW5zcGVjdG9yU3RhdGUuY3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
U3RhdGUuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5j
cHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuaCcsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwJywKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDliMWM1
MzQuLjBkYjgzY2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnBybwpAQCAtMTAwMiw2ICsxMDAyLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
LmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwK
QEAgLTE4ODIsNiArMTg4Myw3IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdl
bnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggXAorICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JTdGF0ZS5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggXAogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKaW5kZXggZDYxYjQ5Zi4uMjJlNjBhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCkBAIC02MzE5Myw2ICs2MzE5MywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQog
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3RhdGUu
Y3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5caW5zcGVjdG9yXEluc3BlY3RvclN0YXRlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3RvcmFnZUFn
ZW50LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDk0YjNjYTIuLjUxNDBiOTkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTM0LDYgKzExMzQsOCBAQAogCQk0RjRG
NUZGQjExQ0JEMkUxMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY0RjVGRkExMUNCRDJEMjAwQTE4
NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmNwcCAqLzsgfTsKIAkJNEY3MDdBOTkxMUVGNjc5NDAw
QUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGNzA3QTk3MTFFRjY3OTQwMEFDREE2OSAv
KiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgKi87IH07CiAJCTRGNzA3QTlBMTFFRjY3
OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY3MDdBOTgxMUVGNjc5NDAwQUNEQTY5
IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggKi87IH07CisJCTRGQTNCOTBBMTI1Q0Qx
MjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkEzQjkwODEyNUNEMTIxMDAzMDBCQUQgLyogSW5zcGVj
dG9yU3RhdGUuY3BwICovOyB9OworCQk0RkEzQjkwQjEyNUNEMTIyMDAzMDBCQUQgLyogSW5zcGVj
dG9yU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRGQTNCOTA5MTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oICovOyB9OwogCQk0
RkQ4RDBGMjExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkQ4RDBGMDExOUM3MThCMDAyRkE4
MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgKi87IH07CiAJCTRGRDhEMEYzMTE5QzcxOEIwMDJGQTgy
NSAvKiBTY3JpcHRHQ0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0RkQ4RDBGMTExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5oICov
OyB9OwogCQk1MTAxODQ2OTBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMTg0NjcwQjA4NjAyQTAw
NEE4MjVGIC8qIENhY2hlZFBhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNzIwNiw2ICs3MjA4LDggQEAKIAkJNEY0RjVGRkMxMUNCRDMwMTAw
QTE4NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluc3BlY3RvckZyb250ZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTRGNzA3QTk3MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGNzA3QTk4MTFF
RjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0RkEzQjkwODEyNUNEMTIxMDAzMDBCQUQgLyogSW5z
cGVjdG9yU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5z
cGVjdG9yU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0RkEzQjkwOTEy
NUNEMTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNEZEOEQwRjAxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0R0NFdmVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGRDhEMEYxMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRH
Q0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdEdDRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTg0NjcwQjA4NjAyQTAwNEE4MjVG
IC8qIENhY2hlZFBhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVk
UGFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIyMDQsNiArMTIyMDgsOCBA
QAogCQkJCTlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50
LmggKi8sCiAJCQkJNDFGMDYyMDAwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNl
LmNwcCAqLywKIAkJCQk0MUYwNjFGRjBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3Vy
Y2UuaCAqLywKKwkJCQk0RkEzQjkwODEyNUNEMTIxMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUu
Y3BwICovLAorCQkJCTRGQTNCOTA5MTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5o
ICovLAogCQkJCTdBQjBCMUJFMTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JTdG9yYWdlQWdl
bnQuY3BwICovLAogCQkJCTdBQjBCMUJGMTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JTdG9y
YWdlQWdlbnQuaCAqLywKIAkJCQk4MkFCMTc2RjEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAgKi8sCkBAIC0yMTA5MSw2ICsyMTA5Nyw3IEBACiAJCQkJODkwQUUwRTEx
MjU2QTA3OTAwRjU5NjhDIC8qIERpcmVjdG9yeVJlYWRlckJhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTgyQUIxNzc0MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MkFCMTc3NjEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yVXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk0RkEzQjkwQjEyNUNEMTIyMDAzMDBCQUQgLyog
SW5zcGVjdG9yU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjM2NDAsNiArMjM2NDcsNyBAQAog
CQkJCTg5M0M0ODUzMTI0OTlCMDYwMDJCM0Q4NiAvKiBKU0VudHJ5U3luY0N1c3RvbS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4MkFCMTc3MzEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yU3R5
bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MkFCMTc3NTEyNUM4MjY3MDBDNTA2OUQg
LyogSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRGQTNCOTBBMTI1
Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMWI2Njg1MS4uMjIzOTcx
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTY5LDYg
KzY5LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JQcm9maWxlckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2Uu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0b3Jh
Z2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JWYWx1ZXMuaCIKQEAgLTExNiw0MCArMTE3LDE3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGZyb250ZW5kU2V0dGluZ3NTZXR0aW5nTmFtZSA9ICJmcm9udGVuZFNldHRpbmdzIjsKLQotc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGRlYnVnZ2VyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lID0g
ImRlYnVnZ2VyRW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgbGFzdEFjdGl2ZVBh
bmVsID0gImxhc3RBY3RpdmVQYW5lbCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgbW9uaXRv
cmluZ1hIUlNldHRpbmdOYW1lID0gInhock1vbml0b3IiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkU2V0dGluZ05hbWUgPSAicmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHByb2ZpbGVyQWx3YXlz
RW5hYmxlZFNldHRpbmdOYW1lID0gInByb2ZpbGVyRW5hYmxlZCI7Ci0KLXN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBtb25pdG9yaW5nWEhSU3RhdGVOYW1lID0gIm1vbml0b3JpbmdYSFJFbmFibGVk
IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCByZXNvdXJjZVRyYWNraW5nRW5hYmxlZFN0YXRl
TmFtZSA9ICJyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29u
c3Qgc2VhcmNoaW5nRm9yTm9kZUVuYWJsZWRTdGF0ZU5hbWUgPSAic2VhcmNoaW5nRm9yTm9kZUVu
YWJsZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHRpbWVsaW5lUHJvZmlsZXJFbmFibGVk
U3RhdGVOYW1lID0gInRpbWVsaW5lUHJvZmlsZXJFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlU3RhdGVOYW1lID0gInBhdXNlT25FeGNlcHRp
b25zU3RhdGUiOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgaW5zcGVjdG9yQXR0YWNoZWRI
ZWlnaHROYW1lID0gImluc3BlY3RvckF0dGFjaGVkSGVpZ2h0IjsKLQogc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IHhock5hdGl2ZUJyZWFrcG9pbnRUeXBlID0gIlhIUiI7CiBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZXZlbnRMaXN0ZW5lck5hdGl2ZUJyZWFrcG9pbnRUeXBlID0gIkV2ZW50TGlz
dGVuZXIiOwogCitjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpMYXN0QWN0
aXZlUGFuZWwgPSAibGFzdEFjdGl2ZVBhbmVsIjsKIGNvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3Rv
ckNvbnRyb2xsZXI6OkVsZW1lbnRzUGFuZWwgPSAiZWxlbWVudHMiOwogY29uc3QgY2hhciogY29u
c3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6Q29uc29sZVBhbmVsID0gImNvbnNvbGUiOwogY29uc3Qg
Y2hhciogY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2NyaXB0c1BhbmVsID0gInNjcmlwdHMi
OwogY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6UHJvZmlsZXNQYW5lbCA9
ICJwcm9maWxlcyI7CiAKK2NvbnN0IHVuc2lnbmVkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRlZmF1
bHRBdHRhY2hlZEhlaWdodCA9IDMwMDsKIAotY29uc3QgU3RyaW5nJiBJbnNwZWN0b3JDb250cm9s
bGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCkKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgc2V0dGluZ05hbWUsICgiaW5zcGVjdG9yU3RhcnRzQXR0YWNo
ZWQiKSk7Ci0gICAgcmV0dXJuIHNldHRpbmdOYW1lOwotfQotCi1zdGF0aWMgY29uc3QgdW5zaWdu
ZWQgZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOwotc3RhdGljIGNvbnN0IGZsb2F0IG1pbmlt
dW1BdHRhY2hlZEhlaWdodCA9IDI1MC4wZjsKLXN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0
YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzVmOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1D
b25zb2xlTWVzc2FnZXMgPSAxMDAwOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGV4cGlyZUNvbnNv
bGVNZXNzYWdlc1N0ZXAgPSAxMDA7CiAKQEAgLTE1OSwxMyArMTM3LDEwIEBAIEluc3BlY3RvckNv
bnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50
KiBjbGllbnQpCiAgICAgLCBtX29wZW5pbmdGcm9udGVuZChmYWxzZSkKICAgICAsIG1fY3NzU3Rv
cmUobmV3IEluc3BlY3RvckNTU1N0b3JlKHRoaXMpKQogICAgICwgbV9leHBpcmVkQ29uc29sZU1l
c3NhZ2VDb3VudCgwKQotICAgICwgbV9zaG93QWZ0ZXJWaXNpYmxlKGxhc3RBY3RpdmVQYW5lbCkK
KyAgICAsIG1fc2hvd0FmdGVyVmlzaWJsZShMYXN0QWN0aXZlUGFuZWwpCiAgICAgLCBtX3Nlc3Np
b25TZXR0aW5ncyhJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKQogICAgICwgbV9ncm91cExldmVs
KDApCi0gICAgLCBtX3NlYXJjaGluZ0Zvck5vZGUoZmFsc2UpCi0gICAgLCBtX21vbml0b3JpbmdY
SFIoZmFsc2UpCiAgICAgLCBtX3ByZXZpb3VzTWVzc2FnZSgwKQotICAgICwgbV9yZXNvdXJjZVRy
YWNraW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fc2V0dGluZ3NMb2FkZWQoZmFsc2UpCiAgICAg
LCBtX2luc3BlY3RvckJhY2tlbmQoSW5zcGVjdG9yQmFja2VuZDo6Y3JlYXRlKHRoaXMpKQogICAg
ICwgbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihuZXcgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIodGhpcykpCkBAIC0xNzYsNiArMTUxLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5z
cGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAg
ICAsIG1fcHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUodGhpcykp
CiAjZW5kaWYKIHsKKyAgICBtX3N0YXRlID0gbmV3IEluc3BlY3RvclN0YXRlKGNsaWVudCk7CiAg
ICAgQVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsKICAgICBBU1NFUlRfQVJHKGNsaWVudCwgY2xpZW50
KTsKIH0KQEAgLTIxOSwyNyArMTk1LDM5IEBAIGJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5h
YmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW5zcGVjdGVkUGFnZS0+c2V0dGluZ3MoKS0+ZGV2
ZWxvcGVyRXh0cmFzRW5hYmxlZCgpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxl
cjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKQoreworICAgIHJldHVybiBtX3N0YXRlLT5pbnNw
ZWN0b3JTdGFydHNBdHRhY2hlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNl
dEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGJvb2wgYXR0YWNoZWQpCiB7Ci0gICAgU2V0dGluZ3M6
Oml0ZXJhdG9yIGl0ID0gbV9zZXR0aW5ncy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ICE9IG1fc2V0
dGluZ3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIG1fc3RhdGUtPnNl
dEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGF0dGFjaGVkKTsKK30KIAotICAgIFN0cmluZyB2YWx1
ZTsKLSAgICBtX2NsaWVudC0+cG9wdWxhdGVTZXR0aW5nKGtleSwgJnZhbHVlKTsKLSAgICBtX3Nl
dHRpbmdzLnNldChrZXksIHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Cit2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGxvbmcgaGVpZ2h0KQorewor
ICAgIG1fc3RhdGUtPnNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGhlaWdodCk7Cit9CisKK2lu
dCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc3RhdGUtPmluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2VhcmNoaW5nRm9y
Tm9kZUluUGFnZSgpIGNvbnN0CiB7Ci0gICAgbV9zZXR0aW5ncy5zZXQoa2V5LCB2YWx1ZSk7Ci0g
ICAgbV9jbGllbnQtPnN0b3JlU2V0dGluZyhrZXksIHZhbHVlKTsKKyAgICByZXR1cm4gbV9zdGF0
ZS0+c2VhcmNoaW5nRm9yTm9kZSgpOworfQorCitib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnJl
c291cmNlVHJhY2tpbmdFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZS0+cmVz
b3VyY2VUcmFja2luZ0VuYWJsZWQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
YXZlQXBwbGljYXRpb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKQogewotICAgIHNl
dFNldHRpbmcoZnJvbnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lLCBzZXR0aW5ncyk7CisgICAgbV9z
dGF0ZS0+c2V0RnJvbnRlbmRTZXR0aW5ncyhzZXR0aW5ncyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzSlNP
TikKQEAgLTI0OSw1MCArMjM3LDI0IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZVNl
c3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzSlNPTikKIAogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpnZXRJbnNwZWN0b3JTdGF0ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piog
c3RhdGUpCiB7Ci0gICAgKCpzdGF0ZSktPnNldEJvb2xlYW4obW9uaXRvcmluZ1hIUlN0YXRlTmFt
ZSwgbV9tb25pdG9yaW5nWEhSKTsKLSAgICAoKnN0YXRlKS0+c2V0Qm9vbGVhbihyZXNvdXJjZVRy
YWNraW5nRW5hYmxlZFN0YXRlTmFtZSwgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk7CiAjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKLSAg
ICAgICAgKCpzdGF0ZSktPnNldE51bWJlcihwYXVzZU9uRXhjZXB0aW9uc1N0YXRlU3RhdGVOYW1l
LCBtX2RlYnVnZ2VyQWdlbnQtPnBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSk7CisgICAgICAgIG1f
c3RhdGUtPnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUobV9kZWJ1Z2dlckFnZW50LT5wYXVzZU9u
RXhjZXB0aW9uc1N0YXRlKCkpOwogI2VuZGlmCisgICAgKnN0YXRlID0gbV9zdGF0ZS0+Z2V0U3Rh
dGVPYmplY3RGb3JGcm9udGVuZCgpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnVw
ZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCkKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBzdGF0ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgc3RhdGUtPnNldEJvb2xl
YW4obW9uaXRvcmluZ1hIUlN0YXRlTmFtZSwgbV9tb25pdG9yaW5nWEhSKTsKLSAgICBzdGF0ZS0+
c2V0Qm9vbGVhbihyZXNvdXJjZVRyYWNraW5nRW5hYmxlZFN0YXRlTmFtZSwgbV9yZXNvdXJjZVRy
YWNraW5nRW5hYmxlZCk7Ci0gICAgc3RhdGUtPnNldEJvb2xlYW4odGltZWxpbmVQcm9maWxlckVu
YWJsZWRTdGF0ZU5hbWUsIG1fdGltZWxpbmVBZ2VudCk7Ci0gICAgc3RhdGUtPnNldEJvb2xlYW4o
c2VhcmNoaW5nRm9yTm9kZUVuYWJsZWRTdGF0ZU5hbWUsIG1fc2VhcmNoaW5nRm9yTm9kZSk7Ci0g
ICAgbV9jbGllbnQtPnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKHN0YXRlLT50b0pTT05TdHJp
bmcoKSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZUluc3BlY3RvclN0
YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXRlU3RyaW5nKQordm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0
IFN0cmluZyYgaW5zcGVjdG9yU3RhdGVDb29raWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBpbnNwZWN0b3JTdGF0ZVZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihpbnNw
ZWN0b3JTdGF0ZVN0cmluZyk7Ci0gICAgaWYgKCFpbnNwZWN0b3JTdGF0ZVZhbHVlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbnNwZWN0b3JTdGF0ZSA9
IGluc3BlY3RvclN0YXRlVmFsdWUtPmFzT2JqZWN0KCk7Ci0gICAgaWYgKCFpbnNwZWN0b3JTdGF0
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5zcGVjdG9yU3RhdGUtPmdldEJvb2xlYW4obW9u
aXRvcmluZ1hIUlN0YXRlTmFtZSwgJm1fbW9uaXRvcmluZ1hIUik7Ci0gICAgaW5zcGVjdG9yU3Rh
dGUtPmdldEJvb2xlYW4ocmVzb3VyY2VUcmFja2luZ0VuYWJsZWRTdGF0ZU5hbWUsICZtX3Jlc291
cmNlVHJhY2tpbmdFbmFibGVkKTsKLSAgICBpbnNwZWN0b3JTdGF0ZS0+Z2V0Qm9vbGVhbihzZWFy
Y2hpbmdGb3JOb2RlRW5hYmxlZFN0YXRlTmFtZSwgJm1fc2VhcmNoaW5nRm9yTm9kZSk7Ci0KLSAg
ICBib29sIHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkID0gZmFsc2U7Ci0gICAgaW5zcGVjdG9yU3Rh
dGUtPmdldEJvb2xlYW4odGltZWxpbmVQcm9maWxlckVuYWJsZWRTdGF0ZU5hbWUsICZ0aW1lbGlu
ZVByb2ZpbGVyRW5hYmxlZCk7Ci0gICAgaWYgKHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKQorICAg
IG1fc3RhdGUtPnJlc3RvcmVGcm9tSW5zcGVjdG9yQ29va2llKGluc3BlY3RvclN0YXRlQ29va2ll
KTsKKyAgICBpZiAobV9zdGF0ZS0+dGltZWxpbmVQcm9maWxlckVuYWJsZWQoKSkKICAgICAgICAg
c3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7Ci0gICAgZWxzZQotICAgICAgICBzdG9wVGltZWxpbmVQ
cm9maWxlcigpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNldHRpbmdzKFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBzZXR0aW5ncykKIHsKICAgICAqc2V0dGluZ3MgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICgqc2V0dGluZ3MpLT5zZXRTdHJpbmcoImFwcGxp
Y2F0aW9uIiwgc2V0dGluZyhmcm9udGVuZFNldHRpbmdzU2V0dGluZ05hbWUpKTsKKyAgICAoKnNl
dHRpbmdzKS0+c2V0U3RyaW5nKCJhcHBsaWNhdGlvbiIsIG1fc3RhdGUtPmZyb250ZW5kU2V0dGlu
Z3MoKSk7CiAgICAgKCpzZXR0aW5ncyktPnNldFN0cmluZygic2Vzc2lvbiIsIG1fc2Vzc2lvblNl
dHRpbmdzLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKQEAgLTQyOSwxMiArMzkxLDEyIEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6bWFya1RpbWVsaW5lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9yZUxhc3RBY3RpdmVQYW5lbChjb25zdCBT
dHJpbmcmIHBhbmVsTmFtZSkKIHsKLSAgICBzZXRTZXR0aW5nKGxhc3RBY3RpdmVQYW5lbCwgcGFu
ZWxOYW1lKTsKKyAgICBtX3N0YXRlLT5zZXRMYXN0QWN0aXZlUGFuZWwocGFuZWxOYW1lKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25z
dCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkKQogewotICAgIGlmICghZW5hYmxlZCgp
IHx8ICFtX3NlYXJjaGluZ0Zvck5vZGUpCisgICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fc3RhdGUt
PnNlYXJjaGluZ0Zvck5vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9
IHJlc3VsdC5pbm5lck5vZGUoKTsKQEAgLTQ0OSw3ICs0MTEsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmhhbmRsZU1vdXNlUHJlc3MoKQogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9zZWFyY2hpbmdGb3JOb2RlKTsKKyAgICBBU1NFUlQo
bV9zdGF0ZS0+c2VhcmNoaW5nRm9yTm9kZSgpKTsKICAgICBpZiAoIW1faGlnaGxpZ2h0ZWROb2Rl
KQogICAgICAgICByZXR1cm47CiAKQEAgLTQ4OCwxMiArNDUwLDExIEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6aW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChGcmFtZSogZnJh
bWUpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29s
IGVuYWJsZWQpCiB7Ci0gICAgaWYgKG1fc2VhcmNoaW5nRm9yTm9kZSA9PSBlbmFibGVkKQorICAg
IGlmIChtX3N0YXRlLT5zZWFyY2hpbmdGb3JOb2RlKCkgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0
dXJuOwotICAgIG1fc2VhcmNoaW5nRm9yTm9kZSA9IGVuYWJsZWQ7Ci0gICAgaWYgKCFtX3NlYXJj
aGluZ0Zvck5vZGUpCisgICAgbV9zdGF0ZS0+c2V0U2VhcmNoaW5nRm9yTm9kZShlbmFibGVkKTsK
KyAgICBpZiAoIW1fc3RhdGUtPnNlYXJjaGluZ0Zvck5vZGUoKSkKICAgICAgICAgaGlkZUhpZ2hs
aWdodCgpOwotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wq
IG5ld1N0YXRlKQpAQCAtNTA1LDExICs0NjYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoYm9vbCBlbmFibGVk
LCBib29sKiBuZXdTdGF0ZSkKIHsKICAgICAqbmV3U3RhdGUgPSBlbmFibGVkOwotICAgIGlmICht
X21vbml0b3JpbmdYSFIgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fbW9uaXRv
cmluZ1hIUiA9IGVuYWJsZWQ7Ci0gICAgc2V0U2V0dGluZyhtb25pdG9yaW5nWEhSU2V0dGluZ05h
bWUsIGVuYWJsZWQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0
ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldE1vbml0b3JpbmdYSFIoZW5hYmxlZCk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZyb250ZW5kKCkKQEAgLTU3Myw3ICs1
MzAsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dQYW5lbChjb25zdCBTdHJpbmcm
IHBhbmVsKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHBhbmVsID09IGxhc3RB
Y3RpdmVQYW5lbCkKKyAgICBpZiAocGFuZWwgPT0gTGFzdEFjdGl2ZVBhbmVsKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX2Zyb250ZW5kLT5zaG93UGFuZWwocGFuZWwpOwpAQCAtNjA5LDcgKzU2
Niw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKCkKICAg
ICB1bmJpbmRBbGxSZXNvdXJjZXMoKTsKICAgICBzdG9wVGltZWxpbmVQcm9maWxlcigpOwogCi0g
ICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gbGFzdEFjdGl2ZVBhbmVsOworICAgIG1fc2hvd0FmdGVy
VmlzaWJsZSA9IExhc3RBY3RpdmVQYW5lbDsKIAogICAgIGhpZGVIaWdobGlnaHQoKTsKIApAQCAt
NjQ3LDggKzYwNCw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRP
YmplY3RzKCkKICAgICBpZiAoIW1fZnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtX3Nob3dBZnRlclZpc2libGUgPT0gbGFzdEFjdGl2ZVBhbmVsKQotICAgICAgICBtX3Nob3dB
ZnRlclZpc2libGUgPSBzZXR0aW5nKGxhc3RBY3RpdmVQYW5lbCk7CisgICAgaWYgKG1fc2hvd0Fm
dGVyVmlzaWJsZSA9PSBMYXN0QWN0aXZlUGFuZWwpCisgICAgICAgIG1fc2hvd0FmdGVyVmlzaWJs
ZSA9IG1fc3RhdGUtPmxhc3RBY3RpdmVQYW5lbCgpOwogCiAgICAgc2hvd1BhbmVsKG1fc2hvd0Fm
dGVyVmlzaWJsZSk7CiAKQEAgLTcwNiw4ICs2NjMsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnJlc3RvcmVEZWJ1Z2dlcigpCiAgICAgaWYgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Omlz
RGVidWdnZXJBbHdheXNFbmFibGVkKCkpCiAgICAgICAgIGVuYWJsZURlYnVnZ2VyRnJvbUZyb250
ZW5kKGZhbHNlKTsKICAgICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIGRlYnVnZ2VyRW5hYmxlZCA9
IHNldHRpbmcoZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUpOwotICAgICAgICBpZiAo
ZGVidWdnZXJFbmFibGVkID09ICJ0cnVlIiB8fCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKQor
ICAgICAgICBpZiAobV9zdGF0ZS0+ZGVidWdnZXJBbHdheXNFbmFibGVkKCkgfHwgbV9hdHRhY2hE
ZWJ1Z2dlcldoZW5TaG93bikKICAgICAgICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7CiAgICAgfQog
I2VuZGlmCkBAIC03MTgsMTEgKzY3NCw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVz
dG9yZVByb2ZpbGVyKCkKICAgICBBU1NFUlQobV9mcm9udGVuZCk7CiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiAgICAgbV9wcm9maWxlckFnZW50LT5zZXRGcm9udGVuZChtX2Zyb250
ZW5kLmdldCgpKTsKLSAgICBpZiAoIVNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlzRW5h
YmxlZCgpKSB7Ci0gICAgICAgIFN0cmluZyBwcm9maWxlckVuYWJsZWRTZXR0aW5nID0gc2V0dGlu
Zyhwcm9maWxlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSk7Ci0gICAgICAgIGlmIChwcm9maWxl
ckVuYWJsZWRTZXR0aW5nID09ICJ0cnVlIikKLSAgICAgICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7
Ci0gICAgfQorICAgIGlmICghU2NyaXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNFbmFibGVk
KCkgJiYgbV9zdGF0ZS0+cHJvZmlsZXJBbHdheXNFbmFibGVkKCkpCisgICAgICAgIGVuYWJsZVBy
b2ZpbGVyKCk7CiAjZW5kaWYKIH0KIApAQCAtODk1LDcgKzg0OCw3IEBAIEluc3BlY3RvclJlc291
cmNlKiBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRUcmFja2VkUmVzb3VyY2UodW5zaWduZWQgbG9u
ZyBpZGVudGlmCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
aWYgKG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpCisgICAgaWYgKG1fc3RhdGUtPnJlc291cmNl
VHJhY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBtX3Jlc291cmNlcy5nZXQoaWRlbnRp
ZmllcikuZ2V0KCk7CiAKICAgICBib29sIGlzTWFpblJlc291cmNlID0gbV9tYWluUmVzb3VyY2Ug
JiYgbV9tYWluUmVzb3VyY2UtPmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyOwpAQCAtOTI2LDcg
Kzg3OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTG9hZFJlc291cmNlRnJvbU1l
bW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsCiAgICAgQVNTRVJUKG1faW5zcGVjdGVk
UGFnZSk7CiAgICAgYm9vbCBpc01haW5SZXNvdXJjZSA9IGlzTWFpblJlc291cmNlTG9hZGVyKGxv
YWRlciwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIGNhY2hlZFJlc291cmNlLT51cmwoKSkpOwogICAg
IGVuc3VyZVNldHRpbmdzTG9hZGVkKCk7Ci0gICAgaWYgKCFpc01haW5SZXNvdXJjZSAmJiAhbV9y
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkKKyAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFtX3N0
YXRlLT5yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBS
ZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gSW5zcGVjdG9yUmVzb3VyY2U6OmNy
ZWF0ZUNhY2hlZChtX2luc3BlY3RlZFBhZ2UtPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50
aWZpZXIoKSwgbG9hZGVyLCBjYWNoZWRSZXNvdXJjZSk7CkBAIC05NTAsNyArOTAzLDcgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLAogCiAgICAgYm9vbCBpc01haW5SZXNvdXJjZSA9IGlzTWFpblJl
c291cmNlTG9hZGVyKGxvYWRlciwgcmVxdWVzdC51cmwoKSk7CiAgICAgZW5zdXJlU2V0dGluZ3NM
b2FkZWQoKTsKLSAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFtX3Jlc291cmNlVHJhY2tpbmdF
bmFibGVkKQorICAgIGlmICghaXNNYWluUmVzb3VyY2UgJiYgIW1fc3RhdGUtPnJlc291cmNlVHJh
Y2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JS
ZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JSZXNvdXJjZTo6Y3JlYXRlKGlkZW50aWZpZXIs
IGxvYWRlciwgcmVxdWVzdC51cmwoKSk7CkBAIC0xMTM3LDEwICsxMDkwLDEwIEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2ln
bmVkIGxvbmcgaWRlbnRpCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX21vbml0b3JpbmdYSFIpCisgICAgaWYgKG1fc3RhdGUtPm1vbml0b3JpbmdYSFIo
KSkKICAgICAgICAgYWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3Nh
Z2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsICJYSFIgZmluaXNoZWQgbG9hZGluZzogXCIiICsgdXJs
ICsgIlwiLiIsIHNlbmRMaW5lTnVtYmVyLCBzZW5kVVJMKTsKIAotICAgIGlmICghbV9yZXNvdXJj
ZVRyYWNraW5nRW5hYmxlZCkKKyAgICBpZiAoIW1fc3RhdGUtPnJlc291cmNlVHJhY2tpbmdFbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEluc3BlY3RvclJlc291cmNlKiByZXNvdXJj
ZSA9IG1fcmVzb3VyY2VzLmdldChpZGVudGlmaWVyKS5nZXQoKTsKQEAgLTExNTUsNyArMTEwOCw3
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBS
ZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVN0cmluZykKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9yZXNvdXJjZVRyYWNraW5n
RW5hYmxlZCkKKyAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9zdGF0ZS0+cmVzb3VyY2VUcmFja2lu
Z0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW5zcGVjdG9yUmVzb3VyY2UqIHJl
c291cmNlID0gbV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOwpAQCAtMTE3NCw4ICsx
MTI3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRSZXNvdXJjZVRyYWNraW5nRW5h
YmxlZChib29sIGVuYWJsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1faW5zcGVj
dGVkUGFnZSk7Ci0gICAgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCA9IGVuYWJsZTsKLSAgICB1
cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldFJlc291cmNlVHJh
Y2tpbmdFbmFibGVkKGVuYWJsZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoYm9vbCBlbmFibGUsIGJvb2wgYWx3YXlzLCBib29sKiBu
ZXdTdGF0ZSkKQEAgLTExODMsMTggKzExMzUsMTYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJsZSwgYm9vbCBhbHdheXMsIGIK
ICAgICAqbmV3U3RhdGUgPSBlbmFibGU7CiAKICAgICBpZiAoYWx3YXlzKQotICAgICAgICBzZXRT
ZXR0aW5nKHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsIGVuYWJsZSA/
ICJ0cnVlIiA6ICJmYWxzZSIpOworICAgICAgICBtX3N0YXRlLT5zZXRSZXNvdXJjZVRyYWNraW5n
QWx3YXlzRW5hYmxlZChlbmFibGUpOwogCi0gICAgaWYgKG1fcmVzb3VyY2VUcmFja2luZ0VuYWJs
ZWQgPT0gZW5hYmxlKQorICAgIGlmIChtX3N0YXRlLT5yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgp
ID09IGVuYWJsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFn
ZSk7Ci0gICAgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCA9IGVuYWJsZTsKKyAgICBtX3N0YXRl
LT5zZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZChlbmFibGUpOwogCiAgICAgaWYgKGVuYWJsZSkK
ICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+bmF2aWdhdGlvblNjaGVkdWxl
cigpLT5zY2hlZHVsZVJlZnJlc2godHJ1ZSk7Ci0KLSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNv
b2tpZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuc3VyZVNldHRpbmdzTG9h
ZGVkKCkKQEAgLTEyMDMsMTUgKzExNTMsMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpl
bnN1cmVTZXR0aW5nc0xvYWRlZCgpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NldHRpbmdzTG9h
ZGVkID0gdHJ1ZTsKIAotICAgIFN0cmluZyByZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5hYmxlZCA9
IHNldHRpbmcocmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSk7Ci0gICAg
aWYgKHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkID09ICJ0cnVlIikKLSAgICAgICAgbV9y
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZCA9IHRydWU7Ci0KLSAgICBTdHJpbmcgbW9uaXRvcmluZ1hI
UkFsd2F5c0VuYWJsZWQgPSBzZXR0aW5nKG1vbml0b3JpbmdYSFJTZXR0aW5nTmFtZSk7Ci0gICAg
aWYgKG1vbml0b3JpbmdYSFJBbHdheXNFbmFibGVkID09ICJ0cnVlIikKLSAgICAgICAgbV9tb25p
dG9yaW5nWEhSID0gdHJ1ZTsKKyAgICBtX3N0YXRlLT5yZXN0b3JlRnJvbVNldHRpbmdzKCk7CiAK
LSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIGlmIChtX3N0YXRlLT5yZXNv
dXJjZVRyYWNraW5nQWx3YXlzRW5hYmxlZCgpKQorICAgICAgICBtX3N0YXRlLT5zZXRSZXNvdXJj
ZVRyYWNraW5nRW5hYmxlZCh0cnVlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
dGFydFRpbWVsaW5lUHJvZmlsZXIoKQpAQCAtMTIyNiw3ICsxMTcxLDcgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIoKQogICAgIGlmIChtX2Zyb250ZW5k
KQogICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVByb2ZpbGVyV2FzU3RhcnRlZCgpOwogCi0g
ICAgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKTsKKyAgICBtX3N0YXRlLT5zZXRUaW1lbGlu
ZVByb2ZpbGVyRW5hYmxlZCh0cnVlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
dG9wVGltZWxpbmVQcm9maWxlcigpCkBAIC0xMjQxLDcgKzExODYsNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkKICAgICBpZiAobV9mcm9udGVuZCkK
ICAgICAgICAgbV9mcm9udGVuZC0+dGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQoKTsKIAotICAg
IHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CisgICAgbV9zdGF0ZS0+c2V0VGltZWxpbmVQ
cm9maWxlckVuYWJsZWQoZmFsc2UpOwogfQogCiAjaWYgRU5BQkxFKFdPUktFUlMpCkBAIC0xNjEz
LDE0ICsxNTU4LDE0IEBAIGJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6cHJvZmlsZXJFbmFibGVk
KCkgY29uc3QKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmlsZXIoYm9vbCBh
bHdheXMsIGJvb2wgc2tpcFJlY29tcGlsZSkKIHsKICAgICBpZiAoYWx3YXlzKQotICAgICAgICBz
ZXRTZXR0aW5nKHByb2ZpbGVyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lLCAidHJ1ZSIpOworICAg
ICAgICBtX3N0YXRlLT5zZXRQcm9maWxlckFsd2F5c0VuYWJsZWQodHJ1ZSk7CiAgICAgbV9wcm9m
aWxlckFnZW50LT5lbmFibGUoc2tpcFJlY29tcGlsZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzKQogewogICAgIGlmIChhbHdheXMp
Ci0gICAgICAgIHNldFNldHRpbmcocHJvZmlsZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsICJm
YWxzZSIpOworICAgICAgICBtX3N0YXRlLT5zZXRQcm9maWxlckFsd2F5c0VuYWJsZWQoZmFsc2Up
OwogICAgIG1fcHJvZmlsZXJBZ2VudC0+ZGlzYWJsZSgpOwogfQogI2VuZGlmCkBAIC0xNjMwLDcg
KzE1NzUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVnZ2VyRnJvbUZy
b250ZW5kKGJvb2wgYWx3YXlzKQogewogICAgIEFTU0VSVCghZGVidWdnZXJFbmFibGVkKCkpOwog
ICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNldFNldHRpbmcoZGVidWdnZXJBbHdheXNFbmFibGVk
U2V0dGluZ05hbWUsICJ0cnVlIik7CisgICAgICAgIG1fc3RhdGUtPnNldERlYnVnZ2VyQWx3YXlz
RW5hYmxlZCh0cnVlKTsKIAogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogCkBAIC0xNjYx
LDcgKzE2MDYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVEZWJ1Z2dlcihi
b29sIGFsd2F5cykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGFsd2F5cykKLSAgICAgICAg
c2V0U2V0dGluZyhkZWJ1Z2dlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSwgImZhbHNlIik7Cisg
ICAgICAgIG1fc3RhdGUtPnNldERlYnVnZ2VyQWx3YXlzRW5hYmxlZChmYWxzZSk7CiAKICAgICBB
U1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIApAQCAtMTc2NSwxMiArMTcxMCwxNCBAQCBTdHJpbmcg
SW5zcGVjdG9yQ29udHJvbGxlcjo6YnJlYWtwb2ludHNTZXR0aW5nS2V5KCkKIAogUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yQ29udHJvbGxlcjo6bG9hZEJyZWFrcG9pbnRzKCkK
IHsKLSAgICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihzZXR0aW5nKGJyZWFrcG9p
bnRzU2V0dGluZ0tleSgpKSk7CisgICAgU3RyaW5nIGpzb25TdHJpbmc7CisgICAgbV9jbGllbnQt
PnBvcHVsYXRlU2V0dGluZyhicmVha3BvaW50c1NldHRpbmdLZXkoKSwgJmpzb25TdHJpbmcpOwor
ICAgIHJldHVybiBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGpzb25TdHJpbmcpOwogfQogCiB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNhdmVCcmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gYnJlYWtwb2ludHMpCiB7Ci0gICAgc2V0U2V0dGluZyhicmVha3BvaW50c1Nl
dHRpbmdLZXkoKSwgYnJlYWtwb2ludHMtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2NsaWVudC0+
c3RvcmVTZXR0aW5nKGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpLCBicmVha3BvaW50cy0+dG9KU09O
U3RyaW5nKCkpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaAppbmRleCAwYzI4ODVlLi5hODc1MTIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oCkBAIC02OSw2ICs2OSw3IEBAIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dDsKIGNsYXNzIEluc3BlY3RvclJlc291cmNlOworY2xhc3MgSW5zcGVjdG9yU3RhdGU7CiBjbGFz
cyBJbnNwZWN0b3JTdG9yYWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50Owog
Y2xhc3MgSW5zcGVjdG9yVmFsdWU7CkBAIC0xMDMsNiArMTA0LDcgQEAgcHVibGljOgogICAgIHR5
cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiA+IERh
dGFiYXNlUmVzb3VyY2VzTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2U+ID4gRE9NU3RvcmFnZVJlc291cmNlc01hcDsKIAorICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBMYXN0QWN0aXZlUGFuZWw7CiAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IENvbnNvbGVQYW5lbDsKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgRWxlbWVudHNQYW5lbDsKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgUHJvZmlsZXNQ
YW5lbDsKQEAgLTEyMywxMyArMTI1LDExIEBAIHB1YmxpYzoKICAgICBQYWdlKiBpbnNwZWN0ZWRQ
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlOyB9CiAgICAgdm9pZCByZWxvYWRQ
YWdlKCk7CiAKLSAgICBTdHJpbmcgc2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKICAgICB2b2lkIHNhdmVBcHBsaWNhdGlvblNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGlu
Z3MpOwogICAgIHZvaWQgc2F2ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKICAgICB2
b2lkIGdldFNldHRpbmdzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+Kik7CiAKLSAgICB2b2lkIHJl
c3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3QgU3RyaW5nJiBpbnNwZWN0b3JTdGF0
ZSk7CisgICAgdm9pZCByZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmlu
ZyYgaW5zcGVjdG9yQ29va2llKTsKIAogICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CiAgICAgdm9p
ZCBoaWdobGlnaHQoTm9kZSopOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAgICAgY29uc3QgVmVjdG9yPE93blB0cjxDb25zb2xl
TWVzc2FnZT4gPiYgY29uc29sZU1lc3NhZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zb2xlTWVz
c2FnZXM7IH0KIAotICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VhcmNoaW5nRm9yTm9kZTsgfQorICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUluUGFn
ZSgpIGNvbnN0OwogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVz
dFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwogICAgIHZvaWQgaGFuZGxlTW91c2VQ
cmVzcygpOwogCkBAIC0xNzgsNyArMTc4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRSZXNv
dXJjZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpOwogICAgIHZvaWQgc2V0UmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBib29sIGFsd2F5cywgYm9vbCogbmV3U3RhdGUp
OwotICAgIGJvb2wgcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3Jl
c291cmNlVHJhY2tpbmdFbmFibGVkOyB9CisgICAgYm9vbCByZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZCgpIGNvbnN0OwogCiAgICAgdm9pZCBlbnN1cmVTZXR0aW5nc0xvYWRlZCgpOwogCkBAIC0yNzEs
MTAgKzI3MSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0
ZU9uTG9hZCgpOwogICAgIHZvaWQgc2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmlu
ZyYgc291cmNlKTsKIAotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXJ0c0F0
dGFjaGVkU2V0dGluZ05hbWUoKTsKKyAgICBib29sIGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCk7
CisgICAgdm9pZCBzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChib29sKTsKKyAgICB2b2lkIHNl
dEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGxvbmcgaGVpZ2h0KTsKKyAgICBpbnQgaW5zcGVjdG9y
QXR0YWNoZWRIZWlnaHQoKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZh
dWx0QXR0YWNoZWRIZWlnaHQ7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVJbnNwZWN0b3JT
dGF0ZUNvb2tpZSgpOwogICAgIHZvaWQgZ2V0SW5zcGVjdG9yU3RhdGUoUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4qIHN0YXRlKTsKIAogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwpA
QCAtMzQ2LDYgKzM1MCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEluc3BlY3RvclN0b3JhZ2VB
Z2VudD4gbV9zdG9yYWdlQWdlbnQ7CiAgICAgT3duUHRyPEluc3BlY3RvckNTU1N0b3JlPiBtX2Nz
c1N0b3JlOwogICAgIE93blB0cjxJbnNwZWN0b3JUaW1lbGluZUFnZW50PiBtX3RpbWVsaW5lQWdl
bnQ7CisgICAgT3duUHRyPEluc3BlY3RvclN0YXRlPiBtX3N0YXRlOwogCiAjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICBPd25QdHI8SW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50PiBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudDsKQEAgLTM3MiwxMCArMzc3LDcgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1fc2Vzc2lvblNldHRpbmdzOwog
I2VuZGlmCiAgICAgdW5zaWduZWQgbV9ncm91cExldmVsOwotICAgIGJvb2wgbV9zZWFyY2hpbmdG
b3JOb2RlOwotICAgIGJvb2wgbV9tb25pdG9yaW5nWEhSOwogICAgIENvbnNvbGVNZXNzYWdlKiBt
X3ByZXZpb3VzTWVzc2FnZTsKLSAgICBib29sIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQ7CiAg
ICAgYm9vbCBtX3NldHRpbmdzTG9hZGVkOwogICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kPiBt
X2luc3BlY3RvckJhY2tlbmQ7CiAgICAgT3duUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAppbmRleCA3NzYxNmRhLi40ODEyYjJh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmNwcApAQCAtNDcsNyArNDcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUgPSAiaW5zcGVj
dG9yQXR0YWNoZWRIZWlnaHQiOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hl
ZEhlaWdodCA9IDMwMDsKIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQg
PSAyNTAuMGY7CiBzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8g
PSAwLjc1ZjsKQEAgLTEwOCw3ICsxMDcsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWw6OmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKICAg
ICB1bnNpZ25lZCB0b3RhbEhlaWdodCA9IG1fZnJvbnRlbmRQYWdlLT5tYWluRnJhbWUoKS0+dmll
dygpLT52aXNpYmxlSGVpZ2h0KCkgKyBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwogICAgIHVuc2lnbmVk
IGF0dGFjaGVkSGVpZ2h0ID0gY29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQs
IHRvdGFsSGVpZ2h0KTsKLSAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldFNldHRpbmcoaW5z
cGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lLCBTdHJpbmc6Om51bWJlcihhdHRhY2hlZEhlaWdodCkp
OworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQo
YXR0YWNoZWRIZWlnaHQpOwogICAgIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGF0dGFjaGVkSGVp
Z2h0KTsKIH0KIApAQCAtMTM0LDEwICsxMzMsOSBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWw6OnNldEF0dGFjaGVkV2luZG93KGJvb2wgYXR0YWNoZWQpCiB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWw6OnJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCgpCiB7CiAg
ICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0g
ICAgU3RyaW5nIGF0dGFjaGVkSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXR0aW5n
KGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7CisgICAgaW50IGF0dGFjaGVkSGVpZ2h0ID0g
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpOwogICAgIGJv
b2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgaW50IGhlaWdodCA9IGF0dGFjaGVkSGVpZ2h0LnRvSW50
KCZzdWNjZXNzKTsKLSAgICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGhlaWdodCkgOiBkZWZhdWx0QXR0YWNoZWRIZWlnaHQ7CisgICAg
dW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihhdHRhY2hlZEhlaWdodCkgOiBkZWZhdWx0QXR0YWNoZWRIZWlnaHQ7CiAgICAgCiAgICAgLy8g
VGhpcyBjYWxsIG1pZ2h0IG5vdCBnbyB0aHJvdWdoIChpZiB0aGUgd2luZG93IHN0YXJ0cyBvdXQg
ZGV0YWNoZWQpLCBidXQgaWYgdGhlIHdpbmRvdyBpcyBpbml0aWFsbHkgY3JlYXRlZCBhdHRhY2hl
ZCwKICAgICAvLyBJbnNwZWN0b3JDb250cm9sbGVyOjphdHRhY2hXaW5kb3cgaXMgbmV2ZXIgY2Fs
bGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBzZXQgdGhlIGF0dGFjaGVkV2luZG93SGVp
Z2h0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmU0NjhmNzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0
b3JDbGllbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNkZWZpbmUgSU5JVF9JTlNQ
RUNUT1JfUFJPUEVSVFkodHlwZSwgbmFtZSwgc2V0dGVyTmFtZSwgZGVmYXVsdFZhbHVlLCBzdGF0
ZU5hbWUsIHByZWZlcmVuY2VOYW1lKVwKKyAgICBtXyMjbmFtZSA9IGRlZmF1bHRWYWx1ZTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFByb3BlcnR5VHlwZT4KK3N0cnVjdCBQcm9wZXJ0eVR5cGVUcmFp
dHMgeworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBQcm9wZXJ0eVR5cGVUcmFpdHM8Ym9vbD4g
eworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB0b0luc3BlY3RvclZhbHVl
KGJvb2wgdmFsdWUpIHsgcmV0dXJuIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSk7
IH0KKyAgICBzdGF0aWMgYm9vbCBmcm9tSW5zcGVjdG9yVmFsdWUoSW5zcGVjdG9yVmFsdWUqIGlu
c3BlY3RvclZhbHVlLCBib29sKiB2YWx1ZSkgeyByZXR1cm4gaW5zcGVjdG9yVmFsdWUtPmFzQm9v
bGVhbih2YWx1ZSk7IH0KKyAgICBzdGF0aWMgYm9vbCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpIHsgcmV0dXJuIHZhbHVlID09ICJ0cnVlIiA/IHRydWUgOiBmYWxzZTsgfQorfTsKKwor
dGVtcGxhdGUgPD4KK3N0cnVjdCBQcm9wZXJ0eVR5cGVUcmFpdHM8U3RyaW5nPiB7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHRvSW5zcGVjdG9yVmFsdWUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkgeyByZXR1cm4gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUpOyB9Cisg
ICAgc3RhdGljIGJvb2wgZnJvbUluc3BlY3RvclZhbHVlKEluc3BlY3RvclZhbHVlKiBpbnNwZWN0
b3JWYWx1ZSwgU3RyaW5nKiB2YWx1ZSkgeyByZXR1cm4gaW5zcGVjdG9yVmFsdWUtPmFzU3RyaW5n
KHZhbHVlKTsgfQorICAgIHN0YXRpYyBTdHJpbmcgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKSB7IHJldHVybiB2YWx1ZTsgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBQcm9wZXJ0
eVR5cGVUcmFpdHM8bG9uZz4geworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiB0b0luc3BlY3RvclZhbHVlKGxvbmcgdmFsdWUpIHsgcmV0dXJuIEluc3BlY3RvckJhc2ljVmFs
dWU6OmNyZWF0ZSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgYm9vbCBmcm9tSW5zcGVjdG9yVmFsdWUo
SW5zcGVjdG9yVmFsdWUqIGluc3BlY3RvclZhbHVlLCBsb25nKiB2YWx1ZSkgeyByZXR1cm4gaW5z
cGVjdG9yVmFsdWUtPmFzTnVtYmVyKHZhbHVlKTsgfQorICAgIHN0YXRpYyBsb25nIGZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUudG9JbnQoKTsgfQorfTsKKwor
SW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKEluc3BlY3RvckNsaWVudCogY2xpZW50KQor
ICAgIDogbV9jbGllbnQoY2xpZW50KQoreworICAgIElOU1BFQ1RPUl9TVEFURV9QUk9QRVJUSUVT
KElOSVRfSU5TUEVDVE9SX1BST1BFUlRZKTsKK30KKwordm9pZCBJbnNwZWN0b3JTdGF0ZTo6cmVz
dG9yZUZyb21JbnNwZWN0b3JDb29raWUoY29uc3QgU3RyaW5nJiBqc29uKQoreworICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4ganNvblZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihq
c29uKTsKKyAgICBpZiAoIWpzb25WYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4ganNvbk9iamVjdCA9IGpzb25WYWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICBpZiAoIWpzb25PYmplY3QpCisgICAgICAgIHJldHVybjsKKworI2RlZmluZSBSRVNUT1JFX0ZS
T01fQ09PS0lFKHR5cGUsIG5hbWUsIHNldHRlck5hbWUsIGRlZmF1bHRWYWx1ZSwgc3RhdGVOYW1l
LCBwcmVmZXJlbmNlTmFtZSlcCisgICAgUHJvcGVydHlUeXBlVHJhaXRzPHR5cGU+Ojpmcm9tSW5z
cGVjdG9yVmFsdWUoanNvbk9iamVjdC0+Z2V0KCJuYW1lIikuZ2V0KCksICZtXyMjbmFtZSk7XAor
CisgICAgSU5TUEVDVE9SX1NUQVRFX1BST1BFUlRJRVMoUkVTVE9SRV9GUk9NX0NPT0tJRSk7Cit9
CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RhdGVP
YmplY3RGb3JGcm9udGVuZCgpCit7CisjZGVmaW5lIEZJTExfU1RBVEVfT0JKRUNUKHR5cGUsIG5h
bWUsIHNldHRlck5hbWUsIGRlZmF1bHRWYWx1ZSwgc3RhdGVOYW1lLCBwcmVmZXJlbmNlTmFtZSlc
CisgICAgaWYgKHN0YXRlTmFtZSlcCisgICAgICAgIHN0YXRlT2JqZWN0LT5zZXRWYWx1ZSgoY29u
c3QgY2hhciogY29uc3Qpc3RhdGVOYW1lLCBQcm9wZXJ0eVR5cGVUcmFpdHM8dHlwZT46OnRvSW5z
cGVjdG9yVmFsdWUobV8jI25hbWUpKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0
YXRlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBJTlNQRUNUT1JfU1RB
VEVfUFJPUEVSVElFUyhGSUxMX1NUQVRFX09CSkVDVCk7CisgICAgcmV0dXJuIHN0YXRlT2JqZWN0
LnJlbGVhc2UoKTsKK30KKwordm9pZCBJbnNwZWN0b3JTdGF0ZTo6cmVzdG9yZUZyb21TZXR0aW5n
cygpCit7CisjZGVmaW5lIFJFU1RPUkVfRlJPTV9TRVRUSU5HUyh0eXBlLCBuYW1lLCBzZXR0ZXJO
YW1lLCBkZWZhdWx0VmFsdWUsIHN0YXRlTmFtZSwgcHJlZmVyZW5jZU5hbWUpXAorICAgIGlmIChw
cmVmZXJlbmNlTmFtZSkge1wKKyAgICAgICAgU3RyaW5nIHZhbHVlO1wKKyAgICAgICAgbV9jbGll
bnQtPnBvcHVsYXRlU2V0dGluZygoY29uc3QgY2hhciogY29uc3QpcHJlZmVyZW5jZU5hbWUsICZ2
YWx1ZSk7XAorICAgICAgICBtXyMjbmFtZSA9IFByb3BlcnR5VHlwZVRyYWl0czx0eXBlPjo6ZnJv
bVN0cmluZyh2YWx1ZSk7XAorICAgIH0KKworICAgIElOU1BFQ1RPUl9TVEFURV9QUk9QRVJUSUVT
KFJFU1RPUkVfRlJPTV9TRVRUSU5HUyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3RhdGU6OnVwZGF0
ZUNvb2tpZSgpCit7CisjZGVmaW5lIFNBVkVfVE9fQ09PS0lFKHR5cGUsIG5hbWUsIHNldHRlck5h
bWUsIGRlZmF1bHRWYWx1ZSwgc3RhdGVOYW1lLCBwcmVmZXJlbmNlTmFtZSlcCitjb29raWVPYmpl
Y3QtPnNldFZhbHVlKCJuYW1lIiwgUHJvcGVydHlUeXBlVHJhaXRzPHR5cGU+Ojp0b0luc3BlY3Rv
clZhbHVlKG1fIyNuYW1lKSk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb29raWVP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIElOU1BFQ1RPUl9TVEFURV9Q
Uk9QRVJUSUVTKFNBVkVfVE9fQ09PS0lFKTsKKyAgICBtX2NsaWVudC0+dXBkYXRlSW5zcGVjdG9y
U3RhdGVDb29raWUoY29va2llT2JqZWN0LT50b0pTT05TdHJpbmcoKSk7Cit9CisKK3RlbXBsYXRl
IDw+Cit2b2lkIEluc3BlY3RvclN0YXRlOjpwcm9wZXJ0eVdhc1VwZGF0ZWQ8Ym9vbCwgYm9vbD4o
Y29uc3QgYm9vbCYgdmFsdWUsIGNvbnN0IGNoYXIqIGNvbnN0IHByZWZlcmVuY2VOYW1lKQorewor
ICAgIHVwZGF0ZUNvb2tpZSgpOworICAgIGlmIChwcmVmZXJlbmNlTmFtZSkKKyAgICAgICAgbV9j
bGllbnQtPnN0b3JlU2V0dGluZyhwcmVmZXJlbmNlTmFtZSwgdmFsdWUgPyAidHJ1ZSIgOiAiZmFs
c2UiKTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgSW5zcGVjdG9yU3RhdGU6OnByb3BlcnR5V2Fz
VXBkYXRlZDxTdHJpbmcsIFN0cmluZz4oY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgY2hhciog
Y29uc3QgcHJlZmVyZW5jZU5hbWUpCit7CisgICAgdXBkYXRlQ29va2llKCk7CisgICAgaWYgKHBy
ZWZlcmVuY2VOYW1lKQorICAgICAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKHByZWZlcmVuY2VO
YW1lLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIEluc3BlY3RvclN0YXRlOjpwcm9w
ZXJ0eVdhc1VwZGF0ZWQ8bG9uZywgbG9uZz4oY29uc3QgbG9uZyYgdmFsdWUsIGNvbnN0IGNoYXIq
IGNvbnN0IHByZWZlcmVuY2VOYW1lKQoreworICAgIHVwZGF0ZUNvb2tpZSgpOworICAgIGlmIChw
cmVmZXJlbmNlTmFtZSkKKyAgICAgICAgbV9jbGllbnQtPnN0b3JlU2V0dGluZyhwcmVmZXJlbmNl
TmFtZSwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0YXRlLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YTNmZjkKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JTdGF0ZV9oCisjZGVmaW5lIEluc3BlY3RvclN0YXRl
X2gKKworI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5zcGVjdG9yQ2xpZW50Owor
CisjZGVmaW5lIElOU1BFQ1RPUl9TVEFURV9QUk9QRVJUSUVTKEFQUExZKVwKKyAgICBBUFBMWShi
b29sLCBtb25pdG9yaW5nWEhSLCBzZXRNb25pdG9yaW5nWEhSLCBmYWxzZSwgIm1vbml0b3JpbmdY
SFIiLCAieGhyTW9uaXRvciIpO1wKKyAgICBBUFBMWShib29sLCByZXNvdXJjZVRyYWNraW5nRW5h
YmxlZCwgc2V0UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQsIGZhbHNlLCAicmVzb3VyY2VUcmFja2lu
Z0VuYWJsZWQiLCAwKTtcCisgICAgQVBQTFkoYm9vbCwgcmVzb3VyY2VUcmFja2luZ0Fsd2F5c0Vu
YWJsZWQsIHNldFJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkLCBmYWxzZSwgMCwgInJlc291
cmNlVHJhY2tpbmdFbmFibGVkIik7XAorICAgIEFQUExZKGJvb2wsIHRpbWVsaW5lUHJvZmlsZXJF
bmFibGVkLCBzZXRUaW1lbGluZVByb2ZpbGVyRW5hYmxlZCwgZmFsc2UsICJ0aW1lbGluZVByb2Zp
bGVyRW5hYmxlZCIsIDApO1wKKyAgICBBUFBMWShib29sLCBzZWFyY2hpbmdGb3JOb2RlLCBzZXRT
ZWFyY2hpbmdGb3JOb2RlLCBmYWxzZSwgInNlYXJjaGluZ0Zvck5vZGVFbmFibGVkIiwgMCk7XAor
ICAgIEFQUExZKGJvb2wsIHByb2ZpbGVyQWx3YXlzRW5hYmxlZCwgc2V0UHJvZmlsZXJBbHdheXNF
bmFibGVkLCBmYWxzZSwgMCwgInByb2ZpbGVyRW5hYmxlZCIpO1wKKyAgICBBUFBMWShTdHJpbmcs
IGZyb250ZW5kU2V0dGluZ3MsIHNldEZyb250ZW5kU2V0dGluZ3MsICIiLCAwLCAiZnJvbnRlbmRT
ZXR0aW5ncyIpO1wKKyAgICBBUFBMWShib29sLCBkZWJ1Z2dlckFsd2F5c0VuYWJsZWQsIHNldERl
YnVnZ2VyQWx3YXlzRW5hYmxlZCwgZmFsc2UsIDAsICJkZWJ1Z2dlckVuYWJsZWQiKTtcCisgICAg
QVBQTFkoU3RyaW5nLCBsYXN0QWN0aXZlUGFuZWwsIHNldExhc3RBY3RpdmVQYW5lbCwgSW5zcGVj
dG9yQ29udHJvbGxlcjo6TGFzdEFjdGl2ZVBhbmVsLCAwLCAibGFzdEFjdGl2ZVBhbmVsIik7XAor
ICAgIEFQUExZKGJvb2wsIGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkLCBzZXRJbnNwZWN0b3JTdGFy
dHNBdHRhY2hlZCwgdHJ1ZSwgMCwgIkluc3BlY3RvclN0YXJ0c0F0dGFjaGVkIik7XAorICAgIEFQ
UExZKGxvbmcsIGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0LCBzZXRJbnNwZWN0b3JBdHRhY2hlZEhl
aWdodCwgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVmYXVsdEF0dGFjaGVkSGVpZ2h0LCAwLCAiaW5z
cGVjdG9yQXR0YWNoZWRIZWlnaHQiKTtcCisgICAgQVBQTFkobG9uZywgcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSwgc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSwgMCwgInBhdXNlT25FeGNlcHRpb25z
U3RhdGUiLCAwKTsKKworI2RlZmluZSBERUNMQVJFX0lOU1BFQ1RPUl9QUk9QRVJUWSh0eXBlLCBu
YW1lLCBzZXR0ZXJOYW1lLCBkZWZhdWx0VmFsdWUsIHN0YXRlTmFtZSwgcHJlZmVyZW5jZU5hbWUp
XAordHlwZSBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV8jI25hbWU7IH1cCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQXJnVHlwZT5cCit2b2lkIHNldHRlck5hbWUoY29uc3QgQXJnVHlwZSYgdmFsdWUpXAor
e1wKKyAgICBpZiAobV8jI25hbWUgPT0gdmFsdWUpXAorICAgICAgICByZXR1cm47XAorICAgIG1f
IyNuYW1lID0gdmFsdWU7XAorICAgIHByb3BlcnR5V2FzVXBkYXRlZDx0eXBlLCBBcmdUeXBlPiht
XyMjbmFtZSwgcHJlZmVyZW5jZU5hbWUpO1wKK31cCitwcml2YXRlOlwKKyAgICB0eXBlIG1fIyNu
YW1lO1wKK3B1YmxpYzoKKworY2xhc3MgSW5zcGVjdG9yU3RhdGUgeworcHVibGljOgorICAgIElu
c3BlY3RvclN0YXRlKEluc3BlY3RvckNsaWVudCogY2xpZW50KTsKKworICAgIElOU1BFQ1RPUl9T
VEFURV9QUk9QRVJUSUVTKERFQ0xBUkVfSU5TUEVDVE9SX1BST1BFUlRZKTsKKworICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRTdGF0ZU9iamVjdEZvckZyb250ZW5kKCk7CisgICAg
dm9pZCByZXN0b3JlRnJvbUluc3BlY3RvckNvb2tpZShjb25zdCBTdHJpbmcmIGpzb25TdHJpbmcp
OworICAgIHZvaWQgcmVzdG9yZUZyb21TZXR0aW5ncygpOworCitwcml2YXRlOgorICAgIHZvaWQg
dXBkYXRlQ29va2llKCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJvcGVydHlUeXBlLCB0eXBl
bmFtZSBBcmdUeXBlPiB2b2lkIHByb3BlcnR5V2FzVXBkYXRlZChjb25zdCBBcmdUeXBlJiB2YWx1
ZSwgY29uc3QgY2hhciogY29uc3QgcHJlZmVyZW5jZU5hbWUpOworCisgICAgSW5zcGVjdG9yQ2xp
ZW50KiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
ICFkZWZpbmVkKEluc3BlY3RvclN0YXRlX2gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmNwcAppbmRleCA0NTJmYTdmLi5mY2NiMjc2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5jcHAKQEAgLTY1Myw2ICs2NTMsMTQgQEAgYm9vbCBJbnNwZWN0b3JPYmplY3Q6OmdldE51
bWJlcihjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSogb3V0cHV0KSBjb25zdAogICAgIHJldHVy
biB2YWx1ZS0+YXNOdW1iZXIob3V0cHV0KTsKIH0KIAorYm9vbCBJbnNwZWN0b3JPYmplY3Q6Omdl
dE51bWJlcihjb25zdCBTdHJpbmcmIG5hbWUsIGxvbmcqIG91dHB1dCkgY29uc3QKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOworICAgIGlmICghdmFsdWUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdmFsdWUtPmFzTnVtYmVyKG91dHB1
dCk7Cit9CisKIGJvb2wgSW5zcGVjdG9yT2JqZWN0OjpnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBu
YW1lLCBTdHJpbmcqIG91dHB1dCkgY29uc3QKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHZhbHVlID0gZ2V0KG5hbWUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAppbmRleCAz
OTEzNzJlLi5lYmY0MzUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtMTA2
LDYgKzEwNiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVj
dG9yQmFzaWNWYWx1ZSh2YWx1ZSkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShsb25nIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CisgICAgfQorCiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGRvdWJsZSB2
YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFzaWNW
YWx1ZSh2YWx1ZSkpOwpAQCAtMTIyLDYgKzEyNyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
ZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShib29sIHZhbHVlKSA6IEluc3BlY3RvclZhbHVl
KFR5cGVCb29sZWFuKSwgbV9ib29sVmFsdWUodmFsdWUpIHsgfQogICAgIGV4cGxpY2l0IEluc3Bl
Y3RvckJhc2ljVmFsdWUoaW50IHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVOdW1iZXIpLCBt
X2RvdWJsZVZhbHVlKChkb3VibGUpdmFsdWUpIHsgfQorICAgIGV4cGxpY2l0IEluc3BlY3RvckJh
c2ljVmFsdWUobG9uZyB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlTnVtYmVyKSwgbV9kb3Vi
bGVWYWx1ZSgoZG91YmxlKXZhbHVlKSB7IH0KICAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1Zh
bHVlKGRvdWJsZSB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlTnVtYmVyKSwgbV9kb3VibGVW
YWx1ZSh2YWx1ZSkgeyB9CiAKICAgICB1bmlvbiB7CkBAIC0xODEsNiArMTg3LDcgQEAgcHVibGlj
OgogICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAg
ICBib29sIGdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRwdXQpIGNvbnN0
OwogICAgIGJvb2wgZ2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKiBvdXRwdXQp
IGNvbnN0OworICAgIGJvb2wgZ2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgbG9uZyogb3V0
cHV0KSBjb25zdDsKICAgICBib29sIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmlu
Zyogb3V0cHV0KSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2Jq
ZWN0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gZ2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dl
YktpdC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggZGI5ODUwYi4u
OWUwMmU3YSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0xMC0wNiAgSWx5YSBUaWtob25vdnNr
eSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW5zcGVjdG9yIHNldHRpbmdzL3Byb3Bl
cnRpZXMvc3RhdGVzIG1hbmFnZW1lbnQKKyAgICAgICAgc2hvdWxkIGJlIGV4dHJhY3RlZCBpbnRv
IHNlcGFyYXRlIGNsYXNzLgorCisgICAgICAgIFdlIGhhdmUgYSBsb3Qgb2YgZmxhZ3MvdmFsdWVz
IGluIEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIFNvbWUgZmxhZ3MgYXJlIHBlcnNpc3Rp
bmcgaW50byBwcm9maWxlLgorICAgICAgICBPdGhlcnMgYXJlIHBhcnQgb2YgaW5zcGVjdG9yIHN0
YXRlIGZvciBmcm9udGVuZC4KKyAgICAgICAgQWxsIHRoZXNlIGZsYWdzIHNob3VsZCBrZWVwIHRo
ZWlyIHZhbHVlcyBhZnRlciBuYXZpZ2F0aW9uLgorICAgICAgICBJdCdkIGJlIGJldHRlciB0byBl
eHRyYWN0IHRoZXNlIGZsYWdzL3ZhbHVlcyBpbnRvIHNlcGFyYXRlCisgICAgICAgIGNsYXNzIHdo
aWNoIHdpbGwgY2FyZSBhYm91dCB0aGVpcnMgbGlmZXRpbWUuCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mjc1CisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW06CisgICAgICAgICgtW1dlYkluc3BlY3Rvcldp
bmRvd0NvbnRyb2xsZXIgc2hvd1dpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2lu
ZG93Q29udHJvbGxlciBhdHRhY2hdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29u
dHJvbGxlciBkZXRhY2hdKToKKwogMjAxMC0xMC0wNyAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQg
YS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbSBiL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCmluZGV4IGQ0ZDAyMTMu
LmQ2ZGM4NzkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9y
Q2xpZW50Lm1tCkBAIC0zNTgsOCArMzU4LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6dXBkYXRlV2luZG93VGl0bGUoKSBjb25zdAogICAgIF92aXNpYmxlID0gWUVTOwogICAg
IAogICAgIC8vIElmIG5vIHByZWZlcmVuY2UgaXMgc2V0IC0gZGVmYXVsdCB0byBhbiBhdHRhY2hl
ZCB3aW5kb3cuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbnNwZWN0b3IgTGF5b3V0VGVzdHMuCi0g
ICAgU3RyaW5nIHNob3VsZEF0dGFjaCA9IFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLT5zZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0
YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSk7Ci0gICAgX3Nob3VsZEF0dGFjaCA9IHNob3VsZEF0
dGFjaCAhPSAiZmFsc2UiOworICAgIF9zaG91bGRBdHRhY2ggPSBbX2luc3BlY3RlZFdlYlZpZXcg
cGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsK
ICAgICAKICAgICBpZiAoX3Nob3VsZEF0dGFjaCAmJiAhX2Zyb250ZW5kQ2xpZW50LT5jYW5BdHRh
Y2hXaW5kb3coKSkKICAgICAgICAgX3Nob3VsZEF0dGFjaCA9IE5POwpAQCAtMzk0LDcgKzM5Myw3
IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkg
Y29uc3QKICAgICBpZiAoX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3KQogICAgICAgICByZXR1
cm47CiAKLSAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+c2V0U2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hl
ZFNldHRpbmdOYW1lKCksICJ0cnVlIik7CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKHRydWUpOwog
CiAgICAgW3NlbGYgY2xvc2VdOwogICAgIFtzZWxmIHNob3dXaW5kb3c6bmlsXTsKQEAgLTQwNSw3
ICs0MDQsNyBAQCB2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dU
aXRsZSgpIGNvbnN0CiAgICAgaWYgKCFfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLT5zZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0
c0F0dGFjaGVkU2V0dGluZ05hbWUoKSwgImZhbHNlIik7CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3
IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVk
KGZhbHNlKTsKIAogICAgIFtzZWxmIGNsb3NlXTsKICAgICBbc2VsZiBzaG93V2luZG93Om5pbF07
CmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1dlYktpdC93aW4vQ2hhbmdlTG9n
CmluZGV4IDE1YTEyMTcuLjAyNmNmNmUgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vQ2hhbmdlTG9n
CisrKyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMTAtMDYg
IElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGluc3BlY3Rv
ciBzZXR0aW5ncy9wcm9wZXJ0aWVzL3N0YXRlcyBtYW5hZ2VtZW50CisgICAgICAgIHNob3VsZCBi
ZSBleHRyYWN0ZWQgaW50byBzZXBhcmF0ZSBjbGFzcy4KKworICAgICAgICBXZSBoYXZlIGEgbG90
IG9mIGZsYWdzL3ZhbHVlcyBpbiBJbnNwZWN0b3JDb250cm9sbGVyLgorICAgICAgICBTb21lIGZs
YWdzIGFyZSBwZXJzaXN0aW5nIGludG8gcHJvZmlsZS4KKyAgICAgICAgT3RoZXJzIGFyZSBwYXJ0
IG9mIGluc3BlY3RvciBzdGF0ZSBmb3IgZnJvbnRlbmQuCisgICAgICAgIEFsbCB0aGVzZSBmbGFn
cyBzaG91bGQga2VlcCB0aGVpciB2YWx1ZXMgYWZ0ZXIgbmF2aWdhdGlvbi4KKyAgICAgICAgSXQn
ZCBiZSBiZXR0ZXIgdG8gZXh0cmFjdCB0aGVzZSBmbGFncy92YWx1ZXMgaW50byBzZXBhcmF0ZQor
ICAgICAgICBjbGFzcyB3aGljaCB3aWxsIGNhcmUgYWJvdXQgdGhlaXJzIGxpZmV0aW1lLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI3NQorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3cpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKToKKwog
MjAxMC0xMC0wNyAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAgYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5jcHAKaW5kZXggMWI3OWRkZS4uMDMwMjAwOSAxMDA2NDQKLS0t
IGEvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBi
L1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMjcz
LDcgKzI3Myw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFjaFdpbmRv
dygpCiAgICAgaWYgKG1fYXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faW5zcGVj
dGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRpbmcoSW5z
cGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAi
dHJ1ZSIpOworICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKHRydWUpOwogCiAgICAgY2xvc2VXaW5k
b3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogICAgIHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0
aW9ucygpOwpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmRldGFjaFdpbmRvdygpCiAgICAgaWYgKCFtX2F0dGFjaGVkKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5zZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVk
U2V0dGluZ05hbWUoKSwgImZhbHNlIik7CisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoZmFsc2Up
OwogCiAgICAgY2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogICAgIHNob3dXaW5k
b3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwpAQCAtMzY0LDggKzM2NCw3IEBAIHZvaWQgV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpCiAg
ICAgICAgIHNob3VsZEF0dGFjaCA9IHRydWU7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIElmIG5v
IHByZWZlcmVuY2UgaXMgc2V0IC0gZGVmYXVsdCB0byBhbiBhdHRhY2hlZCB3aW5kb3cuIFRoaXMg
aXMgaW1wb3J0YW50IGZvciBpbnNwZWN0b3IgTGF5b3V0VGVzdHMuCi0gICAgICAgIFN0cmluZyBz
aG91bGRBdHRhY2hQcmVmID0gbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+c2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNB
dHRhY2hlZFNldHRpbmdOYW1lKCkpOwotICAgICAgICBzaG91bGRBdHRhY2ggPSBzaG91bGRBdHRh
Y2hQcmVmICE9ICJmYWxzZSI7CisgICAgICAgIHNob3VsZEF0dGFjaCA9IG1faW5zcGVjdGVkV2Vi
Vmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkKCk7CiAKICAgICAgICAgaWYgKHNob3VsZEF0dGFjaCAmJiAhY2FuQXR0YWNoV2luZG93KCkp
CiAgICAgICAgICAgICBzaG91bGRBdHRhY2ggPSBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70348</attachid>
            <date>2010-10-09 02:26:03 -0700</date>
            <delta_ts>2010-10-09 11:57:46 -0700</delta_ts>
            <desc>[patch] OOP version for review.</desc>
            <filename>inspector.oop</filename>
            <type>text/plain</type>
            <size>44715</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDUzMzFlYWUuLjI3Y2FlYzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExNCw2ICsxMTE0LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2M0ZGE2My4uNGQxY2E5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAxMC0xMC0wOSAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW5zcGVjdG9yIHNldHRpbmdzL3By
b3BlcnRpZXMvc3RhdGVzIG1hbmFnZW1lbnQKKyAgICAgICAgc2hvdWxkIGJlIGV4dHJhY3RlZCBp
bnRvIHNlcGFyYXRlIGNsYXNzLgorCisgICAgICAgIFdlIGhhdmUgYSBsb3Qgb2YgZmxhZ3MvdmFs
dWVzIGluIEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIFNvbWUgZmxhZ3MgYXJlIHBlcnNp
c3RpbmcgaW50byBwcm9maWxlLgorICAgICAgICBPdGhlcnMgYXJlIHBhcnQgb2YgaW5zcGVjdG9y
IHN0YXRlIGZvciBmcm9udGVuZC4KKyAgICAgICAgQWxsIHRoZXNlIGZsYWdzIHNob3VsZCBrZWVw
IHRoZWlyIHZhbHVlcyBhZnRlciBuYXZpZ2F0aW9uLgorICAgICAgICBJdCdkIGJlIGJldHRlciB0
byBleHRyYWN0IHRoZXNlIGZsYWdzL3ZhbHVlcyBpbnRvIHNlcGFyYXRlCisgICAgICAgIGNsYXNz
IHdoaWNoIHdpbGwgY2FyZSBhYm91dCB0aGVpcnMgbGlmZXRpbWUuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mjc1CisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
LmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQXR0YWNo
ZWRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2VhcmNo
aW5nRm9yTm9kZUluUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpnZXRJbnNwZWN0b3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNldHRpbmdzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3JlTGFzdEFjdGl2ZVBhbmVs
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmhhbmRs
ZU1vdXNlUHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
U2VhcmNoaW5nRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRNb25pdG9yaW5nWEhSRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzaG93UGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmdldFRyYWNrZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aWRlbnRpZmllckZvckluaXRp
YWxSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291
cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbnN1cmVTZXR0aW5nc0xvYWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWVsaW5lUHJvZmls
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmls
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2Zp
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVn
Z2VyRnJvbUZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpc2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
Ojpsb2FkQnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6c2F2ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNo
YW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWw6OnJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JPYmplY3Q6OmdldE51bWJlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2ljVmFsdWU6Okluc3BlY3RvckJhc2ljVmFs
dWUpOgorCiAyMDEwLTEwLTA5ICBQcmF0aWsgU29sYW5raSAgPHBzb2xhbmtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNGEyNTQ3Yi4u
OGNmZTUzOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCkBAIC0xODI5LDYgKzE4MjksOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZS5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5j
cHAgXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmggXAogCVdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0b3JhZ2VBZ2VudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgppbmRleCBkMWRjMDIxLi45NzQ0MDZjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEyMDUs
NyArMTIwNSw2IEBAIF9fWk43V2ViQ29yZTIyR2VvbG9jYXRpb25TZXJ2aWNlTW9jazhzZXRFcnJv
ckVOM1dURjEwUGFzc1JlZlB0cklOU18xM1Bvc2l0aW9uRXJyCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMHNldFNldHRp
bmdFUktOM1dURjZTdHJpbmdFUzRfCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIx
MkNvbnNvbGVQYW5lbEUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyU2NyaXB0
c1BhbmVsRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTNQcm9maWxlc1BhbmVs
RQpAQCAtMTIxNiwxMiArMTIxNSwxMiBAQCBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIxNWRpc2FibGVQcm9maWxlckViCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIx
OGRpc2Nvbm5lY3RGcm9udGVuZEV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIy
MHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjIxc3RhcnRUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjIzaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyMjVldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kRWxSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRFTjNXVEYxMFBhc3NPd25QdHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQorX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hl
ZEViCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNlckluaXRpYXRl
ZFByb2ZpbGluZ0V2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnN0b3BVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nRXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjM0
aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2Ci1fX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIzNGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWVFdgogX19a
Tks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjMxaXNSZWNvcmRpbmdVc2VySW5pdGlhdGVk
UHJvZmlsZUV2CiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVwcm9maWxlckVu
YWJsZWRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dFdgpAQCAtMTI0
MSw3ICsxMjQwLDYgQEAgX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
QzJFUE5TXzE5SW5zcGVjdG9yQ29udHJvbGxlckVQTlNfNFBhZ2UKIF9fWk43V2ViQ29yZTI4SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbEQyRXYKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIxN2RyYXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29udGV4dEUKIF9fWk5L
N1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI3ZW5hYmxlZEV2Ci1fX1pOSzdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyN3NldHRpbmdFUktOM1dURjZTdHJpbmdFCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShKQVZBX0JSSURHRSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMzM2N2NlZS4uZTdlNmMyNiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE5Mzcs
NiArMTkzNyw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdl
bnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCcsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgnLAorICAgICAgICAgICAg
J2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9J
bnNwZWN0b3JTdGF0ZS5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFn
ZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2Vu
dC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAnLApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5k
ZXggOWIxYzUzNC4uMGRiODNjYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDAyLDYgKzEwMDIsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2UuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIFwKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dC5jcHAgXApAQCAtMTg4Miw2ICsxODgzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCBcCisgICAg
aW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9y
YWdlQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagppbmRleCBkNjFiNDlmLi4yMmU2MGFkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKQEAgLTYzMTkzLDYgKzYzMTkzLDE0IEBACiAJCQkJPg0KIAkJCTwv
RmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0
b3JTdGF0ZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3RhdGUuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JT
dG9yYWdlQWdlbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTRiM2NhMi4uNTE0MGI5OSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMzQsNiArMTEzNCw4IEBA
CiAJCTRGNEY1RkZCMTFDQkQyRTEwMEExODZCRiAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjRGNUZGQTExQ0JE
MkQyMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwICovOyB9OwogCQk0RjcwN0E5OTEx
RUY2Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY3MDdBOTcxMUVGNjc5NDAw
QUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCAqLzsgfTsKIAkJNEY3MDdB
OUExMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjcwN0E5ODExRUY2Nzk0
MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCAqLzsgfTsKKwkJNEZBM0I5
MEExMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAv
KiBJbnNwZWN0b3JTdGF0ZS5jcHAgKi87IH07CisJCTRGQTNCOTBCMTI1Q0QxMjIwMDMwMEJBRCAv
KiBJbnNwZWN0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmggKi87
IH07CiAJCTRGRDhEMEYyMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhEMEYwMTE5Qzcx
OEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAqLzsgfTsKIAkJNEZEOEQwRjMxMTlDNzE4
QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhEMEYxMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2
ZW50LmggKi87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxODQ2NzBC
MDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MjA2LDYgKzcyMDgsOCBAQAogCQk0RjRGNUZGQzEx
Q0JEMzAxMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNEY3MDdBOTcxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEY3
MDdBOTgxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJB
RCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnNwZWN0b3JTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRG
QTNCOTA5MTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0RkQ4RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRHQ0V2ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEZEOEQwRjExMTlDNzE4QjAwMkZBODI1IC8q
IFNjcmlwdEdDRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0
R0NFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJB
MDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWNoZWRQYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjIwNCw2ICsx
MjIwOCw4IEBACiAJCQkJOUYwRDZCMkQxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2Zp
bGVyQWdlbnQuaCAqLywKIAkJCQk0MUYwNjIwMDBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9y
UmVzb3VyY2UuY3BwICovLAogCQkJCTQxRjA2MUZGMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JSZXNvdXJjZS5oICovLAorCQkJCTRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAvKiBJbnNwZWN0
b3JTdGF0ZS5jcHAgKi8sCisJCQkJNEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3Rv
clN0YXRlLmggKi8sCiAJCQkJN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0
b3JhZ2VBZ2VudC5jcHAgKi8sCiAJCQkJN0FCMEIxQkYxMjExQTYyMjAwQTc2OTQwIC8qIEluc3Bl
Y3RvclN0b3JhZ2VBZ2VudC5oICovLAogCQkJCTgyQUIxNzZGMTI1QzgyNjcwMEM1MDY5RCAvKiBJ
bnNwZWN0b3JTdHlsZVNoZWV0LmNwcCAqLywKQEAgLTIxMDkxLDYgKzIxMDk3LDcgQEAKIAkJCQk4
OTBBRTBFMTEyNTZBMDc5MDBGNTk2OEMgLyogRGlyZWN0b3J5UmVhZGVyQmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODJBQjE3NzQxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hl
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgyQUIxNzc2MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNw
ZWN0b3JVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTRGQTNCOTBCMTI1Q0QxMjIwMDMw
MEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMzY0MCw2ICsyMzY0
Nyw3IEBACiAJCQkJODkzQzQ4NTMxMjQ5OUIwNjAwMkIzRDg2IC8qIEpTRW50cnlTeW5jQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQUIxNzczMTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQUIxNzc1MTI1QzgyNjcw
MEM1MDY5RCAvKiBJbnNwZWN0b3JVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEZB
M0I5MEExMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAxYjY2ODUx
Li42ZGYwM2I5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApA
QCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JS
ZXNvdXJjZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yU3RvcmFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgpAQCAtMTE2LDQwICsxMTcsMTcgQEAgdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgZnJvbnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lID0gImZyb250ZW5kU2V0dGluZ3Mi
OwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGlu
Z05hbWUgPSAiZGVidWdnZXJFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsYXN0
QWN0aXZlUGFuZWwgPSAibGFzdEFjdGl2ZVBhbmVsIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBtb25pdG9yaW5nWEhSU2V0dGluZ05hbWUgPSAieGhyTW9uaXRvciI7Ci1zdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgcmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSA9ICJy
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgcHJvZmls
ZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUgPSAicHJvZmlsZXJFbmFibGVkIjsKLQotc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IG1vbml0b3JpbmdYSFJTdGF0ZU5hbWUgPSAibW9uaXRvcmluZ1hI
UkVuYWJsZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJlc291cmNlVHJhY2tpbmdFbmFi
bGVkU3RhdGVOYW1lID0gInJlc291cmNlVHJhY2tpbmdFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZFN0YXRlTmFtZSA9ICJzZWFyY2hpbmdG
b3JOb2RlRW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgdGltZWxpbmVQcm9maWxl
ckVuYWJsZWRTdGF0ZU5hbWUgPSAidGltZWxpbmVQcm9maWxlckVuYWJsZWQiOwotc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IHBhdXNlT25FeGNlcHRpb25zU3RhdGVTdGF0ZU5hbWUgPSAicGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0b3JB
dHRhY2hlZEhlaWdodE5hbWUgPSAiaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiOwotCiBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgeGhyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiWEhSIjsKIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBldmVudExpc3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAi
RXZlbnRMaXN0ZW5lciI7CiAKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6
Okxhc3RBY3RpdmVQYW5lbCA9ICJsYXN0QWN0aXZlUGFuZWwiOwogY29uc3QgY2hhciogY29uc3Qg
SW5zcGVjdG9yQ29udHJvbGxlcjo6RWxlbWVudHNQYW5lbCA9ICJlbGVtZW50cyI7CiBjb25zdCBj
aGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7
CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTY3JpcHRzUGFuZWwgPSAi
c2NyaXB0cyI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpQcm9maWxl
c1BhbmVsID0gInByb2ZpbGVzIjsKIAorY29uc3QgdW5zaWduZWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOwogCi1jb25zdCBTdHJpbmcmIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKQotewotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzZXR0aW5nTmFtZSwgKCJpbnNwZWN0b3JTdGFy
dHNBdHRhY2hlZCIpKTsKLSAgICByZXR1cm4gc2V0dGluZ05hbWU7Ci19Ci0KLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7Ci1zdGF0aWMgY29uc3QgZmxv
YXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwLjBmOwotc3RhdGljIGNvbnN0IGZsb2F0IG1h
eGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NWY7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWF4aW11bUNvbnNvbGVNZXNzYWdlcyA9IDEwMDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZXhw
aXJlQ29uc29sZU1lc3NhZ2VzU3RlcCA9IDEwMDsKIApAQCAtMTU5LDEzICsxMzcsMTAgQEAgSW5z
cGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0
b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fb3BlbmluZ0Zyb250ZW5kKGZhbHNlKQogICAgICwg
bV9jc3NTdG9yZShuZXcgSW5zcGVjdG9yQ1NTU3RvcmUodGhpcykpCiAgICAgLCBtX2V4cGlyZWRD
b25zb2xlTWVzc2FnZUNvdW50KDApCi0gICAgLCBtX3Nob3dBZnRlclZpc2libGUobGFzdEFjdGl2
ZVBhbmVsKQorICAgICwgbV9zaG93QWZ0ZXJWaXNpYmxlKExhc3RBY3RpdmVQYW5lbCkKICAgICAs
IG1fc2Vzc2lvblNldHRpbmdzKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpCiAgICAgLCBtX2dy
b3VwTGV2ZWwoMCkKLSAgICAsIG1fc2VhcmNoaW5nRm9yTm9kZShmYWxzZSkKLSAgICAsIG1fbW9u
aXRvcmluZ1hIUihmYWxzZSkKICAgICAsIG1fcHJldmlvdXNNZXNzYWdlKDApCi0gICAgLCBtX3Jl
c291cmNlVHJhY2tpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9zZXR0aW5nc0xvYWRlZChmYWxz
ZSkKICAgICAsIG1faW5zcGVjdG9yQmFja2VuZChJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUodGhp
cykpCiAgICAgLCBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG5ldyBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcih0aGlzKSkKQEAgLTE3Niw2ICsxNTEsNyBAQCBJbnNwZWN0b3JDb250cm9s
bGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xp
ZW50KQogICAgICwgbV9wcm9maWxlckFnZW50KEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0
ZSh0aGlzKSkKICNlbmRpZgogeworICAgIG1fc3RhdGUgPSBuZXcgSW5zcGVjdG9yU3RhdGUoY2xp
ZW50KTsKICAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwogICAgIEFTU0VSVF9BUkcoY2xpZW50
LCBjbGllbnQpOwogfQpAQCAtMjE5LDI3ICsxOTUsMzkgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9s
bGVyOjplbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLT5zZXR0aW5n
cygpLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAorYm9vbCBJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpCit7CisgICAgcmV0dXJuIG1fc3Rh
dGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKTsK
K30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hl
ZChib29sIGF0dGFjaGVkKQogewotICAgIFNldHRpbmdzOjppdGVyYXRvciBpdCA9IG1fc2V0dGlu
Z3MuZmluZChrZXkpOwotICAgIGlmIChpdCAhPSBtX3NldHRpbmdzLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRl
OjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCwgYXR0YWNoZWQpOworfQogCi0gICAgU3RyaW5nIHZh
bHVlOwotICAgIG1fY2xpZW50LT5wb3B1bGF0ZVNldHRpbmcoa2V5LCAmdmFsdWUpOwotICAgIG1f
c2V0dGluZ3Muc2V0KGtleSwgdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKK3ZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpCit7
CisgICAgbV9zdGF0ZS0+c2V0TG9uZyhJbnNwZWN0b3JTdGF0ZTo6aW5zcGVjdG9yQXR0YWNoZWRI
ZWlnaHQsIGhlaWdodCk7Cit9CisKK2ludCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JB
dHRhY2hlZEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6Omluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZWFyY2hpbmdGb3JOb2RlSW5Q
YWdlKCkgY29uc3QKIHsKLSAgICBtX3NldHRpbmdzLnNldChrZXksIHZhbHVlKTsKLSAgICBtX2Ns
aWVudC0+c3RvcmVTZXR0aW5nKGtleSwgdmFsdWUpOworICAgIHJldHVybiBtX3N0YXRlLT5nZXRC
b29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlKTsKK30KKworYm9vbCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tp
bmdFbmFibGVkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQXBwbGljYXRp
b25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKQogewotICAgIHNldFNldHRpbmcoZnJv
bnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lLCBzZXR0aW5ncyk7CisgICAgbV9zdGF0ZS0+c2V0U3Ry
aW5nKEluc3BlY3RvclN0YXRlOjpmcm9udGVuZFNldHRpbmdzLCBzZXR0aW5ncyk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcm
IHNldHRpbmdzSlNPTikKQEAgLTI0OSw1MCArMjM3LDI0IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzSlNPTikKIAog
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRJbnNwZWN0b3JTdGF0ZShSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0Piogc3RhdGUpCiB7Ci0gICAgKCpzdGF0ZSktPnNldEJvb2xlYW4obW9uaXRvcmlu
Z1hIUlN0YXRlTmFtZSwgbV9tb25pdG9yaW5nWEhSKTsKLSAgICAoKnN0YXRlKS0+c2V0Qm9vbGVh
bihyZXNvdXJjZVRyYWNraW5nRW5hYmxlZFN0YXRlTmFtZSwgbV9yZXNvdXJjZVRyYWNraW5nRW5h
YmxlZCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgaWYgKG1fZGVidWdn
ZXJBZ2VudCkKLSAgICAgICAgKCpzdGF0ZSktPnNldE51bWJlcihwYXVzZU9uRXhjZXB0aW9uc1N0
YXRlU3RhdGVOYW1lLCBtX2RlYnVnZ2VyQWdlbnQtPnBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSk7
CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnBhdXNlT25FeGNl
cHRpb25zU3RhdGUsIG1fZGVidWdnZXJBZ2VudC0+cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpKTsK
ICNlbmRpZgorICAgICpzdGF0ZSA9IG1fc3RhdGUtPmdldFN0YXRlT2JqZWN0Rm9yRnJvbnRlbmQo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp1cGRhdGVJbnNwZWN0b3JTdGF0ZUNv
b2tpZSgpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3RhdGUgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIHN0YXRlLT5zZXRCb29sZWFuKG1vbml0b3JpbmdYSFJTdGF0
ZU5hbWUsIG1fbW9uaXRvcmluZ1hIUik7Ci0gICAgc3RhdGUtPnNldEJvb2xlYW4ocmVzb3VyY2VU
cmFja2luZ0VuYWJsZWRTdGF0ZU5hbWUsIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpOwotICAg
IHN0YXRlLT5zZXRCb29sZWFuKHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkU3RhdGVOYW1lLCBtX3Rp
bWVsaW5lQWdlbnQpOwotICAgIHN0YXRlLT5zZXRCb29sZWFuKHNlYXJjaGluZ0Zvck5vZGVFbmFi
bGVkU3RhdGVOYW1lLCBtX3NlYXJjaGluZ0Zvck5vZGUpOwotICAgIG1fY2xpZW50LT51cGRhdGVJ
bnNwZWN0b3JTdGF0ZUNvb2tpZShzdGF0ZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi12b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3Qg
U3RyaW5nJiBpbnNwZWN0b3JTdGF0ZVN0cmluZykKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0
YXRlQ29va2llKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gaW5zcGVjdG9yU3RhdGVW
YWx1ZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oaW5zcGVjdG9yU3RhdGVTdHJpbmcpOwot
ICAgIGlmICghaW5zcGVjdG9yU3RhdGVWYWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gaW5zcGVjdG9yU3RhdGUgPSBpbnNwZWN0b3JTdGF0ZVZhbHVl
LT5hc09iamVjdCgpOwotICAgIGlmICghaW5zcGVjdG9yU3RhdGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGluc3BlY3RvclN0YXRlLT5nZXRCb29sZWFuKG1vbml0b3JpbmdYSFJTdGF0ZU5hbWUs
ICZtX21vbml0b3JpbmdYSFIpOwotICAgIGluc3BlY3RvclN0YXRlLT5nZXRCb29sZWFuKHJlc291
cmNlVHJhY2tpbmdFbmFibGVkU3RhdGVOYW1lLCAmbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk7
Ci0gICAgaW5zcGVjdG9yU3RhdGUtPmdldEJvb2xlYW4oc2VhcmNoaW5nRm9yTm9kZUVuYWJsZWRT
dGF0ZU5hbWUsICZtX3NlYXJjaGluZ0Zvck5vZGUpOwotCi0gICAgYm9vbCB0aW1lbGluZVByb2Zp
bGVyRW5hYmxlZCA9IGZhbHNlOwotICAgIGluc3BlY3RvclN0YXRlLT5nZXRCb29sZWFuKHRpbWVs
aW5lUHJvZmlsZXJFbmFibGVkU3RhdGVOYW1lLCAmdGltZWxpbmVQcm9maWxlckVuYWJsZWQpOwot
ICAgIGlmICh0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCkKKyAgICBtX3N0YXRlLT5yZXN0b3JlRnJv
bUluc3BlY3RvckNvb2tpZShpbnNwZWN0b3JTdGF0ZUNvb2tpZSk7CisgICAgaWYgKG1fc3RhdGUt
PmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKSkKICAg
ICAgICAgc3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7Ci0gICAgZWxzZQotICAgICAgICBzdG9wVGlt
ZWxpbmVQcm9maWxlcigpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNldHRp
bmdzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBzZXR0aW5ncykKIHsKICAgICAqc2V0dGluZ3Mg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICgqc2V0dGluZ3MpLT5zZXRTdHJpbmco
ImFwcGxpY2F0aW9uIiwgc2V0dGluZyhmcm9udGVuZFNldHRpbmdzU2V0dGluZ05hbWUpKTsKKyAg
ICAoKnNldHRpbmdzKS0+c2V0U3RyaW5nKCJhcHBsaWNhdGlvbiIsIG1fc3RhdGUtPmdldFN0cmlu
ZyhJbnNwZWN0b3JTdGF0ZTo6ZnJvbnRlbmRTZXR0aW5ncykpOwogICAgICgqc2V0dGluZ3MpLT5z
ZXRTdHJpbmcoInNlc3Npb24iLCBtX3Nlc3Npb25TZXR0aW5ncy0+dG9KU09OU3RyaW5nKCkpOwog
fQogCkBAIC00MjksMTIgKzM5MSwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1hcmtU
aW1lbGluZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6c3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpCiB7Ci0gICAg
c2V0U2V0dGluZyhsYXN0QWN0aXZlUGFuZWwsIHBhbmVsTmFtZSk7CisgICAgbV9zdGF0ZS0+c2V0
U3RyaW5nKEluc3BlY3RvclN0YXRlOjpsYXN0QWN0aXZlUGFuZWwsIHBhbmVsTmFtZSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCkKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSB8
fCAhbV9zZWFyY2hpbmdGb3JOb2RlKQorICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3N0YXRlLT5n
ZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKQEAgLTQ0OSw3ICs0
MTEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhhbmRsZU1vdXNlUHJlc3MoKQogICAg
IGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9zZWFyY2hp
bmdGb3JOb2RlKTsKKyAgICBBU1NFUlQobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0
ZTo6c2VhcmNoaW5nRm9yTm9kZSkpOwogICAgIGlmICghbV9oaWdobGlnaHRlZE5vZGUpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtNDg4LDEyICs0NTAsMTEgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBmcmFtZSkKIAog
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCisgICAgaWYgKG1f
c3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUpID09IGVu
YWJsZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3NlYXJjaGluZ0Zvck5vZGUgPSBlbmFibGVk
OwotICAgIGlmICghbV9zZWFyY2hpbmdGb3JOb2RlKQorICAgIG1fc3RhdGUtPnNldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUsIGVuYWJsZWQpOworICAgIGlmICghZW5h
YmxlZCkKICAgICAgICAgaGlkZUhpZ2hsaWdodCgpOwotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRl
Q29va2llKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9y
Tm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKQpAQCAtNTA1LDExICs0NjYsNyBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVk
LCBib29sKiBuZXdTdGF0ZSkKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0TW9uaXRvcmlu
Z1hIUkVuYWJsZWQoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKIHsKICAgICAqbmV3U3Rh
dGUgPSBlbmFibGVkOwotICAgIGlmIChtX21vbml0b3JpbmdYSFIgPT0gZW5hYmxlZCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fbW9uaXRvcmluZ1hIUiA9IGVuYWJsZWQ7Ci0gICAgc2V0U2V0dGlu
Zyhtb25pdG9yaW5nWEhSU2V0dGluZ05hbWUsIGVuYWJsZWQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsK
LSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldEJvb2xl
YW4oSW5zcGVjdG9yU3RhdGU6Om1vbml0b3JpbmdYSFIsIGVuYWJsZWQpOwogfQogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCgpCkBAIC01NzMsNyArNTMwLDcgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93UGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChwYW5lbCA9PSBsYXN0QWN0aXZlUGFu
ZWwpCisgICAgaWYgKHBhbmVsID09IExhc3RBY3RpdmVQYW5lbCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9mcm9udGVuZC0+c2hvd1BhbmVsKHBhbmVsKTsKQEAgLTYwOSw3ICs1NjYsNyBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiAgICAgdW5iaW5k
QWxsUmVzb3VyY2VzKCk7CiAgICAgc3RvcFRpbWVsaW5lUHJvZmlsZXIoKTsKIAotICAgIG1fc2hv
d0FmdGVyVmlzaWJsZSA9IGxhc3RBY3RpdmVQYW5lbDsKKyAgICBtX3Nob3dBZnRlclZpc2libGUg
PSBMYXN0QWN0aXZlUGFuZWw7CiAKICAgICBoaWRlSGlnaGxpZ2h0KCk7CiAKQEAgLTY0Nyw4ICs2
MDQsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygp
CiAgICAgaWYgKCFtX2Zyb250ZW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9zaG93
QWZ0ZXJWaXNpYmxlID09IGxhc3RBY3RpdmVQYW5lbCkKLSAgICAgICAgbV9zaG93QWZ0ZXJWaXNp
YmxlID0gc2V0dGluZyhsYXN0QWN0aXZlUGFuZWwpOworICAgIGlmIChtX3Nob3dBZnRlclZpc2li
bGUgPT0gTGFzdEFjdGl2ZVBhbmVsKQorICAgICAgICBtX3Nob3dBZnRlclZpc2libGUgPSBtX3N0
YXRlLT5nZXRTdHJpbmcoSW5zcGVjdG9yU3RhdGU6Omxhc3RBY3RpdmVQYW5lbCk7CiAKICAgICBz
aG93UGFuZWwobV9zaG93QWZ0ZXJWaXNpYmxlKTsKIApAQCAtNzA2LDggKzY2Myw3IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZURlYnVnZ2VyKCkKICAgICBpZiAoSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6aXNEZWJ1Z2dlckFsd2F5c0VuYWJsZWQoKSkKICAgICAgICAgZW5hYmxl
RGVidWdnZXJGcm9tRnJvbnRlbmQoZmFsc2UpOwogICAgIGVsc2UgewotICAgICAgICBTdHJpbmcg
ZGVidWdnZXJFbmFibGVkID0gc2V0dGluZyhkZWJ1Z2dlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFt
ZSk7Ci0gICAgICAgIGlmIChkZWJ1Z2dlckVuYWJsZWQgPT0gInRydWUiIHx8IG1fYXR0YWNoRGVi
dWdnZXJXaGVuU2hvd24pCisgICAgICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3Rv
clN0YXRlOjpkZWJ1Z2dlckFsd2F5c0VuYWJsZWQpIHx8IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hv
d24pCiAgICAgICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOwogICAgIH0KICNlbmRpZgpAQCAtNzE4
LDExICs2NzQsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVQcm9maWxlcigp
CiAgICAgQVNTRVJUKG1fZnJvbnRlbmQpOwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQogICAgIG1fcHJvZmlsZXJBZ2VudC0+c2V0RnJvbnRlbmQobV9mcm9udGVuZC5nZXQoKSk7Ci0g
ICAgaWYgKCFTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJsZWQoKSkgewotICAg
ICAgICBTdHJpbmcgcHJvZmlsZXJFbmFibGVkU2V0dGluZyA9IHNldHRpbmcocHJvZmlsZXJBbHdh
eXNFbmFibGVkU2V0dGluZ05hbWUpOwotICAgICAgICBpZiAocHJvZmlsZXJFbmFibGVkU2V0dGlu
ZyA9PSAidHJ1ZSIpCi0gICAgICAgICAgICBlbmFibGVQcm9maWxlcigpOwotICAgIH0KKyAgICBp
ZiAoIVNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCgpICYmIG1fc3RhdGUt
PmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnByb2ZpbGVyQWx3YXlzRW5hYmxlZCkpCisgICAg
ICAgIGVuYWJsZVByb2ZpbGVyKCk7CiAjZW5kaWYKIH0KIApAQCAtODk1LDcgKzg0OCw3IEBAIElu
c3BlY3RvclJlc291cmNlKiBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRUcmFja2VkUmVzb3VyY2Uo
dW5zaWduZWQgbG9uZyBpZGVudGlmCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgaWYgKG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpCisgICAgaWYgKG1fc3Rh
dGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKSkK
ICAgICAgICAgcmV0dXJuIG1fcmVzb3VyY2VzLmdldChpZGVudGlmaWVyKS5nZXQoKTsKIAogICAg
IGJvb2wgaXNNYWluUmVzb3VyY2UgPSBtX21haW5SZXNvdXJjZSAmJiBtX21haW5SZXNvdXJjZS0+
aWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7CkBAIC05MjYsNyArODc5LDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRM
b2FkZXIqIGxvYWRlciwKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKICAgICBib29sIGlz
TWFpblJlc291cmNlID0gaXNNYWluUmVzb3VyY2VMb2FkZXIobG9hZGVyLCBLVVJMKFBhcnNlZFVS
TFN0cmluZywgY2FjaGVkUmVzb3VyY2UtPnVybCgpKSk7CiAgICAgZW5zdXJlU2V0dGluZ3NMb2Fk
ZWQoKTsKLSAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFtX3Jlc291cmNlVHJhY2tpbmdFbmFi
bGVkKQorICAgIGlmICghaXNNYWluUmVzb3VyY2UgJiYgIW1fc3RhdGUtPmdldEJvb2xlYW4oSW5z
cGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IEluc3BlY3RvclJlc291
cmNlOjpjcmVhdGVDYWNoZWQobV9pbnNwZWN0ZWRQYWdlLT5wcm9ncmVzcygpLT5jcmVhdGVVbmlx
dWVJZGVudGlmaWVyKCksIGxvYWRlciwgY2FjaGVkUmVzb3VyY2UpOwpAQCAtOTUwLDcgKzkwMyw3
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKIAogICAgIGJvb2wgaXNNYWluUmVzb3VyY2UgPSBp
c01haW5SZXNvdXJjZUxvYWRlcihsb2FkZXIsIHJlcXVlc3QudXJsKCkpOwogICAgIGVuc3VyZVNl
dHRpbmdzTG9hZGVkKCk7Ci0gICAgaWYgKCFpc01haW5SZXNvdXJjZSAmJiAhbV9yZXNvdXJjZVRy
YWNraW5nRW5hYmxlZCkKKyAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFtX3N0YXRlLT5nZXRC
b29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNw
ZWN0b3JSZXNvdXJjZTo6Y3JlYXRlKGlkZW50aWZpZXIsIGxvYWRlciwgcmVxdWVzdC51cmwoKSk7
CkBAIC0xMTM3LDEwICsxMDkwLDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzb3Vy
Y2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpCiAgICAgaWYg
KCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX21vbml0b3JpbmdYSFIp
CisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6Om1vbml0b3JpbmdY
SFIpKQogICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVz
c2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgIlhIUiBmaW5pc2hlZCBsb2FkaW5nOiBcIiIgKyB1
cmwgKyAiXCIuIiwgc2VuZExpbmVOdW1iZXIsIHNlbmRVUkwpOwogCi0gICAgaWYgKCFtX3Jlc291
cmNlVHJhY2tpbmdFbmFibGVkKQorICAgIGlmICghbV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0
b3JTdGF0ZTo6cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBJbnNwZWN0b3JSZXNvdXJjZSogcmVzb3VyY2UgPSBtX3Jlc291cmNlcy5nZXQoaWRlbnRpZmll
cikuZ2V0KCk7CkBAIC0xMTU1LDcgKzExMDgsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aQog
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdEltcG9ydGVkKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpCiB7Ci0gICAgaWYgKCFlbmFi
bGVkKCkgfHwgIW1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpCisgICAgaWYgKCFlbmFibGVkKCkg
fHwgIW1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdF
bmFibGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW5zcGVjdG9yUmVzb3VyY2UqIHJlc291
cmNlID0gbV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOwpAQCAtMTE3NCw4ICsxMTI3
LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZChib29sIGVuYWJsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1faW5zcGVjdGVk
UGFnZSk7Ci0gICAgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCA9IGVuYWJsZTsKLSAgICB1cGRh
dGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVj
dG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkLCBlbmFibGUpOwogfQogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxl
LCBib29sIGFsd2F5cywgYm9vbCogbmV3U3RhdGUpCkBAIC0xMTgzLDE4ICsxMTM1LDE2IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoYm9vbCBl
bmFibGUsIGJvb2wgYWx3YXlzLCBiCiAgICAgKm5ld1N0YXRlID0gZW5hYmxlOwogCiAgICAgaWYg
KGFsd2F5cykKLSAgICAgICAgc2V0U2V0dGluZyhyZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5hYmxl
ZFNldHRpbmdOYW1lLCBlbmFibGUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICAgICAgbV9zdGF0
ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJs
ZWQsIGVuYWJsZSk7CiAKLSAgICBpZiAobV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCA9PSBlbmFi
bGUpCisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNl
VHJhY2tpbmdFbmFibGVkKSA9PSBlbmFibGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VS
VChtX2luc3BlY3RlZFBhZ2UpOwotICAgIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQgPSBlbmFi
bGU7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VUcmFj
a2luZ0VuYWJsZWQsIGVuYWJsZSk7CiAKICAgICBpZiAoZW5hYmxlKQogICAgICAgICBtX2luc3Bl
Y3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPnNjaGVkdWxlUmVm
cmVzaCh0cnVlKTsKLQotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5zdXJlU2V0dGluZ3NMb2FkZWQoKQpAQCAtMTIwMywx
NSArMTE1MywxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuc3VyZVNldHRpbmdzTG9h
ZGVkKCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2V0dGluZ3NMb2FkZWQgPSB0cnVlOwogCi0g
ICAgU3RyaW5nIHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkID0gc2V0dGluZyhyZXNvdXJj
ZVRyYWNraW5nQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lKTsKLSAgICBpZiAocmVzb3VyY2VUcmFj
a2luZ0Fsd2F5c0VuYWJsZWQgPT0gInRydWUiKQotICAgICAgICBtX3Jlc291cmNlVHJhY2tpbmdF
bmFibGVkID0gdHJ1ZTsKLQotICAgIFN0cmluZyBtb25pdG9yaW5nWEhSQWx3YXlzRW5hYmxlZCA9
IHNldHRpbmcobW9uaXRvcmluZ1hIUlNldHRpbmdOYW1lKTsKLSAgICBpZiAobW9uaXRvcmluZ1hI
UkFsd2F5c0VuYWJsZWQgPT0gInRydWUiKQotICAgICAgICBtX21vbml0b3JpbmdYSFIgPSB0cnVl
OworICAgIG1fc3RhdGUtPnJlc3RvcmVGcm9tU2V0dGluZ3MoKTsKIAotICAgIHVwZGF0ZUluc3Bl
Y3RvclN0YXRlQ29va2llKCk7CisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9y
U3RhdGU6OnJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkKSkKKyAgICAgICAgbV9zdGF0ZS0+
c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQsIHRydWUp
OwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxlcigp
CkBAIC0xMjI2LDcgKzExNzEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VGlt
ZWxpbmVQcm9maWxlcigpCiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAgIG1fZnJvbnRlbmQt
PnRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCk7CiAKLSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0
ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnRpbWVs
aW5lUHJvZmlsZXJFbmFibGVkLCB0cnVlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzdG9wVGltZWxpbmVQcm9maWxlcigpCkBAIC0xMjQxLDcgKzExODYsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkKICAgICBpZiAobV9mcm9udGVu
ZCkKICAgICAgICAgbV9mcm9udGVuZC0+dGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQoKTsKIAot
ICAgIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVh
bihJbnNwZWN0b3JTdGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQsIGZhbHNlKTsKIH0KIAog
I2lmIEVOQUJMRShXT1JLRVJTKQpAQCAtMTYxMywxNCArMTU1OCwxNCBAQCBib29sIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0CiB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzLCBib29sIHNraXBSZWNvbXBpbGUpCiB7
CiAgICAgaWYgKGFsd2F5cykKLSAgICAgICAgc2V0U2V0dGluZyhwcm9maWxlckFsd2F5c0VuYWJs
ZWRTZXR0aW5nTmFtZSwgInRydWUiKTsKKyAgICAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNw
ZWN0b3JTdGF0ZTo6cHJvZmlsZXJBbHdheXNFbmFibGVkLCB0cnVlKTsKICAgICBtX3Byb2ZpbGVy
QWdlbnQtPmVuYWJsZShza2lwUmVjb21waWxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpCiB7CiAgICAgaWYgKGFsd2F5cykKLSAg
ICAgICAgc2V0U2V0dGluZyhwcm9maWxlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSwgImZhbHNl
Iik7CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnByb2ZpbGVy
QWx3YXlzRW5hYmxlZCwgZmFsc2UpOwogICAgIG1fcHJvZmlsZXJBZ2VudC0+ZGlzYWJsZSgpOwog
fQogI2VuZGlmCkBAIC0xNjMwLDcgKzE1NzUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGJvb2wgYWx3YXlzKQogewogICAgIEFTU0VSVCgh
ZGVidWdnZXJFbmFibGVkKCkpOwogICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNldFNldHRpbmco
ZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsICJ0cnVlIik7CisgICAgICAgIG1fc3Rh
dGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwgdHJ1
ZSk7CiAKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIApAQCAtMTY2MSw3ICsxNjA2LDcg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNldFNldHRpbmco
ZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsICJmYWxzZSIpOworICAgICAgICBtX3N0
YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpkZWJ1Z2dlckFsd2F5c0VuYWJsZWQsIGZh
bHNlKTsKIAogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogCkBAIC0xNzY1LDEyICsxNzEw
LDE0IEBAIFN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpicmVha3BvaW50c1NldHRpbmdLZXko
KQogCiBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JDb250cm9sbGVyOjpsb2Fk
QnJlYWtwb2ludHMoKQogewotICAgIHJldHVybiBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHNl
dHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5KCkpKTsKKyAgICBTdHJpbmcganNvblN0cmluZzsK
KyAgICBtX2NsaWVudC0+cG9wdWxhdGVTZXR0aW5nKGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpLCAm
anNvblN0cmluZyk7CisgICAgcmV0dXJuIEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvblN0
cmluZyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZUJyZWFrcG9pbnRzKFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cykKIHsKLSAgICBzZXRTZXR0aW5n
KGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpLCBicmVha3BvaW50cy0+dG9KU09OU3RyaW5nKCkpOwor
ICAgIG1fY2xpZW50LT5zdG9yZVNldHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5KCksIGJyZWFr
cG9pbnRzLT50b0pTT05TdHJpbmcoKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDBjMjg4NWUuLmE4NzUxMjAgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTY5LDYgKzY5LDcgQEAgY2xhc3MgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnNwZWN0
b3JQcm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CitjbGFzcyBJbnNwZWN0
b3JTdGF0ZTsKIGNsYXNzIEluc3BlY3RvclN0b3JhZ2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKQEAgLTEwMyw2ICsxMDQsNyBAQCBw
dWJsaWM6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2U+ID4gRGF0YWJhc2VSZXNvdXJjZXNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgUmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBET01TdG9yYWdlUmVzb3Vy
Y2VzTWFwOwogCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IExhc3RBY3RpdmVQYW5lbDsK
ICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ29uc29sZVBhbmVsOwogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBFbGVtZW50c1BhbmVsOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBQcm9maWxlc1BhbmVsOwpAQCAtMTIzLDEzICsxMjUsMTEgQEAgcHVibGljOgogICAgIFBh
Z2UqIGluc3BlY3RlZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KICAg
ICB2b2lkIHJlbG9hZFBhZ2UoKTsKIAotICAgIFN0cmluZyBzZXR0aW5nKGNvbnN0IFN0cmluZyYg
a2V5KSBjb25zdDsKLSAgICB2b2lkIHNldFNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUpOwogICAgIHZvaWQgc2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MoY29uc3Qg
U3RyaW5nJiBzZXR0aW5ncyk7CiAgICAgdm9pZCBzYXZlU2Vzc2lvblNldHRpbmdzKGNvbnN0IFN0
cmluZyYpOwogICAgIHZvaWQgZ2V0U2V0dGluZ3MoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qKTsK
IAotICAgIHZvaWQgcmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcm
IGluc3BlY3RvclN0YXRlKTsKKyAgICB2b2lkIHJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29r
aWUoY29uc3QgU3RyaW5nJiBpbnNwZWN0b3JDb29raWUpOwogCiAgICAgdm9pZCBpbnNwZWN0KE5v
ZGUqKTsKICAgICB2b2lkIGhpZ2hsaWdodChOb2RlKik7CkBAIC0xNTMsNyArMTUzLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKICAgICBjb25zdCBWZWN0b3I8
T3duUHRyPENvbnNvbGVNZXNzYWdlPiA+JiBjb25zb2xlTWVzc2FnZXMoKSBjb25zdCB7IHJldHVy
biBtX2NvbnNvbGVNZXNzYWdlczsgfQogCi0gICAgYm9vbCBzZWFyY2hpbmdGb3JOb2RlSW5QYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9zZWFyY2hpbmdGb3JOb2RlOyB9CisgICAgYm9vbCBzZWFyY2hp
bmdGb3JOb2RlSW5QYWdlKCkgY29uc3Q7CiAgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVu
dChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAgICAgdm9p
ZCBoYW5kbGVNb3VzZVByZXNzKCk7CiAKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCk7CiAgICAgdm9p
ZCBzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGJvb2wgYWx3YXlzLCBi
b29sKiBuZXdTdGF0ZSk7Ci0gICAgYm9vbCByZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQ7IH0KKyAgICBib29sIHJlc291cmNl
VHJhY2tpbmdFbmFibGVkKCkgY29uc3Q7CiAKICAgICB2b2lkIGVuc3VyZVNldHRpbmdzTG9hZGVk
KCk7CiAKQEAgLTI3MSwxMCArMjcxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUFsbFNj
cmlwdHNUb0V2YWx1YXRlT25Mb2FkKCk7CiAgICAgdm9pZCBzZXRJbnNwZWN0b3JFeHRlbnNpb25B
UEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpOwogCi0gICAgc3RhdGljIGNvbnN0IFN0cmluZyYgaW5z
cGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpOworICAgIGJvb2wgaW5zcGVjdG9yU3Rh
cnRzQXR0YWNoZWQoKTsKKyAgICB2b2lkIHNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGJvb2wp
OworICAgIHZvaWQgc2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpOworICAg
IGludCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHVw
ZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CiAgICAgdm9pZCBnZXRJbnNwZWN0b3JTdGF0ZShS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3RhdGUpOwogCiAgICAgZnJpZW5kIGNsYXNzIEluc3Bl
Y3RvckJhY2tlbmQ7CkBAIC0zNDYsNiArMzUwLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SW5z
cGVjdG9yU3RvcmFnZUFnZW50PiBtX3N0b3JhZ2VBZ2VudDsKICAgICBPd25QdHI8SW5zcGVjdG9y
Q1NTU3RvcmU+IG1fY3NzU3RvcmU7CiAgICAgT3duUHRyPEluc3BlY3RvclRpbWVsaW5lQWdlbnQ+
IG1fdGltZWxpbmVBZ2VudDsKKyAgICBPd25QdHI8SW5zcGVjdG9yU3RhdGU+IG1fc3RhdGU7CiAK
ICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogICAgIE93blB0cjxJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ+IG1fYXBwbGljYXRpb25DYWNoZUFnZW50OwpAQCAtMzcy
LDEwICszNzcsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbV9zZXNz
aW9uU2V0dGluZ3M7CiAjZW5kaWYKICAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7Ci0gICAgYm9v
bCBtX3NlYXJjaGluZ0Zvck5vZGU7Ci0gICAgYm9vbCBtX21vbml0b3JpbmdYSFI7CiAgICAgQ29u
c29sZU1lc3NhZ2UqIG1fcHJldmlvdXNNZXNzYWdlOwotICAgIGJvb2wgbV9yZXNvdXJjZVRyYWNr
aW5nRW5hYmxlZDsKICAgICBib29sIG1fc2V0dGluZ3NMb2FkZWQ7CiAgICAgUmVmUHRyPEluc3Bl
Y3RvckJhY2tlbmQ+IG1faW5zcGVjdG9yQmFja2VuZDsKICAgICBPd25QdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCmluZGV4IDc3
NjE2ZGEuLjQ4MTJiMmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwuY3BwCkBAIC00Nyw3ICs0Nyw2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0
TmFtZSA9ICJpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCI7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQg
ZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOwogc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1B
dHRhY2hlZEhlaWdodCA9IDI1MC4wZjsKIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNo
ZWRIZWlnaHRSYXRpbyA9IDAuNzVmOwpAQCAtMTA4LDcgKzEwNyw3IEBAIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQg
aGVpZ2h0KQogewogICAgIHVuc2lnbmVkIHRvdGFsSGVpZ2h0ID0gbV9mcm9udGVuZFBhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKSArIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7
CiAgICAgdW5zaWduZWQgYXR0YWNoZWRIZWlnaHQgPSBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93
SGVpZ2h0KGhlaWdodCwgdG90YWxIZWlnaHQpOwotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
c2V0U2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUsIFN0cmluZzo6bnVtYmVyKGF0
dGFjaGVkSGVpZ2h0KSk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRJbnNwZWN0b3JB
dHRhY2hlZEhlaWdodChhdHRhY2hlZEhlaWdodCk7CiAgICAgc2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQoYXR0YWNoZWRIZWlnaHQpOwogfQogCkBAIC0xMzQsMTAgKzEzMyw5IEBAIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCkK
IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93
SGVpZ2h0KCkKIHsKICAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2li
bGVIZWlnaHQoKTsKLSAgICBTdHJpbmcgYXR0YWNoZWRIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRy
b2xsZXItPnNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lKTsKKyAgICBpbnQgYXR0
YWNoZWRIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0KCk7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBpbnQgaGVpZ2h0ID0gYXR0YWNo
ZWRIZWlnaHQudG9JbnQoJnN1Y2Nlc3MpOwotICAgIHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCA9
IHN1Y2Nlc3MgPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVpZ2h0KSA6IGRlZmF1bHRBdHRhY2hl
ZEhlaWdodDsKKyAgICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGF0dGFjaGVkSGVpZ2h0KSA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsK
ICAgICAKICAgICAvLyBUaGlzIGNhbGwgbWlnaHQgbm90IGdvIHRocm91Z2ggKGlmIHRoZSB3aW5k
b3cgc3RhcnRzIG91dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUgd2luZG93IGlzIGluaXRpYWxseSBj
cmVhdGVkIGF0dGFjaGVkLAogICAgIC8vIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRv
dyBpcyBuZXZlciBjYWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHNldCB0aGUgYXR0
YWNoZWRXaW5kb3dIZWlnaHQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAppbmRl
eCA0NTJmYTdmLi5mY2NiMjc2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAK
QEAgLTY1Myw2ICs2NTMsMTQgQEAgYm9vbCBJbnNwZWN0b3JPYmplY3Q6OmdldE51bWJlcihjb25z
dCBTdHJpbmcmIG5hbWUsIGRvdWJsZSogb3V0cHV0KSBjb25zdAogICAgIHJldHVybiB2YWx1ZS0+
YXNOdW1iZXIob3V0cHV0KTsKIH0KIAorYm9vbCBJbnNwZWN0b3JPYmplY3Q6OmdldE51bWJlcihj
b25zdCBTdHJpbmcmIG5hbWUsIGxvbmcqIG91dHB1dCkgY29uc3QKK3sKKyAgICBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdmFsdWUtPmFzTnVtYmVyKG91dHB1dCk7Cit9CisK
IGJvb2wgSW5zcGVjdG9yT2JqZWN0OjpnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJp
bmcqIG91dHB1dCkgY29uc3QKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0g
Z2V0KG5hbWUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAppbmRleCAzOTEzNzJlLi5l
YmY0MzUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtMTA2LDYgKzEwNiwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFzaWNW
YWx1ZSh2YWx1ZSkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckJh
c2ljVmFsdWU+IGNyZWF0ZShsb25nIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CisgICAgfQorCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGRvdWJsZSB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1
ZSkpOwpAQCAtMTIyLDYgKzEyNyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
SW5zcGVjdG9yQmFzaWNWYWx1ZShib29sIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVCb29s
ZWFuKSwgbV9ib29sVmFsdWUodmFsdWUpIHsgfQogICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2lj
VmFsdWUoaW50IHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVOdW1iZXIpLCBtX2RvdWJsZVZh
bHVlKChkb3VibGUpdmFsdWUpIHsgfQorICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUo
bG9uZyB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlTnVtYmVyKSwgbV9kb3VibGVWYWx1ZSgo
ZG91YmxlKXZhbHVlKSB7IH0KICAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGRvdWJs
ZSB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlTnVtYmVyKSwgbV9kb3VibGVWYWx1ZSh2YWx1
ZSkgeyB9CiAKICAgICB1bmlvbiB7CkBAIC0xODEsNiArMTg3LDcgQEAgcHVibGljOgogICAgIGNv
bnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBib29sIGdl
dEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRwdXQpIGNvbnN0OwogICAgIGJv
b2wgZ2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKiBvdXRwdXQpIGNvbnN0Owor
ICAgIGJvb2wgZ2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgbG9uZyogb3V0cHV0KSBjb25z
dDsKICAgICBib29sIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyogb3V0cHV0
KSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0KGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZ2V0
QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMv
Q2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggZGI5ODUwYi4uZDA3ZTk2ZSAx
MDA2NDQKLS0tIGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0xMC0wOSAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNs
b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2ViIEluc3BlY3RvcjogaW5zcGVjdG9yIHNldHRpbmdzL3Byb3BlcnRpZXMvc3Rh
dGVzIG1hbmFnZW1lbnQKKyAgICAgICAgc2hvdWxkIGJlIGV4dHJhY3RlZCBpbnRvIHNlcGFyYXRl
IGNsYXNzLgorCisgICAgICAgIFdlIGhhdmUgYSBsb3Qgb2YgZmxhZ3MvdmFsdWVzIGluIEluc3Bl
Y3RvckNvbnRyb2xsZXIuCisgICAgICAgIFNvbWUgZmxhZ3MgYXJlIHBlcnNpc3RpbmcgaW50byBw
cm9maWxlLgorICAgICAgICBPdGhlcnMgYXJlIHBhcnQgb2YgaW5zcGVjdG9yIHN0YXRlIGZvciBm
cm9udGVuZC4KKyAgICAgICAgQWxsIHRoZXNlIGZsYWdzIHNob3VsZCBrZWVwIHRoZWlyIHZhbHVl
cyBhZnRlciBuYXZpZ2F0aW9uLgorICAgICAgICBJdCdkIGJlIGJldHRlciB0byBleHRyYWN0IHRo
ZXNlIGZsYWdzL3ZhbHVlcyBpbnRvIHNlcGFyYXRlCisgICAgICAgIGNsYXNzIHdoaWNoIHdpbGwg
Y2FyZSBhYm91dCB0aGVpcnMgbGlmZXRpbWUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mjc1CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJJbnNwZWN0b3JDbGllbnQubW06CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRy
b2xsZXIgc2hvd1dpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJv
bGxlciBhdHRhY2hdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBk
ZXRhY2hdKToKKwogMjAxMC0xMC0wNyAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbSBiL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCmluZGV4IGQ0ZDAyMTMuLmQ2ZGM4Nzkg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50
Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1t
CkBAIC0zNTgsOCArMzU4LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6dXBk
YXRlV2luZG93VGl0bGUoKSBjb25zdAogICAgIF92aXNpYmxlID0gWUVTOwogICAgIAogICAgIC8v
IElmIG5vIHByZWZlcmVuY2UgaXMgc2V0IC0gZGVmYXVsdCB0byBhbiBhdHRhY2hlZCB3aW5kb3cu
IFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbnNwZWN0b3IgTGF5b3V0VGVzdHMuCi0gICAgU3RyaW5n
IHNob3VsZEF0dGFjaCA9IFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5zZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkU2V0dGluZ05hbWUoKSk7Ci0gICAgX3Nob3VsZEF0dGFjaCA9IHNob3VsZEF0dGFjaCAhPSAi
ZmFsc2UiOworICAgIF9zaG91bGRBdHRhY2ggPSBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKICAgICAKICAg
ICBpZiAoX3Nob3VsZEF0dGFjaCAmJiAhX2Zyb250ZW5kQ2xpZW50LT5jYW5BdHRhY2hXaW5kb3co
KSkKICAgICAgICAgX3Nob3VsZEF0dGFjaCA9IE5POwpAQCAtMzk0LDcgKzM5Myw3IEBAIHZvaWQg
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkgY29uc3QKICAg
ICBpZiAoX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0U2V0
dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdO
YW1lKCksICJ0cnVlIik7CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKHRydWUpOwogCiAgICAgW3Nl
bGYgY2xvc2VdOwogICAgIFtzZWxmIHNob3dXaW5kb3c6bmlsXTsKQEAgLTQwNSw3ICs0MDQsNyBA
QCB2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNv
bnN0CiAgICAgaWYgKCFfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5zZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVk
U2V0dGluZ05hbWUoKSwgImZhbHNlIik7CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGZhbHNlKTsK
IAogICAgIFtzZWxmIGNsb3NlXTsKICAgICBbc2VsZiBzaG93V2luZG93Om5pbF07CmRpZmYgLS1n
aXQgYS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDE1
YTEyMTcuLmFiOGJjMTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1dl
YktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMTAtMDkgIElseWEgVGlr
aG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGluc3BlY3RvciBzZXR0aW5n
cy9wcm9wZXJ0aWVzL3N0YXRlcyBtYW5hZ2VtZW50CisgICAgICAgIHNob3VsZCBiZSBleHRyYWN0
ZWQgaW50byBzZXBhcmF0ZSBjbGFzcy4KKworICAgICAgICBXZSBoYXZlIGEgbG90IG9mIGZsYWdz
L3ZhbHVlcyBpbiBJbnNwZWN0b3JDb250cm9sbGVyLgorICAgICAgICBTb21lIGZsYWdzIGFyZSBw
ZXJzaXN0aW5nIGludG8gcHJvZmlsZS4KKyAgICAgICAgT3RoZXJzIGFyZSBwYXJ0IG9mIGluc3Bl
Y3RvciBzdGF0ZSBmb3IgZnJvbnRlbmQuCisgICAgICAgIEFsbCB0aGVzZSBmbGFncyBzaG91bGQg
a2VlcCB0aGVpciB2YWx1ZXMgYWZ0ZXIgbmF2aWdhdGlvbi4KKyAgICAgICAgSXQnZCBiZSBiZXR0
ZXIgdG8gZXh0cmFjdCB0aGVzZSBmbGFncy92YWx1ZXMgaW50byBzZXBhcmF0ZQorICAgICAgICBj
bGFzcyB3aGljaCB3aWxsIGNhcmUgYWJvdXQgdGhlaXJzIGxpZmV0aW1lLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI3NQorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKToKKwogMjAxMC0xMC0w
NyAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5jcHAgYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5jcHAKaW5kZXggMWI3OWRkZS4uMDMwMjAwOSAxMDA2NDQKLS0tIGEvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMjczLDcgKzI3Myw3
IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFjaFdpbmRvdygpCiAgICAg
aWYgKG1fYXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faW5zcGVjdGVkV2ViVmll
dy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29u
dHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAidHJ1ZSIpOwor
ICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNl
dEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKHRydWUpOwogCiAgICAgY2xvc2VXaW5kb3dXaXRob3V0
Tm90aWZpY2F0aW9ucygpOwogICAgIHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwpA
QCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFj
aFdpbmRvdygpCiAgICAgaWYgKCFtX2F0dGFjaGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRTZXR0
aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05h
bWUoKSwgImZhbHNlIik7CisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoZmFsc2UpOwogCiAgICAg
Y2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogICAgIHNob3dXaW5kb3dXaXRob3V0
Tm90aWZpY2F0aW9ucygpOwpAQCAtMzY0LDggKzM2NCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpCiAgICAgICAgIHNo
b3VsZEF0dGFjaCA9IHRydWU7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIElmIG5vIHByZWZlcmVu
Y2UgaXMgc2V0IC0gZGVmYXVsdCB0byBhbiBhdHRhY2hlZCB3aW5kb3cuIFRoaXMgaXMgaW1wb3J0
YW50IGZvciBpbnNwZWN0b3IgTGF5b3V0VGVzdHMuCi0gICAgICAgIFN0cmluZyBzaG91bGRBdHRh
Y2hQcmVmID0gbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+c2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNl
dHRpbmdOYW1lKCkpOwotICAgICAgICBzaG91bGRBdHRhY2ggPSBzaG91bGRBdHRhY2hQcmVmICE9
ICJmYWxzZSI7CisgICAgICAgIHNob3VsZEF0dGFjaCA9IG1faW5zcGVjdGVkV2ViVmlldy0+cGFn
ZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCk7CiAK
ICAgICAgICAgaWYgKHNob3VsZEF0dGFjaCAmJiAhY2FuQXR0YWNoV2luZG93KCkpCiAgICAgICAg
ICAgICBzaG91bGRBdHRhY2ggPSBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70359</attachid>
            <date>2010-10-09 11:57:46 -0700</date>
            <delta_ts>2010-10-14 02:19:13 -0700</delta_ts>
            <desc>[patch] OOP version for review. Now with new files.</desc>
            <filename>inspectorState.oop</filename>
            <type>text/plain</type>
            <size>56420</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDUzMzFlYWUuLjI3Y2FlYzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExNCw2ICsxMTE0LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2M0ZGE2My4uNGQxY2E5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAxMC0xMC0wOSAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW5zcGVjdG9yIHNldHRpbmdzL3By
b3BlcnRpZXMvc3RhdGVzIG1hbmFnZW1lbnQKKyAgICAgICAgc2hvdWxkIGJlIGV4dHJhY3RlZCBp
bnRvIHNlcGFyYXRlIGNsYXNzLgorCisgICAgICAgIFdlIGhhdmUgYSBsb3Qgb2YgZmxhZ3MvdmFs
dWVzIGluIEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIFNvbWUgZmxhZ3MgYXJlIHBlcnNp
c3RpbmcgaW50byBwcm9maWxlLgorICAgICAgICBPdGhlcnMgYXJlIHBhcnQgb2YgaW5zcGVjdG9y
IHN0YXRlIGZvciBmcm9udGVuZC4KKyAgICAgICAgQWxsIHRoZXNlIGZsYWdzIHNob3VsZCBrZWVw
IHRoZWlyIHZhbHVlcyBhZnRlciBuYXZpZ2F0aW9uLgorICAgICAgICBJdCdkIGJlIGJldHRlciB0
byBleHRyYWN0IHRoZXNlIGZsYWdzL3ZhbHVlcyBpbnRvIHNlcGFyYXRlCisgICAgICAgIGNsYXNz
IHdoaWNoIHdpbGwgY2FyZSBhYm91dCB0aGVpcnMgbGlmZXRpbWUuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mjc1CisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
LmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQXR0YWNo
ZWRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2VhcmNo
aW5nRm9yTm9kZUluUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpnZXRJbnNwZWN0b3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNldHRpbmdzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3JlTGFzdEFjdGl2ZVBhbmVs
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmhhbmRs
ZU1vdXNlUHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
U2VhcmNoaW5nRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRNb25pdG9yaW5nWEhSRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzaG93UGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmdldFRyYWNrZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aWRlbnRpZmllckZvckluaXRp
YWxSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291
cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbnN1cmVTZXR0aW5nc0xvYWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWVsaW5lUHJvZmls
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmls
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2Zp
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVn
Z2VyRnJvbUZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpc2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
Ojpsb2FkQnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6c2F2ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNo
YW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWw6OnJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JPYmplY3Q6OmdldE51bWJlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2ljVmFsdWU6Okluc3BlY3RvckJhc2ljVmFs
dWUpOgorCiAyMDEwLTEwLTA5ICBQcmF0aWsgU29sYW5raSAgPHBzb2xhbmtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNGEyNTQ3Yi4u
OGNmZTUzOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCkBAIC0xODI5LDYgKzE4MjksOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZS5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5j
cHAgXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmggXAogCVdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0b3JhZ2VBZ2VudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgppbmRleCBkMWRjMDIxLi45NzQ0MDZjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEyMDUs
NyArMTIwNSw2IEBAIF9fWk43V2ViQ29yZTIyR2VvbG9jYXRpb25TZXJ2aWNlTW9jazhzZXRFcnJv
ckVOM1dURjEwUGFzc1JlZlB0cklOU18xM1Bvc2l0aW9uRXJyCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMHNldFNldHRp
bmdFUktOM1dURjZTdHJpbmdFUzRfCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIx
MkNvbnNvbGVQYW5lbEUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyU2NyaXB0
c1BhbmVsRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTNQcm9maWxlc1BhbmVs
RQpAQCAtMTIxNiwxMiArMTIxNSwxMiBAQCBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIxNWRpc2FibGVQcm9maWxlckViCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIx
OGRpc2Nvbm5lY3RGcm9udGVuZEV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIy
MHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjIxc3RhcnRUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjIzaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyMjVldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kRWxSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRFTjNXVEYxMFBhc3NPd25QdHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQorX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hl
ZEViCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNlckluaXRpYXRl
ZFByb2ZpbGluZ0V2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnN0b3BVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nRXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjM0
aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2Ci1fX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIzNGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWVFdgogX19a
Tks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjMxaXNSZWNvcmRpbmdVc2VySW5pdGlhdGVk
UHJvZmlsZUV2CiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVwcm9maWxlckVu
YWJsZWRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dFdgpAQCAtMTI0
MSw3ICsxMjQwLDYgQEAgX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
QzJFUE5TXzE5SW5zcGVjdG9yQ29udHJvbGxlckVQTlNfNFBhZ2UKIF9fWk43V2ViQ29yZTI4SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbEQyRXYKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIxN2RyYXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29udGV4dEUKIF9fWk5L
N1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI3ZW5hYmxlZEV2Ci1fX1pOSzdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyN3NldHRpbmdFUktOM1dURjZTdHJpbmdFCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShKQVZBX0JSSURHRSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMzM2N2NlZS4uZTdlNmMyNiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE5Mzcs
NiArMTkzNyw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdl
bnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCcsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgnLAorICAgICAgICAgICAg
J2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9J
bnNwZWN0b3JTdGF0ZS5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFn
ZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2Vu
dC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAnLApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5k
ZXggOWIxYzUzNC4uMGRiODNjYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDAyLDYgKzEwMDIsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2UuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIFwKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dC5jcHAgXApAQCAtMTg4Miw2ICsxODgzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCBcCisgICAg
aW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9y
YWdlQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagppbmRleCBkNjFiNDlmLi4yMmU2MGFkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKQEAgLTYzMTkzLDYgKzYzMTkzLDE0IEBACiAJCQkJPg0KIAkJCTwv
RmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0
b3JTdGF0ZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3RhdGUuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JT
dG9yYWdlQWdlbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTRiM2NhMi4uNTE0MGI5OSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMzQsNiArMTEzNCw4IEBA
CiAJCTRGNEY1RkZCMTFDQkQyRTEwMEExODZCRiAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjRGNUZGQTExQ0JE
MkQyMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwICovOyB9OwogCQk0RjcwN0E5OTEx
RUY2Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY3MDdBOTcxMUVGNjc5NDAw
QUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCAqLzsgfTsKIAkJNEY3MDdB
OUExMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjcwN0E5ODExRUY2Nzk0
MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCAqLzsgfTsKKwkJNEZBM0I5
MEExMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAv
KiBJbnNwZWN0b3JTdGF0ZS5jcHAgKi87IH07CisJCTRGQTNCOTBCMTI1Q0QxMjIwMDMwMEJBRCAv
KiBJbnNwZWN0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmggKi87
IH07CiAJCTRGRDhEMEYyMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhEMEYwMTE5Qzcx
OEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAqLzsgfTsKIAkJNEZEOEQwRjMxMTlDNzE4
QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhEMEYxMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2
ZW50LmggKi87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxODQ2NzBC
MDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MjA2LDYgKzcyMDgsOCBAQAogCQk0RjRGNUZGQzEx
Q0JEMzAxMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNEY3MDdBOTcxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEY3
MDdBOTgxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJB
RCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnNwZWN0b3JTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRG
QTNCOTA5MTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0RkQ4RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRHQ0V2ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEZEOEQwRjExMTlDNzE4QjAwMkZBODI1IC8q
IFNjcmlwdEdDRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0
R0NFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJB
MDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWNoZWRQYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjIwNCw2ICsx
MjIwOCw4IEBACiAJCQkJOUYwRDZCMkQxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2Zp
bGVyQWdlbnQuaCAqLywKIAkJCQk0MUYwNjIwMDBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9y
UmVzb3VyY2UuY3BwICovLAogCQkJCTQxRjA2MUZGMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JSZXNvdXJjZS5oICovLAorCQkJCTRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAvKiBJbnNwZWN0
b3JTdGF0ZS5jcHAgKi8sCisJCQkJNEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3Rv
clN0YXRlLmggKi8sCiAJCQkJN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0
b3JhZ2VBZ2VudC5jcHAgKi8sCiAJCQkJN0FCMEIxQkYxMjExQTYyMjAwQTc2OTQwIC8qIEluc3Bl
Y3RvclN0b3JhZ2VBZ2VudC5oICovLAogCQkJCTgyQUIxNzZGMTI1QzgyNjcwMEM1MDY5RCAvKiBJ
bnNwZWN0b3JTdHlsZVNoZWV0LmNwcCAqLywKQEAgLTIxMDkxLDYgKzIxMDk3LDcgQEAKIAkJCQk4
OTBBRTBFMTEyNTZBMDc5MDBGNTk2OEMgLyogRGlyZWN0b3J5UmVhZGVyQmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODJBQjE3NzQxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hl
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgyQUIxNzc2MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNw
ZWN0b3JVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTRGQTNCOTBCMTI1Q0QxMjIwMDMw
MEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMzY0MCw2ICsyMzY0
Nyw3IEBACiAJCQkJODkzQzQ4NTMxMjQ5OUIwNjAwMkIzRDg2IC8qIEpTRW50cnlTeW5jQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQUIxNzczMTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQUIxNzc1MTI1QzgyNjcw
MEM1MDY5RCAvKiBJbnNwZWN0b3JVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEZB
M0I5MEExMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAxYjY2ODUx
Li42ZGYwM2I5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApA
QCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JS
ZXNvdXJjZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yU3RvcmFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgpAQCAtMTE2LDQwICsxMTcsMTcgQEAgdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgZnJvbnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lID0gImZyb250ZW5kU2V0dGluZ3Mi
OwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGlu
Z05hbWUgPSAiZGVidWdnZXJFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsYXN0
QWN0aXZlUGFuZWwgPSAibGFzdEFjdGl2ZVBhbmVsIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBtb25pdG9yaW5nWEhSU2V0dGluZ05hbWUgPSAieGhyTW9uaXRvciI7Ci1zdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgcmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSA9ICJy
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgcHJvZmls
ZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUgPSAicHJvZmlsZXJFbmFibGVkIjsKLQotc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IG1vbml0b3JpbmdYSFJTdGF0ZU5hbWUgPSAibW9uaXRvcmluZ1hI
UkVuYWJsZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJlc291cmNlVHJhY2tpbmdFbmFi
bGVkU3RhdGVOYW1lID0gInJlc291cmNlVHJhY2tpbmdFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZFN0YXRlTmFtZSA9ICJzZWFyY2hpbmdG
b3JOb2RlRW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgdGltZWxpbmVQcm9maWxl
ckVuYWJsZWRTdGF0ZU5hbWUgPSAidGltZWxpbmVQcm9maWxlckVuYWJsZWQiOwotc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IHBhdXNlT25FeGNlcHRpb25zU3RhdGVTdGF0ZU5hbWUgPSAicGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0b3JB
dHRhY2hlZEhlaWdodE5hbWUgPSAiaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiOwotCiBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgeGhyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiWEhSIjsKIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBldmVudExpc3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAi
RXZlbnRMaXN0ZW5lciI7CiAKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6
Okxhc3RBY3RpdmVQYW5lbCA9ICJsYXN0QWN0aXZlUGFuZWwiOwogY29uc3QgY2hhciogY29uc3Qg
SW5zcGVjdG9yQ29udHJvbGxlcjo6RWxlbWVudHNQYW5lbCA9ICJlbGVtZW50cyI7CiBjb25zdCBj
aGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7
CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTY3JpcHRzUGFuZWwgPSAi
c2NyaXB0cyI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpQcm9maWxl
c1BhbmVsID0gInByb2ZpbGVzIjsKIAorY29uc3QgdW5zaWduZWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOwogCi1jb25zdCBTdHJpbmcmIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKQotewotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzZXR0aW5nTmFtZSwgKCJpbnNwZWN0b3JTdGFy
dHNBdHRhY2hlZCIpKTsKLSAgICByZXR1cm4gc2V0dGluZ05hbWU7Ci19Ci0KLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7Ci1zdGF0aWMgY29uc3QgZmxv
YXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwLjBmOwotc3RhdGljIGNvbnN0IGZsb2F0IG1h
eGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NWY7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWF4aW11bUNvbnNvbGVNZXNzYWdlcyA9IDEwMDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZXhw
aXJlQ29uc29sZU1lc3NhZ2VzU3RlcCA9IDEwMDsKIApAQCAtMTU5LDEzICsxMzcsMTAgQEAgSW5z
cGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0
b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fb3BlbmluZ0Zyb250ZW5kKGZhbHNlKQogICAgICwg
bV9jc3NTdG9yZShuZXcgSW5zcGVjdG9yQ1NTU3RvcmUodGhpcykpCiAgICAgLCBtX2V4cGlyZWRD
b25zb2xlTWVzc2FnZUNvdW50KDApCi0gICAgLCBtX3Nob3dBZnRlclZpc2libGUobGFzdEFjdGl2
ZVBhbmVsKQorICAgICwgbV9zaG93QWZ0ZXJWaXNpYmxlKExhc3RBY3RpdmVQYW5lbCkKICAgICAs
IG1fc2Vzc2lvblNldHRpbmdzKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpCiAgICAgLCBtX2dy
b3VwTGV2ZWwoMCkKLSAgICAsIG1fc2VhcmNoaW5nRm9yTm9kZShmYWxzZSkKLSAgICAsIG1fbW9u
aXRvcmluZ1hIUihmYWxzZSkKICAgICAsIG1fcHJldmlvdXNNZXNzYWdlKDApCi0gICAgLCBtX3Jl
c291cmNlVHJhY2tpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9zZXR0aW5nc0xvYWRlZChmYWxz
ZSkKICAgICAsIG1faW5zcGVjdG9yQmFja2VuZChJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUodGhp
cykpCiAgICAgLCBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG5ldyBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcih0aGlzKSkKQEAgLTE3Niw2ICsxNTEsNyBAQCBJbnNwZWN0b3JDb250cm9s
bGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xp
ZW50KQogICAgICwgbV9wcm9maWxlckFnZW50KEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0
ZSh0aGlzKSkKICNlbmRpZgogeworICAgIG1fc3RhdGUgPSBuZXcgSW5zcGVjdG9yU3RhdGUoY2xp
ZW50KTsKICAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwogICAgIEFTU0VSVF9BUkcoY2xpZW50
LCBjbGllbnQpOwogfQpAQCAtMjE5LDI3ICsxOTUsMzkgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9s
bGVyOjplbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLT5zZXR0aW5n
cygpLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAorYm9vbCBJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpCit7CisgICAgcmV0dXJuIG1fc3Rh
dGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKTsK
K30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hl
ZChib29sIGF0dGFjaGVkKQogewotICAgIFNldHRpbmdzOjppdGVyYXRvciBpdCA9IG1fc2V0dGlu
Z3MuZmluZChrZXkpOwotICAgIGlmIChpdCAhPSBtX3NldHRpbmdzLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRl
OjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCwgYXR0YWNoZWQpOworfQogCi0gICAgU3RyaW5nIHZh
bHVlOwotICAgIG1fY2xpZW50LT5wb3B1bGF0ZVNldHRpbmcoa2V5LCAmdmFsdWUpOwotICAgIG1f
c2V0dGluZ3Muc2V0KGtleSwgdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKK3ZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpCit7
CisgICAgbV9zdGF0ZS0+c2V0TG9uZyhJbnNwZWN0b3JTdGF0ZTo6aW5zcGVjdG9yQXR0YWNoZWRI
ZWlnaHQsIGhlaWdodCk7Cit9CisKK2ludCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JB
dHRhY2hlZEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6Omluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZWFyY2hpbmdGb3JOb2RlSW5Q
YWdlKCkgY29uc3QKIHsKLSAgICBtX3NldHRpbmdzLnNldChrZXksIHZhbHVlKTsKLSAgICBtX2Ns
aWVudC0+c3RvcmVTZXR0aW5nKGtleSwgdmFsdWUpOworICAgIHJldHVybiBtX3N0YXRlLT5nZXRC
b29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlKTsKK30KKworYm9vbCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tp
bmdFbmFibGVkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQXBwbGljYXRp
b25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKQogewotICAgIHNldFNldHRpbmcoZnJv
bnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lLCBzZXR0aW5ncyk7CisgICAgbV9zdGF0ZS0+c2V0U3Ry
aW5nKEluc3BlY3RvclN0YXRlOjpmcm9udGVuZFNldHRpbmdzLCBzZXR0aW5ncyk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcm
IHNldHRpbmdzSlNPTikKQEAgLTI0OSw1MCArMjM3LDI0IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzSlNPTikKIAog
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRJbnNwZWN0b3JTdGF0ZShSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0Piogc3RhdGUpCiB7Ci0gICAgKCpzdGF0ZSktPnNldEJvb2xlYW4obW9uaXRvcmlu
Z1hIUlN0YXRlTmFtZSwgbV9tb25pdG9yaW5nWEhSKTsKLSAgICAoKnN0YXRlKS0+c2V0Qm9vbGVh
bihyZXNvdXJjZVRyYWNraW5nRW5hYmxlZFN0YXRlTmFtZSwgbV9yZXNvdXJjZVRyYWNraW5nRW5h
YmxlZCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgaWYgKG1fZGVidWdn
ZXJBZ2VudCkKLSAgICAgICAgKCpzdGF0ZSktPnNldE51bWJlcihwYXVzZU9uRXhjZXB0aW9uc1N0
YXRlU3RhdGVOYW1lLCBtX2RlYnVnZ2VyQWdlbnQtPnBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSk7
CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnBhdXNlT25FeGNl
cHRpb25zU3RhdGUsIG1fZGVidWdnZXJBZ2VudC0+cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpKTsK
ICNlbmRpZgorICAgICpzdGF0ZSA9IG1fc3RhdGUtPmdldFN0YXRlT2JqZWN0Rm9yRnJvbnRlbmQo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp1cGRhdGVJbnNwZWN0b3JTdGF0ZUNv
b2tpZSgpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3RhdGUgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIHN0YXRlLT5zZXRCb29sZWFuKG1vbml0b3JpbmdYSFJTdGF0
ZU5hbWUsIG1fbW9uaXRvcmluZ1hIUik7Ci0gICAgc3RhdGUtPnNldEJvb2xlYW4ocmVzb3VyY2VU
cmFja2luZ0VuYWJsZWRTdGF0ZU5hbWUsIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpOwotICAg
IHN0YXRlLT5zZXRCb29sZWFuKHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkU3RhdGVOYW1lLCBtX3Rp
bWVsaW5lQWdlbnQpOwotICAgIHN0YXRlLT5zZXRCb29sZWFuKHNlYXJjaGluZ0Zvck5vZGVFbmFi
bGVkU3RhdGVOYW1lLCBtX3NlYXJjaGluZ0Zvck5vZGUpOwotICAgIG1fY2xpZW50LT51cGRhdGVJ
bnNwZWN0b3JTdGF0ZUNvb2tpZShzdGF0ZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi12b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3Qg
U3RyaW5nJiBpbnNwZWN0b3JTdGF0ZVN0cmluZykKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0
YXRlQ29va2llKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gaW5zcGVjdG9yU3RhdGVW
YWx1ZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oaW5zcGVjdG9yU3RhdGVTdHJpbmcpOwot
ICAgIGlmICghaW5zcGVjdG9yU3RhdGVWYWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gaW5zcGVjdG9yU3RhdGUgPSBpbnNwZWN0b3JTdGF0ZVZhbHVl
LT5hc09iamVjdCgpOwotICAgIGlmICghaW5zcGVjdG9yU3RhdGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGluc3BlY3RvclN0YXRlLT5nZXRCb29sZWFuKG1vbml0b3JpbmdYSFJTdGF0ZU5hbWUs
ICZtX21vbml0b3JpbmdYSFIpOwotICAgIGluc3BlY3RvclN0YXRlLT5nZXRCb29sZWFuKHJlc291
cmNlVHJhY2tpbmdFbmFibGVkU3RhdGVOYW1lLCAmbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk7
Ci0gICAgaW5zcGVjdG9yU3RhdGUtPmdldEJvb2xlYW4oc2VhcmNoaW5nRm9yTm9kZUVuYWJsZWRT
dGF0ZU5hbWUsICZtX3NlYXJjaGluZ0Zvck5vZGUpOwotCi0gICAgYm9vbCB0aW1lbGluZVByb2Zp
bGVyRW5hYmxlZCA9IGZhbHNlOwotICAgIGluc3BlY3RvclN0YXRlLT5nZXRCb29sZWFuKHRpbWVs
aW5lUHJvZmlsZXJFbmFibGVkU3RhdGVOYW1lLCAmdGltZWxpbmVQcm9maWxlckVuYWJsZWQpOwot
ICAgIGlmICh0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCkKKyAgICBtX3N0YXRlLT5yZXN0b3JlRnJv
bUluc3BlY3RvckNvb2tpZShpbnNwZWN0b3JTdGF0ZUNvb2tpZSk7CisgICAgaWYgKG1fc3RhdGUt
PmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKSkKICAg
ICAgICAgc3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7Ci0gICAgZWxzZQotICAgICAgICBzdG9wVGlt
ZWxpbmVQcm9maWxlcigpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNldHRp
bmdzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBzZXR0aW5ncykKIHsKICAgICAqc2V0dGluZ3Mg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICgqc2V0dGluZ3MpLT5zZXRTdHJpbmco
ImFwcGxpY2F0aW9uIiwgc2V0dGluZyhmcm9udGVuZFNldHRpbmdzU2V0dGluZ05hbWUpKTsKKyAg
ICAoKnNldHRpbmdzKS0+c2V0U3RyaW5nKCJhcHBsaWNhdGlvbiIsIG1fc3RhdGUtPmdldFN0cmlu
ZyhJbnNwZWN0b3JTdGF0ZTo6ZnJvbnRlbmRTZXR0aW5ncykpOwogICAgICgqc2V0dGluZ3MpLT5z
ZXRTdHJpbmcoInNlc3Npb24iLCBtX3Nlc3Npb25TZXR0aW5ncy0+dG9KU09OU3RyaW5nKCkpOwog
fQogCkBAIC00MjksMTIgKzM5MSwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1hcmtU
aW1lbGluZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6c3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpCiB7Ci0gICAg
c2V0U2V0dGluZyhsYXN0QWN0aXZlUGFuZWwsIHBhbmVsTmFtZSk7CisgICAgbV9zdGF0ZS0+c2V0
U3RyaW5nKEluc3BlY3RvclN0YXRlOjpsYXN0QWN0aXZlUGFuZWwsIHBhbmVsTmFtZSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCkKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSB8
fCAhbV9zZWFyY2hpbmdGb3JOb2RlKQorICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3N0YXRlLT5n
ZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKQEAgLTQ0OSw3ICs0
MTEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhhbmRsZU1vdXNlUHJlc3MoKQogICAg
IGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9zZWFyY2hp
bmdGb3JOb2RlKTsKKyAgICBBU1NFUlQobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0
ZTo6c2VhcmNoaW5nRm9yTm9kZSkpOwogICAgIGlmICghbV9oaWdobGlnaHRlZE5vZGUpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtNDg4LDEyICs0NTAsMTEgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBmcmFtZSkKIAog
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCisgICAgaWYgKG1f
c3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUpID09IGVu
YWJsZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3NlYXJjaGluZ0Zvck5vZGUgPSBlbmFibGVk
OwotICAgIGlmICghbV9zZWFyY2hpbmdGb3JOb2RlKQorICAgIG1fc3RhdGUtPnNldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUsIGVuYWJsZWQpOworICAgIGlmICghZW5h
YmxlZCkKICAgICAgICAgaGlkZUhpZ2hsaWdodCgpOwotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRl
Q29va2llKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9y
Tm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKQpAQCAtNTA1LDExICs0NjYsNyBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVk
LCBib29sKiBuZXdTdGF0ZSkKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0TW9uaXRvcmlu
Z1hIUkVuYWJsZWQoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKIHsKICAgICAqbmV3U3Rh
dGUgPSBlbmFibGVkOwotICAgIGlmIChtX21vbml0b3JpbmdYSFIgPT0gZW5hYmxlZCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fbW9uaXRvcmluZ1hIUiA9IGVuYWJsZWQ7Ci0gICAgc2V0U2V0dGlu
Zyhtb25pdG9yaW5nWEhSU2V0dGluZ05hbWUsIGVuYWJsZWQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsK
LSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldEJvb2xl
YW4oSW5zcGVjdG9yU3RhdGU6Om1vbml0b3JpbmdYSFIsIGVuYWJsZWQpOwogfQogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCgpCkBAIC01NzMsNyArNTMwLDcgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93UGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChwYW5lbCA9PSBsYXN0QWN0aXZlUGFu
ZWwpCisgICAgaWYgKHBhbmVsID09IExhc3RBY3RpdmVQYW5lbCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9mcm9udGVuZC0+c2hvd1BhbmVsKHBhbmVsKTsKQEAgLTYwOSw3ICs1NjYsNyBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiAgICAgdW5iaW5k
QWxsUmVzb3VyY2VzKCk7CiAgICAgc3RvcFRpbWVsaW5lUHJvZmlsZXIoKTsKIAotICAgIG1fc2hv
d0FmdGVyVmlzaWJsZSA9IGxhc3RBY3RpdmVQYW5lbDsKKyAgICBtX3Nob3dBZnRlclZpc2libGUg
PSBMYXN0QWN0aXZlUGFuZWw7CiAKICAgICBoaWRlSGlnaGxpZ2h0KCk7CiAKQEAgLTY0Nyw4ICs2
MDQsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygp
CiAgICAgaWYgKCFtX2Zyb250ZW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9zaG93
QWZ0ZXJWaXNpYmxlID09IGxhc3RBY3RpdmVQYW5lbCkKLSAgICAgICAgbV9zaG93QWZ0ZXJWaXNp
YmxlID0gc2V0dGluZyhsYXN0QWN0aXZlUGFuZWwpOworICAgIGlmIChtX3Nob3dBZnRlclZpc2li
bGUgPT0gTGFzdEFjdGl2ZVBhbmVsKQorICAgICAgICBtX3Nob3dBZnRlclZpc2libGUgPSBtX3N0
YXRlLT5nZXRTdHJpbmcoSW5zcGVjdG9yU3RhdGU6Omxhc3RBY3RpdmVQYW5lbCk7CiAKICAgICBz
aG93UGFuZWwobV9zaG93QWZ0ZXJWaXNpYmxlKTsKIApAQCAtNzA2LDggKzY2Myw3IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZURlYnVnZ2VyKCkKICAgICBpZiAoSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6aXNEZWJ1Z2dlckFsd2F5c0VuYWJsZWQoKSkKICAgICAgICAgZW5hYmxl
RGVidWdnZXJGcm9tRnJvbnRlbmQoZmFsc2UpOwogICAgIGVsc2UgewotICAgICAgICBTdHJpbmcg
ZGVidWdnZXJFbmFibGVkID0gc2V0dGluZyhkZWJ1Z2dlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFt
ZSk7Ci0gICAgICAgIGlmIChkZWJ1Z2dlckVuYWJsZWQgPT0gInRydWUiIHx8IG1fYXR0YWNoRGVi
dWdnZXJXaGVuU2hvd24pCisgICAgICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3Rv
clN0YXRlOjpkZWJ1Z2dlckFsd2F5c0VuYWJsZWQpIHx8IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hv
d24pCiAgICAgICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOwogICAgIH0KICNlbmRpZgpAQCAtNzE4
LDExICs2NzQsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVQcm9maWxlcigp
CiAgICAgQVNTRVJUKG1fZnJvbnRlbmQpOwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQogICAgIG1fcHJvZmlsZXJBZ2VudC0+c2V0RnJvbnRlbmQobV9mcm9udGVuZC5nZXQoKSk7Ci0g
ICAgaWYgKCFTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJsZWQoKSkgewotICAg
ICAgICBTdHJpbmcgcHJvZmlsZXJFbmFibGVkU2V0dGluZyA9IHNldHRpbmcocHJvZmlsZXJBbHdh
eXNFbmFibGVkU2V0dGluZ05hbWUpOwotICAgICAgICBpZiAocHJvZmlsZXJFbmFibGVkU2V0dGlu
ZyA9PSAidHJ1ZSIpCi0gICAgICAgICAgICBlbmFibGVQcm9maWxlcigpOwotICAgIH0KKyAgICBp
ZiAoIVNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCgpICYmIG1fc3RhdGUt
PmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnByb2ZpbGVyQWx3YXlzRW5hYmxlZCkpCisgICAg
ICAgIGVuYWJsZVByb2ZpbGVyKCk7CiAjZW5kaWYKIH0KIApAQCAtODk1LDcgKzg0OCw3IEBAIElu
c3BlY3RvclJlc291cmNlKiBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRUcmFja2VkUmVzb3VyY2Uo
dW5zaWduZWQgbG9uZyBpZGVudGlmCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgaWYgKG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpCisgICAgaWYgKG1fc3Rh
dGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKSkK
ICAgICAgICAgcmV0dXJuIG1fcmVzb3VyY2VzLmdldChpZGVudGlmaWVyKS5nZXQoKTsKIAogICAg
IGJvb2wgaXNNYWluUmVzb3VyY2UgPSBtX21haW5SZXNvdXJjZSAmJiBtX21haW5SZXNvdXJjZS0+
aWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7CkBAIC05MjYsNyArODc5LDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRM
b2FkZXIqIGxvYWRlciwKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKICAgICBib29sIGlz
TWFpblJlc291cmNlID0gaXNNYWluUmVzb3VyY2VMb2FkZXIobG9hZGVyLCBLVVJMKFBhcnNlZFVS
TFN0cmluZywgY2FjaGVkUmVzb3VyY2UtPnVybCgpKSk7CiAgICAgZW5zdXJlU2V0dGluZ3NMb2Fk
ZWQoKTsKLSAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFtX3Jlc291cmNlVHJhY2tpbmdFbmFi
bGVkKQorICAgIGlmICghaXNNYWluUmVzb3VyY2UgJiYgIW1fc3RhdGUtPmdldEJvb2xlYW4oSW5z
cGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IEluc3BlY3RvclJlc291
cmNlOjpjcmVhdGVDYWNoZWQobV9pbnNwZWN0ZWRQYWdlLT5wcm9ncmVzcygpLT5jcmVhdGVVbmlx
dWVJZGVudGlmaWVyKCksIGxvYWRlciwgY2FjaGVkUmVzb3VyY2UpOwpAQCAtOTUwLDcgKzkwMyw3
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKIAogICAgIGJvb2wgaXNNYWluUmVzb3VyY2UgPSBp
c01haW5SZXNvdXJjZUxvYWRlcihsb2FkZXIsIHJlcXVlc3QudXJsKCkpOwogICAgIGVuc3VyZVNl
dHRpbmdzTG9hZGVkKCk7Ci0gICAgaWYgKCFpc01haW5SZXNvdXJjZSAmJiAhbV9yZXNvdXJjZVRy
YWNraW5nRW5hYmxlZCkKKyAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFtX3N0YXRlLT5nZXRC
b29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNw
ZWN0b3JSZXNvdXJjZTo6Y3JlYXRlKGlkZW50aWZpZXIsIGxvYWRlciwgcmVxdWVzdC51cmwoKSk7
CkBAIC0xMTM3LDEwICsxMDkwLDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzb3Vy
Y2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpCiAgICAgaWYg
KCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX21vbml0b3JpbmdYSFIp
CisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6Om1vbml0b3JpbmdY
SFIpKQogICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVz
c2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgIlhIUiBmaW5pc2hlZCBsb2FkaW5nOiBcIiIgKyB1
cmwgKyAiXCIuIiwgc2VuZExpbmVOdW1iZXIsIHNlbmRVUkwpOwogCi0gICAgaWYgKCFtX3Jlc291
cmNlVHJhY2tpbmdFbmFibGVkKQorICAgIGlmICghbV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0
b3JTdGF0ZTo6cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBJbnNwZWN0b3JSZXNvdXJjZSogcmVzb3VyY2UgPSBtX3Jlc291cmNlcy5nZXQoaWRlbnRpZmll
cikuZ2V0KCk7CkBAIC0xMTU1LDcgKzExMDgsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aQog
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdEltcG9ydGVkKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpCiB7Ci0gICAgaWYgKCFlbmFi
bGVkKCkgfHwgIW1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpCisgICAgaWYgKCFlbmFibGVkKCkg
fHwgIW1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdF
bmFibGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW5zcGVjdG9yUmVzb3VyY2UqIHJlc291
cmNlID0gbV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOwpAQCAtMTE3NCw4ICsxMTI3
LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZChib29sIGVuYWJsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1faW5zcGVjdGVk
UGFnZSk7Ci0gICAgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCA9IGVuYWJsZTsKLSAgICB1cGRh
dGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVj
dG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkLCBlbmFibGUpOwogfQogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxl
LCBib29sIGFsd2F5cywgYm9vbCogbmV3U3RhdGUpCkBAIC0xMTgzLDE4ICsxMTM1LDE2IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoYm9vbCBl
bmFibGUsIGJvb2wgYWx3YXlzLCBiCiAgICAgKm5ld1N0YXRlID0gZW5hYmxlOwogCiAgICAgaWYg
KGFsd2F5cykKLSAgICAgICAgc2V0U2V0dGluZyhyZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5hYmxl
ZFNldHRpbmdOYW1lLCBlbmFibGUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICAgICAgbV9zdGF0
ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJs
ZWQsIGVuYWJsZSk7CiAKLSAgICBpZiAobV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCA9PSBlbmFi
bGUpCisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNl
VHJhY2tpbmdFbmFibGVkKSA9PSBlbmFibGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VS
VChtX2luc3BlY3RlZFBhZ2UpOwotICAgIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQgPSBlbmFi
bGU7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VUcmFj
a2luZ0VuYWJsZWQsIGVuYWJsZSk7CiAKICAgICBpZiAoZW5hYmxlKQogICAgICAgICBtX2luc3Bl
Y3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPnNjaGVkdWxlUmVm
cmVzaCh0cnVlKTsKLQotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5zdXJlU2V0dGluZ3NMb2FkZWQoKQpAQCAtMTIwMywx
NSArMTE1MywxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuc3VyZVNldHRpbmdzTG9h
ZGVkKCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2V0dGluZ3NMb2FkZWQgPSB0cnVlOwogCi0g
ICAgU3RyaW5nIHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkID0gc2V0dGluZyhyZXNvdXJj
ZVRyYWNraW5nQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lKTsKLSAgICBpZiAocmVzb3VyY2VUcmFj
a2luZ0Fsd2F5c0VuYWJsZWQgPT0gInRydWUiKQotICAgICAgICBtX3Jlc291cmNlVHJhY2tpbmdF
bmFibGVkID0gdHJ1ZTsKLQotICAgIFN0cmluZyBtb25pdG9yaW5nWEhSQWx3YXlzRW5hYmxlZCA9
IHNldHRpbmcobW9uaXRvcmluZ1hIUlNldHRpbmdOYW1lKTsKLSAgICBpZiAobW9uaXRvcmluZ1hI
UkFsd2F5c0VuYWJsZWQgPT0gInRydWUiKQotICAgICAgICBtX21vbml0b3JpbmdYSFIgPSB0cnVl
OworICAgIG1fc3RhdGUtPnJlc3RvcmVGcm9tU2V0dGluZ3MoKTsKIAotICAgIHVwZGF0ZUluc3Bl
Y3RvclN0YXRlQ29va2llKCk7CisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9y
U3RhdGU6OnJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkKSkKKyAgICAgICAgbV9zdGF0ZS0+
c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQsIHRydWUp
OwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxlcigp
CkBAIC0xMjI2LDcgKzExNzEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VGlt
ZWxpbmVQcm9maWxlcigpCiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAgIG1fZnJvbnRlbmQt
PnRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCk7CiAKLSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0
ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnRpbWVs
aW5lUHJvZmlsZXJFbmFibGVkLCB0cnVlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzdG9wVGltZWxpbmVQcm9maWxlcigpCkBAIC0xMjQxLDcgKzExODYsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkKICAgICBpZiAobV9mcm9udGVu
ZCkKICAgICAgICAgbV9mcm9udGVuZC0+dGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQoKTsKIAot
ICAgIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVh
bihJbnNwZWN0b3JTdGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQsIGZhbHNlKTsKIH0KIAog
I2lmIEVOQUJMRShXT1JLRVJTKQpAQCAtMTYxMywxNCArMTU1OCwxNCBAQCBib29sIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0CiB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzLCBib29sIHNraXBSZWNvbXBpbGUpCiB7
CiAgICAgaWYgKGFsd2F5cykKLSAgICAgICAgc2V0U2V0dGluZyhwcm9maWxlckFsd2F5c0VuYWJs
ZWRTZXR0aW5nTmFtZSwgInRydWUiKTsKKyAgICAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNw
ZWN0b3JTdGF0ZTo6cHJvZmlsZXJBbHdheXNFbmFibGVkLCB0cnVlKTsKICAgICBtX3Byb2ZpbGVy
QWdlbnQtPmVuYWJsZShza2lwUmVjb21waWxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpCiB7CiAgICAgaWYgKGFsd2F5cykKLSAg
ICAgICAgc2V0U2V0dGluZyhwcm9maWxlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSwgImZhbHNl
Iik7CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnByb2ZpbGVy
QWx3YXlzRW5hYmxlZCwgZmFsc2UpOwogICAgIG1fcHJvZmlsZXJBZ2VudC0+ZGlzYWJsZSgpOwog
fQogI2VuZGlmCkBAIC0xNjMwLDcgKzE1NzUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGJvb2wgYWx3YXlzKQogewogICAgIEFTU0VSVCgh
ZGVidWdnZXJFbmFibGVkKCkpOwogICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNldFNldHRpbmco
ZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsICJ0cnVlIik7CisgICAgICAgIG1fc3Rh
dGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwgdHJ1
ZSk7CiAKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIApAQCAtMTY2MSw3ICsxNjA2LDcg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNldFNldHRpbmco
ZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsICJmYWxzZSIpOworICAgICAgICBtX3N0
YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpkZWJ1Z2dlckFsd2F5c0VuYWJsZWQsIGZh
bHNlKTsKIAogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogCkBAIC0xNzY1LDEyICsxNzEw
LDE0IEBAIFN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpicmVha3BvaW50c1NldHRpbmdLZXko
KQogCiBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JDb250cm9sbGVyOjpsb2Fk
QnJlYWtwb2ludHMoKQogewotICAgIHJldHVybiBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHNl
dHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5KCkpKTsKKyAgICBTdHJpbmcganNvblN0cmluZzsK
KyAgICBtX2NsaWVudC0+cG9wdWxhdGVTZXR0aW5nKGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpLCAm
anNvblN0cmluZyk7CisgICAgcmV0dXJuIEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvblN0
cmluZyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZUJyZWFrcG9pbnRzKFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cykKIHsKLSAgICBzZXRTZXR0aW5n
KGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpLCBicmVha3BvaW50cy0+dG9KU09OU3RyaW5nKCkpOwor
ICAgIG1fY2xpZW50LT5zdG9yZVNldHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5KCksIGJyZWFr
cG9pbnRzLT50b0pTT05TdHJpbmcoKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDBjMjg4NWUuLmE4NzUxMjAgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTY5LDYgKzY5LDcgQEAgY2xhc3MgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnNwZWN0
b3JQcm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CitjbGFzcyBJbnNwZWN0
b3JTdGF0ZTsKIGNsYXNzIEluc3BlY3RvclN0b3JhZ2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKQEAgLTEwMyw2ICsxMDQsNyBAQCBw
dWJsaWM6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2U+ID4gRGF0YWJhc2VSZXNvdXJjZXNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgUmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBET01TdG9yYWdlUmVzb3Vy
Y2VzTWFwOwogCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IExhc3RBY3RpdmVQYW5lbDsK
ICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ29uc29sZVBhbmVsOwogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBFbGVtZW50c1BhbmVsOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBQcm9maWxlc1BhbmVsOwpAQCAtMTIzLDEzICsxMjUsMTEgQEAgcHVibGljOgogICAgIFBh
Z2UqIGluc3BlY3RlZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KICAg
ICB2b2lkIHJlbG9hZFBhZ2UoKTsKIAotICAgIFN0cmluZyBzZXR0aW5nKGNvbnN0IFN0cmluZyYg
a2V5KSBjb25zdDsKLSAgICB2b2lkIHNldFNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUpOwogICAgIHZvaWQgc2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MoY29uc3Qg
U3RyaW5nJiBzZXR0aW5ncyk7CiAgICAgdm9pZCBzYXZlU2Vzc2lvblNldHRpbmdzKGNvbnN0IFN0
cmluZyYpOwogICAgIHZvaWQgZ2V0U2V0dGluZ3MoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qKTsK
IAotICAgIHZvaWQgcmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcm
IGluc3BlY3RvclN0YXRlKTsKKyAgICB2b2lkIHJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29r
aWUoY29uc3QgU3RyaW5nJiBpbnNwZWN0b3JDb29raWUpOwogCiAgICAgdm9pZCBpbnNwZWN0KE5v
ZGUqKTsKICAgICB2b2lkIGhpZ2hsaWdodChOb2RlKik7CkBAIC0xNTMsNyArMTUzLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKICAgICBjb25zdCBWZWN0b3I8
T3duUHRyPENvbnNvbGVNZXNzYWdlPiA+JiBjb25zb2xlTWVzc2FnZXMoKSBjb25zdCB7IHJldHVy
biBtX2NvbnNvbGVNZXNzYWdlczsgfQogCi0gICAgYm9vbCBzZWFyY2hpbmdGb3JOb2RlSW5QYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9zZWFyY2hpbmdGb3JOb2RlOyB9CisgICAgYm9vbCBzZWFyY2hp
bmdGb3JOb2RlSW5QYWdlKCkgY29uc3Q7CiAgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVu
dChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAgICAgdm9p
ZCBoYW5kbGVNb3VzZVByZXNzKCk7CiAKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCk7CiAgICAgdm9p
ZCBzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGJvb2wgYWx3YXlzLCBi
b29sKiBuZXdTdGF0ZSk7Ci0gICAgYm9vbCByZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQ7IH0KKyAgICBib29sIHJlc291cmNl
VHJhY2tpbmdFbmFibGVkKCkgY29uc3Q7CiAKICAgICB2b2lkIGVuc3VyZVNldHRpbmdzTG9hZGVk
KCk7CiAKQEAgLTI3MSwxMCArMjcxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUFsbFNj
cmlwdHNUb0V2YWx1YXRlT25Mb2FkKCk7CiAgICAgdm9pZCBzZXRJbnNwZWN0b3JFeHRlbnNpb25B
UEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpOwogCi0gICAgc3RhdGljIGNvbnN0IFN0cmluZyYgaW5z
cGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpOworICAgIGJvb2wgaW5zcGVjdG9yU3Rh
cnRzQXR0YWNoZWQoKTsKKyAgICB2b2lkIHNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGJvb2wp
OworICAgIHZvaWQgc2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpOworICAg
IGludCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHVw
ZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CiAgICAgdm9pZCBnZXRJbnNwZWN0b3JTdGF0ZShS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3RhdGUpOwogCiAgICAgZnJpZW5kIGNsYXNzIEluc3Bl
Y3RvckJhY2tlbmQ7CkBAIC0zNDYsNiArMzUwLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SW5z
cGVjdG9yU3RvcmFnZUFnZW50PiBtX3N0b3JhZ2VBZ2VudDsKICAgICBPd25QdHI8SW5zcGVjdG9y
Q1NTU3RvcmU+IG1fY3NzU3RvcmU7CiAgICAgT3duUHRyPEluc3BlY3RvclRpbWVsaW5lQWdlbnQ+
IG1fdGltZWxpbmVBZ2VudDsKKyAgICBPd25QdHI8SW5zcGVjdG9yU3RhdGU+IG1fc3RhdGU7CiAK
ICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogICAgIE93blB0cjxJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ+IG1fYXBwbGljYXRpb25DYWNoZUFnZW50OwpAQCAtMzcy
LDEwICszNzcsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbV9zZXNz
aW9uU2V0dGluZ3M7CiAjZW5kaWYKICAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7Ci0gICAgYm9v
bCBtX3NlYXJjaGluZ0Zvck5vZGU7Ci0gICAgYm9vbCBtX21vbml0b3JpbmdYSFI7CiAgICAgQ29u
c29sZU1lc3NhZ2UqIG1fcHJldmlvdXNNZXNzYWdlOwotICAgIGJvb2wgbV9yZXNvdXJjZVRyYWNr
aW5nRW5hYmxlZDsKICAgICBib29sIG1fc2V0dGluZ3NMb2FkZWQ7CiAgICAgUmVmUHRyPEluc3Bl
Y3RvckJhY2tlbmQ+IG1faW5zcGVjdG9yQmFja2VuZDsKICAgICBPd25QdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCmluZGV4IDc3
NjE2ZGEuLjQ4MTJiMmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwuY3BwCkBAIC00Nyw3ICs0Nyw2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0
TmFtZSA9ICJpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCI7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQg
ZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOwogc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1B
dHRhY2hlZEhlaWdodCA9IDI1MC4wZjsKIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNo
ZWRIZWlnaHRSYXRpbyA9IDAuNzVmOwpAQCAtMTA4LDcgKzEwNyw3IEBAIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQg
aGVpZ2h0KQogewogICAgIHVuc2lnbmVkIHRvdGFsSGVpZ2h0ID0gbV9mcm9udGVuZFBhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKSArIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7
CiAgICAgdW5zaWduZWQgYXR0YWNoZWRIZWlnaHQgPSBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93
SGVpZ2h0KGhlaWdodCwgdG90YWxIZWlnaHQpOwotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
c2V0U2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUsIFN0cmluZzo6bnVtYmVyKGF0
dGFjaGVkSGVpZ2h0KSk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRJbnNwZWN0b3JB
dHRhY2hlZEhlaWdodChhdHRhY2hlZEhlaWdodCk7CiAgICAgc2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQoYXR0YWNoZWRIZWlnaHQpOwogfQogCkBAIC0xMzQsMTAgKzEzMyw5IEBAIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCkK
IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93
SGVpZ2h0KCkKIHsKICAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2li
bGVIZWlnaHQoKTsKLSAgICBTdHJpbmcgYXR0YWNoZWRIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRy
b2xsZXItPnNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lKTsKKyAgICBpbnQgYXR0
YWNoZWRIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0KCk7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBpbnQgaGVpZ2h0ID0gYXR0YWNo
ZWRIZWlnaHQudG9JbnQoJnN1Y2Nlc3MpOwotICAgIHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCA9
IHN1Y2Nlc3MgPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVpZ2h0KSA6IGRlZmF1bHRBdHRhY2hl
ZEhlaWdodDsKKyAgICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGF0dGFjaGVkSGVpZ2h0KSA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsK
ICAgICAKICAgICAvLyBUaGlzIGNhbGwgbWlnaHQgbm90IGdvIHRocm91Z2ggKGlmIHRoZSB3aW5k
b3cgc3RhcnRzIG91dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUgd2luZG93IGlzIGluaXRpYWxseSBj
cmVhdGVkIGF0dGFjaGVkLAogICAgIC8vIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRv
dyBpcyBuZXZlciBjYWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHNldCB0aGUgYXR0
YWNoZWRXaW5kb3dIZWlnaHQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdGF0ZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyMDdmNwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcApAQCAtMCwwICsxLDE1NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKKworI2lu
Y2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIu
aCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW5z
cGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAg
IDogbV9jbGllbnQoY2xpZW50KQoreworICAgIHJlZ2lzdGVyQm9vbGVhbihtb25pdG9yaW5nWEhS
LCBmYWxzZSwgIm1vbml0b3JpbmdYSFIiLCAieGhyTW9uaXRvciIpOworICAgIHJlZ2lzdGVyQm9v
bGVhbihyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCwgZmFsc2UsICJyZXNvdXJjZVRyYWNraW5nRW5h
YmxlZCIsIChjb25zdCBjaGFyKikwKTsKKyAgICByZWdpc3RlckJvb2xlYW4ocmVzb3VyY2VUcmFj
a2luZ0Fsd2F5c0VuYWJsZWQsIGZhbHNlLCAoY29uc3QgY2hhciopMCwgInJlc291cmNlVHJhY2tp
bmdFbmFibGVkIik7CisgICAgcmVnaXN0ZXJCb29sZWFuKHRpbWVsaW5lUHJvZmlsZXJFbmFibGVk
LCBmYWxzZSwgInRpbWVsaW5lUHJvZmlsZXJFbmFibGVkIiwgKGNvbnN0IGNoYXIqKTApOworICAg
IHJlZ2lzdGVyQm9vbGVhbihzZWFyY2hpbmdGb3JOb2RlLCBmYWxzZSwgInNlYXJjaGluZ0Zvck5v
ZGVFbmFibGVkIiwgKGNvbnN0IGNoYXIqKTApOworICAgIHJlZ2lzdGVyQm9vbGVhbihwcm9maWxl
ckFsd2F5c0VuYWJsZWQsIGZhbHNlLCAoY29uc3QgY2hhciopMCwgInByb2ZpbGVyRW5hYmxlZCIp
OworICAgIHJlZ2lzdGVyU3RyaW5nKGZyb250ZW5kU2V0dGluZ3MsICIiLCAoY29uc3QgY2hhciop
MCwgImZyb250ZW5kU2V0dGluZ3MiKTsKKyAgICByZWdpc3RlckJvb2xlYW4oZGVidWdnZXJBbHdh
eXNFbmFibGVkLCBmYWxzZSwgKGNvbnN0IGNoYXIqKTAsICJkZWJ1Z2dlckVuYWJsZWQiKTsKKyAg
ICByZWdpc3RlclN0cmluZyhsYXN0QWN0aXZlUGFuZWwsIEluc3BlY3RvckNvbnRyb2xsZXI6Okxh
c3RBY3RpdmVQYW5lbCwgKGNvbnN0IGNoYXIqKTAsICJsYXN0QWN0aXZlUGFuZWwiKTsKKyAgICBy
ZWdpc3RlckJvb2xlYW4oaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQsIHRydWUsIChjb25zdCBjaGFy
KikwLCAiSW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQiKTsKKyAgICByZWdpc3RlckxvbmcoaW5zcGVj
dG9yQXR0YWNoZWRIZWlnaHQsIEluc3BlY3RvckNvbnRyb2xsZXI6OmRlZmF1bHRBdHRhY2hlZEhl
aWdodCwgKGNvbnN0IGNoYXIqKTAsICJpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCIpOworICAgIHJl
Z2lzdGVyTG9uZyhwYXVzZU9uRXhjZXB0aW9uc1N0YXRlLCAwLCAicGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSIsIChjb25zdCBjaGFyKikwKTsKK30KKwordm9pZCBJbnNwZWN0b3JTdGF0ZTo6cmVzdG9y
ZUZyb21JbnNwZWN0b3JDb29raWUoY29uc3QgU3RyaW5nJiBqc29uKQoreworICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4ganNvblZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihqc29u
KTsKKyAgICBpZiAoIWpzb25WYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4ganNvbk9iamVjdCA9IGpzb25WYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBp
ZiAoIWpzb25PYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoSW5zcGVjdG9yT2Jq
ZWN0OjppdGVyYXRvciBpID0ganNvbk9iamVjdC0+YmVnaW4oKTsgaSAhPSBqc29uT2JqZWN0LT5l
bmQoKTsgKytpKSB7CisgICAgICAgIEluc3BlY3RvclByb3BlcnR5SWQgaWQgPSAoSW5zcGVjdG9y
UHJvcGVydHlJZClpLT5maXJzdC50b0ludCgpOworICAgICAgICBBU1NFUlQoaWQgPiAwICYmIGlk
IDwgbGFzdFByb3BlcnR5SWQpOworICAgICAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaiA9IG1f
cHJvcGVydGllcy5maW5kKGlkKTsKKyAgICAgICAgQVNTRVJUKGogIT0gbV9wcm9wZXJ0aWVzLmVu
ZCgpKTsKKyAgICAgICAgQVNTRVJUKGotPnNlY29uZC5tX3ZhbHVlLT50eXBlKCkgPT0gaS0+c2Vj
b25kLT50eXBlKCkpOworICAgICAgICBqLT5zZWNvbmQubV92YWx1ZSA9IGktPnNlY29uZDsKKyAg
ICB9Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdGF0ZTo6Z2V0
U3RhdGVPYmplY3RGb3JGcm9udGVuZCgpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
c3RhdGVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGZvciAoUHJvcGVy
dHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuYmVnaW4oKTsgaSAhPSBtX3Byb3BlcnRp
ZXMuZW5kKCk7ICsraSkgeworICAgICAgICBpZiAoaS0+c2Vjb25kLm1fc3RhdGVOYW1lLmxlbmd0
aCgpKQorICAgICAgICAgICAgc3RhdGVPYmplY3QtPnNldFZhbHVlKGktPnNlY29uZC5tX3N0YXRl
TmFtZSwgaS0+c2Vjb25kLm1fdmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gc3RhdGVPYmplY3Qu
cmVsZWFzZSgpOworfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbVNldHRpbmdz
KCkKK3sKKyAgICBmb3IgKFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmJl
Z2luKCk7IGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGktPnNl
Y29uZC5tX3ByZWZlcmVuY2VOYW1lLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgdmFs
dWU7CisgICAgICAgICAgICBtX2NsaWVudC0+cG9wdWxhdGVTZXR0aW5nKGktPnNlY29uZC5tX3By
ZWZlcmVuY2VOYW1lLCAmdmFsdWUpOworICAgICAgICAgICAgc3dpdGNoIChpLT5zZWNvbmQubV92
YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEluc3BlY3RvclZhbHVlOjpUeXBlQm9v
bGVhbjoKKyAgICAgICAgICAgICAgICBpLT5zZWNvbmQubV92YWx1ZSA9IEluc3BlY3RvckJhc2lj
VmFsdWU6OmNyZWF0ZSh2YWx1ZSA9PSAidHJ1ZSIpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JWYWx1ZTo6VHlwZVN0cmluZzoKKyAgICAgICAgICAg
ICAgICBpLT5zZWNvbmQubV92YWx1ZSA9IEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yVmFsdWU6
OlR5cGVOdW1iZXI6CisgICAgICAgICAgICAgICAgaS0+c2Vjb25kLm1fdmFsdWUgPSBJbnNwZWN0
b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUudG9JbnQoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3RhdGU6OnVwZGF0ZUNvb2tpZSgpCit7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gY29va2llT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBmb3IgKFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmJlZ2lu
KCk7IGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpOyArK2kpCisgICAgICAgIGNvb2tpZU9iamVjdC0+
c2V0VmFsdWUoU3RyaW5nOjpudW1iZXIoaS0+Zmlyc3QpLCBpLT5zZWNvbmQubV92YWx1ZSk7Cisg
ICAgbV9jbGllbnQtPnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKGNvb2tpZU9iamVjdC0+dG9K
U09OU3RyaW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjpzZXRWYWx1ZShJbnNwZWN0
b3JQcm9wZXJ0eUlkIGlkLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSwgY29uc3Qg
U3RyaW5nJiBzdHJpbmdWYWx1ZSkKK3sKKyAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1f
cHJvcGVydGllcy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCkp
OworICAgIGktPnNlY29uZC5tX3ZhbHVlID0gdmFsdWU7CisgICAgaWYgKGktPnNlY29uZC5tX3By
ZWZlcmVuY2VOYW1lLmxlbmd0aCgpKQorICAgICAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGkt
PnNlY29uZC5tX3ByZWZlcmVuY2VOYW1lLCBzdHJpbmdWYWx1ZSk7CisgICAgdXBkYXRlQ29va2ll
KCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3RhdGU6OmdldEJvb2xlYW4oSW5zcGVjdG9yUHJvcGVy
dHlJZCBpZCkKK3sKKyAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVydGllcy5m
aW5kKGlkKTsKKyAgICBBU1NFUlQoaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpOworICAgIGJvb2wg
dmFsdWUgPSBmYWxzZTsKKyAgICBpLT5zZWNvbmQubV92YWx1ZS0+YXNCb29sZWFuKCZ2YWx1ZSk7
CisgICAgcmV0dXJuIHZhbHVlOworfQorCitTdHJpbmcgSW5zcGVjdG9yU3RhdGU6OmdldFN0cmlu
ZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIGlkKQoreworICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBp
ID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5l
bmQoKSk7CisgICAgU3RyaW5nIHZhbHVlOworICAgIGktPnNlY29uZC5tX3ZhbHVlLT5hc1N0cmlu
ZygmdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworbG9uZyBJbnNwZWN0b3JTdGF0ZTo6
Z2V0TG9uZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIGlkKQoreworICAgIFByb3BlcnR5TWFwOjppdGVy
YXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpICE9IG1fcHJvcGVy
dGllcy5lbmQoKSk7CisgICAgbG9uZyB2YWx1ZSA9IDA7CisgICAgaS0+c2Vjb25kLm1fdmFsdWUt
PmFzTnVtYmVyKCZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlMjM1Ngot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmgKQEAg
LTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JTdGF0ZV9oCisjZGVmaW5lIEluc3Bl
Y3RvclN0YXRlX2gKKworI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5zcGVjdG9y
Q2xpZW50OworCitjbGFzcyBJbnNwZWN0b3JTdGF0ZSB7CitwdWJsaWM6CisgICAgZW51bSBJbnNw
ZWN0b3JQcm9wZXJ0eUlkIHsKKyAgICAgICAgbW9uaXRvcmluZ1hIUiA9IDEsCisgICAgICAgIHJl
c291cmNlVHJhY2tpbmdFbmFibGVkLAorICAgICAgICByZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5h
YmxlZCwKKyAgICAgICAgdGltZWxpbmVQcm9maWxlckVuYWJsZWQsCisgICAgICAgIHNlYXJjaGlu
Z0Zvck5vZGUsCisgICAgICAgIHByb2ZpbGVyQWx3YXlzRW5hYmxlZCwKKyAgICAgICAgZnJvbnRl
bmRTZXR0aW5ncywKKyAgICAgICAgZGVidWdnZXJBbHdheXNFbmFibGVkLAorICAgICAgICBsYXN0
QWN0aXZlUGFuZWwsCisgICAgICAgIGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkLAorICAgICAgICBp
bnNwZWN0b3JBdHRhY2hlZEhlaWdodCwKKyAgICAgICAgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSwK
KyAgICAgICAgbGFzdFByb3BlcnR5SWQKKyAgICB9OworCisgICAgSW5zcGVjdG9yU3RhdGUoSW5z
cGVjdG9yQ2xpZW50KiBjbGllbnQpOworCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGdldFN0YXRlT2JqZWN0Rm9yRnJvbnRlbmQoKTsKKyAgICB2b2lkIHJlc3RvcmVGcm9tSW5zcGVj
dG9yQ29va2llKGNvbnN0IFN0cmluZyYganNvblN0cmluZyk7CisgICAgdm9pZCByZXN0b3JlRnJv
bVNldHRpbmdzKCk7CisKKyAgICBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBw
cm9wZXJ0eUlkKTsKKyAgICBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQgcHJv
cGVydHlJZCk7CisgICAgbG9uZyBnZXRMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJ
ZCk7CisKKyAgICB2b2lkIHNldEJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlk
LCBib29sIHZhbHVlKSB7IHNldFZhbHVlKHByb3BlcnR5SWQsIEluc3BlY3RvckJhc2ljVmFsdWU6
OmNyZWF0ZSh2YWx1ZSksIHZhbHVlID8gInRydWUiIDogImZhbHNlIik7IH0KKyAgICB2b2lkIHNl
dFN0cmluZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFs
dWUpIHsgc2V0VmFsdWUocHJvcGVydHlJZCwgSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUp
LCB2YWx1ZSk7IH0KKyAgICB2b2lkIHNldExvbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0
eUlkLCBsb25nIHZhbHVlKSB7IHNldFZhbHVlKHByb3BlcnR5SWQsIEluc3BlY3RvckJhc2ljVmFs
dWU6OmNyZWF0ZSh2YWx1ZSksIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7IH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIHVwZGF0ZUNvb2tpZSgpOworICAgIHZvaWQgc2V0VmFsdWUoSW5zcGVjdG9yUHJv
cGVydHlJZCBwcm9wZXJ0eUlkLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSwgY29u
c3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSk7CisKKyAgICBzdHJ1Y3QgUHJvcGVydHkgeworICAgICAg
ICBzdGF0aWMgUHJvcGVydHkgY3JlYXRlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVl
LCBjb25zdCBTdHJpbmcmIHN0YXRlTmFtZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSk7
CisgICAgICAgIFN0cmluZyBtX3N0YXRlTmFtZTsKKyAgICAgICAgU3RyaW5nIG1fcHJlZmVyZW5j
ZU5hbWU7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbV92YWx1ZTsKKyAgICB9Owor
ICAgIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBQcm9wZXJ0eT4gUHJvcGVydHlNYXA7CisgICAgUHJv
cGVydHlNYXAgbV9wcm9wZXJ0aWVzOworCisgICAgdm9pZCByZWdpc3RlckJvb2xlYW4oSW5zcGVj
dG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBib29sIHZhbHVlLCBjb25zdCBTdHJpbmcmIHN0YXRl
TmFtZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSkgeyBtX3Byb3BlcnRpZXMuc2V0KHBy
b3BlcnR5SWQsIFByb3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZh
bHVlKSwgc3RhdGVOYW1lLCBwcmVmZXJlbmNlTmFtZSkpO30KKyAgICB2b2lkIHJlZ2lzdGVyU3Ry
aW5nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
Y29uc3QgU3RyaW5nJiBzdGF0ZU5hbWUsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpIHsg
bV9wcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlkLCBQcm9wZXJ0eTo6Y3JlYXRlKEluc3BlY3RvclN0
cmluZzo6Y3JlYXRlKHZhbHVlKSwgc3RhdGVOYW1lLCBwcmVmZXJlbmNlTmFtZSkpO30KKyAgICB2
b2lkIHJlZ2lzdGVyTG9uZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGxvbmcgdmFs
dWUsIGNvbnN0IFN0cmluZyYgc3RhdGVOYW1lLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1l
KSB7IG1fcHJvcGVydGllcy5zZXQocHJvcGVydHlJZCwgUHJvcGVydHk6OmNyZWF0ZShJbnNwZWN0
b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpLCBzdGF0ZU5hbWUsIHByZWZlcmVuY2VOYW1lKSk7
fSAgICAKKworICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7Cit9OworCitpbmxpbmUgSW5z
cGVjdG9yU3RhdGU6OlByb3BlcnR5IEluc3BlY3RvclN0YXRlOjpQcm9wZXJ0eTo6Y3JlYXRlKFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIHN0YXRlTmFtZSwg
Y29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSkKK3sKKyAgICBQcm9wZXJ0eSBwcm9wZXJ0eTsK
KyAgICBwcm9wZXJ0eS5tX3ZhbHVlID0gdmFsdWU7CisgICAgcHJvcGVydHkubV9zdGF0ZU5hbWUg
PSBzdGF0ZU5hbWU7CisgICAgcHJvcGVydHkubV9wcmVmZXJlbmNlTmFtZSA9IHByZWZlcmVuY2VO
YW1lOworICAgIHJldHVybiBwcm9wZXJ0eTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yU3RhdGVfaCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDQ1MmZhN2YuLmZjY2IyNzYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcApAQCAtNjUzLDYgKzY1MywxNCBAQCBib29sIEluc3BlY3Rvck9i
amVjdDo6Z2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKiBvdXRwdXQpIGNvbnN0
CiAgICAgcmV0dXJuIHZhbHVlLT5hc051bWJlcihvdXRwdXQpOwogfQogCitib29sIEluc3BlY3Rv
ck9iamVjdDo6Z2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgbG9uZyogb3V0cHV0KSBjb25z
dAoreworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CisgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YWx1ZS0+YXNO
dW1iZXIob3V0cHV0KTsKK30KKwogYm9vbCBJbnNwZWN0b3JPYmplY3Q6OmdldFN0cmluZyhjb25z
dCBTdHJpbmcmIG5hbWUsIFN0cmluZyogb3V0cHV0KSBjb25zdAogewogICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oCmluZGV4IDM5MTM3MmUuLmViZjQzNTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oCkBAIC0xMDYsNiArMTA2LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CiAgICAgfQogCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGxvbmcgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsK
KyAgICB9CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBjcmVh
dGUoZG91YmxlIHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNw
ZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CkBAIC0xMjIsNiArMTI3LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGJvb2wgdmFsdWUpIDogSW5z
cGVjdG9yVmFsdWUoVHlwZUJvb2xlYW4pLCBtX2Jvb2xWYWx1ZSh2YWx1ZSkgeyB9CiAgICAgZXhw
bGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShpbnQgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlw
ZU51bWJlciksIG1fZG91YmxlVmFsdWUoKGRvdWJsZSl2YWx1ZSkgeyB9CisgICAgZXhwbGljaXQg
SW5zcGVjdG9yQmFzaWNWYWx1ZShsb25nIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVOdW1i
ZXIpLCBtX2RvdWJsZVZhbHVlKChkb3VibGUpdmFsdWUpIHsgfQogICAgIGV4cGxpY2l0IEluc3Bl
Y3RvckJhc2ljVmFsdWUoZG91YmxlIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVOdW1iZXIp
LCBtX2RvdWJsZVZhbHVlKHZhbHVlKSB7IH0KIAogICAgIHVuaW9uIHsKQEAgLTE4MSw2ICsxODcs
NyBAQCBwdWJsaWM6CiAgICAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0OwogICAgIGJvb2wgZ2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIG91
dHB1dCkgY29uc3Q7CiAgICAgYm9vbCBnZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3Vi
bGUqIG91dHB1dCkgY29uc3Q7CisgICAgYm9vbCBnZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1l
LCBsb25nKiBvdXRwdXQpIGNvbnN0OwogICAgIGJvb2wgZ2V0U3RyaW5nKGNvbnN0IFN0cmluZyYg
bmFtZSwgU3RyaW5nKiBvdXRwdXQpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRl
eCBkYjk4NTBiLi5kMDdlOTZlIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEwLTEwLTA5ICBJbHlh
IFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnNwZWN0b3Igc2V0
dGluZ3MvcHJvcGVydGllcy9zdGF0ZXMgbWFuYWdlbWVudAorICAgICAgICBzaG91bGQgYmUgZXh0
cmFjdGVkIGludG8gc2VwYXJhdGUgY2xhc3MuCisKKyAgICAgICAgV2UgaGF2ZSBhIGxvdCBvZiBm
bGFncy92YWx1ZXMgaW4gSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICAgICAgU29tZSBmbGFncyBh
cmUgcGVyc2lzdGluZyBpbnRvIHByb2ZpbGUuCisgICAgICAgIE90aGVycyBhcmUgcGFydCBvZiBp
bnNwZWN0b3Igc3RhdGUgZm9yIGZyb250ZW5kLgorICAgICAgICBBbGwgdGhlc2UgZmxhZ3Mgc2hv
dWxkIGtlZXAgdGhlaXIgdmFsdWVzIGFmdGVyIG5hdmlnYXRpb24uCisgICAgICAgIEl0J2QgYmUg
YmV0dGVyIHRvIGV4dHJhY3QgdGhlc2UgZmxhZ3MvdmFsdWVzIGludG8gc2VwYXJhdGUKKyAgICAg
ICAgY2xhc3Mgd2hpY2ggd2lsbCBjYXJlIGFib3V0IHRoZWlycyBsaWZldGltZS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyNzUKKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbToKKyAgICAgICAgKC1bV2Vi
SW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBzaG93V2luZG93Ol0pOgorICAgICAgICAoLVtXZWJJ
bnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGF0dGFjaF0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0
b3JXaW5kb3dDb250cm9sbGVyIGRldGFjaF0pOgorCiAyMDEwLTEwLTA3ICBKZXNzaWUgQmVybGlu
ICA8amJlcmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50
Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0KaW5k
ZXggZDRkMDIxMy4uZDZkYzg3OSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JDbGllbnQubW0KKysrIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJJbnNwZWN0b3JDbGllbnQubW0KQEAgLTM1OCw4ICszNTgsNyBAQCB2b2lkIFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0CiAgICAgX3Zpc2libGUg
PSBZRVM7CiAgICAgCiAgICAgLy8gSWYgbm8gcHJlZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0IHRv
IGFuIGF0dGFjaGVkIHdpbmRvdy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGluc3BlY3RvciBMYXlv
dXRUZXN0cy4KLSAgICBTdHJpbmcgc2hvdWxkQXR0YWNoID0gW19pbnNwZWN0ZWRXZWJWaWV3IHBh
Z2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6
aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpKTsKLSAgICBfc2hvdWxkQXR0YWNo
ID0gc2hvdWxkQXR0YWNoICE9ICJmYWxzZSI7CisgICAgX3Nob3VsZEF0dGFjaCA9IFtfaW5zcGVj
dGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5pbnNwZWN0b3JTdGFydHNB
dHRhY2hlZCgpOwogICAgIAogICAgIGlmIChfc2hvdWxkQXR0YWNoICYmICFfZnJvbnRlbmRDbGll
bnQtPmNhbkF0dGFjaFdpbmRvdygpKQogICAgICAgICBfc2hvdWxkQXR0YWNoID0gTk87CkBAIC0z
OTQsNyArMzkzLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6dXBkYXRlV2lu
ZG93VGl0bGUoKSBjb25zdAogICAgIGlmIChfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLT5zZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0
YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSwgInRydWUiKTsKKyAgICBbX2luc3BlY3RlZFdlYlZp
ZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNo
ZWQodHJ1ZSk7CiAKICAgICBbc2VsZiBjbG9zZV07CiAgICAgW3NlbGYgc2hvd1dpbmRvdzpuaWxd
OwpAQCAtNDA1LDcgKzQwNCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVw
ZGF0ZVdpbmRvd1RpdGxlKCkgY29uc3QKICAgICBpZiAoIV9hdHRhY2hlZFRvSW5zcGVjdGVkV2Vi
VmlldykKICAgICAgICAgcmV0dXJuOwogCi0gICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5z
cGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAiZmFsc2UiKTsKKyAgICBbX2luc3Bl
Y3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yU3Rh
cnRzQXR0YWNoZWQoZmFsc2UpOwogCiAgICAgW3NlbGYgY2xvc2VdOwogICAgIFtzZWxmIHNob3dX
aW5kb3c6bmlsXTsKZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKaW5kZXggMTVhMTIxNy4uYWI4YmMxMCAxMDA2NDQKLS0tIGEvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAor
MjAxMC0xMC0wOSAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogaW5zcGVjdG9yIHNldHRpbmdzL3Byb3BlcnRpZXMvc3RhdGVzIG1hbmFnZW1lbnQKKyAgICAg
ICAgc2hvdWxkIGJlIGV4dHJhY3RlZCBpbnRvIHNlcGFyYXRlIGNsYXNzLgorCisgICAgICAgIFdl
IGhhdmUgYSBsb3Qgb2YgZmxhZ3MvdmFsdWVzIGluIEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAg
ICAgIFNvbWUgZmxhZ3MgYXJlIHBlcnNpc3RpbmcgaW50byBwcm9maWxlLgorICAgICAgICBPdGhl
cnMgYXJlIHBhcnQgb2YgaW5zcGVjdG9yIHN0YXRlIGZvciBmcm9udGVuZC4KKyAgICAgICAgQWxs
IHRoZXNlIGZsYWdzIHNob3VsZCBrZWVwIHRoZWlyIHZhbHVlcyBhZnRlciBuYXZpZ2F0aW9uLgor
ICAgICAgICBJdCdkIGJlIGJldHRlciB0byBleHRyYWN0IHRoZXNlIGZsYWdzL3ZhbHVlcyBpbnRv
IHNlcGFyYXRlCisgICAgICAgIGNsYXNzIHdoaWNoIHdpbGwgY2FyZSBhYm91dCB0aGVpcnMgbGlm
ZXRpbWUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ3Mjc1CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3Bw
OgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFjaFdpbmRvdyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGV0YWNoV2luZG93KToKKyAgICAg
ICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzaG93V2luZG93V2l0aG91dE5vdGlmaWNh
dGlvbnMpOgorCiAyMDEwLTEwLTA3ICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdpdCBhL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1dlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAppbmRleCAxYjc5ZGRlLi4wMzAyMDA5
IDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVu
dC5jcHAKKysrIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQu
Y3BwCkBAIC0yNzMsNyArMjczLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
YXR0YWNoV2luZG93KCkKICAgICBpZiAobV9hdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0
U2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRp
bmdOYW1lKCksICJ0cnVlIik7CisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQodHJ1ZSk7CiAKICAg
ICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiAgICAgc2hvd1dpbmRvd1dpdGhv
dXROb3RpZmljYXRpb25zKCk7CkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6ZGV0YWNoV2luZG93KCkKICAgICBpZiAoIW1fYXR0YWNoZWQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3Rh
cnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAiZmFsc2UiKTsKKyAgICBtX2luc3BlY3RlZFdlYlZp
ZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JTdGFydHNBdHRh
Y2hlZChmYWxzZSk7CiAKICAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiAg
ICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CkBAIC0zNjQsOCArMzY0LDcgQEAg
dm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmlj
YXRpb25zKCkKICAgICAgICAgc2hvdWxkQXR0YWNoID0gdHJ1ZTsKICAgICBlbHNlIHsKICAgICAg
ICAgLy8gSWYgbm8gcHJlZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0IHRvIGFuIGF0dGFjaGVkIHdp
bmRvdy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGluc3BlY3RvciBMYXlvdXRUZXN0cy4KLSAgICAg
ICAgU3RyaW5nIHNob3VsZEF0dGFjaFByZWYgPSBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3Bl
Y3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSk7Ci0gICAgICAgIHNob3VsZEF0dGFjaCA9
IHNob3VsZEF0dGFjaFByZWYgIT0gImZhbHNlIjsKKyAgICAgICAgc2hvdWxkQXR0YWNoID0gbV9p
bnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVjdG9y
U3RhcnRzQXR0YWNoZWQoKTsKIAogICAgICAgICBpZiAoc2hvdWxkQXR0YWNoICYmICFjYW5BdHRh
Y2hXaW5kb3coKSkKICAgICAgICAgICAgIHNob3VsZEF0dGFjaCA9IGZhbHNlOwo=
</data>
<flag name="review"
          id="60200"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70720</attachid>
            <date>2010-10-14 02:19:13 -0700</date>
            <delta_ts>2010-10-14 06:14:37 -0700</delta_ts>
            <desc>[patch] third iteration. OOP</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>55841</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDEzZGNhOTQuLjU2ZTdjZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExNCw2ICsxMTE0LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzFiYThiNi4uYjhlYjYwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NiBAQAorMjAxMC0xMC0xNCAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW5zcGVjdG9yIHNldHRpbmdzL3By
b3BlcnRpZXMvc3RhdGVzIG1hbmFnZW1lbnQKKyAgICAgICAgc2hvdWxkIGJlIGV4dHJhY3RlZCBp
bnRvIHNlcGFyYXRlIGNsYXNzLgorCisgICAgICAgIFdlIGhhdmUgYSBsb3Qgb2YgZmxhZ3MvdmFs
dWVzIGluIEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIFNvbWUgZmxhZ3MgYXJlIHBlcnNp
c3RpbmcgaW50byBwcm9maWxlLgorICAgICAgICBPdGhlcnMgYXJlIHBhcnQgb2YgaW5zcGVjdG9y
IHN0YXRlIGZvciBmcm9udGVuZC4KKyAgICAgICAgQWxsIHRoZXNlIGZsYWdzIHNob3VsZCBrZWVw
IHRoZWlyIHZhbHVlcyBhZnRlciBuYXZpZ2F0aW9uLgorICAgICAgICBJdCdkIGJlIGJldHRlciB0
byBleHRyYWN0IHRoZXNlIGZsYWdzL3ZhbHVlcyBpbnRvIHNlcGFyYXRlCisgICAgICAgIGNsYXNz
IHdoaWNoIHdpbGwgY2FyZSBhYm91dCB0aGVpcnMgbGlmZXRpbWUuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mjc1CisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
LmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQXR0YWNo
ZWRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2VhcmNo
aW5nRm9yTm9kZUluUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpnZXRJbnNwZWN0b3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNldHRpbmdzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3JlTGFzdEFjdGl2ZVBhbmVs
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmhhbmRs
ZU1vdXNlUHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
U2VhcmNoaW5nRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRNb25pdG9yaW5nWEhSRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzaG93UGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmdldFRyYWNrZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aWRlbnRpZmllckZvckluaXRp
YWxSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291
cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbnN1cmVTZXR0aW5nc0xvYWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWVsaW5lUHJvZmls
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmls
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2Zp
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVn
Z2VyRnJvbUZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpc2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
Ojpsb2FkQnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6c2F2ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNo
YW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWw6OnJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdGF0ZTo6SW5zcGVjdG9yU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yU3RhdGU6OnJlc3RvcmVGcm9tSW5zcGVjdG9yQ29va2llKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0YXRlOjpnZXRTdGF0ZU9iamVjdEZvckZyb250ZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpsb2FkRnJvbVNldHRpbmdzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0YXRlOjp1cGRhdGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3RhdGU6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0
YXRlOjpnZXRCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpnZXRT
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldExvbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyQm9vbGVhbik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6cmVnaXN0ZXJTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyTG9uZyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdGF0ZTo6UHJvcGVydHk6OmNyZWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclN0YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6
OnNldEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnNldFN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6c2V0TG9uZyk6CisKIDIwMTAt
MTAtMDggIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGE5YTI5MzMuLjU1NjM0OWIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtMTgzMiw2ICsxODMyLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggXAogCVdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVz
b3VyY2UuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIFwKKwlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdG9yYWdlQWdlbnQuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdG9y
YWdlQWdlbnQuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAg
XApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KaW5kZXggZmNiMGVmZC4uNDMwOGY5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgorKysgYi9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0xMjE2LDcgKzEyMTYsNiBA
QCBfX1pON1dlYkNvcmUyMkdlb2xvY2F0aW9uU2VydmljZU1vY2s4c2V0RXJyb3JFTjNXVEYxMFBh
c3NSZWZQdHJJTlNfMTNQb3NpdGlvbkVycgogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTBzZXRTZXR0aW5nRVJLTjNXVEY2
U3RyaW5nRVM0XwogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJDb25zb2xlUGFu
ZWxFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMlNjcmlwdHNQYW5lbEUKIF9f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEzUHJvZmlsZXNQYW5lbEUKQEAgLTEyMjcs
MTIgKzEyMjYsMTIgQEAgX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxl
UHJvZmlsZXJFYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMThkaXNjb25uZWN0
RnJvbnRlbmRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjBzdG9wVGltZWxp
bmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMXN0YXJ0VGlt
ZWxpbmVQcm9maWxlckV2CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyM2luc3Bl
Y3RvclN0YXJ0c0F0dGFjaGVkRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI1
ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZEVsUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUx
OUluc3BlY3RvckNvbnRyb2xsZXIyNnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50RU4zV1RGMTBQ
YXNzT3duUHRySU5TXzIzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFRUUKK19fWk43V2ViQ29yZTE5
SW5zcGVjdG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRFYgogX19aTjdX
ZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmdF
dgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzdG9wVXNlckluaXRpYXRlZFBy
b2ZpbGluZ0V2Ci1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIzNGluc3BlY3RvclN0
YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWVFdgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9s
bGVyMzRpbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lRXYKIF9fWk5LN1dlYkNvcmUx
OUluc3BlY3RvckNvbnRyb2xsZXIzMWlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGVFdgog
X19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1cHJvZmlsZXJFbmFibGVkRXYKIF9f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjRzaG93RXYKQEAgLTEyNTIsNyArMTI1MSw2
IEBAIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbEMyRVBOU18xOUlu
c3BlY3RvckNvbnRyb2xsZXJFUE5TXzRQYWdlCiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWxEMkV2CiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTdk
cmF3Tm9kZUhpZ2hsaWdodEVSTlNfMTVHcmFwaGljc0NvbnRleHRFCiBfX1pOSzdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyN2VuYWJsZWRFdgotX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjdzZXR0aW5nRVJLTjNXVEY2U3RyaW5nRQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSkFW
QV9CUklER0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IDkyMGU3NTQuLjUxMTQ4OGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xOTMzLDYgKzE5MzMsOCBA
QAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yU3RhdGUuY3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3Rh
dGUuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuaCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwJywKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDkwMjMwZTgu
LjRiMTFhN2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9X
ZWJDb3JlLnBybwpAQCAtMTAwMSw2ICsxMDAxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNw
cCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwKQEAg
LTE4NzgsNiArMTg3OSw3IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQu
aCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggXAorICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JTdGF0ZS5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50Lmgg
XAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JUaW1lbGluZUFnZW50LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKaW5kZXggODRhYzc4Zi4uMmQyMDMyMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCkBAIC02MzIzOSw2ICs2MzIzOSwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3RhdGUuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXEluc3BlY3RvclN0YXRlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3RvcmFnZUFnZW50
LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGE0MWRlODUuLjdiNmIwNzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTMxLDYgKzExMzEsOCBAQAogCQk0RjRGNUZG
QjExQ0JEMkUxMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY0RjVGRkExMUNCRDJEMjAwQTE4NkJG
IC8qIEluc3BlY3RvckZyb250ZW5kLmNwcCAqLzsgfTsKIAkJNEY3MDdBOTkxMUVGNjc5NDAwQUNE
QTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGNzA3QTk3MTFFRjY3OTQwMEFDREE2OSAvKiBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgKi87IH07CiAJCTRGNzA3QTlBMTFFRjY3OTQw
MEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY3MDdBOTgxMUVGNjc5NDAwQUNEQTY5IC8q
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggKi87IH07CisJCTRGQTNCOTBBMTI1Q0QxMjIw
MDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0RkEzQjkwODEyNUNEMTIxMDAzMDBCQUQgLyogSW5zcGVjdG9y
U3RhdGUuY3BwICovOyB9OworCQk0RkEzQjkwQjEyNUNEMTIyMDAzMDBCQUQgLyogSW5zcGVjdG9y
U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRG
QTNCOTA5MTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oICovOyB9OwogCQk0RkQ4
RDBGMjExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkQ4RDBGMDExOUM3MThCMDAyRkE4MjUg
LyogU2NyaXB0R0NFdmVudC5jcHAgKi87IH07CiAJCTRGRDhEMEYzMTE5QzcxOEIwMDJGQTgyNSAv
KiBTY3JpcHRHQ0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0RkQ4RDBGMTExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5oICovOyB9
OwogCQk1MTAxODQ2OTBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMTg0NjcwQjA4NjAyQTAwNEE4
MjVGIC8qIENhY2hlZFBhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtNzE5Nyw2ICs3MTk5LDggQEAKIAkJNEY0RjVGRkMxMUNCRDMwMTAwQTE4
NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluc3BlY3RvckZyb250ZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRG
NzA3QTk3MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGNzA3QTk4MTFFRjY3
OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0RkEzQjkwODEyNUNEMTIxMDAzMDBCQUQgLyogSW5zcGVj
dG9yU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVj
dG9yU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0RkEzQjkwOTEyNUNE
MTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5zcGVjdG9yU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NEZEOEQwRjAxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0R0NFdmVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTRGRDhEMEYxMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdEdDRXZlbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTg0NjcwQjA4NjAyQTAwNEE4MjVGIC8q
IENhY2hlZFBhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkUGFn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIxOTIsNiArMTIxOTYsOCBAQAog
CQkJCTlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50Lmgg
Ki8sCiAJCQkJNDFGMDYyMDAwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmNw
cCAqLywKIAkJCQk0MUYwNjFGRjBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2Uu
aCAqLywKKwkJCQk0RkEzQjkwODEyNUNEMTIxMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuY3Bw
ICovLAorCQkJCTRGQTNCOTA5MTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oICov
LAogCQkJCTdBQjBCMUJFMTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JTdG9yYWdlQWdlbnQu
Y3BwICovLAogCQkJCTdBQjBCMUJGMTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JTdG9yYWdl
QWdlbnQuaCAqLywKIAkJCQk4MkFCMTc2RjEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yU3R5
bGVTaGVldC5jcHAgKi8sCkBAIC0yMTA2OSw2ICsyMTA3NSw3IEBACiAJCQkJOTNGMTk5RUQwODI0
NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQkU1
MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0RkEzQjkwQjEyNUNEMTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMjM2MTUsNiArMjM2MjIsNyBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkw
MDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTRGQTNCOTBBMTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKaW5kZXggYWYwYjM4My4uYWViZDI2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQcm9maWxlckFnZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5o
IgogI2luY2x1ZGUgIkluc3BlY3RvclN0b3JhZ2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
clRpbWVsaW5lQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKQEAgLTExNSw0
MSArMTE2LDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGZyb250ZW5kU2V0dGluZ3NTZXR0aW5nTmFtZSA9
ICJmcm9udGVuZFNldHRpbmdzIjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRlYnVnZ2Vy
QWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lID0gImRlYnVnZ2VyRW5hYmxlZCI7Ci1zdGF0aWMgY29u
c3QgY2hhciogY29uc3QgbGFzdEFjdGl2ZVBhbmVsID0gImxhc3RBY3RpdmVQYW5lbCI7Ci1zdGF0
aWMgY29uc3QgY2hhciogY29uc3QgbW9uaXRvcmluZ1hIUlNldHRpbmdOYW1lID0gInhock1vbml0
b3IiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFi
bGVkU2V0dGluZ05hbWUgPSAicmVzb3VyY2VUcmFja2luZ0VuYWJsZWQiOwotc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IHByb2ZpbGVyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lID0gInByb2ZpbGVy
RW5hYmxlZCI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBtb25pdG9yaW5nWEhSU3RhdGVO
YW1lID0gIm1vbml0b3JpbmdYSFJFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBy
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZFN0YXRlTmFtZSA9ICJyZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc2VhcmNoaW5nRm9yTm9kZUVuYWJsZWRTdGF0
ZU5hbWUgPSAic2VhcmNoaW5nRm9yTm9kZUVuYWJsZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkU3RhdGVOYW1lID0gInRpbWVsaW5lUHJvZmlsZXJF
bmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBwYXVzZU9uRXhjZXB0aW9uc1N0YXRl
U3RhdGVOYW1lID0gInBhdXNlT25FeGNlcHRpb25zU3RhdGUiOwotCi1zdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lID0gImluc3BlY3RvckF0dGFjaGVk
SGVpZ2h0IjsKLQogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRvbU5hdGl2ZUJyZWFrcG9pbnRU
eXBlID0gIkRPTSI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZXZlbnRMaXN0ZW5lck5hdGl2
ZUJyZWFrcG9pbnRUeXBlID0gIkV2ZW50TGlzdGVuZXIiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IHhock5hdGl2ZUJyZWFrcG9pbnRUeXBlID0gIlhIUiI7CiAKK2NvbnN0IGNoYXIqIGNvbnN0
IEluc3BlY3RvckNvbnRyb2xsZXI6Okxhc3RBY3RpdmVQYW5lbCA9ICJsYXN0QWN0aXZlUGFuZWwi
OwogY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6RWxlbWVudHNQYW5lbCA9
ICJlbGVtZW50cyI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpDb25z
b2xlUGFuZWwgPSAiY29uc29sZSI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9s
bGVyOjpTY3JpcHRzUGFuZWwgPSAic2NyaXB0cyI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0
b3JDb250cm9sbGVyOjpQcm9maWxlc1BhbmVsID0gInByb2ZpbGVzIjsKIAorY29uc3QgdW5zaWdu
ZWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOwogCi1j
b25zdCBTdHJpbmcmIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVk
U2V0dGluZ05hbWUoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzZXR0aW5n
TmFtZSwgKCJpbnNwZWN0b3JTdGFydHNBdHRhY2hlZCIpKTsKLSAgICByZXR1cm4gc2V0dGluZ05h
bWU7Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAz
MDA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwLjBmOwot
c3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NWY7CiBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUNvbnNvbGVNZXNzYWdlcyA9IDEwMDA7CiBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZXhwaXJlQ29uc29sZU1lc3NhZ2VzU3RlcCA9IDEwMDsKIApAQCAt
MTU5LDEzICsxMzcsMTAgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxl
cihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fb3BlbmluZ0Zy
b250ZW5kKGZhbHNlKQogICAgICwgbV9jc3NTdG9yZShuZXcgSW5zcGVjdG9yQ1NTU3RvcmUodGhp
cykpCiAgICAgLCBtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50KDApCi0gICAgLCBtX3Nob3dB
ZnRlclZpc2libGUobGFzdEFjdGl2ZVBhbmVsKQorICAgICwgbV9zaG93QWZ0ZXJWaXNpYmxlKExh
c3RBY3RpdmVQYW5lbCkKICAgICAsIG1fc2Vzc2lvblNldHRpbmdzKEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpCiAgICAgLCBtX2dyb3VwTGV2ZWwoMCkKLSAgICAsIG1fc2VhcmNoaW5nRm9yTm9k
ZShmYWxzZSkKLSAgICAsIG1fbW9uaXRvcmluZ1hIUihmYWxzZSkKICAgICAsIG1fcHJldmlvdXNN
ZXNzYWdlKDApCi0gICAgLCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKGZhbHNlKQogICAgICwg
bV9zZXR0aW5nc0xvYWRlZChmYWxzZSkKICAgICAsIG1faW5zcGVjdG9yQmFja2VuZChJbnNwZWN0
b3JCYWNrZW5kOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKG5ldyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcih0aGlzKSkKQEAgLTE3Niw2ICsxNTEs
NyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2Us
IEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgICwgbV9wcm9maWxlckFnZW50KEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ6OmNyZWF0ZSh0aGlzKSkKICNlbmRpZgogeworICAgIG1fc3RhdGUgPSBu
ZXcgSW5zcGVjdG9yU3RhdGUoY2xpZW50KTsKICAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwog
ICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOwogfQpAQCAtMjE5LDI3ICsxOTUsMzkgQEAg
Ym9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9p
bnNwZWN0ZWRQYWdlLT5zZXR0aW5ncygpLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7CiB9CiAK
LVN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5KSBj
b25zdAorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgp
Cit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6Omluc3Bl
Y3RvclN0YXJ0c0F0dGFjaGVkKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJ
bnNwZWN0b3JTdGFydHNBdHRhY2hlZChib29sIGF0dGFjaGVkKQogewotICAgIFNldHRpbmdzOjpp
dGVyYXRvciBpdCA9IG1fc2V0dGluZ3MuZmluZChrZXkpOwotICAgIGlmIChpdCAhPSBtX3NldHRp
bmdzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICBtX3N0YXRlLT5zZXRC
b29sZWFuKEluc3BlY3RvclN0YXRlOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCwgYXR0YWNoZWQp
OworfQogCi0gICAgU3RyaW5nIHZhbHVlOwotICAgIG1fY2xpZW50LT5wb3B1bGF0ZVNldHRpbmco
a2V5LCAmdmFsdWUpOwotICAgIG1fc2V0dGluZ3Muc2V0KGtleSwgdmFsdWUpOwotICAgIHJldHVy
biB2YWx1ZTsKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yQXR0YWNoZWRI
ZWlnaHQobG9uZyBoZWlnaHQpCit7CisgICAgbV9zdGF0ZS0+c2V0TG9uZyhJbnNwZWN0b3JTdGF0
ZTo6aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQsIGhlaWdodCk7Cit9CisKK2ludCBJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6Omluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZXR0aW5nKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkgY29uc3QKIHsKLSAgICBtX3NldHRpbmdzLnNldChr
ZXksIHZhbHVlKTsKLSAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGtleSwgdmFsdWUpOworICAg
IHJldHVybiBtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JO
b2RlKTsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVRyYWNraW5nRW5h
YmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9y
U3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKQog
ewotICAgIHNldFNldHRpbmcoZnJvbnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lLCBzZXR0aW5ncyk7
CisgICAgbV9zdGF0ZS0+c2V0U3RyaW5nKEluc3BlY3RvclN0YXRlOjpmcm9udGVuZFNldHRpbmdz
LCBzZXR0aW5ncyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZVNlc3Npb25T
ZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzSlNPTikKQEAgLTI0OSw1MCArMjM3LDI0IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJp
bmcmIHNldHRpbmdzSlNPTikKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRJbnNwZWN0
b3JTdGF0ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3RhdGUpCiB7Ci0gICAgKCpzdGF0ZSkt
PnNldEJvb2xlYW4obW9uaXRvcmluZ1hIUlN0YXRlTmFtZSwgbV9tb25pdG9yaW5nWEhSKTsKLSAg
ICAoKnN0YXRlKS0+c2V0Qm9vbGVhbihyZXNvdXJjZVRyYWNraW5nRW5hYmxlZFN0YXRlTmFtZSwg
bV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKLSAgICAgICAgKCpzdGF0ZSktPnNldE51bWJl
cihwYXVzZU9uRXhjZXB0aW9uc1N0YXRlU3RhdGVOYW1lLCBtX2RlYnVnZ2VyQWdlbnQtPnBhdXNl
T25FeGNlcHRpb25zU3RhdGUoKSk7CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVj
dG9yU3RhdGU6OnBhdXNlT25FeGNlcHRpb25zU3RhdGUsIG1fZGVidWdnZXJBZ2VudC0+cGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSgpKTsKICNlbmRpZgorICAgICpzdGF0ZSA9IG1fc3RhdGUtPmdldFN0
YXRlT2JqZWN0Rm9yRnJvbnRlbmQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp1
cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gc3RhdGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHN0YXRlLT5zZXRCb29s
ZWFuKG1vbml0b3JpbmdYSFJTdGF0ZU5hbWUsIG1fbW9uaXRvcmluZ1hIUik7Ci0gICAgc3RhdGUt
PnNldEJvb2xlYW4ocmVzb3VyY2VUcmFja2luZ0VuYWJsZWRTdGF0ZU5hbWUsIG1fcmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQpOwotICAgIHN0YXRlLT5zZXRCb29sZWFuKHRpbWVsaW5lUHJvZmlsZXJF
bmFibGVkU3RhdGVOYW1lLCBtX3RpbWVsaW5lQWdlbnQpOwotICAgIHN0YXRlLT5zZXRCb29sZWFu
KHNlYXJjaGluZ0Zvck5vZGVFbmFibGVkU3RhdGVOYW1lLCBtX3NlYXJjaGluZ0Zvck5vZGUpOwot
ICAgIG1fY2xpZW50LT51cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZShzdGF0ZS0+dG9KU09OU3Ry
aW5nKCkpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JT
dGF0ZUZyb21Db29raWUoY29uc3QgU3RyaW5nJiBpbnNwZWN0b3JTdGF0ZVN0cmluZykKK3ZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25z
dCBTdHJpbmcmIGluc3BlY3RvclN0YXRlQ29va2llKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gaW5zcGVjdG9yU3RhdGVWYWx1ZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oaW5z
cGVjdG9yU3RhdGVTdHJpbmcpOwotICAgIGlmICghaW5zcGVjdG9yU3RhdGVWYWx1ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5zcGVjdG9yU3RhdGUg
PSBpbnNwZWN0b3JTdGF0ZVZhbHVlLT5hc09iamVjdCgpOwotICAgIGlmICghaW5zcGVjdG9yU3Rh
dGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluc3BlY3RvclN0YXRlLT5nZXRCb29sZWFuKG1v
bml0b3JpbmdYSFJTdGF0ZU5hbWUsICZtX21vbml0b3JpbmdYSFIpOwotICAgIGluc3BlY3RvclN0
YXRlLT5nZXRCb29sZWFuKHJlc291cmNlVHJhY2tpbmdFbmFibGVkU3RhdGVOYW1lLCAmbV9yZXNv
dXJjZVRyYWNraW5nRW5hYmxlZCk7Ci0gICAgaW5zcGVjdG9yU3RhdGUtPmdldEJvb2xlYW4oc2Vh
cmNoaW5nRm9yTm9kZUVuYWJsZWRTdGF0ZU5hbWUsICZtX3NlYXJjaGluZ0Zvck5vZGUpOwotCi0g
ICAgYm9vbCB0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCA9IGZhbHNlOwotICAgIGluc3BlY3RvclN0
YXRlLT5nZXRCb29sZWFuKHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkU3RhdGVOYW1lLCAmdGltZWxp
bmVQcm9maWxlckVuYWJsZWQpOwotICAgIGlmICh0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCkKKyAg
ICBtX3N0YXRlLT5yZXN0b3JlRnJvbUluc3BlY3RvckNvb2tpZShpbnNwZWN0b3JTdGF0ZUNvb2tp
ZSk7CisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5l
UHJvZmlsZXJFbmFibGVkKSkKICAgICAgICAgc3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7Ci0gICAg
ZWxzZQotICAgICAgICBzdG9wVGltZWxpbmVQcm9maWxlcigpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmdldFNldHRpbmdzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBzZXR0aW5n
cykKIHsKICAgICAqc2V0dGluZ3MgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICgq
c2V0dGluZ3MpLT5zZXRTdHJpbmcoImFwcGxpY2F0aW9uIiwgc2V0dGluZyhmcm9udGVuZFNldHRp
bmdzU2V0dGluZ05hbWUpKTsKKyAgICAoKnNldHRpbmdzKS0+c2V0U3RyaW5nKCJhcHBsaWNhdGlv
biIsIG1fc3RhdGUtPmdldFN0cmluZyhJbnNwZWN0b3JTdGF0ZTo6ZnJvbnRlbmRTZXR0aW5ncykp
OwogICAgICgqc2V0dGluZ3MpLT5zZXRTdHJpbmcoInNlc3Npb24iLCBtX3Nlc3Npb25TZXR0aW5n
cy0+dG9KU09OU3RyaW5nKCkpOwogfQogCkBAIC00MjksMTIgKzM5MSwxMiBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6Om1hcmtUaW1lbGluZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5n
JiBwYW5lbE5hbWUpCiB7Ci0gICAgc2V0U2V0dGluZyhsYXN0QWN0aXZlUGFuZWwsIHBhbmVsTmFt
ZSk7CisgICAgbV9zdGF0ZS0+c2V0U3RyaW5nKEluc3BlY3RvclN0YXRlOjpsYXN0QWN0aXZlUGFu
ZWwsIHBhbmVsTmFtZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCkKIHsK
LSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9zZWFyY2hpbmdGb3JOb2RlKQorICAgIGlmICghZW5h
YmxlZCgpIHx8ICFtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdG
b3JOb2RlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IHJlc3VsdC5pbm5l
ck5vZGUoKTsKQEAgLTQ0OSw3ICs0MTEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omhh
bmRsZU1vdXNlUHJlc3MoKQogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBBU1NFUlQobV9zZWFyY2hpbmdGb3JOb2RlKTsKKyAgICBBU1NFUlQobV9zdGF0ZS0+Z2V0
Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6c2VhcmNoaW5nRm9yTm9kZSkpOwogICAgIGlmICghbV9o
aWdobGlnaHRlZE5vZGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDg4LDEyICs0NTAsMTEgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVh
cmVkKEZyYW1lKiBmcmFtZSkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFyY2hp
bmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09
IGVuYWJsZWQpCisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnNl
YXJjaGluZ0Zvck5vZGUpID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3NlYXJj
aGluZ0Zvck5vZGUgPSBlbmFibGVkOwotICAgIGlmICghbV9zZWFyY2hpbmdGb3JOb2RlKQorICAg
IG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUsIGVu
YWJsZWQpOworICAgIGlmICghZW5hYmxlZCkKICAgICAgICAgaGlkZUhpZ2hsaWdodCgpOwotICAg
IHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKQpA
QCAtNTA1LDExICs0NjYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlYXJjaGlu
Z0Zvck5vZGUoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoYm9vbCBlbmFibGVkLCBib29sKiBuZXdT
dGF0ZSkKIHsKICAgICAqbmV3U3RhdGUgPSBlbmFibGVkOwotICAgIGlmIChtX21vbml0b3JpbmdY
SFIgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fbW9uaXRvcmluZ1hIUiA9IGVu
YWJsZWQ7Ci0gICAgc2V0U2V0dGluZyhtb25pdG9yaW5nWEhSU2V0dGluZ05hbWUsIGVuYWJsZWQg
PyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOwor
ICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6Om1vbml0b3JpbmdYSFIsIGVu
YWJsZWQpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCgp
CkBAIC01NzMsNyArNTMwLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93UGFuZWwo
Y29uc3QgU3RyaW5nJiBwYW5lbCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChw
YW5lbCA9PSBsYXN0QWN0aXZlUGFuZWwpCisgICAgaWYgKHBhbmVsID09IExhc3RBY3RpdmVQYW5l
bCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9mcm9udGVuZC0+c2hvd1BhbmVsKHBhbmVsKTsK
QEAgLTYwOSw3ICs1NjYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RG
cm9udGVuZCgpCiAgICAgdW5iaW5kQWxsUmVzb3VyY2VzKCk7CiAgICAgc3RvcFRpbWVsaW5lUHJv
ZmlsZXIoKTsKIAotICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IGxhc3RBY3RpdmVQYW5lbDsKKyAg
ICBtX3Nob3dBZnRlclZpc2libGUgPSBMYXN0QWN0aXZlUGFuZWw7CiAKICAgICBoaWRlSGlnaGxp
Z2h0KCk7CiAKQEAgLTY0Nyw4ICs2MDQsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBv
cHVsYXRlU2NyaXB0T2JqZWN0cygpCiAgICAgaWYgKCFtX2Zyb250ZW5kKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxlID09IGxhc3RBY3RpdmVQYW5lbCkKLSAg
ICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gc2V0dGluZyhsYXN0QWN0aXZlUGFuZWwpOworICAg
IGlmIChtX3Nob3dBZnRlclZpc2libGUgPT0gTGFzdEFjdGl2ZVBhbmVsKQorICAgICAgICBtX3No
b3dBZnRlclZpc2libGUgPSBtX3N0YXRlLT5nZXRTdHJpbmcoSW5zcGVjdG9yU3RhdGU6Omxhc3RB
Y3RpdmVQYW5lbCk7CiAKICAgICBzaG93UGFuZWwobV9zaG93QWZ0ZXJWaXNpYmxlKTsKIApAQCAt
NzA2LDggKzY2Myw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZURlYnVnZ2Vy
KCkKICAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aXNEZWJ1Z2dlckFsd2F5c0VuYWJs
ZWQoKSkKICAgICAgICAgZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoZmFsc2UpOwogICAgIGVs
c2UgewotICAgICAgICBTdHJpbmcgZGVidWdnZXJFbmFibGVkID0gc2V0dGluZyhkZWJ1Z2dlckFs
d2F5c0VuYWJsZWRTZXR0aW5nTmFtZSk7Ci0gICAgICAgIGlmIChkZWJ1Z2dlckVuYWJsZWQgPT0g
InRydWUiIHx8IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24pCisgICAgICAgIGlmIChtX3N0YXRl
LT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpkZWJ1Z2dlckFsd2F5c0VuYWJsZWQpIHx8IG1f
YXR0YWNoRGVidWdnZXJXaGVuU2hvd24pCiAgICAgICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOwog
ICAgIH0KICNlbmRpZgpAQCAtNzE4LDExICs2NzQsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnJlc3RvcmVQcm9maWxlcigpCiAgICAgQVNTRVJUKG1fZnJvbnRlbmQpOwogI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIG1fcHJvZmlsZXJBZ2VudC0+c2V0RnJvbnRlbmQo
bV9mcm9udGVuZC5nZXQoKSk7Ci0gICAgaWYgKCFTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFs
d2F5c0VuYWJsZWQoKSkgewotICAgICAgICBTdHJpbmcgcHJvZmlsZXJFbmFibGVkU2V0dGluZyA9
IHNldHRpbmcocHJvZmlsZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUpOwotICAgICAgICBpZiAo
cHJvZmlsZXJFbmFibGVkU2V0dGluZyA9PSAidHJ1ZSIpCi0gICAgICAgICAgICBlbmFibGVQcm9m
aWxlcigpOwotICAgIH0KKyAgICBpZiAoIVNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlz
RW5hYmxlZCgpICYmIG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnByb2ZpbGVy
QWx3YXlzRW5hYmxlZCkpCisgICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7CiAjZW5kaWYKIH0KIApA
QCAtODk0LDcgKzg0Nyw3IEBAIEluc3BlY3RvclJlc291cmNlKiBJbnNwZWN0b3JDb250cm9sbGVy
OjpnZXRUcmFja2VkUmVzb3VyY2UodW5zaWduZWQgbG9uZyBpZGVudGlmCiAgICAgaWYgKCFlbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1fcmVzb3VyY2VUcmFja2luZ0Vu
YWJsZWQpCisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291
cmNlVHJhY2tpbmdFbmFibGVkKSkKICAgICAgICAgcmV0dXJuIG1fcmVzb3VyY2VzLmdldChpZGVu
dGlmaWVyKS5nZXQoKTsKIAogICAgIGJvb2wgaXNNYWluUmVzb3VyY2UgPSBtX21haW5SZXNvdXJj
ZSAmJiBtX21haW5SZXNvdXJjZS0+aWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7CkBAIC05MjUs
NyArODc4LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VGcm9t
TWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwKICAgICBBU1NFUlQobV9pbnNwZWN0
ZWRQYWdlKTsKICAgICBib29sIGlzTWFpblJlc291cmNlID0gaXNNYWluUmVzb3VyY2VMb2FkZXIo
bG9hZGVyLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgY2FjaGVkUmVzb3VyY2UtPnVybCgpKSk7CiAg
ICAgZW5zdXJlU2V0dGluZ3NMb2FkZWQoKTsKLSAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFt
X3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKQorICAgIGlmICghaXNNYWluUmVzb3VyY2UgJiYgIW1f
c3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVk
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNv
dXJjZSA9IEluc3BlY3RvclJlc291cmNlOjpjcmVhdGVDYWNoZWQobV9pbnNwZWN0ZWRQYWdlLT5w
cm9ncmVzcygpLT5jcmVhdGVVbmlxdWVJZGVudGlmaWVyKCksIGxvYWRlciwgY2FjaGVkUmVzb3Vy
Y2UpOwpAQCAtOTQ5LDcgKzkwMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aWRlbnRp
ZmllckZvckluaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKIAogICAgIGJv
b2wgaXNNYWluUmVzb3VyY2UgPSBpc01haW5SZXNvdXJjZUxvYWRlcihsb2FkZXIsIHJlcXVlc3Qu
dXJsKCkpOwogICAgIGVuc3VyZVNldHRpbmdzTG9hZGVkKCk7Ci0gICAgaWYgKCFpc01haW5SZXNv
dXJjZSAmJiAhbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkKKyAgICBpZiAoIWlzTWFpblJlc291
cmNlICYmICFtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNr
aW5nRW5hYmxlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNv
dXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JSZXNvdXJjZTo6Y3JlYXRlKGlkZW50aWZpZXIsIGxv
YWRlciwgcmVxdWVzdC51cmwoKSk7CkBAIC0xMTM2LDEwICsxMDg5LDEwIEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVk
IGxvbmcgaWRlbnRpCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX21vbml0b3JpbmdYSFIpCisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVj
dG9yU3RhdGU6Om1vbml0b3JpbmdYSFIpKQogICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpT
TWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgIlhIUiBmaW5p
c2hlZCBsb2FkaW5nOiBcIiIgKyB1cmwgKyAiXCIuIiwgc2VuZExpbmVOdW1iZXIsIHNlbmRVUkwp
OwogCi0gICAgaWYgKCFtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKQorICAgIGlmICghbV9zdGF0
ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBJbnNwZWN0b3JSZXNvdXJjZSogcmVzb3VyY2UgPSBtX3Jl
c291cmNlcy5nZXQoaWRlbnRpZmllcikuZ2V0KCk7CkBAIC0xMTU0LDcgKzExMDcsNyBAQCB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1
bnNpZ25lZCBsb25nIGlkZW50aQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdElt
cG9ydGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJp
bmcpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQp
CisgICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3Rh
dGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW5z
cGVjdG9yUmVzb3VyY2UqIHJlc291cmNlID0gbV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpLmdl
dCgpOwpAQCAtMTE3Myw4ICsxMTI2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRS
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJsZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7Ci0gICAgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZCA9IGVuYWJsZTsKLSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIG1fc3Rh
dGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkLCBl
bmFibGUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFJlc291cmNlVHJhY2tp
bmdFbmFibGVkKGJvb2wgZW5hYmxlLCBib29sIGFsd2F5cywgYm9vbCogbmV3U3RhdGUpCkBAIC0x
MTgyLDE4ICsxMTM0LDE2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0UmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQoYm9vbCBlbmFibGUsIGJvb2wgYWx3YXlzLCBiCiAgICAgKm5ld1N0YXRl
ID0gZW5hYmxlOwogCiAgICAgaWYgKGFsd2F5cykKLSAgICAgICAgc2V0U2V0dGluZyhyZXNvdXJj
ZVRyYWNraW5nQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lLCBlbmFibGUgPyAidHJ1ZSIgOiAiZmFs
c2UiKTsKKyAgICAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3Vy
Y2VUcmFja2luZ0Fsd2F5c0VuYWJsZWQsIGVuYWJsZSk7CiAKLSAgICBpZiAobV9yZXNvdXJjZVRy
YWNraW5nRW5hYmxlZCA9PSBlbmFibGUpCisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5z
cGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKSA9PSBlbmFibGUpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwotICAgIG1fcmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQgPSBlbmFibGU7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0
b3JTdGF0ZTo6cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQsIGVuYWJsZSk7CiAKICAgICBpZiAoZW5h
YmxlKQogICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5uYXZpZ2F0aW9uU2No
ZWR1bGVyKCktPnNjaGVkdWxlUmVmcmVzaCh0cnVlKTsKLQotICAgIHVwZGF0ZUluc3BlY3RvclN0
YXRlQ29va2llKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5zdXJlU2V0dGlu
Z3NMb2FkZWQoKQpAQCAtMTIwMiwxNSArMTE1MiwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmVuc3VyZVNldHRpbmdzTG9hZGVkKCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2V0dGlu
Z3NMb2FkZWQgPSB0cnVlOwogCi0gICAgU3RyaW5nIHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFi
bGVkID0gc2V0dGluZyhyZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lKTsK
LSAgICBpZiAocmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWQgPT0gInRydWUiKQotICAgICAg
ICBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkID0gdHJ1ZTsKLQotICAgIFN0cmluZyBtb25pdG9y
aW5nWEhSQWx3YXlzRW5hYmxlZCA9IHNldHRpbmcobW9uaXRvcmluZ1hIUlNldHRpbmdOYW1lKTsK
LSAgICBpZiAobW9uaXRvcmluZ1hIUkFsd2F5c0VuYWJsZWQgPT0gInRydWUiKQotICAgICAgICBt
X21vbml0b3JpbmdYSFIgPSB0cnVlOworICAgIG1fc3RhdGUtPmxvYWRGcm9tU2V0dGluZ3MoKTsK
IAotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CisgICAgaWYgKG1fc3RhdGUtPmdl
dEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkKSkK
KyAgICAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VUcmFj
a2luZ0VuYWJsZWQsIHRydWUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0
VGltZWxpbmVQcm9maWxlcigpCkBAIC0xMjI1LDcgKzExNzAsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxlcigpCiAgICAgaWYgKG1fZnJvbnRlbmQpCiAg
ICAgICAgIG1fZnJvbnRlbmQtPnRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCk7CiAKLSAgICB1
cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5z
cGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkLCB0cnVlKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGltZWxpbmVQcm9maWxlcigpCkBAIC0xMjQwLDcgKzEx
ODUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkK
ICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9mcm9udGVuZC0+dGltZWxpbmVQcm9maWxl
cldhc1N0b3BwZWQoKTsKIAotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CisgICAg
bV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJs
ZWQsIGZhbHNlKTsKIH0KIAogI2lmIEVOQUJMRShXT1JLRVJTKQpAQCAtMTYxMiwxNCArMTU1Nywx
NCBAQCBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0CiB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzLCBib29s
IHNraXBSZWNvbXBpbGUpCiB7CiAgICAgaWYgKGFsd2F5cykKLSAgICAgICAgc2V0U2V0dGluZyhw
cm9maWxlckFsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSwgInRydWUiKTsKKyAgICAgICAgbV9zdGF0
ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cHJvZmlsZXJBbHdheXNFbmFibGVkLCB0cnVl
KTsKICAgICBtX3Byb2ZpbGVyQWdlbnQtPmVuYWJsZShza2lwUmVjb21waWxlKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpCiB7CiAg
ICAgaWYgKGFsd2F5cykKLSAgICAgICAgc2V0U2V0dGluZyhwcm9maWxlckFsd2F5c0VuYWJsZWRT
ZXR0aW5nTmFtZSwgImZhbHNlIik7CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVj
dG9yU3RhdGU6OnByb2ZpbGVyQWx3YXlzRW5hYmxlZCwgZmFsc2UpOwogICAgIG1fcHJvZmlsZXJB
Z2VudC0+ZGlzYWJsZSgpOwogfQogI2VuZGlmCkBAIC0xNjI5LDcgKzE1NzQsNyBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGJvb2wgYWx3YXlz
KQogewogICAgIEFTU0VSVCghZGVidWdnZXJFbmFibGVkKCkpOwogICAgIGlmIChhbHdheXMpCi0g
ICAgICAgIHNldFNldHRpbmcoZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsICJ0cnVl
Iik7CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmRlYnVnZ2Vy
QWx3YXlzRW5hYmxlZCwgdHJ1ZSk7CiAKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIApA
QCAtMTY2MCw3ICsxNjA1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlRGVi
dWdnZXIoYm9vbCBhbHdheXMpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhbHdheXMpCi0g
ICAgICAgIHNldFNldHRpbmcoZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsICJmYWxz
ZSIpOworICAgICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpkZWJ1Z2dl
ckFsd2F5c0VuYWJsZWQsIGZhbHNlKTsKIAogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwog
CkBAIC0xNzc4LDEyICsxNzIzLDE0IEBAIFN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpicmVh
a3BvaW50c1NldHRpbmdLZXkoKQogCiBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0
b3JDb250cm9sbGVyOjpsb2FkQnJlYWtwb2ludHMoKQogewotICAgIHJldHVybiBJbnNwZWN0b3JW
YWx1ZTo6cGFyc2VKU09OKHNldHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5KCkpKTsKKyAgICBT
dHJpbmcganNvblN0cmluZzsKKyAgICBtX2NsaWVudC0+cG9wdWxhdGVTZXR0aW5nKGJyZWFrcG9p
bnRzU2V0dGluZ0tleSgpLCAmanNvblN0cmluZyk7CisgICAgcmV0dXJuIEluc3BlY3RvclZhbHVl
OjpwYXJzZUpTT04oanNvblN0cmluZyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2F2ZUJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cykK
IHsKLSAgICBzZXRTZXR0aW5nKGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpLCBicmVha3BvaW50cy0+
dG9KU09OU3RyaW5nKCkpOworICAgIG1fY2xpZW50LT5zdG9yZVNldHRpbmcoYnJlYWtwb2ludHNT
ZXR0aW5nS2V5KCksIGJyZWFrcG9pbnRzLT50b0pTT05TdHJpbmcoKSk7CiB9CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGIyMDg3YmEuLmFmZjZk
NGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTY5LDYgKzY5
LDcgQEAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmpl
Y3Q7CiBjbGFzcyBJbnNwZWN0b3JQcm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3Vy
Y2U7CitjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKIGNsYXNzIEluc3BlY3RvclN0b3JhZ2VBZ2VudDsK
IGNsYXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKQEAg
LTEwMiw2ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRy
PEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+ID4gRGF0YWJhc2VSZXNvdXJjZXNNYXA7CiAgICAg
dHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4g
PiBET01TdG9yYWdlUmVzb3VyY2VzTWFwOwogCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IExhc3RBY3RpdmVQYW5lbDsKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ29uc29sZVBh
bmVsOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBFbGVtZW50c1BhbmVsOwogICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBQcm9maWxlc1BhbmVsOwpAQCAtMTIyLDEzICsxMjQsMTEg
QEAgcHVibGljOgogICAgIFBhZ2UqIGluc3BlY3RlZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2lu
c3BlY3RlZFBhZ2U7IH0KICAgICB2b2lkIHJlbG9hZFBhZ2UoKTsKIAotICAgIFN0cmluZyBzZXR0
aW5nKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKLSAgICB2b2lkIHNldFNldHRpbmcoY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIHZvaWQgc2F2ZUFwcGxpY2F0
aW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0aW5ncyk7CiAgICAgdm9pZCBzYXZlU2Vzc2lv
blNldHRpbmdzKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgZ2V0U2V0dGluZ3MoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qKTsKIAotICAgIHZvaWQgcmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNv
b2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXRlKTsKKyAgICB2b2lkIHJlc3RvcmVJbnNw
ZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3QgU3RyaW5nJiBpbnNwZWN0b3JDb29raWUpOwogCiAg
ICAgdm9pZCBpbnNwZWN0KE5vZGUqKTsKICAgICB2b2lkIGhpZ2hsaWdodChOb2RlKik7CkBAIC0x
NTIsNyArMTUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsK
ICAgICBjb25zdCBWZWN0b3I8T3duUHRyPENvbnNvbGVNZXNzYWdlPiA+JiBjb25zb2xlTWVzc2Fn
ZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnNvbGVNZXNzYWdlczsgfQogCi0gICAgYm9vbCBzZWFy
Y2hpbmdGb3JOb2RlSW5QYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWFyY2hpbmdGb3JOb2RlOyB9
CisgICAgYm9vbCBzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkgY29uc3Q7CiAgICAgdm9pZCBtb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZp
ZXJGbGFncyk7CiAgICAgdm9pZCBoYW5kbGVNb3VzZVByZXNzKCk7CiAKQEAgLTE3Nyw3ICsxNzcs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wg
ZW5hYmxlZCk7CiAgICAgdm9pZCBzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJs
ZWQsIGJvb2wgYWx3YXlzLCBib29sKiBuZXdTdGF0ZSk7Ci0gICAgYm9vbCByZXNvdXJjZVRyYWNr
aW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQ7IH0K
KyAgICBib29sIHJlc291cmNlVHJhY2tpbmdFbmFibGVkKCkgY29uc3Q7CiAKICAgICB2b2lkIGVu
c3VyZVNldHRpbmdzTG9hZGVkKCk7CiAKQEAgLTI3MCwxMCArMjcwLDE0IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKCk7CiAgICAgdm9pZCBzZXRJ
bnNwZWN0b3JFeHRlbnNpb25BUEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpOwogCi0gICAgc3RhdGlj
IGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpOworICAg
IGJvb2wgaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKKyAgICB2b2lkIHNldEluc3BlY3RvclN0
YXJ0c0F0dGFjaGVkKGJvb2wpOworICAgIHZvaWQgc2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQo
bG9uZyBoZWlnaHQpOworICAgIGludCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpIGNvbnN0Owor
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKIAogcHJp
dmF0ZToKLSAgICB2b2lkIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CiAgICAgdm9pZCBn
ZXRJbnNwZWN0b3JTdGF0ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3RhdGUpOwogCiAgICAg
ZnJpZW5kIGNsYXNzIEluc3BlY3RvckJhY2tlbmQ7CkBAIC0zNDUsNiArMzQ5LDcgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBtX3N0b3JhZ2VBZ2VudDsKICAg
ICBPd25QdHI8SW5zcGVjdG9yQ1NTU3RvcmU+IG1fY3NzU3RvcmU7CiAgICAgT3duUHRyPEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ+IG1fdGltZWxpbmVBZ2VudDsKKyAgICBPd25QdHI8SW5zcGVjdG9y
U3RhdGU+IG1fc3RhdGU7CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQog
ICAgIE93blB0cjxJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ+IG1fYXBwbGljYXRpb25D
YWNoZUFnZW50OwpAQCAtMzcxLDEwICszNzYsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gbV9zZXNzaW9uU2V0dGluZ3M7CiAjZW5kaWYKICAgICB1bnNpZ25lZCBtX2dy
b3VwTGV2ZWw7Ci0gICAgYm9vbCBtX3NlYXJjaGluZ0Zvck5vZGU7Ci0gICAgYm9vbCBtX21vbml0
b3JpbmdYSFI7CiAgICAgQ29uc29sZU1lc3NhZ2UqIG1fcHJldmlvdXNNZXNzYWdlOwotICAgIGJv
b2wgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZDsKICAgICBib29sIG1fc2V0dGluZ3NMb2FkZWQ7
CiAgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmQ+IG1faW5zcGVjdG9yQmFja2VuZDsKICAgICBP
d25QdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwCmluZGV4IDc3NjE2ZGEuLjQ4MTJiMmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCkBAIC00Nyw3ICs0Nyw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3Bl
Y3RvckF0dGFjaGVkSGVpZ2h0TmFtZSA9ICJpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCI7CiBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOwogc3RhdGljIGNv
bnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MC4wZjsKIHN0YXRpYyBjb25zdCBm
bG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzVmOwpAQCAtMTA4LDcgKzEwNyw3
IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2hhbmdlQXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogewogICAgIHVuc2lnbmVkIHRvdGFsSGVpZ2h0ID0g
bV9mcm9udGVuZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKSArIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
LT52aXNpYmxlSGVpZ2h0KCk7CiAgICAgdW5zaWduZWQgYXR0YWNoZWRIZWlnaHQgPSBjb25zdHJh
aW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCwgdG90YWxIZWlnaHQpOwotICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+c2V0U2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUs
IFN0cmluZzo6bnVtYmVyKGF0dGFjaGVkSGVpZ2h0KSk7CisgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5zZXRJbnNwZWN0b3JBdHRhY2hlZEhlaWdodChhdHRhY2hlZEhlaWdodCk7CiAgICAgc2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQoYXR0YWNoZWRIZWlnaHQpOwogfQogCkBAIC0xMzQsMTAgKzEz
Myw5IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5k
b3coYm9vbCBhdHRhY2hlZCkKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVz
dG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KCkKIHsKICAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdl
SGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKLSAgICBTdHJpbmcgYXR0YWNoZWRIZWlnaHQg
PSBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHRO
YW1lKTsKKyAgICBpbnQgYXR0YWNoZWRIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmlu
c3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBp
bnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9JbnQoJnN1Y2Nlc3MpOwotICAgIHVuc2lnbmVk
IHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVpZ2h0
KSA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKKyAgICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQg
PSBzdWNjZXNzID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGF0dGFjaGVkSGVpZ2h0KSA6IGRlZmF1
bHRBdHRhY2hlZEhlaWdodDsKICAgICAKICAgICAvLyBUaGlzIGNhbGwgbWlnaHQgbm90IGdvIHRo
cm91Z2ggKGlmIHRoZSB3aW5kb3cgc3RhcnRzIG91dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUgd2lu
ZG93IGlzIGluaXRpYWxseSBjcmVhdGVkIGF0dGFjaGVkLAogICAgIC8vIEluc3BlY3RvckNvbnRy
b2xsZXI6OmF0dGFjaFdpbmRvdyBpcyBuZXZlciBjYWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRvIHNldCB0aGUgYXR0YWNoZWRXaW5kb3dIZWlnaHQuCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyZTMzZAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcApA
QCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yU3RhdGUuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIklu
c3BlY3RvckNvbnRyb2xsZXIuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworSW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKEluc3BlY3RvckNs
aWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworICAgIHJlZ2lzdGVyQm9v
bGVhbihtb25pdG9yaW5nWEhSLCBmYWxzZSwgIm1vbml0b3JpbmdYSFIiLCAieGhyTW9uaXRvciIp
OworICAgIHJlZ2lzdGVyQm9vbGVhbihyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCwgZmFsc2UsICJy
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZCIsIChjb25zdCBjaGFyKikwKTsKKyAgICByZWdpc3RlckJv
b2xlYW4ocmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWQsIGZhbHNlLCAoY29uc3QgY2hhciop
MCwgInJlc291cmNlVHJhY2tpbmdFbmFibGVkIik7CisgICAgcmVnaXN0ZXJCb29sZWFuKHRpbWVs
aW5lUHJvZmlsZXJFbmFibGVkLCBmYWxzZSwgInRpbWVsaW5lUHJvZmlsZXJFbmFibGVkIiwgKGNv
bnN0IGNoYXIqKTApOworICAgIHJlZ2lzdGVyQm9vbGVhbihzZWFyY2hpbmdGb3JOb2RlLCBmYWxz
ZSwgInNlYXJjaGluZ0Zvck5vZGVFbmFibGVkIiwgKGNvbnN0IGNoYXIqKTApOworICAgIHJlZ2lz
dGVyQm9vbGVhbihwcm9maWxlckFsd2F5c0VuYWJsZWQsIGZhbHNlLCAoY29uc3QgY2hhciopMCwg
InByb2ZpbGVyRW5hYmxlZCIpOworICAgIHJlZ2lzdGVyU3RyaW5nKGZyb250ZW5kU2V0dGluZ3Ms
ICIiLCAoY29uc3QgY2hhciopMCwgImZyb250ZW5kU2V0dGluZ3MiKTsKKyAgICByZWdpc3RlckJv
b2xlYW4oZGVidWdnZXJBbHdheXNFbmFibGVkLCBmYWxzZSwgKGNvbnN0IGNoYXIqKTAsICJkZWJ1
Z2dlckVuYWJsZWQiKTsKKyAgICByZWdpc3RlclN0cmluZyhsYXN0QWN0aXZlUGFuZWwsIEluc3Bl
Y3RvckNvbnRyb2xsZXI6Okxhc3RBY3RpdmVQYW5lbCwgKGNvbnN0IGNoYXIqKTAsICJsYXN0QWN0
aXZlUGFuZWwiKTsKKyAgICByZWdpc3RlckJvb2xlYW4oaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQs
IHRydWUsIChjb25zdCBjaGFyKikwLCAiSW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQiKTsKKyAgICBy
ZWdpc3RlckxvbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQsIEluc3BlY3RvckNvbnRyb2xsZXI6
OmRlZmF1bHRBdHRhY2hlZEhlaWdodCwgKGNvbnN0IGNoYXIqKTAsICJpbnNwZWN0b3JBdHRhY2hl
ZEhlaWdodCIpOworICAgIHJlZ2lzdGVyTG9uZyhwYXVzZU9uRXhjZXB0aW9uc1N0YXRlLCAwLCAi
cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSIsIChjb25zdCBjaGFyKikwKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JTdGF0ZTo6cmVzdG9yZUZyb21JbnNwZWN0b3JDb29raWUoY29uc3QgU3RyaW5nJiBqc29u
KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNvblZhbHVlID0gSW5zcGVjdG9yVmFs
dWU6OnBhcnNlSlNPTihqc29uKTsKKyAgICBpZiAoIWpzb25WYWx1ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk9iamVjdCA9IGpzb25WYWx1ZS0+
YXNPYmplY3QoKTsKKyAgICBpZiAoIWpzb25PYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAg
IGZvciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpID0ganNvbk9iamVjdC0+YmVnaW4oKTsg
aSAhPSBqc29uT2JqZWN0LT5lbmQoKTsgKytpKSB7CisgICAgICAgIEluc3BlY3RvclByb3BlcnR5
SWQgaWQgPSAoSW5zcGVjdG9yUHJvcGVydHlJZClpLT5maXJzdC50b0ludCgpOworICAgICAgICBB
U1NFUlQoaWQgPiAwICYmIGlkIDwgbGFzdFByb3BlcnR5SWQpOworICAgICAgICBQcm9wZXJ0eU1h
cDo6aXRlcmF0b3IgaiA9IG1fcHJvcGVydGllcy5maW5kKGlkKTsKKyAgICAgICAgQVNTRVJUKGog
IT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKKyAgICAgICAgQVNTRVJUKGotPnNlY29uZC5tX3ZhbHVl
LT50eXBlKCkgPT0gaS0+c2Vjb25kLT50eXBlKCkpOworICAgICAgICBqLT5zZWNvbmQubV92YWx1
ZSA9IGktPnNlY29uZDsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJ
bnNwZWN0b3JTdGF0ZTo6Z2V0U3RhdGVPYmplY3RGb3JGcm9udGVuZCgpCit7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gc3RhdGVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGZvciAoUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuYmVnaW4o
KTsgaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCk7ICsraSkgeworICAgICAgICBpZiAoaS0+c2Vjb25k
Lm1fc3RhdGVOYW1lLmxlbmd0aCgpKQorICAgICAgICAgICAgc3RhdGVPYmplY3QtPnNldFZhbHVl
KGktPnNlY29uZC5tX3N0YXRlTmFtZSwgaS0+c2Vjb25kLm1fdmFsdWUpOworICAgIH0KKyAgICBy
ZXR1cm4gc3RhdGVPYmplY3QucmVsZWFzZSgpOworfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjps
b2FkRnJvbVNldHRpbmdzKCkKK3sKKyAgICBmb3IgKFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0g
bV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGktPnNlY29uZC5tX3ByZWZlcmVuY2VOYW1lLmxlbmd0aCgpKSB7CisgICAgICAg
ICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgICAgICBtX2NsaWVudC0+cG9wdWxhdGVTZXR0aW5n
KGktPnNlY29uZC5tX3ByZWZlcmVuY2VOYW1lLCAmdmFsdWUpOworICAgICAgICAgICAgc3dpdGNo
IChpLT5zZWNvbmQubV92YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEluc3BlY3Rv
clZhbHVlOjpUeXBlQm9vbGVhbjoKKyAgICAgICAgICAgICAgICBpLT5zZWNvbmQubV92YWx1ZSA9
IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSA9PSAidHJ1ZSIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JWYWx1ZTo6VHlwZVN0cmlu
ZzoKKyAgICAgICAgICAgICAgICBpLT5zZWNvbmQubV92YWx1ZSA9IEluc3BlY3RvclN0cmluZzo6
Y3JlYXRlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
SW5zcGVjdG9yVmFsdWU6OlR5cGVOdW1iZXI6CisgICAgICAgICAgICAgICAgaS0+c2Vjb25kLm1f
dmFsdWUgPSBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoKGRvdWJsZSl2YWx1ZS50b0ludCgp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JTdGF0ZTo6dXBkYXRl
Q29va2llKCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb29raWVPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGZvciAoUHJvcGVydHlNYXA6Oml0ZXJhdG9y
IGkgPSBtX3Byb3BlcnRpZXMuYmVnaW4oKTsgaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCk7ICsraSkK
KyAgICAgICAgY29va2llT2JqZWN0LT5zZXRWYWx1ZShTdHJpbmc6Om51bWJlcihpLT5maXJzdCks
IGktPnNlY29uZC5tX3ZhbHVlKTsKKyAgICBtX2NsaWVudC0+dXBkYXRlSW5zcGVjdG9yU3RhdGVD
b29raWUoY29va2llT2JqZWN0LT50b0pTT05TdHJpbmcoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
U3RhdGU6OnNldFZhbHVlKEluc3BlY3RvclByb3BlcnR5SWQgaWQsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVlKQoreworICAgIFByb3Bl
cnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOworICAgIEFTU0VSVChp
ICE9IG1fcHJvcGVydGllcy5lbmQoKSk7CisgICAgaS0+c2Vjb25kLm1fdmFsdWUgPSB2YWx1ZTsK
KyAgICBpZiAoaS0+c2Vjb25kLm1fcHJlZmVyZW5jZU5hbWUubGVuZ3RoKCkpCisgICAgICAgIG1f
Y2xpZW50LT5zdG9yZVNldHRpbmcoaS0+c2Vjb25kLm1fcHJlZmVyZW5jZU5hbWUsIHN0cmluZ1Zh
bHVlKTsKKyAgICB1cGRhdGVDb29raWUoKTsKK30KKworYm9vbCBJbnNwZWN0b3JTdGF0ZTo6Z2V0
Qm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlkIGlkKQoreworICAgIFByb3BlcnR5TWFwOjppdGVy
YXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpICE9IG1fcHJvcGVy
dGllcy5lbmQoKSk7CisgICAgYm9vbCB2YWx1ZSA9IGZhbHNlOworICAgIGktPnNlY29uZC5tX3Zh
bHVlLT5hc0Jvb2xlYW4oJnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBJ
bnNwZWN0b3JTdGF0ZTo6Z2V0U3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQgaWQpCit7CisgICAg
UHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7CisgICAgQVNT
RVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKKyAgICBTdHJpbmcgdmFsdWU7CisgICAgaS0+
c2Vjb25kLm1fdmFsdWUtPmFzU3RyaW5nKCZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQor
Citsb25nIEluc3BlY3RvclN0YXRlOjpnZXRMb25nKEluc3BlY3RvclByb3BlcnR5SWQgaWQpCit7
CisgICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7Cisg
ICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKKyAgICBsb25nIHZhbHVlID0gMDsK
KyAgICBpLT5zZWNvbmQubV92YWx1ZS0+YXNOdW1iZXIoJnZhbHVlKTsKKyAgICByZXR1cm4gdmFs
dWU7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyQm9vbGVhbihJbnNwZWN0b3JQ
cm9wZXJ0eUlkIHByb3BlcnR5SWQsIGJvb2wgdmFsdWUsIGNvbnN0IFN0cmluZyYgc3RhdGVOYW1l
LCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKQoreworICAgIG1fcHJvcGVydGllcy5zZXQo
cHJvcGVydHlJZCwgUHJvcGVydHk6OmNyZWF0ZShJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUo
dmFsdWUpLCBzdGF0ZU5hbWUsIHByZWZlcmVuY2VOYW1lKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
U3RhdGU6OnJlZ2lzdGVyU3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBzdGF0ZU5hbWUsIGNvbnN0IFN0cmluZyYg
cHJlZmVyZW5jZU5hbWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlkLCBQcm9w
ZXJ0eTo6Y3JlYXRlKEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKSwgc3RhdGVOYW1lLCBw
cmVmZXJlbmNlTmFtZSkpOworfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjpyZWdpc3Rlckxvbmco
SW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBsb25nIHZhbHVlLCBjb25zdCBTdHJpbmcm
IHN0YXRlTmFtZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSkKK3sKKyAgICBtX3Byb3Bl
cnRpZXMuc2V0KHByb3BlcnR5SWQsIFByb3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9yQmFzaWNWYWx1
ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpLCBzdGF0ZU5hbWUsIHByZWZlcmVuY2VOYW1lKSk7Cit9
CisKK0luc3BlY3RvclN0YXRlOjpQcm9wZXJ0eSBJbnNwZWN0b3JTdGF0ZTo6UHJvcGVydHk6OmNy
ZWF0ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBzdGF0
ZU5hbWUsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpCit7CisgICAgUHJvcGVydHkgcHJv
cGVydHk7CisgICAgcHJvcGVydHkubV92YWx1ZSA9IHZhbHVlOworICAgIHByb3BlcnR5Lm1fc3Rh
dGVOYW1lID0gc3RhdGVOYW1lOworICAgIHByb3BlcnR5Lm1fcHJlZmVyZW5jZU5hbWUgPSBwcmVm
ZXJlbmNlTmFtZTsKKyAgICByZXR1cm4gcHJvcGVydHk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTdkNjMxCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaApAQCAtMCww
ICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yU3RhdGVfaAorI2RlZmluZSBJbnNwZWN0b3JT
dGF0ZV9oCisKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEluc3BlY3RvckNsaWVu
dDsKKworY2xhc3MgSW5zcGVjdG9yU3RhdGUgeworcHVibGljOgorICAgIGVudW0gSW5zcGVjdG9y
UHJvcGVydHlJZCB7CisgICAgICAgIG1vbml0b3JpbmdYSFIgPSAxLAorICAgICAgICByZXNvdXJj
ZVRyYWNraW5nRW5hYmxlZCwKKyAgICAgICAgcmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWQs
CisgICAgICAgIHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkLAorICAgICAgICBzZWFyY2hpbmdGb3JO
b2RlLAorICAgICAgICBwcm9maWxlckFsd2F5c0VuYWJsZWQsCisgICAgICAgIGZyb250ZW5kU2V0
dGluZ3MsCisgICAgICAgIGRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwKKyAgICAgICAgbGFzdEFjdGl2
ZVBhbmVsLAorICAgICAgICBpbnNwZWN0b3JTdGFydHNBdHRhY2hlZCwKKyAgICAgICAgaW5zcGVj
dG9yQXR0YWNoZWRIZWlnaHQsCisgICAgICAgIHBhdXNlT25FeGNlcHRpb25zU3RhdGUsCisgICAg
ICAgIGxhc3RQcm9wZXJ0eUlkCisgICAgfTsKKworICAgIEluc3BlY3RvclN0YXRlKEluc3BlY3Rv
ckNsaWVudCogY2xpZW50KTsKKworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRT
dGF0ZU9iamVjdEZvckZyb250ZW5kKCk7CisgICAgdm9pZCByZXN0b3JlRnJvbUluc3BlY3RvckNv
b2tpZShjb25zdCBTdHJpbmcmIGpzb25TdHJpbmcpOworICAgIHZvaWQgbG9hZEZyb21TZXR0aW5n
cygpOworCisgICAgYm9vbCBnZXRCb29sZWFuKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJ
ZCk7CisgICAgU3RyaW5nIGdldFN0cmluZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQp
OworICAgIGxvbmcgZ2V0TG9uZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQpOworCisg
ICAgdm9pZCBzZXRCb29sZWFuKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgYm9vbCB2
YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0eUlkLCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUo
dmFsdWUpLCB2YWx1ZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOyB9CisgICAgdm9pZCBzZXRTdHJpbmco
SW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKSB7IHNl
dFZhbHVlKHByb3BlcnR5SWQsIEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKSwgdmFsdWUp
OyB9CisgICAgdm9pZCBzZXRMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgbG9u
ZyB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0eUlkLCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVh
dGUoKGRvdWJsZSl2YWx1ZSksIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7IH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIHVwZGF0ZUNvb2tpZSgpOworICAgIHZvaWQgc2V0VmFsdWUoSW5zcGVjdG9yUHJv
cGVydHlJZCBwcm9wZXJ0eUlkLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSwgY29u
c3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSk7CisKKyAgICBzdHJ1Y3QgUHJvcGVydHkgeworICAgICAg
ICBzdGF0aWMgUHJvcGVydHkgY3JlYXRlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVl
LCBjb25zdCBTdHJpbmcmIHN0YXRlTmFtZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSk7
CisgICAgICAgIFN0cmluZyBtX3N0YXRlTmFtZTsKKyAgICAgICAgU3RyaW5nIG1fcHJlZmVyZW5j
ZU5hbWU7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbV92YWx1ZTsKKyAgICB9Owor
ICAgIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBQcm9wZXJ0eT4gUHJvcGVydHlNYXA7CisgICAgUHJv
cGVydHlNYXAgbV9wcm9wZXJ0aWVzOworCisgICAgdm9pZCByZWdpc3RlckJvb2xlYW4oSW5zcGVj
dG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBib29sIHZhbHVlLCBjb25zdCBTdHJpbmcmIHN0YXRl
TmFtZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSk7CisgICAgdm9pZCByZWdpc3RlclN0
cmluZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUs
IGNvbnN0IFN0cmluZyYgc3RhdGVOYW1lLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKTsK
KyAgICB2b2lkIHJlZ2lzdGVyTG9uZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGxv
bmcgdmFsdWUsIGNvbnN0IFN0cmluZyYgc3RhdGVOYW1lLCBjb25zdCBTdHJpbmcmIHByZWZlcmVu
Y2VOYW1lKTsKKworICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JTdGF0ZV9oKQpk
aWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpp
bmRleCA1ZDhkNzYyLi45ODY1YTFhIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZwor
KysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEwLTEwLTE0ICBJ
bHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnNwZWN0b3Ig
c2V0dGluZ3MvcHJvcGVydGllcy9zdGF0ZXMgbWFuYWdlbWVudAorICAgICAgICBzaG91bGQgYmUg
ZXh0cmFjdGVkIGludG8gc2VwYXJhdGUgY2xhc3MuCisKKyAgICAgICAgV2UgaGF2ZSBhIGxvdCBv
ZiBmbGFncy92YWx1ZXMgaW4gSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICAgICAgU29tZSBmbGFn
cyBhcmUgcGVyc2lzdGluZyBpbnRvIHByb2ZpbGUuCisgICAgICAgIE90aGVycyBhcmUgcGFydCBv
ZiBpbnNwZWN0b3Igc3RhdGUgZm9yIGZyb250ZW5kLgorICAgICAgICBBbGwgdGhlc2UgZmxhZ3Mg
c2hvdWxkIGtlZXAgdGhlaXIgdmFsdWVzIGFmdGVyIG5hdmlnYXRpb24uCisgICAgICAgIEl0J2Qg
YmUgYmV0dGVyIHRvIGV4dHJhY3QgdGhlc2UgZmxhZ3MvdmFsdWVzIGludG8gc2VwYXJhdGUKKyAg
ICAgICAgY2xhc3Mgd2hpY2ggd2lsbCBjYXJlIGFib3V0IHRoZWlycyBsaWZldGltZS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyNzUKKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbToKKyAgICAgICAgKC1b
V2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBzaG93V2luZG93Ol0pOgorICAgICAgICAoLVtX
ZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGF0dGFjaF0pOgorICAgICAgICAoLVtXZWJJbnNw
ZWN0b3JXaW5kb3dDb250cm9sbGVyIGRldGFjaF0pOgorCiAyMDEwLTEwLTEzICBHYXZpbiBCYXJy
YWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBP
bGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQubW0KaW5kZXggZDRkMDIxMy4uZDBjNmM3OCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0KKysrIGIvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0KQEAgLTM1OCw4ICszNTgsOCBAQCB2b2lk
IFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0CiAg
ICAgX3Zpc2libGUgPSBZRVM7CiAgICAgCiAgICAgLy8gSWYgbm8gcHJlZmVyZW5jZSBpcyBzZXQg
LSBkZWZhdWx0IHRvIGFuIGF0dGFjaGVkIHdpbmRvdy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGlu
c3BlY3RvciBMYXlvdXRUZXN0cy4KLSAgICBTdHJpbmcgc2hvdWxkQXR0YWNoID0gW19pbnNwZWN0
ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldHRpbmcoSW5zcGVjdG9y
Q29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpKTsKLSAgICBf
c2hvdWxkQXR0YWNoID0gc2hvdWxkQXR0YWNoICE9ICJmYWxzZSI7CisgICAgLy8gRklYTUU6IFRo
aXMgZmxhZyBjYW4gYmUgZmV0Y2hlZCBkaXJlY3RseSBmcm9tIHRoZSBmbGFncyBzdG9yYWdlLgor
ICAgIF9zaG91bGRBdHRhY2ggPSBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKICAgICAKICAgICBpZiAoX3No
b3VsZEF0dGFjaCAmJiAhX2Zyb250ZW5kQ2xpZW50LT5jYW5BdHRhY2hXaW5kb3coKSkKICAgICAg
ICAgX3Nob3VsZEF0dGFjaCA9IE5POwpAQCAtMzk0LDcgKzM5NCw4IEBAIHZvaWQgV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkgY29uc3QKICAgICBpZiAoX2F0
dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKLSAgICBbX2luc3Bl
Y3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNw
ZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJ0
cnVlIik7CisgICAgLy8gRklYTUU6IFRoaXMgZmxhZyBjYW4gYmUgc2F2ZWQgZGlyZWN0bHkgdG8g
dGhlIGZsYWdzIHN0b3JhZ2UuCisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKHRydWUpOwogCiAgICAg
W3NlbGYgY2xvc2VdOwogICAgIFtzZWxmIHNob3dXaW5kb3c6bmlsXTsKQEAgLTQwNSw3ICs0MDYs
OCBAQCB2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgp
IGNvbnN0CiAgICAgaWYgKCFfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5zZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkU2V0dGluZ05hbWUoKSwgImZhbHNlIik7CisgICAgLy8gRklYTUU6IFRoaXMgZmxhZyBjYW4g
YmUgc2F2ZWQgdG8gdGhlIGZsYWdzIHN0b3JhZ2UgZGlyZWN0bHkuCisgICAgW19pbnNwZWN0ZWRX
ZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvclN0YXJ0c0F0
dGFjaGVkKGZhbHNlKTsKIAogICAgIFtzZWxmIGNsb3NlXTsKICAgICBbc2VsZiBzaG93V2luZG93
Om5pbF07CmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1dlYktpdC93aW4vQ2hh
bmdlTG9nCmluZGV4IGE4NDZiNzUuLmQ5NzYwYWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vQ2hh
bmdlTG9nCisrKyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAt
MTAtMTQgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGlu
c3BlY3RvciBzZXR0aW5ncy9wcm9wZXJ0aWVzL3N0YXRlcyBtYW5hZ2VtZW50CisgICAgICAgIHNo
b3VsZCBiZSBleHRyYWN0ZWQgaW50byBzZXBhcmF0ZSBjbGFzcy4KKworICAgICAgICBXZSBoYXZl
IGEgbG90IG9mIGZsYWdzL3ZhbHVlcyBpbiBJbnNwZWN0b3JDb250cm9sbGVyLgorICAgICAgICBT
b21lIGZsYWdzIGFyZSBwZXJzaXN0aW5nIGludG8gcHJvZmlsZS4KKyAgICAgICAgT3RoZXJzIGFy
ZSBwYXJ0IG9mIGluc3BlY3RvciBzdGF0ZSBmb3IgZnJvbnRlbmQuCisgICAgICAgIEFsbCB0aGVz
ZSBmbGFncyBzaG91bGQga2VlcCB0aGVpciB2YWx1ZXMgYWZ0ZXIgbmF2aWdhdGlvbi4KKyAgICAg
ICAgSXQnZCBiZSBiZXR0ZXIgdG8gZXh0cmFjdCB0aGVzZSBmbGFncy92YWx1ZXMgaW50byBzZXBh
cmF0ZQorICAgICAgICBjbGFzcyB3aGljaCB3aWxsIGNhcmUgYWJvdXQgdGhlaXJzIGxpZmV0aW1l
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI3
NQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3cpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25z
KToKKwogMjAxMC0xMC0xMyAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCmRpZmYgLS1naXQgYS9XZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAgYi9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKaW5kZXggMWI3OWRkZS4uMDY3
MjUzNyAxMDA2NDQKLS0tIGEvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuY3BwCisrKyBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xp
ZW50LmNwcApAQCAtMjczLDcgKzI3Myw4IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmF0dGFjaFdpbmRvdygpCiAgICAgaWYgKG1fYXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PnNldFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRT
ZXR0aW5nTmFtZSgpLCAidHJ1ZSIpOworICAgIC8vIEZJWE1FOiBUaGlzIGZsYWcgY2FuIGJlIHNh
dmVkIHRvIHRoZSBmbGFncyBzdG9yYWdlIGRpcmVjdGx5LgorICAgIG1faW5zcGVjdGVkV2ViVmll
dy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkKHRydWUpOwogCiAgICAgY2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogICAg
IHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwpAQCAtMjg0LDcgKzI4NSw4IEBAIHZv
aWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdygpCiAgICAgaWYgKCFt
X2F0dGFjaGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2luc3BlY3RlZFdlYlZpZXctPnBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xs
ZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSwgImZhbHNlIik7CisgICAg
Ly8gRklYTUU6IFRoaXMgZmxhZyBjYW4gYmUgc2F2ZWQgdG8gdGhlIGZsYWdzIHN0b3JhZ2UgZGly
ZWN0bHkuCisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoZmFsc2UpOwogCiAgICAgY2xvc2VXaW5k
b3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogICAgIHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0
aW9ucygpOwpAQCAtMzY0LDggKzM2Niw4IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpCiAgICAgICAgIHNob3VsZEF0dGFj
aCA9IHRydWU7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIElmIG5vIHByZWZlcmVuY2UgaXMgc2V0
IC0gZGVmYXVsdCB0byBhbiBhdHRhY2hlZCB3aW5kb3cuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBp
bnNwZWN0b3IgTGF5b3V0VGVzdHMuCi0gICAgICAgIFN0cmluZyBzaG91bGRBdHRhY2hQcmVmID0g
bV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0dGlu
ZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1l
KCkpOwotICAgICAgICBzaG91bGRBdHRhY2ggPSBzaG91bGRBdHRhY2hQcmVmICE9ICJmYWxzZSI7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGZsYWcgY2FuIGJlIGZldGNoZWQgZGlyZWN0bHkgZnJv
bSB0aGUgZmxhZ3Mgc3RvcmFnZS4KKyAgICAgICAgc2hvdWxkQXR0YWNoID0gbV9pbnNwZWN0ZWRX
ZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVjdG9yU3RhcnRzQXR0
YWNoZWQoKTsKIAogICAgICAgICBpZiAoc2hvdWxkQXR0YWNoICYmICFjYW5BdHRhY2hXaW5kb3co
KSkKICAgICAgICAgICAgIHNob3VsZEF0dGFjaCA9IGZhbHNlOwo=
</data>
<flag name="review"
          id="60602"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70732</attachid>
            <date>2010-10-14 06:14:37 -0700</date>
            <delta_ts>2010-10-14 06:40:23 -0700</delta_ts>
            <desc>[patch] fourth iteration. OOP</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>55912</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDEzZGNhOTQuLjU2ZTdjZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExNCw2ICsxMTE0LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzFiYThiNi4uNTA3Y2NjZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NiBAQAorMjAxMC0xMC0xNCAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW5zcGVjdG9yIHNldHRpbmdzL3By
b3BlcnRpZXMvc3RhdGVzIG1hbmFnZW1lbnQKKyAgICAgICAgc2hvdWxkIGJlIGV4dHJhY3RlZCBp
bnRvIHNlcGFyYXRlIGNsYXNzLgorCisgICAgICAgIFdlIGhhdmUgYSBsb3Qgb2YgZmxhZ3MvdmFs
dWVzIGluIEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIFNvbWUgZmxhZ3MgYXJlIHBlcnNp
c3RpbmcgaW50byBwcm9maWxlLgorICAgICAgICBPdGhlcnMgYXJlIHBhcnQgb2YgaW5zcGVjdG9y
IHN0YXRlIGZvciBmcm9udGVuZC4KKyAgICAgICAgQWxsIHRoZXNlIGZsYWdzIHNob3VsZCBrZWVw
IHRoZWlyIHZhbHVlcyBhZnRlciBuYXZpZ2F0aW9uLgorICAgICAgICBJdCdkIGJlIGJldHRlciB0
byBleHRyYWN0IHRoZXNlIGZsYWdzL3ZhbHVlcyBpbnRvIHNlcGFyYXRlCisgICAgICAgIGNsYXNz
IHdoaWNoIHdpbGwgY2FyZSBhYm91dCB0aGVpcnMgbGlmZXRpbWUuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mjc1CisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
LmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQXR0YWNo
ZWRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2VhcmNo
aW5nRm9yTm9kZUluUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpnZXRJbnNwZWN0b3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFNldHRpbmdzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3JlTGFzdEFjdGl2ZVBhbmVs
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmhhbmRs
ZU1vdXNlUHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
U2VhcmNoaW5nRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRNb25pdG9yaW5nWEhSRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzaG93UGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmdldFRyYWNrZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aWRlbnRpZmllckZvckluaXRp
YWxSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291
cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbnN1cmVTZXR0aW5nc0xvYWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWVsaW5lUHJvZmls
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmls
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2Zp
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVn
Z2VyRnJvbUZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpc2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
Ojpsb2FkQnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6c2F2ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNo
YW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWw6OnJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdGF0ZTo6SW5zcGVjdG9yU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yU3RhdGU6OnJlc3RvcmVGcm9tSW5zcGVjdG9yQ29va2llKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0YXRlOjpnZW5lcmF0ZVN0YXRlT2JqZWN0Rm9yRnJvbnRlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OmxvYWRGcm9tU2V0dGluZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnVwZGF0ZUNvb2tpZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdGF0ZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3RhdGU6OmdldEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6
OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2V0TG9uZyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6cmVnaXN0ZXJCb29sZWFuKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpyZWdpc3RlclN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6cmVnaXN0ZXJMb25nKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0YXRlOjpQcm9wZXJ0eTo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yU3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dGF0ZTo6c2V0Qm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6c2V0
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpzZXRMb25nKToKKwog
MjAxMC0xMC0wOCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYTlhMjkzMy4uNTU2MzQ5
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCkBAIC0xODMyLDYgKzE4MzIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAJV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JSZXNvdXJjZS5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAgXAor
CVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmggXAogCVdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0b3JhZ2VBZ2VudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgppbmRleCBmY2IwZWZkLi40MzA4ZjlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEyMTYsNyArMTIx
Niw2IEBAIF9fWk43V2ViQ29yZTIyR2VvbG9jYXRpb25TZXJ2aWNlTW9jazhzZXRFcnJvckVOM1dU
RjEwUGFzc1JlZlB0cklOU18xM1Bvc2l0aW9uRXJyCiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMHNldFNldHRpbmdFUktO
M1dURjZTdHJpbmdFUzRfCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMkNvbnNv
bGVQYW5lbEUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyU2NyaXB0c1BhbmVs
RQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTNQcm9maWxlc1BhbmVsRQpAQCAt
MTIyNywxMiArMTIyNiwxMiBAQCBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNWRp
c2FibGVQcm9maWxlckViCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxOGRpc2Nv
bm5lY3RGcm9udGVuZEV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMHN0b3BU
aW1lbGluZVByb2ZpbGVyRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIxc3Rh
cnRUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIz
aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9s
bGVyMjVldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kRWxSS04zV1RGNlN0cmluZ0UKIF9fWk43V2Vi
Q29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFTjNX
VEYxMFBhc3NPd25QdHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQorX19aTjdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZEViCiBf
X1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNlckluaXRpYXRlZFByb2Zp
bGluZ0V2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnN0b3BVc2VySW5pdGlh
dGVkUHJvZmlsaW5nRXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjM0aW5zcGVj
dG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2Ci1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIzNGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWVFdgogX19aTks3V2Vi
Q29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjMxaXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmls
ZUV2CiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVwcm9maWxlckVuYWJsZWRF
dgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dFdgpAQCAtMTI1Miw3ICsx
MjUxLDYgQEAgX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsQzJFUE5T
XzE5SW5zcGVjdG9yQ29udHJvbGxlckVQTlNfNFBhZ2UKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbEQyRXYKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIxN2RyYXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29udGV4dEUKIF9fWk5LN1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXI3ZW5hYmxlZEV2Ci1fX1pOSzdXZWJDb3JlMTlJbnNwZWN0
b3JDb250cm9sbGVyN3NldHRpbmdFUktOM1dURjZTdHJpbmdFCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShKQVZBX0JSSURHRSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggOTIwZTc1NC4uNTExNDg4YiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE5MzMsNiArMTkz
Myw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCcsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgnLAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0
b3JTdGF0ZS5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50
LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5oJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAnLApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggOTAy
MzBlOC4uNGIxMWE3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJD
b3JlL1dlYkNvcmUucHJvCkBAIC0xMDAxLDYgKzEwMDEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2UuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAg
XApAQCAtMTg3OCw2ICsxODc5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCBcCisgICAgaW5zcGVj
dG9yL0luc3BlY3RvclN0YXRlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdl
bnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagppbmRleCA4NGFjNzhmLi4yZDIwMzIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTYzMjM5LDYgKzYzMjM5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JTdGF0
ZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3RhdGUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JTdG9yYWdl
QWdlbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTQxZGU4NS4uN2I2YjA3MSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMzEsNiArMTEzMSw4IEBACiAJCTRG
NEY1RkZCMTFDQkQyRTEwMEExODZCRiAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjRGNUZGQTExQ0JEMkQyMDBB
MTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwICovOyB9OwogCQk0RjcwN0E5OTExRUY2Nzk0
MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY3MDdBOTcxMUVGNjc5NDAwQUNEQTY5
IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCAqLzsgfTsKIAkJNEY3MDdBOUExMUVG
Njc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjcwN0E5ODExRUY2Nzk0MDBBQ0RB
NjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCAqLzsgfTsKKwkJNEZBM0I5MEExMjVD
RDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAvKiBJbnNw
ZWN0b3JTdGF0ZS5jcHAgKi87IH07CisJCTRGQTNCOTBCMTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNw
ZWN0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmggKi87IH07CiAJ
CTRGRDhEMEYyMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhEMEYwMTE5QzcxOEIwMDJG
QTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAqLzsgfTsKIAkJNEZEOEQwRjMxMTlDNzE4QjAwMkZB
ODI1IC8qIFNjcmlwdEdDRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRGRDhEMEYxMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50Lmgg
Ki87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxODQ2NzBCMDg2MDJB
MDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC03MTk3LDYgKzcxOTksOCBAQAogCQk0RjRGNUZGQzExQ0JEMzAx
MDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNEY3MDdBOTcxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEY3MDdBOTgx
MUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAvKiBJ
bnNwZWN0b3JTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnNwZWN0b3JTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRGQTNCOTA5
MTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0RkQ4RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRHQ0V2ZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEZEOEQwRjExMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlw
dEdDRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0R0NFdmVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJBMDA0QTgy
NUYgLyogQ2FjaGVkUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNo
ZWRQYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjE5Miw2ICsxMjE5Niw4
IEBACiAJCQkJOUYwRDZCMkQxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdl
bnQuaCAqLywKIAkJCQk0MUYwNjIwMDBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3Vy
Y2UuY3BwICovLAogCQkJCTQxRjA2MUZGMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNv
dXJjZS5oICovLAorCQkJCTRGQTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0
ZS5jcHAgKi8sCisJCQkJNEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRl
LmggKi8sCiAJCQkJN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0b3JhZ2VB
Z2VudC5jcHAgKi8sCiAJCQkJN0FCMEIxQkYxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvclN0
b3JhZ2VBZ2VudC5oICovLAogCQkJCTgyQUIxNzZGMTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0
b3JTdHlsZVNoZWV0LmNwcCAqLywKQEAgLTIxMDY5LDYgKzIxMDc1LDcgQEAKIAkJCQk5M0YxOTlF
RDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTRGQTNCOTBCMTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0yMzYxNSw2ICsyMzYyMiw3IEBACiAJCQkJOTNGMTlCMDUwODI0
NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNEZBM0I5MEExMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3Rv
clN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcAppbmRleCBhZjBiMzgzLi5iMWY0OTNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgIkluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdlbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvclN0
YXRlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RvcmFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgpAQCAt
MTE1LDQxICsxMTYsMTkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZnJvbnRlbmRTZXR0aW5nc1NldHRpbmdO
YW1lID0gImZyb250ZW5kU2V0dGluZ3MiOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZGVi
dWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUgPSAiZGVidWdnZXJFbmFibGVkIjsKLXN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBsYXN0QWN0aXZlUGFuZWwgPSAibGFzdEFjdGl2ZVBhbmVsIjsK
LXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBtb25pdG9yaW5nWEhSU2V0dGluZ05hbWUgPSAieGhy
TW9uaXRvciI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgcmVzb3VyY2VUcmFja2luZ0Fsd2F5
c0VuYWJsZWRTZXR0aW5nTmFtZSA9ICJyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCI7Ci1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgcHJvZmlsZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUgPSAicHJv
ZmlsZXJFbmFibGVkIjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IG1vbml0b3JpbmdYSFJT
dGF0ZU5hbWUgPSAibW9uaXRvcmluZ1hIUkVuYWJsZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IHJlc291cmNlVHJhY2tpbmdFbmFibGVkU3RhdGVOYW1lID0gInJlc291cmNlVHJhY2tpbmdF
bmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzZWFyY2hpbmdGb3JOb2RlRW5hYmxl
ZFN0YXRlTmFtZSA9ICJzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgdGltZWxpbmVQcm9maWxlckVuYWJsZWRTdGF0ZU5hbWUgPSAidGltZWxpbmVQcm9m
aWxlckVuYWJsZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHBhdXNlT25FeGNlcHRpb25z
U3RhdGVTdGF0ZU5hbWUgPSAicGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSI7Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUgPSAiaW5zcGVjdG9yQXR0
YWNoZWRIZWlnaHQiOwotCiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZG9tTmF0aXZlQnJlYWtw
b2ludFR5cGUgPSAiRE9NIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBldmVudExpc3RlbmVy
TmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiRXZlbnRMaXN0ZW5lciI7CiBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgeGhyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiWEhSIjsKIAorLy8gRklYTUU6IG1v
dmUgbGFzdCBwYW5lbCBzZXR0aW5nIHRvIHRoZSBmcm9udC1lbmQKK2NvbnN0IGNoYXIqIGNvbnN0
IEluc3BlY3RvckNvbnRyb2xsZXI6Okxhc3RBY3RpdmVQYW5lbCA9ICJsYXN0QWN0aXZlUGFuZWwi
OwogY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6RWxlbWVudHNQYW5lbCA9
ICJlbGVtZW50cyI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpDb25z
b2xlUGFuZWwgPSAiY29uc29sZSI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9s
bGVyOjpTY3JpcHRzUGFuZWwgPSAic2NyaXB0cyI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0
b3JDb250cm9sbGVyOjpQcm9maWxlc1BhbmVsID0gInByb2ZpbGVzIjsKIAorY29uc3QgdW5zaWdu
ZWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOwogCi1j
b25zdCBTdHJpbmcmIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVk
U2V0dGluZ05hbWUoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzZXR0aW5n
TmFtZSwgKCJpbnNwZWN0b3JTdGFydHNBdHRhY2hlZCIpKTsKLSAgICByZXR1cm4gc2V0dGluZ05h
bWU7Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAz
MDA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwLjBmOwot
c3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NWY7CiBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUNvbnNvbGVNZXNzYWdlcyA9IDEwMDA7CiBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZXhwaXJlQ29uc29sZU1lc3NhZ2VzU3RlcCA9IDEwMDsKIApAQCAt
MTU5LDEzICsxMzgsMTAgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxl
cihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fb3BlbmluZ0Zy
b250ZW5kKGZhbHNlKQogICAgICwgbV9jc3NTdG9yZShuZXcgSW5zcGVjdG9yQ1NTU3RvcmUodGhp
cykpCiAgICAgLCBtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50KDApCi0gICAgLCBtX3Nob3dB
ZnRlclZpc2libGUobGFzdEFjdGl2ZVBhbmVsKQorICAgICwgbV9zaG93QWZ0ZXJWaXNpYmxlKExh
c3RBY3RpdmVQYW5lbCkKICAgICAsIG1fc2Vzc2lvblNldHRpbmdzKEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpCiAgICAgLCBtX2dyb3VwTGV2ZWwoMCkKLSAgICAsIG1fc2VhcmNoaW5nRm9yTm9k
ZShmYWxzZSkKLSAgICAsIG1fbW9uaXRvcmluZ1hIUihmYWxzZSkKICAgICAsIG1fcHJldmlvdXNN
ZXNzYWdlKDApCi0gICAgLCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKGZhbHNlKQogICAgICwg
bV9zZXR0aW5nc0xvYWRlZChmYWxzZSkKICAgICAsIG1faW5zcGVjdG9yQmFja2VuZChJbnNwZWN0
b3JCYWNrZW5kOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKG5ldyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcih0aGlzKSkKQEAgLTE3Niw2ICsxNTIs
NyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2Us
IEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgICwgbV9wcm9maWxlckFnZW50KEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ6OmNyZWF0ZSh0aGlzKSkKICNlbmRpZgogeworICAgIG1fc3RhdGUgPSBu
ZXcgSW5zcGVjdG9yU3RhdGUoY2xpZW50KTsKICAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwog
ICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOwogfQpAQCAtMjE5LDI3ICsxOTYsMzkgQEAg
Ym9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9p
bnNwZWN0ZWRQYWdlLT5zZXR0aW5ncygpLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7CiB9CiAK
LVN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5KSBj
b25zdAorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgp
Cit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6Omluc3Bl
Y3RvclN0YXJ0c0F0dGFjaGVkKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJ
bnNwZWN0b3JTdGFydHNBdHRhY2hlZChib29sIGF0dGFjaGVkKQogewotICAgIFNldHRpbmdzOjpp
dGVyYXRvciBpdCA9IG1fc2V0dGluZ3MuZmluZChrZXkpOwotICAgIGlmIChpdCAhPSBtX3NldHRp
bmdzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICBtX3N0YXRlLT5zZXRC
b29sZWFuKEluc3BlY3RvclN0YXRlOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCwgYXR0YWNoZWQp
OworfQogCi0gICAgU3RyaW5nIHZhbHVlOwotICAgIG1fY2xpZW50LT5wb3B1bGF0ZVNldHRpbmco
a2V5LCAmdmFsdWUpOwotICAgIG1fc2V0dGluZ3Muc2V0KGtleSwgdmFsdWUpOwotICAgIHJldHVy
biB2YWx1ZTsKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yQXR0YWNoZWRI
ZWlnaHQobG9uZyBoZWlnaHQpCit7CisgICAgbV9zdGF0ZS0+c2V0TG9uZyhJbnNwZWN0b3JTdGF0
ZTo6aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQsIGhlaWdodCk7Cit9CisKK2ludCBJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6Omluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZXR0aW5nKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkgY29uc3QKIHsKLSAgICBtX3NldHRpbmdzLnNldChr
ZXksIHZhbHVlKTsKLSAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGtleSwgdmFsdWUpOworICAg
IHJldHVybiBtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JO
b2RlKTsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVRyYWNraW5nRW5h
YmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9y
U3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKQog
ewotICAgIHNldFNldHRpbmcoZnJvbnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lLCBzZXR0aW5ncyk7
CisgICAgbV9zdGF0ZS0+c2V0U3RyaW5nKEluc3BlY3RvclN0YXRlOjpmcm9udGVuZFNldHRpbmdz
LCBzZXR0aW5ncyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZVNlc3Npb25T
ZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzSlNPTikKQEAgLTI0OSw1MCArMjM4LDI0IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJp
bmcmIHNldHRpbmdzSlNPTikKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRJbnNwZWN0
b3JTdGF0ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3RhdGUpCiB7Ci0gICAgKCpzdGF0ZSkt
PnNldEJvb2xlYW4obW9uaXRvcmluZ1hIUlN0YXRlTmFtZSwgbV9tb25pdG9yaW5nWEhSKTsKLSAg
ICAoKnN0YXRlKS0+c2V0Qm9vbGVhbihyZXNvdXJjZVRyYWNraW5nRW5hYmxlZFN0YXRlTmFtZSwg
bV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKLSAgICAgICAgKCpzdGF0ZSktPnNldE51bWJl
cihwYXVzZU9uRXhjZXB0aW9uc1N0YXRlU3RhdGVOYW1lLCBtX2RlYnVnZ2VyQWdlbnQtPnBhdXNl
T25FeGNlcHRpb25zU3RhdGUoKSk7CisgICAgICAgIG1fc3RhdGUtPnNldE51bWJlcihJbnNwZWN0
b3JTdGF0ZTo6cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSwgbV9kZWJ1Z2dlckFnZW50LT5wYXVzZU9u
RXhjZXB0aW9uc1N0YXRlKCkpOwogI2VuZGlmCisgICAgKnN0YXRlID0gbV9zdGF0ZS0+Z2VuZXJh
dGVTdGF0ZU9iamVjdEZvckZyb250ZW5kKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHN0YXRlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBzdGF0ZS0+c2V0
Qm9vbGVhbihtb25pdG9yaW5nWEhSU3RhdGVOYW1lLCBtX21vbml0b3JpbmdYSFIpOwotICAgIHN0
YXRlLT5zZXRCb29sZWFuKHJlc291cmNlVHJhY2tpbmdFbmFibGVkU3RhdGVOYW1lLCBtX3Jlc291
cmNlVHJhY2tpbmdFbmFibGVkKTsKLSAgICBzdGF0ZS0+c2V0Qm9vbGVhbih0aW1lbGluZVByb2Zp
bGVyRW5hYmxlZFN0YXRlTmFtZSwgbV90aW1lbGluZUFnZW50KTsKLSAgICBzdGF0ZS0+c2V0Qm9v
bGVhbihzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZFN0YXRlTmFtZSwgbV9zZWFyY2hpbmdGb3JOb2Rl
KTsKLSAgICBtX2NsaWVudC0+dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoc3RhdGUtPnRvSlNP
TlN0cmluZygpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVj
dG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdGVTdHJpbmcpCit2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUo
Y29uc3QgU3RyaW5nJiBpbnNwZWN0b3JTdGF0ZUNvb2tpZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IGluc3BlY3RvclN0YXRlVmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09O
KGluc3BlY3RvclN0YXRlU3RyaW5nKTsKLSAgICBpZiAoIWluc3BlY3RvclN0YXRlVmFsdWUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluc3BlY3RvclN0
YXRlID0gaW5zcGVjdG9yU3RhdGVWYWx1ZS0+YXNPYmplY3QoKTsKLSAgICBpZiAoIWluc3BlY3Rv
clN0YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnNwZWN0b3JTdGF0ZS0+Z2V0Qm9vbGVh
bihtb25pdG9yaW5nWEhSU3RhdGVOYW1lLCAmbV9tb25pdG9yaW5nWEhSKTsKLSAgICBpbnNwZWN0
b3JTdGF0ZS0+Z2V0Qm9vbGVhbihyZXNvdXJjZVRyYWNraW5nRW5hYmxlZFN0YXRlTmFtZSwgJm1f
cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpOwotICAgIGluc3BlY3RvclN0YXRlLT5nZXRCb29sZWFu
KHNlYXJjaGluZ0Zvck5vZGVFbmFibGVkU3RhdGVOYW1lLCAmbV9zZWFyY2hpbmdGb3JOb2RlKTsK
LQotICAgIGJvb2wgdGltZWxpbmVQcm9maWxlckVuYWJsZWQgPSBmYWxzZTsKLSAgICBpbnNwZWN0
b3JTdGF0ZS0+Z2V0Qm9vbGVhbih0aW1lbGluZVByb2ZpbGVyRW5hYmxlZFN0YXRlTmFtZSwgJnRp
bWVsaW5lUHJvZmlsZXJFbmFibGVkKTsKLSAgICBpZiAodGltZWxpbmVQcm9maWxlckVuYWJsZWQp
CisgICAgbV9zdGF0ZS0+cmVzdG9yZUZyb21JbnNwZWN0b3JDb29raWUoaW5zcGVjdG9yU3RhdGVD
b29raWUpOworICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp0aW1l
bGluZVByb2ZpbGVyRW5hYmxlZCkpCiAgICAgICAgIHN0YXJ0VGltZWxpbmVQcm9maWxlcigpOwot
ICAgIGVsc2UKLSAgICAgICAgc3RvcFRpbWVsaW5lUHJvZmlsZXIoKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpnZXRTZXR0aW5ncyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc2V0
dGluZ3MpCiB7CiAgICAgKnNldHRpbmdzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAoKnNldHRpbmdzKS0+c2V0U3RyaW5nKCJhcHBsaWNhdGlvbiIsIHNldHRpbmcoZnJvbnRlbmRT
ZXR0aW5nc1NldHRpbmdOYW1lKSk7CisgICAgKCpzZXR0aW5ncyktPnNldFN0cmluZygiYXBwbGlj
YXRpb24iLCBtX3N0YXRlLT5nZXRTdHJpbmcoSW5zcGVjdG9yU3RhdGU6OmZyb250ZW5kU2V0dGlu
Z3MpKTsKICAgICAoKnNldHRpbmdzKS0+c2V0U3RyaW5nKCJzZXNzaW9uIiwgbV9zZXNzaW9uU2V0
dGluZ3MtPnRvSlNPTlN0cmluZygpKTsKIH0KIApAQCAtNDI5LDEyICszOTIsMTIgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjptYXJrVGltZWxpbmUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0
cmluZyYgcGFuZWxOYW1lKQogewotICAgIHNldFNldHRpbmcobGFzdEFjdGl2ZVBhbmVsLCBwYW5l
bE5hbWUpOworICAgIG1fc3RhdGUtPnNldFN0cmluZyhJbnNwZWN0b3JTdGF0ZTo6bGFzdEFjdGl2
ZVBhbmVsLCBwYW5lbE5hbWUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQp
CiB7Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fc2VhcmNoaW5nRm9yTm9kZSkKKyAgICBpZiAo
IWVuYWJsZWQoKSB8fCAhbV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6c2VhcmNo
aW5nRm9yTm9kZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIG5vZGUgPSByZXN1bHQu
aW5uZXJOb2RlKCk7CkBAIC00NDksNyArNDEyLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpoYW5kbGVNb3VzZVByZXNzKCkKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQVNTRVJUKG1fc2VhcmNoaW5nRm9yTm9kZSk7CisgICAgQVNTRVJUKG1fc3RhdGUt
PmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUpKTsKICAgICBpZiAo
IW1faGlnaGxpZ2h0ZWROb2RlKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ4OCwxMiArNDUxLDEx
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0
Q2xlYXJlZChGcmFtZSogZnJhbWUpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2Vh
cmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpCiB7Ci0gICAgaWYgKG1fc2VhcmNoaW5nRm9yTm9k
ZSA9PSBlbmFibGVkKQorICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRl
OjpzZWFyY2hpbmdGb3JOb2RlKSA9PSBlbmFibGVkKQogICAgICAgICByZXR1cm47Ci0gICAgbV9z
ZWFyY2hpbmdGb3JOb2RlID0gZW5hYmxlZDsKLSAgICBpZiAoIW1fc2VhcmNoaW5nRm9yTm9kZSkK
KyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2Rl
LCBlbmFibGVkKTsKKyAgICBpZiAoIWVuYWJsZWQpCiAgICAgICAgIGhpZGVIaWdobGlnaHQoKTsK
LSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0
ZSkKQEAgLTUwNSwxMSArNDY3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFy
Y2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldE1vbml0b3JpbmdYSFJFbmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCog
bmV3U3RhdGUpCiB7CiAgICAgKm5ld1N0YXRlID0gZW5hYmxlZDsKLSAgICBpZiAobV9tb25pdG9y
aW5nWEhSID09IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX21vbml0b3JpbmdYSFIg
PSBlbmFibGVkOwotICAgIHNldFNldHRpbmcobW9uaXRvcmluZ1hIUlNldHRpbmdOYW1lLCBlbmFi
bGVkID8gInRydWUiIDogImZhbHNlIik7Ci0gICAgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUo
KTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjptb25pdG9yaW5nWEhS
LCBlbmFibGVkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRl
bmQoKQpAQCAtNTczLDcgKzUzMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1Bh
bmVsKGNvbnN0IFN0cmluZyYgcGFuZWwpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAocGFuZWwgPT0gbGFzdEFjdGl2ZVBhbmVsKQorICAgIGlmIChwYW5lbCA9PSBMYXN0QWN0aXZl
UGFuZWwpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZnJvbnRlbmQtPnNob3dQYW5lbChwYW5l
bCk7CkBAIC02MDksNyArNTY3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25u
ZWN0RnJvbnRlbmQoKQogICAgIHVuYmluZEFsbFJlc291cmNlcygpOwogICAgIHN0b3BUaW1lbGlu
ZVByb2ZpbGVyKCk7CiAKLSAgICBtX3Nob3dBZnRlclZpc2libGUgPSBsYXN0QWN0aXZlUGFuZWw7
CisgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gTGFzdEFjdGl2ZVBhbmVsOwogCiAgICAgaGlkZUhp
Z2hsaWdodCgpOwogCkBAIC02NDcsOCArNjA1LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQogICAgIGlmICghbV9mcm9udGVuZCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG1fc2hvd0FmdGVyVmlzaWJsZSA9PSBsYXN0QWN0aXZlUGFuZWwp
Ci0gICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IHNldHRpbmcobGFzdEFjdGl2ZVBhbmVsKTsK
KyAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxlID09IExhc3RBY3RpdmVQYW5lbCkKKyAgICAgICAg
bV9zaG93QWZ0ZXJWaXNpYmxlID0gbV9zdGF0ZS0+Z2V0U3RyaW5nKEluc3BlY3RvclN0YXRlOjps
YXN0QWN0aXZlUGFuZWwpOwogCiAgICAgc2hvd1BhbmVsKG1fc2hvd0FmdGVyVmlzaWJsZSk7CiAK
QEAgLTcwNiw4ICs2NjQsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVEZWJ1
Z2dlcigpCiAgICAgaWYgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmlzRGVidWdnZXJBbHdheXNF
bmFibGVkKCkpCiAgICAgICAgIGVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGZhbHNlKTsKICAg
ICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIGRlYnVnZ2VyRW5hYmxlZCA9IHNldHRpbmcoZGVidWdn
ZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUpOwotICAgICAgICBpZiAoZGVidWdnZXJFbmFibGVk
ID09ICJ0cnVlIiB8fCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKQorICAgICAgICBpZiAobV9z
dGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6ZGVidWdnZXJBbHdheXNFbmFibGVkKSB8
fCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKQogICAgICAgICAgICAgZW5hYmxlRGVidWdnZXIo
KTsKICAgICB9CiAjZW5kaWYKQEAgLTcxOCwxMSArNjc1LDggQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpyZXN0b3JlUHJvZmlsZXIoKQogICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKICNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldEZyb250
ZW5kKG1fZnJvbnRlbmQuZ2V0KCkpOwotICAgIGlmICghU2NyaXB0UHJvZmlsZXI6OmlzUHJvZmls
ZXJBbHdheXNFbmFibGVkKCkpIHsKLSAgICAgICAgU3RyaW5nIHByb2ZpbGVyRW5hYmxlZFNldHRp
bmcgPSBzZXR0aW5nKHByb2ZpbGVyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lKTsKLSAgICAgICAg
aWYgKHByb2ZpbGVyRW5hYmxlZFNldHRpbmcgPT0gInRydWUiKQotICAgICAgICAgICAgZW5hYmxl
UHJvZmlsZXIoKTsKLSAgICB9CisgICAgaWYgKCFTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFs
d2F5c0VuYWJsZWQoKSAmJiBtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpwcm9m
aWxlckFsd2F5c0VuYWJsZWQpKQorICAgICAgICBlbmFibGVQcm9maWxlcigpOwogI2VuZGlmCiB9
CiAKQEAgLTg5NCw3ICs4NDgsNyBAQCBJbnNwZWN0b3JSZXNvdXJjZSogSW5zcGVjdG9yQ29udHJv
bGxlcjo6Z2V0VHJhY2tlZFJlc291cmNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZgogICAgIGlmICgh
ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChtX3Jlc291cmNlVHJhY2tp
bmdFbmFibGVkKQorICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpy
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkpCiAgICAgICAgIHJldHVybiBtX3Jlc291cmNlcy5nZXQo
aWRlbnRpZmllcikuZ2V0KCk7CiAKICAgICBib29sIGlzTWFpblJlc291cmNlID0gbV9tYWluUmVz
b3VyY2UgJiYgbV9tYWluUmVzb3VyY2UtPmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyOwpAQCAt
OTI1LDcgKzg3OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTG9hZFJlc291cmNl
RnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsCiAgICAgQVNTRVJUKG1faW5z
cGVjdGVkUGFnZSk7CiAgICAgYm9vbCBpc01haW5SZXNvdXJjZSA9IGlzTWFpblJlc291cmNlTG9h
ZGVyKGxvYWRlciwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIGNhY2hlZFJlc291cmNlLT51cmwoKSkp
OwogICAgIGVuc3VyZVNldHRpbmdzTG9hZGVkKCk7Ci0gICAgaWYgKCFpc01haW5SZXNvdXJjZSAm
JiAhbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkKKyAgICBpZiAoIWlzTWFpblJlc291cmNlICYm
ICFtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nRW5h
YmxlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4g
cmVzb3VyY2UgPSBJbnNwZWN0b3JSZXNvdXJjZTo6Y3JlYXRlQ2FjaGVkKG1faW5zcGVjdGVkUGFn
ZS0+cHJvZ3Jlc3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpLCBsb2FkZXIsIGNhY2hlZFJl
c291cmNlKTsKQEAgLTk0OSw3ICs5MDMsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omlk
ZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCiAKICAg
ICBib29sIGlzTWFpblJlc291cmNlID0gaXNNYWluUmVzb3VyY2VMb2FkZXIobG9hZGVyLCByZXF1
ZXN0LnVybCgpKTsKICAgICBlbnN1cmVTZXR0aW5nc0xvYWRlZCgpOwotICAgIGlmICghaXNNYWlu
UmVzb3VyY2UgJiYgIW1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpCisgICAgaWYgKCFpc01haW5S
ZXNvdXJjZSAmJiAhbV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8SW5zcGVjdG9y
UmVzb3VyY2U+IHJlc291cmNlID0gSW5zcGVjdG9yUmVzb3VyY2U6OmNyZWF0ZShpZGVudGlmaWVy
LCBsb2FkZXIsIHJlcXVlc3QudXJsKCkpOwpAQCAtMTEzNiwxMCArMTA5MCwxMCBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNp
Z25lZCBsb25nIGlkZW50aQogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAobV9tb25pdG9yaW5nWEhSKQorICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKElu
c3BlY3RvclN0YXRlOjptb25pdG9yaW5nWEhSKSkKICAgICAgICAgYWRkTWVzc2FnZVRvQ29uc29s
ZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsICJYSFIg
ZmluaXNoZWQgbG9hZGluZzogXCIiICsgdXJsICsgIlwiLiIsIHNlbmRMaW5lTnVtYmVyLCBzZW5k
VVJMKTsKIAotICAgIGlmICghbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkKKyAgICBpZiAoIW1f
c3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVk
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW5zcGVjdG9yUmVzb3VyY2UqIHJlc291cmNlID0g
bV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOwpAQCAtMTE1NCw3ICsxMTA4LDcgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVl
c3QodW5zaWduZWQgbG9uZyBpZGVudGkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3Jp
cHRJbXBvcnRlZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNl
U3RyaW5nKQogewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3Jlc291cmNlVHJhY2tpbmdFbmFi
bGVkKQorICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3Rv
clN0YXRlOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEluc3BlY3RvclJlc291cmNlKiByZXNvdXJjZSA9IG1fcmVzb3VyY2VzLmdldChpZGVudGlmaWVy
KS5nZXQoKTsKQEAgLTExNzMsOCArMTEyNyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoYm9vbCBlbmFibGUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwotICAgIG1fcmVzb3VyY2VUcmFja2luZ0Vu
YWJsZWQgPSBlbmFibGU7Ci0gICAgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKTsKKyAgICBt
X3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZCwgZW5hYmxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRSZXNvdXJjZVRy
YWNraW5nRW5hYmxlZChib29sIGVuYWJsZSwgYm9vbCBhbHdheXMsIGJvb2wqIG5ld1N0YXRlKQpA
QCAtMTE4MiwxOCArMTEzNSwxNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFJlc291
cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlLCBib29sIGFsd2F5cywgYgogICAgICpuZXdT
dGF0ZSA9IGVuYWJsZTsKIAogICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNldFNldHRpbmcocmVz
b3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSwgZW5hYmxlID8gInRydWUiIDog
ImZhbHNlIik7CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJl
c291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkLCBlbmFibGUpOwogCi0gICAgaWYgKG1fcmVzb3Vy
Y2VUcmFja2luZ0VuYWJsZWQgPT0gZW5hYmxlKQorICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFu
KEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkgPT0gZW5hYmxlKQogICAg
ICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKLSAgICBtX3Jlc291
cmNlVHJhY2tpbmdFbmFibGVkID0gZW5hYmxlOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5z
cGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkLCBlbmFibGUpOwogCiAgICAgaWYg
KGVuYWJsZSkKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+bmF2aWdhdGlv
blNjaGVkdWxlcigpLT5zY2hlZHVsZVJlZnJlc2godHJ1ZSk7Ci0KLSAgICB1cGRhdGVJbnNwZWN0
b3JTdGF0ZUNvb2tpZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuc3VyZVNl
dHRpbmdzTG9hZGVkKCkKQEAgLTEyMDIsMTUgKzExNTMsMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjplbnN1cmVTZXR0aW5nc0xvYWRlZCgpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Nl
dHRpbmdzTG9hZGVkID0gdHJ1ZTsKIAotICAgIFN0cmluZyByZXNvdXJjZVRyYWNraW5nQWx3YXlz
RW5hYmxlZCA9IHNldHRpbmcocmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWRTZXR0aW5nTmFt
ZSk7Ci0gICAgaWYgKHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkID09ICJ0cnVlIikKLSAg
ICAgICAgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCA9IHRydWU7Ci0KLSAgICBTdHJpbmcgbW9u
aXRvcmluZ1hIUkFsd2F5c0VuYWJsZWQgPSBzZXR0aW5nKG1vbml0b3JpbmdYSFJTZXR0aW5nTmFt
ZSk7Ci0gICAgaWYgKG1vbml0b3JpbmdYSFJBbHdheXNFbmFibGVkID09ICJ0cnVlIikKLSAgICAg
ICAgbV9tb25pdG9yaW5nWEhSID0gdHJ1ZTsKKyAgICBtX3N0YXRlLT5sb2FkRnJvbVNldHRpbmdz
KCk7CiAKLSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIGlmIChtX3N0YXRl
LT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5hYmxl
ZCkpCisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNl
VHJhY2tpbmdFbmFibGVkLCB0cnVlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
dGFydFRpbWVsaW5lUHJvZmlsZXIoKQpAQCAtMTIyNSw3ICsxMTcxLDcgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIoKQogICAgIGlmIChtX2Zyb250ZW5k
KQogICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVByb2ZpbGVyV2FzU3RhcnRlZCgpOwogCi0g
ICAgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFu
KEluc3BlY3RvclN0YXRlOjp0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCwgdHJ1ZSk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWVsaW5lUHJvZmlsZXIoKQpAQCAtMTI0MCw3
ICsxMTg2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGltZWxpbmVQcm9maWxl
cigpCiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAgIG1fZnJvbnRlbmQtPnRpbWVsaW5lUHJv
ZmlsZXJXYXNTdG9wcGVkKCk7CiAKLSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOwor
ICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJF
bmFibGVkLCBmYWxzZSk7CiB9CiAKICNpZiBFTkFCTEUoV09SS0VSUykKQEAgLTE2MTIsMTQgKzE1
NTgsMTQgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlckVuYWJsZWQoKSBjb25z
dAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVQcm9maWxlcihib29sIGFsd2F5cywg
Ym9vbCBza2lwUmVjb21waWxlKQogewogICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNldFNldHRp
bmcocHJvZmlsZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsICJ0cnVlIik7CisgICAgICAgIG1f
c3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnByb2ZpbGVyQWx3YXlzRW5hYmxlZCwg
dHJ1ZSk7CiAgICAgbV9wcm9maWxlckFnZW50LT5lbmFibGUoc2tpcFJlY29tcGlsZSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzKQog
ewogICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNldFNldHRpbmcocHJvZmlsZXJBbHdheXNFbmFi
bGVkU2V0dGluZ05hbWUsICJmYWxzZSIpOworICAgICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKElu
c3BlY3RvclN0YXRlOjpwcm9maWxlckFsd2F5c0VuYWJsZWQsIGZhbHNlKTsKICAgICBtX3Byb2Zp
bGVyQWdlbnQtPmRpc2FibGUoKTsKIH0KICNlbmRpZgpAQCAtMTYyOSw3ICsxNTc1LDcgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVEZWJ1Z2dlckZyb21Gcm9udGVuZChib29sIGFs
d2F5cykKIHsKICAgICBBU1NFUlQoIWRlYnVnZ2VyRW5hYmxlZCgpKTsKICAgICBpZiAoYWx3YXlz
KQotICAgICAgICBzZXRTZXR0aW5nKGRlYnVnZ2VyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lLCAi
dHJ1ZSIpOworICAgICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpkZWJ1
Z2dlckFsd2F5c0VuYWJsZWQsIHRydWUpOwogCiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7
CiAKQEAgLTE2NjAsNyArMTYwNiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJs
ZURlYnVnZ2VyKGJvb2wgYWx3YXlzKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYWx3YXlz
KQotICAgICAgICBzZXRTZXR0aW5nKGRlYnVnZ2VyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lLCAi
ZmFsc2UiKTsKKyAgICAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6ZGVi
dWdnZXJBbHdheXNFbmFibGVkLCBmYWxzZSk7CiAKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdl
KTsKIApAQCAtMTc3OCwxMiArMTcyNCwxNCBAQCBTdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6
YnJlYWtwb2ludHNTZXR0aW5nS2V5KCkKIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5z
cGVjdG9yQ29udHJvbGxlcjo6bG9hZEJyZWFrcG9pbnRzKCkKIHsKLSAgICByZXR1cm4gSW5zcGVj
dG9yVmFsdWU6OnBhcnNlSlNPTihzZXR0aW5nKGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpKSk7Cisg
ICAgU3RyaW5nIGpzb25TdHJpbmc7CisgICAgbV9jbGllbnQtPnBvcHVsYXRlU2V0dGluZyhicmVh
a3BvaW50c1NldHRpbmdLZXkoKSwgJmpzb25TdHJpbmcpOworICAgIHJldHVybiBJbnNwZWN0b3JW
YWx1ZTo6cGFyc2VKU09OKGpzb25TdHJpbmcpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnNhdmVCcmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2lu
dHMpCiB7Ci0gICAgc2V0U2V0dGluZyhicmVha3BvaW50c1NldHRpbmdLZXkoKSwgYnJlYWtwb2lu
dHMtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGJyZWFrcG9p
bnRzU2V0dGluZ0tleSgpLCBicmVha3BvaW50cy0+dG9KU09OU3RyaW5nKCkpOwogfQogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBiMjA4N2JhLi5h
ZmY2ZDRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC02OSw2
ICs2OSw3IEBAIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9y
T2JqZWN0OwogY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvclJl
c291cmNlOworY2xhc3MgSW5zcGVjdG9yU3RhdGU7CiBjbGFzcyBJbnNwZWN0b3JTdG9yYWdlQWdl
bnQ7CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yVmFsdWU7
CkBAIC0xMDIsNiArMTAzLDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJl
ZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiA+IERhdGFiYXNlUmVzb3VyY2VzTWFwOwog
ICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2U+ID4gRE9NU3RvcmFnZVJlc291cmNlc01hcDsKIAorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBMYXN0QWN0aXZlUGFuZWw7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENvbnNv
bGVQYW5lbDsKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgRWxlbWVudHNQYW5lbDsKICAg
ICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgUHJvZmlsZXNQYW5lbDsKQEAgLTEyMiwxMyArMTI0
LDExIEBAIHB1YmxpYzoKICAgICBQYWdlKiBpbnNwZWN0ZWRQYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9pbnNwZWN0ZWRQYWdlOyB9CiAgICAgdm9pZCByZWxvYWRQYWdlKCk7CiAKLSAgICBTdHJpbmcg
c2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZXR0aW5nKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIHNhdmVBcHBs
aWNhdGlvblNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpOwogICAgIHZvaWQgc2F2ZVNl
c3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGdldFNldHRpbmdzKFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+Kik7CiAKLSAgICB2b2lkIHJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZy
b21Db29raWUoY29uc3QgU3RyaW5nJiBpbnNwZWN0b3JTdGF0ZSk7CisgICAgdm9pZCByZXN0b3Jl
SW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yQ29va2llKTsK
IAogICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CiAgICAgdm9pZCBoaWdobGlnaHQoTm9kZSopOwpA
QCAtMTUyLDcgKzE1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2Vz
KCk7CiAgICAgY29uc3QgVmVjdG9yPE93blB0cjxDb25zb2xlTWVzc2FnZT4gPiYgY29uc29sZU1l
c3NhZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zb2xlTWVzc2FnZXM7IH0KIAotICAgIGJvb2wg
c2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VhcmNoaW5nRm9yTm9k
ZTsgfQorICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0OwogICAgIHZvaWQg
bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1v
ZGlmaWVyRmxhZ3MpOwogICAgIHZvaWQgaGFuZGxlTW91c2VQcmVzcygpOwogCkBAIC0xNzcsNyAr
MTc3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZChi
b29sIGVuYWJsZWQpOwogICAgIHZvaWQgc2V0UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoYm9vbCBl
bmFibGVkLCBib29sIGFsd2F5cywgYm9vbCogbmV3U3RhdGUpOwotICAgIGJvb2wgcmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVk
OyB9CisgICAgYm9vbCByZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpIGNvbnN0OwogCiAgICAgdm9p
ZCBlbnN1cmVTZXR0aW5nc0xvYWRlZCgpOwogCkBAIC0yNzAsMTAgKzI3MCwxNCBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpOwogICAgIHZvaWQg
c2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYgc291cmNlKTsKIAotICAgIHN0
YXRpYyBjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKTsK
KyAgICBib29sIGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCk7CisgICAgdm9pZCBzZXRJbnNwZWN0
b3JTdGFydHNBdHRhY2hlZChib29sKTsKKyAgICB2b2lkIHNldEluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0KGxvbmcgaGVpZ2h0KTsKKyAgICBpbnQgaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKSBjb25z
dDsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQ7CiAK
IHByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOwogICAgIHZv
aWQgZ2V0SW5zcGVjdG9yU3RhdGUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHN0YXRlKTsKIAog
ICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwpAQCAtMzQ1LDYgKzM0OSw3IEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gbV9zdG9yYWdlQWdlbnQ7
CiAgICAgT3duUHRyPEluc3BlY3RvckNTU1N0b3JlPiBtX2Nzc1N0b3JlOwogICAgIE93blB0cjxJ
bnNwZWN0b3JUaW1lbGluZUFnZW50PiBtX3RpbWVsaW5lQWdlbnQ7CisgICAgT3duUHRyPEluc3Bl
Y3RvclN0YXRlPiBtX3N0YXRlOwogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykKICAgICBPd25QdHI8SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50PiBtX2FwcGxpY2F0
aW9uQ2FjaGVBZ2VudDsKQEAgLTM3MSwxMCArMzc2LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IG1fc2Vzc2lvblNldHRpbmdzOwogI2VuZGlmCiAgICAgdW5zaWduZWQg
bV9ncm91cExldmVsOwotICAgIGJvb2wgbV9zZWFyY2hpbmdGb3JOb2RlOwotICAgIGJvb2wgbV9t
b25pdG9yaW5nWEhSOwogICAgIENvbnNvbGVNZXNzYWdlKiBtX3ByZXZpb3VzTWVzc2FnZTsKLSAg
ICBib29sIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3NldHRpbmdzTG9h
ZGVkOwogICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kPiBtX2luc3BlY3RvckJhY2tlbmQ7CiAg
ICAgT3duUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsLmNwcAppbmRleCA3NzYxNmRhLi40ODEyYjJhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcApAQCAtNDcsNyArNDcs
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBp
bnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUgPSAiaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiOwog
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodCA9IDMwMDsKIHN0YXRp
YyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTAuMGY7CiBzdGF0aWMgY29u
c3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1ZjsKQEAgLTEwOCw3ICsx
MDcsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nZUF0dGFjaGVk
V2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKICAgICB1bnNpZ25lZCB0b3RhbEhlaWdo
dCA9IG1fZnJvbnRlbmRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCkg
KyBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCktPnZp
ZXcoKS0+dmlzaWJsZUhlaWdodCgpOwogICAgIHVuc2lnbmVkIGF0dGFjaGVkSGVpZ2h0ID0gY29u
c3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQsIHRvdGFsSGVpZ2h0KTsKLSAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPnNldFNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHRO
YW1lLCBTdHJpbmc6Om51bWJlcihhdHRhY2hlZEhlaWdodCkpOworICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoYXR0YWNoZWRIZWlnaHQpOwogICAg
IHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGF0dGFjaGVkSGVpZ2h0KTsKIH0KIApAQCAtMTM0LDEw
ICsxMzMsOSBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnNldEF0dGFjaGVk
V2luZG93KGJvb2wgYXR0YWNoZWQpCiB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6
OnJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCgpCiB7CiAgICAgdW5zaWduZWQgaW5zcGVjdGVk
UGFnZUhlaWdodCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWlu
RnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0gICAgU3RyaW5nIGF0dGFjaGVkSGVp
Z2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0TmFtZSk7CisgICAgaW50IGF0dGFjaGVkSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5pbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpOwogICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0g
ICAgaW50IGhlaWdodCA9IGF0dGFjaGVkSGVpZ2h0LnRvSW50KCZzdWNjZXNzKTsKLSAgICB1bnNp
Z25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhl
aWdodCkgOiBkZWZhdWx0QXR0YWNoZWRIZWlnaHQ7CisgICAgdW5zaWduZWQgcHJlZmVycmVkSGVp
Z2h0ID0gc3VjY2VzcyA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihhdHRhY2hlZEhlaWdodCkgOiBk
ZWZhdWx0QXR0YWNoZWRIZWlnaHQ7CiAgICAgCiAgICAgLy8gVGhpcyBjYWxsIG1pZ2h0IG5vdCBn
byB0aHJvdWdoIChpZiB0aGUgd2luZG93IHN0YXJ0cyBvdXQgZGV0YWNoZWQpLCBidXQgaWYgdGhl
IHdpbmRvdyBpcyBpbml0aWFsbHkgY3JlYXRlZCBhdHRhY2hlZCwKICAgICAvLyBJbnNwZWN0b3JD
b250cm9sbGVyOjphdHRhY2hXaW5kb3cgaXMgbmV2ZXIgY2FsbGVkLCBzbyB3ZSBuZWVkIHRvIG1h
a2Ugc3VyZSB0byBzZXQgdGhlIGF0dGFjaGVkV2luZG93SGVpZ2h0LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OGU2
YzEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5j
cHAKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
c3BlY3RvclN0YXRlLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0luc3BlY3RvclN0YXRlOjpJbnNwZWN0b3JTdGF0ZShJbnNwZWN0
b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICByZWdpc3Rl
ckJvb2xlYW4obW9uaXRvcmluZ1hIUiwgZmFsc2UsICJtb25pdG9yaW5nWEhSIiwgInhock1vbml0
b3IiKTsKKyAgICByZWdpc3RlckJvb2xlYW4ocmVzb3VyY2VUcmFja2luZ0VuYWJsZWQsIGZhbHNl
LCAicmVzb3VyY2VUcmFja2luZ0VuYWJsZWQiLCAoY29uc3QgY2hhciopMCk7CisgICAgcmVnaXN0
ZXJCb29sZWFuKHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkLCBmYWxzZSwgKGNvbnN0IGNo
YXIqKTAsICJyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCIpOworICAgIHJlZ2lzdGVyQm9vbGVhbih0
aW1lbGluZVByb2ZpbGVyRW5hYmxlZCwgZmFsc2UsICJ0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCIs
IChjb25zdCBjaGFyKikwKTsKKyAgICByZWdpc3RlckJvb2xlYW4oc2VhcmNoaW5nRm9yTm9kZSwg
ZmFsc2UsICJzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZCIsIChjb25zdCBjaGFyKikwKTsKKyAgICBy
ZWdpc3RlckJvb2xlYW4ocHJvZmlsZXJBbHdheXNFbmFibGVkLCBmYWxzZSwgKGNvbnN0IGNoYXIq
KTAsICJwcm9maWxlckVuYWJsZWQiKTsKKyAgICByZWdpc3RlclN0cmluZyhmcm9udGVuZFNldHRp
bmdzLCAiIiwgKGNvbnN0IGNoYXIqKTAsICJmcm9udGVuZFNldHRpbmdzIik7CisgICAgcmVnaXN0
ZXJCb29sZWFuKGRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwgZmFsc2UsIChjb25zdCBjaGFyKikwLCAi
ZGVidWdnZXJFbmFibGVkIik7CisgICAgcmVnaXN0ZXJTdHJpbmcobGFzdEFjdGl2ZVBhbmVsLCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpMYXN0QWN0aXZlUGFuZWwsIChjb25zdCBjaGFyKikwLCAibGFz
dEFjdGl2ZVBhbmVsIik7CisgICAgcmVnaXN0ZXJCb29sZWFuKGluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkLCB0cnVlLCAoY29uc3QgY2hhciopMCwgIkluc3BlY3RvclN0YXJ0c0F0dGFjaGVkIik7Cisg
ICAgcmVnaXN0ZXJMb25nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0LCBJbnNwZWN0b3JDb250cm9s
bGVyOjpkZWZhdWx0QXR0YWNoZWRIZWlnaHQsIChjb25zdCBjaGFyKikwLCAiaW5zcGVjdG9yQXR0
YWNoZWRIZWlnaHQiKTsKKyAgICByZWdpc3RlckxvbmcocGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSwg
MCwgInBhdXNlT25FeGNlcHRpb25zU3RhdGUiLCAoY29uc3QgY2hhciopMCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yU3RhdGU6OnJlc3RvcmVGcm9tSW5zcGVjdG9yQ29va2llKGNvbnN0IFN0cmluZyYg
anNvbikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGpzb25WYWx1ZSA9IEluc3BlY3Rv
clZhbHVlOjpwYXJzZUpTT04oanNvbik7CisgICAgaWYgKCFqc29uVmFsdWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25PYmplY3QgPSBqc29uVmFs
dWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFqc29uT2JqZWN0KQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaSA9IGpzb25PYmplY3QtPmJlZ2lu
KCk7IGkgIT0ganNvbk9iamVjdC0+ZW5kKCk7ICsraSkgeworICAgICAgICBJbnNwZWN0b3JQcm9w
ZXJ0eUlkIGlkID0gKEluc3BlY3RvclByb3BlcnR5SWQpaS0+Zmlyc3QudG9JbnQoKTsKKyAgICAg
ICAgQVNTRVJUKGlkID4gMCAmJiBpZCA8IGxhc3RQcm9wZXJ0eUlkKTsKKyAgICAgICAgUHJvcGVy
dHlNYXA6Oml0ZXJhdG9yIGogPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7CisgICAgICAgIEFTU0VS
VChqICE9IG1fcHJvcGVydGllcy5lbmQoKSk7CisgICAgICAgIEFTU0VSVChqLT5zZWNvbmQubV92
YWx1ZS0+dHlwZSgpID09IGktPnNlY29uZC0+dHlwZSgpKTsKKyAgICAgICAgai0+c2Vjb25kLm1f
dmFsdWUgPSBpLT5zZWNvbmQ7CisgICAgfQorfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gSW5zcGVjdG9yU3RhdGU6OmdlbmVyYXRlU3RhdGVPYmplY3RGb3JGcm9udGVuZCgpCit7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3RhdGVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGZvciAoUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRp
ZXMuYmVnaW4oKTsgaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCk7ICsraSkgeworICAgICAgICBpZiAo
aS0+c2Vjb25kLm1fc3RhdGVOYW1lLmxlbmd0aCgpKQorICAgICAgICAgICAgc3RhdGVPYmplY3Qt
PnNldFZhbHVlKGktPnNlY29uZC5tX3N0YXRlTmFtZSwgaS0+c2Vjb25kLm1fdmFsdWUpOworICAg
IH0KKyAgICByZXR1cm4gc3RhdGVPYmplY3QucmVsZWFzZSgpOworfQorCit2b2lkIEluc3BlY3Rv
clN0YXRlOjpsb2FkRnJvbVNldHRpbmdzKCkKK3sKKyAgICBmb3IgKFByb3BlcnR5TWFwOjppdGVy
YXRvciBpID0gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKGktPnNlY29uZC5tX3ByZWZlcmVuY2VOYW1lLmxlbmd0aCgpKSB7
CisgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgICAgICBtX2NsaWVudC0+cG9wdWxh
dGVTZXR0aW5nKGktPnNlY29uZC5tX3ByZWZlcmVuY2VOYW1lLCAmdmFsdWUpOworICAgICAgICAg
ICAgc3dpdGNoIChpLT5zZWNvbmQubV92YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IEluc3BlY3RvclZhbHVlOjpUeXBlQm9vbGVhbjoKKyAgICAgICAgICAgICAgICBpLT5zZWNvbmQu
bV92YWx1ZSA9IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSA9PSAidHJ1ZSIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JWYWx1ZTo6
VHlwZVN0cmluZzoKKyAgICAgICAgICAgICAgICBpLT5zZWNvbmQubV92YWx1ZSA9IEluc3BlY3Rv
clN0cmluZzo6Y3JlYXRlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgSW5zcGVjdG9yVmFsdWU6OlR5cGVOdW1iZXI6CisgICAgICAgICAgICAgICAgaS0+
c2Vjb25kLm1fdmFsdWUgPSBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoKGRvdWJsZSl2YWx1
ZS50b0ludCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JTdGF0
ZTo6dXBkYXRlQ29va2llKCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjb29raWVP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGZvciAoUHJvcGVydHlNYXA6
Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuYmVnaW4oKTsgaSAhPSBtX3Byb3BlcnRpZXMuZW5k
KCk7ICsraSkKKyAgICAgICAgY29va2llT2JqZWN0LT5zZXRWYWx1ZShTdHJpbmc6Om51bWJlcihp
LT5maXJzdCksIGktPnNlY29uZC5tX3ZhbHVlKTsKKyAgICBtX2NsaWVudC0+dXBkYXRlSW5zcGVj
dG9yU3RhdGVDb29raWUoY29va2llT2JqZWN0LT50b0pTT05TdHJpbmcoKSk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yU3RhdGU6OnNldFZhbHVlKEluc3BlY3RvclByb3BlcnR5SWQgaWQsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVlKQorewor
ICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOworICAg
IEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5lbmQoKSk7CisgICAgaS0+c2Vjb25kLm1fdmFsdWUg
PSB2YWx1ZTsKKyAgICBpZiAoaS0+c2Vjb25kLm1fcHJlZmVyZW5jZU5hbWUubGVuZ3RoKCkpCisg
ICAgICAgIG1fY2xpZW50LT5zdG9yZVNldHRpbmcoaS0+c2Vjb25kLm1fcHJlZmVyZW5jZU5hbWUs
IHN0cmluZ1ZhbHVlKTsKKyAgICB1cGRhdGVDb29raWUoKTsKK30KKworYm9vbCBJbnNwZWN0b3JT
dGF0ZTo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlkIGlkKQoreworICAgIFByb3BlcnR5
TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpICE9
IG1fcHJvcGVydGllcy5lbmQoKSk7CisgICAgYm9vbCB2YWx1ZSA9IGZhbHNlOworICAgIGktPnNl
Y29uZC5tX3ZhbHVlLT5hc0Jvb2xlYW4oJnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisK
K1N0cmluZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQgaWQp
Cit7CisgICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7
CisgICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKKyAgICBTdHJpbmcgdmFsdWU7
CisgICAgaS0+c2Vjb25kLm1fdmFsdWUtPmFzU3RyaW5nKCZ2YWx1ZSk7CisgICAgcmV0dXJuIHZh
bHVlOworfQorCitsb25nIEluc3BlY3RvclN0YXRlOjpnZXRMb25nKEluc3BlY3RvclByb3BlcnR5
SWQgaWQpCit7CisgICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuZmlu
ZChpZCk7CisgICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpKTsKKyAgICBsb25nIHZh
bHVlID0gMDsKKyAgICBpLT5zZWNvbmQubV92YWx1ZS0+YXNOdW1iZXIoJnZhbHVlKTsKKyAgICBy
ZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyQm9vbGVhbihJ
bnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGJvb2wgdmFsdWUsIGNvbnN0IFN0cmluZyYg
c3RhdGVOYW1lLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKQoreworICAgIG1fcHJvcGVy
dGllcy5zZXQocHJvcGVydHlJZCwgUHJvcGVydHk6OmNyZWF0ZShJbnNwZWN0b3JCYXNpY1ZhbHVl
OjpjcmVhdGUodmFsdWUpLCBzdGF0ZU5hbWUsIHByZWZlcmVuY2VOYW1lKSk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyU3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVy
dHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBzdGF0ZU5hbWUsIGNvbnN0
IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLnNldChwcm9wZXJ0
eUlkLCBQcm9wZXJ0eTo6Y3JlYXRlKEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKSwgc3Rh
dGVOYW1lLCBwcmVmZXJlbmNlTmFtZSkpOworfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjpyZWdp
c3RlckxvbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBsb25nIHZhbHVlLCBjb25z
dCBTdHJpbmcmIHN0YXRlTmFtZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSkKK3sKKyAg
ICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQsIFByb3BlcnR5OjpjcmVhdGUoSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpLCBzdGF0ZU5hbWUsIHByZWZlcmVuY2VO
YW1lKSk7Cit9CisKK0luc3BlY3RvclN0YXRlOjpQcm9wZXJ0eSBJbnNwZWN0b3JTdGF0ZTo6UHJv
cGVydHk6OmNyZWF0ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiBzdGF0ZU5hbWUsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpCit7CisgICAgUHJv
cGVydHkgcHJvcGVydHk7CisgICAgcHJvcGVydHkubV92YWx1ZSA9IHZhbHVlOworICAgIHByb3Bl
cnR5Lm1fc3RhdGVOYW1lID0gc3RhdGVOYW1lOworICAgIHByb3BlcnR5Lm1fcHJlZmVyZW5jZU5h
bWUgPSBwcmVmZXJlbmNlTmFtZTsKKyAgICByZXR1cm4gcHJvcGVydHk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzY5
ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUu
aApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yU3RhdGVfaAorI2RlZmluZSBJ
bnNwZWN0b3JTdGF0ZV9oCisKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEluc3Bl
Y3RvckNsaWVudDsKKworY2xhc3MgSW5zcGVjdG9yU3RhdGUgeworcHVibGljOgorICAgIGVudW0g
SW5zcGVjdG9yUHJvcGVydHlJZCB7CisgICAgICAgIG1vbml0b3JpbmdYSFIgPSAxLAorICAgICAg
ICByZXNvdXJjZVRyYWNraW5nRW5hYmxlZCwKKyAgICAgICAgcmVzb3VyY2VUcmFja2luZ0Fsd2F5
c0VuYWJsZWQsCisgICAgICAgIHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkLAorICAgICAgICBzZWFy
Y2hpbmdGb3JOb2RlLAorICAgICAgICBwcm9maWxlckFsd2F5c0VuYWJsZWQsCisgICAgICAgIGZy
b250ZW5kU2V0dGluZ3MsCisgICAgICAgIGRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwKKyAgICAgICAg
bGFzdEFjdGl2ZVBhbmVsLAorICAgICAgICBpbnNwZWN0b3JTdGFydHNBdHRhY2hlZCwKKyAgICAg
ICAgaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQsCisgICAgICAgIHBhdXNlT25FeGNlcHRpb25zU3Rh
dGUsCisgICAgICAgIGxhc3RQcm9wZXJ0eUlkCisgICAgfTsKKworICAgIEluc3BlY3RvclN0YXRl
KEluc3BlY3RvckNsaWVudCogY2xpZW50KTsKKworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBnZW5lcmF0ZVN0YXRlT2JqZWN0Rm9yRnJvbnRlbmQoKTsKKyAgICB2b2lkIHJlc3RvcmVG
cm9tSW5zcGVjdG9yQ29va2llKGNvbnN0IFN0cmluZyYganNvblN0cmluZyk7CisgICAgdm9pZCBs
b2FkRnJvbVNldHRpbmdzKCk7CisKKyAgICBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9yUHJvcGVy
dHlJZCBwcm9wZXJ0eUlkKTsKKyAgICBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3RvclByb3BlcnR5
SWQgcHJvcGVydHlJZCk7CisgICAgbG9uZyBnZXRMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJv
cGVydHlJZCk7CisKKyAgICB2b2lkIHNldEJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9w
ZXJ0eUlkLCBib29sIHZhbHVlKSB7IHNldFZhbHVlKHByb3BlcnR5SWQsIEluc3BlY3RvckJhc2lj
VmFsdWU6OmNyZWF0ZSh2YWx1ZSksIHZhbHVlID8gInRydWUiIDogImZhbHNlIik7IH0KKyAgICB2
b2lkIHNldFN0cmluZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpIHsgc2V0VmFsdWUocHJvcGVydHlJZCwgSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUo
dmFsdWUpLCB2YWx1ZSk7IH0KKyAgICB2b2lkIHNldExvbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBw
cm9wZXJ0eUlkLCBsb25nIHZhbHVlKSB7IHNldFZhbHVlKHByb3BlcnR5SWQsIEluc3BlY3RvckJh
c2ljVmFsdWU6OmNyZWF0ZSgoZG91YmxlKXZhbHVlKSwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsg
fQorCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlQ29va2llKCk7CisgICAgdm9pZCBzZXRWYWx1
ZShJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVlKTsKKworICAgIHN0cnVjdCBQcm9w
ZXJ0eSB7CisgICAgICAgIHN0YXRpYyBQcm9wZXJ0eSBjcmVhdGUoUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYgc3RhdGVOYW1lLCBjb25zdCBTdHJpbmcmIHBy
ZWZlcmVuY2VOYW1lKTsKKyAgICAgICAgU3RyaW5nIG1fc3RhdGVOYW1lOworICAgICAgICBTdHJp
bmcgbV9wcmVmZXJlbmNlTmFtZTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtX3Zh
bHVlOworICAgIH07CisgICAgdHlwZWRlZiBIYXNoTWFwPGxvbmcsIFByb3BlcnR5PiBQcm9wZXJ0
eU1hcDsKKyAgICBQcm9wZXJ0eU1hcCBtX3Byb3BlcnRpZXM7CisKKyAgICB2b2lkIHJlZ2lzdGVy
Qm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGJvb2wgdmFsdWUsIGNvbnN0
IFN0cmluZyYgc3RhdGVOYW1lLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKTsKKyAgICB2
b2lkIHJlZ2lzdGVyU3RyaW5nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBzdGF0ZU5hbWUsIGNvbnN0IFN0cmluZyYgcHJl
ZmVyZW5jZU5hbWUpOworICAgIHZvaWQgcmVnaXN0ZXJMb25nKEluc3BlY3RvclByb3BlcnR5SWQg
cHJvcGVydHlJZCwgbG9uZyB2YWx1ZSwgY29uc3QgU3RyaW5nJiBzdGF0ZU5hbWUsIGNvbnN0IFN0
cmluZyYgcHJlZmVyZW5jZU5hbWUpOworCisgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3Bl
Y3RvclN0YXRlX2gpCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCmluZGV4IDVkOGQ3NjIuLjk4NjVhMWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTAtMTAtMTQgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGluc3BlY3RvciBzZXR0aW5ncy9wcm9wZXJ0aWVzL3N0YXRlcyBtYW5hZ2VtZW50CisgICAg
ICAgIHNob3VsZCBiZSBleHRyYWN0ZWQgaW50byBzZXBhcmF0ZSBjbGFzcy4KKworICAgICAgICBX
ZSBoYXZlIGEgbG90IG9mIGZsYWdzL3ZhbHVlcyBpbiBJbnNwZWN0b3JDb250cm9sbGVyLgorICAg
ICAgICBTb21lIGZsYWdzIGFyZSBwZXJzaXN0aW5nIGludG8gcHJvZmlsZS4KKyAgICAgICAgT3Ro
ZXJzIGFyZSBwYXJ0IG9mIGluc3BlY3RvciBzdGF0ZSBmb3IgZnJvbnRlbmQuCisgICAgICAgIEFs
bCB0aGVzZSBmbGFncyBzaG91bGQga2VlcCB0aGVpciB2YWx1ZXMgYWZ0ZXIgbmF2aWdhdGlvbi4K
KyAgICAgICAgSXQnZCBiZSBiZXR0ZXIgdG8gZXh0cmFjdCB0aGVzZSBmbGFncy92YWx1ZXMgaW50
byBzZXBhcmF0ZQorICAgICAgICBjbGFzcyB3aGljaCB3aWxsIGNhcmUgYWJvdXQgdGhlaXJzIGxp
ZmV0aW1lLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NzI3NQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1t
OgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHNob3dXaW5kb3c6XSk6
CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgYXR0YWNoXSk6CisgICAg
ICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgZGV0YWNoXSk6CisKIDIwMTAtMTAt
MTMgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0gYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5tbQppbmRleCBkNGQwMjEzLi5kMGM2Yzc4IDEwMDY0NAotLS0g
YS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQorKysgYi9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQpAQCAtMzU4LDgg
KzM1OCw4IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRvd1Rp
dGxlKCkgY29uc3QKICAgICBfdmlzaWJsZSA9IFlFUzsKICAgICAKICAgICAvLyBJZiBubyBwcmVm
ZXJlbmNlIGlzIHNldCAtIGRlZmF1bHQgdG8gYW4gYXR0YWNoZWQgd2luZG93LiBUaGlzIGlzIGlt
cG9ydGFudCBmb3IgaW5zcGVjdG9yIExheW91dFRlc3RzLgotICAgIFN0cmluZyBzaG91bGRBdHRh
Y2ggPSBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0
dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdO
YW1lKCkpOwotICAgIF9zaG91bGRBdHRhY2ggPSBzaG91bGRBdHRhY2ggIT0gImZhbHNlIjsKKyAg
ICAvLyBGSVhNRTogVGhpcyBmbGFnIGNhbiBiZSBmZXRjaGVkIGRpcmVjdGx5IGZyb20gdGhlIGZs
YWdzIHN0b3JhZ2UuCisgICAgX3Nob3VsZEF0dGFjaCA9IFtfaW5zcGVjdGVkV2ViVmlldyBwYWdl
XS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5pbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpOwogICAg
IAogICAgIGlmIChfc2hvdWxkQXR0YWNoICYmICFfZnJvbnRlbmRDbGllbnQtPmNhbkF0dGFjaFdp
bmRvdygpKQogICAgICAgICBfc2hvdWxkQXR0YWNoID0gTk87CkBAIC0zOTQsNyArMzk0LDggQEAg
dm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6dXBkYXRlV2luZG93VGl0bGUoKSBjb25z
dAogICAgIGlmIChfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5z
ZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0
dGluZ05hbWUoKSwgInRydWUiKTsKKyAgICAvLyBGSVhNRTogVGhpcyBmbGFnIGNhbiBiZSBzYXZl
ZCBkaXJlY3RseSB0byB0aGUgZmxhZ3Mgc3RvcmFnZS4KKyAgICBbX2luc3BlY3RlZFdlYlZpZXcg
cGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQo
dHJ1ZSk7CiAKICAgICBbc2VsZiBjbG9zZV07CiAgICAgW3NlbGYgc2hvd1dpbmRvdzpuaWxdOwpA
QCAtNDA1LDcgKzQwNiw4IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0
ZVdpbmRvd1RpdGxlKCkgY29uc3QKICAgICBpZiAoIV9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmll
dykKICAgICAgICAgcmV0dXJuOwogCi0gICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVj
dG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAiZmFsc2UiKTsKKyAgICAvLyBGSVhNRTog
VGhpcyBmbGFnIGNhbiBiZSBzYXZlZCB0byB0aGUgZmxhZ3Mgc3RvcmFnZSBkaXJlY3RseS4KKyAg
ICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5z
cGVjdG9yU3RhcnRzQXR0YWNoZWQoZmFsc2UpOwogCiAgICAgW3NlbGYgY2xvc2VdOwogICAgIFtz
ZWxmIHNob3dXaW5kb3c6bmlsXTsKZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYTg0NmI3NS4uZDk3NjBhYiAxMDA2NDQKLS0tIGEv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNCBAQAorMjAxMC0xMC0xNCAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
IEluc3BlY3RvcjogaW5zcGVjdG9yIHNldHRpbmdzL3Byb3BlcnRpZXMvc3RhdGVzIG1hbmFnZW1l
bnQKKyAgICAgICAgc2hvdWxkIGJlIGV4dHJhY3RlZCBpbnRvIHNlcGFyYXRlIGNsYXNzLgorCisg
ICAgICAgIFdlIGhhdmUgYSBsb3Qgb2YgZmxhZ3MvdmFsdWVzIGluIEluc3BlY3RvckNvbnRyb2xs
ZXIuCisgICAgICAgIFNvbWUgZmxhZ3MgYXJlIHBlcnNpc3RpbmcgaW50byBwcm9maWxlLgorICAg
ICAgICBPdGhlcnMgYXJlIHBhcnQgb2YgaW5zcGVjdG9yIHN0YXRlIGZvciBmcm9udGVuZC4KKyAg
ICAgICAgQWxsIHRoZXNlIGZsYWdzIHNob3VsZCBrZWVwIHRoZWlyIHZhbHVlcyBhZnRlciBuYXZp
Z2F0aW9uLgorICAgICAgICBJdCdkIGJlIGJldHRlciB0byBleHRyYWN0IHRoZXNlIGZsYWdzL3Zh
bHVlcyBpbnRvIHNlcGFyYXRlCisgICAgICAgIGNsYXNzIHdoaWNoIHdpbGwgY2FyZSBhYm91dCB0
aGVpcnMgbGlmZXRpbWUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ3Mjc1CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuY3BwOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFjaFdp
bmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGV0YWNoV2luZG93
KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzaG93V2luZG93V2l0aG91
dE5vdGlmaWNhdGlvbnMpOgorCiAyMDEwLTEwLTEzICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJh
Y2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlm
ZiAtLWdpdCBhL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNw
cCBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAppbmRl
eCAxYjc5ZGRlLi4wNjcyNTM3IDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5jcHAKKysrIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC0yNzMsNyArMjczLDggQEAgdm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93KCkKICAgICBpZiAobV9hdHRhY2hlZCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JT
dGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJ0cnVlIik7CisgICAgLy8gRklYTUU6IFRoaXMg
ZmxhZyBjYW4gYmUgc2F2ZWQgdG8gdGhlIGZsYWdzIHN0b3JhZ2UgZGlyZWN0bHkuCisgICAgbV9p
bnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVj
dG9yU3RhcnRzQXR0YWNoZWQodHJ1ZSk7CiAKICAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmlj
YXRpb25zKCk7CiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CkBAIC0yODQs
NyArMjg1LDggQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGV0YWNoV2luZG93
KCkKICAgICBpZiAoIW1fYXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faW5zcGVj
dGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRpbmcoSW5z
cGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAi
ZmFsc2UiKTsKKyAgICAvLyBGSVhNRTogVGhpcyBmbGFnIGNhbiBiZSBzYXZlZCB0byB0aGUgZmxh
Z3Mgc3RvcmFnZSBkaXJlY3RseS4KKyAgICBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChmYWxzZSk7CiAK
ICAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiAgICAgc2hvd1dpbmRvd1dp
dGhvdXROb3RpZmljYXRpb25zKCk7CkBAIC0zNjQsOCArMzY2LDggQEAgdm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCkKICAgICAg
ICAgc2hvdWxkQXR0YWNoID0gdHJ1ZTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSWYgbm8gcHJl
ZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0IHRvIGFuIGF0dGFjaGVkIHdpbmRvdy4gVGhpcyBpcyBp
bXBvcnRhbnQgZm9yIGluc3BlY3RvciBMYXlvdXRUZXN0cy4KLSAgICAgICAgU3RyaW5nIHNob3Vs
ZEF0dGFjaFByZWYgPSBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5zZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkU2V0dGluZ05hbWUoKSk7Ci0gICAgICAgIHNob3VsZEF0dGFjaCA9IHNob3VsZEF0dGFjaFBy
ZWYgIT0gImZhbHNlIjsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZmxhZyBjYW4gYmUgZmV0Y2hl
ZCBkaXJlY3RseSBmcm9tIHRoZSBmbGFncyBzdG9yYWdlLgorICAgICAgICBzaG91bGRBdHRhY2gg
PSBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5pbnNw
ZWN0b3JTdGFydHNBdHRhY2hlZCgpOwogCiAgICAgICAgIGlmIChzaG91bGRBdHRhY2ggJiYgIWNh
bkF0dGFjaFdpbmRvdygpKQogICAgICAgICAgICAgc2hvdWxkQXR0YWNoID0gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70735</attachid>
            <date>2010-10-14 06:40:23 -0700</date>
            <delta_ts>2010-10-14 07:31:30 -0700</delta_ts>
            <desc>[patch] next iteration. rebaselined.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>55933</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDU4ZDQzZDAuLjk2YTYzNGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExNCw2ICsxMTE0LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQu
Y3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDY2ODhkNDMuLjM5ZjdhMTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTAtMTAtMTQgIElseWEgVGlr
aG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGluc3BlY3RvciBzZXR0aW5n
cy9wcm9wZXJ0aWVzL3N0YXRlcyBtYW5hZ2VtZW50CisgICAgICAgIHNob3VsZCBiZSBleHRyYWN0
ZWQgaW50byBzZXBhcmF0ZSBjbGFzcy4KKworICAgICAgICBXZSBoYXZlIGEgbG90IG9mIGZsYWdz
L3ZhbHVlcyBpbiBJbnNwZWN0b3JDb250cm9sbGVyLgorICAgICAgICBTb21lIGZsYWdzIGFyZSBw
ZXJzaXN0aW5nIGludG8gcHJvZmlsZS4KKyAgICAgICAgT3RoZXJzIGFyZSBwYXJ0IG9mIGluc3Bl
Y3RvciBzdGF0ZSBmb3IgZnJvbnRlbmQuCisgICAgICAgIEFsbCB0aGVzZSBmbGFncyBzaG91bGQg
a2VlcCB0aGVpciB2YWx1ZXMgYWZ0ZXIgbmF2aWdhdGlvbi4KKyAgICAgICAgSXQnZCBiZSBiZXR0
ZXIgdG8gZXh0cmFjdCB0aGVzZSBmbGFncy92YWx1ZXMgaW50byBzZXBhcmF0ZQorICAgICAgICBj
bGFzcyB3aGljaCB3aWxsIGNhcmUgYWJvdXQgdGhlaXJzIGxpZmV0aW1lLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI3NQorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2Vi
Q29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUu
cHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckF0
dGFjaGVkSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNl
YXJjaGluZ0Zvck5vZGVJblBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6c2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0SW5zcGVjdG9yU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRTZXR0aW5ncyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9yZUxhc3RBY3RpdmVQ
YW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjptb3VzZURpZE1v
dmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpo
YW5kbGVNb3VzZVByZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OnNldFNlYXJjaGluZ0Zvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVQcm9maWxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRUcmFja2VkUmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJGb3JJ
bml0aWFsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpy
ZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0SW1wb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5zdXJlU2V0dGluZ3NMb2FkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVBy
b2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVBy
b2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVQ
cm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVE
ZWJ1Z2dlckZyb21Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpkaXNhYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6bG9hZEJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNhdmVCcmVha3BvaW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
OjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsOjpyZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbUluc3BlY3RvckNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2VuZXJhdGVTdGF0ZU9iamVjdEZvckZyb250ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpsb2FkRnJvbVNldHRpbmdzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjp1cGRhdGVDb29raWUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0
YXRlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldExv
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyQm9vbGVhbik6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6cmVnaXN0ZXJTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyTG9uZyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6UHJvcGVydHk6OmNyZWF0ZSk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclN0YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3RhdGU6OnNldEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6
OnNldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6c2V0TG9uZyk6
CisKIDIwMTAtMTAtMTQgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgTm90IHJldmlld2VkLiBSZS1sYW5kaW5nIHI2OTc1Ny4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGIxM2E4
OTAuLjk1YWU3MmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTgzNCw2ICsxODM0LDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdGF0ZS5jcHAgXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmggXAogCVdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXAogCVdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
IGIvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBmY2IwZWZkLi40MzA4ZjlhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4K
QEAgLTEyMTYsNyArMTIxNiw2IEBAIF9fWk43V2ViQ29yZTIyR2VvbG9jYXRpb25TZXJ2aWNlTW9j
azhzZXRFcnJvckVOM1dURjEwUGFzc1JlZlB0cklOU18xM1Bvc2l0aW9uRXJyCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIx
MHNldFNldHRpbmdFUktOM1dURjZTdHJpbmdFUzRfCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIxMkNvbnNvbGVQYW5lbEUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjEyU2NyaXB0c1BhbmVsRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTNQcm9m
aWxlc1BhbmVsRQpAQCAtMTIyNywxMiArMTIyNiwxMiBAQCBfX1pON1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXIxNWRpc2FibGVQcm9maWxlckViCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIxOGRpc2Nvbm5lY3RGcm9udGVuZEV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIyMHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9y
Q29udHJvbGxlcjIxc3RhcnRUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjIzaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRFdgogX19aTjdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyMjVldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kRWxSS04zV1RGNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRFTjNXVEYxMFBhc3NPd25QdHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVu
dEVFRQorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzZXRJbnNwZWN0b3JTdGFy
dHNBdHRhY2hlZEViCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNl
ckluaXRpYXRlZFByb2ZpbGluZ0V2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIy
NnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjM0aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2Ci1fX1pON1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXIzNGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05h
bWVFdgogX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjMxaXNSZWNvcmRpbmdVc2Vy
SW5pdGlhdGVkUHJvZmlsZUV2CiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVw
cm9maWxlckVuYWJsZWRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dF
dgpAQCAtMTI1Miw3ICsxMjUxLDYgQEAgX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsQzJFUE5TXzE5SW5zcGVjdG9yQ29udHJvbGxlckVQTlNfNFBhZ2UKIF9fWk43V2Vi
Q29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbEQyRXYKIF9fWk5LN1dlYkNvcmUxOUlu
c3BlY3RvckNvbnRyb2xsZXIxN2RyYXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29udGV4
dEUKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI3ZW5hYmxlZEV2Ci1fX1pOSzdX
ZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyN3NldHRpbmdFUktOM1dURjZTdHJpbmdFCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYjZmYjA3Ni4uN2QzY2IyNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTE5MzUsNiArMTkzNSw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaCcs
CisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCcsCisgICAgICAgICAg
ICAnaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9J
bnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVj
dG9yU3RvcmFnZUFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9X
ZWJDb3JlLnBybwppbmRleCA0ZDU0OTIwLi4zOWM1NDEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTEwMDIsNiArMTAwMiw3IEBA
IFNPVVJDRVMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBc
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlQWdlbnQuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUu
Y3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
VGltZWxpbmVBZ2VudC5jcHAgXApAQCAtMTg3OSw2ICsxODgwLDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmggXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yU3RvcmFnZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggXApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNzIzNzgwOS4uMDc3MTA3MiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02MzI0Nyw2ICs2MzI0NywxNCBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0
b3JcSW5zcGVjdG9yU3RhdGUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclN0YXRlLmgiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGUxMGJlZjAuLjRiZWU5YTkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTMxLDYg
KzExMzEsOCBAQAogCQk0RjRGNUZGQjExQ0JEMkUxMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRl
bmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY0
RjVGRkExMUNCRDJEMjAwQTE4NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmNwcCAqLzsgfTsKIAkJ
NEY3MDdBOTkxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGNzA3QTk3
MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgKi87IH07
CiAJCTRGNzA3QTlBMTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY3MDdB
OTgxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggKi87IH07
CisJCTRGQTNCOTBBMTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkEzQjkwODEyNUNEMTIx
MDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuY3BwICovOyB9OworCQk0RkEzQjkwQjEyNUNEMTIy
MDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRGQTNCOTA5MTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JT
dGF0ZS5oICovOyB9OwogCQk0RkQ4RDBGMjExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkQ4
RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgKi87IH07CiAJCTRGRDhE
MEYzMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkQ4RDBGMTExOUM3MThCMDAyRkE4MjUgLyog
U2NyaXB0R0NFdmVudC5oICovOyB9OwogCQk1MTAxODQ2OTBCMDg2MDJBMDA0QTgyNUYgLyogQ2Fj
aGVkUGFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTEwMTg0NjcwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzE5Nyw2ICs3MTk5LDggQEAKIAkJ
NEY0RjVGRkMxMUNCRDMwMTAwQTE4NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckZyb250ZW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTRGNzA3QTk3MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTRGNzA3QTk4MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0RkEzQjkwODEyNUNE
MTIxMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0RkEzQjkwOTEyNUNEMTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yU3RhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEZEOEQwRjAxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdD
RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0R0NF
dmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGRDhEMEYxMTE5QzcxOEIw
MDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjcmlwdEdDRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTg0
NjcwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FjaGVkUGFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTIxOTQsNiArMTIxOTgsOCBAQAogCQkJCTQxRjA2MUZGMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNw
ZWN0b3JSZXNvdXJjZS5oICovLAogCQkJCTgyQUIxNzcxMTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50LmNwcCAqLywKIAkJCQk4MkFCMTc3MjEyNUM4MjY3MDBDNTA2OUQg
LyogSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oICovLAorCQkJCTRGQTNCOTA4MTI1Q0QxMjEwMDMw
MEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgKi8sCisJCQkJNEZBM0I5MDkxMjVDRDEyMjAwMzAw
QkFEIC8qIEluc3BlY3RvclN0YXRlLmggKi8sCiAJCQkJN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQw
IC8qIEluc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgKi8sCiAJCQkJN0FCMEIxQkYxMjExQTYyMjAw
QTc2OTQwIC8qIEluc3BlY3RvclN0b3JhZ2VBZ2VudC5oICovLAogCQkJCTgyQUIxNzZGMTI1Qzgy
NjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCAqLywKQEAgLTIxMDY5LDYgKzIx
MDc1LDcgQEAKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmlj
b2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8q
IFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTRGQTNCOTBCMTI1Q0QxMjIwMDMwMEJB
RCAvKiBJbnNwZWN0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMzYxNSw2ICsyMzYyMiw3
IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xU
VW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNG
OUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEZBM0I5MEExMjVDRDEy
MjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBhZjBiMzgzLi5iMWY0OTNlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNjksNiArNjks
NyBAQAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIklu
c3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgor
I2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RvcmFnZUFn
ZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvclZhbHVlcy5oIgpAQCAtMTE1LDQxICsxMTYsMTkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZnJv
bnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lID0gImZyb250ZW5kU2V0dGluZ3MiOwotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUgPSAiZGVi
dWdnZXJFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsYXN0QWN0aXZlUGFuZWwg
PSAibGFzdEFjdGl2ZVBhbmVsIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBtb25pdG9yaW5n
WEhSU2V0dGluZ05hbWUgPSAieGhyTW9uaXRvciI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
cmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSA9ICJyZXNvdXJjZVRyYWNr
aW5nRW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgcHJvZmlsZXJBbHdheXNFbmFi
bGVkU2V0dGluZ05hbWUgPSAicHJvZmlsZXJFbmFibGVkIjsKLQotc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IG1vbml0b3JpbmdYSFJTdGF0ZU5hbWUgPSAibW9uaXRvcmluZ1hIUkVuYWJsZWQiOwot
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJlc291cmNlVHJhY2tpbmdFbmFibGVkU3RhdGVOYW1l
ID0gInJlc291cmNlVHJhY2tpbmdFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBz
ZWFyY2hpbmdGb3JOb2RlRW5hYmxlZFN0YXRlTmFtZSA9ICJzZWFyY2hpbmdGb3JOb2RlRW5hYmxl
ZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgdGltZWxpbmVQcm9maWxlckVuYWJsZWRTdGF0
ZU5hbWUgPSAidGltZWxpbmVQcm9maWxlckVuYWJsZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IHBhdXNlT25FeGNlcHRpb25zU3RhdGVTdGF0ZU5hbWUgPSAicGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdo
dE5hbWUgPSAiaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiOwotCiBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiRE9NIjsKIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBldmVudExpc3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiRXZlbnRMaXN0ZW5l
ciI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgeGhyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAi
WEhSIjsKIAorLy8gRklYTUU6IG1vdmUgbGFzdCBwYW5lbCBzZXR0aW5nIHRvIHRoZSBmcm9udC1l
bmQKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6Okxhc3RBY3RpdmVQYW5l
bCA9ICJsYXN0QWN0aXZlUGFuZWwiOwogY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29udHJv
bGxlcjo6RWxlbWVudHNQYW5lbCA9ICJlbGVtZW50cyI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7CiBjb25zdCBjaGFyKiBj
b25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTY3JpcHRzUGFuZWwgPSAic2NyaXB0cyI7CiBjb25z
dCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpQcm9maWxlc1BhbmVsID0gInByb2Zp
bGVzIjsKIAorY29uc3QgdW5zaWduZWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVmYXVsdEF0dGFj
aGVkSGVpZ2h0ID0gMzAwOwogCi1jb25zdCBTdHJpbmcmIEluc3BlY3RvckNvbnRyb2xsZXI6Omlu
c3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBzZXR0aW5nTmFtZSwgKCJpbnNwZWN0b3JTdGFydHNBdHRhY2hlZCIpKTsK
LSAgICByZXR1cm4gc2V0dGluZ05hbWU7Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZh
dWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFj
aGVkSGVpZ2h0ID0gMjUwLjBmOwotc3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhl
aWdodFJhdGlvID0gMC43NWY7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUNvbnNvbGVN
ZXNzYWdlcyA9IDEwMDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZXhwaXJlQ29uc29sZU1lc3Nh
Z2VzU3RlcCA9IDEwMDsKIApAQCAtMTU5LDEzICsxMzgsMTAgQEAgSW5zcGVjdG9yQ29udHJvbGxl
cjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVu
dCkKICAgICAsIG1fb3BlbmluZ0Zyb250ZW5kKGZhbHNlKQogICAgICwgbV9jc3NTdG9yZShuZXcg
SW5zcGVjdG9yQ1NTU3RvcmUodGhpcykpCiAgICAgLCBtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNv
dW50KDApCi0gICAgLCBtX3Nob3dBZnRlclZpc2libGUobGFzdEFjdGl2ZVBhbmVsKQorICAgICwg
bV9zaG93QWZ0ZXJWaXNpYmxlKExhc3RBY3RpdmVQYW5lbCkKICAgICAsIG1fc2Vzc2lvblNldHRp
bmdzKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpCiAgICAgLCBtX2dyb3VwTGV2ZWwoMCkKLSAg
ICAsIG1fc2VhcmNoaW5nRm9yTm9kZShmYWxzZSkKLSAgICAsIG1fbW9uaXRvcmluZ1hIUihmYWxz
ZSkKICAgICAsIG1fcHJldmlvdXNNZXNzYWdlKDApCi0gICAgLCBtX3Jlc291cmNlVHJhY2tpbmdF
bmFibGVkKGZhbHNlKQogICAgICwgbV9zZXR0aW5nc0xvYWRlZChmYWxzZSkKICAgICAsIG1faW5z
cGVjdG9yQmFja2VuZChJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX2lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG5ldyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcih0
aGlzKSkKQEAgLTE3Niw2ICsxNTIsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JD
b250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgICwgbV9w
cm9maWxlckFnZW50KEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZSh0aGlzKSkKICNlbmRp
ZgogeworICAgIG1fc3RhdGUgPSBuZXcgSW5zcGVjdG9yU3RhdGUoY2xpZW50KTsKICAgICBBU1NF
UlRfQVJHKHBhZ2UsIHBhZ2UpOwogICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOwogfQpA
QCAtMjE5LDI3ICsxOTYsMzkgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVkKCkg
Y29uc3QKICAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLT5zZXR0aW5ncygpLT5kZXZlbG9wZXJF
eHRyYXNFbmFibGVkKCk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXR0aW5n
KGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNw
ZWN0b3JTdGFydHNBdHRhY2hlZCgpCit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChib29sIGF0dGFjaGVk
KQogewotICAgIFNldHRpbmdzOjppdGVyYXRvciBpdCA9IG1fc2V0dGluZ3MuZmluZChrZXkpOwot
ICAgIGlmIChpdCAhPSBtX3NldHRpbmdzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjppbnNwZWN0b3JTdGFy
dHNBdHRhY2hlZCwgYXR0YWNoZWQpOworfQogCi0gICAgU3RyaW5nIHZhbHVlOwotICAgIG1fY2xp
ZW50LT5wb3B1bGF0ZVNldHRpbmcoa2V5LCAmdmFsdWUpOwotICAgIG1fc2V0dGluZ3Muc2V0KGtl
eSwgdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpCit7CisgICAgbV9zdGF0ZS0+
c2V0TG9uZyhJbnNwZWN0b3JTdGF0ZTo6aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQsIGhlaWdodCk7
Cit9CisKK2ludCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6
Omluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQorYm9v
bCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkgY29uc3QKIHsK
LSAgICBtX3NldHRpbmdzLnNldChrZXksIHZhbHVlKTsKLSAgICBtX2NsaWVudC0+c3RvcmVTZXR0
aW5nKGtleSwgdmFsdWUpOworICAgIHJldHVybiBtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3Rv
clN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlKTsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGUt
PmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhjb25z
dCBTdHJpbmcmIHNldHRpbmdzKQogewotICAgIHNldFNldHRpbmcoZnJvbnRlbmRTZXR0aW5nc1Nl
dHRpbmdOYW1lLCBzZXR0aW5ncyk7CisgICAgbV9zdGF0ZS0+c2V0U3RyaW5nKEluc3BlY3RvclN0
YXRlOjpmcm9udGVuZFNldHRpbmdzLCBzZXR0aW5ncyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzSlNPTikK
QEAgLTI0OSw1MCArMjM4LDI0IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZVNlc3Np
b25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzSlNPTikKIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpnZXRJbnNwZWN0b3JTdGF0ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3Rh
dGUpCiB7Ci0gICAgKCpzdGF0ZSktPnNldEJvb2xlYW4obW9uaXRvcmluZ1hIUlN0YXRlTmFtZSwg
bV9tb25pdG9yaW5nWEhSKTsKLSAgICAoKnN0YXRlKS0+c2V0Qm9vbGVhbihyZXNvdXJjZVRyYWNr
aW5nRW5hYmxlZFN0YXRlTmFtZSwgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk7CiAjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKLSAgICAg
ICAgKCpzdGF0ZSktPnNldE51bWJlcihwYXVzZU9uRXhjZXB0aW9uc1N0YXRlU3RhdGVOYW1lLCBt
X2RlYnVnZ2VyQWdlbnQtPnBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSk7CisgICAgICAgIG1fc3Rh
dGUtPnNldE51bWJlcihJbnNwZWN0b3JTdGF0ZTo6cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSwgbV9k
ZWJ1Z2dlckFnZW50LT5wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKCkpOwogI2VuZGlmCisgICAgKnN0
YXRlID0gbV9zdGF0ZS0+Z2VuZXJhdGVTdGF0ZU9iamVjdEZvckZyb250ZW5kKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKQotewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0YXRlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBzdGF0ZS0+c2V0Qm9vbGVhbihtb25pdG9yaW5nWEhSU3RhdGVOYW1lLCBtX21v
bml0b3JpbmdYSFIpOwotICAgIHN0YXRlLT5zZXRCb29sZWFuKHJlc291cmNlVHJhY2tpbmdFbmFi
bGVkU3RhdGVOYW1lLCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKTsKLSAgICBzdGF0ZS0+c2V0
Qm9vbGVhbih0aW1lbGluZVByb2ZpbGVyRW5hYmxlZFN0YXRlTmFtZSwgbV90aW1lbGluZUFnZW50
KTsKLSAgICBzdGF0ZS0+c2V0Qm9vbGVhbihzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZFN0YXRlTmFt
ZSwgbV9zZWFyY2hpbmdGb3JOb2RlKTsKLSAgICBtX2NsaWVudC0+dXBkYXRlSW5zcGVjdG9yU3Rh
dGVDb29raWUoc3RhdGUtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5z
cGVjdG9yU3RhdGVTdHJpbmcpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNw
ZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3QgU3RyaW5nJiBpbnNwZWN0b3JTdGF0ZUNvb2tpZSkK
IHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGluc3BlY3RvclN0YXRlVmFsdWUgPSBJbnNw
ZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGluc3BlY3RvclN0YXRlU3RyaW5nKTsKLSAgICBpZiAoIWlu
c3BlY3RvclN0YXRlVmFsdWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGluc3BlY3RvclN0YXRlID0gaW5zcGVjdG9yU3RhdGVWYWx1ZS0+YXNPYmplY3Qo
KTsKLSAgICBpZiAoIWluc3BlY3RvclN0YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnNw
ZWN0b3JTdGF0ZS0+Z2V0Qm9vbGVhbihtb25pdG9yaW5nWEhSU3RhdGVOYW1lLCAmbV9tb25pdG9y
aW5nWEhSKTsKLSAgICBpbnNwZWN0b3JTdGF0ZS0+Z2V0Qm9vbGVhbihyZXNvdXJjZVRyYWNraW5n
RW5hYmxlZFN0YXRlTmFtZSwgJm1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpOwotICAgIGluc3Bl
Y3RvclN0YXRlLT5nZXRCb29sZWFuKHNlYXJjaGluZ0Zvck5vZGVFbmFibGVkU3RhdGVOYW1lLCAm
bV9zZWFyY2hpbmdGb3JOb2RlKTsKLQotICAgIGJvb2wgdGltZWxpbmVQcm9maWxlckVuYWJsZWQg
PSBmYWxzZTsKLSAgICBpbnNwZWN0b3JTdGF0ZS0+Z2V0Qm9vbGVhbih0aW1lbGluZVByb2ZpbGVy
RW5hYmxlZFN0YXRlTmFtZSwgJnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkKTsKLSAgICBpZiAodGlt
ZWxpbmVQcm9maWxlckVuYWJsZWQpCisgICAgbV9zdGF0ZS0+cmVzdG9yZUZyb21JbnNwZWN0b3JD
b29raWUoaW5zcGVjdG9yU3RhdGVDb29raWUpOworICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFu
KEluc3BlY3RvclN0YXRlOjp0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCkpCiAgICAgICAgIHN0YXJ0
VGltZWxpbmVQcm9maWxlcigpOwotICAgIGVsc2UKLSAgICAgICAgc3RvcFRpbWVsaW5lUHJvZmls
ZXIoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRTZXR0aW5ncyhSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0Piogc2V0dGluZ3MpCiB7CiAgICAgKnNldHRpbmdzID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAoKnNldHRpbmdzKS0+c2V0U3RyaW5nKCJhcHBsaWNhdGlv
biIsIHNldHRpbmcoZnJvbnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lKSk7CisgICAgKCpzZXR0aW5n
cyktPnNldFN0cmluZygiYXBwbGljYXRpb24iLCBtX3N0YXRlLT5nZXRTdHJpbmcoSW5zcGVjdG9y
U3RhdGU6OmZyb250ZW5kU2V0dGluZ3MpKTsKICAgICAoKnNldHRpbmdzKS0+c2V0U3RyaW5nKCJz
ZXNzaW9uIiwgbV9zZXNzaW9uU2V0dGluZ3MtPnRvSlNPTlN0cmluZygpKTsKIH0KIApAQCAtNDI5
LDEyICszOTIsMTIgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptYXJrVGltZWxpbmUoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3JlTGFz
dEFjdGl2ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKQogewotICAgIHNldFNldHRpbmco
bGFzdEFjdGl2ZVBhbmVsLCBwYW5lbE5hbWUpOworICAgIG1fc3RhdGUtPnNldFN0cmluZyhJbnNw
ZWN0b3JTdGF0ZTo6bGFzdEFjdGl2ZVBhbmVsLCBwYW5lbE5hbWUpOwogfQogCiB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgdW5zaWduZWQpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fc2VhcmNo
aW5nRm9yTm9kZSkKKyAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9zdGF0ZS0+Z2V0Qm9vbGVhbihJ
bnNwZWN0b3JTdGF0ZTo6c2VhcmNoaW5nRm9yTm9kZSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CkBAIC00NDksNyArNDEyLDcgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoYW5kbGVNb3VzZVByZXNzKCkKICAgICBpZiAoIWVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fc2VhcmNoaW5nRm9yTm9kZSk7
CisgICAgQVNTRVJUKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnNlYXJjaGlu
Z0Zvck5vZGUpKTsKICAgICBpZiAoIW1faGlnaGxpZ2h0ZWROb2RlKQogICAgICAgICByZXR1cm47
CiAKQEAgLTQ4OCwxMiArNDUxLDExIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVj
dGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChGcmFtZSogZnJhbWUpCiAKIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpCiB7Ci0gICAg
aWYgKG1fc2VhcmNoaW5nRm9yTm9kZSA9PSBlbmFibGVkKQorICAgIGlmIChtX3N0YXRlLT5nZXRC
b29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlKSA9PSBlbmFibGVkKQogICAg
ICAgICByZXR1cm47Ci0gICAgbV9zZWFyY2hpbmdGb3JOb2RlID0gZW5hYmxlZDsKLSAgICBpZiAo
IW1fc2VhcmNoaW5nRm9yTm9kZSkKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0
YXRlOjpzZWFyY2hpbmdGb3JOb2RlLCBlbmFibGVkKTsKKyAgICBpZiAoIWVuYWJsZWQpCiAgICAg
ICAgIGhpZGVIaWdobGlnaHQoKTsKLSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOwog
fQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBl
bmFibGVkLCBib29sKiBuZXdTdGF0ZSkKQEAgLTUwNSwxMSArNDY3LDcgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3
U3RhdGUpCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldE1vbml0b3JpbmdYSFJFbmFibGVk
KGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpCiB7CiAgICAgKm5ld1N0YXRlID0gZW5hYmxl
ZDsKLSAgICBpZiAobV9tb25pdG9yaW5nWEhSID09IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX21vbml0b3JpbmdYSFIgPSBlbmFibGVkOwotICAgIHNldFNldHRpbmcobW9uaXRvcmlu
Z1hIUlNldHRpbmdOYW1lLCBlbmFibGVkID8gInRydWUiIDogImZhbHNlIik7Ci0gICAgdXBkYXRl
SW5zcGVjdG9yU3RhdGVDb29raWUoKTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3Rv
clN0YXRlOjptb25pdG9yaW5nWEhSLCBlbmFibGVkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQpAQCAtNTczLDcgKzUzMSw3IEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWwpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAocGFuZWwgPT0gbGFzdEFjdGl2ZVBhbmVsKQorICAgIGlm
IChwYW5lbCA9PSBMYXN0QWN0aXZlUGFuZWwpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZnJv
bnRlbmQtPnNob3dQYW5lbChwYW5lbCk7CkBAIC02MDksNyArNTY3LDcgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoKQogICAgIHVuYmluZEFsbFJlc291cmNl
cygpOwogICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CiAKLSAgICBtX3Nob3dBZnRlclZpc2li
bGUgPSBsYXN0QWN0aXZlUGFuZWw7CisgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gTGFzdEFjdGl2
ZVBhbmVsOwogCiAgICAgaGlkZUhpZ2hsaWdodCgpOwogCkBAIC02NDcsOCArNjA1LDggQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQogICAgIGlmICgh
bV9mcm9udGVuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc2hvd0FmdGVyVmlzaWJs
ZSA9PSBsYXN0QWN0aXZlUGFuZWwpCi0gICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IHNldHRp
bmcobGFzdEFjdGl2ZVBhbmVsKTsKKyAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxlID09IExhc3RB
Y3RpdmVQYW5lbCkKKyAgICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gbV9zdGF0ZS0+Z2V0U3Ry
aW5nKEluc3BlY3RvclN0YXRlOjpsYXN0QWN0aXZlUGFuZWwpOwogCiAgICAgc2hvd1BhbmVsKG1f
c2hvd0FmdGVyVmlzaWJsZSk7CiAKQEAgLTcwNiw4ICs2NjQsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnJlc3RvcmVEZWJ1Z2dlcigpCiAgICAgaWYgKEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmlzRGVidWdnZXJBbHdheXNFbmFibGVkKCkpCiAgICAgICAgIGVuYWJsZURlYnVnZ2VyRnJv
bUZyb250ZW5kKGZhbHNlKTsKICAgICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIGRlYnVnZ2VyRW5h
YmxlZCA9IHNldHRpbmcoZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUpOwotICAgICAg
ICBpZiAoZGVidWdnZXJFbmFibGVkID09ICJ0cnVlIiB8fCBtX2F0dGFjaERlYnVnZ2VyV2hlblNo
b3duKQorICAgICAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6ZGVi
dWdnZXJBbHdheXNFbmFibGVkKSB8fCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKQogICAgICAg
ICAgICAgZW5hYmxlRGVidWdnZXIoKTsKICAgICB9CiAjZW5kaWYKQEAgLTcxOCwxMSArNjc1LDgg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlUHJvZmlsZXIoKQogICAgIEFTU0VS
VChtX2Zyb250ZW5kKTsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBtX3By
b2ZpbGVyQWdlbnQtPnNldEZyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCkpOwotICAgIGlmICghU2Ny
aXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNFbmFibGVkKCkpIHsKLSAgICAgICAgU3RyaW5n
IHByb2ZpbGVyRW5hYmxlZFNldHRpbmcgPSBzZXR0aW5nKHByb2ZpbGVyQWx3YXlzRW5hYmxlZFNl
dHRpbmdOYW1lKTsKLSAgICAgICAgaWYgKHByb2ZpbGVyRW5hYmxlZFNldHRpbmcgPT0gInRydWUi
KQotICAgICAgICAgICAgZW5hYmxlUHJvZmlsZXIoKTsKLSAgICB9CisgICAgaWYgKCFTY3JpcHRQ
cm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJsZWQoKSAmJiBtX3N0YXRlLT5nZXRCb29sZWFu
KEluc3BlY3RvclN0YXRlOjpwcm9maWxlckFsd2F5c0VuYWJsZWQpKQorICAgICAgICBlbmFibGVQ
cm9maWxlcigpOwogI2VuZGlmCiB9CiAKQEAgLTg5NCw3ICs4NDgsNyBAQCBJbnNwZWN0b3JSZXNv
dXJjZSogSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0VHJhY2tlZFJlc291cmNlKHVuc2lnbmVkIGxv
bmcgaWRlbnRpZgogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IGlmIChtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKQorICAgIGlmIChtX3N0YXRlLT5nZXRCb29s
ZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkpCiAgICAgICAgIHJl
dHVybiBtX3Jlc291cmNlcy5nZXQoaWRlbnRpZmllcikuZ2V0KCk7CiAKICAgICBib29sIGlzTWFp
blJlc291cmNlID0gbV9tYWluUmVzb3VyY2UgJiYgbV9tYWluUmVzb3VyY2UtPmlkZW50aWZpZXIo
KSA9PSBpZGVudGlmaWVyOwpAQCAtOTI1LDcgKzg3OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsCiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CiAgICAgYm9vbCBpc01haW5SZXNvdXJj
ZSA9IGlzTWFpblJlc291cmNlTG9hZGVyKGxvYWRlciwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIGNh
Y2hlZFJlc291cmNlLT51cmwoKSkpOwogICAgIGVuc3VyZVNldHRpbmdzTG9hZGVkKCk7Ci0gICAg
aWYgKCFpc01haW5SZXNvdXJjZSAmJiAhbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkKKyAgICBp
ZiAoIWlzTWFpblJlc291cmNlICYmICFtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRl
OjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0
cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JSZXNvdXJjZTo6Y3JlYXRl
Q2FjaGVkKG1faW5zcGVjdGVkUGFnZS0+cHJvZ3Jlc3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRpZmll
cigpLCBsb2FkZXIsIGNhY2hlZFJlc291cmNlKTsKQEAgLTk0OSw3ICs5MDMsNyBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsCiAKICAgICBib29sIGlzTWFpblJlc291cmNlID0gaXNNYWluUmVzb3Vy
Y2VMb2FkZXIobG9hZGVyLCByZXF1ZXN0LnVybCgpKTsKICAgICBlbnN1cmVTZXR0aW5nc0xvYWRl
ZCgpOwotICAgIGlmICghaXNNYWluUmVzb3VyY2UgJiYgIW1fcmVzb3VyY2VUcmFja2luZ0VuYWJs
ZWQpCisgICAgaWYgKCFpc01haW5SZXNvdXJjZSAmJiAhbV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNw
ZWN0b3JTdGF0ZTo6cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gSW5zcGVjdG9yUmVzb3Vy
Y2U6OmNyZWF0ZShpZGVudGlmaWVyLCBsb2FkZXIsIHJlcXVlc3QudXJsKCkpOwpAQCAtMTEzNiwx
MCArMTA5MCwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0cmlldmVk
QnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aQogICAgIGlmICghZW5hYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9tb25pdG9yaW5nWEhSKQorICAgIGlmICht
X3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjptb25pdG9yaW5nWEhSKSkKICAgICAg
ICAgYWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBM
b2dNZXNzYWdlTGV2ZWwsICJYSFIgZmluaXNoZWQgbG9hZGluZzogXCIiICsgdXJsICsgIlwiLiIs
IHNlbmRMaW5lTnVtYmVyLCBzZW5kVVJMKTsKIAotICAgIGlmICghbV9yZXNvdXJjZVRyYWNraW5n
RW5hYmxlZCkKKyAgICBpZiAoIW1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJl
c291cmNlVHJhY2tpbmdFbmFibGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW5zcGVjdG9y
UmVzb3VyY2UqIHJlc291cmNlID0gbV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOwpA
QCAtMTE1NCw3ICsxMTA4LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJl
dHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGkKIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQogewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFt
X3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKQorICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3N0YXRl
LT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEluc3BlY3RvclJlc291cmNlKiByZXNvdXJjZSA9IG1fcmVz
b3VyY2VzLmdldChpZGVudGlmaWVyKS5nZXQoKTsKQEAgLTExNzMsOCArMTEyNyw3IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoYm9vbCBlbmFi
bGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwotICAg
IG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQgPSBlbmFibGU7Ci0gICAgdXBkYXRlSW5zcGVjdG9y
U3RhdGVDb29raWUoKTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpy
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZCwgZW5hYmxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJsZSwgYm9vbCBhbHdh
eXMsIGJvb2wqIG5ld1N0YXRlKQpAQCAtMTE4MiwxOCArMTEzNSwxNiBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlLCBib29s
IGFsd2F5cywgYgogICAgICpuZXdTdGF0ZSA9IGVuYWJsZTsKIAogICAgIGlmIChhbHdheXMpCi0g
ICAgICAgIHNldFNldHRpbmcocmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWRTZXR0aW5nTmFt
ZSwgZW5hYmxlID8gInRydWUiIDogImZhbHNlIik7CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xl
YW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkLCBlbmFibGUp
OwogCi0gICAgaWYgKG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQgPT0gZW5hYmxlKQorICAgIGlm
IChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nRW5h
YmxlZCkgPT0gZW5hYmxlKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9pbnNwZWN0
ZWRQYWdlKTsKLSAgICBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkID0gZW5hYmxlOworICAgIG1f
c3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVk
LCBlbmFibGUpOwogCiAgICAgaWYgKGVuYWJsZSkKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5t
YWluRnJhbWUoKS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5zY2hlZHVsZVJlZnJlc2godHJ1ZSk7
Ci0KLSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSgpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmVuc3VyZVNldHRpbmdzTG9hZGVkKCkKQEAgLTEyMDIsMTUgKzExNTMsMTAg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbnN1cmVTZXR0aW5nc0xvYWRlZCgpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX3NldHRpbmdzTG9hZGVkID0gdHJ1ZTsKIAotICAgIFN0cmluZyBy
ZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5hYmxlZCA9IHNldHRpbmcocmVzb3VyY2VUcmFja2luZ0Fs
d2F5c0VuYWJsZWRTZXR0aW5nTmFtZSk7Ci0gICAgaWYgKHJlc291cmNlVHJhY2tpbmdBbHdheXNF
bmFibGVkID09ICJ0cnVlIikKLSAgICAgICAgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCA9IHRy
dWU7Ci0KLSAgICBTdHJpbmcgbW9uaXRvcmluZ1hIUkFsd2F5c0VuYWJsZWQgPSBzZXR0aW5nKG1v
bml0b3JpbmdYSFJTZXR0aW5nTmFtZSk7Ci0gICAgaWYgKG1vbml0b3JpbmdYSFJBbHdheXNFbmFi
bGVkID09ICJ0cnVlIikKLSAgICAgICAgbV9tb25pdG9yaW5nWEhSID0gdHJ1ZTsKKyAgICBtX3N0
YXRlLT5sb2FkRnJvbVNldHRpbmdzKCk7CiAKLSAgICB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tp
ZSgpOworICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJj
ZVRyYWNraW5nQWx3YXlzRW5hYmxlZCkpCisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5z
cGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkLCB0cnVlKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIoKQpAQCAtMTIyNSw3ICsx
MTcxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIo
KQogICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVByb2Zp
bGVyV2FzU3RhcnRlZCgpOwogCi0gICAgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKTsKKyAg
ICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp0aW1lbGluZVByb2ZpbGVyRW5h
YmxlZCwgdHJ1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWVsaW5l
UHJvZmlsZXIoKQpAQCAtMTI0MCw3ICsxMTg2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzdG9wVGltZWxpbmVQcm9maWxlcigpCiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAgIG1f
ZnJvbnRlbmQtPnRpbWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkKCk7CiAKLSAgICB1cGRhdGVJbnNw
ZWN0b3JTdGF0ZUNvb2tpZSgpOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3Rh
dGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkLCBmYWxzZSk7CiB9CiAKICNpZiBFTkFCTEUoV09S
S0VSUykKQEAgLTE2MTIsMTQgKzE1NTgsMTQgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpw
cm9maWxlckVuYWJsZWQoKSBjb25zdAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVQ
cm9maWxlcihib29sIGFsd2F5cywgYm9vbCBza2lwUmVjb21waWxlKQogewogICAgIGlmIChhbHdh
eXMpCi0gICAgICAgIHNldFNldHRpbmcocHJvZmlsZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUs
ICJ0cnVlIik7CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnBy
b2ZpbGVyQWx3YXlzRW5hYmxlZCwgdHJ1ZSk7CiAgICAgbV9wcm9maWxlckFnZW50LT5lbmFibGUo
c2tpcFJlY29tcGlsZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVBy
b2ZpbGVyKGJvb2wgYWx3YXlzKQogewogICAgIGlmIChhbHdheXMpCi0gICAgICAgIHNldFNldHRp
bmcocHJvZmlsZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUsICJmYWxzZSIpOworICAgICAgICBt
X3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpwcm9maWxlckFsd2F5c0VuYWJsZWQs
IGZhbHNlKTsKICAgICBtX3Byb2ZpbGVyQWdlbnQtPmRpc2FibGUoKTsKIH0KICNlbmRpZgpAQCAt
MTYyOSw3ICsxNTc1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVEZWJ1Z2dl
ckZyb21Gcm9udGVuZChib29sIGFsd2F5cykKIHsKICAgICBBU1NFUlQoIWRlYnVnZ2VyRW5hYmxl
ZCgpKTsKICAgICBpZiAoYWx3YXlzKQotICAgICAgICBzZXRTZXR0aW5nKGRlYnVnZ2VyQWx3YXlz
RW5hYmxlZFNldHRpbmdOYW1lLCAidHJ1ZSIpOworICAgICAgICBtX3N0YXRlLT5zZXRCb29sZWFu
KEluc3BlY3RvclN0YXRlOjpkZWJ1Z2dlckFsd2F5c0VuYWJsZWQsIHRydWUpOwogCiAgICAgQVNT
RVJUKG1faW5zcGVjdGVkUGFnZSk7CiAKQEAgLTE2NjAsNyArMTYwNiw3IEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoYWx3YXlzKQotICAgICAgICBzZXRTZXR0aW5nKGRlYnVnZ2VyQWx3YXlz
RW5hYmxlZFNldHRpbmdOYW1lLCAiZmFsc2UiKTsKKyAgICAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVh
bihJbnNwZWN0b3JTdGF0ZTo6ZGVidWdnZXJBbHdheXNFbmFibGVkLCBmYWxzZSk7CiAKICAgICBB
U1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIApAQCAtMTc3OCwxMiArMTcyNCwxNCBAQCBTdHJpbmcg
SW5zcGVjdG9yQ29udHJvbGxlcjo6YnJlYWtwb2ludHNTZXR0aW5nS2V5KCkKIAogUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yQ29udHJvbGxlcjo6bG9hZEJyZWFrcG9pbnRzKCkK
IHsKLSAgICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihzZXR0aW5nKGJyZWFrcG9p
bnRzU2V0dGluZ0tleSgpKSk7CisgICAgU3RyaW5nIGpzb25TdHJpbmc7CisgICAgbV9jbGllbnQt
PnBvcHVsYXRlU2V0dGluZyhicmVha3BvaW50c1NldHRpbmdLZXkoKSwgJmpzb25TdHJpbmcpOwor
ICAgIHJldHVybiBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGpzb25TdHJpbmcpOwogfQogCiB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNhdmVCcmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gYnJlYWtwb2ludHMpCiB7Ci0gICAgc2V0U2V0dGluZyhicmVha3BvaW50c1Nl
dHRpbmdLZXkoKSwgYnJlYWtwb2ludHMtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2NsaWVudC0+
c3RvcmVTZXR0aW5nKGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpLCBicmVha3BvaW50cy0+dG9KU09O
U3RyaW5nKCkpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaAppbmRleCBiMjA4N2JhLi5hZmY2ZDRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oCkBAIC02OSw2ICs2OSw3IEBAIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dDsKIGNsYXNzIEluc3BlY3RvclJlc291cmNlOworY2xhc3MgSW5zcGVjdG9yU3RhdGU7CiBjbGFz
cyBJbnNwZWN0b3JTdG9yYWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50Owog
Y2xhc3MgSW5zcGVjdG9yVmFsdWU7CkBAIC0xMDIsNiArMTAzLDcgQEAgcHVibGljOgogICAgIHR5
cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiA+IERh
dGFiYXNlUmVzb3VyY2VzTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2U+ID4gRE9NU3RvcmFnZVJlc291cmNlc01hcDsKIAorICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBMYXN0QWN0aXZlUGFuZWw7CiAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IENvbnNvbGVQYW5lbDsKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgRWxlbWVudHNQYW5lbDsKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgUHJvZmlsZXNQ
YW5lbDsKQEAgLTEyMiwxMyArMTI0LDExIEBAIHB1YmxpYzoKICAgICBQYWdlKiBpbnNwZWN0ZWRQ
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlOyB9CiAgICAgdm9pZCByZWxvYWRQ
YWdlKCk7CiAKLSAgICBTdHJpbmcgc2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKICAgICB2b2lkIHNhdmVBcHBsaWNhdGlvblNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGlu
Z3MpOwogICAgIHZvaWQgc2F2ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKICAgICB2
b2lkIGdldFNldHRpbmdzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+Kik7CiAKLSAgICB2b2lkIHJl
c3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3QgU3RyaW5nJiBpbnNwZWN0b3JTdGF0
ZSk7CisgICAgdm9pZCByZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmlu
ZyYgaW5zcGVjdG9yQ29va2llKTsKIAogICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CiAgICAgdm9p
ZCBoaWdobGlnaHQoTm9kZSopOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAgICAgY29uc3QgVmVjdG9yPE93blB0cjxDb25zb2xl
TWVzc2FnZT4gPiYgY29uc29sZU1lc3NhZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zb2xlTWVz
c2FnZXM7IH0KIAotICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VhcmNoaW5nRm9yTm9kZTsgfQorICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUluUGFn
ZSgpIGNvbnN0OwogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVz
dFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwogICAgIHZvaWQgaGFuZGxlTW91c2VQ
cmVzcygpOwogCkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRSZXNv
dXJjZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpOwogICAgIHZvaWQgc2V0UmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBib29sIGFsd2F5cywgYm9vbCogbmV3U3RhdGUp
OwotICAgIGJvb2wgcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3Jl
c291cmNlVHJhY2tpbmdFbmFibGVkOyB9CisgICAgYm9vbCByZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZCgpIGNvbnN0OwogCiAgICAgdm9pZCBlbnN1cmVTZXR0aW5nc0xvYWRlZCgpOwogCkBAIC0yNzAs
MTAgKzI3MCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0
ZU9uTG9hZCgpOwogICAgIHZvaWQgc2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmlu
ZyYgc291cmNlKTsKIAotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXJ0c0F0
dGFjaGVkU2V0dGluZ05hbWUoKTsKKyAgICBib29sIGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCk7
CisgICAgdm9pZCBzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChib29sKTsKKyAgICB2b2lkIHNl
dEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGxvbmcgaGVpZ2h0KTsKKyAgICBpbnQgaW5zcGVjdG9y
QXR0YWNoZWRIZWlnaHQoKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZh
dWx0QXR0YWNoZWRIZWlnaHQ7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVJbnNwZWN0b3JT
dGF0ZUNvb2tpZSgpOwogICAgIHZvaWQgZ2V0SW5zcGVjdG9yU3RhdGUoUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4qIHN0YXRlKTsKIAogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwpA
QCAtMzQ1LDYgKzM0OSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEluc3BlY3RvclN0b3JhZ2VB
Z2VudD4gbV9zdG9yYWdlQWdlbnQ7CiAgICAgT3duUHRyPEluc3BlY3RvckNTU1N0b3JlPiBtX2Nz
c1N0b3JlOwogICAgIE93blB0cjxJbnNwZWN0b3JUaW1lbGluZUFnZW50PiBtX3RpbWVsaW5lQWdl
bnQ7CisgICAgT3duUHRyPEluc3BlY3RvclN0YXRlPiBtX3N0YXRlOwogCiAjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICBPd25QdHI8SW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50PiBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudDsKQEAgLTM3MSwxMCArMzc2LDcgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1fc2Vzc2lvblNldHRpbmdzOwog
I2VuZGlmCiAgICAgdW5zaWduZWQgbV9ncm91cExldmVsOwotICAgIGJvb2wgbV9zZWFyY2hpbmdG
b3JOb2RlOwotICAgIGJvb2wgbV9tb25pdG9yaW5nWEhSOwogICAgIENvbnNvbGVNZXNzYWdlKiBt
X3ByZXZpb3VzTWVzc2FnZTsKLSAgICBib29sIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQ7CiAg
ICAgYm9vbCBtX3NldHRpbmdzTG9hZGVkOwogICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kPiBt
X2luc3BlY3RvckJhY2tlbmQ7CiAgICAgT3duUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAppbmRleCA3NzYxNmRhLi40ODEyYjJh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmNwcApAQCAtNDcsNyArNDcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUgPSAiaW5zcGVj
dG9yQXR0YWNoZWRIZWlnaHQiOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hl
ZEhlaWdodCA9IDMwMDsKIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQg
PSAyNTAuMGY7CiBzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8g
PSAwLjc1ZjsKQEAgLTEwOCw3ICsxMDcsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWw6OmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKICAg
ICB1bnNpZ25lZCB0b3RhbEhlaWdodCA9IG1fZnJvbnRlbmRQYWdlLT5tYWluRnJhbWUoKS0+dmll
dygpLT52aXNpYmxlSGVpZ2h0KCkgKyBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwogICAgIHVuc2lnbmVk
IGF0dGFjaGVkSGVpZ2h0ID0gY29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQs
IHRvdGFsSGVpZ2h0KTsKLSAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldFNldHRpbmcoaW5z
cGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lLCBTdHJpbmc6Om51bWJlcihhdHRhY2hlZEhlaWdodCkp
OworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQo
YXR0YWNoZWRIZWlnaHQpOwogICAgIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGF0dGFjaGVkSGVp
Z2h0KTsKIH0KIApAQCAtMTM0LDEwICsxMzMsOSBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWw6OnNldEF0dGFjaGVkV2luZG93KGJvb2wgYXR0YWNoZWQpCiB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWw6OnJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCgpCiB7CiAg
ICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0g
ICAgU3RyaW5nIGF0dGFjaGVkSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXR0aW5n
KGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7CisgICAgaW50IGF0dGFjaGVkSGVpZ2h0ID0g
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpOwogICAgIGJv
b2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgaW50IGhlaWdodCA9IGF0dGFjaGVkSGVpZ2h0LnRvSW50
KCZzdWNjZXNzKTsKLSAgICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGhlaWdodCkgOiBkZWZhdWx0QXR0YWNoZWRIZWlnaHQ7CisgICAg
dW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihhdHRhY2hlZEhlaWdodCkgOiBkZWZhdWx0QXR0YWNoZWRIZWlnaHQ7CiAgICAgCiAgICAgLy8g
VGhpcyBjYWxsIG1pZ2h0IG5vdCBnbyB0aHJvdWdoIChpZiB0aGUgd2luZG93IHN0YXJ0cyBvdXQg
ZGV0YWNoZWQpLCBidXQgaWYgdGhlIHdpbmRvdyBpcyBpbml0aWFsbHkgY3JlYXRlZCBhdHRhY2hl
ZCwKICAgICAvLyBJbnNwZWN0b3JDb250cm9sbGVyOjphdHRhY2hXaW5kb3cgaXMgbmV2ZXIgY2Fs
bGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBzZXQgdGhlIGF0dGFjaGVkV2luZG93SGVp
Z2h0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmQ0OGU2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0
b3JDbGllbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0luc3BlY3RvclN0YXRlOjpJ
bnNwZWN0b3JTdGF0ZShJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNs
aWVudCkKK3sKKyAgICByZWdpc3RlckJvb2xlYW4obW9uaXRvcmluZ1hIUiwgZmFsc2UsICJtb25p
dG9yaW5nWEhSIiwgInhock1vbml0b3IiKTsKKyAgICByZWdpc3RlckJvb2xlYW4ocmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQsIGZhbHNlLCAicmVzb3VyY2VUcmFja2luZ0VuYWJsZWQiLCAoY29uc3Qg
Y2hhciopMCk7CisgICAgcmVnaXN0ZXJCb29sZWFuKHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFi
bGVkLCBmYWxzZSwgKGNvbnN0IGNoYXIqKTAsICJyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCIpOwor
ICAgIHJlZ2lzdGVyQm9vbGVhbih0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCwgZmFsc2UsICJ0aW1l
bGluZVByb2ZpbGVyRW5hYmxlZCIsIChjb25zdCBjaGFyKikwKTsKKyAgICByZWdpc3RlckJvb2xl
YW4oc2VhcmNoaW5nRm9yTm9kZSwgZmFsc2UsICJzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZCIsIChj
b25zdCBjaGFyKikwKTsKKyAgICByZWdpc3RlckJvb2xlYW4ocHJvZmlsZXJBbHdheXNFbmFibGVk
LCBmYWxzZSwgKGNvbnN0IGNoYXIqKTAsICJwcm9maWxlckVuYWJsZWQiKTsKKyAgICByZWdpc3Rl
clN0cmluZyhmcm9udGVuZFNldHRpbmdzLCAiIiwgKGNvbnN0IGNoYXIqKTAsICJmcm9udGVuZFNl
dHRpbmdzIik7CisgICAgcmVnaXN0ZXJCb29sZWFuKGRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwgZmFs
c2UsIChjb25zdCBjaGFyKikwLCAiZGVidWdnZXJFbmFibGVkIik7CisgICAgcmVnaXN0ZXJTdHJp
bmcobGFzdEFjdGl2ZVBhbmVsLCBJbnNwZWN0b3JDb250cm9sbGVyOjpMYXN0QWN0aXZlUGFuZWws
IChjb25zdCBjaGFyKikwLCAibGFzdEFjdGl2ZVBhbmVsIik7CisgICAgcmVnaXN0ZXJCb29sZWFu
KGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkLCB0cnVlLCAoY29uc3QgY2hhciopMCwgIkluc3BlY3Rv
clN0YXJ0c0F0dGFjaGVkIik7CisgICAgcmVnaXN0ZXJMb25nKGluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0LCBJbnNwZWN0b3JDb250cm9sbGVyOjpkZWZhdWx0QXR0YWNoZWRIZWlnaHQsIChjb25zdCBj
aGFyKikwLCAiaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiKTsKKyAgICByZWdpc3RlckxvbmcocGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSwgMCwgInBhdXNlT25FeGNlcHRpb25zU3RhdGUiLCAoY29uc3Qg
Y2hhciopMCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlc3RvcmVGcm9tSW5zcGVjdG9y
Q29va2llKGNvbnN0IFN0cmluZyYganNvbikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGpzb25WYWx1ZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvbik7CisgICAgaWYgKCFq
c29uVmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGpzb25PYmplY3QgPSBqc29uVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFqc29uT2JqZWN0
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Ig
aSA9IGpzb25PYmplY3QtPmJlZ2luKCk7IGkgIT0ganNvbk9iamVjdC0+ZW5kKCk7ICsraSkgewor
ICAgICAgICBJbnNwZWN0b3JQcm9wZXJ0eUlkIGlkID0gKEluc3BlY3RvclByb3BlcnR5SWQpaS0+
Zmlyc3QudG9JbnQoKTsKKyAgICAgICAgQVNTRVJUKGlkID4gMCAmJiBpZCA8IGxhc3RQcm9wZXJ0
eUlkKTsKKyAgICAgICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGogPSBtX3Byb3BlcnRpZXMuZmlu
ZChpZCk7CisgICAgICAgIEFTU0VSVChqICE9IG1fcHJvcGVydGllcy5lbmQoKSk7CisgICAgICAg
IEFTU0VSVChqLT5zZWNvbmQubV92YWx1ZS0+dHlwZSgpID09IGktPnNlY29uZC0+dHlwZSgpKTsK
KyAgICAgICAgai0+c2Vjb25kLm1fdmFsdWUgPSBpLT5zZWNvbmQ7CisgICAgfQorfQorCitQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3RhdGU6OmdlbmVyYXRlU3RhdGVPYmpl
Y3RGb3JGcm9udGVuZCgpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3RhdGVPYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGZvciAoUHJvcGVydHlNYXA6Oml0
ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuYmVnaW4oKTsgaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCk7
ICsraSkgeworICAgICAgICBpZiAoaS0+c2Vjb25kLm1fc3RhdGVOYW1lLmxlbmd0aCgpKQorICAg
ICAgICAgICAgc3RhdGVPYmplY3QtPnNldFZhbHVlKGktPnNlY29uZC5tX3N0YXRlTmFtZSwgaS0+
c2Vjb25kLm1fdmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gc3RhdGVPYmplY3QucmVsZWFzZSgp
OworfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjpsb2FkRnJvbVNldHRpbmdzKCkKK3sKKyAgICBm
b3IgKFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0g
bV9wcm9wZXJ0aWVzLmVuZCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGktPnNlY29uZC5tX3ByZWZl
cmVuY2VOYW1lLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAg
ICAgICBtX2NsaWVudC0+cG9wdWxhdGVTZXR0aW5nKGktPnNlY29uZC5tX3ByZWZlcmVuY2VOYW1l
LCAmdmFsdWUpOworICAgICAgICAgICAgc3dpdGNoIChpLT5zZWNvbmQubV92YWx1ZS0+dHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIEluc3BlY3RvclZhbHVlOjpUeXBlQm9vbGVhbjoKKyAgICAg
ICAgICAgICAgICBpLT5zZWNvbmQubV92YWx1ZSA9IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0
ZSh2YWx1ZSA9PSAidHJ1ZSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBJbnNwZWN0b3JWYWx1ZTo6VHlwZVN0cmluZzoKKyAgICAgICAgICAgICAgICBpLT5zZWNv
bmQubV92YWx1ZSA9IEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yVmFsdWU6OlR5cGVOdW1iZXI6
CisgICAgICAgICAgICAgICAgaS0+c2Vjb25kLm1fdmFsdWUgPSBJbnNwZWN0b3JCYXNpY1ZhbHVl
OjpjcmVhdGUoKGRvdWJsZSl2YWx1ZS50b0ludCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBJbnNwZWN0b3JTdGF0ZTo6dXBkYXRlQ29va2llKCkKK3sKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBjb29raWVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIGZvciAoUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuYmVnaW4oKTsg
aSAhPSBtX3Byb3BlcnRpZXMuZW5kKCk7ICsraSkKKyAgICAgICAgY29va2llT2JqZWN0LT5zZXRW
YWx1ZShTdHJpbmc6Om51bWJlcihpLT5maXJzdCksIGktPnNlY29uZC5tX3ZhbHVlKTsKKyAgICBt
X2NsaWVudC0+dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoY29va2llT2JqZWN0LT50b0pTT05T
dHJpbmcoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3RhdGU6OnNldFZhbHVlKEluc3BlY3RvclBy
b3BlcnR5SWQgaWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlLCBjb25zdCBTdHJp
bmcmIHN0cmluZ1ZhbHVlKQoreworICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9w
ZXJ0aWVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5lbmQoKSk7Cisg
ICAgaS0+c2Vjb25kLm1fdmFsdWUgPSB2YWx1ZTsKKyAgICBpZiAoaS0+c2Vjb25kLm1fcHJlZmVy
ZW5jZU5hbWUubGVuZ3RoKCkpCisgICAgICAgIG1fY2xpZW50LT5zdG9yZVNldHRpbmcoaS0+c2Vj
b25kLm1fcHJlZmVyZW5jZU5hbWUsIHN0cmluZ1ZhbHVlKTsKKyAgICB1cGRhdGVDb29raWUoKTsK
K30KKworYm9vbCBJbnNwZWN0b3JTdGF0ZTo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlk
IGlkKQoreworICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmZpbmQo
aWQpOworICAgIEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5lbmQoKSk7CisgICAgYm9vbCB2YWx1
ZSA9IGZhbHNlOworICAgIGktPnNlY29uZC5tX3ZhbHVlLT5hc0Jvb2xlYW4oJnZhbHVlKTsKKyAg
ICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0U3RyaW5nKElu
c3BlY3RvclByb3BlcnR5SWQgaWQpCit7CisgICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9yIGkgPSBt
X3Byb3BlcnRpZXMuZmluZChpZCk7CisgICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgp
KTsKKyAgICBTdHJpbmcgdmFsdWU7CisgICAgaS0+c2Vjb25kLm1fdmFsdWUtPmFzU3RyaW5nKCZ2
YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitsb25nIEluc3BlY3RvclN0YXRlOjpnZXRM
b25nKEluc3BlY3RvclByb3BlcnR5SWQgaWQpCit7CisgICAgUHJvcGVydHlNYXA6Oml0ZXJhdG9y
IGkgPSBtX3Byb3BlcnRpZXMuZmluZChpZCk7CisgICAgQVNTRVJUKGkgIT0gbV9wcm9wZXJ0aWVz
LmVuZCgpKTsKKyAgICBsb25nIHZhbHVlID0gMDsKKyAgICBpLT5zZWNvbmQubV92YWx1ZS0+YXNO
dW1iZXIoJnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3Rh
dGU6OnJlZ2lzdGVyQm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGJvb2wg
dmFsdWUsIGNvbnN0IFN0cmluZyYgc3RhdGVOYW1lLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VO
YW1lKQoreworICAgIG1fcHJvcGVydGllcy5zZXQocHJvcGVydHlJZCwgUHJvcGVydHk6OmNyZWF0
ZShJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpLCBzdGF0ZU5hbWUsIHByZWZlcmVu
Y2VOYW1lKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyU3RyaW5nKEluc3Bl
Y3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiBzdGF0ZU5hbWUsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpCit7CisgICAgbV9w
cm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlkLCBQcm9wZXJ0eTo6Y3JlYXRlKEluc3BlY3RvclN0cmlu
Zzo6Y3JlYXRlKHZhbHVlKSwgc3RhdGVOYW1lLCBwcmVmZXJlbmNlTmFtZSkpOworfQorCit2b2lk
IEluc3BlY3RvclN0YXRlOjpyZWdpc3RlckxvbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0
eUlkLCBsb25nIHZhbHVlLCBjb25zdCBTdHJpbmcmIHN0YXRlTmFtZSwgY29uc3QgU3RyaW5nJiBw
cmVmZXJlbmNlTmFtZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQsIFByb3Bl
cnR5OjpjcmVhdGUoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKChkb3VibGUpdmFsdWUpLCBz
dGF0ZU5hbWUsIHByZWZlcmVuY2VOYW1lKSk7Cit9CisKK0luc3BlY3RvclN0YXRlOjpQcm9wZXJ0
eSBJbnNwZWN0b3JTdGF0ZTo6UHJvcGVydHk6OmNyZWF0ZShQYXNzUmVmUHRyPEluc3BlY3RvclZh
bHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBzdGF0ZU5hbWUsIGNvbnN0IFN0cmluZyYgcHJlZmVy
ZW5jZU5hbWUpCit7CisgICAgUHJvcGVydHkgcHJvcGVydHk7CisgICAgcHJvcGVydHkubV92YWx1
ZSA9IHZhbHVlOworICAgIHByb3BlcnR5Lm1fc3RhdGVOYW1lID0gc3RhdGVOYW1lOworICAgIHBy
b3BlcnR5Lm1fcHJlZmVyZW5jZU5hbWUgPSBwcmVmZXJlbmNlTmFtZTsKKyAgICByZXR1cm4gcHJv
cGVydHk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5o
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lYzY5ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3RhdGUuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVj
dG9yU3RhdGVfaAorI2RlZmluZSBJbnNwZWN0b3JTdGF0ZV9oCisKKyNpbmNsdWRlICJJbnNwZWN0
b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEluc3BlY3RvckNsaWVudDsKKworY2xhc3MgSW5zcGVjdG9yU3RhdGUg
eworcHVibGljOgorICAgIGVudW0gSW5zcGVjdG9yUHJvcGVydHlJZCB7CisgICAgICAgIG1vbml0
b3JpbmdYSFIgPSAxLAorICAgICAgICByZXNvdXJjZVRyYWNraW5nRW5hYmxlZCwKKyAgICAgICAg
cmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWQsCisgICAgICAgIHRpbWVsaW5lUHJvZmlsZXJF
bmFibGVkLAorICAgICAgICBzZWFyY2hpbmdGb3JOb2RlLAorICAgICAgICBwcm9maWxlckFsd2F5
c0VuYWJsZWQsCisgICAgICAgIGZyb250ZW5kU2V0dGluZ3MsCisgICAgICAgIGRlYnVnZ2VyQWx3
YXlzRW5hYmxlZCwKKyAgICAgICAgbGFzdEFjdGl2ZVBhbmVsLAorICAgICAgICBpbnNwZWN0b3JT
dGFydHNBdHRhY2hlZCwKKyAgICAgICAgaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQsCisgICAgICAg
IHBhdXNlT25FeGNlcHRpb25zU3RhdGUsCisgICAgICAgIGxhc3RQcm9wZXJ0eUlkCisgICAgfTsK
KworICAgIEluc3BlY3RvclN0YXRlKEluc3BlY3RvckNsaWVudCogY2xpZW50KTsKKworICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZW5lcmF0ZVN0YXRlT2JqZWN0Rm9yRnJvbnRlbmQo
KTsKKyAgICB2b2lkIHJlc3RvcmVGcm9tSW5zcGVjdG9yQ29va2llKGNvbnN0IFN0cmluZyYganNv
blN0cmluZyk7CisgICAgdm9pZCBsb2FkRnJvbVNldHRpbmdzKCk7CisKKyAgICBib29sIGdldEJv
b2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkKTsKKyAgICBTdHJpbmcgZ2V0U3Ry
aW5nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCk7CisgICAgbG9uZyBnZXRMb25nKElu
c3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCk7CisKKyAgICB2b2lkIHNldEJvb2xlYW4oSW5z
cGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBib29sIHZhbHVlKSB7IHNldFZhbHVlKHByb3Bl
cnR5SWQsIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSksIHZhbHVlID8gInRydWUi
IDogImZhbHNlIik7IH0KKyAgICB2b2lkIHNldFN0cmluZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIHBy
b3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgc2V0VmFsdWUocHJvcGVydHlJZCwgSW5z
cGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUpLCB2YWx1ZSk7IH0KKyAgICB2b2lkIHNldExvbmco
SW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBsb25nIHZhbHVlKSB7IHNldFZhbHVlKHBy
b3BlcnR5SWQsIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSgoZG91YmxlKXZhbHVlKSwgU3Ry
aW5nOjpudW1iZXIodmFsdWUpKTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlQ29va2ll
KCk7CisgICAgdm9pZCBzZXRWYWx1ZShJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVl
KTsKKworICAgIHN0cnVjdCBQcm9wZXJ0eSB7CisgICAgICAgIHN0YXRpYyBQcm9wZXJ0eSBjcmVh
dGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYgc3RhdGVO
YW1lLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKTsKKyAgICAgICAgU3RyaW5nIG1fc3Rh
dGVOYW1lOworICAgICAgICBTdHJpbmcgbV9wcmVmZXJlbmNlTmFtZTsKKyAgICAgICAgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBtX3ZhbHVlOworICAgIH07CisgICAgdHlwZWRlZiBIYXNoTWFwPGxv
bmcsIFByb3BlcnR5PiBQcm9wZXJ0eU1hcDsKKyAgICBQcm9wZXJ0eU1hcCBtX3Byb3BlcnRpZXM7
CisKKyAgICB2b2lkIHJlZ2lzdGVyQm9vbGVhbihJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5
SWQsIGJvb2wgdmFsdWUsIGNvbnN0IFN0cmluZyYgc3RhdGVOYW1lLCBjb25zdCBTdHJpbmcmIHBy
ZWZlcmVuY2VOYW1lKTsKKyAgICB2b2lkIHJlZ2lzdGVyU3RyaW5nKEluc3BlY3RvclByb3BlcnR5
SWQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBzdGF0ZU5h
bWUsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpOworICAgIHZvaWQgcmVnaXN0ZXJMb25n
KEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgbG9uZyB2YWx1ZSwgY29uc3QgU3RyaW5n
JiBzdGF0ZU5hbWUsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZU5hbWUpOworCisgICAgSW5zcGVj
dG9yQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclN0YXRlX2gpCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFj
L0NoYW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDVkOGQ3NjIuLjk4NjVhMWEg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMTAtMTQgIElseWEgVGlraG9ub3Zza3kgIDxsb2lz
bG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGluc3BlY3RvciBzZXR0aW5ncy9wcm9wZXJ0aWVzL3N0
YXRlcyBtYW5hZ2VtZW50CisgICAgICAgIHNob3VsZCBiZSBleHRyYWN0ZWQgaW50byBzZXBhcmF0
ZSBjbGFzcy4KKworICAgICAgICBXZSBoYXZlIGEgbG90IG9mIGZsYWdzL3ZhbHVlcyBpbiBJbnNw
ZWN0b3JDb250cm9sbGVyLgorICAgICAgICBTb21lIGZsYWdzIGFyZSBwZXJzaXN0aW5nIGludG8g
cHJvZmlsZS4KKyAgICAgICAgT3RoZXJzIGFyZSBwYXJ0IG9mIGluc3BlY3RvciBzdGF0ZSBmb3Ig
ZnJvbnRlbmQuCisgICAgICAgIEFsbCB0aGVzZSBmbGFncyBzaG91bGQga2VlcCB0aGVpciB2YWx1
ZXMgYWZ0ZXIgbmF2aWdhdGlvbi4KKyAgICAgICAgSXQnZCBiZSBiZXR0ZXIgdG8gZXh0cmFjdCB0
aGVzZSBmbGFncy92YWx1ZXMgaW50byBzZXBhcmF0ZQorICAgICAgICBjbGFzcyB3aGljaCB3aWxs
IGNhcmUgYWJvdXQgdGhlaXJzIGxpZmV0aW1lLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI3NQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViSW5zcGVjdG9yQ2xpZW50Lm1tOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250
cm9sbGVyIHNob3dXaW5kb3c6XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRy
b2xsZXIgYXR0YWNoXSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIg
ZGV0YWNoXSk6CisKIDIwMTAtMTAtMTMgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0
IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0gYi9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQppbmRleCBkNGQwMjEz
Li5kMGM2Yzc4IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3Rv
ckNsaWVudC5tbQpAQCAtMzU4LDggKzM1OCw4IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkgY29uc3QKICAgICBfdmlzaWJsZSA9IFlFUzsKICAg
ICAKICAgICAvLyBJZiBubyBwcmVmZXJlbmNlIGlzIHNldCAtIGRlZmF1bHQgdG8gYW4gYXR0YWNo
ZWQgd2luZG93LiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW5zcGVjdG9yIExheW91dFRlc3RzLgot
ICAgIFN0cmluZyBzaG91bGRBdHRhY2ggPSBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS0+c2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JT
dGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCkpOwotICAgIF9zaG91bGRBdHRhY2ggPSBzaG91bGRB
dHRhY2ggIT0gImZhbHNlIjsKKyAgICAvLyBGSVhNRTogVGhpcyBmbGFnIGNhbiBiZSBmZXRjaGVk
IGRpcmVjdGx5IGZyb20gdGhlIGZsYWdzIHN0b3JhZ2UuCisgICAgX3Nob3VsZEF0dGFjaCA9IFtf
aW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5pbnNwZWN0b3JT
dGFydHNBdHRhY2hlZCgpOwogICAgIAogICAgIGlmIChfc2hvdWxkQXR0YWNoICYmICFfZnJvbnRl
bmRDbGllbnQtPmNhbkF0dGFjaFdpbmRvdygpKQogICAgICAgICBfc2hvdWxkQXR0YWNoID0gTk87
CkBAIC0zOTQsNyArMzk0LDggQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6dXBk
YXRlV2luZG93VGl0bGUoKSBjb25zdAogICAgIGlmIChfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZp
ZXcpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5zZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3Bl
Y3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSwgInRydWUiKTsKKyAgICAvLyBGSVhNRTog
VGhpcyBmbGFnIGNhbiBiZSBzYXZlZCBkaXJlY3RseSB0byB0aGUgZmxhZ3Mgc3RvcmFnZS4KKyAg
ICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5z
cGVjdG9yU3RhcnRzQXR0YWNoZWQodHJ1ZSk7CiAKICAgICBbc2VsZiBjbG9zZV07CiAgICAgW3Nl
bGYgc2hvd1dpbmRvdzpuaWxdOwpAQCAtNDA1LDcgKzQwNiw4IEBAIHZvaWQgV2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkgY29uc3QKICAgICBpZiAoIV9hdHRh
Y2hlZFRvSW5zcGVjdGVkV2ViVmlldykKICAgICAgICAgcmV0dXJuOwogCi0gICAgW19pbnNwZWN0
ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRpbmcoSW5zcGVj
dG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAiZmFs
c2UiKTsKKyAgICAvLyBGSVhNRTogVGhpcyBmbGFnIGNhbiBiZSBzYXZlZCB0byB0aGUgZmxhZ3Mg
c3RvcmFnZSBkaXJlY3RseS4KKyAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoZmFsc2UpOwogCiAgICAg
W3NlbGYgY2xvc2VdOwogICAgIFtzZWxmIHNob3dXaW5kb3c6bmlsXTsKZGlmZiAtLWdpdCBhL1dl
YktpdC93aW4vQ2hhbmdlTG9nIGIvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYTg0NmI3NS4u
ZDk3NjBhYiAxMDA2NDQKLS0tIGEvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0xMC0xNCAgSWx5YSBUaWtob25vdnNr
eSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW5zcGVjdG9yIHNldHRpbmdzL3Byb3Bl
cnRpZXMvc3RhdGVzIG1hbmFnZW1lbnQKKyAgICAgICAgc2hvdWxkIGJlIGV4dHJhY3RlZCBpbnRv
IHNlcGFyYXRlIGNsYXNzLgorCisgICAgICAgIFdlIGhhdmUgYSBsb3Qgb2YgZmxhZ3MvdmFsdWVz
IGluIEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgICAgIFNvbWUgZmxhZ3MgYXJlIHBlcnNpc3Rp
bmcgaW50byBwcm9maWxlLgorICAgICAgICBPdGhlcnMgYXJlIHBhcnQgb2YgaW5zcGVjdG9yIHN0
YXRlIGZvciBmcm9udGVuZC4KKyAgICAgICAgQWxsIHRoZXNlIGZsYWdzIHNob3VsZCBrZWVwIHRo
ZWlyIHZhbHVlcyBhZnRlciBuYXZpZ2F0aW9uLgorICAgICAgICBJdCdkIGJlIGJldHRlciB0byBl
eHRyYWN0IHRoZXNlIGZsYWdzL3ZhbHVlcyBpbnRvIHNlcGFyYXRlCisgICAgICAgIGNsYXNzIHdo
aWNoIHdpbGwgY2FyZSBhYm91dCB0aGVpcnMgbGlmZXRpbWUuCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mjc1CisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OmF0dGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6ZGV0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50OjpzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMpOgorCiAyMDEwLTEwLTEzICBHYXZp
biBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmNwcAppbmRleCAxYjc5ZGRlLi4wNjcyNTM3IDEwMDY0NAotLS0gYS9XZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKKysrIGIvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC0yNzMsNyArMjcz
LDggQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93KCkKICAg
ICBpZiAobV9hdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pbnNwZWN0ZWRXZWJW
aWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJ0cnVlIik7
CisgICAgLy8gRklYTUU6IFRoaXMgZmxhZyBjYW4gYmUgc2F2ZWQgdG8gdGhlIGZsYWdzIHN0b3Jh
Z2UgZGlyZWN0bHkuCisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQodHJ1ZSk7CiAKICAgICBjbG9z
ZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3Rp
ZmljYXRpb25zKCk7CkBAIC0yODQsNyArMjg1LDggQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6ZGV0YWNoV2luZG93KCkKICAgICBpZiAoIW1fYXR0YWNoZWQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0
YWNoZWRTZXR0aW5nTmFtZSgpLCAiZmFsc2UiKTsKKyAgICAvLyBGSVhNRTogVGhpcyBmbGFnIGNh
biBiZSBzYXZlZCB0byB0aGUgZmxhZ3Mgc3RvcmFnZSBkaXJlY3RseS4KKyAgICBtX2luc3BlY3Rl
ZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JTdGFy
dHNBdHRhY2hlZChmYWxzZSk7CiAKICAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25z
KCk7CiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CkBAIC0zNjQsOCArMzY2
LDggQEAgdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXRO
b3RpZmljYXRpb25zKCkKICAgICAgICAgc2hvdWxkQXR0YWNoID0gdHJ1ZTsKICAgICBlbHNlIHsK
ICAgICAgICAgLy8gSWYgbm8gcHJlZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0IHRvIGFuIGF0dGFj
aGVkIHdpbmRvdy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGluc3BlY3RvciBMYXlvdXRUZXN0cy4K
LSAgICAgICAgU3RyaW5nIHNob3VsZEF0dGFjaFByZWYgPSBtX2luc3BlY3RlZFdlYlZpZXctPnBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6
Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSk7Ci0gICAgICAgIHNob3VsZEF0
dGFjaCA9IHNob3VsZEF0dGFjaFByZWYgIT0gImZhbHNlIjsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgZmxhZyBjYW4gYmUgZmV0Y2hlZCBkaXJlY3RseSBmcm9tIHRoZSBmbGFncyBzdG9yYWdlLgor
ICAgICAgICBzaG91bGRBdHRhY2ggPSBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLT5pbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpOwogCiAgICAgICAgIGlm
IChzaG91bGRBdHRhY2ggJiYgIWNhbkF0dGFjaFdpbmRvdygpKQogICAgICAgICAgICAgc2hvdWxk
QXR0YWNoID0gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70737</attachid>
            <date>2010-10-14 07:25:24 -0700</date>
            <delta_ts>2010-10-14 13:13:05 -0700</delta_ts>
            <desc>[patch] next iteration.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>55931</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDU4ZDQzZDAuLjk2YTYzNGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExNCw2ICsxMTE0LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQu
Y3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDY2ODhkNDMuLjM5ZjdhMTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTAtMTAtMTQgIElseWEgVGlr
aG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGluc3BlY3RvciBzZXR0aW5n
cy9wcm9wZXJ0aWVzL3N0YXRlcyBtYW5hZ2VtZW50CisgICAgICAgIHNob3VsZCBiZSBleHRyYWN0
ZWQgaW50byBzZXBhcmF0ZSBjbGFzcy4KKworICAgICAgICBXZSBoYXZlIGEgbG90IG9mIGZsYWdz
L3ZhbHVlcyBpbiBJbnNwZWN0b3JDb250cm9sbGVyLgorICAgICAgICBTb21lIGZsYWdzIGFyZSBw
ZXJzaXN0aW5nIGludG8gcHJvZmlsZS4KKyAgICAgICAgT3RoZXJzIGFyZSBwYXJ0IG9mIGluc3Bl
Y3RvciBzdGF0ZSBmb3IgZnJvbnRlbmQuCisgICAgICAgIEFsbCB0aGVzZSBmbGFncyBzaG91bGQg
a2VlcCB0aGVpciB2YWx1ZXMgYWZ0ZXIgbmF2aWdhdGlvbi4KKyAgICAgICAgSXQnZCBiZSBiZXR0
ZXIgdG8gZXh0cmFjdCB0aGVzZSBmbGFncy92YWx1ZXMgaW50byBzZXBhcmF0ZQorICAgICAgICBj
bGFzcyB3aGljaCB3aWxsIGNhcmUgYWJvdXQgdGhlaXJzIGxpZmV0aW1lLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI3NQorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2Vi
Q29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUu
cHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckF0
dGFjaGVkSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNl
YXJjaGluZ0Zvck5vZGVJblBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6c2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0SW5zcGVjdG9yU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRTZXR0aW5ncyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9yZUxhc3RBY3RpdmVQ
YW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjptb3VzZURpZE1v
dmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpo
YW5kbGVNb3VzZVByZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OnNldFNlYXJjaGluZ0Zvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVQcm9maWxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRUcmFja2VkUmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJGb3JJ
bml0aWFsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpy
ZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0SW1wb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5zdXJlU2V0dGluZ3NMb2FkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVBy
b2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVBy
b2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVQ
cm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVE
ZWJ1Z2dlckZyb21Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpkaXNhYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6bG9hZEJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNhdmVCcmVha3BvaW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
OjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsOjpyZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbUluc3BlY3RvckNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6Z2VuZXJhdGVTdGF0ZU9iamVjdEZvckZyb250ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpsb2FkRnJvbVNldHRpbmdzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjp1cGRhdGVDb29raWUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0YXRlOjpnZXRCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0
YXRlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OmdldExv
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyQm9vbGVhbik6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6cmVnaXN0ZXJTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6OnJlZ2lzdGVyTG9uZyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6UHJvcGVydHk6OmNyZWF0ZSk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclN0YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3RhdGU6OnNldEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3RhdGU6
OnNldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdGF0ZTo6c2V0TG9uZyk6
CisKIDIwMTAtMTAtMTQgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgTm90IHJldmlld2VkLiBSZS1sYW5kaW5nIHI2OTc1Ny4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGIxM2E4
OTAuLjk1YWU3MmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTgzNCw2ICsxODM0LDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdGF0ZS5jcHAgXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmggXAogCVdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXAogCVdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
IGIvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBmY2IwZWZkLi40MzA4ZjlhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4K
QEAgLTEyMTYsNyArMTIxNiw2IEBAIF9fWk43V2ViQ29yZTIyR2VvbG9jYXRpb25TZXJ2aWNlTW9j
azhzZXRFcnJvckVOM1dURjEwUGFzc1JlZlB0cklOU18xM1Bvc2l0aW9uRXJyCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIx
MHNldFNldHRpbmdFUktOM1dURjZTdHJpbmdFUzRfCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIxMkNvbnNvbGVQYW5lbEUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjEyU2NyaXB0c1BhbmVsRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTNQcm9m
aWxlc1BhbmVsRQpAQCAtMTIyNywxMiArMTIyNiwxMiBAQCBfX1pON1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXIxNWRpc2FibGVQcm9maWxlckViCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIxOGRpc2Nvbm5lY3RGcm9udGVuZEV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIyMHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9y
Q29udHJvbGxlcjIxc3RhcnRUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjIzaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRFdgogX19aTjdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyMjVldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kRWxSS04zV1RGNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRFTjNXVEYxMFBhc3NPd25QdHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVu
dEVFRQorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzZXRJbnNwZWN0b3JTdGFy
dHNBdHRhY2hlZEViCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNl
ckluaXRpYXRlZFByb2ZpbGluZ0V2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIy
NnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjM0aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZUV2Ci1fX1pON1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXIzNGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05h
bWVFdgogX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjMxaXNSZWNvcmRpbmdVc2Vy
SW5pdGlhdGVkUHJvZmlsZUV2CiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVw
cm9maWxlckVuYWJsZWRFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dF
dgpAQCAtMTI1Miw3ICsxMjUxLDYgQEAgX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsQzJFUE5TXzE5SW5zcGVjdG9yQ29udHJvbGxlckVQTlNfNFBhZ2UKIF9fWk43V2Vi
Q29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbEQyRXYKIF9fWk5LN1dlYkNvcmUxOUlu
c3BlY3RvckNvbnRyb2xsZXIxN2RyYXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29udGV4
dEUKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI3ZW5hYmxlZEV2Ci1fX1pOSzdX
ZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyN3NldHRpbmdFUktOM1dURjZTdHJpbmdFCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYjZmYjA3Ni4uN2QzY2IyNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTE5MzUsNiArMTkzNSw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaCcs
CisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCcsCisgICAgICAgICAg
ICAnaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9J
bnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVj
dG9yU3RvcmFnZUFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9X
ZWJDb3JlLnBybwppbmRleCA0ZDU0OTIwLi4zOWM1NDEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTEwMDIsNiArMTAwMiw3IEBA
IFNPVVJDRVMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBc
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlQWdlbnQuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUu
Y3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
VGltZWxpbmVBZ2VudC5jcHAgXApAQCAtMTg3OSw2ICsxODgwLDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmggXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yU3RvcmFnZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggXApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNzIzNzgwOS4uMDc3MTA3MiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02MzI0Nyw2ICs2MzI0NywxNCBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0
b3JcSW5zcGVjdG9yU3RhdGUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclN0YXRlLmgiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGUxMGJlZjAuLjRiZWU5YTkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTMxLDYg
KzExMzEsOCBAQAogCQk0RjRGNUZGQjExQ0JEMkUxMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRl
bmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY0
RjVGRkExMUNCRDJEMjAwQTE4NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmNwcCAqLzsgfTsKIAkJ
NEY3MDdBOTkxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGNzA3QTk3
MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgKi87IH07
CiAJCTRGNzA3QTlBMTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY3MDdB
OTgxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggKi87IH07
CisJCTRGQTNCOTBBMTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkEzQjkwODEyNUNEMTIx
MDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuY3BwICovOyB9OworCQk0RkEzQjkwQjEyNUNEMTIy
MDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRGQTNCOTA5MTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JT
dGF0ZS5oICovOyB9OwogCQk0RkQ4RDBGMjExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkQ4
RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgKi87IH07CiAJCTRGRDhE
MEYzMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkQ4RDBGMTExOUM3MThCMDAyRkE4MjUgLyog
U2NyaXB0R0NFdmVudC5oICovOyB9OwogCQk1MTAxODQ2OTBCMDg2MDJBMDA0QTgyNUYgLyogQ2Fj
aGVkUGFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTEwMTg0NjcwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzE5Nyw2ICs3MTk5LDggQEAKIAkJ
NEY0RjVGRkMxMUNCRDMwMTAwQTE4NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckZyb250ZW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTRGNzA3QTk3MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTRGNzA3QTk4MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0RkEzQjkwODEyNUNE
MTIxMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0RkEzQjkwOTEyNUNEMTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yU3RhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEZEOEQwRjAxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdD
RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0R0NF
dmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGRDhEMEYxMTE5QzcxOEIw
MDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjcmlwdEdDRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTg0
NjcwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FjaGVkUGFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTIxOTQsNiArMTIxOTgsOCBAQAogCQkJCTQxRjA2MUZGMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNw
ZWN0b3JSZXNvdXJjZS5oICovLAogCQkJCTgyQUIxNzcxMTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50LmNwcCAqLywKIAkJCQk4MkFCMTc3MjEyNUM4MjY3MDBDNTA2OUQg
LyogSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oICovLAorCQkJCTRGQTNCOTA4MTI1Q0QxMjEwMDMw
MEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgKi8sCisJCQkJNEZBM0I5MDkxMjVDRDEyMjAwMzAw
QkFEIC8qIEluc3BlY3RvclN0YXRlLmggKi8sCiAJCQkJN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQw
IC8qIEluc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgKi8sCiAJCQkJN0FCMEIxQkYxMjExQTYyMjAw
QTc2OTQwIC8qIEluc3BlY3RvclN0b3JhZ2VBZ2VudC5oICovLAogCQkJCTgyQUIxNzZGMTI1Qzgy
NjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCAqLywKQEAgLTIxMDY5LDYgKzIx
MDc1LDcgQEAKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmlj
b2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8q
IFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTRGQTNCOTBCMTI1Q0QxMjIwMDMwMEJB
RCAvKiBJbnNwZWN0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMzYxNSw2ICsyMzYyMiw3
IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xU
VW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNG
OUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEZBM0I5MEExMjVDRDEy
MjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBhZjBiMzgzLi40NzBhYjgyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNjksNiArNjks
NyBAQAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIklu
c3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgor
I2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RvcmFnZUFn
ZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvclZhbHVlcy5oIgpAQCAtMTE1LDQxICsxMTYsMTkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZnJv
bnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lID0gImZyb250ZW5kU2V0dGluZ3MiOwotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZGVidWdnZXJBbHdheXNFbmFibGVkU2V0dGluZ05hbWUgPSAiZGVi
dWdnZXJFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsYXN0QWN0aXZlUGFuZWwg
PSAibGFzdEFjdGl2ZVBhbmVsIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBtb25pdG9yaW5n
WEhSU2V0dGluZ05hbWUgPSAieGhyTW9uaXRvciI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
cmVzb3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWRTZXR0aW5nTmFtZSA9ICJyZXNvdXJjZVRyYWNr
aW5nRW5hYmxlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgcHJvZmlsZXJBbHdheXNFbmFi
bGVkU2V0dGluZ05hbWUgPSAicHJvZmlsZXJFbmFibGVkIjsKLQotc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IG1vbml0b3JpbmdYSFJTdGF0ZU5hbWUgPSAibW9uaXRvcmluZ1hIUkVuYWJsZWQiOwot
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJlc291cmNlVHJhY2tpbmdFbmFibGVkU3RhdGVOYW1l
ID0gInJlc291cmNlVHJhY2tpbmdFbmFibGVkIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBz
ZWFyY2hpbmdGb3JOb2RlRW5hYmxlZFN0YXRlTmFtZSA9ICJzZWFyY2hpbmdGb3JOb2RlRW5hYmxl
ZCI7Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgdGltZWxpbmVQcm9maWxlckVuYWJsZWRTdGF0
ZU5hbWUgPSAidGltZWxpbmVQcm9maWxlckVuYWJsZWQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IHBhdXNlT25FeGNlcHRpb25zU3RhdGVTdGF0ZU5hbWUgPSAicGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdo
dE5hbWUgPSAiaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiOwotCiBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiRE9NIjsKIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBldmVudExpc3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiRXZlbnRMaXN0ZW5l
ciI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgeGhyTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAi
WEhSIjsKIAorLy8gRklYTUU6IG1vdmUgbGFzdCBwYW5lbCBzZXR0aW5nIHRvIHRoZSBmcm9udC1l
bmQKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6Okxhc3RBY3RpdmVQYW5l
bCA9ICJsYXN0QWN0aXZlUGFuZWwiOwogY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29udHJv
bGxlcjo6RWxlbWVudHNQYW5lbCA9ICJlbGVtZW50cyI7CiBjb25zdCBjaGFyKiBjb25zdCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7CiBjb25zdCBjaGFyKiBj
b25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTY3JpcHRzUGFuZWwgPSAic2NyaXB0cyI7CiBjb25z
dCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpQcm9maWxlc1BhbmVsID0gInByb2Zp
bGVzIjsKIAorY29uc3QgdW5zaWduZWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVmYXVsdEF0dGFj
aGVkSGVpZ2h0ID0gMzAwOwogCi1jb25zdCBTdHJpbmcmIEluc3BlY3RvckNvbnRyb2xsZXI6Omlu
c3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBzZXR0aW5nTmFtZSwgKCJpbnNwZWN0b3JTdGFydHNBdHRhY2hlZCIpKTsK
LSAgICByZXR1cm4gc2V0dGluZ05hbWU7Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZh
dWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFj
aGVkSGVpZ2h0ID0gMjUwLjBmOwotc3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhl
aWdodFJhdGlvID0gMC43NWY7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUNvbnNvbGVN
ZXNzYWdlcyA9IDEwMDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZXhwaXJlQ29uc29sZU1lc3Nh
Z2VzU3RlcCA9IDEwMDsKIApAQCAtMTU5LDEzICsxMzgsMTAgQEAgSW5zcGVjdG9yQ29udHJvbGxl
cjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVu
dCkKICAgICAsIG1fb3BlbmluZ0Zyb250ZW5kKGZhbHNlKQogICAgICwgbV9jc3NTdG9yZShuZXcg
SW5zcGVjdG9yQ1NTU3RvcmUodGhpcykpCiAgICAgLCBtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNv
dW50KDApCi0gICAgLCBtX3Nob3dBZnRlclZpc2libGUobGFzdEFjdGl2ZVBhbmVsKQorICAgICwg
bV9zaG93QWZ0ZXJWaXNpYmxlKExhc3RBY3RpdmVQYW5lbCkKICAgICAsIG1fc2Vzc2lvblNldHRp
bmdzKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpCiAgICAgLCBtX2dyb3VwTGV2ZWwoMCkKLSAg
ICAsIG1fc2VhcmNoaW5nRm9yTm9kZShmYWxzZSkKLSAgICAsIG1fbW9uaXRvcmluZ1hIUihmYWxz
ZSkKICAgICAsIG1fcHJldmlvdXNNZXNzYWdlKDApCi0gICAgLCBtX3Jlc291cmNlVHJhY2tpbmdF
bmFibGVkKGZhbHNlKQogICAgICwgbV9zZXR0aW5nc0xvYWRlZChmYWxzZSkKICAgICAsIG1faW5z
cGVjdG9yQmFja2VuZChJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX2lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG5ldyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcih0
aGlzKSkKQEAgLTE3Niw2ICsxNTIsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JD
b250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgICwgbV9w
cm9maWxlckFnZW50KEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZSh0aGlzKSkKICNlbmRp
ZgogeworICAgIG1fc3RhdGUgPSBuZXcgSW5zcGVjdG9yU3RhdGUoY2xpZW50KTsKICAgICBBU1NF
UlRfQVJHKHBhZ2UsIHBhZ2UpOwogICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOwogfQpA
QCAtMjE5LDI3ICsxOTYsMzkgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVkKCkg
Y29uc3QKICAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLT5zZXR0aW5ncygpLT5kZXZlbG9wZXJF
eHRyYXNFbmFibGVkKCk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXR0aW5n
KGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAorYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNw
ZWN0b3JTdGFydHNBdHRhY2hlZCgpCit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChib29sIGF0dGFjaGVk
KQogewotICAgIFNldHRpbmdzOjppdGVyYXRvciBpdCA9IG1fc2V0dGluZ3MuZmluZChrZXkpOwot
ICAgIGlmIChpdCAhPSBtX3NldHRpbmdzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjppbnNwZWN0b3JTdGFy
dHNBdHRhY2hlZCwgYXR0YWNoZWQpOworfQogCi0gICAgU3RyaW5nIHZhbHVlOwotICAgIG1fY2xp
ZW50LT5wb3B1bGF0ZVNldHRpbmcoa2V5LCAmdmFsdWUpOwotICAgIG1fc2V0dGluZ3Muc2V0KGtl
eSwgdmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpCit7CisgICAgbV9zdGF0ZS0+
c2V0TG9uZyhJbnNwZWN0b3JTdGF0ZTo6aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQsIGhlaWdodCk7
Cit9CisKK2ludCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6
Omluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQorYm9v
bCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkgY29uc3QKIHsK
LSAgICBtX3NldHRpbmdzLnNldChrZXksIHZhbHVlKTsKLSAgICBtX2NsaWVudC0+c3RvcmVTZXR0
aW5nKGtleSwgdmFsdWUpOworICAgIHJldHVybiBtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3Rv
clN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlKTsKK30KKworYm9vbCBJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGUt
PmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhjb25z
dCBTdHJpbmcmIHNldHRpbmdzKQogewotICAgIHNldFNldHRpbmcoZnJvbnRlbmRTZXR0aW5nc1Nl
dHRpbmdOYW1lLCBzZXR0aW5ncyk7CisgICAgbV9zdGF0ZS0+c2V0U3RyaW5nKEluc3BlY3RvclN0
YXRlOjpmcm9udGVuZFNldHRpbmdzLCBzZXR0aW5ncyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2F2ZVNlc3Npb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzSlNPTikK
QEAgLTI0OSw1MCArMjM4LDI0IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZVNlc3Np
b25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzSlNPTikKIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpnZXRJbnNwZWN0b3JTdGF0ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3Rh
dGUpCiB7Ci0gICAgKCpzdGF0ZSktPnNldEJvb2xlYW4obW9uaXRvcmluZ1hIUlN0YXRlTmFtZSwg
bV9tb25pdG9yaW5nWEhSKTsKLSAgICAoKnN0YXRlKS0+c2V0Qm9vbGVhbihyZXNvdXJjZVRyYWNr
aW5nRW5hYmxlZFN0YXRlTmFtZSwgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk7CiAjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKLSAgICAg
ICAgKCpzdGF0ZSktPnNldE51bWJlcihwYXVzZU9uRXhjZXB0aW9uc1N0YXRlU3RhdGVOYW1lLCBt
X2RlYnVnZ2VyQWdlbnQtPnBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSk7CisgICAgICAgIG1fc3Rh
dGUtPnNldExvbmcoSW5zcGVjdG9yU3RhdGU6OnBhdXNlT25FeGNlcHRpb25zU3RhdGUsIG1fZGVi
dWdnZXJBZ2VudC0+cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpKTsKICNlbmRpZgorICAgICpzdGF0
ZSA9IG1fc3RhdGUtPmdlbmVyYXRlU3RhdGVPYmplY3RGb3JGcm9udGVuZCgpOwogfQogCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCkKLXsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzdGF0ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgc3RhdGUtPnNldEJvb2xlYW4obW9uaXRvcmluZ1hIUlN0YXRlTmFtZSwgbV9tb25p
dG9yaW5nWEhSKTsKLSAgICBzdGF0ZS0+c2V0Qm9vbGVhbihyZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZFN0YXRlTmFtZSwgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk7Ci0gICAgc3RhdGUtPnNldEJv
b2xlYW4odGltZWxpbmVQcm9maWxlckVuYWJsZWRTdGF0ZU5hbWUsIG1fdGltZWxpbmVBZ2VudCk7
Ci0gICAgc3RhdGUtPnNldEJvb2xlYW4oc2VhcmNoaW5nRm9yTm9kZUVuYWJsZWRTdGF0ZU5hbWUs
IG1fc2VhcmNoaW5nRm9yTm9kZSk7Ci0gICAgbV9jbGllbnQtPnVwZGF0ZUluc3BlY3RvclN0YXRl
Q29va2llKHN0YXRlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3Bl
Y3RvclN0YXRlU3RyaW5nKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVj
dG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdGVDb29raWUpCiB7
Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBpbnNwZWN0b3JTdGF0ZVZhbHVlID0gSW5zcGVj
dG9yVmFsdWU6OnBhcnNlSlNPTihpbnNwZWN0b3JTdGF0ZVN0cmluZyk7Ci0gICAgaWYgKCFpbnNw
ZWN0b3JTdGF0ZVZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBpbnNwZWN0b3JTdGF0ZSA9IGluc3BlY3RvclN0YXRlVmFsdWUtPmFzT2JqZWN0KCk7
Ci0gICAgaWYgKCFpbnNwZWN0b3JTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5zcGVj
dG9yU3RhdGUtPmdldEJvb2xlYW4obW9uaXRvcmluZ1hIUlN0YXRlTmFtZSwgJm1fbW9uaXRvcmlu
Z1hIUik7Ci0gICAgaW5zcGVjdG9yU3RhdGUtPmdldEJvb2xlYW4ocmVzb3VyY2VUcmFja2luZ0Vu
YWJsZWRTdGF0ZU5hbWUsICZtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKTsKLSAgICBpbnNwZWN0
b3JTdGF0ZS0+Z2V0Qm9vbGVhbihzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZFN0YXRlTmFtZSwgJm1f
c2VhcmNoaW5nRm9yTm9kZSk7Ci0KLSAgICBib29sIHRpbWVsaW5lUHJvZmlsZXJFbmFibGVkID0g
ZmFsc2U7Ci0gICAgaW5zcGVjdG9yU3RhdGUtPmdldEJvb2xlYW4odGltZWxpbmVQcm9maWxlckVu
YWJsZWRTdGF0ZU5hbWUsICZ0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCk7Ci0gICAgaWYgKHRpbWVs
aW5lUHJvZmlsZXJFbmFibGVkKQorICAgIG1fc3RhdGUtPnJlc3RvcmVGcm9tSW5zcGVjdG9yQ29v
a2llKGluc3BlY3RvclN0YXRlQ29va2llKTsKKyAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJ
bnNwZWN0b3JTdGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQpKQogICAgICAgICBzdGFydFRp
bWVsaW5lUHJvZmlsZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIHN0b3BUaW1lbGluZVByb2ZpbGVy
KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0U2V0dGluZ3MoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIHNldHRpbmdzKQogewogICAgICpzZXR0aW5ncyA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgKCpzZXR0aW5ncyktPnNldFN0cmluZygiYXBwbGljYXRpb24i
LCBzZXR0aW5nKGZyb250ZW5kU2V0dGluZ3NTZXR0aW5nTmFtZSkpOworICAgICgqc2V0dGluZ3Mp
LT5zZXRTdHJpbmcoImFwcGxpY2F0aW9uIiwgbV9zdGF0ZS0+Z2V0U3RyaW5nKEluc3BlY3RvclN0
YXRlOjpmcm9udGVuZFNldHRpbmdzKSk7CiAgICAgKCpzZXR0aW5ncyktPnNldFN0cmluZygic2Vz
c2lvbiIsIG1fc2Vzc2lvblNldHRpbmdzLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKQEAgLTQyOSwx
MiArMzkyLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bWFya1RpbWVsaW5lKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9yZUxhc3RB
Y3RpdmVQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsTmFtZSkKIHsKLSAgICBzZXRTZXR0aW5nKGxh
c3RBY3RpdmVQYW5lbCwgcGFuZWxOYW1lKTsKKyAgICBtX3N0YXRlLT5zZXRTdHJpbmcoSW5zcGVj
dG9yU3RhdGU6Omxhc3RBY3RpdmVQYW5lbCwgcGFuZWxOYW1lKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIHVuc2lnbmVkKQogewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3NlYXJjaGlu
Z0Zvck5vZGUpCisgICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fc3RhdGUtPmdldEJvb2xlYW4oSW5z
cGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUpKQogICAgICAgICByZXR1cm47CiAKICAgICBO
b2RlKiBub2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwpAQCAtNDQ5LDcgKzQxMiw3IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6aGFuZGxlTW91c2VQcmVzcygpCiAgICAgaWYgKCFlbmFibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3NlYXJjaGluZ0Zvck5vZGUpOwor
ICAgIEFTU0VSVChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdG
b3JOb2RlKSk7CiAgICAgaWYgKCFtX2hpZ2hsaWdodGVkTm9kZSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC00ODgsMTIgKzQ1MSwxMSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3Rl
ZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqIGZyYW1lKQogCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKQogewotICAgIGlm
IChtX3NlYXJjaGluZ0Zvck5vZGUgPT0gZW5hYmxlZCkKKyAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9v
bGVhbihJbnNwZWN0b3JTdGF0ZTo6c2VhcmNoaW5nRm9yTm9kZSkgPT0gZW5hYmxlZCkKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fc2VhcmNoaW5nRm9yTm9kZSA9IGVuYWJsZWQ7Ci0gICAgaWYgKCFt
X3NlYXJjaGluZ0Zvck5vZGUpCisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0
ZTo6c2VhcmNoaW5nRm9yTm9kZSwgZW5hYmxlZCk7CisgICAgaWYgKCFlbmFibGVkKQogICAgICAg
ICBoaWRlSGlnaGxpZ2h0KCk7Ci0gICAgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5h
YmxlZCwgYm9vbCogbmV3U3RhdGUpCkBAIC01MDUsMTEgKzQ2Nyw3IEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0
YXRlKQogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRNb25pdG9yaW5nWEhSRW5hYmxlZChi
b29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKQogewogICAgICpuZXdTdGF0ZSA9IGVuYWJsZWQ7
Ci0gICAgaWYgKG1fbW9uaXRvcmluZ1hIUiA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9tb25pdG9yaW5nWEhSID0gZW5hYmxlZDsKLSAgICBzZXRTZXR0aW5nKG1vbml0b3JpbmdY
SFJTZXR0aW5nTmFtZSwgZW5hYmxlZCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotICAgIHVwZGF0ZUlu
c3BlY3RvclN0YXRlQ29va2llKCk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JT
dGF0ZTo6bW9uaXRvcmluZ1hIUiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6Y29ubmVjdEZyb250ZW5kKCkKQEAgLTU3Myw3ICs1MzEsNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNob3dQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKHBhbmVsID09IGxhc3RBY3RpdmVQYW5lbCkKKyAgICBpZiAo
cGFuZWwgPT0gTGFzdEFjdGl2ZVBhbmVsKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2Zyb250
ZW5kLT5zaG93UGFuZWwocGFuZWwpOwpAQCAtNjA5LDcgKzU2Nyw3IEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKCkKICAgICB1bmJpbmRBbGxSZXNvdXJjZXMo
KTsKICAgICBzdG9wVGltZWxpbmVQcm9maWxlcigpOwogCi0gICAgbV9zaG93QWZ0ZXJWaXNpYmxl
ID0gbGFzdEFjdGl2ZVBhbmVsOworICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IExhc3RBY3RpdmVQ
YW5lbDsKIAogICAgIGhpZGVIaWdobGlnaHQoKTsKIApAQCAtNjQ3LDggKzYwNSw4IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKICAgICBpZiAoIW1f
ZnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Nob3dBZnRlclZpc2libGUg
PT0gbGFzdEFjdGl2ZVBhbmVsKQotICAgICAgICBtX3Nob3dBZnRlclZpc2libGUgPSBzZXR0aW5n
KGxhc3RBY3RpdmVQYW5lbCk7CisgICAgaWYgKG1fc2hvd0FmdGVyVmlzaWJsZSA9PSBMYXN0QWN0
aXZlUGFuZWwpCisgICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IG1fc3RhdGUtPmdldFN0cmlu
ZyhJbnNwZWN0b3JTdGF0ZTo6bGFzdEFjdGl2ZVBhbmVsKTsKIAogICAgIHNob3dQYW5lbChtX3No
b3dBZnRlclZpc2libGUpOwogCkBAIC03MDYsOCArNjY0LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpyZXN0b3JlRGVidWdnZXIoKQogICAgIGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Ojppc0RlYnVnZ2VyQWx3YXlzRW5hYmxlZCgpKQogICAgICAgICBlbmFibGVEZWJ1Z2dlckZyb21G
cm9udGVuZChmYWxzZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFN0cmluZyBkZWJ1Z2dlckVuYWJs
ZWQgPSBzZXR0aW5nKGRlYnVnZ2VyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lKTsKLSAgICAgICAg
aWYgKGRlYnVnZ2VyRW5hYmxlZCA9PSAidHJ1ZSIgfHwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93
bikKKyAgICAgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmRlYnVn
Z2VyQWx3YXlzRW5hYmxlZCkgfHwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bikKICAgICAgICAg
ICAgIGVuYWJsZURlYnVnZ2VyKCk7CiAgICAgfQogI2VuZGlmCkBAIC03MTgsMTEgKzY3NSw4IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZVByb2ZpbGVyKCkKICAgICBBU1NFUlQo
bV9mcm9udGVuZCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgbV9wcm9m
aWxlckFnZW50LT5zZXRGcm9udGVuZChtX2Zyb250ZW5kLmdldCgpKTsKLSAgICBpZiAoIVNjcmlw
dFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCgpKSB7Ci0gICAgICAgIFN0cmluZyBw
cm9maWxlckVuYWJsZWRTZXR0aW5nID0gc2V0dGluZyhwcm9maWxlckFsd2F5c0VuYWJsZWRTZXR0
aW5nTmFtZSk7Ci0gICAgICAgIGlmIChwcm9maWxlckVuYWJsZWRTZXR0aW5nID09ICJ0cnVlIikK
LSAgICAgICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7Ci0gICAgfQorICAgIGlmICghU2NyaXB0UHJv
ZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNFbmFibGVkKCkgJiYgbV9zdGF0ZS0+Z2V0Qm9vbGVhbihJ
bnNwZWN0b3JTdGF0ZTo6cHJvZmlsZXJBbHdheXNFbmFibGVkKSkKKyAgICAgICAgZW5hYmxlUHJv
ZmlsZXIoKTsKICNlbmRpZgogfQogCkBAIC04OTQsNyArODQ4LDcgQEAgSW5zcGVjdG9yUmVzb3Vy
Y2UqIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFRyYWNrZWRSZXNvdXJjZSh1bnNpZ25lZCBsb25n
IGlkZW50aWYKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBp
ZiAobV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkKKyAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVh
bihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpKQogICAgICAgICByZXR1
cm4gbV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOwogCiAgICAgYm9vbCBpc01haW5S
ZXNvdXJjZSA9IG1fbWFpblJlc291cmNlICYmIG1fbWFpblJlc291cmNlLT5pZGVudGlmaWVyKCkg
PT0gaWRlbnRpZmllcjsKQEAgLTkyNSw3ICs4NzksNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciogbG9hZGVy
LAogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogICAgIGJvb2wgaXNNYWluUmVzb3VyY2Ug
PSBpc01haW5SZXNvdXJjZUxvYWRlcihsb2FkZXIsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBjYWNo
ZWRSZXNvdXJjZS0+dXJsKCkpKTsKICAgICBlbnN1cmVTZXR0aW5nc0xvYWRlZCgpOwotICAgIGlm
ICghaXNNYWluUmVzb3VyY2UgJiYgIW1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpCisgICAgaWYg
KCFpc01haW5SZXNvdXJjZSAmJiAhbV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6
cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8
SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gSW5zcGVjdG9yUmVzb3VyY2U6OmNyZWF0ZUNh
Y2hlZChtX2luc3BlY3RlZFBhZ2UtPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIo
KSwgbG9hZGVyLCBjYWNoZWRSZXNvdXJjZSk7CkBAIC05NDksNyArOTAzLDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLAogCiAgICAgYm9vbCBpc01haW5SZXNvdXJjZSA9IGlzTWFpblJlc291cmNl
TG9hZGVyKGxvYWRlciwgcmVxdWVzdC51cmwoKSk7CiAgICAgZW5zdXJlU2V0dGluZ3NMb2FkZWQo
KTsKLSAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVk
KQorICAgIGlmICghaXNNYWluUmVzb3VyY2UgJiYgIW1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVj
dG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IEluc3BlY3RvclJlc291cmNl
OjpjcmVhdGUoaWRlbnRpZmllciwgbG9hZGVyLCByZXF1ZXN0LnVybCgpKTsKQEAgLTExMzYsMTAg
KzEwOTAsMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5
WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGkKICAgICBpZiAoIWVuYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fbW9uaXRvcmluZ1hIUikKKyAgICBpZiAobV9z
dGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6bW9uaXRvcmluZ1hIUikpCiAgICAgICAg
IGFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9n
TWVzc2FnZUxldmVsLCAiWEhSIGZpbmlzaGVkIGxvYWRpbmc6IFwiIiArIHVybCArICJcIi4iLCBz
ZW5kTGluZU51bWJlciwgc2VuZFVSTCk7CiAKLSAgICBpZiAoIW1fcmVzb3VyY2VUcmFja2luZ0Vu
YWJsZWQpCisgICAgaWYgKCFtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNv
dXJjZVRyYWNraW5nRW5hYmxlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEluc3BlY3RvclJl
c291cmNlKiByZXNvdXJjZSA9IG1fcmVzb3VyY2VzLmdldChpZGVudGlmaWVyKS5nZXQoKTsKQEAg
LTExNTQsNyArMTEwOCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzb3VyY2VSZXRy
aWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpCiAKIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZykKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9y
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZCkKKyAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9zdGF0ZS0+
Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBJbnNwZWN0b3JSZXNvdXJjZSogcmVzb3VyY2UgPSBtX3Jlc291
cmNlcy5nZXQoaWRlbnRpZmllcikuZ2V0KCk7CkBAIC0xMTczLDggKzExMjcsNyBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnNldFJlc291cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxl
KQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKLSAgICBt
X3Jlc291cmNlVHJhY2tpbmdFbmFibGVkID0gZW5hYmxlOwotICAgIHVwZGF0ZUluc3BlY3RvclN0
YXRlQ29va2llKCk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVz
b3VyY2VUcmFja2luZ0VuYWJsZWQsIGVuYWJsZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoYm9vbCBlbmFibGUsIGJvb2wgYWx3YXlz
LCBib29sKiBuZXdTdGF0ZSkKQEAgLTExODIsMTggKzExMzUsMTYgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzZXRSZXNvdXJjZVRyYWNraW5nRW5hYmxlZChib29sIGVuYWJsZSwgYm9vbCBh
bHdheXMsIGIKICAgICAqbmV3U3RhdGUgPSBlbmFibGU7CiAKICAgICBpZiAoYWx3YXlzKQotICAg
ICAgICBzZXRTZXR0aW5nKHJlc291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkU2V0dGluZ05hbWUs
IGVuYWJsZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworICAgICAgICBtX3N0YXRlLT5zZXRCb29sZWFu
KEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5hYmxlZCwgZW5hYmxlKTsK
IAotICAgIGlmIChtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkID09IGVuYWJsZSkKKyAgICBpZiAo
bV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VUcmFja2luZ0VuYWJs
ZWQpID09IGVuYWJsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1faW5zcGVjdGVk
UGFnZSk7Ci0gICAgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCA9IGVuYWJsZTsKKyAgICBtX3N0
YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCwg
ZW5hYmxlKTsKIAogICAgIGlmIChlbmFibGUpCiAgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+bWFp
bkZyYW1lKCktPm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+c2NoZWR1bGVSZWZyZXNoKHRydWUpOwot
Ci0gICAgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjplbnN1cmVTZXR0aW5nc0xvYWRlZCgpCkBAIC0xMjAyLDE1ICsxMTUzLDEwIEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5zdXJlU2V0dGluZ3NMb2FkZWQoKQogICAgICAg
ICByZXR1cm47CiAgICAgbV9zZXR0aW5nc0xvYWRlZCA9IHRydWU7CiAKLSAgICBTdHJpbmcgcmVz
b3VyY2VUcmFja2luZ0Fsd2F5c0VuYWJsZWQgPSBzZXR0aW5nKHJlc291cmNlVHJhY2tpbmdBbHdh
eXNFbmFibGVkU2V0dGluZ05hbWUpOwotICAgIGlmIChyZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5h
YmxlZCA9PSAidHJ1ZSIpCi0gICAgICAgIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQgPSB0cnVl
OwotCi0gICAgU3RyaW5nIG1vbml0b3JpbmdYSFJBbHdheXNFbmFibGVkID0gc2V0dGluZyhtb25p
dG9yaW5nWEhSU2V0dGluZ05hbWUpOwotICAgIGlmIChtb25pdG9yaW5nWEhSQWx3YXlzRW5hYmxl
ZCA9PSAidHJ1ZSIpCi0gICAgICAgIG1fbW9uaXRvcmluZ1hIUiA9IHRydWU7CisgICAgbV9zdGF0
ZS0+bG9hZEZyb21TZXR0aW5ncygpOwogCi0gICAgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUo
KTsKKyAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cmVzb3VyY2VU
cmFja2luZ0Fsd2F5c0VuYWJsZWQpKQorICAgICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3Bl
Y3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCwgdHJ1ZSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKCkKQEAgLTEyMjUsNyArMTE3
MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKCkK
ICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9mcm9udGVuZC0+dGltZWxpbmVQcm9maWxl
cldhc1N0YXJ0ZWQoKTsKIAotICAgIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKCk7CisgICAg
bV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJs
ZWQsIHRydWUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVBy
b2ZpbGVyKCkKQEAgLTEyNDAsNyArMTE4Niw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c3RvcFRpbWVsaW5lUHJvZmlsZXIoKQogICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zy
b250ZW5kLT50aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCgpOwogCi0gICAgdXBkYXRlSW5zcGVj
dG9yU3RhdGVDb29raWUoKTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRl
Ojp0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCwgZmFsc2UpOwogfQogCiAjaWYgRU5BQkxFKFdPUktF
UlMpCkBAIC0xNjEyLDE0ICsxNTU4LDE0IEBAIGJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6cHJv
ZmlsZXJFbmFibGVkKCkgY29uc3QKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJv
ZmlsZXIoYm9vbCBhbHdheXMsIGJvb2wgc2tpcFJlY29tcGlsZSkKIHsKICAgICBpZiAoYWx3YXlz
KQotICAgICAgICBzZXRTZXR0aW5nKHByb2ZpbGVyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lLCAi
dHJ1ZSIpOworICAgICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpwcm9m
aWxlckFsd2F5c0VuYWJsZWQsIHRydWUpOwogICAgIG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlKHNr
aXBSZWNvbXBpbGUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVQcm9m
aWxlcihib29sIGFsd2F5cykKIHsKICAgICBpZiAoYWx3YXlzKQotICAgICAgICBzZXRTZXR0aW5n
KHByb2ZpbGVyQWx3YXlzRW5hYmxlZFNldHRpbmdOYW1lLCAiZmFsc2UiKTsKKyAgICAgICAgbV9z
dGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6cHJvZmlsZXJBbHdheXNFbmFibGVkLCBm
YWxzZSk7CiAgICAgbV9wcm9maWxlckFnZW50LT5kaXNhYmxlKCk7CiB9CiAjZW5kaWYKQEAgLTE2
MjksNyArMTU3NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdnZXJG
cm9tRnJvbnRlbmQoYm9vbCBhbHdheXMpCiB7CiAgICAgQVNTRVJUKCFkZWJ1Z2dlckVuYWJsZWQo
KSk7CiAgICAgaWYgKGFsd2F5cykKLSAgICAgICAgc2V0U2V0dGluZyhkZWJ1Z2dlckFsd2F5c0Vu
YWJsZWRTZXR0aW5nTmFtZSwgInRydWUiKTsKKyAgICAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJ
bnNwZWN0b3JTdGF0ZTo6ZGVidWdnZXJBbHdheXNFbmFibGVkLCB0cnVlKTsKIAogICAgIEFTU0VS
VChtX2luc3BlY3RlZFBhZ2UpOwogCkBAIC0xNjYwLDcgKzE2MDYsNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRpc2FibGVEZWJ1Z2dlcihib29sIGFsd2F5cykKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKGFsd2F5cykKLSAgICAgICAgc2V0U2V0dGluZyhkZWJ1Z2dlckFsd2F5c0Vu
YWJsZWRTZXR0aW5nTmFtZSwgImZhbHNlIik7CisgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6OmRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwgZmFsc2UpOwogCiAgICAgQVNT
RVJUKG1faW5zcGVjdGVkUGFnZSk7CiAKQEAgLTE3NzgsMTIgKzE3MjQsMTQgQEAgU3RyaW5nIElu
c3BlY3RvckNvbnRyb2xsZXI6OmJyZWFrcG9pbnRzU2V0dGluZ0tleSgpCiAKIFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckNvbnRyb2xsZXI6OmxvYWRCcmVha3BvaW50cygpCiB7
Ci0gICAgcmV0dXJuIEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oc2V0dGluZyhicmVha3BvaW50
c1NldHRpbmdLZXkoKSkpOworICAgIFN0cmluZyBqc29uU3RyaW5nOworICAgIG1fY2xpZW50LT5w
b3B1bGF0ZVNldHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5KCksICZqc29uU3RyaW5nKTsKKyAg
ICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihqc29uU3RyaW5nKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJyZWFrcG9pbnRzKQogewotICAgIHNldFNldHRpbmcoYnJlYWtwb2ludHNTZXR0
aW5nS2V5KCksIGJyZWFrcG9pbnRzLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9jbGllbnQtPnN0
b3JlU2V0dGluZyhicmVha3BvaW50c1NldHRpbmdLZXkoKSwgYnJlYWtwb2ludHMtPnRvSlNPTlN0
cmluZygpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmgKaW5kZXggYjIwODdiYS4uYWZmNmQ0ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaApAQCAtNjksNiArNjksNyBAQCBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKIGNsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ7
CiBjbGFzcyBJbnNwZWN0b3JSZXNvdXJjZTsKK2NsYXNzIEluc3BlY3RvclN0YXRlOwogY2xhc3Mg
SW5zcGVjdG9yU3RvcmFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDsKIGNs
YXNzIEluc3BlY3RvclZhbHVlOwpAQCAtMTAyLDYgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gPiBEYXRh
YmFzZVJlc291cmNlc01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW5zcGVj
dG9yRE9NU3RvcmFnZVJlc291cmNlPiA+IERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA7CiAKKyAgICBz
dGF0aWMgY29uc3QgY2hhciogY29uc3QgTGFzdEFjdGl2ZVBhbmVsOwogICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBDb25zb2xlUGFuZWw7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IEVsZW1lbnRzUGFuZWw7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFByb2ZpbGVzUGFu
ZWw7CkBAIC0xMjIsMTMgKzEyNCwxMSBAQCBwdWJsaWM6CiAgICAgUGFnZSogaW5zcGVjdGVkUGFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQogICAgIHZvaWQgcmVsb2FkUGFn
ZSgpOwogCi0gICAgU3RyaW5nIHNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OwotICAg
IHZvaWQgc2V0U2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7
CiAgICAgdm9pZCBzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdz
KTsKICAgICB2b2lkIHNhdmVTZXNzaW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBnZXRTZXR0aW5ncyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiopOwogCi0gICAgdm9pZCByZXN0
b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdGUp
OworICAgIHZvaWQgcmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcm
IGluc3BlY3RvckNvb2tpZSk7CiAKICAgICB2b2lkIGluc3BlY3QoTm9kZSopOwogICAgIHZvaWQg
aGlnaGxpZ2h0KE5vZGUqKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
bGVhckNvbnNvbGVNZXNzYWdlcygpOwogICAgIGNvbnN0IFZlY3RvcjxPd25QdHI8Q29uc29sZU1l
c3NhZ2U+ID4mIGNvbnNvbGVNZXNzYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc29sZU1lc3Nh
Z2VzOyB9CiAKLSAgICBib29sIHNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX3NlYXJjaGluZ0Zvck5vZGU7IH0KKyAgICBib29sIHNlYXJjaGluZ0Zvck5vZGVJblBhZ2Uo
KSBjb25zdDsKICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKICAgICB2b2lkIGhhbmRsZU1vdXNlUHJl
c3MoKTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UmVzb3Vy
Y2VUcmFja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKTsKICAgICB2b2lkIHNldFJlc291cmNlVHJh
Y2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCBhbHdheXMsIGJvb2wqIG5ld1N0YXRlKTsK
LSAgICBib29sIHJlc291cmNlVHJhY2tpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9yZXNv
dXJjZVRyYWNraW5nRW5hYmxlZDsgfQorICAgIGJvb2wgcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQo
KSBjb25zdDsKIAogICAgIHZvaWQgZW5zdXJlU2V0dGluZ3NMb2FkZWQoKTsKIApAQCAtMjcwLDEw
ICsyNzAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVP
bkxvYWQoKTsKICAgICB2b2lkIHNldEluc3BlY3RvckV4dGVuc2lvbkFQSShjb25zdCBTdHJpbmcm
IHNvdXJjZSk7CiAKLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBpbnNwZWN0b3JTdGFydHNBdHRh
Y2hlZFNldHRpbmdOYW1lKCk7CisgICAgYm9vbCBpbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpOwor
ICAgIHZvaWQgc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoYm9vbCk7CisgICAgdm9pZCBzZXRJ
bnNwZWN0b3JBdHRhY2hlZEhlaWdodChsb25nIGhlaWdodCk7CisgICAgaW50IGluc3BlY3RvckF0
dGFjaGVkSGVpZ2h0KCkgY29uc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVs
dEF0dGFjaGVkSGVpZ2h0OwogCiBwcml2YXRlOgotICAgIHZvaWQgdXBkYXRlSW5zcGVjdG9yU3Rh
dGVDb29raWUoKTsKICAgICB2b2lkIGdldEluc3BlY3RvclN0YXRlKFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+KiBzdGF0ZSk7CiAKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKQEAg
LTM0NSw2ICszNDksNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3JTdG9yYWdlQWdl
bnQ+IG1fc3RvcmFnZUFnZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JDU1NTdG9yZT4gbV9jc3NT
dG9yZTsKICAgICBPd25QdHI8SW5zcGVjdG9yVGltZWxpbmVBZ2VudD4gbV90aW1lbGluZUFnZW50
OworICAgIE93blB0cjxJbnNwZWN0b3JTdGF0ZT4gbV9zdGF0ZTsKIAogI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgT3duUHRyPEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudD4gbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQ7CkBAIC0zNzEsMTAgKzM3Niw3IEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtX3Nlc3Npb25TZXR0aW5nczsKICNl
bmRpZgogICAgIHVuc2lnbmVkIG1fZ3JvdXBMZXZlbDsKLSAgICBib29sIG1fc2VhcmNoaW5nRm9y
Tm9kZTsKLSAgICBib29sIG1fbW9uaXRvcmluZ1hIUjsKICAgICBDb25zb2xlTWVzc2FnZSogbV9w
cmV2aW91c01lc3NhZ2U7Ci0gICAgYm9vbCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkOwogICAg
IGJvb2wgbV9zZXR0aW5nc0xvYWRlZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZD4gbV9p
bnNwZWN0b3JCYWNrZW5kOwogICAgIE93blB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKaW5kZXggNzc2MTZkYS4uNDgxMmIyYSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5jcHAKQEAgLTQ3LDcgKzQ3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lID0gImluc3BlY3Rv
ckF0dGFjaGVkSGVpZ2h0IjsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRI
ZWlnaHQgPSAzMDA7CiBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0g
MjUwLjBmOwogc3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0g
MC43NWY7CkBAIC0xMDgsNyArMTA3LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7CiAgICAg
dW5zaWduZWQgdG90YWxIZWlnaHQgPSBtX2Zyb250ZW5kUGFnZS0+bWFpbkZyYW1lKCktPnZpZXco
KS0+dmlzaWJsZUhlaWdodCgpICsgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdl
KCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKICAgICB1bnNpZ25lZCBh
dHRhY2hlZEhlaWdodCA9IGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0LCB0
b3RhbEhlaWdodCk7Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRTZXR0aW5nKGluc3Bl
Y3RvckF0dGFjaGVkSGVpZ2h0TmFtZSwgU3RyaW5nOjpudW1iZXIoYXR0YWNoZWRIZWlnaHQpKTsK
KyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGF0
dGFjaGVkSGVpZ2h0KTsKICAgICBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdo
dCk7CiB9CiAKQEAgLTEzNCwxMCArMTMzLDkgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dExvY2FsOjpzZXRBdHRhY2hlZFdpbmRvdyhib29sIGF0dGFjaGVkKQogdm9pZCBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsOjpyZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHQoKQogewogICAg
IHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmlu
c3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotICAg
IFN0cmluZyBhdHRhY2hlZEhlaWdodCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0dGluZyhp
bnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOworICAgIGludCBhdHRhY2hlZEhlaWdodCA9IG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKTsKICAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOwotICAgIGludCBoZWlnaHQgPSBhdHRhY2hlZEhlaWdodC50b0ludCgm
c3VjY2Vzcyk7Ci0gICAgdW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihoZWlnaHQpIDogZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OworICAgIHVu
c2lnbmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
YXR0YWNoZWRIZWlnaHQpIDogZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OwogICAgIAogICAgIC8vIFRo
aXMgY2FsbCBtaWdodCBub3QgZ28gdGhyb3VnaCAoaWYgdGhlIHdpbmRvdyBzdGFydHMgb3V0IGRl
dGFjaGVkKSwgYnV0IGlmIHRoZSB3aW5kb3cgaXMgaW5pdGlhbGx5IGNyZWF0ZWQgYXR0YWNoZWQs
CiAgICAgLy8gSW5zcGVjdG9yQ29udHJvbGxlcjo6YXR0YWNoV2luZG93IGlzIG5ldmVyIGNhbGxl
ZCwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gc2V0IHRoZSBhdHRhY2hlZFdpbmRvd0hlaWdo
dC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kNDhlNmMxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3RhdGUuY3BwCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9y
Q2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnNwZWN0b3JTdGF0ZTo6SW5z
cGVjdG9yU3RhdGUoSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGll
bnQpCit7CisgICAgcmVnaXN0ZXJCb29sZWFuKG1vbml0b3JpbmdYSFIsIGZhbHNlLCAibW9uaXRv
cmluZ1hIUiIsICJ4aHJNb25pdG9yIik7CisgICAgcmVnaXN0ZXJCb29sZWFuKHJlc291cmNlVHJh
Y2tpbmdFbmFibGVkLCBmYWxzZSwgInJlc291cmNlVHJhY2tpbmdFbmFibGVkIiwgKGNvbnN0IGNo
YXIqKTApOworICAgIHJlZ2lzdGVyQm9vbGVhbihyZXNvdXJjZVRyYWNraW5nQWx3YXlzRW5hYmxl
ZCwgZmFsc2UsIChjb25zdCBjaGFyKikwLCAicmVzb3VyY2VUcmFja2luZ0VuYWJsZWQiKTsKKyAg
ICByZWdpc3RlckJvb2xlYW4odGltZWxpbmVQcm9maWxlckVuYWJsZWQsIGZhbHNlLCAidGltZWxp
bmVQcm9maWxlckVuYWJsZWQiLCAoY29uc3QgY2hhciopMCk7CisgICAgcmVnaXN0ZXJCb29sZWFu
KHNlYXJjaGluZ0Zvck5vZGUsIGZhbHNlLCAic2VhcmNoaW5nRm9yTm9kZUVuYWJsZWQiLCAoY29u
c3QgY2hhciopMCk7CisgICAgcmVnaXN0ZXJCb29sZWFuKHByb2ZpbGVyQWx3YXlzRW5hYmxlZCwg
ZmFsc2UsIChjb25zdCBjaGFyKikwLCAicHJvZmlsZXJFbmFibGVkIik7CisgICAgcmVnaXN0ZXJT
dHJpbmcoZnJvbnRlbmRTZXR0aW5ncywgIiIsIChjb25zdCBjaGFyKikwLCAiZnJvbnRlbmRTZXR0
aW5ncyIpOworICAgIHJlZ2lzdGVyQm9vbGVhbihkZWJ1Z2dlckFsd2F5c0VuYWJsZWQsIGZhbHNl
LCAoY29uc3QgY2hhciopMCwgImRlYnVnZ2VyRW5hYmxlZCIpOworICAgIHJlZ2lzdGVyU3RyaW5n
KGxhc3RBY3RpdmVQYW5lbCwgSW5zcGVjdG9yQ29udHJvbGxlcjo6TGFzdEFjdGl2ZVBhbmVsLCAo
Y29uc3QgY2hhciopMCwgImxhc3RBY3RpdmVQYW5lbCIpOworICAgIHJlZ2lzdGVyQm9vbGVhbihp
bnNwZWN0b3JTdGFydHNBdHRhY2hlZCwgdHJ1ZSwgKGNvbnN0IGNoYXIqKTAsICJJbnNwZWN0b3JT
dGFydHNBdHRhY2hlZCIpOworICAgIHJlZ2lzdGVyTG9uZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdo
dCwgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVmYXVsdEF0dGFjaGVkSGVpZ2h0LCAoY29uc3QgY2hh
ciopMCwgImluc3BlY3RvckF0dGFjaGVkSGVpZ2h0Iik7CisgICAgcmVnaXN0ZXJMb25nKHBhdXNl
T25FeGNlcHRpb25zU3RhdGUsIDAsICJwYXVzZU9uRXhjZXB0aW9uc1N0YXRlIiwgKGNvbnN0IGNo
YXIqKTApOworfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjpyZXN0b3JlRnJvbUluc3BlY3RvckNv
b2tpZShjb25zdCBTdHJpbmcmIGpzb24pCit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBq
c29uVmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGpzb24pOworICAgIGlmICghanNv
blZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBq
c29uT2JqZWN0ID0ganNvblZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghanNvbk9iamVjdCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGkg
PSBqc29uT2JqZWN0LT5iZWdpbigpOyBpICE9IGpzb25PYmplY3QtPmVuZCgpOyArK2kpIHsKKyAg
ICAgICAgSW5zcGVjdG9yUHJvcGVydHlJZCBpZCA9IChJbnNwZWN0b3JQcm9wZXJ0eUlkKWktPmZp
cnN0LnRvSW50KCk7CisgICAgICAgIEFTU0VSVChpZCA+IDAgJiYgaWQgPCBsYXN0UHJvcGVydHlJ
ZCk7CisgICAgICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBqID0gbV9wcm9wZXJ0aWVzLmZpbmQo
aWQpOworICAgICAgICBBU1NFUlQoaiAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpOworICAgICAgICBB
U1NFUlQoai0+c2Vjb25kLm1fdmFsdWUtPnR5cGUoKSA9PSBpLT5zZWNvbmQtPnR5cGUoKSk7Cisg
ICAgICAgIGotPnNlY29uZC5tX3ZhbHVlID0gaS0+c2Vjb25kOworICAgIH0KK30KKworUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0YXRlOjpnZW5lcmF0ZVN0YXRlT2JqZWN0
Rm9yRnJvbnRlbmQoKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0YXRlT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBmb3IgKFByb3BlcnR5TWFwOjppdGVy
YXRvciBpID0gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKGktPnNlY29uZC5tX3N0YXRlTmFtZS5sZW5ndGgoKSkKKyAgICAg
ICAgICAgIHN0YXRlT2JqZWN0LT5zZXRWYWx1ZShpLT5zZWNvbmQubV9zdGF0ZU5hbWUsIGktPnNl
Y29uZC5tX3ZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRlT2JqZWN0LnJlbGVhc2UoKTsK
K30KKwordm9pZCBJbnNwZWN0b3JTdGF0ZTo6bG9hZEZyb21TZXR0aW5ncygpCit7CisgICAgZm9y
IChQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVydGllcy5iZWdpbigpOyBpICE9IG1f
cHJvcGVydGllcy5lbmQoKTsgKytpKSB7CisgICAgICAgIGlmIChpLT5zZWNvbmQubV9wcmVmZXJl
bmNlTmFtZS5sZW5ndGgoKSkgeworICAgICAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICAg
ICAgbV9jbGllbnQtPnBvcHVsYXRlU2V0dGluZyhpLT5zZWNvbmQubV9wcmVmZXJlbmNlTmFtZSwg
JnZhbHVlKTsKKyAgICAgICAgICAgIHN3aXRjaCAoaS0+c2Vjb25kLm1fdmFsdWUtPnR5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JWYWx1ZTo6VHlwZUJvb2xlYW46CisgICAgICAg
ICAgICAgICAgaS0+c2Vjb25kLm1fdmFsdWUgPSBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUo
dmFsdWUgPT0gInRydWUiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgSW5zcGVjdG9yVmFsdWU6OlR5cGVTdHJpbmc6CisgICAgICAgICAgICAgICAgaS0+c2Vjb25k
Lm1fdmFsdWUgPSBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluc3BlY3RvclZhbHVlOjpUeXBlTnVtYmVyOgor
ICAgICAgICAgICAgICAgIGktPnNlY29uZC5tX3ZhbHVlID0gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6
Y3JlYXRlKChkb3VibGUpdmFsdWUudG9JbnQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgSW5zcGVjdG9yU3RhdGU6OnVwZGF0ZUNvb2tpZSgpCit7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gY29va2llT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBmb3IgKFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGkg
IT0gbV9wcm9wZXJ0aWVzLmVuZCgpOyArK2kpCisgICAgICAgIGNvb2tpZU9iamVjdC0+c2V0VmFs
dWUoU3RyaW5nOjpudW1iZXIoaS0+Zmlyc3QpLCBpLT5zZWNvbmQubV92YWx1ZSk7CisgICAgbV9j
bGllbnQtPnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKGNvb2tpZU9iamVjdC0+dG9KU09OU3Ry
aW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjpzZXRWYWx1ZShJbnNwZWN0b3JQcm9w
ZXJ0eUlkIGlkLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5n
JiBzdHJpbmdWYWx1ZSkKK3sKKyAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVy
dGllcy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpOworICAg
IGktPnNlY29uZC5tX3ZhbHVlID0gdmFsdWU7CisgICAgaWYgKGktPnNlY29uZC5tX3ByZWZlcmVu
Y2VOYW1lLmxlbmd0aCgpKQorICAgICAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGktPnNlY29u
ZC5tX3ByZWZlcmVuY2VOYW1lLCBzdHJpbmdWYWx1ZSk7CisgICAgdXBkYXRlQ29va2llKCk7Cit9
CisKK2Jvb2wgSW5zcGVjdG9yU3RhdGU6OmdldEJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBp
ZCkKK3sKKyAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVydGllcy5maW5kKGlk
KTsKKyAgICBBU1NFUlQoaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpOworICAgIGJvb2wgdmFsdWUg
PSBmYWxzZTsKKyAgICBpLT5zZWNvbmQubV92YWx1ZS0+YXNCb29sZWFuKCZ2YWx1ZSk7CisgICAg
cmV0dXJuIHZhbHVlOworfQorCitTdHJpbmcgSW5zcGVjdG9yU3RhdGU6OmdldFN0cmluZyhJbnNw
ZWN0b3JQcm9wZXJ0eUlkIGlkKQoreworICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpID0gbV9w
cm9wZXJ0aWVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5lbmQoKSk7
CisgICAgU3RyaW5nIHZhbHVlOworICAgIGktPnNlY29uZC5tX3ZhbHVlLT5hc1N0cmluZygmdmFs
dWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworbG9uZyBJbnNwZWN0b3JTdGF0ZTo6Z2V0TG9u
ZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIGlkKQoreworICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBp
ID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpICE9IG1fcHJvcGVydGllcy5l
bmQoKSk7CisgICAgbG9uZyB2YWx1ZSA9IDA7CisgICAgaS0+c2Vjb25kLm1fdmFsdWUtPmFzTnVt
YmVyKCZ2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIEluc3BlY3RvclN0YXRl
OjpyZWdpc3RlckJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBib29sIHZh
bHVlLCBjb25zdCBTdHJpbmcmIHN0YXRlTmFtZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFt
ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SWQsIFByb3BlcnR5OjpjcmVhdGUo
SW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKSwgc3RhdGVOYW1lLCBwcmVmZXJlbmNl
TmFtZSkpOworfQorCit2b2lkIEluc3BlY3RvclN0YXRlOjpyZWdpc3RlclN0cmluZyhJbnNwZWN0
b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmlu
ZyYgc3RhdGVOYW1lLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKQoreworICAgIG1fcHJv
cGVydGllcy5zZXQocHJvcGVydHlJZCwgUHJvcGVydHk6OmNyZWF0ZShJbnNwZWN0b3JTdHJpbmc6
OmNyZWF0ZSh2YWx1ZSksIHN0YXRlTmFtZSwgcHJlZmVyZW5jZU5hbWUpKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JTdGF0ZTo6cmVnaXN0ZXJMb25nKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJ
ZCwgbG9uZyB2YWx1ZSwgY29uc3QgU3RyaW5nJiBzdGF0ZU5hbWUsIGNvbnN0IFN0cmluZyYgcHJl
ZmVyZW5jZU5hbWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlkLCBQcm9wZXJ0
eTo6Y3JlYXRlKEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSgoZG91YmxlKXZhbHVlKSwgc3Rh
dGVOYW1lLCBwcmVmZXJlbmNlTmFtZSkpOworfQorCitJbnNwZWN0b3JTdGF0ZTo6UHJvcGVydHkg
SW5zcGVjdG9yU3RhdGU6OlByb3BlcnR5OjpjcmVhdGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYgc3RhdGVOYW1lLCBjb25zdCBTdHJpbmcmIHByZWZlcmVu
Y2VOYW1lKQoreworICAgIFByb3BlcnR5IHByb3BlcnR5OworICAgIHByb3BlcnR5Lm1fdmFsdWUg
PSB2YWx1ZTsKKyAgICBwcm9wZXJ0eS5tX3N0YXRlTmFtZSA9IHN0YXRlTmFtZTsKKyAgICBwcm9w
ZXJ0eS5tX3ByZWZlcmVuY2VOYW1lID0gcHJlZmVyZW5jZU5hbWU7CisgICAgcmV0dXJuIHByb3Bl
cnR5OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZWM2OWQ4MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0YXRlLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3Rv
clN0YXRlX2gKKyNkZWZpbmUgSW5zcGVjdG9yU3RhdGVfaAorCisjaW5jbHVkZSAiSW5zcGVjdG9y
VmFsdWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CisKK2NsYXNzIEluc3BlY3RvclN0YXRlIHsK
K3B1YmxpYzoKKyAgICBlbnVtIEluc3BlY3RvclByb3BlcnR5SWQgeworICAgICAgICBtb25pdG9y
aW5nWEhSID0gMSwKKyAgICAgICAgcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQsCisgICAgICAgIHJl
c291cmNlVHJhY2tpbmdBbHdheXNFbmFibGVkLAorICAgICAgICB0aW1lbGluZVByb2ZpbGVyRW5h
YmxlZCwKKyAgICAgICAgc2VhcmNoaW5nRm9yTm9kZSwKKyAgICAgICAgcHJvZmlsZXJBbHdheXNF
bmFibGVkLAorICAgICAgICBmcm9udGVuZFNldHRpbmdzLAorICAgICAgICBkZWJ1Z2dlckFsd2F5
c0VuYWJsZWQsCisgICAgICAgIGxhc3RBY3RpdmVQYW5lbCwKKyAgICAgICAgaW5zcGVjdG9yU3Rh
cnRzQXR0YWNoZWQsCisgICAgICAgIGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0LAorICAgICAgICBw
YXVzZU9uRXhjZXB0aW9uc1N0YXRlLAorICAgICAgICBsYXN0UHJvcGVydHlJZAorICAgIH07CisK
KyAgICBJbnNwZWN0b3JTdGF0ZShJbnNwZWN0b3JDbGllbnQqIGNsaWVudCk7CisKKyAgICBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2VuZXJhdGVTdGF0ZU9iamVjdEZvckZyb250ZW5kKCk7
CisgICAgdm9pZCByZXN0b3JlRnJvbUluc3BlY3RvckNvb2tpZShjb25zdCBTdHJpbmcmIGpzb25T
dHJpbmcpOworICAgIHZvaWQgbG9hZEZyb21TZXR0aW5ncygpOworCisgICAgYm9vbCBnZXRCb29s
ZWFuKEluc3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCk7CisgICAgU3RyaW5nIGdldFN0cmlu
ZyhJbnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQpOworICAgIGxvbmcgZ2V0TG9uZyhJbnNw
ZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQpOworCisgICAgdm9pZCBzZXRCb29sZWFuKEluc3Bl
Y3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgYm9vbCB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9wZXJ0
eUlkLCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpLCB2YWx1ZSA/ICJ0cnVlIiA6
ICJmYWxzZSIpOyB9CisgICAgdm9pZCBzZXRTdHJpbmcoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9w
ZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKSB7IHNldFZhbHVlKHByb3BlcnR5SWQsIEluc3Bl
Y3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKSwgdmFsdWUpOyB9CisgICAgdm9pZCBzZXRMb25nKElu
c3BlY3RvclByb3BlcnR5SWQgcHJvcGVydHlJZCwgbG9uZyB2YWx1ZSkgeyBzZXRWYWx1ZShwcm9w
ZXJ0eUlkLCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoKGRvdWJsZSl2YWx1ZSksIFN0cmlu
Zzo6bnVtYmVyKHZhbHVlKSk7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZSgp
OworICAgIHZvaWQgc2V0VmFsdWUoSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlkLCBQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSk7
CisKKyAgICBzdHJ1Y3QgUHJvcGVydHkgeworICAgICAgICBzdGF0aWMgUHJvcGVydHkgY3JlYXRl
KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIHN0YXRlTmFt
ZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlTmFtZSk7CisgICAgICAgIFN0cmluZyBtX3N0YXRl
TmFtZTsKKyAgICAgICAgU3RyaW5nIG1fcHJlZmVyZW5jZU5hbWU7CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gbV92YWx1ZTsKKyAgICB9OworICAgIHR5cGVkZWYgSGFzaE1hcDxsb25n
LCBQcm9wZXJ0eT4gUHJvcGVydHlNYXA7CisgICAgUHJvcGVydHlNYXAgbV9wcm9wZXJ0aWVzOwor
CisgICAgdm9pZCByZWdpc3RlckJvb2xlYW4oSW5zcGVjdG9yUHJvcGVydHlJZCBwcm9wZXJ0eUlk
LCBib29sIHZhbHVlLCBjb25zdCBTdHJpbmcmIHN0YXRlTmFtZSwgY29uc3QgU3RyaW5nJiBwcmVm
ZXJlbmNlTmFtZSk7CisgICAgdm9pZCByZWdpc3RlclN0cmluZyhJbnNwZWN0b3JQcm9wZXJ0eUlk
IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgc3RhdGVOYW1l
LCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKTsKKyAgICB2b2lkIHJlZ2lzdGVyTG9uZyhJ
bnNwZWN0b3JQcm9wZXJ0eUlkIHByb3BlcnR5SWQsIGxvbmcgdmFsdWUsIGNvbnN0IFN0cmluZyYg
c3RhdGVOYW1lLCBjb25zdCBTdHJpbmcmIHByZWZlcmVuY2VOYW1lKTsKKworICAgIEluc3BlY3Rv
ckNsaWVudCogbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JTdGF0ZV9oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9D
aGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA1ZDhkNzYyLi45ODY1YTFhIDEw
MDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI0IEBACisyMDEwLTEwLTE0ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xv
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnNwZWN0b3Igc2V0dGluZ3MvcHJvcGVydGllcy9zdGF0
ZXMgbWFuYWdlbWVudAorICAgICAgICBzaG91bGQgYmUgZXh0cmFjdGVkIGludG8gc2VwYXJhdGUg
Y2xhc3MuCisKKyAgICAgICAgV2UgaGF2ZSBhIGxvdCBvZiBmbGFncy92YWx1ZXMgaW4gSW5zcGVj
dG9yQ29udHJvbGxlci4KKyAgICAgICAgU29tZSBmbGFncyBhcmUgcGVyc2lzdGluZyBpbnRvIHBy
b2ZpbGUuCisgICAgICAgIE90aGVycyBhcmUgcGFydCBvZiBpbnNwZWN0b3Igc3RhdGUgZm9yIGZy
b250ZW5kLgorICAgICAgICBBbGwgdGhlc2UgZmxhZ3Mgc2hvdWxkIGtlZXAgdGhlaXIgdmFsdWVz
IGFmdGVyIG5hdmlnYXRpb24uCisgICAgICAgIEl0J2QgYmUgYmV0dGVyIHRvIGV4dHJhY3QgdGhl
c2UgZmxhZ3MvdmFsdWVzIGludG8gc2VwYXJhdGUKKyAgICAgICAgY2xhc3Mgd2hpY2ggd2lsbCBj
YXJlIGFib3V0IHRoZWlycyBsaWZldGltZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyNzUKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5tbToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJv
bGxlciBzaG93V2luZG93Ol0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9s
bGVyIGF0dGFjaF0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGRl
dGFjaF0pOgorCiAyMDEwLTEwLTEzICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBh
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tIGIvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0KaW5kZXggZDRkMDIxMy4u
ZDBjNmM3OCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQubW0KKysrIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQubW0KQEAgLTM1OCw4ICszNTgsOCBAQCB2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0CiAgICAgX3Zpc2libGUgPSBZRVM7CiAgICAg
CiAgICAgLy8gSWYgbm8gcHJlZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0IHRvIGFuIGF0dGFjaGVk
IHdpbmRvdy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGluc3BlY3RvciBMYXlvdXRUZXN0cy4KLSAg
ICBTdHJpbmcgc2hvdWxkQXR0YWNoID0gW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPnNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3Rh
cnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpKTsKLSAgICBfc2hvdWxkQXR0YWNoID0gc2hvdWxkQXR0
YWNoICE9ICJmYWxzZSI7CisgICAgLy8gRklYTUU6IFRoaXMgZmxhZyBjYW4gYmUgZmV0Y2hlZCBk
aXJlY3RseSBmcm9tIHRoZSBmbGFncyBzdG9yYWdlLgorICAgIF9zaG91bGRBdHRhY2ggPSBbX2lu
c3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVjdG9yU3Rh
cnRzQXR0YWNoZWQoKTsKICAgICAKICAgICBpZiAoX3Nob3VsZEF0dGFjaCAmJiAhX2Zyb250ZW5k
Q2xpZW50LT5jYW5BdHRhY2hXaW5kb3coKSkKICAgICAgICAgX3Nob3VsZEF0dGFjaCA9IE5POwpA
QCAtMzk0LDcgKzM5NCw4IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0
ZVdpbmRvd1RpdGxlKCkgY29uc3QKICAgICBpZiAoX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3
KQogICAgICAgICByZXR1cm47CiAKLSAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0
b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJ0cnVlIik7CisgICAgLy8gRklYTUU6IFRo
aXMgZmxhZyBjYW4gYmUgc2F2ZWQgZGlyZWN0bHkgdG8gdGhlIGZsYWdzIHN0b3JhZ2UuCisgICAg
W19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3Bl
Y3RvclN0YXJ0c0F0dGFjaGVkKHRydWUpOwogCiAgICAgW3NlbGYgY2xvc2VdOwogICAgIFtzZWxm
IHNob3dXaW5kb3c6bmlsXTsKQEAgLTQwNSw3ICs0MDYsOCBAQCB2b2lkIFdlYkluc3BlY3RvckZy
b250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0CiAgICAgaWYgKCFfYXR0YWNo
ZWRUb0luc3BlY3RlZFdlYlZpZXcpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtfaW5zcGVjdGVk
V2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRTZXR0aW5nKEluc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSwgImZhbHNl
Iik7CisgICAgLy8gRklYTUU6IFRoaXMgZmxhZyBjYW4gYmUgc2F2ZWQgdG8gdGhlIGZsYWdzIHN0
b3JhZ2UgZGlyZWN0bHkuCisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGZhbHNlKTsKIAogICAgIFtz
ZWxmIGNsb3NlXTsKICAgICBbc2VsZiBzaG93V2luZG93Om5pbF07CmRpZmYgLS1naXQgYS9XZWJL
aXQvd2luL0NoYW5nZUxvZyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IGE4NDZiNzUuLmQ5
NzYwYWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93aW4v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMTAtMTQgIElseWEgVGlraG9ub3Zza3kg
IDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGluc3BlY3RvciBzZXR0aW5ncy9wcm9wZXJ0
aWVzL3N0YXRlcyBtYW5hZ2VtZW50CisgICAgICAgIHNob3VsZCBiZSBleHRyYWN0ZWQgaW50byBz
ZXBhcmF0ZSBjbGFzcy4KKworICAgICAgICBXZSBoYXZlIGEgbG90IG9mIGZsYWdzL3ZhbHVlcyBp
biBJbnNwZWN0b3JDb250cm9sbGVyLgorICAgICAgICBTb21lIGZsYWdzIGFyZSBwZXJzaXN0aW5n
IGludG8gcHJvZmlsZS4KKyAgICAgICAgT3RoZXJzIGFyZSBwYXJ0IG9mIGluc3BlY3RvciBzdGF0
ZSBmb3IgZnJvbnRlbmQuCisgICAgICAgIEFsbCB0aGVzZSBmbGFncyBzaG91bGQga2VlcCB0aGVp
ciB2YWx1ZXMgYWZ0ZXIgbmF2aWdhdGlvbi4KKyAgICAgICAgSXQnZCBiZSBiZXR0ZXIgdG8gZXh0
cmFjdCB0aGVzZSBmbGFncy92YWx1ZXMgaW50byBzZXBhcmF0ZQorICAgICAgICBjbGFzcyB3aGlj
aCB3aWxsIGNhcmUgYWJvdXQgdGhlaXJzIGxpZmV0aW1lLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI3NQorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKToKKwogMjAxMC0xMC0xMyAgR2F2aW4g
QmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgT2xpdmVyIEh1bnQuCmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5jcHAgYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5jcHAKaW5kZXggMWI3OWRkZS4uMDY3MjUzNyAxMDA2NDQKLS0tIGEvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMjczLDcgKzI3Myw4
IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFjaFdpbmRvdygpCiAgICAg
aWYgKG1fYXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faW5zcGVjdGVkV2ViVmll
dy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29u
dHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAidHJ1ZSIpOwor
ICAgIC8vIEZJWE1FOiBUaGlzIGZsYWcgY2FuIGJlIHNhdmVkIHRvIHRoZSBmbGFncyBzdG9yYWdl
IGRpcmVjdGx5LgorICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCktPnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKHRydWUpOwogCiAgICAgY2xvc2VX
aW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogICAgIHNob3dXaW5kb3dXaXRob3V0Tm90aWZp
Y2F0aW9ucygpOwpAQCAtMjg0LDcgKzI4NSw4IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OmRldGFjaFdpbmRvdygpCiAgICAgaWYgKCFtX2F0dGFjaGVkKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5zZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkU2V0dGluZ05hbWUoKSwgImZhbHNlIik7CisgICAgLy8gRklYTUU6IFRoaXMgZmxhZyBjYW4g
YmUgc2F2ZWQgdG8gdGhlIGZsYWdzIHN0b3JhZ2UgZGlyZWN0bHkuCisgICAgbV9pbnNwZWN0ZWRX
ZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yU3RhcnRz
QXR0YWNoZWQoZmFsc2UpOwogCiAgICAgY2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygp
OwogICAgIHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwpAQCAtMzY0LDggKzM2Niw4
IEBAIHZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90
aWZpY2F0aW9ucygpCiAgICAgICAgIHNob3VsZEF0dGFjaCA9IHRydWU7CiAgICAgZWxzZSB7CiAg
ICAgICAgIC8vIElmIG5vIHByZWZlcmVuY2UgaXMgc2V0IC0gZGVmYXVsdCB0byBhbiBhdHRhY2hl
ZCB3aW5kb3cuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbnNwZWN0b3IgTGF5b3V0VGVzdHMuCi0g
ICAgICAgIFN0cmluZyBzaG91bGRBdHRhY2hQcmVmID0gbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjpp
bnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCkpOwotICAgICAgICBzaG91bGRBdHRh
Y2ggPSBzaG91bGRBdHRhY2hQcmVmICE9ICJmYWxzZSI7CisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGZsYWcgY2FuIGJlIGZldGNoZWQgZGlyZWN0bHkgZnJvbSB0aGUgZmxhZ3Mgc3RvcmFnZS4KKyAg
ICAgICAgc2hvdWxkQXR0YWNoID0gbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKIAogICAgICAgICBpZiAo
c2hvdWxkQXR0YWNoICYmICFjYW5BdHRhY2hXaW5kb3coKSkKICAgICAgICAgICAgIHNob3VsZEF0
dGFjaCA9IGZhbHNlOwo=
</data>
<flag name="review"
          id="60626"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>