<?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>228532</bug_id>
          
          <creation_ts>2021-07-27 21:47:10 -0700</creation_ts>
          <short_desc>[JSC] Implement Temporal.Duration</short_desc>
          <delta_ts>2021-08-31 22:24:41 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>223166</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ross Kirsling">ross.kirsling</reporter>
          <assigned_to name="Ross Kirsling">ross.kirsling</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>philip.chimento</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1779952</commentid>
    <comment_count>0</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-07-27 21:47:10 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779953</commentid>
    <comment_count>1</comment_count>
      <attachid>434401</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-07-27 21:52:46 -0700</bug_when>
    <thetext>Created attachment 434401
WIP

WIP patch: constructor and getters complete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781798</commentid>
    <comment_count>2</comment_count>
      <attachid>434401</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-03 18:04:57 -0700</bug_when>
    <thetext>Comment on attachment 434401
WIP

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

Quick comments :)

&gt; Source/JavaScriptCore/runtime/TemporalDuration.h:41
&gt; +    static constexpr bool needsDestruction = true;
&gt; +
&gt; +    static void destroy(JSCell* cell)
&gt; +    {
&gt; +        static_cast&lt;TemporalDuration*&gt;(cell)-&gt;TemporalDuration::~TemporalDuration();
&gt; +    }

Since std::array&lt;double, numberOfSubdurations&gt; is double array, we do not need to make it destructible.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.h:68
&gt; +    double years() const { return m_subdurations[0]; }
&gt; +    double months() const { return m_subdurations[1]; }
&gt; +    double weeks() const { return m_subdurations[2]; }
&gt; +    double days() const { return m_subdurations[3]; }
&gt; +    double hours() const { return m_subdurations[4]; }
&gt; +    double minutes() const { return m_subdurations[5]; }
&gt; +    double seconds() const { return m_subdurations[6]; }
&gt; +    double milliseconds() const { return m_subdurations[7]; }
&gt; +    double microseconds() const { return m_subdurations[8]; }
&gt; +    double nanoseconds() const { return m_subdurations[9]; }

Let&apos;s introduce enum for each field  and use it to access these fields. e.g. TemporalDurationField::Years = 0.
My suggestion is creating a macro like that,

#define JSC_TEMPORAL_DURATION_FIELDS(macro) \
    macro(years, Years) \
    macro(months, Months) \
    ....


And generate the above accessors via this macro.
And generate enum &amp; numberOfSubdurations from this macro.

enum class TemporalDurationField : uint8_t {
#define JSC_DEFINE_TEMPORAL_DURATION_ENUM(name, capitalizedName) name,
    JSC_TEMPORAL_DURATION_FIELDS(JSC_DEFINE_TEMPORAL_DURATION_ENUM)
#undef JSC_DEFINE_TEMPORAL_DURATION_ENUM
};

And we can define numberOfSubdurations with the above macro (see numberOfLinkTimeConstants definition for example).

&gt; Source/JavaScriptCore/runtime/TemporalDuration.h:73
&gt; +    DECLARE_VISIT_CHILDREN;

Since this does not have a GC-managed object field, we do not need to define visitChildren for this object specially. JSObject::visitChildren will handle it.

&gt; Source/JavaScriptCore/runtime/TemporalDurationConstructor.cpp:86
&gt; +    TemporalDuration* duration = TemporalDuration::create(vm, structure);
&gt; +    ASSERT(duration);
&gt; +
&gt; +    std::array&lt;double, TemporalDuration::numberOfSubdurations&gt; subdurations { };
&gt; +    auto count = std::min&lt;size_t&gt;(callFrame-&gt;argumentCount(), TemporalDuration::numberOfSubdurations);
&gt; +    for (size_t i = 0; i &lt; count; i++) {
&gt; +        subdurations[i] = callFrame-&gt;argument(i).toIntegerOrInfinity(globalObject);
&gt; +        RETURN_IF_EXCEPTION(scope, { });
&gt; +    }
&gt; +
&gt; +    scope.release();
&gt; +    duration-&gt;initializeDuration(globalObject, WTFMove(subdurations));

Let&apos;s make it simpler by,

std::array&lt;double, TemporalDuration::numberOfSubdurations&gt; subdurations { };
auto count = std::min&lt;size_t&gt;(callFrame-&gt;argumentCount(), TemporalDuration::numberOfSubdurations);
for (size_t i = 0; i &lt; count; i++) {
    subdurations[i] = callFrame-&gt;argument(i).toIntegerOrInfinity(globalObject);
    RETURN_IF_EXCEPTION(scope, { });
}

if (!isValidDuration(subdurations)) {
    throwRangeError(...)
    return { };
}

return JSValue::encode(TemporalDuration::create(vm, structure, WTFMove(subdurations));

&gt; Source/JavaScriptCore/runtime/VM.cpp:332
&gt; +    , temporalDurationHeapCellType(IsoHeapCellType::create&lt;TemporalDuration&gt;())

Since this is not destructible, we do not need this heap cell type.

&gt; Source/JavaScriptCore/runtime/VM.cpp:1622
&gt; +DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(temporalDurationSpace, temporalDurationHeapCellType.get(), TemporalDuration)

Since this is not destructible, we can use cellHeapCellType</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781826</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-03 21:48:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/81497521&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782008</commentid>
    <comment_count>4</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-04 12:47:09 -0700</bug_when>
    <thetext>Thanks for the awesome tips! :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782110</commentid>
    <comment_count>5</comment_count>
      <attachid>434956</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-04 17:46:38 -0700</bug_when>
    <thetext>Created attachment 434956
WIP

WIP patch: addressed feedback, implemented five and a half more methods, added tests for current functionality</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782607</commentid>
    <comment_count>6</comment_count>
      <attachid>435100</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-06 16:51:50 -0700</bug_when>
    <thetext>Created attachment 435100
WIP

WIP patch: finished toString and from(obj)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785992</commentid>
    <comment_count>7</comment_count>
      <attachid>436031</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-20 14:40:09 -0700</bug_when>
    <thetext>Created attachment 436031
WIP

implemented from(str), adjusted some behavior based on pending spec PRs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786049</commentid>
    <comment_count>8</comment_count>
      <attachid>436044</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-20 17:01:18 -0700</bug_when>
    <thetext>Created attachment 436044
WIP

refactored from(str) to use StringParsingBuffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786619</commentid>
    <comment_count>9</comment_count>
      <attachid>436251</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-23 17:03:50 -0700</bug_when>
    <thetext>Created attachment 436251
WIP

implemented add/subtract methods</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787805</commentid>
    <comment_count>10</comment_count>
      <attachid>436568</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-26 14:33:18 -0700</bug_when>
    <thetext>Created attachment 436568
WIP

implemented compare() and total(), turned Subdurations into a struct to avoid calling TemporalDuration::create during internal calculations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787932</commentid>
    <comment_count>11</comment_count>
      <attachid>436604</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-26 19:43:33 -0700</bug_when>
    <thetext>Created attachment 436604
WIP

fix const_iterator usage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788219</commentid>
    <comment_count>12</comment_count>
      <attachid>436688</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-27 16:23:49 -0700</bug_when>
    <thetext>Created attachment 436688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788226</commentid>
    <comment_count>13</comment_count>
      <attachid>436690</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-27 16:38:05 -0700</bug_when>
    <thetext>Created attachment 436690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788264</commentid>
    <comment_count>14</comment_count>
      <attachid>436690</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-27 19:32:35 -0700</bug_when>
    <thetext>Comment on attachment 436690
Patch

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

Quick review comments. Still reviewing.

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.cpp:2102
&gt; +    if (Options::useTemporal())

We do not need to have this. If it is not initLater-ed, then visit becomes nop.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:73
&gt; +// IsValidDuration ( years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds )

Let&apos;s paste a link to the spec proposal :) (e.g. https://tc39.es/proposal-temporal/#sec-temporal-isvalidduration)

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:88
&gt; +//  CreateTemporalDuration ( years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds [ , newTarget ] )

Ditto.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:89
&gt; +TemporalDuration* TemporalDuration::createIfValid(JSGlobalObject* globalObject, Subdurations&amp;&amp; subdurations, Structure* structure)

I like the name like `tryCreateIfValid(...)` :) Then the caller knows that we need to handle exception since it is saying &quot;try&quot;.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:102
&gt; +// DurationHandleFractions ( fHours, minutes, fMinutes, seconds, fSeconds, milliseconds, fMilliseconds, microseconds, fMicroseconds, nanoseconds, fNanoseconds )

Ditto.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:112
&gt; +        subdurations.setMilliseconds(factor * parseInt(padded.substring(0, 3), 10));
&gt; +        subdurations.setMicroseconds(factor * parseInt(padded.substring(3, 3), 10));
&gt; +        subdurations.setNanoseconds(factor * parseInt(padded.substring(6, 3), 10));

We should avoid using WTF::String::substring since it creates a new string. I think creating a StringView over this string is enough.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:149
&gt; +// ParseTemporalDurationString ( isoString )

Ditto.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:264
&gt; +// ToTemporalDurationRecord ( temporalDurationLike )

Ditto.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:300
&gt; +// ToTemporalDuration ( item )

Ditto.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:431
&gt; +// DefaultTemporalLargestUnit ( years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds )

Ditto.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:437
&gt; +    uint8_t index = 0;
&gt; +    while (index &lt; numberOfTemporalUnits - 1 &amp;&amp; !m_subdurations[index])
&gt; +        index++;
&gt; +    return static_cast&lt;TemporalUnit&gt;(index);

Is this correct? It seems that it is returning the largest index which does not have zero.
But if index = 0 is year, then we should return as early as we found non-zero.

How about,

static_assert(static_cast&lt;uint8_t&gt;(TemporalUnit::Year) == 0);
static_assert(static_cast&lt;uint8_t&gt;(TemporalUnit::Nanoseconds) == numberOfTemporalUnits - 1);
for (uint8_t index = 0; index &lt; numberOfTemporalUnits; ++index) {
    if (!m_subdurations[index])
        return static_cast&lt;TemporalUnit&gt;(index);
}
return TemporalUnit::Nanoseconds;

&gt; Source/JavaScriptCore/runtime/TemporalDurationConstructor.cpp:94
&gt; +        subdurations[i] = callFrame-&gt;argument(i).toIntegerOrInfinity(globalObject);

We can use uncheckedArgument since count is `std::min&lt;size_t&gt;(callFrame-&gt;argumentCount(), numberOfTemporalUnits);`

&gt; Source/JavaScriptCore/runtime/TemporalDurationPrototype.cpp:193
&gt; +    auto options = callFrame-&gt;argument(0);
&gt; +    if (options.isUndefined())
&gt; +        return throwVMTypeError(globalObject, scope, &quot;Temporal.Duration.prototype.round requires an options argument&quot;_s);

Since round is using https://tc39.es/proposal-temporal/#sec-getoptionsobject, we should create an object if it is undefined.
Can you also add a test for that?

&gt; Source/JavaScriptCore/runtime/TemporalDurationPrototype.cpp:209
&gt; +    auto options = callFrame-&gt;argument(0);
&gt; +    if (options.isUndefined())
&gt; +        return throwVMTypeError(globalObject, scope, &quot;Temporal.Duration.prototype.total requires an options argument&quot;_s);

Since total is using https://tc39.es/proposal-temporal/#sec-getoptionsobject, we should create an object if it is undefined.
Can you also add a test for that?

&gt; Source/JavaScriptCore/runtime/TemporalObject.cpp:123
&gt; +static StringView singularUnit(StringView unit)
&gt; +{
&gt; +    // Plurals are allowed, but thankfully they&apos;re all just a simple -s.
&gt; +    return unit.endsWith(&quot;s&quot;) ? unit.left(unit.length() - 1) : unit;
&gt; +}
&gt; +
&gt; +std::optional&lt;TemporalUnit&gt; temporalUnitType(StringView unit)
&gt; +{
&gt; +    StringView singular = singularUnit(unit);
&gt; +
&gt; +    if (singular == &quot;year&quot;)
&gt; +        return TemporalUnit::Year;
&gt; +    if (singular == &quot;month&quot;)
&gt; +        return TemporalUnit::Month;
&gt; +    if (singular == &quot;week&quot;)
&gt; +        return TemporalUnit::Week;
&gt; +    if (singular == &quot;day&quot;)
&gt; +        return TemporalUnit::Day;
&gt; +    if (singular == &quot;hour&quot;)
&gt; +        return TemporalUnit::Hour;
&gt; +    if (singular == &quot;minute&quot;)
&gt; +        return TemporalUnit::Minute;
&gt; +    if (singular == &quot;second&quot;)
&gt; +        return TemporalUnit::Second;
&gt; +    if (singular == &quot;millisecond&quot;)
&gt; +        return TemporalUnit::Millisecond;
&gt; +    if (singular == &quot;microsecond&quot;)
&gt; +        return TemporalUnit::Microsecond;
&gt; +    if (singular == &quot;nanosecond&quot;)
&gt; +        return TemporalUnit::Nanosecond;
&gt; +    
&gt; +    return std::nullopt;
&gt; +}

So then, probably, this is not necessary.

&gt; Source/JavaScriptCore/runtime/TemporalObject.cpp:144
&gt; +    String largestUnit = intlStringOption(globalObject, options, vm.propertyNames-&gt;largestUnit, { }, nullptr, nullptr);
&gt; +    RETURN_IF_EXCEPTION(scope, std::nullopt);
&gt; +
&gt; +    if (!largestUnit)
&gt; +        return std::nullopt;
&gt; +    
&gt; +    if (largestUnit == &quot;auto&quot;)
&gt; +        return autoValue;
&gt; +
&gt; +    auto unitType = temporalUnitType(largestUnit);
&gt; +    if (!unitType) {
&gt; +        throwRangeError(globalObject, scope, &quot;largestUnit is an invalid Temporal unit&quot;_s);
&gt; +        return std::nullopt;
&gt; +    }

You can write it via intlOption&lt;&gt;

std::optional&lt;TemporalUnit&gt; largestUnit = intlOption&lt;std::optional&lt;TemporalUnit&gt;&gt;(globalObject, options, vm.propertyNames-&gt;largestUnit,
    {
        { &quot;year&quot;_s, TemporalUnit::Year },
        { &quot;years&quot;_s, TemporalUnit::Year },
        ...
    }, &quot;largestUnit is an invalid Temporal unit&quot;_s, fallback);

fallback can be std::nullopt. Let&apos;s take `std::optional&lt;TemporalUnit&gt; fallback` parameter!

&gt; Source/JavaScriptCore/runtime/TemporalObject.cpp:170
&gt; +    String smallestUnit = intlStringOption(globalObject, options, vm.propertyNames-&gt;smallestUnit, { }, nullptr, nullptr);
&gt; +    RETURN_IF_EXCEPTION(scope, std::nullopt);
&gt; +
&gt; +    if (!smallestUnit)
&gt; +        return std::nullopt;
&gt; +
&gt; +    auto unitType = temporalUnitType(smallestUnit);
&gt; +    if (!unitType) {
&gt; +        throwRangeError(globalObject, scope, &quot;smallestUnit is an invalid Temporal unit&quot;_s);
&gt; +        return std::nullopt;
&gt; +    }

You can write it via intlOption&lt;&gt;

std::optional&lt;TemporalUnit&gt; smallestUnit = intlOption&lt;std::optional&lt;TemporalUnit&gt;&gt;(globalObject, options, vm.propertyNames-&gt;smallestUnit,
    {
        { &quot;year&quot;_s, TemporalUnit::Year },
        { &quot;years&quot;_s, TemporalUnit::Year },
        ...
    }, &quot;smallestUnit is an invalid Temporal unit&quot;_s, fallback);

fallback can be std::nullopt. Let&apos;s take `std::optional&lt;TemporalUnit&gt; fallback` parameter!

&gt; Source/JavaScriptCore/runtime/TemporalObject.cpp:259
&gt; +// MaximumTemporalDurationRoundingIncrement ( unit )

Ditto.

&gt; Source/JavaScriptCore/runtime/TemporalObject.cpp:260
&gt; +double maximumRoundingIncrement(TemporalUnit unit)

Should we align this code to more like a spec one?
like, we can return std::optional&lt;double&gt;.

&gt; Source/JavaScriptCore/runtime/TemporalObject.cpp:263
&gt; +        return std::numeric_limits&lt;double&gt;::infinity();

Let&apos;s return std::nullopt;

&gt; Source/JavaScriptCore/runtime/TemporalObject.cpp:271
&gt; +// ToTemporalRoundingIncrement ( normalizedOptions, dividend, inclusive )

Ditto.

&gt; Source/JavaScriptCore/runtime/TemporalObject.cpp:289
&gt; +double temporalRoundingIncrement(JSGlobalObject* globalObject, JSObject* options, double dividend, bool inclusive)
&gt; +{
&gt; +    VM&amp; vm = globalObject-&gt;vm();
&gt; +    auto scope = DECLARE_THROW_SCOPE(vm);
&gt; +
&gt; +    auto hasFiniteDividend = dividend &lt; std::numeric_limits&lt;double&gt;::infinity();
&gt; +    auto maximum = (hasFiniteDividend &amp;&amp; dividend &gt; 1 &amp;&amp; !inclusive) ? dividend - 1 : dividend;
&gt; +    double increment = intlNumberOption(globalObject, options, vm.propertyNames-&gt;roundingIncrement, 1, maximum, 1);
&gt; +    RETURN_IF_EXCEPTION(scope, 0);
&gt; +
&gt; +    increment = std::floor(increment);
&gt; +    if (hasFiniteDividend &amp;&amp; std::fmod(dividend, increment)) {
&gt; +        throwRangeError(globalObject, scope, &quot;roundingIncrement value does not divide evenly&quot;_s);
&gt; +        return 0;
&gt; +    }
&gt; +
&gt; +    return increment;
&gt; +}

Should we align this code to more like a spec one?
Like, we can take `std::optional&lt;double&gt;` for dividend, and we can write code looks like a spec, like,

double maximum = 0;
if (!dividend)
    maximum = std::numeric_limits&lt;double&gt;::infinity();
else if (inclusive)
    maximum = dividend.value();
else if (dividend.value() &gt; 1)
    maximum = dividend.value() - 1;
else
    maximum = 1;

&gt; Source/JavaScriptCore/runtime/TemporalObject.cpp:291
&gt; +// RoundNumberToIncrement ( x, increment, roundingMode )

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788360</commentid>
    <comment_count>15</comment_count>
      <attachid>436690</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-28 22:25:32 -0700</bug_when>
    <thetext>Comment on attachment 436690
Patch

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

&gt; Source/JavaScriptCore/runtime/TemporalDurationPrototype.cpp:56
&gt; +static JSC_DECLARE_HOST_FUNCTION(TemporalDurationPrototypeFuncWith);
&gt; +static JSC_DECLARE_HOST_FUNCTION(TemporalDurationPrototypeFuncNegated);
&gt; +static JSC_DECLARE_HOST_FUNCTION(TemporalDurationPrototypeFuncAbs);
&gt; +static JSC_DECLARE_HOST_FUNCTION(TemporalDurationPrototypeFuncAdd);
&gt; +static JSC_DECLARE_HOST_FUNCTION(TemporalDurationPrototypeFuncSubtract);
&gt; +static JSC_DECLARE_HOST_FUNCTION(TemporalDurationPrototypeFuncRound);
&gt; +static JSC_DECLARE_HOST_FUNCTION(TemporalDurationPrototypeFuncTotal);
&gt; +static JSC_DECLARE_HOST_FUNCTION(TemporalDurationPrototypeFuncToString);
&gt; +static JSC_DECLARE_HOST_FUNCTION(TemporalDurationPrototypeFuncToJSON);
&gt; +static JSC_DECLARE_HOST_FUNCTION(TemporalDurationPrototypeFuncToLocaleString);
&gt; +static JSC_DECLARE_HOST_FUNCTION(TemporalDurationPrototypeFuncValueOf);
&gt; +static JSC_DECLARE_CUSTOM_GETTER(TemporalDurationPrototypeGetterYears);
&gt; +static JSC_DECLARE_CUSTOM_GETTER(TemporalDurationPrototypeGetterMonths);
&gt; +static JSC_DECLARE_CUSTOM_GETTER(TemporalDurationPrototypeGetterWeeks);
&gt; +static JSC_DECLARE_CUSTOM_GETTER(TemporalDurationPrototypeGetterDays);
&gt; +static JSC_DECLARE_CUSTOM_GETTER(TemporalDurationPrototypeGetterHours);
&gt; +static JSC_DECLARE_CUSTOM_GETTER(TemporalDurationPrototypeGetterMinutes);
&gt; +static JSC_DECLARE_CUSTOM_GETTER(TemporalDurationPrototypeGetterSeconds);
&gt; +static JSC_DECLARE_CUSTOM_GETTER(TemporalDurationPrototypeGetterMilliseconds);
&gt; +static JSC_DECLARE_CUSTOM_GETTER(TemporalDurationPrototypeGetterMicroseconds);
&gt; +static JSC_DECLARE_CUSTOM_GETTER(TemporalDurationPrototypeGetterNanoseconds);
&gt; +static JSC_DECLARE_CUSTOM_GETTER(TemporalDurationPrototypeGetterSign);
&gt; +static JSC_DECLARE_CUSTOM_GETTER(TemporalDurationPrototypeGetterBlank);

And I like naming it `temporalDurationXXX` instead of `TemporalDurationXXX`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788418</commentid>
    <comment_count>16</comment_count>
      <attachid>436690</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-29 14:49:02 -0700</bug_when>
    <thetext>Comment on attachment 436690
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:149
&gt;&gt; +// ParseTemporalDurationString ( isoString )
&gt; 
&gt; Ditto.

Since many of Temporal feature requires some part of ISO8601 parsing, I suggest,

1. Creating ISO8601 parser interface (ISO8601)
2. Define ISO8601::Duration (Subduration)
2. Expose interfaces like, static std::optional&lt;ISO8601::Duration&gt; ISO8601::parseDuration(StringView)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788419</commentid>
    <comment_count>17</comment_count>
      <attachid>436690</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-29 14:49:23 -0700</bug_when>
    <thetext>Comment on attachment 436690
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:149
&gt;&gt;&gt; +// ParseTemporalDurationString ( isoString )
&gt;&gt; 
&gt;&gt; Ditto.
&gt; 
&gt; Since many of Temporal feature requires some part of ISO8601 parsing, I suggest,
&gt; 
&gt; 1. Creating ISO8601 parser interface (ISO8601)
&gt; 2. Define ISO8601::Duration (Subduration)
&gt; 2. Expose interfaces like, static std::optional&lt;ISO8601::Duration&gt; ISO8601::parseDuration(StringView)

In a separate file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788577</commentid>
    <comment_count>18</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-30 11:03:43 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #14)
&gt; &gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:437
&gt; &gt; +    uint8_t index = 0;
&gt; &gt; +    while (index &lt; numberOfTemporalUnits - 1 &amp;&amp; !m_subdurations[index])
&gt; &gt; +        index++;
&gt; &gt; +    return static_cast&lt;TemporalUnit&gt;(index);
&gt; 
&gt; Is this correct? It seems that it is returning the largest index which does
&gt; not have zero.
&gt; But if index = 0 is year, then we should return as early as we found
&gt; non-zero.
&gt; 
&gt; How about,
&gt; 
&gt; static_assert(static_cast&lt;uint8_t&gt;(TemporalUnit::Year) == 0);
&gt; static_assert(static_cast&lt;uint8_t&gt;(TemporalUnit::Nanoseconds) ==
&gt; numberOfTemporalUnits - 1);
&gt; for (uint8_t index = 0; index &lt; numberOfTemporalUnits; ++index) {
&gt;     if (!m_subdurations[index])
&gt;         return static_cast&lt;TemporalUnit&gt;(index);
&gt; }
&gt; return TemporalUnit::Nanoseconds;

Hm? Mine is saying &quot;advance while the subdurations are zero and we haven&apos;t reached the final subduration (Nanosecond) yet&quot;. Yours is currently flipped, but should be equivalent if the ! is removed.

&gt; &gt; Source/JavaScriptCore/runtime/TemporalDurationPrototype.cpp:193
&gt; &gt; +    auto options = callFrame-&gt;argument(0);
&gt; &gt; +    if (options.isUndefined())
&gt; &gt; +        return throwVMTypeError(globalObject, scope, &quot;Temporal.Duration.prototype.round requires an options argument&quot;_s);
&gt; 
&gt; Since round is using
&gt; https://tc39.es/proposal-temporal/#sec-getoptionsobject, we should create an
&gt; object if it is undefined.
&gt; Can you also add a test for that?
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/TemporalDurationPrototype.cpp:209
&gt; &gt; +    auto options = callFrame-&gt;argument(0);
&gt; &gt; +    if (options.isUndefined())
&gt; &gt; +        return throwVMTypeError(globalObject, scope, &quot;Temporal.Duration.prototype.total requires an options argument&quot;_s);
&gt; 
&gt; Since total is using
&gt; https://tc39.es/proposal-temporal/#sec-getoptionsobject, we should create an
&gt; object if it is undefined.
&gt; Can you also add a test for that?

The case where an object would be created in GetOptionsObject is pre-empted by step 3 in round(); this line is also being added for total() in PR #1720.

https://tc39.es/proposal-temporal/#sec-temporal.duration.prototype.round

https://github.com/tc39/proposal-temporal/pull/1720/files#diff-ceec2609082b71fe76df3f43d148b97d667dde310f51a514141886246bf3fc74</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788597</commentid>
    <comment_count>19</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-30 11:52:57 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #14)
&gt; &gt; Source/JavaScriptCore/runtime/TemporalObject.cpp:144
&gt; &gt; +    String largestUnit = intlStringOption(globalObject, options, vm.propertyNames-&gt;largestUnit, { }, nullptr, nullptr);
&gt; &gt; +    RETURN_IF_EXCEPTION(scope, std::nullopt);
&gt; &gt; +
&gt; &gt; +    if (!largestUnit)
&gt; &gt; +        return std::nullopt;
&gt; &gt; +    
&gt; &gt; +    if (largestUnit == &quot;auto&quot;)
&gt; &gt; +        return autoValue;
&gt; &gt; +
&gt; &gt; +    auto unitType = temporalUnitType(largestUnit);
&gt; &gt; +    if (!unitType) {
&gt; &gt; +        throwRangeError(globalObject, scope, &quot;largestUnit is an invalid Temporal unit&quot;_s);
&gt; &gt; +        return std::nullopt;
&gt; &gt; +    }
&gt; 
&gt; You can write it via intlOption&lt;&gt;
&gt; 
&gt; std::optional&lt;TemporalUnit&gt; largestUnit =
&gt; intlOption&lt;std::optional&lt;TemporalUnit&gt;&gt;(globalObject, options,
&gt; vm.propertyNames-&gt;largestUnit,
&gt;     {
&gt;         { &quot;year&quot;_s, TemporalUnit::Year },
&gt;         { &quot;years&quot;_s, TemporalUnit::Year },
&gt;         ...
&gt;     }, &quot;largestUnit is an invalid Temporal unit&quot;_s, fallback);
&gt; 
&gt; fallback can be std::nullopt. Let&apos;s take `std::optional&lt;TemporalUnit&gt;
&gt; fallback` parameter!

This was a cool idea but I&apos;ll leave it as-is given our Slack discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788609</commentid>
    <comment_count>20</comment_count>
      <attachid>436690</attachid>
    <who name="Philip Chimento">philip.chimento</who>
    <bug_when>2021-08-30 12:09:37 -0700</bug_when>
    <thetext>Comment on attachment 436690
Patch

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

Cool! I think the main comment I have on the patch in general, is that we should try to make error messages as educational as possible for the developer. I think that will be good for adoption of Temporal in the JS ecosystem. Specific comments follow.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:95
&gt; +        throwRangeError(globalObject, scope, &quot;cannot create Duration with inconsistent numeric values&quot;_s);

For developer-experience purposes we should probably have a more informative error message here. It would be great if the message could say either that infinities or mixed-sign values are not allowed depending on what the problem was.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:150
&gt; +template&lt;typename CharacterType&gt;

would code like `*buffer == 0x2212` be correct for all CharacterTypes? or should this function deal explicitly with WTFString? (Ignore me if there is an existing convention in the codebase to do it this way)

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:648
&gt; +        throwRangeError(globalObject, scope, &quot;unit is an invalid Temporal unit&quot;_s);

Would be good to list which units are valid in the error message.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:708
&gt; +    auto formatInteger = [](double value) -&gt; double {

Could (for the time being, pending resolution of that issue) do something like

    JSBigInt* bigint = JSBigInt::createFrom(globalObject, value);
    ASSERT_NO_EXCEPTION();
    String resut = bigint-&gt;toString(globalObject, 10);
    ASSERT_NO_EXCEPTION();
    return result;

&gt; Source/JavaScriptCore/runtime/TemporalDurationPrototype.cpp:125
&gt; +        return throwVMTypeError(globalObject, scope, &quot;Temporal.Duration.prototype.with called on value that&apos;s not an object initialized as a Duration&quot;_s);

I feel the brand check messages would be somewhat clearer to callers without &quot;an object initialized as&quot; since that&apos;s an implementation detail.

&gt;&gt; Source/JavaScriptCore/runtime/TemporalDurationPrototype.cpp:193
&gt;&gt; +        return throwVMTypeError(globalObject, scope, &quot;Temporal.Duration.prototype.round requires an options argument&quot;_s);
&gt; 
&gt; Since round is using https://tc39.es/proposal-temporal/#sec-getoptionsobject, we should create an object if it is undefined.
&gt; Can you also add a test for that?

Currently we don&apos;t get to GetOptionsObject if undefined is passed. https://tc39.es/proposal-temporal/#sec-temporal.duration.prototype.round step 3

See https://github.com/tc39/proposal-temporal/issues/1756 for discussion, it&apos;s possible TC39 will force this to change, though I hope that won&apos;t be necessary.

&gt;&gt; Source/JavaScriptCore/runtime/TemporalDurationPrototype.cpp:209
&gt;&gt; +        return throwVMTypeError(globalObject, scope, &quot;Temporal.Duration.prototype.total requires an options argument&quot;_s);
&gt; 
&gt; Since total is using https://tc39.es/proposal-temporal/#sec-getoptionsobject, we should create an object if it is undefined.
&gt; Can you also add a test for that?

Same here.

&gt; Source/JavaScriptCore/runtime/TemporalDurationPrototype.cpp:256
&gt; +    return throwVMTypeError(globalObject, scope, &quot;Temporal.Duration.prototype.valueOf must not be called&quot;_s);

I would suggest making the error message more educational and saying what you should do instead (e.g. &quot;use Temporal.Duration.compare to compare Duration instances&quot; or something like that)

&gt; Source/JavaScriptCore/runtime/TemporalObject.cpp:93
&gt; +    // Plurals are allowed, but thankfully they&apos;re all just a simple -s.

...and none of the singular names end with &apos;s&apos; :-)

&gt; JSTests/stress/temporal-duration.js:1
&gt; +//@ requireOptions(&quot;--useTemporal=1&quot;)

What&apos;s the plan for the tests in this file? Are they going to be removed later when test262 coverage is improved?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788699</commentid>
    <comment_count>21</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-30 15:47:05 -0700</bug_when>
    <thetext>(In reply to Philip Chimento from comment #20)
&gt; &gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:150
&gt; &gt; +template&lt;typename CharacterType&gt;
&gt; 
&gt; would code like `*buffer == 0x2212` be correct for all CharacterTypes? or
&gt; should this function deal explicitly with WTFString? (Ignore me if there is
&gt; an existing convention in the codebase to do it this way)

I think this should be okay -- if the left side is LChar, i.e., unsigned char, it&apos;s guaranteed to return false (says a clang warning message when I tried to do this directly).

&gt; &gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:708
&gt; &gt; +    auto formatInteger = [](double value) -&gt; double {
&gt; 
&gt; Could (for the time being, pending resolution of that issue) do something
&gt; like
&gt; 
&gt;     JSBigInt* bigint = JSBigInt::createFrom(globalObject, value);
&gt;     ASSERT_NO_EXCEPTION();
&gt;     String resut = bigint-&gt;toString(globalObject, 10);
&gt;     ASSERT_NO_EXCEPTION();
&gt;     return result;

Hmm, I went with the truncation for now so that it&apos;s more obviously a placeholder; JSBigInt would require us to do real error handling for this function, so I don&apos;t think it&apos;s right to just pretend nothing bad happened...

&gt; &gt; JSTests/stress/temporal-duration.js:1
&gt; &gt; +//@ requireOptions(&quot;--useTemporal=1&quot;)
&gt; 
&gt; What&apos;s the plan for the tests in this file? Are they going to be removed
&gt; later when test262 coverage is improved?

We tend to have our own tests even when they&apos;re redundant with test262 -- certainly not for the purpose of *being* redundant with test262, but generally speaking it helps us check against the actual codepaths we&apos;ve written, and at Stage 3, I think it helps to guide development. Perhaps most importantly, JSC stress tests are run by EWS and will thus block a patch from landing, while test262 tests are just run after a patch is landed. It may well be justifiable not to write a stress test for something that&apos;s known to be covered by test262, but we probably wouldn&apos;t bother to prune existing stress tests on that basis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788733</commentid>
    <comment_count>22</comment_count>
      <attachid>436829</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-30 16:46:27 -0700</bug_when>
    <thetext>Created attachment 436829
Patch

Addressed current feedback and enabled relevant test262 tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788965</commentid>
    <comment_count>23</comment_count>
      <attachid>436911</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-31 10:49:27 -0700</bug_when>
    <thetext>Created attachment 436911
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789193</commentid>
    <comment_count>24</comment_count>
      <attachid>436911</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-31 18:43:57 -0700</bug_when>
    <thetext>Comment on attachment 436911
Patch

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

r=me

&gt; Source/JavaScriptCore/runtime/ISO8601.cpp:43
&gt; +        auto padded = makeString(fractionString, &quot;00000000&quot;);

Maybe we should use Vector&lt;LChar, 9 + 8&gt; buffer to avoid heap allocation here (We know that all fractionString&apos;s characters are ASCIIDigit, so it should be fit in LChar. And we know the maximum length is 9. And padding length is 8. So 9 + 8 should be enough.
But it is OK for the subsequent patch for optimization.

&gt; Source/JavaScriptCore/runtime/ISO8601.cpp:57
&gt; +        duration.setMinutes(std::trunc(fraction));

OK, this is a spec bug.

&gt; Source/JavaScriptCore/runtime/ISO8601.cpp:97
&gt; +    if (buffer.lengthRemaining() &lt; 3)
&gt; +        return std::nullopt;

This looks nice. Let&apos;s add a test cases like,

&quot;&quot;
&quot;+&quot;
&quot;+P&quot;
&quot;-P&quot;
&quot;+-P&quot;

&gt; Source/JavaScriptCore/runtime/ISO8601.cpp:136
&gt; +        if (toASCIIUpper(*buffer) == &apos;Y&apos; &amp;&amp; !datePartIndex) {
&gt; +            result.setYears(integer);
&gt; +            datePartIndex = 1;
&gt; +        } else if (toASCIIUpper(*buffer) == &apos;M&apos; &amp;&amp; datePartIndex &lt; 2) {
&gt; +            result.setMonths(integer);
&gt; +            datePartIndex = 2;
&gt; +        } else if (toASCIIUpper(*buffer) == &apos;W&apos; &amp;&amp; datePartIndex &lt; 3) {
&gt; +            result.setWeeks(integer);
&gt; +            datePartIndex = 3;
&gt; +        } else if (toASCIIUpper(*buffer) == &apos;D&apos;) {
&gt; +            result.setDays(integer);
&gt; +            datePartIndex = 4;
&gt; +        } else
&gt; +            return std::nullopt;

Using switch would be better for readability?

switch (toASCIIUpper(*buffer)) {
case &apos;Y&apos;: {
    if (datePartIndex)
        return std::nullopt;
    result.setYears(integer);
    datePartIndex = 1;
    break;
}
...
default:
    return std::nullopt;
}

&gt; Source/JavaScriptCore/runtime/ISO8601.cpp:163
&gt; +            if (!digits || digits &gt; 9)
&gt; +                return std::nullopt;

Looks nice. Let&apos;s add a test case like,

&quot;+P20.S&quot;
&quot;+P.20S&quot;

&gt; Source/JavaScriptCore/runtime/ISO8601.cpp:171
&gt; +        if (toASCIIUpper(*buffer) == &apos;H&apos; &amp;&amp; !timePartIndex) {

Ditto about switch.

&gt; Source/JavaScriptCore/runtime/ISO8601.cpp:175
&gt; +                timePartIndex = 3;

This trick is nice.

&gt; Source/JavaScriptCore/runtime/ISO8601.h:48
&gt; +    std::array&lt;double, numberOfTemporalUnits&gt; data;

Let&apos;s have a default initialization here since std::array can be uninitialized.

std::array&lt;double, numberOfTemporalUnits&gt; data { };

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:202
&gt; +    if (one-&gt;years() || two-&gt;years() || one-&gt;months() || two-&gt;months() || one-&gt;weeks() || two-&gt;weeks()) {
&gt; +        throwRangeError(globalObject, scope, &quot;Cannot compare a duration of years, months, or weeks without a relativeTo option&quot;_s);
&gt; +        return { };
&gt; +    }

Let&apos;s have a FIXME for handling this case when Temporal DateTime is supported.

&gt; Source/JavaScriptCore/runtime/TemporalDuration.cpp:387
&gt; +        static const double nanosecondsPerDay = 24.0 * 60 * 60 * 1000 * 1000 * 1000;

It appears twice, so let&apos;s define it as a global static constexpr value.

&gt; Source/JavaScriptCore/runtime/TemporalObject.cpp:149
&gt; +    if (largestUnit == &quot;auto&quot;)

Use &quot;auto&quot;_s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789205</commentid>
    <comment_count>25</comment_count>
      <attachid>436988</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-31 19:57:00 -0700</bug_when>
    <thetext>Created attachment 436988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789216</commentid>
    <comment_count>26</comment_count>
      <attachid>436993</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-31 21:34:57 -0700</bug_when>
    <thetext>Created attachment 436993
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789221</commentid>
    <comment_count>27</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-31 22:24:37 -0700</bug_when>
    <thetext>Committed r281838 (241171@main): &lt;https://commits.webkit.org/241171@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 436993.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434401</attachid>
            <date>2021-07-27 21:52:46 -0700</date>
            <delta_ts>2021-08-04 17:46:36 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-228532-20210727215245.patch</filename>
            <type>text/plain</type>
            <size>47508</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi41NmNlMGRhYmUzMTQ2YmEw
ZjNlMTU2NWE1YjY5NTFiNzhhYWI1YTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OSBAQAorMjAyMS0wNy0yNyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlzaXRD
aGlsZHJlbkltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmR1cmF0aW9uU3RydWN0dXJlKToKKyAgICAgICAgKiBy
dW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VGVtcG9y
YWxEdXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6VGVtcG9yYWxE
dXJhdGlvbik6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwpOgor
ICAgICAgICAoSlNDOjppc1ZhbGlkRHVyYXRpb24pOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1
cmF0aW9uOjppbml0aWFsaXplRHVyYXRpb24pOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0
aW9uOjpzaWduIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaDog
QWRkZWQuCisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6VGVt
cG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlv
bkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3Ry
dWN0b3IuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OlRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfQ1VT
VE9NX0dFVFRFUik6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpjcmVhdGVEdXJhdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL1ZN
LmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisK
IDIwMjEtMDctMjYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgVGVtcG9yYWwgdG8gZmVhdHVyZXMuanNvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CmluZGV4IDk4NzdlMGM3NWMwZTJjMWE3YzZmYTBlZjIwMDMzZjI1MDI4OWVhMTAuLmQx
MTQ1YWQ0NGQ5NmRjNTg0NmZkNGE4Zjc0ODkyYWMzYjBmZjFmMWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTEwNyw2ICsxMDcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
T0JKRUNUX0xVVF9TT1VSQ0VTCiAgICAgcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCiAgICAg
cnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL1N5bWJvbFByb3RvdHlw
ZS5jcHAKKyAgICBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCiAgICAgcnVu
dGltZS9UZW1wb3JhbE9iamVjdC5jcHAKIAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNzU0MmM3Zjc3
NDY1ZTI2ZTE5ZDRhNjhhNWRiNzYwOTFmZGQ0NjUzOS4uNTYzNTBjNWIxZjk5ZjAzMmU1Yjg5ZDA3
NDAwMjBkZDhjMDNhNjhhZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKQEAgLTE5MSw2ICsxOTEsNyBAQCBPQkpFQ1RfTFVUX0hFQURFUlMgPSBcCiAgICAgU3Ry
aW5nUHJvdG90eXBlLmx1dC5oIFwKICAgICBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAg
U3ltYm9sUHJvdG90eXBlLmx1dC5oIFwKKyAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmx1
dC5oIFwKICAgICBUZW1wb3JhbE9iamVjdC5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUubHV0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZDFjYjMyNmJl
NzA1ZDczMzkxZDE1ZWY0N2U3NGE5OTRmYzE4OThjLi41YzEzMTBlY2Q3ZWQ5ZDU0ZWM4YzhiNDMw
OGJiNzRkODU5ZDhmOTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQxNyw2
ICsxNDE3LDkgQEAKIAkJQTM4MkM1MzEyNjY3MTExRDAwNDJDRDk5IC8qIEluQnlWYXJpYW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzMwNUZCMTIw
QjBGNzg4MDBDRUI4MkIgLyogSW5CeVZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMzhEMjUwRTI1ODAwRDQ0MDA0MkJGREQgLyogSlNB
cnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEzOEQyNTBEMjU4MDBENDMwMDQyQkZERCAvKiBKU0FycmF5QnVm
ZmVyUHJvdG90eXBlSW5saW5lcy5oICovOyB9OwogCQlBMzhENUJGQzI2NjZEM0RBMDBBMTA5QTYg
LyogSW5CeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTM4RDVCRkEyNjY2RDNEQTAwQTEwOUE2IC8qIEluQnlTdGF0dXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBM0M3RURCNjI2QjBEQjM4
MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8q
IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsKKwkJQTNDN0VEQjkyNkIwREIzODAw
NEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1
cmF0aW9uLmggKi87IH07CisJCUEzQzdFREJBMjZCMERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29u
c3RydWN0b3IuaCAqLzsgfTsKIAkJQTNFRTg1NDMyNjI1MTRCMDAwRkM5QjhEIC8qIEludGxXb3Jr
YXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAvKiBJbnRsV29ya2Fyb3VuZC5jcHAgKi87IH07CiAJ
CUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRkY5QkM1MjIzNDc0NjYwMEIxQTlBQiAv
KiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUwM0ZBMTQx
ODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCAqLzsgfTsKQEAgLTQ0NzUs
NiArNDQ3OCwxMiBAQAogCQlBM0JGODg0RTI0NDgwQkUwMDAxQjlGMzUgLyogSW50bFJlbGF0aXZl
VGltZUZvcm1hdENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBM0JGODg0RjI0NDgwQkUwMDAxQjlGMzUgLyogSW50bFJlbGF0aXZlVGltZUZv
cm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNCRjg4NTAy
NDQ4MEJFMTAwMUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMDI2QjBEQjM2MDA0QzM0QzUgLyogVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEz
QzdFREIxMjZCMERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMjI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjQyNkIwREIzNzAwNEMzNEM1IC8q
IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTNDN0VEQjUyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEz
RkY5QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gWWFyckZsYWdzLmg7IHBhdGggPSB5YXJyL1lhcnJGbGFncy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0ZGOUJDNjIyMzQ3NDY2MDBCMUE5QUIgLyogWWFy
ckZsYWdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFlhcnJGbGFn
cy5jcHA7IHBhdGggPSB5YXJyL1lhcnJGbGFncy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1MDNGQTEzMTg4RTBGQUYwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEphdmFTY3JpcHRDYWxsRnJh
bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzk1OCw2ICs3OTY3LDEyIEBA
CiAJCQkJRTMxMTc5QTkyMjg4Mzg1RDAwNTE0QjJDIC8qIFN5bWJvbFRhYmxlT3JTY29wZURlcHRo
LmggKi8sCiAJCQkJQkRCNEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRlT2JqZWN0RGVz
Y3JpcHRvci5jcHAgKi8sCiAJCQkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvci5oICovLAorCQkJCUEzQzdFREIxMjZCMERCMzYwMDRDMzRDNSAvKiBU
ZW1wb3JhbER1cmF0aW9uLmNwcCAqLywKKwkJCQlBM0M3RURCMzI2QjBEQjM3MDA0QzM0QzUgLyog
VGVtcG9yYWxEdXJhdGlvbi5oICovLAorCQkJCUEzQzdFREIyMjZCMERCMzcwMDRDMzRDNSAvKiBU
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCUEzQzdFREI0MjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLywKKwkJCQlBM0M3RURC
NTI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAgKi8sCisJ
CQkJQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUu
aCAqLywKIAkJCQlGNkYxNTAxQjI2OTNEMzNFMDA0Qjk4RUYgLyogVGVtcG9yYWxOb3cuY3BwICov
LAogCQkJCUY2RjE1MDE4MjY5M0QzM0QwMDRCOThFRiAvKiBUZW1wb3JhbE5vdy5oICovLAogCQkJ
CUY2RjE1MDE5MjY5M0QzM0UwMDRCOThFRiAvKiBUZW1wb3JhbE9iamVjdC5jcHAgKi8sCkBAIC0x
MDY1OSw2ICsxMDY3NCw5IEBACiAJCQkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRh
eENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURDNzk5NzgzMUNERTlGQTAwMDRENEEwOSAv
KiBUYWdSZWdpc3RlcnNNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEVDQTYwOTFBRkRCRUEy
MDA0NDk3MzkgLyogVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBM0M3RURCOTI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTNDN0VEQkEyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25D
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTNDN0VEQjYyNkIwREIzODAwNEMzNEM1
IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY2RjE1
MDIxMjY5M0Q0NTAwMDRCOThFRiAvKiBUZW1wb3JhbE9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNDRBN0I0MjBCRjY4RDkwMDIyQjE3MSAvKiBUZXJtaW5hdGVkQ29k
ZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXgg
NTVkY2ExZmYwNTNmNGNlOTg1ZDIxZmQ2ZGJjM2RkM2IwZGU3Y2IwMC4uODk2YjY4NTIxZTE0MDhi
NGU5ZGU3ZWE1ZTc0YjMxYmVjNzdhMjE1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApA
QCAtMTAwOSw2ICsxMDA5LDkgQEAgcnVudGltZS9TeW1ib2xPYmplY3QuY3BwCiBydW50aW1lL1N5
bWJvbFByb3RvdHlwZS5jcHAKIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwCiBydW50aW1lL1RlbXBs
YXRlT2JqZWN0RGVzY3JpcHRvci5jcHAKK3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKK3J1
bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcAorcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlLmNwcAogcnVudGltZS9UZW1wb3JhbE5vdy5jcHAKIHJ1bnRpbWUvVGVt
cG9yYWxPYmplY3QuY3BwCiBydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyNGZjZjA4
MTVlMjUwNDk1ZTAzMTc5NGEwNmU0YjMxMDVjNzg0ZmI0Li5iYWVjMjlmNDY1NmE2NzUxYzQzNDQy
ZDYwZGVkZWE0YzY3YzAzOTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0yMDEsNiArMjAxLDggQEAKICNpbmNsdWRlICJTeW1i
b2xDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlN5bWJvbE9iamVjdC5oIgogI2luY2x1ZGUgIlN5
bWJvbFByb3RvdHlwZS5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKKyNpbmNsdWRl
ICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxPYmplY3Qu
aCIKICNpbmNsdWRlICJWTVRyYXBzSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21DYXBhYmlsaXRp
ZXMuaCIKQEAgLTEyMTIsNiArMTIxNCwxMyBAQCBjYXBpdGFsTmFtZSAjIyBDb25zdHJ1Y3Rvciog
bG93ZXJOYW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFsTmFtZQogICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5JbnRsLCBp
bnRsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
CiAKICAgICBpZiAoT3B0aW9uczo6dXNlVGVtcG9yYWwoKSkgeworICAgICAgICBtX2R1cmF0aW9u
U3RydWN0dXJlLmluaXRMYXRlcigKKyAgICAgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxT
dHJ1Y3R1cmU+JiBpbml0KSB7CisgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpOworICAgICAgICAg
ICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBlID0gVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlKGluaXQudm0sIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKKyAgICAgICAgICAgICAgICBpbml0LnNldChUZW1w
b3JhbER1cmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgZ2xvYmFsT2JqZWN0LCBkdXJh
dGlvblByb3RvdHlwZSkpOworICAgICAgICAgICAgfSk7CisKICAgICAgICAgVGVtcG9yYWxPYmpl
Y3QqIHRlbXBvcmFsID0gVGVtcG9yYWxPYmplY3Q6OmNyZWF0ZSh2bSwgVGVtcG9yYWxPYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcykpOwogICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+VGVtcG9yYWwsIHRlbXBvcmFsLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgfQpAQCAt
MjA4Niw2ICsyMDk1LDkgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIHRoaXNPYmplY3QtPm1fZGF0ZVRp
bWVGb3JtYXRTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9udW1i
ZXJGb3JtYXRTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAKKyAgICBpZiAoT3B0aW9uczo6dXNl
VGVtcG9yYWwoKSkKKyAgICAgICAgdGhpc09iamVjdC0+bV9kdXJhdGlvblN0cnVjdHVyZS52aXNp
dCh2aXNpdG9yKTsKKwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbnVsbEdldHRl
ckZ1bmN0aW9uKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX251bGxTZXR0ZXJG
dW5jdGlvbik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9udWxsU2V0dGVyU3Ry
aWN0RnVuY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgKaW5kZXggYTM1ZWZjZTdjNTI2MmY0OWQ5OGQ1YWI0MjEzYzg4MWI1YzI3MGFjMC4u
YjQzYjY3YTkzODQwNmI3MDEyMjJhZTM1MzMyMDhkNzIxN2E3Mjg5YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC0zMjQsNiArMzI0LDgg
QEAgcHVibGljOgogICAgIExhenlDbGFzc1N0cnVjdHVyZSBtX2RhdGVUaW1lRm9ybWF0U3RydWN0
dXJlOwogICAgIExhenlDbGFzc1N0cnVjdHVyZSBtX251bWJlckZvcm1hdFN0cnVjdHVyZTsKIAor
ICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2R1cmF0aW9uU3Ry
dWN0dXJlOworCiAgICAgV3JpdGVCYXJyaWVyPE51bGxHZXR0ZXJGdW5jdGlvbj4gbV9udWxsR2V0
dGVyRnVuY3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPE51bGxTZXR0ZXJGdW5jdGlvbj4gbV9udWxs
U2V0dGVyRnVuY3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPE51bGxTZXR0ZXJGdW5jdGlvbj4gbV9u
dWxsU2V0dGVyU3RyaWN0RnVuY3Rpb247CkBAIC04NzAsNiArODcyLDggQEAgcHVibGljOgogICAg
IEpTT2JqZWN0KiBudW1iZXJGb3JtYXRDb25zdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbnVtYmVyRm9y
bWF0U3RydWN0dXJlLmNvbnN0cnVjdG9yKHRoaXMpOyB9CiAgICAgSlNPYmplY3QqIG51bWJlckZv
cm1hdFByb3RvdHlwZSgpIHsgcmV0dXJuIG1fbnVtYmVyRm9ybWF0U3RydWN0dXJlLnByb3RvdHlw
ZSh0aGlzKTsgfQogCisgICAgU3RydWN0dXJlKiBkdXJhdGlvblN0cnVjdHVyZSgpIHsgcmV0dXJu
IG1fZHVyYXRpb25TdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CisKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHNldFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQoYm9vbCk7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCByZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDAxZGQzYjdkOWQ4NGYxZTczOTE3MjhiZWQ4MDc3ZmVkYjhlNWVmYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3Bw
CkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Nv
bnN0IENsYXNzSW5mbyBUZW1wb3JhbER1cmF0aW9uOjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBvcmFs
RHVyYXRpb24pIH07CisKK1RlbXBvcmFsRHVyYXRpb24qIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGF1dG8qIGZvcm1hdCA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsRHVyYXRpb24+KHZtLmhlYXApKSBUZW1w
b3JhbER1cmF0aW9uKHZtLCBzdHJ1Y3R1cmUpOworICAgIGZvcm1hdC0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIHJldHVybiBmb3JtYXQ7Cit9CisKK1N0cnVjdHVyZSogVGVtcG9yYWxEdXJhdGlv
bjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworfQorCitUZW1wb3JhbER1cmF0aW9uOjpUZW1wb3JhbER1cmF0aW9uKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7
Cit9CisKK3ZvaWQgVGVtcG9yYWxEdXJhdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorewor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBUZW1wb3JhbER1
cmF0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4oY2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30KKworREVG
SU5FX1ZJU0lUX0NISUxEUkVOKFRlbXBvcmFsRHVyYXRpb24pOworCitzdGF0aWMgYm9vbCBpc1Zh
bGlkRHVyYXRpb24oY29uc3Qgc3RkOjphcnJheTxkb3VibGUsIFRlbXBvcmFsRHVyYXRpb246Om51
bWJlck9mU3ViZHVyYXRpb25zPiYgc3ViZHVyYXRpb25zKQoreworICAgIGludCBzaWduID0gMDsK
KyAgICBmb3IgKGRvdWJsZSB2YWx1ZSA6IHN1YmR1cmF0aW9ucykgeworICAgICAgICBpZiAoIXN0
ZDo6aXNmaW5pdGUodmFsdWUpIHx8ICh2YWx1ZSA8IDAgJiYgc2lnbiA+IDApIHx8ICh2YWx1ZSA+
IDAgJiYgc2lnbiA8IDApKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlm
ICghc2lnbiAmJiB2YWx1ZSkKKyAgICAgICAgICAgIHNpZ24gPSB2YWx1ZSA+IDAgPyAxIDogLTE7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVGVtcG9yYWxEdXJhdGlvbjo6
aW5pdGlhbGl6ZUR1cmF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHN0ZDo6YXJy
YXk8ZG91YmxlLCBudW1iZXJPZlN1YmR1cmF0aW9ucz4mJiBzdWJkdXJhdGlvbnMpCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghaXNWYWxpZER1cmF0aW9uKHN1YmR1cmF0aW9ucykp
IHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJpbmNvbnNp
c3RlbnQgbnVtZXJpYyB2YWx1ZXMgcHJvdmlkZWQgdG8gRHVyYXRpb24gY29uc3RydWN0b3IiX3Mp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdWJkdXJhdGlvbnMgPSBXVEZNb3Zl
KHN1YmR1cmF0aW9ucyk7Cit9CisKK2ludCBUZW1wb3JhbER1cmF0aW9uOjpzaWduKCkgY29uc3QK
K3sKKyAgICBmb3IgKGRvdWJsZSB2YWx1ZSA6IG1fc3ViZHVyYXRpb25zKSB7CisgICAgICAgIGlm
ICh2YWx1ZSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgaWYgKHZhbHVl
ID4gMCkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJldHVybiAwOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1RlbXBvcmFsRHVyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzViOThkOGJiZWNmMWFiZjNhMTkxY2Y0
YTMxOGQ0Y2M3NTI3ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgVGVtcG9yYWxEdXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KGNlbGwpLT5UZW1wb3JhbER1cmF0aW9uOjp+VGVtcG9y
YWxEdXJhdGlvbigpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLnRlbXBvcmFsRHVyYXRpb25TcGFjZTxt
b2RlPigpOworICAgIH0KKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uKiBjcmVhdGUoVk0m
LCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlN1YmR1cmF0aW9ucyA9IDEwOworICAg
IHZvaWQgaW5pdGlhbGl6ZUR1cmF0aW9uKEpTR2xvYmFsT2JqZWN0Kiwgc3RkOjphcnJheTxkb3Vi
bGUsIG51bWJlck9mU3ViZHVyYXRpb25zPiYmKTsKKworICAgIGludCBzaWduKCkgY29uc3Q7CisK
KyAgICBkb3VibGUgeWVhcnMoKSBjb25zdCB7IHJldHVybiBtX3N1YmR1cmF0aW9uc1swXTsgfQor
ICAgIGRvdWJsZSBtb250aHMoKSBjb25zdCB7IHJldHVybiBtX3N1YmR1cmF0aW9uc1sxXTsgfQor
ICAgIGRvdWJsZSB3ZWVrcygpIGNvbnN0IHsgcmV0dXJuIG1fc3ViZHVyYXRpb25zWzJdOyB9Cisg
ICAgZG91YmxlIGRheXMoKSBjb25zdCB7IHJldHVybiBtX3N1YmR1cmF0aW9uc1szXTsgfQorICAg
IGRvdWJsZSBob3VycygpIGNvbnN0IHsgcmV0dXJuIG1fc3ViZHVyYXRpb25zWzRdOyB9CisgICAg
ZG91YmxlIG1pbnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX3N1YmR1cmF0aW9uc1s1XTsgfQorICAg
IGRvdWJsZSBzZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gbV9zdWJkdXJhdGlvbnNbNl07IH0KKyAg
ICBkb3VibGUgbWlsbGlzZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gbV9zdWJkdXJhdGlvbnNbN107
IH0KKyAgICBkb3VibGUgbWljcm9zZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gbV9zdWJkdXJhdGlv
bnNbOF07IH0KKyAgICBkb3VibGUgbmFub3NlY29uZHMoKSBjb25zdCB7IHJldHVybiBtX3N1YmR1
cmF0aW9uc1s5XTsgfQorCitwcml2YXRlOgorICAgIFRlbXBvcmFsRHVyYXRpb24oVk0mLCBTdHJ1
Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKKworICAgIHN0ZDo6YXJyYXk8ZG91YmxlLCBudW1iZXJPZlN1YmR1cmF0aW9u
cz4gbV9zdWJkdXJhdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29u
c3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczMDU0ZmNlZDcyZDJhOTYwMDRmMWExMTc4NThjY2Fm
NDc4M2Y0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRl
bXBvcmFsRHVyYXRpb24uaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVD
VElCTEUoVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKTsKKworY29uc3QgQ2xhc3NJbmZvIFRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3RvcikgfTsKKworVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKiBUZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBkdXJhdGlvblByb3RvdHlwZSkKK3sKKyAg
ICBhdXRvKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFs
RHVyYXRpb25Db25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rv
cih2bSwgc3RydWN0dXJlKTsKKyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIGR1
cmF0aW9uUHJvdG90eXBlKTsKKyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1N0cnVjdHVy
ZSogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQor
CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjYWxsVGVtcG9yYWxEdXJhdGlvbik7
CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RUZW1wb3JhbER1cmF0
aW9uKTsKKworVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpUZW1wb3JhbER1cmF0aW9uQ29u
c3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSwgY2FsbFRlbXBvcmFsRHVyYXRpb24sIGNvbnN0cnVjdFRlbXBvcmFsRHVyYXRpb24p
Cit7Cit9CisKK3ZvaWQgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBlKQor
eworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCAwLCAiRHVyYXRpb24iX3MsIFByb3BlcnR5
QWRkaXRpb25Nb2RlOjpXaXRob3V0U3RydWN0dXJlVHJhbnNpdGlvbik7CisgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgZHVyYXRp
b25Qcm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmli
dXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBkdXJh
dGlvblByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPmNvbnN0cnVjdG9yLCB0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjb25z
dHJ1Y3RUZW1wb3JhbER1cmF0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVj
dCogbmV3VGFyZ2V0ID0gYXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSk7CisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJFKHZtLCBkdXJhdGlv
blN0cnVjdHVyZSwgbmV3VGFyZ2V0LCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBUZW1wb3JhbER1cmF0aW9uKiBkdXJh
dGlvbiA9IFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKKyAgICBBU1NF
UlQoZHVyYXRpb24pOworCisgICAgc3RkOjphcnJheTxkb3VibGUsIFRlbXBvcmFsRHVyYXRpb246
Om51bWJlck9mU3ViZHVyYXRpb25zPiBzdWJkdXJhdGlvbnMgeyB9OworICAgIGF1dG8gY291bnQg
PSBzdGQ6Om1pbjxzaXplX3Q+KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpLCBUZW1wb3JhbER1
cmF0aW9uOjpudW1iZXJPZlN1YmR1cmF0aW9ucyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKSB7CisgICAgICAgIHN1YmR1cmF0aW9uc1tpXSA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoaSkudG9JbnRlZ2VyT3JJbmZpbml0eShnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworICAgIHNjb3BlLnJlbGVhc2Uo
KTsKKyAgICBkdXJhdGlvbi0+aW5pdGlhbGl6ZUR1cmF0aW9uKGdsb2JhbE9iamVjdCwgV1RGTW92
ZShzdWJkdXJhdGlvbnMpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGR1cmF0aW9uKTsK
K30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxUZW1wb3JhbER1cmF0aW9uLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5v
dEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRHVyYXRp
b24iKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43NDI0NWEzMTA2OTVhY2QzNWI1ZDZhYTU2ZTkwMDRmN2UzYjcwMzgyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlv
bkNvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU7CisKK2NsYXNzIFRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3RvciBmaW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBCYXNlID0gSW50ZXJuYWxGdW5jdGlvbjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSop
OworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgVGVt
cG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqKTsKK307CitTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Is
IEludGVybmFsRnVuY3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODg5YTFiZjk5NDZmYjU2ZmUxMmIyMmI2ZDc4OTAwZjkzYjI4Nzc0
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJh
dGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9H
RVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclllYXJzKTsKK3N0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNb250
aHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUdldHRlcldlZWtzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJEYXlzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9D
VVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJIb3Vycyk7CitzdGF0
aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0
dGVyTWludXRlcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlR2V0dGVyU2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9N
X0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWlsbGlzZWNvbmRzKTsKK3N0
YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVH
ZXR0ZXJNaWNyb3NlY29uZHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck5hbm9zZWNvbmRzKTsKK3N0YXRpYyBKU0NfREVD
TEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJTaWduKTsK
K3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVHZXR0ZXJCbGFuayk7CisKK30KKworI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGUubHV0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZTo6c19pbmZvID0geyAiVGVtcG9yYWwuRHVyYXRpb24iLCAmQmFzZTo6
c19pbmZvLCAmZHVyYXRpb25Qcm90b3R5cGVUYWJsZSwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKSB9OworCisvKiBTb3VyY2UgZm9yIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUubHV0LmgKK0BiZWdpbiBkdXJhdGlvblByb3RvdHlwZVRhYmxl
CisgIHllYXJzICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclllYXJz
ICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbW9udGhzICAg
ICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTW9udGhzICAgICAgICAgICBE
b250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICB3ZWVrcyAgICAgICAgICAgIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJXZWVrcyAgICAgICAgICAgIERvbnRFbnVtfFJlYWRP
bmx5fEN1c3RvbUFjY2Vzc29yCisgIGRheXMgICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUdldHRlckRheXMgICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNj
ZXNzb3IKKyAgaG91cnMgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVy
SG91cnMgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBtaW51
dGVzICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaW51dGVzICAgICAg
ICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIHNlY29uZHMgICAgICAgICAg
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNlY29uZHMgICAgICAgICAgRG9udEVudW18
UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbWlsbGlzZWNvbmRzICAgICBUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlR2V0dGVyTWlsbGlzZWNvbmRzICAgICBEb250RW51bXxSZWFkT25seXxDdXN0
b21BY2Nlc3NvcgorICBtaWNyb3NlY29uZHMgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVH
ZXR0ZXJNaWNyb3NlY29uZHMgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisg
IG5hbm9zZWNvbmRzICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck5hbm9zZWNv
bmRzICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgc2lnbiAgICAgICAg
ICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2lnbiAgICAgICAgICAgICBEb250
RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBibGFuayAgICAgICAgICAgIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJCbGFuayAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5
fEN1c3RvbUFjY2Vzc29yCitAZW5kCisqLworCitUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK3sKKyAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICByZXR1cm4gb2JqZWN0OworfQorCitTdHJ1Y3R1cmUqIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKK30KKworVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6VGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQoreworfQorCit2b2lkIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RB
R19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJZZWFycywgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRl
bXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlm
ICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUueWVhcnMgY2FsbGVkIG9uIHZh
bHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOwor
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
ZHVyYXRpb24tPnllYXJzKCkpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTW9udGhzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVt
cG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5tb250aHMgY2FsbGVkIG9uIHZh
bHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOwor
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
ZHVyYXRpb24tPm1vbnRocygpKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlcldlZWtzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVt
cG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS53ZWVrcyBjYWxsZWQgb24gdmFs
dWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihk
dXJhdGlvbi0+d2Vla3MoKSkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJEYXlzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9y
YWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFk
dXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5kYXlzIGNhbGxlZCBvbiB2YWx1ZSB0
aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0
aW9uLT5kYXlzKCkpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlR2V0dGVySG91cnMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1
cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0
aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmhvdXJzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0
J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9u
LT5ob3VycygpKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1
cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0
aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1pbnV0ZXMgY2FsbGVkIG9uIHZhbHVlIHRo
YXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRp
b24tPm1pbnV0ZXMoKSkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJTZWNvbmRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9y
YWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFk
dXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5zZWNvbmRzIGNhbGxlZCBvbiB2YWx1
ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKwor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1
cmF0aW9uLT5zZWNvbmRzKCkpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWlsbGlzZWNvbmRzLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nh
c3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5taWxsaXNlY29uZHMg
Y2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVy
YXRpb24iX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoZHVyYXRpb24tPm1pbGxpc2Vjb25kcygpKSkpOworfQorCitKU0NfREVGSU5F
X0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pY3Jvc2Vjb25k
cywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVy
YXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90
b3R5cGUubWljcm9zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBp
bml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taWNyb3NlY29uZHMoKSkp
KTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVHZXR0ZXJOYW5vc2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24q
Pih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1w
b3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubmFub3NlY29uZHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQn
cyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24t
Pm5hbm9zZWNvbmRzKCkpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2lnbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFs
RHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVy
YXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc2lnbiBjYWxsZWQgb24gdmFsdWUgdGhh
dCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlv
bi0+c2lnbigpKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUdldHRlckJsYW5rLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJh
dGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlv
bikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5ibGFuayBjYWxsZWQgb24gdmFsdWUgdGhhdCdz
IG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWR1cmF0aW9u
LT5zaWduKCkpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY4Nzc1ZWViMDdiZTYwMmNmYWVmMDM4Nzk0ZTk3YzYyOTM1NGQzNmUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJu
ICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisg
ICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1RlbXBvcmFsT2JqZWN0LmNwcAppbmRleCA1OThhNDA2ODdmMTQyZDdlY2FlODA5OGI4ODY4OTFh
MzFkZTZkNGFhLi43ODk5YWMyOTdjZmE5M2ZkMzViNTEyNjE2MWNjOGU3YWVjMjIxYTA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDEwICsyMSwx
MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlbXBvcmFsT2JqZWN0LmgiCiAK
KyNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdElu
bGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJUZW1wb3Jh
bER1cmF0aW9uQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxOb3cuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0z
Nyw2ICs0MSwxMyBAQCBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVOb3dPYmplY3QoVk0mIHZtLCBKU09i
amVjdCogb2JqZWN0KQogICAgIHJldHVybiBUZW1wb3JhbE5vdzo6Y3JlYXRlKHZtLCBUZW1wb3Jh
bE5vdzo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QpKTsKIH0KIAorc3RhdGljIEpT
VmFsdWUgY3JlYXRlRHVyYXRpb25Db25zdHJ1Y3RvcihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgVGVtcG9yYWxPYmplY3QqIHRlbXBvcmFsT2JqZWN0ID0ganNDYXN0PFRlbXBvcmFs
T2JqZWN0Kj4ob2JqZWN0KTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdGVt
cG9yYWxPYmplY3QtPmdsb2JhbE9iamVjdCh2bSk7CisgICAgcmV0dXJuIFRlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uUHJv
dG90eXBlKCkpLCBqc0Nhc3Q8VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSo+KGdsb2JhbE9iamVj
dC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNpbmNsdWRlICJUZW1wb3JhbE9iamVjdC5sdXQuaCIKQEAg
LTQ2LDYgKzU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAvKiBTb3VyY2UgZm9yIFRlbXBvcmFsT2Jq
ZWN0Lmx1dC5oCiBAYmVnaW4gdGVtcG9yYWxPYmplY3RUYWJsZQogICBub3cgICAgICAgICAgICBj
cmVhdGVOb3dPYmplY3QgICAgICAgICAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sK
KyAgRHVyYXRpb24gICAgICAgY3JlYXRlRHVyYXRpb25Db25zdHJ1Y3RvciAgICAgICBEb250RW51
bXxQcm9wZXJ0eUNhbGxiYWNrCiBAZW5kCiAqLwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKaW5kZXggMWRlYTZhMTNjYjRjNDI5YjliMDcxOThiYWI2YzQ0ZjMxNDY5ZDA2OC4uZGQ5
M2IxNTkxZGZjYmExMjY4OTViNmQ4OWRjMmI5YzA4MWY1N2U2OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcApAQCAtMTYyLDYgKzE2Miw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJl
Q2hhaW4uaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3ltYm9s
T2JqZWN0LmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgogI2luY2x1ZGUgIlRlc3RS
dW5uZXJVdGlscy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5
cGVQcm9maWxlci5oIgpAQCAtMzI4LDYgKzMyOSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBI
ZWFwVHlwZSBoZWFwVHlwZSwgV1RGOjpSdW5Mb29wKiBydW5Mb29wLCBib29sKiBzdWNjZXNzKQog
ICAgICwgaW50bFNlZ21lbnRJdGVyYXRvckhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNy
ZWF0ZTxJbnRsU2VnbWVudEl0ZXJhdG9yPigpKQogICAgICwgaW50bFNlZ21lbnRlckhlYXBDZWxs
VHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxJbnRsU2VnbWVudGVyPigpKQogICAgICwgaW50
bFNlZ21lbnRzSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEludGxTZWdtZW50
cz4oKSkKKyAgICAsIHRlbXBvcmFsRHVyYXRpb25IZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBl
OjpjcmVhdGU8VGVtcG9yYWxEdXJhdGlvbj4oKSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNy
ZWF0ZTxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPigpKQogICAgICwgd2ViQXNzZW1ibHlGdW5jdGlv
bkhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxXZWJBc3NlbWJseUZ1bmN0aW9u
PigpKQpAQCAtMTYxNyw2ICsxNjE5LDcgQEAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKGludGxSZWxhdGl2ZVRpbWVGb3JtYXRTcGFjZSwgaW50bFJlbGF0aXYKIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudEl0ZXJhdG9yU3Bh
Y2UsIGludGxTZWdtZW50SXRlcmF0b3JIZWFwQ2VsbFR5cGUuZ2V0KCksIEludGxTZWdtZW50SXRl
cmF0b3IpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21l
bnRlclNwYWNlLCBpbnRsU2VnbWVudGVySGVhcENlbGxUeXBlLmdldCgpLCBJbnRsU2VnbWVudGVy
KQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50c1Nw
YWNlLCBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGUuZ2V0KCksIEludGxTZWdtZW50cykKK0RZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh0ZW1wb3JhbER1cmF0aW9uU3BhY2Us
IHRlbXBvcmFsRHVyYXRpb25IZWFwQ2VsbFR5cGUuZ2V0KCksIFRlbXBvcmFsRHVyYXRpb24pCiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKGpzVG9XYXNtSUNDYWxsZWVTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNU
b1dhc21JQ0NhbGxlZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3
ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlw
ZS5nZXQoKSwgSlNXZWJBc3NlbWJseUNvZGVCbG9jaykgLy8gSGFzaDoweDlhZDk5NWNkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCBiY2VkOTg0M2ZjZTgyNjIwZTg4Yjk3NTAxODNh
ZWI2MTU1NjI2MDY5Li5jYzZmNGFjNGU4MjNlMTMyMjUxNjc1MGZjMmY5ZjIxMjY1NDFkYTcxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTE4NSw2ICsxODUsNyBAQCBjbGFzcyBT
dHJ1Y3R1cmU7CiBjbGFzcyBSZWdFeHA7CiAjZW5kaWYKIGNsYXNzIFN5bWJvbDsKK2NsYXNzIFRl
bXBvcmFsRHVyYXRpb247CiBjbGFzcyBUeXBlZEFycmF5Q29udHJvbGxlcjsKIGNsYXNzIFVubGlu
a2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOwpAQCAtNDQ0LDYgKzQ0
NSw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiBpbnRs
U2VnbWVudEl0ZXJhdG9ySGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFw
Q2VsbFR5cGU+IGludGxTZWdtZW50ZXJIZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PElzb0hlYXBDZWxsVHlwZT4gaW50bFNlZ21lbnRzSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHRlbXBvcmFsRHVyYXRpb25IZWFwQ2VsbFR5cGU7CiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5
cGU+IHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU7CkBAIC02
MTUsNiArNjE3LDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoaW50bFNlZ21lbnRJdGVyYXRvclNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoaW50bFNlZ21lbnRlclNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIoaW50bFNlZ21lbnRzU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUih0ZW1wb3JhbER1cmF0aW9uU3BhY2UpCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoanNUb1dh
c21JQ0NhbGxlZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
d2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434956</attachid>
            <date>2021-08-04 17:46:38 -0700</date>
            <delta_ts>2021-08-06 16:51:48 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-228532-20210804174637.patch</filename>
            <type>text/plain</type>
            <size>65778</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDRiYTFjNDM3MjllYjAwYWE4ZDVmNWJjN2E0ZmZjMmM3ZWQ5YzQ1Li4wNTNhOTljYzkyMTRlY2Qy
MDg1OTgwYTRhOWIzYWJlOTQ3MTQxMjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NiBAQAorMjAyMS0wOC0wNCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpkdXJhdGlvblN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OlRlbXBvcmFsRHVyYXRpb24pOgorICAgICAg
ICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OmlzVmFsaWREdXJhdGlvbik6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnNpZ24g
Y29uc3QpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpuZWdhdGVkIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6YWJzIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6VGVtcG9yYWxEdXJhdGlvbjo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUv
VGVtcG9yYWxEdXJhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0
aW9uQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb25D
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJh
dGlvbkNvbnN0cnVjdG9yOjpUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAo
SlNDOjpUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1Rl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1Rl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZTo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSk6CisgICAgICAgIChK
U0M6OlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklO
RV9DVVNUT01fR0VUVEVSKToKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OmNyZWF0ZUR1cmF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpz
aW5ndWxhclVuaXQpOgorICAgICAgICAoSlNDOjp0ZW1wb3JhbFVuaXRUeXBlKToKKyAgICAgICAg
KEpTQzo6dGVtcG9yYWxTbWFsbGVzdFVuaXQpOgorICAgICAgICAoSlNDOjp0ZW1wb3JhbEZyYWN0
aW9uYWxTZWNvbmREaWdpdHMpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxPYmplY3QuaDoK
KyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIw
MjEtMDgtMDQgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUuY29tPgogCiAgICAgICAg
IFtBUk02NF0gRml4IFpvb20gYmxhY2sgc2NyZWVuIGR1cmluZyB2aWRlbyBtZWV0aW5nIG9uIFNh
ZmFyaQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDk4NzdlMGM3NWMwZTJj
MWE3YzZmYTBlZjIwMDMzZjI1MDI4OWVhMTAuLmQxMTQ1YWQ0NGQ5NmRjNTg0NmZkNGE4Zjc0ODky
YWMzYjBmZjFmMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEwNyw2
ICsxMDcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfT0JKRUNUX0xVVF9TT1VSQ0VTCiAgICAgcnVu
dGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5j
cHAKICAgICBydW50aW1lL1N5bWJvbFByb3RvdHlwZS5jcHAKKyAgICBydW50aW1lL1RlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAKIAog
ICAgIHdhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UKaW5kZXggNzU0MmM3Zjc3NDY1ZTI2ZTE5ZDRhNjhhNWRiNzYwOTFmZGQ0
NjUzOS4uNTYzNTBjNWIxZjk5ZjAzMmU1Yjg5ZDA3NDAwMjBkZDhjMDNhNjhhZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTE5MSw2ICsxOTEsNyBAQCBP
QkpFQ1RfTFVUX0hFQURFUlMgPSBcCiAgICAgU3RyaW5nUHJvdG90eXBlLmx1dC5oIFwKICAgICBT
eW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgU3ltYm9sUHJvdG90eXBlLmx1dC5oIFwKKyAg
ICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmx1dC5oIFwKICAgICBUZW1wb3JhbE9iamVjdC5s
dXQuaCBcCiAgICAgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaCBcCiAg
ICAgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUubHV0LmggXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAwZDFjYjMyNmJlNzA1ZDczMzkxZDE1ZWY0N2U3NGE5OTRmYzE4
OThjLi40ZDlkYmU5YzdjYjRkNzNlYmY4MzY0ODE3NmJhMjI0OThhOTkwNzE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQxNyw2ICsxNDE3LDkgQEAKIAkJQTM4MkM1MzEyNjY3
MTExRDAwNDJDRDk5IC8qIEluQnlWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMzMwNUZCMTIwQjBGNzg4MDBDRUI4MkIgLyogSW5CeVZhcmlh
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
MzhEMjUwRTI1ODAwRDQ0MDA0MkJGREQgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzOEQyNTBE
MjU4MDBENDMwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlSW5saW5lcy5oICovOyB9
OwogCQlBMzhENUJGQzI2NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTM4RDVCRkEyNjY2RDNEQTAwQTEw
OUE2IC8qIEluQnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUu
aCAqLzsgfTsKKwkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIz
MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CisJCUEzQzdFREJB
MjZCMERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJQTNFRTg1
NDMyNjI1MTRCMDAwRkM5QjhEIC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAv
KiBJbnRsV29ya2Fyb3VuZC5jcHAgKi87IH07CiAJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAv
KiBZYXJyRmxhZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEzRkY5QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAx
MTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3Jp
cHRDYWxsRnJhbWUuaCAqLzsgfTsKQEAgLTQ0NzUsNiArNDQ3OCwxMiBAQAogCQlBM0JGODg0RTI0
NDgwQkUwMDAxQjlGMzUgLyogSW50bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25z
dHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0JGODg0RjI0NDgwQkUw
MDAxQjlGMzUgLyogSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNCRjg4NTAyNDQ4MEJFMTAwMUI5RjM1IC8qIEludGxSZWxh
dGl2ZVRpbWVGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bFJl
bGF0aXZlVGltZUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURC
MDI2QjBEQjM2MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREIxMjZCMERCMzYwMDRDMzRDNSAvKiBU
ZW1wb3JhbER1cmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRlbXBvcmFsRHVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3
RURCMjI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREIzMjZCMERC
MzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTNDN0VEQjQyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uQ29u
c3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjUyNkIwREIz
NzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzRkY5QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZ
YXJyRmxhZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckZsYWdzLmg7
IHBhdGggPSB5YXJyL1lhcnJGbGFncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
M0ZGOUJDNjIyMzQ3NDY2MDBCMUE5QUIgLyogWWFyckZsYWdzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFlhcnJGbGFncy5jcHA7IHBhdGggPSB5YXJyL1lhcnJGbGFn
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MDNGQTEzMTg4RTBGQUYwMDEx
MEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzk1OCw2ICs3OTY3LDEyIEBACiAJCQkJRTMxMTc5QTkyMjg4Mzg1RDAwNTE0
QjJDIC8qIFN5bWJvbFRhYmxlT3JTY29wZURlcHRoLmggKi8sCiAJCQkJQkRCNEI1RTA5OUNENEMx
QkIzQzFDRjA1IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5jcHAgKi8sCiAJCQkJNzBFQ0E2
MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oICovLAorCQkJ
CUEzQzdFREIxMjZCMERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNwcCAqLywKKwkJ
CQlBM0M3RURCMzI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovLAorCQkJ
CUEzQzdFREIyMjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iu
Y3BwICovLAorCQkJCUEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9u
Q29uc3RydWN0b3IuaCAqLywKKwkJCQlBM0M3RURCNTI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZS5jcHAgKi8sCisJCQkJQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1
IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLywKIAkJCQlGNkYxNTAxQjI2OTNEMzNF
MDA0Qjk4RUYgLyogVGVtcG9yYWxOb3cuY3BwICovLAogCQkJCUY2RjE1MDE4MjY5M0QzM0QwMDRC
OThFRiAvKiBUZW1wb3JhbE5vdy5oICovLAogCQkJCUY2RjE1MDE5MjY5M0QzM0UwMDRCOThFRiAv
KiBUZW1wb3JhbE9iamVjdC5jcHAgKi8sCkBAIC0xMDY1OSw3ICsxMDY3NCwxMSBAQAogCQkJCUE3
ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlEQzc5OTc4MzFDREU5RkEwMDA0RDRBMDkgLyogVGFnUmVnaXN0ZXJzTW9kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzBFQ0E2MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1
IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREJBMjZCMERC
MzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAorCQkJCUEzQzdFREI2MjZCMERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNkYxNTAyMTI2OTNENDUwMDA0Qjk4RUYgLyogVGVt
cG9yYWxPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBM0ZBOTczODI2QkIzNTU2MDBG
NzEwNjAgLyogVGVtcG9yYWxPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0
RTU0RjE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjQ0QTdCNDIwQkY2OEQ5MDAyMkIxNzEgLyogVGVybWluYXRlZENvZGVPcmlnaW4uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQTJDMTdDMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVy
VXRpbHMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IGE2
NDcwMmRiNjAxY2MyMWFiYjRjMjYyOTQ1N2RkMWE3NTljMzAyMGQuLjNjMmM2ZjAwOTY2N2M4M2Fj
MTk0N2E0NjM0OWM2N2FiOTJlYzIyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAg
LTEwMTAsNiArMTAxMCw5IEBAIHJ1bnRpbWUvU3ltYm9sT2JqZWN0LmNwcAogcnVudGltZS9TeW1i
b2xQcm90b3R5cGUuY3BwCiBydW50aW1lL1N5bWJvbFRhYmxlLmNwcAogcnVudGltZS9UZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3IuY3BwCitydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwCitydW50
aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAKK3J1bnRpbWUvVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZS5jcHAKIHJ1bnRpbWUvVGVtcG9yYWxOb3cuY3BwCiBydW50aW1lL1RlbXBv
cmFsT2JqZWN0LmNwcAogcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRleCBkYzYwMTlm
NDVmZDk4YjQzN2E1YmY2ZTI2NTg0YTBhMzQ2MzJmYWRjLi5kMjVkMDJiNmZjZDllZWMzMjg5NThm
M2NlMDQ2MTU2Y2Q2ZmM5MzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTE5OCw2ICsxOTgsNyBAQAogICAgIG1hY3JvKHNl
dCkgXAogICAgIG1hY3JvKHNpemUpIFwKICAgICBtYWNybyhzbGljZSkgXAorICAgIG1hY3JvKHNt
YWxsZXN0VW5pdCkgXAogICAgIG1hY3JvKHNvdXJjZSkgXAogICAgIG1hY3JvKHNvdXJjZUNvZGUp
IFwKICAgICBtYWNybyhzb3VyY2VVUkwpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyNGZjZjA4MTVlMjUwNDk1ZTAzMTc5NGEw
NmU0YjMxMDVjNzg0ZmI0Li5iYWVjMjlmNDY1NmE2NzUxYzQzNDQyZDYwZGVkZWE0YzY3YzAzOTQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCkBAIC0yMDEsNiArMjAxLDggQEAKICNpbmNsdWRlICJTeW1ib2xDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIlN5bWJvbE9iamVjdC5oIgogI2luY2x1ZGUgIlN5bWJvbFByb3RvdHlwZS5oIgor
I2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxPYmplY3QuaCIKICNpbmNsdWRlICJWTVRy
YXBzSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21DYXBhYmlsaXRpZXMuaCIKQEAgLTEyMTIsNiAr
MTIxNCwxMyBAQCBjYXBpdGFsTmFtZSAjIyBDb25zdHJ1Y3RvciogbG93ZXJOYW1lICMjIENvbnN0
cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFsTmFtZQogICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5JbnRsLCBpbnRsLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKICAgICBpZiAoT3B0aW9u
czo6dXNlVGVtcG9yYWwoKSkgeworICAgICAgICBtX2R1cmF0aW9uU3RydWN0dXJlLmluaXRMYXRl
cigKKyAgICAgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7
CisgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxK
U0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpOworICAgICAgICAgICAgICAgIFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBlID0gVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZTo6Y3JlYXRlKGluaXQudm0sIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShpbml0LnZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90
eXBlKCkpKTsKKyAgICAgICAgICAgICAgICBpbml0LnNldChUZW1wb3JhbER1cmF0aW9uOjpjcmVh
dGVTdHJ1Y3R1cmUoaW5pdC52bSwgZ2xvYmFsT2JqZWN0LCBkdXJhdGlvblByb3RvdHlwZSkpOwor
ICAgICAgICAgICAgfSk7CisKICAgICAgICAgVGVtcG9yYWxPYmplY3QqIHRlbXBvcmFsID0gVGVt
cG9yYWxPYmplY3Q6OmNyZWF0ZSh2bSwgVGVtcG9yYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2
bSwgdGhpcykpOwogICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+VGVtcG9yYWwsIHRlbXBvcmFsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgfQpAQCAtMjA4Niw2ICsyMDk1LDkgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogICAgIHRoaXNPYmplY3QtPm1fZGF0ZVRpbWVGb3JtYXRTdHJ1Y3R1cmUu
dmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9udW1iZXJGb3JtYXRTdHJ1Y3R1cmUu
dmlzaXQodmlzaXRvcik7CiAKKyAgICBpZiAoT3B0aW9uczo6dXNlVGVtcG9yYWwoKSkKKyAgICAg
ICAgdGhpc09iamVjdC0+bV9kdXJhdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKwogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbnVsbEdldHRlckZ1bmN0aW9uKTsKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX251bGxTZXR0ZXJGdW5jdGlvbik7CiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9udWxsU2V0dGVyU3RyaWN0RnVuY3Rpb24pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggYTM1
ZWZjZTdjNTI2MmY0OWQ5OGQ1YWI0MjEzYzg4MWI1YzI3MGFjMC4uYjQzYjY3YTkzODQwNmI3MDEy
MjJhZTM1MzMyMDhkNzIxN2E3Mjg5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC0zMjQsNiArMzI0LDggQEAgcHVibGljOgogICAgIExh
enlDbGFzc1N0cnVjdHVyZSBtX2RhdGVUaW1lRm9ybWF0U3RydWN0dXJlOwogICAgIExhenlDbGFz
c1N0cnVjdHVyZSBtX251bWJlckZvcm1hdFN0cnVjdHVyZTsKIAorICAgIExhenlQcm9wZXJ0eTxK
U0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2R1cmF0aW9uU3RydWN0dXJlOworCiAgICAgV3Jp
dGVCYXJyaWVyPE51bGxHZXR0ZXJGdW5jdGlvbj4gbV9udWxsR2V0dGVyRnVuY3Rpb247CiAgICAg
V3JpdGVCYXJyaWVyPE51bGxTZXR0ZXJGdW5jdGlvbj4gbV9udWxsU2V0dGVyRnVuY3Rpb247CiAg
ICAgV3JpdGVCYXJyaWVyPE51bGxTZXR0ZXJGdW5jdGlvbj4gbV9udWxsU2V0dGVyU3RyaWN0RnVu
Y3Rpb247CkBAIC04NzAsNiArODcyLDggQEAgcHVibGljOgogICAgIEpTT2JqZWN0KiBudW1iZXJG
b3JtYXRDb25zdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbnVtYmVyRm9ybWF0U3RydWN0dXJlLmNvbnN0
cnVjdG9yKHRoaXMpOyB9CiAgICAgSlNPYmplY3QqIG51bWJlckZvcm1hdFByb3RvdHlwZSgpIHsg
cmV0dXJuIG1fbnVtYmVyRm9ybWF0U3RydWN0dXJlLnByb3RvdHlwZSh0aGlzKTsgfQogCisgICAg
U3RydWN0dXJlKiBkdXJhdGlvblN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fZHVyYXRpb25TdHJ1Y3R1
cmUuZ2V0KHRoaXMpOyB9CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFJlbW90ZURl
YnVnZ2luZ0VuYWJsZWQoYm9vbCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCByZW1vdGVE
ZWJ1Z2dpbmdFbmFibGVkKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODYzNjJjZTRmYmZkNzgy
NWI2NDE0YWNkYzZlMjY4N2ZlNWYwOGZhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwCkBAIC0wLDAgKzEsMjAxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZW1wb3Jh
bER1cmF0aW9uLmgiCisKKyNpbmNsdWRlICJJbnRsT2JqZWN0SW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gVGVtcG9yYWxEdXJhdGlvbjo6c19pbmZv
ID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShUZW1wb3JhbER1cmF0aW9uKSB9OworCitUZW1wb3JhbER1cmF0aW9uKiBUZW1w
b3JhbER1cmF0aW9uOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ViZHVy
YXRpb25zJiYgc3ViZHVyYXRpb25zKQoreworICAgIGF1dG8qIGZvcm1hdCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsRHVyYXRpb24+KHZtLmhlYXApKSBUZW1wb3JhbER1cmF0
aW9uKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoc3ViZHVyYXRpb25zKSk7CisgICAgZm9ybWF0LT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIGZvcm1hdDsKK30KKworU3RydWN0dXJlKiBU
ZW1wb3JhbER1cmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlRlbXBv
cmFsRHVyYXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ViZHVyYXRpb25zJiYg
c3ViZHVyYXRpb25zKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9zdWJkdXJh
dGlvbnMoV1RGTW92ZShzdWJkdXJhdGlvbnMpKQoreworfQorCit2b2lkIFRlbXBvcmFsRHVyYXRp
b246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKK30KKworYm9vbCBpc1ZhbGlk
RHVyYXRpb24oY29uc3QgVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zJiBzdWJkdXJhdGlv
bnMpCit7CisgICAgaW50IHNpZ24gPSAwOworICAgIGZvciAoZG91YmxlIHZhbHVlIDogc3ViZHVy
YXRpb25zKSB7CisgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZSh2YWx1ZSkgfHwgKHZhbHVlIDwg
MCAmJiBzaWduID4gMCkgfHwgKHZhbHVlID4gMCAmJiBzaWduIDwgMCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFzaWduICYmIHZhbHVlKQorICAgICAgICAgICAg
c2lnbiA9IHZhbHVlID4gMCA/IDEgOiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworaW50IFRlbXBvcmFsRHVyYXRpb246OnNpZ24oKSBjb25zdAoreworICAgIGZvciAoZG91Ymxl
IHZhbHVlIDogbV9zdWJkdXJhdGlvbnMpIHsKKyAgICAgICAgaWYgKHZhbHVlIDwgMCkKKyAgICAg
ICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBpZiAodmFsdWUgPiAwKQorICAgICAgICAgICAg
cmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246
OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjpuZWdhdGVkKCkgY29uc3QKK3sKKyAgICBT
dWJkdXJhdGlvbnMgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZU
ZW1wb3JhbFVuaXRzOyBpKyspCisgICAgICAgIHJlc3VsdFtpXSA9IC1tX3N1YmR1cmF0aW9uc1tp
XTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlv
bnMgVGVtcG9yYWxEdXJhdGlvbjo6YWJzKCkgY29uc3QKK3sKKyAgICBTdWJkdXJhdGlvbnMgcmVz
dWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBp
KyspCisgICAgICAgIHJlc3VsdFtpXSA9IHN0ZDo6YWJzKG1fc3ViZHVyYXRpb25zW2ldKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitTdHJpbmcgVGVtcG9yYWxEdXJhdGlvbjo6dG9TdHJpbmco
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zVmFsdWUpIGNvbnN0
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50bEdl
dE9wdGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBw
cmVjaXNpb247CisgICAgYXV0byBzbWFsbGVzdFVuaXQgPSB0ZW1wb3JhbFNtYWxsZXN0VW5pdChn
bG9iYWxPYmplY3QsIG9wdGlvbnMsIHsgVGVtcG9yYWxVbml0OjpZZWFyLCBUZW1wb3JhbFVuaXQ6
Ok1vbnRoLCBUZW1wb3JhbFVuaXQ6OldlZWssIFRlbXBvcmFsVW5pdDo6RGF5LCBUZW1wb3JhbFVu
aXQ6OkhvdXIsIFRlbXBvcmFsVW5pdDo6TWludXRlIH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisKKyAgICBpZiAoc21hbGxlc3RVbml0KSB7CisgICAgICAgIHN3aXRj
aCAoc21hbGxlc3RVbml0LnZhbHVlKCkpIHsKKyAgICAgICAgY2FzZSBUZW1wb3JhbFVuaXQ6OlNl
Y29uZDoKKyAgICAgICAgICAgIHByZWNpc2lvbiA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kOgorICAgICAgICAgICAgcHJlY2lz
aW9uID0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRlbXBvcmFsVW5pdDo6
TWljcm9zZWNvbmQ6CisgICAgICAgICAgICBwcmVjaXNpb24gPSA2OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kOgorICAgICAgICAgICAg
cHJlY2lzaW9uID0gOTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHByZWNpc2lvbiA9IHRlbXBvcmFsRnJh
Y3Rpb25hbFNlY29uZERpZ2l0cyhnbG9iYWxPYmplY3QsIG9wdGlvbnMpOworCisgICAgLy8gSU5D
T01QTEVURSEgZG8gcm91bmRpbmcgaGVyZQorCisgICAgcmV0dXJuIHRvU3RyaW5nKHByZWNpc2lv
bik7Cit9CisKK1N0cmluZyBUZW1wb3JhbER1cmF0aW9uOjp0b1N0cmluZyhzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBwcmVjaXNpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFwcmVjaXNpb24gfHwg
cHJlY2lzaW9uLnZhbHVlKCkgPCAxMCk7CisKKyAgICBhdXRvIGJhbGFuY2VkTWljcm9zZWNvbmRz
ID0gbWljcm9zZWNvbmRzKCkgKyBzdGQ6OnRydW5jKG5hbm9zZWNvbmRzKCkgLyAxMDAwLjApOwor
ICAgIGF1dG8gYmFsYW5jZWROYW5vc2Vjb25kcyA9IHN0ZDo6Zm1vZChuYW5vc2Vjb25kcygpLCAx
MDAwLjApOworICAgIGF1dG8gYmFsYW5jZWRNaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMoKSAr
IHN0ZDo6dHJ1bmMoYmFsYW5jZWRNaWNyb3NlY29uZHMgLyAxMDAwLjApOworICAgIGJhbGFuY2Vk
TWljcm9zZWNvbmRzID0gc3RkOjpmbW9kKGJhbGFuY2VkTWljcm9zZWNvbmRzLCAxMDAwLjApOwor
ICAgIGF1dG8gYmFsYW5jZWRTZWNvbmRzID0gc2Vjb25kcygpICsgc3RkOjp0cnVuYyhiYWxhbmNl
ZE1pbGxpc2Vjb25kcyAvIDEwMDAuMCk7CisgICAgYmFsYW5jZWRNaWxsaXNlY29uZHMgPSBzdGQ6
OmZtb2QoYmFsYW5jZWRNaWxsaXNlY29uZHMsIDEwMDAuMCk7CisKKyAgICBhdXRvIHNpZ24gPSB0
aGlzLT5zaWduKCk7CisgICAgaWYgKCFzaWduKQorICAgICAgICByZXR1cm4gIlBUMFMiX3M7CisK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgaWYgKHNpZ24gPCAwKQorICAgICAgICBi
dWlsZGVyLmFwcGVuZCgnLScpOworCisgICAgYnVpbGRlci5hcHBlbmQoJ1AnKTsKKyAgICBpZiAo
eWVhcnMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RkOjphYnMoeWVhcnMoKSksICdZJyk7
CisgICAgaWYgKG1vbnRocygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZChzdGQ6OmFicyhtb250
aHMoKSksICdNJyk7CisgICAgaWYgKHdlZWtzKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0
ZDo6YWJzKHdlZWtzKCkpLCAnVycpOworICAgIGlmIChkYXlzKCkpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHN0ZDo6YWJzKGRheXMoKSksICdEJyk7CisKKyAgICBhdXRvIGhhc1NlY29uZHMgPSBi
YWxhbmNlZFNlY29uZHMgfHwgYmFsYW5jZWRNaWxsaXNlY29uZHMgfHwgYmFsYW5jZWRNaWNyb3Nl
Y29uZHMgfHwgYmFsYW5jZWROYW5vc2Vjb25kczsKKyAgICBpZiAoIWhvdXJzKCkgJiYgIW1pbnV0
ZXMoKSAmJiAhaGFzU2Vjb25kcykKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsK
KworICAgIGJ1aWxkZXIuYXBwZW5kKCdUJyk7CisgICAgaWYgKGhvdXJzKCkpCisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHN0ZDo6YWJzKGhvdXJzKCkpLCAnSCcpOworICAgIGlmIChtaW51dGVzKCkp
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0ZDo6YWJzKG1pbnV0ZXMoKSksICdNJyk7CisgICAg
aWYgKGhhc1NlY29uZHMpIHsKKyAgICAgICAgYXV0byBmcmFjdGlvbiA9IHN0ZDo6YWJzKGJhbGFu
Y2VkTWlsbGlzZWNvbmRzKSAqIDFlLTMgKyBzdGQ6OmFicyhiYWxhbmNlZE1pY3Jvc2Vjb25kcykg
KiAxZS02ICsgc3RkOjphYnMoYmFsYW5jZWROYW5vc2Vjb25kcykgKiAxZS05OworICAgICAgICBp
ZiAoZnJhY3Rpb24gJiYgKCFwcmVjaXNpb24gfHwgcHJlY2lzaW9uLnZhbHVlKCkpKSB7CisgICAg
ICAgICAgICBhdXRvIGZvcm1hdHRlZCA9IEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChzdGQ6
OmFicyhiYWxhbmNlZFNlY29uZHMpICsgZnJhY3Rpb24sIDkpOworICAgICAgICAgICAgaWYgKHBy
ZWNpc2lvbikKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZENoYXJhY3RlcnMoZm9ybWF0
dGVkLmJ1ZmZlcigpLCBmb3JtYXR0ZWQubGVuZ3RoKCkgLSAoOSAtIHByZWNpc2lvbi52YWx1ZSgp
KSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxlbmd0aFdpdGhv
dXRUcmFpbGluZ1plcm9lcyA9IGZvcm1hdHRlZC5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB3
aGlsZSAoZm9ybWF0dGVkLmJ1ZmZlcigpW2xlbmd0aFdpdGhvdXRUcmFpbGluZ1plcm9lcyAtIDFd
ID09ICcwJykKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2Vz
LS07CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRDaGFyYWN0ZXJzKGZvcm1hdHRlZC5i
dWZmZXIoKSwgbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChzdGQ6OmFicyhiYWxhbmNl
ZFNlY29uZHMpKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZCgnUycpOworICAgIH0KKworICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY3YmJkN2ZmNGQ3ZGZkYmI3ODk0NDEwYjkwYmM3ZmY2Njg0NmUxNTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9u
LmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlRlbXBvcmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUZW1w
b3JhbER1cmF0aW9uIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgor
ICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0udGVtcG9yYWxE
dXJhdGlvblNwYWNlPG1vZGU+KCk7CisgICAgfQorCisgICAgdXNpbmcgU3ViZHVyYXRpb25zID0g
c3RkOjphcnJheTxkb3VibGUsIG51bWJlck9mVGVtcG9yYWxVbml0cz47CisKKyAgICBzdGF0aWMg
VGVtcG9yYWxEdXJhdGlvbiogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgU3ViZHVyYXRpb25zJiYp
OworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKKyNkZWZpbmUgSlNDX0RFRklO
RV9URU1QT1JBTF9EVVJBVElPTl9BQ0NFU1NPUihuYW1lLCBjYXBpdGFsaXplZE5hbWUpIFwKKyAg
ICBkb3VibGUgbmFtZSMjcygpIGNvbnN0IHsgcmV0dXJuIG1fc3ViZHVyYXRpb25zW3N0YXRpY19j
YXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6Y2FwaXRhbGl6ZWROYW1lKV07IH0KKyAgICBKU0Nf
VEVNUE9SQUxfVU5JVFMoSlNDX0RFRklORV9URU1QT1JBTF9EVVJBVElPTl9BQ0NFU1NPUik7Cisj
dW5kZWYgSlNDX0RFRklORV9URU1QT1JBTF9EVVJBVElPTl9BQ0NFU1NPUgorCisgICAgaW50IHNp
Z24oKSBjb25zdDsKKworICAgIFN1YmR1cmF0aW9ucyBuZWdhdGVkKCkgY29uc3Q7CisgICAgU3Vi
ZHVyYXRpb25zIGFicygpIGNvbnN0OworCisgICAgU3RyaW5nIHRvU3RyaW5nKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBvcHRpb25zKSBjb25zdDsKKyAgICBTdHJpbmcgdG9TdHJpbmcoc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gcHJlY2lzaW9uID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBUZW1wb3JhbER1cmF0aW9uKFZNJiwgU3RydWN0dXJlKiwgU3ViZHVyYXRpb25z
JiYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIFN1YmR1cmF0aW9ucyBt
X3N1YmR1cmF0aW9uczsKK307CisKK2Jvb2wgaXNWYWxpZER1cmF0aW9uKGNvbnN0IFRlbXBvcmFs
RHVyYXRpb246OlN1YmR1cmF0aW9ucyYpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9u
Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxODE5YWQyZTljMWYxMDM3YWEwNmMyNjk1ZGI3
ZGJlYjU4MTcyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
IlRlbXBvcmFsRHVyYXRpb24uaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNU
UlVDVElCTEUoVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKTsKKworY29uc3QgQ2xhc3NJbmZv
IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBvcmFs
RHVyYXRpb25Db25zdHJ1Y3RvcikgfTsKKworVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKiBU
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBkdXJhdGlvblByb3RvdHlwZSkKK3sK
KyAgICBhdXRvKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0s
IGR1cmF0aW9uUHJvdG90eXBlKTsKKyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1N0cnVj
dHVyZSogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
fQorCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjYWxsVGVtcG9yYWxEdXJhdGlv
bik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RUZW1wb3JhbER1
cmF0aW9uKTsKKworVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpUZW1wb3JhbER1cmF0aW9u
Q29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgY2FsbFRlbXBvcmFsRHVyYXRpb24sIGNvbnN0cnVjdFRlbXBvcmFsRHVyYXRp
b24pCit7Cit9CisKK3ZvaWQgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBl
KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCAwLCAiRHVyYXRpb24iX3MsIFByb3Bl
cnR5QWRkaXRpb25Nb2RlOjpXaXRob3V0U3RydWN0dXJlVHJhbnNpdGlvbik7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgZHVy
YXRpb25Qcm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0
cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBk
dXJhdGlvblByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmNvbnN0cnVjdG9yLCB0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihj
b25zdHJ1Y3RUZW1wb3JhbER1cmF0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09i
amVjdCogbmV3VGFyZ2V0ID0gYXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSk7CisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJFKHZtLCBkdXJh
dGlvblN0cnVjdHVyZSwgbmV3VGFyZ2V0LCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBUZW1wb3JhbER1cmF0aW9uOjpT
dWJkdXJhdGlvbnMgc3ViZHVyYXRpb25zIHsgfTsKKyAgICBhdXRvIGNvdW50ID0gc3RkOjptaW48
c2l6ZV90PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRz
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgc3Vi
ZHVyYXRpb25zW2ldID0gY2FsbEZyYW1lLT5hcmd1bWVudChpKS50b0ludGVnZXJPckluZmluaXR5
KGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgfQorCisgICAgaWYgKCFpc1ZhbGlkRHVyYXRpb24oc3ViZHVyYXRpb25zKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1SYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJpbmNvbnNp
c3RlbnQgbnVtZXJpYyB2YWx1ZXMgcHJvdmlkZWQgdG8gRHVyYXRpb24gY29uc3RydWN0b3IiX3Mp
OworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUo
dm0sIHN0cnVjdHVyZSwgV1RGTW92ZShzdWJkdXJhdGlvbnMpKSk7Cit9CisKK0pTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihjYWxsVGVtcG9yYWxEdXJhdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rp
b25UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkR1cmF0aW9uIikpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQyNDVhMzEw
Njk1YWNkMzViNWQ2YWE1NmU5MDA0ZjdlM2I3MDM4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oCkBA
IC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlOworCitjbGFzcyBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Ig
ZmluYWwgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFz
ZSA9IEludGVybmFsRnVuY3Rpb247CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJs
ZTsKKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IqIGNyZWF0ZShWTSYs
IFN0cnVjdHVyZSosIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqKTsKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwor
CisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFRlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9u
KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRiOTI0ODM2YWQ2MzUwODU0YzRmMTk1ODRkMDc5MDVmNGVmYmI5MTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlLmNwcApAQCAtMCwwICsxLDMyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIgorCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVGdW5jTmVnYXRlZCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY0Ficyk7CitzdGF0aWMgSlNDX0RFQ0xB
UkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nKTsK
K3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVGdW5jVG9KU09OKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVGdW5jVG9Mb2NhbGVTdHJpbmcpOworc3RhdGljIEpTQ19ERUNMQVJF
X0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNWYWx1ZU9mKTsKK3N0
YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVH
ZXR0ZXJZZWFycyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlR2V0dGVyTW9udGhzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJXZWVrcyk7CitzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyRGF5
cyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlR2V0dGVySG91cnMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMpOworc3RhdGljIEpTQ19ERUNMQVJF
X0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNlY29uZHMpOwor
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUdldHRlck1pbGxpc2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWljcm9zZWNvbmRzKTsKK3N0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJOYW5v
c2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlR2V0dGVyU2lnbik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRF
UihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyQmxhbmspOworCit9CisKKyNpbmNsdWRl
ICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRl
bXBvcmFsLkR1cmF0aW9uIiwgJkJhc2U6OnNfaW5mbywgJmR1cmF0aW9uUHJvdG90eXBlVGFibGUs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSkg
fTsKKworLyogU291cmNlIGZvciBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmx1dC5oCitAYmVn
aW4gZHVyYXRpb25Qcm90b3R5cGVUYWJsZQorICBuZWdhdGVkICAgICAgICAgIFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVGdW5jTmVnYXRlZCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAK
KyAgYWJzICAgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY0FicyAgICAg
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIHRvU3RyaW5nICAgICAgICAgVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb1N0cmluZyAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gMAorICB0b0pTT04gICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9K
U09OICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgdG9Mb2NhbGVTdHJpbmcgICBU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvTG9jYWxlU3RyaW5nICAgICBEb250RW51bXxG
dW5jdGlvbiAwCisgIHZhbHVlT2YgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1
bmNWYWx1ZU9mICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICB5ZWFycyAgICAgICAg
ICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJZZWFycyAgICAgICAgICAgIERvbnRF
bnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIG1vbnRocyAgICAgICAgICAgVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUdldHRlck1vbnRocyAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8
Q3VzdG9tQWNjZXNzb3IKKyAgd2Vla3MgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlR2V0dGVyV2Vla3MgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3Nv
cgorICBkYXlzICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJEYXlz
ICAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIGhvdXJzICAg
ICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckhvdXJzICAgICAgICAgICAg
RG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbWludXRlcyAgICAgICAgICBUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWludXRlcyAgICAgICAgICBEb250RW51bXxSZWFk
T25seXxDdXN0b21BY2Nlc3NvcgorICBzZWNvbmRzICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVHZXR0ZXJTZWNvbmRzICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFj
Y2Vzc29yCisgIG1pbGxpc2Vjb25kcyAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRl
ck1pbGxpc2Vjb25kcyAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbWlj
cm9zZWNvbmRzICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWljcm9zZWNvbmRz
ICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBuYW5vc2Vjb25kcyAgICAg
IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJOYW5vc2Vjb25kcyAgICAgIERvbnRFbnVt
fFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIHNpZ24gICAgICAgICAgICAgVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUdldHRlclNpZ24gICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3Vz
dG9tQWNjZXNzb3IKKyAgYmxhbmsgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
R2V0dGVyQmxhbmsgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3Nvcgor
QGVuZAorKi8KKworVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSogVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgYXV0
byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZT4odm0uaGVhcCkpIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUodm0sIHN0cnVjdHVy
ZSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIG9iamVjdDsK
K30KKworU3RydWN0dXJlKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9
CisKK1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
K3sKK30KKwordm9pZCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lU
SU9OKCk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlRnVuY05lZ2F0ZWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0
aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUu
bmVnYXRlZCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQg
YXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFs
RHVyYXRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgpLCBk
dXJhdGlvbi0+bmVnYXRlZCgpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY0FicywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
YXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9u
LnByb3RvdHlwZS5hYnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRp
YWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShU
ZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1
cmUoKSwgZHVyYXRpb24tPmFicygpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+
KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwu
RHVyYXRpb24ucHJvdG90eXBlLnRvU3RyaW5nIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFu
IG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBkdXJhdGlvbi0+dG9T
dHJpbmcoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpKTsKK30KKworSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9KU09O
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nh
c3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBp
ZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvSlNPTiBjYWxsZWQgb24g
dmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7
CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
Zyh2bSwgZHVyYXRpb24tPnRvU3RyaW5nKCkpKSk7Cit9CisKKy8vIFRoaXMgd2lsbCBiZSBwYXJ0
IG9mIHRoZSBFQ01BLTQwMiBJbnRsLkR1cmF0aW9uRm9ybWF0IHByb3Bvc2FsOyB1bnRpbCB0aGVu
LCB3ZSBqdXN0IGZvbGxvdyBFQ01BLTI2MiBpbiBtaW1pY2tpbmcgdG9KU09OLgorSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9Mb2NhbGVTdHJp
bmcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWlj
Q2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAg
IGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcg
Y2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVy
YXRpb24iX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcodm0sIGR1cmF0aW9uLT50b1N0cmluZygpKSkpOworfQorCitKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNWYWx1ZU9mLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudmFsdWVPZiBtdXN0IG5vdCBiZSBjYWxsZWQi
X3MpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUdldHRlclllYXJzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFs
LkR1cmF0aW9uLnByb3RvdHlwZS55ZWFycyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBv
YmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+eWVhcnMoKSkp
KTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVHZXR0ZXJNb250aHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwu
RHVyYXRpb24ucHJvdG90eXBlLm1vbnRocyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBv
YmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+bW9udGhzKCkp
KSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlR2V0dGVyV2Vla3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwu
RHVyYXRpb24ucHJvdG90eXBlLndlZWtzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9i
amVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT53ZWVrcygpKSkp
OworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUdldHRlckRheXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVy
YXRpb24ucHJvdG90eXBlLmRheXMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0
IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPmRheXMoKSkpKTsKK30K
KworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0
ZXJIb3VycywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0
byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlv
bi5wcm90b3R5cGUuaG91cnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGlu
aXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPmhvdXJzKCkpKSk7Cit9CisK
K0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVy
TWludXRlcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0
byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlv
bi5wcm90b3R5cGUubWludXRlcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3Qg
aW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+bWludXRlcygpKSkpOwor
fQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdl
dHRlclNlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVy
YXRpb24ucHJvdG90eXBlLnNlY29uZHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2Jq
ZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPnNlY29uZHMoKSkp
KTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVHZXR0ZXJNaWxsaXNlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9u
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVt
cG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1pbGxpc2Vjb25kcyBjYWxsZWQgb24gdmFsdWUgdGhh
dCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlv
bi0+bWlsbGlzZWNvbmRzKCkpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWljcm9zZWNvbmRzLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nh
c3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5taWNyb3NlY29uZHMg
Y2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVy
YXRpb24iX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoZHVyYXRpb24tPm1pY3Jvc2Vjb25kcygpKSkpOworfQorCitKU0NfREVGSU5F
X0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck5hbm9zZWNvbmRz
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJh
dGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3Rv
dHlwZS5uYW5vc2Vjb25kcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5p
dGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+bmFub3NlY29uZHMoKSkpKTsK
K30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVH
ZXR0ZXJTaWduLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBh
dXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0
aW9uLnByb3RvdHlwZS5zaWduIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBp
bml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5zaWduKCkpKSk7Cit9CisK
K0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVy
QmxhbmssIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8q
IGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24u
cHJvdG90eXBlLmJsYW5rIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0
aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighZHVyYXRpb24tPnNpZ24oKSkpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg3NzVlZWIw
N2JlNjAyY2ZhZWYwMzg3OTRlOTdjNjI5MzU0ZDM2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJv
cGVydHlUYWJsZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2Vzcz4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7
CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2U7CisgICAgfQorCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIGNyZWF0
ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisK
K3ByaXZhdGU6CisgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSop
OworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmpl
Y3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3Bw
CmluZGV4IGFmMTQzNjc1ZjFlNGM2Mjg3ZWEyYmUxOGY0MzNlZWJlMzcyYTcxN2QuLjMwMDg1YjJj
ZjZiNGVhNzA0NDNiYjM5YjM1ZTJjNDkyMDRkZGY4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTAgKzIxLDE0IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxPYmplY3QuaCIKIAorI2luY2x1ZGUgIkZ1bmN0aW9u
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSW50bE9iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCisjaW5j
bHVkZSAiVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlRlbXBvcmFsTm93LmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMzcsNiArNDIsMTMgQEAgc3RhdGljIEpTVmFsdWUgY3JlYXRlTm93T2JqZWN0
KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICByZXR1cm4gVGVtcG9yYWxOb3c6OmNyZWF0
ZSh2bSwgVGVtcG9yYWxOb3c6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0KSk7CiB9
CiAKK3N0YXRpYyBKU1ZhbHVlIGNyZWF0ZUR1cmF0aW9uQ29uc3RydWN0b3IoVk0mIHZtLCBKU09i
amVjdCogb2JqZWN0KQoreworICAgIFRlbXBvcmFsT2JqZWN0KiB0ZW1wb3JhbE9iamVjdCA9IGpz
Q2FzdDxUZW1wb3JhbE9iamVjdCo+KG9iamVjdCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHRlbXBvcmFsT2JqZWN0LT5nbG9iYWxPYmplY3Qodm0pOworICAgIHJldHVybiBU
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgVGVtcG9yYWxEdXJhdGlvbkNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LT5mdW5jdGlvblByb3RvdHlwZSgpKSwganNDYXN0PFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUq
PihnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZU9iamVj
dCgpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjaW5jbHVkZSAiVGVtcG9yYWxPYmpl
Y3QubHV0LmgiCkBAIC00Niw2ICs1OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogLyogU291cmNlIGZv
ciBUZW1wb3JhbE9iamVjdC5sdXQuaAogQGJlZ2luIHRlbXBvcmFsT2JqZWN0VGFibGUKICAgTm93
ICAgICAgICAgICAgY3JlYXRlTm93T2JqZWN0ICAgICAgICAgICAgICAgICBEb250RW51bXxQcm9w
ZXJ0eUNhbGxiYWNrCisgIER1cmF0aW9uICAgICAgIGNyZWF0ZUR1cmF0aW9uQ29uc3RydWN0b3Ig
ICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogQGVuZAogKi8KIApAQCAtNzUsNCArODgs
OTYgQEAgdm9pZCBUZW1wb3JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEpT
Q19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwogfQogCitzdGF0aWMgU3RyaW5n
VmlldyBzaW5ndWxhclVuaXQoU3RyaW5nVmlldyB1bml0KQoreworICAgIC8vIFBsdXJhbHMgYXJl
IGFsbG93ZWQsIGJ1dCB0aGFua2Z1bGx5IHRoZXkncmUgYWxsIGp1c3QgYSBzaW1wbGUgLXMuCisg
ICAgcmV0dXJuIHVuaXQuZW5kc1dpdGgoInMiKSA/IHVuaXQubGVmdCh1bml0Lmxlbmd0aCgpIC0g
MSkgOiB1bml0OworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBv
cmFsVW5pdFR5cGUoU3RyaW5nVmlldyB1bml0KQoreworICAgIFN0cmluZ1ZpZXcgc2luZ3VsYXIg
PSBzaW5ndWxhclVuaXQodW5pdCk7CisKKyAgICBpZiAoc2luZ3VsYXIgPT0gInllYXIiKQorICAg
ICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpZZWFyOworICAgIGlmIChzaW5ndWxhciA9PSAibW9u
dGgiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpNb250aDsKKyAgICBpZiAoc2luZ3Vs
YXIgPT0gIndlZWsiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpXZWVrOworICAgIGlm
IChzaW5ndWxhciA9PSAiZGF5IikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6RGF5Owor
ICAgIGlmIChzaW5ndWxhciA9PSAiaG91ciIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6
OkhvdXI7CisgICAgaWYgKHNpbmd1bGFyID09ICJtaW51dGUiKQorICAgICAgICByZXR1cm4gVGVt
cG9yYWxVbml0OjpNaW51dGU7CisgICAgaWYgKHNpbmd1bGFyID09ICJzZWNvbmQiKQorICAgICAg
ICByZXR1cm4gVGVtcG9yYWxVbml0OjpTZWNvbmQ7CisgICAgaWYgKHNpbmd1bGFyID09ICJtaWxs
aXNlY29uZCIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kOworICAg
IGlmIChzaW5ndWxhciA9PSAibWljcm9zZWNvbmQiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxV
bml0OjpNaWNyb3NlY29uZDsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm5hbm9zZWNvbmQiKQorICAg
ICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kOworICAgIAorICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1wb3JhbFNt
YWxsZXN0VW5pdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3B0aW9u
cywgc3RkOjppbml0aWFsaXplcl9saXN0PFRlbXBvcmFsVW5pdD4gZGlzYWxsb3dlZFVuaXRzKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcgc21hbGxlc3RVbml0ID0gaW50bFN0
cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnNtYWxs
ZXN0VW5pdCwgeyB9LCBudWxscHRyLCBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgaWYgKHNtYWxsZXN0VW5pdC5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gdW5pdFR5cGUgPSB0ZW1w
b3JhbFVuaXRUeXBlKHNtYWxsZXN0VW5pdCk7CisgICAgaWYgKCF1bml0VHlwZSkgeworICAgICAg
ICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInNtYWxsZXN0VW5pdCBpcyBh
biBpbnZhbGlkIHVuaXQiX3MpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0K
KworICAgIGlmIChkaXNhbGxvd2VkVW5pdHMuc2l6ZSgpICYmIHN0ZDo6ZmluZChkaXNhbGxvd2Vk
VW5pdHMuYmVnaW4oKSwgZGlzYWxsb3dlZFVuaXRzLmVuZCgpLCB1bml0VHlwZS52YWx1ZSgpKSAh
PSBkaXNhbGxvd2VkVW5pdHMuZW5kKCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJzbWFsbGVzdFVuaXQgaXMgYSBkaXNhbGxvd2VkIHVuaXQiX3MpOwor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiB1bml0VHlw
ZTsKK30KKworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25k
RGlnaXRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIW9wdGlvbnMpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gb3B0aW9ucy0+Z2V0KGdsb2Jh
bE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+ZnJhY3Rpb25hbFNlY29uZERpZ2l0cyk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIAorICAg
IGlmICh2YWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHZh
bHVlLmFzTnVtYmVyKCk7CisgICAgICAgIGlmIChkb3VibGVWYWx1ZSA8IDAgfHwgZG91YmxlVmFs
dWUgPiA5KSB7CisgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgImZyYWN0aW9uYWxTZWNvbmREaWdpdHMgaXMgb3V0IG9mIHJhbmdlIl9zKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGRvdWJsZVZhbHVlKTsKKyAgICB9CisKKyAgICBTdHJpbmcgc3Ry
aW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAoc3RyaW5nVmFsdWUg
IT0gImF1dG8iKQorICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
ImZyYWN0aW9uYWxTZWNvbmREaWdpdHMgaXMgb3V0IG9mIHJhbmdlIl9zKTsKKworICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmgKaW5kZXggMWVlOTk5NGMyYjhjMDVl
NDZkMTYxMDZhNjZmMDJiOTc1OGI4YjI4My4uZDY2MjA4ODdlOTc5N2VmYWMyZWQxMGM4ZDRlM2Fm
ZmZiNDExYmVjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVt
cG9yYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bE9iamVjdC5oCkBAIC0yMyw2ICsyMywyNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2RlZmlu
ZSBKU0NfVEVNUE9SQUxfVU5JVFMobWFjcm8pIFwKKyAgICBtYWNybyh5ZWFyLCBZZWFyKSBcCisg
ICAgbWFjcm8obW9udGgsIE1vbnRoKSBcCisgICAgbWFjcm8od2VlaywgV2VlaykgXAorICAgIG1h
Y3JvKGRheSwgRGF5KSBcCisgICAgbWFjcm8oaG91ciwgSG91cikgXAorICAgIG1hY3JvKG1pbnV0
ZSwgTWludXRlKSBcCisgICAgbWFjcm8oc2Vjb25kLCBTZWNvbmQpIFwKKyAgICBtYWNybyhtaWxs
aXNlY29uZCwgTWlsbGlzZWNvbmQpIFwKKyAgICBtYWNybyhtaWNyb3NlY29uZCwgTWljcm9zZWNv
bmQpIFwKKyAgICBtYWNybyhuYW5vc2Vjb25kLCBOYW5vc2Vjb25kKSBcCisKK2VudW0gY2xhc3Mg
VGVtcG9yYWxVbml0IDogdWludDhfdCB7CisjZGVmaW5lIEpTQ19ERUZJTkVfVEVNUE9SQUxfVU5J
VF9FTlVNKG5hbWUsIGNhcGl0YWxpemVkTmFtZSkgY2FwaXRhbGl6ZWROYW1lLAorICAgIEpTQ19U
RU1QT1JBTF9VTklUUyhKU0NfREVGSU5FX1RFTVBPUkFMX1VOSVRfRU5VTSkKKyN1bmRlZiBKU0Nf
REVGSU5FX1RFTVBPUkFMX1VOSVRfRU5VTQorfTsKKyNkZWZpbmUgSlNDX0NPVU5UX1RFTVBPUkFM
X1VOSVRTKG5hbWUsIGNhcGl0YWxpemVkTmFtZSkgKyAxCitzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG51bWJlck9mVGVtcG9yYWxVbml0cyA9IDAgSlNDX1RFTVBPUkFMX1VOSVRTKEpTQ19DT1VO
VF9URU1QT1JBTF9VTklUUyk7CisjdW5kZWYgSlNDX0NPVU5UX1RFTVBPUkFMX1VOSVRTCisKIGNs
YXNzIFRlbXBvcmFsT2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwpAQCAtNDUsNCArNjYsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIH07CiAKK3N0ZDo6b3B0
aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1wb3JhbFNtYWxsZXN0VW5pdChKU0dsb2JhbE9iamVjdCos
IEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VGVtcG9yYWxVbml0PiBk
aXNhbGxvd2VkVW5pdHMpOworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdGVtcG9yYWxGcmFjdGlv
bmFsU2Vjb25kRGlnaXRzKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlvbnMpOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCAx
ZGVhNmExM2NiNGM0MjliOWIwNzE5OGJhYjZjNDRmMzE0NjlkMDY4Li44MzFkM2YyZWQzYTMyN2Nm
ZmIzNjhlZjE2M2IxYThhYjZmN2M4MTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCkBAIC0xNjIsNiArMTYyLDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJTeW1ib2xPYmplY3QuaCIKKyNp
bmNsdWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgi
CiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgi
CkBAIC0xNjE3LDYgKzE2MTgsNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coaW50bFJlbGF0aXZlVGltZUZvcm1hdFNwYWNlLCBpbnRsUmVsYXRpdgogRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50SXRlcmF0b3JTcGFjZSwg
aW50bFNlZ21lbnRJdGVyYXRvckhlYXBDZWxsVHlwZS5nZXQoKSwgSW50bFNlZ21lbnRJdGVyYXRv
cikKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudGVy
U3BhY2UsIGludGxTZWdtZW50ZXJIZWFwQ2VsbFR5cGUuZ2V0KCksIEludGxTZWdtZW50ZXIpCiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRzU3BhY2Us
IGludGxTZWdtZW50c0hlYXBDZWxsVHlwZS5nZXQoKSwgSW50bFNlZ21lbnRzKQorRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsRHVyYXRpb25TcGFjZSwgY2Vs
bEhlYXBDZWxsVHlwZS5nZXQoKSwgVGVtcG9yYWxEdXJhdGlvbikKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coanNUb1dhc21J
Q0NhbGxlZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1RvV2FzbUlDQ2FsbGVlKQog
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5Q29kZUJs
b2NrU3BhY2UsIHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKSAvLyBIYXNoOjB4OWFkOTk1Y2QKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCmluZGV4IGJjZWQ5ODQzZmNlODI2MjBlODhiOTc1MDE4M2FlYjYxNTU2MjYwNjkuLmFi
ZGE3MmU5NDNhOTI1ZjRlZjc2MDNlMjUwZTNkMDZjYWUwNDE3MjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaApAQCAtMTg1LDYgKzE4NSw3IEBAIGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNz
IFJlZ0V4cDsKICNlbmRpZgogY2xhc3MgU3ltYm9sOworY2xhc3MgVGVtcG9yYWxEdXJhdGlvbjsK
IGNsYXNzIFR5cGVkQXJyYXlDb250cm9sbGVyOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBj
bGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2s7CkBAIC02MTUsNiArNjE2LDcgQEAgcHVibGljOgog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFNlZ21lbnRJdGVyYXRv
clNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFNlZ21l
bnRlclNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFNl
Z21lbnRzU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih0ZW1w
b3JhbER1cmF0aW9uU3BhY2UpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoanNUb1dhc21JQ0NhbGxlZVNwYWNlKQogICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFj
ZSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggNzVkNDA1OTAxZGQyM2JhMzMyOGY3ZjIxYWU2NGZmZjZmOTEyMzU0My4uMTgwOTcxOTI5ZGFj
NGQ4OWNiMThlNWUxNDRiOWE5Yzg0NDg0MDc2NCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0wOC0wNCAg
Um9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CisKKyAgICAgICAgW0pTQ10g
SW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qczogQWRkZWQu
CisKIDIwMjEtMDgtMDIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbSlNDXSBZYXJyIEJveWVyTW9vcmUgc2VhcmNoIHNob3VsZCBzdXBwb3J0IGNoYXJhY3Rl
ci1jbGFzcwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvdGVtcG9yYWwtZHVyYXRpb24uanMg
Yi9KU1Rlc3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NmZkOTY5
YTUyMjU3NmU4OTBjYmM4NDBiOGY5YTlhYzcwYzZiMWUxCi0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy9zdHJlc3MvdGVtcG9yYWwtZHVyYXRpb24uanMKQEAgLTAsMCArMSwxMjkgQEAKKy8vQCBy
ZXF1aXJlT3B0aW9ucygiLS11c2VUZW1wb3JhbD0xIikKKworZnVuY3Rpb24gc2hvdWxkQmUoYWN0
dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9YCk7
Cit9CisKK2Z1bmN0aW9uIHNob3VsZE5vdFRocm93KGZ1bmMpIHsKKyAgICBmdW5jKCk7Cit9CisK
K2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yVHlwZSkgeworICAgIGxldCBlcnJvcjsK
KyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBl
cnJvciA9IGU7CisgICAgfQorCisgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBlcnJvclR5cGUp
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXJyb3JUeXBlLm5hbWV9IWAp
OworfQorCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbiBpbnN0YW5jZW9mIEZ1bmN0aW9uLCB0
cnVlKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmxlbmd0aCwgMCk7CitzaG91bGRCZShP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFRlbXBvcmFsLkR1cmF0aW9uLCAncHJvdG90
eXBlJykud3JpdGFibGUsIGZhbHNlKTsKK3Nob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoVGVtcG9yYWwuRHVyYXRpb24sICdwcm90b3R5cGUnKS5lbnVtZXJhYmxlLCBmYWxz
ZSk7CitzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFRlbXBvcmFsLkR1
cmF0aW9uLCAncHJvdG90eXBlJykuY29uZmlndXJhYmxlLCBmYWxzZSk7CitzaG91bGRUaHJvdygo
KSA9PiBUZW1wb3JhbC5EdXJhdGlvbigpLCBUeXBlRXJyb3IpOworCitzaG91bGRCZShuZXcgVGVt
cG9yYWwuRHVyYXRpb24oKSBpbnN0YW5jZW9mIFRlbXBvcmFsLkR1cmF0aW9uLCB0cnVlKTsKK3sK
KyAgICBjbGFzcyBEZXJpdmVkRHVyYXRpb24gZXh0ZW5kcyBUZW1wb3JhbC5EdXJhdGlvbiB7fQor
CisgICAgY29uc3QgZGQgPSBuZXcgRGVyaXZlZER1cmF0aW9uKCk7CisgICAgc2hvdWxkQmUoZGQg
aW5zdGFuY2VvZiBEZXJpdmVkRHVyYXRpb24sIHRydWUpOworICAgIHNob3VsZEJlKGRkIGluc3Rh
bmNlb2YgVGVtcG9yYWwuRHVyYXRpb24sIHRydWUpOworICAgIHNob3VsZEJlKGRkLm5lZ2F0ZWQs
IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVkKTsKKyAgICBzaG91bGRCZShPYmpl
Y3QuZ2V0UHJvdG90eXBlT2YoZGQpLCBEZXJpdmVkRHVyYXRpb24ucHJvdG90eXBlKTsKKyAgICBz
aG91bGRCZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoRGVyaXZlZER1cmF0aW9uLnByb3RvdHlwZSks
IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZSk7Cit9CisKK3Nob3VsZFRocm93KCgpID0+IG5l
dyBUZW1wb3JhbC5EdXJhdGlvbigxLCAtMSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkg
PT4gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKEluZmluaXR5KSwgUmFuZ2VFcnJvcik7CitzaG91bGRU
aHJvdygoKSA9PiBuZXcgVGVtcG9yYWwuRHVyYXRpb24oSW5maW5pdHksIFN5bWJvbCgpKSwgVHlw
ZUVycm9yKTsKKworY29uc3QgZmllbGRzID0gWyd5ZWFycycsICdtb250aHMnLCAnd2Vla3MnLCAn
ZGF5cycsICdob3VycycsICdtaW51dGVzJywgJ3NlY29uZHMnLCAnbWlsbGlzZWNvbmRzJywgJ21p
Y3Jvc2Vjb25kcycsICduYW5vc2Vjb25kcyddOworY29uc3QgemVybyA9IG5ldyBUZW1wb3JhbC5E
dXJhdGlvbigpOworY29uc3QgcG9zID0gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKDEsMiwzLDQsNSw2
LDcsOCw5LDEwKTsKK2NvbnN0IG5lZyA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigtMSwtMiwtMywt
NCwtNSwtNiwtNywtOCwtOSwtMTApOworCitmaWVsZHMuZm9yRWFjaCgoZmllbGQsIGkpID0+IHsK
KyAgICBzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbZmllbGRd
LCBUeXBlRXJyb3IpOworICAgIHNob3VsZEJlKHplcm9bZmllbGRdLCAwKTsKKyAgICBzaG91bGRC
ZShwb3NbZmllbGRdLCBpICsgMSk7CisgICAgc2hvdWxkQmUobmVnW2ZpZWxkXSwgLWkgLSAxKTsK
K30pOworCitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc2ln
biwgVHlwZUVycm9yKTsKK3Nob3VsZEJlKHplcm8uc2lnbiwgMCk7CitzaG91bGRCZShwb3Muc2ln
biwgMSk7CitzaG91bGRCZShuZWcuc2lnbiwgLTEpOworCitzaG91bGRUaHJvdygoKSA9PiBUZW1w
b3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYmxhbmssIFR5cGVFcnJvcik7CitzaG91bGRCZSh6ZXJv
LmJsYW5rLCB0cnVlKTsKK3Nob3VsZEJlKHBvcy5ibGFuaywgZmFsc2UpOworc2hvdWxkQmUobmVn
LmJsYW5rLCBmYWxzZSk7CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5u
ZWdhdGVkLmxlbmd0aCwgMCk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5w
cm90b3R5cGUubmVnYXRlZC5jYWxsKHt9KSwgVHlwZUVycm9yKTsKK3sKKyAgICBjb25zdCBuZWdh
dGVkWmVybyA9IHplcm8ubmVnYXRlZCgpOworICAgIGNvbnN0IG5lZ2F0ZWRQb3MgPSBwb3MubmVn
YXRlZCgpOworICAgIGNvbnN0IG5lZ2F0ZWROZWcgPSBuZWcubmVnYXRlZCgpOworICAgIGZvciAo
Y29uc3QgZmllbGQgb2YgZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJlKG5lZ2F0ZWRaZXJvW2Zp
ZWxkXSwgemVyb1tmaWVsZF0pOworICAgICAgICBzaG91bGRCZShuZWdhdGVkTmVnW2ZpZWxkXSwg
cG9zW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKG5lZ2F0ZWRQb3NbZmllbGRdLCBuZWdbZmll
bGRdKTsKKyAgICB9Cit9CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5h
YnMubGVuZ3RoLCAwKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3Rv
dHlwZS5hYnMuY2FsbCh7fSksIFR5cGVFcnJvcik7Cit7CisgICAgY29uc3QgYWJzWmVybyA9IHpl
cm8uYWJzKCk7CisgICAgY29uc3QgYWJzUG9zID0gcG9zLmFicygpOworICAgIGNvbnN0IGFic05l
ZyA9IG5lZy5hYnMoKTsKKyAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAgICAg
ICBzaG91bGRCZShhYnNaZXJvW2ZpZWxkXSwgemVyb1tmaWVsZF0pOworICAgICAgICBzaG91bGRC
ZShhYnNQb3NbZmllbGRdLCBwb3NbZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUoYWJzTmVnW2Zp
ZWxkXSwgcG9zW2ZpZWxkXSk7CisgICAgfQorfQorCisvLyBBdCBwcmVzZW50LCB0b1N0cmluZyB3
aXRoIG5vIG9wdGlvbnMgKGkuZS4gcHJlY2lzaW9uOiAnYXV0bycpLCB0b0pTT04sIGFuZCB0b0xv
Y2FsZVN0cmluZyBhbGwgaGF2ZSB0aGUgc2FtZSBiZWhhdmlvci4KK2ZvciAoY29uc3QgbWV0aG9k
IG9mIFsndG9TdHJpbmcnLCAndG9KU09OJywgJ3RvTG9jYWxlU3RyaW5nJ10pIHsgICAgCisgICAg
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW21ldGhvZF0ubGVuZ3RoLCAwKTsK
KyAgICBzaG91bGRCZSh6ZXJvW21ldGhvZF0oKSwgJ1BUMFMnKTsKKyAgICBzaG91bGRCZShwb3Nb
bWV0aG9kXSgpLCAnUDFZMk0zVzREVDVINk03LjAwODAwOTAxUycpOworICAgIHNob3VsZEJlKG5l
Z1ttZXRob2RdKCksICctUDFZMk0zVzREVDVINk03LjAwODAwOTAxUycpOworICAgIAorICAgIHNo
b3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigxLDEsMSwxKVttZXRob2RdKCksICdQMVkxTTFX
MUQnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwxLDEsMSlb
bWV0aG9kXSgpLCAnUFQxSDFNMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRp
b24oMCwwLDAsMCwwLDAsMCwxMDApW21ldGhvZF0oKSwgJ1BUMC4xUycpOworICAgIHNob3VsZEJl
KG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDAsMTAwKVttZXRob2RdKCksICdQ
VDAuMDAwMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCww
LDAsMCwwLDAsMTAwKVttZXRob2RdKCksICdQVDAuMDAwMDAwMVMnKTsKKyAgICBzaG91bGRCZShu
ZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMSwxMDAxKVttZXRob2RdKCksICdQVDIu
MDAxUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCww
LDEsMTAwMSlbbWV0aG9kXSgpLCAnUFQwLjAwMjAwMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVt
cG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwwLDEsMTAwMSlbbWV0aG9kXSgpLCAnUFQwLjAw
MDAwMjAwMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCww
LDAsMSwxMDAxLDEwMDEsMTAwMSlbbWV0aG9kXSgpLCAnUFQyLjAwMjAwMjAwMVMnKTsKK30KKwor
Zm9yIChjb25zdCBmaWVsZCBvZiBbJ2Zvb2JhcicsICd5ZWFycycsICdtb250aHMnLCAnd2Vla3Mn
LCAnZGF5cycsICdob3VycycsICdtaW51dGVzJ10pCisgICAgc2hvdWxkVGhyb3coKCkgPT4gcG9z
LnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiBmaWVsZCB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRC
ZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmRzJyB9KSwgJ1AxWTJNM1c0RFQ1
SDZNN1MnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogJ21pbGxpc2Vj
b25kcycgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4UycpOworc2hvdWxkQmUocG9zLnRvU3RyaW5n
KHsgc21hbGxlc3RVbml0OiAnbWljcm9zZWNvbmRzJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDgw
MDlTJyk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICduYW5vc2Vjb25k
cycgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4MDA5MDEwUycpOworCitzaG91bGRUaHJvdygoKSA9
PiBwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAtMSB9KSwgUmFuZ2VFcnJv
cik7CitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGln
aXRzOiAxMCB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlv
bmFsU2Vjb25kRGlnaXRzOiAwIH0pLCAnUDFZMk0zVzREVDVINk03UycpOworY29uc3QgZGVjaW1h
bFBhcnQgPSAnMDA4MDA5MDEwJzsKK2ZvciAobGV0IGkgPSAxOyBpIDwgMTA7IGkrKykKKyAgICBz
aG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiBpIH0pLCBgUDFZ
Mk0zVzREVDVINk03LiR7ZGVjaW1hbFBhcnQuc2xpY2UoMCxpKX1TYCk7CisKKworc2hvdWxkQmUo
VGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnZhbHVlT2YubGVuZ3RoLCAwKTsKK3Nob3VsZFRo
cm93KCgpID0+IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigpLnZhbHVlT2YoKSwgVHlwZUVycm9yKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435100</attachid>
            <date>2021-08-06 16:51:50 -0700</date>
            <delta_ts>2021-08-20 14:40:06 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-228532-20210806165144.patch</filename>
            <type>text/plain</type>
            <size>81242</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDRiYTFjNDM3MjllYjAwYWE4ZDVmNWJjN2E0ZmZjMmM3ZWQ5YzQ1Li40NTIzZDZkZGFiYmYyYTRm
ZTA0NzE4OWQ5ZjkzYWUyZGU1ODU5YjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NSBAQAorMjAyMS0wOC0wNiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpkdXJhdGlvblN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OnByb3BlcnR5TmFtZSk6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFs
RHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRp
b246OlRlbXBvcmFsRHVyYXRpb24pOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmlzVmFsaWREdXJhdGlvbik6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnBhcnNlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxE
dXJhdGlvbjo6dG9TdWJkdXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9u
Ojp0b0R1cmF0aW9uKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6ZnJvbSk6Cisg
ICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnNpZ24gY29uc3QpOgorICAgICAgICAoSlND
OjpUZW1wb3JhbER1cmF0aW9uOjp3aXRoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxE
dXJhdGlvbjo6bmVnYXRlZCBjb25zdCk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246
OmFicyBjb25zdCk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnJvdW5kIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6dG9TdHJpbmcgY29uc3QpOgorICAg
ICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50
aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0
b3IpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAg
ICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KEpTQzo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAg
KEpTQzo6SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKToKKyAgICAgICAgKiBydW50aW1lL1RlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9UZW1wb3Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZUR1cmF0aW9uQ29uc3RydWN0b3IpOgor
ICAgICAgICAoSlNDOjpzaW5ndWxhclVuaXQpOgorICAgICAgICAoSlNDOjp0ZW1wb3JhbFVuaXRU
eXBlKToKKyAgICAgICAgKEpTQzo6dGVtcG9yYWxTbWFsbGVzdFVuaXQpOgorICAgICAgICAoSlND
Ojp0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmREaWdpdHMpOgorICAgICAgICAoSlNDOjpzZWNvbmRz
U3RyaW5nUHJlY2lzaW9uKToKKyAgICAgICAgKEpTQzo6cm91bmROdW1iZXJUb0luY3JlbWVudCk6
CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
Vk0uY3BwOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAyMS0wOC0wNCAgWWlqaWEgSHVh
bmcgIDx5aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW0FSTTY0XSBGaXggWm9vbSBi
bGFjayBzY3JlZW4gZHVyaW5nIHZpZGVvIG1lZXRpbmcgb24gU2FmYXJpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTg3N2UwYzc1YzBlMmMxYTdjNmZhMGVmMjAwMzNmMjUw
Mjg5ZWExMC4uMjQ2ZTI5MDA1NGQ4OTY5NWQyNjAwZjU1NWYyZjkxNGI2NmFkMWI3YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA3LDYgKzEwNyw4IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9PQkpFQ1RfTFVUX1NPVVJDRVMKICAgICBydW50aW1lL1N0cmluZ1Byb3RvdHlw
ZS5jcHAKICAgICBydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvU3lt
Ym9sUHJvdG90eXBlLmNwcAorICAgIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9y
LmNwcAorICAgIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAKICAgICBydW50
aW1lL1RlbXBvcmFsT2JqZWN0LmNwcAogCiAgICAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCA3NTQyYzdmNzc0
NjVlMjZlMTlkNGE2OGE1ZGI3NjA5MWZkZDQ2NTM5Li4zZjU4NWUxYzk0YjMwMzA2ODk0YjI3NzZi
OWE1MDdlOTZmMDY0Zjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtMTkxLDYgKzE5MSw4IEBAIE9CSkVDVF9MVVRfSEVBREVSUyA9IFwKICAgICBTdHJp
bmdQcm90b3R5cGUubHV0LmggXAogICAgIFN5bWJvbENvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBT
eW1ib2xQcm90b3R5cGUubHV0LmggXAorICAgIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5s
dXQuaCBcCisgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5sdXQuaCBcCiAgICAgVGVtcG9y
YWxPYmplY3QubHV0LmggXAogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3Iu
bHV0LmggXAogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmx1dC5oIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGQxY2IzMjZiZTcwNWQ3MzM5MWQxNWVmNDdl
NzRhOTk0ZmMxODk4Yy4uNGQ5ZGJlOWM3Y2I0ZDczZWJmODM2NDgxNzZiYTIyNDk4YTk5MDcxNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0MTcsNiArMTQxNyw5IEBACiAJCUEz
ODJDNTMxMjY2NzExMUQwMDQyQ0Q5OSAvKiBJbkJ5VmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMzMDVGQjEyMEIwRjc4ODAwQ0VCODJCIC8q
IEluQnlWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQTM4RDI1MEUyNTgwMEQ0NDAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMzhEMjUwRDI1ODAwRDQzMDA0MkJGREQgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGlu
ZXMuaCAqLzsgfTsKIAkJQTM4RDVCRkMyNjY2RDNEQTAwQTEwOUE2IC8qIEluQnlTdGF0dXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzOEQ1QkZBMjY2
NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTNDN0VEQjYyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEzQzdFREIwMjZCMERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlLmggKi87IH07CisJCUEzQzdFREI5MjZCMERCMzgwMDRDMzRDNSAvKiBUZW1wb3Jh
bER1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBM0M3RURCMzI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovOyB9Owor
CQlBM0M3RURCQTI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBM0M3RURC
NDI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggKi87IH07
CiAJCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRsV29ya2Fyb3VuZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzc2MTk0MDI2MjUxMjdD
MDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3BwICovOyB9OwogCQlBM0ZGOUJDNzIyMzQ3NDkx
MDBCMUE5QUIgLyogWWFyckZsYWdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBM0ZGOUJDNTIyMzQ3NDY2MDBCMUE5QUIgLyogWWFyckZsYWdzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTUwM0ZBMUEx
ODhFMEZCMDAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MDNGQTE0MTg4RTBGQUYwMDExMEYxNCAv
KiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggKi87IH07CkBAIC00NDc1LDYgKzQ0NzgsMTIgQEAKIAkJ
QTNCRjg4NEUyNDQ4MEJFMDAwMUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNCRjg4
NEYyNDQ4MEJFMDAwMUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzQkY4ODUwMjQ0ODBCRTEwMDFCOUYzNSAv
KiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMTI2QjBEQjM2MDA0
QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTNDN0VEQjIyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3
RURCMzI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9u
Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcG9yYWxE
dXJhdGlvbkNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdF
REI1MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0ZGOUJDNTIyMzQ3NDY2MDBC
MUE5QUIgLyogWWFyckZsYWdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlh
cnJGbGFncy5oOyBwYXRoID0geWFyci9ZYXJyRmxhZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTNGRjlCQzYyMjM0NzQ2NjAwQjFBOUFCIC8qIFlhcnJGbGFncy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBZYXJyRmxhZ3MuY3BwOyBwYXRoID0geWFy
ci9ZYXJyRmxhZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTAzRkExMzE4
OEUwRkFGMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc5NTgsNiArNzk2NywxMiBAQAogCQkJCUUzMTE3OUE5MjI4
ODM4NUQwMDUxNEIyQyAvKiBTeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5oICovLAogCQkJCUJEQjRC
NUUwOTlDRDRDMUJCM0MxQ0YwNSAvKiBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3BwICovLAog
CQkJCTcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3Iu
aCAqLywKKwkJCQlBM0M3RURCMTI2QjBEQjM2MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5j
cHAgKi8sCisJCQkJQTNDN0VEQjMyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24u
aCAqLywKKwkJCQlBM0M3RURCMjI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNv
bnN0cnVjdG9yLmNwcCAqLywKKwkJCQlBM0M3RURCNDI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggKi8sCisJCQkJQTNDN0VEQjUyNkIwREIzNzAwNEMzNEM1
IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwICovLAorCQkJCUEzQzdFREIwMjZCMERC
MzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmggKi8sCiAJCQkJRjZGMTUw
MUIyNjkzRDMzRTAwNEI5OEVGIC8qIFRlbXBvcmFsTm93LmNwcCAqLywKIAkJCQlGNkYxNTAxODI2
OTNEMzNEMDA0Qjk4RUYgLyogVGVtcG9yYWxOb3cuaCAqLywKIAkJCQlGNkYxNTAxOTI2OTNEMzNF
MDA0Qjk4RUYgLyogVGVtcG9yYWxPYmplY3QuY3BwICovLApAQCAtMTA2NTksNyArMTA2NzQsMTEg
QEAKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJREM3OTk3ODMxQ0RFOUZBMDAwNEQ0QTA5IC8qIFRhZ1JlZ2lzdGVyc01v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1w
bGF0ZU9iamVjdERlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREI5MjZCMERC
MzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBM0M3
RURCQTI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjZGMTUwMjEyNjkzRDQ1MDAwNEI5
OEVGIC8qIFRlbXBvcmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTNGQTk3Mzgy
NkJCMzU1NjAwRjcxMDYwIC8qIFRlbXBvcmFsT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyNEU1NEYxN0VFMjc0OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3RlclNldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0NEE3QjQyMEJGNjhEOTAwMjJCMTcxIC8qIFRlcm1pbmF0ZWRDb2Rl
T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkEyQzE3QzE3RDdDRjg0MDA5RDAxNUYgLyog
VGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dAppbmRleCBhNjQ3MDJkYjYwMWNjMjFhYmI0YzI2Mjk0NTdkZDFhNzU5YzMwMjBkLi4zYzJjNmYw
MDk2NjdjODNhYzE5NDdhNDYzNDljNjdhYjkyZWMyMjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0CkBAIC0xMDEwLDYgKzEwMTAsOSBAQCBydW50aW1lL1N5bWJvbE9iamVjdC5jcHAKIHJ1
bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcAogcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKIHJ1bnRp
bWUvVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAorcnVudGltZS9UZW1wb3JhbER1cmF0aW9u
LmNwcAorcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCitydW50aW1lL1Rl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCiBydW50aW1lL1RlbXBvcmFsTm93LmNwcAogcnVu
dGltZS9UZW1wb3JhbE9iamVjdC5jcHAKIHJ1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKaW5k
ZXggZGM2MDE5ZjQ1ZmQ5OGI0MzdhNWJmNmUyNjU4NGEwYTM0NjMyZmFkYy4uOTIxNzhiNzlhNDI2
NzBmNGExZGQwYjMwZThhM2IzYjU1ZjJhYzE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC05OSw2ICs5OSw3IEBACiAgICAg
bWFjcm8oY291bnRlcnMpIFwKICAgICBtYWNybyhkYXRlU3R5bGUpIFwKICAgICBtYWNybyhkYXkp
IFwKKyAgICBtYWNybyhkYXlzKSBcCiAgICAgbWFjcm8oZGF5UGVyaW9kKSBcCiAgICAgbWFjcm8o
ZGVmaW5lUHJvcGVydHkpIFwKICAgICBtYWNybyhkZXJlZikgXApAQCAtMTM1LDYgKzEzNiw3IEBA
CiAgICAgbWFjcm8oaGFzaCkgXAogICAgIG1hY3JvKGhlYWRlcikgXAogICAgIG1hY3JvKGhvdXIp
IFwKKyAgICBtYWNybyhob3VycykgXAogICAgIG1hY3JvKGhvdXJDeWNsZSkgXAogICAgIG1hY3Jv
KGhvdXIxMikgXAogICAgIG1hY3JvKGlkKSBcCkBAIC0xNjIsMTMgKzE2NCwxOCBAQAogICAgIG1h
Y3JvKG1heGltdW1GcmFjdGlvbkRpZ2l0cykgXAogICAgIG1hY3JvKG1heGltdW1TaWduaWZpY2Fu
dERpZ2l0cykgXAogICAgIG1hY3JvKG1lc3NhZ2UpIFwKKyAgICBtYWNybyhtaWNyb3NlY29uZHMp
IFwKKyAgICBtYWNybyhtaWxsaXNlY29uZHMpIFwKICAgICBtYWNybyhtaW5pbXVtRnJhY3Rpb25E
aWdpdHMpIFwKICAgICBtYWNybyhtaW5pbXVtSW50ZWdlckRpZ2l0cykgXAogICAgIG1hY3JvKG1p
bmltdW1TaWduaWZpY2FudERpZ2l0cykgXAogICAgIG1hY3JvKG1pbnV0ZSkgXAorICAgIG1hY3Jv
KG1pbnV0ZXMpIFwKICAgICBtYWNybyhtb250aCkgXAorICAgIG1hY3JvKG1vbnRocykgXAogICAg
IG1hY3JvKG11bHRpbGluZSkgXAogICAgIG1hY3JvKG5hbWUpIFwKKyAgICBtYWNybyhuYW5vc2Vj
b25kcykgXAogICAgIG1hY3JvKG5leHQpIFwKICAgICBtYWNybyhub3cpIFwKICAgICBtYWNybyhu
dW1JbmxpbmVkQ2FsbHMpIFwKQEAgLTE5MSwxMyArMTk4LDE2IEBACiAgICAgbWFjcm8ocmVnaW9u
KSBcCiAgICAgbWFjcm8ocmVwbGFjZSkgXAogICAgIG1hY3JvKHJlc29sdmUpIFwKKyAgICBtYWNy
byhyb3VuZGluZ01vZGUpIFwKICAgICBtYWNybyhzY3JpcHQpIFwKICAgICBtYWNybyhzZWNvbmQp
IFwKKyAgICBtYWNybyhzZWNvbmRzKSBcCiAgICAgbWFjcm8oc2VnbWVudCkgXAogICAgIG1hY3Jv
KHNlbnNpdGl2aXR5KSBcCiAgICAgbWFjcm8oc2V0KSBcCiAgICAgbWFjcm8oc2l6ZSkgXAogICAg
IG1hY3JvKHNsaWNlKSBcCisgICAgbWFjcm8oc21hbGxlc3RVbml0KSBcCiAgICAgbWFjcm8oc291
cmNlKSBcCiAgICAgbWFjcm8oc291cmNlQ29kZSkgXAogICAgIG1hY3JvKHNvdXJjZVVSTCkgXApA
QCAtMjI4LDggKzIzOCwxMCBAQAogICAgIG1hY3JvKHZhbHVlKSBcCiAgICAgbWFjcm8odmFsdWVP
ZikgXAogICAgIG1hY3JvKHdlZWtkYXkpIFwKKyAgICBtYWNybyh3ZWVrcykgXAogICAgIG1hY3Jv
KHdyaXRhYmxlKSBcCi0gICAgbWFjcm8oeWVhcikKKyAgICBtYWNybyh5ZWFyKSBcCisgICAgbWFj
cm8oeWVhcnMpCiAKICNkZWZpbmUgSlNDX0NPTU1PTl9JREVOVElGSUVSU19FQUNIX1BSSVZBVEVf
RklFTEQobWFjcm8pIFwKICAgICBtYWNybyhjb25zdHJ1Y3RvcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyNGZjZjA4MTVlMjUw
NDk1ZTAzMTc5NGEwNmU0YjMxMDVjNzg0ZmI0Li5iYWVjMjlmNDY1NmE2NzUxYzQzNDQyZDYwZGVk
ZWE0YzY3YzAzOTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCkBAIC0yMDEsNiArMjAxLDggQEAKICNpbmNsdWRlICJTeW1ib2xDb25z
dHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlN5bWJvbE9iamVjdC5oIgogI2luY2x1ZGUgIlN5bWJvbFBy
b3RvdHlwZS5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKKyNpbmNsdWRlICJUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxPYmplY3QuaCIKICNp
bmNsdWRlICJWTVRyYXBzSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21DYXBhYmlsaXRpZXMuaCIK
QEAgLTEyMTIsNiArMTIxNCwxMyBAQCBjYXBpdGFsTmFtZSAjIyBDb25zdHJ1Y3RvciogbG93ZXJO
YW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFsTmFtZQogICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5JbnRsLCBpbnRsLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKICAg
ICBpZiAoT3B0aW9uczo6dXNlVGVtcG9yYWwoKSkgeworICAgICAgICBtX2R1cmF0aW9uU3RydWN0
dXJlLmluaXRMYXRlcigKKyAgICAgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1
cmU+JiBpbml0KSB7CisgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpOworICAgICAgICAgICAgICAg
IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBlID0gVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlKGluaXQudm0sIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
b2JqZWN0UHJvdG90eXBlKCkpKTsKKyAgICAgICAgICAgICAgICBpbml0LnNldChUZW1wb3JhbER1
cmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgZ2xvYmFsT2JqZWN0LCBkdXJhdGlvblBy
b3RvdHlwZSkpOworICAgICAgICAgICAgfSk7CisKICAgICAgICAgVGVtcG9yYWxPYmplY3QqIHRl
bXBvcmFsID0gVGVtcG9yYWxPYmplY3Q6OmNyZWF0ZSh2bSwgVGVtcG9yYWxPYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZSh2bSwgdGhpcykpOwogICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgdm0ucHJvcGVydHlOYW1lcy0+VGVtcG9yYWwsIHRlbXBvcmFsLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgfQpAQCAtMjA4Niw2
ICsyMDk1LDkgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIHRoaXNPYmplY3QtPm1fZGF0ZVRpbWVGb3Jt
YXRTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9udW1iZXJGb3Jt
YXRTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAKKyAgICBpZiAoT3B0aW9uczo6dXNlVGVtcG9y
YWwoKSkKKyAgICAgICAgdGhpc09iamVjdC0+bV9kdXJhdGlvblN0cnVjdHVyZS52aXNpdCh2aXNp
dG9yKTsKKwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbnVsbEdldHRlckZ1bmN0
aW9uKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX251bGxTZXR0ZXJGdW5jdGlv
bik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9udWxsU2V0dGVyU3RyaWN0RnVu
Y3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgKaW5kZXggYTM1ZWZjZTdjNTI2MmY0OWQ5OGQ1YWI0MjEzYzg4MWI1YzI3MGFjMC4uYjQzYjY3
YTkzODQwNmI3MDEyMjJhZTM1MzMyMDhkNzIxN2E3Mjg5YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC0zMjQsNiArMzI0LDggQEAgcHVi
bGljOgogICAgIExhenlDbGFzc1N0cnVjdHVyZSBtX2RhdGVUaW1lRm9ybWF0U3RydWN0dXJlOwog
ICAgIExhenlDbGFzc1N0cnVjdHVyZSBtX251bWJlckZvcm1hdFN0cnVjdHVyZTsKIAorICAgIExh
enlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2R1cmF0aW9uU3RydWN0dXJl
OworCiAgICAgV3JpdGVCYXJyaWVyPE51bGxHZXR0ZXJGdW5jdGlvbj4gbV9udWxsR2V0dGVyRnVu
Y3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPE51bGxTZXR0ZXJGdW5jdGlvbj4gbV9udWxsU2V0dGVy
RnVuY3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPE51bGxTZXR0ZXJGdW5jdGlvbj4gbV9udWxsU2V0
dGVyU3RyaWN0RnVuY3Rpb247CkBAIC04NzAsNiArODcyLDggQEAgcHVibGljOgogICAgIEpTT2Jq
ZWN0KiBudW1iZXJGb3JtYXRDb25zdHJ1Y3RvcigpIHsgcmV0dXJuIG1fbnVtYmVyRm9ybWF0U3Ry
dWN0dXJlLmNvbnN0cnVjdG9yKHRoaXMpOyB9CiAgICAgSlNPYmplY3QqIG51bWJlckZvcm1hdFBy
b3RvdHlwZSgpIHsgcmV0dXJuIG1fbnVtYmVyRm9ybWF0U3RydWN0dXJlLnByb3RvdHlwZSh0aGlz
KTsgfQogCisgICAgU3RydWN0dXJlKiBkdXJhdGlvblN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fZHVy
YXRpb25TdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHNldFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQoYm9vbCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCByZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzIy
ZmM2MDRiOGMwMDNhYmVkMDU3NzQ3N2M5NWYzZTg3NjFhYzYzYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwCkBAIC0w
LDAgKzEsMzcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCisKKyNpbmNsdWRlICJJbnRsT2JqZWN0SW5saW5lcy5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZShWTSYgdm0sIHVuc2lnbmVkIGluZGV4KQoreworICAgIEFTU0VSVChpbmRleCA8IG51bWJl
ck9mVGVtcG9yYWxVbml0cyk7CisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxUZW1wb3JhbFVuaXQ+
KGluZGV4KSkgeworI2RlZmluZSBKU0NfVEVNUE9SQUxfRFVSQVRJT05fUFJPUEVSVFlfTkFNRShu
YW1lLCBjYXBpdGFsaXplZE5hbWUpIGNhc2UgVGVtcG9yYWxVbml0OjpjYXBpdGFsaXplZE5hbWU6
IHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lIyNzOyAKKyAgICAgICAgSlNDX1RFTVBPUkFM
X1VOSVRTKEpTQ19URU1QT1JBTF9EVVJBVElPTl9QUk9QRVJUWV9OQU1FKQorI3VuZGVmIEpTQ19U
RU1QT1JBTF9EVVJBVElPTl9QUk9QRVJUWV9OQU1FCisgICAgfQorfQorCitjb25zdCBDbGFzc0lu
Zm8gVGVtcG9yYWxEdXJhdGlvbjo6c19pbmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShUZW1wb3JhbER1cmF0aW9uKSB9
OworCitUZW1wb3JhbER1cmF0aW9uKiBUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ViZHVyYXRpb25zJiYgc3ViZHVyYXRpb25zKQoreworICAg
IGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsRHVyYXRp
b24+KHZtLmhlYXApKSBUZW1wb3JhbER1cmF0aW9uKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoc3Vi
ZHVyYXRpb25zKSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJu
IG9iamVjdDsKK30KKworU3RydWN0dXJlKiBUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9
CisKK1RlbXBvcmFsRHVyYXRpb246OlRlbXBvcmFsRHVyYXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgU3ViZHVyYXRpb25zJiYgc3ViZHVyYXRpb25zKQorICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlKQorICAgICwgbV9zdWJkdXJhdGlvbnMoV1RGTW92ZShzdWJkdXJhdGlvbnMpKQor
eworfQorCit2b2lkIFRlbXBvcmFsRHVyYXRpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBp
bmZvKCkpKTsKK30KKworLy8gSXNWYWxpZER1cmF0aW9uICggeWVhcnMsIG1vbnRocywgd2Vla3Ms
IGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25k
cywgbmFub3NlY29uZHMgKQorYm9vbCBpc1ZhbGlkRHVyYXRpb24oY29uc3QgVGVtcG9yYWxEdXJh
dGlvbjo6U3ViZHVyYXRpb25zJiBzdWJkdXJhdGlvbnMpCit7CisgICAgaW50IHNpZ24gPSAwOwor
ICAgIGZvciAoZG91YmxlIHZhbHVlIDogc3ViZHVyYXRpb25zKSB7CisgICAgICAgIGlmICghc3Rk
Ojppc2Zpbml0ZSh2YWx1ZSkgfHwgKHZhbHVlIDwgMCAmJiBzaWduID4gMCkgfHwgKHZhbHVlID4g
MCAmJiBzaWduIDwgMCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYg
KCFzaWduICYmIHZhbHVlKQorICAgICAgICAgICAgc2lnbiA9IHZhbHVlID4gMCA/IDEgOiAtMTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gUGFyc2VUZW1wb3JhbER1cmF0aW9u
U3RyaW5nICggaXNvU3RyaW5nICkKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1w
b3JhbER1cmF0aW9uOjpwYXJzZShKU0dsb2JhbE9iamVjdCosIFN0cmluZ1ZpZXcpCit7CisgICAg
Ly8gSVNPIDg2MDEgZHVyYXRpb24gc3RyaW5ncyBhcmUgbGlrZSAiLVAxWTJNM1c0RFQ1SDZNNy4x
MjM0NTY3ODlTIi4gTm90ZXM6CisgICAgLy8gLSBjYXNlIGluc2Vuc2l0aXZlCisgICAgLy8gLSBz
aWduOiArIC0gVSsyMjEyCisgICAgLy8gLSBzZXBhcmF0b3I6IC4gLAorICAgIC8vIC0gVCBpcyBw
cmVzZW50IGlmZiB0aGVyZSBpcyBhIHRpbWUgcGFydAorICAgIC8vIC0gd2hvbGUgbnVtYmVyIHBh
cnRzIGNhbiBoYXZlIGFueSBudW1iZXIgb2YgZGlnaXRzIGJ1dCBmcmFjdGlvbmFsIHBhcnRzIGhh
dmUgYXQgbW9zdCA5CisgICAgLy8gLSBob3VycyBhbmQgbWludXRlcyBjYW4gaGF2ZSBmcmFjdGlv
bmFsIHBhcnRzIHRvbywgYnV0IG9ubHkgYXMgdGhlIExBU1Qgc2VnbWVudCBvZiB0aGUgc3RyaW5n
CisKKyAgICAvLyBUT0RPIQorICAgIHJldHVybiB7IH07Cit9CisKKy8vIFRvVGVtcG9yYWxEdXJh
dGlvblJlY29yZCAoIHRlbXBvcmFsRHVyYXRpb25MaWtlICkKK1RlbXBvcmFsRHVyYXRpb246OlN1
YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjp0b1N1YmR1cmF0aW9ucyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogZHVyYXRpb25MaWtlKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBBU1NFUlQoIWR1cmF0aW9uTGlrZS0+aW5oZXJpdHM8VGVtcG9yYWxEdXJh
dGlvbj4odm0pKTsKKworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQ7CisgICAgYm9vbCBoYXNSZWxl
dmFudFByb3BlcnR5ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZlRlbXBvcmFsVW5pdHM7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZHVyYXRpb25M
aWtlLT5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUodm0sIGkpKTsKKworICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICAgICAgcmVzdWx0W2ldID0gMDsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaGFzUmVsZXZhbnRQcm9w
ZXJ0eSA9IHRydWU7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcihnbG9i
YWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgICAgIGlmIChzdGQ6OmZsb29yKG51bWJlcikgIT0gbnVtYmVyKSB7CisgICAgICAgICAgICB0
aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uIHBy
b3BlcnRpZXMgbXVzdCBiZSBpbnRlZ2VycyJfcyk7CisgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0W2ldID0gbnVtYmVyOworICAgIH0KKworICAgIGlm
ICghaGFzUmVsZXZhbnRQcm9wZXJ0eSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAib2JqZWN0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgVGVtcG9yYWwu
RHVyYXRpb24gcHJvcGVydHkiX3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAg
IGlmICghaXNWYWxpZER1cmF0aW9uKHJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJjYW5ub3QgY3JlYXRlIER1cmF0aW9uIHdpdGggaW5jb25z
aXN0ZW50IG51bWVyaWMgdmFsdWVzIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBUb1RlbXBvcmFsRHVyYXRpb24gKCBpdGVtICkK
K1RlbXBvcmFsRHVyYXRpb24qIFRlbXBvcmFsRHVyYXRpb246OnRvRHVyYXRpb24oSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBpdGVtVmFsdWUpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGlmIChpdGVtVmFsdWUuaW5oZXJpdHM8VGVtcG9yYWxEdXJhdGlvbj4odm0p
KQorICAgICAgICByZXR1cm4ganNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPihpdGVtVmFsdWUpOwor
CisgICAgaWYgKGl0ZW1WYWx1ZS5pc09iamVjdCgpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJh
dGlvblN0cnVjdHVyZSgpLCB0b1N1YmR1cmF0aW9ucyhnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGl0
ZW1WYWx1ZSkpKSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gaXRlbVZhbHVlLnRvV1RGU3RyaW5n
KGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgpLCBwYXJzZShnbG9iYWxPYmpl
Y3QsIHN0cmluZykpKTsKK30KKworVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6
ZnJvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZW1WYWx1ZSkKK3sK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmlu
aGVyaXRzPFRlbXBvcmFsRHVyYXRpb24+KHZtKSkgeworICAgICAgICBTdWJkdXJhdGlvbnMgY2xv
bmVkID0ganNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPihpdGVtVmFsdWUpLT5tX3N1YmR1cmF0aW9u
czsKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgpLCBXVEZNb3ZlKGNsb25lZCkpOworICAgIH0KKworICAg
IHJldHVybiB0b0R1cmF0aW9uKGdsb2JhbE9iamVjdCwgaXRlbVZhbHVlKTsKK30KKworaW50IFRl
bXBvcmFsRHVyYXRpb246OnNpZ24oKSBjb25zdAoreworICAgIGZvciAoZG91YmxlIHZhbHVlIDog
bV9zdWJkdXJhdGlvbnMpIHsKKyAgICAgICAgaWYgKHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJl
dHVybiAtMTsKKworICAgICAgICBpZiAodmFsdWUgPiAwKQorICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0
aW9ucyBUZW1wb3JhbER1cmF0aW9uOjp3aXRoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBkdXJhdGlvbkxpa2UpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIFN1YmR1cmF0aW9ucyByZXN1bHQ7CisgICAgYm9vbCBoYXNSZWxldmFudFByb3BlcnR5ID0g
ZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlRlbXBvcmFsVW5pdHM7
IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZHVyYXRpb25MaWtlLT5nZXQoZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUodm0sIGkpKTsKKworICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWQoKSkgeworICAgICAgICAgICAgcmVzdWx0W2ldID0gbV9zdWJkdXJhdGlvbnNbaV07Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGhhc1JlbGV2YW50UHJv
cGVydHkgPSB0cnVlOworICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZS50b0ludGVnZXJPckluZmlu
aXR5KGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisgICAgfQorCisgICAgaWYgKCFoYXNSZWxldmFudFByb3BlcnR5KSB7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJvYmplY3QgbXVzdCBjb250YWluIGF0
IGxlYXN0IG9uZSBUZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0eSJfcyk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorCisgICAgaWYgKCFpc1ZhbGlkRHVyYXRpb24ocmVzdWx0KSkgeworICAg
ICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImNhbm5vdCBjcmVhdGUg
RHVyYXRpb24gd2l0aCBpbmNvbnNpc3RlbnQgbnVtZXJpYyB2YWx1ZXMiX3MpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1RlbXBvcmFsRHVy
YXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjpuZWdhdGVkKCkgY29uc3QKK3sK
KyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZUZW1wb3JhbFVuaXRzOyBpKyspCisgICAgICAgIHJlc3VsdFtpXSA9IC1tX3N1YmR1cmF0
aW9uc1tpXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJk
dXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6YWJzKCkgY29uc3QKK3sKKyAgICBTdWJkdXJhdGlv
bnMgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW1wb3JhbFVu
aXRzOyBpKyspCisgICAgICAgIHJlc3VsdFtpXSA9IHN0ZDo6YWJzKG1fc3ViZHVyYXRpb25zW2ld
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBGSVhNRTogSW1wbGVtZW50IHJlbGF0aXZl
VG8gcGFyYW1ldGVyIGFmdGVyIGltcGxlbWVudGluZyBEYXRlVGltZSBjbGFzc2VzLgorLy8gUm91
bmREdXJhdGlvbiAoIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywg
c2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMsIG5hbm9zZWNvbmRzLCBpbmNyZW1l
bnQsIHVuaXQsIHJvdW5kaW5nTW9kZSBbICwgcmVsYXRpdmVUbyBdICkKK3N0ZDo6cGFpcjxUZW1w
b3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMsIGRvdWJsZT4gVGVtcG9yYWxEdXJhdGlvbjo6cm91
bmQoUHJlY2lzaW9uRGF0YSBkYXRhLCBSb3VuZGluZ01vZGUgbW9kZSkgY29uc3QKK3sKKyAgICAv
LyB0ZW1wb3JhcnkhCisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGRhdGEudW5pdCkg
Pj0gc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpTZWNvbmQpKTsKKworICAgIFN1
YmR1cmF0aW9ucyByZXN1bHQgPSBtX3N1YmR1cmF0aW9uczsKKyAgICBkb3VibGUgcmVtYWluZGVy
ID0gMDsKKworICAgIHN3aXRjaCAoZGF0YS51bml0KSB7CisgICAgY2FzZSBUZW1wb3JhbFVuaXQ6
OlNlY29uZDogeworICAgICAgICBkb3VibGUgZnJhY3Rpb25hbFNlY29uZHMgPSBzZWNvbmRzKCkg
KyBtaWxsaXNlY29uZHMoKSAqIDFlLTMgKyBtaWNyb3NlY29uZHMoKSAqIDFlLTYgKyBuYW5vc2Vj
b25kcygpICogMWUtOTsKKyAgICAgICAgZG91YmxlIG5ld1NlY29uZHMgPSByb3VuZE51bWJlclRv
SW5jcmVtZW50KGZyYWN0aW9uYWxTZWNvbmRzLCBkYXRhLmluY3JlbWVudCwgbW9kZSk7CisgICAg
ICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxTZWNvbmRzIC0gbmV3U2Vjb25kczsKKyAgICAgICAg
cmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6U2Vjb25kKV0gPSBuZXdT
ZWNvbmRzOworICAgICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0
OjpNaWxsaXNlY29uZCldID0gMDsKKyAgICAgICAgcmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+
KFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQpXSA9IDA7CisgICAgICAgIHJlc3VsdFtzdGF0aWNf
Y2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQpXSA9IDA7CisgICAgfSBicmVh
azsKKyAgICBjYXNlIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQ6IHsKKyAgICAgICAgZG91Ymxl
IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMoKSArIG1pY3Jvc2Vjb25kcygp
ICogMWUtMyArIG5hbm9zZWNvbmRzKCkgKiAxZS02OworICAgICAgICBkb3VibGUgbmV3TWlsbGlz
ZWNvbmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsTWlsbGlzZWNvbmRzLCBk
YXRhLmluY3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxNaWxs
aXNlY29uZHMgLSBuZXdNaWxsaXNlY29uZHM7CisgICAgICAgIHJlc3VsdFtzdGF0aWNfY2FzdDx1
aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kKV0gPSBuZXdNaWxsaXNlY29uZHM7Cisg
ICAgICAgIHJlc3VsdFtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vj
b25kKV0gPSAwOworICAgICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxV
bml0OjpOYW5vc2Vjb25kKV0gPSAwOworICAgIH0gYnJlYWs7CisgICAgY2FzZSBUZW1wb3JhbFVu
aXQ6Ok1pY3Jvc2Vjb25kOiB7CisgICAgICAgIGRvdWJsZSBmcmFjdGlvbmFsTWljcm9zZWNvbmRz
ID0gbWljcm9zZWNvbmRzKCkgKyBuYW5vc2Vjb25kcygpICogMWUtMzsKKyAgICAgICAgZG91Ymxl
IG5ld01pY3Jvc2Vjb25kcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbE1pY3Jv
c2Vjb25kcywgZGF0YS5pbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFj
dGlvbmFsTWljcm9zZWNvbmRzIC0gbmV3TWljcm9zZWNvbmRzOworICAgICAgICByZXN1bHRbc3Rh
dGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCldID0gbmV3TWljcm9z
ZWNvbmRzOworICAgICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0
OjpOYW5vc2Vjb25kKV0gPSAwOworICAgIH0gYnJlYWs7CisgICAgY2FzZSBUZW1wb3JhbFVuaXQ6
Ok5hbm9zZWNvbmQ6IHsKKyAgICAgICAgZG91YmxlIG5ld05hbm9zZWNvbmRzID0gcm91bmROdW1i
ZXJUb0luY3JlbWVudChuYW5vc2Vjb25kcygpLCBkYXRhLmluY3JlbWVudCwgbW9kZSk7CisgICAg
ICAgIHJlbWFpbmRlciA9IG5hbm9zZWNvbmRzKCkgLSBuZXdOYW5vc2Vjb25kczsKKyAgICAgICAg
cmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZCldID0g
bmV3TmFub3NlY29uZHM7CisgICAgfSBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0LCByZW1haW5kZXIpOworfQorCitTdHJpbmcgVGVt
cG9yYWxEdXJhdGlvbjo6dG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBvcHRpb25zVmFsdWUpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpT
T2JqZWN0KiBvcHRpb25zID0gaW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRp
b25zVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBp
ZiAoIW9wdGlvbnMpCisgICAgICAgIHJldHVybiB0b1N0cmluZygpOworCisgICAgUHJlY2lzaW9u
RGF0YSBkYXRhID0gc2Vjb25kc1N0cmluZ1ByZWNpc2lvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBhdXRvIHJvdW5k
aW5nTW9kZSA9IGludGxPcHRpb248Um91bmRpbmdNb2RlPihnbG9iYWxPYmplY3QsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPnJvdW5kaW5nTW9kZSwKKyAgICAgICAgeyB7ICJjZWlsIl9zLCBS
b3VuZGluZ01vZGU6OkNlaWwgfSwgeyAiZmxvb3IiX3MsIFJvdW5kaW5nTW9kZTo6Rmxvb3IgfSwg
eyAidHJ1bmMiX3MsIFJvdW5kaW5nTW9kZTo6VHJ1bmMgfSwgeyAiaGFsZkV4cGFuZCJfcywgUm91
bmRpbmdNb2RlOjpIYWxmRXhwYW5kIH0gfSwKKyAgICAgICAgInJvdW5kaW5nTW9kZSBtdXN0IGJl
IGVpdGhlciBcImNlaWxcIiwgXCJmbG9vclwiLCBcInRydW5jXCIsIG9yIFwiaGFsZkV4cGFuZFwi
Il9zLCBSb3VuZGluZ01vZGU6OlRydW5jKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgLy8gTm8gbmVlZCB0byBtYWtlIGEgbmV3IG9iamVjdCBpZiB3ZSB3ZXJl
IGdpdmVuIGV4cGxpY2l0IGRlZmF1bHRzLgorICAgIGlmICghZGF0YS5wcmVjaXNpb24gJiYgcm91
bmRpbmdNb2RlID09IFJvdW5kaW5nTW9kZTo6VHJ1bmMpCisgICAgICAgIHJldHVybiB0b1N0cmlu
ZygpOworCisgICAgYXV0byByb3VuZGVkID0gVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCksIHRoaXMtPnJvdW5kKGRhdGEsIHJvdW5k
aW5nTW9kZSkuZmlyc3QpOworICAgIHJldHVybiByb3VuZGVkLT50b1N0cmluZyhkYXRhLnByZWNp
c2lvbik7Cit9CisKKy8vIFRlbXBvcmFsRHVyYXRpb25Ub1N0cmluZyAoIHllYXJzLCBtb250aHMs
IHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNy
b3NlY29uZHMsIG5hbm9zZWNvbmRzLCBwcmVjaXNpb24gKQorU3RyaW5nIFRlbXBvcmFsRHVyYXRp
b246OnRvU3RyaW5nKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHByZWNpc2lvbikgY29uc3QKK3sK
KyAgICBBU1NFUlQoIXByZWNpc2lvbiB8fCBwcmVjaXNpb24udmFsdWUoKSA8IDEwKTsKKworICAg
IGF1dG8gYmFsYW5jZWRNaWNyb3NlY29uZHMgPSBtaWNyb3NlY29uZHMoKSArIHN0ZDo6dHJ1bmMo
bmFub3NlY29uZHMoKSAvIDEwMDAuMCk7CisgICAgYXV0byBiYWxhbmNlZE5hbm9zZWNvbmRzID0g
c3RkOjpmbW9kKG5hbm9zZWNvbmRzKCksIDEwMDAuMCk7CisgICAgYXV0byBiYWxhbmNlZE1pbGxp
c2Vjb25kcyA9IG1pbGxpc2Vjb25kcygpICsgc3RkOjp0cnVuYyhiYWxhbmNlZE1pY3Jvc2Vjb25k
cyAvIDEwMDAuMCk7CisgICAgYmFsYW5jZWRNaWNyb3NlY29uZHMgPSBzdGQ6OmZtb2QoYmFsYW5j
ZWRNaWNyb3NlY29uZHMsIDEwMDAuMCk7CisgICAgYXV0byBiYWxhbmNlZFNlY29uZHMgPSBzZWNv
bmRzKCkgKyBzdGQ6OnRydW5jKGJhbGFuY2VkTWlsbGlzZWNvbmRzIC8gMTAwMC4wKTsKKyAgICBi
YWxhbmNlZE1pbGxpc2Vjb25kcyA9IHN0ZDo6Zm1vZChiYWxhbmNlZE1pbGxpc2Vjb25kcywgMTAw
MC4wKTsKKworICAgIGF1dG8gc2lnbiA9IHRoaXMtPnNpZ24oKTsKKyAgICBpZiAoIXNpZ24pCisg
ICAgICAgIHJldHVybiAiUFQwUyJfczsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAg
ICBpZiAoc2lnbiA8IDApCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCctJyk7CisKKyAgICBidWls
ZGVyLmFwcGVuZCgnUCcpOworICAgIGlmICh5ZWFycygpKQorICAgICAgICBidWlsZGVyLmFwcGVu
ZChzdGQ6OmFicyh5ZWFycygpKSwgJ1knKTsKKyAgICBpZiAobW9udGhzKCkpCisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHN0ZDo6YWJzKG1vbnRocygpKSwgJ00nKTsKKyAgICBpZiAod2Vla3MoKSkK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RkOjphYnMod2Vla3MoKSksICdXJyk7CisgICAgaWYg
KGRheXMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RkOjphYnMoZGF5cygpKSwgJ0QnKTsK
KworICAgIGF1dG8gaGFzU2Vjb25kcyA9IGJhbGFuY2VkU2Vjb25kcyB8fCBiYWxhbmNlZE1pbGxp
c2Vjb25kcyB8fCBiYWxhbmNlZE1pY3Jvc2Vjb25kcyB8fCBiYWxhbmNlZE5hbm9zZWNvbmRzOwor
ICAgIGlmICghaG91cnMoKSAmJiAhbWludXRlcygpICYmICFoYXNTZWNvbmRzKQorICAgICAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworCisgICAgYnVpbGRlci5hcHBlbmQoJ1QnKTsKKyAg
ICBpZiAoaG91cnMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RkOjphYnMoaG91cnMoKSks
ICdIJyk7CisgICAgaWYgKG1pbnV0ZXMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RkOjph
YnMobWludXRlcygpKSwgJ00nKTsKKyAgICBpZiAoaGFzU2Vjb25kcykgeworICAgICAgICBhdXRv
IGZyYWN0aW9uID0gc3RkOjphYnMoYmFsYW5jZWRNaWxsaXNlY29uZHMpICogMWUtMyArIHN0ZDo6
YWJzKGJhbGFuY2VkTWljcm9zZWNvbmRzKSAqIDFlLTYgKyBzdGQ6OmFicyhiYWxhbmNlZE5hbm9z
ZWNvbmRzKSAqIDFlLTk7CisgICAgICAgIGlmICgoIXByZWNpc2lvbiAmJiBmcmFjdGlvbikgfHwg
KHByZWNpc2lvbiAmJiBwcmVjaXNpb24udmFsdWUoKSkpIHsKKyAgICAgICAgICAgIGF1dG8gZm9y
bWF0dGVkID0gRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKHN0ZDo6YWJzKGJhbGFuY2VkU2Vj
b25kcykgKyBmcmFjdGlvbiwgOSk7CisgICAgICAgICAgICBpZiAocHJlY2lzaW9uKQorICAgICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kQ2hhcmFjdGVycyhmb3JtYXR0ZWQuYnVmZmVyKCksIGZv
cm1hdHRlZC5sZW5ndGgoKSAtICg5IC0gcHJlY2lzaW9uLnZhbHVlKCkpKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2Vz
ID0gZm9ybWF0dGVkLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIHdoaWxlIChmb3JtYXR0ZWQu
YnVmZmVyKClbbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzIC0gMV0gPT0gJzAnKQorICAgICAg
ICAgICAgICAgICAgICBsZW5ndGhXaXRob3V0VHJhaWxpbmdaZXJvZXMtLTsKKyAgICAgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZENoYXJhY3RlcnMoZm9ybWF0dGVkLmJ1ZmZlcigpLCBsZW5ndGhX
aXRob3V0VHJhaWxpbmdaZXJvZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0ZDo6YWJzKGJhbGFuY2VkU2Vjb25kcykpOworCisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdTJyk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIu
dG9TdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDEyNGUyMWEz
NmVlNmY1Mjg5NTJjNTEzOWYxYWFkYzNmODAzYTZiYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaApAQCAtMCwwICsxLDgw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVtcG9yYWxP
YmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb24gZmlu
YWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9
IEpTTm9uRmluYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS50ZW1wb3JhbER1cmF0aW9uU3BhY2U8bW9k
ZT4oKTsKKyAgICB9CisKKyAgICB1c2luZyBTdWJkdXJhdGlvbnMgPSBzdGQ6OmFycmF5PGRvdWJs
ZSwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzPjsKKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9u
KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBTdWJkdXJhdGlvbnMmJik7CisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsK
KworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uKiB0b0R1
cmF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisgICAgc3RhdGljIFRlbXBvcmFsRHVy
YXRpb24qIGZyb20oSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworI2RlZmluZSBKU0NfREVG
SU5FX1RFTVBPUkFMX0RVUkFUSU9OX0FDQ0VTU09SKG5hbWUsIGNhcGl0YWxpemVkTmFtZSkgXAor
ICAgIGRvdWJsZSBuYW1lIyNzKCkgY29uc3QgeyByZXR1cm4gbV9zdWJkdXJhdGlvbnNbc3RhdGlj
X2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpjYXBpdGFsaXplZE5hbWUpXTsgfQorICAgIEpT
Q19URU1QT1JBTF9VTklUUyhKU0NfREVGSU5FX1RFTVBPUkFMX0RVUkFUSU9OX0FDQ0VTU09SKTsK
KyN1bmRlZiBKU0NfREVGSU5FX1RFTVBPUkFMX0RVUkFUSU9OX0FDQ0VTU09SCisKKyAgICBpbnQg
c2lnbigpIGNvbnN0OworCisgICAgU3ViZHVyYXRpb25zIHdpdGgoSlNHbG9iYWxPYmplY3QqLCBK
U09iamVjdCogZHVyYXRpb25MaWtlKSBjb25zdDsKKyAgICBTdWJkdXJhdGlvbnMgbmVnYXRlZCgp
IGNvbnN0OworICAgIFN1YmR1cmF0aW9ucyBhYnMoKSBjb25zdDsKKworICAgIHN0ZDo6cGFpcjxU
ZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMsIGRvdWJsZT4gcm91bmQoUHJlY2lzaW9uRGF0
YSwgUm91bmRpbmdNb2RlKSBjb25zdDsKKworICAgIFN0cmluZyB0b1N0cmluZyhKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgb3B0aW9ucykgY29uc3Q7CisgICAgU3RyaW5nIHRvU3RyaW5nKHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHByZWNpc2lvbiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgVGVtcG9yYWxEdXJhdGlvbihWTSYsIFN0cnVjdHVyZSosIFN1YmR1cmF0aW9u
cyYmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisKKyAgICBzdGF0aWMgU3ViZHVy
YXRpb25zIHBhcnNlKEpTR2xvYmFsT2JqZWN0KiwgU3RyaW5nVmlldyk7CisgICAgc3RhdGljIFN1
YmR1cmF0aW9ucyB0b1N1YmR1cmF0aW9ucyhKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kik7CisK
KyAgICBTdWJkdXJhdGlvbnMgbV9zdWJkdXJhdGlvbnM7Cit9OworCitib29sIGlzVmFsaWREdXJh
dGlvbihjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMmKTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTdlOTg4NWY3
MjdiNmE4NzllN2EwYTFiZGM5ZTA5NDVjNThjNjVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcApA
QCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgorI2luY2x1ZGUgIlRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Ip
OworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uQ29u
c3RydWN0b3JGdW5jRnJvbSk7CisKK30KKworI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3Rvci5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBUZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNf
aW5mbywgJnRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvclRhYmxlLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvcikgfTsKKworLyogU291cmNl
IGZvciBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IubHV0LmgKK0BiZWdpbiB0ZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3JUYWJsZQorICBmcm9tICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3RvckZ1bmNGcm9tICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKK0Bl
bmQKKyovCisKK1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvciogVGVtcG9yYWxEdXJhdGlvbkNv
bnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZSogZHVyYXRpb25Qcm90b3R5cGUpCit7CisgICAgYXV0byogY29uc3Ry
dWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbER1cmF0aW9uQ29uc3Ry
dWN0b3I+KHZtLmhlYXApKSBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iodm0sIHN0cnVjdHVy
ZSk7CisgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBkdXJhdGlvblByb3RvdHlw
ZSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQorCitTdHJ1Y3R1cmUqIFRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSW50ZXJuYWxG
dW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworc3RhdGljIEpTQ19E
RUNMQVJFX0hPU1RfRlVOQ1RJT04oY2FsbFRlbXBvcmFsRHVyYXRpb24pOworc3RhdGljIEpTQ19E
RUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0VGVtcG9yYWxEdXJhdGlvbik7CisKK1RlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNhbGxU
ZW1wb3JhbER1cmF0aW9uLCBjb25zdHJ1Y3RUZW1wb3JhbER1cmF0aW9uKQoreworfQorCit2b2lk
IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlKiBkdXJhdGlvblByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSwgMCwgIkR1cmF0aW9uIl9zLCBQcm9wZXJ0eUFkZGl0aW9uTW9kZTo6
V2l0aG91dFN0cnVjdHVyZVRyYW5zaXRpb24pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIGR1cmF0aW9uUHJvdG90eXBlLCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgZHVyYXRpb25Qcm90b3R5cGUt
PnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1
Y3RvciwgdGhpcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0VGVtcG9yYWxE
dXJhdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIG5ld1RhcmdldCA9
IGFzT2JqZWN0KGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gSlNDX0dFVF9ERVJJVkVEX1NUUlVDVFVSRSh2bSwgZHVyYXRpb25TdHJ1Y3R1cmUsIG5l
d1RhcmdldCwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworCisgICAgVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zIHN1YmR1
cmF0aW9ucyB7IH07CisgICAgYXV0byBjb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCksIG51bWJlck9mVGVtcG9yYWxVbml0cyk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHN1YmR1cmF0aW9uc1tpXSA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoaSkudG9JbnRlZ2VyT3JJbmZpbml0eShnbG9iYWxPYmplY3QpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworICAgIGlm
ICghaXNWYWxpZER1cmF0aW9uKHN1YmR1cmF0aW9ucykpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiY2Fubm90IGNyZWF0ZSBEdXJhdGlvbiB3
aXRoIGluY29uc2lzdGVudCBudW1lcmljIHZhbHVlcyJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBXVEZNb3Zl
KHN1YmR1cmF0aW9ucykpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxUZW1w
b3JhbER1cmF0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiRHVyYXRpb24iKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihU
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jRnJvbSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmZyb20oZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43NDI0NWEzMTA2OTVhY2QzNWI1ZDZhYTU2ZTkwMDRmN2UzYjcwMzgyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxE
dXJhdGlvbkNvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU7CisKK2NsYXNzIFRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3RvciBmaW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsK
K3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSW50ZXJuYWxGdW5jdGlvbjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb25D
b25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6Cisg
ICAgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqKTsKK307CitT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3JhbER1cmF0aW9uQ29uc3Ry
dWN0b3IsIEludGVybmFsRnVuY3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzEwZTZhNjJiNTg1NjNmMjA4Mjg0NDIyNWU3OTBjMjk3
ZThjMWVhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGVtcG9y
YWxEdXJhdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNXaXRoKTsKK3N0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jTmVn
YXRlZCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlRnVuY0Ficyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9KU09OKTsKK3N0YXRp
YyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5j
VG9Mb2NhbGVTdHJpbmcpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZUZ1bmNWYWx1ZU9mKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNU
T01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJZZWFycyk7CitzdGF0aWMg
SlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVy
TW9udGhzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGVHZXR0ZXJXZWVrcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRF
UihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyRGF5cyk7CitzdGF0aWMgSlNDX0RFQ0xB
UkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVySG91cnMpOwor
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUdldHRlck1pbnV0ZXMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNlY29uZHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NV
U1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbGxpc2Vjb25kcyk7
CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlR2V0dGVyTWljcm9zZWNvbmRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVS
KFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJOYW5vc2Vjb25kcyk7CitzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2ln
bik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlR2V0dGVyQmxhbmspOworCit9CisKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlbXBvcmFsLkR1cmF0aW9uIiwgJkJh
c2U6OnNfaW5mbywgJmR1cmF0aW9uUHJvdG90eXBlVGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSkgfTsKKworLyogU291cmNlIGZvciBU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmx1dC5oCitAYmVnaW4gZHVyYXRpb25Qcm90b3R5cGVU
YWJsZQorICB3aXRoICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jV2l0
aCAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgbmVnYXRlZCAgICAgICAgICBU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY05lZ2F0ZWQgICAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAwCisgIGFicyAgICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1
bmNBYnMgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICB0b1N0cmluZyAgICAg
ICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9TdHJpbmcgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDAKKyAgdG9KU09OICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlRnVuY1RvSlNPTiAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIHRvTG9jYWxl
U3RyaW5nICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb0xvY2FsZVN0cmluZyAgICAg
RG9udEVudW18RnVuY3Rpb24gMAorICB2YWx1ZU9mICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVGdW5jVmFsdWVPZiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgeWVh
cnMgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyWWVhcnMgICAgICAg
ICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBtb250aHMgICAgICAgICAg
IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNb250aHMgICAgICAgICAgIERvbnRFbnVt
fFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIHdlZWtzICAgICAgICAgICAgVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUdldHRlcldlZWtzICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3Vz
dG9tQWNjZXNzb3IKKyAgZGF5cyAgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
R2V0dGVyRGF5cyAgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3Nvcgor
ICBob3VycyAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJIb3VycyAg
ICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIG1pbnV0ZXMgICAg
ICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMgICAgICAgICAgRG9u
dEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgc2Vjb25kcyAgICAgICAgICBUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2Vjb25kcyAgICAgICAgICBEb250RW51bXxSZWFkT25s
eXxDdXN0b21BY2Nlc3NvcgorICBtaWxsaXNlY29uZHMgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJNaWxsaXNlY29uZHMgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vz
c29yCisgIG1pY3Jvc2Vjb25kcyAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1p
Y3Jvc2Vjb25kcyAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbmFub3Nl
Y29uZHMgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTmFub3NlY29uZHMgICAg
ICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBzaWduICAgICAgICAgICAgIFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJTaWduICAgICAgICAgICAgIERvbnRFbnVtfFJl
YWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIGJsYW5rICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZUdldHRlckJsYW5rICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9t
QWNjZXNzb3IKK0BlbmQKKyovCisKK1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
eworICAgIGF1dG8qIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
KHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworfQorCitUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBC
YXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAgIEpTQ19UT19TVFJJTkdf
VEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNXaXRoLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZt
LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVy
YXRpb24ucHJvdG90eXBlLndpdGggY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0
IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworICAgIAorICAgIEpTVmFsdWUgZHVyYXRp
b25MaWtlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBpZiAoIWR1cmF0aW9uTGlrZS5p
c09iamVjdCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiRmlyc3QgYXJndW1lbnQgdG8gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLndp
dGggbXVzdCBiZSBhbiBvYmplY3QiX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QtPmR1cmF0aW9uU3RydWN0dXJlKCksIGR1cmF0aW9uLT53aXRoKGdsb2JhbE9iamVjdCwgYXNP
YmplY3QoZHVyYXRpb25MaWtlKSkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY05lZ2F0ZWQsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4o
dm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5E
dXJhdGlvbi5wcm90b3R5cGUubmVnYXRlZCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBv
YmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJh
dGlvblN0cnVjdHVyZSgpLCBkdXJhdGlvbi0+bmVnYXRlZCgpKSk7Cit9CisKK0pTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY0FicywgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFs
RHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlv
bikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5hYnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBu
b3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKSwgZHVyYXRpb24tPmFicygpKSk7Cit9CisKK0pTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQorewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8
VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAo
IWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvU3RyaW5nIGNhbGxlZCBvbiB2
YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsK
KworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KHZtLCBkdXJhdGlvbi0+dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVGdW5jVG9KU09OLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJh
dGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBl
LnRvSlNPTiBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQg
YXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KHZtLCBkdXJhdGlvbi0+dG9TdHJpbmcoKSkpOworfQorCisvLyBUaGlzIHdpbGwgYmUgcGFydCBv
ZiB0aGUgRUNNQS00MDIgSW50bC5EdXJhdGlvbkZvcm1hdCBwcm9wb3NhbDsgdW50aWwgdGhlbiwg
d2UganVzdCBmb2xsb3cgRUNNQS0yNjIgaW4gbWltaWNraW5nIHRvSlNPTi4KK0pTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvTG9jYWxlU3RyaW5n
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nh
c3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBp
ZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nIGNh
bGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0
aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1cmF0
aW9uLT50b1N0cmluZygpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlRnVuY1ZhbHVlT2YsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS52YWx1ZU9mIG11c3Qgbm90IGJlIGNhbGxlZCJfcyk7Cit9CisKK0pTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyWWVhcnMsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0g
anNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnll
YXJzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBh
IER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVy
YXRpb24tPnllYXJzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNb250aHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3Jh
bER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1
cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1vbnRocyBjYWxsZWQgb24gdmFsdWUg
dGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5tb250aHMoKSkpOwor
fQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdl
dHRlcldlZWtzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBh
dXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0
aW9uLnByb3RvdHlwZS53ZWVrcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3Qg
aW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGR1cmF0aW9uLT53ZWVrcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9N
X0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyRGF5cywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFt
aWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuZGF5cyBjYWxs
ZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlv
biJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5k
YXlzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVHZXR0ZXJIb3VycywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24q
Pih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1w
b3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuaG91cnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3Qg
YW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+aG91cnMoKSkpOworfQorCitKU0NfREVG
SU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0
aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90
eXBlLm1pbnV0ZXMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxp
emVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihkdXJhdGlvbi0+bWludXRlcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRF
UihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWND
YXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwor
ICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc2Vjb25kcyBjYWxs
ZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlv
biJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5z
ZWNvbmRzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGVHZXR0ZXJNaWxsaXNlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3Jh
bER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1
cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1pbGxpc2Vjb25kcyBjYWxsZWQgb24g
dmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7
CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taWxsaXNl
Y29uZHMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZUdldHRlck1pY3Jvc2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFs
RHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVy
YXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubWljcm9zZWNvbmRzIGNhbGxlZCBvbiB2
YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsK
KworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPm1pY3Jvc2Vj
b25kcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlR2V0dGVyTmFub3NlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1
cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0
aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5hbm9zZWNvbmRzIGNhbGxlZCBvbiB2YWx1
ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPm5hbm9zZWNvbmRz
KCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJTaWduLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFs
LkR1cmF0aW9uLnByb3RvdHlwZS5zaWduIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9i
amVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPnNpZ24oKSkpOworfQorCitKU0NfREVGSU5FX0NV
U1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckJsYW5rLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpz
RHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5ibGFu
ayBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBE
dXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighZHVy
YXRpb24tPnNpZ24oKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mODc3NWVlYjA3YmU2MDJjZmFlZjAzODc5NGU5N2M2MjkzNTRkMzZlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJl
dHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsK
KworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbE9iamVjdC5jcHAKaW5kZXggYWYxNDM2NzVmMWU0YzYyODdlYTJiZTE4ZjQz
M2VlYmUzNzJhNzE3ZC4uMzA2Mzk1MmM4NWUzM2Y2ZDUyYTE1MmE4Zjg0ZWJiYWRmNmJjYjRkZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNw
cApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMCwxMCAr
MjEsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZW1wb3JhbE9iamVjdC5o
IgogCisjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJP
YmplY3RQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iu
aCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiVGVt
cG9yYWxOb3cuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zNyw2ICs0MiwxMyBAQCBzdGF0aWMg
SlNWYWx1ZSBjcmVhdGVOb3dPYmplY3QoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogICAgIHJl
dHVybiBUZW1wb3JhbE5vdzo6Y3JlYXRlKHZtLCBUZW1wb3JhbE5vdzo6Y3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QpKTsKIH0KIAorc3RhdGljIEpTVmFsdWUgY3JlYXRlRHVyYXRpb25D
b25zdHJ1Y3RvcihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgVGVtcG9yYWxPYmpl
Y3QqIHRlbXBvcmFsT2JqZWN0ID0ganNDYXN0PFRlbXBvcmFsT2JqZWN0Kj4ob2JqZWN0KTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdGVtcG9yYWxPYmplY3QtPmdsb2JhbE9i
amVjdCh2bSk7CisgICAgcmV0dXJuIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRl
KHZtLCBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uUHJvdG90eXBlKCkpLCBqc0Nhc3Q8VGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZSo+KGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1cmUo
KS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNpbmNsdWRlICJUZW1wb3JhbE9iamVjdC5sdXQuaCIKQEAgLTQ2LDYgKzU4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAvKiBTb3VyY2UgZm9yIFRlbXBvcmFsT2JqZWN0Lmx1dC5oCiBAYmVnaW4gdGVt
cG9yYWxPYmplY3RUYWJsZQogICBOb3cgICAgICAgICAgICBjcmVhdGVOb3dPYmplY3QgICAgICAg
ICAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKKyAgRHVyYXRpb24gICAgICAgY3Jl
YXRlRHVyYXRpb25Db25zdHJ1Y3RvciAgICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiBA
ZW5kCiAqLwogCkBAIC03NSw0ICs4OCwxNTkgQEAgdm9pZCBUZW1wb3JhbE9iamVjdDo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQogICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElP
TigpOwogfQogCitzdGF0aWMgU3RyaW5nVmlldyBzaW5ndWxhclVuaXQoU3RyaW5nVmlldyB1bml0
KQoreworICAgIC8vIFBsdXJhbHMgYXJlIGFsbG93ZWQsIGJ1dCB0aGFua2Z1bGx5IHRoZXkncmUg
YWxsIGp1c3QgYSBzaW1wbGUgLXMuCisgICAgcmV0dXJuIHVuaXQuZW5kc1dpdGgoInMiKSA/IHVu
aXQubGVmdCh1bml0Lmxlbmd0aCgpIC0gMSkgOiB1bml0OworfQorCitzdGF0aWMgc3RkOjpvcHRp
b25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFsVW5pdFR5cGUoU3RyaW5nVmlldyB1bml0KQorewor
ICAgIFN0cmluZ1ZpZXcgc2luZ3VsYXIgPSBzaW5ndWxhclVuaXQodW5pdCk7CisKKyAgICBpZiAo
c2luZ3VsYXIgPT0gInllYXIiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpZZWFyOwor
ICAgIGlmIChzaW5ndWxhciA9PSAibW9udGgiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0
OjpNb250aDsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIndlZWsiKQorICAgICAgICByZXR1cm4gVGVt
cG9yYWxVbml0OjpXZWVrOworICAgIGlmIChzaW5ndWxhciA9PSAiZGF5IikKKyAgICAgICAgcmV0
dXJuIFRlbXBvcmFsVW5pdDo6RGF5OworICAgIGlmIChzaW5ndWxhciA9PSAiaG91ciIpCisgICAg
ICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OkhvdXI7CisgICAgaWYgKHNpbmd1bGFyID09ICJtaW51
dGUiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpNaW51dGU7CisgICAgaWYgKHNpbmd1
bGFyID09ICJzZWNvbmQiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpTZWNvbmQ7Cisg
ICAgaWYgKHNpbmd1bGFyID09ICJtaWxsaXNlY29uZCIpCisgICAgICAgIHJldHVybiBUZW1wb3Jh
bFVuaXQ6Ok1pbGxpc2Vjb25kOworICAgIGlmIChzaW5ndWxhciA9PSAibWljcm9zZWNvbmQiKQor
ICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZDsKKyAgICBpZiAoc2luZ3Vs
YXIgPT0gIm5hbm9zZWNvbmQiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpOYW5vc2Vj
b25kOworICAgIAorICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKy8vIFRvU21hbGxlc3RU
ZW1wb3JhbFVuaXQgKCBub3JtYWxpemVkT3B0aW9ucywgZGlzYWxsb3dlZFVuaXRzLCBmYWxsYmFj
ayApCitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5pdD4gdGVtcG9yYWxTbWFsbGVzdFVuaXQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxUZW1wb3JhbFVuaXQ+IGRpc2FsbG93ZWRVbml0cykKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgU3RyaW5nIHNtYWxsZXN0VW5pdCA9IGludGxTdHJpbmdPcHRpb24oZ2xv
YmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5zbWFsbGVzdFVuaXQsIHsgfSwg
bnVsbHB0ciwgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpu
dWxsb3B0KTsKKworICAgIGlmIChzbWFsbGVzdFVuaXQuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvIHVuaXRUeXBlID0gdGVtcG9yYWxVbml0VHlwZShz
bWFsbGVzdFVuaXQpOworICAgIGlmICghdW5pdFR5cGUpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJzbWFsbGVzdFVuaXQgaXMgYW4gaW52YWxpZCB1bml0
Il9zKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoZGlz
YWxsb3dlZFVuaXRzLnNpemUoKSAmJiBzdGQ6OmZpbmQoZGlzYWxsb3dlZFVuaXRzLmJlZ2luKCks
IGRpc2FsbG93ZWRVbml0cy5lbmQoKSwgdW5pdFR5cGUudmFsdWUoKSkgIT0gZGlzYWxsb3dlZFVu
aXRzLmVuZCgpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAic21hbGxlc3RVbml0IGlzIGEgZGlzYWxsb3dlZCB1bml0Il9zKTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gdW5pdFR5cGU7Cit9CisKKy8vIEdl
dFN0cmluZ09yTnVtYmVyT3B0aW9uKG5vcm1hbGl6ZWRPcHRpb25zLCAiZnJhY3Rpb25hbFNlY29u
ZERpZ2l0cyIsIMKrICJhdXRvIiDCuywgMCwgOSwgImF1dG8iKQorc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4gdGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25kRGlnaXRzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBpZiAoIW9wdGlvbnMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBKU1Zh
bHVlIHZhbHVlID0gb3B0aW9ucy0+Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+
ZnJhY3Rpb25hbFNlY29uZERpZ2l0cyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
c3RkOjpudWxsb3B0KTsKKworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIGlmICh2YWx1ZS5pc051bWJlcigpKSB7Cisg
ICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHZhbHVlLmFzTnVtYmVyKCk7CisgICAgICAgIGlm
IChkb3VibGVWYWx1ZSA8IDAgfHwgZG91YmxlVmFsdWUgPiA5KSB7CisgICAgICAgICAgICB0aHJv
d1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZyYWN0aW9uYWxTZWNvbmREaWdpdHMg
aXMgb3V0IG9mIHJhbmdlIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRvdWJsZVZh
bHVlKTsKKyAgICB9CisKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmlu
ZyhnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVs
bG9wdCk7CisKKyAgICBpZiAoc3RyaW5nVmFsdWUgIT0gImF1dG8iKQorICAgICAgICB0aHJvd1Jh
bmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZyYWN0aW9uYWxTZWNvbmREaWdpdHMgaXMg
b3V0IG9mIHJhbmdlIl9zKTsKKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKy8vIFRv
U2Vjb25kc1N0cmluZ1ByZWNpc2lvbiAoIG5vcm1hbGl6ZWRPcHRpb25zICkKK1ByZWNpc2lvbkRh
dGEgc2Vjb25kc1N0cmluZ1ByZWNpc2lvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U09iamVjdCogb3B0aW9ucykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byBzbWFs
bGVzdFVuaXQgPSB0ZW1wb3JhbFNtYWxsZXN0VW5pdChnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHsg
VGVtcG9yYWxVbml0OjpZZWFyLCBUZW1wb3JhbFVuaXQ6Ok1vbnRoLCBUZW1wb3JhbFVuaXQ6Oldl
ZWssIFRlbXBvcmFsVW5pdDo6RGF5LCBUZW1wb3JhbFVuaXQ6OkhvdXIsIFRlbXBvcmFsVW5pdDo6
TWludXRlIH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBp
ZiAoc21hbGxlc3RVbml0KSB7CisgICAgICAgIHN3aXRjaCAoc21hbGxlc3RVbml0LnZhbHVlKCkp
IHsKKyAgICAgICAgY2FzZSBUZW1wb3JhbFVuaXQ6OlNlY29uZDoKKyAgICAgICAgICAgIHJldHVy
biB7IDAsIFRlbXBvcmFsVW5pdDo6U2Vjb25kLCAxIH07CisgICAgICAgIGNhc2UgVGVtcG9yYWxV
bml0OjpNaWxsaXNlY29uZDoKKyAgICAgICAgICAgIHJldHVybiB7IDMsIFRlbXBvcmFsVW5pdDo6
TWlsbGlzZWNvbmQsIDEgfTsKKyAgICAgICAgY2FzZSBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25k
OgorICAgICAgICAgICAgcmV0dXJuIHsgNiwgVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCwgMSB9
OworICAgICAgICBjYXNlIFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZDoKKyAgICAgICAgICAgIHJl
dHVybiB7IDksIFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZCwgMSB9OworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHByZWNpc2lvbiA9IHRl
bXBvcmFsRnJhY3Rpb25hbFNlY29uZERpZ2l0cyhnbG9iYWxPYmplY3QsIG9wdGlvbnMpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBpZiAoIXByZWNpc2lvbikK
KyAgICAgICAgcmV0dXJuIHsgc3RkOjpudWxsb3B0LCBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQs
IDEgfTsKKworICAgIHVuc2lnbmVkIGRpZ2l0cyA9IHByZWNpc2lvbi52YWx1ZSgpOworICAgIGlm
ICghZGlnaXRzKQorICAgICAgICByZXR1cm4geyAwLCBUZW1wb3JhbFVuaXQ6OlNlY29uZCwgMSB9
OworCisgICAgaWYgKGRpZ2l0cyA8PSAzKQorICAgICAgICByZXR1cm4geyBkaWdpdHMsIFRlbXBv
cmFsVW5pdDo6TWlsbGlzZWNvbmQsIHN0ZDo6cG93KDEwLCAzIC0gZGlnaXRzKSB9OworCisgICAg
aWYgKGRpZ2l0cyA8PSA2KQorICAgICAgICByZXR1cm4geyBkaWdpdHMsIFRlbXBvcmFsVW5pdDo6
TWljcm9zZWNvbmQsIHN0ZDo6cG93KDEwLCA2IC0gZGlnaXRzKSB9OworCisgICAgQVNTRVJUKGRp
Z2l0cyA8PSA5KTsKKyAgICByZXR1cm4geyBkaWdpdHMsIFRlbXBvcmFsVW5pdDo6TmFub3NlY29u
ZCwgc3RkOjpwb3coMTAsIDkgLSBkaWdpdHMpIH07Cit9CisKKy8vIFJvdW5kTnVtYmVyVG9JbmNy
ZW1lbnQgKCB4LCBpbmNyZW1lbnQsIHJvdW5kaW5nTW9kZSApCitkb3VibGUgcm91bmROdW1iZXJU
b0luY3JlbWVudChkb3VibGUgeCwgZG91YmxlIGluY3JlbWVudCwgUm91bmRpbmdNb2RlIG1vZGUp
Cit7CisgICAgZG91YmxlIHF1b3RpZW50ID0geCAvIGluY3JlbWVudDsKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIFJvdW5kaW5nTW9kZTo6Q2VpbDoKKyAgICAgICAgcmV0dXJuIC1zdGQ6
OmZsb29yKC1xdW90aWVudCkgKiBpbmNyZW1lbnQ7CisgICAgY2FzZSBSb3VuZGluZ01vZGU6OkZs
b29yOgorICAgICAgICByZXR1cm4gc3RkOjpmbG9vcihxdW90aWVudCkgKiBpbmNyZW1lbnQ7Cisg
ICAgY2FzZSBSb3VuZGluZ01vZGU6OlRydW5jOgorICAgICAgICByZXR1cm4gc3RkOjp0cnVuYyhx
dW90aWVudCkgKiBpbmNyZW1lbnQ7CisgICAgY2FzZSBSb3VuZGluZ01vZGU6OkhhbGZFeHBhbmQ6
CisgICAgICAgIHJldHVybiBzdGQ6OnJvdW5kKHF1b3RpZW50KSAqIGluY3JlbWVudDsKKyAgICB9
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RlbXBvcmFsT2JqZWN0LmgKaW5kZXggMWVlOTk5NGMyYjhjMDVlNDZkMTYxMDZhNjZmMDJi
OTc1OGI4YjI4My4uMTNiNjRmMDI5ZjdkNjI1NjIxNGY3MmM0ODFhOTlmOWZmZTY1OTVmNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5oCkBAIC0y
Myw2ICsyMywyNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2RlZmluZSBKU0NfVEVNUE9SQUxf
VU5JVFMobWFjcm8pIFwKKyAgICBtYWNybyh5ZWFyLCBZZWFyKSBcCisgICAgbWFjcm8obW9udGgs
IE1vbnRoKSBcCisgICAgbWFjcm8od2VlaywgV2VlaykgXAorICAgIG1hY3JvKGRheSwgRGF5KSBc
CisgICAgbWFjcm8oaG91ciwgSG91cikgXAorICAgIG1hY3JvKG1pbnV0ZSwgTWludXRlKSBcCisg
ICAgbWFjcm8oc2Vjb25kLCBTZWNvbmQpIFwKKyAgICBtYWNybyhtaWxsaXNlY29uZCwgTWlsbGlz
ZWNvbmQpIFwKKyAgICBtYWNybyhtaWNyb3NlY29uZCwgTWljcm9zZWNvbmQpIFwKKyAgICBtYWNy
byhuYW5vc2Vjb25kLCBOYW5vc2Vjb25kKSBcCisKK2VudW0gY2xhc3MgVGVtcG9yYWxVbml0IDog
dWludDhfdCB7CisjZGVmaW5lIEpTQ19ERUZJTkVfVEVNUE9SQUxfVU5JVF9FTlVNKG5hbWUsIGNh
cGl0YWxpemVkTmFtZSkgY2FwaXRhbGl6ZWROYW1lLAorICAgIEpTQ19URU1QT1JBTF9VTklUUyhK
U0NfREVGSU5FX1RFTVBPUkFMX1VOSVRfRU5VTSkKKyN1bmRlZiBKU0NfREVGSU5FX1RFTVBPUkFM
X1VOSVRfRU5VTQorfTsKKyNkZWZpbmUgSlNDX0NPVU5UX1RFTVBPUkFMX1VOSVRTKG5hbWUsIGNh
cGl0YWxpemVkTmFtZSkgKyAxCitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mVGVt
cG9yYWxVbml0cyA9IDAgSlNDX1RFTVBPUkFMX1VOSVRTKEpTQ19DT1VOVF9URU1QT1JBTF9VTklU
Uyk7CisjdW5kZWYgSlNDX0NPVU5UX1RFTVBPUkFMX1VOSVRTCisKIGNsYXNzIFRlbXBvcmFsT2Jq
ZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwpAQCAtNDUsNCArNjYsMjIgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiB9OwogCitlbnVtIGNsYXNzIFJvdW5kaW5nTW9k
ZSA6IHVpbnQ4X3QgeworICAgIENlaWwsCisgICAgRmxvb3IsCisgICAgVHJ1bmMsCisgICAgSGFs
ZkV4cGFuZAorfTsKKworc3RydWN0IFByZWNpc2lvbkRhdGEgeworICAgIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IHByZWNpc2lvbjsKKyAgICBUZW1wb3JhbFVuaXQgdW5pdDsKKyAgICBkb3VibGUg
aW5jcmVtZW50OworfTsKKworc3RkOjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFsU21h
bGxlc3RVbml0KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlvbnMsIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxUZW1wb3JhbFVuaXQ+IGRpc2FsbG93ZWRVbml0cyk7CitzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiB0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmREaWdpdHMoSlNHbG9iYWxPYmplY3Qq
LCBKU09iamVjdCogb3B0aW9ucyk7CitQcmVjaXNpb25EYXRhIHNlY29uZHNTdHJpbmdQcmVjaXNp
b24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucyk7Citkb3VibGUgcm91bmROdW1i
ZXJUb0luY3JlbWVudChkb3VibGUsIGRvdWJsZSBpbmNyZW1lbnQsIFJvdW5kaW5nTW9kZSk7CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4
IDFkZWE2YTEzY2I0YzQyOWI5YjA3MTk4YmFiNmM0NGYzMTQ2OWQwNjguLjgzMWQzZjJlZDNhMzI3
Y2ZmYjM2OGVmMTYzYjFhOGFiNmY3YzgxNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKQEAgLTE2Miw2ICsxNjIsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIlN5bWJvbE9iamVjdC5oIgor
I2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMu
aCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIu
aCIKQEAgLTE2MTcsNiArMTYxOCw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhpbnRsUmVsYXRpdmVUaW1lRm9ybWF0U3BhY2UsIGludGxSZWxhdGl2CiBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRJdGVyYXRvclNwYWNl
LCBpbnRsU2VnbWVudEl0ZXJhdG9ySGVhcENlbGxUeXBlLmdldCgpLCBJbnRsU2VnbWVudEl0ZXJh
dG9yKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50
ZXJTcGFjZSwgaW50bFNlZ21lbnRlckhlYXBDZWxsVHlwZS5nZXQoKSwgSW50bFNlZ21lbnRlcikK
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudHNTcGFj
ZSwgaW50bFNlZ21lbnRzSGVhcENlbGxUeXBlLmdldCgpLCBJbnRsU2VnbWVudHMpCitEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codGVtcG9yYWxEdXJhdGlvblNwYWNlLCBj
ZWxsSGVhcENlbGxUeXBlLmdldCgpLCBUZW1wb3JhbER1cmF0aW9uKQogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhqc1RvV2Fz
bUlDQ2FsbGVlU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVG9XYXNtSUNDYWxsZWUp
CiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlDb2Rl
QmxvY2tTcGFjZSwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2spIC8vIEhhc2g6MHg5YWQ5OTVjZApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKaW5kZXggYmNlZDk4NDNmY2U4MjYyMGU4OGI5NzUwMTgzYWViNjE1NTYyNjA2OS4u
YWJkYTcyZTk0M2E5MjVmNGVmNzYwM2UyNTBlM2QwNmNhZTA0MTcyMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCkBAIC0xODUsNiArMTg1LDcgQEAgY2xhc3MgU3RydWN0dXJlOwogY2xh
c3MgUmVnRXhwOwogI2VuZGlmCiBjbGFzcyBTeW1ib2w7CitjbGFzcyBUZW1wb3JhbER1cmF0aW9u
OwogY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXI7CiBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsK
IGNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKQEAgLTYxNSw2ICs2MTYsNyBAQCBwdWJsaWM6
CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsU2VnbWVudEl0ZXJh
dG9yU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsU2Vn
bWVudGVyU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRs
U2VnbWVudHNTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRl
bXBvcmFsRHVyYXRpb25TcGFjZSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlDQ2FsbGVlU3BhY2UpCiAgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUNvZGVCbG9ja1Nw
YWNlKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwpp
bmRleCA3NWQ0MDU5MDFkZDIzYmEzMzI4ZjdmMjFhZTY0ZmZmNmY5MTIzNTQzLi5mODdkN2M1M2Nl
ZDZiYWUzZDM1NDQ4Mjg1MzBkYjA0MjIyYzRkYmU5IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5n
ZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIxLTA4LTA2
ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAgICBbSlND
XSBJbXBsZW1lbnQgVGVtcG9yYWwuRHVyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODUzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL3RlbXBvcmFsLWR1cmF0aW9uLmpzOiBBZGRl
ZC4KKwogMjAyMS0wOC0wMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtKU0NdIFlhcnIgQm95ZXJNb29yZSBzZWFyY2ggc2hvdWxkIHN1cHBvcnQgY2hhcmFj
dGVyLWNsYXNzCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5q
cyBiL0pTVGVzdHMvc3RyZXNzL3RlbXBvcmFsLWR1cmF0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4Yzhl
NjAzOWIwNmE3YjM2MWE5ZDdkZGZhOGQ0MTU0MzNhN2Q2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9K
U1Rlc3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qcwpAQCAtMCwwICsxLDE2NyBAQAorLy9A
IHJlcXVpcmVPcHRpb25zKCItLXVzZVRlbXBvcmFsPTEiKQorCitmdW5jdGlvbiBzaG91bGRCZShh
Y3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH1g
KTsKK30KKworZnVuY3Rpb24gc2hvdWxkTm90VGhyb3coZnVuYykgeworICAgIGZ1bmMoKTsKK30K
KworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JUeXBlKSB7CisgICAgbGV0IGVycm9y
OworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IGVycm9yID0gZTsKKyAgICB9CisKKyAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIGVycm9yVHlw
ZSkpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtlcnJvclR5cGUubmFtZX0h
YCk7Cit9CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uIGluc3RhbmNlb2YgRnVuY3Rpb24s
IHRydWUpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ubGVuZ3RoLCAwKTsKK3Nob3VsZEJl
KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwuRHVyYXRpb24sICdwcm90
b3R5cGUnKS53cml0YWJsZSwgZmFsc2UpOworc2hvdWxkQmUoT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihUZW1wb3JhbC5EdXJhdGlvbiwgJ3Byb3RvdHlwZScpLmVudW1lcmFibGUsIGZh
bHNlKTsKK3Nob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwu
RHVyYXRpb24sICdwcm90b3R5cGUnKS5jb25maWd1cmFibGUsIGZhbHNlKTsKK3Nob3VsZFRocm93
KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uKCksIFR5cGVFcnJvcik7CisKK3Nob3VsZEJlKG5ldyBU
ZW1wb3JhbC5EdXJhdGlvbigpIGluc3RhbmNlb2YgVGVtcG9yYWwuRHVyYXRpb24sIHRydWUpOwor
eworICAgIGNsYXNzIERlcml2ZWREdXJhdGlvbiBleHRlbmRzIFRlbXBvcmFsLkR1cmF0aW9uIHt9
CisKKyAgICBjb25zdCBkZCA9IG5ldyBEZXJpdmVkRHVyYXRpb24oKTsKKyAgICBzaG91bGRCZShk
ZCBpbnN0YW5jZW9mIERlcml2ZWREdXJhdGlvbiwgdHJ1ZSk7CisgICAgc2hvdWxkQmUoZGQgaW5z
dGFuY2VvZiBUZW1wb3JhbC5EdXJhdGlvbiwgdHJ1ZSk7CisgICAgc2hvdWxkQmUoZGQubmVnYXRl
ZCwgVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQpOworICAgIHNob3VsZEJlKE9i
amVjdC5nZXRQcm90b3R5cGVPZihkZCksIERlcml2ZWREdXJhdGlvbi5wcm90b3R5cGUpOworICAg
IHNob3VsZEJlKE9iamVjdC5nZXRQcm90b3R5cGVPZihEZXJpdmVkRHVyYXRpb24ucHJvdG90eXBl
KSwgVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlKTsKK30KKworc2hvdWxkVGhyb3coKCkgPT4g
bmV3IFRlbXBvcmFsLkR1cmF0aW9uKDEsIC0xKSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygo
KSA9PiBuZXcgVGVtcG9yYWwuRHVyYXRpb24oSW5maW5pdHkpLCBSYW5nZUVycm9yKTsKK3Nob3Vs
ZFRocm93KCgpID0+IG5ldyBUZW1wb3JhbC5EdXJhdGlvbihJbmZpbml0eSwgU3ltYm9sKCkpLCBU
eXBlRXJyb3IpOworCitjb25zdCBmaWVsZHMgPSBbJ3llYXJzJywgJ21vbnRocycsICd3ZWVrcycs
ICdkYXlzJywgJ2hvdXJzJywgJ21pbnV0ZXMnLCAnc2Vjb25kcycsICdtaWxsaXNlY29uZHMnLCAn
bWljcm9zZWNvbmRzJywgJ25hbm9zZWNvbmRzJ107Citjb25zdCB6ZXJvID0gbmV3IFRlbXBvcmFs
LkR1cmF0aW9uKCk7Citjb25zdCBwb3MgPSBuZXcgVGVtcG9yYWwuRHVyYXRpb24oMSwyLDMsNCw1
LDYsNyw4LDksMTApOworY29uc3QgbmVnID0gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKC0xLC0yLC0z
LC00LC01LC02LC03LC04LC05LC0xMCk7CisKK2ZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaSkgPT4g
eworICAgIHNob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZVtmaWVs
ZF0sIFR5cGVFcnJvcik7CisgICAgc2hvdWxkQmUoemVyb1tmaWVsZF0sIDApOworICAgIHNob3Vs
ZEJlKHBvc1tmaWVsZF0sIGkgKyAxKTsKKyAgICBzaG91bGRCZShuZWdbZmllbGRdLCAtaSAtIDEp
OworfSk7CisKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5z
aWduLCBUeXBlRXJyb3IpOworc2hvdWxkQmUoemVyby5zaWduLCAwKTsKK3Nob3VsZEJlKHBvcy5z
aWduLCAxKTsKK3Nob3VsZEJlKG5lZy5zaWduLCAtMSk7CisKK3Nob3VsZFRocm93KCgpID0+IFRl
bXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5ibGFuaywgVHlwZUVycm9yKTsKK3Nob3VsZEJlKHpl
cm8uYmxhbmssIHRydWUpOworc2hvdWxkQmUocG9zLmJsYW5rLCBmYWxzZSk7CitzaG91bGRCZShu
ZWcuYmxhbmssIGZhbHNlKTsKKworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24u
ZnJvbSh7fSksIFR5cGVFcnJvcik7Cit7CisgICAgY29uc3QgZHVyYXRpb25MaWtlID0ge307Cisg
ICAgZmllbGRzLmZvckVhY2goKGZpZWxkLCBpKSA9PiB7IGR1cmF0aW9uTGlrZVtmaWVsZF0gPSBp
ICsgMTsgfSk7CisgICAgY29uc3QgZnJvbUR1cmF0aW9uTGlrZSA9IFRlbXBvcmFsLkR1cmF0aW9u
LmZyb20oZHVyYXRpb25MaWtlKTsKKyAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykKKyAg
ICAgICAgc2hvdWxkQmUoZnJvbUR1cmF0aW9uTGlrZVtmaWVsZF0sIHBvc1tmaWVsZF0pOworfQor
CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUud2l0aC5sZW5ndGgsIDEpOwor
c2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLndpdGguY2FsbCh7
fSwgeyB5ZWFyczogMSB9KSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ud2l0
aCgpLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby53aXRoKHt9KSwgVHlwZUVy
cm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHBvcy53aXRoKHsgeWVhcnM6IC0xIH0pLCBSYW5nZUVy
cm9yKTsKK3sKKyAgICBjb25zdCBmdWxseVVwZGF0ZWQgPSBwb3Mud2l0aChuZWcpOworICAgIGZv
ciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJlKHplcm8ud2l0aCh7
IFtmaWVsZF06IDEgfSlbZmllbGRdLCAxKTsKKyAgICAgICAgc2hvdWxkQmUoZnVsbHlVcGRhdGVk
W2ZpZWxkXSwgbmVnW2ZpZWxkXSk7CisgICAgfQorfQorCitzaG91bGRCZShUZW1wb3JhbC5EdXJh
dGlvbi5wcm90b3R5cGUubmVnYXRlZC5sZW5ndGgsIDApOworc2hvdWxkVGhyb3coKCkgPT4gVGVt
cG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQuY2FsbCh7fSksIFR5cGVFcnJvcik7Cit7
CisgICAgY29uc3QgbmVnYXRlZFplcm8gPSB6ZXJvLm5lZ2F0ZWQoKTsKKyAgICBjb25zdCBuZWdh
dGVkUG9zID0gcG9zLm5lZ2F0ZWQoKTsKKyAgICBjb25zdCBuZWdhdGVkTmVnID0gbmVnLm5lZ2F0
ZWQoKTsKKyAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAgICAgICBzaG91bGRC
ZShuZWdhdGVkWmVyb1tmaWVsZF0sIHplcm9bZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUobmVn
YXRlZE5lZ1tmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgICAgICBzaG91bGRCZShuZWdhdGVkUG9z
W2ZpZWxkXSwgbmVnW2ZpZWxkXSk7CisgICAgfQorfQorCitzaG91bGRCZShUZW1wb3JhbC5EdXJh
dGlvbi5wcm90b3R5cGUuYWJzLmxlbmd0aCwgMCk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGUuYWJzLmNhbGwoe30pLCBUeXBlRXJyb3IpOworeworICAgIGNv
bnN0IGFic1plcm8gPSB6ZXJvLmFicygpOworICAgIGNvbnN0IGFic1BvcyA9IHBvcy5hYnMoKTsK
KyAgICBjb25zdCBhYnNOZWcgPSBuZWcuYWJzKCk7CisgICAgZm9yIChjb25zdCBmaWVsZCBvZiBm
aWVsZHMpIHsKKyAgICAgICAgc2hvdWxkQmUoYWJzWmVyb1tmaWVsZF0sIHplcm9bZmllbGRdKTsK
KyAgICAgICAgc2hvdWxkQmUoYWJzUG9zW2ZpZWxkXSwgcG9zW2ZpZWxkXSk7CisgICAgICAgIHNo
b3VsZEJlKGFic05lZ1tmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgIH0KK30KKworLy8gQXQgcHJl
c2VudCwgdG9Mb2NhbGVTdHJpbmcgaGFzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIHRvSlNPTiBvciBh
cmd1bWVudGxlc3MgdG9TdHJpbmcuCitmb3IgKGNvbnN0IG1ldGhvZCBvZiBbJ3RvU3RyaW5nJywg
J3RvSlNPTicsICd0b0xvY2FsZVN0cmluZyddKSB7ICAgIAorICAgIHNob3VsZEJlKFRlbXBvcmFs
LkR1cmF0aW9uLnByb3RvdHlwZVttZXRob2RdLmxlbmd0aCwgMCk7CisgICAgc2hvdWxkVGhyb3co
KCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW21ldGhvZF0uY2FsbCh7fSksIFR5cGVF
cnJvcik7CisKKyAgICBzaG91bGRCZSh6ZXJvW21ldGhvZF0oKSwgJ1BUMFMnKTsKKyAgICBzaG91
bGRCZShwb3NbbWV0aG9kXSgpLCAnUDFZMk0zVzREVDVINk03LjAwODAwOTAxUycpOworICAgIHNo
b3VsZEJlKG5lZ1ttZXRob2RdKCksICctUDFZMk0zVzREVDVINk03LjAwODAwOTAxUycpOworICAg
IAorICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigxLDEsMSwxKVttZXRob2RdKCks
ICdQMVkxTTFXMUQnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAs
MCwxLDEsMSlbbWV0aG9kXSgpLCAnUFQxSDFNMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9y
YWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwxMDApW21ldGhvZF0oKSwgJ1BUMC4xUycpOworICAg
IHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDAsMTAwKVttZXRo
b2RdKCksICdQVDAuMDAwMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24o
MCwwLDAsMCwwLDAsMCwwLDAsMTAwKVttZXRob2RdKCksICdQVDAuMDAwMDAwMVMnKTsKKyAgICBz
aG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMSwxMDAxKVttZXRob2Rd
KCksICdQVDIuMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAs
MCwwLDAsMCwwLDEsMTAwMSlbbWV0aG9kXSgpLCAnUFQwLjAwMjAwMVMnKTsKKyAgICBzaG91bGRC
ZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwwLDEsMTAwMSlbbWV0aG9kXSgp
LCAnUFQwLjAwMDAwMjAwMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24o
MCwwLDAsMCwwLDAsMSwxMDAxLDEwMDEsMTAwMSlbbWV0aG9kXSgpLCAnUFQyLjAwMjAwMjAwMVMn
KTsKK30KKworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHt9KSwgcG9zLnRvU3RyaW5nKCkpOworCitz
aG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICdmb29iYXInIH0p
LCBSYW5nZUVycm9yKTsKK2ZvciAoY29uc3QgdW5pdCBvZiBbJ3llYXInLCAnbW9udGgnLCAnd2Vl
aycsICdkYXknLCAnaG91cicsICdtaW51dGUnXSkgeworICAgIHNob3VsZFRocm93KCgpID0+IHBv
cy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogdW5pdCB9KSwgUmFuZ2VFcnJvcik7CisgICAgc2hv
dWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiBgJHt1bml0fXNgIH0p
LCBSYW5nZUVycm9yKTsKK30KK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDog
J3NlY29uZHMnIH0pLCAnUDFZMk0zVzREVDVINk03UycpOworc2hvdWxkQmUocG9zLnRvU3RyaW5n
KHsgc21hbGxlc3RVbml0OiAnbWlsbGlzZWNvbmRzJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDhT
Jyk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICdtaWNyb3NlY29uZHMn
IH0pLCAnUDFZMk0zVzREVDVINk03LjAwODAwOVMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7
IHNtYWxsZXN0VW5pdDogJ25hbm9zZWNvbmRzJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDgwMDkw
MTBTJyk7Citmb3IgKGNvbnN0IHVuaXQgb2YgWydzZWNvbmQnLCAnbWlsbGlzZWNvbmQnLCAnbWlj
cm9zZWNvbmQnLCAnbmFub3NlY29uZCddKQorICAgIHNob3VsZEJlKHBvcy50b1N0cmluZyh7IHNt
YWxsZXN0VW5pdDogdW5pdCB9KSwgcG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiBgJHt1bml0
fXNgIH0pKTsKKworc2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNl
Y29uZERpZ2l0czogLTEgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gcG9zLnRv
U3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMTAgfSksIFJhbmdlRXJyb3IpOworc2hv
dWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogJ2Jv
Z3VzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFs
U2Vjb25kRGlnaXRzOiAwIH0pLCAnUDFZMk0zVzREVDVINk03UycpOworY29uc3QgZGVjaW1hbFBh
cnQgPSAnMDA4MDA5MDEwJzsKK2ZvciAobGV0IGkgPSAxOyBpIDwgMTA7IGkrKykKKyAgICBzaG91
bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiBpIH0pLCBgUDFZMk0z
VzREVDVINk03LiR7ZGVjaW1hbFBhcnQuc2xpY2UoMCxpKX1TYCk7CitzaG91bGRCZShwb3MudG9T
dHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAnYXV0bycgfSksIHBvcy50b1N0cmluZygp
KTsKKworc2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgcm91bmRpbmdNb2RlOiAnYm9n
dXMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHJvdW5kaW5nTW9k
ZTogJ3RydW5jJyB9KSwgcG9zLnRvU3RyaW5nKCkpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsg
ZnJhY3Rpb25hbFNlY29uZERpZ2l0czogNywgcm91bmRpbmdNb2RlOiAnY2VpbCcgfSksICdQMVky
TTNXNERUNUg2TTcuMDA4MDA5MVMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9u
YWxTZWNvbmREaWdpdHM6IDIsIHJvdW5kaW5nTW9kZTogJ2Zsb29yJyB9KSwgJ1AxWTJNM1c0RFQ1
SDZNNy4wMFMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdp
dHM6IDIsIHJvdW5kaW5nTW9kZTogJ2hhbGZFeHBhbmQnIH0pLCAnUDFZMk0zVzREVDVINk03LjAx
UycpOworCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudmFsdWVPZi5sZW5n
dGgsIDApOworc2hvdWxkVGhyb3coKCkgPT4gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKCkudmFsdWVP
ZigpLCBUeXBlRXJyb3IpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436031</attachid>
            <date>2021-08-20 14:40:09 -0700</date>
            <delta_ts>2021-08-20 17:01:15 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-228532-20210820144007.patch</filename>
            <type>text/plain</type>
            <size>89364</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NmE5YjNkYmVhNTJlZWY3NjIyNzk4MWE0YmEzNDk1YThmZjRhOWJlLi41NDRjMjk2NzQ3ZmNmNTMz
NDcxZjlmNmRjNzQ4OTdlOTdjYzBmNDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NyBAQAorMjAyMS0wOC0yMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpkdXJhdGlvblN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OnByb3BlcnR5TmFtZSk6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFs
RHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRp
b246OlRlbXBvcmFsRHVyYXRpb24pOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmlzVmFsaWREdXJhdGlvbik6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQpOgorICAgICAgICAoSlNDOjpo
YW5kbGVGcmFjdGlvbik6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnBhcnNlKToK
KyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6dG9TdWJkdXJhdGlvbnMpOgorICAgICAg
ICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjp0b0R1cmF0aW9uKToKKyAgICAgICAgKEpTQzo6VGVt
cG9yYWxEdXJhdGlvbjo6ZnJvbSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnNp
Z24gY29uc3QpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjp3aXRoIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6bmVnYXRlZCBjb25zdCk6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmFicyBjb25zdCk6CisgICAgICAgIChKU0M6OlRlbXBv
cmFsRHVyYXRpb246OnJvdW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlv
bjo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5o
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpU
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0
aW9uQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKToK
KyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaDogQWRkZWQuCisg
ICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0
ZUR1cmF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpzaW5ndWxhclVuaXQpOgorICAg
ICAgICAoSlNDOjp0ZW1wb3JhbFVuaXRUeXBlKToKKyAgICAgICAgKEpTQzo6dGVtcG9yYWxTbWFs
bGVzdFVuaXQpOgorICAgICAgICAoSlNDOjp0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmREaWdpdHMp
OgorICAgICAgICAoSlNDOjpzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKToKKyAgICAgICAgKEpTQzo6
cm91bmROdW1iZXJUb0luY3JlbWVudCk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVj
dC5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoK
KwogMjAyMS0wOC0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtKU0NdIFJlbW92ZSB1bm5lY2Vzc2FyeSBtb3ZlcyBpbiBZYXJyJ3Mgc3ViMzIgLyBhZGQz
MiByZWxhdGVkIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiYjY1
NGI1NDQ0ZDIxOTY3OTZlYWZhNDI1NTc4ZDAzOGVhYjc2Y2U5Li5kMWQzOWFjN2RkZDY0ZDE1MTVj
Nzg1MTM5MjdhYmI2ZTBkYTFjNjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0xMDcsNiArMTA3LDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX09CSkVDVF9MVVRfU09VUkNF
UwogICAgIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvU3ltYm9sQ29u
c3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCisgICAgcnVudGlt
ZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCisgICAgcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCiAKICAg
ICB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCmluZGV4IDc1NDJjN2Y3NzQ2NWUyNmUxOWQ0YTY4YTVkYjc2MDkxZmRkNDY1
MzkuLjNmNTg1ZTFjOTRiMzAzMDY4OTRiMjc3NmI5YTUwN2U5NmYwNjRmOTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xOTEsNiArMTkxLDggQEAgT0JK
RUNUX0xVVF9IRUFERVJTID0gXAogICAgIFN0cmluZ1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgU3lt
Ym9sQ29uc3RydWN0b3IubHV0LmggXAogICAgIFN5bWJvbFByb3RvdHlwZS5sdXQuaCBcCisgICAg
VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlLmx1dC5oIFwKICAgICBUZW1wb3JhbE9iamVjdC5sdXQuaCBcCiAgICAgV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JQcm90b3R5cGUubHV0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBhZGQ2Y2I0MzIyOTI3ZjIyMTVhNjMyZDM4OTNiZGM5YzM4MjVmYTdhLi4yZWU2OGYxMDMyZTM5
OWJlM2I2OWQwNzkwYmI2NjQ5OGU0OWViN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTQxNiw2ICsxNDE2LDkgQEAKIAkJQTM4MkM1MzEyNjY3MTExRDAwNDJDRDk5IC8qIElu
QnlWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzMwNUZCMTIwQjBGNzg4MDBDRUI4MkIgLyogSW5CeVZhcmlhbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMzhEMjUwRTI1ODAwRDQ0MDA0
MkJGREQgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzOEQyNTBEMjU4MDBENDMwMDQyQkZERCAv
KiBKU0FycmF5QnVmZmVyUHJvdG90eXBlSW5saW5lcy5oICovOyB9OwogCQlBMzhENUJGQzI2NjZE
M0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTM4RDVCRkEyNjY2RDNEQTAwQTEwOUE2IC8qIEluQnlTdGF0dXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBM0M3
RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VEQjAyNkIwREIz
NjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsKKwkJQTNDN0VE
QjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CisJCUEzQzdFREJBMjZCMERCMzgwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3Jh
bER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJQTNFRTg1NDMyNjI1MTRCMDAwRkM5QjhE
IC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAvKiBJbnRsV29ya2Fyb3VuZC5j
cHAgKi87IH07CiAJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRkY5QkM1MjIzNDc0
NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyogSmF2YVNjcmlw
dENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCAqLzsg
fTsKQEAgLTQ0NzMsNiArNDQ3NiwxMiBAQAogCQlBM0JGODg0RTI0NDgwQkUwMDAxQjlGMzUgLyog
SW50bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBM0JGODg0RjI0NDgwQkUwMDAxQjlGMzUgLyogSW50bFJl
bGF0aXZlVGltZUZvcm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTNCRjg4NTAyNDQ4MEJFMTAwMUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bFJlbGF0aXZlVGltZUZvcm1hdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMDI2QjBEQjM2MDA0QzM0QzUg
LyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEzQzdFREIxMjZCMERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMjI2QjBEQjM3MDA0QzM0
QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAvKiBUZW1w
b3JhbER1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBvcmFs
RHVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjQyNkIwREIz
NzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjUyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUEzRkY5QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckZsYWdzLmg7IHBhdGggPSB5YXJyL1lhcnJG
bGFncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0ZGOUJDNjIyMzQ3NDY2MDBC
MUE5QUIgLyogWWFyckZsYWdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFlhcnJGbGFncy5jcHA7IHBhdGggPSB5YXJyL1lhcnJGbGFncy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE1MDNGQTEzMTg4RTBGQUYwMDExMEYxNCAvKiBKYXZhU2NyaXB0
Q2FsbEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEphdmFT
Y3JpcHRDYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzk1Niw2
ICs3OTY1LDEyIEBACiAJCQkJRTMxMTc5QTkyMjg4Mzg1RDAwNTE0QjJDIC8qIFN5bWJvbFRhYmxl
T3JTY29wZURlcHRoLmggKi8sCiAJCQkJQkRCNEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBs
YXRlT2JqZWN0RGVzY3JpcHRvci5jcHAgKi8sCiAJCQkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oICovLAorCQkJCUEzQzdFREIxMjZCMERCMzYw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNwcCAqLywKKwkJCQlBM0M3RURCMzI2QjBEQjM3
MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovLAorCQkJCUEzQzdFREIyMjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCUEzQzdF
REI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLywK
KwkJCQlBM0M3RURCNTI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5jcHAgKi8sCisJCQkJQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGUuaCAqLywKIAkJCQlGNkYxNTAxQjI2OTNEMzNFMDA0Qjk4RUYgLyogVGVtcG9y
YWxOb3cuY3BwICovLAogCQkJCUY2RjE1MDE4MjY5M0QzM0QwMDRCOThFRiAvKiBUZW1wb3JhbE5v
dy5oICovLAogCQkJCUY2RjE1MDE5MjY5M0QzM0UwMDRCOThFRiAvKiBUZW1wb3JhbE9iamVjdC5j
cHAgKi8sCkBAIC0xMDY1NSw3ICsxMDY3MCwxMSBAQAogCQkJCUE3ODRBMjY0MTFEMTY2MjIwMDU3
NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzc5OTc4MzFDREU5
RkEwMDA0RDRBMDkgLyogVGFnUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBF
Q0E2MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREJBMjZCMERCMzgwMDRDMzRDNSAvKiBUZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREI2MjZC
MERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGNkYxNTAyMTI2OTNENDUwMDA0Qjk4RUYgLyogVGVtcG9yYWxPYmplY3QubHV0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBM0ZBOTczODI2QkIzNTU2MDBGNzEwNjAgLyogVGVtcG9yYWxP
YmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIy
MTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ0QTdCNDIwQkY2
OEQ5MDAyMkIxNzEgLyogVGVybWluYXRlZENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQTJDMTdDMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IGE2NDcwMmRiNjAxY2MyMWFiYjRj
MjYyOTQ1N2RkMWE3NTljMzAyMGQuLjNjMmM2ZjAwOTY2N2M4M2FjMTk0N2E0NjM0OWM2N2FiOTJl
YzIyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTEwMTAsNiArMTAxMCw5IEBA
IHJ1bnRpbWUvU3ltYm9sT2JqZWN0LmNwcAogcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCiBy
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAogcnVudGltZS9UZW1wbGF0ZU9iamVjdERlc2NyaXB0b3Iu
Y3BwCitydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwCitydW50aW1lL1RlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3Rvci5jcHAKK3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAK
IHJ1bnRpbWUvVGVtcG9yYWxOb3cuY3BwCiBydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcAogcnVu
dGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRleCBkYzYwMTlmNDVmZDk4YjQzN2E1YmY2ZTI2
NTg0YTBhMzQ2MzJmYWRjLi45MjE3OGI3OWE0MjY3MGY0YTFkZDBiMzBlOGEzYjNiNTVmMmFjMTdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlm
aWVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmgKQEAgLTk5LDYgKzk5LDcgQEAKICAgICBtYWNybyhjb3VudGVycykgXAogICAgIG1hY3Jv
KGRhdGVTdHlsZSkgXAogICAgIG1hY3JvKGRheSkgXAorICAgIG1hY3JvKGRheXMpIFwKICAgICBt
YWNybyhkYXlQZXJpb2QpIFwKICAgICBtYWNybyhkZWZpbmVQcm9wZXJ0eSkgXAogICAgIG1hY3Jv
KGRlcmVmKSBcCkBAIC0xMzUsNiArMTM2LDcgQEAKICAgICBtYWNybyhoYXNoKSBcCiAgICAgbWFj
cm8oaGVhZGVyKSBcCiAgICAgbWFjcm8oaG91cikgXAorICAgIG1hY3JvKGhvdXJzKSBcCiAgICAg
bWFjcm8oaG91ckN5Y2xlKSBcCiAgICAgbWFjcm8oaG91cjEyKSBcCiAgICAgbWFjcm8oaWQpIFwK
QEAgLTE2MiwxMyArMTY0LDE4IEBACiAgICAgbWFjcm8obWF4aW11bUZyYWN0aW9uRGlnaXRzKSBc
CiAgICAgbWFjcm8obWF4aW11bVNpZ25pZmljYW50RGlnaXRzKSBcCiAgICAgbWFjcm8obWVzc2Fn
ZSkgXAorICAgIG1hY3JvKG1pY3Jvc2Vjb25kcykgXAorICAgIG1hY3JvKG1pbGxpc2Vjb25kcykg
XAogICAgIG1hY3JvKG1pbmltdW1GcmFjdGlvbkRpZ2l0cykgXAogICAgIG1hY3JvKG1pbmltdW1J
bnRlZ2VyRGlnaXRzKSBcCiAgICAgbWFjcm8obWluaW11bVNpZ25pZmljYW50RGlnaXRzKSBcCiAg
ICAgbWFjcm8obWludXRlKSBcCisgICAgbWFjcm8obWludXRlcykgXAogICAgIG1hY3JvKG1vbnRo
KSBcCisgICAgbWFjcm8obW9udGhzKSBcCiAgICAgbWFjcm8obXVsdGlsaW5lKSBcCiAgICAgbWFj
cm8obmFtZSkgXAorICAgIG1hY3JvKG5hbm9zZWNvbmRzKSBcCiAgICAgbWFjcm8obmV4dCkgXAog
ICAgIG1hY3JvKG5vdykgXAogICAgIG1hY3JvKG51bUlubGluZWRDYWxscykgXApAQCAtMTkxLDEz
ICsxOTgsMTYgQEAKICAgICBtYWNybyhyZWdpb24pIFwKICAgICBtYWNybyhyZXBsYWNlKSBcCiAg
ICAgbWFjcm8ocmVzb2x2ZSkgXAorICAgIG1hY3JvKHJvdW5kaW5nTW9kZSkgXAogICAgIG1hY3Jv
KHNjcmlwdCkgXAogICAgIG1hY3JvKHNlY29uZCkgXAorICAgIG1hY3JvKHNlY29uZHMpIFwKICAg
ICBtYWNybyhzZWdtZW50KSBcCiAgICAgbWFjcm8oc2Vuc2l0aXZpdHkpIFwKICAgICBtYWNybyhz
ZXQpIFwKICAgICBtYWNybyhzaXplKSBcCiAgICAgbWFjcm8oc2xpY2UpIFwKKyAgICBtYWNybyhz
bWFsbGVzdFVuaXQpIFwKICAgICBtYWNybyhzb3VyY2UpIFwKICAgICBtYWNybyhzb3VyY2VDb2Rl
KSBcCiAgICAgbWFjcm8oc291cmNlVVJMKSBcCkBAIC0yMjgsOCArMjM4LDEwIEBACiAgICAgbWFj
cm8odmFsdWUpIFwKICAgICBtYWNybyh2YWx1ZU9mKSBcCiAgICAgbWFjcm8od2Vla2RheSkgXAor
ICAgIG1hY3JvKHdlZWtzKSBcCiAgICAgbWFjcm8od3JpdGFibGUpIFwKLSAgICBtYWNybyh5ZWFy
KQorICAgIG1hY3JvKHllYXIpIFwKKyAgICBtYWNybyh5ZWFycykKIAogI2RlZmluZSBKU0NfQ09N
TU9OX0lERU5USUZJRVJTX0VBQ0hfUFJJVkFURV9GSUVMRChtYWNybykgXAogICAgIG1hY3JvKGNv
bnN0cnVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCmluZGV4IDE1ZjViMDY0ZWNiZmM2NThhOTkwZDJlYjU5NjM1YmYyYmRiZTg4ODIu
LjU0MThhN2JiMGY4MTFiNmMwNjNkZTc2MzRiYWY3ZmEyMjAyM2M5NDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTIwMSw2ICsy
MDEsOCBAQAogI2luY2x1ZGUgIlN5bWJvbENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiU3ltYm9s
T2JqZWN0LmgiCiAjaW5jbHVkZSAiU3ltYm9sUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiVGVtcG9y
YWxEdXJhdGlvbi5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKICNp
bmNsdWRlICJUZW1wb3JhbE9iamVjdC5oIgogI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiV2FzbUNhcGFiaWxpdGllcy5oIgpAQCAtMTIxMiw2ICsxMjE0LDEzIEBAIGNhcGl0
YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJl
RmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPkludGwsIGludGwsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogICAgIGlmIChPcHRpb25zOjp1c2VUZW1wb3JhbCgp
KSB7CisgICAgICAgIG1fZHVyYXRpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICAgICAg
W10gKGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKKyAgICAgICAgICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
aW5pdC5vd25lcik7CisgICAgICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSog
ZHVyYXRpb25Qcm90b3R5cGUgPSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGUoaW5p
dC52bSwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0s
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgICAg
ICAgICAgICAgIGluaXQuc2V0KFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZShpbml0
LnZtLCBnbG9iYWxPYmplY3QsIGR1cmF0aW9uUHJvdG90eXBlKSk7CisgICAgICAgICAgICB9KTsK
KwogICAgICAgICBUZW1wb3JhbE9iamVjdCogdGVtcG9yYWwgPSBUZW1wb3JhbE9iamVjdDo6Y3Jl
YXRlKHZtLCBUZW1wb3JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzKSk7CiAgICAg
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5UZW1w
b3JhbCwgdGVtcG9yYWwsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKICAgICB9CkBAIC0yMDkwLDYgKzIwOTksOSBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgdGhpc09iamVjdC0+bV9kYXRlVGltZUZvcm1hdFN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsK
ICAgICB0aGlzT2JqZWN0LT5tX251bWJlckZvcm1hdFN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsK
IAorICAgIGlmIChPcHRpb25zOjp1c2VUZW1wb3JhbCgpKQorICAgICAgICB0aGlzT2JqZWN0LT5t
X2R1cmF0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOworCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9udWxsR2V0dGVyRnVuY3Rpb24pOwogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fbnVsbFNldHRlckZ1bmN0aW9uKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX251bGxTZXR0ZXJTdHJpY3RGdW5jdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCBhMzVlZmNlN2M1MjYyZjQ5ZDk4
ZDVhYjQyMTNjODgxYjVjMjcwYWMwLi5iNDNiNjdhOTM4NDA2YjcwMTIyMmFlMzUzMzIwOGQ3MjE3
YTcyODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKQEAgLTMyNCw2ICszMjQsOCBAQCBwdWJsaWM6CiAgICAgTGF6eUNsYXNzU3RydWN0dXJl
IG1fZGF0ZVRpbWVGb3JtYXRTdHJ1Y3R1cmU7CiAgICAgTGF6eUNsYXNzU3RydWN0dXJlIG1fbnVt
YmVyRm9ybWF0U3RydWN0dXJlOwogCisgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmU+IG1fZHVyYXRpb25TdHJ1Y3R1cmU7CisKICAgICBXcml0ZUJhcnJpZXI8TnVsbEdl
dHRlckZ1bmN0aW9uPiBtX251bGxHZXR0ZXJGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8TnVs
bFNldHRlckZ1bmN0aW9uPiBtX251bGxTZXR0ZXJGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8
TnVsbFNldHRlckZ1bmN0aW9uPiBtX251bGxTZXR0ZXJTdHJpY3RGdW5jdGlvbjsKQEAgLTg3MCw2
ICs4NzIsOCBAQCBwdWJsaWM6CiAgICAgSlNPYmplY3QqIG51bWJlckZvcm1hdENvbnN0cnVjdG9y
KCkgeyByZXR1cm4gbV9udW1iZXJGb3JtYXRTdHJ1Y3R1cmUuY29uc3RydWN0b3IodGhpcyk7IH0K
ICAgICBKU09iamVjdCogbnVtYmVyRm9ybWF0UHJvdG90eXBlKCkgeyByZXR1cm4gbV9udW1iZXJG
b3JtYXRTdHJ1Y3R1cmUucHJvdG90eXBlKHRoaXMpOyB9CiAKKyAgICBTdHJ1Y3R1cmUqIGR1cmF0
aW9uU3RydWN0dXJlKCkgeyByZXR1cm4gbV9kdXJhdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0K
KwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChi
b29sKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHJlbW90ZURlYnVnZ2luZ0VuYWJsZWQo
KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVt
cG9yYWxEdXJhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bER1cmF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lY2NhOTM0OGQwZmNiNjQ0MzVjYmFhMWY1MDc2ZmQ1
OWVhMTY3ZmEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKQEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKKwor
I2luY2x1ZGUgIkludGxPYmplY3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIlBhcnNlSW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUo
Vk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBudW1iZXJPZlRl
bXBvcmFsVW5pdHMpOworICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VGVtcG9yYWxVbml0PihpbmRl
eCkpIHsKKyNkZWZpbmUgSlNDX1RFTVBPUkFMX0RVUkFUSU9OX1BST1BFUlRZX05BTUUobmFtZSwg
Y2FwaXRhbGl6ZWROYW1lKSBjYXNlIFRlbXBvcmFsVW5pdDo6Y2FwaXRhbGl6ZWROYW1lOiByZXR1
cm4gdm0ucHJvcGVydHlOYW1lcy0+bmFtZSMjczsgCisgICAgICAgIEpTQ19URU1QT1JBTF9VTklU
UyhKU0NfVEVNUE9SQUxfRFVSQVRJT05fUFJPUEVSVFlfTkFNRSkKKyN1bmRlZiBKU0NfVEVNUE9S
QUxfRFVSQVRJT05fUFJPUEVSVFlfTkFNRQorICAgIH0KK30KKworY29uc3QgQ2xhc3NJbmZvIFRl
bXBvcmFsRHVyYXRpb246OnNfaW5mbyA9IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoVGVtcG9yYWxEdXJhdGlvbikgfTsKKwor
VGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFN1YmR1cmF0aW9ucyYmIHN1YmR1cmF0aW9ucykKK3sKKyAgICBhdXRv
KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbER1cmF0aW9uPih2
bS5oZWFwKSkgVGVtcG9yYWxEdXJhdGlvbih2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKHN1YmR1cmF0
aW9ucykpOworICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBvYmpl
Y3Q7Cit9CisKK1N0cnVjdHVyZSogVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7
CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitU
ZW1wb3JhbER1cmF0aW9uOjpUZW1wb3JhbER1cmF0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFN1YmR1cmF0aW9ucyYmIHN1YmR1cmF0aW9ucykKKyAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKKyAgICAsIG1fc3ViZHVyYXRpb25zKFdURk1vdmUoc3ViZHVyYXRpb25zKSkKK3sKK30K
Kwordm9pZCBUZW1wb3JhbER1cmF0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7Cit9CisKKy8vIElzVmFsaWREdXJhdGlvbiAoIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlz
LCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMsIG5h
bm9zZWNvbmRzICkKK2Jvb2wgaXNWYWxpZER1cmF0aW9uKGNvbnN0IFRlbXBvcmFsRHVyYXRpb246
OlN1YmR1cmF0aW9ucyYgc3ViZHVyYXRpb25zKQoreworICAgIGludCBzaWduID0gMDsKKyAgICBm
b3IgKGRvdWJsZSB2YWx1ZSA6IHN1YmR1cmF0aW9ucykgeworICAgICAgICBpZiAoIXN0ZDo6aXNm
aW5pdGUodmFsdWUpIHx8ICh2YWx1ZSA8IDAgJiYgc2lnbiA+IDApIHx8ICh2YWx1ZSA+IDAgJiYg
c2lnbiA8IDApKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghc2ln
biAmJiB2YWx1ZSkKKyAgICAgICAgICAgIHNpZ24gPSB2YWx1ZSA+IDAgPyAxIDogLTE7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vICBDcmVhdGVUZW1wb3JhbER1cmF0aW9uICgg
eWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxs
aXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMgWyAsIG5ld1RhcmdldCBdICkKK1Rl
bXBvcmFsRHVyYXRpb24qIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3ViZHVyYXRpb25zJiYgc3ViZHVyYXRpb25zKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIWlzVmFsaWREdXJhdGlvbihzdWJkdXJhdGlvbnMp
KSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiY2Fubm90
IGNyZWF0ZSBEdXJhdGlvbiB3aXRoIGluY29uc2lzdGVudCBudW1lcmljIHZhbHVlcyJfcyk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIFRlbXBvcmFsRHVyYXRpb246
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgpLCBXVEZNb3ZlKHN1
YmR1cmF0aW9ucykpOworfQorCisvLyBEdXJhdGlvbkhhbmRsZUZyYWN0aW9ucyAoIGZIb3Vycywg
bWludXRlcywgZk1pbnV0ZXMsIHNlY29uZHMsIGZTZWNvbmRzLCBtaWxsaXNlY29uZHMsIGZNaWxs
aXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgZk1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIGZOYW5v
c2Vjb25kcyApCitzdGF0aWMgdm9pZCBoYW5kbGVGcmFjdGlvbihUZW1wb3JhbER1cmF0aW9uOjpT
dWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9ucywgaW50IGZhY3RvciwgU3RyaW5nVmlldyBmcmFjdGlv
blN0cmluZywgVGVtcG9yYWxVbml0IGZyYWN0aW9uVHlwZSkKK3sKKyAgICBBU1NFUlQoZnJhY3Rp
b25TdHJpbmcubGVuZ3RoKCkpOworICAgIEFTU0VSVChmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxV
bml0OjpIb3VyIHx8IGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSB8fCBmcmFj
dGlvblR5cGUgPT0gVGVtcG9yYWxVbml0OjpTZWNvbmQpOworCisgICAgaWYgKGZyYWN0aW9uVHlw
ZSA9PSBUZW1wb3JhbFVuaXQ6OlNlY29uZCkgeworICAgICAgICBhdXRvIHBhZGRlZCA9IG1ha2VT
dHJpbmcoZnJhY3Rpb25TdHJpbmcsICIwMDAwMDAwMCIpOworICAgICAgICBzdWJkdXJhdGlvbnNb
c3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCldID0gZmFjdG9y
ICogcGFyc2VJbnQocGFkZGVkLnN1YnN0cmluZygwLCAzKSwgMTApOworICAgICAgICBzdWJkdXJh
dGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCldID0g
ZmFjdG9yICogcGFyc2VJbnQocGFkZGVkLnN1YnN0cmluZygzLCAzKSwgMTApOworICAgICAgICBz
dWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25k
KV0gPSBmYWN0b3IgKiBwYXJzZUludChwYWRkZWQuc3Vic3RyaW5nKDYsIDMpLCAxMCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb3VibGUgZnJhY3Rpb24gPSBmYWN0b3IgKiBwYXJz
ZUludChmcmFjdGlvblN0cmluZywgMTApIC8gc3RkOjpwb3coMTAsIGZyYWN0aW9uU3RyaW5nLmxl
bmd0aCgpKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
ZnJhY3Rpb25UeXBlID09IFRlbXBvcmFsVW5pdDo6SG91cikgeworICAgICAgICBmcmFjdGlvbiAq
PSA2MC4wOworICAgICAgICBzdWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9y
YWxVbml0OjpNaW51dGUpXSA9IHN0ZDo6Zmxvb3IoZnJhY3Rpb24pOworICAgICAgICBmcmFjdGlv
biA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMS4wKTsKKyAgICAgICAgaWYgKCFmcmFjdGlvbikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmcmFjdGlvbiAqPSA2MC4wOworICAgIHN1
YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OlNlY29uZCldID0g
c3RkOjpmbG9vcihmcmFjdGlvbik7CisgICAgZnJhY3Rpb24gPSBzdGQ6OmZtb2QoZnJhY3Rpb24s
IDEuMCk7CisgICAgaWYgKCFmcmFjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhY3Rp
b24gKj0gMTAwMC4wOworICAgIHN1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1w
b3JhbFVuaXQ6Ok1pbGxpc2Vjb25kKV0gPSBzdGQ6OmZsb29yKGZyYWN0aW9uKTsKKyAgICBmcmFj
dGlvbiA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMS4wKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBmcmFjdGlvbiAqPSAxMDAwLjA7CisgICAgc3ViZHVyYXRpb25z
W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQpXSA9IHN0ZDo6
Zmxvb3IoZnJhY3Rpb24pOworICAgIGZyYWN0aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9uLCAxLjAp
OworICAgIGlmICghZnJhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHN1YmR1cmF0aW9u
c1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQpXSA9IHN0ZDo6
Zmxvb3IoZnJhY3Rpb24gKiAxMDAwLjApOworfQorCisvLyBQYXJzZVRlbXBvcmFsRHVyYXRpb25T
dHJpbmcgKCBpc29TdHJpbmcgKQorc3RkOjpvcHRpb25hbDxUZW1wb3JhbER1cmF0aW9uOjpTdWJk
dXJhdGlvbnM+IFRlbXBvcmFsRHVyYXRpb246OnBhcnNlKFN0cmluZ1ZpZXcgc3RyaW5nKQorewor
ICAgIC8vIElTTyA4NjAxIGR1cmF0aW9uIHN0cmluZ3MgYXJlIGxpa2UgIi1QMVkyTTNXNERUNUg2
TTcuMTIzNDU2Nzg5UyIuIE5vdGVzOgorICAgIC8vIC0gY2FzZSBpbnNlbnNpdGl2ZQorICAgIC8v
IC0gc2lnbjogKyAtIFUrMjIxMgorICAgIC8vIC0gc2VwYXJhdG9yOiAuICwKKyAgICAvLyAtIFQg
aXMgcHJlc2VudCBpZmYgdGhlcmUgaXMgYSB0aW1lIHBhcnQKKyAgICAvLyAtIHdob2xlIG51bWJl
ciBwYXJ0cyBjYW4gaGF2ZSBhbnkgbnVtYmVyIG9mIGRpZ2l0cyBidXQgZnJhY3Rpb25hbCBwYXJ0
cyBoYXZlIGF0IG1vc3QgOQorICAgIC8vIC0gaG91cnMgYW5kIG1pbnV0ZXMgY2FuIGhhdmUgZnJh
Y3Rpb25hbCBwYXJ0cyB0b28sIGJ1dCBvbmx5IGFzIHRoZSBMQVNUIHNlZ21lbnQgb2YgdGhlIHN0
cmluZworCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIGlmIChs
ZW5ndGggPCAzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgU3ViZHVyYXRp
b25zIHJlc3VsdCB7IH07CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworCisgICAgaW50IGZhY3Rv
ciA9IDE7CisgICAgaWYgKHN0cmluZ1tpbmRleF0gPT0gJysnKQorICAgICAgICBpbmRleCsrOwor
ICAgIGVsc2UgaWYgKHN0cmluZ1tpbmRleF0gPT0gJy0nIHx8IHN0cmluZ1tpbmRleF0gPT0gMHgy
MjEyKSB7CisgICAgICAgIGZhY3RvciA9IC0xOworICAgICAgICBpbmRleCsrOworICAgIH0KKwor
ICAgIGlmICh0b0FTQ0lJVXBwZXIoc3RyaW5nW2luZGV4KytdKSAhPSAnUCcpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGRhdGVQYXJ0SW5kZXggPSAw
OyBkYXRlUGFydEluZGV4IDwgNCAmJiBpbmRleCA8IGxlbmd0aCAmJiBpc0FTQ0lJRGlnaXQoc3Ry
aW5nW2luZGV4XSk7IGluZGV4KyspIHsKKyAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBpbmRleDsK
KyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKCsraW5kZXggPT0gbGVuZ3RoKQorICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlE
aWdpdChzdHJpbmdbaW5kZXhdKSk7CisKKyAgICAgICAgZG91YmxlIGludGVnZXIgPSBmYWN0b3Ig
KiBwYXJzZUludChzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCAtIHN0YXJ0KSwgMTApOwor
CisgICAgICAgIGlmICh0b0FTQ0lJVXBwZXIoc3RyaW5nW2luZGV4XSkgPT0gJ1knICYmICFkYXRl
UGFydEluZGV4KSB7CisgICAgICAgICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVt
cG9yYWxVbml0OjpZZWFyKV0gPSBpbnRlZ2VyOworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9
IDE7CisgICAgICAgIH0gZWxzZSBpZiAodG9BU0NJSVVwcGVyKHN0cmluZ1tpbmRleF0pID09ICdN
JyAmJiBkYXRlUGFydEluZGV4IDwgMikgeworICAgICAgICAgICAgcmVzdWx0W3N0YXRpY19jYXN0
PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TW9udGgpXSA9IGludGVnZXI7CisgICAgICAgICAgICBk
YXRlUGFydEluZGV4ID0gMjsKKyAgICAgICAgfSBlbHNlIGlmICh0b0FTQ0lJVXBwZXIoc3RyaW5n
W2luZGV4XSkgPT0gJ1cnICYmIGRhdGVQYXJ0SW5kZXggPCAzKSB7CisgICAgICAgICAgICByZXN1
bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpXZWVrKV0gPSBpbnRlZ2VyOwor
ICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDM7CisgICAgICAgIH0gZWxzZSBpZiAodG9BU0NJ
SVVwcGVyKHN0cmluZ1tpbmRleF0pID09ICdEJykgeworICAgICAgICAgICAgcmVzdWx0W3N0YXRp
Y19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6RGF5KV0gPSBpbnRlZ2VyOworICAgICAgICAg
ICAgZGF0ZVBhcnRJbmRleCA9IDQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoaW5kZXggPT0gbGVuZ3RoKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIGlmICh0b0FTQ0lJVXBwZXIoc3RyaW5nW2luZGV4
KytdKSAhPSAnVCcgfHwgaW5kZXggPT0gbGVuZ3RoKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgZm9yICh1bnNpZ25lZCB0aW1lUGFydEluZGV4ID0gMDsgdGltZVBhcnRJbmRl
eCA8IDMgJiYgaW5kZXggPCBsZW5ndGggJiYgaXNBU0NJSURpZ2l0KHN0cmluZ1tpbmRleF0pOyBp
bmRleCsrKSB7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gaW5kZXg7CisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIGlmICgrK2luZGV4ID09IGxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9IHdoaWxlIChpc0FTQ0lJRGlnaXQoc3RyaW5nW2lu
ZGV4XSkpOworCisgICAgICAgIGRvdWJsZSBpbnRlZ2VyID0gZmFjdG9yICogcGFyc2VJbnQoc3Ry
aW5nLnN1YnN0cmluZyhzdGFydCwgaW5kZXggLSBzdGFydCksIDEwKTsKKworICAgICAgICBTdHJp
bmdWaWV3IGZyYWN0aW9uYWxQYXJ0OworICAgICAgICBpZiAoc3RyaW5nW2luZGV4XSA9PSAnLicg
fHwgc3RyaW5nW2luZGV4XSA9PSAnLCcpIHsKKyAgICAgICAgICAgIHN0YXJ0ID0gKytpbmRleDsK
KyAgICAgICAgICAgIHdoaWxlIChpc0FTQ0lJRGlnaXQoc3RyaW5nW2luZGV4XSkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoKytpbmRleCA9PSBsZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5kZXgg
PT0gc3RhcnQgfHwgaW5kZXggLSBzdGFydCA+IDkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgICAgICAgICAgZnJhY3Rpb25hbFBhcnQgPSBzdHJpbmcuc3Vic3Ry
aW5nKHN0YXJ0LCBpbmRleCAtIHN0YXJ0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b0FT
Q0lJVXBwZXIoc3RyaW5nW2luZGV4XSkgPT0gJ0gnICYmICF0aW1lUGFydEluZGV4KSB7CisgICAg
ICAgICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpIb3VyKV0g
PSBpbnRlZ2VyOworICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxQYXJ0KSB7CisgICAgICAgICAg
ICAgICAgaGFuZGxlRnJhY3Rpb24ocmVzdWx0LCBmYWN0b3IsIGZyYWN0aW9uYWxQYXJ0LCBUZW1w
b3JhbFVuaXQ6OkhvdXIpOworICAgICAgICAgICAgICAgIHRpbWVQYXJ0SW5kZXggPSAzOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9IDE7CisgICAg
ICAgIH0gZWxzZSBpZiAodG9BU0NJSVVwcGVyKHN0cmluZ1tpbmRleF0pID09ICdNJyAmJiB0aW1l
UGFydEluZGV4IDwgMikgeworICAgICAgICAgICAgcmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+
KFRlbXBvcmFsVW5pdDo6TWludXRlKV0gPSBpbnRlZ2VyOworICAgICAgICAgICAgaWYgKGZyYWN0
aW9uYWxQYXJ0KSB7CisgICAgICAgICAgICAgICAgaGFuZGxlRnJhY3Rpb24ocmVzdWx0LCBmYWN0
b3IsIGZyYWN0aW9uYWxQYXJ0LCBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSk7CisgICAgICAgICAgICAg
ICAgdGltZVBhcnRJbmRleCA9IDM7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICB0aW1lUGFydEluZGV4ID0gMjsKKyAgICAgICAgfSBlbHNlIGlmICh0b0FTQ0lJVXBwZXIoc3Ry
aW5nW2luZGV4XSkgPT0gJ1MnKSB7CisgICAgICAgICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oVGVtcG9yYWxVbml0OjpTZWNvbmQpXSA9IGludGVnZXI7CisgICAgICAgICAgICBpZiAo
ZnJhY3Rpb25hbFBhcnQpCisgICAgICAgICAgICAgICAgaGFuZGxlRnJhY3Rpb24ocmVzdWx0LCBm
YWN0b3IsIGZyYWN0aW9uYWxQYXJ0LCBUZW1wb3JhbFVuaXQ6OlNlY29uZCk7CisgICAgICAgICAg
ICB0aW1lUGFydEluZGV4ID0gMzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChpbmRleCAhPSBsZW5ndGgpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBUb1Rl
bXBvcmFsRHVyYXRpb25SZWNvcmQgKCB0ZW1wb3JhbER1cmF0aW9uTGlrZSApCitUZW1wb3JhbER1
cmF0aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6dG9TdWJkdXJhdGlvbnMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGR1cmF0aW9uTGlrZSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgQVNTRVJUKCFkdXJhdGlvbkxpa2UtPmluaGVyaXRzPFRl
bXBvcmFsRHVyYXRpb24+KHZtKSk7CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0OworICAgIGJv
b2wgaGFzUmVsZXZhbnRQcm9wZXJ0eSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGR1cmF0aW9uTGlrZS0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKHZtLCBpKSk7CisK
KyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdFtp
XSA9IDA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGhhc1Jl
bGV2YW50UHJvcGVydHkgPSB0cnVlOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9O
dW1iZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICBpZiAoIWlzSW50ZWdlcihudW1iZXIpKSB7CisgICAgICAgICAgICB0
aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uIHBy
b3BlcnRpZXMgbXVzdCBiZSBpbnRlZ2VycyJfcyk7CisgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0W2ldID0gbnVtYmVyOworICAgIH0KKworICAgIGlm
ICghaGFzUmVsZXZhbnRQcm9wZXJ0eSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAib2JqZWN0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgVGVtcG9yYWwu
RHVyYXRpb24gcHJvcGVydHkiX3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKKy8vIFRvVGVtcG9yYWxEdXJhdGlvbiAoIGl0ZW0gKQorVGVt
cG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6dG9EdXJhdGlvbihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZW1WYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgaWYgKGl0ZW1WYWx1ZS5pbmhlcml0czxUZW1wb3JhbER1cmF0aW9uPih2bSkpCisg
ICAgICAgIHJldHVybiBqc0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KGl0ZW1WYWx1ZSk7CisKKyAg
ICBpZiAoaXRlbVZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxpZChnbG9iYWxPYmplY3QsIHRvU3Vi
ZHVyYXRpb25zKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoaXRlbVZhbHVlKSkpKTsKKworICAgIFN0
cmluZyBzdHJpbmcgPSBpdGVtVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKworICAgIGF1dG8gcGFyc2VkU3Vi
ZHVyYXRpb25zID0gcGFyc2Uoc3RyaW5nKTsKKyAgICBpZiAoIXBhcnNlZFN1YmR1cmF0aW9ucykg
eworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImNvdWxkIG5v
dCBwYXJzZSBEdXJhdGlvbiBzdHJpbmciX3MpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIFRlbXBvcmFsRHVyYXRpb246OmNy
ZWF0ZUlmVmFsaWQoZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHBhcnNlZFN1YmR1cmF0aW9ucy52YWx1
ZSgpKSkpOworfQorCitUZW1wb3JhbER1cmF0aW9uKiBUZW1wb3JhbER1cmF0aW9uOjpmcm9tKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgaXRlbVZhbHVlKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmIChpdGVtVmFsdWUuaW5oZXJpdHM8
VGVtcG9yYWxEdXJhdGlvbj4odm0pKSB7CisgICAgICAgIFN1YmR1cmF0aW9ucyBjbG9uZWQgPSBq
c0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KGl0ZW1WYWx1ZSktPm1fc3ViZHVyYXRpb25zOworICAg
ICAgICByZXR1cm4gVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmR1
cmF0aW9uU3RydWN0dXJlKCksIFdURk1vdmUoY2xvbmVkKSk7CisgICAgfQorCisgICAgcmV0dXJu
IHRvRHVyYXRpb24oZ2xvYmFsT2JqZWN0LCBpdGVtVmFsdWUpOworfQorCitpbnQgVGVtcG9yYWxE
dXJhdGlvbjo6c2lnbigpIGNvbnN0Cit7CisgICAgZm9yIChkb3VibGUgdmFsdWUgOiBtX3N1YmR1
cmF0aW9ucykgeworICAgICAgICBpZiAodmFsdWUgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0x
OworCisgICAgICAgIGlmICh2YWx1ZSA+IDApCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zIFRl
bXBvcmFsRHVyYXRpb246OndpdGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqIGR1cmF0aW9uTGlrZSkgY29uc3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3Vi
ZHVyYXRpb25zIHJlc3VsdDsKKyAgICBib29sIGhhc1JlbGV2YW50UHJvcGVydHkgPSBmYWxzZTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsgaSsrKSB7
CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkdXJhdGlvbkxpa2UtPmdldChnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSh2bSwgaSkpOworCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgp
KSB7CisgICAgICAgICAgICByZXN1bHRbaV0gPSBtX3N1YmR1cmF0aW9uc1tpXTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaGFzUmVsZXZhbnRQcm9wZXJ0eSA9
IHRydWU7CisgICAgICAgIHJlc3VsdFtpXSA9IHZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgaWYg
KCFpc0ludGVnZXIocmVzdWx0W2ldKSkgeworICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0aWVzIG11c3QgYmUg
aW50ZWdlcnMiX3MpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICghaGFzUmVsZXZhbnRQcm9wZXJ0eSkgeworICAgICAgICB0aHJvd1R5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAib2JqZWN0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUg
VGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydHkiX3MpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0
aW9ucyBUZW1wb3JhbER1cmF0aW9uOjpuZWdhdGVkKCkgY29uc3QKK3sKKyAgICBTdWJkdXJhdGlv
bnMgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW1wb3JhbFVu
aXRzOyBpKyspCisgICAgICAgIHJlc3VsdFtpXSA9IC1tX3N1YmR1cmF0aW9uc1tpXTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9y
YWxEdXJhdGlvbjo6YWJzKCkgY29uc3QKK3sKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0OworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBpKyspCisgICAg
ICAgIHJlc3VsdFtpXSA9IHN0ZDo6YWJzKG1fc3ViZHVyYXRpb25zW2ldKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCisvLyBGSVhNRTogSW1wbGVtZW50IHJlbGF0aXZlVG8gcGFyYW1ldGVyIGFm
dGVyIGltcGxlbWVudGluZyBEYXRlVGltZSBjbGFzc2VzLgorLy8gUm91bmREdXJhdGlvbiAoIHll
YXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlz
ZWNvbmRzLCBtaWNyb3NlY29uZHMsIG5hbm9zZWNvbmRzLCBpbmNyZW1lbnQsIHVuaXQsIHJvdW5k
aW5nTW9kZSBbICwgcmVsYXRpdmVUbyBdICkKK3N0ZDo6cGFpcjxUZW1wb3JhbER1cmF0aW9uOjpT
dWJkdXJhdGlvbnMsIGRvdWJsZT4gVGVtcG9yYWxEdXJhdGlvbjo6cm91bmQoUHJlY2lzaW9uRGF0
YSBkYXRhLCBSb3VuZGluZ01vZGUgbW9kZSkgY29uc3QKK3sKKyAgICAvLyB0ZW1wb3JhcnkhCisg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGRhdGEudW5pdCkgPj0gc3RhdGljX2Nhc3Q8
dWludDhfdD4oVGVtcG9yYWxVbml0OjpTZWNvbmQpKTsKKworICAgIFN1YmR1cmF0aW9ucyByZXN1
bHQgPSBtX3N1YmR1cmF0aW9uczsKKyAgICBkb3VibGUgcmVtYWluZGVyID0gMDsKKworICAgIHN3
aXRjaCAoZGF0YS51bml0KSB7CisgICAgY2FzZSBUZW1wb3JhbFVuaXQ6OlNlY29uZDogeworICAg
ICAgICBkb3VibGUgZnJhY3Rpb25hbFNlY29uZHMgPSBzZWNvbmRzKCkgKyBtaWxsaXNlY29uZHMo
KSAqIDFlLTMgKyBtaWNyb3NlY29uZHMoKSAqIDFlLTYgKyBuYW5vc2Vjb25kcygpICogMWUtOTsK
KyAgICAgICAgZG91YmxlIG5ld1NlY29uZHMgPSByb3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0
aW9uYWxTZWNvbmRzLCBkYXRhLmluY3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9
IGZyYWN0aW9uYWxTZWNvbmRzIC0gbmV3U2Vjb25kczsKKyAgICAgICAgcmVzdWx0W3N0YXRpY19j
YXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6U2Vjb25kKV0gPSBuZXdTZWNvbmRzOworICAgICAg
ICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCld
ID0gMDsKKyAgICAgICAgcmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6
TWljcm9zZWNvbmQpXSA9IDA7CisgICAgICAgIHJlc3VsdFtzdGF0aWNfY2FzdDx1aW50OF90PihU
ZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQpXSA9IDA7CisgICAgfSBicmVhazsKKyAgICBjYXNlIFRl
bXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQ6IHsKKyAgICAgICAgZG91YmxlIGZyYWN0aW9uYWxNaWxs
aXNlY29uZHMgPSBtaWxsaXNlY29uZHMoKSArIG1pY3Jvc2Vjb25kcygpICogMWUtMyArIG5hbm9z
ZWNvbmRzKCkgKiAxZS02OworICAgICAgICBkb3VibGUgbmV3TWlsbGlzZWNvbmRzID0gcm91bmRO
dW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsTWlsbGlzZWNvbmRzLCBkYXRhLmluY3JlbWVudCwg
bW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgLSBuZXdN
aWxsaXNlY29uZHM7CisgICAgICAgIHJlc3VsdFtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3Jh
bFVuaXQ6Ok1pbGxpc2Vjb25kKV0gPSBuZXdNaWxsaXNlY29uZHM7CisgICAgICAgIHJlc3VsdFtz
dGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kKV0gPSAwOworICAg
ICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25k
KV0gPSAwOworICAgIH0gYnJlYWs7CisgICAgY2FzZSBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25k
OiB7CisgICAgICAgIGRvdWJsZSBmcmFjdGlvbmFsTWljcm9zZWNvbmRzID0gbWljcm9zZWNvbmRz
KCkgKyBuYW5vc2Vjb25kcygpICogMWUtMzsKKyAgICAgICAgZG91YmxlIG5ld01pY3Jvc2Vjb25k
cyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbE1pY3Jvc2Vjb25kcywgZGF0YS5p
bmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsTWljcm9zZWNv
bmRzIC0gbmV3TWljcm9zZWNvbmRzOworICAgICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhf
dD4oVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCldID0gbmV3TWljcm9zZWNvbmRzOworICAgICAg
ICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kKV0g
PSAwOworICAgIH0gYnJlYWs7CisgICAgY2FzZSBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQ6IHsK
KyAgICAgICAgZG91YmxlIG5ld05hbm9zZWNvbmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChu
YW5vc2Vjb25kcygpLCBkYXRhLmluY3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9
IG5hbm9zZWNvbmRzKCkgLSBuZXdOYW5vc2Vjb25kczsKKyAgICAgICAgcmVzdWx0W3N0YXRpY19j
YXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZCldID0gbmV3TmFub3NlY29uZHM7
CisgICAgfSBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIocmVzdWx0LCByZW1haW5kZXIpOworfQorCitTdHJpbmcgVGVtcG9yYWxEdXJhdGlvbjo6
dG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zVmFs
dWUpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBvcHRpb25z
ID0gaW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBpZiAoIW9wdGlvbnMpCisg
ICAgICAgIHJldHVybiB0b1N0cmluZygpOworCisgICAgUHJlY2lzaW9uRGF0YSBkYXRhID0gc2Vj
b25kc1N0cmluZ1ByZWNpc2lvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBhdXRvIHJvdW5kaW5nTW9kZSA9IGludGxP
cHRpb248Um91bmRpbmdNb2RlPihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFt
ZXMtPnJvdW5kaW5nTW9kZSwKKyAgICAgICAgeyB7ICJjZWlsIl9zLCBSb3VuZGluZ01vZGU6OkNl
aWwgfSwgeyAiZmxvb3IiX3MsIFJvdW5kaW5nTW9kZTo6Rmxvb3IgfSwgeyAidHJ1bmMiX3MsIFJv
dW5kaW5nTW9kZTo6VHJ1bmMgfSwgeyAiaGFsZkV4cGFuZCJfcywgUm91bmRpbmdNb2RlOjpIYWxm
RXhwYW5kIH0gfSwKKyAgICAgICAgInJvdW5kaW5nTW9kZSBtdXN0IGJlIGVpdGhlciBcImNlaWxc
IiwgXCJmbG9vclwiLCBcInRydW5jXCIsIG9yIFwiaGFsZkV4cGFuZFwiIl9zLCBSb3VuZGluZ01v
ZGU6OlRydW5jKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
Ly8gTm8gbmVlZCB0byBtYWtlIGEgbmV3IG9iamVjdCBpZiB3ZSB3ZXJlIGdpdmVuIGV4cGxpY2l0
IGRlZmF1bHRzLgorICAgIGlmICghZGF0YS5wcmVjaXNpb24gJiYgcm91bmRpbmdNb2RlID09IFJv
dW5kaW5nTW9kZTo6VHJ1bmMpCisgICAgICAgIHJldHVybiB0b1N0cmluZygpOworCisgICAgYXV0
byByb3VuZGVkID0gVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmR1
cmF0aW9uU3RydWN0dXJlKCksIHRoaXMtPnJvdW5kKGRhdGEsIHJvdW5kaW5nTW9kZSkuZmlyc3Qp
OworICAgIHJldHVybiByb3VuZGVkLT50b1N0cmluZyhkYXRhLnByZWNpc2lvbik7Cit9CisKKy8v
IFRlbXBvcmFsRHVyYXRpb25Ub1N0cmluZyAoIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBo
b3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMsIG5hbm9z
ZWNvbmRzLCBwcmVjaXNpb24gKQorU3RyaW5nIFRlbXBvcmFsRHVyYXRpb246OnRvU3RyaW5nKHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHByZWNpc2lvbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIXBy
ZWNpc2lvbiB8fCBwcmVjaXNpb24udmFsdWUoKSA8IDEwKTsKKworICAgIGF1dG8gYmFsYW5jZWRN
aWNyb3NlY29uZHMgPSBtaWNyb3NlY29uZHMoKSArIHN0ZDo6dHJ1bmMobmFub3NlY29uZHMoKSAv
IDEwMDAuMCk7CisgICAgYXV0byBiYWxhbmNlZE5hbm9zZWNvbmRzID0gc3RkOjpmbW9kKG5hbm9z
ZWNvbmRzKCksIDEwMDAuMCk7CisgICAgYXV0byBiYWxhbmNlZE1pbGxpc2Vjb25kcyA9IG1pbGxp
c2Vjb25kcygpICsgc3RkOjp0cnVuYyhiYWxhbmNlZE1pY3Jvc2Vjb25kcyAvIDEwMDAuMCk7Cisg
ICAgYmFsYW5jZWRNaWNyb3NlY29uZHMgPSBzdGQ6OmZtb2QoYmFsYW5jZWRNaWNyb3NlY29uZHMs
IDEwMDAuMCk7CisgICAgYXV0byBiYWxhbmNlZFNlY29uZHMgPSBzZWNvbmRzKCkgKyBzdGQ6OnRy
dW5jKGJhbGFuY2VkTWlsbGlzZWNvbmRzIC8gMTAwMC4wKTsKKyAgICBiYWxhbmNlZE1pbGxpc2Vj
b25kcyA9IHN0ZDo6Zm1vZChiYWxhbmNlZE1pbGxpc2Vjb25kcywgMTAwMC4wKTsKKworICAgIC8v
IHRlbXBvcmFyeSBoYWNrISBwZW5kaW5nIHNwZWMgZGlzY3Vzc2lvbgorICAgIGF1dG8gZm9ybWF0
SW50ZWdlciA9IFtdKGRvdWJsZSB2YWx1ZSkgLT4gZG91YmxlIHsKKyAgICAgICAgZG91YmxlIGFi
c1ZhbHVlID0gc3RkOjphYnModmFsdWUpOworICAgICAgICByZXR1cm4gVU5MSUtFTFkoYWJzVmFs
dWUgPiBtYXhTYWZlSW50ZWdlcigpKSA/IG1heFNhZmVJbnRlZ2VyKCkgOiBhYnNWYWx1ZTsKKyAg
ICB9OworCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgYXV0byBzaWduID0gdGhp
cy0+c2lnbigpOworICAgIGlmIChzaWduIDwgMCkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJy0n
KTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCdQJyk7CisgICAgaWYgKHllYXJzKCkpCisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoeWVhcnMoKSksICdZJyk7CisgICAgaWYgKG1v
bnRocygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKG1vbnRocygpKSwg
J00nKTsKKyAgICBpZiAod2Vla3MoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50
ZWdlcih3ZWVrcygpKSwgJ1cnKTsKKyAgICBpZiAoZGF5cygpKQorICAgICAgICBidWlsZGVyLmFw
cGVuZChmb3JtYXRJbnRlZ2VyKGRheXMoKSksICdEJyk7CisKKyAgICAvLyBUaGUgemVybyB2YWx1
ZSBpcyBkaXNwbGF5ZWQgaW4gc2Vjb25kcy4KKyAgICBhdXRvIHVzZXNTZWNvbmRzID0gYmFsYW5j
ZWRTZWNvbmRzIHx8IGJhbGFuY2VkTWlsbGlzZWNvbmRzIHx8IGJhbGFuY2VkTWljcm9zZWNvbmRz
IHx8IGJhbGFuY2VkTmFub3NlY29uZHMgfHwgIXNpZ247CisgICAgaWYgKCFob3VycygpICYmICFt
aW51dGVzKCkgJiYgIXVzZXNTZWNvbmRzKQorICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOworCisgICAgYnVpbGRlci5hcHBlbmQoJ1QnKTsKKyAgICBpZiAoaG91cnMoKSkKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihob3VycygpKSwgJ0gnKTsKKyAgICBpZiAo
bWludXRlcygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKG1pbnV0ZXMo
KSksICdNJyk7CisgICAgaWYgKHVzZXNTZWNvbmRzKSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGZvcm1hdEludGVnZXIoYmFsYW5jZWRTZWNvbmRzKSk7CisKKyAgICAgICAgYXV0byBmcmFjdGlv
biA9IHN0ZDo6YWJzKGJhbGFuY2VkTWlsbGlzZWNvbmRzKSAqIDFlNiArIHN0ZDo6YWJzKGJhbGFu
Y2VkTWljcm9zZWNvbmRzKSAqIDFlMyArIHN0ZDo6YWJzKGJhbGFuY2VkTmFub3NlY29uZHMpOwor
ICAgICAgICBpZiAoKCFwcmVjaXNpb24gJiYgZnJhY3Rpb24pIHx8IChwcmVjaXNpb24gJiYgcHJl
Y2lzaW9uLnZhbHVlKCkpKSB7CisgICAgICAgICAgICBhdXRvIHBhZGRlZCA9IG1ha2VTdHJpbmco
Jy4nLCBwYWQoJzAnLCA5LCBmcmFjdGlvbikpOworICAgICAgICAgICAgaWYgKHByZWNpc2lvbikK
KyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChwYWRkZWQubGVmdChwYWRkZWQubGVuZ3Ro
KCkgLSAoOSAtIHByZWNpc2lvbi52YWx1ZSgpKSkpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgYXV0byBsZW5ndGhXaXRob3V0VHJhaWxpbmdaZXJvZXMgPSBwYWRkZWQubGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKHBhZGRlZFtsZW5ndGhXaXRob3V0VHJhaWxp
bmdaZXJvZXMgLSAxXSA9PSAnMCcpCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aFdpdGhvdXRU
cmFpbGluZ1plcm9lcy0tOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHBhZGRlZC5s
ZWZ0KGxlbmd0aFdpdGhvdXRUcmFpbGluZ1plcm9lcykpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1MnKTsKKyAgICB9CisKKyAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
OWY4NTZjNGJkM2YzYWYxNzhhNTY3YjljYzMzZmVhYzQ4NjYyNWI4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oCkBAIC0w
LDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJU
ZW1wb3JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVGVtcG9yYWxEdXJh
dGlvbiBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLnRlbXBvcmFsRHVyYXRpb25T
cGFjZTxtb2RlPigpOworICAgIH0KKworICAgIHVzaW5nIFN1YmR1cmF0aW9ucyA9IHN0ZDo6YXJy
YXk8ZG91YmxlLCBudW1iZXJPZlRlbXBvcmFsVW5pdHM+OworCisgICAgc3RhdGljIFRlbXBvcmFs
RHVyYXRpb24qIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFN1YmR1cmF0aW9ucyYmKTsKKyAgICBz
dGF0aWMgVGVtcG9yYWxEdXJhdGlvbiogY3JlYXRlSWZWYWxpZChKU0dsb2JhbE9iamVjdCosIFN1
YmR1cmF0aW9ucyYmKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAg
c3RhdGljIFRlbXBvcmFsRHVyYXRpb24qIHRvRHVyYXRpb24oSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKTsKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvbiogZnJvbShKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUpOworCisjZGVmaW5lIEpTQ19ERUZJTkVfVEVNUE9SQUxfRFVSQVRJT05fQUNDRVNT
T1IobmFtZSwgY2FwaXRhbGl6ZWROYW1lKSBcCisgICAgZG91YmxlIG5hbWUjI3MoKSBjb25zdCB7
IHJldHVybiBtX3N1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6
OmNhcGl0YWxpemVkTmFtZSldOyB9CisgICAgSlNDX1RFTVBPUkFMX1VOSVRTKEpTQ19ERUZJTkVf
VEVNUE9SQUxfRFVSQVRJT05fQUNDRVNTT1IpOworI3VuZGVmIEpTQ19ERUZJTkVfVEVNUE9SQUxf
RFVSQVRJT05fQUNDRVNTT1IKKworICAgIGludCBzaWduKCkgY29uc3Q7CisKKyAgICBTdWJkdXJh
dGlvbnMgd2l0aChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBkdXJhdGlvbkxpa2UpIGNvbnN0
OworICAgIFN1YmR1cmF0aW9ucyBuZWdhdGVkKCkgY29uc3Q7CisgICAgU3ViZHVyYXRpb25zIGFi
cygpIGNvbnN0OworCisgICAgc3RkOjpwYWlyPFN1YmR1cmF0aW9ucywgZG91YmxlPiByb3VuZChQ
cmVjaXNpb25EYXRhLCBSb3VuZGluZ01vZGUpIGNvbnN0OworCisgICAgU3RyaW5nIHRvU3RyaW5n
KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBvcHRpb25zKSBjb25zdDsKKyAgICBTdHJpbmcgdG9T
dHJpbmcoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcHJlY2lzaW9uID0gc3RkOjpudWxsb3B0KSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBUZW1wb3JhbER1cmF0aW9uKFZNJiwgU3RydWN0dXJlKiwg
U3ViZHVyYXRpb25zJiYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFN1YmR1cmF0aW9ucz4gcGFyc2UoU3RyaW5nVmlldyk7CisgICAg
c3RhdGljIFN1YmR1cmF0aW9ucyB0b1N1YmR1cmF0aW9ucyhKU0dsb2JhbE9iamVjdCosIEpTT2Jq
ZWN0Kik7CisKKyAgICBTdWJkdXJhdGlvbnMgbV9zdWJkdXJhdGlvbnM7Cit9OworCitib29sIGlz
VmFsaWREdXJhdGlvbihjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMmKTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ZGUyMDA5MThmMWJkNWI4YWVlYmUzMWRmZWNjOGQxNTE4M2E2YmZmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVj
dG9yLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgiCisKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgorI2luY2x1
ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NU
QVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShUZW1wb3JhbER1cmF0aW9uQ29u
c3RydWN0b3IpOworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3JGdW5jRnJvbSk7CisKK30KKworI2luY2x1ZGUgIlRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3Rvci5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNz
SW5mbyBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwg
JkJhc2U6OnNfaW5mbywgJnRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvclRhYmxlLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvcikgfTsKKwor
LyogU291cmNlIGZvciBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IubHV0LmgKK0BiZWdpbiB0
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JUYWJsZQorICBmcm9tICAgICAgICAgICAgIFRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1bmNGcm9tICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uIDEKK0BlbmQKKyovCisKK1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvciogVGVtcG9yYWxE
dXJhdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSogZHVyYXRpb25Qcm90b3R5cGUpCit7CisgICAgYXV0
byogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbER1cmF0
aW9uQ29uc3RydWN0b3I+KHZtLmhlYXApKSBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iodm0s
IHN0cnVjdHVyZSk7CisgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBkdXJhdGlv
blByb3RvdHlwZSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQorCitTdHJ1Y3R1cmUqIFRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
SW50ZXJuYWxGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworc3Rh
dGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY2FsbFRlbXBvcmFsRHVyYXRpb24pOworc3Rh
dGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0VGVtcG9yYWxEdXJhdGlvbik7
CisKK1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVj
dG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUsIGNhbGxUZW1wb3JhbER1cmF0aW9uLCBjb25zdHJ1Y3RUZW1wb3JhbER1cmF0aW9uKQorewor
fQorCit2b2lkIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBkdXJhdGlvblByb3RvdHlwZSkKK3sKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMCwgIkR1cmF0aW9uIl9zLCBQcm9wZXJ0eUFkZGl0
aW9uTW9kZTo6V2l0aG91dFN0cnVjdHVyZVRyYW5zaXRpb24pOworICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIGR1cmF0aW9uUHJv
dG90eXBlLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgZHVyYXRpb25Q
cm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5jb25zdHJ1Y3RvciwgdGhpcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0
VGVtcG9yYWxEdXJhdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIG5l
d1RhcmdldCA9IGFzT2JqZWN0KGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkpOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gSlNDX0dFVF9ERVJJVkVEX1NUUlVDVFVSRSh2bSwgZHVyYXRpb25TdHJ1
Y3R1cmUsIG5ld1RhcmdldCwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRp
b25zIHN1YmR1cmF0aW9ucyB7IH07CisgICAgYXV0byBjb3VudCA9IHN0ZDo6bWluPHNpemVfdD4o
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIG51bWJlck9mVGVtcG9yYWxVbml0cyk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHN1YmR1cmF0aW9u
c1tpXSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoaSkudG9JbnRlZ2VyT3JJbmZpbml0eShnbG9iYWxP
YmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
ICAgIGlmICghc3RkOjppc2Zpbml0ZShzdWJkdXJhdGlvbnNbaV0pKQorICAgICAgICAgICAgcmV0
dXJuIHRocm93Vk1SYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJh
dGlvbiBwcm9wZXJ0aWVzIG11c3QgYmUgZmluaXRlIl9zKTsKKyAgICB9CisKKyAgICBpZiAoIWlz
VmFsaWREdXJhdGlvbihzdWJkdXJhdGlvbnMpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVJhbmdl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImNhbm5vdCBjcmVhdGUgRHVyYXRpb24gd2l0aCBp
bmNvbnNpc3RlbnQgbnVtZXJpYyB2YWx1ZXMiX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShzdWJk
dXJhdGlvbnMpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsVGVtcG9yYWxE
dXJhdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQorewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29u
c3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIkR1cmF0aW9uIikpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yRnVuY0Zyb20sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShUZW1wb3JhbER1cmF0aW9uOjpmcm9tKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzQyNDVhMzEwNjk1YWNkMzViNWQ2YWE1NmU5MDA0ZjdlM2I3MDM4MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOworCitjbGFzcyBUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3IgZmluYWwgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJs
aWM6CisgICAgdXNpbmcgQmFzZSA9IEludGVybmFsRnVuY3Rpb247CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFz
U3RhdGljUHJvcGVydHlUYWJsZTsKKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uQ29uc3Ry
dWN0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUq
KTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKik7Cit9OworU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9y
LCBJbnRlcm5hbEZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjcwMTdmYWVmMzMyMTY1YjI2ZDM5MTljOTY3NDNmOTc4MGUzOGQ2
NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcApAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVy
YXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jV2l0aCk7CitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY05lZ2F0ZWQp
Oworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUZ1bmNBYnMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUZ1bmNUb1N0cmluZyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvSlNPTik7CitzdGF0aWMgSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvTG9j
YWxlU3RyaW5nKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVGdW5jVmFsdWVPZik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyWWVhcnMpOworc3RhdGljIEpTQ19E
RUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1vbnRo
cyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlR2V0dGVyV2Vla3MpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckRheXMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NV
U1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckhvdXJzKTsKK3N0YXRp
YyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0
ZXJNaW51dGVzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVHZXR0ZXJTZWNvbmRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaWxsaXNlY29uZHMpOworc3Rh
dGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdl
dHRlck1pY3Jvc2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTmFub3NlY29uZHMpOworc3RhdGljIEpTQ19ERUNM
QVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNpZ24pOwor
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUdldHRlckJsYW5rKTsKKworfQorCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZW1wb3JhbC5EdXJhdGlvbiIsICZCYXNlOjpz
X2luZm8sICZkdXJhdGlvblByb3RvdHlwZVRhYmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUpIH07CisKKy8qIFNvdXJjZSBmb3IgVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZS5sdXQuaAorQGJlZ2luIGR1cmF0aW9uUHJvdG90eXBlVGFibGUK
KyAgd2l0aCAgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1dpdGggICAg
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgIG5lZ2F0ZWQgICAgICAgICAgVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZUZ1bmNOZWdhdGVkICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gMAorICBhYnMgICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWJz
ICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgdG9TdHJpbmcgICAgICAgICBU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nICAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAwCisgIHRvSlNPTiAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1
bmNUb0pTT04gICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICB0b0xvY2FsZVN0cmlu
ZyAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9Mb2NhbGVTdHJpbmcgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDAKKyAgdmFsdWVPZiAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlRnVuY1ZhbHVlT2YgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIHllYXJzICAg
ICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclllYXJzICAgICAgICAgICAg
RG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbW9udGhzICAgICAgICAgICBUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTW9udGhzICAgICAgICAgICBEb250RW51bXxSZWFk
T25seXxDdXN0b21BY2Nlc3NvcgorICB3ZWVrcyAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVHZXR0ZXJXZWVrcyAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFj
Y2Vzc29yCisgIGRheXMgICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRl
ckRheXMgICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgaG91
cnMgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVySG91cnMgICAgICAg
ICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBtaW51dGVzICAgICAgICAg
IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaW51dGVzICAgICAgICAgIERvbnRFbnVt
fFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIHNlY29uZHMgICAgICAgICAgVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUdldHRlclNlY29uZHMgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3Vz
dG9tQWNjZXNzb3IKKyAgbWlsbGlzZWNvbmRzICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
R2V0dGVyTWlsbGlzZWNvbmRzICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3Nvcgor
ICBtaWNyb3NlY29uZHMgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaWNyb3Nl
Y29uZHMgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIG5hbm9zZWNvbmRz
ICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck5hbm9zZWNvbmRzICAgICAgRG9u
dEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgc2lnbiAgICAgICAgICAgICBUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2lnbiAgICAgICAgICAgICBEb250RW51bXxSZWFkT25s
eXxDdXN0b21BY2Nlc3NvcgorICBibGFuayAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJCbGFuayAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vz
c29yCitAZW5kCisqLworCitUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICBhdXRvKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSh2bSwg
c3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1
cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKK30KKworVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6VGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlKQoreworfQorCit2b2lkIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19X
SVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jV2l0aCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
YXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9u
LnByb3RvdHlwZS53aXRoIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0
aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKyAgICAKKyAgICBKU1ZhbHVlIGR1cmF0aW9uTGlr
ZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgaWYgKCFkdXJhdGlvbkxpa2UuaXNPYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIkZpcnN0IGFyZ3VtZW50IHRvIFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS53aXRoIG11
c3QgYmUgYW4gb2JqZWN0Il9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNW
YWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQoZ2xvYmFsT2JqZWN0
LCBkdXJhdGlvbi0+d2l0aChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGR1cmF0aW9uTGlrZSkpKSkp
OworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUZ1bmNOZWdhdGVkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0
ZWQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEg
RHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0
aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKSwgZHVyYXRp
b24tPm5lZ2F0ZWQoKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUZ1bmNBYnMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8q
IGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90
b3R5cGUuYWJzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXpl
ZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVGVtcG9y
YWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCks
IGR1cmF0aW9uLT5hYnMoKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb1N0cmluZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwg
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0
aW9uLnByb3RvdHlwZS50b1N0cmluZyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmpl
Y3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgZHVyYXRpb24tPnRvU3RyaW5n
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKSk7Cit9CisKK0pTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvSlNPTiwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRl
bXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFk
dXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b0pTT04gY2FsbGVkIG9uIHZhbHVl
IHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgZHVyYXRpb24tPnRvU3RyaW5n
KCkpKTsKK30KKworLy8gVGhpcyB3aWxsIGJlIHBhcnQgb2YgdGhlIEVDTUEtNDAyIEludGwuRHVy
YXRpb25Gb3JtYXQgcHJvcG9zYWw7IHVudGlsIHRoZW4sIHdlIGp1c3QgZm9sbG93IEVDTUEtMjYy
IGluIG1pbWlja2luZyB0b0pTT04uCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUZ1bmNUb0xvY2FsZVN0cmluZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2
bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1
cmF0aW9uLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5v
dCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBkdXJhdGlvbi0+dG9TdHJpbmcoKSkpOworfQor
CitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNW
YWx1ZU9mLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudmFsdWVPZiBtdXN0IG5v
dCBiZSBjYWxsZWQiX3MpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUdldHRlclllYXJzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxE
dXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJh
dGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS55ZWFycyBjYWxsZWQgb24gdmFsdWUgdGhh
dCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT55ZWFycygpKSk7Cit9CisK
K0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVy
TW9udGhzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRv
KiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9u
LnByb3RvdHlwZS5tb250aHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGlu
aXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihkdXJhdGlvbi0+bW9udGhzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJXZWVrcywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFt
aWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUud2Vla3MgY2Fs
bGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRp
b24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+
d2Vla3MoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZUdldHRlckRheXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9u
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVt
cG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmRheXMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3Qg
YW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+ZGF5cygpKSk7Cit9CisKK0pTQ19ERUZJ
TkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVySG91cnMsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9u
ID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBl
LmhvdXJzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBh
cyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
ZHVyYXRpb24tPmhvdXJzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaW51dGVzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVt
cG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5taW51dGVzIGNhbGxlZCBvbiB2
YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsK
KworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPm1pbnV0ZXMo
KSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUdldHRlclNlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4o
dm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9y
YWwuRHVyYXRpb24ucHJvdG90eXBlLnNlY29uZHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3Qg
YW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+c2Vjb25kcygpKSk7Cit9CisKK0pTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWlsbGlz
ZWNvbmRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRv
KiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9u
LnByb3RvdHlwZS5taWxsaXNlY29uZHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2Jq
ZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+bWlsbGlzZWNvbmRzKCkpKTsKK30KKworSlNDX0RF
RklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaWNyb3Nl
Y29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8q
IGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24u
cHJvdG90eXBlLm1pY3Jvc2Vjb25kcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmpl
Y3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taWNyb3NlY29uZHMoKSkpOworfQorCitKU0NfREVG
SU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck5hbm9zZWNv
bmRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBk
dXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS5uYW5vc2Vjb25kcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3Qg
aW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5uYW5vc2Vjb25kcygpKSk7Cit9CisKK0pTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2lnbiwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBq
c0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc2ln
biBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBE
dXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0
aW9uLT5zaWduKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVHZXR0ZXJCbGFuaywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVy
YXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRp
b24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYmxhbmsgY2FsbGVkIG9uIHZhbHVlIHRoYXQn
cyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWR1cmF0aW9uLT5zaWduKCkpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg3NzVlZWIw
N2JlNjAyY2ZhZWYwMzg3OTRlOTdjNjI5MzU0ZDM2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJv
cGVydHlUYWJsZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2Vzcz4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7
CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2U7CisgICAgfQorCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIGNyZWF0
ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisK
K3ByaXZhdGU6CisgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSop
OworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmpl
Y3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3Bw
CmluZGV4IGFmMTQzNjc1ZjFlNGM2Mjg3ZWEyYmUxOGY0MzNlZWJlMzcyYTcxN2QuLjMwNjM5NTJj
ODVlMzNmNmQ1MmExNTJhOGY4NGViYmFkZjZiY2I0ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTAgKzIxLDE0IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxPYmplY3QuaCIKIAorI2luY2x1ZGUgIkZ1bmN0aW9u
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSW50bE9iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCisjaW5j
bHVkZSAiVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlRlbXBvcmFsTm93LmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMzcsNiArNDIsMTMgQEAgc3RhdGljIEpTVmFsdWUgY3JlYXRlTm93T2JqZWN0
KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICByZXR1cm4gVGVtcG9yYWxOb3c6OmNyZWF0
ZSh2bSwgVGVtcG9yYWxOb3c6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0KSk7CiB9
CiAKK3N0YXRpYyBKU1ZhbHVlIGNyZWF0ZUR1cmF0aW9uQ29uc3RydWN0b3IoVk0mIHZtLCBKU09i
amVjdCogb2JqZWN0KQoreworICAgIFRlbXBvcmFsT2JqZWN0KiB0ZW1wb3JhbE9iamVjdCA9IGpz
Q2FzdDxUZW1wb3JhbE9iamVjdCo+KG9iamVjdCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHRlbXBvcmFsT2JqZWN0LT5nbG9iYWxPYmplY3Qodm0pOworICAgIHJldHVybiBU
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgVGVtcG9yYWxEdXJhdGlvbkNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LT5mdW5jdGlvblByb3RvdHlwZSgpKSwganNDYXN0PFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUq
PihnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZU9iamVj
dCgpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjaW5jbHVkZSAiVGVtcG9yYWxPYmpl
Y3QubHV0LmgiCkBAIC00Niw2ICs1OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogLyogU291cmNlIGZv
ciBUZW1wb3JhbE9iamVjdC5sdXQuaAogQGJlZ2luIHRlbXBvcmFsT2JqZWN0VGFibGUKICAgTm93
ICAgICAgICAgICAgY3JlYXRlTm93T2JqZWN0ICAgICAgICAgICAgICAgICBEb250RW51bXxQcm9w
ZXJ0eUNhbGxiYWNrCisgIER1cmF0aW9uICAgICAgIGNyZWF0ZUR1cmF0aW9uQ29uc3RydWN0b3Ig
ICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogQGVuZAogKi8KIApAQCAtNzUsNCArODgs
MTU5IEBAIHZvaWQgVGVtcG9yYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBK
U0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKIH0KIAorc3RhdGljIFN0cmlu
Z1ZpZXcgc2luZ3VsYXJVbml0KFN0cmluZ1ZpZXcgdW5pdCkKK3sKKyAgICAvLyBQbHVyYWxzIGFy
ZSBhbGxvd2VkLCBidXQgdGhhbmtmdWxseSB0aGV5J3JlIGFsbCBqdXN0IGEgc2ltcGxlIC1zLgor
ICAgIHJldHVybiB1bml0LmVuZHNXaXRoKCJzIikgPyB1bml0LmxlZnQodW5pdC5sZW5ndGgoKSAt
IDEpIDogdW5pdDsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1w
b3JhbFVuaXRUeXBlKFN0cmluZ1ZpZXcgdW5pdCkKK3sKKyAgICBTdHJpbmdWaWV3IHNpbmd1bGFy
ID0gc2luZ3VsYXJVbml0KHVuaXQpOworCisgICAgaWYgKHNpbmd1bGFyID09ICJ5ZWFyIikKKyAg
ICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6WWVhcjsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm1v
bnRoIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TW9udGg7CisgICAgaWYgKHNpbmd1
bGFyID09ICJ3ZWVrIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6V2VlazsKKyAgICBp
ZiAoc2luZ3VsYXIgPT0gImRheSIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OkRheTsK
KyAgICBpZiAoc2luZ3VsYXIgPT0gImhvdXIiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0
OjpIb3VyOworICAgIGlmIChzaW5ndWxhciA9PSAibWludXRlIikKKyAgICAgICAgcmV0dXJuIFRl
bXBvcmFsVW5pdDo6TWludXRlOworICAgIGlmIChzaW5ndWxhciA9PSAic2Vjb25kIikKKyAgICAg
ICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6U2Vjb25kOworICAgIGlmIChzaW5ndWxhciA9PSAibWls
bGlzZWNvbmQiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZDsKKyAg
ICBpZiAoc2luZ3VsYXIgPT0gIm1pY3Jvc2Vjb25kIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFs
VW5pdDo6TWljcm9zZWNvbmQ7CisgICAgaWYgKHNpbmd1bGFyID09ICJuYW5vc2Vjb25kIikKKyAg
ICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZDsKKyAgICAKKyAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworfQorCisvLyBUb1NtYWxsZXN0VGVtcG9yYWxVbml0ICggbm9ybWFsaXpl
ZE9wdGlvbnMsIGRpc2FsbG93ZWRVbml0cywgZmFsbGJhY2sgKQorc3RkOjpvcHRpb25hbDxUZW1w
b3JhbFVuaXQ+IHRlbXBvcmFsU21hbGxlc3RVbml0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VGVtcG9yYWxVbml0
PiBkaXNhbGxvd2VkVW5pdHMpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBz
bWFsbGVzdFVuaXQgPSBpbnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0u
cHJvcGVydHlOYW1lcy0+c21hbGxlc3RVbml0LCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAoc21h
bGxlc3RVbml0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
YXV0byB1bml0VHlwZSA9IHRlbXBvcmFsVW5pdFR5cGUoc21hbGxlc3RVbml0KTsKKyAgICBpZiAo
IXVuaXRUeXBlKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAic21hbGxlc3RVbml0IGlzIGFuIGludmFsaWQgdW5pdCJfcyk7CisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKGRpc2FsbG93ZWRVbml0cy5zaXplKCkgJiYg
c3RkOjpmaW5kKGRpc2FsbG93ZWRVbml0cy5iZWdpbigpLCBkaXNhbGxvd2VkVW5pdHMuZW5kKCks
IHVuaXRUeXBlLnZhbHVlKCkpICE9IGRpc2FsbG93ZWRVbml0cy5lbmQoKSkgeworICAgICAgICB0
aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInNtYWxsZXN0VW5pdCBpcyBhIGRp
c2FsbG93ZWQgdW5pdCJfcyk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQor
CisgICAgcmV0dXJuIHVuaXRUeXBlOworfQorCisvLyBHZXRTdHJpbmdPck51bWJlck9wdGlvbihu
b3JtYWxpemVkT3B0aW9ucywgImZyYWN0aW9uYWxTZWNvbmREaWdpdHMiLCDCqyAiYXV0byIgwrss
IDAsIDksICJhdXRvIikKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRlbXBvcmFsRnJhY3Rpb25h
bFNlY29uZERpZ2l0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3B0
aW9ucykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCFvcHRpb25zKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdGlvbnMtPmdl
dChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmZyYWN0aW9uYWxTZWNvbmREaWdpdHMp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICBkb3VibGUgZG91YmxlVmFs
dWUgPSB2YWx1ZS5hc051bWJlcigpOworICAgICAgICBpZiAoZG91YmxlVmFsdWUgPCAwIHx8IGRv
dWJsZVZhbHVlID4gOSkgeworICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJmcmFjdGlvbmFsU2Vjb25kRGlnaXRzIGlzIG91dCBvZiByYW5nZSJfcyk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkb3VibGVWYWx1ZSk7CisgICAgfQorCisgICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgaWYgKHN0cmlu
Z1ZhbHVlICE9ICJhdXRvIikKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJmcmFjdGlvbmFsU2Vjb25kRGlnaXRzIGlzIG91dCBvZiByYW5nZSJfcyk7CisKKyAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCisvLyBUb1NlY29uZHNTdHJpbmdQcmVjaXNpb24g
KCBub3JtYWxpemVkT3B0aW9ucyApCitQcmVjaXNpb25EYXRhIHNlY29uZHNTdHJpbmdQcmVjaXNp
b24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMpCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8gc21hbGxlc3RVbml0ID0gdGVtcG9yYWxTbWFs
bGVzdFVuaXQoZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB7IFRlbXBvcmFsVW5pdDo6WWVhciwgVGVt
cG9yYWxVbml0OjpNb250aCwgVGVtcG9yYWxVbml0OjpXZWVrLCBUZW1wb3JhbFVuaXQ6OkRheSwg
VGVtcG9yYWxVbml0OjpIb3VyLCBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSB9KTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKHNtYWxsZXN0VW5pdCkgeworICAg
ICAgICBzd2l0Y2ggKHNtYWxsZXN0VW5pdC52YWx1ZSgpKSB7CisgICAgICAgIGNhc2UgVGVtcG9y
YWxVbml0OjpTZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4geyAwLCBUZW1wb3JhbFVuaXQ6OlNl
Y29uZCwgMSB9OworICAgICAgICBjYXNlIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQ6CisgICAg
ICAgICAgICByZXR1cm4geyAzLCBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kLCAxIH07CisgICAg
ICAgIGNhc2UgVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZDoKKyAgICAgICAgICAgIHJldHVybiB7
IDYsIFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQsIDEgfTsKKyAgICAgICAgY2FzZSBUZW1wb3Jh
bFVuaXQ6Ok5hbm9zZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4geyA5LCBUZW1wb3JhbFVuaXQ6
Ok5hbm9zZWNvbmQsIDEgfTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9
CisgICAgfQorCisgICAgYXV0byBwcmVjaXNpb24gPSB0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmRE
aWdpdHMoZ2xvYmFsT2JqZWN0LCBvcHRpb25zKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgaWYgKCFwcmVjaXNpb24pCisgICAgICAgIHJldHVybiB7IHN0ZDo6
bnVsbG9wdCwgVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kLCAxIH07CisKKyAgICB1bnNpZ25lZCBk
aWdpdHMgPSBwcmVjaXNpb24udmFsdWUoKTsKKyAgICBpZiAoIWRpZ2l0cykKKyAgICAgICAgcmV0
dXJuIHsgMCwgVGVtcG9yYWxVbml0OjpTZWNvbmQsIDEgfTsKKworICAgIGlmIChkaWdpdHMgPD0g
MykKKyAgICAgICAgcmV0dXJuIHsgZGlnaXRzLCBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kLCBz
dGQ6OnBvdygxMCwgMyAtIGRpZ2l0cykgfTsKKworICAgIGlmIChkaWdpdHMgPD0gNikKKyAgICAg
ICAgcmV0dXJuIHsgZGlnaXRzLCBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kLCBzdGQ6OnBvdygx
MCwgNiAtIGRpZ2l0cykgfTsKKworICAgIEFTU0VSVChkaWdpdHMgPD0gOSk7CisgICAgcmV0dXJu
IHsgZGlnaXRzLCBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQsIHN0ZDo6cG93KDEwLCA5IC0gZGln
aXRzKSB9OworfQorCisvLyBSb3VuZE51bWJlclRvSW5jcmVtZW50ICggeCwgaW5jcmVtZW50LCBy
b3VuZGluZ01vZGUgKQorZG91YmxlIHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZG91YmxlIHgsIGRv
dWJsZSBpbmNyZW1lbnQsIFJvdW5kaW5nTW9kZSBtb2RlKQoreworICAgIGRvdWJsZSBxdW90aWVu
dCA9IHggLyBpbmNyZW1lbnQ7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBSb3VuZGlu
Z01vZGU6OkNlaWw6CisgICAgICAgIHJldHVybiAtc3RkOjpmbG9vcigtcXVvdGllbnQpICogaW5j
cmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpGbG9vcjoKKyAgICAgICAgcmV0dXJuIHN0
ZDo6Zmxvb3IocXVvdGllbnQpICogaW5jcmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpU
cnVuYzoKKyAgICAgICAgcmV0dXJuIHN0ZDo6dHJ1bmMocXVvdGllbnQpICogaW5jcmVtZW50Owor
ICAgIGNhc2UgUm91bmRpbmdNb2RlOjpIYWxmRXhwYW5kOgorICAgICAgICByZXR1cm4gc3RkOjpy
b3VuZChxdW90aWVudCkgKiBpbmNyZW1lbnQ7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2Jq
ZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5oCmlu
ZGV4IDFlZTk5OTRjMmI4YzA1ZTQ2ZDE2MTA2YTY2ZjAyYjk3NThiOGIyODMuLmI4ZmE0MWRkZTA3
NjE0ODI4NjM5NGU2ZmQxNTNiZTRjMTNlM2ZlNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDIxIElnYWxpYSwgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsNiArMjQsMjcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
KyNkZWZpbmUgSlNDX1RFTVBPUkFMX1VOSVRTKG1hY3JvKSBcCisgICAgbWFjcm8oeWVhciwgWWVh
cikgXAorICAgIG1hY3JvKG1vbnRoLCBNb250aCkgXAorICAgIG1hY3JvKHdlZWssIFdlZWspIFwK
KyAgICBtYWNybyhkYXksIERheSkgXAorICAgIG1hY3JvKGhvdXIsIEhvdXIpIFwKKyAgICBtYWNy
byhtaW51dGUsIE1pbnV0ZSkgXAorICAgIG1hY3JvKHNlY29uZCwgU2Vjb25kKSBcCisgICAgbWFj
cm8obWlsbGlzZWNvbmQsIE1pbGxpc2Vjb25kKSBcCisgICAgbWFjcm8obWljcm9zZWNvbmQsIE1p
Y3Jvc2Vjb25kKSBcCisgICAgbWFjcm8obmFub3NlY29uZCwgTmFub3NlY29uZCkgXAorCitlbnVt
IGNsYXNzIFRlbXBvcmFsVW5pdCA6IHVpbnQ4X3QgeworI2RlZmluZSBKU0NfREVGSU5FX1RFTVBP
UkFMX1VOSVRfRU5VTShuYW1lLCBjYXBpdGFsaXplZE5hbWUpIGNhcGl0YWxpemVkTmFtZSwKKyAg
ICBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX0RFRklORV9URU1QT1JBTF9VTklUX0VOVU0pCisjdW5k
ZWYgSlNDX0RFRklORV9URU1QT1JBTF9VTklUX0VOVU0KK307CisjZGVmaW5lIEpTQ19DT1VOVF9U
RU1QT1JBTF9VTklUUyhuYW1lLCBjYXBpdGFsaXplZE5hbWUpICsgMQorc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBudW1iZXJPZlRlbXBvcmFsVW5pdHMgPSAwIEpTQ19URU1QT1JBTF9VTklUUyhK
U0NfQ09VTlRfVEVNUE9SQUxfVU5JVFMpOworI3VuZGVmIEpTQ19DT1VOVF9URU1QT1JBTF9VTklU
UworCiBjbGFzcyBUZW1wb3JhbE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKQEAgLTQ1LDQg
KzY3LDIyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogfTsKIAor
ZW51bSBjbGFzcyBSb3VuZGluZ01vZGUgOiB1aW50OF90IHsKKyAgICBDZWlsLAorICAgIEZsb29y
LAorICAgIFRydW5jLAorICAgIEhhbGZFeHBhbmQKK307CisKK3N0cnVjdCBQcmVjaXNpb25EYXRh
IHsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwcmVjaXNpb247CisgICAgVGVtcG9yYWxV
bml0IHVuaXQ7CisgICAgZG91YmxlIGluY3JlbWVudDsKK307CisKK3N0ZDo6b3B0aW9uYWw8VGVt
cG9yYWxVbml0PiB0ZW1wb3JhbFNtYWxsZXN0VW5pdChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0
KiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VGVtcG9yYWxVbml0PiBkaXNhbGxvd2Vk
VW5pdHMpOworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25k
RGlnaXRzKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlvbnMpOworUHJlY2lzaW9uRGF0
YSBzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlv
bnMpOworZG91YmxlIHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZG91YmxlLCBkb3VibGUgaW5jcmVt
ZW50LCBSb3VuZGluZ01vZGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAppbmRleCAxZGVhNmExM2NiNGM0MjliOWIwNzE5OGJhYjZjNDRmMzE0
NjlkMDY4Li44MzFkM2YyZWQzYTMyN2NmZmIzNjhlZjE2M2IxYThhYjZmN2M4MTc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0xNjIsNiArMTYyLDcgQEAKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNs
dWRlICJTeW1ib2xPYmplY3QuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCiAjaW5j
bHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAj
aW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCkBAIC0xNjE3LDYgKzE2MTgsNyBAQCBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFJlbGF0aXZlVGltZUZvcm1hdFNwYWNl
LCBpbnRsUmVsYXRpdgogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGlu
dGxTZWdtZW50SXRlcmF0b3JTcGFjZSwgaW50bFNlZ21lbnRJdGVyYXRvckhlYXBDZWxsVHlwZS5n
ZXQoKSwgSW50bFNlZ21lbnRJdGVyYXRvcikKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyhpbnRsU2VnbWVudGVyU3BhY2UsIGludGxTZWdtZW50ZXJIZWFwQ2VsbFR5cGUu
Z2V0KCksIEludGxTZWdtZW50ZXIpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coaW50bFNlZ21lbnRzU3BhY2UsIGludGxTZWdtZW50c0hlYXBDZWxsVHlwZS5nZXQoKSwg
SW50bFNlZ21lbnRzKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRl
bXBvcmFsRHVyYXRpb25TcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgVGVtcG9yYWxEdXJh
dGlvbikKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1coanNUb1dhc21JQ0NhbGxlZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdl
dCgpLCBKU1RvV2FzbUlDQ2FsbGVlKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UsIHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVh
cENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSAvLyBIYXNoOjB4OWFkOTk1
Y2QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IGJjZWQ5ODQzZmNlODI2MjBlODhi
OTc1MDE4M2FlYjYxNTU2MjYwNjkuLmFiZGE3MmU5NDNhOTI1ZjRlZjc2MDNlMjUwZTNkMDZjYWUw
NDE3MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTg1LDYgKzE4NSw3IEBA
IGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgogY2xhc3MgU3ltYm9sOwor
Y2xhc3MgVGVtcG9yYWxEdXJhdGlvbjsKIGNsYXNzIFR5cGVkQXJyYXlDb250cm9sbGVyOwogY2xh
c3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2s7CkBAIC02
MTUsNiArNjE2LDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoaW50bFNlZ21lbnRJdGVyYXRvclNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoaW50bFNlZ21lbnRlclNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIoaW50bFNlZ21lbnRzU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUih0ZW1wb3JhbER1cmF0aW9uU3BhY2UpCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoanNUb1dh
c21JQ0NhbGxlZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
d2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9n
IGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOGIxYTVhOWRlMjM3NmU3NTcyMDY4YTE3YzgwN2My
Y2Y5NzhkYTFlMC4uYjIwMmZkZDQwZGNiMGRiYmI3NjJiZjc1NzQ4MTQ4NWIxMDY1MjUyOCAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMS0wOC0yMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy90ZW1w
b3JhbC1kdXJhdGlvbi5qczogQWRkZWQuCisKIDIwMjEtMDgtMTcgIE1pa2hhaWwgUi4gR2FkZWxo
YSAgPG1pa2hhaWxAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBTa2lwIGZhaWxp
bmcgTUlQUyB0ZXN0cwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvdGVtcG9yYWwtZHVyYXRp
b24uanMgYi9KU1Rlc3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
MGRjZDgwZTg3NTJlNjU2Y2MyNmNiMzZhMDVmNWEwM2QwYjlhNzE4Ci0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy9zdHJlc3MvdGVtcG9yYWwtZHVyYXRpb24uanMKQEAgLTAsMCArMSwxODkgQEAK
Ky8vQCByZXF1aXJlT3B0aW9ucygiLS11c2VUZW1wb3JhbD0xIikKKworZnVuY3Rpb24gc2hvdWxk
QmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1
YWx9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZE5vdFRocm93KGZ1bmMpIHsKKyAgICBmdW5jKCk7
Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yVHlwZSkgeworICAgIGxldCBl
cnJvcjsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICBlcnJvciA9IGU7CisgICAgfQorCisgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBlcnJv
clR5cGUpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXJyb3JUeXBlLm5h
bWV9IWApOworfQorCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbiBpbnN0YW5jZW9mIEZ1bmN0
aW9uLCB0cnVlKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmxlbmd0aCwgMCk7CitzaG91
bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFRlbXBvcmFsLkR1cmF0aW9uLCAn
cHJvdG90eXBlJykud3JpdGFibGUsIGZhbHNlKTsKK3Nob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwuRHVyYXRpb24sICdwcm90b3R5cGUnKS5lbnVtZXJhYmxl
LCBmYWxzZSk7CitzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFRlbXBv
cmFsLkR1cmF0aW9uLCAncHJvdG90eXBlJykuY29uZmlndXJhYmxlLCBmYWxzZSk7CitzaG91bGRU
aHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbigpLCBUeXBlRXJyb3IpOworCitzaG91bGRCZShu
ZXcgVGVtcG9yYWwuRHVyYXRpb24oKSBpbnN0YW5jZW9mIFRlbXBvcmFsLkR1cmF0aW9uLCB0cnVl
KTsKK3sKKyAgICBjbGFzcyBEZXJpdmVkRHVyYXRpb24gZXh0ZW5kcyBUZW1wb3JhbC5EdXJhdGlv
biB7fQorCisgICAgY29uc3QgZGQgPSBuZXcgRGVyaXZlZER1cmF0aW9uKCk7CisgICAgc2hvdWxk
QmUoZGQgaW5zdGFuY2VvZiBEZXJpdmVkRHVyYXRpb24sIHRydWUpOworICAgIHNob3VsZEJlKGRk
IGluc3RhbmNlb2YgVGVtcG9yYWwuRHVyYXRpb24sIHRydWUpOworICAgIHNob3VsZEJlKGRkLm5l
Z2F0ZWQsIFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVkKTsKKyAgICBzaG91bGRC
ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZGQpLCBEZXJpdmVkRHVyYXRpb24ucHJvdG90eXBlKTsK
KyAgICBzaG91bGRCZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoRGVyaXZlZER1cmF0aW9uLnByb3Rv
dHlwZSksIFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZSk7Cit9CisKK3Nob3VsZFRocm93KCgp
ID0+IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigxLCAtMSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhy
b3coKCkgPT4gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKEluZmluaXR5KSwgUmFuZ2VFcnJvcik7CisK
K2NvbnN0IGZpZWxkcyA9IFsneWVhcnMnLCAnbW9udGhzJywgJ3dlZWtzJywgJ2RheXMnLCAnaG91
cnMnLCAnbWludXRlcycsICdzZWNvbmRzJywgJ21pbGxpc2Vjb25kcycsICdtaWNyb3NlY29uZHMn
LCAnbmFub3NlY29uZHMnXTsKK2NvbnN0IHplcm8gPSBuZXcgVGVtcG9yYWwuRHVyYXRpb24oKTsK
K2NvbnN0IHBvcyA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigxLDIsMyw0LDUsNiw3LDgsOSwxMCk7
Citjb25zdCBuZWcgPSBuZXcgVGVtcG9yYWwuRHVyYXRpb24oLTEsLTIsLTMsLTQsLTUsLTYsLTcs
LTgsLTksLTEwKTsKKworZmllbGRzLmZvckVhY2goKGZpZWxkLCBpKSA9PiB7CisgICAgc2hvdWxk
VGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW2ZpZWxkXSwgVHlwZUVycm9y
KTsKKyAgICBzaG91bGRCZSh6ZXJvW2ZpZWxkXSwgMCk7CisgICAgc2hvdWxkQmUocG9zW2ZpZWxk
XSwgaSArIDEpOworICAgIHNob3VsZEJlKG5lZ1tmaWVsZF0sIC1pIC0gMSk7Cit9KTsKKworc2hv
dWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnNpZ24sIFR5cGVFcnJv
cik7CitzaG91bGRCZSh6ZXJvLnNpZ24sIDApOworc2hvdWxkQmUocG9zLnNpZ24sIDEpOworc2hv
dWxkQmUobmVnLnNpZ24sIC0xKTsKKworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRp
b24ucHJvdG90eXBlLmJsYW5rLCBUeXBlRXJyb3IpOworc2hvdWxkQmUoemVyby5ibGFuaywgdHJ1
ZSk7CitzaG91bGRCZShwb3MuYmxhbmssIGZhbHNlKTsKK3Nob3VsZEJlKG5lZy5ibGFuaywgZmFs
c2UpOworCitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCksIFJhbmdl
RXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSh7fSksIFR5
cGVFcnJvcik7Cit7CisgICAgY29uc3QgYmFkU3RyaW5ncyA9IFsKKyAgICAgICAgJycsICdQJywg
J1AxJywgJ1BUJywgJ1AxWVQnLCAnUFQxJywKKyAgICAgICAgJ1AxVzFZJywgICdQVDFTMU0nLAor
ICAgICAgICAnUDEuMVknLCAnUFQxLjFIMU0nLCAnUFQxLjFNMVMnLAorICAgICAgICAnUFQxLjEx
MTExMTExMTFIJywgJ1BUMS4xMTExMTExMTExTScsICdQVDEuMTExMTExMTExMVMnLAorICAgICAg
ICBgUCR7QXJyYXkoMzA5KS5maWxsKDkpLmpvaW4oJycpfVlgCisgICAgXTsKKyAgICBmb3IgKGNv
bnN0IGJhZFN0cmluZyBpbiBiYWRTdHJpbmdzKQorICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBU
ZW1wb3JhbC5EdXJhdGlvbi5mcm9tKGJhZFN0cmluZyksIFJhbmdlRXJyb3IpOworICAgIAorICAg
IGNvbnN0IGZyb21TdHJpbmcgPSBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMVkyTTNXNERUNUg2
TTcuMDA4MDA5MDEwUycpOworCisgICAgY29uc3QgZHVyYXRpb25MaWtlID0ge307CisgICAgZmll
bGRzLmZvckVhY2goKGZpZWxkLCBpKSA9PiB7IGR1cmF0aW9uTGlrZVtmaWVsZF0gPSBpICsgMTsg
fSk7CisgICAgY29uc3QgZnJvbUR1cmF0aW9uTGlrZSA9IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20o
ZHVyYXRpb25MaWtlKTsKKworICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7CisgICAg
ICAgIHNob3VsZEJlKGZyb21TdHJpbmdbZmllbGRdLCBwb3NbZmllbGRdKTsKKyAgICAgICAgc2hv
dWxkQmUoZnJvbUR1cmF0aW9uTGlrZVtmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgIH0KK30KK3No
b3VsZE5vdFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oYFAke0FycmF5KDMwOCku
ZmlsbCg5KS5qb2luKCcnKX1ZYCkpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgn
4oiScDF5Mm0zdzRkdDVoNm03LjAwODAwOTAxMHMnKS50b1N0cmluZygpLCAnLVAxWTJNM1c0RFQ1
SDZNNy4wMDgwMDkwMVMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJytQMVky
RFQzSDRTJykudG9TdHJpbmcoKSwgJ1AxWTJEVDNINFMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1
cmF0aW9uLmZyb20oJ1BUMS4wMzEyNUgnKS50b1N0cmluZygpLCAnUFQxSDFNNTIuNVMnKTsKK3No
b3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1BUMS4wMzEyNU0nKS50b1N0cmluZygpLCAn
UFQxTTEuODc1UycpOworCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUud2l0
aC5sZW5ndGgsIDEpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90
eXBlLndpdGguY2FsbCh7fSwgeyB5ZWFyczogMSB9KSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93
KCgpID0+IHplcm8ud2l0aCgpLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby53
aXRoKHt9KSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ud2l0aCh7IHllYXJz
OiAxLjEgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gcG9zLndpdGgoeyB5ZWFy
czogLTEgfSksIFJhbmdlRXJyb3IpOworeworICAgIGNvbnN0IGZ1bGx5VXBkYXRlZCA9IHBvcy53
aXRoKG5lZyk7CisgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHsKKyAgICAgICAgc2hv
dWxkQmUoemVyby53aXRoKHsgW2ZpZWxkXTogMSB9KVtmaWVsZF0sIDEpOworICAgICAgICBzaG91
bGRCZShmdWxseVVwZGF0ZWRbZmllbGRdLCBuZWdbZmllbGRdKTsKKyAgICB9Cit9CisKK3Nob3Vs
ZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVkLmxlbmd0aCwgMCk7CitzaG91
bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubmVnYXRlZC5jYWxsKHt9
KSwgVHlwZUVycm9yKTsKK3sKKyAgICBjb25zdCBuZWdhdGVkWmVybyA9IHplcm8ubmVnYXRlZCgp
OworICAgIGNvbnN0IG5lZ2F0ZWRQb3MgPSBwb3MubmVnYXRlZCgpOworICAgIGNvbnN0IG5lZ2F0
ZWROZWcgPSBuZWcubmVnYXRlZCgpOworICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7
CisgICAgICAgIHNob3VsZEJlKG5lZ2F0ZWRaZXJvW2ZpZWxkXSwgemVyb1tmaWVsZF0pOworICAg
ICAgICBzaG91bGRCZShuZWdhdGVkTmVnW2ZpZWxkXSwgcG9zW2ZpZWxkXSk7CisgICAgICAgIHNo
b3VsZEJlKG5lZ2F0ZWRQb3NbZmllbGRdLCBuZWdbZmllbGRdKTsKKyAgICB9Cit9CisKK3Nob3Vs
ZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5hYnMubGVuZ3RoLCAwKTsKK3Nob3VsZFRo
cm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5hYnMuY2FsbCh7fSksIFR5cGVF
cnJvcik7Cit7CisgICAgY29uc3QgYWJzWmVybyA9IHplcm8uYWJzKCk7CisgICAgY29uc3QgYWJz
UG9zID0gcG9zLmFicygpOworICAgIGNvbnN0IGFic05lZyA9IG5lZy5hYnMoKTsKKyAgICBmb3Ig
KGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAgICAgICBzaG91bGRCZShhYnNaZXJvW2ZpZWxk
XSwgemVyb1tmaWVsZF0pOworICAgICAgICBzaG91bGRCZShhYnNQb3NbZmllbGRdLCBwb3NbZmll
bGRdKTsKKyAgICAgICAgc2hvdWxkQmUoYWJzTmVnW2ZpZWxkXSwgcG9zW2ZpZWxkXSk7CisgICAg
fQorfQorCisvLyBBdCBwcmVzZW50LCB0b0xvY2FsZVN0cmluZyBoYXMgdGhlIHNhbWUgYmVoYXZp
b3IgYXMgdG9KU09OIG9yIGFyZ3VtZW50bGVzcyB0b1N0cmluZy4KK2ZvciAoY29uc3QgbWV0aG9k
IG9mIFsndG9TdHJpbmcnLCAndG9KU09OJywgJ3RvTG9jYWxlU3RyaW5nJ10pIHsgICAgCisgICAg
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW21ldGhvZF0ubGVuZ3RoLCAwKTsK
KyAgICBzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbbWV0aG9k
XS5jYWxsKHt9KSwgVHlwZUVycm9yKTsKKworICAgIHNob3VsZEJlKHplcm9bbWV0aG9kXSgpLCAn
UFQwUycpOworICAgIHNob3VsZEJlKHBvc1ttZXRob2RdKCksICdQMVkyTTNXNERUNUg2TTcuMDA4
MDA5MDFTJyk7CisgICAgc2hvdWxkQmUobmVnW21ldGhvZF0oKSwgJy1QMVkyTTNXNERUNUg2TTcu
MDA4MDA5MDFTJyk7CisgICAgCisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDEs
MSwxLDEpW21ldGhvZF0oKSwgJ1AxWTFNMVcxRCcpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3Jh
bC5EdXJhdGlvbigwLDAsMCwwLDEsMSwxKVttZXRob2RdKCksICdQVDFIMU0xUycpOworICAgIHNo
b3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDEwMClbbWV0aG9kXSgp
LCAnUFQwLjFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAs
MCwwLDAsMCwxMDApW21ldGhvZF0oKSwgJ1BUMC4wMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBU
ZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDAsMCwxMDApW21ldGhvZF0oKSwgJ1BUMC4w
MDAwMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAs
MCwxLDEwMDEpW21ldGhvZF0oKSwgJ1BUMi4wMDFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBv
cmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDAsMSwxMDAxKVttZXRob2RdKCksICdQVDAuMDAyMDAx
UycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDAs
MSwxMDAxKVttZXRob2RdKCksICdQVDAuMDAwMDAyMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBU
ZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwxLDEwMDEsMTAwMSwxMDAxKVttZXRob2RdKCks
ICdQVDIuMDAyMDAyMDAxUycpOworfQorCitzaG91bGRCZShwb3MudG9TdHJpbmcoe30pLCBwb3Mu
dG9TdHJpbmcoKSk7CisKK3Nob3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IHNtYWxsZXN0
VW5pdDogJ2Zvb2JhcicgfSksIFJhbmdlRXJyb3IpOworZm9yIChjb25zdCB1bml0IG9mIFsneWVh
cicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VyJywgJ21pbnV0ZSddKSB7CisgICAgc2hv
dWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiB1bml0IH0pLCBSYW5n
ZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVu
aXQ6IGAke3VuaXR9c2AgfSksIFJhbmdlRXJyb3IpOworfQorc2hvdWxkQmUocG9zLnRvU3RyaW5n
KHsgc21hbGxlc3RVbml0OiAnc2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTdTJyk7CitzaG91
bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICdtaWxsaXNlY29uZHMnIH0pLCAnUDFZ
Mk0zVzREVDVINk03LjAwOFMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5p
dDogJ21pY3Jvc2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4MDA5UycpOworc2hvdWxk
QmUocG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiAnbmFub3NlY29uZHMnIH0pLCAnUDFZMk0z
VzREVDVINk03LjAwODAwOTAxMFMnKTsKK2ZvciAoY29uc3QgdW5pdCBvZiBbJ3NlY29uZCcsICdt
aWxsaXNlY29uZCcsICdtaWNyb3NlY29uZCcsICduYW5vc2Vjb25kJ10pCisgICAgc2hvdWxkQmUo
cG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiB1bml0IH0pLCBwb3MudG9TdHJpbmcoeyBzbWFs
bGVzdFVuaXQ6IGAke3VuaXR9c2AgfSkpOworCitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJp
bmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAtMSB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRU
aHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAxMCB9KSwg
UmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFs
U2Vjb25kRGlnaXRzOiAnYm9ndXMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZEJlKHBvcy50b1N0
cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDAgfSksICdQMVkyTTNXNERUNUg2TTdTJyk7
Citjb25zdCBkZWNpbWFsUGFydCA9ICcwMDgwMDkwMTAnOworZm9yIChsZXQgaSA9IDE7IGkgPCAx
MDsgaSsrKQorICAgIHNob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdp
dHM6IGkgfSksIGBQMVkyTTNXNERUNUg2TTcuJHtkZWNpbWFsUGFydC5zbGljZSgwLGkpfVNgKTsK
K3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6ICdhdXRvJyB9
KSwgcG9zLnRvU3RyaW5nKCkpOworc2hvdWxkQmUoemVyby50b1N0cmluZyh7IGZyYWN0aW9uYWxT
ZWNvbmREaWdpdHM6IDIgfSksICdQVDAuMDBTJyk7CisKK3Nob3VsZFRocm93KCgpID0+IHBvcy50
b1N0cmluZyh7IHJvdW5kaW5nTW9kZTogJ2JvZ3VzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRC
ZShwb3MudG9TdHJpbmcoeyByb3VuZGluZ01vZGU6ICd0cnVuYycgfSksIHBvcy50b1N0cmluZygp
KTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDcsIHJv
dW5kaW5nTW9kZTogJ2NlaWwnIH0pLCAnUDFZMk0zVzREVDVINk03LjAwODAwOTFTJyk7CitzaG91
bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAyLCByb3VuZGluZ01v
ZGU6ICdmbG9vcicgfSksICdQMVkyTTNXNERUNUg2TTcuMDBTJyk7CitzaG91bGRCZShwb3MudG9T
dHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAyLCByb3VuZGluZ01vZGU6ICdoYWxmRXhw
YW5kJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMVMnKTsKKworc2hvdWxkQmUoVGVtcG9yYWwuRHVy
YXRpb24ucHJvdG90eXBlLnZhbHVlT2YubGVuZ3RoLCAwKTsKK3Nob3VsZFRocm93KCgpID0+IG5l
dyBUZW1wb3JhbC5EdXJhdGlvbigpLnZhbHVlT2YoKSwgVHlwZUVycm9yKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436044</attachid>
            <date>2021-08-20 17:01:18 -0700</date>
            <delta_ts>2021-08-23 17:03:47 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-228532-20210820170117.patch</filename>
            <type>text/plain</type>
            <size>89840</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NmE5YjNkYmVhNTJlZWY3NjIyNzk4MWE0YmEzNDk1YThmZjRhOWJlLi41NDRjMjk2NzQ3ZmNmNTMz
NDcxZjlmNmRjNzQ4OTdlOTdjYzBmNDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NyBAQAorMjAyMS0wOC0yMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpkdXJhdGlvblN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OnByb3BlcnR5TmFtZSk6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFs
RHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRp
b246OlRlbXBvcmFsRHVyYXRpb24pOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmlzVmFsaWREdXJhdGlvbik6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQpOgorICAgICAgICAoSlNDOjpo
YW5kbGVGcmFjdGlvbik6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnBhcnNlKToK
KyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6dG9TdWJkdXJhdGlvbnMpOgorICAgICAg
ICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjp0b0R1cmF0aW9uKToKKyAgICAgICAgKEpTQzo6VGVt
cG9yYWxEdXJhdGlvbjo6ZnJvbSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnNp
Z24gY29uc3QpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjp3aXRoIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6bmVnYXRlZCBjb25zdCk6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmFicyBjb25zdCk6CisgICAgICAgIChKU0M6OlRlbXBv
cmFsRHVyYXRpb246OnJvdW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlv
bjo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5o
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpU
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0
aW9uQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKToK
KyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaDogQWRkZWQuCisg
ICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0
ZUR1cmF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpzaW5ndWxhclVuaXQpOgorICAg
ICAgICAoSlNDOjp0ZW1wb3JhbFVuaXRUeXBlKToKKyAgICAgICAgKEpTQzo6dGVtcG9yYWxTbWFs
bGVzdFVuaXQpOgorICAgICAgICAoSlNDOjp0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmREaWdpdHMp
OgorICAgICAgICAoSlNDOjpzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKToKKyAgICAgICAgKEpTQzo6
cm91bmROdW1iZXJUb0luY3JlbWVudCk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVj
dC5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoK
KwogMjAyMS0wOC0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtKU0NdIFJlbW92ZSB1bm5lY2Vzc2FyeSBtb3ZlcyBpbiBZYXJyJ3Mgc3ViMzIgLyBhZGQz
MiByZWxhdGVkIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiYjY1
NGI1NDQ0ZDIxOTY3OTZlYWZhNDI1NTc4ZDAzOGVhYjc2Y2U5Li5kMWQzOWFjN2RkZDY0ZDE1MTVj
Nzg1MTM5MjdhYmI2ZTBkYTFjNjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0xMDcsNiArMTA3LDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX09CSkVDVF9MVVRfU09VUkNF
UwogICAgIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvU3ltYm9sQ29u
c3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCisgICAgcnVudGlt
ZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCisgICAgcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCiAKICAg
ICB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCmluZGV4IDc1NDJjN2Y3NzQ2NWUyNmUxOWQ0YTY4YTVkYjc2MDkxZmRkNDY1
MzkuLjNmNTg1ZTFjOTRiMzAzMDY4OTRiMjc3NmI5YTUwN2U5NmYwNjRmOTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xOTEsNiArMTkxLDggQEAgT0JK
RUNUX0xVVF9IRUFERVJTID0gXAogICAgIFN0cmluZ1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgU3lt
Ym9sQ29uc3RydWN0b3IubHV0LmggXAogICAgIFN5bWJvbFByb3RvdHlwZS5sdXQuaCBcCisgICAg
VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlLmx1dC5oIFwKICAgICBUZW1wb3JhbE9iamVjdC5sdXQuaCBcCiAgICAgV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JQcm90b3R5cGUubHV0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBhZGQ2Y2I0MzIyOTI3ZjIyMTVhNjMyZDM4OTNiZGM5YzM4MjVmYTdhLi4yZWU2OGYxMDMyZTM5
OWJlM2I2OWQwNzkwYmI2NjQ5OGU0OWViN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTQxNiw2ICsxNDE2LDkgQEAKIAkJQTM4MkM1MzEyNjY3MTExRDAwNDJDRDk5IC8qIElu
QnlWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzMwNUZCMTIwQjBGNzg4MDBDRUI4MkIgLyogSW5CeVZhcmlhbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMzhEMjUwRTI1ODAwRDQ0MDA0
MkJGREQgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzOEQyNTBEMjU4MDBENDMwMDQyQkZERCAv
KiBKU0FycmF5QnVmZmVyUHJvdG90eXBlSW5saW5lcy5oICovOyB9OwogCQlBMzhENUJGQzI2NjZE
M0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTM4RDVCRkEyNjY2RDNEQTAwQTEwOUE2IC8qIEluQnlTdGF0dXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBM0M3
RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VEQjAyNkIwREIz
NjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsKKwkJQTNDN0VE
QjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CisJCUEzQzdFREJBMjZCMERCMzgwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3Jh
bER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJQTNFRTg1NDMyNjI1MTRCMDAwRkM5QjhE
IC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAvKiBJbnRsV29ya2Fyb3VuZC5j
cHAgKi87IH07CiAJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRkY5QkM1MjIzNDc0
NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyogSmF2YVNjcmlw
dENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCAqLzsg
fTsKQEAgLTQ0NzMsNiArNDQ3NiwxMiBAQAogCQlBM0JGODg0RTI0NDgwQkUwMDAxQjlGMzUgLyog
SW50bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBM0JGODg0RjI0NDgwQkUwMDAxQjlGMzUgLyogSW50bFJl
bGF0aXZlVGltZUZvcm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTNCRjg4NTAyNDQ4MEJFMTAwMUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bFJlbGF0aXZlVGltZUZvcm1hdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMDI2QjBEQjM2MDA0QzM0QzUg
LyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEzQzdFREIxMjZCMERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMjI2QjBEQjM3MDA0QzM0
QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAvKiBUZW1w
b3JhbER1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBvcmFs
RHVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjQyNkIwREIz
NzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjUyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUEzRkY5QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckZsYWdzLmg7IHBhdGggPSB5YXJyL1lhcnJG
bGFncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0ZGOUJDNjIyMzQ3NDY2MDBC
MUE5QUIgLyogWWFyckZsYWdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFlhcnJGbGFncy5jcHA7IHBhdGggPSB5YXJyL1lhcnJGbGFncy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE1MDNGQTEzMTg4RTBGQUYwMDExMEYxNCAvKiBKYXZhU2NyaXB0
Q2FsbEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEphdmFT
Y3JpcHRDYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzk1Niw2
ICs3OTY1LDEyIEBACiAJCQkJRTMxMTc5QTkyMjg4Mzg1RDAwNTE0QjJDIC8qIFN5bWJvbFRhYmxl
T3JTY29wZURlcHRoLmggKi8sCiAJCQkJQkRCNEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBs
YXRlT2JqZWN0RGVzY3JpcHRvci5jcHAgKi8sCiAJCQkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oICovLAorCQkJCUEzQzdFREIxMjZCMERCMzYw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNwcCAqLywKKwkJCQlBM0M3RURCMzI2QjBEQjM3
MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovLAorCQkJCUEzQzdFREIyMjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCUEzQzdF
REI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLywK
KwkJCQlBM0M3RURCNTI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5jcHAgKi8sCisJCQkJQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGUuaCAqLywKIAkJCQlGNkYxNTAxQjI2OTNEMzNFMDA0Qjk4RUYgLyogVGVtcG9y
YWxOb3cuY3BwICovLAogCQkJCUY2RjE1MDE4MjY5M0QzM0QwMDRCOThFRiAvKiBUZW1wb3JhbE5v
dy5oICovLAogCQkJCUY2RjE1MDE5MjY5M0QzM0UwMDRCOThFRiAvKiBUZW1wb3JhbE9iamVjdC5j
cHAgKi8sCkBAIC0xMDY1NSw3ICsxMDY3MCwxMSBAQAogCQkJCUE3ODRBMjY0MTFEMTY2MjIwMDU3
NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzc5OTc4MzFDREU5
RkEwMDA0RDRBMDkgLyogVGFnUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBF
Q0E2MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREJBMjZCMERCMzgwMDRDMzRDNSAvKiBUZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREI2MjZC
MERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGNkYxNTAyMTI2OTNENDUwMDA0Qjk4RUYgLyogVGVtcG9yYWxPYmplY3QubHV0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBM0ZBOTczODI2QkIzNTU2MDBGNzEwNjAgLyogVGVtcG9yYWxP
YmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIy
MTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ0QTdCNDIwQkY2
OEQ5MDAyMkIxNzEgLyogVGVybWluYXRlZENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQTJDMTdDMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IGE2NDcwMmRiNjAxY2MyMWFiYjRj
MjYyOTQ1N2RkMWE3NTljMzAyMGQuLjNjMmM2ZjAwOTY2N2M4M2FjMTk0N2E0NjM0OWM2N2FiOTJl
YzIyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTEwMTAsNiArMTAxMCw5IEBA
IHJ1bnRpbWUvU3ltYm9sT2JqZWN0LmNwcAogcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCiBy
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAogcnVudGltZS9UZW1wbGF0ZU9iamVjdERlc2NyaXB0b3Iu
Y3BwCitydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwCitydW50aW1lL1RlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3Rvci5jcHAKK3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAK
IHJ1bnRpbWUvVGVtcG9yYWxOb3cuY3BwCiBydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcAogcnVu
dGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRleCBkYzYwMTlmNDVmZDk4YjQzN2E1YmY2ZTI2
NTg0YTBhMzQ2MzJmYWRjLi45MjE3OGI3OWE0MjY3MGY0YTFkZDBiMzBlOGEzYjNiNTVmMmFjMTdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlm
aWVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmgKQEAgLTk5LDYgKzk5LDcgQEAKICAgICBtYWNybyhjb3VudGVycykgXAogICAgIG1hY3Jv
KGRhdGVTdHlsZSkgXAogICAgIG1hY3JvKGRheSkgXAorICAgIG1hY3JvKGRheXMpIFwKICAgICBt
YWNybyhkYXlQZXJpb2QpIFwKICAgICBtYWNybyhkZWZpbmVQcm9wZXJ0eSkgXAogICAgIG1hY3Jv
KGRlcmVmKSBcCkBAIC0xMzUsNiArMTM2LDcgQEAKICAgICBtYWNybyhoYXNoKSBcCiAgICAgbWFj
cm8oaGVhZGVyKSBcCiAgICAgbWFjcm8oaG91cikgXAorICAgIG1hY3JvKGhvdXJzKSBcCiAgICAg
bWFjcm8oaG91ckN5Y2xlKSBcCiAgICAgbWFjcm8oaG91cjEyKSBcCiAgICAgbWFjcm8oaWQpIFwK
QEAgLTE2MiwxMyArMTY0LDE4IEBACiAgICAgbWFjcm8obWF4aW11bUZyYWN0aW9uRGlnaXRzKSBc
CiAgICAgbWFjcm8obWF4aW11bVNpZ25pZmljYW50RGlnaXRzKSBcCiAgICAgbWFjcm8obWVzc2Fn
ZSkgXAorICAgIG1hY3JvKG1pY3Jvc2Vjb25kcykgXAorICAgIG1hY3JvKG1pbGxpc2Vjb25kcykg
XAogICAgIG1hY3JvKG1pbmltdW1GcmFjdGlvbkRpZ2l0cykgXAogICAgIG1hY3JvKG1pbmltdW1J
bnRlZ2VyRGlnaXRzKSBcCiAgICAgbWFjcm8obWluaW11bVNpZ25pZmljYW50RGlnaXRzKSBcCiAg
ICAgbWFjcm8obWludXRlKSBcCisgICAgbWFjcm8obWludXRlcykgXAogICAgIG1hY3JvKG1vbnRo
KSBcCisgICAgbWFjcm8obW9udGhzKSBcCiAgICAgbWFjcm8obXVsdGlsaW5lKSBcCiAgICAgbWFj
cm8obmFtZSkgXAorICAgIG1hY3JvKG5hbm9zZWNvbmRzKSBcCiAgICAgbWFjcm8obmV4dCkgXAog
ICAgIG1hY3JvKG5vdykgXAogICAgIG1hY3JvKG51bUlubGluZWRDYWxscykgXApAQCAtMTkxLDEz
ICsxOTgsMTYgQEAKICAgICBtYWNybyhyZWdpb24pIFwKICAgICBtYWNybyhyZXBsYWNlKSBcCiAg
ICAgbWFjcm8ocmVzb2x2ZSkgXAorICAgIG1hY3JvKHJvdW5kaW5nTW9kZSkgXAogICAgIG1hY3Jv
KHNjcmlwdCkgXAogICAgIG1hY3JvKHNlY29uZCkgXAorICAgIG1hY3JvKHNlY29uZHMpIFwKICAg
ICBtYWNybyhzZWdtZW50KSBcCiAgICAgbWFjcm8oc2Vuc2l0aXZpdHkpIFwKICAgICBtYWNybyhz
ZXQpIFwKICAgICBtYWNybyhzaXplKSBcCiAgICAgbWFjcm8oc2xpY2UpIFwKKyAgICBtYWNybyhz
bWFsbGVzdFVuaXQpIFwKICAgICBtYWNybyhzb3VyY2UpIFwKICAgICBtYWNybyhzb3VyY2VDb2Rl
KSBcCiAgICAgbWFjcm8oc291cmNlVVJMKSBcCkBAIC0yMjgsOCArMjM4LDEwIEBACiAgICAgbWFj
cm8odmFsdWUpIFwKICAgICBtYWNybyh2YWx1ZU9mKSBcCiAgICAgbWFjcm8od2Vla2RheSkgXAor
ICAgIG1hY3JvKHdlZWtzKSBcCiAgICAgbWFjcm8od3JpdGFibGUpIFwKLSAgICBtYWNybyh5ZWFy
KQorICAgIG1hY3JvKHllYXIpIFwKKyAgICBtYWNybyh5ZWFycykKIAogI2RlZmluZSBKU0NfQ09N
TU9OX0lERU5USUZJRVJTX0VBQ0hfUFJJVkFURV9GSUVMRChtYWNybykgXAogICAgIG1hY3JvKGNv
bnN0cnVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCmluZGV4IDE1ZjViMDY0ZWNiZmM2NThhOTkwZDJlYjU5NjM1YmYyYmRiZTg4ODIu
LjU0MThhN2JiMGY4MTFiNmMwNjNkZTc2MzRiYWY3ZmEyMjAyM2M5NDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTIwMSw2ICsy
MDEsOCBAQAogI2luY2x1ZGUgIlN5bWJvbENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiU3ltYm9s
T2JqZWN0LmgiCiAjaW5jbHVkZSAiU3ltYm9sUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiVGVtcG9y
YWxEdXJhdGlvbi5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKICNp
bmNsdWRlICJUZW1wb3JhbE9iamVjdC5oIgogI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiV2FzbUNhcGFiaWxpdGllcy5oIgpAQCAtMTIxMiw2ICsxMjE0LDEzIEBAIGNhcGl0
YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJl
RmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPkludGwsIGludGwsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogICAgIGlmIChPcHRpb25zOjp1c2VUZW1wb3JhbCgp
KSB7CisgICAgICAgIG1fZHVyYXRpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICAgICAg
W10gKGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKKyAgICAgICAgICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
aW5pdC5vd25lcik7CisgICAgICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSog
ZHVyYXRpb25Qcm90b3R5cGUgPSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGUoaW5p
dC52bSwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0s
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgICAg
ICAgICAgICAgIGluaXQuc2V0KFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZShpbml0
LnZtLCBnbG9iYWxPYmplY3QsIGR1cmF0aW9uUHJvdG90eXBlKSk7CisgICAgICAgICAgICB9KTsK
KwogICAgICAgICBUZW1wb3JhbE9iamVjdCogdGVtcG9yYWwgPSBUZW1wb3JhbE9iamVjdDo6Y3Jl
YXRlKHZtLCBUZW1wb3JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzKSk7CiAgICAg
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5UZW1w
b3JhbCwgdGVtcG9yYWwsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKICAgICB9CkBAIC0yMDkwLDYgKzIwOTksOSBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgdGhpc09iamVjdC0+bV9kYXRlVGltZUZvcm1hdFN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsK
ICAgICB0aGlzT2JqZWN0LT5tX251bWJlckZvcm1hdFN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsK
IAorICAgIGlmIChPcHRpb25zOjp1c2VUZW1wb3JhbCgpKQorICAgICAgICB0aGlzT2JqZWN0LT5t
X2R1cmF0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOworCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9udWxsR2V0dGVyRnVuY3Rpb24pOwogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fbnVsbFNldHRlckZ1bmN0aW9uKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX251bGxTZXR0ZXJTdHJpY3RGdW5jdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCBhMzVlZmNlN2M1MjYyZjQ5ZDk4
ZDVhYjQyMTNjODgxYjVjMjcwYWMwLi5iNDNiNjdhOTM4NDA2YjcwMTIyMmFlMzUzMzIwOGQ3MjE3
YTcyODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKQEAgLTMyNCw2ICszMjQsOCBAQCBwdWJsaWM6CiAgICAgTGF6eUNsYXNzU3RydWN0dXJl
IG1fZGF0ZVRpbWVGb3JtYXRTdHJ1Y3R1cmU7CiAgICAgTGF6eUNsYXNzU3RydWN0dXJlIG1fbnVt
YmVyRm9ybWF0U3RydWN0dXJlOwogCisgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmU+IG1fZHVyYXRpb25TdHJ1Y3R1cmU7CisKICAgICBXcml0ZUJhcnJpZXI8TnVsbEdl
dHRlckZ1bmN0aW9uPiBtX251bGxHZXR0ZXJGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8TnVs
bFNldHRlckZ1bmN0aW9uPiBtX251bGxTZXR0ZXJGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8
TnVsbFNldHRlckZ1bmN0aW9uPiBtX251bGxTZXR0ZXJTdHJpY3RGdW5jdGlvbjsKQEAgLTg3MCw2
ICs4NzIsOCBAQCBwdWJsaWM6CiAgICAgSlNPYmplY3QqIG51bWJlckZvcm1hdENvbnN0cnVjdG9y
KCkgeyByZXR1cm4gbV9udW1iZXJGb3JtYXRTdHJ1Y3R1cmUuY29uc3RydWN0b3IodGhpcyk7IH0K
ICAgICBKU09iamVjdCogbnVtYmVyRm9ybWF0UHJvdG90eXBlKCkgeyByZXR1cm4gbV9udW1iZXJG
b3JtYXRTdHJ1Y3R1cmUucHJvdG90eXBlKHRoaXMpOyB9CiAKKyAgICBTdHJ1Y3R1cmUqIGR1cmF0
aW9uU3RydWN0dXJlKCkgeyByZXR1cm4gbV9kdXJhdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0K
KwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChi
b29sKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHJlbW90ZURlYnVnZ2luZ0VuYWJsZWQo
KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVt
cG9yYWxEdXJhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bER1cmF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZWUyZGM5MmRkZjE1ZGMyMTc1Y2MzMTlmZWI5MDc3
NjdlNDc5NGI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKQEAgLTAsMCArMSw1NDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKKwor
I2luY2x1ZGUgIkludGxPYmplY3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIlBhcnNlSW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK3N0YXRpYyBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKFZNJiB2bSwgdW5zaWdu
ZWQgaW5kZXgpCit7CisgICAgQVNTRVJUKGluZGV4IDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzKTsK
KyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFRlbXBvcmFsVW5pdD4oaW5kZXgpKSB7CisjZGVmaW5l
IEpTQ19URU1QT1JBTF9EVVJBVElPTl9QUk9QRVJUWV9OQU1FKG5hbWUsIGNhcGl0YWxpemVkTmFt
ZSkgY2FzZSBUZW1wb3JhbFVuaXQ6OmNhcGl0YWxpemVkTmFtZTogcmV0dXJuIHZtLnByb3BlcnR5
TmFtZXMtPm5hbWUjI3M7IAorICAgICAgICBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX1RFTVBPUkFM
X0RVUkFUSU9OX1BST1BFUlRZX05BTUUpCisjdW5kZWYgSlNDX1RFTVBPUkFMX0RVUkFUSU9OX1BS
T1BFUlRZX05BTUUKKyAgICB9Cit9CisKK2NvbnN0IENsYXNzSW5mbyBUZW1wb3JhbER1cmF0aW9u
OjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBvcmFsRHVyYXRpb24pIH07CisKK1RlbXBvcmFsRHVyYXRp
b24qIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdWJkdXJhdGlvbnMmJiBzdWJkdXJhdGlvbnMpCit7CisgICAgYXV0byogb2JqZWN0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxEdXJhdGlvbj4odm0uaGVhcCkpIFRlbXBv
cmFsRHVyYXRpb24odm0sIHN0cnVjdHVyZSwgV1RGTW92ZShzdWJkdXJhdGlvbnMpKTsKKyAgICBv
YmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitTdHJ1
Y3R1cmUqIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworVGVtcG9yYWxEdXJhdGlv
bjo6VGVtcG9yYWxEdXJhdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdWJkdXJh
dGlvbnMmJiBzdWJkdXJhdGlvbnMpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBt
X3N1YmR1cmF0aW9ucyhXVEZNb3ZlKHN1YmR1cmF0aW9ucykpCit7Cit9CisKK3ZvaWQgVGVtcG9y
YWxEdXJhdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworfQorCisvLyBJ
c1ZhbGlkRHVyYXRpb24gKCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0
ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzLCBuYW5vc2Vjb25kcyApCiti
b29sIGlzVmFsaWREdXJhdGlvbihjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMm
IHN1YmR1cmF0aW9ucykKK3sKKyAgICBpbnQgc2lnbiA9IDA7CisgICAgZm9yIChkb3VibGUgdmFs
dWUgOiBzdWJkdXJhdGlvbnMpIHsKKyAgICAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHZhbHVlKSB8
fCAodmFsdWUgPCAwICYmIHNpZ24gPiAwKSB8fCAodmFsdWUgPiAwICYmIHNpZ24gPCAwKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIXNpZ24gJiYgdmFsdWUpCisg
ICAgICAgICAgICBzaWduID0gdmFsdWUgPiAwID8gMSA6IC0xOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCisvLyAgQ3JlYXRlVGVtcG9yYWxEdXJhdGlvbiAoIHllYXJzLCBtb250aHMs
IHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNy
b3NlY29uZHMsIG5hbm9zZWNvbmRzIFsgLCBuZXdUYXJnZXQgXSApCitUZW1wb3JhbER1cmF0aW9u
KiBUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGVJZlZhbGlkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN1YmR1cmF0aW9ucyYmIHN1YmR1cmF0aW9ucywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghaXNWYWxpZER1cmF0aW9uKHN1YmR1
cmF0aW9ucykpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJjYW5ub3QgY3JlYXRlIER1cmF0aW9uIHdpdGggaW5jb25zaXN0ZW50IG51bWVyaWMgdmFsdWVz
Il9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gVGVtcG9yYWxE
dXJhdGlvbjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUgOiBnbG9iYWxPYmplY3Qt
PmR1cmF0aW9uU3RydWN0dXJlKCksIFdURk1vdmUoc3ViZHVyYXRpb25zKSk7Cit9CisKKy8vIER1
cmF0aW9uSGFuZGxlRnJhY3Rpb25zICggZkhvdXJzLCBtaW51dGVzLCBmTWludXRlcywgc2Vjb25k
cywgZlNlY29uZHMsIG1pbGxpc2Vjb25kcywgZk1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzLCBm
TWljcm9zZWNvbmRzLCBuYW5vc2Vjb25kcywgZk5hbm9zZWNvbmRzICkKK3N0YXRpYyB2b2lkIGhh
bmRsZUZyYWN0aW9uKFRlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyYgc3ViZHVyYXRpb25z
LCBpbnQgZmFjdG9yLCBTdHJpbmdWaWV3IGZyYWN0aW9uU3RyaW5nLCBUZW1wb3JhbFVuaXQgZnJh
Y3Rpb25UeXBlKQoreworICAgIEFTU0VSVChmcmFjdGlvblN0cmluZy5sZW5ndGgoKSk7CisgICAg
QVNTRVJUKGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6OkhvdXIgfHwgZnJhY3Rpb25UeXBl
ID09IFRlbXBvcmFsVW5pdDo6TWludXRlIHx8IGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6
OlNlY29uZCk7CisKKyAgICBpZiAoZnJhY3Rpb25UeXBlID09IFRlbXBvcmFsVW5pdDo6U2Vjb25k
KSB7CisgICAgICAgIGF1dG8gcGFkZGVkID0gbWFrZVN0cmluZyhmcmFjdGlvblN0cmluZywgIjAw
MDAwMDAwIik7CisgICAgICAgIHN1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1w
b3JhbFVuaXQ6Ok1pbGxpc2Vjb25kKV0gPSBmYWN0b3IgKiBwYXJzZUludChwYWRkZWQuc3Vic3Ry
aW5nKDAsIDMpLCAxMCk7CisgICAgICAgIHN1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90
PihUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kKV0gPSBmYWN0b3IgKiBwYXJzZUludChwYWRkZWQu
c3Vic3RyaW5nKDMsIDMpLCAxMCk7CisgICAgICAgIHN1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1
aW50OF90PihUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQpXSA9IGZhY3RvciAqIHBhcnNlSW50KHBh
ZGRlZC5zdWJzdHJpbmcoNiwgMyksIDEwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGRvdWJsZSBmcmFjdGlvbiA9IGZhY3RvciAqIHBhcnNlSW50KGZyYWN0aW9uU3RyaW5nLCAxMCkg
LyBzdGQ6OnBvdygxMCwgZnJhY3Rpb25TdHJpbmcubGVuZ3RoKCkpOworICAgIGlmICghZnJhY3Rp
b24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxV
bml0OjpIb3VyKSB7CisgICAgICAgIGZyYWN0aW9uICo9IDYwLjA7CisgICAgICAgIHN1YmR1cmF0
aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSldID0gc3RkOjpm
bG9vcihmcmFjdGlvbik7CisgICAgICAgIGZyYWN0aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9uLCAx
LjApOworICAgICAgICBpZiAoIWZyYWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGZyYWN0aW9uICo9IDYwLjA7CisgICAgc3ViZHVyYXRpb25zW3N0YXRpY19jYXN0PHVp
bnQ4X3Q+KFRlbXBvcmFsVW5pdDo6U2Vjb25kKV0gPSBzdGQ6OmZsb29yKGZyYWN0aW9uKTsKKyAg
ICBmcmFjdGlvbiA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMS4wKTsKKyAgICBpZiAoIWZyYWN0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBmcmFjdGlvbiAqPSAxMDAwLjA7CisgICAgc3ViZHVy
YXRpb25zW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQpXSA9
IHN0ZDo6Zmxvb3IoZnJhY3Rpb24pOworICAgIGZyYWN0aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9u
LCAxLjApOworICAgIGlmICghZnJhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGZyYWN0
aW9uICo9IDEwMDAuMDsKKyAgICBzdWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVt
cG9yYWxVbml0OjpNaWNyb3NlY29uZCldID0gc3RkOjpmbG9vcihmcmFjdGlvbik7CisgICAgZnJh
Y3Rpb24gPSBzdGQ6OmZtb2QoZnJhY3Rpb24sIDEuMCk7CisgICAgaWYgKCFmcmFjdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc3ViZHVyYXRpb25zW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRl
bXBvcmFsVW5pdDo6TmFub3NlY29uZCldID0gc3RkOjpmbG9vcihmcmFjdGlvbiAqIDEwMDAuMCk7
Cit9CisKKy8vIFBhcnNlVGVtcG9yYWxEdXJhdGlvblN0cmluZyAoIGlzb1N0cmluZyApCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RkOjpvcHRpb25hbDxUZW1wb3JhbER1cmF0
aW9uOjpTdWJkdXJhdGlvbnM+IFRlbXBvcmFsRHVyYXRpb246OnBhcnNlKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKK3sKKyAgICAvLyBJU08gODYwMSBkdXJhdGlv
biBzdHJpbmdzIGFyZSBsaWtlICItUDFZMk0zVzREVDVINk03LjEyMzQ1Njc4OVMiLiBOb3RlczoK
KyAgICAvLyAtIGNhc2UgaW5zZW5zaXRpdmUKKyAgICAvLyAtIHNpZ246ICsgLSDiiJIoVSsyMjEy
KQorICAgIC8vIC0gc2VwYXJhdG9yOiAuICwKKyAgICAvLyAtIFQgaXMgcHJlc2VudCBpZmYgdGhl
cmUgaXMgYSB0aW1lIHBhcnQKKyAgICAvLyAtIGludGVncmFsIHBhcnRzIGNhbiBoYXZlIGFueSBu
dW1iZXIgb2YgZGlnaXRzIGJ1dCBmcmFjdGlvbmFsIHBhcnRzIGhhdmUgYXQgbW9zdCA5CisgICAg
Ly8gLSBob3VycyBhbmQgbWludXRlcyBjYW4gaGF2ZSBmcmFjdGlvbmFsIHBhcnRzIHRvbywgYnV0
IG9ubHkgYXMgdGhlIExBU1QgcGFydCBvZiB0aGUgc3RyaW5nCisgICAgaWYgKGJ1ZmZlci5sZW5n
dGhSZW1haW5pbmcoKSA8IDMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBT
dWJkdXJhdGlvbnMgcmVzdWx0IHsgfTsKKworICAgIGludCBmYWN0b3IgPSAxOworICAgIGlmICgq
YnVmZmVyID09ICcrJykKKyAgICAgICAgYnVmZmVyLmFkdmFuY2UoKTsKKyAgICBlbHNlIGlmICgq
YnVmZmVyID09ICctJyB8fCAqYnVmZmVyID09IDB4MjIxMikgeworICAgICAgICBmYWN0b3IgPSAt
MTsKKyAgICAgICAgYnVmZmVyLmFkdmFuY2UoKTsKKyAgICB9CisKKyAgICBpZiAodG9BU0NJSVVw
cGVyKCpidWZmZXIpICE9ICdQJykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAK
KyAgICBidWZmZXIuYWR2YW5jZSgpOworICAgIGZvciAodW5zaWduZWQgZGF0ZVBhcnRJbmRleCA9
IDA7IGRhdGVQYXJ0SW5kZXggPCA0ICYmIGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkg
JiYgaXNBU0NJSURpZ2l0KCpidWZmZXIpOyBidWZmZXIuYWR2YW5jZSgpKSB7CisgICAgICAgIHVu
c2lnbmVkIGRpZ2l0cyA9IDE7CisgICAgICAgIHdoaWxlIChkaWdpdHMgPCBidWZmZXIubGVuZ3Ro
UmVtYWluaW5nKCkgJiYgaXNBU0NJSURpZ2l0KGJ1ZmZlcltkaWdpdHNdKSkKKyAgICAgICAgICAg
IGRpZ2l0cysrOworCisgICAgICAgIGRvdWJsZSBpbnRlZ2VyID0gZmFjdG9yICogcGFyc2VJbnQo
eyBidWZmZXIucG9zaXRpb24oKSwgZGlnaXRzIH0sIDEwKTsKKyAgICAgICAgYnVmZmVyLmFkdmFu
Y2VCeShkaWdpdHMpOworICAgICAgICBpZiAoIWJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIGlmICh0b0FT
Q0lJVXBwZXIoKmJ1ZmZlcikgPT0gJ1knICYmICFkYXRlUGFydEluZGV4KSB7CisgICAgICAgICAg
ICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpZZWFyKV0gPSBpbnRl
Z2VyOworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAo
dG9BU0NJSVVwcGVyKCpidWZmZXIpID09ICdNJyAmJiBkYXRlUGFydEluZGV4IDwgMikgeworICAg
ICAgICAgICAgcmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TW9udGgp
XSA9IGludGVnZXI7CisgICAgICAgICAgICBkYXRlUGFydEluZGV4ID0gMjsKKyAgICAgICAgfSBl
bHNlIGlmICh0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgPT0gJ1cnICYmIGRhdGVQYXJ0SW5kZXggPCAz
KSB7CisgICAgICAgICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0
OjpXZWVrKV0gPSBpbnRlZ2VyOworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDM7CisgICAg
ICAgIH0gZWxzZSBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpID09ICdEJykgeworICAgICAgICAg
ICAgcmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6RGF5KV0gPSBpbnRl
Z2VyOworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDQ7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoIWJ1ZmZlci5o
YXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBp
ZiAoYnVmZmVyLmxlbmd0aFJlbWFpbmluZygpIDwgMyB8fCB0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikg
IT0gJ1QnKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYnVmZmVyLmFkdmFu
Y2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHRpbWVQYXJ0SW5kZXggPSAwOyB0aW1lUGFydEluZGV4
IDwgMyAmJiBidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgq
YnVmZmVyKTsgYnVmZmVyLmFkdmFuY2UoKSkgeworICAgICAgICB1bnNpZ25lZCBkaWdpdHMgPSAx
OworICAgICAgICB3aGlsZSAoZGlnaXRzIDwgYnVmZmVyLmxlbmd0aFJlbWFpbmluZygpICYmIGlz
QVNDSUlEaWdpdChidWZmZXJbZGlnaXRzXSkpCisgICAgICAgICAgICBkaWdpdHMrKzsKKworICAg
ICAgICBkb3VibGUgaW50ZWdlciA9IGZhY3RvciAqIHBhcnNlSW50KHsgYnVmZmVyLnBvc2l0aW9u
KCksIGRpZ2l0cyB9LCAxMCk7CisgICAgICAgIGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRzKTsKKyAg
ICAgICAgaWYgKCFidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKQorICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBTdHJpbmdWaWV3IGZyYWN0aW9uYWxQYXJ0
OworICAgICAgICBpZiAoKmJ1ZmZlciA9PSAnLicgfHwgKmJ1ZmZlciA9PSAnLCcpIHsKKyAgICAg
ICAgICAgIGJ1ZmZlci5hZHZhbmNlKCk7CisgICAgICAgICAgICBkaWdpdHMgPSAwOworICAgICAg
ICAgICAgd2hpbGUgKGRpZ2l0cyA8IGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSAmJiBpc0FTQ0lJ
RGlnaXQoYnVmZmVyW2RpZ2l0c10pKQorICAgICAgICAgICAgICAgIGRpZ2l0cysrOworICAgICAg
ICAgICAgaWYgKCFkaWdpdHMgfHwgZGlnaXRzID4gOSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgICAgICAgICBmcmFjdGlvbmFsUGFydCA9IHsgYnVmZmVyLnBv
c2l0aW9uKCksIGRpZ2l0cyB9OworICAgICAgICAgICAgYnVmZmVyLmFkdmFuY2VCeShkaWdpdHMp
OworICAgICAgICAgICAgaWYgKCFidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpID09ICdIJyAmJiAhdGltZVBhcnRJbmRleCkgeworICAg
ICAgICAgICAgcmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6SG91cild
ID0gaW50ZWdlcjsKKyAgICAgICAgICAgIGlmIChmcmFjdGlvbmFsUGFydCkgeworICAgICAgICAg
ICAgICAgIGhhbmRsZUZyYWN0aW9uKHJlc3VsdCwgZmFjdG9yLCBmcmFjdGlvbmFsUGFydCwgVGVt
cG9yYWxVbml0OjpIb3VyKTsKKyAgICAgICAgICAgICAgICB0aW1lUGFydEluZGV4ID0gMzsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRpbWVQYXJ0SW5kZXggPSAxOworICAg
ICAgICB9IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnTScgJiYgdGltZVBhcnRJ
bmRleCA8IDIpIHsKKyAgICAgICAgICAgIHJlc3VsdFtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1w
b3JhbFVuaXQ6Ok1pbnV0ZSldID0gaW50ZWdlcjsKKyAgICAgICAgICAgIGlmIChmcmFjdGlvbmFs
UGFydCkgeworICAgICAgICAgICAgICAgIGhhbmRsZUZyYWN0aW9uKHJlc3VsdCwgZmFjdG9yLCBm
cmFjdGlvbmFsUGFydCwgVGVtcG9yYWxVbml0OjpNaW51dGUpOworICAgICAgICAgICAgICAgIHRp
bWVQYXJ0SW5kZXggPSAzOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGlt
ZVBhcnRJbmRleCA9IDI7CisgICAgICAgIH0gZWxzZSBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIp
ID09ICdTJykgeworICAgICAgICAgICAgcmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBv
cmFsVW5pdDo6U2Vjb25kKV0gPSBpbnRlZ2VyOworICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxQ
YXJ0KQorICAgICAgICAgICAgICAgIGhhbmRsZUZyYWN0aW9uKHJlc3VsdCwgZmFjdG9yLCBmcmFj
dGlvbmFsUGFydCwgVGVtcG9yYWxVbml0OjpTZWNvbmQpOworICAgICAgICAgICAgdGltZVBhcnRJ
bmRleCA9IDM7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9CisKKyAgICBpZiAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8v
IFRvVGVtcG9yYWxEdXJhdGlvblJlY29yZCAoIHRlbXBvcmFsRHVyYXRpb25MaWtlICkKK1RlbXBv
cmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjp0b1N1YmR1cmF0aW9u
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogZHVyYXRpb25MaWtlKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBBU1NFUlQoIWR1cmF0aW9uTGlrZS0+aW5oZXJp
dHM8VGVtcG9yYWxEdXJhdGlvbj4odm0pKTsKKworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQ7Cisg
ICAgYm9vbCBoYXNSZWxldmFudFByb3BlcnR5ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1iZXJPZlRlbXBvcmFsVW5pdHM7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gZHVyYXRpb25MaWtlLT5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUodm0sIGkp
KTsKKworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICAgICAgcmVz
dWx0W2ldID0gMDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
aGFzUmVsZXZhbnRQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1
ZS50b051bWJlcihnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgICAgIGlmICghaXNJbnRlZ2VyKG51bWJlcikpIHsKKyAgICAgICAg
ICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRp
b24gcHJvcGVydGllcyBtdXN0IGJlIGludGVnZXJzIl9zKTsKKyAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgICAgIH0KKworICAgICAgICByZXN1bHRbaV0gPSBudW1iZXI7CisgICAgfQorCisg
ICAgaWYgKCFoYXNSZWxldmFudFByb3BlcnR5KSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJvYmplY3QgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBUZW1w
b3JhbC5EdXJhdGlvbiBwcm9wZXJ0eSJfcyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gVG9UZW1wb3JhbER1cmF0aW9uICggaXRlbSAp
CitUZW1wb3JhbER1cmF0aW9uKiBUZW1wb3JhbER1cmF0aW9uOjp0b0R1cmF0aW9uKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgaXRlbVZhbHVlKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmluaGVyaXRzPFRlbXBvcmFsRHVyYXRpb24+KHZt
KSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4oaXRlbVZhbHVlKTsK
KworICAgIGlmIChpdGVtVmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwg
dG9TdWJkdXJhdGlvbnMoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChpdGVtVmFsdWUpKSkpOworCisg
ICAgU3RyaW5nIHN0cmluZyA9IGl0ZW1WYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgYXV0byBwYXJz
ZWRTdWJkdXJhdGlvbnMgPSByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRv
IGJ1ZmZlcikgLT4gc3RkOjpvcHRpb25hbDxTdWJkdXJhdGlvbnM+IHsKKyAgICAgICAgcmV0dXJu
IHBhcnNlKGJ1ZmZlcik7CisgICAgfSk7CisgICAgaWYgKCFwYXJzZWRTdWJkdXJhdGlvbnMpIHsK
KyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJjb3VsZCBub3Qg
cGFyc2UgRHVyYXRpb24gc3RyaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBUZW1wb3JhbER1cmF0aW9uOjpjcmVh
dGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgV1RGTW92ZShwYXJzZWRTdWJkdXJhdGlvbnMudmFsdWUo
KSkpKTsKK30KKworVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6ZnJvbShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZW1WYWx1ZSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmluaGVyaXRzPFRl
bXBvcmFsRHVyYXRpb24+KHZtKSkgeworICAgICAgICBTdWJkdXJhdGlvbnMgY2xvbmVkID0ganND
YXN0PFRlbXBvcmFsRHVyYXRpb24qPihpdGVtVmFsdWUpLT5tX3N1YmR1cmF0aW9uczsKKyAgICAg
ICAgcmV0dXJuIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJh
dGlvblN0cnVjdHVyZSgpLCBXVEZNb3ZlKGNsb25lZCkpOworICAgIH0KKworICAgIHJldHVybiB0
b0R1cmF0aW9uKGdsb2JhbE9iamVjdCwgaXRlbVZhbHVlKTsKK30KKworaW50IFRlbXBvcmFsRHVy
YXRpb246OnNpZ24oKSBjb25zdAoreworICAgIGZvciAoZG91YmxlIHZhbHVlIDogbV9zdWJkdXJh
dGlvbnMpIHsKKyAgICAgICAgaWYgKHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsK
KworICAgICAgICBpZiAodmFsdWUgPiAwKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1w
b3JhbER1cmF0aW9uOjp3aXRoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
KiBkdXJhdGlvbkxpa2UpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN1YmR1
cmF0aW9ucyByZXN1bHQ7CisgICAgYm9vbCBoYXNSZWxldmFudFByb3BlcnR5ID0gZmFsc2U7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlRlbXBvcmFsVW5pdHM7IGkrKykgewor
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZHVyYXRpb25MaWtlLT5nZXQoZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUodm0sIGkpKTsKKworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSkg
eworICAgICAgICAgICAgcmVzdWx0W2ldID0gbV9zdWJkdXJhdGlvbnNbaV07CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGhhc1JlbGV2YW50UHJvcGVydHkgPSB0
cnVlOworICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZS50b051bWJlcihnbG9iYWxPYmplY3QpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIGlmICgh
aXNJbnRlZ2VyKHJlc3VsdFtpXSkpIHsKKyAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydGllcyBtdXN0IGJlIGlu
dGVnZXJzIl9zKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoIWhhc1JlbGV2YW50UHJvcGVydHkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIm9iamVjdCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIFRl
bXBvcmFsLkR1cmF0aW9uIHByb3BlcnR5Il9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlv
bnMgVGVtcG9yYWxEdXJhdGlvbjo6bmVnYXRlZCgpIGNvbnN0Cit7CisgICAgU3ViZHVyYXRpb25z
IHJlc3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0
czsgaSsrKQorICAgICAgICByZXN1bHRbaV0gPSAtbV9zdWJkdXJhdGlvbnNbaV07CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zIFRlbXBvcmFs
RHVyYXRpb246OmFicygpIGNvbnN0Cit7CisgICAgU3ViZHVyYXRpb25zIHJlc3VsdDsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsgaSsrKQorICAgICAg
ICByZXN1bHRbaV0gPSBzdGQ6OmFicyhtX3N1YmR1cmF0aW9uc1tpXSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworLy8gRklYTUU6IEltcGxlbWVudCByZWxhdGl2ZVRvIHBhcmFtZXRlciBhZnRl
ciBpbXBsZW1lbnRpbmcgRGF0ZVRpbWUgY2xhc3Nlcy4KKy8vIFJvdW5kRHVyYXRpb24gKCB5ZWFy
cywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vj
b25kcywgbWljcm9zZWNvbmRzLCBuYW5vc2Vjb25kcywgaW5jcmVtZW50LCB1bml0LCByb3VuZGlu
Z01vZGUgWyAsIHJlbGF0aXZlVG8gXSApCitzdGQ6OnBhaXI8VGVtcG9yYWxEdXJhdGlvbjo6U3Vi
ZHVyYXRpb25zLCBkb3VibGU+IFRlbXBvcmFsRHVyYXRpb246OnJvdW5kKFByZWNpc2lvbkRhdGEg
ZGF0YSwgUm91bmRpbmdNb2RlIG1vZGUpIGNvbnN0Cit7CisgICAgLy8gdGVtcG9yYXJ5IQorICAg
IEFTU0VSVChzdGF0aWNfY2FzdDx1aW50OF90PihkYXRhLnVuaXQpID49IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KFRlbXBvcmFsVW5pdDo6U2Vjb25kKSk7CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0
ID0gbV9zdWJkdXJhdGlvbnM7CisgICAgZG91YmxlIHJlbWFpbmRlciA9IDA7CisKKyAgICBzd2l0
Y2ggKGRhdGEudW5pdCkgeworICAgIGNhc2UgVGVtcG9yYWxVbml0OjpTZWNvbmQ6IHsKKyAgICAg
ICAgZG91YmxlIGZyYWN0aW9uYWxTZWNvbmRzID0gc2Vjb25kcygpICsgbWlsbGlzZWNvbmRzKCkg
KiAxZS0zICsgbWljcm9zZWNvbmRzKCkgKiAxZS02ICsgbmFub3NlY29uZHMoKSAqIDFlLTk7Cisg
ICAgICAgIGRvdWJsZSBuZXdTZWNvbmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlv
bmFsU2Vjb25kcywgZGF0YS5pbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBm
cmFjdGlvbmFsU2Vjb25kcyAtIG5ld1NlY29uZHM7CisgICAgICAgIHJlc3VsdFtzdGF0aWNfY2Fz
dDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OlNlY29uZCldID0gbmV3U2Vjb25kczsKKyAgICAgICAg
cmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQpXSA9
IDA7CisgICAgICAgIHJlc3VsdFtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1p
Y3Jvc2Vjb25kKV0gPSAwOworICAgICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVt
cG9yYWxVbml0OjpOYW5vc2Vjb25kKV0gPSAwOworICAgIH0gYnJlYWs7CisgICAgY2FzZSBUZW1w
b3JhbFVuaXQ6Ok1pbGxpc2Vjb25kOiB7CisgICAgICAgIGRvdWJsZSBmcmFjdGlvbmFsTWlsbGlz
ZWNvbmRzID0gbWlsbGlzZWNvbmRzKCkgKyBtaWNyb3NlY29uZHMoKSAqIDFlLTMgKyBuYW5vc2Vj
b25kcygpICogMWUtNjsKKyAgICAgICAgZG91YmxlIG5ld01pbGxpc2Vjb25kcyA9IHJvdW5kTnVt
YmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbE1pbGxpc2Vjb25kcywgZGF0YS5pbmNyZW1lbnQsIG1v
ZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzIC0gbmV3TWls
bGlzZWNvbmRzOworICAgICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxV
bml0OjpNaWxsaXNlY29uZCldID0gbmV3TWlsbGlzZWNvbmRzOworICAgICAgICByZXN1bHRbc3Rh
dGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCldID0gMDsKKyAgICAg
ICAgcmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZCld
ID0gMDsKKyAgICB9IGJyZWFrOworICAgIGNhc2UgVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZDog
eworICAgICAgICBkb3VibGUgZnJhY3Rpb25hbE1pY3Jvc2Vjb25kcyA9IG1pY3Jvc2Vjb25kcygp
ICsgbmFub3NlY29uZHMoKSAqIDFlLTM7CisgICAgICAgIGRvdWJsZSBuZXdNaWNyb3NlY29uZHMg
PSByb3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0aW9uYWxNaWNyb3NlY29uZHMsIGRhdGEuaW5j
cmVtZW50LCBtb2RlKTsKKyAgICAgICAgcmVtYWluZGVyID0gZnJhY3Rpb25hbE1pY3Jvc2Vjb25k
cyAtIG5ld01pY3Jvc2Vjb25kczsKKyAgICAgICAgcmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+
KFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQpXSA9IG5ld01pY3Jvc2Vjb25kczsKKyAgICAgICAg
cmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZCldID0g
MDsKKyAgICB9IGJyZWFrOworICAgIGNhc2UgVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kOiB7Cisg
ICAgICAgIGRvdWJsZSBuZXdOYW5vc2Vjb25kcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQobmFu
b3NlY29uZHMoKSwgZGF0YS5pbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBu
YW5vc2Vjb25kcygpIC0gbmV3TmFub3NlY29uZHM7CisgICAgICAgIHJlc3VsdFtzdGF0aWNfY2Fz
dDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQpXSA9IG5ld05hbm9zZWNvbmRzOwor
ICAgIH0gYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKHJlc3VsdCwgcmVtYWluZGVyKTsKK30KKworU3RyaW5nIFRlbXBvcmFsRHVyYXRpb246OnRv
U3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3B0aW9uc1ZhbHVl
KSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogb3B0aW9ucyA9
IGludGxHZXRPcHRpb25zT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKCFvcHRpb25zKQorICAg
ICAgICByZXR1cm4gdG9TdHJpbmcoKTsKKworICAgIFByZWNpc2lvbkRhdGEgZGF0YSA9IHNlY29u
ZHNTdHJpbmdQcmVjaXNpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgYXV0byByb3VuZGluZ01vZGUgPSBpbnRsT3B0
aW9uPFJvdW5kaW5nTW9kZT4oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVz
LT5yb3VuZGluZ01vZGUsCisgICAgICAgIHsgeyAiY2VpbCJfcywgUm91bmRpbmdNb2RlOjpDZWls
IH0sIHsgImZsb29yIl9zLCBSb3VuZGluZ01vZGU6OkZsb29yIH0sIHsgInRydW5jIl9zLCBSb3Vu
ZGluZ01vZGU6OlRydW5jIH0sIHsgImhhbGZFeHBhbmQiX3MsIFJvdW5kaW5nTW9kZTo6SGFsZkV4
cGFuZCB9IH0sCisgICAgICAgICJyb3VuZGluZ01vZGUgbXVzdCBiZSBlaXRoZXIgXCJjZWlsXCIs
IFwiZmxvb3JcIiwgXCJ0cnVuY1wiLCBvciBcImhhbGZFeHBhbmRcIiJfcywgUm91bmRpbmdNb2Rl
OjpUcnVuYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIC8v
IE5vIG5lZWQgdG8gbWFrZSBhIG5ldyBvYmplY3QgaWYgd2Ugd2VyZSBnaXZlbiBleHBsaWNpdCBk
ZWZhdWx0cy4KKyAgICBpZiAoIWRhdGEucHJlY2lzaW9uICYmIHJvdW5kaW5nTW9kZSA9PSBSb3Vu
ZGluZ01vZGU6OlRydW5jKQorICAgICAgICByZXR1cm4gdG9TdHJpbmcoKTsKKworICAgIGF1dG8g
cm91bmRlZCA9IFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJh
dGlvblN0cnVjdHVyZSgpLCB0aGlzLT5yb3VuZChkYXRhLCByb3VuZGluZ01vZGUpLmZpcnN0KTsK
KyAgICByZXR1cm4gcm91bmRlZC0+dG9TdHJpbmcoZGF0YS5wcmVjaXNpb24pOworfQorCisvLyBU
ZW1wb3JhbER1cmF0aW9uVG9TdHJpbmcgKCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91
cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzLCBuYW5vc2Vj
b25kcywgcHJlY2lzaW9uICkKK1N0cmluZyBUZW1wb3JhbER1cmF0aW9uOjp0b1N0cmluZyhzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiBwcmVjaXNpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFwcmVj
aXNpb24gfHwgcHJlY2lzaW9uLnZhbHVlKCkgPCAxMCk7CisKKyAgICBhdXRvIGJhbGFuY2VkTWlj
cm9zZWNvbmRzID0gbWljcm9zZWNvbmRzKCkgKyBzdGQ6OnRydW5jKG5hbm9zZWNvbmRzKCkgLyAx
MDAwLjApOworICAgIGF1dG8gYmFsYW5jZWROYW5vc2Vjb25kcyA9IHN0ZDo6Zm1vZChuYW5vc2Vj
b25kcygpLCAxMDAwLjApOworICAgIGF1dG8gYmFsYW5jZWRNaWxsaXNlY29uZHMgPSBtaWxsaXNl
Y29uZHMoKSArIHN0ZDo6dHJ1bmMoYmFsYW5jZWRNaWNyb3NlY29uZHMgLyAxMDAwLjApOworICAg
IGJhbGFuY2VkTWljcm9zZWNvbmRzID0gc3RkOjpmbW9kKGJhbGFuY2VkTWljcm9zZWNvbmRzLCAx
MDAwLjApOworICAgIGF1dG8gYmFsYW5jZWRTZWNvbmRzID0gc2Vjb25kcygpICsgc3RkOjp0cnVu
YyhiYWxhbmNlZE1pbGxpc2Vjb25kcyAvIDEwMDAuMCk7CisgICAgYmFsYW5jZWRNaWxsaXNlY29u
ZHMgPSBzdGQ6OmZtb2QoYmFsYW5jZWRNaWxsaXNlY29uZHMsIDEwMDAuMCk7CisKKyAgICAvLyB0
ZW1wb3JhcnkgaGFjayEgcGVuZGluZyBzcGVjIGRpc2N1c3Npb24KKyAgICBhdXRvIGZvcm1hdElu
dGVnZXIgPSBbXShkb3VibGUgdmFsdWUpIC0+IGRvdWJsZSB7CisgICAgICAgIGRvdWJsZSBhYnNW
YWx1ZSA9IHN0ZDo6YWJzKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFVOTElLRUxZKGFic1ZhbHVl
ID4gbWF4U2FmZUludGVnZXIoKSkgPyBtYXhTYWZlSW50ZWdlcigpIDogYWJzVmFsdWU7CisgICAg
fTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGF1dG8gc2lnbiA9IHRoaXMt
PnNpZ24oKTsKKyAgICBpZiAoc2lnbiA8IDApCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCctJyk7
CisKKyAgICBidWlsZGVyLmFwcGVuZCgnUCcpOworICAgIGlmICh5ZWFycygpKQorICAgICAgICBi
dWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHllYXJzKCkpLCAnWScpOworICAgIGlmIChtb250
aHMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihtb250aHMoKSksICdN
Jyk7CisgICAgaWYgKHdlZWtzKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVn
ZXIod2Vla3MoKSksICdXJyk7CisgICAgaWYgKGRheXMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoZm9ybWF0SW50ZWdlcihkYXlzKCkpLCAnRCcpOworCisgICAgLy8gVGhlIHplcm8gdmFsdWUg
aXMgZGlzcGxheWVkIGluIHNlY29uZHMuCisgICAgYXV0byB1c2VzU2Vjb25kcyA9IGJhbGFuY2Vk
U2Vjb25kcyB8fCBiYWxhbmNlZE1pbGxpc2Vjb25kcyB8fCBiYWxhbmNlZE1pY3Jvc2Vjb25kcyB8
fCBiYWxhbmNlZE5hbm9zZWNvbmRzIHx8ICFzaWduOworICAgIGlmICghaG91cnMoKSAmJiAhbWlu
dXRlcygpICYmICF1c2VzU2Vjb25kcykKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCdUJyk7CisgICAgaWYgKGhvdXJzKCkpCisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoaG91cnMoKSksICdIJyk7CisgICAgaWYgKG1p
bnV0ZXMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihtaW51dGVzKCkp
LCAnTScpOworICAgIGlmICh1c2VzU2Vjb25kcykgeworICAgICAgICBidWlsZGVyLmFwcGVuZChm
b3JtYXRJbnRlZ2VyKGJhbGFuY2VkU2Vjb25kcykpOworCisgICAgICAgIGF1dG8gZnJhY3Rpb24g
PSBzdGQ6OmFicyhiYWxhbmNlZE1pbGxpc2Vjb25kcykgKiAxZTYgKyBzdGQ6OmFicyhiYWxhbmNl
ZE1pY3Jvc2Vjb25kcykgKiAxZTMgKyBzdGQ6OmFicyhiYWxhbmNlZE5hbm9zZWNvbmRzKTsKKyAg
ICAgICAgaWYgKCghcHJlY2lzaW9uICYmIGZyYWN0aW9uKSB8fCAocHJlY2lzaW9uICYmIHByZWNp
c2lvbi52YWx1ZSgpKSkgeworICAgICAgICAgICAgYXV0byBwYWRkZWQgPSBtYWtlU3RyaW5nKCcu
JywgcGFkKCcwJywgOSwgZnJhY3Rpb24pKTsKKyAgICAgICAgICAgIGlmIChwcmVjaXNpb24pCisg
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFkZGVkLmxlZnQocGFkZGVkLmxlbmd0aCgp
IC0gKDkgLSBwcmVjaXNpb24udmFsdWUoKSkpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGF1dG8gbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzID0gcGFkZGVkLmxlbmd0
aCgpOworICAgICAgICAgICAgICAgIHdoaWxlIChwYWRkZWRbbGVuZ3RoV2l0aG91dFRyYWlsaW5n
WmVyb2VzIC0gMV0gPT0gJzAnKQorICAgICAgICAgICAgICAgICAgICBsZW5ndGhXaXRob3V0VHJh
aWxpbmdaZXJvZXMtLTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChwYWRkZWQubGVm
dChsZW5ndGhXaXRob3V0VHJhaWxpbmdaZXJvZXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdTJyk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1
aWxkZXIudG9TdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzll
YWMwNzBmMmYwNjI2NjdjZjJjNGRiZTI0YzNmMTAzZDg5ODY2MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaApAQCAtMCww
ICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVt
cG9yYWxPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgVGVtcG9yYWxEdXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2Jq
ZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgorICAgIHN0
YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZtLnRlbXBvcmFsRHVyYXRpb25TcGFjZTxtb2RlPigpOworICAgIH0KKworICAgIHVzaW5n
IFN1YmR1cmF0aW9ucyA9IHN0ZDo6YXJyYXk8ZG91YmxlLCBudW1iZXJPZlRlbXBvcmFsVW5pdHM+
OworCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb24qIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSos
IFN1YmR1cmF0aW9ucyYmKTsKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvbiogY3JlYXRlSWZW
YWxpZChKU0dsb2JhbE9iamVjdCosIFN1YmR1cmF0aW9ucyYmLCBTdHJ1Y3R1cmUqID0gbnVsbHB0
cik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBUZW1w
b3JhbER1cmF0aW9uKiB0b0R1cmF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisgICAg
c3RhdGljIFRlbXBvcmFsRHVyYXRpb24qIGZyb20oSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsK
KworI2RlZmluZSBKU0NfREVGSU5FX1RFTVBPUkFMX0RVUkFUSU9OX0FDQ0VTU09SKG5hbWUsIGNh
cGl0YWxpemVkTmFtZSkgXAorICAgIGRvdWJsZSBuYW1lIyNzKCkgY29uc3QgeyByZXR1cm4gbV9z
dWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpjYXBpdGFsaXpl
ZE5hbWUpXTsgfQorICAgIEpTQ19URU1QT1JBTF9VTklUUyhKU0NfREVGSU5FX1RFTVBPUkFMX0RV
UkFUSU9OX0FDQ0VTU09SKTsKKyN1bmRlZiBKU0NfREVGSU5FX1RFTVBPUkFMX0RVUkFUSU9OX0FD
Q0VTU09SCisKKyAgICBpbnQgc2lnbigpIGNvbnN0OworCisgICAgU3ViZHVyYXRpb25zIHdpdGgo
SlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogZHVyYXRpb25MaWtlKSBjb25zdDsKKyAgICBTdWJk
dXJhdGlvbnMgbmVnYXRlZCgpIGNvbnN0OworICAgIFN1YmR1cmF0aW9ucyBhYnMoKSBjb25zdDsK
KworICAgIHN0ZDo6cGFpcjxTdWJkdXJhdGlvbnMsIGRvdWJsZT4gcm91bmQoUHJlY2lzaW9uRGF0
YSwgUm91bmRpbmdNb2RlKSBjb25zdDsKKworICAgIFN0cmluZyB0b1N0cmluZyhKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgb3B0aW9ucykgY29uc3Q7CisgICAgU3RyaW5nIHRvU3RyaW5nKHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHByZWNpc2lvbiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgVGVtcG9yYWxEdXJhdGlvbihWTSYsIFN0cnVjdHVyZSosIFN1YmR1cmF0aW9u
cyYmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTdWJkdXJhdGlvbnM+IHBh
cnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICBzdGF0aWMgU3Vi
ZHVyYXRpb25zIHRvU3ViZHVyYXRpb25zKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKTsKKwor
ICAgIFN1YmR1cmF0aW9ucyBtX3N1YmR1cmF0aW9uczsKK307CisKK2Jvb2wgaXNWYWxpZER1cmF0
aW9uKGNvbnN0IFRlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyYpOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViNTEwNGU2ZWY4
OTU3YWY5NmZiNmM3ZjNiOGNmMjJjNWM1NGEwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCkBA
IC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCisjaW5jbHVkZSAiVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcik7
CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3RvckZ1bmNGcm9tKTsKKworfQorCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbkNvbnN0
cnVjdG9yLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19p
bmZvLCAmdGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yVGFibGUsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKSB9OworCisvKiBTb3VyY2Ug
Zm9yIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5sdXQuaAorQGJlZ2luIHRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3RvclRhYmxlCisgIGZyb20gICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlv
bkNvbnN0cnVjdG9yRnVuY0Zyb20gICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorQGVu
ZAorKi8KKworVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKiBUZW1wb3JhbER1cmF0aW9uQ29u
c3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlKiBkdXJhdGlvblByb3RvdHlwZSkKK3sKKyAgICBhdXRvKiBjb25zdHJ1
Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3Rvcj4odm0uaGVhcCkpIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJl
KTsKKyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIGR1cmF0aW9uUHJvdG90eXBl
KTsKKyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1N0cnVjdHVyZSogVGVtcG9yYWxEdXJh
dGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1
bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihjYWxsVGVtcG9yYWxEdXJhdGlvbik7CitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RUZW1wb3JhbER1cmF0aW9uKTsKKworVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY2FsbFRl
bXBvcmFsRHVyYXRpb24sIGNvbnN0cnVjdFRlbXBvcmFsRHVyYXRpb24pCit7Cit9CisKK3ZvaWQg
VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBlKQoreworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtLCAwLCAiRHVyYXRpb24iX3MsIFByb3BlcnR5QWRkaXRpb25Nb2RlOjpX
aXRob3V0U3RydWN0dXJlVHJhbnNpdGlvbik7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgZHVyYXRpb25Qcm90b3R5cGUsIFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRl
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBkdXJhdGlvblByb3RvdHlwZS0+
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVj
dG9yLCB0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RUZW1wb3JhbER1
cmF0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogbmV3VGFyZ2V0ID0g
YXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJFKHZtLCBkdXJhdGlvblN0cnVjdHVyZSwgbmV3
VGFyZ2V0LCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMgc3ViZHVy
YXRpb25zIHsgfTsKKyAgICBhdXRvIGNvdW50ID0gc3RkOjptaW48c2l6ZV90PihjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgc3ViZHVyYXRpb25zW2ldID0gY2Fs
bEZyYW1lLT5hcmd1bWVudChpKS50b0ludGVnZXJPckluZmluaXR5KGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgaWYgKCFz
dGQ6OmlzZmluaXRlKHN1YmR1cmF0aW9uc1tpXSkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dW
TVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uIHByb3Bl
cnRpZXMgbXVzdCBiZSBmaW5pdGUiX3MpOworICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxpZChnbG9iYWxPYmplY3QsIFdURk1v
dmUoc3ViZHVyYXRpb25zKSwgc3RydWN0dXJlKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihjYWxsVGVtcG9yYWxEdXJhdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkR1cmF0aW9uIikpOworfQorCitKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yRnVuY0Zyb20sIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpmcm9tKGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlv
bkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQyNDVhMzEwNjk1YWNkMzViNWQ2YWE1NmU5MDA0
ZjdlM2I3MDM4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOwor
CitjbGFzcyBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IgZmluYWwgOiBwdWJsaWMgSW50ZXJu
YWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEludGVybmFsRnVuY3Rpb247
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKworICAgIHN0YXRpYyBUZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOwor
Citwcml2YXRlOgorICAgIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVy
ZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlKik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxE
dXJhdGlvbkNvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwMTdmYWVmMzMyMTY1YjI2ZDM5
MTljOTY3NDNmOTc4MGUzOGQ2NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcApAQCAtMCwwICsxLDMz
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jV2l0
aCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlRnVuY05lZ2F0ZWQpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNBYnMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb1N0cmluZyk7CitzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1Rv
SlNPTik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlRnVuY1RvTG9jYWxlU3RyaW5nKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVmFsdWVPZik7CitzdGF0aWMgSlND
X0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyWWVh
cnMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUdldHRlck1vbnRocyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyV2Vla3MpOworc3RhdGljIEpTQ19ERUNMQVJF
X0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckRheXMpOworc3Rh
dGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdl
dHRlckhvdXJzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVHZXR0ZXJNaW51dGVzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJTZWNvbmRzKTsKK3N0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJN
aWxsaXNlY29uZHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUdldHRlck1pY3Jvc2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVf
Q1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTmFub3NlY29uZHMp
Oworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUdldHRlclNpZ24pOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZUdldHRlckJsYW5rKTsKKworfQorCisjaW5jbHVkZSAiVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZS5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENs
YXNzSW5mbyBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZW1wb3JhbC5E
dXJhdGlvbiIsICZCYXNlOjpzX2luZm8sICZkdXJhdGlvblByb3RvdHlwZVRhYmxlLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUpIH07CisKKy8q
IFNvdXJjZSBmb3IgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5sdXQuaAorQGJlZ2luIGR1cmF0
aW9uUHJvdG90eXBlVGFibGUKKyAgd2l0aCAgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlRnVuY1dpdGggICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgIG5lZ2F0
ZWQgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNOZWdhdGVkICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gMAorICBhYnMgICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGVGdW5jQWJzICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAg
dG9TdHJpbmcgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nICAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIHRvSlNPTiAgICAgICAgICAgVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUZ1bmNUb0pTT04gICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
MAorICB0b0xvY2FsZVN0cmluZyAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9Mb2Nh
bGVTdHJpbmcgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgdmFsdWVPZiAgICAgICAgICBUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1ZhbHVlT2YgICAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAwCisgIHllYXJzICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRl
clllYXJzICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbW9u
dGhzICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTW9udGhzICAgICAg
ICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICB3ZWVrcyAgICAgICAgICAg
IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJXZWVrcyAgICAgICAgICAgIERvbnRFbnVt
fFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIGRheXMgICAgICAgICAgICAgVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUdldHRlckRheXMgICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3Vz
dG9tQWNjZXNzb3IKKyAgaG91cnMgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
R2V0dGVySG91cnMgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3Nvcgor
ICBtaW51dGVzICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaW51dGVz
ICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIHNlY29uZHMgICAg
ICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNlY29uZHMgICAgICAgICAgRG9u
dEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbWlsbGlzZWNvbmRzICAgICBUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWlsbGlzZWNvbmRzICAgICBEb250RW51bXxSZWFkT25s
eXxDdXN0b21BY2Nlc3NvcgorICBtaWNyb3NlY29uZHMgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJNaWNyb3NlY29uZHMgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vz
c29yCisgIG5hbm9zZWNvbmRzICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck5h
bm9zZWNvbmRzICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgc2lnbiAg
ICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2lnbiAgICAgICAgICAg
ICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBibGFuayAgICAgICAgICAgIFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJCbGFuayAgICAgICAgICAgIERvbnRFbnVtfFJl
YWRPbmx5fEN1c3RvbUFjY2Vzc29yCitAZW5kCisqLworCitUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK3sKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZTo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit2b2lkIFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICBK
U0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jV2l0aCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFs
RHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlv
bikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS53aXRoIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mg
bm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKyAgICAKKyAgICBK
U1ZhbHVlIGR1cmF0aW9uTGlrZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgaWYgKCFk
dXJhdGlvbkxpa2UuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIkZpcnN0IGFyZ3VtZW50IHRvIFRlbXBvcmFsLkR1cmF0aW9u
LnByb3RvdHlwZS53aXRoIG11c3QgYmUgYW4gb2JqZWN0Il9zKTsKKworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlm
VmFsaWQoZ2xvYmFsT2JqZWN0LCBkdXJhdGlvbi0+d2l0aChnbG9iYWxPYmplY3QsIGFzT2JqZWN0
KGR1cmF0aW9uTGlrZSkpKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZUZ1bmNOZWdhdGVkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRp
b24ucHJvdG90eXBlLm5lZ2F0ZWQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0
IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+ZHVyYXRpb25T
dHJ1Y3R1cmUoKSwgZHVyYXRpb24tPm5lZ2F0ZWQoKSkpOworfQorCitKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNBYnMsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0
aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1w
b3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYWJzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFu
IG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmR1
cmF0aW9uU3RydWN0dXJlKCksIGR1cmF0aW9uLT5hYnMoKSkpOworfQorCitKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb1N0cmluZywgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBv
cmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJh
dGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b1N0cmluZyBjYWxsZWQgb24gdmFsdWUg
dGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwg
ZHVyYXRpb24tPnRvU3RyaW5nKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkp
KSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlRnVuY1RvSlNPTiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24g
PSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b0pT
T04gY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEg
RHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwg
ZHVyYXRpb24tPnRvU3RyaW5nKCkpKTsKK30KKworLy8gVGhpcyB3aWxsIGJlIHBhcnQgb2YgdGhl
IEVDTUEtNDAyIEludGwuRHVyYXRpb25Gb3JtYXQgcHJvcG9zYWw7IHVudGlsIHRoZW4sIHdlIGp1
c3QgZm9sbG93IEVDTUEtMjYyIGluIG1pbWlja2luZyB0b0pTT04uCitKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb0xvY2FsZVN0cmluZywgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRl
bXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFk
dXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyBjYWxsZWQg
b24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJf
cyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBkdXJhdGlvbi0+
dG9TdHJpbmcoKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUZ1bmNWYWx1ZU9mLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5
cGUudmFsdWVPZiBtdXN0IG5vdCBiZSBjYWxsZWQiX3MpOworfQorCitKU0NfREVGSU5FX0NVU1RP
TV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclllYXJzLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHlu
YW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS55ZWFycyBj
YWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJh
dGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9u
LT55ZWFycygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlR2V0dGVyTW9udGhzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJh
dGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlv
bikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5tb250aHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQn
cyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+bW9udGhzKCkpKTsKK30KKwor
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJX
ZWVrcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byog
ZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5w
cm90b3R5cGUud2Vla3MgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRp
YWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihkdXJhdGlvbi0+d2Vla3MoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRU
RVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckRheXMsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2Fz
dDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAg
ICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmRheXMgY2FsbGVkIG9u
IHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3Mp
OworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+ZGF5cygp
KSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlR2V0dGVySG91cnMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwu
RHVyYXRpb24ucHJvdG90eXBlLmhvdXJzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9i
amVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPmhvdXJzKCkpKTsKK30KKworSlNDX0RFRklORV9D
VVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaW51dGVzLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5t
aW51dGVzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBh
cyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
ZHVyYXRpb24tPm1pbnV0ZXMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxU
ZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBp
ZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnNlY29uZHMgY2FsbGVkIG9u
IHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3Mp
OworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+c2Vjb25k
cygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlR2V0dGVyTWlsbGlzZWNvbmRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJh
dGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlv
bikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5taWxsaXNlY29uZHMgY2FsbGVkIG9uIHZhbHVl
IHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+bWlsbGlzZWNvbmRz
KCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJNaWNyb3NlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0
aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9u
KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
VGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1pY3Jvc2Vjb25kcyBjYWxsZWQgb24gdmFsdWUg
dGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taWNyb3NlY29uZHMo
KSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUdldHRlck5hbm9zZWNvbmRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlv
bio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRl
bXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uYW5vc2Vjb25kcyBjYWxsZWQgb24gdmFsdWUgdGhh
dCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5uYW5vc2Vjb25kcygpKSk7
Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
R2V0dGVyU2lnbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
YXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJh
dGlvbi5wcm90b3R5cGUuc2lnbiBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3Qg
aW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5zaWduKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJCbGFuaywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFt
aWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYmxhbmsgY2Fs
bGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRp
b24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWR1cmF0aW9u
LT5zaWduKCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjg3NzVlZWIwN2JlNjAyY2ZhZWYwMzg3OTRlOTdjNjI5MzU0ZDM2ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGUuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4g
JnZtLnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAg
ICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVtcG9yYWxPYmplY3QuY3BwCmluZGV4IGFmMTQzNjc1ZjFlNGM2Mjg3ZWEyYmUxOGY0MzNlZWJl
MzcyYTcxN2QuLjMwNjM5NTJjODVlMzNmNmQ1MmExNTJhOGY4NGViYmFkZjZiY2I0ZGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAKQEAg
LTEsNSArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTAgKzIxLDE0
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxPYmplY3QuaCIKIAor
I2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSW50bE9iamVjdElubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgiCisj
aW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlRlbXBvcmFs
Tm93LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzcsNiArNDIsMTMgQEAgc3RhdGljIEpTVmFs
dWUgY3JlYXRlTm93T2JqZWN0KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICByZXR1cm4g
VGVtcG9yYWxOb3c6OmNyZWF0ZSh2bSwgVGVtcG9yYWxOb3c6OmNyZWF0ZVN0cnVjdHVyZSh2bSwg
Z2xvYmFsT2JqZWN0KSk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlIGNyZWF0ZUR1cmF0aW9uQ29uc3Ry
dWN0b3IoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQoreworICAgIFRlbXBvcmFsT2JqZWN0KiB0
ZW1wb3JhbE9iamVjdCA9IGpzQ2FzdDxUZW1wb3JhbE9iamVjdCo+KG9iamVjdCk7CisgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRlbXBvcmFsT2JqZWN0LT5nbG9iYWxPYmplY3Qo
dm0pOworICAgIHJldHVybiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZSh2bSwg
VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblByb3RvdHlwZSgpKSwganNDYXN0PFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGUqPihnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCktPnN0
b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjaW5j
bHVkZSAiVGVtcG9yYWxPYmplY3QubHV0LmgiCkBAIC00Niw2ICs1OCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogLyogU291cmNlIGZvciBUZW1wb3JhbE9iamVjdC5sdXQuaAogQGJlZ2luIHRlbXBvcmFs
T2JqZWN0VGFibGUKICAgTm93ICAgICAgICAgICAgY3JlYXRlTm93T2JqZWN0ICAgICAgICAgICAg
ICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCisgIER1cmF0aW9uICAgICAgIGNyZWF0ZUR1
cmF0aW9uQ29uc3RydWN0b3IgICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogQGVuZAog
Ki8KIApAQCAtNzUsNCArODgsMTU5IEBAIHZvaWQgVGVtcG9yYWxPYmplY3Q6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKICAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsK
IH0KIAorc3RhdGljIFN0cmluZ1ZpZXcgc2luZ3VsYXJVbml0KFN0cmluZ1ZpZXcgdW5pdCkKK3sK
KyAgICAvLyBQbHVyYWxzIGFyZSBhbGxvd2VkLCBidXQgdGhhbmtmdWxseSB0aGV5J3JlIGFsbCBq
dXN0IGEgc2ltcGxlIC1zLgorICAgIHJldHVybiB1bml0LmVuZHNXaXRoKCJzIikgPyB1bml0Lmxl
ZnQodW5pdC5sZW5ndGgoKSAtIDEpIDogdW5pdDsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8
VGVtcG9yYWxVbml0PiB0ZW1wb3JhbFVuaXRUeXBlKFN0cmluZ1ZpZXcgdW5pdCkKK3sKKyAgICBT
dHJpbmdWaWV3IHNpbmd1bGFyID0gc2luZ3VsYXJVbml0KHVuaXQpOworCisgICAgaWYgKHNpbmd1
bGFyID09ICJ5ZWFyIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6WWVhcjsKKyAgICBp
ZiAoc2luZ3VsYXIgPT0gIm1vbnRoIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TW9u
dGg7CisgICAgaWYgKHNpbmd1bGFyID09ICJ3ZWVrIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFs
VW5pdDo6V2VlazsKKyAgICBpZiAoc2luZ3VsYXIgPT0gImRheSIpCisgICAgICAgIHJldHVybiBU
ZW1wb3JhbFVuaXQ6OkRheTsKKyAgICBpZiAoc2luZ3VsYXIgPT0gImhvdXIiKQorICAgICAgICBy
ZXR1cm4gVGVtcG9yYWxVbml0OjpIb3VyOworICAgIGlmIChzaW5ndWxhciA9PSAibWludXRlIikK
KyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TWludXRlOworICAgIGlmIChzaW5ndWxhciA9
PSAic2Vjb25kIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6U2Vjb25kOworICAgIGlm
IChzaW5ndWxhciA9PSAibWlsbGlzZWNvbmQiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0
OjpNaWxsaXNlY29uZDsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm1pY3Jvc2Vjb25kIikKKyAgICAg
ICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQ7CisgICAgaWYgKHNpbmd1bGFyID09
ICJuYW5vc2Vjb25kIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZDsK
KyAgICAKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCisvLyBUb1NtYWxsZXN0VGVtcG9y
YWxVbml0ICggbm9ybWFsaXplZE9wdGlvbnMsIGRpc2FsbG93ZWRVbml0cywgZmFsbGJhY2sgKQor
c3RkOjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFsU21hbGxlc3RVbml0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8VGVtcG9yYWxVbml0PiBkaXNhbGxvd2VkVW5pdHMpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIFN0cmluZyBzbWFsbGVzdFVuaXQgPSBpbnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9i
amVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+c21hbGxlc3RVbml0LCB7IH0sIG51bGxw
dHIsIG51bGxwdHIpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9w
dCk7CisKKyAgICBpZiAoc21hbGxlc3RVbml0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgYXV0byB1bml0VHlwZSA9IHRlbXBvcmFsVW5pdFR5cGUoc21hbGxl
c3RVbml0KTsKKyAgICBpZiAoIXVuaXRUeXBlKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAic21hbGxlc3RVbml0IGlzIGFuIGludmFsaWQgdW5pdCJfcyk7
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKGRpc2FsbG93
ZWRVbml0cy5zaXplKCkgJiYgc3RkOjpmaW5kKGRpc2FsbG93ZWRVbml0cy5iZWdpbigpLCBkaXNh
bGxvd2VkVW5pdHMuZW5kKCksIHVuaXRUeXBlLnZhbHVlKCkpICE9IGRpc2FsbG93ZWRVbml0cy5l
bmQoKSkgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInNt
YWxsZXN0VW5pdCBpcyBhIGRpc2FsbG93ZWQgdW5pdCJfcyk7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorCisgICAgcmV0dXJuIHVuaXRUeXBlOworfQorCisvLyBHZXRTdHJp
bmdPck51bWJlck9wdGlvbihub3JtYWxpemVkT3B0aW9ucywgImZyYWN0aW9uYWxTZWNvbmREaWdp
dHMiLCDCqyAiYXV0byIgwrssIDAsIDksICJhdXRvIikKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHRlbXBvcmFsRnJhY3Rpb25hbFNlY29uZERpZ2l0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogb3B0aW9ucykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYg
KCFvcHRpb25zKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgSlNWYWx1ZSB2
YWx1ZSA9IG9wdGlvbnMtPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmZyYWN0
aW9uYWxTZWNvbmREaWdpdHMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6
bnVsbG9wdCk7CisKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAg
ICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1ZS5hc051bWJlcigpOworICAgICAgICBpZiAoZG91
YmxlVmFsdWUgPCAwIHx8IGRvdWJsZVZhbHVlID4gOSkgeworICAgICAgICAgICAgdGhyb3dSYW5n
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmcmFjdGlvbmFsU2Vjb25kRGlnaXRzIGlzIG91
dCBvZiByYW5nZSJfcyk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkb3VibGVWYWx1ZSk7
CisgICAgfQorCisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoZ2xv
YmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQp
OworCisgICAgaWYgKHN0cmluZ1ZhbHVlICE9ICJhdXRvIikKKyAgICAgICAgdGhyb3dSYW5nZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmcmFjdGlvbmFsU2Vjb25kRGlnaXRzIGlzIG91dCBv
ZiByYW5nZSJfcyk7CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCisvLyBUb1NlY29u
ZHNTdHJpbmdQcmVjaXNpb24gKCBub3JtYWxpemVkT3B0aW9ucyApCitQcmVjaXNpb25EYXRhIHNl
Y29uZHNTdHJpbmdQcmVjaXNpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqIG9wdGlvbnMpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8gc21hbGxlc3RV
bml0ID0gdGVtcG9yYWxTbWFsbGVzdFVuaXQoZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB7IFRlbXBv
cmFsVW5pdDo6WWVhciwgVGVtcG9yYWxVbml0OjpNb250aCwgVGVtcG9yYWxVbml0OjpXZWVrLCBU
ZW1wb3JhbFVuaXQ6OkRheSwgVGVtcG9yYWxVbml0OjpIb3VyLCBUZW1wb3JhbFVuaXQ6Ok1pbnV0
ZSB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKHNt
YWxsZXN0VW5pdCkgeworICAgICAgICBzd2l0Y2ggKHNtYWxsZXN0VW5pdC52YWx1ZSgpKSB7Cisg
ICAgICAgIGNhc2UgVGVtcG9yYWxVbml0OjpTZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4geyAw
LCBUZW1wb3JhbFVuaXQ6OlNlY29uZCwgMSB9OworICAgICAgICBjYXNlIFRlbXBvcmFsVW5pdDo6
TWlsbGlzZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4geyAzLCBUZW1wb3JhbFVuaXQ6Ok1pbGxp
c2Vjb25kLCAxIH07CisgICAgICAgIGNhc2UgVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZDoKKyAg
ICAgICAgICAgIHJldHVybiB7IDYsIFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQsIDEgfTsKKyAg
ICAgICAgY2FzZSBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4g
eyA5LCBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQsIDEgfTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4geyB9OworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBwcmVjaXNpb24gPSB0ZW1wb3Jh
bEZyYWN0aW9uYWxTZWNvbmREaWdpdHMoZ2xvYmFsT2JqZWN0LCBvcHRpb25zKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKCFwcmVjaXNpb24pCisgICAg
ICAgIHJldHVybiB7IHN0ZDo6bnVsbG9wdCwgVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kLCAxIH07
CisKKyAgICB1bnNpZ25lZCBkaWdpdHMgPSBwcmVjaXNpb24udmFsdWUoKTsKKyAgICBpZiAoIWRp
Z2l0cykKKyAgICAgICAgcmV0dXJuIHsgMCwgVGVtcG9yYWxVbml0OjpTZWNvbmQsIDEgfTsKKwor
ICAgIGlmIChkaWdpdHMgPD0gMykKKyAgICAgICAgcmV0dXJuIHsgZGlnaXRzLCBUZW1wb3JhbFVu
aXQ6Ok1pbGxpc2Vjb25kLCBzdGQ6OnBvdygxMCwgMyAtIGRpZ2l0cykgfTsKKworICAgIGlmIChk
aWdpdHMgPD0gNikKKyAgICAgICAgcmV0dXJuIHsgZGlnaXRzLCBUZW1wb3JhbFVuaXQ6Ok1pY3Jv
c2Vjb25kLCBzdGQ6OnBvdygxMCwgNiAtIGRpZ2l0cykgfTsKKworICAgIEFTU0VSVChkaWdpdHMg
PD0gOSk7CisgICAgcmV0dXJuIHsgZGlnaXRzLCBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQsIHN0
ZDo6cG93KDEwLCA5IC0gZGlnaXRzKSB9OworfQorCisvLyBSb3VuZE51bWJlclRvSW5jcmVtZW50
ICggeCwgaW5jcmVtZW50LCByb3VuZGluZ01vZGUgKQorZG91YmxlIHJvdW5kTnVtYmVyVG9JbmNy
ZW1lbnQoZG91YmxlIHgsIGRvdWJsZSBpbmNyZW1lbnQsIFJvdW5kaW5nTW9kZSBtb2RlKQorewor
ICAgIGRvdWJsZSBxdW90aWVudCA9IHggLyBpbmNyZW1lbnQ7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBSb3VuZGluZ01vZGU6OkNlaWw6CisgICAgICAgIHJldHVybiAtc3RkOjpmbG9v
cigtcXVvdGllbnQpICogaW5jcmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpGbG9vcjoK
KyAgICAgICAgcmV0dXJuIHN0ZDo6Zmxvb3IocXVvdGllbnQpICogaW5jcmVtZW50OworICAgIGNh
c2UgUm91bmRpbmdNb2RlOjpUcnVuYzoKKyAgICAgICAgcmV0dXJuIHN0ZDo6dHJ1bmMocXVvdGll
bnQpICogaW5jcmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpIYWxmRXhwYW5kOgorICAg
ICAgICByZXR1cm4gc3RkOjpyb3VuZChxdW90aWVudCkgKiBpbmNyZW1lbnQ7CisgICAgfQorfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZW1wb3JhbE9iamVjdC5oCmluZGV4IDFlZTk5OTRjMmI4YzA1ZTQ2ZDE2MTA2YTY2ZjAyYjk3NThi
OGIyODMuLmI4ZmE0MWRkZTA3NjE0ODI4NjM5NGU2ZmQxNTNiZTRjMTNlM2ZlNDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaApAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSwgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsNiArMjQsMjcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKKyNkZWZpbmUgSlNDX1RFTVBPUkFMX1VOSVRTKG1hY3JvKSBcCisg
ICAgbWFjcm8oeWVhciwgWWVhcikgXAorICAgIG1hY3JvKG1vbnRoLCBNb250aCkgXAorICAgIG1h
Y3JvKHdlZWssIFdlZWspIFwKKyAgICBtYWNybyhkYXksIERheSkgXAorICAgIG1hY3JvKGhvdXIs
IEhvdXIpIFwKKyAgICBtYWNybyhtaW51dGUsIE1pbnV0ZSkgXAorICAgIG1hY3JvKHNlY29uZCwg
U2Vjb25kKSBcCisgICAgbWFjcm8obWlsbGlzZWNvbmQsIE1pbGxpc2Vjb25kKSBcCisgICAgbWFj
cm8obWljcm9zZWNvbmQsIE1pY3Jvc2Vjb25kKSBcCisgICAgbWFjcm8obmFub3NlY29uZCwgTmFu
b3NlY29uZCkgXAorCitlbnVtIGNsYXNzIFRlbXBvcmFsVW5pdCA6IHVpbnQ4X3QgeworI2RlZmlu
ZSBKU0NfREVGSU5FX1RFTVBPUkFMX1VOSVRfRU5VTShuYW1lLCBjYXBpdGFsaXplZE5hbWUpIGNh
cGl0YWxpemVkTmFtZSwKKyAgICBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX0RFRklORV9URU1QT1JB
TF9VTklUX0VOVU0pCisjdW5kZWYgSlNDX0RFRklORV9URU1QT1JBTF9VTklUX0VOVU0KK307Cisj
ZGVmaW5lIEpTQ19DT1VOVF9URU1QT1JBTF9VTklUUyhuYW1lLCBjYXBpdGFsaXplZE5hbWUpICsg
MQorc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlRlbXBvcmFsVW5pdHMgPSAwIEpT
Q19URU1QT1JBTF9VTklUUyhKU0NfQ09VTlRfVEVNUE9SQUxfVU5JVFMpOworI3VuZGVmIEpTQ19D
T1VOVF9URU1QT1JBTF9VTklUUworCiBjbGFzcyBUZW1wb3JhbE9iamVjdCBmaW5hbCA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5h
bE9iamVjdDsKQEAgLTQ1LDQgKzY3LDIyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOwogfTsKIAorZW51bSBjbGFzcyBSb3VuZGluZ01vZGUgOiB1aW50OF90IHsKKyAg
ICBDZWlsLAorICAgIEZsb29yLAorICAgIFRydW5jLAorICAgIEhhbGZFeHBhbmQKK307CisKK3N0
cnVjdCBQcmVjaXNpb25EYXRhIHsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwcmVjaXNp
b247CisgICAgVGVtcG9yYWxVbml0IHVuaXQ7CisgICAgZG91YmxlIGluY3JlbWVudDsKK307CisK
K3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1wb3JhbFNtYWxsZXN0VW5pdChKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VGVtcG9y
YWxVbml0PiBkaXNhbGxvd2VkVW5pdHMpOworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdGVtcG9y
YWxGcmFjdGlvbmFsU2Vjb25kRGlnaXRzKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlv
bnMpOworUHJlY2lzaW9uRGF0YSBzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKEpTR2xvYmFsT2JqZWN0
KiwgSlNPYmplY3QqIG9wdGlvbnMpOworZG91YmxlIHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZG91
YmxlLCBkb3VibGUgaW5jcmVtZW50LCBSb3VuZGluZ01vZGUpOworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCAxZGVhNmExM2NiNGM0Mjli
OWIwNzE5OGJhYjZjNDRmMzE0NjlkMDY4Li44MzFkM2YyZWQzYTMyN2NmZmIzNjhlZjE2M2IxYThh
YjZmN2M4MTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0xNjIsNiAr
MTYyLDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZUlubGluZXMuaCIKICNpbmNsdWRlICJTeW1ib2xPYmplY3QuaCIKKyNpbmNsdWRlICJUZW1wb3Jh
bER1cmF0aW9uLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVGh1
bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCkBAIC0xNjE3LDYgKzE2
MTgsNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFJlbGF0
aXZlVGltZUZvcm1hdFNwYWNlLCBpbnRsUmVsYXRpdgogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50SXRlcmF0b3JTcGFjZSwgaW50bFNlZ21lbnRJdGVy
YXRvckhlYXBDZWxsVHlwZS5nZXQoKSwgSW50bFNlZ21lbnRJdGVyYXRvcikKIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudGVyU3BhY2UsIGludGxTZWdt
ZW50ZXJIZWFwQ2VsbFR5cGUuZ2V0KCksIEludGxTZWdtZW50ZXIpCiBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRzU3BhY2UsIGludGxTZWdtZW50c0hl
YXBDZWxsVHlwZS5nZXQoKSwgSW50bFNlZ21lbnRzKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsRHVyYXRpb25TcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5n
ZXQoKSwgVGVtcG9yYWxEdXJhdGlvbikKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coanNUb1dhc21JQ0NhbGxlZVNwYWNlLCBj
ZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1RvV2FzbUlDQ2FsbGVlKQogRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UsIHdlYkFz
c2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KSAvLyBIYXNoOjB4OWFkOTk1Y2QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IGJj
ZWQ5ODQzZmNlODI2MjBlODhiOTc1MDE4M2FlYjYxNTU2MjYwNjkuLmFiZGE3MmU5NDNhOTI1ZjRl
Zjc2MDNlMjUwZTNkMDZjYWUwNDE3MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApA
QCAtMTg1LDYgKzE4NSw3IEBAIGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNzIFJlZ0V4cDsKICNlbmRp
ZgogY2xhc3MgU3ltYm9sOworY2xhc3MgVGVtcG9yYWxEdXJhdGlvbjsKIGNsYXNzIFR5cGVkQXJy
YXlDb250cm9sbGVyOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEV2
YWxDb2RlQmxvY2s7CkBAIC02MTUsNiArNjE2LDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFNlZ21lbnRJdGVyYXRvclNwYWNlKQogICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFNlZ21lbnRlclNwYWNlKQogICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFNlZ21lbnRzU3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih0ZW1wb3JhbER1cmF0aW9uU3Bh
Y2UpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIoanNUb1dhc21JQ0NhbGxlZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSkKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOGIxYTVhOWRlMjM3
NmU3NTcyMDY4YTE3YzgwN2MyY2Y5NzhkYTFlMC4uYjIwMmZkZDQwZGNiMGRiYmI3NjJiZjc1NzQ4
MTQ4NWIxMDY1MjUyOCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0wOC0yMCAgUm9zcyBLaXJzbGluZyAg
PHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBv
cmFsLkR1cmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjg1MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHN0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qczogQWRkZWQuCisKIDIwMjEtMDgtMTcg
IE1pa2hhaWwgUi4gR2FkZWxoYSAgPG1pa2hhaWxAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLiBTa2lwIGZhaWxpbmcgTUlQUyB0ZXN0cwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvdGVtcG9yYWwtZHVyYXRpb24uanMgYi9KU1Rlc3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJhdGlv
bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43NTI1NDg5MGQ2NWJhODk2ZjVmYzRkMDQ5ZjBmZGZlMzQ3MzUwN2Ew
Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvdGVtcG9yYWwtZHVyYXRpb24uanMK
QEAgLTAsMCArMSwxODkgQEAKKy8vQCByZXF1aXJlT3B0aW9ucygiLS11c2VUZW1wb3JhbD0xIikK
KworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwg
IT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7ZXhwZWN0
ZWR9IGJ1dCBnb3QgJHthY3R1YWx9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZE5vdFRocm93KGZ1
bmMpIHsKKyAgICBmdW5jKCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9y
VHlwZSkgeworICAgIGxldCBlcnJvcjsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorCisgICAgaWYgKCEoZXJy
b3IgaW5zdGFuY2VvZiBlcnJvclR5cGUpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVj
dGVkICR7ZXJyb3JUeXBlLm5hbWV9IWApOworfQorCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlv
biBpbnN0YW5jZW9mIEZ1bmN0aW9uLCB0cnVlKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9u
Lmxlbmd0aCwgMCk7CitzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFRl
bXBvcmFsLkR1cmF0aW9uLCAncHJvdG90eXBlJykud3JpdGFibGUsIGZhbHNlKTsKK3Nob3VsZEJl
KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwuRHVyYXRpb24sICdwcm90
b3R5cGUnKS5lbnVtZXJhYmxlLCBmYWxzZSk7CitzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKFRlbXBvcmFsLkR1cmF0aW9uLCAncHJvdG90eXBlJykuY29uZmlndXJhYmxl
LCBmYWxzZSk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbigpLCBUeXBlRXJy
b3IpOworCitzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oKSBpbnN0YW5jZW9mIFRlbXBv
cmFsLkR1cmF0aW9uLCB0cnVlKTsKK3sKKyAgICBjbGFzcyBEZXJpdmVkRHVyYXRpb24gZXh0ZW5k
cyBUZW1wb3JhbC5EdXJhdGlvbiB7fQorCisgICAgY29uc3QgZGQgPSBuZXcgRGVyaXZlZER1cmF0
aW9uKCk7CisgICAgc2hvdWxkQmUoZGQgaW5zdGFuY2VvZiBEZXJpdmVkRHVyYXRpb24sIHRydWUp
OworICAgIHNob3VsZEJlKGRkIGluc3RhbmNlb2YgVGVtcG9yYWwuRHVyYXRpb24sIHRydWUpOwor
ICAgIHNob3VsZEJlKGRkLm5lZ2F0ZWQsIFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdh
dGVkKTsKKyAgICBzaG91bGRCZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZGQpLCBEZXJpdmVkRHVy
YXRpb24ucHJvdG90eXBlKTsKKyAgICBzaG91bGRCZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoRGVy
aXZlZER1cmF0aW9uLnByb3RvdHlwZSksIFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZSk7Cit9
CisKK3Nob3VsZFRocm93KCgpID0+IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigxLCAtMSksIFJhbmdl
RXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKEluZmluaXR5
KSwgUmFuZ2VFcnJvcik7CisKK2NvbnN0IGZpZWxkcyA9IFsneWVhcnMnLCAnbW9udGhzJywgJ3dl
ZWtzJywgJ2RheXMnLCAnaG91cnMnLCAnbWludXRlcycsICdzZWNvbmRzJywgJ21pbGxpc2Vjb25k
cycsICdtaWNyb3NlY29uZHMnLCAnbmFub3NlY29uZHMnXTsKK2NvbnN0IHplcm8gPSBuZXcgVGVt
cG9yYWwuRHVyYXRpb24oKTsKK2NvbnN0IHBvcyA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigxLDIs
Myw0LDUsNiw3LDgsOSwxMCk7Citjb25zdCBuZWcgPSBuZXcgVGVtcG9yYWwuRHVyYXRpb24oLTEs
LTIsLTMsLTQsLTUsLTYsLTcsLTgsLTksLTEwKTsKKworZmllbGRzLmZvckVhY2goKGZpZWxkLCBp
KSA9PiB7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBl
W2ZpZWxkXSwgVHlwZUVycm9yKTsKKyAgICBzaG91bGRCZSh6ZXJvW2ZpZWxkXSwgMCk7CisgICAg
c2hvdWxkQmUocG9zW2ZpZWxkXSwgaSArIDEpOworICAgIHNob3VsZEJlKG5lZ1tmaWVsZF0sIC1p
IC0gMSk7Cit9KTsKKworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90
eXBlLnNpZ24sIFR5cGVFcnJvcik7CitzaG91bGRCZSh6ZXJvLnNpZ24sIDApOworc2hvdWxkQmUo
cG9zLnNpZ24sIDEpOworc2hvdWxkQmUobmVnLnNpZ24sIC0xKTsKKworc2hvdWxkVGhyb3coKCkg
PT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmJsYW5rLCBUeXBlRXJyb3IpOworc2hvdWxk
QmUoemVyby5ibGFuaywgdHJ1ZSk7CitzaG91bGRCZShwb3MuYmxhbmssIGZhbHNlKTsKK3Nob3Vs
ZEJlKG5lZy5ibGFuaywgZmFsc2UpOworCitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJh
dGlvbi5mcm9tKCksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVy
YXRpb24uZnJvbSh7fSksIFR5cGVFcnJvcik7Cit7CisgICAgY29uc3QgYmFkU3RyaW5ncyA9IFsK
KyAgICAgICAgJycsICdQJywgJ1AxJywgJ1BUJywgJ1AxWVQnLCAnUFQxJywKKyAgICAgICAgJ1Ax
VzFZJywgICdQVDFTMU0nLAorICAgICAgICAnUDEuMVknLCAnUFQxLjFIMU0nLCAnUFQxLjFNMVMn
LAorICAgICAgICAnUFQxLjExMTExMTExMTFIJywgJ1BUMS4xMTExMTExMTExTScsICdQVDEuMTEx
MTExMTExMVMnLAorICAgICAgICBgUCR7QXJyYXkoMzA5KS5maWxsKDkpLmpvaW4oJycpfVlgCisg
ICAgXTsKKyAgICBmb3IgKGNvbnN0IGJhZFN0cmluZyBpbiBiYWRTdHJpbmdzKQorICAgICAgICBz
aG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKGJhZFN0cmluZyksIFJhbmdl
RXJyb3IpOworICAgIAorICAgIGNvbnN0IGZyb21TdHJpbmcgPSBUZW1wb3JhbC5EdXJhdGlvbi5m
cm9tKCdQMVkyTTNXNERUNUg2TTcuMDA4MDA5MDEwUycpOworCisgICAgY29uc3QgZHVyYXRpb25M
aWtlID0ge307CisgICAgZmllbGRzLmZvckVhY2goKGZpZWxkLCBpKSA9PiB7IGR1cmF0aW9uTGlr
ZVtmaWVsZF0gPSBpICsgMTsgfSk7CisgICAgY29uc3QgZnJvbUR1cmF0aW9uTGlrZSA9IFRlbXBv
cmFsLkR1cmF0aW9uLmZyb20oZHVyYXRpb25MaWtlKTsKKworICAgIGZvciAoY29uc3QgZmllbGQg
b2YgZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJlKGZyb21TdHJpbmdbZmllbGRdLCBwb3NbZmll
bGRdKTsKKyAgICAgICAgc2hvdWxkQmUoZnJvbUR1cmF0aW9uTGlrZVtmaWVsZF0sIHBvc1tmaWVs
ZF0pOworICAgIH0KK30KK3Nob3VsZE5vdFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZy
b20oYFAke0FycmF5KDMwOCkuZmlsbCg5KS5qb2luKCcnKX1ZYCkpOworc2hvdWxkQmUoVGVtcG9y
YWwuRHVyYXRpb24uZnJvbSgn4oiScDF5Mm0zdzRkdDVoNm03LjAwODAwOTAxMHMnKS50b1N0cmlu
ZygpLCAnLVAxWTJNM1c0RFQ1SDZNNy4wMDgwMDkwMVMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1
cmF0aW9uLmZyb20oJytQMVkyRFQzSDQuMFMnKS50b1N0cmluZygpLCAnUDFZMkRUM0g0UycpOwor
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUFQxLjAzMTI1SCcpLnRvU3RyaW5nKCks
ICdQVDFIMU01Mi41UycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUFQxLjAz
MTI1TScpLnRvU3RyaW5nKCksICdQVDFNMS44NzVTJyk7CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1
cmF0aW9uLnByb3RvdHlwZS53aXRoLmxlbmd0aCwgMSk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1w
b3JhbC5EdXJhdGlvbi5wcm90b3R5cGUud2l0aC5jYWxsKHt9LCB7IHllYXJzOiAxIH0pLCBUeXBl
RXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby53aXRoKCksIFR5cGVFcnJvcik7CitzaG91
bGRUaHJvdygoKSA9PiB6ZXJvLndpdGgoe30pLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkg
PT4gemVyby53aXRoKHsgeWVhcnM6IDEuMSB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygo
KSA9PiBwb3Mud2l0aCh7IHllYXJzOiAtMSB9KSwgUmFuZ2VFcnJvcik7Cit7CisgICAgY29uc3Qg
ZnVsbHlVcGRhdGVkID0gcG9zLndpdGgobmVnKTsKKyAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZp
ZWxkcykgeworICAgICAgICBzaG91bGRCZSh6ZXJvLndpdGgoeyBbZmllbGRdOiAxIH0pW2ZpZWxk
XSwgMSk7CisgICAgICAgIHNob3VsZEJlKGZ1bGx5VXBkYXRlZFtmaWVsZF0sIG5lZ1tmaWVsZF0p
OworICAgIH0KK30KKworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0
ZWQubGVuZ3RoLCAwKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3Rv
dHlwZS5uZWdhdGVkLmNhbGwoe30pLCBUeXBlRXJyb3IpOworeworICAgIGNvbnN0IG5lZ2F0ZWRa
ZXJvID0gemVyby5uZWdhdGVkKCk7CisgICAgY29uc3QgbmVnYXRlZFBvcyA9IHBvcy5uZWdhdGVk
KCk7CisgICAgY29uc3QgbmVnYXRlZE5lZyA9IG5lZy5uZWdhdGVkKCk7CisgICAgZm9yIChjb25z
dCBmaWVsZCBvZiBmaWVsZHMpIHsKKyAgICAgICAgc2hvdWxkQmUobmVnYXRlZFplcm9bZmllbGRd
LCB6ZXJvW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKG5lZ2F0ZWROZWdbZmllbGRdLCBwb3Nb
ZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUobmVnYXRlZFBvc1tmaWVsZF0sIG5lZ1tmaWVsZF0p
OworICAgIH0KK30KKworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmFicy5s
ZW5ndGgsIDApOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBl
LmFicy5jYWxsKHt9KSwgVHlwZUVycm9yKTsKK3sKKyAgICBjb25zdCBhYnNaZXJvID0gemVyby5h
YnMoKTsKKyAgICBjb25zdCBhYnNQb3MgPSBwb3MuYWJzKCk7CisgICAgY29uc3QgYWJzTmVnID0g
bmVnLmFicygpOworICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7CisgICAgICAgIHNo
b3VsZEJlKGFic1plcm9bZmllbGRdLCB6ZXJvW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKGFi
c1Bvc1tmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgICAgICBzaG91bGRCZShhYnNOZWdbZmllbGRd
LCBwb3NbZmllbGRdKTsKKyAgICB9Cit9CisKKy8vIEF0IHByZXNlbnQsIHRvTG9jYWxlU3RyaW5n
IGhhcyB0aGUgc2FtZSBiZWhhdmlvciBhcyB0b0pTT04gb3IgYXJndW1lbnRsZXNzIHRvU3RyaW5n
LgorZm9yIChjb25zdCBtZXRob2Qgb2YgWyd0b1N0cmluZycsICd0b0pTT04nLCAndG9Mb2NhbGVT
dHJpbmcnXSkgeyAgICAKKyAgICBzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVb
bWV0aG9kXS5sZW5ndGgsIDApOworICAgIHNob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0
aW9uLnByb3RvdHlwZVttZXRob2RdLmNhbGwoe30pLCBUeXBlRXJyb3IpOworCisgICAgc2hvdWxk
QmUoemVyb1ttZXRob2RdKCksICdQVDBTJyk7CisgICAgc2hvdWxkQmUocG9zW21ldGhvZF0oKSwg
J1AxWTJNM1c0RFQ1SDZNNy4wMDgwMDkwMVMnKTsKKyAgICBzaG91bGRCZShuZWdbbWV0aG9kXSgp
LCAnLVAxWTJNM1c0RFQ1SDZNNy4wMDgwMDkwMVMnKTsKKyAgICAKKyAgICBzaG91bGRCZShuZXcg
VGVtcG9yYWwuRHVyYXRpb24oMSwxLDEsMSlbbWV0aG9kXSgpLCAnUDFZMU0xVzFEJyk7CisgICAg
c2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAsMSwxLDEpW21ldGhvZF0oKSwg
J1BUMUgxTTFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAs
MCwwLDAsMTAwKVttZXRob2RdKCksICdQVDAuMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9y
YWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwwLDEwMClbbWV0aG9kXSgpLCAnUFQwLjAwMDFTJyk7
CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDAsMCwwLDEw
MClbbWV0aG9kXSgpLCAnUFQwLjAwMDAwMDFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFs
LkR1cmF0aW9uKDAsMCwwLDAsMCwwLDEsMTAwMSlbbWV0aG9kXSgpLCAnUFQyLjAwMVMnKTsKKyAg
ICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwxLDEwMDEpW21l
dGhvZF0oKSwgJ1BUMC4wMDIwMDFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0
aW9uKDAsMCwwLDAsMCwwLDAsMCwxLDEwMDEpW21ldGhvZF0oKSwgJ1BUMC4wMDAwMDIwMDFTJyk7
CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDEsMTAwMSwx
MDAxLDEwMDEpW21ldGhvZF0oKSwgJ1BUMi4wMDIwMDIwMDFTJyk7Cit9CisKK3Nob3VsZEJlKHBv
cy50b1N0cmluZyh7fSksIHBvcy50b1N0cmluZygpKTsKKworc2hvdWxkVGhyb3coKCkgPT4gcG9z
LnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiAnZm9vYmFyJyB9KSwgUmFuZ2VFcnJvcik7Citmb3Ig
KGNvbnN0IHVuaXQgb2YgWyd5ZWFyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAn
bWludXRlJ10pIHsKKyAgICBzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBzbWFsbGVz
dFVuaXQ6IHVuaXQgfSksIFJhbmdlRXJyb3IpOworICAgIHNob3VsZFRocm93KCgpID0+IHBvcy50
b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogYCR7dW5pdH1zYCB9KSwgUmFuZ2VFcnJvcik7Cit9Citz
aG91bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmRzJyB9KSwgJ1AxWTJN
M1c0RFQ1SDZNN1MnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogJ21p
bGxpc2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4UycpOworc2hvdWxkQmUocG9zLnRv
U3RyaW5nKHsgc21hbGxlc3RVbml0OiAnbWljcm9zZWNvbmRzJyB9KSwgJ1AxWTJNM1c0RFQ1SDZN
Ny4wMDgwMDlTJyk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICduYW5v
c2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4MDA5MDEwUycpOworZm9yIChjb25zdCB1
bml0IG9mIFsnc2Vjb25kJywgJ21pbGxpc2Vjb25kJywgJ21pY3Jvc2Vjb25kJywgJ25hbm9zZWNv
bmQnXSkKKyAgICBzaG91bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6IHVuaXQgfSks
IHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogYCR7dW5pdH1zYCB9KSk7CisKK3Nob3VsZFRo
cm93KCgpID0+IHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IC0xIH0pLCBS
YW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxT
ZWNvbmREaWdpdHM6IDEwIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHBvcy50
b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6ICdib2d1cycgfSksIFJhbmdlRXJyb3Ip
Oworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMCB9KSwg
J1AxWTJNM1c0RFQ1SDZNN1MnKTsKK2NvbnN0IGRlY2ltYWxQYXJ0ID0gJzAwODAwOTAxMCc7Citm
b3IgKGxldCBpID0gMTsgaSA8IDEwOyBpKyspCisgICAgc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsg
ZnJhY3Rpb25hbFNlY29uZERpZ2l0czogaSB9KSwgYFAxWTJNM1c0RFQ1SDZNNy4ke2RlY2ltYWxQ
YXJ0LnNsaWNlKDAsaSl9U2ApOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNl
Y29uZERpZ2l0czogJ2F1dG8nIH0pLCBwb3MudG9TdHJpbmcoKSk7CitzaG91bGRCZSh6ZXJvLnRv
U3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMiB9KSwgJ1BUMC4wMFMnKTsKKworc2hv
dWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgcm91bmRpbmdNb2RlOiAnYm9ndXMnIH0pLCBS
YW5nZUVycm9yKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHJvdW5kaW5nTW9kZTogJ3RydW5j
JyB9KSwgcG9zLnRvU3RyaW5nKCkpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25h
bFNlY29uZERpZ2l0czogNywgcm91bmRpbmdNb2RlOiAnY2VpbCcgfSksICdQMVkyTTNXNERUNUg2
TTcuMDA4MDA5MVMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmRE
aWdpdHM6IDIsIHJvdW5kaW5nTW9kZTogJ2Zsb29yJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMFMn
KTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDIsIHJv
dW5kaW5nTW9kZTogJ2hhbGZFeHBhbmQnIH0pLCAnUDFZMk0zVzREVDVINk03LjAxUycpOworCitz
aG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudmFsdWVPZi5sZW5ndGgsIDApOwor
c2hvdWxkVGhyb3coKCkgPT4gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKCkudmFsdWVPZigpLCBUeXBl
RXJyb3IpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436251</attachid>
            <date>2021-08-23 17:03:50 -0700</date>
            <delta_ts>2021-08-26 14:33:16 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-228532-20210823170348.patch</filename>
            <type>text/plain</type>
            <size>99637</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NmE5YjNkYmVhNTJlZWY3NjIyNzk4MWE0YmEzNDk1YThmZjRhOWJlLi43MWZiODFkMGU1N2JjNTVm
MTU0ZmQwMjc2MTdhMGFkNzY4MDczNzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAyMS0wOC0yMyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpkdXJhdGlvblN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OnByb3BlcnR5TmFtZSk6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFs
RHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRp
b246OlRlbXBvcmFsRHVyYXRpb24pOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmlzVmFsaWREdXJhdGlvbik6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQpOgorICAgICAgICAoSlNDOjpo
YW5kbGVGcmFjdGlvbik6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnBhcnNlKToK
KyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6ZnJvbU9iamVjdCk6CisgICAgICAgIChK
U0M6OlRlbXBvcmFsRHVyYXRpb246OnRvRHVyYXRpb24pOgorICAgICAgICAoSlNDOjpUZW1wb3Jh
bER1cmF0aW9uOjpmcm9tKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6c2lnbiBj
b25zdCk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OndpdGggY29uc3QpOgorICAg
ICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpuZWdhdGVkIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6VGVtcG9yYWxEdXJhdGlvbjo6YWJzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxE
dXJhdGlvbjo6bGFyZ2VzdFN1YmR1cmF0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6dG90YWxO
YW5vc2Vjb25kcyk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmJhbGFuY2UpOgor
ICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjphZGQgY29uc3QpOgorICAgICAgICAoSlND
OjpUZW1wb3JhbER1cmF0aW9uOjpzdWJ0cmFjdCBjb25zdCk6CisgICAgICAgIChKU0M6OlRlbXBv
cmFsRHVyYXRpb246OnJvdW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlv
bjo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5o
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpU
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0
aW9uQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKToK
KyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaDogQWRkZWQuCisg
ICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0
ZUR1cmF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpzaW5ndWxhclVuaXQpOgorICAg
ICAgICAoSlNDOjp0ZW1wb3JhbFVuaXRUeXBlKToKKyAgICAgICAgKEpTQzo6dGVtcG9yYWxTbWFs
bGVzdFVuaXQpOgorICAgICAgICAoSlNDOjp0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmREaWdpdHMp
OgorICAgICAgICAoSlNDOjpzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKToKKyAgICAgICAgKEpTQzo6
cm91bmROdW1iZXJUb0luY3JlbWVudCk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVj
dC5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoK
KwogMjAyMS0wOC0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtKU0NdIFJlbW92ZSB1bm5lY2Vzc2FyeSBtb3ZlcyBpbiBZYXJyJ3Mgc3ViMzIgLyBhZGQz
MiByZWxhdGVkIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiYjY1
NGI1NDQ0ZDIxOTY3OTZlYWZhNDI1NTc4ZDAzOGVhYjc2Y2U5Li5kMWQzOWFjN2RkZDY0ZDE1MTVj
Nzg1MTM5MjdhYmI2ZTBkYTFjNjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0xMDcsNiArMTA3LDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX09CSkVDVF9MVVRfU09VUkNF
UwogICAgIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvU3ltYm9sQ29u
c3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCisgICAgcnVudGlt
ZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCisgICAgcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCiAKICAg
ICB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCmluZGV4IDc1NDJjN2Y3NzQ2NWUyNmUxOWQ0YTY4YTVkYjc2MDkxZmRkNDY1
MzkuLjNmNTg1ZTFjOTRiMzAzMDY4OTRiMjc3NmI5YTUwN2U5NmYwNjRmOTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xOTEsNiArMTkxLDggQEAgT0JK
RUNUX0xVVF9IRUFERVJTID0gXAogICAgIFN0cmluZ1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgU3lt
Ym9sQ29uc3RydWN0b3IubHV0LmggXAogICAgIFN5bWJvbFByb3RvdHlwZS5sdXQuaCBcCisgICAg
VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlLmx1dC5oIFwKICAgICBUZW1wb3JhbE9iamVjdC5sdXQuaCBcCiAgICAgV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JQcm90b3R5cGUubHV0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBhZGQ2Y2I0MzIyOTI3ZjIyMTVhNjMyZDM4OTNiZGM5YzM4MjVmYTdhLi4yZWU2OGYxMDMyZTM5
OWJlM2I2OWQwNzkwYmI2NjQ5OGU0OWViN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTQxNiw2ICsxNDE2LDkgQEAKIAkJQTM4MkM1MzEyNjY3MTExRDAwNDJDRDk5IC8qIElu
QnlWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzMwNUZCMTIwQjBGNzg4MDBDRUI4MkIgLyogSW5CeVZhcmlhbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMzhEMjUwRTI1ODAwRDQ0MDA0
MkJGREQgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzOEQyNTBEMjU4MDBENDMwMDQyQkZERCAv
KiBKU0FycmF5QnVmZmVyUHJvdG90eXBlSW5saW5lcy5oICovOyB9OwogCQlBMzhENUJGQzI2NjZE
M0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTM4RDVCRkEyNjY2RDNEQTAwQTEwOUE2IC8qIEluQnlTdGF0dXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBM0M3
RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VEQjAyNkIwREIz
NjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsKKwkJQTNDN0VE
QjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CisJCUEzQzdFREJBMjZCMERCMzgwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3Jh
bER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJQTNFRTg1NDMyNjI1MTRCMDAwRkM5QjhE
IC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAvKiBJbnRsV29ya2Fyb3VuZC5j
cHAgKi87IH07CiAJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRkY5QkM1MjIzNDc0
NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyogSmF2YVNjcmlw
dENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCAqLzsg
fTsKQEAgLTQ0NzMsNiArNDQ3NiwxMiBAQAogCQlBM0JGODg0RTI0NDgwQkUwMDAxQjlGMzUgLyog
SW50bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBM0JGODg0RjI0NDgwQkUwMDAxQjlGMzUgLyogSW50bFJl
bGF0aXZlVGltZUZvcm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTNCRjg4NTAyNDQ4MEJFMTAwMUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bFJlbGF0aXZlVGltZUZvcm1hdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMDI2QjBEQjM2MDA0QzM0QzUg
LyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEzQzdFREIxMjZCMERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMjI2QjBEQjM3MDA0QzM0
QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAvKiBUZW1w
b3JhbER1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBvcmFs
RHVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjQyNkIwREIz
NzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjUyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUEzRkY5QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckZsYWdzLmg7IHBhdGggPSB5YXJyL1lhcnJG
bGFncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0ZGOUJDNjIyMzQ3NDY2MDBC
MUE5QUIgLyogWWFyckZsYWdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFlhcnJGbGFncy5jcHA7IHBhdGggPSB5YXJyL1lhcnJGbGFncy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE1MDNGQTEzMTg4RTBGQUYwMDExMEYxNCAvKiBKYXZhU2NyaXB0
Q2FsbEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEphdmFT
Y3JpcHRDYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzk1Niw2
ICs3OTY1LDEyIEBACiAJCQkJRTMxMTc5QTkyMjg4Mzg1RDAwNTE0QjJDIC8qIFN5bWJvbFRhYmxl
T3JTY29wZURlcHRoLmggKi8sCiAJCQkJQkRCNEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBs
YXRlT2JqZWN0RGVzY3JpcHRvci5jcHAgKi8sCiAJCQkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oICovLAorCQkJCUEzQzdFREIxMjZCMERCMzYw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNwcCAqLywKKwkJCQlBM0M3RURCMzI2QjBEQjM3
MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovLAorCQkJCUEzQzdFREIyMjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCUEzQzdF
REI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLywK
KwkJCQlBM0M3RURCNTI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5jcHAgKi8sCisJCQkJQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGUuaCAqLywKIAkJCQlGNkYxNTAxQjI2OTNEMzNFMDA0Qjk4RUYgLyogVGVtcG9y
YWxOb3cuY3BwICovLAogCQkJCUY2RjE1MDE4MjY5M0QzM0QwMDRCOThFRiAvKiBUZW1wb3JhbE5v
dy5oICovLAogCQkJCUY2RjE1MDE5MjY5M0QzM0UwMDRCOThFRiAvKiBUZW1wb3JhbE9iamVjdC5j
cHAgKi8sCkBAIC0xMDY1NSw3ICsxMDY3MCwxMSBAQAogCQkJCUE3ODRBMjY0MTFEMTY2MjIwMDU3
NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzc5OTc4MzFDREU5
RkEwMDA0RDRBMDkgLyogVGFnUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBF
Q0E2MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREJBMjZCMERCMzgwMDRDMzRDNSAvKiBUZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREI2MjZC
MERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGNkYxNTAyMTI2OTNENDUwMDA0Qjk4RUYgLyogVGVtcG9yYWxPYmplY3QubHV0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBM0ZBOTczODI2QkIzNTU2MDBGNzEwNjAgLyogVGVtcG9yYWxP
YmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIy
MTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ0QTdCNDIwQkY2
OEQ5MDAyMkIxNzEgLyogVGVybWluYXRlZENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQTJDMTdDMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IGE2NDcwMmRiNjAxY2MyMWFiYjRj
MjYyOTQ1N2RkMWE3NTljMzAyMGQuLjNjMmM2ZjAwOTY2N2M4M2FjMTk0N2E0NjM0OWM2N2FiOTJl
YzIyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTEwMTAsNiArMTAxMCw5IEBA
IHJ1bnRpbWUvU3ltYm9sT2JqZWN0LmNwcAogcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCiBy
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAogcnVudGltZS9UZW1wbGF0ZU9iamVjdERlc2NyaXB0b3Iu
Y3BwCitydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwCitydW50aW1lL1RlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3Rvci5jcHAKK3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAK
IHJ1bnRpbWUvVGVtcG9yYWxOb3cuY3BwCiBydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcAogcnVu
dGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRleCBkYzYwMTlmNDVmZDk4YjQzN2E1YmY2ZTI2
NTg0YTBhMzQ2MzJmYWRjLi45MjE3OGI3OWE0MjY3MGY0YTFkZDBiMzBlOGEzYjNiNTVmMmFjMTdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlm
aWVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmgKQEAgLTk5LDYgKzk5LDcgQEAKICAgICBtYWNybyhjb3VudGVycykgXAogICAgIG1hY3Jv
KGRhdGVTdHlsZSkgXAogICAgIG1hY3JvKGRheSkgXAorICAgIG1hY3JvKGRheXMpIFwKICAgICBt
YWNybyhkYXlQZXJpb2QpIFwKICAgICBtYWNybyhkZWZpbmVQcm9wZXJ0eSkgXAogICAgIG1hY3Jv
KGRlcmVmKSBcCkBAIC0xMzUsNiArMTM2LDcgQEAKICAgICBtYWNybyhoYXNoKSBcCiAgICAgbWFj
cm8oaGVhZGVyKSBcCiAgICAgbWFjcm8oaG91cikgXAorICAgIG1hY3JvKGhvdXJzKSBcCiAgICAg
bWFjcm8oaG91ckN5Y2xlKSBcCiAgICAgbWFjcm8oaG91cjEyKSBcCiAgICAgbWFjcm8oaWQpIFwK
QEAgLTE2MiwxMyArMTY0LDE4IEBACiAgICAgbWFjcm8obWF4aW11bUZyYWN0aW9uRGlnaXRzKSBc
CiAgICAgbWFjcm8obWF4aW11bVNpZ25pZmljYW50RGlnaXRzKSBcCiAgICAgbWFjcm8obWVzc2Fn
ZSkgXAorICAgIG1hY3JvKG1pY3Jvc2Vjb25kcykgXAorICAgIG1hY3JvKG1pbGxpc2Vjb25kcykg
XAogICAgIG1hY3JvKG1pbmltdW1GcmFjdGlvbkRpZ2l0cykgXAogICAgIG1hY3JvKG1pbmltdW1J
bnRlZ2VyRGlnaXRzKSBcCiAgICAgbWFjcm8obWluaW11bVNpZ25pZmljYW50RGlnaXRzKSBcCiAg
ICAgbWFjcm8obWludXRlKSBcCisgICAgbWFjcm8obWludXRlcykgXAogICAgIG1hY3JvKG1vbnRo
KSBcCisgICAgbWFjcm8obW9udGhzKSBcCiAgICAgbWFjcm8obXVsdGlsaW5lKSBcCiAgICAgbWFj
cm8obmFtZSkgXAorICAgIG1hY3JvKG5hbm9zZWNvbmRzKSBcCiAgICAgbWFjcm8obmV4dCkgXAog
ICAgIG1hY3JvKG5vdykgXAogICAgIG1hY3JvKG51bUlubGluZWRDYWxscykgXApAQCAtMTkxLDEz
ICsxOTgsMTYgQEAKICAgICBtYWNybyhyZWdpb24pIFwKICAgICBtYWNybyhyZXBsYWNlKSBcCiAg
ICAgbWFjcm8ocmVzb2x2ZSkgXAorICAgIG1hY3JvKHJvdW5kaW5nTW9kZSkgXAogICAgIG1hY3Jv
KHNjcmlwdCkgXAogICAgIG1hY3JvKHNlY29uZCkgXAorICAgIG1hY3JvKHNlY29uZHMpIFwKICAg
ICBtYWNybyhzZWdtZW50KSBcCiAgICAgbWFjcm8oc2Vuc2l0aXZpdHkpIFwKICAgICBtYWNybyhz
ZXQpIFwKICAgICBtYWNybyhzaXplKSBcCiAgICAgbWFjcm8oc2xpY2UpIFwKKyAgICBtYWNybyhz
bWFsbGVzdFVuaXQpIFwKICAgICBtYWNybyhzb3VyY2UpIFwKICAgICBtYWNybyhzb3VyY2VDb2Rl
KSBcCiAgICAgbWFjcm8oc291cmNlVVJMKSBcCkBAIC0yMjgsOCArMjM4LDEwIEBACiAgICAgbWFj
cm8odmFsdWUpIFwKICAgICBtYWNybyh2YWx1ZU9mKSBcCiAgICAgbWFjcm8od2Vla2RheSkgXAor
ICAgIG1hY3JvKHdlZWtzKSBcCiAgICAgbWFjcm8od3JpdGFibGUpIFwKLSAgICBtYWNybyh5ZWFy
KQorICAgIG1hY3JvKHllYXIpIFwKKyAgICBtYWNybyh5ZWFycykKIAogI2RlZmluZSBKU0NfQ09N
TU9OX0lERU5USUZJRVJTX0VBQ0hfUFJJVkFURV9GSUVMRChtYWNybykgXAogICAgIG1hY3JvKGNv
bnN0cnVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCmluZGV4IDE1ZjViMDY0ZWNiZmM2NThhOTkwZDJlYjU5NjM1YmYyYmRiZTg4ODIu
LjU0MThhN2JiMGY4MTFiNmMwNjNkZTc2MzRiYWY3ZmEyMjAyM2M5NDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTIwMSw2ICsy
MDEsOCBAQAogI2luY2x1ZGUgIlN5bWJvbENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiU3ltYm9s
T2JqZWN0LmgiCiAjaW5jbHVkZSAiU3ltYm9sUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiVGVtcG9y
YWxEdXJhdGlvbi5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKICNp
bmNsdWRlICJUZW1wb3JhbE9iamVjdC5oIgogI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiV2FzbUNhcGFiaWxpdGllcy5oIgpAQCAtMTIxMiw2ICsxMjE0LDEzIEBAIGNhcGl0
YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJl
RmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPkludGwsIGludGwsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogICAgIGlmIChPcHRpb25zOjp1c2VUZW1wb3JhbCgp
KSB7CisgICAgICAgIG1fZHVyYXRpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICAgICAg
W10gKGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKKyAgICAgICAgICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
aW5pdC5vd25lcik7CisgICAgICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSog
ZHVyYXRpb25Qcm90b3R5cGUgPSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGUoaW5p
dC52bSwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0s
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgICAg
ICAgICAgICAgIGluaXQuc2V0KFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZShpbml0
LnZtLCBnbG9iYWxPYmplY3QsIGR1cmF0aW9uUHJvdG90eXBlKSk7CisgICAgICAgICAgICB9KTsK
KwogICAgICAgICBUZW1wb3JhbE9iamVjdCogdGVtcG9yYWwgPSBUZW1wb3JhbE9iamVjdDo6Y3Jl
YXRlKHZtLCBUZW1wb3JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzKSk7CiAgICAg
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5UZW1w
b3JhbCwgdGVtcG9yYWwsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKICAgICB9CkBAIC0yMDkwLDYgKzIwOTksOSBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgdGhpc09iamVjdC0+bV9kYXRlVGltZUZvcm1hdFN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsK
ICAgICB0aGlzT2JqZWN0LT5tX251bWJlckZvcm1hdFN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsK
IAorICAgIGlmIChPcHRpb25zOjp1c2VUZW1wb3JhbCgpKQorICAgICAgICB0aGlzT2JqZWN0LT5t
X2R1cmF0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOworCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9udWxsR2V0dGVyRnVuY3Rpb24pOwogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fbnVsbFNldHRlckZ1bmN0aW9uKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX251bGxTZXR0ZXJTdHJpY3RGdW5jdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCBhMzVlZmNlN2M1MjYyZjQ5ZDk4
ZDVhYjQyMTNjODgxYjVjMjcwYWMwLi5iNDNiNjdhOTM4NDA2YjcwMTIyMmFlMzUzMzIwOGQ3MjE3
YTcyODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKQEAgLTMyNCw2ICszMjQsOCBAQCBwdWJsaWM6CiAgICAgTGF6eUNsYXNzU3RydWN0dXJl
IG1fZGF0ZVRpbWVGb3JtYXRTdHJ1Y3R1cmU7CiAgICAgTGF6eUNsYXNzU3RydWN0dXJlIG1fbnVt
YmVyRm9ybWF0U3RydWN0dXJlOwogCisgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmU+IG1fZHVyYXRpb25TdHJ1Y3R1cmU7CisKICAgICBXcml0ZUJhcnJpZXI8TnVsbEdl
dHRlckZ1bmN0aW9uPiBtX251bGxHZXR0ZXJGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8TnVs
bFNldHRlckZ1bmN0aW9uPiBtX251bGxTZXR0ZXJGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8
TnVsbFNldHRlckZ1bmN0aW9uPiBtX251bGxTZXR0ZXJTdHJpY3RGdW5jdGlvbjsKQEAgLTg3MCw2
ICs4NzIsOCBAQCBwdWJsaWM6CiAgICAgSlNPYmplY3QqIG51bWJlckZvcm1hdENvbnN0cnVjdG9y
KCkgeyByZXR1cm4gbV9udW1iZXJGb3JtYXRTdHJ1Y3R1cmUuY29uc3RydWN0b3IodGhpcyk7IH0K
ICAgICBKU09iamVjdCogbnVtYmVyRm9ybWF0UHJvdG90eXBlKCkgeyByZXR1cm4gbV9udW1iZXJG
b3JtYXRTdHJ1Y3R1cmUucHJvdG90eXBlKHRoaXMpOyB9CiAKKyAgICBTdHJ1Y3R1cmUqIGR1cmF0
aW9uU3RydWN0dXJlKCkgeyByZXR1cm4gbV9kdXJhdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0K
KwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChi
b29sKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHJlbW90ZURlYnVnZ2luZ0VuYWJsZWQo
KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVt
cG9yYWxEdXJhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bER1cmF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTFjZjJiMDk1ZjNhNzA3YjExYmY2MjFmZTIwOGNj
NzRiOTRkNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKQEAgLTAsMCArMSw2NTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKKwor
I2luY2x1ZGUgIkludGxPYmplY3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIlBhcnNlSW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK3N0YXRpYyBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKFZNJiB2bSwgdW5zaWdu
ZWQgaW5kZXgpCit7CisgICAgQVNTRVJUKGluZGV4IDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzKTsK
KyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFRlbXBvcmFsVW5pdD4oaW5kZXgpKSB7CisjZGVmaW5l
IEpTQ19URU1QT1JBTF9EVVJBVElPTl9QUk9QRVJUWV9OQU1FKG5hbWUsIGNhcGl0YWxpemVkTmFt
ZSkgY2FzZSBUZW1wb3JhbFVuaXQ6OmNhcGl0YWxpemVkTmFtZTogcmV0dXJuIHZtLnByb3BlcnR5
TmFtZXMtPm5hbWUjI3M7IAorICAgICAgICBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX1RFTVBPUkFM
X0RVUkFUSU9OX1BST1BFUlRZX05BTUUpCisjdW5kZWYgSlNDX1RFTVBPUkFMX0RVUkFUSU9OX1BS
T1BFUlRZX05BTUUKKyAgICB9Cit9CisKK2NvbnN0IENsYXNzSW5mbyBUZW1wb3JhbER1cmF0aW9u
OjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBvcmFsRHVyYXRpb24pIH07CisKK1RlbXBvcmFsRHVyYXRp
b24qIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdWJkdXJhdGlvbnMmJiBzdWJkdXJhdGlvbnMpCit7CisgICAgYXV0byogb2JqZWN0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxEdXJhdGlvbj4odm0uaGVhcCkpIFRlbXBv
cmFsRHVyYXRpb24odm0sIHN0cnVjdHVyZSwgV1RGTW92ZShzdWJkdXJhdGlvbnMpKTsKKyAgICBv
YmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitTdHJ1
Y3R1cmUqIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworVGVtcG9yYWxEdXJhdGlv
bjo6VGVtcG9yYWxEdXJhdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdWJkdXJh
dGlvbnMmJiBzdWJkdXJhdGlvbnMpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBt
X3N1YmR1cmF0aW9ucyhXVEZNb3ZlKHN1YmR1cmF0aW9ucykpCit7Cit9CisKK3ZvaWQgVGVtcG9y
YWxEdXJhdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworfQorCisvLyBJ
c1ZhbGlkRHVyYXRpb24gKCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0
ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzLCBuYW5vc2Vjb25kcyApCiti
b29sIGlzVmFsaWREdXJhdGlvbihjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMm
IHN1YmR1cmF0aW9ucykKK3sKKyAgICBpbnQgc2lnbiA9IDA7CisgICAgZm9yIChhdXRvIHZhbHVl
IDogc3ViZHVyYXRpb25zKSB7CisgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZSh2YWx1ZSkgfHwg
KHZhbHVlIDwgMCAmJiBzaWduID4gMCkgfHwgKHZhbHVlID4gMCAmJiBzaWduIDwgMCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFzaWduICYmIHZhbHVlKQorICAg
ICAgICAgICAgc2lnbiA9IHZhbHVlID4gMCA/IDEgOiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworLy8gIENyZWF0ZVRlbXBvcmFsRHVyYXRpb24gKCB5ZWFycywgbW9udGhzLCB3
ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9z
ZWNvbmRzLCBuYW5vc2Vjb25kcyBbICwgbmV3VGFyZ2V0IF0gKQorVGVtcG9yYWxEdXJhdGlvbiog
VGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxpZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdWJkdXJhdGlvbnMmJiBzdWJkdXJhdGlvbnMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIWlzVmFsaWREdXJhdGlvbihzdWJkdXJh
dGlvbnMpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
Y2Fubm90IGNyZWF0ZSBEdXJhdGlvbiB3aXRoIGluY29uc2lzdGVudCBudW1lcmljIHZhbHVlcyJf
cyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIFRlbXBvcmFsRHVy
YXRpb246OmNyZWF0ZSh2bSwgc3RydWN0dXJlID8gc3RydWN0dXJlIDogZ2xvYmFsT2JqZWN0LT5k
dXJhdGlvblN0cnVjdHVyZSgpLCBXVEZNb3ZlKHN1YmR1cmF0aW9ucykpOworfQorCisvLyBEdXJh
dGlvbkhhbmRsZUZyYWN0aW9ucyAoIGZIb3VycywgbWludXRlcywgZk1pbnV0ZXMsIHNlY29uZHMs
IGZTZWNvbmRzLCBtaWxsaXNlY29uZHMsIGZNaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgZk1p
Y3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIGZOYW5vc2Vjb25kcyApCitzdGF0aWMgdm9pZCBoYW5k
bGVGcmFjdGlvbihUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9ucywg
aW50IGZhY3RvciwgU3RyaW5nVmlldyBmcmFjdGlvblN0cmluZywgVGVtcG9yYWxVbml0IGZyYWN0
aW9uVHlwZSkKK3sKKyAgICBBU1NFUlQoZnJhY3Rpb25TdHJpbmcubGVuZ3RoKCkpOworICAgIEFT
U0VSVChmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxVbml0OjpIb3VyIHx8IGZyYWN0aW9uVHlwZSA9
PSBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSB8fCBmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxVbml0OjpT
ZWNvbmQpOworCisgICAgaWYgKGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6OlNlY29uZCkg
eworICAgICAgICBhdXRvIHBhZGRlZCA9IG1ha2VTdHJpbmcoZnJhY3Rpb25TdHJpbmcsICIwMDAw
MDAwMCIpOworICAgICAgICBzdWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9y
YWxVbml0OjpNaWxsaXNlY29uZCldID0gZmFjdG9yICogcGFyc2VJbnQocGFkZGVkLnN1YnN0cmlu
ZygwLCAzKSwgMTApOworICAgICAgICBzdWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4o
VGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCldID0gZmFjdG9yICogcGFyc2VJbnQocGFkZGVkLnN1
YnN0cmluZygzLCAzKSwgMTApOworICAgICAgICBzdWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kKV0gPSBmYWN0b3IgKiBwYXJzZUludChwYWRk
ZWQuc3Vic3RyaW5nKDYsIDMpLCAxMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBk
b3VibGUgZnJhY3Rpb24gPSBmYWN0b3IgKiBwYXJzZUludChmcmFjdGlvblN0cmluZywgMTApIC8g
c3RkOjpwb3coMTAsIGZyYWN0aW9uU3RyaW5nLmxlbmd0aCgpKTsKKyAgICBpZiAoIWZyYWN0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZnJhY3Rpb25UeXBlID09IFRlbXBvcmFsVW5p
dDo6SG91cikgeworICAgICAgICBmcmFjdGlvbiAqPSA2MDsKKyAgICAgICAgc3ViZHVyYXRpb25z
W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TWludXRlKV0gPSBzdGQ6OnRydW5j
KGZyYWN0aW9uKTsKKyAgICAgICAgZnJhY3Rpb24gPSBzdGQ6OmZtb2QoZnJhY3Rpb24sIDEpOwor
ICAgICAgICBpZiAoIWZyYWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGZyYWN0aW9uICo9IDYwOworICAgIHN1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihU
ZW1wb3JhbFVuaXQ6OlNlY29uZCldID0gc3RkOjp0cnVuYyhmcmFjdGlvbik7CisgICAgZnJhY3Rp
b24gPSBzdGQ6OmZtb2QoZnJhY3Rpb24sIDEpOworICAgIGlmICghZnJhY3Rpb24pCisgICAgICAg
IHJldHVybjsKKworICAgIGZyYWN0aW9uICo9IDEwMDA7CisgICAgc3ViZHVyYXRpb25zW3N0YXRp
Y19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQpXSA9IHN0ZDo6dHJ1bmMo
ZnJhY3Rpb24pOworICAgIGZyYWN0aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9uLCAxKTsKKyAgICBp
ZiAoIWZyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBmcmFjdGlvbiAqPSAxMDAwOwor
ICAgIHN1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1pY3Jv
c2Vjb25kKV0gPSBzdGQ6OnRydW5jKGZyYWN0aW9uKTsKKyAgICBmcmFjdGlvbiA9IHN0ZDo6Zm1v
ZChmcmFjdGlvbiwgMSk7CisgICAgaWYgKCFmcmFjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3ViZHVyYXRpb25zW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TmFub3Nl
Y29uZCldID0gc3RkOjp0cnVuYyhmcmFjdGlvbiAqIDEwMDApOworfQorCisvLyBQYXJzZVRlbXBv
cmFsRHVyYXRpb25TdHJpbmcgKCBpc29TdHJpbmcgKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KK3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zPiBU
ZW1wb3JhbER1cmF0aW9uOjpwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+
JiBidWZmZXIpCit7CisgICAgLy8gSVNPIDg2MDEgZHVyYXRpb24gc3RyaW5ncyBhcmUgbGlrZSAi
LVAxWTJNM1c0RFQ1SDZNNy4xMjM0NTY3ODlTIi4gTm90ZXM6CisgICAgLy8gLSBjYXNlIGluc2Vu
c2l0aXZlCisgICAgLy8gLSBzaWduOiArIC0g4oiSKFUrMjIxMikKKyAgICAvLyAtIHNlcGFyYXRv
cjogLiAsCisgICAgLy8gLSBUIGlzIHByZXNlbnQgaWZmIHRoZXJlIGlzIGEgdGltZSBwYXJ0Cisg
ICAgLy8gLSBpbnRlZ3JhbCBwYXJ0cyBjYW4gaGF2ZSBhbnkgbnVtYmVyIG9mIGRpZ2l0cyBidXQg
ZnJhY3Rpb25hbCBwYXJ0cyBoYXZlIGF0IG1vc3QgOQorICAgIC8vIC0gaG91cnMgYW5kIG1pbnV0
ZXMgY2FuIGhhdmUgZnJhY3Rpb25hbCBwYXJ0cyB0b28sIGJ1dCBvbmx5IGFzIHRoZSBMQVNUIHBh
cnQgb2YgdGhlIHN0cmluZworICAgIGlmIChidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPCAzKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgU3ViZHVyYXRpb25zIHJlc3VsdCB7
IH07CisKKyAgICBpbnQgZmFjdG9yID0gMTsKKyAgICBpZiAoKmJ1ZmZlciA9PSAnKycpCisgICAg
ICAgIGJ1ZmZlci5hZHZhbmNlKCk7CisgICAgZWxzZSBpZiAoKmJ1ZmZlciA9PSAnLScgfHwgKmJ1
ZmZlciA9PSAweDIyMTIpIHsKKyAgICAgICAgZmFjdG9yID0gLTE7CisgICAgICAgIGJ1ZmZlci5h
ZHZhbmNlKCk7CisgICAgfQorCisgICAgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVyKSAhPSAnUCcp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgYnVmZmVyLmFkdmFuY2Uo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGRhdGVQYXJ0SW5kZXggPSAwOyBkYXRlUGFydEluZGV4IDwg
NCAmJiBidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgqYnVm
ZmVyKTsgYnVmZmVyLmFkdmFuY2UoKSkgeworICAgICAgICB1bnNpZ25lZCBkaWdpdHMgPSAxOwor
ICAgICAgICB3aGlsZSAoZGlnaXRzIDwgYnVmZmVyLmxlbmd0aFJlbWFpbmluZygpICYmIGlzQVND
SUlEaWdpdChidWZmZXJbZGlnaXRzXSkpCisgICAgICAgICAgICBkaWdpdHMrKzsKKworICAgICAg
ICBkb3VibGUgaW50ZWdlciA9IGZhY3RvciAqIHBhcnNlSW50KHsgYnVmZmVyLnBvc2l0aW9uKCks
IGRpZ2l0cyB9LCAxMCk7CisgICAgICAgIGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRzKTsKKyAgICAg
ICAgaWYgKCFidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKQorICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpID09
ICdZJyAmJiAhZGF0ZVBhcnRJbmRleCkgeworICAgICAgICAgICAgcmVzdWx0W3N0YXRpY19jYXN0
PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6WWVhcildID0gaW50ZWdlcjsKKyAgICAgICAgICAgIGRh
dGVQYXJ0SW5kZXggPSAxOworICAgICAgICB9IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVy
KSA9PSAnTScgJiYgZGF0ZVBhcnRJbmRleCA8IDIpIHsKKyAgICAgICAgICAgIHJlc3VsdFtzdGF0
aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1vbnRoKV0gPSBpbnRlZ2VyOworICAgICAg
ICAgICAgZGF0ZVBhcnRJbmRleCA9IDI7CisgICAgICAgIH0gZWxzZSBpZiAodG9BU0NJSVVwcGVy
KCpidWZmZXIpID09ICdXJyAmJiBkYXRlUGFydEluZGV4IDwgMykgeworICAgICAgICAgICAgcmVz
dWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6V2VlayldID0gaW50ZWdlcjsK
KyAgICAgICAgICAgIGRhdGVQYXJ0SW5kZXggPSAzOworICAgICAgICB9IGVsc2UgaWYgKHRvQVND
SUlVcHBlcigqYnVmZmVyKSA9PSAnRCcpIHsKKyAgICAgICAgICAgIHJlc3VsdFtzdGF0aWNfY2Fz
dDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OkRheSldID0gaW50ZWdlcjsKKyAgICAgICAgICAgIGRh
dGVQYXJ0SW5kZXggPSA0OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKCFidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgaWYgKGJ1ZmZlci5sZW5ndGhSZW1h
aW5pbmcoKSA8IDMgfHwgdG9BU0NJSVVwcGVyKCpidWZmZXIpICE9ICdUJykKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGJ1ZmZlci5hZHZhbmNlKCk7CisgICAgZm9yICh1bnNp
Z25lZCB0aW1lUGFydEluZGV4ID0gMDsgdGltZVBhcnRJbmRleCA8IDMgJiYgYnVmZmVyLmhhc0No
YXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoKmJ1ZmZlcik7IGJ1ZmZlci5hZHZh
bmNlKCkpIHsKKyAgICAgICAgdW5zaWduZWQgZGlnaXRzID0gMTsKKyAgICAgICAgd2hpbGUgKGRp
Z2l0cyA8IGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoYnVmZmVyW2Rp
Z2l0c10pKQorICAgICAgICAgICAgZGlnaXRzKys7CisKKyAgICAgICAgZG91YmxlIGludGVnZXIg
PSBmYWN0b3IgKiBwYXJzZUludCh7IGJ1ZmZlci5wb3NpdGlvbigpLCBkaWdpdHMgfSwgMTApOwor
ICAgICAgICBidWZmZXIuYWR2YW5jZUJ5KGRpZ2l0cyk7CisgICAgICAgIGlmICghYnVmZmVyLmhh
c0NoYXJhY3RlcnNSZW1haW5pbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICAgICAgU3RyaW5nVmlldyBmcmFjdGlvbmFsUGFydDsKKyAgICAgICAgaWYgKCpidWZm
ZXIgPT0gJy4nIHx8ICpidWZmZXIgPT0gJywnKSB7CisgICAgICAgICAgICBidWZmZXIuYWR2YW5j
ZSgpOworICAgICAgICAgICAgZGlnaXRzID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChkaWdpdHMg
PCBidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgJiYgaXNBU0NJSURpZ2l0KGJ1ZmZlcltkaWdpdHNd
KSkKKyAgICAgICAgICAgICAgICBkaWdpdHMrKzsKKyAgICAgICAgICAgIGlmICghZGlnaXRzIHx8
IGRpZ2l0cyA+IDkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
ICAgICAgICAgZnJhY3Rpb25hbFBhcnQgPSB7IGJ1ZmZlci5wb3NpdGlvbigpLCBkaWdpdHMgfTsK
KyAgICAgICAgICAgIGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRzKTsKKyAgICAgICAgICAgIGlmICgh
YnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRvQVNDSUlVcHBlcigqYnVm
ZmVyKSA9PSAnSCcgJiYgIXRpbWVQYXJ0SW5kZXgpIHsKKyAgICAgICAgICAgIHJlc3VsdFtzdGF0
aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OkhvdXIpXSA9IGludGVnZXI7CisgICAgICAg
ICAgICBpZiAoZnJhY3Rpb25hbFBhcnQpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVGcmFjdGlv
bihyZXN1bHQsIGZhY3RvciwgZnJhY3Rpb25hbFBhcnQsIFRlbXBvcmFsVW5pdDo6SG91cik7Cisg
ICAgICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9IDM7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICB0aW1lUGFydEluZGV4ID0gMTsKKyAgICAgICAgfSBlbHNlIGlmICh0b0FT
Q0lJVXBwZXIoKmJ1ZmZlcikgPT0gJ00nICYmIHRpbWVQYXJ0SW5kZXggPCAyKSB7CisgICAgICAg
ICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpNaW51dGUpXSA9
IGludGVnZXI7CisgICAgICAgICAgICBpZiAoZnJhY3Rpb25hbFBhcnQpIHsKKyAgICAgICAgICAg
ICAgICBoYW5kbGVGcmFjdGlvbihyZXN1bHQsIGZhY3RvciwgZnJhY3Rpb25hbFBhcnQsIFRlbXBv
cmFsVW5pdDo6TWludXRlKTsKKyAgICAgICAgICAgICAgICB0aW1lUGFydEluZGV4ID0gMzsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRpbWVQYXJ0SW5kZXggPSAyOworICAg
ICAgICB9IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnUycpIHsKKyAgICAgICAg
ICAgIHJlc3VsdFtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OlNlY29uZCldID0g
aW50ZWdlcjsKKyAgICAgICAgICAgIGlmIChmcmFjdGlvbmFsUGFydCkKKyAgICAgICAgICAgICAg
ICBoYW5kbGVGcmFjdGlvbihyZXN1bHQsIGZhY3RvciwgZnJhY3Rpb25hbFBhcnQsIFRlbXBvcmFs
VW5pdDo6U2Vjb25kKTsKKyAgICAgICAgICAgIHRpbWVQYXJ0SW5kZXggPSAzOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYg
KGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBUb1RlbXBvcmFsRHVyYXRpb25S
ZWNvcmQgKCB0ZW1wb3JhbER1cmF0aW9uTGlrZSApCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJh
dGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6ZnJvbU9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogZHVyYXRpb25MaWtlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBBU1NFUlQoIWR1cmF0aW9uTGlrZS0+aW5oZXJpdHM8VGVtcG9yYWxEdXJhdGlvbj4odm0p
KTsKKworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQ7CisgICAgYXV0byBoYXNSZWxldmFudFByb3Bl
cnR5ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlRlbXBvcmFs
VW5pdHM7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZHVyYXRpb25MaWtlLT5nZXQo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUodm0sIGkpKTsKKworICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWQoKSkgeworICAgICAgICAgICAgcmVzdWx0W2ldID0gMDsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaGFzUmVsZXZhbnRQcm9wZXJ0eSA9IHRy
dWU7CisgICAgICAgIHJlc3VsdFtpXSA9IHZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgaWYgKCFp
c0ludGVnZXIocmVzdWx0W2ldKSkgeworICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0aWVzIG11c3QgYmUgaW50
ZWdlcnMiX3MpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghaGFzUmVsZXZhbnRQcm9wZXJ0eSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAib2JqZWN0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgVGVt
cG9yYWwuRHVyYXRpb24gcHJvcGVydHkiX3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIFRvVGVtcG9yYWxEdXJhdGlvbiAoIGl0ZW0g
KQorVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6dG9EdXJhdGlvbihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZW1WYWx1ZSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgaWYgKGl0ZW1WYWx1ZS5pbmhlcml0czxUZW1wb3JhbER1cmF0aW9uPih2
bSkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KGl0ZW1WYWx1ZSk7
CisKKyAgICBpZiAoaXRlbVZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxpZChnbG9iYWxPYmplY3Qs
IGZyb21PYmplY3QoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChpdGVtVmFsdWUpKSkpOworCisgICAg
U3RyaW5nIHN0cmluZyA9IGl0ZW1WYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgYXV0byBwYXJzZWRT
dWJkdXJhdGlvbnMgPSByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIGJ1
ZmZlcikgLT4gc3RkOjpvcHRpb25hbDxTdWJkdXJhdGlvbnM+IHsKKyAgICAgICAgcmV0dXJuIHBh
cnNlKGJ1ZmZlcik7CisgICAgfSk7CisgICAgaWYgKCFwYXJzZWRTdWJkdXJhdGlvbnMpIHsKKyAg
ICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJjb3VsZCBub3QgcGFy
c2UgRHVyYXRpb24gc3RyaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGVJ
ZlZhbGlkKGdsb2JhbE9iamVjdCwgV1RGTW92ZShwYXJzZWRTdWJkdXJhdGlvbnMudmFsdWUoKSkp
KTsKK30KKworVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6ZnJvbShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZW1WYWx1ZSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmluaGVyaXRzPFRlbXBv
cmFsRHVyYXRpb24+KHZtKSkgeworICAgICAgICBTdWJkdXJhdGlvbnMgY2xvbmVkID0ganNDYXN0
PFRlbXBvcmFsRHVyYXRpb24qPihpdGVtVmFsdWUpLT5tX3N1YmR1cmF0aW9uczsKKyAgICAgICAg
cmV0dXJuIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJhdGlv
blN0cnVjdHVyZSgpLCBXVEZNb3ZlKGNsb25lZCkpOworICAgIH0KKworICAgIHJldHVybiB0b0R1
cmF0aW9uKGdsb2JhbE9iamVjdCwgaXRlbVZhbHVlKTsKK30KKworaW50IFRlbXBvcmFsRHVyYXRp
b246OnNpZ24oKSBjb25zdAoreworICAgIGZvciAoYXV0byB2YWx1ZSA6IG1fc3ViZHVyYXRpb25z
KSB7CisgICAgICAgIGlmICh2YWx1ZSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAg
ICAgICAgaWYgKHZhbHVlID4gMCkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAg
IHJldHVybiAwOworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxE
dXJhdGlvbjo6d2l0aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogZHVy
YXRpb25MaWtlKSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdWJkdXJhdGlv
bnMgcmVzdWx0OworICAgIGF1dG8gaGFzUmVsZXZhbnRQcm9wZXJ0eSA9IGZhbHNlOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBpKyspIHsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGR1cmF0aW9uTGlrZS0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lKHZtLCBpKSk7CisKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAg
ICAgICAgICAgIHJlc3VsdFtpXSA9IG1fc3ViZHVyYXRpb25zW2ldOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKworICAgICAgICBoYXNSZWxldmFudFByb3BlcnR5ID0gdHJ1ZTsK
KyAgICAgICAgcmVzdWx0W2ldID0gdmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICBpZiAoIWlzSW50
ZWdlcihyZXN1bHRbaV0pKSB7CisgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uIHByb3BlcnRpZXMgbXVzdCBiZSBpbnRlZ2Vy
cyJfcyk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKCFoYXNSZWxldmFudFByb3BlcnR5KSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJvYmplY3QgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBUZW1wb3Jh
bC5EdXJhdGlvbiBwcm9wZXJ0eSJfcyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zIFRl
bXBvcmFsRHVyYXRpb246Om5lZ2F0ZWQoKSBjb25zdAoreworICAgIFN1YmR1cmF0aW9ucyByZXN1
bHQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlRlbXBvcmFsVW5pdHM7IGkr
KykKKyAgICAgICAgcmVzdWx0W2ldID0gLW1fc3ViZHVyYXRpb25zW2ldOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0
aW9uOjphYnMoKSBjb25zdAoreworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQ7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlRlbXBvcmFsVW5pdHM7IGkrKykKKyAgICAgICAgcmVz
dWx0W2ldID0gc3RkOjphYnMobV9zdWJkdXJhdGlvbnNbaV0pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1RlbXBvcmFsVW5pdCBUZW1wb3JhbER1cmF0aW9uOjpsYXJnZXN0U3ViZHVyYXRpb24o
KSBjb25zdAoreworICAgIHVpbnQ4X3QgaW5kZXggPSAwOworICAgIHdoaWxlIChpbmRleCA8IG51
bWJlck9mVGVtcG9yYWxVbml0cyAtIDEgJiYgIW1fc3ViZHVyYXRpb25zW2luZGV4XSkKKyAgICAg
ICAgaW5kZXgrKzsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVtcG9yYWxVbml0PihpbmRleCk7
Cit9CisKK3N0YXRpYyBkb3VibGUgdG90YWxOYW5vc2Vjb25kcyhUZW1wb3JhbER1cmF0aW9uOjpT
dWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9ucykKK3sKKyAgICBhdXRvIGhvdXJzID0gMjQgKiBzdWJk
dXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpEYXkpXSArIHN1YmR1
cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OkhvdXIpXTsKKyAgICBh
dXRvIG1pbnV0ZXMgPSA2MCAqIGhvdXJzICsgc3ViZHVyYXRpb25zW3N0YXRpY19jYXN0PHVpbnQ4
X3Q+KFRlbXBvcmFsVW5pdDo6TWludXRlKV07CisgICAgYXV0byBzZWNvbmRzID0gNjAgKiBtaW51
dGVzICsgc3ViZHVyYXRpb25zW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6U2Vj
b25kKV07CisgICAgYXV0byBtaWxsaXNlY29uZHMgPSAxMDAwICogc2Vjb25kcyArIHN1YmR1cmF0
aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kKV07Cisg
ICAgYXV0byBtaWNyb3NlY29uZHMgPSAxMDAwICogbWlsbGlzZWNvbmRzICsgc3ViZHVyYXRpb25z
W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQpXTsKKyAgICBy
ZXR1cm4gMTAwMCAqIG1pY3Jvc2Vjb25kcyArIHN1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50
OF90PihUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQpXTsKK30KKworLy8gQmFsYW5jZUR1cmF0aW9u
ICggZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNv
bmRzLCBuYW5vc2Vjb25kcywgbGFyZ2VzdFVuaXQgWyAsIHJlbGF0aXZlVG8gXSApCit2b2lkIFRl
bXBvcmFsRHVyYXRpb246OmJhbGFuY2UoU3ViZHVyYXRpb25zJiBzdWJkdXJhdGlvbnMsIFRlbXBv
cmFsVW5pdCBsYXJnZXN0VW5pdCkKK3sKKyAgICBhdXRvIG5hbm9zZWNvbmRzID0gdG90YWxOYW5v
c2Vjb25kcyhzdWJkdXJhdGlvbnMpOworCisgICAgc3ViZHVyYXRpb25zW3N0YXRpY19jYXN0PHVp
bnQ4X3Q+KFRlbXBvcmFsVW5pdDo6WWVhcildID0gMDsKKyAgICBzdWJkdXJhdGlvbnNbc3RhdGlj
X2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpNb250aCldID0gMDsKKyAgICBzdWJkdXJhdGlv
bnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpXZWVrKV0gPSAwOworICAgIHN1
YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OkRheSldID0gMDsK
KworICAgIGlmIChsYXJnZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6OkRheSkgeworICAgICAgICBz
dGF0aWMgY29uc3QgZG91YmxlIG5hbm9zZWNvbmRzUGVyRGF5ID0gMjQuMCAqIDYwICogNjAgKiAx
MDAwICogMTAwMCAqIDEwMDA7CisgICAgICAgIHN1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50
OF90PihUZW1wb3JhbFVuaXQ6OkRheSldID0gc3RkOjp0cnVuYyhuYW5vc2Vjb25kcyAvIG5hbm9z
ZWNvbmRzUGVyRGF5KTsKKyAgICAgICAgbmFub3NlY29uZHMgPSBzdGQ6OmZtb2QobmFub3NlY29u
ZHMsIG5hbm9zZWNvbmRzUGVyRGF5KTsKKyAgICB9CisKKyAgICBzdWJkdXJhdGlvbnNbc3RhdGlj
X2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kKV0gPSBzdGQ6OmZtb2QobmFu
b3NlY29uZHMsIDEwMDApOworICAgIHN1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihU
ZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kKV0gPSAwOworICAgIHN1YmR1cmF0aW9uc1tzdGF0aWNf
Y2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kKV0gPSAwOworICAgIHN1YmR1
cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OlNlY29uZCldID0gMDsK
KyAgICBzdWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpNaW51
dGUpXSA9IDA7CisgICAgc3ViZHVyYXRpb25zW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFs
VW5pdDo6SG91cildID0gMDsKKworICAgIGRvdWJsZSBtaWNyb3NlY29uZHMgPSBzdGQ6OnRydW5j
KG5hbm9zZWNvbmRzIC8gMTAwMCk7CisgICAgZG91YmxlIG1pbGxpc2Vjb25kcyA9IHN0ZDo6dHJ1
bmMobWljcm9zZWNvbmRzIC8gMTAwMCk7CisgICAgZG91YmxlIHNlY29uZHMgPSBzdGQ6OnRydW5j
KG1pbGxpc2Vjb25kcyAvIDEwMDApOworICAgIGRvdWJsZSBtaW51dGVzID0gc3RkOjp0cnVuYyhz
ZWNvbmRzIC8gNjApOworICAgIGlmIChsYXJnZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6OkhvdXIp
IHsKKyAgICAgICAgc3ViZHVyYXRpb25zW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5p
dDo6TWljcm9zZWNvbmQpXSA9IHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDApOworICAgICAg
ICBzdWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpNaWxsaXNl
Y29uZCldID0gc3RkOjpmbW9kKG1pbGxpc2Vjb25kcywgMTAwMCk7CisgICAgICAgIHN1YmR1cmF0
aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OlNlY29uZCldID0gc3RkOjpm
bW9kKHNlY29uZHMsIDYwKTsKKyAgICAgICAgc3ViZHVyYXRpb25zW3N0YXRpY19jYXN0PHVpbnQ4
X3Q+KFRlbXBvcmFsVW5pdDo6TWludXRlKV0gPSBzdGQ6OmZtb2QobWludXRlcywgNjApOworICAg
ICAgICBzdWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpIb3Vy
KV0gPSBzdGQ6OnRydW5jKG1pbnV0ZXMgLyA2MCk7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5p
dCA9PSBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSkgeworICAgICAgICBzdWJkdXJhdGlvbnNbc3RhdGlj
X2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCldID0gc3RkOjpmbW9kKG1p
Y3Jvc2Vjb25kcywgMTAwMCk7CisgICAgICAgIHN1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50
OF90PihUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kKV0gPSBzdGQ6OmZtb2QobWlsbGlzZWNvbmRz
LCAxMDAwKTsKKyAgICAgICAgc3ViZHVyYXRpb25zW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBv
cmFsVW5pdDo6U2Vjb25kKV0gPSBzdGQ6OmZtb2Qoc2Vjb25kcywgNjApOworICAgICAgICBzdWJk
dXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpNaW51dGUpXSA9IG1p
bnV0ZXM7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBUZW1wb3JhbFVuaXQ6OlNlY29u
ZCkgeworICAgICAgICBzdWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxV
bml0OjpNaWNyb3NlY29uZCldID0gc3RkOjpmbW9kKG1pY3Jvc2Vjb25kcywgMTAwMCk7CisgICAg
ICAgIHN1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1pbGxp
c2Vjb25kKV0gPSBzdGQ6OmZtb2QobWlsbGlzZWNvbmRzLCAxMDAwKTsKKyAgICAgICAgc3ViZHVy
YXRpb25zW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6U2Vjb25kKV0gPSBzZWNv
bmRzOworICAgIH0gZWxzZSBpZiAobGFyZ2VzdFVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaWxsaXNl
Y29uZCkgeworICAgICAgICBzdWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9y
YWxVbml0OjpNaWNyb3NlY29uZCldID0gc3RkOjpmbW9kKG1pY3Jvc2Vjb25kcywgMTAwMCk7Cisg
ICAgICAgIHN1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1p
bGxpc2Vjb25kKV0gPSBtaWxsaXNlY29uZHM7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9
PSBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kKQorICAgICAgICBzdWJkdXJhdGlvbnNbc3RhdGlj
X2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCldID0gbWljcm9zZWNvbmRz
OworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6
YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3RoZXJWYWx1ZSkgY29u
c3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogb3RoZXIgPSB0b0R1cmF0aW9u
KGdsb2JhbE9iamVjdCwgb3RoZXJWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKworICAgIGF1dG8gbGFyZ2VzdFVuaXQgPSBzdGF0aWNfY2FzdDxUZW1wb3JhbFVu
aXQ+KHN0ZDo6bWluKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxhcmdlc3RTdWJkdXJhdGlvbigpKSwg
c3RhdGljX2Nhc3Q8dWludDhfdD4ob3RoZXItPmxhcmdlc3RTdWJkdXJhdGlvbigpKSkpOworICAg
IGlmIChsYXJnZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6OldlZWspIHsKKyAgICAgICAgdGhyb3dS
YW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3QgYWRkIGEgZHVyYXRpb24gb2Yg
eWVhcnMsIG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBhIHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0IHsK
KyAgICAgICAgMCwgMCwgMCwgZGF5cygpICsgb3RoZXItPmRheXMoKSwKKyAgICAgICAgaG91cnMo
KSArIG90aGVyLT5ob3VycygpLCBtaW51dGVzKCkgKyBvdGhlci0+bWludXRlcygpLCBzZWNvbmRz
KCkgKyBvdGhlci0+c2Vjb25kcygpLAorICAgICAgICBtaWxsaXNlY29uZHMoKSArIG90aGVyLT5t
aWxsaXNlY29uZHMoKSwgbWljcm9zZWNvbmRzKCkgKyBvdGhlci0+bWljcm9zZWNvbmRzKCksIG5h
bm9zZWNvbmRzKCkgKyBvdGhlci0+bmFub3NlY29uZHMoKQorICAgIH07CisKKyAgICBiYWxhbmNl
KHJlc3VsdCwgbGFyZ2VzdFVuaXQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1RlbXBvcmFs
RHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjpzdWJ0cmFjdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG90aGVyVmFsdWUpIGNvbnN0Cit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIG90aGVyID0gdG9EdXJhdGlvbihnbG9iYWxPYmpl
Y3QsIG90aGVyVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICBhdXRvIGxhcmdlc3RVbml0ID0gc3RhdGljX2Nhc3Q8VGVtcG9yYWxVbml0PihzdGQ6Om1p
bihzdGF0aWNfY2FzdDx1aW50OF90PihsYXJnZXN0U3ViZHVyYXRpb24oKSksIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KG90aGVyLT5sYXJnZXN0U3ViZHVyYXRpb24oKSkpKTsKKyAgICBpZiAobGFyZ2Vz
dFVuaXQgPD0gVGVtcG9yYWxVbml0OjpXZWVrKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHN1YnRyYWN0IGEgZHVyYXRpb24gb2YgeWVhcnMs
IG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBhIHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0IHsKKyAgICAg
ICAgMCwgMCwgMCwgZGF5cygpIC0gb3RoZXItPmRheXMoKSwKKyAgICAgICAgaG91cnMoKSAtIG90
aGVyLT5ob3VycygpLCBtaW51dGVzKCkgLSBvdGhlci0+bWludXRlcygpLCBzZWNvbmRzKCkgLSBv
dGhlci0+c2Vjb25kcygpLAorICAgICAgICBtaWxsaXNlY29uZHMoKSAtIG90aGVyLT5taWxsaXNl
Y29uZHMoKSwgbWljcm9zZWNvbmRzKCkgLSBvdGhlci0+bWljcm9zZWNvbmRzKCksIG5hbm9zZWNv
bmRzKCkgLSBvdGhlci0+bmFub3NlY29uZHMoKQorICAgIH07CisKKyAgICBiYWxhbmNlKHJlc3Vs
dCwgbGFyZ2VzdFVuaXQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIEZJWE1FOiBJbXBs
ZW1lbnQgcmVsYXRpdmVUbyBwYXJhbWV0ZXIgYWZ0ZXIgaW1wbGVtZW50aW5nIERhdGVUaW1lIGNs
YXNzZXMuCisvLyBSb3VuZER1cmF0aW9uICggeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhv
dXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3Nl
Y29uZHMsIGluY3JlbWVudCwgdW5pdCwgcm91bmRpbmdNb2RlIFsgLCByZWxhdGl2ZVRvIF0gKQor
c3RkOjpwYWlyPFRlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucywgZG91YmxlPiBUZW1wb3Jh
bER1cmF0aW9uOjpyb3VuZChQcmVjaXNpb25EYXRhIGRhdGEsIFJvdW5kaW5nTW9kZSBtb2RlKSBj
b25zdAoreworICAgIC8vIHRlbXBvcmFyeSEKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDhf
dD4oZGF0YS51bml0KSA+PSBzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OlNlY29u
ZCkpOworCisgICAgU3ViZHVyYXRpb25zIHJlc3VsdCA9IG1fc3ViZHVyYXRpb25zOworICAgIGRv
dWJsZSByZW1haW5kZXIgPSAwOworCisgICAgc3dpdGNoIChkYXRhLnVuaXQpIHsKKyAgICBjYXNl
IFRlbXBvcmFsVW5pdDo6U2Vjb25kOiB7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbFNlY29uZHMg
PSBzZWNvbmRzKCkgKyBtaWxsaXNlY29uZHMoKSAqIDFlLTMgKyBtaWNyb3NlY29uZHMoKSAqIDFl
LTYgKyBuYW5vc2Vjb25kcygpICogMWUtOTsKKyAgICAgICAgYXV0byBuZXdTZWNvbmRzID0gcm91
bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsU2Vjb25kcywgZGF0YS5pbmNyZW1lbnQsIG1v
ZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsU2Vjb25kcyAtIG5ld1NlY29uZHM7
CisgICAgICAgIHJlc3VsdFtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OlNlY29u
ZCldID0gbmV3U2Vjb25kczsKKyAgICAgICAgcmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRl
bXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQpXSA9IDA7CisgICAgICAgIHJlc3VsdFtzdGF0aWNfY2Fz
dDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kKV0gPSAwOworICAgICAgICByZXN1
bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kKV0gPSAwOwor
ICAgIH0gYnJlYWs7CisgICAgY2FzZSBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kOiB7CisgICAg
ICAgIGF1dG8gZnJhY3Rpb25hbE1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcygpICsgbWljcm9z
ZWNvbmRzKCkgKiAxZS0zICsgbmFub3NlY29uZHMoKSAqIDFlLTY7CisgICAgICAgIGF1dG8gbmV3
TWlsbGlzZWNvbmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsTWlsbGlzZWNv
bmRzLCBkYXRhLmluY3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9u
YWxNaWxsaXNlY29uZHMgLSBuZXdNaWxsaXNlY29uZHM7CisgICAgICAgIHJlc3VsdFtzdGF0aWNf
Y2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kKV0gPSBuZXdNaWxsaXNlY29u
ZHM7CisgICAgICAgIHJlc3VsdFtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1p
Y3Jvc2Vjb25kKV0gPSAwOworICAgICAgICByZXN1bHRbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVt
cG9yYWxVbml0OjpOYW5vc2Vjb25kKV0gPSAwOworICAgIH0gYnJlYWs7CisgICAgY2FzZSBUZW1w
b3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kOiB7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbE1pY3Jvc2Vj
b25kcyA9IG1pY3Jvc2Vjb25kcygpICsgbmFub3NlY29uZHMoKSAqIDFlLTM7CisgICAgICAgIGF1
dG8gbmV3TWljcm9zZWNvbmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsTWlj
cm9zZWNvbmRzLCBkYXRhLmluY3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZy
YWN0aW9uYWxNaWNyb3NlY29uZHMgLSBuZXdNaWNyb3NlY29uZHM7CisgICAgICAgIHJlc3VsdFtz
dGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kKV0gPSBuZXdNaWNy
b3NlY29uZHM7CisgICAgICAgIHJlc3VsdFtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVu
aXQ6Ok5hbm9zZWNvbmQpXSA9IDA7CisgICAgfSBicmVhazsKKyAgICBjYXNlIFRlbXBvcmFsVW5p
dDo6TmFub3NlY29uZDogeworICAgICAgICBhdXRvIG5ld05hbm9zZWNvbmRzID0gcm91bmROdW1i
ZXJUb0luY3JlbWVudChuYW5vc2Vjb25kcygpLCBkYXRhLmluY3JlbWVudCwgbW9kZSk7CisgICAg
ICAgIHJlbWFpbmRlciA9IG5hbm9zZWNvbmRzKCkgLSBuZXdOYW5vc2Vjb25kczsKKyAgICAgICAg
cmVzdWx0W3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZCldID0g
bmV3TmFub3NlY29uZHM7CisgICAgfSBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0LCByZW1haW5kZXIpOworfQorCitTdHJpbmcgVGVt
cG9yYWxEdXJhdGlvbjo6dG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBvcHRpb25zVmFsdWUpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpT
T2JqZWN0KiBvcHRpb25zID0gaW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRp
b25zVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBp
ZiAoIW9wdGlvbnMpCisgICAgICAgIHJldHVybiB0b1N0cmluZygpOworCisgICAgUHJlY2lzaW9u
RGF0YSBkYXRhID0gc2Vjb25kc1N0cmluZ1ByZWNpc2lvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBhdXRvIHJvdW5k
aW5nTW9kZSA9IGludGxPcHRpb248Um91bmRpbmdNb2RlPihnbG9iYWxPYmplY3QsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPnJvdW5kaW5nTW9kZSwKKyAgICAgICAgeyB7ICJjZWlsIl9zLCBS
b3VuZGluZ01vZGU6OkNlaWwgfSwgeyAiZmxvb3IiX3MsIFJvdW5kaW5nTW9kZTo6Rmxvb3IgfSwg
eyAidHJ1bmMiX3MsIFJvdW5kaW5nTW9kZTo6VHJ1bmMgfSwgeyAiaGFsZkV4cGFuZCJfcywgUm91
bmRpbmdNb2RlOjpIYWxmRXhwYW5kIH0gfSwKKyAgICAgICAgInJvdW5kaW5nTW9kZSBtdXN0IGJl
IGVpdGhlciBcImNlaWxcIiwgXCJmbG9vclwiLCBcInRydW5jXCIsIG9yIFwiaGFsZkV4cGFuZFwi
Il9zLCBSb3VuZGluZ01vZGU6OlRydW5jKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgLy8gTm8gbmVlZCB0byBtYWtlIGEgbmV3IG9iamVjdCBpZiB3ZSB3ZXJl
IGdpdmVuIGV4cGxpY2l0IGRlZmF1bHRzLgorICAgIGlmICghZGF0YS5wcmVjaXNpb24gJiYgcm91
bmRpbmdNb2RlID09IFJvdW5kaW5nTW9kZTo6VHJ1bmMpCisgICAgICAgIHJldHVybiB0b1N0cmlu
ZygpOworCisgICAgYXV0byByb3VuZGVkID0gVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCksIHRoaXMtPnJvdW5kKGRhdGEsIHJvdW5k
aW5nTW9kZSkuZmlyc3QpOworICAgIHJldHVybiByb3VuZGVkLT50b1N0cmluZyhkYXRhLnByZWNp
c2lvbik7Cit9CisKKy8vIFRlbXBvcmFsRHVyYXRpb25Ub1N0cmluZyAoIHllYXJzLCBtb250aHMs
IHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNy
b3NlY29uZHMsIG5hbm9zZWNvbmRzLCBwcmVjaXNpb24gKQorU3RyaW5nIFRlbXBvcmFsRHVyYXRp
b246OnRvU3RyaW5nKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHByZWNpc2lvbikgY29uc3QKK3sK
KyAgICBBU1NFUlQoIXByZWNpc2lvbiB8fCBwcmVjaXNpb24udmFsdWUoKSA8IDEwKTsKKworICAg
IGF1dG8gYmFsYW5jZWRNaWNyb3NlY29uZHMgPSBtaWNyb3NlY29uZHMoKSArIHN0ZDo6dHJ1bmMo
bmFub3NlY29uZHMoKSAvIDEwMDApOworICAgIGF1dG8gYmFsYW5jZWROYW5vc2Vjb25kcyA9IHN0
ZDo6Zm1vZChuYW5vc2Vjb25kcygpLCAxMDAwKTsKKyAgICBhdXRvIGJhbGFuY2VkTWlsbGlzZWNv
bmRzID0gbWlsbGlzZWNvbmRzKCkgKyBzdGQ6OnRydW5jKGJhbGFuY2VkTWljcm9zZWNvbmRzIC8g
MTAwMCk7CisgICAgYmFsYW5jZWRNaWNyb3NlY29uZHMgPSBzdGQ6OmZtb2QoYmFsYW5jZWRNaWNy
b3NlY29uZHMsIDEwMDApOworICAgIGF1dG8gYmFsYW5jZWRTZWNvbmRzID0gc2Vjb25kcygpICsg
c3RkOjp0cnVuYyhiYWxhbmNlZE1pbGxpc2Vjb25kcyAvIDEwMDApOworICAgIGJhbGFuY2VkTWls
bGlzZWNvbmRzID0gc3RkOjpmbW9kKGJhbGFuY2VkTWlsbGlzZWNvbmRzLCAxMDAwKTsKKworICAg
IC8vIHRlbXBvcmFyeSBoYWNrISBwZW5kaW5nIHNwZWMgZGlzY3Vzc2lvbgorICAgIGF1dG8gZm9y
bWF0SW50ZWdlciA9IFtdKGRvdWJsZSB2YWx1ZSkgLT4gZG91YmxlIHsKKyAgICAgICAgYXV0byBh
YnNWYWx1ZSA9IHN0ZDo6YWJzKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFVOTElLRUxZKGFic1Zh
bHVlID4gbWF4U2FmZUludGVnZXIoKSkgPyBtYXhTYWZlSW50ZWdlcigpIDogYWJzVmFsdWU7Cisg
ICAgfTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGF1dG8gc2lnbiA9IHRo
aXMtPnNpZ24oKTsKKyAgICBpZiAoc2lnbiA8IDApCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCct
Jyk7CisKKyAgICBidWlsZGVyLmFwcGVuZCgnUCcpOworICAgIGlmICh5ZWFycygpKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHllYXJzKCkpLCAnWScpOworICAgIGlmICht
b250aHMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihtb250aHMoKSks
ICdNJyk7CisgICAgaWYgKHdlZWtzKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdElu
dGVnZXIod2Vla3MoKSksICdXJyk7CisgICAgaWYgKGRheXMoKSkKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoZm9ybWF0SW50ZWdlcihkYXlzKCkpLCAnRCcpOworCisgICAgLy8gVGhlIHplcm8gdmFs
dWUgaXMgZGlzcGxheWVkIGluIHNlY29uZHMuCisgICAgYXV0byB1c2VzU2Vjb25kcyA9IGJhbGFu
Y2VkU2Vjb25kcyB8fCBiYWxhbmNlZE1pbGxpc2Vjb25kcyB8fCBiYWxhbmNlZE1pY3Jvc2Vjb25k
cyB8fCBiYWxhbmNlZE5hbm9zZWNvbmRzIHx8ICFzaWduOworICAgIGlmICghaG91cnMoKSAmJiAh
bWludXRlcygpICYmICF1c2VzU2Vjb25kcykKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCdUJyk7CisgICAgaWYgKGhvdXJzKCkpCisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoaG91cnMoKSksICdIJyk7CisgICAgaWYg
KG1pbnV0ZXMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihtaW51dGVz
KCkpLCAnTScpOworICAgIGlmICh1c2VzU2Vjb25kcykgeworICAgICAgICBidWlsZGVyLmFwcGVu
ZChmb3JtYXRJbnRlZ2VyKGJhbGFuY2VkU2Vjb25kcykpOworCisgICAgICAgIGF1dG8gZnJhY3Rp
b24gPSBzdGQ6OmFicyhiYWxhbmNlZE1pbGxpc2Vjb25kcykgKiAxZTYgKyBzdGQ6OmFicyhiYWxh
bmNlZE1pY3Jvc2Vjb25kcykgKiAxZTMgKyBzdGQ6OmFicyhiYWxhbmNlZE5hbm9zZWNvbmRzKTsK
KyAgICAgICAgaWYgKCghcHJlY2lzaW9uICYmIGZyYWN0aW9uKSB8fCAocHJlY2lzaW9uICYmIHBy
ZWNpc2lvbi52YWx1ZSgpKSkgeworICAgICAgICAgICAgYXV0byBwYWRkZWQgPSBtYWtlU3RyaW5n
KCcuJywgcGFkKCcwJywgOSwgZnJhY3Rpb24pKTsKKyAgICAgICAgICAgIGlmIChwcmVjaXNpb24p
CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFkZGVkLmxlZnQocGFkZGVkLmxlbmd0
aCgpIC0gKDkgLSBwcmVjaXNpb24udmFsdWUoKSkpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGF1dG8gbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzID0gcGFkZGVkLmxl
bmd0aCgpOworICAgICAgICAgICAgICAgIHdoaWxlIChwYWRkZWRbbGVuZ3RoV2l0aG91dFRyYWls
aW5nWmVyb2VzIC0gMV0gPT0gJzAnKQorICAgICAgICAgICAgICAgICAgICBsZW5ndGhXaXRob3V0
VHJhaWxpbmdaZXJvZXMtLTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChwYWRkZWQu
bGVmdChsZW5ndGhXaXRob3V0VHJhaWxpbmdaZXJvZXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdTJyk7CisgICAgfQorCisgICAgcmV0dXJu
IGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjcwZTgxZWE0ODM3NTE0OTM4Nzk4ZjJiMDRlYjAxNjc3NDVjNGM1NQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaApAQCAt
MCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
VGVtcG9yYWxPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRlbXBvcmFsRHVy
YXRpb24gZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNp
bmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS50ZW1wb3JhbER1cmF0aW9u
U3BhY2U8bW9kZT4oKTsKKyAgICB9CisKKyAgICB1c2luZyBTdWJkdXJhdGlvbnMgPSBzdGQ6OmFy
cmF5PGRvdWJsZSwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzPjsKKworICAgIHN0YXRpYyBUZW1wb3Jh
bER1cmF0aW9uKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBTdWJkdXJhdGlvbnMmJik7CisgICAg
c3RhdGljIFRlbXBvcmFsRHVyYXRpb24qIGNyZWF0ZUlmVmFsaWQoSlNHbG9iYWxPYmplY3QqLCBT
dWJkdXJhdGlvbnMmJiwgU3RydWN0dXJlKiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAg
ICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvbiogdG9EdXJhdGlv
bihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9u
KiBmcm9tKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyNkZWZpbmUgSlNDX0RFRklORV9U
RU1QT1JBTF9EVVJBVElPTl9BQ0NFU1NPUihuYW1lLCBjYXBpdGFsaXplZE5hbWUpIFwKKyAgICBk
b3VibGUgbmFtZSMjcygpIGNvbnN0IHsgcmV0dXJuIG1fc3ViZHVyYXRpb25zW3N0YXRpY19jYXN0
PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6Y2FwaXRhbGl6ZWROYW1lKV07IH0KKyAgICBKU0NfVEVN
UE9SQUxfVU5JVFMoSlNDX0RFRklORV9URU1QT1JBTF9EVVJBVElPTl9BQ0NFU1NPUik7CisjdW5k
ZWYgSlNDX0RFRklORV9URU1QT1JBTF9EVVJBVElPTl9BQ0NFU1NPUgorCisgICAgaW50IHNpZ24o
KSBjb25zdDsKKworICAgIFN1YmR1cmF0aW9ucyB3aXRoKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmpl
Y3QqIGR1cmF0aW9uTGlrZSkgY29uc3Q7CisgICAgU3ViZHVyYXRpb25zIG5lZ2F0ZWQoKSBjb25z
dDsKKyAgICBTdWJkdXJhdGlvbnMgYWJzKCkgY29uc3Q7CisgICAgU3ViZHVyYXRpb25zIGFkZChK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUpIGNvbnN0OworICAgIFN1YmR1cmF0aW9ucyBzdWJ0cmFj
dChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpIGNvbnN0OworCisgICAgc3RkOjpwYWlyPFN1YmR1
cmF0aW9ucywgZG91YmxlPiByb3VuZChQcmVjaXNpb25EYXRhLCBSb3VuZGluZ01vZGUpIGNvbnN0
OworCisgICAgU3RyaW5nIHRvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBvcHRpb25z
KSBjb25zdDsKKyAgICBTdHJpbmcgdG9TdHJpbmcoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcHJl
Y2lzaW9uID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBUZW1wb3JhbER1
cmF0aW9uKFZNJiwgU3RydWN0dXJlKiwgU3ViZHVyYXRpb25zJiYpOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cisg
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U3ViZHVyYXRpb25zPiBwYXJzZShTdHJpbmdQYXJzaW5n
QnVmZmVyPENoYXJhY3RlclR5cGU+Jik7CisgICAgc3RhdGljIFN1YmR1cmF0aW9ucyBmcm9tT2Jq
ZWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKTsKKworICAgIHN0YXRpYyB2b2lkIGJhbGFu
Y2UoU3ViZHVyYXRpb25zJiwgVGVtcG9yYWxVbml0IGxhcmdlc3RVbml0KTsKKworICAgIFRlbXBv
cmFsVW5pdCBsYXJnZXN0U3ViZHVyYXRpb24oKSBjb25zdDsKKworICAgIFN1YmR1cmF0aW9ucyBt
X3N1YmR1cmF0aW9uczsKK307CisKK2Jvb2wgaXNWYWxpZER1cmF0aW9uKGNvbnN0IFRlbXBvcmFs
RHVyYXRpb246OlN1YmR1cmF0aW9ucyYpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9u
Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViNTEwNGU2ZWY4OTU3YWY5NmZiNmM3ZjNiOGNm
MjJjNWM1NGEwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMTE1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
ICJUZW1wb3JhbER1cmF0aW9uLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVT
VFJVQ1RJQkxFKFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcik7CisKK3N0YXRpYyBKU0NfREVD
TEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1bmNGcm9tKTsK
KworfQorCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmx1dC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAmdGVtcG9yYWxEdXJh
dGlvbkNvbnN0cnVjdG9yVGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yKSB9OworCisvKiBTb3VyY2UgZm9yIFRlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3Rvci5sdXQuaAorQGJlZ2luIHRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvclRh
YmxlCisgIGZyb20gICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yRnVuY0Zy
b20gICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorQGVuZAorKi8KKworVGVtcG9yYWxE
dXJhdGlvbkNvbnN0cnVjdG9yKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBk
dXJhdGlvblByb3RvdHlwZSkKK3sKKyAgICBhdXRvKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBjb25zdHJ1Y3Rv
ci0+ZmluaXNoQ3JlYXRpb24odm0sIGR1cmF0aW9uUHJvdG90eXBlKTsKKyAgICByZXR1cm4gY29u
c3RydWN0b3I7Cit9CisKK1N0cnVjdHVyZSogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihjYWxsVGVtcG9yYWxEdXJhdGlvbik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
Tihjb25zdHJ1Y3RUZW1wb3JhbER1cmF0aW9uKTsKKworVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVj
dG9yOjpUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY2FsbFRlbXBvcmFsRHVyYXRpb24sIGNv
bnN0cnVjdFRlbXBvcmFsRHVyYXRpb24pCit7Cit9CisKK3ZvaWQgVGVtcG9yYWxEdXJhdGlvbkNv
bnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGUqIGR1cmF0aW9uUHJvdG90eXBlKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCAw
LCAiRHVyYXRpb24iX3MsIFByb3BlcnR5QWRkaXRpb25Nb2RlOjpXaXRob3V0U3RydWN0dXJlVHJh
bnNpdGlvbik7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSwgZHVyYXRpb25Qcm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5KTsKKyAgICBkdXJhdGlvblByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCB0aGlzLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Cit9CisKK0pTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RUZW1wb3JhbER1cmF0aW9uLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBKU09iamVjdCogbmV3VGFyZ2V0ID0gYXNPYmplY3QoY2FsbEZyYW1l
LT5uZXdUYXJnZXQoKSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0NfR0VUX0RFUklW
RURfU1RSVUNUVVJFKHZtLCBkdXJhdGlvblN0cnVjdHVyZSwgbmV3VGFyZ2V0LCBjYWxsRnJhbWUt
PmpzQ2FsbGVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAg
ICBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMgc3ViZHVyYXRpb25zIHsgfTsKKyAgICBh
dXRvIGNvdW50ID0gc3RkOjptaW48c2l6ZV90PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSwg
bnVtYmVyT2ZUZW1wb3JhbFVuaXRzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsKKyAgICAgICAgc3ViZHVyYXRpb25zW2ldID0gY2FsbEZyYW1lLT5hcmd1bWVudChp
KS50b0ludGVnZXJPckluZmluaXR5KGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHN1YmR1
cmF0aW9uc1tpXSkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVJhbmdlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uIHByb3BlcnRpZXMgbXVzdCBiZSBmaW5p
dGUiX3MpOworICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJh
dGlvbjo6Y3JlYXRlSWZWYWxpZChnbG9iYWxPYmplY3QsIFdURk1vdmUoc3ViZHVyYXRpb25zKSwg
c3RydWN0dXJlKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsVGVtcG9yYWxE
dXJhdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQorewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29u
c3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIkR1cmF0aW9uIikpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yRnVuY0Zyb20sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShUZW1wb3JhbER1cmF0aW9uOjpmcm9tKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzQyNDVhMzEwNjk1YWNkMzViNWQ2YWE1NmU5MDA0ZjdlM2I3MDM4MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOworCitjbGFzcyBUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3IgZmluYWwgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJs
aWM6CisgICAgdXNpbmcgQmFzZSA9IEludGVybmFsRnVuY3Rpb247CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFz
U3RhdGljUHJvcGVydHlUYWJsZTsKKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uQ29uc3Ry
dWN0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUq
KTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKik7Cit9OworU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9y
LCBJbnRlcm5hbEZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjExNTJjYmRjMTNkNTYyMTRiNjVkMGI0MzUyYjI3ZGUzYjYyYThh
MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcApAQCAtMCwwICsxLDM2NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVy
YXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jV2l0aCk7CitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY05lZ2F0ZWQp
Oworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUZ1bmNBYnMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUZ1bmNBZGQpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNTdWJ0cmFjdCk7CitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5n
KTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVGdW5jVG9KU09OKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9Mb2NhbGVTdHJpbmcpOworc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNWYWx1ZU9mKTsK
K3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVHZXR0ZXJZZWFycyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTW9udGhzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNU
T01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJXZWVrcyk7CitzdGF0aWMg
SlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVy
RGF5cyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlR2V0dGVySG91cnMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIo
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMpOworc3RhdGljIEpTQ19ERUNM
QVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNlY29uZHMp
Oworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUdldHRlck1pbGxpc2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRF
UihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWljcm9zZWNvbmRzKTsKK3N0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJO
YW5vc2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlR2V0dGVyU2lnbik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyQmxhbmspOworCit9CisKKyNpbmNs
dWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY29uc3QgQ2xhc3NJbmZvIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OnNfaW5mbyA9IHsg
IlRlbXBvcmFsLkR1cmF0aW9uIiwgJkJhc2U6OnNfaW5mbywgJmR1cmF0aW9uUHJvdG90eXBlVGFi
bGUsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZSkgfTsKKworLyogU291cmNlIGZvciBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmx1dC5oCitA
YmVnaW4gZHVyYXRpb25Qcm90b3R5cGVUYWJsZQorICB3aXRoICAgICAgICAgICAgIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVGdW5jV2l0aCAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
IDEKKyAgbmVnYXRlZCAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY05lZ2F0
ZWQgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIGFicyAgICAgICAgICAgICAgVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNBYnMgICAgICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gMAorICBhZGQgICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5j
QWRkICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgc3VidHJhY3QgICAgICAg
ICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1N1YnRyYWN0ICAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAxCisgIHRvU3RyaW5nICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUZ1bmNUb1N0cmluZyAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICB0b0pTT04gICAg
ICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9KU09OICAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uIDAKKyAgdG9Mb2NhbGVTdHJpbmcgICBUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlRnVuY1RvTG9jYWxlU3RyaW5nICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIHZhbHVl
T2YgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNWYWx1ZU9mICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gMAorICB5ZWFycyAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGVHZXR0ZXJZZWFycyAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3Rv
bUFjY2Vzc29yCisgIG1vbnRocyAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdl
dHRlck1vbnRocyAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAg
d2Vla3MgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyV2Vla3MgICAg
ICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBkYXlzICAgICAgICAg
ICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJEYXlzICAgICAgICAgICAgIERvbnRF
bnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIGhvdXJzICAgICAgICAgICAgVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUdldHRlckhvdXJzICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8
Q3VzdG9tQWNjZXNzb3IKKyAgbWludXRlcyAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlR2V0dGVyTWludXRlcyAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3Nv
cgorICBzZWNvbmRzICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJTZWNv
bmRzICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIG1pbGxpc2Vj
b25kcyAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbGxpc2Vjb25kcyAgICAg
RG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbWljcm9zZWNvbmRzICAgICBUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWljcm9zZWNvbmRzICAgICBEb250RW51bXxSZWFk
T25seXxDdXN0b21BY2Nlc3NvcgorICBuYW5vc2Vjb25kcyAgICAgIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVHZXR0ZXJOYW5vc2Vjb25kcyAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFj
Y2Vzc29yCisgIHNpZ24gICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRl
clNpZ24gICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgYmxh
bmsgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyQmxhbmsgICAgICAg
ICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorQGVuZAorKi8KKworVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZSogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgYXV0byogcHJvdG90eXBlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZT4odm0uaGVh
cCkpIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90
eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3Ry
dWN0dXJlKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK1RlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGU6OlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwor
dm9pZCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVu
Y1dpdGgsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5h
bWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwor
ICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUud2l0aCBjYWxsZWQg
b24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJf
cyk7CisgICAgCisgICAgSlNWYWx1ZSBkdXJhdGlvbkxpa2UgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOworICAgIGlmICghZHVyYXRpb25MaWtlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJGaXJzdCBhcmd1bWVudCB0byBU
ZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUud2l0aCBtdXN0IGJlIGFuIG9iamVjdCJfcyk7CisK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1
cmF0aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgZHVyYXRpb24tPndpdGgoZ2xvYmFs
T2JqZWN0LCBhc09iamVjdChkdXJhdGlvbkxpa2UpKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jTmVnYXRlZCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFs
RHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlv
bikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVkIGNhbGxlZCBvbiB2YWx1ZSB0aGF0
J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCksIGR1cmF0aW9uLT5uZWdhdGVkKCkpKTsKK30KKwor
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWJz
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nh
c3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBp
ZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmFicyBjYWxsZWQgb24gdmFs
dWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgpLCBkdXJhdGlvbi0+YWJzKCkpKTsKK30K
KworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5j
QWRkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1p
Y0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAg
ICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmFkZCBjYWxsZWQgb24g
dmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7
CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShUZW1wb3Jh
bER1cmF0aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgZHVyYXRpb24tPmFkZChnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSkpOworfQorCitKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNTdWJ0cmFjdCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBv
cmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJh
dGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5zdWJ0cmFjdCBjYWxsZWQgb24gdmFsdWUg
dGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0
aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgZHVyYXRpb24tPnN1YnRyYWN0KGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9y
YWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0
aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvU3RyaW5nIGNhbGxlZCBvbiB2YWx1ZSB0
aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBk
dXJhdGlvbi0+dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkp
KTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVGdW5jVG9KU09OLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvSlNP
TiBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBE
dXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBk
dXJhdGlvbi0+dG9TdHJpbmcoKSkpOworfQorCisvLyBUaGlzIHdpbGwgYmUgcGFydCBvZiB0aGUg
RUNNQS00MDIgSW50bC5EdXJhdGlvbkZvcm1hdCBwcm9wb3NhbDsgdW50aWwgdGhlbiwgd2UganVz
dCBmb2xsb3cgRUNNQS0yNjIgaW4gbWltaWNraW5nIHRvSlNPTi4KK0pTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvTG9jYWxlU3RyaW5nLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVt
cG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1
cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nIGNhbGxlZCBv
biB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9z
KTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1cmF0aW9uLT50
b1N0cmluZygpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlRnVuY1ZhbHVlT2YsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlw
ZS52YWx1ZU9mIG11c3Qgbm90IGJlIGNhbGxlZCJfcyk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9N
X0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyWWVhcnMsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5h
bWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnllYXJzIGNh
bGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0
aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24t
PnllYXJzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGVHZXR0ZXJNb250aHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0
aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9u
KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
VGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1vbnRocyBjYWxsZWQgb24gdmFsdWUgdGhhdCdz
IG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5tb250aHMoKSkpOworfQorCitK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlcldl
ZWtzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBk
dXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS53ZWVrcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlh
bGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKGR1cmF0aW9uLT53ZWVrcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRF
UihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyRGF5cywgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0
PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAg
IGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuZGF5cyBjYWxsZWQgb24g
dmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7
CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5kYXlzKCkp
KTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVHZXR0ZXJIb3VycywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwg
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5E
dXJhdGlvbi5wcm90b3R5cGUuaG91cnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2Jq
ZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+aG91cnMoKSkpOworfQorCitKU0NfREVGSU5FX0NV
U1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0g
anNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1p
bnV0ZXMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFz
IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihk
dXJhdGlvbi0+bWludXRlcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRl
bXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlm
ICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc2Vjb25kcyBjYWxsZWQgb24g
dmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7
CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5zZWNvbmRz
KCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJNaWxsaXNlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0
aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9u
KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
VGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1pbGxpc2Vjb25kcyBjYWxsZWQgb24gdmFsdWUg
dGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taWxsaXNlY29uZHMo
KSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUdldHRlck1pY3Jvc2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRp
b24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24p
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJU
ZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubWljcm9zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0
aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPm1pY3Jvc2Vjb25kcygp
KSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlR2V0dGVyTmFub3NlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9u
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVt
cG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5hbm9zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0
J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPm5hbm9zZWNvbmRzKCkpKTsK
K30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVH
ZXR0ZXJTaWduLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBh
dXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0
aW9uLnByb3RvdHlwZS5zaWduIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBp
bml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoZHVyYXRpb24tPnNpZ24oKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9H
RVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckJsYW5rLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1p
Y0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5ibGFuayBjYWxs
ZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlv
biJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighZHVyYXRpb24t
PnNpZ24oKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mODc3NWVlYjA3YmU2MDJjZmFlZjAzODc5NGU5N2M2MjkzNTRkMzZlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAg
IERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
KFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZW1wb3JhbE9iamVjdC5jcHAKaW5kZXggYWYxNDM2NzVmMWU0YzYyODdlYTJiZTE4ZjQzM2VlYmUz
NzJhNzE3ZC4uMTAyYmRlMTgzOWYzZjczNWYxNjc2OGEyOGRjMmQ2MmMzNGRiMzFkMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMCwxMCArMjEsMTQg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZW1wb3JhbE9iamVjdC5oIgogCisj
aW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0SW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RQ
cm90b3R5cGUuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxO
b3cuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zNyw2ICs0MiwxMyBAQCBzdGF0aWMgSlNWYWx1
ZSBjcmVhdGVOb3dPYmplY3QoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogICAgIHJldHVybiBU
ZW1wb3JhbE5vdzo6Y3JlYXRlKHZtLCBUZW1wb3JhbE5vdzo6Y3JlYXRlU3RydWN0dXJlKHZtLCBn
bG9iYWxPYmplY3QpKTsKIH0KIAorc3RhdGljIEpTVmFsdWUgY3JlYXRlRHVyYXRpb25Db25zdHJ1
Y3RvcihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgVGVtcG9yYWxPYmplY3QqIHRl
bXBvcmFsT2JqZWN0ID0ganNDYXN0PFRlbXBvcmFsT2JqZWN0Kj4ob2JqZWN0KTsKKyAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdGVtcG9yYWxPYmplY3QtPmdsb2JhbE9iamVjdCh2
bSk7CisgICAgcmV0dXJuIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBU
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uUHJvdG90eXBlKCkpLCBqc0Nhc3Q8VGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZSo+KGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKS0+c3Rv
cmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNpbmNs
dWRlICJUZW1wb3JhbE9iamVjdC5sdXQuaCIKQEAgLTQ2LDYgKzU4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAvKiBTb3VyY2UgZm9yIFRlbXBvcmFsT2JqZWN0Lmx1dC5oCiBAYmVnaW4gdGVtcG9yYWxP
YmplY3RUYWJsZQogICBOb3cgICAgICAgICAgICBjcmVhdGVOb3dPYmplY3QgICAgICAgICAgICAg
ICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKKyAgRHVyYXRpb24gICAgICAgY3JlYXRlRHVy
YXRpb25Db25zdHJ1Y3RvciAgICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiBAZW5kCiAq
LwogCkBAIC03NSw0ICs4OCwxNTkgQEAgdm9pZCBUZW1wb3JhbE9iamVjdDo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQogICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwog
fQogCitzdGF0aWMgU3RyaW5nVmlldyBzaW5ndWxhclVuaXQoU3RyaW5nVmlldyB1bml0KQorewor
ICAgIC8vIFBsdXJhbHMgYXJlIGFsbG93ZWQsIGJ1dCB0aGFua2Z1bGx5IHRoZXkncmUgYWxsIGp1
c3QgYSBzaW1wbGUgLXMuCisgICAgcmV0dXJuIHVuaXQuZW5kc1dpdGgoInMiKSA/IHVuaXQubGVm
dCh1bml0Lmxlbmd0aCgpIC0gMSkgOiB1bml0OworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxU
ZW1wb3JhbFVuaXQ+IHRlbXBvcmFsVW5pdFR5cGUoU3RyaW5nVmlldyB1bml0KQoreworICAgIFN0
cmluZ1ZpZXcgc2luZ3VsYXIgPSBzaW5ndWxhclVuaXQodW5pdCk7CisKKyAgICBpZiAoc2luZ3Vs
YXIgPT0gInllYXIiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpZZWFyOworICAgIGlm
IChzaW5ndWxhciA9PSAibW9udGgiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpNb250
aDsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIndlZWsiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxV
bml0OjpXZWVrOworICAgIGlmIChzaW5ndWxhciA9PSAiZGF5IikKKyAgICAgICAgcmV0dXJuIFRl
bXBvcmFsVW5pdDo6RGF5OworICAgIGlmIChzaW5ndWxhciA9PSAiaG91ciIpCisgICAgICAgIHJl
dHVybiBUZW1wb3JhbFVuaXQ6OkhvdXI7CisgICAgaWYgKHNpbmd1bGFyID09ICJtaW51dGUiKQor
ICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpNaW51dGU7CisgICAgaWYgKHNpbmd1bGFyID09
ICJzZWNvbmQiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpTZWNvbmQ7CisgICAgaWYg
KHNpbmd1bGFyID09ICJtaWxsaXNlY29uZCIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6
Ok1pbGxpc2Vjb25kOworICAgIGlmIChzaW5ndWxhciA9PSAibWljcm9zZWNvbmQiKQorICAgICAg
ICByZXR1cm4gVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZDsKKyAgICBpZiAoc2luZ3VsYXIgPT0g
Im5hbm9zZWNvbmQiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kOwor
ICAgIAorICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKy8vIFRvU21hbGxlc3RUZW1wb3Jh
bFVuaXQgKCBub3JtYWxpemVkT3B0aW9ucywgZGlzYWxsb3dlZFVuaXRzLCBmYWxsYmFjayApCitz
dGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5pdD4gdGVtcG9yYWxTbWFsbGVzdFVuaXQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxUZW1wb3JhbFVuaXQ+IGRpc2FsbG93ZWRVbml0cykKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgU3RyaW5nIHNtYWxsZXN0VW5pdCA9IGludGxTdHJpbmdPcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5zbWFsbGVzdFVuaXQsIHsgfSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0
KTsKKworICAgIGlmIChzbWFsbGVzdFVuaXQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBhdXRvIHVuaXRUeXBlID0gdGVtcG9yYWxVbml0VHlwZShzbWFsbGVz
dFVuaXQpOworICAgIGlmICghdW5pdFR5cGUpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJzbWFsbGVzdFVuaXQgaXMgYW4gaW52YWxpZCB1bml0Il9zKTsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoZGlzYWxsb3dl
ZFVuaXRzLnNpemUoKSAmJiBzdGQ6OmZpbmQoZGlzYWxsb3dlZFVuaXRzLmJlZ2luKCksIGRpc2Fs
bG93ZWRVbml0cy5lbmQoKSwgdW5pdFR5cGUudmFsdWUoKSkgIT0gZGlzYWxsb3dlZFVuaXRzLmVu
ZCgpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAic21h
bGxlc3RVbml0IGlzIGEgZGlzYWxsb3dlZCB1bml0Il9zKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gdW5pdFR5cGU7Cit9CisKKy8vIEdldFN0cmlu
Z09yTnVtYmVyT3B0aW9uKG5vcm1hbGl6ZWRPcHRpb25zLCAiZnJhY3Rpb25hbFNlY29uZERpZ2l0
cyIsIMKrICJhdXRvIiDCuywgMCwgOSwgImF1dG8iKQorc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
dGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25kRGlnaXRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBvcHRpb25zKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAo
IW9wdGlvbnMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBKU1ZhbHVlIHZh
bHVlID0gb3B0aW9ucy0+Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+ZnJhY3Rp
b25hbFNlY29uZERpZ2l0cyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpu
dWxsb3B0KTsKKworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIAorICAgIGlmICh2YWx1ZS5pc051bWJlcigpKSB7CisgICAgICAg
IGRvdWJsZSBkb3VibGVWYWx1ZSA9IHZhbHVlLmFzTnVtYmVyKCk7CisgICAgICAgIGlmIChkb3Vi
bGVWYWx1ZSA8IDAgfHwgZG91YmxlVmFsdWUgPiA5KSB7CisgICAgICAgICAgICB0aHJvd1Jhbmdl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZyYWN0aW9uYWxTZWNvbmREaWdpdHMgaXMgb3V0
IG9mIHJhbmdlIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRvdWJsZVZhbHVlKTsK
KyAgICB9CisKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhnbG9i
YWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7
CisKKyAgICBpZiAoc3RyaW5nVmFsdWUgIT0gImF1dG8iKQorICAgICAgICB0aHJvd1JhbmdlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZyYWN0aW9uYWxTZWNvbmREaWdpdHMgaXMgb3V0IG9m
IHJhbmdlIl9zKTsKKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKy8vIFRvU2Vjb25k
c1N0cmluZ1ByZWNpc2lvbiAoIG5vcm1hbGl6ZWRPcHRpb25zICkKK1ByZWNpc2lvbkRhdGEgc2Vj
b25kc1N0cmluZ1ByZWNpc2lvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVj
dCogb3B0aW9ucykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byBzbWFsbGVzdFVu
aXQgPSB0ZW1wb3JhbFNtYWxsZXN0VW5pdChnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHsgVGVtcG9y
YWxVbml0OjpZZWFyLCBUZW1wb3JhbFVuaXQ6Ok1vbnRoLCBUZW1wb3JhbFVuaXQ6OldlZWssIFRl
bXBvcmFsVW5pdDo6RGF5LCBUZW1wb3JhbFVuaXQ6OkhvdXIsIFRlbXBvcmFsVW5pdDo6TWludXRl
IH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBpZiAoc21h
bGxlc3RVbml0KSB7CisgICAgICAgIHN3aXRjaCAoc21hbGxlc3RVbml0LnZhbHVlKCkpIHsKKyAg
ICAgICAgY2FzZSBUZW1wb3JhbFVuaXQ6OlNlY29uZDoKKyAgICAgICAgICAgIHJldHVybiB7IDAs
IFRlbXBvcmFsVW5pdDo6U2Vjb25kLCAxIH07CisgICAgICAgIGNhc2UgVGVtcG9yYWxVbml0OjpN
aWxsaXNlY29uZDoKKyAgICAgICAgICAgIHJldHVybiB7IDMsIFRlbXBvcmFsVW5pdDo6TWlsbGlz
ZWNvbmQsIDEgfTsKKyAgICAgICAgY2FzZSBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kOgorICAg
ICAgICAgICAgcmV0dXJuIHsgNiwgVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCwgMSB9OworICAg
ICAgICBjYXNlIFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZDoKKyAgICAgICAgICAgIHJldHVybiB7
IDksIFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZCwgMSB9OworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVy
biB7IH07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHByZWNpc2lvbiA9IHRlbXBvcmFs
RnJhY3Rpb25hbFNlY29uZERpZ2l0cyhnbG9iYWxPYmplY3QsIG9wdGlvbnMpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBpZiAoIXByZWNpc2lvbikKKyAgICAg
ICAgcmV0dXJuIHsgc3RkOjpudWxsb3B0LCBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQsIDEgfTsK
KworICAgIHVuc2lnbmVkIGRpZ2l0cyA9IHByZWNpc2lvbi52YWx1ZSgpOworICAgIGlmICghZGln
aXRzKQorICAgICAgICByZXR1cm4geyAwLCBUZW1wb3JhbFVuaXQ6OlNlY29uZCwgMSB9OworCisg
ICAgaWYgKGRpZ2l0cyA8PSAzKQorICAgICAgICByZXR1cm4geyBkaWdpdHMsIFRlbXBvcmFsVW5p
dDo6TWlsbGlzZWNvbmQsIHN0ZDo6cG93KDEwLCAzIC0gZGlnaXRzKSB9OworCisgICAgaWYgKGRp
Z2l0cyA8PSA2KQorICAgICAgICByZXR1cm4geyBkaWdpdHMsIFRlbXBvcmFsVW5pdDo6TWljcm9z
ZWNvbmQsIHN0ZDo6cG93KDEwLCA2IC0gZGlnaXRzKSB9OworCisgICAgQVNTRVJUKGRpZ2l0cyA8
PSA5KTsKKyAgICByZXR1cm4geyBkaWdpdHMsIFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZCwgc3Rk
Ojpwb3coMTAsIDkgLSBkaWdpdHMpIH07Cit9CisKKy8vIFJvdW5kTnVtYmVyVG9JbmNyZW1lbnQg
KCB4LCBpbmNyZW1lbnQsIHJvdW5kaW5nTW9kZSApCitkb3VibGUgcm91bmROdW1iZXJUb0luY3Jl
bWVudChkb3VibGUgeCwgZG91YmxlIGluY3JlbWVudCwgUm91bmRpbmdNb2RlIG1vZGUpCit7Cisg
ICAgYXV0byBxdW90aWVudCA9IHggLyBpbmNyZW1lbnQ7CisgICAgc3dpdGNoIChtb2RlKSB7Cisg
ICAgY2FzZSBSb3VuZGluZ01vZGU6OkNlaWw6CisgICAgICAgIHJldHVybiAtc3RkOjpmbG9vcigt
cXVvdGllbnQpICogaW5jcmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpGbG9vcjoKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6Zmxvb3IocXVvdGllbnQpICogaW5jcmVtZW50OworICAgIGNhc2Ug
Um91bmRpbmdNb2RlOjpUcnVuYzoKKyAgICAgICAgcmV0dXJuIHN0ZDo6dHJ1bmMocXVvdGllbnQp
ICogaW5jcmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpIYWxmRXhwYW5kOgorICAgICAg
ICByZXR1cm4gc3RkOjpyb3VuZChxdW90aWVudCkgKiBpbmNyZW1lbnQ7CisgICAgfQorfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RlbXBvcmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbE9iamVjdC5oCmluZGV4IDFlZTk5OTRjMmI4YzA1ZTQ2ZDE2MTA2YTY2ZjAyYjk3NThiOGIy
ODMuLmI4ZmE0MWRkZTA3NjE0ODI4NjM5NGU2ZmQxNTNiZTRjMTNlM2ZlNDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSwgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsNiArMjQsMjcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKKyNkZWZpbmUgSlNDX1RFTVBPUkFMX1VOSVRTKG1hY3JvKSBcCisgICAg
bWFjcm8oeWVhciwgWWVhcikgXAorICAgIG1hY3JvKG1vbnRoLCBNb250aCkgXAorICAgIG1hY3Jv
KHdlZWssIFdlZWspIFwKKyAgICBtYWNybyhkYXksIERheSkgXAorICAgIG1hY3JvKGhvdXIsIEhv
dXIpIFwKKyAgICBtYWNybyhtaW51dGUsIE1pbnV0ZSkgXAorICAgIG1hY3JvKHNlY29uZCwgU2Vj
b25kKSBcCisgICAgbWFjcm8obWlsbGlzZWNvbmQsIE1pbGxpc2Vjb25kKSBcCisgICAgbWFjcm8o
bWljcm9zZWNvbmQsIE1pY3Jvc2Vjb25kKSBcCisgICAgbWFjcm8obmFub3NlY29uZCwgTmFub3Nl
Y29uZCkgXAorCitlbnVtIGNsYXNzIFRlbXBvcmFsVW5pdCA6IHVpbnQ4X3QgeworI2RlZmluZSBK
U0NfREVGSU5FX1RFTVBPUkFMX1VOSVRfRU5VTShuYW1lLCBjYXBpdGFsaXplZE5hbWUpIGNhcGl0
YWxpemVkTmFtZSwKKyAgICBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX0RFRklORV9URU1QT1JBTF9V
TklUX0VOVU0pCisjdW5kZWYgSlNDX0RFRklORV9URU1QT1JBTF9VTklUX0VOVU0KK307CisjZGVm
aW5lIEpTQ19DT1VOVF9URU1QT1JBTF9VTklUUyhuYW1lLCBjYXBpdGFsaXplZE5hbWUpICsgMQor
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlRlbXBvcmFsVW5pdHMgPSAwIEpTQ19U
RU1QT1JBTF9VTklUUyhKU0NfQ09VTlRfVEVNUE9SQUxfVU5JVFMpOworI3VuZGVmIEpTQ19DT1VO
VF9URU1QT1JBTF9VTklUUworCiBjbGFzcyBUZW1wb3JhbE9iamVjdCBmaW5hbCA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9i
amVjdDsKQEAgLTQ1LDQgKzY3LDIyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwogfTsKIAorZW51bSBjbGFzcyBSb3VuZGluZ01vZGUgOiB1aW50OF90IHsKKyAgICBD
ZWlsLAorICAgIEZsb29yLAorICAgIFRydW5jLAorICAgIEhhbGZFeHBhbmQKK307CisKK3N0cnVj
dCBQcmVjaXNpb25EYXRhIHsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwcmVjaXNpb247
CisgICAgVGVtcG9yYWxVbml0IHVuaXQ7CisgICAgZG91YmxlIGluY3JlbWVudDsKK307CisKK3N0
ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1wb3JhbFNtYWxsZXN0VW5pdChKU0dsb2JhbE9i
amVjdCosIEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VGVtcG9yYWxV
bml0PiBkaXNhbGxvd2VkVW5pdHMpOworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdGVtcG9yYWxG
cmFjdGlvbmFsU2Vjb25kRGlnaXRzKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlvbnMp
OworUHJlY2lzaW9uRGF0YSBzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqIG9wdGlvbnMpOworZG91YmxlIHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZG91Ymxl
LCBkb3VibGUgaW5jcmVtZW50LCBSb3VuZGluZ01vZGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCAxZGVhNmExM2NiNGM0MjliOWIw
NzE5OGJhYjZjNDRmMzE0NjlkMDY4Li44MzFkM2YyZWQzYTMyN2NmZmIzNjhlZjE2M2IxYThhYjZm
N2M4MTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0xNjIsNiArMTYy
LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlu
bGluZXMuaCIKICNpbmNsdWRlICJTeW1ib2xPYmplY3QuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1
cmF0aW9uLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVGh1bmtH
ZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCkBAIC0xNjE3LDYgKzE2MTgs
NyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFJlbGF0aXZl
VGltZUZvcm1hdFNwYWNlLCBpbnRsUmVsYXRpdgogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKGludGxTZWdtZW50SXRlcmF0b3JTcGFjZSwgaW50bFNlZ21lbnRJdGVyYXRv
ckhlYXBDZWxsVHlwZS5nZXQoKSwgSW50bFNlZ21lbnRJdGVyYXRvcikKIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudGVyU3BhY2UsIGludGxTZWdtZW50
ZXJIZWFwQ2VsbFR5cGUuZ2V0KCksIEludGxTZWdtZW50ZXIpCiBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRzU3BhY2UsIGludGxTZWdtZW50c0hlYXBD
ZWxsVHlwZS5nZXQoKSwgSW50bFNlZ21lbnRzKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHRlbXBvcmFsRHVyYXRpb25TcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQo
KSwgVGVtcG9yYWxEdXJhdGlvbikKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coanNUb1dhc21JQ0NhbGxlZVNwYWNlLCBjZWxs
SGVhcENlbGxUeXBlLmdldCgpLCBKU1RvV2FzbUlDQ2FsbGVlKQogRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UsIHdlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSAv
LyBIYXNoOjB4OWFkOTk1Y2QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IGJjZWQ5
ODQzZmNlODI2MjBlODhiOTc1MDE4M2FlYjYxNTU2MjYwNjkuLmFiZGE3MmU5NDNhOTI1ZjRlZjc2
MDNlMjUwZTNkMDZjYWUwNDE3MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAt
MTg1LDYgKzE4NSw3IEBAIGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgog
Y2xhc3MgU3ltYm9sOworY2xhc3MgVGVtcG9yYWxEdXJhdGlvbjsKIGNsYXNzIFR5cGVkQXJyYXlD
b250cm9sbGVyOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEV2YWxD
b2RlQmxvY2s7CkBAIC02MTUsNiArNjE2LDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFNlZ21lbnRJdGVyYXRvclNwYWNlKQogICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFNlZ21lbnRlclNwYWNlKQogICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bFNlZ21lbnRzU3BhY2UpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih0ZW1wb3JhbER1cmF0aW9uU3BhY2Up
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoanNUb1dhc21JQ0NhbGxlZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSkKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOGIxYTVhOWRlMjM3NmU3
NTcyMDY4YTE3YzgwN2MyY2Y5NzhkYTFlMC4uNjlhNmE5ZTI4MTJjNzMyOWExNGUxNThlMmY0Mjhl
OGQ0NGQ2NzI3YiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0wOC0yMyAgUm9zcyBLaXJzbGluZyAgPHJv
c3Mua2lyc2xpbmdAc29ueS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFs
LkR1cmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjg1MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHN0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qczogQWRkZWQuCisKIDIwMjEtMDgtMTcgIE1p
a2hhaWwgUi4gR2FkZWxoYSAgPG1pa2hhaWxAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLiBTa2lwIGZhaWxpbmcgTUlQUyB0ZXN0cwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mv
dGVtcG9yYWwtZHVyYXRpb24uanMgYi9KU1Rlc3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44N2VlYzlmNWEwNDRiZmMzZTZjMmEwNzMwMWRlNDYxYmU2YTBlNzZiCi0t
LSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvdGVtcG9yYWwtZHVyYXRpb24uanMKQEAg
LTAsMCArMSwyMjMgQEAKKy8vQCByZXF1aXJlT3B0aW9ucygiLS11c2VUZW1wb3JhbD0xIikKKwor
ZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09
IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7ZXhwZWN0ZWR9
IGJ1dCBnb3QgJHthY3R1YWx9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZE5vdFRocm93KGZ1bmMp
IHsKKyAgICBmdW5jKCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yVHlw
ZSkgeworICAgIGxldCBlcnJvcjsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorCisgICAgaWYgKCEoZXJyb3Ig
aW5zdGFuY2VvZiBlcnJvclR5cGUpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVk
ICR7ZXJyb3JUeXBlLm5hbWV9IWApOworfQorCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbiBp
bnN0YW5jZW9mIEZ1bmN0aW9uLCB0cnVlKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmxl
bmd0aCwgMCk7CitzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFRlbXBv
cmFsLkR1cmF0aW9uLCAncHJvdG90eXBlJykud3JpdGFibGUsIGZhbHNlKTsKK3Nob3VsZEJlKE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwuRHVyYXRpb24sICdwcm90b3R5
cGUnKS5lbnVtZXJhYmxlLCBmYWxzZSk7CitzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKFRlbXBvcmFsLkR1cmF0aW9uLCAncHJvdG90eXBlJykuY29uZmlndXJhYmxlLCBm
YWxzZSk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbigpLCBUeXBlRXJyb3Ip
OworCitzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oKSBpbnN0YW5jZW9mIFRlbXBvcmFs
LkR1cmF0aW9uLCB0cnVlKTsKK3sKKyAgICBjbGFzcyBEZXJpdmVkRHVyYXRpb24gZXh0ZW5kcyBU
ZW1wb3JhbC5EdXJhdGlvbiB7fQorCisgICAgY29uc3QgZGQgPSBuZXcgRGVyaXZlZER1cmF0aW9u
KCk7CisgICAgc2hvdWxkQmUoZGQgaW5zdGFuY2VvZiBEZXJpdmVkRHVyYXRpb24sIHRydWUpOwor
ICAgIHNob3VsZEJlKGRkIGluc3RhbmNlb2YgVGVtcG9yYWwuRHVyYXRpb24sIHRydWUpOworICAg
IHNob3VsZEJlKGRkLm5lZ2F0ZWQsIFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVk
KTsKKyAgICBzaG91bGRCZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZGQpLCBEZXJpdmVkRHVyYXRp
b24ucHJvdG90eXBlKTsKKyAgICBzaG91bGRCZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoRGVyaXZl
ZER1cmF0aW9uLnByb3RvdHlwZSksIFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZSk7Cit9CisK
K3Nob3VsZFRocm93KCgpID0+IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigxLCAtMSksIFJhbmdlRXJy
b3IpOworc2hvdWxkVGhyb3coKCkgPT4gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKEluZmluaXR5KSwg
UmFuZ2VFcnJvcik7CisKK2NvbnN0IGZpZWxkcyA9IFsneWVhcnMnLCAnbW9udGhzJywgJ3dlZWtz
JywgJ2RheXMnLCAnaG91cnMnLCAnbWludXRlcycsICdzZWNvbmRzJywgJ21pbGxpc2Vjb25kcycs
ICdtaWNyb3NlY29uZHMnLCAnbmFub3NlY29uZHMnXTsKK2NvbnN0IHplcm8gPSBuZXcgVGVtcG9y
YWwuRHVyYXRpb24oKTsKK2NvbnN0IHBvcyA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigxLDIsMyw0
LDUsNiw3LDgsOSwxMCk7Citjb25zdCBuZWcgPSBuZXcgVGVtcG9yYWwuRHVyYXRpb24oLTEsLTIs
LTMsLTQsLTUsLTYsLTcsLTgsLTksLTEwKTsKKworZmllbGRzLmZvckVhY2goKGZpZWxkLCBpKSA9
PiB7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW2Zp
ZWxkXSwgVHlwZUVycm9yKTsKKyAgICBzaG91bGRCZSh6ZXJvW2ZpZWxkXSwgMCk7CisgICAgc2hv
dWxkQmUocG9zW2ZpZWxkXSwgaSArIDEpOworICAgIHNob3VsZEJlKG5lZ1tmaWVsZF0sIC1pIC0g
MSk7Cit9KTsKKworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBl
LnNpZ24sIFR5cGVFcnJvcik7CitzaG91bGRCZSh6ZXJvLnNpZ24sIDApOworc2hvdWxkQmUocG9z
LnNpZ24sIDEpOworc2hvdWxkQmUobmVnLnNpZ24sIC0xKTsKKworc2hvdWxkVGhyb3coKCkgPT4g
VGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmJsYW5rLCBUeXBlRXJyb3IpOworc2hvdWxkQmUo
emVyby5ibGFuaywgdHJ1ZSk7CitzaG91bGRCZShwb3MuYmxhbmssIGZhbHNlKTsKK3Nob3VsZEJl
KG5lZy5ibGFuaywgZmFsc2UpOworCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tLmxl
bmd0aCwgMSk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCksIFJh
bmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSh7fSks
IFR5cGVFcnJvcik7Cit7CisgICAgY29uc3QgYmFkU3RyaW5ncyA9IFsKKyAgICAgICAgJycsICdQ
JywgJ1AxJywgJ1BUJywgJ1AxWVQnLCAnUFQxJywKKyAgICAgICAgJ1AxVzFZJywgICdQVDFTMU0n
LAorICAgICAgICAnUDEuMVknLCAnUFQxLjFIMU0nLCAnUFQxLjFNMVMnLAorICAgICAgICAnUFQx
LjExMTExMTExMTFIJywgJ1BUMS4xMTExMTExMTExTScsICdQVDEuMTExMTExMTExMVMnLAorICAg
ICAgICBgUCR7QXJyYXkoMzA5KS5maWxsKDkpLmpvaW4oJycpfVlgCisgICAgXTsKKyAgICBmb3Ig
KGNvbnN0IGJhZFN0cmluZyBpbiBiYWRTdHJpbmdzKQorICAgICAgICBzaG91bGRUaHJvdygoKSA9
PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKGJhZFN0cmluZyksIFJhbmdlRXJyb3IpOworICAgIAor
ICAgIGNvbnN0IGZyb21TdHJpbmcgPSBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMVkyTTNXNERU
NUg2TTcuMDA4MDA5MDEwUycpOworCisgICAgY29uc3QgZHVyYXRpb25MaWtlID0ge307CisgICAg
ZmllbGRzLmZvckVhY2goKGZpZWxkLCBpKSA9PiB7IGR1cmF0aW9uTGlrZVtmaWVsZF0gPSBpICsg
MTsgfSk7CisgICAgY29uc3QgZnJvbUR1cmF0aW9uTGlrZSA9IFRlbXBvcmFsLkR1cmF0aW9uLmZy
b20oZHVyYXRpb25MaWtlKTsKKworICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7Cisg
ICAgICAgIHNob3VsZEJlKGZyb21TdHJpbmdbZmllbGRdLCBwb3NbZmllbGRdKTsKKyAgICAgICAg
c2hvdWxkQmUoZnJvbUR1cmF0aW9uTGlrZVtmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgIH0KK30K
K3Nob3VsZE5vdFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oYFAke0FycmF5KDMw
OCkuZmlsbCg5KS5qb2luKCcnKX1ZYCkpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJv
bSgn4oiScDF5Mm0zdzRkdDVoNm03LjAwODAwOTAxMHMnKS50b1N0cmluZygpLCAnLVAxWTJNM1c0
RFQ1SDZNNy4wMDgwMDkwMVMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJytQ
MVkyRFQzSDQuMFMnKS50b1N0cmluZygpLCAnUDFZMkRUM0g0UycpOworc2hvdWxkQmUoVGVtcG9y
YWwuRHVyYXRpb24uZnJvbSgnUFQxLjAzMTI1SCcpLnRvU3RyaW5nKCksICdQVDFIMU01Mi41Uycp
Oworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUFQxLjAzMTI1TScpLnRvU3RyaW5n
KCksICdQVDFNMS44NzVTJyk7CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlw
ZS53aXRoLmxlbmd0aCwgMSk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5w
cm90b3R5cGUud2l0aC5jYWxsKHt9LCB7IHllYXJzOiAxIH0pLCBUeXBlRXJyb3IpOworc2hvdWxk
VGhyb3coKCkgPT4gemVyby53aXRoKCksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6
ZXJvLndpdGgoe30pLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby53aXRoKHsg
eWVhcnM6IDEuMSB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBwb3Mud2l0aCh7
IHllYXJzOiAtMSB9KSwgUmFuZ2VFcnJvcik7Cit7CisgICAgY29uc3QgZnVsbHlVcGRhdGVkID0g
cG9zLndpdGgobmVnKTsKKyAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAgICAg
ICBzaG91bGRCZSh6ZXJvLndpdGgoeyBbZmllbGRdOiAxIH0pW2ZpZWxkXSwgMSk7CisgICAgICAg
IHNob3VsZEJlKGZ1bGx5VXBkYXRlZFtmaWVsZF0sIG5lZ1tmaWVsZF0pOworICAgIH0KK30KKwor
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQubGVuZ3RoLCAwKTsK
K3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVkLmNh
bGwoe30pLCBUeXBlRXJyb3IpOworeworICAgIGNvbnN0IG5lZ2F0ZWRaZXJvID0gemVyby5uZWdh
dGVkKCk7CisgICAgY29uc3QgbmVnYXRlZFBvcyA9IHBvcy5uZWdhdGVkKCk7CisgICAgY29uc3Qg
bmVnYXRlZE5lZyA9IG5lZy5uZWdhdGVkKCk7CisgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVs
ZHMpIHsKKyAgICAgICAgc2hvdWxkQmUobmVnYXRlZFplcm9bZmllbGRdLCB6ZXJvW2ZpZWxkXSk7
CisgICAgICAgIHNob3VsZEJlKG5lZ2F0ZWROZWdbZmllbGRdLCBwb3NbZmllbGRdKTsKKyAgICAg
ICAgc2hvdWxkQmUobmVnYXRlZFBvc1tmaWVsZF0sIG5lZ1tmaWVsZF0pOworICAgIH0KK30KKwor
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmFicy5sZW5ndGgsIDApOworc2hv
dWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmFicy5jYWxsKHt9KSwg
VHlwZUVycm9yKTsKK3sKKyAgICBjb25zdCBhYnNaZXJvID0gemVyby5hYnMoKTsKKyAgICBjb25z
dCBhYnNQb3MgPSBwb3MuYWJzKCk7CisgICAgY29uc3QgYWJzTmVnID0gbmVnLmFicygpOworICAg
IGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJlKGFic1plcm9b
ZmllbGRdLCB6ZXJvW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKGFic1Bvc1tmaWVsZF0sIHBv
c1tmaWVsZF0pOworICAgICAgICBzaG91bGRCZShhYnNOZWdbZmllbGRdLCBwb3NbZmllbGRdKTsK
KyAgICB9Cit9CisKK2ZvciAoY29uc3QgbWV0aG9kIG9mIFsnYWRkJywgJ3N1YnRyYWN0J10pIHsK
KyAgICBzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbbWV0aG9kXS5sZW5ndGgs
IDEpOworICAgIHNob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZVtt
ZXRob2RdLmNhbGwoeyBob3VyczogMSB9KSwgVHlwZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygo
KSA9PiB6ZXJvW21ldGhvZF0oKSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4g
emVyb1ttZXRob2RdKHt9KSwgVHlwZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiB6ZXJv
W21ldGhvZF0oeyB5ZWFyczogMSB9KSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkg
PT4gemVyb1ttZXRob2RdKHsgbW9udGhzOiAxIH0pLCBSYW5nZUVycm9yKTsKKyAgICBzaG91bGRU
aHJvdygoKSA9PiB6ZXJvW21ldGhvZF0oeyB3ZWVrczogMSB9KSwgUmFuZ2VFcnJvcik7CisgICAg
c2hvdWxkVGhyb3coKCkgPT4gcG9zW21ldGhvZF0oeyBzZWNvbmRzOiAxIH0pLCBSYW5nZUVycm9y
KTsKK30KK3sKKyAgICBjb25zdCBzaG9ydGVuZWRQb3MgPSBuZXcgVGVtcG9yYWwuRHVyYXRpb24o
MCwwLDAsMSwyLDMsNCw1LDYsNyk7CisgICAgY29uc3QgcG9zRHVyYXRpb25MaWtlID0geyBkYXlz
OiAxLCBob3VyczogMiwgbWludXRlczogMywgc2Vjb25kczogNCwgbWlsbGlzZWNvbmRzOiA1LCBt
aWNyb3NlY29uZHM6IDYsIG5hbm9zZWNvbmRzOiA3IH07CisgICAgY29uc3QgbmVnU3RyaW5nID0g
Jy1QMURUMkgzTTQuMDA1MDA2MDA3Uyc7CisKKyAgICBjb25zdCBhZGRaZXJvID0gc2hvcnRlbmVk
UG9zLmFkZCh6ZXJvKTsKKyAgICBjb25zdCBhZGRQb3MgPSBzaG9ydGVuZWRQb3MuYWRkKHBvc0R1
cmF0aW9uTGlrZSk7CisgICAgY29uc3QgYWRkTmVnID0gc2hvcnRlbmVkUG9zLmFkZChuZWdTdHJp
bmcpOworICAgIGNvbnN0IHN1Ylplcm8gPSBzaG9ydGVuZWRQb3Muc3VidHJhY3QoemVybyk7Cisg
ICAgY29uc3Qgc3ViUG9zID0gc2hvcnRlbmVkUG9zLnN1YnRyYWN0KHBvc0R1cmF0aW9uTGlrZSk7
CisgICAgY29uc3Qgc3ViTmVnID0gc2hvcnRlbmVkUG9zLnN1YnRyYWN0KG5lZ1N0cmluZyk7Cisg
ICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHsKKyAgICAgICAgc2hvdWxkQmUoYWRkWmVy
b1tmaWVsZF0sIHNob3J0ZW5lZFBvc1tmaWVsZF0pOworICAgICAgICBzaG91bGRCZShhZGRQb3Nb
ZmllbGRdLCAyICogc2hvcnRlbmVkUG9zW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKGFkZE5l
Z1tmaWVsZF0sIDApOworICAgICAgICBzaG91bGRCZShzdWJaZXJvW2ZpZWxkXSwgc2hvcnRlbmVk
UG9zW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKHN1YlBvc1tmaWVsZF0sIDApOworICAgICAg
ICBzaG91bGRCZShzdWJOZWdbZmllbGRdLCAyICogc2hvcnRlbmVkUG9zW2ZpZWxkXSk7CisgICAg
fQorfQorc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFEVDEzSDMxTTMxUycpLmFk
ZCgnUDFEVDEzSDMxTTMxUycpLnRvU3RyaW5nKCksICdQM0RUM0gzTTJTJyk7CitzaG91bGRCZShU
ZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCctUFQxTTU5UycpLmFkZCgnLVBUMU01OVMnKS50b1N0cmlu
ZygpLCAnLVBUM001OFMnKTsKKworLy8gQXQgcHJlc2VudCwgdG9Mb2NhbGVTdHJpbmcgaGFzIHRo
ZSBzYW1lIGJlaGF2aW9yIGFzIHRvSlNPTiBvciBhcmd1bWVudGxlc3MgdG9TdHJpbmcuCitmb3Ig
KGNvbnN0IG1ldGhvZCBvZiBbJ3RvU3RyaW5nJywgJ3RvSlNPTicsICd0b0xvY2FsZVN0cmluZydd
KSB7ICAgIAorICAgIHNob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZVttZXRob2Rd
Lmxlbmd0aCwgMCk7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJv
dG90eXBlW21ldGhvZF0uY2FsbCh7fSksIFR5cGVFcnJvcik7CisKKyAgICBzaG91bGRCZSh6ZXJv
W21ldGhvZF0oKSwgJ1BUMFMnKTsKKyAgICBzaG91bGRCZShwb3NbbWV0aG9kXSgpLCAnUDFZMk0z
VzREVDVINk03LjAwODAwOTAxUycpOworICAgIHNob3VsZEJlKG5lZ1ttZXRob2RdKCksICctUDFZ
Mk0zVzREVDVINk03LjAwODAwOTAxUycpOworICAgIAorICAgIHNob3VsZEJlKG5ldyBUZW1wb3Jh
bC5EdXJhdGlvbigxLDEsMSwxKVttZXRob2RdKCksICdQMVkxTTFXMUQnKTsKKyAgICBzaG91bGRC
ZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwxLDEsMSlbbWV0aG9kXSgpLCAnUFQxSDFN
MVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwx
MDApW21ldGhvZF0oKSwgJ1BUMC4xUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJh
dGlvbigwLDAsMCwwLDAsMCwwLDAsMTAwKVttZXRob2RdKCksICdQVDAuMDAwMVMnKTsKKyAgICBz
aG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwwLDAsMTAwKVttZXRo
b2RdKCksICdQVDAuMDAwMDAwMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRp
b24oMCwwLDAsMCwwLDAsMSwxMDAxKVttZXRob2RdKCksICdQVDIuMDAxUycpOworICAgIHNob3Vs
ZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDEsMTAwMSlbbWV0aG9kXSgp
LCAnUFQwLjAwMjAwMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCww
LDAsMCwwLDAsMCwwLDEsMTAwMSlbbWV0aG9kXSgpLCAnUFQwLjAwMDAwMjAwMVMnKTsKKyAgICBz
aG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMSwxMDAxLDEwMDEsMTAw
MSlbbWV0aG9kXSgpLCAnUFQyLjAwMjAwMjAwMVMnKTsKK30KKworc2hvdWxkQmUocG9zLnRvU3Ry
aW5nKHt9KSwgcG9zLnRvU3RyaW5nKCkpOworCitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJp
bmcoeyBzbWFsbGVzdFVuaXQ6ICdmb29iYXInIH0pLCBSYW5nZUVycm9yKTsKK2ZvciAoY29uc3Qg
dW5pdCBvZiBbJ3llYXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUn
XSkgeworICAgIHNob3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDog
dW5pdCB9KSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5n
KHsgc21hbGxlc3RVbml0OiBgJHt1bml0fXNgIH0pLCBSYW5nZUVycm9yKTsKK30KK3Nob3VsZEJl
KHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogJ3NlY29uZHMnIH0pLCAnUDFZMk0zVzREVDVI
Nk03UycpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiAnbWlsbGlzZWNv
bmRzJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDhTJyk7CitzaG91bGRCZShwb3MudG9TdHJpbmco
eyBzbWFsbGVzdFVuaXQ6ICdtaWNyb3NlY29uZHMnIH0pLCAnUDFZMk0zVzREVDVINk03LjAwODAw
OVMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogJ25hbm9zZWNvbmRz
JyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDgwMDkwMTBTJyk7Citmb3IgKGNvbnN0IHVuaXQgb2Yg
WydzZWNvbmQnLCAnbWlsbGlzZWNvbmQnLCAnbWljcm9zZWNvbmQnLCAnbmFub3NlY29uZCddKQor
ICAgIHNob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogdW5pdCB9KSwgcG9zLnRv
U3RyaW5nKHsgc21hbGxlc3RVbml0OiBgJHt1bml0fXNgIH0pKTsKKworc2hvdWxkVGhyb3coKCkg
PT4gcG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogLTEgfSksIFJhbmdlRXJy
b3IpOworc2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERp
Z2l0czogMTAgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5n
KHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogJ2JvZ3VzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91
bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAwIH0pLCAnUDFZMk0z
VzREVDVINk03UycpOworY29uc3QgZGVjaW1hbFBhcnQgPSAnMDA4MDA5MDEwJzsKK2ZvciAobGV0
IGkgPSAxOyBpIDwgMTA7IGkrKykKKyAgICBzaG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlv
bmFsU2Vjb25kRGlnaXRzOiBpIH0pLCBgUDFZMk0zVzREVDVINk03LiR7ZGVjaW1hbFBhcnQuc2xp
Y2UoMCxpKX1TYCk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGln
aXRzOiAnYXV0bycgfSksIHBvcy50b1N0cmluZygpKTsKK3Nob3VsZEJlKHplcm8udG9TdHJpbmco
eyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAyIH0pLCAnUFQwLjAwUycpOworCitzaG91bGRUaHJv
dygoKSA9PiBwb3MudG9TdHJpbmcoeyByb3VuZGluZ01vZGU6ICdib2d1cycgfSksIFJhbmdlRXJy
b3IpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgcm91bmRpbmdNb2RlOiAndHJ1bmMnIH0pLCBw
b3MudG9TdHJpbmcoKSk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25k
RGlnaXRzOiA3LCByb3VuZGluZ01vZGU6ICdjZWlsJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDgw
MDkxUycpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czog
Miwgcm91bmRpbmdNb2RlOiAnZmxvb3InIH0pLCAnUDFZMk0zVzREVDVINk03LjAwUycpOworc2hv
dWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMiwgcm91bmRpbmdN
b2RlOiAnaGFsZkV4cGFuZCcgfSksICdQMVkyTTNXNERUNUg2TTcuMDFTJyk7CisKK3Nob3VsZEJl
KFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS52YWx1ZU9mLmxlbmd0aCwgMCk7CitzaG91bGRU
aHJvdygoKSA9PiBuZXcgVGVtcG9yYWwuRHVyYXRpb24oKS52YWx1ZU9mKCksIFR5cGVFcnJvcik7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436568</attachid>
            <date>2021-08-26 14:33:18 -0700</date>
            <delta_ts>2021-08-26 19:43:30 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-228532-20210826143317.patch</filename>
            <type>text/plain</type>
            <size>106107</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NmE5YjNkYmVhNTJlZWY3NjIyNzk4MWE0YmEzNDk1YThmZjRhOWJlLi40NDkwNTQyM2Q0ZjJkNzdl
YTkxNjU4ZWZhNzM0MTM4MDQxMjBjNDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NSBAQAorMjAyMS0wOC0yNiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpkdXJhdGlvblN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OnByb3BlcnR5TmFtZSk6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFs
RHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRp
b246OlRlbXBvcmFsRHVyYXRpb24pOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmlzVmFsaWREdXJhdGlvbik6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQpOgorICAgICAgICAoSlNDOjpo
YW5kbGVGcmFjdGlvbik6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnBhcnNlKToK
KyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6ZnJvbU9iamVjdCk6CisgICAgICAgIChK
U0M6OlRlbXBvcmFsRHVyYXRpb246OnRvRHVyYXRpb24pOgorICAgICAgICAoSlNDOjpUZW1wb3Jh
bER1cmF0aW9uOjpmcm9tKToKKyAgICAgICAgKEpTQzo6dG90YWxOYW5vc2Vjb25kcyk6CisgICAg
ICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpUZW1w
b3JhbER1cmF0aW9uOjpzaWduKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6d2l0
aCBjb25zdCk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246Om5lZ2F0ZWQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjphYnMgY29uc3QpOgorICAgICAgICAo
SlNDOjpUZW1wb3JhbER1cmF0aW9uOjpsYXJnZXN0U3ViZHVyYXRpb24gY29uc3QpOgorICAgICAg
ICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpiYWxhbmNlKToKKyAgICAgICAgKEpTQzo6VGVtcG9y
YWxEdXJhdGlvbjo6YWRkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6
c3VidHJhY3QgY29uc3QpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpyb3VuZCk6
CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnRvdGFsIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpU
ZW1wb3JhbER1cmF0aW9uOjp0b1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0
cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uQ29uc3Ry
dWN0b3I6OlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OlRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJh
dGlvbkNvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlOjpUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6VGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NVU1RPTV9H
RVRURVIpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlRHVyYXRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OnNpbmd1bGFyVW5p
dCk6CisgICAgICAgIChKU0M6OnRlbXBvcmFsVW5pdFR5cGUpOgorICAgICAgICAoSlNDOjp0ZW1w
b3JhbFNtYWxsZXN0VW5pdCk6CisgICAgICAgIChKU0M6OnRlbXBvcmFsRnJhY3Rpb25hbFNlY29u
ZERpZ2l0cyk6CisgICAgICAgIChKU0M6OnNlY29uZHNTdHJpbmdQcmVjaXNpb24pOgorICAgICAg
ICAoSlNDOjpyb3VuZE51bWJlclRvSW5jcmVtZW50KToKKyAgICAgICAgKiBydW50aW1lL1RlbXBv
cmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgICogcnVudGlt
ZS9WTS5oOgorCiAyMDIxLTA4LTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+
CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIHVubmVjZXNzYXJ5IG1vdmVzIGluIFlhcnIncyBzdWIz
MiAvIGFkZDMyIHJlbGF0ZWQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IGJiNjU0YjU0NDRkMjE5Njc5NmVhZmE0MjU1NzhkMDM4ZWFiNzZjZTkuLmQxZDM5YWM3ZGRk
NjRkMTUxNWM3ODUxMzkyN2FiYjZlMGRhMWM2M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEwNyw2ICsxMDcsOCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfT0JKRUNUX0xV
VF9TT1VSQ0VTCiAgICAgcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9T
eW1ib2xDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL1N5bWJvbFByb3RvdHlwZS5jcHAKKyAg
ICBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAKKyAgICBydW50aW1lL1Rl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9UZW1wb3JhbE9iamVjdC5j
cHAKIAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNzU0MmM3Zjc3NDY1ZTI2ZTE5ZDRhNjhhNWRiNzYw
OTFmZGQ0NjUzOS4uM2Y1ODVlMWM5NGIzMDMwNjg5NGIyNzc2YjlhNTA3ZTk2ZjA2NGY5NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTE5MSw2ICsxOTEs
OCBAQCBPQkpFQ1RfTFVUX0hFQURFUlMgPSBcCiAgICAgU3RyaW5nUHJvdG90eXBlLmx1dC5oIFwK
ICAgICBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgU3ltYm9sUHJvdG90eXBlLmx1dC5o
IFwKKyAgICBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IubHV0LmggXAorICAgIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGUubHV0LmggXAogICAgIFRlbXBvcmFsT2JqZWN0Lmx1dC5oIFwKICAg
ICBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5sdXQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGFkZDZjYjQzMjI5MjdmMjIxNWE2MzJkMzg5M2JkYzljMzgyNWZhN2EuLjJlZTY4
ZjEwMzJlMzk5YmUzYjY5ZDA3OTBiYjY2NDk4ZTQ5ZWI3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xNDE2LDYgKzE0MTYsOSBAQAogCQlBMzgyQzUzMTI2NjcxMTFEMDA0MkNE
OTkgLyogSW5CeVZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzMzA1RkIxMjBCMEY3ODgwMENFQjgyQiAvKiBJbkJ5VmFyaWFudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUEzOEQyNTBFMjU4
MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTM4RDI1MEQyNTgwMEQ0MzAw
NDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmggKi87IH07CiAJCUEzOEQ1
QkZDMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhENUJGQTI2NjZEM0RBMDBBMTA5QTYgLyogSW5C
eVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUEzQzdFREI2MjZCMERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBM0M3RURC
MDI2QjBEQjM2MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oICovOyB9Owor
CQlBM0M3RURCOTI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VEQjMyNkIwREIzNzAw
NEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCAqLzsgfTsKKwkJQTNDN0VEQkEyNkIwREIzODAw
NEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VEQjQyNkIwREIzNzAwNEMzNEM1IC8q
IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oICovOyB9OwogCQlBM0VFODU0MzI2MjUxNEIw
MDBGQzlCOEQgLyogSW50bFdvcmthcm91bmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTM3NjE5NDAyNjI1MTI3QzAwQ0JDQkE5IC8qIEludGxXb3Jr
YXJvdW5kLmNwcCAqLzsgfTsKIAkJQTNGRjlCQzcyMjM0NzQ5MTAwQjFBOUFCIC8qIFlhcnJGbGFn
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNGRjlC
QzUyMjM0NzQ2NjAwQjFBOUFCIC8qIFlhcnJGbGFncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBK
YXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNTAzRkExNDE4OEUwRkFGMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFt
ZS5oICovOyB9OwpAQCAtNDQ3Myw2ICs0NDc2LDEyIEBACiAJCUEzQkY4ODRFMjQ0ODBCRTAwMDFC
OUYzNSAvKiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzQkY4ODRGMjQ0ODBCRTAwMDFCOUYzNSAv
KiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBM0JGODg1MDI0NDgwQkUxMDAxQjlGMzUgLyogSW50bFJlbGF0aXZlVGltZUZv
cm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREIwMjZCMERCMzYw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjEyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVy
YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcG9yYWxE
dXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREIyMjZCMERC
MzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjMyNkIwREIzNzAwNEMzNEM1
IC8qIFRlbXBvcmFsRHVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGVtcG9yYWxEdXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURC
NDI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCNTI2QjBEQjM3MDA0QzM0QzUg
LyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTNGRjlCQzUyMjM0NzQ2NjAwQjFBOUFCIC8qIFlhcnJGbGFncy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyRmxhZ3MuaDsgcGF0aCA9IHlh
cnIvWWFyckZsYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzRkY5QkM2MjIz
NDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gWWFyckZsYWdzLmNwcDsgcGF0aCA9IHlhcnIvWWFyckZsYWdzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUwM0ZBMTMxODhFMEZBRjAwMTEwRjE0IC8qIEph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC03OTU2LDYgKzc5NjUsMTIgQEAKIAkJCQlFMzExNzlBOTIyODgzODVEMDA1MTRCMkMgLyogU3lt
Ym9sVGFibGVPclNjb3BlRGVwdGguaCAqLywKIAkJCQlCREI0QjVFMDk5Q0Q0QzFCQjNDMUNGMDUg
LyogVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcCAqLywKIAkJCQk3MEVDQTYwNDFBRkRCRUEy
MDA0NDk3MzkgLyogVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmggKi8sCisJCQkJQTNDN0VEQjEy
NkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uY3BwICovLAorCQkJCUEzQzdFREIz
MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi8sCisJCQkJQTNDN0VEQjIy
NkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAgKi8sCisJ
CQkJQTNDN0VEQjQyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rv
ci5oICovLAorCQkJCUEzQzdFREI1MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlLmNwcCAqLywKKwkJCQlBM0M3RURCMDI2QjBEQjM2MDA0QzM0QzUgLyogVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZS5oICovLAogCQkJCUY2RjE1MDFCMjY5M0QzM0UwMDRCOThFRiAv
KiBUZW1wb3JhbE5vdy5jcHAgKi8sCiAJCQkJRjZGMTUwMTgyNjkzRDMzRDAwNEI5OEVGIC8qIFRl
bXBvcmFsTm93LmggKi8sCiAJCQkJRjZGMTUwMTkyNjkzRDMzRTAwNEI5OEVGIC8qIFRlbXBvcmFs
T2JqZWN0LmNwcCAqLywKQEAgLTEwNjU1LDcgKzEwNjcwLDExIEBACiAJCQkJQTc4NEEyNjQxMUQx
NjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURDNzk5
NzgzMUNERTlGQTAwMDRENEEwOSAvKiBUYWdSZWdpc3RlcnNNb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVPYmplY3REZXNjcmlwdG9y
LmggaW4gSGVhZGVycyAqLywKKwkJCQlBM0M3RURCOTI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9y
YWxEdXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTNDN0VEQkEyNkIwREIzODAwNEMzNEM1
IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTND
N0VEQjYyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUY2RjE1MDIxMjY5M0Q0NTAwMDRCOThFRiAvKiBUZW1wb3JhbE9iamVj
dC5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUEzRkE5NzM4MjZCQjM1NTYwMEY3MTA2MCAvKiBU
ZW1wb3JhbE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTRGMTdFRTI3
NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDRB
N0I0MjBCRjY4RDkwMDIyQjE3MSAvKiBUZXJtaW5hdGVkQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZBMkMxN0MxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggYTY0NzAyZGI2MDFj
YzIxYWJiNGMyNjI5NDU3ZGQxYTc1OWMzMDIwZC4uM2MyYzZmMDA5NjY3YzgzYWMxOTQ3YTQ2MzQ5
YzY3YWI5MmVjMjI5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTAxMCw2ICsx
MDEwLDkgQEAgcnVudGltZS9TeW1ib2xPYmplY3QuY3BwCiBydW50aW1lL1N5bWJvbFByb3RvdHlw
ZS5jcHAKIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwCiBydW50aW1lL1RlbXBsYXRlT2JqZWN0RGVz
Y3JpcHRvci5jcHAKK3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKK3J1bnRpbWUvVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcAorcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlLmNwcAogcnVudGltZS9UZW1wb3JhbE5vdy5jcHAKIHJ1bnRpbWUvVGVtcG9yYWxPYmplY3Qu
Y3BwCiBydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCmluZGV4IGRjNjAxOWY0NWZkOThiNDM3
YTViZjZlMjY1ODRhMGEzNDYzMmZhZGMuLjVmOGRjNzRhZTY0Y2ZlMzZiYTVjMmFmOWNlNjA1ZTIw
YTA3YmVlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaApAQCAtOTksNiArOTksNyBAQAogICAgIG1hY3JvKGNvdW50ZXJzKSBcCiAg
ICAgbWFjcm8oZGF0ZVN0eWxlKSBcCiAgICAgbWFjcm8oZGF5KSBcCisgICAgbWFjcm8oZGF5cykg
XAogICAgIG1hY3JvKGRheVBlcmlvZCkgXAogICAgIG1hY3JvKGRlZmluZVByb3BlcnR5KSBcCiAg
ICAgbWFjcm8oZGVyZWYpIFwKQEAgLTEzNSw2ICsxMzYsNyBAQAogICAgIG1hY3JvKGhhc2gpIFwK
ICAgICBtYWNybyhoZWFkZXIpIFwKICAgICBtYWNybyhob3VyKSBcCisgICAgbWFjcm8oaG91cnMp
IFwKICAgICBtYWNybyhob3VyQ3ljbGUpIFwKICAgICBtYWNybyhob3VyMTIpIFwKICAgICBtYWNy
byhpZCkgXApAQCAtMTYyLDEzICsxNjQsMTggQEAKICAgICBtYWNybyhtYXhpbXVtRnJhY3Rpb25E
aWdpdHMpIFwKICAgICBtYWNybyhtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMpIFwKICAgICBtYWNy
byhtZXNzYWdlKSBcCisgICAgbWFjcm8obWljcm9zZWNvbmRzKSBcCisgICAgbWFjcm8obWlsbGlz
ZWNvbmRzKSBcCiAgICAgbWFjcm8obWluaW11bUZyYWN0aW9uRGlnaXRzKSBcCiAgICAgbWFjcm8o
bWluaW11bUludGVnZXJEaWdpdHMpIFwKICAgICBtYWNybyhtaW5pbXVtU2lnbmlmaWNhbnREaWdp
dHMpIFwKICAgICBtYWNybyhtaW51dGUpIFwKKyAgICBtYWNybyhtaW51dGVzKSBcCiAgICAgbWFj
cm8obW9udGgpIFwKKyAgICBtYWNybyhtb250aHMpIFwKICAgICBtYWNybyhtdWx0aWxpbmUpIFwK
ICAgICBtYWNybyhuYW1lKSBcCisgICAgbWFjcm8obmFub3NlY29uZHMpIFwKICAgICBtYWNybyhu
ZXh0KSBcCiAgICAgbWFjcm8obm93KSBcCiAgICAgbWFjcm8obnVtSW5saW5lZENhbGxzKSBcCkBA
IC0xOTEsMTMgKzE5OCwxNiBAQAogICAgIG1hY3JvKHJlZ2lvbikgXAogICAgIG1hY3JvKHJlcGxh
Y2UpIFwKICAgICBtYWNybyhyZXNvbHZlKSBcCisgICAgbWFjcm8ocm91bmRpbmdNb2RlKSBcCiAg
ICAgbWFjcm8oc2NyaXB0KSBcCiAgICAgbWFjcm8oc2Vjb25kKSBcCisgICAgbWFjcm8oc2Vjb25k
cykgXAogICAgIG1hY3JvKHNlZ21lbnQpIFwKICAgICBtYWNybyhzZW5zaXRpdml0eSkgXAogICAg
IG1hY3JvKHNldCkgXAogICAgIG1hY3JvKHNpemUpIFwKICAgICBtYWNybyhzbGljZSkgXAorICAg
IG1hY3JvKHNtYWxsZXN0VW5pdCkgXAogICAgIG1hY3JvKHNvdXJjZSkgXAogICAgIG1hY3JvKHNv
dXJjZUNvZGUpIFwKICAgICBtYWNybyhzb3VyY2VVUkwpIFwKQEAgLTIyNCwxMiArMjM0LDE1IEBA
CiAgICAgbWFjcm8odHlwZSkgXAogICAgIG1hY3JvKHVpZCkgXAogICAgIG1hY3JvKHVuaWNvZGUp
IFwKKyAgICBtYWNybyh1bml0KSBcCiAgICAgbWFjcm8odXNhZ2UpIFwKICAgICBtYWNybyh2YWx1
ZSkgXAogICAgIG1hY3JvKHZhbHVlT2YpIFwKICAgICBtYWNybyh3ZWVrZGF5KSBcCisgICAgbWFj
cm8od2Vla3MpIFwKICAgICBtYWNybyh3cml0YWJsZSkgXAotICAgIG1hY3JvKHllYXIpCisgICAg
bWFjcm8oeWVhcikgXAorICAgIG1hY3JvKHllYXJzKQogCiAjZGVmaW5lIEpTQ19DT01NT05fSURF
TlRJRklFUlNfRUFDSF9QUklWQVRFX0ZJRUxEKG1hY3JvKSBcCiAgICAgbWFjcm8oY29uc3RydWN0
b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKaW5kZXggMTVmNWIwNjRlY2JmYzY1OGE5OTBkMmViNTk2MzViZjJiZGJlODg4Mi4uNTQxOGE3
YmIwZjgxMWI2YzA2M2RlNzYzNGJhZjdmYTIyMDIzYzk0NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMjAxLDYgKzIwMSw4IEBA
CiAjaW5jbHVkZSAiU3ltYm9sQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJTeW1ib2xPYmplY3Qu
aCIKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0
aW9uLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUg
IlRlbXBvcmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiVk1UcmFwc0lubGluZXMuaCIKICNpbmNsdWRl
ICJXYXNtQ2FwYWJpbGl0aWVzLmgiCkBAIC0xMjEyLDYgKzEyMTQsMTMgQEAgY2FwaXRhbE5hbWUg
IyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVGbGFnID8g
Y2FwaXRhbE5hbWUKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+SW50bCwgaW50bCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOwogCiAgICAgaWYgKE9wdGlvbnM6OnVzZVRlbXBvcmFsKCkpIHsKKyAg
ICAgICAgbV9kdXJhdGlvblN0cnVjdHVyZS5pbml0TGF0ZXIoCisgICAgICAgICAgICBbXSAoY29u
c3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93
bmVyKTsKKyAgICAgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBkdXJhdGlv
blByb3RvdHlwZSA9IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0ZShpbml0LnZtLCBU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgICAgICAgICAg
ICAgaW5pdC5zZXQoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGds
b2JhbE9iamVjdCwgZHVyYXRpb25Qcm90b3R5cGUpKTsKKyAgICAgICAgICAgIH0pOworCiAgICAg
ICAgIFRlbXBvcmFsT2JqZWN0KiB0ZW1wb3JhbCA9IFRlbXBvcmFsT2JqZWN0OjpjcmVhdGUodm0s
IFRlbXBvcmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMpKTsKICAgICAgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPlRlbXBvcmFsLCB0
ZW1wb3JhbCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOwogICAgIH0KQEAgLTIwOTAsNiArMjA5OSw5IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKICAgICB0aGlz
T2JqZWN0LT5tX2RhdGVUaW1lRm9ybWF0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRo
aXNPYmplY3QtPm1fbnVtYmVyRm9ybWF0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogCisgICAg
aWYgKE9wdGlvbnM6OnVzZVRlbXBvcmFsKCkpCisgICAgICAgIHRoaXNPYmplY3QtPm1fZHVyYXRp
b25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CisKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX251bGxHZXR0ZXJGdW5jdGlvbik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9udWxsU2V0dGVyRnVuY3Rpb24pOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fbnVsbFNldHRlclN0cmljdEZ1bmN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IGEzNWVmY2U3YzUyNjJmNDlkOThkNWFiNDIx
M2M4ODFiNWMyNzBhYzAuLmI0M2I2N2E5Mzg0MDZiNzAxMjIyYWUzNTMzMjA4ZDcyMTdhNzI4OWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApA
QCAtMzI0LDYgKzMyNCw4IEBAIHB1YmxpYzoKICAgICBMYXp5Q2xhc3NTdHJ1Y3R1cmUgbV9kYXRl
VGltZUZvcm1hdFN0cnVjdHVyZTsKICAgICBMYXp5Q2xhc3NTdHJ1Y3R1cmUgbV9udW1iZXJGb3Jt
YXRTdHJ1Y3R1cmU7CiAKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZT4gbV9kdXJhdGlvblN0cnVjdHVyZTsKKwogICAgIFdyaXRlQmFycmllcjxOdWxsR2V0dGVyRnVu
Y3Rpb24+IG1fbnVsbEdldHRlckZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxOdWxsU2V0dGVy
RnVuY3Rpb24+IG1fbnVsbFNldHRlckZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxOdWxsU2V0
dGVyRnVuY3Rpb24+IG1fbnVsbFNldHRlclN0cmljdEZ1bmN0aW9uOwpAQCAtODcwLDYgKzg3Miw4
IEBAIHB1YmxpYzoKICAgICBKU09iamVjdCogbnVtYmVyRm9ybWF0Q29uc3RydWN0b3IoKSB7IHJl
dHVybiBtX251bWJlckZvcm1hdFN0cnVjdHVyZS5jb25zdHJ1Y3Rvcih0aGlzKTsgfQogICAgIEpT
T2JqZWN0KiBudW1iZXJGb3JtYXRQcm90b3R5cGUoKSB7IHJldHVybiBtX251bWJlckZvcm1hdFN0
cnVjdHVyZS5wcm90b3R5cGUodGhpcyk7IH0KIAorICAgIFN0cnVjdHVyZSogZHVyYXRpb25TdHJ1
Y3R1cmUoKSB7IHJldHVybiBtX2R1cmF0aW9uU3RydWN0dXJlLmdldCh0aGlzKTsgfQorCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRSZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKGJvb2wpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcmVtb3RlRGVidWdnaW5nRW5hYmxlZCgpIGNvbnN0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRp
b24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg1NDYwZDZjZjY2ZDNmOTdhZTY2ZTg4ZWM3NzVlMTczNjJjMTEx
YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbER1cmF0aW9uLmNwcApAQCAtMCwwICsxLDcxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgorCisjaW5jbHVk
ZSAiSW50bE9iamVjdElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiUGFyc2VJbnQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgSlNDIHsK
Kworc3RhdGljIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUoVk0mIHZtLCB1bnNpZ25lZCBpbmRl
eCkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBudW1iZXJPZlRlbXBvcmFsVW5pdHMpOworICAgIHN3
aXRjaCAoc3RhdGljX2Nhc3Q8VGVtcG9yYWxVbml0PihpbmRleCkpIHsKKyNkZWZpbmUgSlNDX1RF
TVBPUkFMX0RVUkFUSU9OX1BST1BFUlRZX05BTUUobmFtZSwgY2FwaXRhbGl6ZWROYW1lKSBjYXNl
IFRlbXBvcmFsVW5pdDo6Y2FwaXRhbGl6ZWROYW1lOiByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSMjczsgCisgICAgICAgIEpTQ19URU1QT1JBTF9VTklUUyhKU0NfVEVNUE9SQUxfRFVSQVRJ
T05fUFJPUEVSVFlfTkFNRSkKKyN1bmRlZiBKU0NfVEVNUE9SQUxfRFVSQVRJT05fUFJPUEVSVFlf
TkFNRQorICAgIH0KK30KKworY29uc3QgQ2xhc3NJbmZvIFRlbXBvcmFsRHVyYXRpb246OnNfaW5m
byA9IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoVGVtcG9yYWxEdXJhdGlvbikgfTsKKworVGVtcG9yYWxEdXJhdGlvbiogVGVt
cG9yYWxEdXJhdGlvbjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN1YmR1
cmF0aW9ucyYmIHN1YmR1cmF0aW9ucykKK3sKKyAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbER1cmF0aW9uPih2bS5oZWFwKSkgVGVtcG9yYWxEdXJh
dGlvbih2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKHN1YmR1cmF0aW9ucykpOworICAgIG9iamVjdC0+
ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK1N0cnVjdHVyZSog
VGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitUZW1wb3JhbER1cmF0aW9uOjpUZW1w
b3JhbER1cmF0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN1YmR1cmF0aW9ucyYm
IHN1YmR1cmF0aW9ucykKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fc3ViZHVy
YXRpb25zKFdURk1vdmUoc3ViZHVyYXRpb25zKSkKK3sKK30KKwordm9pZCBUZW1wb3JhbER1cmF0
aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Cit9CisKKy8vIElzVmFsaWRE
dXJhdGlvbiAoIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vj
b25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMsIG5hbm9zZWNvbmRzICkKK3N0YXRpYyBi
b29sIGlzVmFsaWREdXJhdGlvbihjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMm
IHN1YmR1cmF0aW9ucykKK3sKKyAgICBpbnQgc2lnbiA9IDA7CisgICAgZm9yIChhdXRvIHZhbHVl
IDogc3ViZHVyYXRpb25zKSB7CisgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZSh2YWx1ZSkgfHwg
KHZhbHVlIDwgMCAmJiBzaWduID4gMCkgfHwgKHZhbHVlID4gMCAmJiBzaWduIDwgMCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFzaWduICYmIHZhbHVlKQorICAg
ICAgICAgICAgc2lnbiA9IHZhbHVlID4gMCA/IDEgOiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworLy8gIENyZWF0ZVRlbXBvcmFsRHVyYXRpb24gKCB5ZWFycywgbW9udGhzLCB3
ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9z
ZWNvbmRzLCBuYW5vc2Vjb25kcyBbICwgbmV3VGFyZ2V0IF0gKQorVGVtcG9yYWxEdXJhdGlvbiog
VGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxpZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdWJkdXJhdGlvbnMmJiBzdWJkdXJhdGlvbnMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIWlzVmFsaWREdXJhdGlvbihzdWJkdXJh
dGlvbnMpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
Y2Fubm90IGNyZWF0ZSBEdXJhdGlvbiB3aXRoIGluY29uc2lzdGVudCBudW1lcmljIHZhbHVlcyJf
cyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIFRlbXBvcmFsRHVy
YXRpb246OmNyZWF0ZSh2bSwgc3RydWN0dXJlID8gc3RydWN0dXJlIDogZ2xvYmFsT2JqZWN0LT5k
dXJhdGlvblN0cnVjdHVyZSgpLCBXVEZNb3ZlKHN1YmR1cmF0aW9ucykpOworfQorCisvLyBEdXJh
dGlvbkhhbmRsZUZyYWN0aW9ucyAoIGZIb3VycywgbWludXRlcywgZk1pbnV0ZXMsIHNlY29uZHMs
IGZTZWNvbmRzLCBtaWxsaXNlY29uZHMsIGZNaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgZk1p
Y3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIGZOYW5vc2Vjb25kcyApCitzdGF0aWMgdm9pZCBoYW5k
bGVGcmFjdGlvbihUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9ucywg
aW50IGZhY3RvciwgU3RyaW5nVmlldyBmcmFjdGlvblN0cmluZywgVGVtcG9yYWxVbml0IGZyYWN0
aW9uVHlwZSkKK3sKKyAgICBBU1NFUlQoZnJhY3Rpb25TdHJpbmcubGVuZ3RoKCkpOworICAgIEFT
U0VSVChmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxVbml0OjpIb3VyIHx8IGZyYWN0aW9uVHlwZSA9
PSBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSB8fCBmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxVbml0OjpT
ZWNvbmQpOworCisgICAgaWYgKGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6OlNlY29uZCkg
eworICAgICAgICBhdXRvIHBhZGRlZCA9IG1ha2VTdHJpbmcoZnJhY3Rpb25TdHJpbmcsICIwMDAw
MDAwMCIpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNvbmRzKGZhY3RvciAqIHBh
cnNlSW50KHBhZGRlZC5zdWJzdHJpbmcoMCwgMyksIDEwKSk7CisgICAgICAgIHN1YmR1cmF0aW9u
cy5zZXRNaWNyb3NlY29uZHMoZmFjdG9yICogcGFyc2VJbnQocGFkZGVkLnN1YnN0cmluZygzLCAz
KSwgMTApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRzKGZhY3RvciAqIHBh
cnNlSW50KHBhZGRlZC5zdWJzdHJpbmcoNiwgMyksIDEwKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBkb3VibGUgZnJhY3Rpb24gPSBmYWN0b3IgKiBwYXJzZUludChmcmFjdGlvblN0
cmluZywgMTApIC8gc3RkOjpwb3coMTAsIGZyYWN0aW9uU3RyaW5nLmxlbmd0aCgpKTsKKyAgICBp
ZiAoIWZyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZnJhY3Rpb25UeXBlID09
IFRlbXBvcmFsVW5pdDo6SG91cikgeworICAgICAgICBmcmFjdGlvbiAqPSA2MDsKKyAgICAgICAg
c3ViZHVyYXRpb25zLnNldE1pbnV0ZXMoc3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgICAgICBm
cmFjdGlvbiA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMSk7CisgICAgICAgIGlmICghZnJhY3Rpb24p
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnJhY3Rpb24gKj0gNjA7CisgICAg
c3ViZHVyYXRpb25zLnNldFNlY29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgIGZyYWN0
aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9uLCAxKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmcmFjdGlvbiAqPSAxMDAwOworICAgIHN1YmR1cmF0aW9ucy5zZXRN
aWxsaXNlY29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgIGZyYWN0aW9uID0gc3RkOjpm
bW9kKGZyYWN0aW9uLCAxKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBmcmFjdGlvbiAqPSAxMDAwOworICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMo
c3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgIGZyYWN0aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9u
LCAxKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzdWJkdXJh
dGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbiAqIDEwMDApKTsKK30KKwor
Ly8gUGFyc2VUZW1wb3JhbER1cmF0aW9uU3RyaW5nICggaXNvU3RyaW5nICkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsRHVyYXRpb246OlN1
YmR1cmF0aW9ucz4gVGVtcG9yYWxEdXJhdGlvbjo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQoreworICAgIC8vIElTTyA4NjAxIGR1cmF0aW9uIHN0cmlu
Z3MgYXJlIGxpa2UgIi1QMVkyTTNXNERUNUg2TTcuMTIzNDU2Nzg5UyIuIE5vdGVzOgorICAgIC8v
IC0gY2FzZSBpbnNlbnNpdGl2ZQorICAgIC8vIC0gc2lnbjogKyAtIOKIkihVKzIyMTIpCisgICAg
Ly8gLSBzZXBhcmF0b3I6IC4gLAorICAgIC8vIC0gVCBpcyBwcmVzZW50IGlmZiB0aGVyZSBpcyBh
IHRpbWUgcGFydAorICAgIC8vIC0gaW50ZWdyYWwgcGFydHMgY2FuIGhhdmUgYW55IG51bWJlciBv
ZiBkaWdpdHMgYnV0IGZyYWN0aW9uYWwgcGFydHMgaGF2ZSBhdCBtb3N0IDkKKyAgICAvLyAtIGhv
dXJzIGFuZCBtaW51dGVzIGNhbiBoYXZlIGZyYWN0aW9uYWwgcGFydHMgdG9vLCBidXQgb25seSBh
cyB0aGUgTEFTVCBwYXJ0IG9mIHRoZSBzdHJpbmcKKyAgICBpZiAoYnVmZmVyLmxlbmd0aFJlbWFp
bmluZygpIDwgMykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIFN1YmR1cmF0
aW9ucyByZXN1bHQgeyB9OworCisgICAgaW50IGZhY3RvciA9IDE7CisgICAgaWYgKCpidWZmZXIg
PT0gJysnKQorICAgICAgICBidWZmZXIuYWR2YW5jZSgpOworICAgIGVsc2UgaWYgKCpidWZmZXIg
PT0gJy0nIHx8ICpidWZmZXIgPT0gMHgyMjEyKSB7CisgICAgICAgIGZhY3RvciA9IC0xOworICAg
ICAgICBidWZmZXIuYWR2YW5jZSgpOworICAgIH0KKworICAgIGlmICh0b0FTQ0lJVXBwZXIoKmJ1
ZmZlcikgIT0gJ1AnKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYnVmZmVy
LmFkdmFuY2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGRhdGVQYXJ0SW5kZXggPSAwOyBkYXRlUGFy
dEluZGV4IDwgNCAmJiBidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlE
aWdpdCgqYnVmZmVyKTsgYnVmZmVyLmFkdmFuY2UoKSkgeworICAgICAgICB1bnNpZ25lZCBkaWdp
dHMgPSAxOworICAgICAgICB3aGlsZSAoZGlnaXRzIDwgYnVmZmVyLmxlbmd0aFJlbWFpbmluZygp
ICYmIGlzQVNDSUlEaWdpdChidWZmZXJbZGlnaXRzXSkpCisgICAgICAgICAgICBkaWdpdHMrKzsK
KworICAgICAgICBkb3VibGUgaW50ZWdlciA9IGZhY3RvciAqIHBhcnNlSW50KHsgYnVmZmVyLnBv
c2l0aW9uKCksIGRpZ2l0cyB9LCAxMCk7CisgICAgICAgIGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRz
KTsKKyAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgICAgICBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpID09ICdZJyAmJiAh
ZGF0ZVBhcnRJbmRleCkgeworICAgICAgICAgICAgcmVzdWx0LnNldFllYXJzKGludGVnZXIpOwor
ICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAodG9BU0NJ
SVVwcGVyKCpidWZmZXIpID09ICdNJyAmJiBkYXRlUGFydEluZGV4IDwgMikgeworICAgICAgICAg
ICAgcmVzdWx0LnNldE1vbnRocyhpbnRlZ2VyKTsKKyAgICAgICAgICAgIGRhdGVQYXJ0SW5kZXgg
PSAyOworICAgICAgICB9IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnVycgJiYg
ZGF0ZVBhcnRJbmRleCA8IDMpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRXZWVrcyhpbnRlZ2Vy
KTsKKyAgICAgICAgICAgIGRhdGVQYXJ0SW5kZXggPSAzOworICAgICAgICB9IGVsc2UgaWYgKHRv
QVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnRCcpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXREYXlz
KGludGVnZXIpOworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDQ7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoYnVm
ZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAoYnVmZmVyLmxl
bmd0aFJlbWFpbmluZygpIDwgMyB8fCB0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgIT0gJ1QnKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYnVmZmVyLmFkdmFuY2UoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIHRpbWVQYXJ0SW5kZXggPSAwOyB0aW1lUGFydEluZGV4IDwgMyAmJiBidWZm
ZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgqYnVmZmVyKTsgYnVm
ZmVyLmFkdmFuY2UoKSkgeworICAgICAgICB1bnNpZ25lZCBkaWdpdHMgPSAxOworICAgICAgICB3
aGlsZSAoZGlnaXRzIDwgYnVmZmVyLmxlbmd0aFJlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdChi
dWZmZXJbZGlnaXRzXSkpCisgICAgICAgICAgICBkaWdpdHMrKzsKKworICAgICAgICBkb3VibGUg
aW50ZWdlciA9IGZhY3RvciAqIHBhcnNlSW50KHsgYnVmZmVyLnBvc2l0aW9uKCksIGRpZ2l0cyB9
LCAxMCk7CisgICAgICAgIGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRzKTsKKyAgICAgICAgaWYgKGJ1
ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAg
ICBTdHJpbmdWaWV3IGZyYWN0aW9uYWxQYXJ0OworICAgICAgICBpZiAoKmJ1ZmZlciA9PSAnLicg
fHwgKmJ1ZmZlciA9PSAnLCcpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hZHZhbmNlKCk7CisgICAg
ICAgICAgICBkaWdpdHMgPSAwOworICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cyA8IGJ1ZmZlci5s
ZW5ndGhSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoYnVmZmVyW2RpZ2l0c10pKQorICAgICAg
ICAgICAgICAgIGRpZ2l0cysrOworICAgICAgICAgICAgaWYgKCFkaWdpdHMgfHwgZGlnaXRzID4g
OSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgICAgICBm
cmFjdGlvbmFsUGFydCA9IHsgYnVmZmVyLnBvc2l0aW9uKCksIGRpZ2l0cyB9OworICAgICAgICAg
ICAgYnVmZmVyLmFkdmFuY2VCeShkaWdpdHMpOworICAgICAgICAgICAgaWYgKGJ1ZmZlci5hdEVu
ZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpID09ICdIJyAmJiAhdGltZVBhcnRJbmRl
eCkgeworICAgICAgICAgICAgcmVzdWx0LnNldEhvdXJzKGludGVnZXIpOworICAgICAgICAgICAg
aWYgKGZyYWN0aW9uYWxQYXJ0KSB7CisgICAgICAgICAgICAgICAgaGFuZGxlRnJhY3Rpb24ocmVz
dWx0LCBmYWN0b3IsIGZyYWN0aW9uYWxQYXJ0LCBUZW1wb3JhbFVuaXQ6OkhvdXIpOworICAgICAg
ICAgICAgICAgIHRpbWVQYXJ0SW5kZXggPSAzOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgdGltZVBhcnRJbmRleCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAodG9BU0NJSVVw
cGVyKCpidWZmZXIpID09ICdNJyAmJiB0aW1lUGFydEluZGV4IDwgMikgeworICAgICAgICAgICAg
cmVzdWx0LnNldE1pbnV0ZXMoaW50ZWdlcik7CisgICAgICAgICAgICBpZiAoZnJhY3Rpb25hbFBh
cnQpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVGcmFjdGlvbihyZXN1bHQsIGZhY3RvciwgZnJh
Y3Rpb25hbFBhcnQsIFRlbXBvcmFsVW5pdDo6TWludXRlKTsKKyAgICAgICAgICAgICAgICB0aW1l
UGFydEluZGV4ID0gMzsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRpbWVQ
YXJ0SW5kZXggPSAyOworICAgICAgICB9IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVyKSA9
PSAnUycpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTZWNvbmRzKGludGVnZXIpOworICAgICAg
ICAgICAgaWYgKGZyYWN0aW9uYWxQYXJ0KQorICAgICAgICAgICAgICAgIGhhbmRsZUZyYWN0aW9u
KHJlc3VsdCwgZmFjdG9yLCBmcmFjdGlvbmFsUGFydCwgVGVtcG9yYWxVbml0OjpTZWNvbmQpOwor
ICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9IDM7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoYnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKy8vIFRvVGVtcG9yYWxEdXJhdGlvblJlY29yZCAoIHRlbXBvcmFs
RHVyYXRpb25MaWtlICkKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1
cmF0aW9uOjpmcm9tT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
KiBkdXJhdGlvbkxpa2UpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEFTU0VSVCghZHVy
YXRpb25MaWtlLT5pbmhlcml0czxUZW1wb3JhbER1cmF0aW9uPih2bSkpOworCisgICAgU3ViZHVy
YXRpb25zIHJlc3VsdDsKKyAgICBhdXRvIGhhc1JlbGV2YW50UHJvcGVydHkgPSBmYWxzZTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsgaSsrKSB7Cisg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkdXJhdGlvbkxpa2UtPmdldChnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSh2bSwgaSkpOworCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKSB7
CisgICAgICAgICAgICByZXN1bHRbaV0gPSAwOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBoYXNSZWxldmFudFByb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgcmVz
dWx0W2ldID0gdmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICBpZiAoIWlzSW50ZWdlcihyZXN1bHRb
aV0pKSB7CisgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlbXBvcmFsLkR1cmF0aW9uIHByb3BlcnRpZXMgbXVzdCBiZSBpbnRlZ2VycyJfcyk7CisgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFoYXNSZWxl
dmFudFByb3BlcnR5KSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJvYmplY3QgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBUZW1wb3JhbC5EdXJhdGlvbiBw
cm9wZXJ0eSJfcyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworLy8gVG9UZW1wb3JhbER1cmF0aW9uICggaXRlbSApCitUZW1wb3JhbER1cmF0
aW9uKiBUZW1wb3JhbER1cmF0aW9uOjp0b0R1cmF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgaXRlbVZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBp
ZiAoaXRlbVZhbHVlLmluaGVyaXRzPFRlbXBvcmFsRHVyYXRpb24+KHZtKSkKKyAgICAgICAgcmV0
dXJuIGpzQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4oaXRlbVZhbHVlKTsKKworICAgIGlmIChpdGVt
VmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBUZW1w
b3JhbER1cmF0aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgZnJvbU9iamVjdChnbG9i
YWxPYmplY3QsIGFzT2JqZWN0KGl0ZW1WYWx1ZSkpKSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0g
aXRlbVZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICBhdXRvIHBhcnNlZFN1YmR1cmF0aW9ucyA9IHJl
YWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gYnVmZmVyKSAtPiBzdGQ6Om9w
dGlvbmFsPFN1YmR1cmF0aW9ucz4geworICAgICAgICByZXR1cm4gcGFyc2UoYnVmZmVyKTsKKyAg
ICB9KTsKKyAgICBpZiAoIXBhcnNlZFN1YmR1cmF0aW9ucykgeworICAgICAgICB0aHJvd1Jhbmdl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImNvdWxkIG5vdCBwYXJzZSBEdXJhdGlvbiBzdHJp
bmciX3MpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQoZ2xvYmFsT2Jq
ZWN0LCBXVEZNb3ZlKHBhcnNlZFN1YmR1cmF0aW9ucy52YWx1ZSgpKSkpOworfQorCitUZW1wb3Jh
bER1cmF0aW9uKiBUZW1wb3JhbER1cmF0aW9uOjpmcm9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgaXRlbVZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKworICAgIGlmIChpdGVtVmFsdWUuaW5oZXJpdHM8VGVtcG9yYWxEdXJhdGlvbj4odm0p
KSB7CisgICAgICAgIFN1YmR1cmF0aW9ucyBjbG9uZWQgPSBqc0Nhc3Q8VGVtcG9yYWxEdXJhdGlv
bio+KGl0ZW1WYWx1ZSktPm1fc3ViZHVyYXRpb25zOworICAgICAgICByZXR1cm4gVGVtcG9yYWxE
dXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCksIFdU
Rk1vdmUoY2xvbmVkKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRvRHVyYXRpb24oZ2xvYmFsT2Jq
ZWN0LCBpdGVtVmFsdWUpOworfQorCitzdGF0aWMgZG91YmxlIHRvdGFsTmFub3NlY29uZHMoVGVt
cG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zJiBzdWJkdXJhdGlvbnMpCit7CisgICAgYXV0byBo
b3VycyA9IDI0ICogc3ViZHVyYXRpb25zLmRheXMoKSArIHN1YmR1cmF0aW9ucy5ob3VycygpOwor
ICAgIGF1dG8gbWludXRlcyA9IDYwICogaG91cnMgKyBzdWJkdXJhdGlvbnMubWludXRlcygpOwor
ICAgIGF1dG8gc2Vjb25kcyA9IDYwICogbWludXRlcyArIHN1YmR1cmF0aW9ucy5zZWNvbmRzKCk7
CisgICAgYXV0byBtaWxsaXNlY29uZHMgPSAxMDAwICogc2Vjb25kcyArIHN1YmR1cmF0aW9ucy5t
aWxsaXNlY29uZHMoKTsKKyAgICBhdXRvIG1pY3Jvc2Vjb25kcyA9IDEwMDAgKiBtaWxsaXNlY29u
ZHMgKyBzdWJkdXJhdGlvbnMubWljcm9zZWNvbmRzKCk7CisgICAgcmV0dXJuIDEwMDAgKiBtaWNy
b3NlY29uZHMgKyBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKTsKK30KKworSlNWYWx1ZSBUZW1w
b3JhbER1cmF0aW9uOjpjb21wYXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgdmFsdWVPbmUsIEpTVmFsdWUgdmFsdWVUd28pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGF1dG8qIG9uZSA9IHRvRHVyYXRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZU9uZSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGF1dG8qIHR3byA9IHRvRHVy
YXRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZVR3byk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKworICAgIGlmIChvbmUtPnllYXJzKCkgfHwgdHdvLT55ZWFycygpIHx8IG9u
ZS0+bW9udGhzKCkgfHwgdHdvLT5tb250aHMoKSB8fCBvbmUtPndlZWtzKCkgfHwgdHdvLT53ZWVr
cygpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fu
bm90IGNvbXBhcmUgYSBkdXJhdGlvbiBvZiB5ZWFycywgbW9udGhzLCBvciB3ZWVrcyB3aXRob3V0
IGEgcmVsYXRpdmVUbyBvcHRpb24iX3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIGF1dG8gbnNPbmUgPSB0b3RhbE5hbm9zZWNvbmRzKG9uZS0+bV9zdWJkdXJhdGlvbnMpOwor
ICAgIGF1dG8gbnNUd28gPSB0b3RhbE5hbm9zZWNvbmRzKHR3by0+bV9zdWJkdXJhdGlvbnMpOwor
ICAgIHJldHVybiBqc051bWJlcihuc09uZSA+IG5zVHdvID8gMSA6IG5zT25lIDwgbnNUd28gPyAt
MSA6IDApOworfQorCitpbnQgVGVtcG9yYWxEdXJhdGlvbjo6c2lnbihjb25zdCBUZW1wb3JhbER1
cmF0aW9uOjpTdWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9ucykKK3sKKyAgICBmb3IgKGF1dG8gdmFs
dWUgOiBzdWJkdXJhdGlvbnMpIHsKKyAgICAgICAgaWYgKHZhbHVlIDwgMCkKKyAgICAgICAgICAg
IHJldHVybiAtMTsKKworICAgICAgICBpZiAodmFsdWUgPiAwKQorICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1
cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjp3aXRoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBkdXJhdGlvbkxpa2UpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQ7CisgICAgYXV0byBoYXNSZWxldmFudFByb3BlcnR5
ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlRlbXBvcmFsVW5p
dHM7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZHVyYXRpb25MaWtlLT5nZXQoZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUodm0sIGkpKTsKKworICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWQoKSkgeworICAgICAgICAgICAgcmVzdWx0W2ldID0gbV9zdWJkdXJhdGlvbnNbaV07
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGhhc1JlbGV2YW50
UHJvcGVydHkgPSB0cnVlOworICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZS50b051bWJlcihnbG9i
YWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgICAgIGlmICghaXNJbnRlZ2VyKHJlc3VsdFtpXSkpIHsKKyAgICAgICAgICAgIHRocm93UmFu
Z2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydGll
cyBtdXN0IGJlIGludGVnZXJzIl9zKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoIWhhc1JlbGV2YW50UHJvcGVydHkpIHsKKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIm9iamVjdCBtdXN0IGNvbnRhaW4gYXQg
bGVhc3Qgb25lIFRlbXBvcmFsLkR1cmF0aW9uIHByb3BlcnR5Il9zKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitUZW1wb3JhbER1cmF0aW9u
OjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6bmVnYXRlZCgpIGNvbnN0Cit7CisgICAg
U3ViZHVyYXRpb25zIHJlc3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9m
VGVtcG9yYWxVbml0czsgaSsrKQorICAgICAgICByZXN1bHRbaV0gPSAtbV9zdWJkdXJhdGlvbnNb
aV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRp
b25zIFRlbXBvcmFsRHVyYXRpb246OmFicygpIGNvbnN0Cit7CisgICAgU3ViZHVyYXRpb25zIHJl
c3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsg
aSsrKQorICAgICAgICByZXN1bHRbaV0gPSBzdGQ6OmFicyhtX3N1YmR1cmF0aW9uc1tpXSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gRGVmYXVsdFRlbXBvcmFsTGFyZ2VzdFVuaXQgKCB5
ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxp
c2Vjb25kcywgbWljcm9zZWNvbmRzICkKK1RlbXBvcmFsVW5pdCBUZW1wb3JhbER1cmF0aW9uOjps
YXJnZXN0U3ViZHVyYXRpb24oKSBjb25zdAoreworICAgIHVpbnQ4X3QgaW5kZXggPSAwOworICAg
IHdoaWxlIChpbmRleCA8IG51bWJlck9mVGVtcG9yYWxVbml0cyAtIDEgJiYgIW1fc3ViZHVyYXRp
b25zW2luZGV4XSkKKyAgICAgICAgaW5kZXgrKzsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVt
cG9yYWxVbml0PihpbmRleCk7Cit9CisKKy8vIEJhbGFuY2VEdXJhdGlvbiAoIGRheXMsIGhvdXJz
LCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3NlY29u
ZHMsIGxhcmdlc3RVbml0IFsgLCByZWxhdGl2ZVRvIF0gKQordm9pZCBUZW1wb3JhbER1cmF0aW9u
OjpiYWxhbmNlKFN1YmR1cmF0aW9ucyYgc3ViZHVyYXRpb25zLCBUZW1wb3JhbFVuaXQgbGFyZ2Vz
dFVuaXQpCit7CisgICAgYXV0byBuYW5vc2Vjb25kcyA9IHRvdGFsTmFub3NlY29uZHMoc3ViZHVy
YXRpb25zKTsKKyAgICBzdWJkdXJhdGlvbnMuY2xlYXIoKTsKKworICAgIGlmIChsYXJnZXN0VW5p
dCA8PSBUZW1wb3JhbFVuaXQ6OkRheSkgeworICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG5h
bm9zZWNvbmRzUGVyRGF5ID0gMjQuMCAqIDYwICogNjAgKiAxMDAwICogMTAwMCAqIDEwMDA7Cisg
ICAgICAgIHN1YmR1cmF0aW9ucy5zZXREYXlzKHN0ZDo6dHJ1bmMobmFub3NlY29uZHMgLyBuYW5v
c2Vjb25kc1BlckRheSkpOworICAgICAgICBuYW5vc2Vjb25kcyA9IHN0ZDo6Zm1vZChuYW5vc2Vj
b25kcywgbmFub3NlY29uZHNQZXJEYXkpOworICAgIH0KKworICAgIGRvdWJsZSBtaWNyb3NlY29u
ZHMgPSBzdGQ6OnRydW5jKG5hbm9zZWNvbmRzIC8gMTAwMCk7CisgICAgZG91YmxlIG1pbGxpc2Vj
b25kcyA9IHN0ZDo6dHJ1bmMobWljcm9zZWNvbmRzIC8gMTAwMCk7CisgICAgZG91YmxlIHNlY29u
ZHMgPSBzdGQ6OnRydW5jKG1pbGxpc2Vjb25kcyAvIDEwMDApOworICAgIGRvdWJsZSBtaW51dGVz
ID0gc3RkOjp0cnVuYyhzZWNvbmRzIC8gNjApOworICAgIGlmIChsYXJnZXN0VW5pdCA8PSBUZW1w
b3JhbFVuaXQ6OkhvdXIpIHsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRzKHN0
ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlj
cm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVy
YXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZtb2QobWlsbGlzZWNvbmRzLCAxMDAwKSk7Cisg
ICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHN0ZDo6Zm1vZChzZWNvbmRzLCA2MCkpOwor
ICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWludXRlcyhzdGQ6OmZtb2QobWludXRlcywgNjApKTsK
KyAgICAgICAgc3ViZHVyYXRpb25zLnNldEhvdXJzKHN0ZDo6dHJ1bmMobWludXRlcyAvIDYwKSk7
CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSkgewor
ICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjpmbW9kKG5hbm9zZWNvbmRz
LCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMoc3RkOjpmbW9k
KG1pY3Jvc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNv
bmRzKHN0ZDo6Zm1vZChtaWxsaXNlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25z
LnNldFNlY29uZHMoc3RkOjpmbW9kKHNlY29uZHMsIDYwKSk7CisgICAgICAgIHN1YmR1cmF0aW9u
cy5zZXRNaW51dGVzKG1pbnV0ZXMpOworICAgIH0gZWxzZSBpZiAobGFyZ2VzdFVuaXQgPT0gVGVt
cG9yYWxVbml0OjpTZWNvbmQpIHsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRz
KHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0
TWljcm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3Vi
ZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZtb2QobWlsbGlzZWNvbmRzLCAxMDAwKSk7
CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHNlY29uZHMpOworICAgIH0gZWxzZSBp
ZiAobGFyZ2VzdFVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCkgeworICAgICAgICBz
dWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjpmbW9kKG5hbm9zZWNvbmRzLCAxMDAwKSk7
CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMoc3RkOjpmbW9kKG1pY3Jvc2Vj
b25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNvbmRzKG1pbGxp
c2Vjb25kcyk7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBUZW1wb3JhbFVuaXQ6Ok1p
Y3Jvc2Vjb25kKSB7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXROYW5vc2Vjb25kcyhzdGQ6OmZt
b2QobmFub3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pY3Jvc2Vj
b25kcyhtaWNyb3NlY29uZHMpOworICAgIH0gZWxzZQorICAgICAgICBzdWJkdXJhdGlvbnMuc2V0
TmFub3NlY29uZHMobmFub3NlY29uZHMpOworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJh
dGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgb3RoZXJWYWx1ZSkgY29uc3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
YXV0byogb3RoZXIgPSB0b0R1cmF0aW9uKGdsb2JhbE9iamVjdCwgb3RoZXJWYWx1ZSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGF1dG8gbGFyZ2VzdFVuaXQg
PSBzdGF0aWNfY2FzdDxUZW1wb3JhbFVuaXQ+KHN0ZDo6bWluKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KGxhcmdlc3RTdWJkdXJhdGlvbigpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RoZXItPmxhcmdl
c3RTdWJkdXJhdGlvbigpKSkpOworICAgIGlmIChsYXJnZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6
OldlZWspIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJD
YW5ub3QgYWRkIGEgZHVyYXRpb24gb2YgeWVhcnMsIG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBh
IHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBTdWJkdXJhdGlvbnMgcmVzdWx0IHsKKyAgICAgICAgMCwgMCwgMCwgZGF5cygpICsgb3RoZXIt
PmRheXMoKSwKKyAgICAgICAgaG91cnMoKSArIG90aGVyLT5ob3VycygpLCBtaW51dGVzKCkgKyBv
dGhlci0+bWludXRlcygpLCBzZWNvbmRzKCkgKyBvdGhlci0+c2Vjb25kcygpLAorICAgICAgICBt
aWxsaXNlY29uZHMoKSArIG90aGVyLT5taWxsaXNlY29uZHMoKSwgbWljcm9zZWNvbmRzKCkgKyBv
dGhlci0+bWljcm9zZWNvbmRzKCksIG5hbm9zZWNvbmRzKCkgKyBvdGhlci0+bmFub3NlY29uZHMo
KQorICAgIH07CisKKyAgICBiYWxhbmNlKHJlc3VsdCwgbGFyZ2VzdFVuaXQpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1
cmF0aW9uOjpzdWJ0cmFjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG90
aGVyVmFsdWUpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIG90aGVy
ID0gdG9EdXJhdGlvbihnbG9iYWxPYmplY3QsIG90aGVyVmFsdWUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBhdXRvIGxhcmdlc3RVbml0ID0gc3RhdGljX2Nh
c3Q8VGVtcG9yYWxVbml0PihzdGQ6Om1pbihzdGF0aWNfY2FzdDx1aW50OF90PihsYXJnZXN0U3Vi
ZHVyYXRpb24oKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG90aGVyLT5sYXJnZXN0U3ViZHVyYXRp
b24oKSkpKTsKKyAgICBpZiAobGFyZ2VzdFVuaXQgPD0gVGVtcG9yYWxVbml0OjpXZWVrKSB7Cisg
ICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHN1YnRy
YWN0IGEgZHVyYXRpb24gb2YgeWVhcnMsIG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBhIHJlbGF0
aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBTdWJk
dXJhdGlvbnMgcmVzdWx0IHsKKyAgICAgICAgMCwgMCwgMCwgZGF5cygpIC0gb3RoZXItPmRheXMo
KSwKKyAgICAgICAgaG91cnMoKSAtIG90aGVyLT5ob3VycygpLCBtaW51dGVzKCkgLSBvdGhlci0+
bWludXRlcygpLCBzZWNvbmRzKCkgLSBvdGhlci0+c2Vjb25kcygpLAorICAgICAgICBtaWxsaXNl
Y29uZHMoKSAtIG90aGVyLT5taWxsaXNlY29uZHMoKSwgbWljcm9zZWNvbmRzKCkgLSBvdGhlci0+
bWljcm9zZWNvbmRzKCksIG5hbm9zZWNvbmRzKCkgLSBvdGhlci0+bmFub3NlY29uZHMoKQorICAg
IH07CisKKyAgICBiYWxhbmNlKHJlc3VsdCwgbGFyZ2VzdFVuaXQpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKy8vIFJvdW5kRHVyYXRpb24gKCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywg
aG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzLCBuYW5v
c2Vjb25kcywgaW5jcmVtZW50LCB1bml0LCByb3VuZGluZ01vZGUgWyAsIHJlbGF0aXZlVG8gXSAp
Citkb3VibGUgVGVtcG9yYWxEdXJhdGlvbjo6cm91bmQoVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVy
YXRpb25zJiBzdWJkdXJhdGlvbnMsIGRvdWJsZSBpbmNyZW1lbnQsIFRlbXBvcmFsVW5pdCB1bml0
LCBSb3VuZGluZ01vZGUgbW9kZSkKK3sKKyAgICBBU1NFUlQodW5pdCA+PSBUZW1wb3JhbFVuaXQ6
OkRheSk7CisgICAgZG91YmxlIHJlbWFpbmRlciA9IDA7CisKKyAgICBpZiAodW5pdCA9PSBUZW1w
b3JhbFVuaXQ6OkRheSkgeworICAgICAgICBhdXRvIG9yaWdpbmFsRGF5cyA9IHN1YmR1cmF0aW9u
cy5kYXlzKCk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXREYXlzKDApOworICAgICAgICBhdXRv
IG5hbm9zZWNvbmRzID0gdG90YWxOYW5vc2Vjb25kcyhzdWJkdXJhdGlvbnMpOworCisgICAgICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgbmFub3NlY29uZHNQZXJEYXkgPSAyNC4wICogNjAgKiA2MCAq
IDEwMDAgKiAxMDAwICogMTAwMDsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFsRGF5cyA9IG9yaWdp
bmFsRGF5cyArIG5hbm9zZWNvbmRzIC8gbmFub3NlY29uZHNQZXJEYXk7CisgICAgICAgIGF1dG8g
bmV3RGF5cyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbERheXMsIGluY3JlbWVu
dCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxEYXlzIC0gbmV3RGF5czsK
KyAgICAgICAgc3ViZHVyYXRpb25zLnNldERheXMobmV3RGF5cyk7CisgICAgfSBlbHNlIGlmICh1
bml0ID09IFRlbXBvcmFsVW5pdDo6SG91cikgeworICAgICAgICBhdXRvIGZyYWN0aW9uYWxTZWNv
bmRzID0gc3ViZHVyYXRpb25zLnNlY29uZHMoKSArIHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMo
KSAqIDFlLTMgKyBzdWJkdXJhdGlvbnMubWljcm9zZWNvbmRzKCkgKiAxZS02ICsgc3ViZHVyYXRp
b25zLm5hbm9zZWNvbmRzKCkgKiAxZS05OworICAgICAgICBhdXRvIGZyYWN0aW9uYWxIb3VycyA9
IHN1YmR1cmF0aW9ucy5ob3VycygpICsgKHN1YmR1cmF0aW9ucy5taW51dGVzKCkgKyBmcmFjdGlv
bmFsU2Vjb25kcyAvIDYwKSAvIDYwOworICAgICAgICBhdXRvIG5ld0hvdXJzID0gcm91bmROdW1i
ZXJUb0luY3JlbWVudChmcmFjdGlvbmFsSG91cnMsIGluY3JlbWVudCwgbW9kZSk7CisgICAgICAg
IHJlbWFpbmRlciA9IGZyYWN0aW9uYWxIb3VycyAtIG5ld0hvdXJzOworICAgICAgICBzdWJkdXJh
dGlvbnMuc2V0SG91cnMobmV3SG91cnMpOworICAgIH0gZWxzZSBpZiAodW5pdCA9PSBUZW1wb3Jh
bFVuaXQ6Ok1pbnV0ZSkgeworICAgICAgICBhdXRvIGZyYWN0aW9uYWxTZWNvbmRzID0gc3ViZHVy
YXRpb25zLnNlY29uZHMoKSArIHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMoKSAqIDFlLTMgKyBz
dWJkdXJhdGlvbnMubWljcm9zZWNvbmRzKCkgKiAxZS02ICsgc3ViZHVyYXRpb25zLm5hbm9zZWNv
bmRzKCkgKiAxZS05OworICAgICAgICBhdXRvIGZyYWN0aW9uYWxNaW51dGVzID0gc3ViZHVyYXRp
b25zLm1pbnV0ZXMoKSArIGZyYWN0aW9uYWxTZWNvbmRzIC8gNjA7CisgICAgICAgIGF1dG8gbmV3
TWludXRlcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbE1pbnV0ZXMsIGluY3Jl
bWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxNaW51dGVzIC0gbmV3
TWludXRlczsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pbnV0ZXMobmV3TWludXRlcyk7Cisg
ICAgfSBlbHNlIGlmICh1bml0ID09IFRlbXBvcmFsVW5pdDo6U2Vjb25kKSB7CisgICAgICAgIGF1
dG8gZnJhY3Rpb25hbFNlY29uZHMgPSBzdWJkdXJhdGlvbnMuc2Vjb25kcygpICsgc3ViZHVyYXRp
b25zLm1pbGxpc2Vjb25kcygpICogMWUtMyArIHN1YmR1cmF0aW9ucy5taWNyb3NlY29uZHMoKSAq
IDFlLTYgKyBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKSAqIDFlLTk7CisgICAgICAgIGF1dG8g
bmV3U2Vjb25kcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbFNlY29uZHMsIGlu
Y3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxTZWNvbmRzIC0g
bmV3U2Vjb25kczsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldFNlY29uZHMobmV3U2Vjb25kcyk7
CisgICAgfSBlbHNlIGlmICh1bml0ID09IFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQpIHsKKyAg
ICAgICAgYXV0byBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzID0gc3ViZHVyYXRpb25zLm1pbGxpc2Vj
b25kcygpICsgc3ViZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygpICogMWUtMyArIHN1YmR1cmF0aW9u
cy5uYW5vc2Vjb25kcygpICogMWUtNjsKKyAgICAgICAgYXV0byBuZXdNaWxsaXNlY29uZHMgPSBy
b3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0aW9uYWxNaWxsaXNlY29uZHMsIGluY3JlbWVudCwg
bW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgLSBuZXdN
aWxsaXNlY29uZHM7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWxsaXNlY29uZHMobmV3TWls
bGlzZWNvbmRzKTsKKyAgICB9IGVsc2UgaWYgKHVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaWNyb3Nl
Y29uZCkgeworICAgICAgICBhdXRvIGZyYWN0aW9uYWxNaWNyb3NlY29uZHMgPSBzdWJkdXJhdGlv
bnMubWljcm9zZWNvbmRzKCkgKyBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKSAqIDFlLTM7Cisg
ICAgICAgIGF1dG8gbmV3TWljcm9zZWNvbmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFj
dGlvbmFsTWljcm9zZWNvbmRzLCBpbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIg
PSBmcmFjdGlvbmFsTWljcm9zZWNvbmRzIC0gbmV3TWljcm9zZWNvbmRzOworICAgICAgICBzdWJk
dXJhdGlvbnMuc2V0TWljcm9zZWNvbmRzKG5ld01pY3Jvc2Vjb25kcyk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYXV0byBuZXdOYW5vc2Vjb25kcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoc3Vi
ZHVyYXRpb25zLm5hbm9zZWNvbmRzKCksIGluY3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFp
bmRlciA9IHN1YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygpIC0gbmV3TmFub3NlY29uZHM7CisgICAg
ICAgIHN1YmR1cmF0aW9ucy5zZXROYW5vc2Vjb25kcyhuZXdOYW5vc2Vjb25kcyk7CisgICAgfQor
CisgICAgZm9yIChhdXRvIGkgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih1bml0KSArIDF1OyBpIDwg
bnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBpKyspCisgICAgICAgIHN1YmR1cmF0aW9uc1tpXSA9IDA7
CisKKyAgICByZXR1cm4gcmVtYWluZGVyOworfQorCitkb3VibGUgVGVtcG9yYWxEdXJhdGlvbjo6
dG90YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zVmFsdWUp
IGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBvcHRpb25zID0g
aW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworCisgICAgU3RyaW5nIHVuaXRTdHJpbmcgPSBp
bnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+
dW5pdCwgeyB9LCBudWxscHRyLCBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCAwKTsKKworICAgIGF1dG8gdW5pdCA9IHRlbXBvcmFsVW5pdFR5cGUodW5pdFN0cmluZyk7
CisgICAgaWYgKCF1bml0KSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAidW5pdCBpcyBhbiBpbnZhbGlkIFRlbXBvcmFsIHVuaXQiX3MpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAodW5pdC52YWx1ZSgpID4gVGVtcG9yYWxVbml0OjpZ
ZWFyICYmICh5ZWFycygpIHx8IG1vbnRocygpIHx8IHdlZWtzKCkgfHwgKGRheXMoKSAmJiB1bml0
LnZhbHVlKCkgPCBUZW1wb3JhbFVuaXQ6OkRheSkpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHRvdGFsIGEgZHVyYXRpb24gb2YgeWVhcnMs
IG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBhIHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBTdWJkdXJhdGlvbnMgY29weSA9IG1fc3ViZHVy
YXRpb25zOworICAgIGJhbGFuY2UoY29weSwgdW5pdC52YWx1ZSgpKTsKKyAgICBkb3VibGUgcmVt
YWluZGVyID0gcm91bmQoY29weSwgMSwgdW5pdC52YWx1ZSgpLCBSb3VuZGluZ01vZGU6OlRydW5j
KTsKKyAgICByZXR1cm4gY29weVtzdGF0aWNfY2FzdDx1aW50OF90Pih1bml0LnZhbHVlKCkpXSAr
IHJlbWFpbmRlcjsKK30KKworU3RyaW5nIFRlbXBvcmFsRHVyYXRpb246OnRvU3RyaW5nKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKSBjb25zdAorewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGludGxHZXRPcHRp
b25zT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKCFvcHRpb25zKQorICAgICAgICByZXR1cm4g
dG9TdHJpbmcoKTsKKworICAgIFByZWNpc2lvbkRhdGEgZGF0YSA9IHNlY29uZHNTdHJpbmdQcmVj
aXNpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworICAgIEFTU0VSVChkYXRhLnVuaXQgPj0gVGVtcG9yYWxVbml0OjpTZWNvbmQp
OworCisgICAgYXV0byByb3VuZGluZ01vZGUgPSBpbnRsT3B0aW9uPFJvdW5kaW5nTW9kZT4oZ2xv
YmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5yb3VuZGluZ01vZGUsCisgICAg
ICAgIHsgeyAiY2VpbCJfcywgUm91bmRpbmdNb2RlOjpDZWlsIH0sIHsgImZsb29yIl9zLCBSb3Vu
ZGluZ01vZGU6OkZsb29yIH0sIHsgInRydW5jIl9zLCBSb3VuZGluZ01vZGU6OlRydW5jIH0sIHsg
ImhhbGZFeHBhbmQiX3MsIFJvdW5kaW5nTW9kZTo6SGFsZkV4cGFuZCB9IH0sCisgICAgICAgICJy
b3VuZGluZ01vZGUgbXVzdCBiZSBlaXRoZXIgXCJjZWlsXCIsIFwiZmxvb3JcIiwgXCJ0cnVuY1wi
LCBvciBcImhhbGZFeHBhbmRcIiJfcywgUm91bmRpbmdNb2RlOjpUcnVuYyk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIC8vIE5vIG5lZWQgdG8gbWFrZSBhIG5l
dyBvYmplY3QgaWYgd2Ugd2VyZSBnaXZlbiBleHBsaWNpdCBkZWZhdWx0cy4KKyAgICBpZiAoIWRh
dGEucHJlY2lzaW9uICYmIHJvdW5kaW5nTW9kZSA9PSBSb3VuZGluZ01vZGU6OlRydW5jKQorICAg
ICAgICByZXR1cm4gdG9TdHJpbmcoKTsKKworICAgIFN1YmR1cmF0aW9ucyBjb3B5ID0gbV9zdWJk
dXJhdGlvbnM7CisgICAgcm91bmQoY29weSwgZGF0YS5pbmNyZW1lbnQsIGRhdGEudW5pdCwgcm91
bmRpbmdNb2RlKTsKKyAgICByZXR1cm4gdG9TdHJpbmcoY29weSwgZGF0YS5wcmVjaXNpb24pOwor
fQorCisvLyBUZW1wb3JhbER1cmF0aW9uVG9TdHJpbmcgKCB5ZWFycywgbW9udGhzLCB3ZWVrcywg
ZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRz
LCBuYW5vc2Vjb25kcywgcHJlY2lzaW9uICkKK1N0cmluZyBUZW1wb3JhbER1cmF0aW9uOjp0b1N0
cmluZyhjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9ucywg
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcHJlY2lzaW9uKQoreworICAgIEFTU0VSVCghcHJlY2lz
aW9uIHx8IHByZWNpc2lvbi52YWx1ZSgpIDwgMTApOworCisgICAgYXV0byBiYWxhbmNlZE1pY3Jv
c2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5taWNyb3NlY29uZHMoKSArIHN0ZDo6dHJ1bmMoc3ViZHVy
YXRpb25zLm5hbm9zZWNvbmRzKCkgLyAxMDAwKTsKKyAgICBhdXRvIGJhbGFuY2VkTmFub3NlY29u
ZHMgPSBzdGQ6OmZtb2Qoc3ViZHVyYXRpb25zLm5hbm9zZWNvbmRzKCksIDEwMDApOworICAgIGF1
dG8gYmFsYW5jZWRNaWxsaXNlY29uZHMgPSBzdWJkdXJhdGlvbnMubWlsbGlzZWNvbmRzKCkgKyBz
dGQ6OnRydW5jKGJhbGFuY2VkTWljcm9zZWNvbmRzIC8gMTAwMCk7CisgICAgYmFsYW5jZWRNaWNy
b3NlY29uZHMgPSBzdGQ6OmZtb2QoYmFsYW5jZWRNaWNyb3NlY29uZHMsIDEwMDApOworICAgIGF1
dG8gYmFsYW5jZWRTZWNvbmRzID0gc3ViZHVyYXRpb25zLnNlY29uZHMoKSArIHN0ZDo6dHJ1bmMo
YmFsYW5jZWRNaWxsaXNlY29uZHMgLyAxMDAwKTsKKyAgICBiYWxhbmNlZE1pbGxpc2Vjb25kcyA9
IHN0ZDo6Zm1vZChiYWxhbmNlZE1pbGxpc2Vjb25kcywgMTAwMCk7CisKKyAgICAvLyB0ZW1wb3Jh
cnkgaGFjayEgcGVuZGluZyBzcGVjIGRpc2N1c3Npb24gYWJvdXQgbWF4aW11bSB2YWx1ZXMKKyAg
ICBhdXRvIGZvcm1hdEludGVnZXIgPSBbXShkb3VibGUgdmFsdWUpIC0+IGRvdWJsZSB7CisgICAg
ICAgIGF1dG8gYWJzVmFsdWUgPSBzdGQ6OmFicyh2YWx1ZSk7CisgICAgICAgIHJldHVybiBVTkxJ
S0VMWShhYnNWYWx1ZSA+IG1heFNhZmVJbnRlZ2VyKCkpID8gbWF4U2FmZUludGVnZXIoKSA6IGFi
c1ZhbHVlOworICAgIH07CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICBhdXRv
IHNpZ24gPSBUZW1wb3JhbER1cmF0aW9uOjpzaWduKHN1YmR1cmF0aW9ucyk7CisgICAgaWYgKHNp
Z24gPCAwKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScpOworCisgICAgYnVpbGRlci5hcHBl
bmQoJ1AnKTsKKyAgICBpZiAoc3ViZHVyYXRpb25zLnllYXJzKCkpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGZvcm1hdEludGVnZXIoc3ViZHVyYXRpb25zLnllYXJzKCkpLCAnWScpOworICAgIGlm
IChzdWJkdXJhdGlvbnMubW9udGhzKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdElu
dGVnZXIoc3ViZHVyYXRpb25zLm1vbnRocygpKSwgJ00nKTsKKyAgICBpZiAoc3ViZHVyYXRpb25z
LndlZWtzKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoc3ViZHVyYXRp
b25zLndlZWtzKCkpLCAnVycpOworICAgIGlmIChzdWJkdXJhdGlvbnMuZGF5cygpKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy5kYXlzKCkpLCAnRCcp
OworCisgICAgLy8gVGhlIHplcm8gdmFsdWUgaXMgZGlzcGxheWVkIGluIHNlY29uZHMuCisgICAg
YXV0byB1c2VzU2Vjb25kcyA9IGJhbGFuY2VkU2Vjb25kcyB8fCBiYWxhbmNlZE1pbGxpc2Vjb25k
cyB8fCBiYWxhbmNlZE1pY3Jvc2Vjb25kcyB8fCBiYWxhbmNlZE5hbm9zZWNvbmRzIHx8ICFzaWdu
OworICAgIGlmICghc3ViZHVyYXRpb25zLmhvdXJzKCkgJiYgIXN1YmR1cmF0aW9ucy5taW51dGVz
KCkgJiYgIXVzZXNTZWNvbmRzKQorICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwor
CisgICAgYnVpbGRlci5hcHBlbmQoJ1QnKTsKKyAgICBpZiAoc3ViZHVyYXRpb25zLmhvdXJzKCkp
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoc3ViZHVyYXRpb25zLmhvdXJz
KCkpLCAnSCcpOworICAgIGlmIChzdWJkdXJhdGlvbnMubWludXRlcygpKQorICAgICAgICBidWls
ZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy5taW51dGVzKCkpLCAnTScpOwor
ICAgIGlmICh1c2VzU2Vjb25kcykgeworICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRl
Z2VyKGJhbGFuY2VkU2Vjb25kcykpOworCisgICAgICAgIGF1dG8gZnJhY3Rpb24gPSBzdGQ6OmFi
cyhiYWxhbmNlZE1pbGxpc2Vjb25kcykgKiAxZTYgKyBzdGQ6OmFicyhiYWxhbmNlZE1pY3Jvc2Vj
b25kcykgKiAxZTMgKyBzdGQ6OmFicyhiYWxhbmNlZE5hbm9zZWNvbmRzKTsKKyAgICAgICAgaWYg
KCghcHJlY2lzaW9uICYmIGZyYWN0aW9uKSB8fCAocHJlY2lzaW9uICYmIHByZWNpc2lvbi52YWx1
ZSgpKSkgeworICAgICAgICAgICAgYXV0byBwYWRkZWQgPSBtYWtlU3RyaW5nKCcuJywgcGFkKCcw
JywgOSwgZnJhY3Rpb24pKTsKKyAgICAgICAgICAgIGlmIChwcmVjaXNpb24pCisgICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQocGFkZGVkLmxlZnQocGFkZGVkLmxlbmd0aCgpIC0gKDkgLSBw
cmVjaXNpb24udmFsdWUoKSkpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGF1dG8gbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzID0gcGFkZGVkLmxlbmd0aCgpOworICAg
ICAgICAgICAgICAgIHdoaWxlIChwYWRkZWRbbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzIC0g
MV0gPT0gJzAnKQorICAgICAgICAgICAgICAgICAgICBsZW5ndGhXaXRob3V0VHJhaWxpbmdaZXJv
ZXMtLTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChwYWRkZWQubGVmdChsZW5ndGhX
aXRob3V0VHJhaWxpbmdaZXJvZXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCdTJyk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjAxZjE4MjYzODdh
MDhmMGZiYzQzMjViYWE0NTQyOGRiMDg2Y2FkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaApAQCAtMCwwICsxLDEwMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlbXBvcmFsT2Jq
ZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUZW1wb3JhbER1cmF0aW9uIGZpbmFs
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBK
U05vbkZpbmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0udGVtcG9yYWxEdXJhdGlvblNwYWNlPG1vZGU+
KCk7CisgICAgfQorCisgICAgc3RydWN0IFN1YmR1cmF0aW9ucyB7CisjZGVmaW5lIEpTQ19ERUZJ
TkVfU1VCRFVSQVRJT05fRklFTEQobmFtZSwgY2FwaXRhbGl6ZWROYW1lKSBcCisgICAgICAgIGRv
dWJsZSBuYW1lIyNzKCkgY29uc3QgeyByZXR1cm4gZGF0YVtzdGF0aWNfY2FzdDx1aW50OF90PihU
ZW1wb3JhbFVuaXQ6OmNhcGl0YWxpemVkTmFtZSldOyB9IFwKKyAgICAgICAgdm9pZCBzZXQjI2Nh
cGl0YWxpemVkTmFtZSMjcyhkb3VibGUgdmFsdWUpIHsgZGF0YVtzdGF0aWNfY2FzdDx1aW50OF90
PihUZW1wb3JhbFVuaXQ6OmNhcGl0YWxpemVkTmFtZSldID0gdmFsdWU7IH0KKyAgICAgICAgSlND
X1RFTVBPUkFMX1VOSVRTKEpTQ19ERUZJTkVfU1VCRFVSQVRJT05fRklFTEQpOworI3VuZGVmIEpT
Q19ERUZJTkVfU1VCRFVSQVRJT05fRklFTEQKKworICAgICAgICBkb3VibGUmIG9wZXJhdG9yW10o
c2l6ZV90IGkpIHsgcmV0dXJuIGRhdGFbaV07IH0KKyAgICAgICAgY29uc3QgZG91YmxlJiBvcGVy
YXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBkYXRhW2ldOyB9CisgICAgICAgIGNvbnN0
IGRvdWJsZSogYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhLmJlZ2luKCk7IH0KKyAgICAgICAg
Y29uc3QgZG91YmxlKiBlbmQoKSBjb25zdCB7IHJldHVybiBkYXRhLmVuZCgpOyB9CisgICAgICAg
IHZvaWQgY2xlYXIoKSB7IGRhdGEuZmlsbCgwKTsgfQorCisgICAgICAgIHN0ZDo6YXJyYXk8ZG91
YmxlLCBudW1iZXJPZlRlbXBvcmFsVW5pdHM+IGRhdGE7CisgICAgfTsKKworICAgIHN0YXRpYyBU
ZW1wb3JhbER1cmF0aW9uKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBTdWJkdXJhdGlvbnMmJik7
CisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb24qIGNyZWF0ZUlmVmFsaWQoSlNHbG9iYWxPYmpl
Y3QqLCBTdWJkdXJhdGlvbnMmJiwgU3RydWN0dXJlKiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7
CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvbiogdG9E
dXJhdGlvbihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworICAgIHN0YXRpYyBUZW1wb3JhbER1
cmF0aW9uKiBmcm9tKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTVmFs
dWUgY29tcGFyZShKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOworCisjZGVmaW5l
IEpTQ19ERUZJTkVfVEVNUE9SQUxfRFVSQVRJT05fRklFTEQobmFtZSwgY2FwaXRhbGl6ZWROYW1l
KSBcCisgICAgZG91YmxlIG5hbWUjI3MoKSBjb25zdCB7IHJldHVybiBtX3N1YmR1cmF0aW9ucy5u
YW1lIyNzKCk7IH0gXAorICAgIHZvaWQgc2V0IyNjYXBpdGFsaXplZE5hbWUjI3MoZG91YmxlIHZh
bHVlKSB7IG1fc3ViZHVyYXRpb25zLnNldCMjY2FwaXRhbGl6ZWROYW1lIyNzKHZhbHVlKTsgfQor
ICAgIEpTQ19URU1QT1JBTF9VTklUUyhKU0NfREVGSU5FX1RFTVBPUkFMX0RVUkFUSU9OX0ZJRUxE
KTsKKyN1bmRlZiBKU0NfREVGSU5FX1RFTVBPUkFMX0RVUkFUSU9OX0ZJRUxECisKKyAgICBpbnQg
c2lnbigpIGNvbnN0IHsgcmV0dXJuIHNpZ24obV9zdWJkdXJhdGlvbnMpOyB9CisKKyAgICBTdWJk
dXJhdGlvbnMgd2l0aChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBkdXJhdGlvbkxpa2UpIGNv
bnN0OworICAgIFN1YmR1cmF0aW9ucyBuZWdhdGVkKCkgY29uc3Q7CisgICAgU3ViZHVyYXRpb25z
IGFicygpIGNvbnN0OworICAgIFN1YmR1cmF0aW9ucyBhZGQoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKSBjb25zdDsKKyAgICBTdWJkdXJhdGlvbnMgc3VidHJhY3QoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKSBjb25zdDsKKyAgICBkb3VibGUgdG90YWwoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IG9wdGlvbnMpIGNvbnN0OworICAgIFN0cmluZyB0b1N0cmluZyhKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgb3B0aW9ucykgY29uc3Q7CisgICAgU3RyaW5nIHRvU3RyaW5nKHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IHByZWNpc2lvbiA9IHN0ZDo6bnVsbG9wdCkgY29uc3QgeyByZXR1cm4gdG9TdHJp
bmcobV9zdWJkdXJhdGlvbnMsIHByZWNpc2lvbik7IH0KKworcHJpdmF0ZToKKyAgICBUZW1wb3Jh
bER1cmF0aW9uKFZNJiwgU3RydWN0dXJlKiwgU3ViZHVyYXRpb25zJiYpOworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U3ViZHVyYXRpb25zPiBwYXJzZShTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+Jik7CisgICAgc3RhdGljIFN1YmR1cmF0aW9ucyBmcm9t
T2JqZWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKTsKKworICAgIHN0YXRpYyBpbnQgc2ln
bihjb25zdCBTdWJkdXJhdGlvbnMmKTsKKyAgICBzdGF0aWMgdm9pZCBiYWxhbmNlKFN1YmR1cmF0
aW9ucyYsIFRlbXBvcmFsVW5pdCBsYXJnZXN0VW5pdCk7CisgICAgc3RhdGljIGRvdWJsZSByb3Vu
ZChTdWJkdXJhdGlvbnMmLCBkb3VibGUgaW5jcmVtZW50LCBUZW1wb3JhbFVuaXQsIFJvdW5kaW5n
TW9kZSk7CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBTdWJkdXJhdGlvbnMmLCBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwcmVjaXNpb24pOworCisgICAgVGVtcG9yYWxVbml0IGxh
cmdlc3RTdWJkdXJhdGlvbigpIGNvbnN0OworCisgICAgU3ViZHVyYXRpb25zIG1fc3ViZHVyYXRp
b25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jNWQwNDllNmM3ZjM1NGM0YWQ4YTJiMDM0Y2NjMWQyZTBjOWE2YjFiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJh
dGlvbkNvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9y
LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlv
bi5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShUZW1wb3Jh
bER1cmF0aW9uQ29uc3RydWN0b3IpOworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jRnJvbSk7CitzdGF0aWMgSlNDX0RFQ0xB
UkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jQ29tcGFyZSk7
CisKK30KKworI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5sdXQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBUZW1wb3JhbER1cmF0aW9uQ29uc3Ry
dWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgJnRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3RvclRhYmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3RvcikgfTsKKworLyogU291cmNlIGZvciBUZW1wb3JhbER1cmF0
aW9uQ29uc3RydWN0b3IubHV0LmgKK0BiZWdpbiB0ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JU
YWJsZQorICBmcm9tICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1bmNG
cm9tICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgY29tcGFyZSAgICAgICAgICBU
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jQ29tcGFyZSAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAyCitAZW5kCisqLworCitUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IqIFRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBlKQoreworICAg
IGF1dG8qIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxE
dXJhdGlvbkNvbnN0cnVjdG9yPih2bS5oZWFwKSkgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9y
KHZtLCBzdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgZHVy
YXRpb25Qcm90b3R5cGUpOworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJl
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKEludGVybmFsRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisK
K3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNhbGxUZW1wb3JhbER1cmF0aW9uKTsK
K3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdFRlbXBvcmFsRHVyYXRp
b24pOworCitUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OlRlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlLCBjYWxsVGVtcG9yYWxEdXJhdGlvbiwgY29uc3RydWN0VGVtcG9yYWxEdXJhdGlvbikK
K3sKK30KKwordm9pZCBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSogZHVyYXRpb25Qcm90b3R5cGUpCit7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIDAsICJEdXJhdGlvbiJfcywgUHJvcGVydHlB
ZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsKKyAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBkdXJhdGlv
blByb3RvdHlwZSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIGR1cmF0
aW9uUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+Y29uc3RydWN0b3IsIHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNvbnN0
cnVjdFRlbXBvcmFsRHVyYXRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0
KiBuZXdUYXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKTsKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIGR1cmF0aW9u
U3RydWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFRlbXBvcmFsRHVyYXRpb246OlN1YmR1
cmF0aW9ucyBzdWJkdXJhdGlvbnMgeyB9OworICAgIGF1dG8gY291bnQgPSBzdGQ6Om1pbjxzaXpl
X3Q+KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpLCBudW1iZXJPZlRlbXBvcmFsVW5pdHMpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBzdWJkdXJh
dGlvbnNbaV0gPSBjYWxsRnJhbWUtPmFyZ3VtZW50KGkpLnRvSW50ZWdlck9ySW5maW5pdHkoZ2xv
YmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoc3ViZHVyYXRpb25zW2ldKSkKKyAgICAgICAgICAg
IHJldHVybiB0aHJvd1ZNUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwu
RHVyYXRpb24gcHJvcGVydGllcyBtdXN0IGJlIGZpbml0ZSJfcyk7CisgICAgfQorCisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2Jh
bE9iamVjdCwgV1RGTW92ZShzdWJkdXJhdGlvbnMpLCBzdHJ1Y3R1cmUpKTsKK30KKworSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGNhbGxUZW1wb3JhbER1cmF0aW9uLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNG
dW5jdGlvblR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRHVyYXRpb24iKSk7Cit9CisK
K0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5j
RnJvbSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmZyb20o
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSk7Cit9CisKK0pTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jQ29tcGFyZSwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNvbXBhcmUoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43NDI0NWEzMTA2OTVhY2QzNWI1ZDZhYTU2ZTkwMDRmN2UzYjcwMzgyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0
cnVjdG9yLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU7CisKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb25D
b25zdHJ1Y3RvciBmaW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAg
ICB1c2luZyBCYXNlID0gSW50ZXJuYWxGdW5jdGlvbjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOworCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvciog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSopOworICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgVGVtcG9yYWxE
dXJhdGlvbkNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqKTsKK307CitTVEFUSUNfQVNTRVJU
X0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IsIEludGVy
bmFsRnVuY3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjBhNzhhMDFjMTgyMTNlZDUwOTVjMDhmZmVmMTY1ZWZiMWU2OTc5OQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGUuY3BwCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgi
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04o
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNXaXRoKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jTmVnYXRlZCk7CitzdGF0
aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVu
Y0Ficyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlRnVuY0FkZCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1N1YnRyYWN0KTsKK3N0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG90YWwpOworc3RhdGlj
IEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNU
b1N0cmluZyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlRnVuY1RvSlNPTik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvTG9jYWxlU3RyaW5nKTsKK3N0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVmFs
dWVPZik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlR2V0dGVyWWVhcnMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIo
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1vbnRocyk7CitzdGF0aWMgSlNDX0RFQ0xB
UkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyV2Vla3MpOwor
c3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUdldHRlckRheXMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUdldHRlckhvdXJzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaW51dGVzKTsKK3N0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJT
ZWNvbmRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGVHZXR0ZXJNaWxsaXNlY29uZHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RP
TV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pY3Jvc2Vjb25kcyk7Citz
dGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
R2V0dGVyTmFub3NlY29uZHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNpZ24pOworc3RhdGljIEpTQ19ERUNMQVJFX0NV
U1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckJsYW5rKTsKKworfQor
CisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5sdXQuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpzX2lu
Zm8gPSB7ICJUZW1wb3JhbC5EdXJhdGlvbiIsICZCYXNlOjpzX2luZm8sICZkdXJhdGlvblByb3Rv
dHlwZVRhYmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGUpIH07CisKKy8qIFNvdXJjZSBmb3IgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5s
dXQuaAorQGJlZ2luIGR1cmF0aW9uUHJvdG90eXBlVGFibGUKKyAgd2l0aCAgICAgICAgICAgICBU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1dpdGggICAgICAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAxCisgIG5lZ2F0ZWQgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1
bmNOZWdhdGVkICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICBhYnMgICAgICAgICAg
ICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWJzICAgICAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDAKKyAgYWRkICAgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlRnVuY0FkZCAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgIHN1YnRyYWN0
ICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNTdWJ0cmFjdCAgICAgICAgICAg
RG9udEVudW18RnVuY3Rpb24gMQorICB0b3RhbCAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVGdW5jVG90YWwgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgdG9T
dHJpbmcgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nICAgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIHRvSlNPTiAgICAgICAgICAgVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUZ1bmNUb0pTT04gICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMAor
ICB0b0xvY2FsZVN0cmluZyAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9Mb2NhbGVT
dHJpbmcgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgdmFsdWVPZiAgICAgICAgICBUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlRnVuY1ZhbHVlT2YgICAgICAgICAgICBEb250RW51bXxGdW5jdGlv
biAwCisgIHllYXJzICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclll
YXJzICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbW9udGhz
ICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTW9udGhzICAgICAgICAg
ICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICB3ZWVrcyAgICAgICAgICAgIFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJXZWVrcyAgICAgICAgICAgIERvbnRFbnVtfFJl
YWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIGRheXMgICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZUdldHRlckRheXMgICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9t
QWNjZXNzb3IKKyAgaG91cnMgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0
dGVySG91cnMgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBt
aW51dGVzICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaW51dGVzICAg
ICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIHNlY29uZHMgICAgICAg
ICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNlY29uZHMgICAgICAgICAgRG9udEVu
dW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbWlsbGlzZWNvbmRzICAgICBUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlR2V0dGVyTWlsbGlzZWNvbmRzICAgICBEb250RW51bXxSZWFkT25seXxD
dXN0b21BY2Nlc3NvcgorICBtaWNyb3NlY29uZHMgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVHZXR0ZXJNaWNyb3NlY29uZHMgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29y
CisgIG5hbm9zZWNvbmRzICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck5hbm9z
ZWNvbmRzICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgc2lnbiAgICAg
ICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2lnbiAgICAgICAgICAgICBE
b250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBibGFuayAgICAgICAgICAgIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJCbGFuayAgICAgICAgICAgIERvbnRFbnVtfFJlYWRP
bmx5fEN1c3RvbUFjY2Vzc29yCitAZW5kCisqLworCitUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
KiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK3sKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZTo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit2b2lkIFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICBKU0Nf
VE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jV2l0aCwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVy
YXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRl
bXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS53aXRoIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90
IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKyAgICAKKyAgICBKU1Zh
bHVlIGR1cmF0aW9uTGlrZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgaWYgKCFkdXJh
dGlvbkxpa2UuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIkZpcnN0IGFyZ3VtZW50IHRvIFRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS53aXRoIG11c3QgYmUgYW4gb2JqZWN0Il9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFs
aWQoZ2xvYmFsT2JqZWN0LCBkdXJhdGlvbi0+d2l0aChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGR1
cmF0aW9uTGlrZSkpKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUZ1bmNOZWdhdGVkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBh
dXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24u
cHJvdG90eXBlLm5lZ2F0ZWQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGlu
aXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1
Y3R1cmUoKSwgZHVyYXRpb24tPm5lZ2F0ZWQoKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNBYnMsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9u
Kj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGUuYWJzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9i
amVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmR1cmF0
aW9uU3RydWN0dXJlKCksIGR1cmF0aW9uLT5hYnMoKSkpOworfQorCitKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNBZGQsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0
aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1w
b3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYWRkIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFu
IG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlm
VmFsaWQoZ2xvYmFsT2JqZWN0LCBkdXJhdGlvbi0+YWRkKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT5hcmd1bWVudCgwKSkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlRnVuY1N1YnRyYWN0LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRp
b24ucHJvdG90eXBlLnN1YnRyYWN0IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVj
dCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQo
Z2xvYmFsT2JqZWN0LCBkdXJhdGlvbi0+c3VidHJhY3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVGdW5jVG90YWwsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1
dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5w
cm90b3R5cGUudG90YWwgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRp
YWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPnRvdGFsKGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlv
bio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9y
YWwuRHVyYXRpb24ucHJvdG90eXBlLnRvU3RyaW5nIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90
IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBkdXJhdGlvbi0+
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpKTsKK30KKwor
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9K
U09OLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1p
Y0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAg
ICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvSlNPTiBjYWxsZWQg
b24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJf
cyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBkdXJhdGlvbi0+
dG9TdHJpbmcoKSkpOworfQorCisvLyBUaGlzIHdpbGwgYmUgcGFydCBvZiB0aGUgRUNNQS00MDIg
SW50bC5EdXJhdGlvbkZvcm1hdCBwcm9wb3NhbDsgdW50aWwgdGhlbiwgd2UganVzdCBmb2xsb3cg
RUNNQS0yNjIgaW4gbWltaWNraW5nIHRvSlNPTi4KK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvTG9jYWxlU3RyaW5nLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJh
dGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVt
cG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nIGNhbGxlZCBvbiB2YWx1ZSB0
aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1cmF0aW9uLT50b1N0cmluZygp
KSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlRnVuY1ZhbHVlT2YsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
KSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS52YWx1ZU9m
IG11c3Qgbm90IGJlIGNhbGxlZCJfcyk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyWWVhcnMsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxU
ZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBp
ZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnllYXJzIGNhbGxlZCBvbiB2
YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsK
KworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPnllYXJzKCkp
KTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVHZXR0ZXJNb250aHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwu
RHVyYXRpb24ucHJvdG90eXBlLm1vbnRocyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBv
YmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5tb250aHMoKSkpOworfQorCitKU0NfREVGSU5F
X0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlcldlZWtzLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS53
ZWVrcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMg
YSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1
cmF0aW9uLT53ZWVrcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlR2V0dGVyRGF5cywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFs
RHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVy
YXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuZGF5cyBjYWxsZWQgb24gdmFsdWUgdGhh
dCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5kYXlzKCkpKTsKK30KKwor
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJI
b3VycywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byog
ZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5w
cm90b3R5cGUuaG91cnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRp
YWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihkdXJhdGlvbi0+aG91cnMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRU
RVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWlj
Q2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1pbnV0ZXMgY2Fs
bGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRp
b24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+
bWludXRlcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlR2V0dGVyU2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVy
YXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRp
b24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc2Vjb25kcyBjYWxsZWQgb24gdmFsdWUgdGhh
dCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5zZWNvbmRzKCkpKTsKK30K
KworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0
ZXJNaWxsaXNlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwu
RHVyYXRpb24ucHJvdG90eXBlLm1pbGxpc2Vjb25kcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5v
dCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taWxsaXNlY29uZHMoKSkpOworfQor
CitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRl
ck1pY3Jvc2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwg
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5E
dXJhdGlvbi5wcm90b3R5cGUubWljcm9zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90
IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPm1pY3Jvc2Vjb25kcygpKSk7Cit9CisK
K0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVy
TmFub3NlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVy
YXRpb24ucHJvdG90eXBlLm5hbm9zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFu
IG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPm5hbm9zZWNvbmRzKCkpKTsKK30KKworSlND
X0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJTaWdu
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJh
dGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3Rv
dHlwZS5zaWduIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXpl
ZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoZHVyYXRpb24tPnNpZ24oKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckJsYW5rLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVt
cG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5ibGFuayBjYWxsZWQgb24gdmFs
dWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighZHVyYXRpb24tPnNpZ24oKSkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
ODc3NWVlYjA3YmU2MDJjZmFlZjAzODc5NGU5N2M2MjkzNTRkMzZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5P
YmplY3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVf
SU5GTzsKKworcHJpdmF0ZToKKyAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKFZNJiwgU3Ry
dWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9i
amVjdC5jcHAKaW5kZXggYWYxNDM2NzVmMWU0YzYyODdlYTJiZTE4ZjQzM2VlYmUzNzJhNzE3ZC4u
MmVmNzlkMTBiY2Y3OTVhYWM2ZWI0OTliY2RiYzE3MWVkM2RiYzliNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMCwxMCArMjEsMTQgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZW1wb3JhbE9iamVjdC5oIgogCisjaW5jbHVkZSAi
RnVuY3Rpb25Qcm90b3R5cGUuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
ICNpbmNsdWRlICJKU09iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUu
aCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxOb3cuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC0zNyw2ICs0MiwxMyBAQCBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVO
b3dPYmplY3QoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogICAgIHJldHVybiBUZW1wb3JhbE5v
dzo6Y3JlYXRlKHZtLCBUZW1wb3JhbE5vdzo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmpl
Y3QpKTsKIH0KIAorc3RhdGljIEpTVmFsdWUgY3JlYXRlRHVyYXRpb25Db25zdHJ1Y3RvcihWTSYg
dm0sIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgVGVtcG9yYWxPYmplY3QqIHRlbXBvcmFsT2Jq
ZWN0ID0ganNDYXN0PFRlbXBvcmFsT2JqZWN0Kj4ob2JqZWN0KTsKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gdGVtcG9yYWxPYmplY3QtPmdsb2JhbE9iamVjdCh2bSk7CisgICAg
cmV0dXJuIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPmZ1bmN0aW9uUHJvdG90eXBlKCkpLCBqc0Nhc3Q8VGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZSo+KGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90
eXBlT2JqZWN0KCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNpbmNsdWRlICJUZW1w
b3JhbE9iamVjdC5sdXQuaCIKQEAgLTQ2LDYgKzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAvKiBT
b3VyY2UgZm9yIFRlbXBvcmFsT2JqZWN0Lmx1dC5oCiBAYmVnaW4gdGVtcG9yYWxPYmplY3RUYWJs
ZQogICBOb3cgICAgICAgICAgICBjcmVhdGVOb3dPYmplY3QgICAgICAgICAgICAgICAgIERvbnRF
bnVtfFByb3BlcnR5Q2FsbGJhY2sKKyAgRHVyYXRpb24gICAgICAgY3JlYXRlRHVyYXRpb25Db25z
dHJ1Y3RvciAgICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiBAZW5kCiAqLwogCkBAIC03
NSw0ICs4OCwxNTkgQEAgdm9pZCBUZW1wb3JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQogICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwogfQogCitzdGF0
aWMgU3RyaW5nVmlldyBzaW5ndWxhclVuaXQoU3RyaW5nVmlldyB1bml0KQoreworICAgIC8vIFBs
dXJhbHMgYXJlIGFsbG93ZWQsIGJ1dCB0aGFua2Z1bGx5IHRoZXkncmUgYWxsIGp1c3QgYSBzaW1w
bGUgLXMuCisgICAgcmV0dXJuIHVuaXQuZW5kc1dpdGgoInMiKSA/IHVuaXQubGVmdCh1bml0Lmxl
bmd0aCgpIC0gMSkgOiB1bml0OworfQorCitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5pdD4gdGVt
cG9yYWxVbml0VHlwZShTdHJpbmdWaWV3IHVuaXQpCit7CisgICAgU3RyaW5nVmlldyBzaW5ndWxh
ciA9IHNpbmd1bGFyVW5pdCh1bml0KTsKKworICAgIGlmIChzaW5ndWxhciA9PSAieWVhciIpCisg
ICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OlllYXI7CisgICAgaWYgKHNpbmd1bGFyID09ICJt
b250aCIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok1vbnRoOworICAgIGlmIChzaW5n
dWxhciA9PSAid2VlayIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OldlZWs7CisgICAg
aWYgKHNpbmd1bGFyID09ICJkYXkiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpEYXk7
CisgICAgaWYgKHNpbmd1bGFyID09ICJob3VyIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5p
dDo6SG91cjsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm1pbnV0ZSIpCisgICAgICAgIHJldHVybiBU
ZW1wb3JhbFVuaXQ6Ok1pbnV0ZTsKKyAgICBpZiAoc2luZ3VsYXIgPT0gInNlY29uZCIpCisgICAg
ICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OlNlY29uZDsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm1p
bGxpc2Vjb25kIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQ7Cisg
ICAgaWYgKHNpbmd1bGFyID09ICJtaWNyb3NlY29uZCIpCisgICAgICAgIHJldHVybiBUZW1wb3Jh
bFVuaXQ6Ok1pY3Jvc2Vjb25kOworICAgIGlmIChzaW5ndWxhciA9PSAibmFub3NlY29uZCIpCisg
ICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQ7CisgICAgCisgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKK30KKworLy8gVG9TbWFsbGVzdFRlbXBvcmFsVW5pdCAoIG5vcm1hbGl6
ZWRPcHRpb25zLCBkaXNhbGxvd2VkVW5pdHMsIGZhbGxiYWNrICkKK3N0ZDo6b3B0aW9uYWw8VGVt
cG9yYWxVbml0PiB0ZW1wb3JhbFNtYWxsZXN0VW5pdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0PFRlbXBvcmFsVW5p
dD4gZGlzYWxsb3dlZFVuaXRzKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcg
c21hbGxlc3RVbml0ID0gaW50bFN0cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZt
LnByb3BlcnR5TmFtZXMtPnNtYWxsZXN0VW5pdCwgeyB9LCBudWxscHRyLCBudWxscHRyKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgaWYgKCFz
bWFsbGVzdFVuaXQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvIHVu
aXRUeXBlID0gdGVtcG9yYWxVbml0VHlwZShzbWFsbGVzdFVuaXQpOworICAgIGlmICghdW5pdFR5
cGUpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJzbWFs
bGVzdFVuaXQgaXMgYW4gaW52YWxpZCBUZW1wb3JhbCB1bml0Il9zKTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoZGlzYWxsb3dlZFVuaXRzLnNpemUoKSAm
JiBzdGQ6OmZpbmQoZGlzYWxsb3dlZFVuaXRzLmJlZ2luKCksIGRpc2FsbG93ZWRVbml0cy5lbmQo
KSwgdW5pdFR5cGUudmFsdWUoKSkgIT0gZGlzYWxsb3dlZFVuaXRzLmVuZCgpKSB7CisgICAgICAg
IHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAic21hbGxlc3RVbml0IGlzIGEg
ZGlzYWxsb3dlZCB1bml0Il9zKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICByZXR1cm4gdW5pdFR5cGU7Cit9CisKKy8vIEdldFN0cmluZ09yTnVtYmVyT3B0aW9u
KG5vcm1hbGl6ZWRPcHRpb25zLCAiZnJhY3Rpb25hbFNlY29uZERpZ2l0cyIsIMKrICJhdXRvIiDC
uywgMCwgOSwgImF1dG8iKQorc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdGVtcG9yYWxGcmFjdGlv
bmFsU2Vjb25kRGlnaXRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBv
cHRpb25zKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIW9wdGlvbnMpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gb3B0aW9ucy0+
Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+ZnJhY3Rpb25hbFNlY29uZERpZ2l0
cyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIAorICAgIGlmICh2YWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgIGRvdWJsZSBkb3VibGVW
YWx1ZSA9IHZhbHVlLmFzTnVtYmVyKCk7CisgICAgICAgIGlmIChkb3VibGVWYWx1ZSA8IDAgfHwg
ZG91YmxlVmFsdWUgPiA5KSB7CisgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgImZyYWN0aW9uYWxTZWNvbmREaWdpdHMgaXMgb3V0IG9mIHJhbmdlIl9zKTsK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRvdWJsZVZhbHVlKTsKKyAgICB9CisKKyAgICBT
dHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAoc3Ry
aW5nVmFsdWUgIT0gImF1dG8iKQorICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgImZyYWN0aW9uYWxTZWNvbmREaWdpdHMgaXMgb3V0IG9mIHJhbmdlIl9zKTsKKwor
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKy8vIFRvU2Vjb25kc1N0cmluZ1ByZWNpc2lv
biAoIG5vcm1hbGl6ZWRPcHRpb25zICkKK1ByZWNpc2lvbkRhdGEgc2Vjb25kc1N0cmluZ1ByZWNp
c2lvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3B0aW9ucykKK3sK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byBzbWFsbGVzdFVuaXQgPSB0ZW1wb3JhbFNt
YWxsZXN0VW5pdChnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHsgVGVtcG9yYWxVbml0OjpZZWFyLCBU
ZW1wb3JhbFVuaXQ6Ok1vbnRoLCBUZW1wb3JhbFVuaXQ6OldlZWssIFRlbXBvcmFsVW5pdDo6RGF5
LCBUZW1wb3JhbFVuaXQ6OkhvdXIsIFRlbXBvcmFsVW5pdDo6TWludXRlIH0pOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBpZiAoc21hbGxlc3RVbml0KSB7Cisg
ICAgICAgIHN3aXRjaCAoc21hbGxlc3RVbml0LnZhbHVlKCkpIHsKKyAgICAgICAgY2FzZSBUZW1w
b3JhbFVuaXQ6OlNlY29uZDoKKyAgICAgICAgICAgIHJldHVybiB7IDAsIFRlbXBvcmFsVW5pdDo6
U2Vjb25kLCAxIH07CisgICAgICAgIGNhc2UgVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZDoKKyAg
ICAgICAgICAgIHJldHVybiB7IDMsIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQsIDEgfTsKKyAg
ICAgICAgY2FzZSBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kOgorICAgICAgICAgICAgcmV0dXJu
IHsgNiwgVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCwgMSB9OworICAgICAgICBjYXNlIFRlbXBv
cmFsVW5pdDo6TmFub3NlY29uZDoKKyAgICAgICAgICAgIHJldHVybiB7IDksIFRlbXBvcmFsVW5p
dDo6TmFub3NlY29uZCwgMSB9OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBhdXRvIHByZWNpc2lvbiA9IHRlbXBvcmFsRnJhY3Rpb25hbFNlY29u
ZERpZ2l0cyhnbG9iYWxPYmplY3QsIG9wdGlvbnMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICBpZiAoIXByZWNpc2lvbikKKyAgICAgICAgcmV0dXJuIHsgc3Rk
OjpudWxsb3B0LCBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQsIDEgfTsKKworICAgIHVuc2lnbmVk
IGRpZ2l0cyA9IHByZWNpc2lvbi52YWx1ZSgpOworICAgIGlmICghZGlnaXRzKQorICAgICAgICBy
ZXR1cm4geyAwLCBUZW1wb3JhbFVuaXQ6OlNlY29uZCwgMSB9OworCisgICAgaWYgKGRpZ2l0cyA8
PSAzKQorICAgICAgICByZXR1cm4geyBkaWdpdHMsIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQs
IHN0ZDo6cG93KDEwLCAzIC0gZGlnaXRzKSB9OworCisgICAgaWYgKGRpZ2l0cyA8PSA2KQorICAg
ICAgICByZXR1cm4geyBkaWdpdHMsIFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQsIHN0ZDo6cG93
KDEwLCA2IC0gZGlnaXRzKSB9OworCisgICAgQVNTRVJUKGRpZ2l0cyA8PSA5KTsKKyAgICByZXR1
cm4geyBkaWdpdHMsIFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZCwgc3RkOjpwb3coMTAsIDkgLSBk
aWdpdHMpIH07Cit9CisKKy8vIFJvdW5kTnVtYmVyVG9JbmNyZW1lbnQgKCB4LCBpbmNyZW1lbnQs
IHJvdW5kaW5nTW9kZSApCitkb3VibGUgcm91bmROdW1iZXJUb0luY3JlbWVudChkb3VibGUgeCwg
ZG91YmxlIGluY3JlbWVudCwgUm91bmRpbmdNb2RlIG1vZGUpCit7CisgICAgYXV0byBxdW90aWVu
dCA9IHggLyBpbmNyZW1lbnQ7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBSb3VuZGlu
Z01vZGU6OkNlaWw6CisgICAgICAgIHJldHVybiAtc3RkOjpmbG9vcigtcXVvdGllbnQpICogaW5j
cmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpGbG9vcjoKKyAgICAgICAgcmV0dXJuIHN0
ZDo6Zmxvb3IocXVvdGllbnQpICogaW5jcmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpU
cnVuYzoKKyAgICAgICAgcmV0dXJuIHN0ZDo6dHJ1bmMocXVvdGllbnQpICogaW5jcmVtZW50Owor
ICAgIGNhc2UgUm91bmRpbmdNb2RlOjpIYWxmRXhwYW5kOgorICAgICAgICByZXR1cm4gc3RkOjpy
b3VuZChxdW90aWVudCkgKiBpbmNyZW1lbnQ7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2Jq
ZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5oCmlu
ZGV4IDFlZTk5OTRjMmI4YzA1ZTQ2ZDE2MTA2YTY2ZjAyYjk3NThiOGIyODMuLmNiYzdkM2U1MDQ5
OTBhYmZiMmNmMjYwZDViN2NjN2JkYTdkZjQ5OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDIxIElnYWxpYSwgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsNiArMjQsMjcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
KyNkZWZpbmUgSlNDX1RFTVBPUkFMX1VOSVRTKG1hY3JvKSBcCisgICAgbWFjcm8oeWVhciwgWWVh
cikgXAorICAgIG1hY3JvKG1vbnRoLCBNb250aCkgXAorICAgIG1hY3JvKHdlZWssIFdlZWspIFwK
KyAgICBtYWNybyhkYXksIERheSkgXAorICAgIG1hY3JvKGhvdXIsIEhvdXIpIFwKKyAgICBtYWNy
byhtaW51dGUsIE1pbnV0ZSkgXAorICAgIG1hY3JvKHNlY29uZCwgU2Vjb25kKSBcCisgICAgbWFj
cm8obWlsbGlzZWNvbmQsIE1pbGxpc2Vjb25kKSBcCisgICAgbWFjcm8obWljcm9zZWNvbmQsIE1p
Y3Jvc2Vjb25kKSBcCisgICAgbWFjcm8obmFub3NlY29uZCwgTmFub3NlY29uZCkgXAorCitlbnVt
IGNsYXNzIFRlbXBvcmFsVW5pdCA6IHVpbnQ4X3QgeworI2RlZmluZSBKU0NfREVGSU5FX1RFTVBP
UkFMX1VOSVRfRU5VTShuYW1lLCBjYXBpdGFsaXplZE5hbWUpIGNhcGl0YWxpemVkTmFtZSwKKyAg
ICBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX0RFRklORV9URU1QT1JBTF9VTklUX0VOVU0pCisjdW5k
ZWYgSlNDX0RFRklORV9URU1QT1JBTF9VTklUX0VOVU0KK307CisjZGVmaW5lIEpTQ19DT1VOVF9U
RU1QT1JBTF9VTklUUyhuYW1lLCBjYXBpdGFsaXplZE5hbWUpICsgMQorc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBudW1iZXJPZlRlbXBvcmFsVW5pdHMgPSAwIEpTQ19URU1QT1JBTF9VTklUUyhK
U0NfQ09VTlRfVEVNUE9SQUxfVU5JVFMpOworI3VuZGVmIEpTQ19DT1VOVF9URU1QT1JBTF9VTklU
UworCiBjbGFzcyBUZW1wb3JhbE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKQEAgLTQ1LDQg
KzY3LDIzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogfTsKIAor
ZW51bSBjbGFzcyBSb3VuZGluZ01vZGUgOiB1aW50OF90IHsKKyAgICBDZWlsLAorICAgIEZsb29y
LAorICAgIFRydW5jLAorICAgIEhhbGZFeHBhbmQKK307CisKK3N0cnVjdCBQcmVjaXNpb25EYXRh
IHsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwcmVjaXNpb247CisgICAgVGVtcG9yYWxV
bml0IHVuaXQ7CisgICAgZG91YmxlIGluY3JlbWVudDsKK307CisKK3N0ZDo6b3B0aW9uYWw8VGVt
cG9yYWxVbml0PiB0ZW1wb3JhbFVuaXRUeXBlKFN0cmluZ1ZpZXcpOworc3RkOjpvcHRpb25hbDxU
ZW1wb3JhbFVuaXQ+IHRlbXBvcmFsU21hbGxlc3RVbml0KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmpl
Y3QqIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUZW1wb3JhbFVuaXQ+IGRpc2FsbG93
ZWRVbml0cyk7CitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0ZW1wb3JhbEZyYWN0aW9uYWxTZWNv
bmREaWdpdHMoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucyk7CitQcmVjaXNpb25E
YXRhIHNlY29uZHNTdHJpbmdQcmVjaXNpb24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0
aW9ucyk7Citkb3VibGUgcm91bmROdW1iZXJUb0luY3JlbWVudChkb3VibGUsIGRvdWJsZSBpbmNy
ZW1lbnQsIFJvdW5kaW5nTW9kZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDFkZWE2YTEzY2I0YzQyOWI5YjA3MTk4YmFiNmM0NGYz
MTQ2OWQwNjguLjgzMWQzZjJlZDNhMzI3Y2ZmYjM2OGVmMTYzYjFhOGFiNmY3YzgxNzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTE2Miw2ICsxNjIsNyBAQAogI2luY2x1
ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlN5bWJvbE9iamVjdC5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKICNp
bmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIK
ICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKQEAgLTE2MTcsNiArMTYxOCw3IEBAIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsUmVsYXRpdmVUaW1lRm9ybWF0U3Bh
Y2UsIGludGxSZWxhdGl2CiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
aW50bFNlZ21lbnRJdGVyYXRvclNwYWNlLCBpbnRsU2VnbWVudEl0ZXJhdG9ySGVhcENlbGxUeXBl
LmdldCgpLCBJbnRsU2VnbWVudEl0ZXJhdG9yKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKGludGxTZWdtZW50ZXJTcGFjZSwgaW50bFNlZ21lbnRlckhlYXBDZWxsVHlw
ZS5nZXQoKSwgSW50bFNlZ21lbnRlcikKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhpbnRsU2VnbWVudHNTcGFjZSwgaW50bFNlZ21lbnRzSGVhcENlbGxUeXBlLmdldCgp
LCBJbnRsU2VnbWVudHMpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
dGVtcG9yYWxEdXJhdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBUZW1wb3JhbER1
cmF0aW9uKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhqc1RvV2FzbUlDQ2FsbGVlU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUu
Z2V0KCksIEpTVG9XYXNtSUNDYWxsZWUpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1cod2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSwgd2ViQXNzZW1ibHlDb2RlQmxvY2tI
ZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spIC8vIEhhc2g6MHg5YWQ5
OTVjZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggYmNlZDk4NDNmY2U4MjYyMGU4
OGI5NzUwMTgzYWViNjE1NTYyNjA2OS4uYWJkYTcyZTk0M2E5MjVmNGVmNzYwM2UyNTBlM2QwNmNh
ZTA0MTcyMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xODUsNiArMTg1LDcg
QEAgY2xhc3MgU3RydWN0dXJlOwogY2xhc3MgUmVnRXhwOwogI2VuZGlmCiBjbGFzcyBTeW1ib2w7
CitjbGFzcyBUZW1wb3JhbER1cmF0aW9uOwogY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXI7CiBj
bGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKQEAg
LTYxNSw2ICs2MTYsNyBAQCBwdWJsaWM6CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihpbnRsU2VnbWVudEl0ZXJhdG9yU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihpbnRsU2VnbWVudGVyU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUihpbnRsU2VnbWVudHNTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBvcmFsRHVyYXRpb25TcGFjZSkKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1Rv
V2FzbUlDQ2FsbGVlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Uih3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA4YjFhNWE5ZGUyMzc2ZTc1NzIwNjhhMTdjODA3
YzJjZjk3OGRhMWUwLi4xODU1MzI5NjdlZDE4OWRlZDU0ZDkyZmNlZTNiZTliZjA0ZjY2NjI1IDEw
MDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyIEBACisyMDIxLTA4LTI2ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bz
b255LmNvbT4KKworICAgICAgICBbSlNDXSBJbXBsZW1lbnQgVGVtcG9yYWwuRHVyYXRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODUzMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL3Rl
bXBvcmFsLWR1cmF0aW9uLmpzOiBBZGRlZC4KKwogMjAyMS0wOC0xNyAgTWlraGFpbCBSLiBHYWRl
bGhhICA8bWlraGFpbEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFNraXAgZmFp
bGluZyBNSVBTIHRlc3RzCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJh
dGlvbi5qcyBiL0pTVGVzdHMvc3RyZXNzL3RlbXBvcmFsLWR1cmF0aW9uLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjZiZGJjNDg0OWVkN2ExN2YwNjBkMTZmNjBlZjAwMmRhODg5NDA3YTgKLS0tIC9kZXYvbnVsbAor
KysgYi9KU1Rlc3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qcwpAQCAtMCwwICsxLDI1OCBA
QAorLy9AIHJlcXVpcmVPcHRpb25zKCItLXVzZVRlbXBvcmFsPTEiKQorCitmdW5jdGlvbiBzaG91
bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2Fj
dHVhbH1gKTsKK30KKworZnVuY3Rpb24gc2hvdWxkTm90VGhyb3coZnVuYykgeworICAgIGZ1bmMo
KTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JUeXBlKSB7CisgICAgbGV0
IGVycm9yOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7Cisg
ICAgICAgIGVycm9yID0gZTsKKyAgICB9CisKKyAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIGVy
cm9yVHlwZSkpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtlcnJvclR5cGUu
bmFtZX0hYCk7Cit9CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uIGluc3RhbmNlb2YgRnVu
Y3Rpb24sIHRydWUpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ubGVuZ3RoLCAwKTsKK3No
b3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwuRHVyYXRpb24s
ICdwcm90b3R5cGUnKS53cml0YWJsZSwgZmFsc2UpOworc2hvdWxkQmUoT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihUZW1wb3JhbC5EdXJhdGlvbiwgJ3Byb3RvdHlwZScpLmVudW1lcmFi
bGUsIGZhbHNlKTsKK3Nob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVGVt
cG9yYWwuRHVyYXRpb24sICdwcm90b3R5cGUnKS5jb25maWd1cmFibGUsIGZhbHNlKTsKK3Nob3Vs
ZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uKCksIFR5cGVFcnJvcik7CisKK3Nob3VsZEJl
KG5ldyBUZW1wb3JhbC5EdXJhdGlvbigpIGluc3RhbmNlb2YgVGVtcG9yYWwuRHVyYXRpb24sIHRy
dWUpOworeworICAgIGNsYXNzIERlcml2ZWREdXJhdGlvbiBleHRlbmRzIFRlbXBvcmFsLkR1cmF0
aW9uIHt9CisKKyAgICBjb25zdCBkZCA9IG5ldyBEZXJpdmVkRHVyYXRpb24oKTsKKyAgICBzaG91
bGRCZShkZCBpbnN0YW5jZW9mIERlcml2ZWREdXJhdGlvbiwgdHJ1ZSk7CisgICAgc2hvdWxkQmUo
ZGQgaW5zdGFuY2VvZiBUZW1wb3JhbC5EdXJhdGlvbiwgdHJ1ZSk7CisgICAgc2hvdWxkQmUoZGQu
bmVnYXRlZCwgVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQpOworICAgIHNob3Vs
ZEJlKE9iamVjdC5nZXRQcm90b3R5cGVPZihkZCksIERlcml2ZWREdXJhdGlvbi5wcm90b3R5cGUp
OworICAgIHNob3VsZEJlKE9iamVjdC5nZXRQcm90b3R5cGVPZihEZXJpdmVkRHVyYXRpb24ucHJv
dG90eXBlKSwgVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlKTsKK30KKworc2hvdWxkVGhyb3co
KCkgPT4gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKDEsIC0xKSwgUmFuZ2VFcnJvcik7CitzaG91bGRU
aHJvdygoKSA9PiBuZXcgVGVtcG9yYWwuRHVyYXRpb24oSW5maW5pdHkpLCBSYW5nZUVycm9yKTsK
KworY29uc3QgZmllbGRzID0gWyd5ZWFycycsICdtb250aHMnLCAnd2Vla3MnLCAnZGF5cycsICdo
b3VycycsICdtaW51dGVzJywgJ3NlY29uZHMnLCAnbWlsbGlzZWNvbmRzJywgJ21pY3Jvc2Vjb25k
cycsICduYW5vc2Vjb25kcyddOworY29uc3QgemVybyA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigp
OworY29uc3QgcG9zID0gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKDEsMiwzLDQsNSw2LDcsOCw5LDEw
KTsKK2NvbnN0IG5lZyA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigtMSwtMiwtMywtNCwtNSwtNiwt
NywtOCwtOSwtMTApOworCitmaWVsZHMuZm9yRWFjaCgoZmllbGQsIGkpID0+IHsKKyAgICBzaG91
bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbZmllbGRdLCBUeXBlRXJy
b3IpOworICAgIHNob3VsZEJlKHplcm9bZmllbGRdLCAwKTsKKyAgICBzaG91bGRCZShwb3NbZmll
bGRdLCBpICsgMSk7CisgICAgc2hvdWxkQmUobmVnW2ZpZWxkXSwgLWkgLSAxKTsKK30pOworCitz
aG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc2lnbiwgVHlwZUVy
cm9yKTsKK3Nob3VsZEJlKHplcm8uc2lnbiwgMCk7CitzaG91bGRCZShwb3Muc2lnbiwgMSk7Citz
aG91bGRCZShuZWcuc2lnbiwgLTEpOworCitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJh
dGlvbi5wcm90b3R5cGUuYmxhbmssIFR5cGVFcnJvcik7CitzaG91bGRCZSh6ZXJvLmJsYW5rLCB0
cnVlKTsKK3Nob3VsZEJlKHBvcy5ibGFuaywgZmFsc2UpOworc2hvdWxkQmUobmVnLmJsYW5rLCBm
YWxzZSk7CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20ubGVuZ3RoLCAxKTsKK3No
b3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oKSwgUmFuZ2VFcnJvcik7Citz
aG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKHt9KSwgVHlwZUVycm9yKTsK
K3sKKyAgICBjb25zdCBiYWRTdHJpbmdzID0gWworICAgICAgICAnJywgJ1AnLCAnUDEnLCAnUFQn
LCAnUDFZVCcsICdQVDEnLAorICAgICAgICAnUDFXMVknLCAgJ1BUMVMxTScsCisgICAgICAgICdQ
MS4xWScsICdQVDEuMUgxTScsICdQVDEuMU0xUycsCisgICAgICAgICdQVDEuMTExMTExMTExMUgn
LCAnUFQxLjExMTExMTExMTFNJywgJ1BUMS4xMTExMTExMTExUycsCisgICAgICAgIGBQJHtBcnJh
eSgzMDkpLmZpbGwoOSkuam9pbignJyl9WWAKKyAgICBdOworICAgIGZvciAoY29uc3QgYmFkU3Ry
aW5nIGluIGJhZFN0cmluZ3MpCisgICAgICAgIHNob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1
cmF0aW9uLmZyb20oYmFkU3RyaW5nKSwgUmFuZ2VFcnJvcik7CisgICAgCisgICAgY29uc3QgZnJv
bVN0cmluZyA9IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxWTJNM1c0RFQ1SDZNNy4wMDgwMDkw
MTBTJyk7CisKKyAgICBjb25zdCBkdXJhdGlvbkxpa2UgPSB7fTsKKyAgICBmaWVsZHMuZm9yRWFj
aCgoZmllbGQsIGkpID0+IHsgZHVyYXRpb25MaWtlW2ZpZWxkXSA9IGkgKyAxOyB9KTsKKyAgICBj
b25zdCBmcm9tRHVyYXRpb25MaWtlID0gVGVtcG9yYWwuRHVyYXRpb24uZnJvbShkdXJhdGlvbkxp
a2UpOworCisgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHsKKyAgICAgICAgc2hvdWxk
QmUoZnJvbVN0cmluZ1tmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgICAgICBzaG91bGRCZShmcm9t
RHVyYXRpb25MaWtlW2ZpZWxkXSwgcG9zW2ZpZWxkXSk7CisgICAgfQorfQorc2hvdWxkTm90VGhy
b3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbShgUCR7QXJyYXkoMzA4KS5maWxsKDkpLmpv
aW4oJycpfVlgKSk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCfiiJJwMXkybTN3
NGR0NWg2bTcuMDA4MDA5MDEwcycpLnRvU3RyaW5nKCksICctUDFZMk0zVzREVDVINk03LjAwODAw
OTAxUycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnK1AxWTJEVDNINC4wUycp
LnRvU3RyaW5nKCksICdQMVkyRFQzSDRTJyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5m
cm9tKCdQVDEuMDMxMjVIJykudG9TdHJpbmcoKSwgJ1BUMUgxTTUyLjVTJyk7CitzaG91bGRCZShU
ZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQVDEuMDMxMjVNJykudG9TdHJpbmcoKSwgJ1BUMU0xLjg3
NVMnKTsKKworY29uc3QgcG9zQWJzb2x1dGUgPSBuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAs
MSwyLDMsNCw1LDYsNyk7CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUubGVu
Z3RoLCAyKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoKSwg
UmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJl
KHt9KSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNv
bXBhcmUoemVybyksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVy
YXRpb24uY29tcGFyZSh6ZXJvLCB7fSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBU
ZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHsgeWVhcnM6IDEgfSwgemVybyksIFJhbmdlRXJyb3Ip
Oworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh7IG1vbnRoczog
MSB9LCB6ZXJvKSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJh
dGlvbi5jb21wYXJlKHsgd2Vla3M6IDEgfSwgemVybyksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhy
b3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh6ZXJvLCB7IHllYXJzOiAxIH0pLCBS
YW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUo
emVybywgeyBtb250aHM6IDEgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVt
cG9yYWwuRHVyYXRpb24uY29tcGFyZSh6ZXJvLCB7IHdlZWtzOiAxIH0pLCBSYW5nZUVycm9yKTsK
K3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUocG9zQWJzb2x1dGUsIHBvc0Fic29s
dXRlKSwgMCk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHBvc0Fic29sdXRl
LCB6ZXJvKSwgMSk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHplcm8sIHBv
c0Fic29sdXRlKSwgLTEpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSgnUFQ4
NjQwMFMnLCAnUDFEJyksIDApOworCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5
cGUud2l0aC5sZW5ndGgsIDEpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24u
cHJvdG90eXBlLndpdGguY2FsbCh7fSwgeyB5ZWFyczogMSB9KSwgVHlwZUVycm9yKTsKK3Nob3Vs
ZFRocm93KCgpID0+IHplcm8ud2l0aCgpLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4g
emVyby53aXRoKHt9KSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ud2l0aCh7
IHllYXJzOiAxLjEgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gcG9zLndpdGgo
eyB5ZWFyczogLTEgfSksIFJhbmdlRXJyb3IpOworeworICAgIGNvbnN0IGZ1bGx5VXBkYXRlZCA9
IHBvcy53aXRoKG5lZyk7CisgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHsKKyAgICAg
ICAgc2hvdWxkQmUoemVyby53aXRoKHsgW2ZpZWxkXTogMSB9KVtmaWVsZF0sIDEpOworICAgICAg
ICBzaG91bGRCZShmdWxseVVwZGF0ZWRbZmllbGRdLCBuZWdbZmllbGRdKTsKKyAgICB9Cit9CisK
K3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVkLmxlbmd0aCwgMCk7
CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubmVnYXRlZC5j
YWxsKHt9KSwgVHlwZUVycm9yKTsKK3sKKyAgICBjb25zdCBuZWdhdGVkWmVybyA9IHplcm8ubmVn
YXRlZCgpOworICAgIGNvbnN0IG5lZ2F0ZWRQb3MgPSBwb3MubmVnYXRlZCgpOworICAgIGNvbnN0
IG5lZ2F0ZWROZWcgPSBuZWcubmVnYXRlZCgpOworICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmll
bGRzKSB7CisgICAgICAgIHNob3VsZEJlKG5lZ2F0ZWRaZXJvW2ZpZWxkXSwgemVyb1tmaWVsZF0p
OworICAgICAgICBzaG91bGRCZShuZWdhdGVkTmVnW2ZpZWxkXSwgcG9zW2ZpZWxkXSk7CisgICAg
ICAgIHNob3VsZEJlKG5lZ2F0ZWRQb3NbZmllbGRdLCBuZWdbZmllbGRdKTsKKyAgICB9Cit9CisK
K3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5hYnMubGVuZ3RoLCAwKTsKK3No
b3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5hYnMuY2FsbCh7fSks
IFR5cGVFcnJvcik7Cit7CisgICAgY29uc3QgYWJzWmVybyA9IHplcm8uYWJzKCk7CisgICAgY29u
c3QgYWJzUG9zID0gcG9zLmFicygpOworICAgIGNvbnN0IGFic05lZyA9IG5lZy5hYnMoKTsKKyAg
ICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAgICAgICBzaG91bGRCZShhYnNaZXJv
W2ZpZWxkXSwgemVyb1tmaWVsZF0pOworICAgICAgICBzaG91bGRCZShhYnNQb3NbZmllbGRdLCBw
b3NbZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUoYWJzTmVnW2ZpZWxkXSwgcG9zW2ZpZWxkXSk7
CisgICAgfQorfQorCitmb3IgKGNvbnN0IG1ldGhvZCBvZiBbJ2FkZCcsICdzdWJ0cmFjdCddKSB7
CisgICAgc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW21ldGhvZF0ubGVuZ3Ro
LCAxKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVb
bWV0aG9kXS5jYWxsKHsgaG91cnM6IDEgfSksIFR5cGVFcnJvcik7CisgICAgc2hvdWxkVGhyb3co
KCkgPT4gemVyb1ttZXRob2RdKCksIFJhbmdlRXJyb3IpOworICAgIHNob3VsZFRocm93KCgpID0+
IHplcm9bbWV0aG9kXSh7fSksIFR5cGVFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gemVy
b1ttZXRob2RdKHsgeWVhcnM6IDEgfSksIFJhbmdlRXJyb3IpOworICAgIHNob3VsZFRocm93KCgp
ID0+IHplcm9bbWV0aG9kXSh7IG1vbnRoczogMSB9KSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxk
VGhyb3coKCkgPT4gemVyb1ttZXRob2RdKHsgd2Vla3M6IDEgfSksIFJhbmdlRXJyb3IpOworICAg
IHNob3VsZFRocm93KCgpID0+IHBvc1ttZXRob2RdKHsgc2Vjb25kczogMSB9KSwgUmFuZ2VFcnJv
cik7Cit9Cit7CisgICAgY29uc3QgcG9zRHVyYXRpb25MaWtlID0geyBkYXlzOiAxLCBob3Vyczog
MiwgbWludXRlczogMywgc2Vjb25kczogNCwgbWlsbGlzZWNvbmRzOiA1LCBtaWNyb3NlY29uZHM6
IDYsIG5hbm9zZWNvbmRzOiA3IH07CisgICAgY29uc3QgbmVnU3RyaW5nID0gJy1QMURUMkgzTTQu
MDA1MDA2MDA3Uyc7CisKKyAgICBjb25zdCBhZGRaZXJvID0gcG9zQWJzb2x1dGUuYWRkKHplcm8p
OworICAgIGNvbnN0IGFkZFBvcyA9IHBvc0Fic29sdXRlLmFkZChwb3NEdXJhdGlvbkxpa2UpOwor
ICAgIGNvbnN0IGFkZE5lZyA9IHBvc0Fic29sdXRlLmFkZChuZWdTdHJpbmcpOworICAgIGNvbnN0
IHN1Ylplcm8gPSBwb3NBYnNvbHV0ZS5zdWJ0cmFjdCh6ZXJvKTsKKyAgICBjb25zdCBzdWJQb3Mg
PSBwb3NBYnNvbHV0ZS5zdWJ0cmFjdChwb3NEdXJhdGlvbkxpa2UpOworICAgIGNvbnN0IHN1Yk5l
ZyA9IHBvc0Fic29sdXRlLnN1YnRyYWN0KG5lZ1N0cmluZyk7CisgICAgZm9yIChjb25zdCBmaWVs
ZCBvZiBmaWVsZHMpIHsKKyAgICAgICAgc2hvdWxkQmUoYWRkWmVyb1tmaWVsZF0sIHBvc0Fic29s
dXRlW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKGFkZFBvc1tmaWVsZF0sIDIgKiBwb3NBYnNv
bHV0ZVtmaWVsZF0pOworICAgICAgICBzaG91bGRCZShhZGROZWdbZmllbGRdLCAwKTsKKyAgICAg
ICAgc2hvdWxkQmUoc3ViWmVyb1tmaWVsZF0sIHBvc0Fic29sdXRlW2ZpZWxkXSk7CisgICAgICAg
IHNob3VsZEJlKHN1YlBvc1tmaWVsZF0sIDApOworICAgICAgICBzaG91bGRCZShzdWJOZWdbZmll
bGRdLCAyICogcG9zQWJzb2x1dGVbZmllbGRdKTsKKyAgICB9Cit9CitzaG91bGRCZShUZW1wb3Jh
bC5EdXJhdGlvbi5mcm9tKCdQMURUMTNIMzFNMzFTJykuYWRkKCdQMURUMTNIMzFNMzFTJykudG9T
dHJpbmcoKSwgJ1AzRFQzSDNNMlMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20o
Jy1QVDFNNTlTJykuc3VidHJhY3QoJ1BUMU01OVMnKS50b1N0cmluZygpLCAnLVBUM001OFMnKTsK
Kworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvdGFsLmxlbmd0aCwgMSk7
CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudG90YWwuY2Fs
bCh7fSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBuZXcgVGVtcG9yYWwuRHVyYXRp
b24oKS50b3RhbCgpLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IG5ldyBUZW1wb3Jh
bC5EdXJhdGlvbigpLnRvdGFsKHt9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBU
ZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMVknKS50b3RhbCh7IHVuaXQ6ICdzZWNvbmRzJyB9KSwg
UmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQ
MU0nKS50b3RhbCh7IHVuaXQ6ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJv
dygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMVcnKS50b3RhbCh7IHVuaXQ6ICdzZWNv
bmRzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlv
bi5mcm9tKCdQMUQnKS50b3RhbCh7IHVuaXQ6ICdtb250aHMnIH0pLCBSYW5nZUVycm9yKTsKK3No
b3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxRCcpLnRvdGFsKHsgdW5p
dDogJ3dlZWtzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRCZShwb3NBYnNvbHV0ZS50b3RhbCh7
IHVuaXQ6ICdkYXlzJyB9KSwgMS4wODU0NjMwMjA5MDI4NTg4KTsKK3Nob3VsZEJlKHBvc0Fic29s
dXRlLnRvdGFsKHsgdW5pdDogJ2hvdXJzJyB9KSwgMjYuMDUxMTEyNTAxNjY4NjEyKTsKK3Nob3Vs
ZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ21pbnV0ZXMnIH0pLCAxNTYzLjA2Njc1MDEw
MDExNjcpOworc2hvdWxkQmUocG9zQWJzb2x1dGUudG90YWwoeyB1bml0OiAnc2Vjb25kcycgfSks
IDkzNzg0LjAwNTAwNjAwNyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS50b3RhbCh7IHVuaXQ6ICdt
aWxsaXNlY29uZHMnIH0pLCA5Mzc4NDAwNS4wMDYwMDcpOworc2hvdWxkQmUocG9zQWJzb2x1dGUu
dG90YWwoeyB1bml0OiAnbWljcm9zZWNvbmRzJyB9KSwgOTM3ODQwMDUwMDYuMDA3KTsKK3Nob3Vs
ZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ25hbm9zZWNvbmRzJyB9KSwgOTM3ODQwMDUw
MDYwMDcpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnLVBUMTIzNDU2Nzg5Uycp
LnRvdGFsKHsgdW5pdDogJ2RheScgfSksIC0xNDI4Ljg5ODAyMDgzMzMzMzIpOworCisvLyBBdCBw
cmVzZW50LCB0b0xvY2FsZVN0cmluZyBoYXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgdG9KU09OIG9y
IGFyZ3VtZW50bGVzcyB0b1N0cmluZy4KK2ZvciAoY29uc3QgbWV0aG9kIG9mIFsndG9TdHJpbmcn
LCAndG9KU09OJywgJ3RvTG9jYWxlU3RyaW5nJ10pIHsgICAgCisgICAgc2hvdWxkQmUoVGVtcG9y
YWwuRHVyYXRpb24ucHJvdG90eXBlW21ldGhvZF0ubGVuZ3RoLCAwKTsKKyAgICBzaG91bGRUaHJv
dygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbbWV0aG9kXS5jYWxsKHt9KSwgVHlw
ZUVycm9yKTsKKworICAgIHNob3VsZEJlKHplcm9bbWV0aG9kXSgpLCAnUFQwUycpOworICAgIHNo
b3VsZEJlKHBvc1ttZXRob2RdKCksICdQMVkyTTNXNERUNUg2TTcuMDA4MDA5MDFTJyk7CisgICAg
c2hvdWxkQmUobmVnW21ldGhvZF0oKSwgJy1QMVkyTTNXNERUNUg2TTcuMDA4MDA5MDFTJyk7Cisg
ICAgCisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDEsMSwxLDEpW21ldGhvZF0o
KSwgJ1AxWTFNMVcxRCcpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAs
MCwwLDEsMSwxKVttZXRob2RdKCksICdQVDFIMU0xUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1w
b3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDEwMClbbWV0aG9kXSgpLCAnUFQwLjFTJyk7Cisg
ICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDAsMCwxMDApW21l
dGhvZF0oKSwgJ1BUMC4wMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlv
bigwLDAsMCwwLDAsMCwwLDAsMCwxMDApW21ldGhvZF0oKSwgJ1BUMC4wMDAwMDAxUycpOworICAg
IHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwxLDEwMDEpW21ldGhv
ZF0oKSwgJ1BUMi4wMDFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAs
MCwwLDAsMCwwLDAsMSwxMDAxKVttZXRob2RdKCksICdQVDAuMDAyMDAxUycpOworICAgIHNob3Vs
ZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDAsMSwxMDAxKVttZXRob2Rd
KCksICdQVDAuMDAwMDAyMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlv
bigwLDAsMCwwLDAsMCwxLDEwMDEsMTAwMSwxMDAxKVttZXRob2RdKCksICdQVDIuMDAyMDAyMDAx
UycpOworfQorCitzaG91bGRCZShwb3MudG9TdHJpbmcoe30pLCBwb3MudG9TdHJpbmcoKSk7CisK
K3Nob3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogJ2Zvb2Jhcicg
fSksIFJhbmdlRXJyb3IpOworZm9yIChjb25zdCB1bml0IG9mIFsneWVhcicsICdtb250aCcsICd3
ZWVrJywgJ2RheScsICdob3VyJywgJ21pbnV0ZSddKSB7CisgICAgc2hvdWxkVGhyb3coKCkgPT4g
cG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiB1bml0IH0pLCBSYW5nZUVycm9yKTsKKyAgICBz
aG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6IGAke3VuaXR9c2Ag
fSksIFJhbmdlRXJyb3IpOworfQorc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0
OiAnc2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTdTJyk7CitzaG91bGRCZShwb3MudG9TdHJp
bmcoeyBzbWFsbGVzdFVuaXQ6ICdtaWxsaXNlY29uZHMnIH0pLCAnUDFZMk0zVzREVDVINk03LjAw
OFMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogJ21pY3Jvc2Vjb25k
cycgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4MDA5UycpOworc2hvdWxkQmUocG9zLnRvU3RyaW5n
KHsgc21hbGxlc3RVbml0OiAnbmFub3NlY29uZHMnIH0pLCAnUDFZMk0zVzREVDVINk03LjAwODAw
OTAxMFMnKTsKK2ZvciAoY29uc3QgdW5pdCBvZiBbJ3NlY29uZCcsICdtaWxsaXNlY29uZCcsICdt
aWNyb3NlY29uZCcsICduYW5vc2Vjb25kJ10pCisgICAgc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsg
c21hbGxlc3RVbml0OiB1bml0IH0pLCBwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6IGAke3Vu
aXR9c2AgfSkpOworCitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFs
U2Vjb25kRGlnaXRzOiAtMSB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBwb3Mu
dG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAxMCB9KSwgUmFuZ2VFcnJvcik7Citz
aG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAn
Ym9ndXMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9u
YWxTZWNvbmREaWdpdHM6IDAgfSksICdQMVkyTTNXNERUNUg2TTdTJyk7Citjb25zdCBkZWNpbWFs
UGFydCA9ICcwMDgwMDkwMTAnOworZm9yIChsZXQgaSA9IDE7IGkgPCAxMDsgaSsrKQorICAgIHNo
b3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IGkgfSksIGBQMVky
TTNXNERUNUg2TTcuJHtkZWNpbWFsUGFydC5zbGljZSgwLGkpfVNgKTsKK3Nob3VsZEJlKHBvcy50
b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6ICdhdXRvJyB9KSwgcG9zLnRvU3RyaW5n
KCkpOworc2hvdWxkQmUoemVyby50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDIg
fSksICdQVDAuMDBTJyk7CisKK3Nob3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IHJvdW5k
aW5nTW9kZTogJ2JvZ3VzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRCZShwb3MudG9TdHJpbmco
eyByb3VuZGluZ01vZGU6ICd0cnVuYycgfSksIHBvcy50b1N0cmluZygpKTsKK3Nob3VsZEJlKHBv
cy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDcsIHJvdW5kaW5nTW9kZTogJ2Nl
aWwnIH0pLCAnUDFZMk0zVzREVDVINk03LjAwODAwOTFTJyk7CitzaG91bGRCZShwb3MudG9TdHJp
bmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAyLCByb3VuZGluZ01vZGU6ICdmbG9vcicgfSks
ICdQMVkyTTNXNERUNUg2TTcuMDBTJyk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlv
bmFsU2Vjb25kRGlnaXRzOiAyLCByb3VuZGluZ01vZGU6ICdoYWxmRXhwYW5kJyB9KSwgJ1AxWTJN
M1c0RFQ1SDZNNy4wMVMnKTsKKworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBl
LnZhbHVlT2YubGVuZ3RoLCAwKTsKK3Nob3VsZFRocm93KCgpID0+IG5ldyBUZW1wb3JhbC5EdXJh
dGlvbigpLnZhbHVlT2YoKSwgVHlwZUVycm9yKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436604</attachid>
            <date>2021-08-26 19:43:33 -0700</date>
            <delta_ts>2021-08-27 16:23:47 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-228532-20210826194332.patch</filename>
            <type>text/plain</type>
            <size>106202</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NmE5YjNkYmVhNTJlZWY3NjIyNzk4MWE0YmEzNDk1YThmZjRhOWJlLi40NDkwNTQyM2Q0ZjJkNzdl
YTkxNjU4ZWZhNzM0MTM4MDQxMjBjNDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NSBAQAorMjAyMS0wOC0yNiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpkdXJhdGlvblN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OnByb3BlcnR5TmFtZSk6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFs
RHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRp
b246OlRlbXBvcmFsRHVyYXRpb24pOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmlzVmFsaWREdXJhdGlvbik6CisgICAgICAg
IChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQpOgorICAgICAgICAoSlNDOjpo
YW5kbGVGcmFjdGlvbik6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnBhcnNlKToK
KyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6ZnJvbU9iamVjdCk6CisgICAgICAgIChK
U0M6OlRlbXBvcmFsRHVyYXRpb246OnRvRHVyYXRpb24pOgorICAgICAgICAoSlNDOjpUZW1wb3Jh
bER1cmF0aW9uOjpmcm9tKToKKyAgICAgICAgKEpTQzo6dG90YWxOYW5vc2Vjb25kcyk6CisgICAg
ICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpUZW1w
b3JhbER1cmF0aW9uOjpzaWduKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6d2l0
aCBjb25zdCk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246Om5lZ2F0ZWQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjphYnMgY29uc3QpOgorICAgICAgICAo
SlNDOjpUZW1wb3JhbER1cmF0aW9uOjpsYXJnZXN0U3ViZHVyYXRpb24gY29uc3QpOgorICAgICAg
ICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpiYWxhbmNlKToKKyAgICAgICAgKEpTQzo6VGVtcG9y
YWxEdXJhdGlvbjo6YWRkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6
c3VidHJhY3QgY29uc3QpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uOjpyb3VuZCk6
CisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb246OnRvdGFsIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VGVtcG9yYWxEdXJhdGlvbjo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpU
ZW1wb3JhbER1cmF0aW9uOjp0b1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0
cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uQ29uc3Ry
dWN0b3I6OlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OlRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJh
dGlvbkNvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlOjpUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6VGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NVU1RPTV9H
RVRURVIpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlRHVyYXRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OnNpbmd1bGFyVW5p
dCk6CisgICAgICAgIChKU0M6OnRlbXBvcmFsVW5pdFR5cGUpOgorICAgICAgICAoSlNDOjp0ZW1w
b3JhbFNtYWxsZXN0VW5pdCk6CisgICAgICAgIChKU0M6OnRlbXBvcmFsRnJhY3Rpb25hbFNlY29u
ZERpZ2l0cyk6CisgICAgICAgIChKU0M6OnNlY29uZHNTdHJpbmdQcmVjaXNpb24pOgorICAgICAg
ICAoSlNDOjpyb3VuZE51bWJlclRvSW5jcmVtZW50KToKKyAgICAgICAgKiBydW50aW1lL1RlbXBv
cmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgICogcnVudGlt
ZS9WTS5oOgorCiAyMDIxLTA4LTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+
CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIHVubmVjZXNzYXJ5IG1vdmVzIGluIFlhcnIncyBzdWIz
MiAvIGFkZDMyIHJlbGF0ZWQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IGJiNjU0YjU0NDRkMjE5Njc5NmVhZmE0MjU1NzhkMDM4ZWFiNzZjZTkuLmQxZDM5YWM3ZGRk
NjRkMTUxNWM3ODUxMzkyN2FiYjZlMGRhMWM2M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEwNyw2ICsxMDcsOCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfT0JKRUNUX0xV
VF9TT1VSQ0VTCiAgICAgcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9T
eW1ib2xDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL1N5bWJvbFByb3RvdHlwZS5jcHAKKyAg
ICBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAKKyAgICBydW50aW1lL1Rl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9UZW1wb3JhbE9iamVjdC5j
cHAKIAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNzU0MmM3Zjc3NDY1ZTI2ZTE5ZDRhNjhhNWRiNzYw
OTFmZGQ0NjUzOS4uM2Y1ODVlMWM5NGIzMDMwNjg5NGIyNzc2YjlhNTA3ZTk2ZjA2NGY5NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTE5MSw2ICsxOTEs
OCBAQCBPQkpFQ1RfTFVUX0hFQURFUlMgPSBcCiAgICAgU3RyaW5nUHJvdG90eXBlLmx1dC5oIFwK
ICAgICBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgU3ltYm9sUHJvdG90eXBlLmx1dC5o
IFwKKyAgICBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IubHV0LmggXAorICAgIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGUubHV0LmggXAogICAgIFRlbXBvcmFsT2JqZWN0Lmx1dC5oIFwKICAg
ICBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5sdXQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGFkZDZjYjQzMjI5MjdmMjIxNWE2MzJkMzg5M2JkYzljMzgyNWZhN2EuLjJlZTY4
ZjEwMzJlMzk5YmUzYjY5ZDA3OTBiYjY2NDk4ZTQ5ZWI3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xNDE2LDYgKzE0MTYsOSBAQAogCQlBMzgyQzUzMTI2NjcxMTFEMDA0MkNE
OTkgLyogSW5CeVZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzMzA1RkIxMjBCMEY3ODgwMENFQjgyQiAvKiBJbkJ5VmFyaWFudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUEzOEQyNTBFMjU4
MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTM4RDI1MEQyNTgwMEQ0MzAw
NDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmggKi87IH07CiAJCUEzOEQ1
QkZDMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhENUJGQTI2NjZEM0RBMDBBMTA5QTYgLyogSW5C
eVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUEzQzdFREI2MjZCMERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBM0M3RURC
MDI2QjBEQjM2MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oICovOyB9Owor
CQlBM0M3RURCOTI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VEQjMyNkIwREIzNzAw
NEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCAqLzsgfTsKKwkJQTNDN0VEQkEyNkIwREIzODAw
NEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VEQjQyNkIwREIzNzAwNEMzNEM1IC8q
IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oICovOyB9OwogCQlBM0VFODU0MzI2MjUxNEIw
MDBGQzlCOEQgLyogSW50bFdvcmthcm91bmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTM3NjE5NDAyNjI1MTI3QzAwQ0JDQkE5IC8qIEludGxXb3Jr
YXJvdW5kLmNwcCAqLzsgfTsKIAkJQTNGRjlCQzcyMjM0NzQ5MTAwQjFBOUFCIC8qIFlhcnJGbGFn
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNGRjlC
QzUyMjM0NzQ2NjAwQjFBOUFCIC8qIFlhcnJGbGFncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBK
YXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNTAzRkExNDE4OEUwRkFGMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFt
ZS5oICovOyB9OwpAQCAtNDQ3Myw2ICs0NDc2LDEyIEBACiAJCUEzQkY4ODRFMjQ0ODBCRTAwMDFC
OUYzNSAvKiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzQkY4ODRGMjQ0ODBCRTAwMDFCOUYzNSAv
KiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBM0JGODg1MDI0NDgwQkUxMDAxQjlGMzUgLyogSW50bFJlbGF0aXZlVGltZUZv
cm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREIwMjZCMERCMzYw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjEyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVy
YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcG9yYWxE
dXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREIyMjZCMERC
MzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjMyNkIwREIzNzAwNEMzNEM1
IC8qIFRlbXBvcmFsRHVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGVtcG9yYWxEdXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURC
NDI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCNTI2QjBEQjM3MDA0QzM0QzUg
LyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTNGRjlCQzUyMjM0NzQ2NjAwQjFBOUFCIC8qIFlhcnJGbGFncy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyRmxhZ3MuaDsgcGF0aCA9IHlh
cnIvWWFyckZsYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzRkY5QkM2MjIz
NDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gWWFyckZsYWdzLmNwcDsgcGF0aCA9IHlhcnIvWWFyckZsYWdzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUwM0ZBMTMxODhFMEZBRjAwMTEwRjE0IC8qIEph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC03OTU2LDYgKzc5NjUsMTIgQEAKIAkJCQlFMzExNzlBOTIyODgzODVEMDA1MTRCMkMgLyogU3lt
Ym9sVGFibGVPclNjb3BlRGVwdGguaCAqLywKIAkJCQlCREI0QjVFMDk5Q0Q0QzFCQjNDMUNGMDUg
LyogVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcCAqLywKIAkJCQk3MEVDQTYwNDFBRkRCRUEy
MDA0NDk3MzkgLyogVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmggKi8sCisJCQkJQTNDN0VEQjEy
NkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uY3BwICovLAorCQkJCUEzQzdFREIz
MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi8sCisJCQkJQTNDN0VEQjIy
NkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAgKi8sCisJ
CQkJQTNDN0VEQjQyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rv
ci5oICovLAorCQkJCUEzQzdFREI1MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlLmNwcCAqLywKKwkJCQlBM0M3RURCMDI2QjBEQjM2MDA0QzM0QzUgLyogVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZS5oICovLAogCQkJCUY2RjE1MDFCMjY5M0QzM0UwMDRCOThFRiAv
KiBUZW1wb3JhbE5vdy5jcHAgKi8sCiAJCQkJRjZGMTUwMTgyNjkzRDMzRDAwNEI5OEVGIC8qIFRl
bXBvcmFsTm93LmggKi8sCiAJCQkJRjZGMTUwMTkyNjkzRDMzRTAwNEI5OEVGIC8qIFRlbXBvcmFs
T2JqZWN0LmNwcCAqLywKQEAgLTEwNjU1LDcgKzEwNjcwLDExIEBACiAJCQkJQTc4NEEyNjQxMUQx
NjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURDNzk5
NzgzMUNERTlGQTAwMDRENEEwOSAvKiBUYWdSZWdpc3RlcnNNb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVPYmplY3REZXNjcmlwdG9y
LmggaW4gSGVhZGVycyAqLywKKwkJCQlBM0M3RURCOTI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9y
YWxEdXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTNDN0VEQkEyNkIwREIzODAwNEMzNEM1
IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTND
N0VEQjYyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUY2RjE1MDIxMjY5M0Q0NTAwMDRCOThFRiAvKiBUZW1wb3JhbE9iamVj
dC5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUEzRkE5NzM4MjZCQjM1NTYwMEY3MTA2MCAvKiBU
ZW1wb3JhbE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTRGMTdFRTI3
NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDRB
N0I0MjBCRjY4RDkwMDIyQjE3MSAvKiBUZXJtaW5hdGVkQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZBMkMxN0MxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggYTY0NzAyZGI2MDFj
YzIxYWJiNGMyNjI5NDU3ZGQxYTc1OWMzMDIwZC4uM2MyYzZmMDA5NjY3YzgzYWMxOTQ3YTQ2MzQ5
YzY3YWI5MmVjMjI5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTAxMCw2ICsx
MDEwLDkgQEAgcnVudGltZS9TeW1ib2xPYmplY3QuY3BwCiBydW50aW1lL1N5bWJvbFByb3RvdHlw
ZS5jcHAKIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwCiBydW50aW1lL1RlbXBsYXRlT2JqZWN0RGVz
Y3JpcHRvci5jcHAKK3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKK3J1bnRpbWUvVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcAorcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlLmNwcAogcnVudGltZS9UZW1wb3JhbE5vdy5jcHAKIHJ1bnRpbWUvVGVtcG9yYWxPYmplY3Qu
Y3BwCiBydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCmluZGV4IGRjNjAxOWY0NWZkOThiNDM3
YTViZjZlMjY1ODRhMGEzNDYzMmZhZGMuLjVmOGRjNzRhZTY0Y2ZlMzZiYTVjMmFmOWNlNjA1ZTIw
YTA3YmVlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaApAQCAtOTksNiArOTksNyBAQAogICAgIG1hY3JvKGNvdW50ZXJzKSBcCiAg
ICAgbWFjcm8oZGF0ZVN0eWxlKSBcCiAgICAgbWFjcm8oZGF5KSBcCisgICAgbWFjcm8oZGF5cykg
XAogICAgIG1hY3JvKGRheVBlcmlvZCkgXAogICAgIG1hY3JvKGRlZmluZVByb3BlcnR5KSBcCiAg
ICAgbWFjcm8oZGVyZWYpIFwKQEAgLTEzNSw2ICsxMzYsNyBAQAogICAgIG1hY3JvKGhhc2gpIFwK
ICAgICBtYWNybyhoZWFkZXIpIFwKICAgICBtYWNybyhob3VyKSBcCisgICAgbWFjcm8oaG91cnMp
IFwKICAgICBtYWNybyhob3VyQ3ljbGUpIFwKICAgICBtYWNybyhob3VyMTIpIFwKICAgICBtYWNy
byhpZCkgXApAQCAtMTYyLDEzICsxNjQsMTggQEAKICAgICBtYWNybyhtYXhpbXVtRnJhY3Rpb25E
aWdpdHMpIFwKICAgICBtYWNybyhtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMpIFwKICAgICBtYWNy
byhtZXNzYWdlKSBcCisgICAgbWFjcm8obWljcm9zZWNvbmRzKSBcCisgICAgbWFjcm8obWlsbGlz
ZWNvbmRzKSBcCiAgICAgbWFjcm8obWluaW11bUZyYWN0aW9uRGlnaXRzKSBcCiAgICAgbWFjcm8o
bWluaW11bUludGVnZXJEaWdpdHMpIFwKICAgICBtYWNybyhtaW5pbXVtU2lnbmlmaWNhbnREaWdp
dHMpIFwKICAgICBtYWNybyhtaW51dGUpIFwKKyAgICBtYWNybyhtaW51dGVzKSBcCiAgICAgbWFj
cm8obW9udGgpIFwKKyAgICBtYWNybyhtb250aHMpIFwKICAgICBtYWNybyhtdWx0aWxpbmUpIFwK
ICAgICBtYWNybyhuYW1lKSBcCisgICAgbWFjcm8obmFub3NlY29uZHMpIFwKICAgICBtYWNybyhu
ZXh0KSBcCiAgICAgbWFjcm8obm93KSBcCiAgICAgbWFjcm8obnVtSW5saW5lZENhbGxzKSBcCkBA
IC0xOTEsMTMgKzE5OCwxNiBAQAogICAgIG1hY3JvKHJlZ2lvbikgXAogICAgIG1hY3JvKHJlcGxh
Y2UpIFwKICAgICBtYWNybyhyZXNvbHZlKSBcCisgICAgbWFjcm8ocm91bmRpbmdNb2RlKSBcCiAg
ICAgbWFjcm8oc2NyaXB0KSBcCiAgICAgbWFjcm8oc2Vjb25kKSBcCisgICAgbWFjcm8oc2Vjb25k
cykgXAogICAgIG1hY3JvKHNlZ21lbnQpIFwKICAgICBtYWNybyhzZW5zaXRpdml0eSkgXAogICAg
IG1hY3JvKHNldCkgXAogICAgIG1hY3JvKHNpemUpIFwKICAgICBtYWNybyhzbGljZSkgXAorICAg
IG1hY3JvKHNtYWxsZXN0VW5pdCkgXAogICAgIG1hY3JvKHNvdXJjZSkgXAogICAgIG1hY3JvKHNv
dXJjZUNvZGUpIFwKICAgICBtYWNybyhzb3VyY2VVUkwpIFwKQEAgLTIyNCwxMiArMjM0LDE1IEBA
CiAgICAgbWFjcm8odHlwZSkgXAogICAgIG1hY3JvKHVpZCkgXAogICAgIG1hY3JvKHVuaWNvZGUp
IFwKKyAgICBtYWNybyh1bml0KSBcCiAgICAgbWFjcm8odXNhZ2UpIFwKICAgICBtYWNybyh2YWx1
ZSkgXAogICAgIG1hY3JvKHZhbHVlT2YpIFwKICAgICBtYWNybyh3ZWVrZGF5KSBcCisgICAgbWFj
cm8od2Vla3MpIFwKICAgICBtYWNybyh3cml0YWJsZSkgXAotICAgIG1hY3JvKHllYXIpCisgICAg
bWFjcm8oeWVhcikgXAorICAgIG1hY3JvKHllYXJzKQogCiAjZGVmaW5lIEpTQ19DT01NT05fSURF
TlRJRklFUlNfRUFDSF9QUklWQVRFX0ZJRUxEKG1hY3JvKSBcCiAgICAgbWFjcm8oY29uc3RydWN0
b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKaW5kZXggMTVmNWIwNjRlY2JmYzY1OGE5OTBkMmViNTk2MzViZjJiZGJlODg4Mi4uNTQxOGE3
YmIwZjgxMWI2YzA2M2RlNzYzNGJhZjdmYTIyMDIzYzk0NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMjAxLDYgKzIwMSw4IEBA
CiAjaW5jbHVkZSAiU3ltYm9sQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJTeW1ib2xPYmplY3Qu
aCIKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0
aW9uLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUg
IlRlbXBvcmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiVk1UcmFwc0lubGluZXMuaCIKICNpbmNsdWRl
ICJXYXNtQ2FwYWJpbGl0aWVzLmgiCkBAIC0xMjEyLDYgKzEyMTQsMTMgQEAgY2FwaXRhbE5hbWUg
IyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVGbGFnID8g
Y2FwaXRhbE5hbWUKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+SW50bCwgaW50bCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOwogCiAgICAgaWYgKE9wdGlvbnM6OnVzZVRlbXBvcmFsKCkpIHsKKyAg
ICAgICAgbV9kdXJhdGlvblN0cnVjdHVyZS5pbml0TGF0ZXIoCisgICAgICAgICAgICBbXSAoY29u
c3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93
bmVyKTsKKyAgICAgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBkdXJhdGlv
blByb3RvdHlwZSA9IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0ZShpbml0LnZtLCBU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgICAgICAgICAg
ICAgaW5pdC5zZXQoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGds
b2JhbE9iamVjdCwgZHVyYXRpb25Qcm90b3R5cGUpKTsKKyAgICAgICAgICAgIH0pOworCiAgICAg
ICAgIFRlbXBvcmFsT2JqZWN0KiB0ZW1wb3JhbCA9IFRlbXBvcmFsT2JqZWN0OjpjcmVhdGUodm0s
IFRlbXBvcmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMpKTsKICAgICAgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPlRlbXBvcmFsLCB0
ZW1wb3JhbCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOwogICAgIH0KQEAgLTIwOTAsNiArMjA5OSw5IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKICAgICB0aGlz
T2JqZWN0LT5tX2RhdGVUaW1lRm9ybWF0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRo
aXNPYmplY3QtPm1fbnVtYmVyRm9ybWF0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogCisgICAg
aWYgKE9wdGlvbnM6OnVzZVRlbXBvcmFsKCkpCisgICAgICAgIHRoaXNPYmplY3QtPm1fZHVyYXRp
b25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CisKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX251bGxHZXR0ZXJGdW5jdGlvbik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9udWxsU2V0dGVyRnVuY3Rpb24pOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fbnVsbFNldHRlclN0cmljdEZ1bmN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IGEzNWVmY2U3YzUyNjJmNDlkOThkNWFiNDIx
M2M4ODFiNWMyNzBhYzAuLmI0M2I2N2E5Mzg0MDZiNzAxMjIyYWUzNTMzMjA4ZDcyMTdhNzI4OWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApA
QCAtMzI0LDYgKzMyNCw4IEBAIHB1YmxpYzoKICAgICBMYXp5Q2xhc3NTdHJ1Y3R1cmUgbV9kYXRl
VGltZUZvcm1hdFN0cnVjdHVyZTsKICAgICBMYXp5Q2xhc3NTdHJ1Y3R1cmUgbV9udW1iZXJGb3Jt
YXRTdHJ1Y3R1cmU7CiAKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZT4gbV9kdXJhdGlvblN0cnVjdHVyZTsKKwogICAgIFdyaXRlQmFycmllcjxOdWxsR2V0dGVyRnVu
Y3Rpb24+IG1fbnVsbEdldHRlckZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxOdWxsU2V0dGVy
RnVuY3Rpb24+IG1fbnVsbFNldHRlckZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxOdWxsU2V0
dGVyRnVuY3Rpb24+IG1fbnVsbFNldHRlclN0cmljdEZ1bmN0aW9uOwpAQCAtODcwLDYgKzg3Miw4
IEBAIHB1YmxpYzoKICAgICBKU09iamVjdCogbnVtYmVyRm9ybWF0Q29uc3RydWN0b3IoKSB7IHJl
dHVybiBtX251bWJlckZvcm1hdFN0cnVjdHVyZS5jb25zdHJ1Y3Rvcih0aGlzKTsgfQogICAgIEpT
T2JqZWN0KiBudW1iZXJGb3JtYXRQcm90b3R5cGUoKSB7IHJldHVybiBtX251bWJlckZvcm1hdFN0
cnVjdHVyZS5wcm90b3R5cGUodGhpcyk7IH0KIAorICAgIFN0cnVjdHVyZSogZHVyYXRpb25TdHJ1
Y3R1cmUoKSB7IHJldHVybiBtX2R1cmF0aW9uU3RydWN0dXJlLmdldCh0aGlzKTsgfQorCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRSZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKGJvb2wpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcmVtb3RlRGVidWdnaW5nRW5hYmxlZCgpIGNvbnN0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRp
b24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg1NDYwZDZjZjY2ZDNmOTdhZTY2ZTg4ZWM3NzVlMTczNjJjMTEx
YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbER1cmF0aW9uLmNwcApAQCAtMCwwICsxLDcxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgorCisjaW5jbHVk
ZSAiSW50bE9iamVjdElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiUGFyc2VJbnQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgSlNDIHsK
Kworc3RhdGljIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUoVk0mIHZtLCB1bnNpZ25lZCBpbmRl
eCkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBudW1iZXJPZlRlbXBvcmFsVW5pdHMpOworICAgIHN3
aXRjaCAoc3RhdGljX2Nhc3Q8VGVtcG9yYWxVbml0PihpbmRleCkpIHsKKyNkZWZpbmUgSlNDX1RF
TVBPUkFMX0RVUkFUSU9OX1BST1BFUlRZX05BTUUobmFtZSwgY2FwaXRhbGl6ZWROYW1lKSBjYXNl
IFRlbXBvcmFsVW5pdDo6Y2FwaXRhbGl6ZWROYW1lOiByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSMjczsgCisgICAgICAgIEpTQ19URU1QT1JBTF9VTklUUyhKU0NfVEVNUE9SQUxfRFVSQVRJ
T05fUFJPUEVSVFlfTkFNRSkKKyN1bmRlZiBKU0NfVEVNUE9SQUxfRFVSQVRJT05fUFJPUEVSVFlf
TkFNRQorICAgIH0KK30KKworY29uc3QgQ2xhc3NJbmZvIFRlbXBvcmFsRHVyYXRpb246OnNfaW5m
byA9IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoVGVtcG9yYWxEdXJhdGlvbikgfTsKKworVGVtcG9yYWxEdXJhdGlvbiogVGVt
cG9yYWxEdXJhdGlvbjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN1YmR1
cmF0aW9ucyYmIHN1YmR1cmF0aW9ucykKK3sKKyAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbER1cmF0aW9uPih2bS5oZWFwKSkgVGVtcG9yYWxEdXJh
dGlvbih2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKHN1YmR1cmF0aW9ucykpOworICAgIG9iamVjdC0+
ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK1N0cnVjdHVyZSog
VGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitUZW1wb3JhbER1cmF0aW9uOjpUZW1w
b3JhbER1cmF0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN1YmR1cmF0aW9ucyYm
IHN1YmR1cmF0aW9ucykKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fc3ViZHVy
YXRpb25zKFdURk1vdmUoc3ViZHVyYXRpb25zKSkKK3sKK30KKwordm9pZCBUZW1wb3JhbER1cmF0
aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Cit9CisKKy8vIElzVmFsaWRE
dXJhdGlvbiAoIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vj
b25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMsIG5hbm9zZWNvbmRzICkKK3N0YXRpYyBi
b29sIGlzVmFsaWREdXJhdGlvbihjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMm
IHN1YmR1cmF0aW9ucykKK3sKKyAgICBpbnQgc2lnbiA9IDA7CisgICAgZm9yIChhdXRvIHZhbHVl
IDogc3ViZHVyYXRpb25zKSB7CisgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZSh2YWx1ZSkgfHwg
KHZhbHVlIDwgMCAmJiBzaWduID4gMCkgfHwgKHZhbHVlID4gMCAmJiBzaWduIDwgMCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFzaWduICYmIHZhbHVlKQorICAg
ICAgICAgICAgc2lnbiA9IHZhbHVlID4gMCA/IDEgOiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworLy8gIENyZWF0ZVRlbXBvcmFsRHVyYXRpb24gKCB5ZWFycywgbW9udGhzLCB3
ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9z
ZWNvbmRzLCBuYW5vc2Vjb25kcyBbICwgbmV3VGFyZ2V0IF0gKQorVGVtcG9yYWxEdXJhdGlvbiog
VGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxpZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdWJkdXJhdGlvbnMmJiBzdWJkdXJhdGlvbnMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIWlzVmFsaWREdXJhdGlvbihzdWJkdXJh
dGlvbnMpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
Y2Fubm90IGNyZWF0ZSBEdXJhdGlvbiB3aXRoIGluY29uc2lzdGVudCBudW1lcmljIHZhbHVlcyJf
cyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIFRlbXBvcmFsRHVy
YXRpb246OmNyZWF0ZSh2bSwgc3RydWN0dXJlID8gc3RydWN0dXJlIDogZ2xvYmFsT2JqZWN0LT5k
dXJhdGlvblN0cnVjdHVyZSgpLCBXVEZNb3ZlKHN1YmR1cmF0aW9ucykpOworfQorCisvLyBEdXJh
dGlvbkhhbmRsZUZyYWN0aW9ucyAoIGZIb3VycywgbWludXRlcywgZk1pbnV0ZXMsIHNlY29uZHMs
IGZTZWNvbmRzLCBtaWxsaXNlY29uZHMsIGZNaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgZk1p
Y3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIGZOYW5vc2Vjb25kcyApCitzdGF0aWMgdm9pZCBoYW5k
bGVGcmFjdGlvbihUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9ucywg
aW50IGZhY3RvciwgU3RyaW5nVmlldyBmcmFjdGlvblN0cmluZywgVGVtcG9yYWxVbml0IGZyYWN0
aW9uVHlwZSkKK3sKKyAgICBBU1NFUlQoZnJhY3Rpb25TdHJpbmcubGVuZ3RoKCkpOworICAgIEFT
U0VSVChmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxVbml0OjpIb3VyIHx8IGZyYWN0aW9uVHlwZSA9
PSBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSB8fCBmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxVbml0OjpT
ZWNvbmQpOworCisgICAgaWYgKGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6OlNlY29uZCkg
eworICAgICAgICBhdXRvIHBhZGRlZCA9IG1ha2VTdHJpbmcoZnJhY3Rpb25TdHJpbmcsICIwMDAw
MDAwMCIpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNvbmRzKGZhY3RvciAqIHBh
cnNlSW50KHBhZGRlZC5zdWJzdHJpbmcoMCwgMyksIDEwKSk7CisgICAgICAgIHN1YmR1cmF0aW9u
cy5zZXRNaWNyb3NlY29uZHMoZmFjdG9yICogcGFyc2VJbnQocGFkZGVkLnN1YnN0cmluZygzLCAz
KSwgMTApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRzKGZhY3RvciAqIHBh
cnNlSW50KHBhZGRlZC5zdWJzdHJpbmcoNiwgMyksIDEwKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBkb3VibGUgZnJhY3Rpb24gPSBmYWN0b3IgKiBwYXJzZUludChmcmFjdGlvblN0
cmluZywgMTApIC8gc3RkOjpwb3coMTAsIGZyYWN0aW9uU3RyaW5nLmxlbmd0aCgpKTsKKyAgICBp
ZiAoIWZyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZnJhY3Rpb25UeXBlID09
IFRlbXBvcmFsVW5pdDo6SG91cikgeworICAgICAgICBmcmFjdGlvbiAqPSA2MDsKKyAgICAgICAg
c3ViZHVyYXRpb25zLnNldE1pbnV0ZXMoc3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgICAgICBm
cmFjdGlvbiA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMSk7CisgICAgICAgIGlmICghZnJhY3Rpb24p
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnJhY3Rpb24gKj0gNjA7CisgICAg
c3ViZHVyYXRpb25zLnNldFNlY29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgIGZyYWN0
aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9uLCAxKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmcmFjdGlvbiAqPSAxMDAwOworICAgIHN1YmR1cmF0aW9ucy5zZXRN
aWxsaXNlY29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgIGZyYWN0aW9uID0gc3RkOjpm
bW9kKGZyYWN0aW9uLCAxKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBmcmFjdGlvbiAqPSAxMDAwOworICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMo
c3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgIGZyYWN0aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9u
LCAxKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzdWJkdXJh
dGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbiAqIDEwMDApKTsKK30KKwor
Ly8gUGFyc2VUZW1wb3JhbER1cmF0aW9uU3RyaW5nICggaXNvU3RyaW5nICkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsRHVyYXRpb246OlN1
YmR1cmF0aW9ucz4gVGVtcG9yYWxEdXJhdGlvbjo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQoreworICAgIC8vIElTTyA4NjAxIGR1cmF0aW9uIHN0cmlu
Z3MgYXJlIGxpa2UgIi1QMVkyTTNXNERUNUg2TTcuMTIzNDU2Nzg5UyIuIE5vdGVzOgorICAgIC8v
IC0gY2FzZSBpbnNlbnNpdGl2ZQorICAgIC8vIC0gc2lnbjogKyAtIOKIkihVKzIyMTIpCisgICAg
Ly8gLSBzZXBhcmF0b3I6IC4gLAorICAgIC8vIC0gVCBpcyBwcmVzZW50IGlmZiB0aGVyZSBpcyBh
IHRpbWUgcGFydAorICAgIC8vIC0gaW50ZWdyYWwgcGFydHMgY2FuIGhhdmUgYW55IG51bWJlciBv
ZiBkaWdpdHMgYnV0IGZyYWN0aW9uYWwgcGFydHMgaGF2ZSBhdCBtb3N0IDkKKyAgICAvLyAtIGhv
dXJzIGFuZCBtaW51dGVzIGNhbiBoYXZlIGZyYWN0aW9uYWwgcGFydHMgdG9vLCBidXQgb25seSBh
cyB0aGUgTEFTVCBwYXJ0IG9mIHRoZSBzdHJpbmcKKyAgICBpZiAoYnVmZmVyLmxlbmd0aFJlbWFp
bmluZygpIDwgMykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIFN1YmR1cmF0
aW9ucyByZXN1bHQgeyB9OworCisgICAgaW50IGZhY3RvciA9IDE7CisgICAgaWYgKCpidWZmZXIg
PT0gJysnKQorICAgICAgICBidWZmZXIuYWR2YW5jZSgpOworICAgIGVsc2UgaWYgKCpidWZmZXIg
PT0gJy0nIHx8ICpidWZmZXIgPT0gMHgyMjEyKSB7CisgICAgICAgIGZhY3RvciA9IC0xOworICAg
ICAgICBidWZmZXIuYWR2YW5jZSgpOworICAgIH0KKworICAgIGlmICh0b0FTQ0lJVXBwZXIoKmJ1
ZmZlcikgIT0gJ1AnKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYnVmZmVy
LmFkdmFuY2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGRhdGVQYXJ0SW5kZXggPSAwOyBkYXRlUGFy
dEluZGV4IDwgNCAmJiBidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlE
aWdpdCgqYnVmZmVyKTsgYnVmZmVyLmFkdmFuY2UoKSkgeworICAgICAgICB1bnNpZ25lZCBkaWdp
dHMgPSAxOworICAgICAgICB3aGlsZSAoZGlnaXRzIDwgYnVmZmVyLmxlbmd0aFJlbWFpbmluZygp
ICYmIGlzQVNDSUlEaWdpdChidWZmZXJbZGlnaXRzXSkpCisgICAgICAgICAgICBkaWdpdHMrKzsK
KworICAgICAgICBkb3VibGUgaW50ZWdlciA9IGZhY3RvciAqIHBhcnNlSW50KHsgYnVmZmVyLnBv
c2l0aW9uKCksIGRpZ2l0cyB9LCAxMCk7CisgICAgICAgIGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRz
KTsKKyAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgICAgICBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpID09ICdZJyAmJiAh
ZGF0ZVBhcnRJbmRleCkgeworICAgICAgICAgICAgcmVzdWx0LnNldFllYXJzKGludGVnZXIpOwor
ICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAodG9BU0NJ
SVVwcGVyKCpidWZmZXIpID09ICdNJyAmJiBkYXRlUGFydEluZGV4IDwgMikgeworICAgICAgICAg
ICAgcmVzdWx0LnNldE1vbnRocyhpbnRlZ2VyKTsKKyAgICAgICAgICAgIGRhdGVQYXJ0SW5kZXgg
PSAyOworICAgICAgICB9IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnVycgJiYg
ZGF0ZVBhcnRJbmRleCA8IDMpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRXZWVrcyhpbnRlZ2Vy
KTsKKyAgICAgICAgICAgIGRhdGVQYXJ0SW5kZXggPSAzOworICAgICAgICB9IGVsc2UgaWYgKHRv
QVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnRCcpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXREYXlz
KGludGVnZXIpOworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDQ7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoYnVm
ZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAoYnVmZmVyLmxl
bmd0aFJlbWFpbmluZygpIDwgMyB8fCB0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgIT0gJ1QnKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYnVmZmVyLmFkdmFuY2UoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIHRpbWVQYXJ0SW5kZXggPSAwOyB0aW1lUGFydEluZGV4IDwgMyAmJiBidWZm
ZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgqYnVmZmVyKTsgYnVm
ZmVyLmFkdmFuY2UoKSkgeworICAgICAgICB1bnNpZ25lZCBkaWdpdHMgPSAxOworICAgICAgICB3
aGlsZSAoZGlnaXRzIDwgYnVmZmVyLmxlbmd0aFJlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdChi
dWZmZXJbZGlnaXRzXSkpCisgICAgICAgICAgICBkaWdpdHMrKzsKKworICAgICAgICBkb3VibGUg
aW50ZWdlciA9IGZhY3RvciAqIHBhcnNlSW50KHsgYnVmZmVyLnBvc2l0aW9uKCksIGRpZ2l0cyB9
LCAxMCk7CisgICAgICAgIGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRzKTsKKyAgICAgICAgaWYgKGJ1
ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAg
ICBTdHJpbmdWaWV3IGZyYWN0aW9uYWxQYXJ0OworICAgICAgICBpZiAoKmJ1ZmZlciA9PSAnLicg
fHwgKmJ1ZmZlciA9PSAnLCcpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hZHZhbmNlKCk7CisgICAg
ICAgICAgICBkaWdpdHMgPSAwOworICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cyA8IGJ1ZmZlci5s
ZW5ndGhSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoYnVmZmVyW2RpZ2l0c10pKQorICAgICAg
ICAgICAgICAgIGRpZ2l0cysrOworICAgICAgICAgICAgaWYgKCFkaWdpdHMgfHwgZGlnaXRzID4g
OSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgICAgICBm
cmFjdGlvbmFsUGFydCA9IHsgYnVmZmVyLnBvc2l0aW9uKCksIGRpZ2l0cyB9OworICAgICAgICAg
ICAgYnVmZmVyLmFkdmFuY2VCeShkaWdpdHMpOworICAgICAgICAgICAgaWYgKGJ1ZmZlci5hdEVu
ZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpID09ICdIJyAmJiAhdGltZVBhcnRJbmRl
eCkgeworICAgICAgICAgICAgcmVzdWx0LnNldEhvdXJzKGludGVnZXIpOworICAgICAgICAgICAg
aWYgKGZyYWN0aW9uYWxQYXJ0KSB7CisgICAgICAgICAgICAgICAgaGFuZGxlRnJhY3Rpb24ocmVz
dWx0LCBmYWN0b3IsIGZyYWN0aW9uYWxQYXJ0LCBUZW1wb3JhbFVuaXQ6OkhvdXIpOworICAgICAg
ICAgICAgICAgIHRpbWVQYXJ0SW5kZXggPSAzOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgdGltZVBhcnRJbmRleCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAodG9BU0NJSVVw
cGVyKCpidWZmZXIpID09ICdNJyAmJiB0aW1lUGFydEluZGV4IDwgMikgeworICAgICAgICAgICAg
cmVzdWx0LnNldE1pbnV0ZXMoaW50ZWdlcik7CisgICAgICAgICAgICBpZiAoZnJhY3Rpb25hbFBh
cnQpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVGcmFjdGlvbihyZXN1bHQsIGZhY3RvciwgZnJh
Y3Rpb25hbFBhcnQsIFRlbXBvcmFsVW5pdDo6TWludXRlKTsKKyAgICAgICAgICAgICAgICB0aW1l
UGFydEluZGV4ID0gMzsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRpbWVQ
YXJ0SW5kZXggPSAyOworICAgICAgICB9IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVyKSA9
PSAnUycpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTZWNvbmRzKGludGVnZXIpOworICAgICAg
ICAgICAgaWYgKGZyYWN0aW9uYWxQYXJ0KQorICAgICAgICAgICAgICAgIGhhbmRsZUZyYWN0aW9u
KHJlc3VsdCwgZmFjdG9yLCBmcmFjdGlvbmFsUGFydCwgVGVtcG9yYWxVbml0OjpTZWNvbmQpOwor
ICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9IDM7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoYnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKy8vIFRvVGVtcG9yYWxEdXJhdGlvblJlY29yZCAoIHRlbXBvcmFs
RHVyYXRpb25MaWtlICkKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1
cmF0aW9uOjpmcm9tT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
KiBkdXJhdGlvbkxpa2UpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEFTU0VSVCghZHVy
YXRpb25MaWtlLT5pbmhlcml0czxUZW1wb3JhbER1cmF0aW9uPih2bSkpOworCisgICAgU3ViZHVy
YXRpb25zIHJlc3VsdDsKKyAgICBhdXRvIGhhc1JlbGV2YW50UHJvcGVydHkgPSBmYWxzZTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsgaSsrKSB7Cisg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkdXJhdGlvbkxpa2UtPmdldChnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSh2bSwgaSkpOworCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKSB7
CisgICAgICAgICAgICByZXN1bHRbaV0gPSAwOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBoYXNSZWxldmFudFByb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgcmVz
dWx0W2ldID0gdmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICBpZiAoIWlzSW50ZWdlcihyZXN1bHRb
aV0pKSB7CisgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlbXBvcmFsLkR1cmF0aW9uIHByb3BlcnRpZXMgbXVzdCBiZSBpbnRlZ2VycyJfcyk7CisgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFoYXNSZWxl
dmFudFByb3BlcnR5KSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJvYmplY3QgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBUZW1wb3JhbC5EdXJhdGlvbiBw
cm9wZXJ0eSJfcyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworLy8gVG9UZW1wb3JhbER1cmF0aW9uICggaXRlbSApCitUZW1wb3JhbER1cmF0
aW9uKiBUZW1wb3JhbER1cmF0aW9uOjp0b0R1cmF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgaXRlbVZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBp
ZiAoaXRlbVZhbHVlLmluaGVyaXRzPFRlbXBvcmFsRHVyYXRpb24+KHZtKSkKKyAgICAgICAgcmV0
dXJuIGpzQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4oaXRlbVZhbHVlKTsKKworICAgIGlmIChpdGVt
VmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBUZW1w
b3JhbER1cmF0aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgZnJvbU9iamVjdChnbG9i
YWxPYmplY3QsIGFzT2JqZWN0KGl0ZW1WYWx1ZSkpKSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0g
aXRlbVZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICBhdXRvIHBhcnNlZFN1YmR1cmF0aW9ucyA9IHJl
YWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gYnVmZmVyKSAtPiBzdGQ6Om9w
dGlvbmFsPFN1YmR1cmF0aW9ucz4geworICAgICAgICByZXR1cm4gcGFyc2UoYnVmZmVyKTsKKyAg
ICB9KTsKKyAgICBpZiAoIXBhcnNlZFN1YmR1cmF0aW9ucykgeworICAgICAgICB0aHJvd1Jhbmdl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImNvdWxkIG5vdCBwYXJzZSBEdXJhdGlvbiBzdHJp
bmciX3MpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQoZ2xvYmFsT2Jq
ZWN0LCBXVEZNb3ZlKHBhcnNlZFN1YmR1cmF0aW9ucy52YWx1ZSgpKSkpOworfQorCitUZW1wb3Jh
bER1cmF0aW9uKiBUZW1wb3JhbER1cmF0aW9uOjpmcm9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgaXRlbVZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKworICAgIGlmIChpdGVtVmFsdWUuaW5oZXJpdHM8VGVtcG9yYWxEdXJhdGlvbj4odm0p
KSB7CisgICAgICAgIFN1YmR1cmF0aW9ucyBjbG9uZWQgPSBqc0Nhc3Q8VGVtcG9yYWxEdXJhdGlv
bio+KGl0ZW1WYWx1ZSktPm1fc3ViZHVyYXRpb25zOworICAgICAgICByZXR1cm4gVGVtcG9yYWxE
dXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCksIFdU
Rk1vdmUoY2xvbmVkKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRvRHVyYXRpb24oZ2xvYmFsT2Jq
ZWN0LCBpdGVtVmFsdWUpOworfQorCitzdGF0aWMgZG91YmxlIHRvdGFsTmFub3NlY29uZHMoVGVt
cG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zJiBzdWJkdXJhdGlvbnMpCit7CisgICAgYXV0byBo
b3VycyA9IDI0ICogc3ViZHVyYXRpb25zLmRheXMoKSArIHN1YmR1cmF0aW9ucy5ob3VycygpOwor
ICAgIGF1dG8gbWludXRlcyA9IDYwICogaG91cnMgKyBzdWJkdXJhdGlvbnMubWludXRlcygpOwor
ICAgIGF1dG8gc2Vjb25kcyA9IDYwICogbWludXRlcyArIHN1YmR1cmF0aW9ucy5zZWNvbmRzKCk7
CisgICAgYXV0byBtaWxsaXNlY29uZHMgPSAxMDAwICogc2Vjb25kcyArIHN1YmR1cmF0aW9ucy5t
aWxsaXNlY29uZHMoKTsKKyAgICBhdXRvIG1pY3Jvc2Vjb25kcyA9IDEwMDAgKiBtaWxsaXNlY29u
ZHMgKyBzdWJkdXJhdGlvbnMubWljcm9zZWNvbmRzKCk7CisgICAgcmV0dXJuIDEwMDAgKiBtaWNy
b3NlY29uZHMgKyBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKTsKK30KKworSlNWYWx1ZSBUZW1w
b3JhbER1cmF0aW9uOjpjb21wYXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgdmFsdWVPbmUsIEpTVmFsdWUgdmFsdWVUd28pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGF1dG8qIG9uZSA9IHRvRHVyYXRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZU9uZSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGF1dG8qIHR3byA9IHRvRHVy
YXRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZVR3byk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKworICAgIGlmIChvbmUtPnllYXJzKCkgfHwgdHdvLT55ZWFycygpIHx8IG9u
ZS0+bW9udGhzKCkgfHwgdHdvLT5tb250aHMoKSB8fCBvbmUtPndlZWtzKCkgfHwgdHdvLT53ZWVr
cygpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fu
bm90IGNvbXBhcmUgYSBkdXJhdGlvbiBvZiB5ZWFycywgbW9udGhzLCBvciB3ZWVrcyB3aXRob3V0
IGEgcmVsYXRpdmVUbyBvcHRpb24iX3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIGF1dG8gbnNPbmUgPSB0b3RhbE5hbm9zZWNvbmRzKG9uZS0+bV9zdWJkdXJhdGlvbnMpOwor
ICAgIGF1dG8gbnNUd28gPSB0b3RhbE5hbm9zZWNvbmRzKHR3by0+bV9zdWJkdXJhdGlvbnMpOwor
ICAgIHJldHVybiBqc051bWJlcihuc09uZSA+IG5zVHdvID8gMSA6IG5zT25lIDwgbnNUd28gPyAt
MSA6IDApOworfQorCitpbnQgVGVtcG9yYWxEdXJhdGlvbjo6c2lnbihjb25zdCBUZW1wb3JhbER1
cmF0aW9uOjpTdWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9ucykKK3sKKyAgICBmb3IgKGF1dG8gdmFs
dWUgOiBzdWJkdXJhdGlvbnMpIHsKKyAgICAgICAgaWYgKHZhbHVlIDwgMCkKKyAgICAgICAgICAg
IHJldHVybiAtMTsKKworICAgICAgICBpZiAodmFsdWUgPiAwKQorICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1
cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjp3aXRoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBkdXJhdGlvbkxpa2UpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQ7CisgICAgYXV0byBoYXNSZWxldmFudFByb3BlcnR5
ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlRlbXBvcmFsVW5p
dHM7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZHVyYXRpb25MaWtlLT5nZXQoZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUodm0sIGkpKTsKKworICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWQoKSkgeworICAgICAgICAgICAgcmVzdWx0W2ldID0gbV9zdWJkdXJhdGlvbnNbaV07
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGhhc1JlbGV2YW50
UHJvcGVydHkgPSB0cnVlOworICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZS50b051bWJlcihnbG9i
YWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgICAgIGlmICghaXNJbnRlZ2VyKHJlc3VsdFtpXSkpIHsKKyAgICAgICAgICAgIHRocm93UmFu
Z2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydGll
cyBtdXN0IGJlIGludGVnZXJzIl9zKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoIWhhc1JlbGV2YW50UHJvcGVydHkpIHsKKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIm9iamVjdCBtdXN0IGNvbnRhaW4gYXQg
bGVhc3Qgb25lIFRlbXBvcmFsLkR1cmF0aW9uIHByb3BlcnR5Il9zKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitUZW1wb3JhbER1cmF0aW9u
OjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6bmVnYXRlZCgpIGNvbnN0Cit7CisgICAg
U3ViZHVyYXRpb25zIHJlc3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9m
VGVtcG9yYWxVbml0czsgaSsrKQorICAgICAgICByZXN1bHRbaV0gPSAtbV9zdWJkdXJhdGlvbnNb
aV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRp
b25zIFRlbXBvcmFsRHVyYXRpb246OmFicygpIGNvbnN0Cit7CisgICAgU3ViZHVyYXRpb25zIHJl
c3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsg
aSsrKQorICAgICAgICByZXN1bHRbaV0gPSBzdGQ6OmFicyhtX3N1YmR1cmF0aW9uc1tpXSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gRGVmYXVsdFRlbXBvcmFsTGFyZ2VzdFVuaXQgKCB5
ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxp
c2Vjb25kcywgbWljcm9zZWNvbmRzICkKK1RlbXBvcmFsVW5pdCBUZW1wb3JhbER1cmF0aW9uOjps
YXJnZXN0U3ViZHVyYXRpb24oKSBjb25zdAoreworICAgIHVpbnQ4X3QgaW5kZXggPSAwOworICAg
IHdoaWxlIChpbmRleCA8IG51bWJlck9mVGVtcG9yYWxVbml0cyAtIDEgJiYgIW1fc3ViZHVyYXRp
b25zW2luZGV4XSkKKyAgICAgICAgaW5kZXgrKzsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVt
cG9yYWxVbml0PihpbmRleCk7Cit9CisKKy8vIEJhbGFuY2VEdXJhdGlvbiAoIGRheXMsIGhvdXJz
LCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3NlY29u
ZHMsIGxhcmdlc3RVbml0IFsgLCByZWxhdGl2ZVRvIF0gKQordm9pZCBUZW1wb3JhbER1cmF0aW9u
OjpiYWxhbmNlKFN1YmR1cmF0aW9ucyYgc3ViZHVyYXRpb25zLCBUZW1wb3JhbFVuaXQgbGFyZ2Vz
dFVuaXQpCit7CisgICAgYXV0byBuYW5vc2Vjb25kcyA9IHRvdGFsTmFub3NlY29uZHMoc3ViZHVy
YXRpb25zKTsKKyAgICBzdWJkdXJhdGlvbnMuY2xlYXIoKTsKKworICAgIGlmIChsYXJnZXN0VW5p
dCA8PSBUZW1wb3JhbFVuaXQ6OkRheSkgeworICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG5h
bm9zZWNvbmRzUGVyRGF5ID0gMjQuMCAqIDYwICogNjAgKiAxMDAwICogMTAwMCAqIDEwMDA7Cisg
ICAgICAgIHN1YmR1cmF0aW9ucy5zZXREYXlzKHN0ZDo6dHJ1bmMobmFub3NlY29uZHMgLyBuYW5v
c2Vjb25kc1BlckRheSkpOworICAgICAgICBuYW5vc2Vjb25kcyA9IHN0ZDo6Zm1vZChuYW5vc2Vj
b25kcywgbmFub3NlY29uZHNQZXJEYXkpOworICAgIH0KKworICAgIGRvdWJsZSBtaWNyb3NlY29u
ZHMgPSBzdGQ6OnRydW5jKG5hbm9zZWNvbmRzIC8gMTAwMCk7CisgICAgZG91YmxlIG1pbGxpc2Vj
b25kcyA9IHN0ZDo6dHJ1bmMobWljcm9zZWNvbmRzIC8gMTAwMCk7CisgICAgZG91YmxlIHNlY29u
ZHMgPSBzdGQ6OnRydW5jKG1pbGxpc2Vjb25kcyAvIDEwMDApOworICAgIGRvdWJsZSBtaW51dGVz
ID0gc3RkOjp0cnVuYyhzZWNvbmRzIC8gNjApOworICAgIGlmIChsYXJnZXN0VW5pdCA8PSBUZW1w
b3JhbFVuaXQ6OkhvdXIpIHsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRzKHN0
ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlj
cm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVy
YXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZtb2QobWlsbGlzZWNvbmRzLCAxMDAwKSk7Cisg
ICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHN0ZDo6Zm1vZChzZWNvbmRzLCA2MCkpOwor
ICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWludXRlcyhzdGQ6OmZtb2QobWludXRlcywgNjApKTsK
KyAgICAgICAgc3ViZHVyYXRpb25zLnNldEhvdXJzKHN0ZDo6dHJ1bmMobWludXRlcyAvIDYwKSk7
CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSkgewor
ICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjpmbW9kKG5hbm9zZWNvbmRz
LCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMoc3RkOjpmbW9k
KG1pY3Jvc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNv
bmRzKHN0ZDo6Zm1vZChtaWxsaXNlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25z
LnNldFNlY29uZHMoc3RkOjpmbW9kKHNlY29uZHMsIDYwKSk7CisgICAgICAgIHN1YmR1cmF0aW9u
cy5zZXRNaW51dGVzKG1pbnV0ZXMpOworICAgIH0gZWxzZSBpZiAobGFyZ2VzdFVuaXQgPT0gVGVt
cG9yYWxVbml0OjpTZWNvbmQpIHsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRz
KHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0
TWljcm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3Vi
ZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZtb2QobWlsbGlzZWNvbmRzLCAxMDAwKSk7
CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHNlY29uZHMpOworICAgIH0gZWxzZSBp
ZiAobGFyZ2VzdFVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCkgeworICAgICAgICBz
dWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjpmbW9kKG5hbm9zZWNvbmRzLCAxMDAwKSk7
CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMoc3RkOjpmbW9kKG1pY3Jvc2Vj
b25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNvbmRzKG1pbGxp
c2Vjb25kcyk7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBUZW1wb3JhbFVuaXQ6Ok1p
Y3Jvc2Vjb25kKSB7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXROYW5vc2Vjb25kcyhzdGQ6OmZt
b2QobmFub3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pY3Jvc2Vj
b25kcyhtaWNyb3NlY29uZHMpOworICAgIH0gZWxzZQorICAgICAgICBzdWJkdXJhdGlvbnMuc2V0
TmFub3NlY29uZHMobmFub3NlY29uZHMpOworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJh
dGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgb3RoZXJWYWx1ZSkgY29uc3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
YXV0byogb3RoZXIgPSB0b0R1cmF0aW9uKGdsb2JhbE9iamVjdCwgb3RoZXJWYWx1ZSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGF1dG8gbGFyZ2VzdFVuaXQg
PSBzdGF0aWNfY2FzdDxUZW1wb3JhbFVuaXQ+KHN0ZDo6bWluKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KGxhcmdlc3RTdWJkdXJhdGlvbigpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RoZXItPmxhcmdl
c3RTdWJkdXJhdGlvbigpKSkpOworICAgIGlmIChsYXJnZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6
OldlZWspIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJD
YW5ub3QgYWRkIGEgZHVyYXRpb24gb2YgeWVhcnMsIG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBh
IHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBTdWJkdXJhdGlvbnMgcmVzdWx0IHsKKyAgICAgICAgMCwgMCwgMCwgZGF5cygpICsgb3RoZXIt
PmRheXMoKSwKKyAgICAgICAgaG91cnMoKSArIG90aGVyLT5ob3VycygpLCBtaW51dGVzKCkgKyBv
dGhlci0+bWludXRlcygpLCBzZWNvbmRzKCkgKyBvdGhlci0+c2Vjb25kcygpLAorICAgICAgICBt
aWxsaXNlY29uZHMoKSArIG90aGVyLT5taWxsaXNlY29uZHMoKSwgbWljcm9zZWNvbmRzKCkgKyBv
dGhlci0+bWljcm9zZWNvbmRzKCksIG5hbm9zZWNvbmRzKCkgKyBvdGhlci0+bmFub3NlY29uZHMo
KQorICAgIH07CisKKyAgICBiYWxhbmNlKHJlc3VsdCwgbGFyZ2VzdFVuaXQpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1
cmF0aW9uOjpzdWJ0cmFjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG90
aGVyVmFsdWUpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIG90aGVy
ID0gdG9EdXJhdGlvbihnbG9iYWxPYmplY3QsIG90aGVyVmFsdWUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBhdXRvIGxhcmdlc3RVbml0ID0gc3RhdGljX2Nh
c3Q8VGVtcG9yYWxVbml0PihzdGQ6Om1pbihzdGF0aWNfY2FzdDx1aW50OF90PihsYXJnZXN0U3Vi
ZHVyYXRpb24oKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG90aGVyLT5sYXJnZXN0U3ViZHVyYXRp
b24oKSkpKTsKKyAgICBpZiAobGFyZ2VzdFVuaXQgPD0gVGVtcG9yYWxVbml0OjpXZWVrKSB7Cisg
ICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHN1YnRy
YWN0IGEgZHVyYXRpb24gb2YgeWVhcnMsIG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBhIHJlbGF0
aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBTdWJk
dXJhdGlvbnMgcmVzdWx0IHsKKyAgICAgICAgMCwgMCwgMCwgZGF5cygpIC0gb3RoZXItPmRheXMo
KSwKKyAgICAgICAgaG91cnMoKSAtIG90aGVyLT5ob3VycygpLCBtaW51dGVzKCkgLSBvdGhlci0+
bWludXRlcygpLCBzZWNvbmRzKCkgLSBvdGhlci0+c2Vjb25kcygpLAorICAgICAgICBtaWxsaXNl
Y29uZHMoKSAtIG90aGVyLT5taWxsaXNlY29uZHMoKSwgbWljcm9zZWNvbmRzKCkgLSBvdGhlci0+
bWljcm9zZWNvbmRzKCksIG5hbm9zZWNvbmRzKCkgLSBvdGhlci0+bmFub3NlY29uZHMoKQorICAg
IH07CisKKyAgICBiYWxhbmNlKHJlc3VsdCwgbGFyZ2VzdFVuaXQpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKy8vIFJvdW5kRHVyYXRpb24gKCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywg
aG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzLCBuYW5v
c2Vjb25kcywgaW5jcmVtZW50LCB1bml0LCByb3VuZGluZ01vZGUgWyAsIHJlbGF0aXZlVG8gXSAp
Citkb3VibGUgVGVtcG9yYWxEdXJhdGlvbjo6cm91bmQoVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVy
YXRpb25zJiBzdWJkdXJhdGlvbnMsIGRvdWJsZSBpbmNyZW1lbnQsIFRlbXBvcmFsVW5pdCB1bml0
LCBSb3VuZGluZ01vZGUgbW9kZSkKK3sKKyAgICBBU1NFUlQodW5pdCA+PSBUZW1wb3JhbFVuaXQ6
OkRheSk7CisgICAgZG91YmxlIHJlbWFpbmRlciA9IDA7CisKKyAgICBpZiAodW5pdCA9PSBUZW1w
b3JhbFVuaXQ6OkRheSkgeworICAgICAgICBhdXRvIG9yaWdpbmFsRGF5cyA9IHN1YmR1cmF0aW9u
cy5kYXlzKCk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXREYXlzKDApOworICAgICAgICBhdXRv
IG5hbm9zZWNvbmRzID0gdG90YWxOYW5vc2Vjb25kcyhzdWJkdXJhdGlvbnMpOworCisgICAgICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgbmFub3NlY29uZHNQZXJEYXkgPSAyNC4wICogNjAgKiA2MCAq
IDEwMDAgKiAxMDAwICogMTAwMDsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFsRGF5cyA9IG9yaWdp
bmFsRGF5cyArIG5hbm9zZWNvbmRzIC8gbmFub3NlY29uZHNQZXJEYXk7CisgICAgICAgIGF1dG8g
bmV3RGF5cyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbERheXMsIGluY3JlbWVu
dCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxEYXlzIC0gbmV3RGF5czsK
KyAgICAgICAgc3ViZHVyYXRpb25zLnNldERheXMobmV3RGF5cyk7CisgICAgfSBlbHNlIGlmICh1
bml0ID09IFRlbXBvcmFsVW5pdDo6SG91cikgeworICAgICAgICBhdXRvIGZyYWN0aW9uYWxTZWNv
bmRzID0gc3ViZHVyYXRpb25zLnNlY29uZHMoKSArIHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMo
KSAqIDFlLTMgKyBzdWJkdXJhdGlvbnMubWljcm9zZWNvbmRzKCkgKiAxZS02ICsgc3ViZHVyYXRp
b25zLm5hbm9zZWNvbmRzKCkgKiAxZS05OworICAgICAgICBhdXRvIGZyYWN0aW9uYWxIb3VycyA9
IHN1YmR1cmF0aW9ucy5ob3VycygpICsgKHN1YmR1cmF0aW9ucy5taW51dGVzKCkgKyBmcmFjdGlv
bmFsU2Vjb25kcyAvIDYwKSAvIDYwOworICAgICAgICBhdXRvIG5ld0hvdXJzID0gcm91bmROdW1i
ZXJUb0luY3JlbWVudChmcmFjdGlvbmFsSG91cnMsIGluY3JlbWVudCwgbW9kZSk7CisgICAgICAg
IHJlbWFpbmRlciA9IGZyYWN0aW9uYWxIb3VycyAtIG5ld0hvdXJzOworICAgICAgICBzdWJkdXJh
dGlvbnMuc2V0SG91cnMobmV3SG91cnMpOworICAgIH0gZWxzZSBpZiAodW5pdCA9PSBUZW1wb3Jh
bFVuaXQ6Ok1pbnV0ZSkgeworICAgICAgICBhdXRvIGZyYWN0aW9uYWxTZWNvbmRzID0gc3ViZHVy
YXRpb25zLnNlY29uZHMoKSArIHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMoKSAqIDFlLTMgKyBz
dWJkdXJhdGlvbnMubWljcm9zZWNvbmRzKCkgKiAxZS02ICsgc3ViZHVyYXRpb25zLm5hbm9zZWNv
bmRzKCkgKiAxZS05OworICAgICAgICBhdXRvIGZyYWN0aW9uYWxNaW51dGVzID0gc3ViZHVyYXRp
b25zLm1pbnV0ZXMoKSArIGZyYWN0aW9uYWxTZWNvbmRzIC8gNjA7CisgICAgICAgIGF1dG8gbmV3
TWludXRlcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbE1pbnV0ZXMsIGluY3Jl
bWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxNaW51dGVzIC0gbmV3
TWludXRlczsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pbnV0ZXMobmV3TWludXRlcyk7Cisg
ICAgfSBlbHNlIGlmICh1bml0ID09IFRlbXBvcmFsVW5pdDo6U2Vjb25kKSB7CisgICAgICAgIGF1
dG8gZnJhY3Rpb25hbFNlY29uZHMgPSBzdWJkdXJhdGlvbnMuc2Vjb25kcygpICsgc3ViZHVyYXRp
b25zLm1pbGxpc2Vjb25kcygpICogMWUtMyArIHN1YmR1cmF0aW9ucy5taWNyb3NlY29uZHMoKSAq
IDFlLTYgKyBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKSAqIDFlLTk7CisgICAgICAgIGF1dG8g
bmV3U2Vjb25kcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbFNlY29uZHMsIGlu
Y3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxTZWNvbmRzIC0g
bmV3U2Vjb25kczsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldFNlY29uZHMobmV3U2Vjb25kcyk7
CisgICAgfSBlbHNlIGlmICh1bml0ID09IFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQpIHsKKyAg
ICAgICAgYXV0byBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzID0gc3ViZHVyYXRpb25zLm1pbGxpc2Vj
b25kcygpICsgc3ViZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygpICogMWUtMyArIHN1YmR1cmF0aW9u
cy5uYW5vc2Vjb25kcygpICogMWUtNjsKKyAgICAgICAgYXV0byBuZXdNaWxsaXNlY29uZHMgPSBy
b3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0aW9uYWxNaWxsaXNlY29uZHMsIGluY3JlbWVudCwg
bW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgLSBuZXdN
aWxsaXNlY29uZHM7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWxsaXNlY29uZHMobmV3TWls
bGlzZWNvbmRzKTsKKyAgICB9IGVsc2UgaWYgKHVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaWNyb3Nl
Y29uZCkgeworICAgICAgICBhdXRvIGZyYWN0aW9uYWxNaWNyb3NlY29uZHMgPSBzdWJkdXJhdGlv
bnMubWljcm9zZWNvbmRzKCkgKyBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKSAqIDFlLTM7Cisg
ICAgICAgIGF1dG8gbmV3TWljcm9zZWNvbmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFj
dGlvbmFsTWljcm9zZWNvbmRzLCBpbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIg
PSBmcmFjdGlvbmFsTWljcm9zZWNvbmRzIC0gbmV3TWljcm9zZWNvbmRzOworICAgICAgICBzdWJk
dXJhdGlvbnMuc2V0TWljcm9zZWNvbmRzKG5ld01pY3Jvc2Vjb25kcyk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYXV0byBuZXdOYW5vc2Vjb25kcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoc3Vi
ZHVyYXRpb25zLm5hbm9zZWNvbmRzKCksIGluY3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFp
bmRlciA9IHN1YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygpIC0gbmV3TmFub3NlY29uZHM7CisgICAg
ICAgIHN1YmR1cmF0aW9ucy5zZXROYW5vc2Vjb25kcyhuZXdOYW5vc2Vjb25kcyk7CisgICAgfQor
CisgICAgZm9yIChhdXRvIGkgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih1bml0KSArIDF1OyBpIDwg
bnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBpKyspCisgICAgICAgIHN1YmR1cmF0aW9uc1tpXSA9IDA7
CisKKyAgICByZXR1cm4gcmVtYWluZGVyOworfQorCitkb3VibGUgVGVtcG9yYWxEdXJhdGlvbjo6
dG90YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zVmFsdWUp
IGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBvcHRpb25zID0g
aW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworCisgICAgU3RyaW5nIHVuaXRTdHJpbmcgPSBp
bnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+
dW5pdCwgeyB9LCBudWxscHRyLCBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCAwKTsKKworICAgIGF1dG8gdW5pdCA9IHRlbXBvcmFsVW5pdFR5cGUodW5pdFN0cmluZyk7
CisgICAgaWYgKCF1bml0KSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAidW5pdCBpcyBhbiBpbnZhbGlkIFRlbXBvcmFsIHVuaXQiX3MpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAodW5pdC52YWx1ZSgpID4gVGVtcG9yYWxVbml0OjpZ
ZWFyICYmICh5ZWFycygpIHx8IG1vbnRocygpIHx8IHdlZWtzKCkgfHwgKGRheXMoKSAmJiB1bml0
LnZhbHVlKCkgPCBUZW1wb3JhbFVuaXQ6OkRheSkpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHRvdGFsIGEgZHVyYXRpb24gb2YgeWVhcnMs
IG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBhIHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBTdWJkdXJhdGlvbnMgY29weSA9IG1fc3ViZHVy
YXRpb25zOworICAgIGJhbGFuY2UoY29weSwgdW5pdC52YWx1ZSgpKTsKKyAgICBkb3VibGUgcmVt
YWluZGVyID0gcm91bmQoY29weSwgMSwgdW5pdC52YWx1ZSgpLCBSb3VuZGluZ01vZGU6OlRydW5j
KTsKKyAgICByZXR1cm4gY29weVtzdGF0aWNfY2FzdDx1aW50OF90Pih1bml0LnZhbHVlKCkpXSAr
IHJlbWFpbmRlcjsKK30KKworU3RyaW5nIFRlbXBvcmFsRHVyYXRpb246OnRvU3RyaW5nKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKSBjb25zdAorewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGludGxHZXRPcHRp
b25zT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKCFvcHRpb25zKQorICAgICAgICByZXR1cm4g
dG9TdHJpbmcoKTsKKworICAgIFByZWNpc2lvbkRhdGEgZGF0YSA9IHNlY29uZHNTdHJpbmdQcmVj
aXNpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworICAgIEFTU0VSVChkYXRhLnVuaXQgPj0gVGVtcG9yYWxVbml0OjpTZWNvbmQp
OworCisgICAgYXV0byByb3VuZGluZ01vZGUgPSBpbnRsT3B0aW9uPFJvdW5kaW5nTW9kZT4oZ2xv
YmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5yb3VuZGluZ01vZGUsCisgICAg
ICAgIHsgeyAiY2VpbCJfcywgUm91bmRpbmdNb2RlOjpDZWlsIH0sIHsgImZsb29yIl9zLCBSb3Vu
ZGluZ01vZGU6OkZsb29yIH0sIHsgInRydW5jIl9zLCBSb3VuZGluZ01vZGU6OlRydW5jIH0sIHsg
ImhhbGZFeHBhbmQiX3MsIFJvdW5kaW5nTW9kZTo6SGFsZkV4cGFuZCB9IH0sCisgICAgICAgICJy
b3VuZGluZ01vZGUgbXVzdCBiZSBlaXRoZXIgXCJjZWlsXCIsIFwiZmxvb3JcIiwgXCJ0cnVuY1wi
LCBvciBcImhhbGZFeHBhbmRcIiJfcywgUm91bmRpbmdNb2RlOjpUcnVuYyk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIC8vIE5vIG5lZWQgdG8gbWFrZSBhIG5l
dyBvYmplY3QgaWYgd2Ugd2VyZSBnaXZlbiBleHBsaWNpdCBkZWZhdWx0cy4KKyAgICBpZiAoIWRh
dGEucHJlY2lzaW9uICYmIHJvdW5kaW5nTW9kZSA9PSBSb3VuZGluZ01vZGU6OlRydW5jKQorICAg
ICAgICByZXR1cm4gdG9TdHJpbmcoKTsKKworICAgIFN1YmR1cmF0aW9ucyBjb3B5ID0gbV9zdWJk
dXJhdGlvbnM7CisgICAgcm91bmQoY29weSwgZGF0YS5pbmNyZW1lbnQsIGRhdGEudW5pdCwgcm91
bmRpbmdNb2RlKTsKKyAgICByZXR1cm4gdG9TdHJpbmcoY29weSwgZGF0YS5wcmVjaXNpb24pOwor
fQorCisvLyBUZW1wb3JhbER1cmF0aW9uVG9TdHJpbmcgKCB5ZWFycywgbW9udGhzLCB3ZWVrcywg
ZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRz
LCBuYW5vc2Vjb25kcywgcHJlY2lzaW9uICkKK1N0cmluZyBUZW1wb3JhbER1cmF0aW9uOjp0b1N0
cmluZyhjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9ucywg
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcHJlY2lzaW9uKQoreworICAgIEFTU0VSVCghcHJlY2lz
aW9uIHx8IHByZWNpc2lvbi52YWx1ZSgpIDwgMTApOworCisgICAgYXV0byBiYWxhbmNlZE1pY3Jv
c2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5taWNyb3NlY29uZHMoKSArIHN0ZDo6dHJ1bmMoc3ViZHVy
YXRpb25zLm5hbm9zZWNvbmRzKCkgLyAxMDAwKTsKKyAgICBhdXRvIGJhbGFuY2VkTmFub3NlY29u
ZHMgPSBzdGQ6OmZtb2Qoc3ViZHVyYXRpb25zLm5hbm9zZWNvbmRzKCksIDEwMDApOworICAgIGF1
dG8gYmFsYW5jZWRNaWxsaXNlY29uZHMgPSBzdWJkdXJhdGlvbnMubWlsbGlzZWNvbmRzKCkgKyBz
dGQ6OnRydW5jKGJhbGFuY2VkTWljcm9zZWNvbmRzIC8gMTAwMCk7CisgICAgYmFsYW5jZWRNaWNy
b3NlY29uZHMgPSBzdGQ6OmZtb2QoYmFsYW5jZWRNaWNyb3NlY29uZHMsIDEwMDApOworICAgIGF1
dG8gYmFsYW5jZWRTZWNvbmRzID0gc3ViZHVyYXRpb25zLnNlY29uZHMoKSArIHN0ZDo6dHJ1bmMo
YmFsYW5jZWRNaWxsaXNlY29uZHMgLyAxMDAwKTsKKyAgICBiYWxhbmNlZE1pbGxpc2Vjb25kcyA9
IHN0ZDo6Zm1vZChiYWxhbmNlZE1pbGxpc2Vjb25kcywgMTAwMCk7CisKKyAgICAvLyB0ZW1wb3Jh
cnkgaGFjayEgcGVuZGluZyBzcGVjIGRpc2N1c3Npb24gYWJvdXQgbWF4aW11bSB2YWx1ZXMKKyAg
ICBhdXRvIGZvcm1hdEludGVnZXIgPSBbXShkb3VibGUgdmFsdWUpIC0+IGRvdWJsZSB7CisgICAg
ICAgIGF1dG8gYWJzVmFsdWUgPSBzdGQ6OmFicyh2YWx1ZSk7CisgICAgICAgIHJldHVybiBVTkxJ
S0VMWShhYnNWYWx1ZSA+IG1heFNhZmVJbnRlZ2VyKCkpID8gbWF4U2FmZUludGVnZXIoKSA6IGFi
c1ZhbHVlOworICAgIH07CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICBhdXRv
IHNpZ24gPSBUZW1wb3JhbER1cmF0aW9uOjpzaWduKHN1YmR1cmF0aW9ucyk7CisgICAgaWYgKHNp
Z24gPCAwKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScpOworCisgICAgYnVpbGRlci5hcHBl
bmQoJ1AnKTsKKyAgICBpZiAoc3ViZHVyYXRpb25zLnllYXJzKCkpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGZvcm1hdEludGVnZXIoc3ViZHVyYXRpb25zLnllYXJzKCkpLCAnWScpOworICAgIGlm
IChzdWJkdXJhdGlvbnMubW9udGhzKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdElu
dGVnZXIoc3ViZHVyYXRpb25zLm1vbnRocygpKSwgJ00nKTsKKyAgICBpZiAoc3ViZHVyYXRpb25z
LndlZWtzKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoc3ViZHVyYXRp
b25zLndlZWtzKCkpLCAnVycpOworICAgIGlmIChzdWJkdXJhdGlvbnMuZGF5cygpKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy5kYXlzKCkpLCAnRCcp
OworCisgICAgLy8gVGhlIHplcm8gdmFsdWUgaXMgZGlzcGxheWVkIGluIHNlY29uZHMuCisgICAg
YXV0byB1c2VzU2Vjb25kcyA9IGJhbGFuY2VkU2Vjb25kcyB8fCBiYWxhbmNlZE1pbGxpc2Vjb25k
cyB8fCBiYWxhbmNlZE1pY3Jvc2Vjb25kcyB8fCBiYWxhbmNlZE5hbm9zZWNvbmRzIHx8ICFzaWdu
OworICAgIGlmICghc3ViZHVyYXRpb25zLmhvdXJzKCkgJiYgIXN1YmR1cmF0aW9ucy5taW51dGVz
KCkgJiYgIXVzZXNTZWNvbmRzKQorICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwor
CisgICAgYnVpbGRlci5hcHBlbmQoJ1QnKTsKKyAgICBpZiAoc3ViZHVyYXRpb25zLmhvdXJzKCkp
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoc3ViZHVyYXRpb25zLmhvdXJz
KCkpLCAnSCcpOworICAgIGlmIChzdWJkdXJhdGlvbnMubWludXRlcygpKQorICAgICAgICBidWls
ZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy5taW51dGVzKCkpLCAnTScpOwor
ICAgIGlmICh1c2VzU2Vjb25kcykgeworICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRl
Z2VyKGJhbGFuY2VkU2Vjb25kcykpOworCisgICAgICAgIGF1dG8gZnJhY3Rpb24gPSBzdGQ6OmFi
cyhiYWxhbmNlZE1pbGxpc2Vjb25kcykgKiAxZTYgKyBzdGQ6OmFicyhiYWxhbmNlZE1pY3Jvc2Vj
b25kcykgKiAxZTMgKyBzdGQ6OmFicyhiYWxhbmNlZE5hbm9zZWNvbmRzKTsKKyAgICAgICAgaWYg
KCghcHJlY2lzaW9uICYmIGZyYWN0aW9uKSB8fCAocHJlY2lzaW9uICYmIHByZWNpc2lvbi52YWx1
ZSgpKSkgeworICAgICAgICAgICAgYXV0byBwYWRkZWQgPSBtYWtlU3RyaW5nKCcuJywgcGFkKCcw
JywgOSwgZnJhY3Rpb24pKTsKKyAgICAgICAgICAgIGlmIChwcmVjaXNpb24pCisgICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQocGFkZGVkLmxlZnQocGFkZGVkLmxlbmd0aCgpIC0gKDkgLSBw
cmVjaXNpb24udmFsdWUoKSkpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGF1dG8gbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzID0gcGFkZGVkLmxlbmd0aCgpOworICAg
ICAgICAgICAgICAgIHdoaWxlIChwYWRkZWRbbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzIC0g
MV0gPT0gJzAnKQorICAgICAgICAgICAgICAgICAgICBsZW5ndGhXaXRob3V0VHJhaWxpbmdaZXJv
ZXMtLTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChwYWRkZWQubGVmdChsZW5ndGhX
aXRob3V0VHJhaWxpbmdaZXJvZXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCdTJyk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWFlYjA0NDMyNjEy
MGYwNTg0NjAxODBiMjU3NmUzMzkzOGZhZDU0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaApAQCAtMCwwICsxLDEwNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlbXBvcmFsT2Jq
ZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUZW1wb3JhbER1cmF0aW9uIGZpbmFs
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBK
U05vbkZpbmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNw
YWNlQWNjZXNzIG1vZGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0udGVtcG9yYWxEdXJhdGlvblNwYWNlPG1vZGU+
KCk7CisgICAgfQorCisgICAgc3RydWN0IFN1YmR1cmF0aW9ucyB7CisgICAgICAgIHVzaW5nIGNv
bnN0X2l0ZXJhdG9yID0gc3RkOjphcnJheTxkb3VibGUsIG51bWJlck9mVGVtcG9yYWxVbml0cz46
OmNvbnN0X2l0ZXJhdG9yOworCisjZGVmaW5lIEpTQ19ERUZJTkVfU1VCRFVSQVRJT05fRklFTEQo
bmFtZSwgY2FwaXRhbGl6ZWROYW1lKSBcCisgICAgICAgIGRvdWJsZSBuYW1lIyNzKCkgY29uc3Qg
eyByZXR1cm4gZGF0YVtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OmNhcGl0YWxp
emVkTmFtZSldOyB9IFwKKyAgICAgICAgdm9pZCBzZXQjI2NhcGl0YWxpemVkTmFtZSMjcyhkb3Vi
bGUgdmFsdWUpIHsgZGF0YVtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OmNhcGl0
YWxpemVkTmFtZSldID0gdmFsdWU7IH0KKyAgICAgICAgSlNDX1RFTVBPUkFMX1VOSVRTKEpTQ19E
RUZJTkVfU1VCRFVSQVRJT05fRklFTEQpOworI3VuZGVmIEpTQ19ERUZJTkVfU1VCRFVSQVRJT05f
RklFTEQKKworICAgICAgICBkb3VibGUmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIGRh
dGFbaV07IH0KKyAgICAgICAgY29uc3QgZG91YmxlJiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25z
dCB7IHJldHVybiBkYXRhW2ldOyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gZGF0YS5iZWdpbigpOyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIGRhdGEuZW5kKCk7IH0KKyAgICAgICAgdm9pZCBjbGVhcigpIHsgZGF0
YS5maWxsKDApOyB9CisKKyAgICAgICAgc3RkOjphcnJheTxkb3VibGUsIG51bWJlck9mVGVtcG9y
YWxVbml0cz4gZGF0YTsKKyAgICB9OworCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb24qIGNy
ZWF0ZShWTSYsIFN0cnVjdHVyZSosIFN1YmR1cmF0aW9ucyYmKTsKKyAgICBzdGF0aWMgVGVtcG9y
YWxEdXJhdGlvbiogY3JlYXRlSWZWYWxpZChKU0dsb2JhbE9iamVjdCosIFN1YmR1cmF0aW9ucyYm
LCBTdHJ1Y3R1cmUqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5G
TzsKKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uKiB0b0R1cmF0aW9uKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSk7CisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb24qIGZyb20oSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBjb21wYXJlKEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CisKKyNkZWZpbmUgSlNDX0RFRklORV9URU1QT1JB
TF9EVVJBVElPTl9GSUVMRChuYW1lLCBjYXBpdGFsaXplZE5hbWUpIFwKKyAgICBkb3VibGUgbmFt
ZSMjcygpIGNvbnN0IHsgcmV0dXJuIG1fc3ViZHVyYXRpb25zLm5hbWUjI3MoKTsgfSBcCisgICAg
dm9pZCBzZXQjI2NhcGl0YWxpemVkTmFtZSMjcyhkb3VibGUgdmFsdWUpIHsgbV9zdWJkdXJhdGlv
bnMuc2V0IyNjYXBpdGFsaXplZE5hbWUjI3ModmFsdWUpOyB9CisgICAgSlNDX1RFTVBPUkFMX1VO
SVRTKEpTQ19ERUZJTkVfVEVNUE9SQUxfRFVSQVRJT05fRklFTEQpOworI3VuZGVmIEpTQ19ERUZJ
TkVfVEVNUE9SQUxfRFVSQVRJT05fRklFTEQKKworICAgIGludCBzaWduKCkgY29uc3QgeyByZXR1
cm4gc2lnbihtX3N1YmR1cmF0aW9ucyk7IH0KKworICAgIFN1YmR1cmF0aW9ucyB3aXRoKEpTR2xv
YmFsT2JqZWN0KiwgSlNPYmplY3QqIGR1cmF0aW9uTGlrZSkgY29uc3Q7CisgICAgU3ViZHVyYXRp
b25zIG5lZ2F0ZWQoKSBjb25zdDsKKyAgICBTdWJkdXJhdGlvbnMgYWJzKCkgY29uc3Q7CisgICAg
U3ViZHVyYXRpb25zIGFkZChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpIGNvbnN0OworICAgIFN1
YmR1cmF0aW9ucyBzdWJ0cmFjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpIGNvbnN0OworICAg
IGRvdWJsZSB0b3RhbChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgb3B0aW9ucykgY29uc3Q7Cisg
ICAgU3RyaW5nIHRvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBvcHRpb25zKSBjb25z
dDsKKyAgICBTdHJpbmcgdG9TdHJpbmcoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcHJlY2lzaW9u
ID0gc3RkOjpudWxsb3B0KSBjb25zdCB7IHJldHVybiB0b1N0cmluZyhtX3N1YmR1cmF0aW9ucywg
cHJlY2lzaW9uKTsgfQorCitwcml2YXRlOgorICAgIFRlbXBvcmFsRHVyYXRpb24oVk0mLCBTdHJ1
Y3R1cmUqLCBTdWJkdXJhdGlvbnMmJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxTdWJkdXJhdGlvbnM+IHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4mKTsKKyAgICBzdGF0aWMgU3ViZHVyYXRpb25zIGZyb21PYmplY3QoSlNHbG9iYWxPYmpl
Y3QqLCBKU09iamVjdCopOworCisgICAgc3RhdGljIGludCBzaWduKGNvbnN0IFN1YmR1cmF0aW9u
cyYpOworICAgIHN0YXRpYyB2b2lkIGJhbGFuY2UoU3ViZHVyYXRpb25zJiwgVGVtcG9yYWxVbml0
IGxhcmdlc3RVbml0KTsKKyAgICBzdGF0aWMgZG91YmxlIHJvdW5kKFN1YmR1cmF0aW9ucyYsIGRv
dWJsZSBpbmNyZW1lbnQsIFRlbXBvcmFsVW5pdCwgUm91bmRpbmdNb2RlKTsKKyAgICBzdGF0aWMg
U3RyaW5nIHRvU3RyaW5nKGNvbnN0IFN1YmR1cmF0aW9ucyYsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHByZWNpc2lvbik7CisKKyAgICBUZW1wb3JhbFVuaXQgbGFyZ2VzdFN1YmR1cmF0aW9uKCkg
Y29uc3Q7CisKKyAgICBTdWJkdXJhdGlvbnMgbV9zdWJkdXJhdGlvbnM7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1ZDA0OWU2
YzdmMzU0YzRhZDhhMmIwMzRjY2MxZDJlMGM5YTZiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3Bw
CkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCisjaW5jbHVkZSAiVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU1RBVElDX0FT
U0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rv
cik7CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25D
b25zdHJ1Y3RvckZ1bmNGcm9tKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1bmNDb21wYXJlKTsKKworfQorCisjaW5jbHVkZSAi
VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAi
RnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAmdGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yVGFi
bGUsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVj
dG9yKSB9OworCisvKiBTb3VyY2UgZm9yIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5sdXQu
aAorQGJlZ2luIHRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvclRhYmxlCisgIGZyb20gICAgICAg
ICAgICAgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yRnVuY0Zyb20gICAgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gMQorICBjb21wYXJlICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3RvckZ1bmNDb21wYXJlICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKK0BlbmQKKyov
CisKK1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvciogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVj
dG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZSogZHVyYXRpb25Qcm90b3R5cGUpCit7CisgICAgYXV0byogY29uc3RydWN0b3Ig
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I+
KHZtLmhlYXApKSBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7Cisg
ICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBkdXJhdGlvblByb3RvdHlwZSk7Cisg
ICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQorCitTdHJ1Y3R1cmUqIFRlbXBvcmFsRHVyYXRpb25D
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSW50ZXJuYWxGdW5jdGlv
blR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworc3RhdGljIEpTQ19ERUNMQVJF
X0hPU1RfRlVOQ1RJT04oY2FsbFRlbXBvcmFsRHVyYXRpb24pOworc3RhdGljIEpTQ19ERUNMQVJF
X0hPU1RfRlVOQ1RJT04oY29uc3RydWN0VGVtcG9yYWxEdXJhdGlvbik7CisKK1RlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3Rvcjo6VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNhbGxUZW1wb3Jh
bER1cmF0aW9uLCBjb25zdHJ1Y3RUZW1wb3JhbER1cmF0aW9uKQoreworfQorCit2b2lkIFRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlKiBkdXJhdGlvblByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSwgMCwgIkR1cmF0aW9uIl9zLCBQcm9wZXJ0eUFkZGl0aW9uTW9kZTo6V2l0aG91
dFN0cnVjdHVyZVRyYW5zaXRpb24pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIGR1cmF0aW9uUHJvdG90eXBlLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgZHVyYXRpb25Qcm90b3R5cGUtPnB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvciwg
dGhpcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0VGVtcG9yYWxEdXJhdGlv
biwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIG5ld1RhcmdldCA9IGFzT2Jq
ZWN0KGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
SlNDX0dFVF9ERVJJVkVEX1NUUlVDVFVSRSh2bSwgZHVyYXRpb25TdHJ1Y3R1cmUsIG5ld1Rhcmdl
dCwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zIHN1YmR1cmF0aW9u
cyB7IH07CisgICAgYXV0byBjb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCksIG51bWJlck9mVGVtcG9yYWxVbml0cyk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHN1YmR1cmF0aW9uc1tpXSA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoaSkudG9JbnRlZ2VyT3JJbmZpbml0eShnbG9iYWxPYmplY3QpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIGlmICghc3RkOjpp
c2Zpbml0ZShzdWJkdXJhdGlvbnNbaV0pKQorICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1SYW5n
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0aWVz
IG11c3QgYmUgZmluaXRlIl9zKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQoZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHN1
YmR1cmF0aW9ucyksIHN0cnVjdHVyZSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
Y2FsbFRlbXBvcmFsRHVyYXRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJEdXJhdGlvbiIpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1bmNGcm9tLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6ZnJvbShnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1bmNDb21wYXJlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y29tcGFyZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bER1cmF0aW9uQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MjQ1YTMxMDY5NWFjZDM1
YjVkNmFhNTZlOTAwNGY3ZTNiNzAzODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaApAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW50ZXJu
YWxGdW5jdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZTsKKworY2xhc3MgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yIGZpbmFsIDog
cHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBJbnRl
cm5hbEZ1bmN0aW9uOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAg
ICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1
cmUqLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERF
Q0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Io
Vk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZSopOworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlvbik7CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMGE3OGEw
MWMxODIxM2VkNTA5NWMwOGZmZWYxNjVlZmIxZTY5Nzk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAK
QEAgLTAsMCArMSwzODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlRnVuY1dpdGgpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZUZ1bmNOZWdhdGVkKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWJzKTsKK3N0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWRkKTsK
K3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVGdW5jU3VidHJhY3QpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb3RhbCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nKTsKK3N0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9K
U09OKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVGdW5jVG9Mb2NhbGVTdHJpbmcpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNWYWx1ZU9mKTsKK3N0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJZZWFy
cyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlR2V0dGVyTW9udGhzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJXZWVrcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVf
Q1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyRGF5cyk7CitzdGF0
aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0
dGVySG91cnMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9H
RVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNlY29uZHMpOworc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1p
bGxpc2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlR2V0dGVyTWljcm9zZWNvbmRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9D
VVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJOYW5vc2Vjb25kcyk7
CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlR2V0dGVyU2lnbik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlR2V0dGVyQmxhbmspOworCit9CisKKyNpbmNsdWRlICJUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xh
c3NJbmZvIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlbXBvcmFsLkR1
cmF0aW9uIiwgJkJhc2U6OnNfaW5mbywgJmR1cmF0aW9uUHJvdG90eXBlVGFibGUsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSkgfTsKKworLyog
U291cmNlIGZvciBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmx1dC5oCitAYmVnaW4gZHVyYXRp
b25Qcm90b3R5cGVUYWJsZQorICB3aXRoICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVGdW5jV2l0aCAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgbmVnYXRl
ZCAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY05lZ2F0ZWQgICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAwCisgIGFicyAgICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZUZ1bmNBYnMgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICBh
ZGQgICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWRkICAgICAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgc3VidHJhY3QgICAgICAgICBUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlRnVuY1N1YnRyYWN0ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAx
CisgIHRvdGFsICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb3RhbCAg
ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICB0b1N0cmluZyAgICAgICAgIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9TdHJpbmcgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uIDAKKyAgdG9KU09OICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1Rv
SlNPTiAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIHRvTG9jYWxlU3RyaW5nICAg
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb0xvY2FsZVN0cmluZyAgICAgRG9udEVudW18
RnVuY3Rpb24gMAorICB2YWx1ZU9mICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVG
dW5jVmFsdWVPZiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgeWVhcnMgICAgICAg
ICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyWWVhcnMgICAgICAgICAgICBEb250
RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBtb250aHMgICAgICAgICAgIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNb250aHMgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5
fEN1c3RvbUFjY2Vzc29yCisgIHdlZWtzICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUdldHRlcldlZWtzICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNz
b3IKKyAgZGF5cyAgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyRGF5
cyAgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBob3VycyAg
ICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJIb3VycyAgICAgICAgICAg
IERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIG1pbnV0ZXMgICAgICAgICAgVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMgICAgICAgICAgRG9udEVudW18UmVh
ZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgc2Vjb25kcyAgICAgICAgICBUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlR2V0dGVyU2Vjb25kcyAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21B
Y2Nlc3NvcgorICBtaWxsaXNlY29uZHMgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0
ZXJNaWxsaXNlY29uZHMgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIG1p
Y3Jvc2Vjb25kcyAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pY3Jvc2Vjb25k
cyAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbmFub3NlY29uZHMgICAg
ICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTmFub3NlY29uZHMgICAgICBEb250RW51
bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBzaWduICAgICAgICAgICAgIFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVHZXR0ZXJTaWduICAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1
c3RvbUFjY2Vzc29yCisgIGJsYW5rICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUdldHRlckJsYW5rICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IK
K0BlbmQKKyovCisKK1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGF1
dG8qIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGU+KHZtLmhlYXApKSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKHZtLCBzdHJ1
Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBw
cm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworfQorCitUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBB
U1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhP
VVRfVFJBTlNJVElPTigpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUZ1bmNXaXRoLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRv
KiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJv
dG90eXBlLndpdGggY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxp
emVkIGFzIGEgRHVyYXRpb24iX3MpOworICAgIAorICAgIEpTVmFsdWUgZHVyYXRpb25MaWtlID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBpZiAoIWR1cmF0aW9uTGlrZS5pc09iamVjdCgp
KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
Rmlyc3QgYXJndW1lbnQgdG8gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLndpdGggbXVzdCBi
ZSBhbiBvYmplY3QiX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVl
OjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxpZChnbG9iYWxPYmplY3QsIGR1
cmF0aW9uLT53aXRoKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoZHVyYXRpb25MaWtlKSkpKSk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVu
Y05lZ2F0ZWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNE
eW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubmVnYXRlZCBj
YWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJh
dGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgpLCBkdXJhdGlvbi0+
bmVnYXRlZCgpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlRnVuY0FicywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVy
YXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50
aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlw
ZS5hYnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFz
IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1
cmF0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKSwgZHVy
YXRpb24tPmFicygpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlRnVuY0FkZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byog
ZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3Rv
dHlwZS5hZGQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVk
IGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1Zh
bHVlOjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxpZChnbG9iYWxPYmplY3Qs
IGR1cmF0aW9uLT5hZGQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpKTsK
K30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVG
dW5jU3VidHJhY3QsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0g
anNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc3VidHJh
Y3QgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEg
RHVyYXRpb24iX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxpZChnbG9iYWxPYmplY3QsIGR1cmF0
aW9uLT5zdWJ0cmFjdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSkpOwor
fQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1
bmNUb3RhbCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5
bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7
CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b3RhbCBjYWxs
ZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlv
biJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihkdXJhdGlvbi0+dG90YWwoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVGdW5jVG9TdHJpbmcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1
cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5
cGUudG9TdHJpbmcgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxp
emVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1cmF0aW9uLT50b1N0cmluZyhnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb0pTT04sIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0
aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1w
b3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudG9KU09OIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90
IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1cmF0aW9uLT50b1N0cmluZygpKSk7Cit9CisK
Ky8vIFRoaXMgd2lsbCBiZSBwYXJ0IG9mIHRoZSBFQ01BLTQwMiBJbnRsLkR1cmF0aW9uRm9ybWF0
IHByb3Bvc2FsOyB1bnRpbCB0aGVuLCB3ZSBqdXN0IGZvbGxvdyBFQ01BLTI2MiBpbiBtaW1pY2tp
bmcgdG9KU09OLgorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVGdW5jVG9Mb2NhbGVTdHJpbmcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8q
IGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90
b3R5cGUudG9Mb2NhbGVTdHJpbmcgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0
IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyh2bSwgZHVyYXRpb24tPnRvU3RyaW5nKCkpKTsKK30KKworSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVmFsdWVPZiwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnZhbHVlT2YgbXVzdCBub3QgYmUgY2FsbGVk
Il9zKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJZZWFycywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGUueWVhcnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4g
b2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+eWVhcnMoKSkpOworfQorCitKU0NfREVGSU5F
X0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1vbnRocywgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24g
PSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUu
bW9udGhzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBh
cyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
ZHVyYXRpb24tPm1vbnRocygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyV2Vla3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1w
b3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAo
IWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLndlZWtzIGNhbGxlZCBvbiB2YWx1
ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPndlZWtzKCkpKTsK
K30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVH
ZXR0ZXJEYXlzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBh
dXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0
aW9uLnByb3RvdHlwZS5kYXlzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBp
bml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoZHVyYXRpb24tPmRheXMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9H
RVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckhvdXJzLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1p
Y0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5ob3VycyBjYWxs
ZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlv
biJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5o
b3VycygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlR2V0dGVyTWludXRlcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRp
b24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24p
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJU
ZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubWludXRlcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdz
IG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taW51dGVzKCkpKTsKK30KKwor
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJT
ZWNvbmRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRv
KiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9u
LnByb3RvdHlwZS5zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBp
bml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoZHVyYXRpb24tPnNlY29uZHMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RP
TV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbGxpc2Vjb25kcywgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24g
PSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUu
bWlsbGlzZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFs
aXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoZHVyYXRpb24tPm1pbGxpc2Vjb25kcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9N
X0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWljcm9zZWNvbmRzLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5t
aWNyb3NlY29uZHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxp
emVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihkdXJhdGlvbi0+bWljcm9zZWNvbmRzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJOYW5vc2Vjb25kcywgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBq
c0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubmFu
b3NlY29uZHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVk
IGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihkdXJhdGlvbi0+bmFub3NlY29uZHMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRU
RVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNpZ24sIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2Fz
dDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAg
ICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnNpZ24gY2FsbGVkIG9u
IHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3Mp
OworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+c2lnbigp
KSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlR2V0dGVyQmxhbmssIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwu
RHVyYXRpb24ucHJvdG90eXBlLmJsYW5rIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9i
amVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKCFkdXJhdGlvbi0+c2lnbigpKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4Nzc1ZWViMDdiZTYwMmNmYWVm
MDM4Nzk0ZTk3YzYyOTM1NGQzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlIGZp
bmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2Ug
PSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CisgICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0K
KworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBjcmVhdGUoVk0mLCBTdHJ1
Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgor
ICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcAppbmRleCBhZjE0
MzY3NWYxZTRjNjI4N2VhMmJlMThmNDMzZWViZTM3MmE3MTdkLi4yZWY3OWQxMGJjZjc5NWFhYzZl
YjQ5OWJjZGJjMTcxZWQzZGJjOWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIwLDEwICsyMSwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlbXBvcmFsT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5o
IgorI2luY2x1ZGUgIkludGxPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
SW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgorI2luY2x1ZGUgIlRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGUuaCIKICNpbmNsdWRlICJUZW1wb3JhbE5vdy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTM3LDYgKzQyLDEzIEBAIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZU5vd09iamVjdChWTSYgdm0sIEpT
T2JqZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIFRlbXBvcmFsTm93OjpjcmVhdGUodm0sIFRlbXBv
cmFsTm93OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCkpOwogfQogCitzdGF0aWMg
SlNWYWx1ZSBjcmVhdGVEdXJhdGlvbkNvbnN0cnVjdG9yKFZNJiB2bSwgSlNPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBUZW1wb3JhbE9iamVjdCogdGVtcG9yYWxPYmplY3QgPSBqc0Nhc3Q8VGVtcG9y
YWxPYmplY3QqPihvYmplY3QpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0
ZW1wb3JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0KHZtKTsKKyAgICByZXR1cm4gVGVtcG9yYWxEdXJh
dGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25Q
cm90b3R5cGUoKSksIGpzQ2FzdDxUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKj4oZ2xvYmFsT2Jq
ZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2luY2x1ZGUgIlRlbXBvcmFsT2JqZWN0Lmx1dC5oIgpA
QCAtNDYsNiArNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIC8qIFNvdXJjZSBmb3IgVGVtcG9yYWxP
YmplY3QubHV0LmgKIEBiZWdpbiB0ZW1wb3JhbE9iamVjdFRhYmxlCiAgIE5vdyAgICAgICAgICAg
IGNyZWF0ZU5vd09iamVjdCAgICAgICAgICAgICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFj
aworICBEdXJhdGlvbiAgICAgICBjcmVhdGVEdXJhdGlvbkNvbnN0cnVjdG9yICAgICAgIERvbnRF
bnVtfFByb3BlcnR5Q2FsbGJhY2sKIEBlbmQKICovCiAKQEAgLTc1LDQgKzg4LDE1OSBAQCB2b2lk
IFRlbXBvcmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgSlNDX1RPX1NUUklO
R19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7CiB9CiAKK3N0YXRpYyBTdHJpbmdWaWV3IHNpbmd1
bGFyVW5pdChTdHJpbmdWaWV3IHVuaXQpCit7CisgICAgLy8gUGx1cmFscyBhcmUgYWxsb3dlZCwg
YnV0IHRoYW5rZnVsbHkgdGhleSdyZSBhbGwganVzdCBhIHNpbXBsZSAtcy4KKyAgICByZXR1cm4g
dW5pdC5lbmRzV2l0aCgicyIpID8gdW5pdC5sZWZ0KHVuaXQubGVuZ3RoKCkgLSAxKSA6IHVuaXQ7
Cit9CisKK3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1wb3JhbFVuaXRUeXBlKFN0cmlu
Z1ZpZXcgdW5pdCkKK3sKKyAgICBTdHJpbmdWaWV3IHNpbmd1bGFyID0gc2luZ3VsYXJVbml0KHVu
aXQpOworCisgICAgaWYgKHNpbmd1bGFyID09ICJ5ZWFyIikKKyAgICAgICAgcmV0dXJuIFRlbXBv
cmFsVW5pdDo6WWVhcjsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm1vbnRoIikKKyAgICAgICAgcmV0
dXJuIFRlbXBvcmFsVW5pdDo6TW9udGg7CisgICAgaWYgKHNpbmd1bGFyID09ICJ3ZWVrIikKKyAg
ICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6V2VlazsKKyAgICBpZiAoc2luZ3VsYXIgPT0gImRh
eSIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OkRheTsKKyAgICBpZiAoc2luZ3VsYXIg
PT0gImhvdXIiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpIb3VyOworICAgIGlmIChz
aW5ndWxhciA9PSAibWludXRlIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TWludXRl
OworICAgIGlmIChzaW5ndWxhciA9PSAic2Vjb25kIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFs
VW5pdDo6U2Vjb25kOworICAgIGlmIChzaW5ndWxhciA9PSAibWlsbGlzZWNvbmQiKQorICAgICAg
ICByZXR1cm4gVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZDsKKyAgICBpZiAoc2luZ3VsYXIgPT0g
Im1pY3Jvc2Vjb25kIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQ7
CisgICAgaWYgKHNpbmd1bGFyID09ICJuYW5vc2Vjb25kIikKKyAgICAgICAgcmV0dXJuIFRlbXBv
cmFsVW5pdDo6TmFub3NlY29uZDsKKyAgICAKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQor
CisvLyBUb1NtYWxsZXN0VGVtcG9yYWxVbml0ICggbm9ybWFsaXplZE9wdGlvbnMsIGRpc2FsbG93
ZWRVbml0cywgZmFsbGJhY2sgKQorc3RkOjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFs
U21hbGxlc3RVbml0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRp
b25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VGVtcG9yYWxVbml0PiBkaXNhbGxvd2VkVW5pdHMp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzbWFsbGVzdFVuaXQgPSBpbnRs
U3RyaW5nT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+c21h
bGxlc3RVbml0LCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAoIXNtYWxsZXN0VW5pdCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gdW5pdFR5cGUgPSB0ZW1wb3JhbFVu
aXRUeXBlKHNtYWxsZXN0VW5pdCk7CisgICAgaWYgKCF1bml0VHlwZSkgeworICAgICAgICB0aHJv
d1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInNtYWxsZXN0VW5pdCBpcyBhbiBpbnZh
bGlkIFRlbXBvcmFsIHVuaXQiX3MpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IH0KKworICAgIGlmIChkaXNhbGxvd2VkVW5pdHMuc2l6ZSgpICYmIHN0ZDo6ZmluZChkaXNhbGxv
d2VkVW5pdHMuYmVnaW4oKSwgZGlzYWxsb3dlZFVuaXRzLmVuZCgpLCB1bml0VHlwZS52YWx1ZSgp
KSAhPSBkaXNhbGxvd2VkVW5pdHMuZW5kKCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJzbWFsbGVzdFVuaXQgaXMgYSBkaXNhbGxvd2VkIHVuaXQiX3Mp
OworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiB1bml0
VHlwZTsKK30KKworLy8gR2V0U3RyaW5nT3JOdW1iZXJPcHRpb24obm9ybWFsaXplZE9wdGlvbnMs
ICJmcmFjdGlvbmFsU2Vjb25kRGlnaXRzIiwgwqsgImF1dG8iIMK7LCAwLCA5LCAiYXV0byIpCitz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmREaWdpdHMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGlmICghb3B0aW9ucykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRpb25zLT5nZXQoZ2xvYmFsT2JqZWN0LCB2
bS5wcm9wZXJ0eU5hbWVzLT5mcmFjdGlvbmFsU2Vjb25kRGlnaXRzKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgaWYgKHZhbHVl
LmlzTnVtYmVyKCkpIHsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUuYXNOdW1i
ZXIoKTsKKyAgICAgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IDkpIHsK
KyAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZnJhY3Rp
b25hbFNlY29uZERpZ2l0cyBpcyBvdXQgb2YgcmFuZ2UiX3MpOworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oZG91YmxlVmFsdWUpOworICAgIH0KKworICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgIGlmIChzdHJpbmdWYWx1ZSAhPSAiYXV0byIp
CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZnJhY3Rpb25h
bFNlY29uZERpZ2l0cyBpcyBvdXQgb2YgcmFuZ2UiX3MpOworCisgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKK30KKworLy8gVG9TZWNvbmRzU3RyaW5nUHJlY2lzaW9uICggbm9ybWFsaXplZE9wdGlv
bnMgKQorUHJlY2lzaW9uRGF0YSBzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBhdXRvIHNtYWxsZXN0VW5pdCA9IHRlbXBvcmFsU21hbGxlc3RVbml0KGdsb2JhbE9i
amVjdCwgb3B0aW9ucywgeyBUZW1wb3JhbFVuaXQ6OlllYXIsIFRlbXBvcmFsVW5pdDo6TW9udGgs
IFRlbXBvcmFsVW5pdDo6V2VlaywgVGVtcG9yYWxVbml0OjpEYXksIFRlbXBvcmFsVW5pdDo6SG91
ciwgVGVtcG9yYWxVbml0OjpNaW51dGUgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKworICAgIGlmIChzbWFsbGVzdFVuaXQpIHsKKyAgICAgICAgc3dpdGNoIChzbWFs
bGVzdFVuaXQudmFsdWUoKSkgeworICAgICAgICBjYXNlIFRlbXBvcmFsVW5pdDo6U2Vjb25kOgor
ICAgICAgICAgICAgcmV0dXJuIHsgMCwgVGVtcG9yYWxVbml0OjpTZWNvbmQsIDEgfTsKKyAgICAg
ICAgY2FzZSBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kOgorICAgICAgICAgICAgcmV0dXJuIHsg
MywgVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCwgMSB9OworICAgICAgICBjYXNlIFRlbXBvcmFs
VW5pdDo6TWljcm9zZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4geyA2LCBUZW1wb3JhbFVuaXQ6
Ok1pY3Jvc2Vjb25kLCAxIH07CisgICAgICAgIGNhc2UgVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25k
OgorICAgICAgICAgICAgcmV0dXJuIHsgOSwgVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kLCAxIH07
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1
dG8gcHJlY2lzaW9uID0gdGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25kRGlnaXRzKGdsb2JhbE9iamVj
dCwgb3B0aW9ucyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
IGlmICghcHJlY2lzaW9uKQorICAgICAgICByZXR1cm4geyBzdGQ6Om51bGxvcHQsIFRlbXBvcmFs
VW5pdDo6TmFub3NlY29uZCwgMSB9OworCisgICAgdW5zaWduZWQgZGlnaXRzID0gcHJlY2lzaW9u
LnZhbHVlKCk7CisgICAgaWYgKCFkaWdpdHMpCisgICAgICAgIHJldHVybiB7IDAsIFRlbXBvcmFs
VW5pdDo6U2Vjb25kLCAxIH07CisKKyAgICBpZiAoZGlnaXRzIDw9IDMpCisgICAgICAgIHJldHVy
biB7IGRpZ2l0cywgVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCwgc3RkOjpwb3coMTAsIDMgLSBk
aWdpdHMpIH07CisKKyAgICBpZiAoZGlnaXRzIDw9IDYpCisgICAgICAgIHJldHVybiB7IGRpZ2l0
cywgVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCwgc3RkOjpwb3coMTAsIDYgLSBkaWdpdHMpIH07
CisKKyAgICBBU1NFUlQoZGlnaXRzIDw9IDkpOworICAgIHJldHVybiB7IGRpZ2l0cywgVGVtcG9y
YWxVbml0OjpOYW5vc2Vjb25kLCBzdGQ6OnBvdygxMCwgOSAtIGRpZ2l0cykgfTsKK30KKworLy8g
Um91bmROdW1iZXJUb0luY3JlbWVudCAoIHgsIGluY3JlbWVudCwgcm91bmRpbmdNb2RlICkKK2Rv
dWJsZSByb3VuZE51bWJlclRvSW5jcmVtZW50KGRvdWJsZSB4LCBkb3VibGUgaW5jcmVtZW50LCBS
b3VuZGluZ01vZGUgbW9kZSkKK3sKKyAgICBhdXRvIHF1b3RpZW50ID0geCAvIGluY3JlbWVudDsK
KyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIFJvdW5kaW5nTW9kZTo6Q2VpbDoKKyAgICAg
ICAgcmV0dXJuIC1zdGQ6OmZsb29yKC1xdW90aWVudCkgKiBpbmNyZW1lbnQ7CisgICAgY2FzZSBS
b3VuZGluZ01vZGU6OkZsb29yOgorICAgICAgICByZXR1cm4gc3RkOjpmbG9vcihxdW90aWVudCkg
KiBpbmNyZW1lbnQ7CisgICAgY2FzZSBSb3VuZGluZ01vZGU6OlRydW5jOgorICAgICAgICByZXR1
cm4gc3RkOjp0cnVuYyhxdW90aWVudCkgKiBpbmNyZW1lbnQ7CisgICAgY2FzZSBSb3VuZGluZ01v
ZGU6OkhhbGZFeHBhbmQ6CisgICAgICAgIHJldHVybiBzdGQ6OnJvdW5kKHF1b3RpZW50KSAqIGlu
Y3JlbWVudDsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmgKaW5kZXggMWVlOTk5NGMyYjhjMDVl
NDZkMTYxMDZhNjZmMDJiOTc1OGI4YjI4My4uY2JjN2QzZTUwNDk5MGFiZmIyY2YyNjBkNWI3Y2M3
YmRhN2RmNDk4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVt
cG9yYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bE9iamVjdC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgSWdh
bGlhLCBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBA
IC0yMyw2ICsyNCwyNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2RlZmluZSBKU0NfVEVNUE9S
QUxfVU5JVFMobWFjcm8pIFwKKyAgICBtYWNybyh5ZWFyLCBZZWFyKSBcCisgICAgbWFjcm8obW9u
dGgsIE1vbnRoKSBcCisgICAgbWFjcm8od2VlaywgV2VlaykgXAorICAgIG1hY3JvKGRheSwgRGF5
KSBcCisgICAgbWFjcm8oaG91ciwgSG91cikgXAorICAgIG1hY3JvKG1pbnV0ZSwgTWludXRlKSBc
CisgICAgbWFjcm8oc2Vjb25kLCBTZWNvbmQpIFwKKyAgICBtYWNybyhtaWxsaXNlY29uZCwgTWls
bGlzZWNvbmQpIFwKKyAgICBtYWNybyhtaWNyb3NlY29uZCwgTWljcm9zZWNvbmQpIFwKKyAgICBt
YWNybyhuYW5vc2Vjb25kLCBOYW5vc2Vjb25kKSBcCisKK2VudW0gY2xhc3MgVGVtcG9yYWxVbml0
IDogdWludDhfdCB7CisjZGVmaW5lIEpTQ19ERUZJTkVfVEVNUE9SQUxfVU5JVF9FTlVNKG5hbWUs
IGNhcGl0YWxpemVkTmFtZSkgY2FwaXRhbGl6ZWROYW1lLAorICAgIEpTQ19URU1QT1JBTF9VTklU
UyhKU0NfREVGSU5FX1RFTVBPUkFMX1VOSVRfRU5VTSkKKyN1bmRlZiBKU0NfREVGSU5FX1RFTVBP
UkFMX1VOSVRfRU5VTQorfTsKKyNkZWZpbmUgSlNDX0NPVU5UX1RFTVBPUkFMX1VOSVRTKG5hbWUs
IGNhcGl0YWxpemVkTmFtZSkgKyAxCitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9m
VGVtcG9yYWxVbml0cyA9IDAgSlNDX1RFTVBPUkFMX1VOSVRTKEpTQ19DT1VOVF9URU1QT1JBTF9V
TklUUyk7CisjdW5kZWYgSlNDX0NPVU5UX1RFTVBPUkFMX1VOSVRTCisKIGNsYXNzIFRlbXBvcmFs
T2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVz
aW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwpAQCAtNDUsNCArNjcsMjMgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiB9OwogCitlbnVtIGNsYXNzIFJvdW5kaW5n
TW9kZSA6IHVpbnQ4X3QgeworICAgIENlaWwsCisgICAgRmxvb3IsCisgICAgVHJ1bmMsCisgICAg
SGFsZkV4cGFuZAorfTsKKworc3RydWN0IFByZWNpc2lvbkRhdGEgeworICAgIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IHByZWNpc2lvbjsKKyAgICBUZW1wb3JhbFVuaXQgdW5pdDsKKyAgICBkb3Vi
bGUgaW5jcmVtZW50OworfTsKKworc3RkOjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFs
VW5pdFR5cGUoU3RyaW5nVmlldyk7CitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5pdD4gdGVtcG9y
YWxTbWFsbGVzdFVuaXQoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucywgc3RkOjpp
bml0aWFsaXplcl9saXN0PFRlbXBvcmFsVW5pdD4gZGlzYWxsb3dlZFVuaXRzKTsKK3N0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IHRlbXBvcmFsRnJhY3Rpb25hbFNlY29uZERpZ2l0cyhKU0dsb2JhbE9i
amVjdCosIEpTT2JqZWN0KiBvcHRpb25zKTsKK1ByZWNpc2lvbkRhdGEgc2Vjb25kc1N0cmluZ1By
ZWNpc2lvbihKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBvcHRpb25zKTsKK2RvdWJsZSByb3Vu
ZE51bWJlclRvSW5jcmVtZW50KGRvdWJsZSwgZG91YmxlIGluY3JlbWVudCwgUm91bmRpbmdNb2Rl
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
aW5kZXggMWRlYTZhMTNjYjRjNDI5YjliMDcxOThiYWI2YzQ0ZjMxNDY5ZDA2OC4uODMxZDNmMmVk
M2EzMjdjZmZiMzY4ZWYxNjNiMWE4YWI2ZjdjODE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcApAQCAtMTYyLDYgKzE2Miw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4u
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3ltYm9sT2JqZWN0
LmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgogI2luY2x1ZGUgIlRlc3RSdW5uZXJV
dGlscy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQcm9m
aWxlci5oIgpAQCAtMTYxNyw2ICsxNjE4LDcgQEAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKGludGxSZWxhdGl2ZVRpbWVGb3JtYXRTcGFjZSwgaW50bFJlbGF0aXYKIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudEl0ZXJhdG9y
U3BhY2UsIGludGxTZWdtZW50SXRlcmF0b3JIZWFwQ2VsbFR5cGUuZ2V0KCksIEludGxTZWdtZW50
SXRlcmF0b3IpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNl
Z21lbnRlclNwYWNlLCBpbnRsU2VnbWVudGVySGVhcENlbGxUeXBlLmdldCgpLCBJbnRsU2VnbWVu
dGVyKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50
c1NwYWNlLCBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGUuZ2V0KCksIEludGxTZWdtZW50cykKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh0ZW1wb3JhbER1cmF0aW9uU3Bh
Y2UsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIFRlbXBvcmFsRHVyYXRpb24pCiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpz
VG9XYXNtSUNDYWxsZWVTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUb1dhc21JQ0Nh
bGxlZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJs
eUNvZGVCbG9ja1NwYWNlLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5nZXQoKSwg
SlNXZWJBc3NlbWJseUNvZGVCbG9jaykgLy8gSGFzaDoweDlhZDk5NWNkCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAppbmRleCBiY2VkOTg0M2ZjZTgyNjIwZTg4Yjk3NTAxODNhZWI2MTU1NjI2
MDY5Li5hYmRhNzJlOTQzYTkyNWY0ZWY3NjAzZTI1MGUzZDA2Y2FlMDQxNzIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTE4NSw2ICsxODUsNyBAQCBjbGFzcyBTdHJ1Y3R1cmU7
CiBjbGFzcyBSZWdFeHA7CiAjZW5kaWYKIGNsYXNzIFN5bWJvbDsKK2NsYXNzIFRlbXBvcmFsRHVy
YXRpb247CiBjbGFzcyBUeXBlZEFycmF5Q29udHJvbGxlcjsKIGNsYXNzIFVubGlua2VkQ29kZUJs
b2NrOwogY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOwpAQCAtNjE1LDYgKzYxNiw3IEBAIHB1
YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxTZWdtZW50
SXRlcmF0b3JTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGlu
dGxTZWdtZW50ZXJTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KGludGxTZWdtZW50c1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIodGVtcG9yYWxEdXJhdGlvblNwYWNlKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGpzVG9XYXNtSUNDYWxsZWVTcGFjZSkK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5Q29kZUJs
b2NrU3BhY2UpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDhiMWE1YTlkZTIzNzZlNzU3MjA2OGExN2M4MDdjMmNmOTc4ZGExZTAuLjE4NTUz
Mjk2N2VkMTg5ZGVkNTRkOTJmY2VlM2JlOWJmMDRmNjY2MjUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEt
MDgtMjYgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAg
IFtKU0NdIEltcGxlbWVudCBUZW1wb3JhbC5EdXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4NTMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvdGVtcG9yYWwtZHVyYXRpb24uanM6
IEFkZGVkLgorCiAyMDIxLTA4LTE3ICBNaWtoYWlsIFIuIEdhZGVsaGEgIDxtaWtoYWlsQGlnYWxp
YS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gU2tpcCBmYWlsaW5nIE1JUFMgdGVzdHMKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3RlbXBvcmFsLWR1cmF0aW9uLmpzIGIvSlNUZXN0cy9z
dHJlc3MvdGVtcG9yYWwtZHVyYXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJkYmM0ODQ5ZWQ3YTE3ZjA2
MGQxNmY2MGVmMDAyZGE4ODk0MDdhOAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNz
L3RlbXBvcmFsLWR1cmF0aW9uLmpzCkBAIC0wLDAgKzEsMjU4IEBACisvL0AgcmVxdWlyZU9wdGlv
bnMoIi0tdXNlVGVtcG9yYWw9MSIpCisKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0
ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKGBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfWApOworfQorCitmdW5j
dGlvbiBzaG91bGROb3RUaHJvdyhmdW5jKSB7CisgICAgZnVuYygpOworfQorCitmdW5jdGlvbiBz
aG91bGRUaHJvdyhmdW5jLCBlcnJvclR5cGUpIHsKKyAgICBsZXQgZXJyb3I7CisgICAgdHJ5IHsK
KyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOwor
ICAgIH0KKworICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgZXJyb3JUeXBlKSkKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2Vycm9yVHlwZS5uYW1lfSFgKTsKK30KKworc2hv
dWxkQmUoVGVtcG9yYWwuRHVyYXRpb24gaW5zdGFuY2VvZiBGdW5jdGlvbiwgdHJ1ZSk7CitzaG91
bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5sZW5ndGgsIDApOworc2hvdWxkQmUoT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihUZW1wb3JhbC5EdXJhdGlvbiwgJ3Byb3RvdHlwZScpLndyaXRh
YmxlLCBmYWxzZSk7CitzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFRl
bXBvcmFsLkR1cmF0aW9uLCAncHJvdG90eXBlJykuZW51bWVyYWJsZSwgZmFsc2UpOworc2hvdWxk
QmUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihUZW1wb3JhbC5EdXJhdGlvbiwgJ3By
b3RvdHlwZScpLmNvbmZpZ3VyYWJsZSwgZmFsc2UpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9y
YWwuRHVyYXRpb24oKSwgVHlwZUVycm9yKTsKKworc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0
aW9uKCkgaW5zdGFuY2VvZiBUZW1wb3JhbC5EdXJhdGlvbiwgdHJ1ZSk7Cit7CisgICAgY2xhc3Mg
RGVyaXZlZER1cmF0aW9uIGV4dGVuZHMgVGVtcG9yYWwuRHVyYXRpb24ge30KKworICAgIGNvbnN0
IGRkID0gbmV3IERlcml2ZWREdXJhdGlvbigpOworICAgIHNob3VsZEJlKGRkIGluc3RhbmNlb2Yg
RGVyaXZlZER1cmF0aW9uLCB0cnVlKTsKKyAgICBzaG91bGRCZShkZCBpbnN0YW5jZW9mIFRlbXBv
cmFsLkR1cmF0aW9uLCB0cnVlKTsKKyAgICBzaG91bGRCZShkZC5uZWdhdGVkLCBUZW1wb3JhbC5E
dXJhdGlvbi5wcm90b3R5cGUubmVnYXRlZCk7CisgICAgc2hvdWxkQmUoT2JqZWN0LmdldFByb3Rv
dHlwZU9mKGRkKSwgRGVyaXZlZER1cmF0aW9uLnByb3RvdHlwZSk7CisgICAgc2hvdWxkQmUoT2Jq
ZWN0LmdldFByb3RvdHlwZU9mKERlcml2ZWREdXJhdGlvbi5wcm90b3R5cGUpLCBUZW1wb3JhbC5E
dXJhdGlvbi5wcm90b3R5cGUpOworfQorCitzaG91bGRUaHJvdygoKSA9PiBuZXcgVGVtcG9yYWwu
RHVyYXRpb24oMSwgLTEpLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IG5ldyBUZW1w
b3JhbC5EdXJhdGlvbihJbmZpbml0eSksIFJhbmdlRXJyb3IpOworCitjb25zdCBmaWVsZHMgPSBb
J3llYXJzJywgJ21vbnRocycsICd3ZWVrcycsICdkYXlzJywgJ2hvdXJzJywgJ21pbnV0ZXMnLCAn
c2Vjb25kcycsICdtaWxsaXNlY29uZHMnLCAnbWljcm9zZWNvbmRzJywgJ25hbm9zZWNvbmRzJ107
Citjb25zdCB6ZXJvID0gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKCk7Citjb25zdCBwb3MgPSBuZXcg
VGVtcG9yYWwuRHVyYXRpb24oMSwyLDMsNCw1LDYsNyw4LDksMTApOworY29uc3QgbmVnID0gbmV3
IFRlbXBvcmFsLkR1cmF0aW9uKC0xLC0yLC0zLC00LC01LC02LC03LC04LC05LC0xMCk7CisKK2Zp
ZWxkcy5mb3JFYWNoKChmaWVsZCwgaSkgPT4geworICAgIHNob3VsZFRocm93KCgpID0+IFRlbXBv
cmFsLkR1cmF0aW9uLnByb3RvdHlwZVtmaWVsZF0sIFR5cGVFcnJvcik7CisgICAgc2hvdWxkQmUo
emVyb1tmaWVsZF0sIDApOworICAgIHNob3VsZEJlKHBvc1tmaWVsZF0sIGkgKyAxKTsKKyAgICBz
aG91bGRCZShuZWdbZmllbGRdLCAtaSAtIDEpOworfSk7CisKK3Nob3VsZFRocm93KCgpID0+IFRl
bXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5zaWduLCBUeXBlRXJyb3IpOworc2hvdWxkQmUoemVy
by5zaWduLCAwKTsKK3Nob3VsZEJlKHBvcy5zaWduLCAxKTsKK3Nob3VsZEJlKG5lZy5zaWduLCAt
MSk7CisKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5ibGFu
aywgVHlwZUVycm9yKTsKK3Nob3VsZEJlKHplcm8uYmxhbmssIHRydWUpOworc2hvdWxkQmUocG9z
LmJsYW5rLCBmYWxzZSk7CitzaG91bGRCZShuZWcuYmxhbmssIGZhbHNlKTsKKworc2hvdWxkQmUo
VGVtcG9yYWwuRHVyYXRpb24uZnJvbS5sZW5ndGgsIDEpOworc2hvdWxkVGhyb3coKCkgPT4gVGVt
cG9yYWwuRHVyYXRpb24uZnJvbSgpLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRl
bXBvcmFsLkR1cmF0aW9uLmZyb20oe30pLCBUeXBlRXJyb3IpOworeworICAgIGNvbnN0IGJhZFN0
cmluZ3MgPSBbCisgICAgICAgICcnLCAnUCcsICdQMScsICdQVCcsICdQMVlUJywgJ1BUMScsCisg
ICAgICAgICdQMVcxWScsICAnUFQxUzFNJywKKyAgICAgICAgJ1AxLjFZJywgJ1BUMS4xSDFNJywg
J1BUMS4xTTFTJywKKyAgICAgICAgJ1BUMS4xMTExMTExMTExSCcsICdQVDEuMTExMTExMTExMU0n
LCAnUFQxLjExMTExMTExMTFTJywKKyAgICAgICAgYFAke0FycmF5KDMwOSkuZmlsbCg5KS5qb2lu
KCcnKX1ZYAorICAgIF07CisgICAgZm9yIChjb25zdCBiYWRTdHJpbmcgaW4gYmFkU3RyaW5ncykK
KyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbShiYWRTdHJp
bmcpLCBSYW5nZUVycm9yKTsKKyAgICAKKyAgICBjb25zdCBmcm9tU3RyaW5nID0gVGVtcG9yYWwu
RHVyYXRpb24uZnJvbSgnUDFZMk0zVzREVDVINk03LjAwODAwOTAxMFMnKTsKKworICAgIGNvbnN0
IGR1cmF0aW9uTGlrZSA9IHt9OworICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaSkgPT4geyBk
dXJhdGlvbkxpa2VbZmllbGRdID0gaSArIDE7IH0pOworICAgIGNvbnN0IGZyb21EdXJhdGlvbkxp
a2UgPSBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKGR1cmF0aW9uTGlrZSk7CisKKyAgICBmb3IgKGNv
bnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAgICAgICBzaG91bGRCZShmcm9tU3RyaW5nW2ZpZWxk
XSwgcG9zW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKGZyb21EdXJhdGlvbkxpa2VbZmllbGRd
LCBwb3NbZmllbGRdKTsKKyAgICB9Cit9CitzaG91bGROb3RUaHJvdygoKSA9PiBUZW1wb3JhbC5E
dXJhdGlvbi5mcm9tKGBQJHtBcnJheSgzMDgpLmZpbGwoOSkuam9pbignJyl9WWApKTsKK3Nob3Vs
ZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ+KIknAxeTJtM3c0ZHQ1aDZtNy4wMDgwMDkwMTBz
JykudG9TdHJpbmcoKSwgJy1QMVkyTTNXNERUNUg2TTcuMDA4MDA5MDFTJyk7CitzaG91bGRCZShU
ZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCcrUDFZMkRUM0g0LjBTJykudG9TdHJpbmcoKSwgJ1AxWTJE
VDNINFMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1BUMS4wMzEyNUgnKS50
b1N0cmluZygpLCAnUFQxSDFNNTIuNVMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZy
b20oJ1BUMS4wMzEyNU0nKS50b1N0cmluZygpLCAnUFQxTTEuODc1UycpOworCitjb25zdCBwb3NB
YnNvbHV0ZSA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwxLDIsMyw0LDUsNiw3KTsKKwor
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZS5sZW5ndGgsIDIpOworc2hvdWxkVGhy
b3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSgpLCBSYW5nZUVycm9yKTsKK3Nob3Vs
ZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoe30pLCBUeXBlRXJyb3IpOwor
c2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh6ZXJvKSwgUmFuZ2VF
cnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHplcm8s
IHt9KSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNv
bXBhcmUoeyB5ZWFyczogMSB9LCB6ZXJvKSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9
PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHsgbW9udGhzOiAxIH0sIHplcm8pLCBSYW5nZUVy
cm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoeyB3ZWVr
czogMSB9LCB6ZXJvKSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5E
dXJhdGlvbi5jb21wYXJlKHplcm8sIHsgeWVhcnM6IDEgfSksIFJhbmdlRXJyb3IpOworc2hvdWxk
VGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh6ZXJvLCB7IG1vbnRoczogMSB9
KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21w
YXJlKHplcm8sIHsgd2Vla3M6IDEgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkQmUoVGVtcG9yYWwu
RHVyYXRpb24uY29tcGFyZShwb3NBYnNvbHV0ZSwgcG9zQWJzb2x1dGUpLCAwKTsKK3Nob3VsZEJl
KFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUocG9zQWJzb2x1dGUsIHplcm8pLCAxKTsKK3Nob3Vs
ZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoemVybywgcG9zQWJzb2x1dGUpLCAtMSk7Citz
aG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKCdQVDg2NDAwUycsICdQMUQnKSwgMCk7
CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS53aXRoLmxlbmd0aCwgMSk7
CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUud2l0aC5jYWxs
KHt9LCB7IHllYXJzOiAxIH0pLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby53
aXRoKCksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLndpdGgoe30pLCBUeXBl
RXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby53aXRoKHsgeWVhcnM6IDEuMSB9KSwgUmFu
Z2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBwb3Mud2l0aCh7IHllYXJzOiAtMSB9KSwgUmFu
Z2VFcnJvcik7Cit7CisgICAgY29uc3QgZnVsbHlVcGRhdGVkID0gcG9zLndpdGgobmVnKTsKKyAg
ICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAgICAgICBzaG91bGRCZSh6ZXJvLndp
dGgoeyBbZmllbGRdOiAxIH0pW2ZpZWxkXSwgMSk7CisgICAgICAgIHNob3VsZEJlKGZ1bGx5VXBk
YXRlZFtmaWVsZF0sIG5lZ1tmaWVsZF0pOworICAgIH0KK30KKworc2hvdWxkQmUoVGVtcG9yYWwu
RHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQubGVuZ3RoLCAwKTsKK3Nob3VsZFRocm93KCgpID0+
IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVkLmNhbGwoe30pLCBUeXBlRXJyb3Ip
OworeworICAgIGNvbnN0IG5lZ2F0ZWRaZXJvID0gemVyby5uZWdhdGVkKCk7CisgICAgY29uc3Qg
bmVnYXRlZFBvcyA9IHBvcy5uZWdhdGVkKCk7CisgICAgY29uc3QgbmVnYXRlZE5lZyA9IG5lZy5u
ZWdhdGVkKCk7CisgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHsKKyAgICAgICAgc2hv
dWxkQmUobmVnYXRlZFplcm9bZmllbGRdLCB6ZXJvW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJl
KG5lZ2F0ZWROZWdbZmllbGRdLCBwb3NbZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUobmVnYXRl
ZFBvc1tmaWVsZF0sIG5lZ1tmaWVsZF0pOworICAgIH0KK30KKworc2hvdWxkQmUoVGVtcG9yYWwu
RHVyYXRpb24ucHJvdG90eXBlLmFicy5sZW5ndGgsIDApOworc2hvdWxkVGhyb3coKCkgPT4gVGVt
cG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmFicy5jYWxsKHt9KSwgVHlwZUVycm9yKTsKK3sKKyAg
ICBjb25zdCBhYnNaZXJvID0gemVyby5hYnMoKTsKKyAgICBjb25zdCBhYnNQb3MgPSBwb3MuYWJz
KCk7CisgICAgY29uc3QgYWJzTmVnID0gbmVnLmFicygpOworICAgIGZvciAoY29uc3QgZmllbGQg
b2YgZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJlKGFic1plcm9bZmllbGRdLCB6ZXJvW2ZpZWxk
XSk7CisgICAgICAgIHNob3VsZEJlKGFic1Bvc1tmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgICAg
ICBzaG91bGRCZShhYnNOZWdbZmllbGRdLCBwb3NbZmllbGRdKTsKKyAgICB9Cit9CisKK2ZvciAo
Y29uc3QgbWV0aG9kIG9mIFsnYWRkJywgJ3N1YnRyYWN0J10pIHsKKyAgICBzaG91bGRCZShUZW1w
b3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbbWV0aG9kXS5sZW5ndGgsIDEpOworICAgIHNob3VsZFRo
cm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZVttZXRob2RdLmNhbGwoeyBob3Vy
czogMSB9KSwgVHlwZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiB6ZXJvW21ldGhvZF0o
KSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gemVyb1ttZXRob2RdKHt9KSwg
VHlwZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiB6ZXJvW21ldGhvZF0oeyB5ZWFyczog
MSB9KSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gemVyb1ttZXRob2RdKHsg
bW9udGhzOiAxIH0pLCBSYW5nZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiB6ZXJvW21l
dGhvZF0oeyB3ZWVrczogMSB9KSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4g
cG9zW21ldGhvZF0oeyBzZWNvbmRzOiAxIH0pLCBSYW5nZUVycm9yKTsKK30KK3sKKyAgICBjb25z
dCBwb3NEdXJhdGlvbkxpa2UgPSB7IGRheXM6IDEsIGhvdXJzOiAyLCBtaW51dGVzOiAzLCBzZWNv
bmRzOiA0LCBtaWxsaXNlY29uZHM6IDUsIG1pY3Jvc2Vjb25kczogNiwgbmFub3NlY29uZHM6IDcg
fTsKKyAgICBjb25zdCBuZWdTdHJpbmcgPSAnLVAxRFQySDNNNC4wMDUwMDYwMDdTJzsKKworICAg
IGNvbnN0IGFkZFplcm8gPSBwb3NBYnNvbHV0ZS5hZGQoemVybyk7CisgICAgY29uc3QgYWRkUG9z
ID0gcG9zQWJzb2x1dGUuYWRkKHBvc0R1cmF0aW9uTGlrZSk7CisgICAgY29uc3QgYWRkTmVnID0g
cG9zQWJzb2x1dGUuYWRkKG5lZ1N0cmluZyk7CisgICAgY29uc3Qgc3ViWmVybyA9IHBvc0Fic29s
dXRlLnN1YnRyYWN0KHplcm8pOworICAgIGNvbnN0IHN1YlBvcyA9IHBvc0Fic29sdXRlLnN1YnRy
YWN0KHBvc0R1cmF0aW9uTGlrZSk7CisgICAgY29uc3Qgc3ViTmVnID0gcG9zQWJzb2x1dGUuc3Vi
dHJhY3QobmVnU3RyaW5nKTsKKyAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAg
ICAgICBzaG91bGRCZShhZGRaZXJvW2ZpZWxkXSwgcG9zQWJzb2x1dGVbZmllbGRdKTsKKyAgICAg
ICAgc2hvdWxkQmUoYWRkUG9zW2ZpZWxkXSwgMiAqIHBvc0Fic29sdXRlW2ZpZWxkXSk7CisgICAg
ICAgIHNob3VsZEJlKGFkZE5lZ1tmaWVsZF0sIDApOworICAgICAgICBzaG91bGRCZShzdWJaZXJv
W2ZpZWxkXSwgcG9zQWJzb2x1dGVbZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUoc3ViUG9zW2Zp
ZWxkXSwgMCk7CisgICAgICAgIHNob3VsZEJlKHN1Yk5lZ1tmaWVsZF0sIDIgKiBwb3NBYnNvbHV0
ZVtmaWVsZF0pOworICAgIH0KK30KK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1Ax
RFQxM0gzMU0zMVMnKS5hZGQoJ1AxRFQxM0gzMU0zMVMnKS50b1N0cmluZygpLCAnUDNEVDNIM00y
UycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnLVBUMU01OVMnKS5zdWJ0cmFj
dCgnUFQxTTU5UycpLnRvU3RyaW5nKCksICctUFQzTTU4UycpOworCitzaG91bGRCZShUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGUudG90YWwubGVuZ3RoLCAxKTsKK3Nob3VsZFRocm93KCgpID0+
IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b3RhbC5jYWxsKHt9KSwgVHlwZUVycm9yKTsK
K3Nob3VsZFRocm93KCgpID0+IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigpLnRvdGFsKCksIFJhbmdl
RXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKCkudG90YWwo
e30pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZy
b20oJ1AxWScpLnRvdGFsKHsgdW5pdDogJ3NlY29uZHMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3Vs
ZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxTScpLnRvdGFsKHsgdW5pdDog
J3NlY29uZHMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1
cmF0aW9uLmZyb20oJ1AxVycpLnRvdGFsKHsgdW5pdDogJ3NlY29uZHMnIH0pLCBSYW5nZUVycm9y
KTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxRCcpLnRvdGFs
KHsgdW5pdDogJ21vbnRocycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVt
cG9yYWwuRHVyYXRpb24uZnJvbSgnUDFEJykudG90YWwoeyB1bml0OiAnd2Vla3MnIH0pLCBSYW5n
ZUVycm9yKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ2RheXMnIH0pLCAx
LjA4NTQ2MzAyMDkwMjg1ODgpOworc2hvdWxkQmUocG9zQWJzb2x1dGUudG90YWwoeyB1bml0OiAn
aG91cnMnIH0pLCAyNi4wNTExMTI1MDE2Njg2MTIpOworc2hvdWxkQmUocG9zQWJzb2x1dGUudG90
YWwoeyB1bml0OiAnbWludXRlcycgfSksIDE1NjMuMDY2NzUwMTAwMTE2Nyk7CitzaG91bGRCZShw
b3NBYnNvbHV0ZS50b3RhbCh7IHVuaXQ6ICdzZWNvbmRzJyB9KSwgOTM3ODQuMDA1MDA2MDA3KTsK
K3Nob3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ21pbGxpc2Vjb25kcycgfSksIDkz
Nzg0MDA1LjAwNjAwNyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS50b3RhbCh7IHVuaXQ6ICdtaWNy
b3NlY29uZHMnIH0pLCA5Mzc4NDAwNTAwNi4wMDcpOworc2hvdWxkQmUocG9zQWJzb2x1dGUudG90
YWwoeyB1bml0OiAnbmFub3NlY29uZHMnIH0pLCA5Mzc4NDAwNTAwNjAwNyk7CitzaG91bGRCZShU
ZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCctUFQxMjM0NTY3ODlTJykudG90YWwoeyB1bml0OiAnZGF5
JyB9KSwgLTE0MjguODk4MDIwODMzMzMzMik7CisKKy8vIEF0IHByZXNlbnQsIHRvTG9jYWxlU3Ry
aW5nIGhhcyB0aGUgc2FtZSBiZWhhdmlvciBhcyB0b0pTT04gb3IgYXJndW1lbnRsZXNzIHRvU3Ry
aW5nLgorZm9yIChjb25zdCBtZXRob2Qgb2YgWyd0b1N0cmluZycsICd0b0pTT04nLCAndG9Mb2Nh
bGVTdHJpbmcnXSkgeyAgICAKKyAgICBzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5
cGVbbWV0aG9kXS5sZW5ndGgsIDApOworICAgIHNob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1
cmF0aW9uLnByb3RvdHlwZVttZXRob2RdLmNhbGwoe30pLCBUeXBlRXJyb3IpOworCisgICAgc2hv
dWxkQmUoemVyb1ttZXRob2RdKCksICdQVDBTJyk7CisgICAgc2hvdWxkQmUocG9zW21ldGhvZF0o
KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDgwMDkwMVMnKTsKKyAgICBzaG91bGRCZShuZWdbbWV0aG9k
XSgpLCAnLVAxWTJNM1c0RFQ1SDZNNy4wMDgwMDkwMVMnKTsKKyAgICAKKyAgICBzaG91bGRCZShu
ZXcgVGVtcG9yYWwuRHVyYXRpb24oMSwxLDEsMSlbbWV0aG9kXSgpLCAnUDFZMU0xVzFEJyk7Cisg
ICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAsMSwxLDEpW21ldGhvZF0o
KSwgJ1BUMUgxTTFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCww
LDAsMCwwLDAsMTAwKVttZXRob2RdKCksICdQVDAuMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVt
cG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwwLDEwMClbbWV0aG9kXSgpLCAnUFQwLjAwMDFT
Jyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDAsMCww
LDEwMClbbWV0aG9kXSgpLCAnUFQwLjAwMDAwMDFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBv
cmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDEsMTAwMSlbbWV0aG9kXSgpLCAnUFQyLjAwMVMnKTsK
KyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwxLDEwMDEp
W21ldGhvZF0oKSwgJ1BUMC4wMDIwMDFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1
cmF0aW9uKDAsMCwwLDAsMCwwLDAsMCwxLDEwMDEpW21ldGhvZF0oKSwgJ1BUMC4wMDAwMDIwMDFT
Jyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDEsMTAw
MSwxMDAxLDEwMDEpW21ldGhvZF0oKSwgJ1BUMi4wMDIwMDIwMDFTJyk7Cit9CisKK3Nob3VsZEJl
KHBvcy50b1N0cmluZyh7fSksIHBvcy50b1N0cmluZygpKTsKKworc2hvdWxkVGhyb3coKCkgPT4g
cG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiAnZm9vYmFyJyB9KSwgUmFuZ2VFcnJvcik7Citm
b3IgKGNvbnN0IHVuaXQgb2YgWyd5ZWFyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXIn
LCAnbWludXRlJ10pIHsKKyAgICBzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBzbWFs
bGVzdFVuaXQ6IHVuaXQgfSksIFJhbmdlRXJyb3IpOworICAgIHNob3VsZFRocm93KCgpID0+IHBv
cy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogYCR7dW5pdH1zYCB9KSwgUmFuZ2VFcnJvcik7Cit9
CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmRzJyB9KSwgJ1Ax
WTJNM1c0RFQ1SDZNN1MnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDog
J21pbGxpc2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4UycpOworc2hvdWxkQmUocG9z
LnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiAnbWljcm9zZWNvbmRzJyB9KSwgJ1AxWTJNM1c0RFQ1
SDZNNy4wMDgwMDlTJyk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICdu
YW5vc2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4MDA5MDEwUycpOworZm9yIChjb25z
dCB1bml0IG9mIFsnc2Vjb25kJywgJ21pbGxpc2Vjb25kJywgJ21pY3Jvc2Vjb25kJywgJ25hbm9z
ZWNvbmQnXSkKKyAgICBzaG91bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6IHVuaXQg
fSksIHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogYCR7dW5pdH1zYCB9KSk7CisKK3Nob3Vs
ZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IC0xIH0p
LCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IGZyYWN0aW9u
YWxTZWNvbmREaWdpdHM6IDEwIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHBv
cy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6ICdib2d1cycgfSksIFJhbmdlRXJy
b3IpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMCB9
KSwgJ1AxWTJNM1c0RFQ1SDZNN1MnKTsKK2NvbnN0IGRlY2ltYWxQYXJ0ID0gJzAwODAwOTAxMCc7
Citmb3IgKGxldCBpID0gMTsgaSA8IDEwOyBpKyspCisgICAgc2hvdWxkQmUocG9zLnRvU3RyaW5n
KHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogaSB9KSwgYFAxWTJNM1c0RFQ1SDZNNy4ke2RlY2lt
YWxQYXJ0LnNsaWNlKDAsaSl9U2ApOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25h
bFNlY29uZERpZ2l0czogJ2F1dG8nIH0pLCBwb3MudG9TdHJpbmcoKSk7CitzaG91bGRCZSh6ZXJv
LnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMiB9KSwgJ1BUMC4wMFMnKTsKKwor
c2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgcm91bmRpbmdNb2RlOiAnYm9ndXMnIH0p
LCBSYW5nZUVycm9yKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHJvdW5kaW5nTW9kZTogJ3Ry
dW5jJyB9KSwgcG9zLnRvU3RyaW5nKCkpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rp
b25hbFNlY29uZERpZ2l0czogNywgcm91bmRpbmdNb2RlOiAnY2VpbCcgfSksICdQMVkyTTNXNERU
NUg2TTcuMDA4MDA5MVMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNv
bmREaWdpdHM6IDIsIHJvdW5kaW5nTW9kZTogJ2Zsb29yJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4w
MFMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDIs
IHJvdW5kaW5nTW9kZTogJ2hhbGZFeHBhbmQnIH0pLCAnUDFZMk0zVzREVDVINk03LjAxUycpOwor
CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudmFsdWVPZi5sZW5ndGgsIDAp
Oworc2hvdWxkVGhyb3coKCkgPT4gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKCkudmFsdWVPZigpLCBU
eXBlRXJyb3IpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436688</attachid>
            <date>2021-08-27 16:23:49 -0700</date>
            <delta_ts>2021-08-27 16:38:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228532-20210827162349.patch</filename>
            <type>text/plain</type>
            <size>114713</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NmE5YjNkYmVhNTJlZWY3NjIyNzk4MWE0YmEzNDk1YThmZjRhOWJlLi5lZjE2MzA2NDBkNmY0NTM2
MjI5ZGM5NjQ0YjUyMWU3ZWU1N2JkZmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAyMS0wOC0yNyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGlt
cGxlbWVudHMgdGhlIER1cmF0aW9uIGNsYXNzIGZvciB0aGUgdXBjb21pbmcgVGVtcG9yYWwgQVBJ
IChjdXJyZW50bHkgYXQgc3RhZ2UgMyBpbiBUQzM5KS4KKyAgICAgICAgU3BlYzogaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtZHVyYXRpb24tb2JqZWN0cwor
ICAgICAgICBEb2NzOiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvZG9jcy9kdXJh
dGlvbi5odG1sCisKKyAgICAgICAgQSBEdXJhdGlvbiBpcyB1bHRpbWF0ZWx5IGFuIGFycmF5IG9m
IGRvdWJsZXMgKHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vj
b25kcywgbXMsIM68cywgbnMpCisgICAgICAgIHdoaWNoIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW5k
IGZyb20gYW4gSVNPIHN0cmluZyByZXByZXNlbnRhdGlvbiAoZS5nLiAiLVAxWTJNM1c0RFQ1SDZN
Ny4xMjM0NTY3ODlTIikKKyAgICAgICAgYW5kIHdoaWNoIHN1cHBvcnRzIHZhcmlvdXMgY2FsY3Vh
dGlvbnMuCisKKyAgICAgICAgVGhlIHNwZWMgaXMgc3RpbGwgaW4gZmx1eCBhbmQgY2VydGFpbiBp
c3N1ZXMgd2VyZSBpZGVudGlmaWVkIGluIHRoZSBjb3Vyc2Ugb2YgcHJlcGFyaW5nIHRoaXMgcGF0
Y2guCisgICAgICAgIFRoaXMgY29kZSBhaW1zIHRvIGJlICJhcyBjb3JyZWN0IGFzIHBvc3NpYmxl
IiBmb3IgdGhlIG1vbWVudDsgc21hbGwgY29ycmVjdGlvbnMgYXJlIGV4cGVjdGVkIGluIHRoZSBu
ZWFyIGZ1dHVyZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpkdXJhdGlvblN0cnVj
dHVyZSk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmNwcDogQWRkZWQuCisg
ICAgICAgICogcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgICog
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaDogQWRkZWQuCisgICAgICAgICog
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAgICAgICog
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVEdXJhdGlvbkNv
bnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6c2luZ3VsYXJVbml0KToKKyAgICAgICAgKEpTQzo6
dGVtcG9yYWxVbml0VHlwZSk6CisgICAgICAgIChKU0M6OnRlbXBvcmFsTGFyZ2VzdFVuaXQpOgor
ICAgICAgICAoSlNDOjp0ZW1wb3JhbFNtYWxsZXN0VW5pdCk6CisgICAgICAgIChKU0M6OnRlbXBv
cmFsRnJhY3Rpb25hbFNlY29uZERpZ2l0cyk6CisgICAgICAgIChKU0M6OnNlY29uZHNTdHJpbmdQ
cmVjaXNpb24pOgorICAgICAgICAoSlNDOjptYXhpbXVtUm91bmRpbmdJbmNyZW1lbnQpOgorICAg
ICAgICAoSlNDOjp0ZW1wb3JhbFJvdW5kaW5nSW5jcmVtZW50KToKKyAgICAgICAgKEpTQzo6cm91
bmROdW1iZXJUb0luY3JlbWVudCk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVjdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwog
MjAyMS0wOC0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAg
IFtKU0NdIFJlbW92ZSB1bm5lY2Vzc2FyeSBtb3ZlcyBpbiBZYXJyJ3Mgc3ViMzIgLyBhZGQzMiBy
ZWxhdGVkIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiYjY1NGI1
NDQ0ZDIxOTY3OTZlYWZhNDI1NTc4ZDAzOGVhYjc2Y2U5Li5kMWQzOWFjN2RkZDY0ZDE1MTVjNzg1
MTM5MjdhYmI2ZTBkYTFjNjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC0xMDcsNiArMTA3LDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX09CSkVDVF9MVVRfU09VUkNFUwog
ICAgIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvU3ltYm9sQ29uc3Ry
dWN0b3IuY3BwCiAgICAgcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9U
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCisgICAgcnVudGltZS9UZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCiAKICAgICB3
YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCmluZGV4IDc1NDJjN2Y3NzQ2NWUyNmUxOWQ0YTY4YTVkYjc2MDkxZmRkNDY1Mzku
LjNmNTg1ZTFjOTRiMzAzMDY4OTRiMjc3NmI5YTUwN2U5NmYwNjRmOTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xOTEsNiArMTkxLDggQEAgT0JKRUNU
X0xVVF9IRUFERVJTID0gXAogICAgIFN0cmluZ1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgU3ltYm9s
Q29uc3RydWN0b3IubHV0LmggXAogICAgIFN5bWJvbFByb3RvdHlwZS5sdXQuaCBcCisgICAgVGVt
cG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlLmx1dC5oIFwKICAgICBUZW1wb3JhbE9iamVjdC5sdXQuaCBcCiAgICAgV2ViQXNzZW1i
bHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JQcm90b3R5cGUubHV0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBh
ZGQ2Y2I0MzIyOTI3ZjIyMTVhNjMyZDM4OTNiZGM5YzM4MjVmYTdhLi4yZWU2OGYxMDMyZTM5OWJl
M2I2OWQwNzkwYmI2NjQ5OGU0OWViN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTQxNiw2ICsxNDE2LDkgQEAKIAkJQTM4MkM1MzEyNjY3MTExRDAwNDJDRDk5IC8qIEluQnlW
YXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MzMwNUZCMTIwQjBGNzg4MDBDRUI4MkIgLyogSW5CeVZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMzhEMjUwRTI1ODAwRDQ0MDA0MkJG
REQgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzOEQyNTBEMjU4MDBENDMwMDQyQkZERCAvKiBK
U0FycmF5QnVmZmVyUHJvdG90eXBlSW5saW5lcy5oICovOyB9OwogCQlBMzhENUJGQzI2NjZEM0RB
MDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTM4RDVCRkEyNjY2RDNEQTAwQTEwOUE2IC8qIEluQnlTdGF0dXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBM0M3RURC
NjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VEQjAyNkIwREIzNjAw
NEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsKKwkJQTNDN0VEQjky
NkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAvKiBU
ZW1wb3JhbER1cmF0aW9uLmggKi87IH07CisJCUEzQzdFREJBMjZCMERCMzgwMDRDMzRDNSAvKiBU
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJQTNFRTg1NDMyNjI1MTRCMDAwRkM5QjhEIC8q
IEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAvKiBJbnRsV29ya2Fyb3VuZC5jcHAg
Ki87IH07CiAJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRkY5QkM1MjIzNDc0NjYw
MEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyogSmF2YVNjcmlwdENh
bGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCAqLzsgfTsK
QEAgLTQ0NzMsNiArNDQ3NiwxMiBAQAogCQlBM0JGODg0RTI0NDgwQkUwMDAxQjlGMzUgLyogSW50
bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBM0JGODg0RjI0NDgwQkUwMDAxQjlGMzUgLyogSW50bFJlbGF0
aXZlVGltZUZvcm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTNCRjg4NTAyNDQ4MEJFMTAwMUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMDI2QjBEQjM2MDA0QzM0QzUgLyog
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEzQzdFREIxMjZCMERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMjI2QjBEQjM3MDA0QzM0QzUg
LyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3Jh
bER1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBvcmFsRHVy
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjQyNkIwREIzNzAw
NEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjUyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUEzRkY5QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckZsYWdzLmg7IHBhdGggPSB5YXJyL1lhcnJGbGFn
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0ZGOUJDNjIyMzQ3NDY2MDBCMUE5
QUIgLyogWWFyckZsYWdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFlhcnJGbGFncy5jcHA7IHBhdGggPSB5YXJyL1lhcnJGbGFncy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE1MDNGQTEzMTg4RTBGQUYwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2Fs
bEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEphdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzk1Niw2ICs3
OTY1LDEyIEBACiAJCQkJRTMxMTc5QTkyMjg4Mzg1RDAwNTE0QjJDIC8qIFN5bWJvbFRhYmxlT3JT
Y29wZURlcHRoLmggKi8sCiAJCQkJQkRCNEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvci5jcHAgKi8sCiAJCQkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8q
IFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oICovLAorCQkJCUEzQzdFREIxMjZCMERCMzYwMDRD
MzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNwcCAqLywKKwkJCQlBM0M3RURCMzI2QjBEQjM3MDA0
QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovLAorCQkJCUEzQzdFREIyMjZCMERCMzcwMDRD
MzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCUEzQzdFREI0
MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLywKKwkJ
CQlBM0M3RURCNTI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5j
cHAgKi8sCisJCQkJQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGUuaCAqLywKIAkJCQlGNkYxNTAxQjI2OTNEMzNFMDA0Qjk4RUYgLyogVGVtcG9yYWxO
b3cuY3BwICovLAogCQkJCUY2RjE1MDE4MjY5M0QzM0QwMDRCOThFRiAvKiBUZW1wb3JhbE5vdy5o
ICovLAogCQkJCUY2RjE1MDE5MjY5M0QzM0UwMDRCOThFRiAvKiBUZW1wb3JhbE9iamVjdC5jcHAg
Ki8sCkBAIC0xMDY1NSw3ICsxMDY3MCwxMSBAQAogCQkJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZB
QyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzc5OTc4MzFDREU5RkEw
MDA0RDRBMDkgLyogVGFnUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQ0E2
MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREJBMjZCMERCMzgwMDRDMzRDNSAvKiBUZW1wb3Jh
bER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREI2MjZCMERC
MzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGNkYxNTAyMTI2OTNENDUwMDA0Qjk4RUYgLyogVGVtcG9yYWxPYmplY3QubHV0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBM0ZBOTczODI2QkIzNTU2MDBGNzEwNjAgLyogVGVtcG9yYWxPYmpl
Y3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIyMTcg
LyogVGVtcFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ0QTdCNDIwQkY2OEQ5
MDAyMkIxNzEgLyogVGVybWluYXRlZENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QTJDMTdDMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IGE2NDcwMmRiNjAxY2MyMWFiYjRjMjYy
OTQ1N2RkMWE3NTljMzAyMGQuLjNjMmM2ZjAwOTY2N2M4M2FjMTk0N2E0NjM0OWM2N2FiOTJlYzIy
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTEwMTAsNiArMTAxMCw5IEBAIHJ1
bnRpbWUvU3ltYm9sT2JqZWN0LmNwcAogcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCiBydW50
aW1lL1N5bWJvbFRhYmxlLmNwcAogcnVudGltZS9UZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3Bw
CitydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwCitydW50aW1lL1RlbXBvcmFsRHVyYXRpb25D
b25zdHJ1Y3Rvci5jcHAKK3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAKIHJ1
bnRpbWUvVGVtcG9yYWxOb3cuY3BwCiBydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcAogcnVudGlt
ZS9UZXN0UnVubmVyVXRpbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRleCBkYzYwMTlmNDVmZDk4YjQzN2E1YmY2ZTI2NTg0
YTBhMzQ2MzJmYWRjLi5iZWJlZWFlMjIwODIxZGRkOWFhYWFmMGM3N2Q5NjA2NjMzZDNlNmY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVy
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJz
LmgKQEAgLTk5LDYgKzk5LDcgQEAKICAgICBtYWNybyhjb3VudGVycykgXAogICAgIG1hY3JvKGRh
dGVTdHlsZSkgXAogICAgIG1hY3JvKGRheSkgXAorICAgIG1hY3JvKGRheXMpIFwKICAgICBtYWNy
byhkYXlQZXJpb2QpIFwKICAgICBtYWNybyhkZWZpbmVQcm9wZXJ0eSkgXAogICAgIG1hY3JvKGRl
cmVmKSBcCkBAIC0xMzUsNiArMTM2LDcgQEAKICAgICBtYWNybyhoYXNoKSBcCiAgICAgbWFjcm8o
aGVhZGVyKSBcCiAgICAgbWFjcm8oaG91cikgXAorICAgIG1hY3JvKGhvdXJzKSBcCiAgICAgbWFj
cm8oaG91ckN5Y2xlKSBcCiAgICAgbWFjcm8oaG91cjEyKSBcCiAgICAgbWFjcm8oaWQpIFwKQEAg
LTE1NCw2ICsxNTYsNyBAQAogICAgIG1hY3JvKGpldHRpc29uUmVhc29uKSBcCiAgICAgbWFjcm8o
am9pbikgXAogICAgIG1hY3JvKGxhbmd1YWdlKSBcCisgICAgbWFjcm8obGFyZ2VzdFVuaXQpIFwK
ICAgICBtYWNybyhsYXN0SW5kZXgpIFwKICAgICBtYWNybyhsZW5ndGgpIFwKICAgICBtYWNybyhs
aW5lKSBcCkBAIC0xNjIsMTMgKzE2NSwxOCBAQAogICAgIG1hY3JvKG1heGltdW1GcmFjdGlvbkRp
Z2l0cykgXAogICAgIG1hY3JvKG1heGltdW1TaWduaWZpY2FudERpZ2l0cykgXAogICAgIG1hY3Jv
KG1lc3NhZ2UpIFwKKyAgICBtYWNybyhtaWNyb3NlY29uZHMpIFwKKyAgICBtYWNybyhtaWxsaXNl
Y29uZHMpIFwKICAgICBtYWNybyhtaW5pbXVtRnJhY3Rpb25EaWdpdHMpIFwKICAgICBtYWNybyht
aW5pbXVtSW50ZWdlckRpZ2l0cykgXAogICAgIG1hY3JvKG1pbmltdW1TaWduaWZpY2FudERpZ2l0
cykgXAogICAgIG1hY3JvKG1pbnV0ZSkgXAorICAgIG1hY3JvKG1pbnV0ZXMpIFwKICAgICBtYWNy
byhtb250aCkgXAorICAgIG1hY3JvKG1vbnRocykgXAogICAgIG1hY3JvKG11bHRpbGluZSkgXAog
ICAgIG1hY3JvKG5hbWUpIFwKKyAgICBtYWNybyhuYW5vc2Vjb25kcykgXAogICAgIG1hY3JvKG5l
eHQpIFwKICAgICBtYWNybyhub3cpIFwKICAgICBtYWNybyhudW1JbmxpbmVkQ2FsbHMpIFwKQEAg
LTE5MSwxMyArMTk5LDE3IEBACiAgICAgbWFjcm8ocmVnaW9uKSBcCiAgICAgbWFjcm8ocmVwbGFj
ZSkgXAogICAgIG1hY3JvKHJlc29sdmUpIFwKKyAgICBtYWNybyhyb3VuZGluZ0luY3JlbWVudCkg
XAorICAgIG1hY3JvKHJvdW5kaW5nTW9kZSkgXAogICAgIG1hY3JvKHNjcmlwdCkgXAogICAgIG1h
Y3JvKHNlY29uZCkgXAorICAgIG1hY3JvKHNlY29uZHMpIFwKICAgICBtYWNybyhzZWdtZW50KSBc
CiAgICAgbWFjcm8oc2Vuc2l0aXZpdHkpIFwKICAgICBtYWNybyhzZXQpIFwKICAgICBtYWNybyhz
aXplKSBcCiAgICAgbWFjcm8oc2xpY2UpIFwKKyAgICBtYWNybyhzbWFsbGVzdFVuaXQpIFwKICAg
ICBtYWNybyhzb3VyY2UpIFwKICAgICBtYWNybyhzb3VyY2VDb2RlKSBcCiAgICAgbWFjcm8oc291
cmNlVVJMKSBcCkBAIC0yMjQsMTIgKzIzNiwxNSBAQAogICAgIG1hY3JvKHR5cGUpIFwKICAgICBt
YWNybyh1aWQpIFwKICAgICBtYWNybyh1bmljb2RlKSBcCisgICAgbWFjcm8odW5pdCkgXAogICAg
IG1hY3JvKHVzYWdlKSBcCiAgICAgbWFjcm8odmFsdWUpIFwKICAgICBtYWNybyh2YWx1ZU9mKSBc
CiAgICAgbWFjcm8od2Vla2RheSkgXAorICAgIG1hY3JvKHdlZWtzKSBcCiAgICAgbWFjcm8od3Jp
dGFibGUpIFwKLSAgICBtYWNybyh5ZWFyKQorICAgIG1hY3JvKHllYXIpIFwKKyAgICBtYWNybyh5
ZWFycykKIAogI2RlZmluZSBKU0NfQ09NTU9OX0lERU5USUZJRVJTX0VBQ0hfUFJJVkFURV9GSUVM
RChtYWNybykgXAogICAgIG1hY3JvKGNvbnN0cnVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDE1ZjViMDY0ZWNiZmM2NThh
OTkwZDJlYjU5NjM1YmYyYmRiZTg4ODIuLjU0MThhN2JiMGY4MTFiNmMwNjNkZTc2MzRiYWY3ZmEy
MjAyM2M5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKQEAgLTIwMSw2ICsyMDEsOCBAQAogI2luY2x1ZGUgIlN5bWJvbENvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiU3ltYm9sT2JqZWN0LmgiCiAjaW5jbHVkZSAiU3ltYm9sUHJvdG90
eXBlLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgorI2luY2x1ZGUgIlRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJUZW1wb3JhbE9iamVjdC5oIgogI2luY2x1
ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUNhcGFiaWxpdGllcy5oIgpAQCAt
MTIxMiw2ICsxMjE0LDEzIEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUg
IyMgQ29uc3RydWN0b3IgPSBmZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPkludGwsIGludGwsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogICAgIGlm
IChPcHRpb25zOjp1c2VUZW1wb3JhbCgpKSB7CisgICAgICAgIG1fZHVyYXRpb25TdHJ1Y3R1cmUu
aW5pdExhdGVyKAorICAgICAgICAgICAgW10gKGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4m
IGluaXQpIHsKKyAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
anNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lcik7CisgICAgICAgICAgICAgICAgVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZSogZHVyYXRpb25Qcm90b3R5cGUgPSBUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlOjpjcmVhdGUoaW5pdC52bSwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmpl
Y3RQcm90b3R5cGUoKSkpOworICAgICAgICAgICAgICAgIGluaXQuc2V0KFRlbXBvcmFsRHVyYXRp
b246OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBnbG9iYWxPYmplY3QsIGR1cmF0aW9uUHJvdG90
eXBlKSk7CisgICAgICAgICAgICB9KTsKKwogICAgICAgICBUZW1wb3JhbE9iamVjdCogdGVtcG9y
YWwgPSBUZW1wb3JhbE9iamVjdDo6Y3JlYXRlKHZtLCBUZW1wb3JhbE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCB0aGlzKSk7CiAgICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5UZW1wb3JhbCwgdGVtcG9yYWwsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICB9CkBAIC0yMDkwLDYgKzIw
OTksOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNl
bGwsIFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdGhpc09iamVjdC0+bV9kYXRlVGltZUZvcm1hdFN0
cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX251bWJlckZvcm1hdFN0
cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKIAorICAgIGlmIChPcHRpb25zOjp1c2VUZW1wb3JhbCgp
KQorICAgICAgICB0aGlzT2JqZWN0LT5tX2R1cmF0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3Ip
OworCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9udWxsR2V0dGVyRnVuY3Rpb24p
OwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbnVsbFNldHRlckZ1bmN0aW9uKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX251bGxTZXR0ZXJTdHJpY3RGdW5jdGlv
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApp
bmRleCBhMzVlZmNlN2M1MjYyZjQ5ZDk4ZDVhYjQyMTNjODgxYjVjMjcwYWMwLi5iNDNiNjdhOTM4
NDA2YjcwMTIyMmFlMzUzMzIwOGQ3MjE3YTcyODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTMyNCw2ICszMjQsOCBAQCBwdWJsaWM6
CiAgICAgTGF6eUNsYXNzU3RydWN0dXJlIG1fZGF0ZVRpbWVGb3JtYXRTdHJ1Y3R1cmU7CiAgICAg
TGF6eUNsYXNzU3RydWN0dXJlIG1fbnVtYmVyRm9ybWF0U3RydWN0dXJlOwogCisgICAgTGF6eVBy
b3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fZHVyYXRpb25TdHJ1Y3R1cmU7CisK
ICAgICBXcml0ZUJhcnJpZXI8TnVsbEdldHRlckZ1bmN0aW9uPiBtX251bGxHZXR0ZXJGdW5jdGlv
bjsKICAgICBXcml0ZUJhcnJpZXI8TnVsbFNldHRlckZ1bmN0aW9uPiBtX251bGxTZXR0ZXJGdW5j
dGlvbjsKICAgICBXcml0ZUJhcnJpZXI8TnVsbFNldHRlckZ1bmN0aW9uPiBtX251bGxTZXR0ZXJT
dHJpY3RGdW5jdGlvbjsKQEAgLTg3MCw2ICs4NzIsOCBAQCBwdWJsaWM6CiAgICAgSlNPYmplY3Qq
IG51bWJlckZvcm1hdENvbnN0cnVjdG9yKCkgeyByZXR1cm4gbV9udW1iZXJGb3JtYXRTdHJ1Y3R1
cmUuY29uc3RydWN0b3IodGhpcyk7IH0KICAgICBKU09iamVjdCogbnVtYmVyRm9ybWF0UHJvdG90
eXBlKCkgeyByZXR1cm4gbV9udW1iZXJGb3JtYXRTdHJ1Y3R1cmUucHJvdG90eXBlKHRoaXMpOyB9
CiAKKyAgICBTdHJ1Y3R1cmUqIGR1cmF0aW9uU3RydWN0dXJlKCkgeyByZXR1cm4gbV9kdXJhdGlv
blN0cnVjdHVyZS5nZXQodGhpcyk7IH0KKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0
UmVtb3RlRGVidWdnaW5nRW5hYmxlZChib29sKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IHJlbW90ZURlYnVnZ2luZ0VuYWJsZWQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzYzZjky
NGYzZDVjZTc3YjNkZjQ4MTk5OGIzZTUzNTU0MThiOWUwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKQEAgLTAsMCAr
MSw3NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRlbXBvcmFsRHVyYXRpb24uaCIKKworI2luY2x1ZGUgIkludGxPYmplY3RJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBhcnNlSW50LmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNp
bmdCdWZmZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgQVNTRVJUKGluZGV4IDwg
bnVtYmVyT2ZUZW1wb3JhbFVuaXRzKTsKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFRlbXBvcmFs
VW5pdD4oaW5kZXgpKSB7CisjZGVmaW5lIEpTQ19URU1QT1JBTF9EVVJBVElPTl9QUk9QRVJUWV9O
QU1FKG5hbWUsIGNhcGl0YWxpemVkTmFtZSkgY2FzZSBUZW1wb3JhbFVuaXQ6OmNhcGl0YWxpemVk
TmFtZTogcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUjI3M7IAorICAgICAgICBKU0NfVEVN
UE9SQUxfVU5JVFMoSlNDX1RFTVBPUkFMX0RVUkFUSU9OX1BST1BFUlRZX05BTUUpCisjdW5kZWYg
SlNDX1RFTVBPUkFMX0RVUkFUSU9OX1BST1BFUlRZX05BTUUKKyAgICB9Cit9CisKK2NvbnN0IENs
YXNzSW5mbyBUZW1wb3JhbER1cmF0aW9uOjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBvcmFsRHVyYXRp
b24pIH07CisKK1RlbXBvcmFsRHVyYXRpb24qIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdWJkdXJhdGlvbnMmJiBzdWJkdXJhdGlvbnMpCit7
CisgICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxE
dXJhdGlvbj4odm0uaGVhcCkpIFRlbXBvcmFsRHVyYXRpb24odm0sIHN0cnVjdHVyZSwgV1RGTW92
ZShzdWJkdXJhdGlvbnMpKTsKKyAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gb2JqZWN0OworfQorCitTdHJ1Y3R1cmUqIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6VGVtcG9yYWxEdXJhdGlvbihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBTdWJkdXJhdGlvbnMmJiBzdWJkdXJhdGlvbnMpCisgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3N1YmR1cmF0aW9ucyhXVEZNb3ZlKHN1YmR1cmF0aW9u
cykpCit7Cit9CisKK3ZvaWQgVGVtcG9yYWxEdXJhdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMo
dm0sIGluZm8oKSkpOworfQorCisvLyBJc1ZhbGlkRHVyYXRpb24gKCB5ZWFycywgbW9udGhzLCB3
ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9z
ZWNvbmRzLCBuYW5vc2Vjb25kcyApCitzdGF0aWMgYm9vbCBpc1ZhbGlkRHVyYXRpb24oY29uc3Qg
VGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zJiBzdWJkdXJhdGlvbnMpCit7CisgICAgaW50
IHNpZ24gPSAwOworICAgIGZvciAoYXV0byB2YWx1ZSA6IHN1YmR1cmF0aW9ucykgeworICAgICAg
ICBpZiAoIXN0ZDo6aXNmaW5pdGUodmFsdWUpIHx8ICh2YWx1ZSA8IDAgJiYgc2lnbiA+IDApIHx8
ICh2YWx1ZSA+IDAgJiYgc2lnbiA8IDApKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGlmICghc2lnbiAmJiB2YWx1ZSkKKyAgICAgICAgICAgIHNpZ24gPSB2YWx1ZSA+IDAg
PyAxIDogLTE7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vICBDcmVhdGVUZW1w
b3JhbER1cmF0aW9uICggeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVz
LCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMgWyAsIG5l
d1RhcmdldCBdICkKK1RlbXBvcmFsRHVyYXRpb24qIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlm
VmFsaWQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3ViZHVyYXRpb25zJiYgc3ViZHVy
YXRpb25zLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgaWYgKCFpc1ZhbGlkRHVyYXRpb24oc3ViZHVyYXRpb25zKSkgeworICAgICAgICB0aHJvd1Jh
bmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImNhbm5vdCBjcmVhdGUgRHVyYXRpb24gd2l0
aCBpbmNvbnNpc3RlbnQgbnVtZXJpYyB2YWx1ZXMiX3MpOworICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KKworICAgIHJldHVybiBUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUodm0sIHN0cnVjdHVy
ZSA/IHN0cnVjdHVyZSA6IGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKSwgV1RGTW92
ZShzdWJkdXJhdGlvbnMpKTsKK30KKworLy8gRHVyYXRpb25IYW5kbGVGcmFjdGlvbnMgKCBmSG91
cnMsIG1pbnV0ZXMsIGZNaW51dGVzLCBzZWNvbmRzLCBmU2Vjb25kcywgbWlsbGlzZWNvbmRzLCBm
TWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMsIGZNaWNyb3NlY29uZHMsIG5hbm9zZWNvbmRzLCBm
TmFub3NlY29uZHMgKQorc3RhdGljIHZvaWQgaGFuZGxlRnJhY3Rpb24oVGVtcG9yYWxEdXJhdGlv
bjo6U3ViZHVyYXRpb25zJiBzdWJkdXJhdGlvbnMsIGludCBmYWN0b3IsIFN0cmluZ1ZpZXcgZnJh
Y3Rpb25TdHJpbmcsIFRlbXBvcmFsVW5pdCBmcmFjdGlvblR5cGUpCit7CisgICAgQVNTRVJUKGZy
YWN0aW9uU3RyaW5nLmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoZnJhY3Rpb25UeXBlID09IFRlbXBv
cmFsVW5pdDo6SG91ciB8fCBmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxVbml0OjpNaW51dGUgfHwg
ZnJhY3Rpb25UeXBlID09IFRlbXBvcmFsVW5pdDo6U2Vjb25kKTsKKworICAgIGlmIChmcmFjdGlv
blR5cGUgPT0gVGVtcG9yYWxVbml0OjpTZWNvbmQpIHsKKyAgICAgICAgYXV0byBwYWRkZWQgPSBt
YWtlU3RyaW5nKGZyYWN0aW9uU3RyaW5nLCAiMDAwMDAwMDAiKTsKKyAgICAgICAgc3ViZHVyYXRp
b25zLnNldE1pbGxpc2Vjb25kcyhmYWN0b3IgKiBwYXJzZUludChwYWRkZWQuc3Vic3RyaW5nKDAs
IDMpLCAxMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWljcm9zZWNvbmRzKGZhY3RvciAq
IHBhcnNlSW50KHBhZGRlZC5zdWJzdHJpbmcoMywgMyksIDEwKSk7CisgICAgICAgIHN1YmR1cmF0
aW9ucy5zZXROYW5vc2Vjb25kcyhmYWN0b3IgKiBwYXJzZUludChwYWRkZWQuc3Vic3RyaW5nKDYs
IDMpLCAxMCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZG91YmxlIGZyYWN0aW9u
ID0gZmFjdG9yICogcGFyc2VJbnQoZnJhY3Rpb25TdHJpbmcsIDEwKSAvIHN0ZDo6cG93KDEwLCBm
cmFjdGlvblN0cmluZy5sZW5ndGgoKSk7CisgICAgaWYgKCFmcmFjdGlvbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6OkhvdXIpIHsKKyAg
ICAgICAgZnJhY3Rpb24gKj0gNjA7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaW51dGVzKHN0
ZDo6dHJ1bmMoZnJhY3Rpb24pKTsKKyAgICAgICAgZnJhY3Rpb24gPSBzdGQ6OmZtb2QoZnJhY3Rp
b24sIDEpOworICAgICAgICBpZiAoIWZyYWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGZyYWN0aW9uICo9IDYwOworICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHN0
ZDo6dHJ1bmMoZnJhY3Rpb24pKTsKKyAgICBmcmFjdGlvbiA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwg
MSk7CisgICAgaWYgKCFmcmFjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhY3Rpb24g
Kj0gMTAwMDsKKyAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNvbmRzKHN0ZDo6dHJ1bmMoZnJh
Y3Rpb24pKTsKKyAgICBmcmFjdGlvbiA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMSk7CisgICAgaWYg
KCFmcmFjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhY3Rpb24gKj0gMTAwMDsKKyAg
ICBzdWJkdXJhdGlvbnMuc2V0TWljcm9zZWNvbmRzKHN0ZDo6dHJ1bmMoZnJhY3Rpb24pKTsKKyAg
ICBmcmFjdGlvbiA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMSk7CisgICAgaWYgKCFmcmFjdGlvbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgc3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRzKHN0ZDo6
dHJ1bmMoZnJhY3Rpb24gKiAxMDAwKSk7Cit9CisKKy8vIFBhcnNlVGVtcG9yYWxEdXJhdGlvblN0
cmluZyAoIGlzb1N0cmluZyApCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3Rk
OjpvcHRpb25hbDxUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnM+IFRlbXBvcmFsRHVyYXRp
b246OnBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKK3sK
KyAgICAvLyBJU08gODYwMSBkdXJhdGlvbiBzdHJpbmdzIGFyZSBsaWtlICItUDFZMk0zVzREVDVI
Nk03LjEyMzQ1Njc4OVMiLiBOb3RlczoKKyAgICAvLyAtIGNhc2UgaW5zZW5zaXRpdmUKKyAgICAv
LyAtIHNpZ246ICsgLSDiiJIoVSsyMjEyKQorICAgIC8vIC0gc2VwYXJhdG9yOiAuICwKKyAgICAv
LyAtIFQgaXMgcHJlc2VudCBpZmYgdGhlcmUgaXMgYSB0aW1lIHBhcnQKKyAgICAvLyAtIGludGVn
cmFsIHBhcnRzIGNhbiBoYXZlIGFueSBudW1iZXIgb2YgZGlnaXRzIGJ1dCBmcmFjdGlvbmFsIHBh
cnRzIGhhdmUgYXQgbW9zdCA5CisgICAgLy8gLSBob3VycyBhbmQgbWludXRlcyBjYW4gaGF2ZSBm
cmFjdGlvbmFsIHBhcnRzIHRvbywgYnV0IG9ubHkgYXMgdGhlIExBU1QgcGFydCBvZiB0aGUgc3Ry
aW5nCisgICAgaWYgKGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA8IDMpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0IHsgfTsKKworICAgIGlu
dCBmYWN0b3IgPSAxOworICAgIGlmICgqYnVmZmVyID09ICcrJykKKyAgICAgICAgYnVmZmVyLmFk
dmFuY2UoKTsKKyAgICBlbHNlIGlmICgqYnVmZmVyID09ICctJyB8fCAqYnVmZmVyID09IDB4MjIx
MikgeworICAgICAgICBmYWN0b3IgPSAtMTsKKyAgICAgICAgYnVmZmVyLmFkdmFuY2UoKTsKKyAg
ICB9CisKKyAgICBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpICE9ICdQJykKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGJ1ZmZlci5hZHZhbmNlKCk7CisgICAgZm9yICh1bnNp
Z25lZCBkYXRlUGFydEluZGV4ID0gMDsgZGF0ZVBhcnRJbmRleCA8IDQgJiYgYnVmZmVyLmhhc0No
YXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoKmJ1ZmZlcik7IGJ1ZmZlci5hZHZh
bmNlKCkpIHsKKyAgICAgICAgdW5zaWduZWQgZGlnaXRzID0gMTsKKyAgICAgICAgd2hpbGUgKGRp
Z2l0cyA8IGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoYnVmZmVyW2Rp
Z2l0c10pKQorICAgICAgICAgICAgZGlnaXRzKys7CisKKyAgICAgICAgZG91YmxlIGludGVnZXIg
PSBmYWN0b3IgKiBwYXJzZUludCh7IGJ1ZmZlci5wb3NpdGlvbigpLCBkaWdpdHMgfSwgMTApOwor
ICAgICAgICBidWZmZXIuYWR2YW5jZUJ5KGRpZ2l0cyk7CisgICAgICAgIGlmIChidWZmZXIuYXRF
bmQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgaWYgKHRv
QVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnWScgJiYgIWRhdGVQYXJ0SW5kZXgpIHsKKyAgICAgICAg
ICAgIHJlc3VsdC5zZXRZZWFycyhpbnRlZ2VyKTsKKyAgICAgICAgICAgIGRhdGVQYXJ0SW5kZXgg
PSAxOworICAgICAgICB9IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnTScgJiYg
ZGF0ZVBhcnRJbmRleCA8IDIpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRNb250aHMoaW50ZWdl
cik7CisgICAgICAgICAgICBkYXRlUGFydEluZGV4ID0gMjsKKyAgICAgICAgfSBlbHNlIGlmICh0
b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgPT0gJ1cnICYmIGRhdGVQYXJ0SW5kZXggPCAzKSB7CisgICAg
ICAgICAgICByZXN1bHQuc2V0V2Vla3MoaW50ZWdlcik7CisgICAgICAgICAgICBkYXRlUGFydElu
ZGV4ID0gMzsKKyAgICAgICAgfSBlbHNlIGlmICh0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgPT0gJ0Qn
KSB7CisgICAgICAgICAgICByZXN1bHQuc2V0RGF5cyhpbnRlZ2VyKTsKKyAgICAgICAgICAgIGRh
dGVQYXJ0SW5kZXggPSA0OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICByZXR1
cm4gcmVzdWx0OworCisgICAgaWYgKGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA8IDMgfHwgdG9B
U0NJSVVwcGVyKCpidWZmZXIpICE9ICdUJykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIGJ1ZmZlci5hZHZhbmNlKCk7CisgICAgZm9yICh1bnNpZ25lZCB0aW1lUGFydEluZGV4
ID0gMDsgdGltZVBhcnRJbmRleCA8IDMgJiYgYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmco
KSAmJiBpc0FTQ0lJRGlnaXQoKmJ1ZmZlcik7IGJ1ZmZlci5hZHZhbmNlKCkpIHsKKyAgICAgICAg
dW5zaWduZWQgZGlnaXRzID0gMTsKKyAgICAgICAgd2hpbGUgKGRpZ2l0cyA8IGJ1ZmZlci5sZW5n
dGhSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoYnVmZmVyW2RpZ2l0c10pKQorICAgICAgICAg
ICAgZGlnaXRzKys7CisKKyAgICAgICAgZG91YmxlIGludGVnZXIgPSBmYWN0b3IgKiBwYXJzZUlu
dCh7IGJ1ZmZlci5wb3NpdGlvbigpLCBkaWdpdHMgfSwgMTApOworICAgICAgICBidWZmZXIuYWR2
YW5jZUJ5KGRpZ2l0cyk7CisgICAgICAgIGlmIChidWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgU3RyaW5nVmlldyBmcmFjdGlvbmFsUGFy
dDsKKyAgICAgICAgaWYgKCpidWZmZXIgPT0gJy4nIHx8ICpidWZmZXIgPT0gJywnKSB7CisgICAg
ICAgICAgICBidWZmZXIuYWR2YW5jZSgpOworICAgICAgICAgICAgZGlnaXRzID0gMDsKKyAgICAg
ICAgICAgIHdoaWxlIChkaWdpdHMgPCBidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgJiYgaXNBU0NJ
SURpZ2l0KGJ1ZmZlcltkaWdpdHNdKSkKKyAgICAgICAgICAgICAgICBkaWdpdHMrKzsKKyAgICAg
ICAgICAgIGlmICghZGlnaXRzIHx8IGRpZ2l0cyA+IDkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgICAgICAgICAgZnJhY3Rpb25hbFBhcnQgPSB7IGJ1ZmZlci5w
b3NpdGlvbigpLCBkaWdpdHMgfTsKKyAgICAgICAgICAgIGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRz
KTsKKyAgICAgICAgICAgIGlmIChidWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRvQVNDSUlVcHBlcigq
YnVmZmVyKSA9PSAnSCcgJiYgIXRpbWVQYXJ0SW5kZXgpIHsKKyAgICAgICAgICAgIHJlc3VsdC5z
ZXRIb3VycyhpbnRlZ2VyKTsKKyAgICAgICAgICAgIGlmIChmcmFjdGlvbmFsUGFydCkgeworICAg
ICAgICAgICAgICAgIGhhbmRsZUZyYWN0aW9uKHJlc3VsdCwgZmFjdG9yLCBmcmFjdGlvbmFsUGFy
dCwgVGVtcG9yYWxVbml0OjpIb3VyKTsKKyAgICAgICAgICAgICAgICB0aW1lUGFydEluZGV4ID0g
MzsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRpbWVQYXJ0SW5kZXggPSAx
OworICAgICAgICB9IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnTScgJiYgdGlt
ZVBhcnRJbmRleCA8IDIpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRNaW51dGVzKGludGVnZXIp
OworICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxQYXJ0KSB7CisgICAgICAgICAgICAgICAgaGFu
ZGxlRnJhY3Rpb24ocmVzdWx0LCBmYWN0b3IsIGZyYWN0aW9uYWxQYXJ0LCBUZW1wb3JhbFVuaXQ6
Ok1pbnV0ZSk7CisgICAgICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9IDM7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICB0aW1lUGFydEluZGV4ID0gMjsKKyAgICAgICAgfSBl
bHNlIGlmICh0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgPT0gJ1MnKSB7CisgICAgICAgICAgICByZXN1
bHQuc2V0U2Vjb25kcyhpbnRlZ2VyKTsKKyAgICAgICAgICAgIGlmIChmcmFjdGlvbmFsUGFydCkK
KyAgICAgICAgICAgICAgICBoYW5kbGVGcmFjdGlvbihyZXN1bHQsIGZhY3RvciwgZnJhY3Rpb25h
bFBhcnQsIFRlbXBvcmFsVW5pdDo6U2Vjb25kKTsKKyAgICAgICAgICAgIHRpbWVQYXJ0SW5kZXgg
PSAzOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgfQorCisgICAgaWYgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBUb1Rl
bXBvcmFsRHVyYXRpb25SZWNvcmQgKCB0ZW1wb3JhbER1cmF0aW9uTGlrZSApCitUZW1wb3JhbER1
cmF0aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6ZnJvbU9iamVjdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogZHVyYXRpb25MaWtlKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBBU1NFUlQoIWR1cmF0aW9uTGlrZS0+aW5oZXJpdHM8VGVtcG9y
YWxEdXJhdGlvbj4odm0pKTsKKworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQ7CisgICAgYXV0byBo
YXNSZWxldmFudFByb3BlcnR5ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZlRlbXBvcmFsVW5pdHM7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZHVy
YXRpb25MaWtlLT5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUodm0sIGkpKTsKKworICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICAgICAgcmVzdWx0W2ldID0g
MDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaGFzUmVsZXZh
bnRQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgIHJlc3VsdFtpXSA9IHZhbHVlLnRvTnVtYmVyKGds
b2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICAgICAgaWYgKCFpc0ludGVnZXIocmVzdWx0W2ldKSkgeworICAgICAgICAgICAgdGhyb3dS
YW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0
aWVzIG11c3QgYmUgaW50ZWdlcnMiX3MpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICghaGFzUmVsZXZhbnRQcm9wZXJ0eSkgeworICAgICAgICB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAib2JqZWN0IG11c3QgY29udGFpbiBh
dCBsZWFzdCBvbmUgVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydHkiX3MpOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIFRvVGVtcG9yYWxE
dXJhdGlvbiAoIGl0ZW0gKQorVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6dG9E
dXJhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZW1WYWx1ZSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKGl0ZW1WYWx1ZS5pbmhlcml0czxUZW1w
b3JhbER1cmF0aW9uPih2bSkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8VGVtcG9yYWxEdXJhdGlv
bio+KGl0ZW1WYWx1ZSk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxp
ZChnbG9iYWxPYmplY3QsIGZyb21PYmplY3QoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChpdGVtVmFs
dWUpKSkpOworCisgICAgU3RyaW5nIHN0cmluZyA9IGl0ZW1WYWx1ZS50b1dURlN0cmluZyhnbG9i
YWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisg
ICAgYXV0byBwYXJzZWRTdWJkdXJhdGlvbnMgPSByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3Ry
aW5nLCBbXShhdXRvIGJ1ZmZlcikgLT4gc3RkOjpvcHRpb25hbDxTdWJkdXJhdGlvbnM+IHsKKyAg
ICAgICAgcmV0dXJuIHBhcnNlKGJ1ZmZlcik7CisgICAgfSk7CisgICAgaWYgKCFwYXJzZWRTdWJk
dXJhdGlvbnMpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJjb3VsZCBub3QgcGFyc2UgRHVyYXRpb24gc3RyaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBUZW1wb3JhbER1
cmF0aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgV1RGTW92ZShwYXJzZWRTdWJkdXJh
dGlvbnMudmFsdWUoKSkpKTsKK30KKworVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlv
bjo6ZnJvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZW1WYWx1ZSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAoaXRlbVZhbHVl
LmluaGVyaXRzPFRlbXBvcmFsRHVyYXRpb24+KHZtKSkgeworICAgICAgICBTdWJkdXJhdGlvbnMg
Y2xvbmVkID0ganNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPihpdGVtVmFsdWUpLT5tX3N1YmR1cmF0
aW9uczsKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgpLCBXVEZNb3ZlKGNsb25lZCkpOworICAgIH0KKwor
ICAgIHJldHVybiB0b0R1cmF0aW9uKGdsb2JhbE9iamVjdCwgaXRlbVZhbHVlKTsKK30KKworc3Rh
dGljIGRvdWJsZSB0b3RhbE5hbm9zZWNvbmRzKFRlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9u
cyYgc3ViZHVyYXRpb25zKQoreworICAgIGF1dG8gaG91cnMgPSAyNCAqIHN1YmR1cmF0aW9ucy5k
YXlzKCkgKyBzdWJkdXJhdGlvbnMuaG91cnMoKTsKKyAgICBhdXRvIG1pbnV0ZXMgPSA2MCAqIGhv
dXJzICsgc3ViZHVyYXRpb25zLm1pbnV0ZXMoKTsKKyAgICBhdXRvIHNlY29uZHMgPSA2MCAqIG1p
bnV0ZXMgKyBzdWJkdXJhdGlvbnMuc2Vjb25kcygpOworICAgIGF1dG8gbWlsbGlzZWNvbmRzID0g
MTAwMCAqIHNlY29uZHMgKyBzdWJkdXJhdGlvbnMubWlsbGlzZWNvbmRzKCk7CisgICAgYXV0byBt
aWNyb3NlY29uZHMgPSAxMDAwICogbWlsbGlzZWNvbmRzICsgc3ViZHVyYXRpb25zLm1pY3Jvc2Vj
b25kcygpOworICAgIHJldHVybiAxMDAwICogbWljcm9zZWNvbmRzICsgc3ViZHVyYXRpb25zLm5h
bm9zZWNvbmRzKCk7Cit9CisKK0pTVmFsdWUgVGVtcG9yYWxEdXJhdGlvbjo6Y29tcGFyZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlT25lLCBKU1ZhbHVlIHZhbHVl
VHdvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBvbmUgPSB0b0R1cmF0aW9u
KGdsb2JhbE9iamVjdCwgdmFsdWVPbmUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICBhdXRvKiB0d28gPSB0b0R1cmF0aW9uKGdsb2JhbE9iamVjdCwgdmFsdWVU
d28pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBpZiAob25l
LT55ZWFycygpIHx8IHR3by0+eWVhcnMoKSB8fCBvbmUtPm1vbnRocygpIHx8IHR3by0+bW9udGhz
KCkgfHwgb25lLT53ZWVrcygpIHx8IHR3by0+d2Vla3MoKSkgeworICAgICAgICB0aHJvd1Jhbmdl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkNhbm5vdCBjb21wYXJlIGEgZHVyYXRpb24gb2Yg
eWVhcnMsIG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBhIHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRvIG5zT25lID0gdG90YWxOYW5v
c2Vjb25kcyhvbmUtPm1fc3ViZHVyYXRpb25zKTsKKyAgICBhdXRvIG5zVHdvID0gdG90YWxOYW5v
c2Vjb25kcyh0d28tPm1fc3ViZHVyYXRpb25zKTsKKyAgICByZXR1cm4ganNOdW1iZXIobnNPbmUg
PiBuc1R3byA/IDEgOiBuc09uZSA8IG5zVHdvID8gLTEgOiAwKTsKK30KKworaW50IFRlbXBvcmFs
RHVyYXRpb246OnNpZ24oY29uc3QgVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zJiBzdWJk
dXJhdGlvbnMpCit7CisgICAgZm9yIChhdXRvIHZhbHVlIDogc3ViZHVyYXRpb25zKSB7CisgICAg
ICAgIGlmICh2YWx1ZSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgaWYg
KHZhbHVlID4gMCkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJldHVybiAw
OworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6
d2l0aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogZHVyYXRpb25MaWtl
KSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0
OworICAgIGF1dG8gaGFzUmVsZXZhbnRQcm9wZXJ0eSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBpKyspIHsKKyAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGR1cmF0aW9uTGlrZS0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKHZt
LCBpKSk7CisKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAg
IHJlc3VsdFtpXSA9IG1fc3ViZHVyYXRpb25zW2ldOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBoYXNSZWxldmFudFByb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAg
cmVzdWx0W2ldID0gdmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICBpZiAoIWlzSW50ZWdlcihyZXN1
bHRbaV0pKSB7CisgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlbXBvcmFsLkR1cmF0aW9uIHByb3BlcnRpZXMgbXVzdCBiZSBpbnRlZ2VycyJfcyk7Cisg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFoYXNS
ZWxldmFudFByb3BlcnR5KSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJvYmplY3QgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBUZW1wb3JhbC5EdXJhdGlv
biBwcm9wZXJ0eSJfcyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zIFRlbXBvcmFsRHVy
YXRpb246Om5lZ2F0ZWQoKSBjb25zdAoreworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQ7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlRlbXBvcmFsVW5pdHM7IGkrKykKKyAgICAg
ICAgcmVzdWx0W2ldID0gLW1fc3ViZHVyYXRpb25zW2ldOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjphYnMo
KSBjb25zdAoreworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQ7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1iZXJPZlRlbXBvcmFsVW5pdHM7IGkrKykKKyAgICAgICAgcmVzdWx0W2ldID0g
c3RkOjphYnMobV9zdWJkdXJhdGlvbnNbaV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8v
IERlZmF1bHRUZW1wb3JhbExhcmdlc3RVbml0ICggeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMs
IGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcyApCitU
ZW1wb3JhbFVuaXQgVGVtcG9yYWxEdXJhdGlvbjo6bGFyZ2VzdFN1YmR1cmF0aW9uKCkgY29uc3QK
K3sKKyAgICB1aW50OF90IGluZGV4ID0gMDsKKyAgICB3aGlsZSAoaW5kZXggPCBudW1iZXJPZlRl
bXBvcmFsVW5pdHMgLSAxICYmICFtX3N1YmR1cmF0aW9uc1tpbmRleF0pCisgICAgICAgIGluZGV4
Kys7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlbXBvcmFsVW5pdD4oaW5kZXgpOworfQorCisv
LyBCYWxhbmNlRHVyYXRpb24gKCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlz
ZWNvbmRzLCBtaWNyb3NlY29uZHMsIG5hbm9zZWNvbmRzLCBsYXJnZXN0VW5pdCBbICwgcmVsYXRp
dmVUbyBdICkKK3ZvaWQgVGVtcG9yYWxEdXJhdGlvbjo6YmFsYW5jZShTdWJkdXJhdGlvbnMmIHN1
YmR1cmF0aW9ucywgVGVtcG9yYWxVbml0IGxhcmdlc3RVbml0KQoreworICAgIGF1dG8gbmFub3Nl
Y29uZHMgPSB0b3RhbE5hbm9zZWNvbmRzKHN1YmR1cmF0aW9ucyk7CisgICAgc3ViZHVyYXRpb25z
LmNsZWFyKCk7CisKKyAgICBpZiAobGFyZ2VzdFVuaXQgPD0gVGVtcG9yYWxVbml0OjpEYXkpIHsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBuYW5vc2Vjb25kc1BlckRheSA9IDI0LjAgKiA2
MCAqIDYwICogMTAwMCAqIDEwMDAgKiAxMDAwOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0RGF5
cyhzdGQ6OnRydW5jKG5hbm9zZWNvbmRzIC8gbmFub3NlY29uZHNQZXJEYXkpKTsKKyAgICAgICAg
bmFub3NlY29uZHMgPSBzdGQ6OmZtb2QobmFub3NlY29uZHMsIG5hbm9zZWNvbmRzUGVyRGF5KTsK
KyAgICB9CisKKyAgICBkb3VibGUgbWljcm9zZWNvbmRzID0gc3RkOjp0cnVuYyhuYW5vc2Vjb25k
cyAvIDEwMDApOworICAgIGRvdWJsZSBtaWxsaXNlY29uZHMgPSBzdGQ6OnRydW5jKG1pY3Jvc2Vj
b25kcyAvIDEwMDApOworICAgIGRvdWJsZSBzZWNvbmRzID0gc3RkOjp0cnVuYyhtaWxsaXNlY29u
ZHMgLyAxMDAwKTsKKyAgICBkb3VibGUgbWludXRlcyA9IHN0ZDo6dHJ1bmMoc2Vjb25kcyAvIDYw
KTsKKyAgICBpZiAobGFyZ2VzdFVuaXQgPD0gVGVtcG9yYWxVbml0OjpIb3VyKSB7CisgICAgICAg
IHN1YmR1cmF0aW9ucy5zZXROYW5vc2Vjb25kcyhzdGQ6OmZtb2QobmFub3NlY29uZHMsIDEwMDAp
KTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pY3Jvc2Vjb25kcyhzdGQ6OmZtb2QobWljcm9z
ZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWxsaXNlY29uZHMoc3Rk
OjpmbW9kKG1pbGxpc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0U2Vj
b25kcyhzdGQ6OmZtb2Qoc2Vjb25kcywgNjApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1p
bnV0ZXMoc3RkOjpmbW9kKG1pbnV0ZXMsIDYwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRI
b3VycyhzdGQ6OnRydW5jKG1pbnV0ZXMgLyA2MCkpOworICAgIH0gZWxzZSBpZiAobGFyZ2VzdFVu
aXQgPT0gVGVtcG9yYWxVbml0OjpNaW51dGUpIHsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5h
bm9zZWNvbmRzKHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJh
dGlvbnMuc2V0TWljcm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDApKTsKKyAg
ICAgICAgc3ViZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZtb2QobWlsbGlzZWNvbmRz
LCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHN0ZDo6Zm1vZChzZWNv
bmRzLCA2MCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWludXRlcyhtaW51dGVzKTsKKyAg
ICB9IGVsc2UgaWYgKGxhcmdlc3RVbml0ID09IFRlbXBvcmFsVW5pdDo6U2Vjb25kKSB7CisgICAg
ICAgIHN1YmR1cmF0aW9ucy5zZXROYW5vc2Vjb25kcyhzdGQ6OmZtb2QobmFub3NlY29uZHMsIDEw
MDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pY3Jvc2Vjb25kcyhzdGQ6OmZtb2QobWlj
cm9zZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWxsaXNlY29uZHMo
c3RkOjpmbW9kKG1pbGxpc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0
U2Vjb25kcyhzZWNvbmRzKTsKKyAgICB9IGVsc2UgaWYgKGxhcmdlc3RVbml0ID09IFRlbXBvcmFs
VW5pdDo6TWlsbGlzZWNvbmQpIHsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRz
KHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0
TWljcm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3Vi
ZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMpOworICAgIH0gZWxzZSBpZiAo
bGFyZ2VzdFVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCkgeworICAgICAgICBzdWJk
dXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjpmbW9kKG5hbm9zZWNvbmRzLCAxMDAwKSk7Cisg
ICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMobWljcm9zZWNvbmRzKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRzKG5hbm9zZWNvbmRzKTsK
K30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zIFRlbXBvcmFsRHVyYXRpb246OmFk
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG90aGVyVmFsdWUpIGNvbnN0
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIG90aGVyID0gdG9EdXJhdGlvbihn
bG9iYWxPYmplY3QsIG90aGVyVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICBhdXRvIGxhcmdlc3RVbml0ID0gc3RkOjptaW4obGFyZ2VzdFN1YmR1cmF0
aW9uKCksIG90aGVyLT5sYXJnZXN0U3ViZHVyYXRpb24oKSk7CisgICAgaWYgKGxhcmdlc3RVbml0
IDw9IFRlbXBvcmFsVW5pdDo6V2VlaykgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIkNhbm5vdCBhZGQgYSBkdXJhdGlvbiBvZiB5ZWFycywgbW9udGhzLCBv
ciB3ZWVrcyB3aXRob3V0IGEgcmVsYXRpdmVUbyBvcHRpb24iX3MpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQgeworICAgICAgICAwLCAwLCAw
LCBkYXlzKCkgKyBvdGhlci0+ZGF5cygpLAorICAgICAgICBob3VycygpICsgb3RoZXItPmhvdXJz
KCksIG1pbnV0ZXMoKSArIG90aGVyLT5taW51dGVzKCksIHNlY29uZHMoKSArIG90aGVyLT5zZWNv
bmRzKCksCisgICAgICAgIG1pbGxpc2Vjb25kcygpICsgb3RoZXItPm1pbGxpc2Vjb25kcygpLCBt
aWNyb3NlY29uZHMoKSArIG90aGVyLT5taWNyb3NlY29uZHMoKSwgbmFub3NlY29uZHMoKSArIG90
aGVyLT5uYW5vc2Vjb25kcygpCisgICAgfTsKKworICAgIGJhbGFuY2UocmVzdWx0LCBsYXJnZXN0
VW5pdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVy
YXRpb25zIFRlbXBvcmFsRHVyYXRpb246OnN1YnRyYWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgb3RoZXJWYWx1ZSkgY29uc3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgYXV0byogb3RoZXIgPSB0b0R1cmF0aW9uKGdsb2JhbE9iamVjdCwgb3RoZXJWYWx1ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGF1dG8gbGFyZ2Vz
dFVuaXQgPSBzdGQ6Om1pbihsYXJnZXN0U3ViZHVyYXRpb24oKSwgb3RoZXItPmxhcmdlc3RTdWJk
dXJhdGlvbigpKTsKKyAgICBpZiAobGFyZ2VzdFVuaXQgPD0gVGVtcG9yYWxVbml0OjpXZWVrKSB7
CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHN1
YnRyYWN0IGEgZHVyYXRpb24gb2YgeWVhcnMsIG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBhIHJl
bGF0aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBT
dWJkdXJhdGlvbnMgcmVzdWx0IHsKKyAgICAgICAgMCwgMCwgMCwgZGF5cygpIC0gb3RoZXItPmRh
eXMoKSwKKyAgICAgICAgaG91cnMoKSAtIG90aGVyLT5ob3VycygpLCBtaW51dGVzKCkgLSBvdGhl
ci0+bWludXRlcygpLCBzZWNvbmRzKCkgLSBvdGhlci0+c2Vjb25kcygpLAorICAgICAgICBtaWxs
aXNlY29uZHMoKSAtIG90aGVyLT5taWxsaXNlY29uZHMoKSwgbWljcm9zZWNvbmRzKCkgLSBvdGhl
ci0+bWljcm9zZWNvbmRzKCksIG5hbm9zZWNvbmRzKCkgLSBvdGhlci0+bmFub3NlY29uZHMoKQor
ICAgIH07CisKKyAgICBiYWxhbmNlKHJlc3VsdCwgbGFyZ2VzdFVuaXQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKKy8vIFJvdW5kRHVyYXRpb24gKCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5
cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzLCBu
YW5vc2Vjb25kcywgaW5jcmVtZW50LCB1bml0LCByb3VuZGluZ01vZGUgWyAsIHJlbGF0aXZlVG8g
XSApCitkb3VibGUgVGVtcG9yYWxEdXJhdGlvbjo6cm91bmQoVGVtcG9yYWxEdXJhdGlvbjo6U3Vi
ZHVyYXRpb25zJiBzdWJkdXJhdGlvbnMsIGRvdWJsZSBpbmNyZW1lbnQsIFRlbXBvcmFsVW5pdCB1
bml0LCBSb3VuZGluZ01vZGUgbW9kZSkKK3sKKyAgICBBU1NFUlQodW5pdCA+PSBUZW1wb3JhbFVu
aXQ6OkRheSk7CisgICAgZG91YmxlIHJlbWFpbmRlciA9IDA7CisKKyAgICBpZiAodW5pdCA9PSBU
ZW1wb3JhbFVuaXQ6OkRheSkgeworICAgICAgICBhdXRvIG9yaWdpbmFsRGF5cyA9IHN1YmR1cmF0
aW9ucy5kYXlzKCk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXREYXlzKDApOworICAgICAgICBh
dXRvIG5hbm9zZWNvbmRzID0gdG90YWxOYW5vc2Vjb25kcyhzdWJkdXJhdGlvbnMpOworCisgICAg
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgbmFub3NlY29uZHNQZXJEYXkgPSAyNC4wICogNjAgKiA2
MCAqIDEwMDAgKiAxMDAwICogMTAwMDsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFsRGF5cyA9IG9y
aWdpbmFsRGF5cyArIG5hbm9zZWNvbmRzIC8gbmFub3NlY29uZHNQZXJEYXk7CisgICAgICAgIGF1
dG8gbmV3RGF5cyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbERheXMsIGluY3Jl
bWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxEYXlzIC0gbmV3RGF5
czsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldERheXMobmV3RGF5cyk7CisgICAgfSBlbHNlIGlm
ICh1bml0ID09IFRlbXBvcmFsVW5pdDo6SG91cikgeworICAgICAgICBhdXRvIGZyYWN0aW9uYWxT
ZWNvbmRzID0gc3ViZHVyYXRpb25zLnNlY29uZHMoKSArIHN1YmR1cmF0aW9ucy5taWxsaXNlY29u
ZHMoKSAqIDFlLTMgKyBzdWJkdXJhdGlvbnMubWljcm9zZWNvbmRzKCkgKiAxZS02ICsgc3ViZHVy
YXRpb25zLm5hbm9zZWNvbmRzKCkgKiAxZS05OworICAgICAgICBhdXRvIGZyYWN0aW9uYWxIb3Vy
cyA9IHN1YmR1cmF0aW9ucy5ob3VycygpICsgKHN1YmR1cmF0aW9ucy5taW51dGVzKCkgKyBmcmFj
dGlvbmFsU2Vjb25kcyAvIDYwKSAvIDYwOworICAgICAgICBhdXRvIG5ld0hvdXJzID0gcm91bmRO
dW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsSG91cnMsIGluY3JlbWVudCwgbW9kZSk7CisgICAg
ICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxIb3VycyAtIG5ld0hvdXJzOworICAgICAgICBzdWJk
dXJhdGlvbnMuc2V0SG91cnMobmV3SG91cnMpOworICAgIH0gZWxzZSBpZiAodW5pdCA9PSBUZW1w
b3JhbFVuaXQ6Ok1pbnV0ZSkgeworICAgICAgICBhdXRvIGZyYWN0aW9uYWxTZWNvbmRzID0gc3Vi
ZHVyYXRpb25zLnNlY29uZHMoKSArIHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMoKSAqIDFlLTMg
KyBzdWJkdXJhdGlvbnMubWljcm9zZWNvbmRzKCkgKiAxZS02ICsgc3ViZHVyYXRpb25zLm5hbm9z
ZWNvbmRzKCkgKiAxZS05OworICAgICAgICBhdXRvIGZyYWN0aW9uYWxNaW51dGVzID0gc3ViZHVy
YXRpb25zLm1pbnV0ZXMoKSArIGZyYWN0aW9uYWxTZWNvbmRzIC8gNjA7CisgICAgICAgIGF1dG8g
bmV3TWludXRlcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbE1pbnV0ZXMsIGlu
Y3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxNaW51dGVzIC0g
bmV3TWludXRlczsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pbnV0ZXMobmV3TWludXRlcyk7
CisgICAgfSBlbHNlIGlmICh1bml0ID09IFRlbXBvcmFsVW5pdDo6U2Vjb25kKSB7CisgICAgICAg
IGF1dG8gZnJhY3Rpb25hbFNlY29uZHMgPSBzdWJkdXJhdGlvbnMuc2Vjb25kcygpICsgc3ViZHVy
YXRpb25zLm1pbGxpc2Vjb25kcygpICogMWUtMyArIHN1YmR1cmF0aW9ucy5taWNyb3NlY29uZHMo
KSAqIDFlLTYgKyBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKSAqIDFlLTk7CisgICAgICAgIGF1
dG8gbmV3U2Vjb25kcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbFNlY29uZHMs
IGluY3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxTZWNvbmRz
IC0gbmV3U2Vjb25kczsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldFNlY29uZHMobmV3U2Vjb25k
cyk7CisgICAgfSBlbHNlIGlmICh1bml0ID09IFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQpIHsK
KyAgICAgICAgYXV0byBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzID0gc3ViZHVyYXRpb25zLm1pbGxp
c2Vjb25kcygpICsgc3ViZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygpICogMWUtMyArIHN1YmR1cmF0
aW9ucy5uYW5vc2Vjb25kcygpICogMWUtNjsKKyAgICAgICAgYXV0byBuZXdNaWxsaXNlY29uZHMg
PSByb3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0aW9uYWxNaWxsaXNlY29uZHMsIGluY3JlbWVu
dCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgLSBu
ZXdNaWxsaXNlY29uZHM7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWxsaXNlY29uZHMobmV3
TWlsbGlzZWNvbmRzKTsKKyAgICB9IGVsc2UgaWYgKHVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaWNy
b3NlY29uZCkgeworICAgICAgICBhdXRvIGZyYWN0aW9uYWxNaWNyb3NlY29uZHMgPSBzdWJkdXJh
dGlvbnMubWljcm9zZWNvbmRzKCkgKyBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKSAqIDFlLTM7
CisgICAgICAgIGF1dG8gbmV3TWljcm9zZWNvbmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChm
cmFjdGlvbmFsTWljcm9zZWNvbmRzLCBpbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5k
ZXIgPSBmcmFjdGlvbmFsTWljcm9zZWNvbmRzIC0gbmV3TWljcm9zZWNvbmRzOworICAgICAgICBz
dWJkdXJhdGlvbnMuc2V0TWljcm9zZWNvbmRzKG5ld01pY3Jvc2Vjb25kcyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYXV0byBuZXdOYW5vc2Vjb25kcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQo
c3ViZHVyYXRpb25zLm5hbm9zZWNvbmRzKCksIGluY3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJl
bWFpbmRlciA9IHN1YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygpIC0gbmV3TmFub3NlY29uZHM7Cisg
ICAgICAgIHN1YmR1cmF0aW9ucy5zZXROYW5vc2Vjb25kcyhuZXdOYW5vc2Vjb25kcyk7CisgICAg
fQorCisgICAgZm9yIChhdXRvIGkgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih1bml0KSArIDF1OyBp
IDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBpKyspCisgICAgICAgIHN1YmR1cmF0aW9uc1tpXSA9
IDA7CisKKyAgICByZXR1cm4gcmVtYWluZGVyOworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJk
dXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6cm91bmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBvcHRpb25zVmFsdWUpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFsT2Jq
ZWN0LCBvcHRpb25zVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisKKyAgICBhdXRvIHNtYWxsZXN0ID0gdGVtcG9yYWxTbWFsbGVzdFVuaXQoZ2xvYmFsT2JqZWN0
LCBvcHRpb25zLCB7IH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICBUZW1wb3JhbFVuaXQgZGVmYXVsdExhcmdlc3RVbml0ID0gbGFyZ2VzdFN1YmR1cmF0aW9u
KCk7CisgICAgYXV0byBsYXJnZXN0ID0gdGVtcG9yYWxMYXJnZXN0VW5pdChnbG9iYWxPYmplY3Qs
IG9wdGlvbnMsIHsgfSwgZGVmYXVsdExhcmdlc3RVbml0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKCFzbWFsbGVzdCAmJiAhbGFyZ2VzdCkgeworICAg
ICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkNhbm5vdCByb3VuZCB3
aXRob3V0IGEgc21hbGxlc3RVbml0IG9yIGxhcmdlc3RVbml0IG9wdGlvbiJfcyk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYgKHNtYWxsZXN0ICYmIGxhcmdlc3QgJiYgc21h
bGxlc3QudmFsdWUoKSA8IGxhcmdlc3QudmFsdWUoKSkgeworICAgICAgICB0aHJvd1JhbmdlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInNtYWxsZXN0VW5pdCBtdXN0IGJlIHNtYWxsZXIgdGhh
biBsYXJnZXN0VW5pdCJfcyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgVGVt
cG9yYWxVbml0IHNtYWxsZXN0VW5pdCA9IHNtYWxsZXN0LnZhbHVlX29yKFRlbXBvcmFsVW5pdDo6
TmFub3NlY29uZCk7CisgICAgVGVtcG9yYWxVbml0IGxhcmdlc3RVbml0ID0gbGFyZ2VzdC52YWx1
ZV9vcihzdGQ6Om1pbihkZWZhdWx0TGFyZ2VzdFVuaXQsIHNtYWxsZXN0VW5pdCkpOworCisgICAg
YXV0byByb3VuZGluZ01vZGUgPSBpbnRsT3B0aW9uPFJvdW5kaW5nTW9kZT4oZ2xvYmFsT2JqZWN0
LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5yb3VuZGluZ01vZGUsCisgICAgICAgIHsgeyAi
Y2VpbCJfcywgUm91bmRpbmdNb2RlOjpDZWlsIH0sIHsgImZsb29yIl9zLCBSb3VuZGluZ01vZGU6
OkZsb29yIH0sIHsgInRydW5jIl9zLCBSb3VuZGluZ01vZGU6OlRydW5jIH0sIHsgImhhbGZFeHBh
bmQiX3MsIFJvdW5kaW5nTW9kZTo6SGFsZkV4cGFuZCB9IH0sCisgICAgICAgICJyb3VuZGluZ01v
ZGUgbXVzdCBiZSBlaXRoZXIgXCJjZWlsXCIsIFwiZmxvb3JcIiwgXCJ0cnVuY1wiLCBvciBcImhh
bGZFeHBhbmRcIiJfcywgUm91bmRpbmdNb2RlOjpIYWxmRXhwYW5kKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgYXV0byBpbmNyZW1lbnQgPSB0ZW1wb3JhbFJv
dW5kaW5nSW5jcmVtZW50KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgbWF4aW11bVJvdW5kaW5nSW5j
cmVtZW50KHNtYWxsZXN0VW5pdCksIGZhbHNlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgaWYgKGxhcmdlc3RVbml0ID4gVGVtcG9yYWxVbml0OjpZZWFyICYm
ICh5ZWFycygpIHx8IG1vbnRocygpIHx8IHdlZWtzKCkgfHwgKGRheXMoKSAmJiBsYXJnZXN0VW5p
dCA8IFRlbXBvcmFsVW5pdDo6RGF5KSkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJDYW5ub3Qgcm91bmQgYSBkdXJhdGlvbiBvZiB5ZWFycywgbW9udGhz
LCBvciB3ZWVrcyB3aXRob3V0IGEgcmVsYXRpdmVUbyBvcHRpb24iX3MpOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIFN1YmR1cmF0aW9ucyBuZXdTdWJkdXJhdGlvbnMgPSBtX3N1
YmR1cmF0aW9uczsKKyAgICByb3VuZChuZXdTdWJkdXJhdGlvbnMsIGluY3JlbWVudCwgc21hbGxl
c3RVbml0LCByb3VuZGluZ01vZGUpOworICAgIGJhbGFuY2UobmV3U3ViZHVyYXRpb25zLCBsYXJn
ZXN0VW5pdCk7CisgICAgcmV0dXJuIG5ld1N1YmR1cmF0aW9uczsKK30KKworZG91YmxlIFRlbXBv
cmFsRHVyYXRpb246OnRvdGFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
b3B0aW9uc1ZhbHVlKSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVj
dCogb3B0aW9ucyA9IGludGxHZXRPcHRpb25zT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1Zh
bHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKworICAgIFN0cmluZyB1
bml0U3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnBy
b3BlcnR5TmFtZXMtPnVuaXQsIHsgfSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBhdXRvIHVuaXRUeXBlID0gdGVtcG9yYWxVbml0
VHlwZSh1bml0U3RyaW5nKTsKKyAgICBpZiAoIXVuaXRUeXBlKSB7CisgICAgICAgIHRocm93UmFu
Z2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAidW5pdCBpcyBhbiBpbnZhbGlkIFRlbXBvcmFs
IHVuaXQiX3MpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBUZW1wb3JhbFVuaXQg
dW5pdCA9IHVuaXRUeXBlLnZhbHVlKCk7CisgICAgaWYgKHVuaXQgPiBUZW1wb3JhbFVuaXQ6Olll
YXIgJiYgKHllYXJzKCkgfHwgbW9udGhzKCkgfHwgd2Vla3MoKSB8fCAoZGF5cygpICYmIHVuaXQg
PCBUZW1wb3JhbFVuaXQ6OkRheSkpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiQ2Fubm90IHRvdGFsIGEgZHVyYXRpb24gb2YgeWVhcnMsIG1vbnRocywg
b3Igd2Vla3Mgd2l0aG91dCBhIHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICBTdWJkdXJhdGlvbnMgbmV3U3ViZHVyYXRpb25zID0gbV9zdWJk
dXJhdGlvbnM7CisgICAgYmFsYW5jZShuZXdTdWJkdXJhdGlvbnMsIHVuaXQpOworICAgIGRvdWJs
ZSByZW1haW5kZXIgPSByb3VuZChuZXdTdWJkdXJhdGlvbnMsIDEsIHVuaXQsIFJvdW5kaW5nTW9k
ZTo6VHJ1bmMpOworICAgIHJldHVybiBuZXdTdWJkdXJhdGlvbnNbc3RhdGljX2Nhc3Q8dWludDhf
dD4odW5pdCldICsgcmVtYWluZGVyOworfQorCitTdHJpbmcgVGVtcG9yYWxEdXJhdGlvbjo6dG9T
dHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zVmFsdWUp
IGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBvcHRpb25zID0g
aW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBpZiAoIW9wdGlvbnMpCisgICAg
ICAgIHJldHVybiB0b1N0cmluZygpOworCisgICAgUHJlY2lzaW9uRGF0YSBkYXRhID0gc2Vjb25k
c1N0cmluZ1ByZWNpc2lvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgQVNTRVJUKGRhdGEudW5pdCA+PSBUZW1wb3JhbFVu
aXQ6OlNlY29uZCk7CisKKyAgICBhdXRvIHJvdW5kaW5nTW9kZSA9IGludGxPcHRpb248Um91bmRp
bmdNb2RlPihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnJvdW5kaW5n
TW9kZSwKKyAgICAgICAgeyB7ICJjZWlsIl9zLCBSb3VuZGluZ01vZGU6OkNlaWwgfSwgeyAiZmxv
b3IiX3MsIFJvdW5kaW5nTW9kZTo6Rmxvb3IgfSwgeyAidHJ1bmMiX3MsIFJvdW5kaW5nTW9kZTo6
VHJ1bmMgfSwgeyAiaGFsZkV4cGFuZCJfcywgUm91bmRpbmdNb2RlOjpIYWxmRXhwYW5kIH0gfSwK
KyAgICAgICAgInJvdW5kaW5nTW9kZSBtdXN0IGJlIGVpdGhlciBcImNlaWxcIiwgXCJmbG9vclwi
LCBcInRydW5jXCIsIG9yIFwiaGFsZkV4cGFuZFwiIl9zLCBSb3VuZGluZ01vZGU6OlRydW5jKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgLy8gTm8gbmVlZCB0
byBtYWtlIGEgbmV3IG9iamVjdCBpZiB3ZSB3ZXJlIGdpdmVuIGV4cGxpY2l0IGRlZmF1bHRzLgor
ICAgIGlmICghZGF0YS5wcmVjaXNpb24gJiYgcm91bmRpbmdNb2RlID09IFJvdW5kaW5nTW9kZTo6
VHJ1bmMpCisgICAgICAgIHJldHVybiB0b1N0cmluZygpOworCisgICAgU3ViZHVyYXRpb25zIG5l
d1N1YmR1cmF0aW9ucyA9IG1fc3ViZHVyYXRpb25zOworICAgIHJvdW5kKG5ld1N1YmR1cmF0aW9u
cywgZGF0YS5pbmNyZW1lbnQsIGRhdGEudW5pdCwgcm91bmRpbmdNb2RlKTsKKyAgICByZXR1cm4g
dG9TdHJpbmcobmV3U3ViZHVyYXRpb25zLCBkYXRhLnByZWNpc2lvbik7Cit9CisKKy8vIFRlbXBv
cmFsRHVyYXRpb25Ub1N0cmluZyAoIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3Vycywg
bWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMsIG5hbm9zZWNvbmRz
LCBwcmVjaXNpb24gKQorU3RyaW5nIFRlbXBvcmFsRHVyYXRpb246OnRvU3RyaW5nKGNvbnN0IFRl
bXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyYgc3ViZHVyYXRpb25zLCBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBwcmVjaXNpb24pCit7CisgICAgQVNTRVJUKCFwcmVjaXNpb24gfHwgcHJlY2lz
aW9uLnZhbHVlKCkgPCAxMCk7CisKKyAgICBhdXRvIGJhbGFuY2VkTWljcm9zZWNvbmRzID0gc3Vi
ZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygpICsgc3RkOjp0cnVuYyhzdWJkdXJhdGlvbnMubmFub3Nl
Y29uZHMoKSAvIDEwMDApOworICAgIGF1dG8gYmFsYW5jZWROYW5vc2Vjb25kcyA9IHN0ZDo6Zm1v
ZChzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKSwgMTAwMCk7CisgICAgYXV0byBiYWxhbmNlZE1p
bGxpc2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMoKSArIHN0ZDo6dHJ1bmMoYmFs
YW5jZWRNaWNyb3NlY29uZHMgLyAxMDAwKTsKKyAgICBiYWxhbmNlZE1pY3Jvc2Vjb25kcyA9IHN0
ZDo6Zm1vZChiYWxhbmNlZE1pY3Jvc2Vjb25kcywgMTAwMCk7CisgICAgYXV0byBiYWxhbmNlZFNl
Y29uZHMgPSBzdWJkdXJhdGlvbnMuc2Vjb25kcygpICsgc3RkOjp0cnVuYyhiYWxhbmNlZE1pbGxp
c2Vjb25kcyAvIDEwMDApOworICAgIGJhbGFuY2VkTWlsbGlzZWNvbmRzID0gc3RkOjpmbW9kKGJh
bGFuY2VkTWlsbGlzZWNvbmRzLCAxMDAwKTsKKworICAgIC8vIFRFTVBPUkFSWSEgKHBlbmRpbmcg
c3BlYyBkaXNjdXNzaW9uIGFib3V0IG1heGltdW0gdmFsdWVzIEAgaHR0cHM6Ly9naXRodWIuY29t
L3RjMzkvcHJvcG9zYWwtdGVtcG9yYWwvaXNzdWVzLzE2MDQpCisgICAgLy8gV2UgKm11c3QqIGF2
b2lkIHByaW50aW5nIGEgbnVtYmVyIGluIHNjaWVudGlmaWMgbm90YXRpb24sIHdoaWNoIGlzIGN1
cnJlbnRseSBvbmx5IHBvc3NpYmxlIGZvciBudW1iZXJzIDwgMWUyMQorICAgIC8vIChhIHZhbHVl
IG9yaWdpbmF0aW5nIGluIHRoZSBOdW1iZXIjdG9GaXhlZCBzcGVjIGFuZCB1cGhlbGQgYnkgb3Vy
IE51bWJlclRvU3RyaW5nQnVmZmVyKS4KKyAgICBhdXRvIGZvcm1hdEludGVnZXIgPSBbXShkb3Vi
bGUgdmFsdWUpIC0+IGRvdWJsZSB7CisgICAgICAgIGF1dG8gYWJzVmFsdWUgPSBzdGQ6OmFicyh2
YWx1ZSk7CisgICAgICAgIHJldHVybiBMSUtFTFkoYWJzVmFsdWUgPCAxZTIxKSA/IGFic1ZhbHVl
IDogMWUyMSAtIDY1NTM3OworICAgIH07CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisK
KyAgICBhdXRvIHNpZ24gPSBUZW1wb3JhbER1cmF0aW9uOjpzaWduKHN1YmR1cmF0aW9ucyk7Cisg
ICAgaWYgKHNpZ24gPCAwKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScpOworCisgICAgYnVp
bGRlci5hcHBlbmQoJ1AnKTsKKyAgICBpZiAoc3ViZHVyYXRpb25zLnllYXJzKCkpCisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoc3ViZHVyYXRpb25zLnllYXJzKCkpLCAnWScp
OworICAgIGlmIChzdWJkdXJhdGlvbnMubW9udGhzKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGZvcm1hdEludGVnZXIoc3ViZHVyYXRpb25zLm1vbnRocygpKSwgJ00nKTsKKyAgICBpZiAoc3Vi
ZHVyYXRpb25zLndlZWtzKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIo
c3ViZHVyYXRpb25zLndlZWtzKCkpLCAnVycpOworICAgIGlmIChzdWJkdXJhdGlvbnMuZGF5cygp
KQorICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy5kYXlz
KCkpLCAnRCcpOworCisgICAgLy8gVGhlIHplcm8gdmFsdWUgaXMgZGlzcGxheWVkIGluIHNlY29u
ZHMuCisgICAgYXV0byB1c2VzU2Vjb25kcyA9IGJhbGFuY2VkU2Vjb25kcyB8fCBiYWxhbmNlZE1p
bGxpc2Vjb25kcyB8fCBiYWxhbmNlZE1pY3Jvc2Vjb25kcyB8fCBiYWxhbmNlZE5hbm9zZWNvbmRz
IHx8ICFzaWduOworICAgIGlmICghc3ViZHVyYXRpb25zLmhvdXJzKCkgJiYgIXN1YmR1cmF0aW9u
cy5taW51dGVzKCkgJiYgIXVzZXNTZWNvbmRzKQorICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOworCisgICAgYnVpbGRlci5hcHBlbmQoJ1QnKTsKKyAgICBpZiAoc3ViZHVyYXRpb25z
LmhvdXJzKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoc3ViZHVyYXRp
b25zLmhvdXJzKCkpLCAnSCcpOworICAgIGlmIChzdWJkdXJhdGlvbnMubWludXRlcygpKQorICAg
ICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy5taW51dGVzKCkp
LCAnTScpOworICAgIGlmICh1c2VzU2Vjb25kcykgeworICAgICAgICBidWlsZGVyLmFwcGVuZChm
b3JtYXRJbnRlZ2VyKGJhbGFuY2VkU2Vjb25kcykpOworCisgICAgICAgIGF1dG8gZnJhY3Rpb24g
PSBzdGQ6OmFicyhiYWxhbmNlZE1pbGxpc2Vjb25kcykgKiAxZTYgKyBzdGQ6OmFicyhiYWxhbmNl
ZE1pY3Jvc2Vjb25kcykgKiAxZTMgKyBzdGQ6OmFicyhiYWxhbmNlZE5hbm9zZWNvbmRzKTsKKyAg
ICAgICAgaWYgKCghcHJlY2lzaW9uICYmIGZyYWN0aW9uKSB8fCAocHJlY2lzaW9uICYmIHByZWNp
c2lvbi52YWx1ZSgpKSkgeworICAgICAgICAgICAgYXV0byBwYWRkZWQgPSBtYWtlU3RyaW5nKCcu
JywgcGFkKCcwJywgOSwgZnJhY3Rpb24pKTsKKyAgICAgICAgICAgIGlmIChwcmVjaXNpb24pCisg
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFkZGVkLmxlZnQocGFkZGVkLmxlbmd0aCgp
IC0gKDkgLSBwcmVjaXNpb24udmFsdWUoKSkpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGF1dG8gbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzID0gcGFkZGVkLmxlbmd0
aCgpOworICAgICAgICAgICAgICAgIHdoaWxlIChwYWRkZWRbbGVuZ3RoV2l0aG91dFRyYWlsaW5n
WmVyb2VzIC0gMV0gPT0gJzAnKQorICAgICAgICAgICAgICAgICAgICBsZW5ndGhXaXRob3V0VHJh
aWxpbmdaZXJvZXMtLTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChwYWRkZWQubGVm
dChsZW5ndGhXaXRob3V0VHJhaWxpbmdaZXJvZXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdTJyk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1
aWxkZXIudG9TdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODQx
YjZhNDZmN2QwNTY1NzE4ODJjY2JmNDRlZDgzZmQ0YjVkZmIxYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaApAQCAtMCww
ICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
bXBvcmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUZW1wb3JhbER1cmF0
aW9uIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5n
IEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0udGVtcG9yYWxEdXJhdGlvblNw
YWNlPG1vZGU+KCk7CisgICAgfQorCisgICAgc3RydWN0IFN1YmR1cmF0aW9ucyB7CisgICAgICAg
IHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gc3RkOjphcnJheTxkb3VibGUsIG51bWJlck9mVGVtcG9y
YWxVbml0cz46OmNvbnN0X2l0ZXJhdG9yOworCisjZGVmaW5lIEpTQ19ERUZJTkVfU1VCRFVSQVRJ
T05fRklFTEQobmFtZSwgY2FwaXRhbGl6ZWROYW1lKSBcCisgICAgICAgIGRvdWJsZSBuYW1lIyNz
KCkgY29uc3QgeyByZXR1cm4gZGF0YVtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6
OmNhcGl0YWxpemVkTmFtZSldOyB9IFwKKyAgICAgICAgdm9pZCBzZXQjI2NhcGl0YWxpemVkTmFt
ZSMjcyhkb3VibGUgdmFsdWUpIHsgZGF0YVtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVu
aXQ6OmNhcGl0YWxpemVkTmFtZSldID0gdmFsdWU7IH0KKyAgICAgICAgSlNDX1RFTVBPUkFMX1VO
SVRTKEpTQ19ERUZJTkVfU1VCRFVSQVRJT05fRklFTEQpOworI3VuZGVmIEpTQ19ERUZJTkVfU1VC
RFVSQVRJT05fRklFTEQKKworICAgICAgICBkb3VibGUmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsg
cmV0dXJuIGRhdGFbaV07IH0KKyAgICAgICAgY29uc3QgZG91YmxlJiBvcGVyYXRvcltdKHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiBkYXRhW2ldOyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gZGF0YS5iZWdpbigpOyB9CisgICAgICAgIGNvbnN0X2l0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEuZW5kKCk7IH0KKyAgICAgICAgdm9pZCBjbGVh
cigpIHsgZGF0YS5maWxsKDApOyB9CisKKyAgICAgICAgc3RkOjphcnJheTxkb3VibGUsIG51bWJl
ck9mVGVtcG9yYWxVbml0cz4gZGF0YTsKKyAgICB9OworCisgICAgc3RhdGljIFRlbXBvcmFsRHVy
YXRpb24qIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFN1YmR1cmF0aW9ucyYmKTsKKyAgICBzdGF0
aWMgVGVtcG9yYWxEdXJhdGlvbiogY3JlYXRlSWZWYWxpZChKU0dsb2JhbE9iamVjdCosIFN1YmR1
cmF0aW9ucyYmLCBTdHJ1Y3R1cmUqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERF
Q0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uKiB0b0R1cmF0aW9uKEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb24qIGZy
b20oSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBjb21wYXJl
KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CisKKyNkZWZpbmUgSlNDX0RFRklO
RV9URU1QT1JBTF9EVVJBVElPTl9GSUVMRChuYW1lLCBjYXBpdGFsaXplZE5hbWUpIFwKKyAgICBk
b3VibGUgbmFtZSMjcygpIGNvbnN0IHsgcmV0dXJuIG1fc3ViZHVyYXRpb25zLm5hbWUjI3MoKTsg
fSBcCisgICAgdm9pZCBzZXQjI2NhcGl0YWxpemVkTmFtZSMjcyhkb3VibGUgdmFsdWUpIHsgbV9z
dWJkdXJhdGlvbnMuc2V0IyNjYXBpdGFsaXplZE5hbWUjI3ModmFsdWUpOyB9CisgICAgSlNDX1RF
TVBPUkFMX1VOSVRTKEpTQ19ERUZJTkVfVEVNUE9SQUxfRFVSQVRJT05fRklFTEQpOworI3VuZGVm
IEpTQ19ERUZJTkVfVEVNUE9SQUxfRFVSQVRJT05fRklFTEQKKworICAgIGludCBzaWduKCkgY29u
c3QgeyByZXR1cm4gc2lnbihtX3N1YmR1cmF0aW9ucyk7IH0KKworICAgIFN1YmR1cmF0aW9ucyB3
aXRoKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGR1cmF0aW9uTGlrZSkgY29uc3Q7CisgICAg
U3ViZHVyYXRpb25zIG5lZ2F0ZWQoKSBjb25zdDsKKyAgICBTdWJkdXJhdGlvbnMgYWJzKCkgY29u
c3Q7CisgICAgU3ViZHVyYXRpb25zIGFkZChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpIGNvbnN0
OworICAgIFN1YmR1cmF0aW9ucyBzdWJ0cmFjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpIGNv
bnN0OworICAgIFN1YmR1cmF0aW9ucyByb3VuZChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgb3B0
aW9ucykgY29uc3Q7CisgICAgZG91YmxlIHRvdGFsKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBv
cHRpb25zKSBjb25zdDsKKyAgICBTdHJpbmcgdG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIG9wdGlvbnMpIGNvbnN0OworICAgIFN0cmluZyB0b1N0cmluZyhzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBwcmVjaXNpb24gPSBzdGQ6Om51bGxvcHQpIGNvbnN0IHsgcmV0dXJuIHRvU3RyaW5n
KG1fc3ViZHVyYXRpb25zLCBwcmVjaXNpb24pOyB9CisKK3ByaXZhdGU6CisgICAgVGVtcG9yYWxE
dXJhdGlvbihWTSYsIFN0cnVjdHVyZSosIFN1YmR1cmF0aW9ucyYmKTsKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFN1YmR1cmF0aW9ucz4gcGFyc2UoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYpOworICAgIHN0YXRpYyBTdWJkdXJhdGlvbnMgZnJvbU9i
amVjdChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kik7CisKKyAgICBzdGF0aWMgaW50IHNpZ24o
Y29uc3QgU3ViZHVyYXRpb25zJik7CisgICAgc3RhdGljIHZvaWQgYmFsYW5jZShTdWJkdXJhdGlv
bnMmLCBUZW1wb3JhbFVuaXQgbGFyZ2VzdFVuaXQpOworICAgIHN0YXRpYyBkb3VibGUgcm91bmQo
U3ViZHVyYXRpb25zJiwgZG91YmxlIGluY3JlbWVudCwgVGVtcG9yYWxVbml0LCBSb3VuZGluZ01v
ZGUpOworICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgU3ViZHVyYXRpb25zJiwgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4gcHJlY2lzaW9uKTsKKworICAgIFRlbXBvcmFsVW5pdCBsYXJn
ZXN0U3ViZHVyYXRpb24oKSBjb25zdDsKKworICAgIFN1YmR1cmF0aW9ucyBtX3N1YmR1cmF0aW9u
czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzVkMDQ5ZTZjN2YzNTRjNGFkOGEyYjAzNGNjYzFkMmUwYzlhNmIxYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5o
IgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24u
aCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoVGVtcG9yYWxE
dXJhdGlvbkNvbnN0cnVjdG9yKTsKKworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04o
VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yRnVuY0Zyb20pOworc3RhdGljIEpTQ19ERUNMQVJF
X0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yRnVuY0NvbXBhcmUpOwor
Cit9CisKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IubHV0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVj
dG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sICZ0ZW1wb3JhbER1cmF0
aW9uQ29uc3RydWN0b3JUYWJsZSwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShUZW1wb3Jh
bER1cmF0aW9uQ29uc3RydWN0b3IpIH07CisKKy8qIFNvdXJjZSBmb3IgVGVtcG9yYWxEdXJhdGlv
bkNvbnN0cnVjdG9yLmx1dC5oCitAYmVnaW4gdGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yVGFi
bGUKKyAgZnJvbSAgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jRnJv
bSAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgIGNvbXBhcmUgICAgICAgICAgVGVt
cG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yRnVuY0NvbXBhcmUgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gMgorQGVuZAorKi8KKworVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKiBUZW1wb3Jh
bER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBkdXJhdGlvblByb3RvdHlwZSkKK3sKKyAgICBh
dXRvKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcih2
bSwgc3RydWN0dXJlKTsKKyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIGR1cmF0
aW9uUHJvdG90eXBlKTsKKyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1N0cnVjdHVyZSog
VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitz
dGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjYWxsVGVtcG9yYWxEdXJhdGlvbik7Citz
dGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RUZW1wb3JhbER1cmF0aW9u
KTsKKworVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpUZW1wb3JhbER1cmF0aW9uQ29uc3Ry
dWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSwgY2FsbFRlbXBvcmFsRHVyYXRpb24sIGNvbnN0cnVjdFRlbXBvcmFsRHVyYXRpb24pCit7
Cit9CisKK3ZvaWQgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBlKQorewor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCAwLCAiRHVyYXRpb24iX3MsIFByb3BlcnR5QWRk
aXRpb25Nb2RlOjpXaXRob3V0U3RydWN0dXJlVHJhbnNpdGlvbik7CisgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgZHVyYXRpb25Q
cm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBkdXJhdGlv
blByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmNvbnN0cnVjdG9yLCB0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjb25zdHJ1
Y3RUZW1wb3JhbER1cmF0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCog
bmV3VGFyZ2V0ID0gYXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSk7CisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJFKHZtLCBkdXJhdGlvblN0
cnVjdHVyZSwgbmV3VGFyZ2V0LCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJh
dGlvbnMgc3ViZHVyYXRpb25zIHsgfTsKKyAgICBhdXRvIGNvdW50ID0gc3RkOjptaW48c2l6ZV90
PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgc3ViZHVyYXRp
b25zW2ldID0gY2FsbEZyYW1lLT5hcmd1bWVudChpKS50b0ludGVnZXJPckluZmluaXR5KGdsb2Jh
bE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAg
ICAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHN1YmR1cmF0aW9uc1tpXSkpCisgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dWTVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1
cmF0aW9uIHByb3BlcnRpZXMgbXVzdCBiZSBmaW5pdGUiX3MpOworICAgIH0KKworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxpZChnbG9iYWxP
YmplY3QsIFdURk1vdmUoc3ViZHVyYXRpb25zKSwgc3RydWN0dXJlKSk7Cit9CisKK0pTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihjYWxsVGVtcG9yYWxEdXJhdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVu
Y3Rpb25UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkR1cmF0aW9uIikpOworfQorCitK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yRnVuY0Zy
b20sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkp
Cit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpmcm9tKGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpOworfQorCitKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yRnVuY0NvbXBhcmUsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpjb21wYXJlKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzQyNDVhMzEwNjk1YWNkMzViNWQ2YWE1NmU5MDA0ZjdlM2I3MDM4MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3Rvci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOworCitjbGFzcyBUZW1wb3JhbER1cmF0aW9uQ29u
c3RydWN0b3IgZmluYWwgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAg
dXNpbmcgQmFzZSA9IEludGVybmFsRnVuY3Rpb247CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJv
cGVydHlUYWJsZTsKKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IqIGNy
ZWF0ZShWTSYsIFN0cnVjdHVyZSosIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqKTsKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKik7Cit9OworU1RBVElDX0FTU0VSVF9J
U09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLCBJbnRlcm5h
bEZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjBkNjc5OTBiZTZiZDZhNTljYWFhMGViMGUyOWQzMmQ1NDVmNjljY2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlLmNwcApAQCAtMCwwICsxLDQwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIgor
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jV2l0aCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY05lZ2F0ZWQpOworc3RhdGlj
IEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNB
YnMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUZ1bmNBZGQpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZUZ1bmNTdWJ0cmFjdCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1JvdW5kKTsKK3N0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG90
YWwpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUZ1bmNUb1N0cmluZyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvSlNPTik7CitzdGF0aWMgSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvTG9jYWxlU3RyaW5n
KTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVGdW5jVmFsdWVPZik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyWWVhcnMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NV
U1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1vbnRocyk7CitzdGF0
aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0
dGVyV2Vla3MpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUdldHRlckRheXMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRU
RVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckhvdXJzKTsKK3N0YXRpYyBKU0NfREVD
TEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaW51dGVz
KTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJTZWNvbmRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaWxsaXNlY29uZHMpOworc3RhdGljIEpTQ19E
RUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pY3Jv
c2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlR2V0dGVyTmFub3NlY29uZHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RP
TV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNpZ24pOworc3RhdGljIEpT
Q19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckJs
YW5rKTsKKworfQorCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5sdXQuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlOjpzX2luZm8gPSB7ICJUZW1wb3JhbC5EdXJhdGlvbiIsICZCYXNlOjpzX2luZm8sICZk
dXJhdGlvblByb3RvdHlwZVRhYmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUpIH07CisKKy8qIFNvdXJjZSBmb3IgVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZS5sdXQuaAorQGJlZ2luIGR1cmF0aW9uUHJvdG90eXBlVGFibGUKKyAgd2l0aCAg
ICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1dpdGggICAgICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAxCisgIG5lZ2F0ZWQgICAgICAgICAgVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZUZ1bmNOZWdhdGVkICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICBh
YnMgICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWJzICAgICAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgYWRkICAgICAgICAgICAgICBUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlRnVuY0FkZCAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAx
CisgIHN1YnRyYWN0ICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNTdWJ0cmFj
dCAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICByb3VuZCAgICAgICAgICAgIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jUm91bmQgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uIDEKKyAgdG90YWwgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1Rv
dGFsICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgIHRvU3RyaW5nICAgICAgICAg
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb1N0cmluZyAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gMAorICB0b0pTT04gICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVG
dW5jVG9KU09OICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgdG9Mb2NhbGVTdHJp
bmcgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvTG9jYWxlU3RyaW5nICAgICBEb250
RW51bXxGdW5jdGlvbiAwCisgIHZhbHVlT2YgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUZ1bmNWYWx1ZU9mICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICB5ZWFycyAg
ICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJZZWFycyAgICAgICAgICAg
IERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIG1vbnRocyAgICAgICAgICAgVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1vbnRocyAgICAgICAgICAgRG9udEVudW18UmVh
ZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgd2Vla3MgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlR2V0dGVyV2Vla3MgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21B
Y2Nlc3NvcgorICBkYXlzICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0
ZXJEYXlzICAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIGhv
dXJzICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckhvdXJzICAgICAg
ICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbWludXRlcyAgICAgICAg
ICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWludXRlcyAgICAgICAgICBEb250RW51
bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBzZWNvbmRzICAgICAgICAgIFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVHZXR0ZXJTZWNvbmRzICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1
c3RvbUFjY2Vzc29yCisgIG1pbGxpc2Vjb25kcyAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUdldHRlck1pbGxpc2Vjb25kcyAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IK
KyAgbWljcm9zZWNvbmRzICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWljcm9z
ZWNvbmRzICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBuYW5vc2Vjb25k
cyAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJOYW5vc2Vjb25kcyAgICAgIERv
bnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIHNpZ24gICAgICAgICAgICAgVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNpZ24gICAgICAgICAgICAgRG9udEVudW18UmVhZE9u
bHl8Q3VzdG9tQWNjZXNzb3IKKyAgYmxhbmsgICAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlR2V0dGVyQmxhbmsgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nl
c3NvcgorQGVuZAorKi8KKworVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSogVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7Cisg
ICAgYXV0byogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZT4odm0uaGVhcCkpIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUodm0s
IHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0
dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJlKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Cit9CisKK1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OlRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisgICAgSlNDX1RPX1NUUklOR19UQUdf
V0lUSE9VVF9UUkFOU0lUSU9OKCk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1dpdGgsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlv
bi5wcm90b3R5cGUud2l0aCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5p
dGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisgICAgCisgICAgSlNWYWx1ZSBkdXJhdGlvbkxp
a2UgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGlmICghZHVyYXRpb25MaWtlLmlzT2Jq
ZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJGaXJzdCBhcmd1bWVudCB0byBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUud2l0aCBt
dXN0IGJlIGFuIG9iamVjdCJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVj
dCwgZHVyYXRpb24tPndpdGgoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChkdXJhdGlvbkxpa2UpKSkp
KTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVGdW5jTmVnYXRlZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24g
PSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdh
dGVkIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBh
IER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJh
dGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCksIGR1cmF0
aW9uLT5uZWdhdGVkKCkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVGdW5jQWJzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRv
KiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJv
dG90eXBlLmFicyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6
ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFRlbXBv
cmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgp
LCBkdXJhdGlvbi0+YWJzKCkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWRkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBh
dXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24u
cHJvdG90eXBlLmFkZCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlh
bGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2JhbE9i
amVjdCwgZHVyYXRpb24tPmFkZChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkp
KSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUZ1bmNTdWJ0cmFjdCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRp
b24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5z
dWJ0cmFjdCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQg
YXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwg
ZHVyYXRpb24tPnN1YnRyYWN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkp
KSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlRnVuY1JvdW5kLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnJvdW5k
IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1
cmF0aW9uIl9zKTsKKworICAgIGF1dG8gb3B0aW9ucyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7
CisgICAgaWYgKG9wdGlvbnMuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlw
ZS5yb3VuZCByZXF1aXJlcyBhbiBvcHRpb25zIGFyZ3VtZW50Il9zKTsKKworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNyZWF0
ZUlmVmFsaWQoZ2xvYmFsT2JqZWN0LCBkdXJhdGlvbi0+cm91bmQoZ2xvYmFsT2JqZWN0LCBvcHRp
b25zKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVGdW5jVG90YWwsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0
aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUu
dG90YWwgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFz
IGEgRHVyYXRpb24iX3MpOworCisgICAgYXV0byBvcHRpb25zID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKTsKKyAgICBpZiAob3B0aW9ucy5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJv
dG90eXBlLnRvdGFsIHJlcXVpcmVzIGFuIG9wdGlvbnMgYXJndW1lbnQiX3MpOworCisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24t
PnRvdGFsKGdsb2JhbE9iamVjdCwgb3B0aW9ucykpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxE
dXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9u
KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
VGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvU3RyaW5nIGNhbGxlZCBvbiB2YWx1ZSB0aGF0
J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBkdXJh
dGlvbi0+dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpKTsK
K30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVG
dW5jVG9KU09OLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpz
RHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvSlNPTiBj
YWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJh
dGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBkdXJh
dGlvbi0+dG9TdHJpbmcoKSkpOworfQorCisvLyBUaGlzIHdpbGwgYmUgcGFydCBvZiB0aGUgRUNN
QS00MDIgSW50bC5EdXJhdGlvbkZvcm1hdCBwcm9wb3NhbDsgdW50aWwgdGhlbiwgd2UganVzdCBm
b2xsb3cgRUNNQS0yNjIgaW4gbWltaWNraW5nIHRvSlNPTi4KK0pTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvTG9jYWxlU3RyaW5nLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9y
YWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0
aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nIGNhbGxlZCBvbiB2
YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsK
KworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1cmF0aW9uLT50b1N0
cmluZygpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlRnVuY1ZhbHVlT2YsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS52
YWx1ZU9mIG11c3Qgbm90IGJlIGNhbGxlZCJfcyk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dF
VFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyWWVhcnMsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWlj
Q2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnllYXJzIGNhbGxl
ZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9u
Il9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPnll
YXJzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVHZXR0ZXJNb250aHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9u
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVt
cG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1vbnRocyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5v
dCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5tb250aHMoKSkpOworfQorCitKU0Nf
REVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlcldlZWtz
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJh
dGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3Rv
dHlwZS53ZWVrcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6
ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKGR1cmF0aW9uLT53ZWVrcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyRGF5cywgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRl
bXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlm
ICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuZGF5cyBjYWxsZWQgb24gdmFs
dWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5kYXlzKCkpKTsK
K30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVH
ZXR0ZXJIb3VycywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
YXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJh
dGlvbi5wcm90b3R5cGUuaG91cnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0
IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihkdXJhdGlvbi0+aG91cnMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RP
TV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNE
eW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1pbnV0
ZXMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEg
RHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJh
dGlvbi0+bWludXRlcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBv
cmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICgh
ZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc2Vjb25kcyBjYWxsZWQgb24gdmFs
dWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5zZWNvbmRzKCkp
KTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVHZXR0ZXJNaWxsaXNlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9u
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVt
cG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1pbGxpc2Vjb25kcyBjYWxsZWQgb24gdmFsdWUgdGhh
dCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taWxsaXNlY29uZHMoKSkp
OworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUdldHRlck1pY3Jvc2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24q
Pih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1w
b3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubWljcm9zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0
J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPm1pY3Jvc2Vjb25kcygpKSk7
Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
R2V0dGVyTmFub3NlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4o
dm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9y
YWwuRHVyYXRpb24ucHJvdG90eXBlLm5hbm9zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mg
bm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPm5hbm9zZWNvbmRzKCkpKTsKK30K
KworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0
ZXJTaWduLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRv
KiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9u
LnByb3RvdHlwZS5zaWduIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0
aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoZHVyYXRpb24tPnNpZ24oKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRU
RVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckJsYW5rLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nh
c3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5ibGFuayBjYWxsZWQg
b24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlvbiJf
cyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighZHVyYXRpb24tPnNp
Z24oKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mODc3NWVlYjA3YmU2MDJjZmFlZjAzODc5NGU5N2M2MjkzNTRkMzZlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERF
Q0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKFZN
JiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UZW1wb3JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbE9iamVjdC5jcHAKaW5kZXggYWYxNDM2NzVmMWU0YzYyODdlYTJiZTE4ZjQzM2VlYmUzNzJh
NzE3ZC4uYWRmOTU0MTZmMDExMGY3ZjRjYjIxYWUyNTc3YzQzNjI3MzE0YTM5NSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcApAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMCwxMCArMjEsMTQgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZW1wb3JhbE9iamVjdC5oIgogCisjaW5j
bHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0SW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJKU09iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RQcm90
b3R5cGUuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCIKKyNpbmNs
dWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxOb3cu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zNyw2ICs0MiwxMyBAQCBzdGF0aWMgSlNWYWx1ZSBj
cmVhdGVOb3dPYmplY3QoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogICAgIHJldHVybiBUZW1w
b3JhbE5vdzo6Y3JlYXRlKHZtLCBUZW1wb3JhbE5vdzo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9i
YWxPYmplY3QpKTsKIH0KIAorc3RhdGljIEpTVmFsdWUgY3JlYXRlRHVyYXRpb25Db25zdHJ1Y3Rv
cihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgVGVtcG9yYWxPYmplY3QqIHRlbXBv
cmFsT2JqZWN0ID0ganNDYXN0PFRlbXBvcmFsT2JqZWN0Kj4ob2JqZWN0KTsKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdGVtcG9yYWxPYmplY3QtPmdsb2JhbE9iamVjdCh2bSk7
CisgICAgcmV0dXJuIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBUZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uUHJvdG90eXBlKCkpLCBqc0Nhc3Q8VGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZSo+KGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKS0+c3RvcmVk
UHJvdG90eXBlT2JqZWN0KCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNpbmNsdWRl
ICJUZW1wb3JhbE9iamVjdC5sdXQuaCIKQEAgLTQ2LDYgKzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAvKiBTb3VyY2UgZm9yIFRlbXBvcmFsT2JqZWN0Lmx1dC5oCiBAYmVnaW4gdGVtcG9yYWxPYmpl
Y3RUYWJsZQogICBOb3cgICAgICAgICAgICBjcmVhdGVOb3dPYmplY3QgICAgICAgICAgICAgICAg
IERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKKyAgRHVyYXRpb24gICAgICAgY3JlYXRlRHVyYXRp
b25Db25zdHJ1Y3RvciAgICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiBAZW5kCiAqLwog
CkBAIC03NSw0ICs4OCwyMjAgQEAgdm9pZCBUZW1wb3JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQogICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwogfQog
CitzdGF0aWMgU3RyaW5nVmlldyBzaW5ndWxhclVuaXQoU3RyaW5nVmlldyB1bml0KQoreworICAg
IC8vIFBsdXJhbHMgYXJlIGFsbG93ZWQsIGJ1dCB0aGFua2Z1bGx5IHRoZXkncmUgYWxsIGp1c3Qg
YSBzaW1wbGUgLXMuCisgICAgcmV0dXJuIHVuaXQuZW5kc1dpdGgoInMiKSA/IHVuaXQubGVmdCh1
bml0Lmxlbmd0aCgpIC0gMSkgOiB1bml0OworfQorCitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5p
dD4gdGVtcG9yYWxVbml0VHlwZShTdHJpbmdWaWV3IHVuaXQpCit7CisgICAgU3RyaW5nVmlldyBz
aW5ndWxhciA9IHNpbmd1bGFyVW5pdCh1bml0KTsKKworICAgIGlmIChzaW5ndWxhciA9PSAieWVh
ciIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OlllYXI7CisgICAgaWYgKHNpbmd1bGFy
ID09ICJtb250aCIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok1vbnRoOworICAgIGlm
IChzaW5ndWxhciA9PSAid2VlayIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OldlZWs7
CisgICAgaWYgKHNpbmd1bGFyID09ICJkYXkiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0
OjpEYXk7CisgICAgaWYgKHNpbmd1bGFyID09ICJob3VyIikKKyAgICAgICAgcmV0dXJuIFRlbXBv
cmFsVW5pdDo6SG91cjsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm1pbnV0ZSIpCisgICAgICAgIHJl
dHVybiBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZTsKKyAgICBpZiAoc2luZ3VsYXIgPT0gInNlY29uZCIp
CisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OlNlY29uZDsKKyAgICBpZiAoc2luZ3VsYXIg
PT0gIm1pbGxpc2Vjb25kIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNv
bmQ7CisgICAgaWYgKHNpbmd1bGFyID09ICJtaWNyb3NlY29uZCIpCisgICAgICAgIHJldHVybiBU
ZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kOworICAgIGlmIChzaW5ndWxhciA9PSAibmFub3NlY29u
ZCIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQ7CisgICAgCisgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworLy8gVG9MYXJnZXN0VGVtcG9yYWxVbml0ICggbm9y
bWFsaXplZE9wdGlvbnMsIGRpc2FsbG93ZWRVbml0cywgZmFsbGJhY2sgWyAsIGF1dG9WYWx1ZSBd
ICkKK3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1wb3JhbExhcmdlc3RVbml0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8VGVtcG9yYWxVbml0PiBkaXNhbGxvd2VkVW5pdHMsIFRlbXBvcmFsVW5pdCBhdXRv
VmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBsYXJnZXN0VW5pdCA9
IGludGxTdHJpbmdPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sYXJnZXN0VW5pdCwgeyB9LCBudWxscHRyLCBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgaWYgKCFsYXJnZXN0VW5pdCkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICBpZiAobGFyZ2VzdFVuaXQgPT0g
ImF1dG8iKQorICAgICAgICByZXR1cm4gYXV0b1ZhbHVlOworCisgICAgYXV0byB1bml0VHlwZSA9
IHRlbXBvcmFsVW5pdFR5cGUobGFyZ2VzdFVuaXQpOworICAgIGlmICghdW5pdFR5cGUpIHsKKyAg
ICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJsYXJnZXN0VW5pdCBp
cyBhbiBpbnZhbGlkIFRlbXBvcmFsIHVuaXQiX3MpOworICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIH0KKworICAgIGlmIChkaXNhbGxvd2VkVW5pdHMuc2l6ZSgpICYmIHN0ZDo6Zmlu
ZChkaXNhbGxvd2VkVW5pdHMuYmVnaW4oKSwgZGlzYWxsb3dlZFVuaXRzLmVuZCgpLCB1bml0VHlw
ZS52YWx1ZSgpKSAhPSBkaXNhbGxvd2VkVW5pdHMuZW5kKCkpIHsKKyAgICAgICAgdGhyb3dSYW5n
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJsYXJnZXN0VW5pdCBpcyBhIGRpc2FsbG93ZWQg
dW5pdCJfcyk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgcmV0
dXJuIHVuaXRUeXBlOworfQorCisvLyBUb1NtYWxsZXN0VGVtcG9yYWxVbml0ICggbm9ybWFsaXpl
ZE9wdGlvbnMsIGRpc2FsbG93ZWRVbml0cywgZmFsbGJhY2sgKQorc3RkOjpvcHRpb25hbDxUZW1w
b3JhbFVuaXQ+IHRlbXBvcmFsU21hbGxlc3RVbml0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VGVtcG9yYWxVbml0
PiBkaXNhbGxvd2VkVW5pdHMpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBz
bWFsbGVzdFVuaXQgPSBpbnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0u
cHJvcGVydHlOYW1lcy0+c21hbGxlc3RVbml0LCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAoIXNt
YWxsZXN0VW5pdCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gdW5p
dFR5cGUgPSB0ZW1wb3JhbFVuaXRUeXBlKHNtYWxsZXN0VW5pdCk7CisgICAgaWYgKCF1bml0VHlw
ZSkgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInNtYWxs
ZXN0VW5pdCBpcyBhbiBpbnZhbGlkIFRlbXBvcmFsIHVuaXQiX3MpOworICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChkaXNhbGxvd2VkVW5pdHMuc2l6ZSgpICYm
IHN0ZDo6ZmluZChkaXNhbGxvd2VkVW5pdHMuYmVnaW4oKSwgZGlzYWxsb3dlZFVuaXRzLmVuZCgp
LCB1bml0VHlwZS52YWx1ZSgpKSAhPSBkaXNhbGxvd2VkVW5pdHMuZW5kKCkpIHsKKyAgICAgICAg
dGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJzbWFsbGVzdFVuaXQgaXMgYSBk
aXNhbGxvd2VkIHVuaXQiX3MpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0K
KworICAgIHJldHVybiB1bml0VHlwZTsKK30KKworLy8gR2V0U3RyaW5nT3JOdW1iZXJPcHRpb24o
bm9ybWFsaXplZE9wdGlvbnMsICJmcmFjdGlvbmFsU2Vjb25kRGlnaXRzIiwgwqsgImF1dG8iIMK7
LCAwLCA5LCAiYXV0byIpCitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0ZW1wb3JhbEZyYWN0aW9u
YWxTZWNvbmREaWdpdHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9w
dGlvbnMpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghb3B0aW9ucykKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRpb25zLT5n
ZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5mcmFjdGlvbmFsU2Vjb25kRGlnaXRz
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgCisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZh
bHVlID0gdmFsdWUuYXNOdW1iZXIoKTsKKyAgICAgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBk
b3VibGVWYWx1ZSA+IDkpIHsKKyAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiZnJhY3Rpb25hbFNlY29uZERpZ2l0cyBpcyBvdXQgb2YgcmFuZ2UiX3MpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZG91YmxlVmFsdWUpOworICAgIH0KKworICAgIFN0
cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgIGlmIChzdHJp
bmdWYWx1ZSAhPSAiYXV0byIpCisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiZnJhY3Rpb25hbFNlY29uZERpZ2l0cyBpcyBvdXQgb2YgcmFuZ2UiX3MpOworCisg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworLy8gVG9TZWNvbmRzU3RyaW5nUHJlY2lzaW9u
ICggbm9ybWFsaXplZE9wdGlvbnMgKQorUHJlY2lzaW9uRGF0YSBzZWNvbmRzU3RyaW5nUHJlY2lz
aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zKQorewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvIHNtYWxsZXN0VW5pdCA9IHRlbXBvcmFsU21h
bGxlc3RVbml0KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgeyBUZW1wb3JhbFVuaXQ6OlllYXIsIFRl
bXBvcmFsVW5pdDo6TW9udGgsIFRlbXBvcmFsVW5pdDo6V2VlaywgVGVtcG9yYWxVbml0OjpEYXks
IFRlbXBvcmFsVW5pdDo6SG91ciwgVGVtcG9yYWxVbml0OjpNaW51dGUgfSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmIChzbWFsbGVzdFVuaXQpIHsKKyAg
ICAgICAgc3dpdGNoIChzbWFsbGVzdFVuaXQudmFsdWUoKSkgeworICAgICAgICBjYXNlIFRlbXBv
cmFsVW5pdDo6U2Vjb25kOgorICAgICAgICAgICAgcmV0dXJuIHsgMCwgVGVtcG9yYWxVbml0OjpT
ZWNvbmQsIDEgfTsKKyAgICAgICAgY2FzZSBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kOgorICAg
ICAgICAgICAgcmV0dXJuIHsgMywgVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCwgMSB9OworICAg
ICAgICBjYXNlIFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4g
eyA2LCBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kLCAxIH07CisgICAgICAgIGNhc2UgVGVtcG9y
YWxVbml0OjpOYW5vc2Vjb25kOgorICAgICAgICAgICAgcmV0dXJuIHsgOSwgVGVtcG9yYWxVbml0
OjpOYW5vc2Vjb25kLCAxIH07CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGF1dG8gcHJlY2lzaW9uID0gdGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25k
RGlnaXRzKGdsb2JhbE9iamVjdCwgb3B0aW9ucyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKworICAgIGlmICghcHJlY2lzaW9uKQorICAgICAgICByZXR1cm4geyBzdGQ6
Om51bGxvcHQsIFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZCwgMSB9OworCisgICAgdW5zaWduZWQg
ZGlnaXRzID0gcHJlY2lzaW9uLnZhbHVlKCk7CisgICAgaWYgKCFkaWdpdHMpCisgICAgICAgIHJl
dHVybiB7IDAsIFRlbXBvcmFsVW5pdDo6U2Vjb25kLCAxIH07CisKKyAgICBpZiAoZGlnaXRzIDw9
IDMpCisgICAgICAgIHJldHVybiB7IGRpZ2l0cywgVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCwg
c3RkOjpwb3coMTAsIDMgLSBkaWdpdHMpIH07CisKKyAgICBpZiAoZGlnaXRzIDw9IDYpCisgICAg
ICAgIHJldHVybiB7IGRpZ2l0cywgVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCwgc3RkOjpwb3co
MTAsIDYgLSBkaWdpdHMpIH07CisKKyAgICBBU1NFUlQoZGlnaXRzIDw9IDkpOworICAgIHJldHVy
biB7IGRpZ2l0cywgVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kLCBzdGQ6OnBvdygxMCwgOSAtIGRp
Z2l0cykgfTsKK30KKworLy8gTWF4aW11bVRlbXBvcmFsRHVyYXRpb25Sb3VuZGluZ0luY3JlbWVu
dCAoIHVuaXQgKQorZG91YmxlIG1heGltdW1Sb3VuZGluZ0luY3JlbWVudChUZW1wb3JhbFVuaXQg
dW5pdCkKK3sKKyAgICBpZiAodW5pdCA8PSBUZW1wb3JhbFVuaXQ6OkRheSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKyAgICBpZiAodW5p
dCA9PSBUZW1wb3JhbFVuaXQ6OkhvdXIpCisgICAgICAgIHJldHVybiAyNDsKKyAgICBpZiAodW5p
dCA8PSBUZW1wb3JhbFVuaXQ6OlNlY29uZCkKKyAgICAgICAgcmV0dXJuIDYwOworICAgIHJldHVy
biAxMDAwOworfQorCisvLyBUb1RlbXBvcmFsUm91bmRpbmdJbmNyZW1lbnQgKCBub3JtYWxpemVk
T3B0aW9ucywgZGl2aWRlbmQsIGluY2x1c2l2ZSApCitkb3VibGUgdGVtcG9yYWxSb3VuZGluZ0lu
Y3JlbWVudChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3B0aW9ucywg
ZG91YmxlIGRpdmlkZW5kLCBib29sIGluY2x1c2l2ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgYXV0byBoYXNGaW5pdGVEaXZpZGVuZCA9IGRpdmlkZW5kIDwgc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpOworICAgIGF1dG8gbWF4aW11bSA9IChoYXNGaW5pdGVE
aXZpZGVuZCAmJiBkaXZpZGVuZCA+IDEgJiYgIWluY2x1c2l2ZSkgPyBkaXZpZGVuZCAtIDEgOiBk
aXZpZGVuZDsKKyAgICBkb3VibGUgaW5jcmVtZW50ID0gaW50bE51bWJlck9wdGlvbihnbG9iYWxP
YmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnJvdW5kaW5nSW5jcmVtZW50LCAxLCBt
YXhpbXVtLCAxKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKworICAgIGlu
Y3JlbWVudCA9IHN0ZDo6Zmxvb3IoaW5jcmVtZW50KTsKKyAgICBpZiAoaGFzRmluaXRlRGl2aWRl
bmQgJiYgc3RkOjpmbW9kKGRpdmlkZW5kLCBpbmNyZW1lbnQpKSB7CisgICAgICAgIHRocm93UmFu
Z2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAicm91bmRpbmdJbmNyZW1lbnQgdmFsdWUgZG9l
cyBub3QgZGl2aWRlIGV2ZW5seSJfcyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHJldHVybiBpbmNyZW1lbnQ7Cit9CisKKy8vIFJvdW5kTnVtYmVyVG9JbmNyZW1lbnQgKCB4LCBp
bmNyZW1lbnQsIHJvdW5kaW5nTW9kZSApCitkb3VibGUgcm91bmROdW1iZXJUb0luY3JlbWVudChk
b3VibGUgeCwgZG91YmxlIGluY3JlbWVudCwgUm91bmRpbmdNb2RlIG1vZGUpCit7CisgICAgYXV0
byBxdW90aWVudCA9IHggLyBpbmNyZW1lbnQ7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2Fz
ZSBSb3VuZGluZ01vZGU6OkNlaWw6CisgICAgICAgIHJldHVybiAtc3RkOjpmbG9vcigtcXVvdGll
bnQpICogaW5jcmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpGbG9vcjoKKyAgICAgICAg
cmV0dXJuIHN0ZDo6Zmxvb3IocXVvdGllbnQpICogaW5jcmVtZW50OworICAgIGNhc2UgUm91bmRp
bmdNb2RlOjpUcnVuYzoKKyAgICAgICAgcmV0dXJuIHN0ZDo6dHJ1bmMocXVvdGllbnQpICogaW5j
cmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpIYWxmRXhwYW5kOgorICAgICAgICByZXR1
cm4gc3RkOjpyb3VuZChxdW90aWVudCkgKiBpbmNyZW1lbnQ7CisgICAgfQorfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9i
amVjdC5oCmluZGV4IDFlZTk5OTRjMmI4YzA1ZTQ2ZDE2MTA2YTY2ZjAyYjk3NThiOGIyODMuLjJk
N2FjOTk1MzkwOWM5YzhjNjY5NWY2Mzc2ODJlZTJkMWY2ZjU0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaApAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSwgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsNiArMjQsMjcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKKyNkZWZpbmUgSlNDX1RFTVBPUkFMX1VOSVRTKG1hY3JvKSBcCisgICAgbWFjcm8o
eWVhciwgWWVhcikgXAorICAgIG1hY3JvKG1vbnRoLCBNb250aCkgXAorICAgIG1hY3JvKHdlZWss
IFdlZWspIFwKKyAgICBtYWNybyhkYXksIERheSkgXAorICAgIG1hY3JvKGhvdXIsIEhvdXIpIFwK
KyAgICBtYWNybyhtaW51dGUsIE1pbnV0ZSkgXAorICAgIG1hY3JvKHNlY29uZCwgU2Vjb25kKSBc
CisgICAgbWFjcm8obWlsbGlzZWNvbmQsIE1pbGxpc2Vjb25kKSBcCisgICAgbWFjcm8obWljcm9z
ZWNvbmQsIE1pY3Jvc2Vjb25kKSBcCisgICAgbWFjcm8obmFub3NlY29uZCwgTmFub3NlY29uZCkg
XAorCitlbnVtIGNsYXNzIFRlbXBvcmFsVW5pdCA6IHVpbnQ4X3QgeworI2RlZmluZSBKU0NfREVG
SU5FX1RFTVBPUkFMX1VOSVRfRU5VTShuYW1lLCBjYXBpdGFsaXplZE5hbWUpIGNhcGl0YWxpemVk
TmFtZSwKKyAgICBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX0RFRklORV9URU1QT1JBTF9VTklUX0VO
VU0pCisjdW5kZWYgSlNDX0RFRklORV9URU1QT1JBTF9VTklUX0VOVU0KK307CisjZGVmaW5lIEpT
Q19DT1VOVF9URU1QT1JBTF9VTklUUyhuYW1lLCBjYXBpdGFsaXplZE5hbWUpICsgMQorc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlRlbXBvcmFsVW5pdHMgPSAwIEpTQ19URU1QT1JB
TF9VTklUUyhKU0NfQ09VTlRfVEVNUE9SQUxfVU5JVFMpOworI3VuZGVmIEpTQ19DT1VOVF9URU1Q
T1JBTF9VTklUUworCiBjbGFzcyBUZW1wb3JhbE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsK
QEAgLTQ1LDQgKzY3LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwogfTsKIAorZW51bSBjbGFzcyBSb3VuZGluZ01vZGUgOiB1aW50OF90IHsKKyAgICBDZWlsLAor
ICAgIEZsb29yLAorICAgIFRydW5jLAorICAgIEhhbGZFeHBhbmQKK307CisKK3N0cnVjdCBQcmVj
aXNpb25EYXRhIHsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwcmVjaXNpb247CisgICAg
VGVtcG9yYWxVbml0IHVuaXQ7CisgICAgZG91YmxlIGluY3JlbWVudDsKK307CisKK3N0ZDo6b3B0
aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1wb3JhbFVuaXRUeXBlKFN0cmluZ1ZpZXcpOworc3RkOjpv
cHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFsTGFyZ2VzdFVuaXQoSlNHbG9iYWxPYmplY3Qq
LCBKU09iamVjdCogb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0PFRlbXBvcmFsVW5pdD4g
ZGlzYWxsb3dlZFVuaXRzLCBUZW1wb3JhbFVuaXQgYXV0b1ZhbHVlKTsKK3N0ZDo6b3B0aW9uYWw8
VGVtcG9yYWxVbml0PiB0ZW1wb3JhbFNtYWxsZXN0VW5pdChKU0dsb2JhbE9iamVjdCosIEpTT2Jq
ZWN0KiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VGVtcG9yYWxVbml0PiBkaXNhbGxv
d2VkVW5pdHMpOworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdGVtcG9yYWxGcmFjdGlvbmFsU2Vj
b25kRGlnaXRzKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlvbnMpOworUHJlY2lzaW9u
RGF0YSBzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9w
dGlvbnMpOworZG91YmxlIG1heGltdW1Sb3VuZGluZ0luY3JlbWVudChUZW1wb3JhbFVuaXQpOwor
ZG91YmxlIHRlbXBvcmFsUm91bmRpbmdJbmNyZW1lbnQoSlNHbG9iYWxPYmplY3QqLCBKU09iamVj
dCogb3B0aW9ucywgZG91YmxlIGRpdmlkZW5kLCBib29sIGluY2x1c2l2ZSk7Citkb3VibGUgcm91
bmROdW1iZXJUb0luY3JlbWVudChkb3VibGUsIGRvdWJsZSBpbmNyZW1lbnQsIFJvdW5kaW5nTW9k
ZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CmluZGV4IDFkZWE2YTEzY2I0YzQyOWI5YjA3MTk4YmFiNmM0NGYzMTQ2OWQwNjguLjgzMWQzZjJl
ZDNhMzI3Y2ZmYjM2OGVmMTYzYjFhOGFiNmY3YzgxNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKQEAgLTE2Miw2ICsxNjIsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWlu
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIlN5bWJvbE9iamVj
dC5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKICNpbmNsdWRlICJUZXN0UnVubmVy
VXRpbHMuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXIuaCIKQEAgLTE2MTcsNiArMTYxOCw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyhpbnRsUmVsYXRpdmVUaW1lRm9ybWF0U3BhY2UsIGludGxSZWxhdGl2CiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRJdGVyYXRv
clNwYWNlLCBpbnRsU2VnbWVudEl0ZXJhdG9ySGVhcENlbGxUeXBlLmdldCgpLCBJbnRsU2VnbWVu
dEl0ZXJhdG9yKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxT
ZWdtZW50ZXJTcGFjZSwgaW50bFNlZ21lbnRlckhlYXBDZWxsVHlwZS5nZXQoKSwgSW50bFNlZ21l
bnRlcikKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVu
dHNTcGFjZSwgaW50bFNlZ21lbnRzSGVhcENlbGxUeXBlLmdldCgpLCBJbnRsU2VnbWVudHMpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codGVtcG9yYWxEdXJhdGlvblNw
YWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBUZW1wb3JhbER1cmF0aW9uKQogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhq
c1RvV2FzbUlDQ2FsbGVlU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVG9XYXNtSUND
YWxsZWUpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1i
bHlDb2RlQmxvY2tTcGFjZSwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuZ2V0KCks
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spIC8vIEhhc2g6MHg5YWQ5OTVjZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKaW5kZXggYmNlZDk4NDNmY2U4MjYyMGU4OGI5NzUwMTgzYWViNjE1NTYy
NjA2OS4uYWJkYTcyZTk0M2E5MjVmNGVmNzYwM2UyNTBlM2QwNmNhZTA0MTcyMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xODUsNiArMTg1LDcgQEAgY2xhc3MgU3RydWN0dXJl
OwogY2xhc3MgUmVnRXhwOwogI2VuZGlmCiBjbGFzcyBTeW1ib2w7CitjbGFzcyBUZW1wb3JhbER1
cmF0aW9uOwogY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXI7CiBjbGFzcyBVbmxpbmtlZENvZGVC
bG9jazsKIGNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKQEAgLTYxNSw2ICs2MTYsNyBAQCBw
dWJsaWM6CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsU2VnbWVu
dEl0ZXJhdG9yU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihp
bnRsU2VnbWVudGVyU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
UihpbnRsU2VnbWVudHNTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHRlbXBvcmFsRHVyYXRpb25TcGFjZSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlDQ2FsbGVlU3BhY2Up
CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUNvZGVC
bG9ja1NwYWNlKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5n
ZUxvZwppbmRleCA4YjFhNWE5ZGUyMzc2ZTc1NzIwNjhhMTdjODA3YzJjZjk3OGRhMWUwLi5lN2E5
YTFiNGY1NzgzM2Y0MzZhYzNlYTNiNzUxYjY2NDdjZDE3NzcyIDEwMDY0NAotLS0gYS9KU1Rlc3Rz
L0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIx
LTA4LTI3ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAg
ICBbSlNDXSBJbXBsZW1lbnQgVGVtcG9yYWwuRHVyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODUzMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL3RlbXBvcmFsLWR1cmF0aW9uLmpz
OiBBZGRlZC4KKwogMjAyMS0wOC0xNyAgTWlraGFpbCBSLiBHYWRlbGhhICA8bWlraGFpbEBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFNraXAgZmFpbGluZyBNSVBTIHRlc3RzCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qcyBiL0pTVGVzdHMv
c3RyZXNzL3RlbXBvcmFsLWR1cmF0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjZjEzYTlmOTVmODA0ODIw
ZDRkZjU0ZTUxMzIwNzcyNTUxZDllYTIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVz
cy90ZW1wb3JhbC1kdXJhdGlvbi5qcwpAQCAtMCwwICsxLDI4OSBAQAorLy9AIHJlcXVpcmVPcHRp
b25zKCItLXVzZVRlbXBvcmFsPTEiKQorCitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVj
dGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcihgZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH1gKTsKK30KKworZnVu
Y3Rpb24gc2hvdWxkTm90VGhyb3coZnVuYykgeworICAgIGZ1bmMoKTsKK30KKworZnVuY3Rpb24g
c2hvdWxkVGhyb3coZnVuYywgZXJyb3JUeXBlKSB7CisgICAgbGV0IGVycm9yOworICAgIHRyeSB7
CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsK
KyAgICB9CisKKyAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIGVycm9yVHlwZSkpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtlcnJvclR5cGUubmFtZX0hYCk7Cit9CisKK3No
b3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uIGluc3RhbmNlb2YgRnVuY3Rpb24sIHRydWUpOworc2hv
dWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ubGVuZ3RoLCAwKTsKK3Nob3VsZEJlKE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwuRHVyYXRpb24sICdwcm90b3R5cGUnKS53cml0
YWJsZSwgZmFsc2UpOworc2hvdWxkQmUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihU
ZW1wb3JhbC5EdXJhdGlvbiwgJ3Byb3RvdHlwZScpLmVudW1lcmFibGUsIGZhbHNlKTsKK3Nob3Vs
ZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwuRHVyYXRpb24sICdw
cm90b3R5cGUnKS5jb25maWd1cmFibGUsIGZhbHNlKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBv
cmFsLkR1cmF0aW9uKCksIFR5cGVFcnJvcik7CisKK3Nob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJh
dGlvbigpIGluc3RhbmNlb2YgVGVtcG9yYWwuRHVyYXRpb24sIHRydWUpOworeworICAgIGNsYXNz
IERlcml2ZWREdXJhdGlvbiBleHRlbmRzIFRlbXBvcmFsLkR1cmF0aW9uIHt9CisKKyAgICBjb25z
dCBkZCA9IG5ldyBEZXJpdmVkRHVyYXRpb24oKTsKKyAgICBzaG91bGRCZShkZCBpbnN0YW5jZW9m
IERlcml2ZWREdXJhdGlvbiwgdHJ1ZSk7CisgICAgc2hvdWxkQmUoZGQgaW5zdGFuY2VvZiBUZW1w
b3JhbC5EdXJhdGlvbiwgdHJ1ZSk7CisgICAgc2hvdWxkQmUoZGQubmVnYXRlZCwgVGVtcG9yYWwu
RHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQpOworICAgIHNob3VsZEJlKE9iamVjdC5nZXRQcm90
b3R5cGVPZihkZCksIERlcml2ZWREdXJhdGlvbi5wcm90b3R5cGUpOworICAgIHNob3VsZEJlKE9i
amVjdC5nZXRQcm90b3R5cGVPZihEZXJpdmVkRHVyYXRpb24ucHJvdG90eXBlKSwgVGVtcG9yYWwu
RHVyYXRpb24ucHJvdG90eXBlKTsKK30KKworc2hvdWxkVGhyb3coKCkgPT4gbmV3IFRlbXBvcmFs
LkR1cmF0aW9uKDEsIC0xKSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBuZXcgVGVt
cG9yYWwuRHVyYXRpb24oSW5maW5pdHkpLCBSYW5nZUVycm9yKTsKKworY29uc3QgZmllbGRzID0g
Wyd5ZWFycycsICdtb250aHMnLCAnd2Vla3MnLCAnZGF5cycsICdob3VycycsICdtaW51dGVzJywg
J3NlY29uZHMnLCAnbWlsbGlzZWNvbmRzJywgJ21pY3Jvc2Vjb25kcycsICduYW5vc2Vjb25kcydd
OworY29uc3QgemVybyA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigpOworY29uc3QgcG9zID0gbmV3
IFRlbXBvcmFsLkR1cmF0aW9uKDEsMiwzLDQsNSw2LDcsOCw5LDEwKTsKK2NvbnN0IG5lZyA9IG5l
dyBUZW1wb3JhbC5EdXJhdGlvbigtMSwtMiwtMywtNCwtNSwtNiwtNywtOCwtOSwtMTApOworCitm
aWVsZHMuZm9yRWFjaCgoZmllbGQsIGkpID0+IHsKKyAgICBzaG91bGRUaHJvdygoKSA9PiBUZW1w
b3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbZmllbGRdLCBUeXBlRXJyb3IpOworICAgIHNob3VsZEJl
KHplcm9bZmllbGRdLCAwKTsKKyAgICBzaG91bGRCZShwb3NbZmllbGRdLCBpICsgMSk7CisgICAg
c2hvdWxkQmUobmVnW2ZpZWxkXSwgLWkgLSAxKTsKK30pOworCitzaG91bGRUaHJvdygoKSA9PiBU
ZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc2lnbiwgVHlwZUVycm9yKTsKK3Nob3VsZEJlKHpl
cm8uc2lnbiwgMCk7CitzaG91bGRCZShwb3Muc2lnbiwgMSk7CitzaG91bGRCZShuZWcuc2lnbiwg
LTEpOworCitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYmxh
bmssIFR5cGVFcnJvcik7CitzaG91bGRCZSh6ZXJvLmJsYW5rLCB0cnVlKTsKK3Nob3VsZEJlKHBv
cy5ibGFuaywgZmFsc2UpOworc2hvdWxkQmUobmVnLmJsYW5rLCBmYWxzZSk7CisKK3Nob3VsZEJl
KFRlbXBvcmFsLkR1cmF0aW9uLmZyb20ubGVuZ3RoLCAxKTsKK3Nob3VsZFRocm93KCgpID0+IFRl
bXBvcmFsLkR1cmF0aW9uLmZyb20oKSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBU
ZW1wb3JhbC5EdXJhdGlvbi5mcm9tKHt9KSwgVHlwZUVycm9yKTsKK3sKKyAgICBjb25zdCBiYWRT
dHJpbmdzID0gWworICAgICAgICAnJywgJ1AnLCAnUDEnLCAnUFQnLCAnUDFZVCcsICdQVDEnLAor
ICAgICAgICAnUDFXMVknLCAgJ1BUMVMxTScsCisgICAgICAgICdQMS4xWScsICdQVDEuMUgxTScs
ICdQVDEuMU0xUycsCisgICAgICAgICdQVDEuMTExMTExMTExMUgnLCAnUFQxLjExMTExMTExMTFN
JywgJ1BUMS4xMTExMTExMTExUycsCisgICAgICAgIGBQJHtBcnJheSgzMDkpLmZpbGwoOSkuam9p
bignJyl9WWAKKyAgICBdOworICAgIGZvciAoY29uc3QgYmFkU3RyaW5nIGluIGJhZFN0cmluZ3Mp
CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oYmFkU3Ry
aW5nKSwgUmFuZ2VFcnJvcik7CisgICAgCisgICAgY29uc3QgZnJvbVN0cmluZyA9IFRlbXBvcmFs
LkR1cmF0aW9uLmZyb20oJ1AxWTJNM1c0RFQ1SDZNNy4wMDgwMDkwMTBTJyk7CisKKyAgICBjb25z
dCBkdXJhdGlvbkxpa2UgPSB7fTsKKyAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQsIGkpID0+IHsg
ZHVyYXRpb25MaWtlW2ZpZWxkXSA9IGkgKyAxOyB9KTsKKyAgICBjb25zdCBmcm9tRHVyYXRpb25M
aWtlID0gVGVtcG9yYWwuRHVyYXRpb24uZnJvbShkdXJhdGlvbkxpa2UpOworCisgICAgZm9yIChj
b25zdCBmaWVsZCBvZiBmaWVsZHMpIHsKKyAgICAgICAgc2hvdWxkQmUoZnJvbVN0cmluZ1tmaWVs
ZF0sIHBvc1tmaWVsZF0pOworICAgICAgICBzaG91bGRCZShmcm9tRHVyYXRpb25MaWtlW2ZpZWxk
XSwgcG9zW2ZpZWxkXSk7CisgICAgfQorfQorc2hvdWxkTm90VGhyb3coKCkgPT4gVGVtcG9yYWwu
RHVyYXRpb24uZnJvbShgUCR7QXJyYXkoMzA4KS5maWxsKDkpLmpvaW4oJycpfVlgKSk7CitzaG91
bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCfiiJJwMXkybTN3NGR0NWg2bTcuMDA4MDA5MDEw
cycpLnRvU3RyaW5nKCksICctUDFZMk0zVzREVDVINk03LjAwODAwOTAxUycpOworc2hvdWxkQmUo
VGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnK1AxWTJEVDNINC4wUycpLnRvU3RyaW5nKCksICdQMVky
RFQzSDRTJyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQVDEuMDMxMjVIJyku
dG9TdHJpbmcoKSwgJ1BUMUgxTTUyLjVTJyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5m
cm9tKCdQVDEuMDMxMjVNJykudG9TdHJpbmcoKSwgJ1BUMU0xLjg3NVMnKTsKKworY29uc3QgcG9z
QWJzb2x1dGUgPSBuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMSwyLDMsNCw1LDYsNyk7CisK
K3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUubGVuZ3RoLCAyKTsKK3Nob3VsZFRo
cm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoKSwgUmFuZ2VFcnJvcik7CitzaG91
bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHt9KSwgVHlwZUVycm9yKTsK
K3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoemVybyksIFJhbmdl
RXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh6ZXJv
LCB7fSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5j
b21wYXJlKHsgeWVhcnM6IDEgfSwgemVybyksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkg
PT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh7IG1vbnRoczogMSB9LCB6ZXJvKSwgUmFuZ2VF
cnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHsgd2Vl
a3M6IDEgfSwgemVybyksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwu
RHVyYXRpb24uY29tcGFyZSh6ZXJvLCB7IHllYXJzOiAxIH0pLCBSYW5nZUVycm9yKTsKK3Nob3Vs
ZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoemVybywgeyBtb250aHM6IDEg
fSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29t
cGFyZSh6ZXJvLCB7IHdlZWtzOiAxIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZEJlKFRlbXBvcmFs
LkR1cmF0aW9uLmNvbXBhcmUocG9zQWJzb2x1dGUsIHBvc0Fic29sdXRlKSwgMCk7CitzaG91bGRC
ZShUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHBvc0Fic29sdXRlLCB6ZXJvKSwgMSk7CitzaG91
bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHplcm8sIHBvc0Fic29sdXRlKSwgLTEpOwor
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSgnUFQ4NjQwMFMnLCAnUDFEJyksIDAp
OworCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUud2l0aC5sZW5ndGgsIDEp
Oworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLndpdGguY2Fs
bCh7fSwgeyB5ZWFyczogMSB9KSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8u
d2l0aCgpLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby53aXRoKHt9KSwgVHlw
ZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ud2l0aCh7IHllYXJzOiAxLjEgfSksIFJh
bmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gcG9zLndpdGgoeyB5ZWFyczogLTEgfSksIFJh
bmdlRXJyb3IpOworeworICAgIGNvbnN0IGZ1bGx5VXBkYXRlZCA9IHBvcy53aXRoKG5lZyk7Cisg
ICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHsKKyAgICAgICAgc2hvdWxkQmUoemVyby53
aXRoKHsgW2ZpZWxkXTogMSB9KVtmaWVsZF0sIDEpOworICAgICAgICBzaG91bGRCZShmdWxseVVw
ZGF0ZWRbZmllbGRdLCBuZWdbZmllbGRdKTsKKyAgICB9Cit9CisKK3Nob3VsZEJlKFRlbXBvcmFs
LkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVkLmxlbmd0aCwgMCk7CitzaG91bGRUaHJvdygoKSA9
PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubmVnYXRlZC5jYWxsKHt9KSwgVHlwZUVycm9y
KTsKK3sKKyAgICBjb25zdCBuZWdhdGVkWmVybyA9IHplcm8ubmVnYXRlZCgpOworICAgIGNvbnN0
IG5lZ2F0ZWRQb3MgPSBwb3MubmVnYXRlZCgpOworICAgIGNvbnN0IG5lZ2F0ZWROZWcgPSBuZWcu
bmVnYXRlZCgpOworICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7CisgICAgICAgIHNo
b3VsZEJlKG5lZ2F0ZWRaZXJvW2ZpZWxkXSwgemVyb1tmaWVsZF0pOworICAgICAgICBzaG91bGRC
ZShuZWdhdGVkTmVnW2ZpZWxkXSwgcG9zW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKG5lZ2F0
ZWRQb3NbZmllbGRdLCBuZWdbZmllbGRdKTsKKyAgICB9Cit9CisKK3Nob3VsZEJlKFRlbXBvcmFs
LkR1cmF0aW9uLnByb3RvdHlwZS5hYnMubGVuZ3RoLCAwKTsKK3Nob3VsZFRocm93KCgpID0+IFRl
bXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5hYnMuY2FsbCh7fSksIFR5cGVFcnJvcik7Cit7Cisg
ICAgY29uc3QgYWJzWmVybyA9IHplcm8uYWJzKCk7CisgICAgY29uc3QgYWJzUG9zID0gcG9zLmFi
cygpOworICAgIGNvbnN0IGFic05lZyA9IG5lZy5hYnMoKTsKKyAgICBmb3IgKGNvbnN0IGZpZWxk
IG9mIGZpZWxkcykgeworICAgICAgICBzaG91bGRCZShhYnNaZXJvW2ZpZWxkXSwgemVyb1tmaWVs
ZF0pOworICAgICAgICBzaG91bGRCZShhYnNQb3NbZmllbGRdLCBwb3NbZmllbGRdKTsKKyAgICAg
ICAgc2hvdWxkQmUoYWJzTmVnW2ZpZWxkXSwgcG9zW2ZpZWxkXSk7CisgICAgfQorfQorCitmb3Ig
KGNvbnN0IG1ldGhvZCBvZiBbJ2FkZCcsICdzdWJ0cmFjdCddKSB7CisgICAgc2hvdWxkQmUoVGVt
cG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW21ldGhvZF0ubGVuZ3RoLCAxKTsKKyAgICBzaG91bGRU
aHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbbWV0aG9kXS5jYWxsKHsgaG91
cnM6IDEgfSksIFR5cGVFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gemVyb1ttZXRob2Rd
KCksIFJhbmdlRXJyb3IpOworICAgIHNob3VsZFRocm93KCgpID0+IHplcm9bbWV0aG9kXSh7fSks
IFR5cGVFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gemVyb1ttZXRob2RdKHsgeWVhcnM6
IDEgfSksIFJhbmdlRXJyb3IpOworICAgIHNob3VsZFRocm93KCgpID0+IHplcm9bbWV0aG9kXSh7
IG1vbnRoczogMSB9KSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gemVyb1tt
ZXRob2RdKHsgd2Vla3M6IDEgfSksIFJhbmdlRXJyb3IpOworICAgIHNob3VsZFRocm93KCgpID0+
IHBvc1ttZXRob2RdKHsgc2Vjb25kczogMSB9KSwgUmFuZ2VFcnJvcik7Cit9Cit7CisgICAgY29u
c3QgcG9zRHVyYXRpb25MaWtlID0geyBkYXlzOiAxLCBob3VyczogMiwgbWludXRlczogMywgc2Vj
b25kczogNCwgbWlsbGlzZWNvbmRzOiA1LCBtaWNyb3NlY29uZHM6IDYsIG5hbm9zZWNvbmRzOiA3
IH07CisgICAgY29uc3QgbmVnU3RyaW5nID0gJy1QMURUMkgzTTQuMDA1MDA2MDA3Uyc7CisKKyAg
ICBjb25zdCBhZGRaZXJvID0gcG9zQWJzb2x1dGUuYWRkKHplcm8pOworICAgIGNvbnN0IGFkZFBv
cyA9IHBvc0Fic29sdXRlLmFkZChwb3NEdXJhdGlvbkxpa2UpOworICAgIGNvbnN0IGFkZE5lZyA9
IHBvc0Fic29sdXRlLmFkZChuZWdTdHJpbmcpOworICAgIGNvbnN0IHN1Ylplcm8gPSBwb3NBYnNv
bHV0ZS5zdWJ0cmFjdCh6ZXJvKTsKKyAgICBjb25zdCBzdWJQb3MgPSBwb3NBYnNvbHV0ZS5zdWJ0
cmFjdChwb3NEdXJhdGlvbkxpa2UpOworICAgIGNvbnN0IHN1Yk5lZyA9IHBvc0Fic29sdXRlLnN1
YnRyYWN0KG5lZ1N0cmluZyk7CisgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHsKKyAg
ICAgICAgc2hvdWxkQmUoYWRkWmVyb1tmaWVsZF0sIHBvc0Fic29sdXRlW2ZpZWxkXSk7CisgICAg
ICAgIHNob3VsZEJlKGFkZFBvc1tmaWVsZF0sIDIgKiBwb3NBYnNvbHV0ZVtmaWVsZF0pOworICAg
ICAgICBzaG91bGRCZShhZGROZWdbZmllbGRdLCAwKTsKKyAgICAgICAgc2hvdWxkQmUoc3ViWmVy
b1tmaWVsZF0sIHBvc0Fic29sdXRlW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKHN1YlBvc1tm
aWVsZF0sIDApOworICAgICAgICBzaG91bGRCZShzdWJOZWdbZmllbGRdLCAyICogcG9zQWJzb2x1
dGVbZmllbGRdKTsKKyAgICB9Cit9CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQ
MURUMTNIMzFNMzFTJykuYWRkKCdQMURUMTNIMzFNMzFTJykudG9TdHJpbmcoKSwgJ1AzRFQzSDNN
MlMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJy1QVDFNNTlTJykuc3VidHJh
Y3QoJ1BUMU01OVMnKS50b1N0cmluZygpLCAnLVBUM001OFMnKTsKKworc2hvdWxkQmUoVGVtcG9y
YWwuRHVyYXRpb24ucHJvdG90eXBlLnJvdW5kLmxlbmd0aCwgMSk7CitzaG91bGRUaHJvdygoKSA9
PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUucm91bmQuY2FsbCh7fSksIFR5cGVFcnJvcik7
CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLnJvdW5kKCksIFR5cGVFcnJvcik7CitzaG91bGRUaHJv
dygoKSA9PiB6ZXJvLnJvdW5kKHt9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6
ZXJvLnJvdW5kKHsgc21hbGxlc3RVbml0OiAnYm9ndXMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3Vs
ZFRocm93KCgpID0+IHplcm8ucm91bmQoeyBsYXJnZXN0VW5pdDogJ2JvZ3VzJyB9KSwgUmFuZ2VF
cnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLnJvdW5kKHsgc21hbGxlc3RVbml0OiAnaG91
cicsIGxhcmdlc3RVbml0OiAnbmFub3NlY29uZCcgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhy
b3coKCkgPT4gemVyby5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ25hbm9zZWNvbmQnLCByb3VuZGlu
Z01vZGU6ICdib2d1cycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby5y
b3VuZCh7IHNtYWxsZXN0VW5pdDogJ25hbm9zZWNvbmQnLCByb3VuZGluZ0luY3JlbWVudDogMyB9
KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9t
KCdQMVknKS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnc2Vjb25kcycgfSksIFJhbmdlRXJyb3IpOwor
c2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFNJykucm91bmQoeyBs
YXJnZXN0VW5pdDogJ3NlY29uZHMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+
IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxVycpLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdzZWNv
bmRzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlv
bi5mcm9tKCdQMUQnKS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnbW9udGhzJyB9KSwgUmFuZ2VFcnJv
cik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMUQnKS5yb3Vu
ZCh7IGxhcmdlc3RVbml0OiAnd2Vla3MnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZEJlKHBvc0Fi
c29sdXRlLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdkYXknIH0pLnRvU3RyaW5nKCksICdQMURUMkgz
TTQuMDA1MDA2MDA3UycpOworc2hvdWxkQmUocG9zQWJzb2x1dGUucm91bmQoeyBsYXJnZXN0VW5p
dDogJ2F1dG8nIH0pLnRvU3RyaW5nKCksICdQMURUMkgzTTQuMDA1MDA2MDA3UycpOworc2hvdWxk
QmUocG9zQWJzb2x1dGUucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdkYXknIH0pLnRvU3RyaW5nKCks
ICdQMUQnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgc21hbGxlc3RVbml0OiAnc2Vj
b25kJyB9KS50b1N0cmluZygpLCAnUDFEVDJIM000UycpOworc2hvdWxkQmUocG9zQWJzb2x1dGUu
cm91bmQoeyBsYXJnZXN0VW5pdDogJ2hvdXInLCBzbWFsbGVzdFVuaXQ6ICdzZWNvbmQnIH0pLnRv
U3RyaW5nKCksICdQVDI2SDNNNFMnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgbGFy
Z2VzdFVuaXQ6ICdtaW51dGUnLCBzbWFsbGVzdFVuaXQ6ICdzZWNvbmQnIH0pLnRvU3RyaW5nKCks
ICdQVDE1NjNNNFMnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6
ICdzZWNvbmQnLCBzbWFsbGVzdFVuaXQ6ICdtaWxsaXNlY29uZCcgfSkudG9TdHJpbmcoKSwgJ1BU
OTM3ODQuMDA1UycpOworc2hvdWxkQmUocG9zQWJzb2x1dGUucm91bmQoeyBsYXJnZXN0VW5pdDog
J21pbGxpc2Vjb25kJywgc21hbGxlc3RVbml0OiAnbWljcm9zZWNvbmQnIH0pLnRvU3RyaW5nKCks
ICdQVDkzNzg0LjAwNTAwNlMnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgbGFyZ2Vz
dFVuaXQ6ICdtaWNyb3NlY29uZCcsIHNtYWxsZXN0VW5pdDogJ21pY3Jvc2Vjb25kJyB9KS50b1N0
cmluZygpLCAnUFQ5Mzc4NC4wMDUwMDZTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7
IGxhcmdlc3RVbml0OiAnbmFub3NlY29uZCcgfSkudG9TdHJpbmcoKSwgJ1BUOTM3ODQuMDA1MDA2
MDA3UycpOworc2hvdWxkQmUocG9zQWJzb2x1dGUucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdzZWNv
bmQnLCByb3VuZGluZ0luY3JlbWVudDogMzAgfSkudG9TdHJpbmcoKSwgJ1AxRFQySDNNJyk7Citz
aG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ3NlY29uZCcsIHJvdW5k
aW5nSW5jcmVtZW50OiAzMCwgcm91bmRpbmdNb2RlOiAnY2VpbCcgfSkudG9TdHJpbmcoKSwgJ1Ax
RFQySDNNMzBTJyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCctUFQzMVMnKS5y
b3VuZCh7IHNtYWxsZXN0VW5pdDogJ3NlY29uZCcsIHJvdW5kaW5nSW5jcmVtZW50OiAzMCB9KS50
b1N0cmluZygpLCAnLVBUMzBTJyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCct
UFQzMVMnKS5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ3NlY29uZCcsIHJvdW5kaW5nSW5jcmVtZW50
OiAzMCwgcm91bmRpbmdNb2RlOiAnZmxvb3InIH0pLnRvU3RyaW5nKCksICctUFQ2MFMnKTsKK3No
b3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJy1QVDQ1UycpLnJvdW5kKHsgc21hbGxlc3RV
bml0OiAnc2Vjb25kJywgcm91bmRpbmdJbmNyZW1lbnQ6IDMwIH0pLnRvU3RyaW5nKCksICctUFQ2
MFMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJy1QVDQ1UycpLnJvdW5kKHsg
c21hbGxlc3RVbml0OiAnc2Vjb25kJywgcm91bmRpbmdJbmNyZW1lbnQ6IDMwLCByb3VuZGluZ01v
ZGU6ICd0cnVuYycgfSkudG9TdHJpbmcoKSwgJy1QVDMwUycpOworCitzaG91bGRCZShUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGUudG90YWwubGVuZ3RoLCAxKTsKK3Nob3VsZFRocm93KCgpID0+
IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b3RhbC5jYWxsKHt9KSwgVHlwZUVycm9yKTsK
K3Nob3VsZFRocm93KCgpID0+IHplcm8udG90YWwoKSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93
KCgpID0+IHplcm8udG90YWwoe30pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRl
bXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxWScpLnRvdGFsKHsgdW5pdDogJ3NlY29uZHMnIH0pLCBS
YW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1Ax
TScpLnRvdGFsKHsgdW5pdDogJ3NlY29uZHMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93
KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxVycpLnRvdGFsKHsgdW5pdDogJ3NlY29u
ZHMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9u
LmZyb20oJ1AxRCcpLnRvdGFsKHsgdW5pdDogJ21vbnRocycgfSksIFJhbmdlRXJyb3IpOworc2hv
dWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFEJykudG90YWwoeyB1bml0
OiAnd2Vla3MnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsg
dW5pdDogJ2RheXMnIH0pLCAxLjA4NTQ2MzAyMDkwMjg1ODgpOworc2hvdWxkQmUocG9zQWJzb2x1
dGUudG90YWwoeyB1bml0OiAnaG91cnMnIH0pLCAyNi4wNTExMTI1MDE2Njg2MTIpOworc2hvdWxk
QmUocG9zQWJzb2x1dGUudG90YWwoeyB1bml0OiAnbWludXRlcycgfSksIDE1NjMuMDY2NzUwMTAw
MTE2Nyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS50b3RhbCh7IHVuaXQ6ICdzZWNvbmRzJyB9KSwg
OTM3ODQuMDA1MDA2MDA3KTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ21p
bGxpc2Vjb25kcycgfSksIDkzNzg0MDA1LjAwNjAwNyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS50
b3RhbCh7IHVuaXQ6ICdtaWNyb3NlY29uZHMnIH0pLCA5Mzc4NDAwNTAwNi4wMDcpOworc2hvdWxk
QmUocG9zQWJzb2x1dGUudG90YWwoeyB1bml0OiAnbmFub3NlY29uZHMnIH0pLCA5Mzc4NDAwNTAw
NjAwNyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCctUFQxMjM0NTY3ODlTJyku
dG90YWwoeyB1bml0OiAnZGF5JyB9KSwgLTE0MjguODk4MDIwODMzMzMzMik7CisKKy8vIEF0IHBy
ZXNlbnQsIHRvTG9jYWxlU3RyaW5nIGhhcyB0aGUgc2FtZSBiZWhhdmlvciBhcyB0b0pTT04gb3Ig
YXJndW1lbnRsZXNzIHRvU3RyaW5nLgorZm9yIChjb25zdCBtZXRob2Qgb2YgWyd0b1N0cmluZycs
ICd0b0pTT04nLCAndG9Mb2NhbGVTdHJpbmcnXSkgeyAgICAKKyAgICBzaG91bGRCZShUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGVbbWV0aG9kXS5sZW5ndGgsIDApOworICAgIHNob3VsZFRocm93
KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZVttZXRob2RdLmNhbGwoe30pLCBUeXBl
RXJyb3IpOworCisgICAgc2hvdWxkQmUoemVyb1ttZXRob2RdKCksICdQVDBTJyk7CisgICAgc2hv
dWxkQmUocG9zW21ldGhvZF0oKSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDgwMDkwMVMnKTsKKyAgICBz
aG91bGRCZShuZWdbbWV0aG9kXSgpLCAnLVAxWTJNM1c0RFQ1SDZNNy4wMDgwMDkwMVMnKTsKKyAg
ICAKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMSwxLDEsMSlbbWV0aG9kXSgp
LCAnUDFZMU0xVzFEJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCww
LDAsMSwxLDEpW21ldGhvZF0oKSwgJ1BUMUgxTTFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBv
cmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDAsMTAwKVttZXRob2RdKCksICdQVDAuMVMnKTsKKyAg
ICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwwLDEwMClbbWV0
aG9kXSgpLCAnUFQwLjAwMDFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9u
KDAsMCwwLDAsMCwwLDAsMCwwLDEwMClbbWV0aG9kXSgpLCAnUFQwLjAwMDAwMDFTJyk7CisgICAg
c2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDEsMTAwMSlbbWV0aG9k
XSgpLCAnUFQyLjAwMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCww
LDAsMCwwLDAsMCwxLDEwMDEpW21ldGhvZF0oKSwgJ1BUMC4wMDIwMDFTJyk7CisgICAgc2hvdWxk
QmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDAsMCwxLDEwMDEpW21ldGhvZF0o
KSwgJ1BUMC4wMDAwMDIwMDFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9u
KDAsMCwwLDAsMCwwLDEsMTAwMSwxMDAxLDEwMDEpW21ldGhvZF0oKSwgJ1BUMi4wMDIwMDIwMDFT
Jyk7Cit9CisKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7fSksIHBvcy50b1N0cmluZygpKTsKKwor
c2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiAnZm9vYmFyJyB9
KSwgUmFuZ2VFcnJvcik7Citmb3IgKGNvbnN0IHVuaXQgb2YgWyd5ZWFyJywgJ21vbnRoJywgJ3dl
ZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJ10pIHsKKyAgICBzaG91bGRUaHJvdygoKSA9PiBw
b3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6IHVuaXQgfSksIFJhbmdlRXJyb3IpOworICAgIHNo
b3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogYCR7dW5pdH1zYCB9
KSwgUmFuZ2VFcnJvcik7Cit9CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6
ICdzZWNvbmRzJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNN1MnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmlu
Zyh7IHNtYWxsZXN0VW5pdDogJ21pbGxpc2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4
UycpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiAnbWljcm9zZWNvbmRz
JyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDgwMDlTJyk7CitzaG91bGRCZShwb3MudG9TdHJpbmco
eyBzbWFsbGVzdFVuaXQ6ICduYW5vc2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4MDA5
MDEwUycpOworZm9yIChjb25zdCB1bml0IG9mIFsnc2Vjb25kJywgJ21pbGxpc2Vjb25kJywgJ21p
Y3Jvc2Vjb25kJywgJ25hbm9zZWNvbmQnXSkKKyAgICBzaG91bGRCZShwb3MudG9TdHJpbmcoeyBz
bWFsbGVzdFVuaXQ6IHVuaXQgfSksIHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogYCR7dW5p
dH1zYCB9KSk7CisKK3Nob3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxT
ZWNvbmREaWdpdHM6IC0xIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHBvcy50
b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDEwIH0pLCBSYW5nZUVycm9yKTsKK3No
b3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6ICdi
b2d1cycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25h
bFNlY29uZERpZ2l0czogMCB9KSwgJ1AxWTJNM1c0RFQ1SDZNN1MnKTsKK2NvbnN0IGRlY2ltYWxQ
YXJ0ID0gJzAwODAwOTAxMCc7Citmb3IgKGxldCBpID0gMTsgaSA8IDEwOyBpKyspCisgICAgc2hv
dWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogaSB9KSwgYFAxWTJN
M1c0RFQ1SDZNNy4ke2RlY2ltYWxQYXJ0LnNsaWNlKDAsaSl9U2ApOworc2hvdWxkQmUocG9zLnRv
U3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogJ2F1dG8nIH0pLCBwb3MudG9TdHJpbmco
KSk7CitzaG91bGRCZSh6ZXJvLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMiB9
KSwgJ1BUMC4wMFMnKTsKKworc2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgcm91bmRp
bmdNb2RlOiAnYm9ndXMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7
IHJvdW5kaW5nTW9kZTogJ3RydW5jJyB9KSwgcG9zLnRvU3RyaW5nKCkpOworc2hvdWxkQmUocG9z
LnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogNywgcm91bmRpbmdNb2RlOiAnY2Vp
bCcgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4MDA5MVMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmlu
Zyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDIsIHJvdW5kaW5nTW9kZTogJ2Zsb29yJyB9KSwg
J1AxWTJNM1c0RFQ1SDZNNy4wMFMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9u
YWxTZWNvbmREaWdpdHM6IDIsIHJvdW5kaW5nTW9kZTogJ2hhbGZFeHBhbmQnIH0pLCAnUDFZMk0z
VzREVDVINk03LjAxUycpOworCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUu
dmFsdWVPZi5sZW5ndGgsIDApOworc2hvdWxkVGhyb3coKCkgPT4gbmV3IFRlbXBvcmFsLkR1cmF0
aW9uKCkudmFsdWVPZigpLCBUeXBlRXJyb3IpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436690</attachid>
            <date>2021-08-27 16:38:05 -0700</date>
            <delta_ts>2021-08-30 16:46:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228532-20210827163804.patch</filename>
            <type>text/plain</type>
            <size>114729</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
NjkxMWVlNjE1YjM3YTQ0ZDQyZmE0ODM3NmFlY2JhZDIwMmM2NGI4Li5hMDc4MDc4MDVlZGIzYmY2
ZjJjM2EyMWU0YTJhNjgxMGRkYjgwYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAyMS0wOC0yNyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGlt
cGxlbWVudHMgdGhlIER1cmF0aW9uIGNsYXNzIGZvciB0aGUgdXBjb21pbmcgVGVtcG9yYWwgQVBJ
IChjdXJyZW50bHkgYXQgc3RhZ2UgMyBpbiBUQzM5KS4KKyAgICAgICAgU3BlYzogaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtZHVyYXRpb24tb2JqZWN0cwor
ICAgICAgICBEb2NzOiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvZG9jcy9kdXJh
dGlvbi5odG1sCisKKyAgICAgICAgQSBEdXJhdGlvbiBpcyB1bHRpbWF0ZWx5IGFuIGFycmF5IG9m
IGRvdWJsZXMgKHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vj
b25kcywgbXMsIM68cywgbnMpCisgICAgICAgIHdoaWNoIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW5k
IGZyb20gYW4gSVNPIHN0cmluZyByZXByZXNlbnRhdGlvbiAoZS5nLiAiLVAxWTJNM1c0RFQ1SDZN
Ny4xMjM0NTY3ODlTIikKKyAgICAgICAgYW5kIHdoaWNoIHN1cHBvcnRzIHZhcmlvdXMgY2FsY3Vh
dGlvbnMuCisKKyAgICAgICAgVGhlIHNwZWMgaXMgc3RpbGwgaW4gZmx1eCBhbmQgY2VydGFpbiBp
c3N1ZXMgd2VyZSBpZGVudGlmaWVkIGluIHRoZSBjb3Vyc2Ugb2YgcHJlcGFyaW5nIHRoaXMgcGF0
Y2guCisgICAgICAgIFRoaXMgY29kZSBhaW1zIHRvIGJlICJhcyBjb3JyZWN0IGFzIHBvc3NpYmxl
IiBmb3IgdGhlIG1vbWVudDsgc21hbGwgY29ycmVjdGlvbnMgYXJlIGV4cGVjdGVkIGluIHRoZSBu
ZWFyIGZ1dHVyZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpkdXJhdGlvblN0cnVj
dHVyZSk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmNwcDogQWRkZWQuCisg
ICAgICAgICogcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgICog
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaDogQWRkZWQuCisgICAgICAgICog
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAgICAgICog
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVEdXJhdGlvbkNv
bnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6c2luZ3VsYXJVbml0KToKKyAgICAgICAgKEpTQzo6
dGVtcG9yYWxVbml0VHlwZSk6CisgICAgICAgIChKU0M6OnRlbXBvcmFsTGFyZ2VzdFVuaXQpOgor
ICAgICAgICAoSlNDOjp0ZW1wb3JhbFNtYWxsZXN0VW5pdCk6CisgICAgICAgIChKU0M6OnRlbXBv
cmFsRnJhY3Rpb25hbFNlY29uZERpZ2l0cyk6CisgICAgICAgIChKU0M6OnNlY29uZHNTdHJpbmdQ
cmVjaXNpb24pOgorICAgICAgICAoSlNDOjptYXhpbXVtUm91bmRpbmdJbmNyZW1lbnQpOgorICAg
ICAgICAoSlNDOjp0ZW1wb3JhbFJvdW5kaW5nSW5jcmVtZW50KToKKyAgICAgICAgKEpTQzo6cm91
bmROdW1iZXJUb0luY3JlbWVudCk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVjdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwog
MjAyMS0wOC0yNyAgUnVzc2VsbCBFcHN0ZWluICA8cmVwc3RlaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIExhbmQgV2luZG93cyBidWlsZCBmaXhlcyBmcm9tIHNhZmFyaS02MTIuMS4yOS4xNC1icmFu
Y2guCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZWQzMGYxYTFmMmNmYzE2
MjRhMTRkZTM2ZjJmZmM4ZGVhNjQzZjczNi4uYmU3YjQzYWUxYmRjMWEyNjgwZWM0ZjcyNWVjYTNm
YTg3MjcyZjYyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA3LDYg
KzEwNyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9PQkpFQ1RfTFVUX1NPVVJDRVMKICAgICBydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKICAgICBydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNw
cAogICAgIHJ1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcAorICAgIHJ1bnRpbWUvVGVtcG9yYWxE
dXJhdGlvbkNvbnN0cnVjdG9yLmNwcAorICAgIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZS5jcHAKICAgICBydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcAogCiAgICAgd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQppbmRleCA3NTQyYzdmNzc0NjVlMjZlMTlkNGE2OGE1ZGI3NjA5MWZkZDQ2NTM5Li4zZjU4NWUx
Yzk0YjMwMzA2ODk0YjI3NzZiOWE1MDdlOTZmMDY0Zjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTkxLDYgKzE5MSw4IEBAIE9CSkVDVF9MVVRfSEVB
REVSUyA9IFwKICAgICBTdHJpbmdQcm90b3R5cGUubHV0LmggXAogICAgIFN5bWJvbENvbnN0cnVj
dG9yLmx1dC5oIFwKICAgICBTeW1ib2xQcm90b3R5cGUubHV0LmggXAorICAgIFRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3Rvci5sdXQuaCBcCisgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5s
dXQuaCBcCiAgICAgVGVtcG9yYWxPYmplY3QubHV0LmggXAogICAgIFdlYkFzc2VtYmx5Q29tcGls
ZUVycm9yQ29uc3RydWN0b3IubHV0LmggXAogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJv
dG90eXBlLmx1dC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTYwMTk2ZTJj
NjcwMjNjODEwZDYyZjI1MDk2ODNiODEzZjFmZjA2OC4uYTFmMGEwZjA2ZTZmM2NiYmJiNzU2ZjYw
NDM5YjcxNmY1N2U5ZGRmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0MTUs
NiArMTQxNSw5IEBACiAJCUEzODJDNTMxMjY2NzExMUQwMDQyQ0Q5OSAvKiBJbkJ5VmFyaWFudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMzMDVGQjEy
MEIwRjc4ODAwQ0VCODJCIC8qIEluQnlWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTM4RDI1MEUyNTgwMEQ0NDAwNDJCRkREIC8qIEpT
QXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhEMjUwRDI1ODAwRDQzMDA0MkJGREQgLyogSlNBcnJheUJ1
ZmZlclByb3RvdHlwZUlubGluZXMuaCAqLzsgfTsKIAkJQTM4RDVCRkMyNjY2RDNEQTAwQTEwOUE2
IC8qIEluQnlTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEzOEQ1QkZBMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTNDN0VEQjYyNkIwREIz
ODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIwMjZCMERCMzYwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmggKi87IH07CisJCUEzQzdFREI5MjZCMERCMzgw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBM0M3RURCMzI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxE
dXJhdGlvbi5oICovOyB9OworCQlBM0M3RURCQTI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxE
dXJhdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBM0M3RURCNDI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNv
bnN0cnVjdG9yLmggKi87IH07CiAJCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRsV29y
a2Fyb3VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMzc2MTk0MDI2MjUxMjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3BwICovOyB9Owog
CQlBM0ZGOUJDNzIyMzQ3NDkxMDBCMUE5QUIgLyogWWFyckZsYWdzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBM0ZGOUJDNTIyMzQ3NDY2MDBCMUE5QUIg
LyogWWFyckZsYWdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQTUwM0ZBMUExODhFMEZCMDAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MDNGQTE0
MTg4RTBGQUYwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggKi87IH07CkBAIC00NDcx
LDYgKzQ0NzQsMTIgQEAKIAkJQTNCRjg4NEUyNDQ4MEJFMDAwMUI5RjM1IC8qIEludGxSZWxhdGl2
ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTNCRjg4NEYyNDQ4MEJFMDAwMUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVG
b3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50bFJlbGF0
aXZlVGltZUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzQkY4ODUw
MjQ0ODBCRTEwMDFCOUYzNSAvKiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
M0M3RURCMTI2QjBEQjM2MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjIyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBM0M3RURCMzI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEzQzdFREI1MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
M0ZGOUJDNTIyMzQ3NDY2MDBCMUE5QUIgLyogWWFyckZsYWdzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFlhcnJGbGFncy5oOyBwYXRoID0geWFyci9ZYXJyRmxhZ3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNGRjlCQzYyMjM0NzQ2NjAwQjFBOUFCIC8qIFlh
cnJGbGFncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBZYXJyRmxh
Z3MuY3BwOyBwYXRoID0geWFyci9ZYXJyRmxhZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNTAzRkExMzE4OEUwRkFGMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKYXZhU2NyaXB0Q2FsbEZy
YW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc5NTMsNiArNzk2MiwxMiBA
QAogCQkJCUUzMTE3OUE5MjI4ODM4NUQwMDUxNEIyQyAvKiBTeW1ib2xUYWJsZU9yU2NvcGVEZXB0
aC5oICovLAogCQkJCUJEQjRCNUUwOTlDRDRDMUJCM0MxQ0YwNSAvKiBUZW1wbGF0ZU9iamVjdERl
c2NyaXB0b3IuY3BwICovLAogCQkJCTcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3IuaCAqLywKKwkJCQlBM0M3RURCMTI2QjBEQjM2MDA0QzM0QzUgLyog
VGVtcG9yYWxEdXJhdGlvbi5jcHAgKi8sCisJCQkJQTNDN0VEQjMyNkIwREIzNzAwNEMzNEM1IC8q
IFRlbXBvcmFsRHVyYXRpb24uaCAqLywKKwkJCQlBM0M3RURCMjI2QjBEQjM3MDA0QzM0QzUgLyog
VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQlBM0M3RURCNDI2QjBEQjM3
MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggKi8sCisJCQkJQTNDN0VE
QjUyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwICovLAor
CQkJCUEzQzdFREIwMjZCMERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
LmggKi8sCiAJCQkJRjZGMTUwMUIyNjkzRDMzRTAwNEI5OEVGIC8qIFRlbXBvcmFsTm93LmNwcCAq
LywKIAkJCQlGNkYxNTAxODI2OTNEMzNEMDA0Qjk4RUYgLyogVGVtcG9yYWxOb3cuaCAqLywKIAkJ
CQlGNkYxNTAxOTI2OTNEMzNFMDA0Qjk4RUYgLyogVGVtcG9yYWxPYmplY3QuY3BwICovLApAQCAt
MTA2NDksNyArMTA2NjQsMTEgQEAKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3lu
dGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREM3OTk3ODMxQ0RFOUZBMDAwNEQ0QTA5
IC8qIFRhZ1JlZ2lzdGVyc01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUNBNjA5MUFGREJF
QTIwMDQ0OTczOSAvKiBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCUEzQzdFREI5MjZCMERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBM0M3RURCQTI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlv
bkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0
QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjZG
MTUwMjEyNjkzRDQ1MDAwNEI5OEVGIC8qIFRlbXBvcmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTNGQTk3MzgyNkJCMzU1NjAwRjcxMDYwIC8qIFRlbXBvcmFsT2JqZWN0SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NEYxN0VFMjc0OTAwQUJCMjE3IC8qIFRlbXBS
ZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NEE3QjQyMEJGNjhEOTAwMjJCMTcx
IC8qIFRlcm1pbmF0ZWRDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkEyQzE3QzE3
RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA1MmI5M2VlOGQ4YmJhNjYwNjRkYjIwMThmM2YzMTc3
MDJmNzZhYTljLi5mYTY5ZDhlMGE5ZmM3Njc2MzgxZjBmZjQwNTdmNDNkYmU5MTNjNWZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xMDA5LDYgKzEwMDksOSBAQCBydW50aW1lL1N5
bWJvbE9iamVjdC5jcHAKIHJ1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcAogcnVudGltZS9TeW1i
b2xUYWJsZS5jcHAKIHJ1bnRpbWUvVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAorcnVudGlt
ZS9UZW1wb3JhbER1cmF0aW9uLmNwcAorcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0
b3IuY3BwCitydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCiBydW50aW1lL1Rl
bXBvcmFsTm93LmNwcAogcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAKIHJ1bnRpbWUvVGVzdFJ1
bm5lclV0aWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uSWRlbnRpZmllcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmgKaW5kZXggMzNlMmM3ZTEyYmMzZDg3YjNiNThmOGFlZTkyNTI3NjlmOGI2
OTU5Yy4uNjI2NzE2YzQ3NWY0YjM1N2IyYjVkNGVjZDg3MzkwNWU1MTY4YWQ1MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC05
OSw2ICs5OSw3IEBACiAgICAgbWFjcm8oY291bnRlcnMpIFwKICAgICBtYWNybyhkYXRlU3R5bGUp
IFwKICAgICBtYWNybyhkYXkpIFwKKyAgICBtYWNybyhkYXlzKSBcCiAgICAgbWFjcm8oZGF5UGVy
aW9kKSBcCiAgICAgbWFjcm8oZGVmaW5lUHJvcGVydHkpIFwKICAgICBtYWNybyhkZXJlZikgXApA
QCAtMTM2LDYgKzEzNyw3IEBACiAgICAgbWFjcm8oaGFzaCkgXAogICAgIG1hY3JvKGhlYWRlcikg
XAogICAgIG1hY3JvKGhvdXIpIFwKKyAgICBtYWNybyhob3VycykgXAogICAgIG1hY3JvKGhvdXJD
eWNsZSkgXAogICAgIG1hY3JvKGhvdXIxMikgXAogICAgIG1hY3JvKGlkKSBcCkBAIC0xNTYsNiAr
MTU4LDcgQEAKICAgICBtYWNybyhqb2luKSBcCiAgICAgbWFjcm8obGFuZ3VhZ2UpIFwKICAgICBt
YWNybyhsYW5ndWFnZURpc3BsYXkpIFwKKyAgICBtYWNybyhsYXJnZXN0VW5pdCkgXAogICAgIG1h
Y3JvKGxhc3RJbmRleCkgXAogICAgIG1hY3JvKGxlbmd0aCkgXAogICAgIG1hY3JvKGxpbmUpIFwK
QEAgLTE2NCwxMyArMTY3LDE4IEBACiAgICAgbWFjcm8obWF4aW11bUZyYWN0aW9uRGlnaXRzKSBc
CiAgICAgbWFjcm8obWF4aW11bVNpZ25pZmljYW50RGlnaXRzKSBcCiAgICAgbWFjcm8obWVzc2Fn
ZSkgXAorICAgIG1hY3JvKG1pY3Jvc2Vjb25kcykgXAorICAgIG1hY3JvKG1pbGxpc2Vjb25kcykg
XAogICAgIG1hY3JvKG1pbmltdW1GcmFjdGlvbkRpZ2l0cykgXAogICAgIG1hY3JvKG1pbmltdW1J
bnRlZ2VyRGlnaXRzKSBcCiAgICAgbWFjcm8obWluaW11bVNpZ25pZmljYW50RGlnaXRzKSBcCiAg
ICAgbWFjcm8obWludXRlKSBcCisgICAgbWFjcm8obWludXRlcykgXAogICAgIG1hY3JvKG1vbnRo
KSBcCisgICAgbWFjcm8obW9udGhzKSBcCiAgICAgbWFjcm8obXVsdGlsaW5lKSBcCiAgICAgbWFj
cm8obmFtZSkgXAorICAgIG1hY3JvKG5hbm9zZWNvbmRzKSBcCiAgICAgbWFjcm8obmV4dCkgXAog
ICAgIG1hY3JvKG5vdykgXAogICAgIG1hY3JvKG51bUlubGluZWRDYWxscykgXApAQCAtMTkzLDEz
ICsyMDEsMTcgQEAKICAgICBtYWNybyhyZWdpb24pIFwKICAgICBtYWNybyhyZXBsYWNlKSBcCiAg
ICAgbWFjcm8ocmVzb2x2ZSkgXAorICAgIG1hY3JvKHJvdW5kaW5nSW5jcmVtZW50KSBcCisgICAg
bWFjcm8ocm91bmRpbmdNb2RlKSBcCiAgICAgbWFjcm8oc2NyaXB0KSBcCiAgICAgbWFjcm8oc2Vj
b25kKSBcCisgICAgbWFjcm8oc2Vjb25kcykgXAogICAgIG1hY3JvKHNlZ21lbnQpIFwKICAgICBt
YWNybyhzZW5zaXRpdml0eSkgXAogICAgIG1hY3JvKHNldCkgXAogICAgIG1hY3JvKHNpemUpIFwK
ICAgICBtYWNybyhzbGljZSkgXAorICAgIG1hY3JvKHNtYWxsZXN0VW5pdCkgXAogICAgIG1hY3Jv
KHNvdXJjZSkgXAogICAgIG1hY3JvKHNvdXJjZUNvZGUpIFwKICAgICBtYWNybyhzb3VyY2VVUkwp
IFwKQEAgLTIyNiwxMiArMjM4LDE1IEBACiAgICAgbWFjcm8odHlwZSkgXAogICAgIG1hY3JvKHVp
ZCkgXAogICAgIG1hY3JvKHVuaWNvZGUpIFwKKyAgICBtYWNybyh1bml0KSBcCiAgICAgbWFjcm8o
dXNhZ2UpIFwKICAgICBtYWNybyh2YWx1ZSkgXAogICAgIG1hY3JvKHZhbHVlT2YpIFwKICAgICBt
YWNybyh3ZWVrZGF5KSBcCisgICAgbWFjcm8od2Vla3MpIFwKICAgICBtYWNybyh3cml0YWJsZSkg
XAotICAgIG1hY3JvKHllYXIpCisgICAgbWFjcm8oeWVhcikgXAorICAgIG1hY3JvKHllYXJzKQog
CiAjZGVmaW5lIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFDSF9QUklWQVRFX0ZJRUxEKG1hY3Jv
KSBcCiAgICAgbWFjcm8oY29uc3RydWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggMTVmNWIwNjRlY2JmYzY1OGE5OTBkMmVi
NTk2MzViZjJiZGJlODg4Mi4uNTQxOGE3YmIwZjgxMWI2YzA2M2RlNzYzNGJhZjdmYTIyMDIzYzk0
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcApAQCAtMjAxLDYgKzIwMSw4IEBACiAjaW5jbHVkZSAiU3ltYm9sQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJTeW1ib2xPYmplY3QuaCIKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUuaCIK
KyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlRlbXBvcmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiVk1U
cmFwc0lubGluZXMuaCIKICNpbmNsdWRlICJXYXNtQ2FwYWJpbGl0aWVzLmgiCkBAIC0xMjEyLDYg
KzEyMTQsMTMgQEAgY2FwaXRhbE5hbWUgIyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIyBDb25z
dHJ1Y3RvciA9IGZlYXR1cmVGbGFnID8gY2FwaXRhbE5hbWUKICAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+SW50bCwgaW50bCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogCiAgICAgaWYgKE9wdGlv
bnM6OnVzZVRlbXBvcmFsKCkpIHsKKyAgICAgICAgbV9kdXJhdGlvblN0cnVjdHVyZS5pbml0TGF0
ZXIoCisgICAgICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkg
eworICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8
SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKTsKKyAgICAgICAgICAgICAgICBUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlKiBkdXJhdGlvblByb3RvdHlwZSA9IFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGU6OmNyZWF0ZShpbml0LnZtLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoaW5pdC52bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpKSk7CisgICAgICAgICAgICAgICAgaW5pdC5zZXQoVGVtcG9yYWxEdXJhdGlvbjo6Y3Jl
YXRlU3RydWN0dXJlKGluaXQudm0sIGdsb2JhbE9iamVjdCwgZHVyYXRpb25Qcm90b3R5cGUpKTsK
KyAgICAgICAgICAgIH0pOworCiAgICAgICAgIFRlbXBvcmFsT2JqZWN0KiB0ZW1wb3JhbCA9IFRl
bXBvcmFsT2JqZWN0OjpjcmVhdGUodm0sIFRlbXBvcmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIHRoaXMpKTsKICAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPlRlbXBvcmFsLCB0ZW1wb3JhbCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIH0KQEAgLTIwOTAsNiArMjA5OSw5IEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlz
aXRvciYgdmlzaXRvcikKICAgICB0aGlzT2JqZWN0LT5tX2RhdGVUaW1lRm9ybWF0U3RydWN0dXJl
LnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fbnVtYmVyRm9ybWF0U3RydWN0dXJl
LnZpc2l0KHZpc2l0b3IpOwogCisgICAgaWYgKE9wdGlvbnM6OnVzZVRlbXBvcmFsKCkpCisgICAg
ICAgIHRoaXNPYmplY3QtPm1fZHVyYXRpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CisKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX251bGxHZXR0ZXJGdW5jdGlvbik7CiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9udWxsU2V0dGVyRnVuY3Rpb24pOwogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbnVsbFNldHRlclN0cmljdEZ1bmN0aW9uKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDE3
NWI4YjZiOTE0MzZiNjkzZmZkMzFkZmJjNjc4N2E0MTU0NmQ4OWYuLjU4YmU0YTAzN2RmYjhhYjk5
NzM3MTFkYTZmZmEwYmY3ZmFiOWMwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMzI0LDYgKzMyNCw4IEBAIHB1YmxpYzoKICAgICBM
YXp5Q2xhc3NTdHJ1Y3R1cmUgbV9kYXRlVGltZUZvcm1hdFN0cnVjdHVyZTsKICAgICBMYXp5Q2xh
c3NTdHJ1Y3R1cmUgbV9udW1iZXJGb3JtYXRTdHJ1Y3R1cmU7CiAKKyAgICBMYXp5UHJvcGVydHk8
SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9kdXJhdGlvblN0cnVjdHVyZTsKKwogICAgIFdy
aXRlQmFycmllcjxOdWxsR2V0dGVyRnVuY3Rpb24+IG1fbnVsbEdldHRlckZ1bmN0aW9uOwogICAg
IFdyaXRlQmFycmllcjxOdWxsU2V0dGVyRnVuY3Rpb24+IG1fbnVsbFNldHRlckZ1bmN0aW9uOwog
ICAgIFdyaXRlQmFycmllcjxOdWxsU2V0dGVyRnVuY3Rpb24+IG1fbnVsbFNldHRlclN0cmljdEZ1
bmN0aW9uOwpAQCAtODcwLDYgKzg3Miw4IEBAIHB1YmxpYzoKICAgICBKU09iamVjdCogbnVtYmVy
Rm9ybWF0Q29uc3RydWN0b3IoKSB7IHJldHVybiBtX251bWJlckZvcm1hdFN0cnVjdHVyZS5jb25z
dHJ1Y3Rvcih0aGlzKTsgfQogICAgIEpTT2JqZWN0KiBudW1iZXJGb3JtYXRQcm90b3R5cGUoKSB7
IHJldHVybiBtX251bWJlckZvcm1hdFN0cnVjdHVyZS5wcm90b3R5cGUodGhpcyk7IH0KIAorICAg
IFN0cnVjdHVyZSogZHVyYXRpb25TdHJ1Y3R1cmUoKSB7IHJldHVybiBtX2R1cmF0aW9uU3RydWN0
dXJlLmdldCh0aGlzKTsgfQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRSZW1vdGVE
ZWJ1Z2dpbmdFbmFibGVkKGJvb2wpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcmVtb3Rl
RGVidWdnaW5nRW5hYmxlZCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjNjNmOTI0ZjNkNWNl
NzdiM2RmNDgxOTk4YjNlNTM1NTQxOGI5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmNwcApAQCAtMCwwICsxLDc2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVtcG9y
YWxEdXJhdGlvbi5oIgorCisjaW5jbHVkZSAiSW50bE9iamVjdElubGluZXMuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUGFyc2VJbnQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZl
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBudW1iZXJP
ZlRlbXBvcmFsVW5pdHMpOworICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VGVtcG9yYWxVbml0Pihp
bmRleCkpIHsKKyNkZWZpbmUgSlNDX1RFTVBPUkFMX0RVUkFUSU9OX1BST1BFUlRZX05BTUUobmFt
ZSwgY2FwaXRhbGl6ZWROYW1lKSBjYXNlIFRlbXBvcmFsVW5pdDo6Y2FwaXRhbGl6ZWROYW1lOiBy
ZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+bmFtZSMjczsgCisgICAgICAgIEpTQ19URU1QT1JBTF9V
TklUUyhKU0NfVEVNUE9SQUxfRFVSQVRJT05fUFJPUEVSVFlfTkFNRSkKKyN1bmRlZiBKU0NfVEVN
UE9SQUxfRFVSQVRJT05fUFJPUEVSVFlfTkFNRQorICAgIH0KK30KKworY29uc3QgQ2xhc3NJbmZv
IFRlbXBvcmFsRHVyYXRpb246OnNfaW5mbyA9IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoVGVtcG9yYWxEdXJhdGlvbikgfTsK
KworVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFN1YmR1cmF0aW9ucyYmIHN1YmR1cmF0aW9ucykKK3sKKyAgICBh
dXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbER1cmF0aW9u
Pih2bS5oZWFwKSkgVGVtcG9yYWxEdXJhdGlvbih2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKHN1YmR1
cmF0aW9ucykpOworICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBv
YmplY3Q7Cit9CisKK1N0cnVjdHVyZSogVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQor
CitUZW1wb3JhbER1cmF0aW9uOjpUZW1wb3JhbER1cmF0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFN1YmR1cmF0aW9ucyYmIHN1YmR1cmF0aW9ucykKKyAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSkKKyAgICAsIG1fc3ViZHVyYXRpb25zKFdURk1vdmUoc3ViZHVyYXRpb25zKSkKK3sK
K30KKwordm9pZCBUZW1wb3JhbER1cmF0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7Cit9CisKKy8vIElzVmFsaWREdXJhdGlvbiAoIHllYXJzLCBtb250aHMsIHdlZWtzLCBk
YXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMs
IG5hbm9zZWNvbmRzICkKK3N0YXRpYyBib29sIGlzVmFsaWREdXJhdGlvbihjb25zdCBUZW1wb3Jh
bER1cmF0aW9uOjpTdWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9ucykKK3sKKyAgICBpbnQgc2lnbiA9
IDA7CisgICAgZm9yIChhdXRvIHZhbHVlIDogc3ViZHVyYXRpb25zKSB7CisgICAgICAgIGlmICgh
c3RkOjppc2Zpbml0ZSh2YWx1ZSkgfHwgKHZhbHVlIDwgMCAmJiBzaWduID4gMCkgfHwgKHZhbHVl
ID4gMCAmJiBzaWduIDwgMCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
aWYgKCFzaWduICYmIHZhbHVlKQorICAgICAgICAgICAgc2lnbiA9IHZhbHVlID4gMCA/IDEgOiAt
MTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gIENyZWF0ZVRlbXBvcmFsRHVy
YXRpb24gKCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29u
ZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzLCBuYW5vc2Vjb25kcyBbICwgbmV3VGFyZ2V0
IF0gKQorVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxpZChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdWJkdXJhdGlvbnMmJiBzdWJkdXJhdGlvbnMs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAo
IWlzVmFsaWREdXJhdGlvbihzdWJkdXJhdGlvbnMpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiY2Fubm90IGNyZWF0ZSBEdXJhdGlvbiB3aXRoIGluY29u
c2lzdGVudCBudW1lcmljIHZhbHVlcyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgcmV0dXJuIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgc3RydWN0dXJlID8gc3Ry
dWN0dXJlIDogZ2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgpLCBXVEZNb3ZlKHN1YmR1
cmF0aW9ucykpOworfQorCisvLyBEdXJhdGlvbkhhbmRsZUZyYWN0aW9ucyAoIGZIb3VycywgbWlu
dXRlcywgZk1pbnV0ZXMsIHNlY29uZHMsIGZTZWNvbmRzLCBtaWxsaXNlY29uZHMsIGZNaWxsaXNl
Y29uZHMsIG1pY3Jvc2Vjb25kcywgZk1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIGZOYW5vc2Vj
b25kcyApCitzdGF0aWMgdm9pZCBoYW5kbGVGcmFjdGlvbihUZW1wb3JhbER1cmF0aW9uOjpTdWJk
dXJhdGlvbnMmIHN1YmR1cmF0aW9ucywgaW50IGZhY3RvciwgU3RyaW5nVmlldyBmcmFjdGlvblN0
cmluZywgVGVtcG9yYWxVbml0IGZyYWN0aW9uVHlwZSkKK3sKKyAgICBBU1NFUlQoZnJhY3Rpb25T
dHJpbmcubGVuZ3RoKCkpOworICAgIEFTU0VSVChmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxVbml0
OjpIb3VyIHx8IGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSB8fCBmcmFjdGlv
blR5cGUgPT0gVGVtcG9yYWxVbml0OjpTZWNvbmQpOworCisgICAgaWYgKGZyYWN0aW9uVHlwZSA9
PSBUZW1wb3JhbFVuaXQ6OlNlY29uZCkgeworICAgICAgICBhdXRvIHBhZGRlZCA9IG1ha2VTdHJp
bmcoZnJhY3Rpb25TdHJpbmcsICIwMDAwMDAwMCIpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0
TWlsbGlzZWNvbmRzKGZhY3RvciAqIHBhcnNlSW50KHBhZGRlZC5zdWJzdHJpbmcoMCwgMyksIDEw
KSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMoZmFjdG9yICogcGFyc2VJ
bnQocGFkZGVkLnN1YnN0cmluZygzLCAzKSwgMTApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNl
dE5hbm9zZWNvbmRzKGZhY3RvciAqIHBhcnNlSW50KHBhZGRlZC5zdWJzdHJpbmcoNiwgMyksIDEw
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb3VibGUgZnJhY3Rpb24gPSBmYWN0
b3IgKiBwYXJzZUludChmcmFjdGlvblN0cmluZywgMTApIC8gc3RkOjpwb3coMTAsIGZyYWN0aW9u
U3RyaW5nLmxlbmd0aCgpKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoZnJhY3Rpb25UeXBlID09IFRlbXBvcmFsVW5pdDo6SG91cikgeworICAgICAgICBm
cmFjdGlvbiAqPSA2MDsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pbnV0ZXMoc3RkOjp0cnVu
YyhmcmFjdGlvbikpOworICAgICAgICBmcmFjdGlvbiA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMSk7
CisgICAgICAgIGlmICghZnJhY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgZnJhY3Rpb24gKj0gNjA7CisgICAgc3ViZHVyYXRpb25zLnNldFNlY29uZHMoc3RkOjp0cnVu
YyhmcmFjdGlvbikpOworICAgIGZyYWN0aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9uLCAxKTsKKyAg
ICBpZiAoIWZyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBmcmFjdGlvbiAqPSAxMDAw
OworICAgIHN1YmR1cmF0aW9ucy5zZXRNaWxsaXNlY29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbikp
OworICAgIGZyYWN0aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9uLCAxKTsKKyAgICBpZiAoIWZyYWN0
aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBmcmFjdGlvbiAqPSAxMDAwOworICAgIHN1YmR1
cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgIGZyYWN0
aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9uLCAxKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjp0cnVuYyhm
cmFjdGlvbiAqIDEwMDApKTsKK30KKworLy8gUGFyc2VUZW1wb3JhbER1cmF0aW9uU3RyaW5nICgg
aXNvU3RyaW5nICkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGQ6Om9wdGlv
bmFsPFRlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucz4gVGVtcG9yYWxEdXJhdGlvbjo6cGFy
c2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQoreworICAgIC8v
IElTTyA4NjAxIGR1cmF0aW9uIHN0cmluZ3MgYXJlIGxpa2UgIi1QMVkyTTNXNERUNUg2TTcuMTIz
NDU2Nzg5UyIuIE5vdGVzOgorICAgIC8vIC0gY2FzZSBpbnNlbnNpdGl2ZQorICAgIC8vIC0gc2ln
bjogKyAtIOKIkihVKzIyMTIpCisgICAgLy8gLSBzZXBhcmF0b3I6IC4gLAorICAgIC8vIC0gVCBp
cyBwcmVzZW50IGlmZiB0aGVyZSBpcyBhIHRpbWUgcGFydAorICAgIC8vIC0gaW50ZWdyYWwgcGFy
dHMgY2FuIGhhdmUgYW55IG51bWJlciBvZiBkaWdpdHMgYnV0IGZyYWN0aW9uYWwgcGFydHMgaGF2
ZSBhdCBtb3N0IDkKKyAgICAvLyAtIGhvdXJzIGFuZCBtaW51dGVzIGNhbiBoYXZlIGZyYWN0aW9u
YWwgcGFydHMgdG9vLCBidXQgb25seSBhcyB0aGUgTEFTVCBwYXJ0IG9mIHRoZSBzdHJpbmcKKyAg
ICBpZiAoYnVmZmVyLmxlbmd0aFJlbWFpbmluZygpIDwgMykKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQgeyB9OworCisgICAgaW50IGZhY3Rv
ciA9IDE7CisgICAgaWYgKCpidWZmZXIgPT0gJysnKQorICAgICAgICBidWZmZXIuYWR2YW5jZSgp
OworICAgIGVsc2UgaWYgKCpidWZmZXIgPT0gJy0nIHx8ICpidWZmZXIgPT0gMHgyMjEyKSB7Cisg
ICAgICAgIGZhY3RvciA9IC0xOworICAgICAgICBidWZmZXIuYWR2YW5jZSgpOworICAgIH0KKwor
ICAgIGlmICh0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgIT0gJ1AnKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgYnVmZmVyLmFkdmFuY2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGRh
dGVQYXJ0SW5kZXggPSAwOyBkYXRlUGFydEluZGV4IDwgNCAmJiBidWZmZXIuaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgqYnVmZmVyKTsgYnVmZmVyLmFkdmFuY2UoKSkg
eworICAgICAgICB1bnNpZ25lZCBkaWdpdHMgPSAxOworICAgICAgICB3aGlsZSAoZGlnaXRzIDwg
YnVmZmVyLmxlbmd0aFJlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdChidWZmZXJbZGlnaXRzXSkp
CisgICAgICAgICAgICBkaWdpdHMrKzsKKworICAgICAgICBkb3VibGUgaW50ZWdlciA9IGZhY3Rv
ciAqIHBhcnNlSW50KHsgYnVmZmVyLnBvc2l0aW9uKCksIGRpZ2l0cyB9LCAxMCk7CisgICAgICAg
IGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRzKTsKKyAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBpZiAodG9BU0NJSVVw
cGVyKCpidWZmZXIpID09ICdZJyAmJiAhZGF0ZVBhcnRJbmRleCkgeworICAgICAgICAgICAgcmVz
dWx0LnNldFllYXJzKGludGVnZXIpOworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDE7Cisg
ICAgICAgIH0gZWxzZSBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpID09ICdNJyAmJiBkYXRlUGFy
dEluZGV4IDwgMikgeworICAgICAgICAgICAgcmVzdWx0LnNldE1vbnRocyhpbnRlZ2VyKTsKKyAg
ICAgICAgICAgIGRhdGVQYXJ0SW5kZXggPSAyOworICAgICAgICB9IGVsc2UgaWYgKHRvQVNDSUlV
cHBlcigqYnVmZmVyKSA9PSAnVycgJiYgZGF0ZVBhcnRJbmRleCA8IDMpIHsKKyAgICAgICAgICAg
IHJlc3VsdC5zZXRXZWVrcyhpbnRlZ2VyKTsKKyAgICAgICAgICAgIGRhdGVQYXJ0SW5kZXggPSAz
OworICAgICAgICB9IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnRCcpIHsKKyAg
ICAgICAgICAgIHJlc3VsdC5zZXREYXlzKGludGVnZXIpOworICAgICAgICAgICAgZGF0ZVBhcnRJ
bmRleCA9IDQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9CisKKyAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisKKyAgICBpZiAoYnVmZmVyLmxlbmd0aFJlbWFpbmluZygpIDwgMyB8fCB0b0FTQ0lJVXBw
ZXIoKmJ1ZmZlcikgIT0gJ1QnKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
YnVmZmVyLmFkdmFuY2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHRpbWVQYXJ0SW5kZXggPSAwOyB0
aW1lUGFydEluZGV4IDwgMyAmJiBidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlz
QVNDSUlEaWdpdCgqYnVmZmVyKTsgYnVmZmVyLmFkdmFuY2UoKSkgeworICAgICAgICB1bnNpZ25l
ZCBkaWdpdHMgPSAxOworICAgICAgICB3aGlsZSAoZGlnaXRzIDwgYnVmZmVyLmxlbmd0aFJlbWFp
bmluZygpICYmIGlzQVNDSUlEaWdpdChidWZmZXJbZGlnaXRzXSkpCisgICAgICAgICAgICBkaWdp
dHMrKzsKKworICAgICAgICBkb3VibGUgaW50ZWdlciA9IGZhY3RvciAqIHBhcnNlSW50KHsgYnVm
ZmVyLnBvc2l0aW9uKCksIGRpZ2l0cyB9LCAxMCk7CisgICAgICAgIGJ1ZmZlci5hZHZhbmNlQnko
ZGlnaXRzKTsKKyAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBTdHJpbmdWaWV3IGZyYWN0aW9uYWxQYXJ0OworICAg
ICAgICBpZiAoKmJ1ZmZlciA9PSAnLicgfHwgKmJ1ZmZlciA9PSAnLCcpIHsKKyAgICAgICAgICAg
IGJ1ZmZlci5hZHZhbmNlKCk7CisgICAgICAgICAgICBkaWdpdHMgPSAwOworICAgICAgICAgICAg
d2hpbGUgKGRpZ2l0cyA8IGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQo
YnVmZmVyW2RpZ2l0c10pKQorICAgICAgICAgICAgICAgIGRpZ2l0cysrOworICAgICAgICAgICAg
aWYgKCFkaWdpdHMgfHwgZGlnaXRzID4gOSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgICAgICAgICBmcmFjdGlvbmFsUGFydCA9IHsgYnVmZmVyLnBvc2l0aW9u
KCksIGRpZ2l0cyB9OworICAgICAgICAgICAgYnVmZmVyLmFkdmFuY2VCeShkaWdpdHMpOworICAg
ICAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIp
ID09ICdIJyAmJiAhdGltZVBhcnRJbmRleCkgeworICAgICAgICAgICAgcmVzdWx0LnNldEhvdXJz
KGludGVnZXIpOworICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxQYXJ0KSB7CisgICAgICAgICAg
ICAgICAgaGFuZGxlRnJhY3Rpb24ocmVzdWx0LCBmYWN0b3IsIGZyYWN0aW9uYWxQYXJ0LCBUZW1w
b3JhbFVuaXQ6OkhvdXIpOworICAgICAgICAgICAgICAgIHRpbWVQYXJ0SW5kZXggPSAzOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9IDE7CisgICAg
ICAgIH0gZWxzZSBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpID09ICdNJyAmJiB0aW1lUGFydElu
ZGV4IDwgMikgeworICAgICAgICAgICAgcmVzdWx0LnNldE1pbnV0ZXMoaW50ZWdlcik7CisgICAg
ICAgICAgICBpZiAoZnJhY3Rpb25hbFBhcnQpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVGcmFj
dGlvbihyZXN1bHQsIGZhY3RvciwgZnJhY3Rpb25hbFBhcnQsIFRlbXBvcmFsVW5pdDo6TWludXRl
KTsKKyAgICAgICAgICAgICAgICB0aW1lUGFydEluZGV4ID0gMzsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIHRpbWVQYXJ0SW5kZXggPSAyOworICAgICAgICB9IGVsc2UgaWYg
KHRvQVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnUycpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRT
ZWNvbmRzKGludGVnZXIpOworICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxQYXJ0KQorICAgICAg
ICAgICAgICAgIGhhbmRsZUZyYWN0aW9uKHJlc3VsdCwgZmFjdG9yLCBmcmFjdGlvbmFsUGFydCwg
VGVtcG9yYWxVbml0OjpTZWNvbmQpOworICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9IDM7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisK
KyAgICBpZiAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIFRvVGVtcG9yYWxE
dXJhdGlvblJlY29yZCAoIHRlbXBvcmFsRHVyYXRpb25MaWtlICkKK1RlbXBvcmFsRHVyYXRpb246
OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjpmcm9tT2JqZWN0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBkdXJhdGlvbkxpa2UpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIEFTU0VSVCghZHVyYXRpb25MaWtlLT5pbmhlcml0czxUZW1wb3JhbER1cmF0
aW9uPih2bSkpOworCisgICAgU3ViZHVyYXRpb25zIHJlc3VsdDsKKyAgICBhdXRvIGhhc1JlbGV2
YW50UHJvcGVydHkgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9m
VGVtcG9yYWxVbml0czsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkdXJhdGlvbkxp
a2UtPmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSh2bSwgaSkpOworCisgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgICAgICByZXN1bHRbaV0gPSAwOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBoYXNSZWxldmFudFByb3Bl
cnR5ID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0W2ldID0gdmFsdWUudG9OdW1iZXIoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAg
ICBpZiAoIWlzSW50ZWdlcihyZXN1bHRbaV0pKSB7CisgICAgICAgICAgICB0aHJvd1JhbmdlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uIHByb3BlcnRpZXMgbXVz
dCBiZSBpbnRlZ2VycyJfcyk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCFoYXNSZWxldmFudFByb3BlcnR5KSB7CisgICAgICAgIHRocm93VHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJvYmplY3QgbXVzdCBjb250YWluIGF0IGxlYXN0
IG9uZSBUZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0eSJfcyk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gVG9UZW1wb3JhbER1cmF0aW9u
ICggaXRlbSApCitUZW1wb3JhbER1cmF0aW9uKiBUZW1wb3JhbER1cmF0aW9uOjp0b0R1cmF0aW9u
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgaXRlbVZhbHVlKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmluaGVyaXRzPFRlbXBvcmFsRHVy
YXRpb24+KHZtKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4oaXRl
bVZhbHVlKTsKKworICAgIGlmIChpdGVtVmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2Jh
bE9iamVjdCwgZnJvbU9iamVjdChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGl0ZW1WYWx1ZSkpKSk7
CisKKyAgICBTdHJpbmcgc3RyaW5nID0gaXRlbVZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVj
dCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICBhdXRv
IHBhcnNlZFN1YmR1cmF0aW9ucyA9IHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtd
KGF1dG8gYnVmZmVyKSAtPiBzdGQ6Om9wdGlvbmFsPFN1YmR1cmF0aW9ucz4geworICAgICAgICBy
ZXR1cm4gcGFyc2UoYnVmZmVyKTsKKyAgICB9KTsKKyAgICBpZiAoIXBhcnNlZFN1YmR1cmF0aW9u
cykgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImNvdWxk
IG5vdCBwYXJzZSBEdXJhdGlvbiBzdHJpbmciX3MpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIFRlbXBvcmFsRHVyYXRpb246
OmNyZWF0ZUlmVmFsaWQoZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHBhcnNlZFN1YmR1cmF0aW9ucy52
YWx1ZSgpKSkpOworfQorCitUZW1wb3JhbER1cmF0aW9uKiBUZW1wb3JhbER1cmF0aW9uOjpmcm9t
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgaXRlbVZhbHVlKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmIChpdGVtVmFsdWUuaW5oZXJp
dHM8VGVtcG9yYWxEdXJhdGlvbj4odm0pKSB7CisgICAgICAgIFN1YmR1cmF0aW9ucyBjbG9uZWQg
PSBqc0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KGl0ZW1WYWx1ZSktPm1fc3ViZHVyYXRpb25zOwor
ICAgICAgICByZXR1cm4gVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qt
PmR1cmF0aW9uU3RydWN0dXJlKCksIFdURk1vdmUoY2xvbmVkKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHRvRHVyYXRpb24oZ2xvYmFsT2JqZWN0LCBpdGVtVmFsdWUpOworfQorCitzdGF0aWMgZG91
YmxlIHRvdGFsTmFub3NlY29uZHMoVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zJiBzdWJk
dXJhdGlvbnMpCit7CisgICAgYXV0byBob3VycyA9IDI0ICogc3ViZHVyYXRpb25zLmRheXMoKSAr
IHN1YmR1cmF0aW9ucy5ob3VycygpOworICAgIGF1dG8gbWludXRlcyA9IDYwICogaG91cnMgKyBz
dWJkdXJhdGlvbnMubWludXRlcygpOworICAgIGF1dG8gc2Vjb25kcyA9IDYwICogbWludXRlcyAr
IHN1YmR1cmF0aW9ucy5zZWNvbmRzKCk7CisgICAgYXV0byBtaWxsaXNlY29uZHMgPSAxMDAwICog
c2Vjb25kcyArIHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMoKTsKKyAgICBhdXRvIG1pY3Jvc2Vj
b25kcyA9IDEwMDAgKiBtaWxsaXNlY29uZHMgKyBzdWJkdXJhdGlvbnMubWljcm9zZWNvbmRzKCk7
CisgICAgcmV0dXJuIDEwMDAgKiBtaWNyb3NlY29uZHMgKyBzdWJkdXJhdGlvbnMubmFub3NlY29u
ZHMoKTsKK30KKworSlNWYWx1ZSBUZW1wb3JhbER1cmF0aW9uOjpjb21wYXJlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWVPbmUsIEpTVmFsdWUgdmFsdWVUd28pCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIG9uZSA9IHRvRHVyYXRpb24oZ2xvYmFs
T2JqZWN0LCB2YWx1ZU9uZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgIGF1dG8qIHR3byA9IHRvRHVyYXRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZVR3byk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmIChvbmUtPnllYXJz
KCkgfHwgdHdvLT55ZWFycygpIHx8IG9uZS0+bW9udGhzKCkgfHwgdHdvLT5tb250aHMoKSB8fCBv
bmUtPndlZWtzKCkgfHwgdHdvLT53ZWVrcygpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IGNvbXBhcmUgYSBkdXJhdGlvbiBvZiB5ZWFycywg
bW9udGhzLCBvciB3ZWVrcyB3aXRob3V0IGEgcmVsYXRpdmVUbyBvcHRpb24iX3MpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKworICAgIGF1dG8gbnNPbmUgPSB0b3RhbE5hbm9zZWNvbmRz
KG9uZS0+bV9zdWJkdXJhdGlvbnMpOworICAgIGF1dG8gbnNUd28gPSB0b3RhbE5hbm9zZWNvbmRz
KHR3by0+bV9zdWJkdXJhdGlvbnMpOworICAgIHJldHVybiBqc051bWJlcihuc09uZSA+IG5zVHdv
ID8gMSA6IG5zT25lIDwgbnNUd28gPyAtMSA6IDApOworfQorCitpbnQgVGVtcG9yYWxEdXJhdGlv
bjo6c2lnbihjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9u
cykKK3sKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiBzdWJkdXJhdGlvbnMpIHsKKyAgICAgICAgaWYg
KHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBpZiAodmFsdWUg
PiAwKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK
K1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjp3aXRoKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBkdXJhdGlvbkxpa2UpIGNvbnN0
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQ7CisgICAg
YXV0byBoYXNSZWxldmFudFByb3BlcnR5ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZlRlbXBvcmFsVW5pdHM7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gZHVyYXRpb25MaWtlLT5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUodm0sIGkpKTsK
KworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICAgICAgcmVzdWx0
W2ldID0gbV9zdWJkdXJhdGlvbnNbaV07CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGhhc1JlbGV2YW50UHJvcGVydHkgPSB0cnVlOworICAgICAgICByZXN1bHRb
aV0gPSB2YWx1ZS50b051bWJlcihnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIGlmICghaXNJbnRlZ2VyKHJlc3VsdFtpXSkp
IHsKKyAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVt
cG9yYWwuRHVyYXRpb24gcHJvcGVydGllcyBtdXN0IGJlIGludGVnZXJzIl9zKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWhhc1JlbGV2YW50
UHJvcGVydHkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
Im9iamVjdCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIFRlbXBvcmFsLkR1cmF0aW9uIHByb3Bl
cnR5Il9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6
bmVnYXRlZCgpIGNvbnN0Cit7CisgICAgU3ViZHVyYXRpb25zIHJlc3VsdDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsgaSsrKQorICAgICAgICByZXN1
bHRbaV0gPSAtbV9zdWJkdXJhdGlvbnNbaV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVGVt
cG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zIFRlbXBvcmFsRHVyYXRpb246OmFicygpIGNvbnN0
Cit7CisgICAgU3ViZHVyYXRpb25zIHJlc3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bWJlck9mVGVtcG9yYWxVbml0czsgaSsrKQorICAgICAgICByZXN1bHRbaV0gPSBzdGQ6OmFi
cyhtX3N1YmR1cmF0aW9uc1tpXSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gRGVmYXVs
dFRlbXBvcmFsTGFyZ2VzdFVuaXQgKCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMs
IG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzICkKK1RlbXBvcmFs
VW5pdCBUZW1wb3JhbER1cmF0aW9uOjpsYXJnZXN0U3ViZHVyYXRpb24oKSBjb25zdAoreworICAg
IHVpbnQ4X3QgaW5kZXggPSAwOworICAgIHdoaWxlIChpbmRleCA8IG51bWJlck9mVGVtcG9yYWxV
bml0cyAtIDEgJiYgIW1fc3ViZHVyYXRpb25zW2luZGV4XSkKKyAgICAgICAgaW5kZXgrKzsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVtcG9yYWxVbml0PihpbmRleCk7Cit9CisKKy8vIEJhbGFu
Y2VEdXJhdGlvbiAoIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMs
IG1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIGxhcmdlc3RVbml0IFsgLCByZWxhdGl2ZVRvIF0g
KQordm9pZCBUZW1wb3JhbER1cmF0aW9uOjpiYWxhbmNlKFN1YmR1cmF0aW9ucyYgc3ViZHVyYXRp
b25zLCBUZW1wb3JhbFVuaXQgbGFyZ2VzdFVuaXQpCit7CisgICAgYXV0byBuYW5vc2Vjb25kcyA9
IHRvdGFsTmFub3NlY29uZHMoc3ViZHVyYXRpb25zKTsKKyAgICBzdWJkdXJhdGlvbnMuY2xlYXIo
KTsKKworICAgIGlmIChsYXJnZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6OkRheSkgeworICAgICAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIG5hbm9zZWNvbmRzUGVyRGF5ID0gMjQuMCAqIDYwICogNjAg
KiAxMDAwICogMTAwMCAqIDEwMDA7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXREYXlzKHN0ZDo6
dHJ1bmMobmFub3NlY29uZHMgLyBuYW5vc2Vjb25kc1BlckRheSkpOworICAgICAgICBuYW5vc2Vj
b25kcyA9IHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgbmFub3NlY29uZHNQZXJEYXkpOworICAgIH0K
KworICAgIGRvdWJsZSBtaWNyb3NlY29uZHMgPSBzdGQ6OnRydW5jKG5hbm9zZWNvbmRzIC8gMTAw
MCk7CisgICAgZG91YmxlIG1pbGxpc2Vjb25kcyA9IHN0ZDo6dHJ1bmMobWljcm9zZWNvbmRzIC8g
MTAwMCk7CisgICAgZG91YmxlIHNlY29uZHMgPSBzdGQ6OnRydW5jKG1pbGxpc2Vjb25kcyAvIDEw
MDApOworICAgIGRvdWJsZSBtaW51dGVzID0gc3RkOjp0cnVuYyhzZWNvbmRzIC8gNjApOworICAg
IGlmIChsYXJnZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6OkhvdXIpIHsKKyAgICAgICAgc3ViZHVy
YXRpb25zLnNldE5hbm9zZWNvbmRzKHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAg
ICAgICBzdWJkdXJhdGlvbnMuc2V0TWljcm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMs
IDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZtb2Qo
bWlsbGlzZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHN0
ZDo6Zm1vZChzZWNvbmRzLCA2MCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWludXRlcyhz
dGQ6OmZtb2QobWludXRlcywgNjApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldEhvdXJzKHN0
ZDo6dHJ1bmMobWludXRlcyAvIDYwKSk7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBU
ZW1wb3JhbFVuaXQ6Ok1pbnV0ZSkgeworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29u
ZHMoc3RkOjpmbW9kKG5hbm9zZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5z
ZXRNaWNyb3NlY29uZHMoc3RkOjpmbW9kKG1pY3Jvc2Vjb25kcywgMTAwMCkpOworICAgICAgICBz
dWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNvbmRzKHN0ZDo6Zm1vZChtaWxsaXNlY29uZHMsIDEwMDAp
KTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldFNlY29uZHMoc3RkOjpmbW9kKHNlY29uZHMsIDYw
KSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaW51dGVzKG1pbnV0ZXMpOworICAgIH0gZWxz
ZSBpZiAobGFyZ2VzdFVuaXQgPT0gVGVtcG9yYWxVbml0OjpTZWNvbmQpIHsKKyAgICAgICAgc3Vi
ZHVyYXRpb25zLnNldE5hbm9zZWNvbmRzKHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOwor
ICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWljcm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29u
ZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZt
b2QobWlsbGlzZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRz
KHNlY29uZHMpOworICAgIH0gZWxzZSBpZiAobGFyZ2VzdFVuaXQgPT0gVGVtcG9yYWxVbml0OjpN
aWxsaXNlY29uZCkgeworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjpm
bW9kKG5hbm9zZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3Nl
Y29uZHMoc3RkOjpmbW9kKG1pY3Jvc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlv
bnMuc2V0TWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kcyk7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0
VW5pdCA9PSBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kKSB7CisgICAgICAgIHN1YmR1cmF0aW9u
cy5zZXROYW5vc2Vjb25kcyhzdGQ6OmZtb2QobmFub3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAg
c3ViZHVyYXRpb25zLnNldE1pY3Jvc2Vjb25kcyhtaWNyb3NlY29uZHMpOworICAgIH0gZWxzZQor
ICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMobmFub3NlY29uZHMpOworfQorCitU
ZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6YWRkKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3RoZXJWYWx1ZSkgY29uc3QKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogb3RoZXIgPSB0b0R1cmF0aW9uKGdsb2JhbE9i
amVjdCwgb3RoZXJWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgIGF1dG8gbGFyZ2VzdFVuaXQgPSBzdGQ6Om1pbihsYXJnZXN0U3ViZHVyYXRpb24oKSwg
b3RoZXItPmxhcmdlc3RTdWJkdXJhdGlvbigpKTsKKyAgICBpZiAobGFyZ2VzdFVuaXQgPD0gVGVt
cG9yYWxVbml0OjpXZWVrKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiQ2Fubm90IGFkZCBhIGR1cmF0aW9uIG9mIHllYXJzLCBtb250aHMsIG9yIHdlZWtz
IHdpdGhvdXQgYSByZWxhdGl2ZVRvIG9wdGlvbiJfcyk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgU3ViZHVyYXRpb25zIHJlc3VsdCB7CisgICAgICAgIDAsIDAsIDAsIGRheXMo
KSArIG90aGVyLT5kYXlzKCksCisgICAgICAgIGhvdXJzKCkgKyBvdGhlci0+aG91cnMoKSwgbWlu
dXRlcygpICsgb3RoZXItPm1pbnV0ZXMoKSwgc2Vjb25kcygpICsgb3RoZXItPnNlY29uZHMoKSwK
KyAgICAgICAgbWlsbGlzZWNvbmRzKCkgKyBvdGhlci0+bWlsbGlzZWNvbmRzKCksIG1pY3Jvc2Vj
b25kcygpICsgb3RoZXItPm1pY3Jvc2Vjb25kcygpLCBuYW5vc2Vjb25kcygpICsgb3RoZXItPm5h
bm9zZWNvbmRzKCkKKyAgICB9OworCisgICAgYmFsYW5jZShyZXN1bHQsIGxhcmdlc3RVbml0KTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMg
VGVtcG9yYWxEdXJhdGlvbjo6c3VidHJhY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBvdGhlclZhbHVlKSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBh
dXRvKiBvdGhlciA9IHRvRHVyYXRpb24oZ2xvYmFsT2JqZWN0LCBvdGhlclZhbHVlKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgYXV0byBsYXJnZXN0VW5pdCA9
IHN0ZDo6bWluKGxhcmdlc3RTdWJkdXJhdGlvbigpLCBvdGhlci0+bGFyZ2VzdFN1YmR1cmF0aW9u
KCkpOworICAgIGlmIChsYXJnZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6OldlZWspIHsKKyAgICAg
ICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3Qgc3VidHJhY3Qg
YSBkdXJhdGlvbiBvZiB5ZWFycywgbW9udGhzLCBvciB3ZWVrcyB3aXRob3V0IGEgcmVsYXRpdmVU
byBvcHRpb24iX3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFN1YmR1cmF0
aW9ucyByZXN1bHQgeworICAgICAgICAwLCAwLCAwLCBkYXlzKCkgLSBvdGhlci0+ZGF5cygpLAor
ICAgICAgICBob3VycygpIC0gb3RoZXItPmhvdXJzKCksIG1pbnV0ZXMoKSAtIG90aGVyLT5taW51
dGVzKCksIHNlY29uZHMoKSAtIG90aGVyLT5zZWNvbmRzKCksCisgICAgICAgIG1pbGxpc2Vjb25k
cygpIC0gb3RoZXItPm1pbGxpc2Vjb25kcygpLCBtaWNyb3NlY29uZHMoKSAtIG90aGVyLT5taWNy
b3NlY29uZHMoKSwgbmFub3NlY29uZHMoKSAtIG90aGVyLT5uYW5vc2Vjb25kcygpCisgICAgfTsK
KworICAgIGJhbGFuY2UocmVzdWx0LCBsYXJnZXN0VW5pdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworLy8gUm91bmREdXJhdGlvbiAoIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3Vy
cywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMsIG5hbm9zZWNv
bmRzLCBpbmNyZW1lbnQsIHVuaXQsIHJvdW5kaW5nTW9kZSBbICwgcmVsYXRpdmVUbyBdICkKK2Rv
dWJsZSBUZW1wb3JhbER1cmF0aW9uOjpyb3VuZChUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlv
bnMmIHN1YmR1cmF0aW9ucywgZG91YmxlIGluY3JlbWVudCwgVGVtcG9yYWxVbml0IHVuaXQsIFJv
dW5kaW5nTW9kZSBtb2RlKQoreworICAgIEFTU0VSVCh1bml0ID49IFRlbXBvcmFsVW5pdDo6RGF5
KTsKKyAgICBkb3VibGUgcmVtYWluZGVyID0gMDsKKworICAgIGlmICh1bml0ID09IFRlbXBvcmFs
VW5pdDo6RGF5KSB7CisgICAgICAgIGF1dG8gb3JpZ2luYWxEYXlzID0gc3ViZHVyYXRpb25zLmRh
eXMoKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldERheXMoMCk7CisgICAgICAgIGF1dG8gbmFu
b3NlY29uZHMgPSB0b3RhbE5hbm9zZWNvbmRzKHN1YmR1cmF0aW9ucyk7CisKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBuYW5vc2Vjb25kc1BlckRheSA9IDI0LjAgKiA2MCAqIDYwICogMTAw
MCAqIDEwMDAgKiAxMDAwOworICAgICAgICBhdXRvIGZyYWN0aW9uYWxEYXlzID0gb3JpZ2luYWxE
YXlzICsgbmFub3NlY29uZHMgLyBuYW5vc2Vjb25kc1BlckRheTsKKyAgICAgICAgYXV0byBuZXdE
YXlzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsRGF5cywgaW5jcmVtZW50LCBt
b2RlKTsKKyAgICAgICAgcmVtYWluZGVyID0gZnJhY3Rpb25hbERheXMgLSBuZXdEYXlzOworICAg
ICAgICBzdWJkdXJhdGlvbnMuc2V0RGF5cyhuZXdEYXlzKTsKKyAgICB9IGVsc2UgaWYgKHVuaXQg
PT0gVGVtcG9yYWxVbml0OjpIb3VyKSB7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbFNlY29uZHMg
PSBzdWJkdXJhdGlvbnMuc2Vjb25kcygpICsgc3ViZHVyYXRpb25zLm1pbGxpc2Vjb25kcygpICog
MWUtMyArIHN1YmR1cmF0aW9ucy5taWNyb3NlY29uZHMoKSAqIDFlLTYgKyBzdWJkdXJhdGlvbnMu
bmFub3NlY29uZHMoKSAqIDFlLTk7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbEhvdXJzID0gc3Vi
ZHVyYXRpb25zLmhvdXJzKCkgKyAoc3ViZHVyYXRpb25zLm1pbnV0ZXMoKSArIGZyYWN0aW9uYWxT
ZWNvbmRzIC8gNjApIC8gNjA7CisgICAgICAgIGF1dG8gbmV3SG91cnMgPSByb3VuZE51bWJlclRv
SW5jcmVtZW50KGZyYWN0aW9uYWxIb3VycywgaW5jcmVtZW50LCBtb2RlKTsKKyAgICAgICAgcmVt
YWluZGVyID0gZnJhY3Rpb25hbEhvdXJzIC0gbmV3SG91cnM7CisgICAgICAgIHN1YmR1cmF0aW9u
cy5zZXRIb3VycyhuZXdIb3Vycyk7CisgICAgfSBlbHNlIGlmICh1bml0ID09IFRlbXBvcmFsVW5p
dDo6TWludXRlKSB7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbFNlY29uZHMgPSBzdWJkdXJhdGlv
bnMuc2Vjb25kcygpICsgc3ViZHVyYXRpb25zLm1pbGxpc2Vjb25kcygpICogMWUtMyArIHN1YmR1
cmF0aW9ucy5taWNyb3NlY29uZHMoKSAqIDFlLTYgKyBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMo
KSAqIDFlLTk7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbE1pbnV0ZXMgPSBzdWJkdXJhdGlvbnMu
bWludXRlcygpICsgZnJhY3Rpb25hbFNlY29uZHMgLyA2MDsKKyAgICAgICAgYXV0byBuZXdNaW51
dGVzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsTWludXRlcywgaW5jcmVtZW50
LCBtb2RlKTsKKyAgICAgICAgcmVtYWluZGVyID0gZnJhY3Rpb25hbE1pbnV0ZXMgLSBuZXdNaW51
dGVzOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWludXRlcyhuZXdNaW51dGVzKTsKKyAgICB9
IGVsc2UgaWYgKHVuaXQgPT0gVGVtcG9yYWxVbml0OjpTZWNvbmQpIHsKKyAgICAgICAgYXV0byBm
cmFjdGlvbmFsU2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5zZWNvbmRzKCkgKyBzdWJkdXJhdGlvbnMu
bWlsbGlzZWNvbmRzKCkgKiAxZS0zICsgc3ViZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygpICogMWUt
NiArIHN1YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygpICogMWUtOTsKKyAgICAgICAgYXV0byBuZXdT
ZWNvbmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsU2Vjb25kcywgaW5jcmVt
ZW50LCBtb2RlKTsKKyAgICAgICAgcmVtYWluZGVyID0gZnJhY3Rpb25hbFNlY29uZHMgLSBuZXdT
ZWNvbmRzOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0U2Vjb25kcyhuZXdTZWNvbmRzKTsKKyAg
ICB9IGVsc2UgaWYgKHVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCkgeworICAgICAg
ICBhdXRvIGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgPSBzdWJkdXJhdGlvbnMubWlsbGlzZWNvbmRz
KCkgKyBzdWJkdXJhdGlvbnMubWljcm9zZWNvbmRzKCkgKiAxZS0zICsgc3ViZHVyYXRpb25zLm5h
bm9zZWNvbmRzKCkgKiAxZS02OworICAgICAgICBhdXRvIG5ld01pbGxpc2Vjb25kcyA9IHJvdW5k
TnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbE1pbGxpc2Vjb25kcywgaW5jcmVtZW50LCBtb2Rl
KTsKKyAgICAgICAgcmVtYWluZGVyID0gZnJhY3Rpb25hbE1pbGxpc2Vjb25kcyAtIG5ld01pbGxp
c2Vjb25kczsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhuZXdNaWxsaXNl
Y29uZHMpOworICAgIH0gZWxzZSBpZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25k
KSB7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbE1pY3Jvc2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5t
aWNyb3NlY29uZHMoKSArIHN1YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygpICogMWUtMzsKKyAgICAg
ICAgYXV0byBuZXdNaWNyb3NlY29uZHMgPSByb3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0aW9u
YWxNaWNyb3NlY29uZHMsIGluY3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZy
YWN0aW9uYWxNaWNyb3NlY29uZHMgLSBuZXdNaWNyb3NlY29uZHM7CisgICAgICAgIHN1YmR1cmF0
aW9ucy5zZXRNaWNyb3NlY29uZHMobmV3TWljcm9zZWNvbmRzKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBhdXRvIG5ld05hbm9zZWNvbmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChzdWJkdXJh
dGlvbnMubmFub3NlY29uZHMoKSwgaW5jcmVtZW50LCBtb2RlKTsKKyAgICAgICAgcmVtYWluZGVy
ID0gc3ViZHVyYXRpb25zLm5hbm9zZWNvbmRzKCkgLSBuZXdOYW5vc2Vjb25kczsKKyAgICAgICAg
c3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRzKG5ld05hbm9zZWNvbmRzKTsKKyAgICB9CisKKyAg
ICBmb3IgKGF1dG8gaSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHVuaXQpICsgMXU7IGkgPCBudW1i
ZXJPZlRlbXBvcmFsVW5pdHM7IGkrKykKKyAgICAgICAgc3ViZHVyYXRpb25zW2ldID0gMDsKKwor
ICAgIHJldHVybiByZW1haW5kZXI7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9u
cyBUZW1wb3JhbER1cmF0aW9uOjpyb3VuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIG9wdGlvbnNWYWx1ZSkgY29uc3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
SlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9w
dGlvbnNWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
IGF1dG8gc21hbGxlc3QgPSB0ZW1wb3JhbFNtYWxsZXN0VW5pdChnbG9iYWxPYmplY3QsIG9wdGlv
bnMsIHsgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFRl
bXBvcmFsVW5pdCBkZWZhdWx0TGFyZ2VzdFVuaXQgPSBsYXJnZXN0U3ViZHVyYXRpb24oKTsKKyAg
ICBhdXRvIGxhcmdlc3QgPSB0ZW1wb3JhbExhcmdlc3RVbml0KGdsb2JhbE9iamVjdCwgb3B0aW9u
cywgeyB9LCBkZWZhdWx0TGFyZ2VzdFVuaXQpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisKKyAgICBpZiAoIXNtYWxsZXN0ICYmICFsYXJnZXN0KSB7CisgICAgICAgIHRo
cm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHJvdW5kIHdpdGhvdXQg
YSBzbWFsbGVzdFVuaXQgb3IgbGFyZ2VzdFVuaXQgb3B0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICBpZiAoc21hbGxlc3QgJiYgbGFyZ2VzdCAmJiBzbWFsbGVzdC52
YWx1ZSgpIDwgbGFyZ2VzdC52YWx1ZSgpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAic21hbGxlc3RVbml0IG11c3QgYmUgc21hbGxlciB0aGFuIGxhcmdl
c3RVbml0Il9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBUZW1wb3JhbFVu
aXQgc21hbGxlc3RVbml0ID0gc21hbGxlc3QudmFsdWVfb3IoVGVtcG9yYWxVbml0OjpOYW5vc2Vj
b25kKTsKKyAgICBUZW1wb3JhbFVuaXQgbGFyZ2VzdFVuaXQgPSBsYXJnZXN0LnZhbHVlX29yKHN0
ZDo6bWluKGRlZmF1bHRMYXJnZXN0VW5pdCwgc21hbGxlc3RVbml0KSk7CisKKyAgICBhdXRvIHJv
dW5kaW5nTW9kZSA9IGludGxPcHRpb248Um91bmRpbmdNb2RlPihnbG9iYWxPYmplY3QsIG9wdGlv
bnMsIHZtLnByb3BlcnR5TmFtZXMtPnJvdW5kaW5nTW9kZSwKKyAgICAgICAgeyB7ICJjZWlsIl9z
LCBSb3VuZGluZ01vZGU6OkNlaWwgfSwgeyAiZmxvb3IiX3MsIFJvdW5kaW5nTW9kZTo6Rmxvb3Ig
fSwgeyAidHJ1bmMiX3MsIFJvdW5kaW5nTW9kZTo6VHJ1bmMgfSwgeyAiaGFsZkV4cGFuZCJfcywg
Um91bmRpbmdNb2RlOjpIYWxmRXhwYW5kIH0gfSwKKyAgICAgICAgInJvdW5kaW5nTW9kZSBtdXN0
IGJlIGVpdGhlciBcImNlaWxcIiwgXCJmbG9vclwiLCBcInRydW5jXCIsIG9yIFwiaGFsZkV4cGFu
ZFwiIl9zLCBSb3VuZGluZ01vZGU6OkhhbGZFeHBhbmQpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisKKyAgICBhdXRvIGluY3JlbWVudCA9IHRlbXBvcmFsUm91bmRpbmdJ
bmNyZW1lbnQoZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCBtYXhpbXVtUm91bmRpbmdJbmNyZW1lbnQo
c21hbGxlc3RVbml0KSwgZmFsc2UpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICBpZiAobGFyZ2VzdFVuaXQgPiBUZW1wb3JhbFVuaXQ6OlllYXIgJiYgKHllYXJz
KCkgfHwgbW9udGhzKCkgfHwgd2Vla3MoKSB8fCAoZGF5cygpICYmIGxhcmdlc3RVbml0IDwgVGVt
cG9yYWxVbml0OjpEYXkpKSkgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIkNhbm5vdCByb3VuZCBhIGR1cmF0aW9uIG9mIHllYXJzLCBtb250aHMsIG9yIHdl
ZWtzIHdpdGhvdXQgYSByZWxhdGl2ZVRvIG9wdGlvbiJfcyk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgU3ViZHVyYXRpb25zIG5ld1N1YmR1cmF0aW9ucyA9IG1fc3ViZHVyYXRp
b25zOworICAgIHJvdW5kKG5ld1N1YmR1cmF0aW9ucywgaW5jcmVtZW50LCBzbWFsbGVzdFVuaXQs
IHJvdW5kaW5nTW9kZSk7CisgICAgYmFsYW5jZShuZXdTdWJkdXJhdGlvbnMsIGxhcmdlc3RVbml0
KTsKKyAgICByZXR1cm4gbmV3U3ViZHVyYXRpb25zOworfQorCitkb3VibGUgVGVtcG9yYWxEdXJh
dGlvbjo6dG90YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25z
VmFsdWUpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBvcHRp
b25zID0gaW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworCisgICAgU3RyaW5nIHVuaXRTdHJp
bmcgPSBpbnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlO
YW1lcy0+dW5pdCwgeyB9LCBudWxscHRyLCBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCAwKTsKKworICAgIGF1dG8gdW5pdFR5cGUgPSB0ZW1wb3JhbFVuaXRUeXBlKHVu
aXRTdHJpbmcpOworICAgIGlmICghdW5pdFR5cGUpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJ1bml0IGlzIGFuIGludmFsaWQgVGVtcG9yYWwgdW5pdCJf
cyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFRlbXBvcmFsVW5pdCB1bml0ID0g
dW5pdFR5cGUudmFsdWUoKTsKKyAgICBpZiAodW5pdCA+IFRlbXBvcmFsVW5pdDo6WWVhciAmJiAo
eWVhcnMoKSB8fCBtb250aHMoKSB8fCB3ZWVrcygpIHx8IChkYXlzKCkgJiYgdW5pdCA8IFRlbXBv
cmFsVW5pdDo6RGF5KSkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJDYW5ub3QgdG90YWwgYSBkdXJhdGlvbiBvZiB5ZWFycywgbW9udGhzLCBvciB3ZWVr
cyB3aXRob3V0IGEgcmVsYXRpdmVUbyBvcHRpb24iX3MpOworICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KKworICAgIFN1YmR1cmF0aW9ucyBuZXdTdWJkdXJhdGlvbnMgPSBtX3N1YmR1cmF0aW9u
czsKKyAgICBiYWxhbmNlKG5ld1N1YmR1cmF0aW9ucywgdW5pdCk7CisgICAgZG91YmxlIHJlbWFp
bmRlciA9IHJvdW5kKG5ld1N1YmR1cmF0aW9ucywgMSwgdW5pdCwgUm91bmRpbmdNb2RlOjpUcnVu
Yyk7CisgICAgcmV0dXJuIG5ld1N1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90Pih1bml0
KV0gKyByZW1haW5kZXI7Cit9CisKK1N0cmluZyBUZW1wb3JhbER1cmF0aW9uOjp0b1N0cmluZyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSkgY29uc3QK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsR2V0
T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmICghb3B0aW9ucykKKyAgICAgICAgcmV0
dXJuIHRvU3RyaW5nKCk7CisKKyAgICBQcmVjaXNpb25EYXRhIGRhdGEgPSBzZWNvbmRzU3RyaW5n
UHJlY2lzaW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKyAgICBBU1NFUlQoZGF0YS51bml0ID49IFRlbXBvcmFsVW5pdDo6U2Vj
b25kKTsKKworICAgIGF1dG8gcm91bmRpbmdNb2RlID0gaW50bE9wdGlvbjxSb3VuZGluZ01vZGU+
KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+cm91bmRpbmdNb2RlLAor
ICAgICAgICB7IHsgImNlaWwiX3MsIFJvdW5kaW5nTW9kZTo6Q2VpbCB9LCB7ICJmbG9vciJfcywg
Um91bmRpbmdNb2RlOjpGbG9vciB9LCB7ICJ0cnVuYyJfcywgUm91bmRpbmdNb2RlOjpUcnVuYyB9
LCB7ICJoYWxmRXhwYW5kIl9zLCBSb3VuZGluZ01vZGU6OkhhbGZFeHBhbmQgfSB9LAorICAgICAg
ICAicm91bmRpbmdNb2RlIG11c3QgYmUgZWl0aGVyIFwiY2VpbFwiLCBcImZsb29yXCIsIFwidHJ1
bmNcIiwgb3IgXCJoYWxmRXhwYW5kXCIiX3MsIFJvdW5kaW5nTW9kZTo6VHJ1bmMpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAvLyBObyBuZWVkIHRvIG1ha2Ug
YSBuZXcgb2JqZWN0IGlmIHdlIHdlcmUgZ2l2ZW4gZXhwbGljaXQgZGVmYXVsdHMuCisgICAgaWYg
KCFkYXRhLnByZWNpc2lvbiAmJiByb3VuZGluZ01vZGUgPT0gUm91bmRpbmdNb2RlOjpUcnVuYykK
KyAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCk7CisKKyAgICBTdWJkdXJhdGlvbnMgbmV3U3ViZHVy
YXRpb25zID0gbV9zdWJkdXJhdGlvbnM7CisgICAgcm91bmQobmV3U3ViZHVyYXRpb25zLCBkYXRh
LmluY3JlbWVudCwgZGF0YS51bml0LCByb3VuZGluZ01vZGUpOworICAgIHJldHVybiB0b1N0cmlu
ZyhuZXdTdWJkdXJhdGlvbnMsIGRhdGEucHJlY2lzaW9uKTsKK30KKworLy8gVGVtcG9yYWxEdXJh
dGlvblRvU3RyaW5nICggeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVz
LCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIHByZWNp
c2lvbiApCitTdHJpbmcgVGVtcG9yYWxEdXJhdGlvbjo6dG9TdHJpbmcoY29uc3QgVGVtcG9yYWxE
dXJhdGlvbjo6U3ViZHVyYXRpb25zJiBzdWJkdXJhdGlvbnMsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHByZWNpc2lvbikKK3sKKyAgICBBU1NFUlQoIXByZWNpc2lvbiB8fCBwcmVjaXNpb24udmFs
dWUoKSA8IDEwKTsKKworICAgIGF1dG8gYmFsYW5jZWRNaWNyb3NlY29uZHMgPSBzdWJkdXJhdGlv
bnMubWljcm9zZWNvbmRzKCkgKyBzdGQ6OnRydW5jKHN1YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygp
IC8gMTAwMCk7CisgICAgYXV0byBiYWxhbmNlZE5hbm9zZWNvbmRzID0gc3RkOjpmbW9kKHN1YmR1
cmF0aW9ucy5uYW5vc2Vjb25kcygpLCAxMDAwKTsKKyAgICBhdXRvIGJhbGFuY2VkTWlsbGlzZWNv
bmRzID0gc3ViZHVyYXRpb25zLm1pbGxpc2Vjb25kcygpICsgc3RkOjp0cnVuYyhiYWxhbmNlZE1p
Y3Jvc2Vjb25kcyAvIDEwMDApOworICAgIGJhbGFuY2VkTWljcm9zZWNvbmRzID0gc3RkOjpmbW9k
KGJhbGFuY2VkTWljcm9zZWNvbmRzLCAxMDAwKTsKKyAgICBhdXRvIGJhbGFuY2VkU2Vjb25kcyA9
IHN1YmR1cmF0aW9ucy5zZWNvbmRzKCkgKyBzdGQ6OnRydW5jKGJhbGFuY2VkTWlsbGlzZWNvbmRz
IC8gMTAwMCk7CisgICAgYmFsYW5jZWRNaWxsaXNlY29uZHMgPSBzdGQ6OmZtb2QoYmFsYW5jZWRN
aWxsaXNlY29uZHMsIDEwMDApOworCisgICAgLy8gVEVNUE9SQVJZISAocGVuZGluZyBzcGVjIGRp
c2N1c3Npb24gYWJvdXQgbWF4aW11bSB2YWx1ZXMgQCBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9w
cm9wb3NhbC10ZW1wb3JhbC9pc3N1ZXMvMTYwNCkKKyAgICAvLyBXZSAqbXVzdCogYXZvaWQgcHJp
bnRpbmcgYSBudW1iZXIgaW4gc2NpZW50aWZpYyBub3RhdGlvbiwgd2hpY2ggaXMgY3VycmVudGx5
IG9ubHkgcG9zc2libGUgZm9yIG51bWJlcnMgPCAxZTIxCisgICAgLy8gKGEgdmFsdWUgb3JpZ2lu
YXRpbmcgaW4gdGhlIE51bWJlciN0b0ZpeGVkIHNwZWMgYW5kIHVwaGVsZCBieSBvdXIgTnVtYmVy
VG9TdHJpbmdCdWZmZXIpLgorICAgIGF1dG8gZm9ybWF0SW50ZWdlciA9IFtdKGRvdWJsZSB2YWx1
ZSkgLT4gZG91YmxlIHsKKyAgICAgICAgYXV0byBhYnNWYWx1ZSA9IHN0ZDo6YWJzKHZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIExJS0VMWShhYnNWYWx1ZSA8IDFlMjEpID8gYWJzVmFsdWUgOiAxZTIx
IC0gNjU1Mzc7CisgICAgfTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGF1
dG8gc2lnbiA9IFRlbXBvcmFsRHVyYXRpb246OnNpZ24oc3ViZHVyYXRpb25zKTsKKyAgICBpZiAo
c2lnbiA8IDApCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCctJyk7CisKKyAgICBidWlsZGVyLmFw
cGVuZCgnUCcpOworICAgIGlmIChzdWJkdXJhdGlvbnMueWVhcnMoKSkKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoZm9ybWF0SW50ZWdlcihzdWJkdXJhdGlvbnMueWVhcnMoKSksICdZJyk7CisgICAg
aWYgKHN1YmR1cmF0aW9ucy5tb250aHMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0
SW50ZWdlcihzdWJkdXJhdGlvbnMubW9udGhzKCkpLCAnTScpOworICAgIGlmIChzdWJkdXJhdGlv
bnMud2Vla3MoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihzdWJkdXJh
dGlvbnMud2Vla3MoKSksICdXJyk7CisgICAgaWYgKHN1YmR1cmF0aW9ucy5kYXlzKCkpCisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoc3ViZHVyYXRpb25zLmRheXMoKSksICdE
Jyk7CisKKyAgICAvLyBUaGUgemVybyB2YWx1ZSBpcyBkaXNwbGF5ZWQgaW4gc2Vjb25kcy4KKyAg
ICBhdXRvIHVzZXNTZWNvbmRzID0gYmFsYW5jZWRTZWNvbmRzIHx8IGJhbGFuY2VkTWlsbGlzZWNv
bmRzIHx8IGJhbGFuY2VkTWljcm9zZWNvbmRzIHx8IGJhbGFuY2VkTmFub3NlY29uZHMgfHwgIXNp
Z247CisgICAgaWYgKCFzdWJkdXJhdGlvbnMuaG91cnMoKSAmJiAhc3ViZHVyYXRpb25zLm1pbnV0
ZXMoKSAmJiAhdXNlc1NlY29uZHMpCisgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
CisKKyAgICBidWlsZGVyLmFwcGVuZCgnVCcpOworICAgIGlmIChzdWJkdXJhdGlvbnMuaG91cnMo
KSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihzdWJkdXJhdGlvbnMuaG91
cnMoKSksICdIJyk7CisgICAgaWYgKHN1YmR1cmF0aW9ucy5taW51dGVzKCkpCisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoc3ViZHVyYXRpb25zLm1pbnV0ZXMoKSksICdNJyk7
CisgICAgaWYgKHVzZXNTZWNvbmRzKSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdElu
dGVnZXIoYmFsYW5jZWRTZWNvbmRzKSk7CisKKyAgICAgICAgYXV0byBmcmFjdGlvbiA9IHN0ZDo6
YWJzKGJhbGFuY2VkTWlsbGlzZWNvbmRzKSAqIDFlNiArIHN0ZDo6YWJzKGJhbGFuY2VkTWljcm9z
ZWNvbmRzKSAqIDFlMyArIHN0ZDo6YWJzKGJhbGFuY2VkTmFub3NlY29uZHMpOworICAgICAgICBp
ZiAoKCFwcmVjaXNpb24gJiYgZnJhY3Rpb24pIHx8IChwcmVjaXNpb24gJiYgcHJlY2lzaW9uLnZh
bHVlKCkpKSB7CisgICAgICAgICAgICBhdXRvIHBhZGRlZCA9IG1ha2VTdHJpbmcoJy4nLCBwYWQo
JzAnLCA5LCBmcmFjdGlvbikpOworICAgICAgICAgICAgaWYgKHByZWNpc2lvbikKKyAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZChwYWRkZWQubGVmdChwYWRkZWQubGVuZ3RoKCkgLSAoOSAt
IHByZWNpc2lvbi52YWx1ZSgpKSkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgYXV0byBsZW5ndGhXaXRob3V0VHJhaWxpbmdaZXJvZXMgPSBwYWRkZWQubGVuZ3RoKCk7Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKHBhZGRlZFtsZW5ndGhXaXRob3V0VHJhaWxpbmdaZXJvZXMg
LSAxXSA9PSAnMCcpCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aFdpdGhvdXRUcmFpbGluZ1pl
cm9lcy0tOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHBhZGRlZC5sZWZ0KGxlbmd0
aFdpdGhvdXRUcmFpbGluZ1plcm9lcykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJ1MnKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRlci50
b1N0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NDFiNmE0NmY3
ZDA1NjU3MTg4MmNjYmY0NGVkODNmZDRiNWRmYjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oCkBAIC0wLDAgKzEsMTA2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVtcG9yYWxP
YmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb24gZmlu
YWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9
IEpTTm9uRmluYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS50ZW1wb3JhbER1cmF0aW9uU3BhY2U8bW9k
ZT4oKTsKKyAgICB9CisKKyAgICBzdHJ1Y3QgU3ViZHVyYXRpb25zIHsKKyAgICAgICAgdXNpbmcg
Y29uc3RfaXRlcmF0b3IgPSBzdGQ6OmFycmF5PGRvdWJsZSwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRz
Pjo6Y29uc3RfaXRlcmF0b3I7CisKKyNkZWZpbmUgSlNDX0RFRklORV9TVUJEVVJBVElPTl9GSUVM
RChuYW1lLCBjYXBpdGFsaXplZE5hbWUpIFwKKyAgICAgICAgZG91YmxlIG5hbWUjI3MoKSBjb25z
dCB7IHJldHVybiBkYXRhW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6Y2FwaXRh
bGl6ZWROYW1lKV07IH0gXAorICAgICAgICB2b2lkIHNldCMjY2FwaXRhbGl6ZWROYW1lIyNzKGRv
dWJsZSB2YWx1ZSkgeyBkYXRhW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6Y2Fw
aXRhbGl6ZWROYW1lKV0gPSB2YWx1ZTsgfQorICAgICAgICBKU0NfVEVNUE9SQUxfVU5JVFMoSlND
X0RFRklORV9TVUJEVVJBVElPTl9GSUVMRCk7CisjdW5kZWYgSlNDX0RFRklORV9TVUJEVVJBVElP
Tl9GSUVMRAorCisgICAgICAgIGRvdWJsZSYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4g
ZGF0YVtpXTsgfQorICAgICAgICBjb25zdCBkb3VibGUmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNv
bnN0IHsgcmV0dXJuIGRhdGFbaV07IH0KKyAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBkYXRhLmJlZ2luKCk7IH0KKyAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gZGF0YS5lbmQoKTsgfQorICAgICAgICB2b2lkIGNsZWFyKCkgeyBk
YXRhLmZpbGwoMCk7IH0KKworICAgICAgICBzdGQ6OmFycmF5PGRvdWJsZSwgbnVtYmVyT2ZUZW1w
b3JhbFVuaXRzPiBkYXRhOworICAgIH07CisKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvbiog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgU3ViZHVyYXRpb25zJiYpOworICAgIHN0YXRpYyBUZW1w
b3JhbER1cmF0aW9uKiBjcmVhdGVJZlZhbGlkKEpTR2xvYmFsT2JqZWN0KiwgU3ViZHVyYXRpb25z
JiYsIFN0cnVjdHVyZSogPSBudWxscHRyKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9J
TkZPOworCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb24qIHRvRHVyYXRpb24oSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvbiogZnJvbShKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU1ZhbHVlIGNvbXBhcmUoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKKworI2RlZmluZSBKU0NfREVGSU5FX1RFTVBP
UkFMX0RVUkFUSU9OX0ZJRUxEKG5hbWUsIGNhcGl0YWxpemVkTmFtZSkgXAorICAgIGRvdWJsZSBu
YW1lIyNzKCkgY29uc3QgeyByZXR1cm4gbV9zdWJkdXJhdGlvbnMubmFtZSMjcygpOyB9IFwKKyAg
ICB2b2lkIHNldCMjY2FwaXRhbGl6ZWROYW1lIyNzKGRvdWJsZSB2YWx1ZSkgeyBtX3N1YmR1cmF0
aW9ucy5zZXQjI2NhcGl0YWxpemVkTmFtZSMjcyh2YWx1ZSk7IH0KKyAgICBKU0NfVEVNUE9SQUxf
VU5JVFMoSlNDX0RFRklORV9URU1QT1JBTF9EVVJBVElPTl9GSUVMRCk7CisjdW5kZWYgSlNDX0RF
RklORV9URU1QT1JBTF9EVVJBVElPTl9GSUVMRAorCisgICAgaW50IHNpZ24oKSBjb25zdCB7IHJl
dHVybiBzaWduKG1fc3ViZHVyYXRpb25zKTsgfQorCisgICAgU3ViZHVyYXRpb25zIHdpdGgoSlNH
bG9iYWxPYmplY3QqLCBKU09iamVjdCogZHVyYXRpb25MaWtlKSBjb25zdDsKKyAgICBTdWJkdXJh
dGlvbnMgbmVnYXRlZCgpIGNvbnN0OworICAgIFN1YmR1cmF0aW9ucyBhYnMoKSBjb25zdDsKKyAg
ICBTdWJkdXJhdGlvbnMgYWRkKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSkgY29uc3Q7CisgICAg
U3ViZHVyYXRpb25zIHN1YnRyYWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSkgY29uc3Q7Cisg
ICAgU3ViZHVyYXRpb25zIHJvdW5kKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBvcHRpb25zKSBj
b25zdDsKKyAgICBkb3VibGUgdG90YWwoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIG9wdGlvbnMp
IGNvbnN0OworICAgIFN0cmluZyB0b1N0cmluZyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgb3B0
aW9ucykgY29uc3Q7CisgICAgU3RyaW5nIHRvU3RyaW5nKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHByZWNpc2lvbiA9IHN0ZDo6bnVsbG9wdCkgY29uc3QgeyByZXR1cm4gdG9TdHJpbmcobV9zdWJk
dXJhdGlvbnMsIHByZWNpc2lvbik7IH0KKworcHJpdmF0ZToKKyAgICBUZW1wb3JhbER1cmF0aW9u
KFZNJiwgU3RydWN0dXJlKiwgU3ViZHVyYXRpb25zJiYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CisgICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8U3ViZHVyYXRpb25zPiBwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJhY3RlclR5cGU+Jik7CisgICAgc3RhdGljIFN1YmR1cmF0aW9ucyBmcm9tT2JqZWN0KEpT
R2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKTsKKworICAgIHN0YXRpYyBpbnQgc2lnbihjb25zdCBT
dWJkdXJhdGlvbnMmKTsKKyAgICBzdGF0aWMgdm9pZCBiYWxhbmNlKFN1YmR1cmF0aW9ucyYsIFRl
bXBvcmFsVW5pdCBsYXJnZXN0VW5pdCk7CisgICAgc3RhdGljIGRvdWJsZSByb3VuZChTdWJkdXJh
dGlvbnMmLCBkb3VibGUgaW5jcmVtZW50LCBUZW1wb3JhbFVuaXQsIFJvdW5kaW5nTW9kZSk7Cisg
ICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBTdWJkdXJhdGlvbnMmLCBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPiBwcmVjaXNpb24pOworCisgICAgVGVtcG9yYWxVbml0IGxhcmdlc3RTdWJk
dXJhdGlvbigpIGNvbnN0OworCisgICAgU3ViZHVyYXRpb25zIG1fc3ViZHVyYXRpb25zOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jNWQwNDllNmM3ZjM1NGM0YWQ4YTJiMDM0Y2NjMWQyZTBjOWE2YjFiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0
cnVjdG9yLmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgiCisKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShUZW1wb3JhbER1cmF0aW9u
Q29uc3RydWN0b3IpOworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3Jh
bER1cmF0aW9uQ29uc3RydWN0b3JGdW5jRnJvbSk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jQ29tcGFyZSk7CisKK30KKwor
I2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5sdXQuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OnNf
aW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgJnRlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3RvclRhYmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3RvcikgfTsKKworLyogU291cmNlIGZvciBUZW1wb3JhbER1cmF0aW9uQ29uc3Ry
dWN0b3IubHV0LmgKK0BiZWdpbiB0ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JUYWJsZQorICBm
cm9tICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1bmNGcm9tICAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgY29tcGFyZSAgICAgICAgICBUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3JGdW5jQ29tcGFyZSAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAy
CitAZW5kCisqLworCitUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IqIFRlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBlKQoreworICAgIGF1dG8qIGNv
bnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxEdXJhdGlvbkNv
bnN0cnVjdG9yPih2bS5oZWFwKSkgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKHZtLCBzdHJ1
Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgZHVyYXRpb25Qcm90
b3R5cGUpOworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBUZW1wb3Jh
bER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEludGVy
bmFsRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3N0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNhbGxUZW1wb3JhbER1cmF0aW9uKTsKK3N0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdFRlbXBvcmFsRHVyYXRpb24pOworCitU
ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvcihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBj
YWxsVGVtcG9yYWxEdXJhdGlvbiwgY29uc3RydWN0VGVtcG9yYWxEdXJhdGlvbikKK3sKK30KKwor
dm9pZCBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSogZHVyYXRpb25Qcm90b3R5cGUpCit7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0sIDAsICJEdXJhdGlvbiJfcywgUHJvcGVydHlBZGRpdGlvbk1v
ZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBkdXJhdGlvblByb3RvdHlw
ZSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIGR1cmF0aW9uUHJvdG90
eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29u
c3RydWN0b3IsIHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdFRlbXBv
cmFsRHVyYXRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBuZXdUYXJn
ZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIGR1cmF0aW9uU3RydWN0dXJl
LCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgIFRlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBz
dWJkdXJhdGlvbnMgeyB9OworICAgIGF1dG8gY291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpLCBudW1iZXJPZlRlbXBvcmFsVW5pdHMpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBzdWJkdXJhdGlvbnNbaV0g
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KGkpLnRvSW50ZWdlck9ySW5maW5pdHkoZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICBp
ZiAoIXN0ZDo6aXNmaW5pdGUoc3ViZHVyYXRpb25zW2ldKSkKKyAgICAgICAgICAgIHJldHVybiB0
aHJvd1ZNUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24g
cHJvcGVydGllcyBtdXN0IGJlIGZpbml0ZSJfcyk7CisgICAgfQorCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwg
V1RGTW92ZShzdWJkdXJhdGlvbnMpLCBzdHJ1Y3R1cmUpKTsKK30KKworSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGNhbGxUZW1wb3JhbER1cmF0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRHVyYXRpb24iKSk7Cit9CisKK0pTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jRnJvbSwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmZyb20oZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jQ29tcGFyZSwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNvbXBhcmUoZ2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDI0NWEz
MTA2OTVhY2QzNWI1ZDZhYTU2ZTkwMDRmN2UzYjcwMzgyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGU7CisKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rv
ciBmaW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB1c2luZyBC
YXNlID0gSW50ZXJuYWxGdW5jdGlvbjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRh
YmxlOworCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvciogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSopOworICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7
CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgVGVtcG9yYWxEdXJhdGlvbkNv
bnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IsIEludGVybmFsRnVuY3Rp
b24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGQ2Nzk5MGJlNmJkNmE1OWNhYWEwZWIwZTI5ZDMyZDU0NWY2OWNjZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGUuY3BwCkBAIC0wLDAgKzEsNDAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgiCisKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUZ1bmNXaXRoKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jTmVnYXRlZCk7CitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY0Ficyk7Citz
dGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
RnVuY0FkZCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlRnVuY1N1YnRyYWN0KTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jUm91bmQpOworc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb3RhbCk7Citz
dGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
RnVuY1RvU3RyaW5nKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVGdW5jVG9KU09OKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9Mb2NhbGVTdHJpbmcpOworc3Rh
dGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1
bmNWYWx1ZU9mKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVHZXR0ZXJZZWFycyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTW9udGhzKTsKK3N0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJXZWVr
cyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlR2V0dGVyRGF5cyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVySG91cnMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NV
U1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMpOworc3Rh
dGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdl
dHRlclNlY29uZHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUdldHRlck1pbGxpc2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVf
Q1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWljcm9zZWNvbmRz
KTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJOYW5vc2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRF
UihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2lnbik7CitzdGF0aWMgSlNDX0RFQ0xB
UkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyQmxhbmspOwor
Cit9CisKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmx1dC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6
OnNfaW5mbyA9IHsgIlRlbXBvcmFsLkR1cmF0aW9uIiwgJkJhc2U6OnNfaW5mbywgJmR1cmF0aW9u
UHJvdG90eXBlVGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZSkgfTsKKworLyogU291cmNlIGZvciBUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlLmx1dC5oCitAYmVnaW4gZHVyYXRpb25Qcm90b3R5cGVUYWJsZQorICB3aXRoICAgICAgICAg
ICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jV2l0aCAgICAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDEKKyAgbmVnYXRlZCAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlRnVuY05lZ2F0ZWQgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIGFicyAgICAg
ICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNBYnMgICAgICAgICAgICAgICAg
RG9udEVudW18RnVuY3Rpb24gMAorICBhZGQgICAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVGdW5jQWRkICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgc3Vi
dHJhY3QgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1N1YnRyYWN0ICAgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgIHJvdW5kICAgICAgICAgICAgVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUZ1bmNSb3VuZCAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQor
ICB0b3RhbCAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG90YWwgICAg
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgdG9TdHJpbmcgICAgICAgICBUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nICAgICAgICAgICBEb250RW51bXxGdW5jdGlv
biAwCisgIHRvSlNPTiAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb0pT
T04gICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICB0b0xvY2FsZVN0cmluZyAgIFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9Mb2NhbGVTdHJpbmcgICAgIERvbnRFbnVtfEZ1
bmN0aW9uIDAKKyAgdmFsdWVPZiAgICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVu
Y1ZhbHVlT2YgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIHllYXJzICAgICAgICAg
ICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclllYXJzICAgICAgICAgICAgRG9udEVu
dW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbW9udGhzICAgICAgICAgICBUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlR2V0dGVyTW9udGhzICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxD
dXN0b21BY2Nlc3NvcgorICB3ZWVrcyAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVHZXR0ZXJXZWVrcyAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29y
CisgIGRheXMgICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckRheXMg
ICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgaG91cnMgICAg
ICAgICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVySG91cnMgICAgICAgICAgICBE
b250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBtaW51dGVzICAgICAgICAgIFRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaW51dGVzICAgICAgICAgIERvbnRFbnVtfFJlYWRP
bmx5fEN1c3RvbUFjY2Vzc29yCisgIHNlY29uZHMgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUdldHRlclNlY29uZHMgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNj
ZXNzb3IKKyAgbWlsbGlzZWNvbmRzICAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVy
TWlsbGlzZWNvbmRzICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBtaWNy
b3NlY29uZHMgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaWNyb3NlY29uZHMg
ICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIG5hbm9zZWNvbmRzICAgICAg
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck5hbm9zZWNvbmRzICAgICAgRG9udEVudW18
UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgc2lnbiAgICAgICAgICAgICBUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlR2V0dGVyU2lnbiAgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0
b21BY2Nlc3NvcgorICBibGFuayAgICAgICAgICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVH
ZXR0ZXJCbGFuayAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCitA
ZW5kCisqLworCitUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBhdXRv
KiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlPih2bS5oZWFwKSkgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSh2bSwgc3RydWN0
dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcHJv
dG90eXBlOworfQorCitTdHJ1Y3R1cmUqIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKK30KKworVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6VGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQoreworfQorCit2b2lkIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNT
RVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VU
X1RSQU5TSVRJT04oKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVGdW5jV2l0aCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byog
ZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3Rv
dHlwZS53aXRoIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXpl
ZCBhcyBhIER1cmF0aW9uIl9zKTsKKyAgICAKKyAgICBKU1ZhbHVlIGR1cmF0aW9uTGlrZSA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgaWYgKCFkdXJhdGlvbkxpa2UuaXNPYmplY3QoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkZp
cnN0IGFyZ3VtZW50IHRvIFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS53aXRoIG11c3QgYmUg
YW4gb2JqZWN0Il9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQoZ2xvYmFsT2JqZWN0LCBkdXJh
dGlvbi0+d2l0aChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGR1cmF0aW9uTGlrZSkpKSkpOworfQor
CitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNO
ZWdhdGVkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHlu
YW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
KyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQgY2Fs
bGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRp
b24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKSwgZHVyYXRpb24tPm5l
Z2F0ZWQoKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZUZ1bmNBYnMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0
aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUu
YWJzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBh
IER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJh
dGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCksIGR1cmF0
aW9uLT5hYnMoKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUZ1bmNBZGQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1
cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5
cGUuYWRkIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBh
cyBhIER1cmF0aW9uIl9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQoZ2xvYmFsT2JqZWN0LCBk
dXJhdGlvbi0+YWRkKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKSk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVu
Y1N1YnRyYWN0LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpz
RHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnN1YnRyYWN0
IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1
cmF0aW9uIl9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZUlmVmFsaWQoZ2xvYmFsT2JqZWN0LCBkdXJhdGlv
bi0+c3VidHJhY3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpKTsKK30K
KworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5j
Um91bmQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5h
bWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwor
ICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUucm91bmQgY2FsbGVk
IG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24i
X3MpOworCisgICAgYXV0byBvcHRpb25zID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBp
ZiAob3B0aW9ucy5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnJvdW5k
IHJlcXVpcmVzIGFuIG9wdGlvbnMgYXJndW1lbnQiX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlSWZWYWxp
ZChnbG9iYWxPYmplY3QsIGR1cmF0aW9uLT5yb3VuZChnbG9iYWxPYmplY3QsIG9wdGlvbnMpKSkp
OworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUZ1bmNUb3RhbCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBq
c0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b3RhbCBj
YWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJh
dGlvbiJfcyk7CisKKyAgICBhdXRvIG9wdGlvbnMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwor
ICAgIGlmIChvcHRpb25zLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUu
dG90YWwgcmVxdWlyZXMgYW4gb3B0aW9ucyBhcmd1bWVudCJfcyk7CisKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+dG90YWwo
Z2xvYmFsT2JqZWN0LCBvcHRpb25zKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9TdHJpbmcsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9u
Kj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3Qg
YW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1cmF0aW9uLT50
b1N0cmluZyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSkpOworfQorCitK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb0pT
T04sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWlj
Q2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAg
IGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudG9KU09OIGNhbGxlZCBv
biB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9z
KTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1cmF0aW9uLT50
b1N0cmluZygpKSk7Cit9CisKKy8vIFRoaXMgd2lsbCBiZSBwYXJ0IG9mIHRoZSBFQ01BLTQwMiBJ
bnRsLkR1cmF0aW9uRm9ybWF0IHByb3Bvc2FsOyB1bnRpbCB0aGVuLCB3ZSBqdXN0IGZvbGxvdyBF
Q01BLTI2MiBpbiBtaW1pY2tpbmcgdG9KU09OLgorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9Mb2NhbGVTdHJpbmcsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0
aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1w
b3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgY2FsbGVkIG9uIHZhbHVlIHRo
YXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgZHVyYXRpb24tPnRvU3RyaW5nKCkp
KTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVGdW5jVmFsdWVPZiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSop
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnZhbHVlT2Yg
bXVzdCBub3QgYmUgY2FsbGVkIl9zKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJZZWFycywgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRl
bXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlm
ICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUueWVhcnMgY2FsbGVkIG9uIHZh
bHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOwor
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+eWVhcnMoKSkp
OworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUdldHRlck1vbnRocywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwg
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5E
dXJhdGlvbi5wcm90b3R5cGUubW9udGhzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9i
amVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPm1vbnRocygpKSk7Cit9CisKK0pTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyV2Vla3MsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0g
anNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLndl
ZWtzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBh
IER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVy
YXRpb24tPndlZWtzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJEYXlzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxE
dXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJh
dGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5kYXlzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0
J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPmRheXMoKSkpOworfQorCitK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckhv
dXJzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBk
dXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS5ob3VycyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlh
bGl6ZWQgYXMgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKGR1cmF0aW9uLT5ob3VycygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRF
UihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWludXRlcywgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWND
YXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwor
ICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubWludXRlcyBjYWxs
ZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEdXJhdGlv
biJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5t
aW51dGVzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGVHZXR0ZXJTZWNvbmRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJh
dGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlv
bikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0
J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPnNlY29uZHMoKSkpOworfQor
CitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRl
ck1pbGxpc2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwg
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5E
dXJhdGlvbi5wcm90b3R5cGUubWlsbGlzZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90
IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPm1pbGxpc2Vjb25kcygpKSk7Cit9CisK
K0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVy
TWljcm9zZWNvbmRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1
cmF0aW9uLnByb3RvdHlwZS5taWNyb3NlY29uZHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3Qg
YW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+bWljcm9zZWNvbmRzKCkpKTsKK30KKwor
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJO
YW5vc2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
YXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJh
dGlvbi5wcm90b3R5cGUubmFub3NlY29uZHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4g
b2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+bmFub3NlY29uZHMoKSkpOworfQorCitKU0Nf
REVGSU5FX0NVU1RPTV9HRVRURVIoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNpZ24s
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0
aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90
eXBlLnNpZ24gY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVk
IGFzIGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihkdXJhdGlvbi0+c2lnbigpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyQmxhbmssIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1w
b3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAo
IWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmJsYW5rIGNhbGxlZCBvbiB2YWx1
ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIER1cmF0aW9uIl9zKTsKKwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFkdXJhdGlvbi0+c2lnbigpKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4
Nzc1ZWViMDdiZTYwMmNmYWVmMDM4Nzk0ZTk3YzYyOTM1NGQzNmUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGlj
OgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0
YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlOworICAgIH0KKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9J
TkZPOworCitwcml2YXRlOgorICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUoVk0mLCBTdHJ1
Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBv
cmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2Jq
ZWN0LmNwcAppbmRleCBhZjE0MzY3NWYxZTRjNjI4N2VhMmJlMThmNDMzZWViZTM3MmE3MTdkLi5h
ZGY5NTQxNmYwMTEwZjdmNGNiMjFhZTI1NzdjNDM2MjczMTRhMzk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDEwICsyMSwxNCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlbXBvcmFsT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJG
dW5jdGlvblByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkludGxPYmplY3RJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgog
I2luY2x1ZGUgIkpTT2JqZWN0SW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5o
IgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJUZW1wb3JhbE5vdy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTM3LDYgKzQyLDEzIEBAIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZU5v
d09iamVjdChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIFRlbXBvcmFsTm93
OjpjcmVhdGUodm0sIFRlbXBvcmFsTm93OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVj
dCkpOwogfQogCitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVEdXJhdGlvbkNvbnN0cnVjdG9yKFZNJiB2
bSwgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBUZW1wb3JhbE9iamVjdCogdGVtcG9yYWxPYmpl
Y3QgPSBqc0Nhc3Q8VGVtcG9yYWxPYmplY3QqPihvYmplY3QpOworICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSB0ZW1wb3JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0KHZtKTsKKyAgICBy
ZXR1cm4gVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIFRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5cGUoKSksIGpzQ2FzdDxUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlKj4oZ2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5
cGVPYmplY3QoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2luY2x1ZGUgIlRlbXBv
cmFsT2JqZWN0Lmx1dC5oIgpAQCAtNDYsNiArNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIC8qIFNv
dXJjZSBmb3IgVGVtcG9yYWxPYmplY3QubHV0LmgKIEBiZWdpbiB0ZW1wb3JhbE9iamVjdFRhYmxl
CiAgIE5vdyAgICAgICAgICAgIGNyZWF0ZU5vd09iamVjdCAgICAgICAgICAgICAgICAgRG9udEVu
dW18UHJvcGVydHlDYWxsYmFjaworICBEdXJhdGlvbiAgICAgICBjcmVhdGVEdXJhdGlvbkNvbnN0
cnVjdG9yICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKIEBlbmQKICovCiAKQEAgLTc1
LDQgKzg4LDIyMCBAQCB2b2lkIFRlbXBvcmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiAgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7CiB9CiAKK3N0YXRp
YyBTdHJpbmdWaWV3IHNpbmd1bGFyVW5pdChTdHJpbmdWaWV3IHVuaXQpCit7CisgICAgLy8gUGx1
cmFscyBhcmUgYWxsb3dlZCwgYnV0IHRoYW5rZnVsbHkgdGhleSdyZSBhbGwganVzdCBhIHNpbXBs
ZSAtcy4KKyAgICByZXR1cm4gdW5pdC5lbmRzV2l0aCgicyIpID8gdW5pdC5sZWZ0KHVuaXQubGVu
Z3RoKCkgLSAxKSA6IHVuaXQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1w
b3JhbFVuaXRUeXBlKFN0cmluZ1ZpZXcgdW5pdCkKK3sKKyAgICBTdHJpbmdWaWV3IHNpbmd1bGFy
ID0gc2luZ3VsYXJVbml0KHVuaXQpOworCisgICAgaWYgKHNpbmd1bGFyID09ICJ5ZWFyIikKKyAg
ICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6WWVhcjsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm1v
bnRoIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TW9udGg7CisgICAgaWYgKHNpbmd1
bGFyID09ICJ3ZWVrIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6V2VlazsKKyAgICBp
ZiAoc2luZ3VsYXIgPT0gImRheSIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OkRheTsK
KyAgICBpZiAoc2luZ3VsYXIgPT0gImhvdXIiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0
OjpIb3VyOworICAgIGlmIChzaW5ndWxhciA9PSAibWludXRlIikKKyAgICAgICAgcmV0dXJuIFRl
bXBvcmFsVW5pdDo6TWludXRlOworICAgIGlmIChzaW5ndWxhciA9PSAic2Vjb25kIikKKyAgICAg
ICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6U2Vjb25kOworICAgIGlmIChzaW5ndWxhciA9PSAibWls
bGlzZWNvbmQiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZDsKKyAg
ICBpZiAoc2luZ3VsYXIgPT0gIm1pY3Jvc2Vjb25kIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFs
VW5pdDo6TWljcm9zZWNvbmQ7CisgICAgaWYgKHNpbmd1bGFyID09ICJuYW5vc2Vjb25kIikKKyAg
ICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZDsKKyAgICAKKyAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworfQorCisvLyBUb0xhcmdlc3RUZW1wb3JhbFVuaXQgKCBub3JtYWxpemVk
T3B0aW9ucywgZGlzYWxsb3dlZFVuaXRzLCBmYWxsYmFjayBbICwgYXV0b1ZhbHVlIF0gKQorc3Rk
OjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFsTGFyZ2VzdFVuaXQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxUZW1wb3JhbFVuaXQ+IGRpc2FsbG93ZWRVbml0cywgVGVtcG9yYWxVbml0IGF1dG9WYWx1ZSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIGxhcmdlc3RVbml0ID0gaW50bFN0
cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxhcmdl
c3RVbml0LCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAoIWxhcmdlc3RVbml0KQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIGlmIChsYXJnZXN0VW5pdCA9PSAiYXV0byIp
CisgICAgICAgIHJldHVybiBhdXRvVmFsdWU7CisKKyAgICBhdXRvIHVuaXRUeXBlID0gdGVtcG9y
YWxVbml0VHlwZShsYXJnZXN0VW5pdCk7CisgICAgaWYgKCF1bml0VHlwZSkgeworICAgICAgICB0
aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImxhcmdlc3RVbml0IGlzIGFuIGlu
dmFsaWQgVGVtcG9yYWwgdW5pdCJfcyk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgfQorCisgICAgaWYgKGRpc2FsbG93ZWRVbml0cy5zaXplKCkgJiYgc3RkOjpmaW5kKGRpc2Fs
bG93ZWRVbml0cy5iZWdpbigpLCBkaXNhbGxvd2VkVW5pdHMuZW5kKCksIHVuaXRUeXBlLnZhbHVl
KCkpICE9IGRpc2FsbG93ZWRVbml0cy5lbmQoKSkgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgImxhcmdlc3RVbml0IGlzIGEgZGlzYWxsb3dlZCB1bml0Il9z
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gdW5p
dFR5cGU7Cit9CisKKy8vIFRvU21hbGxlc3RUZW1wb3JhbFVuaXQgKCBub3JtYWxpemVkT3B0aW9u
cywgZGlzYWxsb3dlZFVuaXRzLCBmYWxsYmFjayApCitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5p
dD4gdGVtcG9yYWxTbWFsbGVzdFVuaXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUZW1wb3JhbFVuaXQ+IGRpc2Fs
bG93ZWRVbml0cykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHNtYWxsZXN0
VW5pdCA9IGludGxTdHJpbmdPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0
eU5hbWVzLT5zbWFsbGVzdFVuaXQsIHsgfSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgIGlmICghc21hbGxlc3RV
bml0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byB1bml0VHlwZSA9
IHRlbXBvcmFsVW5pdFR5cGUoc21hbGxlc3RVbml0KTsKKyAgICBpZiAoIXVuaXRUeXBlKSB7Cisg
ICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAic21hbGxlc3RVbml0
IGlzIGFuIGludmFsaWQgVGVtcG9yYWwgdW5pdCJfcyk7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgfQorCisgICAgaWYgKGRpc2FsbG93ZWRVbml0cy5zaXplKCkgJiYgc3RkOjpm
aW5kKGRpc2FsbG93ZWRVbml0cy5iZWdpbigpLCBkaXNhbGxvd2VkVW5pdHMuZW5kKCksIHVuaXRU
eXBlLnZhbHVlKCkpICE9IGRpc2FsbG93ZWRVbml0cy5lbmQoKSkgeworICAgICAgICB0aHJvd1Jh
bmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInNtYWxsZXN0VW5pdCBpcyBhIGRpc2FsbG93
ZWQgdW5pdCJfcyk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAg
cmV0dXJuIHVuaXRUeXBlOworfQorCisvLyBHZXRTdHJpbmdPck51bWJlck9wdGlvbihub3JtYWxp
emVkT3B0aW9ucywgImZyYWN0aW9uYWxTZWNvbmREaWdpdHMiLCDCqyAiYXV0byIgwrssIDAsIDks
ICJhdXRvIikKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRlbXBvcmFsRnJhY3Rpb25hbFNlY29u
ZERpZ2l0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3B0aW9ucykK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCFvcHRpb25zKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdGlvbnMtPmdldChnbG9i
YWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmZyYWN0aW9uYWxTZWNvbmREaWdpdHMpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAg
ICBpZiAodmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2
YWx1ZS5hc051bWJlcigpOworICAgICAgICBpZiAoZG91YmxlVmFsdWUgPCAwIHx8IGRvdWJsZVZh
bHVlID4gOSkgeworICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJmcmFjdGlvbmFsU2Vjb25kRGlnaXRzIGlzIG91dCBvZiByYW5nZSJfcyk7CisgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihkb3VibGVWYWx1ZSk7CisgICAgfQorCisgICAgU3RyaW5nIHN0
cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgaWYgKHN0cmluZ1ZhbHVl
ICE9ICJhdXRvIikKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJmcmFjdGlvbmFsU2Vjb25kRGlnaXRzIGlzIG91dCBvZiByYW5nZSJfcyk7CisKKyAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworfQorCisvLyBUb1NlY29uZHNTdHJpbmdQcmVjaXNpb24gKCBub3Jt
YWxpemVkT3B0aW9ucyApCitQcmVjaXNpb25EYXRhIHNlY29uZHNTdHJpbmdQcmVjaXNpb24oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGF1dG8gc21hbGxlc3RVbml0ID0gdGVtcG9yYWxTbWFsbGVzdFVu
aXQoZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB7IFRlbXBvcmFsVW5pdDo6WWVhciwgVGVtcG9yYWxV
bml0OjpNb250aCwgVGVtcG9yYWxVbml0OjpXZWVrLCBUZW1wb3JhbFVuaXQ6OkRheSwgVGVtcG9y
YWxVbml0OjpIb3VyLCBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSB9KTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKHNtYWxsZXN0VW5pdCkgeworICAgICAgICBz
d2l0Y2ggKHNtYWxsZXN0VW5pdC52YWx1ZSgpKSB7CisgICAgICAgIGNhc2UgVGVtcG9yYWxVbml0
OjpTZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4geyAwLCBUZW1wb3JhbFVuaXQ6OlNlY29uZCwg
MSB9OworICAgICAgICBjYXNlIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQ6CisgICAgICAgICAg
ICByZXR1cm4geyAzLCBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kLCAxIH07CisgICAgICAgIGNh
c2UgVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZDoKKyAgICAgICAgICAgIHJldHVybiB7IDYsIFRl
bXBvcmFsVW5pdDo6TWljcm9zZWNvbmQsIDEgfTsKKyAgICAgICAgY2FzZSBUZW1wb3JhbFVuaXQ6
Ok5hbm9zZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4geyA5LCBUZW1wb3JhbFVuaXQ6Ok5hbm9z
ZWNvbmQsIDEgfTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAg
fQorCisgICAgYXV0byBwcmVjaXNpb24gPSB0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmREaWdpdHMo
Z2xvYmFsT2JqZWN0LCBvcHRpb25zKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworCisgICAgaWYgKCFwcmVjaXNpb24pCisgICAgICAgIHJldHVybiB7IHN0ZDo6bnVsbG9w
dCwgVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kLCAxIH07CisKKyAgICB1bnNpZ25lZCBkaWdpdHMg
PSBwcmVjaXNpb24udmFsdWUoKTsKKyAgICBpZiAoIWRpZ2l0cykKKyAgICAgICAgcmV0dXJuIHsg
MCwgVGVtcG9yYWxVbml0OjpTZWNvbmQsIDEgfTsKKworICAgIGlmIChkaWdpdHMgPD0gMykKKyAg
ICAgICAgcmV0dXJuIHsgZGlnaXRzLCBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kLCBzdGQ6OnBv
dygxMCwgMyAtIGRpZ2l0cykgfTsKKworICAgIGlmIChkaWdpdHMgPD0gNikKKyAgICAgICAgcmV0
dXJuIHsgZGlnaXRzLCBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kLCBzdGQ6OnBvdygxMCwgNiAt
IGRpZ2l0cykgfTsKKworICAgIEFTU0VSVChkaWdpdHMgPD0gOSk7CisgICAgcmV0dXJuIHsgZGln
aXRzLCBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQsIHN0ZDo6cG93KDEwLCA5IC0gZGlnaXRzKSB9
OworfQorCisvLyBNYXhpbXVtVGVtcG9yYWxEdXJhdGlvblJvdW5kaW5nSW5jcmVtZW50ICggdW5p
dCApCitkb3VibGUgbWF4aW11bVJvdW5kaW5nSW5jcmVtZW50KFRlbXBvcmFsVW5pdCB1bml0KQor
eworICAgIGlmICh1bml0IDw9IFRlbXBvcmFsVW5pdDo6RGF5KQorICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworICAgIGlmICh1bml0ID09IFRl
bXBvcmFsVW5pdDo6SG91cikKKyAgICAgICAgcmV0dXJuIDI0OworICAgIGlmICh1bml0IDw9IFRl
bXBvcmFsVW5pdDo6U2Vjb25kKQorICAgICAgICByZXR1cm4gNjA7CisgICAgcmV0dXJuIDEwMDA7
Cit9CisKKy8vIFRvVGVtcG9yYWxSb3VuZGluZ0luY3JlbWVudCAoIG5vcm1hbGl6ZWRPcHRpb25z
LCBkaXZpZGVuZCwgaW5jbHVzaXZlICkKK2RvdWJsZSB0ZW1wb3JhbFJvdW5kaW5nSW5jcmVtZW50
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zLCBkb3VibGUg
ZGl2aWRlbmQsIGJvb2wgaW5jbHVzaXZlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBh
dXRvIGhhc0Zpbml0ZURpdmlkZW5kID0gZGl2aWRlbmQgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OmluZmluaXR5KCk7CisgICAgYXV0byBtYXhpbXVtID0gKGhhc0Zpbml0ZURpdmlkZW5k
ICYmIGRpdmlkZW5kID4gMSAmJiAhaW5jbHVzaXZlKSA/IGRpdmlkZW5kIC0gMSA6IGRpdmlkZW5k
OworICAgIGRvdWJsZSBpbmNyZW1lbnQgPSBpbnRsTnVtYmVyT3B0aW9uKGdsb2JhbE9iamVjdCwg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+cm91bmRpbmdJbmNyZW1lbnQsIDEsIG1heGltdW0s
IDEpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworCisgICAgaW5jcmVtZW50
ID0gc3RkOjpmbG9vcihpbmNyZW1lbnQpOworICAgIGlmIChoYXNGaW5pdGVEaXZpZGVuZCAmJiBz
dGQ6OmZtb2QoZGl2aWRlbmQsIGluY3JlbWVudCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJyb3VuZGluZ0luY3JlbWVudCB2YWx1ZSBkb2VzIG5vdCBk
aXZpZGUgZXZlbmx5Il9zKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IGluY3JlbWVudDsKK30KKworLy8gUm91bmROdW1iZXJUb0luY3JlbWVudCAoIHgsIGluY3JlbWVu
dCwgcm91bmRpbmdNb2RlICkKK2RvdWJsZSByb3VuZE51bWJlclRvSW5jcmVtZW50KGRvdWJsZSB4
LCBkb3VibGUgaW5jcmVtZW50LCBSb3VuZGluZ01vZGUgbW9kZSkKK3sKKyAgICBhdXRvIHF1b3Rp
ZW50ID0geCAvIGluY3JlbWVudDsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIFJvdW5k
aW5nTW9kZTo6Q2VpbDoKKyAgICAgICAgcmV0dXJuIC1zdGQ6OmZsb29yKC1xdW90aWVudCkgKiBp
bmNyZW1lbnQ7CisgICAgY2FzZSBSb3VuZGluZ01vZGU6OkZsb29yOgorICAgICAgICByZXR1cm4g
c3RkOjpmbG9vcihxdW90aWVudCkgKiBpbmNyZW1lbnQ7CisgICAgY2FzZSBSb3VuZGluZ01vZGU6
OlRydW5jOgorICAgICAgICByZXR1cm4gc3RkOjp0cnVuYyhxdW90aWVudCkgKiBpbmNyZW1lbnQ7
CisgICAgY2FzZSBSb3VuZGluZ01vZGU6OkhhbGZFeHBhbmQ6CisgICAgICAgIHJldHVybiBzdGQ6
OnJvdW5kKHF1b3RpZW50KSAqIGluY3JlbWVudDsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxP
YmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmgK
aW5kZXggMWVlOTk5NGMyYjhjMDVlNDZkMTYxMDZhNjZmMDJiOTc1OGI4YjI4My4uMmQ3YWM5OTUz
OTA5YzljOGM2Njk1ZjYzNzY4MmVlMmQxZjZmNTQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMyw2ICsyNCwyNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorI2RlZmluZSBKU0NfVEVNUE9SQUxfVU5JVFMobWFjcm8pIFwKKyAgICBtYWNybyh5ZWFyLCBZ
ZWFyKSBcCisgICAgbWFjcm8obW9udGgsIE1vbnRoKSBcCisgICAgbWFjcm8od2VlaywgV2Vlaykg
XAorICAgIG1hY3JvKGRheSwgRGF5KSBcCisgICAgbWFjcm8oaG91ciwgSG91cikgXAorICAgIG1h
Y3JvKG1pbnV0ZSwgTWludXRlKSBcCisgICAgbWFjcm8oc2Vjb25kLCBTZWNvbmQpIFwKKyAgICBt
YWNybyhtaWxsaXNlY29uZCwgTWlsbGlzZWNvbmQpIFwKKyAgICBtYWNybyhtaWNyb3NlY29uZCwg
TWljcm9zZWNvbmQpIFwKKyAgICBtYWNybyhuYW5vc2Vjb25kLCBOYW5vc2Vjb25kKSBcCisKK2Vu
dW0gY2xhc3MgVGVtcG9yYWxVbml0IDogdWludDhfdCB7CisjZGVmaW5lIEpTQ19ERUZJTkVfVEVN
UE9SQUxfVU5JVF9FTlVNKG5hbWUsIGNhcGl0YWxpemVkTmFtZSkgY2FwaXRhbGl6ZWROYW1lLAor
ICAgIEpTQ19URU1QT1JBTF9VTklUUyhKU0NfREVGSU5FX1RFTVBPUkFMX1VOSVRfRU5VTSkKKyN1
bmRlZiBKU0NfREVGSU5FX1RFTVBPUkFMX1VOSVRfRU5VTQorfTsKKyNkZWZpbmUgSlNDX0NPVU5U
X1RFTVBPUkFMX1VOSVRTKG5hbWUsIGNhcGl0YWxpemVkTmFtZSkgKyAxCitzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIG51bWJlck9mVGVtcG9yYWxVbml0cyA9IDAgSlNDX1RFTVBPUkFMX1VOSVRT
KEpTQ19DT1VOVF9URU1QT1JBTF9VTklUUyk7CisjdW5kZWYgSlNDX0NPVU5UX1RFTVBPUkFMX1VO
SVRTCisKIGNsYXNzIFRlbXBvcmFsT2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwpAQCAtNDUs
NCArNjcsMjYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiB9Owog
CitlbnVtIGNsYXNzIFJvdW5kaW5nTW9kZSA6IHVpbnQ4X3QgeworICAgIENlaWwsCisgICAgRmxv
b3IsCisgICAgVHJ1bmMsCisgICAgSGFsZkV4cGFuZAorfTsKKworc3RydWN0IFByZWNpc2lvbkRh
dGEgeworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHByZWNpc2lvbjsKKyAgICBUZW1wb3Jh
bFVuaXQgdW5pdDsKKyAgICBkb3VibGUgaW5jcmVtZW50OworfTsKKworc3RkOjpvcHRpb25hbDxU
ZW1wb3JhbFVuaXQ+IHRlbXBvcmFsVW5pdFR5cGUoU3RyaW5nVmlldyk7CitzdGQ6Om9wdGlvbmFs
PFRlbXBvcmFsVW5pdD4gdGVtcG9yYWxMYXJnZXN0VW5pdChKU0dsb2JhbE9iamVjdCosIEpTT2Jq
ZWN0KiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VGVtcG9yYWxVbml0PiBkaXNhbGxv
d2VkVW5pdHMsIFRlbXBvcmFsVW5pdCBhdXRvVmFsdWUpOworc3RkOjpvcHRpb25hbDxUZW1wb3Jh
bFVuaXQ+IHRlbXBvcmFsU21hbGxlc3RVbml0KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9w
dGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUZW1wb3JhbFVuaXQ+IGRpc2FsbG93ZWRVbml0
cyk7CitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmREaWdp
dHMoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucyk7CitQcmVjaXNpb25EYXRhIHNl
Y29uZHNTdHJpbmdQcmVjaXNpb24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucyk7
Citkb3VibGUgbWF4aW11bVJvdW5kaW5nSW5jcmVtZW50KFRlbXBvcmFsVW5pdCk7Citkb3VibGUg
dGVtcG9yYWxSb3VuZGluZ0luY3JlbWVudChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBvcHRp
b25zLCBkb3VibGUgZGl2aWRlbmQsIGJvb2wgaW5jbHVzaXZlKTsKK2RvdWJsZSByb3VuZE51bWJl
clRvSW5jcmVtZW50KGRvdWJsZSwgZG91YmxlIGluY3JlbWVudCwgUm91bmRpbmdNb2RlKTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXgg
MWRlYTZhMTNjYjRjNDI5YjliMDcxOThiYWI2YzQ0ZjMxNDY5ZDA2OC4uODMxZDNmMmVkM2EzMjdj
ZmZiMzY4ZWYxNjNiMWE4YWI2ZjdjODE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcApAQCAtMTYyLDYgKzE2Miw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3ltYm9sT2JqZWN0LmgiCisj
aW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgogI2luY2x1ZGUgIlRlc3RSdW5uZXJVdGlscy5o
IgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5o
IgpAQCAtMTYxNyw2ICsxNjE4LDcgQEAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKGludGxSZWxhdGl2ZVRpbWVGb3JtYXRTcGFjZSwgaW50bFJlbGF0aXYKIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudEl0ZXJhdG9yU3BhY2Us
IGludGxTZWdtZW50SXRlcmF0b3JIZWFwQ2VsbFR5cGUuZ2V0KCksIEludGxTZWdtZW50SXRlcmF0
b3IpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRl
clNwYWNlLCBpbnRsU2VnbWVudGVySGVhcENlbGxUeXBlLmdldCgpLCBJbnRsU2VnbWVudGVyKQog
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50c1NwYWNl
LCBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGUuZ2V0KCksIEludGxTZWdtZW50cykKK0RZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh0ZW1wb3JhbER1cmF0aW9uU3BhY2UsIGNl
bGxIZWFwQ2VsbFR5cGUuZ2V0KCksIFRlbXBvcmFsRHVyYXRpb24pCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzVG9XYXNt
SUNDYWxsZWVTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUb1dhc21JQ0NhbGxlZSkK
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUNvZGVC
bG9ja1NwYWNlLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5nZXQoKSwgSlNXZWJB
c3NlbWJseUNvZGVCbG9jaykgLy8gSGFzaDoweDlhZDk5NWNkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAppbmRleCBiY2VkOTg0M2ZjZTgyNjIwZTg4Yjk3NTAxODNhZWI2MTU1NjI2MDY5Li5h
YmRhNzJlOTQzYTkyNWY0ZWY3NjAzZTI1MGUzZDA2Y2FlMDQxNzIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKQEAgLTE4NSw2ICsxODUsNyBAQCBjbGFzcyBTdHJ1Y3R1cmU7CiBjbGFz
cyBSZWdFeHA7CiAjZW5kaWYKIGNsYXNzIFN5bWJvbDsKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb247
CiBjbGFzcyBUeXBlZEFycmF5Q29udHJvbGxlcjsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwog
Y2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOwpAQCAtNjE1LDYgKzYxNiw3IEBAIHB1YmxpYzoK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxTZWdtZW50SXRlcmF0
b3JTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxTZWdt
ZW50ZXJTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxT
ZWdtZW50c1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIodGVt
cG9yYWxEdXJhdGlvblNwYWNlKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGpzVG9XYXNtSUNDYWxsZWVTcGFjZSkKICAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5Q29kZUJsb2NrU3Bh
Y2UpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGYzNjY0MDc5NWQ0ODZmMmM2MGE3OTExZjI5MWQzM2MyNjc1NDUwNDEuLjlmYTlmMzNlOWI0
YjgyODA4NDRkOWYxYWJlMDMwNjUwMmFiMjExZjMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMDgtMjcg
IFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIFtKU0Nd
IEltcGxlbWVudCBUZW1wb3JhbC5EdXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4NTMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvdGVtcG9yYWwtZHVyYXRpb24uanM6IEFkZGVk
LgorCiAyMDIxLTA4LTI2ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW50bC5EYXRlVGltZUZvcm1hdCBpbmNvcnJlY3RseSBwYXJzZXMgcGF0dGVybnMgd2l0
aCAnaCcgbGl0ZXJhbApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvdGVtcG9yYWwtZHVyYXRp
b24uanMgYi9KU1Rlc3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
Y2YxM2E5Zjk1ZjgwNDgyMGQ0ZGY1NGU1MTMyMDc3MjU1MWQ5ZWEyCi0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy9zdHJlc3MvdGVtcG9yYWwtZHVyYXRpb24uanMKQEAgLTAsMCArMSwyODkgQEAK
Ky8vQCByZXF1aXJlT3B0aW9ucygiLS11c2VUZW1wb3JhbD0xIikKKworZnVuY3Rpb24gc2hvdWxk
QmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1
YWx9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZE5vdFRocm93KGZ1bmMpIHsKKyAgICBmdW5jKCk7
Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yVHlwZSkgeworICAgIGxldCBl
cnJvcjsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICBlcnJvciA9IGU7CisgICAgfQorCisgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBlcnJv
clR5cGUpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXJyb3JUeXBlLm5h
bWV9IWApOworfQorCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbiBpbnN0YW5jZW9mIEZ1bmN0
aW9uLCB0cnVlKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmxlbmd0aCwgMCk7CitzaG91
bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFRlbXBvcmFsLkR1cmF0aW9uLCAn
cHJvdG90eXBlJykud3JpdGFibGUsIGZhbHNlKTsKK3Nob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwuRHVyYXRpb24sICdwcm90b3R5cGUnKS5lbnVtZXJhYmxl
LCBmYWxzZSk7CitzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFRlbXBv
cmFsLkR1cmF0aW9uLCAncHJvdG90eXBlJykuY29uZmlndXJhYmxlLCBmYWxzZSk7CitzaG91bGRU
aHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbigpLCBUeXBlRXJyb3IpOworCitzaG91bGRCZShu
ZXcgVGVtcG9yYWwuRHVyYXRpb24oKSBpbnN0YW5jZW9mIFRlbXBvcmFsLkR1cmF0aW9uLCB0cnVl
KTsKK3sKKyAgICBjbGFzcyBEZXJpdmVkRHVyYXRpb24gZXh0ZW5kcyBUZW1wb3JhbC5EdXJhdGlv
biB7fQorCisgICAgY29uc3QgZGQgPSBuZXcgRGVyaXZlZER1cmF0aW9uKCk7CisgICAgc2hvdWxk
QmUoZGQgaW5zdGFuY2VvZiBEZXJpdmVkRHVyYXRpb24sIHRydWUpOworICAgIHNob3VsZEJlKGRk
IGluc3RhbmNlb2YgVGVtcG9yYWwuRHVyYXRpb24sIHRydWUpOworICAgIHNob3VsZEJlKGRkLm5l
Z2F0ZWQsIFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVkKTsKKyAgICBzaG91bGRC
ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZGQpLCBEZXJpdmVkRHVyYXRpb24ucHJvdG90eXBlKTsK
KyAgICBzaG91bGRCZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoRGVyaXZlZER1cmF0aW9uLnByb3Rv
dHlwZSksIFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZSk7Cit9CisKK3Nob3VsZFRocm93KCgp
ID0+IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigxLCAtMSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhy
b3coKCkgPT4gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKEluZmluaXR5KSwgUmFuZ2VFcnJvcik7CisK
K2NvbnN0IGZpZWxkcyA9IFsneWVhcnMnLCAnbW9udGhzJywgJ3dlZWtzJywgJ2RheXMnLCAnaG91
cnMnLCAnbWludXRlcycsICdzZWNvbmRzJywgJ21pbGxpc2Vjb25kcycsICdtaWNyb3NlY29uZHMn
LCAnbmFub3NlY29uZHMnXTsKK2NvbnN0IHplcm8gPSBuZXcgVGVtcG9yYWwuRHVyYXRpb24oKTsK
K2NvbnN0IHBvcyA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigxLDIsMyw0LDUsNiw3LDgsOSwxMCk7
Citjb25zdCBuZWcgPSBuZXcgVGVtcG9yYWwuRHVyYXRpb24oLTEsLTIsLTMsLTQsLTUsLTYsLTcs
LTgsLTksLTEwKTsKKworZmllbGRzLmZvckVhY2goKGZpZWxkLCBpKSA9PiB7CisgICAgc2hvdWxk
VGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW2ZpZWxkXSwgVHlwZUVycm9y
KTsKKyAgICBzaG91bGRCZSh6ZXJvW2ZpZWxkXSwgMCk7CisgICAgc2hvdWxkQmUocG9zW2ZpZWxk
XSwgaSArIDEpOworICAgIHNob3VsZEJlKG5lZ1tmaWVsZF0sIC1pIC0gMSk7Cit9KTsKKworc2hv
dWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnNpZ24sIFR5cGVFcnJv
cik7CitzaG91bGRCZSh6ZXJvLnNpZ24sIDApOworc2hvdWxkQmUocG9zLnNpZ24sIDEpOworc2hv
dWxkQmUobmVnLnNpZ24sIC0xKTsKKworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRp
b24ucHJvdG90eXBlLmJsYW5rLCBUeXBlRXJyb3IpOworc2hvdWxkQmUoemVyby5ibGFuaywgdHJ1
ZSk7CitzaG91bGRCZShwb3MuYmxhbmssIGZhbHNlKTsKK3Nob3VsZEJlKG5lZy5ibGFuaywgZmFs
c2UpOworCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tLmxlbmd0aCwgMSk7CitzaG91
bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCksIFJhbmdlRXJyb3IpOworc2hv
dWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSh7fSksIFR5cGVFcnJvcik7Cit7
CisgICAgY29uc3QgYmFkU3RyaW5ncyA9IFsKKyAgICAgICAgJycsICdQJywgJ1AxJywgJ1BUJywg
J1AxWVQnLCAnUFQxJywKKyAgICAgICAgJ1AxVzFZJywgICdQVDFTMU0nLAorICAgICAgICAnUDEu
MVknLCAnUFQxLjFIMU0nLCAnUFQxLjFNMVMnLAorICAgICAgICAnUFQxLjExMTExMTExMTFIJywg
J1BUMS4xMTExMTExMTExTScsICdQVDEuMTExMTExMTExMVMnLAorICAgICAgICBgUCR7QXJyYXko
MzA5KS5maWxsKDkpLmpvaW4oJycpfVlgCisgICAgXTsKKyAgICBmb3IgKGNvbnN0IGJhZFN0cmlu
ZyBpbiBiYWRTdHJpbmdzKQorICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJh
dGlvbi5mcm9tKGJhZFN0cmluZyksIFJhbmdlRXJyb3IpOworICAgIAorICAgIGNvbnN0IGZyb21T
dHJpbmcgPSBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMVkyTTNXNERUNUg2TTcuMDA4MDA5MDEw
UycpOworCisgICAgY29uc3QgZHVyYXRpb25MaWtlID0ge307CisgICAgZmllbGRzLmZvckVhY2go
KGZpZWxkLCBpKSA9PiB7IGR1cmF0aW9uTGlrZVtmaWVsZF0gPSBpICsgMTsgfSk7CisgICAgY29u
c3QgZnJvbUR1cmF0aW9uTGlrZSA9IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oZHVyYXRpb25MaWtl
KTsKKworICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJl
KGZyb21TdHJpbmdbZmllbGRdLCBwb3NbZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUoZnJvbUR1
cmF0aW9uTGlrZVtmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgIH0KK30KK3Nob3VsZE5vdFRocm93
KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oYFAke0FycmF5KDMwOCkuZmlsbCg5KS5qb2lu
KCcnKX1ZYCkpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgn4oiScDF5Mm0zdzRk
dDVoNm03LjAwODAwOTAxMHMnKS50b1N0cmluZygpLCAnLVAxWTJNM1c0RFQ1SDZNNy4wMDgwMDkw
MVMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJytQMVkyRFQzSDQuMFMnKS50
b1N0cmluZygpLCAnUDFZMkRUM0g0UycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJv
bSgnUFQxLjAzMTI1SCcpLnRvU3RyaW5nKCksICdQVDFIMU01Mi41UycpOworc2hvdWxkQmUoVGVt
cG9yYWwuRHVyYXRpb24uZnJvbSgnUFQxLjAzMTI1TScpLnRvU3RyaW5nKCksICdQVDFNMS44NzVT
Jyk7CisKK2NvbnN0IHBvc0Fic29sdXRlID0gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDEs
MiwzLDQsNSw2LDcpOworCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlLmxlbmd0
aCwgMik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKCksIFJh
bmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh7
fSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21w
YXJlKHplcm8pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0
aW9uLmNvbXBhcmUoemVybywge30pLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVt
cG9yYWwuRHVyYXRpb24uY29tcGFyZSh7IHllYXJzOiAxIH0sIHplcm8pLCBSYW5nZUVycm9yKTsK
K3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoeyBtb250aHM6IDEg
fSwgemVybyksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRp
b24uY29tcGFyZSh7IHdlZWtzOiAxIH0sIHplcm8pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93
KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoemVybywgeyB5ZWFyczogMSB9KSwgUmFu
Z2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHpl
cm8sIHsgbW9udGhzOiAxIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBv
cmFsLkR1cmF0aW9uLmNvbXBhcmUoemVybywgeyB3ZWVrczogMSB9KSwgUmFuZ2VFcnJvcik7Citz
aG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHBvc0Fic29sdXRlLCBwb3NBYnNvbHV0
ZSksIDApOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZShwb3NBYnNvbHV0ZSwg
emVybyksIDEpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh6ZXJvLCBwb3NB
YnNvbHV0ZSksIC0xKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoJ1BUODY0
MDBTJywgJ1AxRCcpLCAwKTsKKworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBl
LndpdGgubGVuZ3RoLCAxKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS53aXRoLmNhbGwoe30sIHsgeWVhcnM6IDEgfSksIFR5cGVFcnJvcik7CitzaG91bGRU
aHJvdygoKSA9PiB6ZXJvLndpdGgoKSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHpl
cm8ud2l0aCh7fSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLndpdGgoeyB5
ZWFyczogMS4xIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHBvcy53aXRoKHsg
eWVhcnM6IC0xIH0pLCBSYW5nZUVycm9yKTsKK3sKKyAgICBjb25zdCBmdWxseVVwZGF0ZWQgPSBw
b3Mud2l0aChuZWcpOworICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7CisgICAgICAg
IHNob3VsZEJlKHplcm8ud2l0aCh7IFtmaWVsZF06IDEgfSlbZmllbGRdLCAxKTsKKyAgICAgICAg
c2hvdWxkQmUoZnVsbHlVcGRhdGVkW2ZpZWxkXSwgbmVnW2ZpZWxkXSk7CisgICAgfQorfQorCitz
aG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubmVnYXRlZC5sZW5ndGgsIDApOwor
c2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQuY2Fs
bCh7fSksIFR5cGVFcnJvcik7Cit7CisgICAgY29uc3QgbmVnYXRlZFplcm8gPSB6ZXJvLm5lZ2F0
ZWQoKTsKKyAgICBjb25zdCBuZWdhdGVkUG9zID0gcG9zLm5lZ2F0ZWQoKTsKKyAgICBjb25zdCBu
ZWdhdGVkTmVnID0gbmVnLm5lZ2F0ZWQoKTsKKyAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxk
cykgeworICAgICAgICBzaG91bGRCZShuZWdhdGVkWmVyb1tmaWVsZF0sIHplcm9bZmllbGRdKTsK
KyAgICAgICAgc2hvdWxkQmUobmVnYXRlZE5lZ1tmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgICAg
ICBzaG91bGRCZShuZWdhdGVkUG9zW2ZpZWxkXSwgbmVnW2ZpZWxkXSk7CisgICAgfQorfQorCitz
aG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYWJzLmxlbmd0aCwgMCk7CitzaG91
bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYWJzLmNhbGwoe30pLCBU
eXBlRXJyb3IpOworeworICAgIGNvbnN0IGFic1plcm8gPSB6ZXJvLmFicygpOworICAgIGNvbnN0
IGFic1BvcyA9IHBvcy5hYnMoKTsKKyAgICBjb25zdCBhYnNOZWcgPSBuZWcuYWJzKCk7CisgICAg
Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHsKKyAgICAgICAgc2hvdWxkQmUoYWJzWmVyb1tm
aWVsZF0sIHplcm9bZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUoYWJzUG9zW2ZpZWxkXSwgcG9z
W2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKGFic05lZ1tmaWVsZF0sIHBvc1tmaWVsZF0pOwor
ICAgIH0KK30KKworZm9yIChjb25zdCBtZXRob2Qgb2YgWydhZGQnLCAnc3VidHJhY3QnXSkgewor
ICAgIHNob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZVttZXRob2RdLmxlbmd0aCwg
MSk7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW21l
dGhvZF0uY2FsbCh7IGhvdXJzOiAxIH0pLCBUeXBlRXJyb3IpOworICAgIHNob3VsZFRocm93KCgp
ID0+IHplcm9bbWV0aG9kXSgpLCBSYW5nZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiB6
ZXJvW21ldGhvZF0oe30pLCBUeXBlRXJyb3IpOworICAgIHNob3VsZFRocm93KCgpID0+IHplcm9b
bWV0aG9kXSh7IHllYXJzOiAxIH0pLCBSYW5nZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9
PiB6ZXJvW21ldGhvZF0oeyBtb250aHM6IDEgfSksIFJhbmdlRXJyb3IpOworICAgIHNob3VsZFRo
cm93KCgpID0+IHplcm9bbWV0aG9kXSh7IHdlZWtzOiAxIH0pLCBSYW5nZUVycm9yKTsKKyAgICBz
aG91bGRUaHJvdygoKSA9PiBwb3NbbWV0aG9kXSh7IHNlY29uZHM6IDEgfSksIFJhbmdlRXJyb3Ip
OworfQoreworICAgIGNvbnN0IHBvc0R1cmF0aW9uTGlrZSA9IHsgZGF5czogMSwgaG91cnM6IDIs
IG1pbnV0ZXM6IDMsIHNlY29uZHM6IDQsIG1pbGxpc2Vjb25kczogNSwgbWljcm9zZWNvbmRzOiA2
LCBuYW5vc2Vjb25kczogNyB9OworICAgIGNvbnN0IG5lZ1N0cmluZyA9ICctUDFEVDJIM000LjAw
NTAwNjAwN1MnOworCisgICAgY29uc3QgYWRkWmVybyA9IHBvc0Fic29sdXRlLmFkZCh6ZXJvKTsK
KyAgICBjb25zdCBhZGRQb3MgPSBwb3NBYnNvbHV0ZS5hZGQocG9zRHVyYXRpb25MaWtlKTsKKyAg
ICBjb25zdCBhZGROZWcgPSBwb3NBYnNvbHV0ZS5hZGQobmVnU3RyaW5nKTsKKyAgICBjb25zdCBz
dWJaZXJvID0gcG9zQWJzb2x1dGUuc3VidHJhY3QoemVybyk7CisgICAgY29uc3Qgc3ViUG9zID0g
cG9zQWJzb2x1dGUuc3VidHJhY3QocG9zRHVyYXRpb25MaWtlKTsKKyAgICBjb25zdCBzdWJOZWcg
PSBwb3NBYnNvbHV0ZS5zdWJ0cmFjdChuZWdTdHJpbmcpOworICAgIGZvciAoY29uc3QgZmllbGQg
b2YgZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJlKGFkZFplcm9bZmllbGRdLCBwb3NBYnNvbHV0
ZVtmaWVsZF0pOworICAgICAgICBzaG91bGRCZShhZGRQb3NbZmllbGRdLCAyICogcG9zQWJzb2x1
dGVbZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUoYWRkTmVnW2ZpZWxkXSwgMCk7CisgICAgICAg
IHNob3VsZEJlKHN1Ylplcm9bZmllbGRdLCBwb3NBYnNvbHV0ZVtmaWVsZF0pOworICAgICAgICBz
aG91bGRCZShzdWJQb3NbZmllbGRdLCAwKTsKKyAgICAgICAgc2hvdWxkQmUoc3ViTmVnW2ZpZWxk
XSwgMiAqIHBvc0Fic29sdXRlW2ZpZWxkXSk7CisgICAgfQorfQorc2hvdWxkQmUoVGVtcG9yYWwu
RHVyYXRpb24uZnJvbSgnUDFEVDEzSDMxTTMxUycpLmFkZCgnUDFEVDEzSDMxTTMxUycpLnRvU3Ry
aW5nKCksICdQM0RUM0gzTTJTJyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCct
UFQxTTU5UycpLnN1YnRyYWN0KCdQVDFNNTlTJykudG9TdHJpbmcoKSwgJy1QVDNNNThTJyk7CisK
K3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5yb3VuZC5sZW5ndGgsIDEpOwor
c2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnJvdW5kLmNhbGwo
e30pLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby5yb3VuZCgpLCBUeXBlRXJy
b3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby5yb3VuZCh7fSksIFJhbmdlRXJyb3IpOworc2hv
dWxkVGhyb3coKCkgPT4gemVyby5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ2JvZ3VzJyB9KSwgUmFu
Z2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdi
b2d1cycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby5yb3VuZCh7IHNt
YWxsZXN0VW5pdDogJ2hvdXInLCBsYXJnZXN0VW5pdDogJ25hbm9zZWNvbmQnIH0pLCBSYW5nZUVy
cm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICduYW5v
c2Vjb25kJywgcm91bmRpbmdNb2RlOiAnYm9ndXMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRo
cm93KCgpID0+IHplcm8ucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICduYW5vc2Vjb25kJywgcm91bmRp
bmdJbmNyZW1lbnQ6IDMgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9y
YWwuRHVyYXRpb24uZnJvbSgnUDFZJykucm91bmQoeyBsYXJnZXN0VW5pdDogJ3NlY29uZHMnIH0p
LCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20o
J1AxTScpLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJvcik7Citz
aG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMVcnKS5yb3VuZCh7IGxh
cmdlc3RVbml0OiAnc2Vjb25kcycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4g
VGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFEJykucm91bmQoeyBsYXJnZXN0VW5pdDogJ21vbnRo
cycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24u
ZnJvbSgnUDFEJykucm91bmQoeyBsYXJnZXN0VW5pdDogJ3dlZWtzJyB9KSwgUmFuZ2VFcnJvcik7
CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnZGF5JyB9KS50b1N0
cmluZygpLCAnUDFEVDJIM000LjAwNTAwNjAwN1MnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJv
dW5kKHsgbGFyZ2VzdFVuaXQ6ICdhdXRvJyB9KS50b1N0cmluZygpLCAnUDFEVDJIM000LjAwNTAw
NjAwN1MnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgc21hbGxlc3RVbml0OiAnZGF5
JyB9KS50b1N0cmluZygpLCAnUDFEJyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IHNt
YWxsZXN0VW5pdDogJ3NlY29uZCcgfSkudG9TdHJpbmcoKSwgJ1AxRFQySDNNNFMnKTsKK3Nob3Vs
ZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdob3VyJywgc21hbGxlc3RVbml0
OiAnc2Vjb25kJyB9KS50b1N0cmluZygpLCAnUFQyNkgzTTRTJyk7CitzaG91bGRCZShwb3NBYnNv
bHV0ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnbWludXRlJywgc21hbGxlc3RVbml0OiAnc2Vjb25k
JyB9KS50b1N0cmluZygpLCAnUFQxNTYzTTRTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3Vu
ZCh7IGxhcmdlc3RVbml0OiAnc2Vjb25kJywgc21hbGxlc3RVbml0OiAnbWlsbGlzZWNvbmQnIH0p
LnRvU3RyaW5nKCksICdQVDkzNzg0LjAwNVMnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5k
KHsgbGFyZ2VzdFVuaXQ6ICdtaWxsaXNlY29uZCcsIHNtYWxsZXN0VW5pdDogJ21pY3Jvc2Vjb25k
JyB9KS50b1N0cmluZygpLCAnUFQ5Mzc4NC4wMDUwMDZTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0
ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnbWljcm9zZWNvbmQnLCBzbWFsbGVzdFVuaXQ6ICdtaWNy
b3NlY29uZCcgfSkudG9TdHJpbmcoKSwgJ1BUOTM3ODQuMDA1MDA2UycpOworc2hvdWxkQmUocG9z
QWJzb2x1dGUucm91bmQoeyBsYXJnZXN0VW5pdDogJ25hbm9zZWNvbmQnIH0pLnRvU3RyaW5nKCks
ICdQVDkzNzg0LjAwNTAwNjAwN1MnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgc21h
bGxlc3RVbml0OiAnc2Vjb25kJywgcm91bmRpbmdJbmNyZW1lbnQ6IDMwIH0pLnRvU3RyaW5nKCks
ICdQMURUMkgzTScpOworc2hvdWxkQmUocG9zQWJzb2x1dGUucm91bmQoeyBzbWFsbGVzdFVuaXQ6
ICdzZWNvbmQnLCByb3VuZGluZ0luY3JlbWVudDogMzAsIHJvdW5kaW5nTW9kZTogJ2NlaWwnIH0p
LnRvU3RyaW5nKCksICdQMURUMkgzTTMwUycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24u
ZnJvbSgnLVBUMzFTJykucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmQnLCByb3VuZGluZ0lu
Y3JlbWVudDogMzAgfSkudG9TdHJpbmcoKSwgJy1QVDMwUycpOworc2hvdWxkQmUoVGVtcG9yYWwu
RHVyYXRpb24uZnJvbSgnLVBUMzFTJykucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmQnLCBy
b3VuZGluZ0luY3JlbWVudDogMzAsIHJvdW5kaW5nTW9kZTogJ2Zsb29yJyB9KS50b1N0cmluZygp
LCAnLVBUNjBTJyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCctUFQ0NVMnKS5y
b3VuZCh7IHNtYWxsZXN0VW5pdDogJ3NlY29uZCcsIHJvdW5kaW5nSW5jcmVtZW50OiAzMCB9KS50
b1N0cmluZygpLCAnLVBUNjBTJyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCct
UFQ0NVMnKS5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ3NlY29uZCcsIHJvdW5kaW5nSW5jcmVtZW50
OiAzMCwgcm91bmRpbmdNb2RlOiAndHJ1bmMnIH0pLnRvU3RyaW5nKCksICctUFQzMFMnKTsKKwor
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvdGFsLmxlbmd0aCwgMSk7Citz
aG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudG90YWwuY2FsbCh7
fSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLnRvdGFsKCksIFR5cGVFcnJv
cik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLnRvdGFsKHt9KSwgUmFuZ2VFcnJvcik7CitzaG91
bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMVknKS50b3RhbCh7IHVuaXQ6
ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5E
dXJhdGlvbi5mcm9tKCdQMU0nKS50b3RhbCh7IHVuaXQ6ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJv
cik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMVcnKS50b3Rh
bCh7IHVuaXQ6ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBU
ZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMUQnKS50b3RhbCh7IHVuaXQ6ICdtb250aHMnIH0pLCBS
YW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1Ax
RCcpLnRvdGFsKHsgdW5pdDogJ3dlZWtzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRCZShwb3NB
YnNvbHV0ZS50b3RhbCh7IHVuaXQ6ICdkYXlzJyB9KSwgMS4wODU0NjMwMjA5MDI4NTg4KTsKK3No
b3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ2hvdXJzJyB9KSwgMjYuMDUxMTEyNTAx
NjY4NjEyKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ21pbnV0ZXMnIH0p
LCAxNTYzLjA2Njc1MDEwMDExNjcpOworc2hvdWxkQmUocG9zQWJzb2x1dGUudG90YWwoeyB1bml0
OiAnc2Vjb25kcycgfSksIDkzNzg0LjAwNTAwNjAwNyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS50
b3RhbCh7IHVuaXQ6ICdtaWxsaXNlY29uZHMnIH0pLCA5Mzc4NDAwNS4wMDYwMDcpOworc2hvdWxk
QmUocG9zQWJzb2x1dGUudG90YWwoeyB1bml0OiAnbWljcm9zZWNvbmRzJyB9KSwgOTM3ODQwMDUw
MDYuMDA3KTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ25hbm9zZWNvbmRz
JyB9KSwgOTM3ODQwMDUwMDYwMDcpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgn
LVBUMTIzNDU2Nzg5UycpLnRvdGFsKHsgdW5pdDogJ2RheScgfSksIC0xNDI4Ljg5ODAyMDgzMzMz
MzIpOworCisvLyBBdCBwcmVzZW50LCB0b0xvY2FsZVN0cmluZyBoYXMgdGhlIHNhbWUgYmVoYXZp
b3IgYXMgdG9KU09OIG9yIGFyZ3VtZW50bGVzcyB0b1N0cmluZy4KK2ZvciAoY29uc3QgbWV0aG9k
IG9mIFsndG9TdHJpbmcnLCAndG9KU09OJywgJ3RvTG9jYWxlU3RyaW5nJ10pIHsgICAgCisgICAg
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW21ldGhvZF0ubGVuZ3RoLCAwKTsK
KyAgICBzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbbWV0aG9k
XS5jYWxsKHt9KSwgVHlwZUVycm9yKTsKKworICAgIHNob3VsZEJlKHplcm9bbWV0aG9kXSgpLCAn
UFQwUycpOworICAgIHNob3VsZEJlKHBvc1ttZXRob2RdKCksICdQMVkyTTNXNERUNUg2TTcuMDA4
MDA5MDFTJyk7CisgICAgc2hvdWxkQmUobmVnW21ldGhvZF0oKSwgJy1QMVkyTTNXNERUNUg2TTcu
MDA4MDA5MDFTJyk7CisgICAgCisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDEs
MSwxLDEpW21ldGhvZF0oKSwgJ1AxWTFNMVcxRCcpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3Jh
bC5EdXJhdGlvbigwLDAsMCwwLDEsMSwxKVttZXRob2RdKCksICdQVDFIMU0xUycpOworICAgIHNo
b3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDEwMClbbWV0aG9kXSgp
LCAnUFQwLjFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAs
MCwwLDAsMCwxMDApW21ldGhvZF0oKSwgJ1BUMC4wMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBU
ZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDAsMCwxMDApW21ldGhvZF0oKSwgJ1BUMC4w
MDAwMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAs
MCwxLDEwMDEpW21ldGhvZF0oKSwgJ1BUMi4wMDFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBv
cmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDAsMSwxMDAxKVttZXRob2RdKCksICdQVDAuMDAyMDAx
UycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDAs
MSwxMDAxKVttZXRob2RdKCksICdQVDAuMDAwMDAyMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBU
ZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwxLDEwMDEsMTAwMSwxMDAxKVttZXRob2RdKCks
ICdQVDIuMDAyMDAyMDAxUycpOworfQorCitzaG91bGRCZShwb3MudG9TdHJpbmcoe30pLCBwb3Mu
dG9TdHJpbmcoKSk7CisKK3Nob3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IHNtYWxsZXN0
VW5pdDogJ2Zvb2JhcicgfSksIFJhbmdlRXJyb3IpOworZm9yIChjb25zdCB1bml0IG9mIFsneWVh
cicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VyJywgJ21pbnV0ZSddKSB7CisgICAgc2hv
dWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiB1bml0IH0pLCBSYW5n
ZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVu
aXQ6IGAke3VuaXR9c2AgfSksIFJhbmdlRXJyb3IpOworfQorc2hvdWxkQmUocG9zLnRvU3RyaW5n
KHsgc21hbGxlc3RVbml0OiAnc2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTdTJyk7CitzaG91
bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICdtaWxsaXNlY29uZHMnIH0pLCAnUDFZ
Mk0zVzREVDVINk03LjAwOFMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5p
dDogJ21pY3Jvc2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4MDA5UycpOworc2hvdWxk
QmUocG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiAnbmFub3NlY29uZHMnIH0pLCAnUDFZMk0z
VzREVDVINk03LjAwODAwOTAxMFMnKTsKK2ZvciAoY29uc3QgdW5pdCBvZiBbJ3NlY29uZCcsICdt
aWxsaXNlY29uZCcsICdtaWNyb3NlY29uZCcsICduYW5vc2Vjb25kJ10pCisgICAgc2hvdWxkQmUo
cG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiB1bml0IH0pLCBwb3MudG9TdHJpbmcoeyBzbWFs
bGVzdFVuaXQ6IGAke3VuaXR9c2AgfSkpOworCitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJp
bmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAtMSB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRU
aHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAxMCB9KSwg
UmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFs
U2Vjb25kRGlnaXRzOiAnYm9ndXMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZEJlKHBvcy50b1N0
cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDAgfSksICdQMVkyTTNXNERUNUg2TTdTJyk7
Citjb25zdCBkZWNpbWFsUGFydCA9ICcwMDgwMDkwMTAnOworZm9yIChsZXQgaSA9IDE7IGkgPCAx
MDsgaSsrKQorICAgIHNob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdp
dHM6IGkgfSksIGBQMVkyTTNXNERUNUg2TTcuJHtkZWNpbWFsUGFydC5zbGljZSgwLGkpfVNgKTsK
K3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6ICdhdXRvJyB9
KSwgcG9zLnRvU3RyaW5nKCkpOworc2hvdWxkQmUoemVyby50b1N0cmluZyh7IGZyYWN0aW9uYWxT
ZWNvbmREaWdpdHM6IDIgfSksICdQVDAuMDBTJyk7CisKK3Nob3VsZFRocm93KCgpID0+IHBvcy50
b1N0cmluZyh7IHJvdW5kaW5nTW9kZTogJ2JvZ3VzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRC
ZShwb3MudG9TdHJpbmcoeyByb3VuZGluZ01vZGU6ICd0cnVuYycgfSksIHBvcy50b1N0cmluZygp
KTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDcsIHJv
dW5kaW5nTW9kZTogJ2NlaWwnIH0pLCAnUDFZMk0zVzREVDVINk03LjAwODAwOTFTJyk7CitzaG91
bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAyLCByb3VuZGluZ01v
ZGU6ICdmbG9vcicgfSksICdQMVkyTTNXNERUNUg2TTcuMDBTJyk7CitzaG91bGRCZShwb3MudG9T
dHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAyLCByb3VuZGluZ01vZGU6ICdoYWxmRXhw
YW5kJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMVMnKTsKKworc2hvdWxkQmUoVGVtcG9yYWwuRHVy
YXRpb24ucHJvdG90eXBlLnZhbHVlT2YubGVuZ3RoLCAwKTsKK3Nob3VsZFRocm93KCgpID0+IG5l
dyBUZW1wb3JhbC5EdXJhdGlvbigpLnZhbHVlT2YoKSwgVHlwZUVycm9yKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436829</attachid>
            <date>2021-08-30 16:46:27 -0700</date>
            <delta_ts>2021-08-31 10:49:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228532-20210830164626.patch</filename>
            <type>text/plain</type>
            <size>124217</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
YWQxZTQ3NmYwYjc1YmQ0ZTJjNjFkOTQwZTUwZmJiMDZhMmFlOGRkLi5lMWQxZjEzMGEyYzFlZTY0
N2UwZTBlMGE4NzU3NzYyMWNhMTBiYThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NCBAQAorMjAyMS0wOC0zMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGlt
cGxlbWVudHMgdGhlIER1cmF0aW9uIGNsYXNzIGZvciB0aGUgdXBjb21pbmcgVGVtcG9yYWwgQVBJ
IChjdXJyZW50bHkgYXQgc3RhZ2UgMyBpbiBUQzM5KS4KKyAgICAgICAgU3BlYzogaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtZHVyYXRpb24tb2JqZWN0cwor
ICAgICAgICBEb2NzOiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvZG9jcy9kdXJh
dGlvbi5odG1sCisKKyAgICAgICAgQSBEdXJhdGlvbiBpcyB1bHRpbWF0ZWx5IGFuIGFycmF5IG9m
IGRvdWJsZXMgKHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vj
b25kcywgbXMsIM68cywgbnMpCisgICAgICAgIHdoaWNoIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW5k
IGZyb20gYW4gSVNPIHN0cmluZyByZXByZXNlbnRhdGlvbiAoZS5nLiAiLVAxWTJNM1c0RFQ1SDZN
Ny4xMjM0NTY3ODlTIikKKyAgICAgICAgYW5kIHdoaWNoIHN1cHBvcnRzIHZhcmlvdXMgY2FsY3Vs
YXRpb25zLgorCisgICAgICAgIFRoZSBzcGVjIGlzIHN0aWxsIGluIGZsdXggYW5kIGNlcnRhaW4g
aXNzdWVzIHdlcmUgaWRlbnRpZmllZCBpbiB0aGUgY291cnNlIG9mIHByZXBhcmluZyB0aGlzIHBh
dGNoLgorICAgICAgICBUaGlzIGNvZGUgYWltcyB0byBiZSAiYXMgY29ycmVjdCBhcyBwb3NzaWJs
ZSIgZm9yIHRoZSBtb21lbnQ7IHNtYWxsIGNvcnJlY3Rpb25zIGFyZSBleHBlY3RlZCBpbiB0aGUg
bmVhciBmdXR1cmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJp
dmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogcnVudGltZS9D
b21tb25JZGVudGlmaWVycy5oOgorICAgICAgICAqIHJ1bnRpbWUvSVNPODYwMS5jcHA6IEFkZGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSVNPODYwMS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQp
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OmR1cmF0aW9uU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVy
YXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaDog
QWRkZWQuCisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5o
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaDog
QWRkZWQuCisgICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OmNyZWF0ZUR1cmF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpzaW5ndWxhclVu
aXQpOgorICAgICAgICAoSlNDOjp0ZW1wb3JhbFVuaXRUeXBlKToKKyAgICAgICAgKEpTQzo6dGVt
cG9yYWxMYXJnZXN0VW5pdCk6CisgICAgICAgIChKU0M6OnRlbXBvcmFsU21hbGxlc3RVbml0KToK
KyAgICAgICAgKEpTQzo6dGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25kRGlnaXRzKToKKyAgICAgICAg
KEpTQzo6c2Vjb25kc1N0cmluZ1ByZWNpc2lvbik6CisgICAgICAgIChKU0M6Om1heGltdW1Sb3Vu
ZGluZ0luY3JlbWVudCk6CisgICAgICAgIChKU0M6OnRlbXBvcmFsUm91bmRpbmdJbmNyZW1lbnQp
OgorICAgICAgICAoSlNDOjpyb3VuZE51bWJlclRvSW5jcmVtZW50KToKKyAgICAgICAgKiBydW50
aW1lL1RlbXBvcmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAg
ICogcnVudGltZS9WTS5oOgorCiAyMDIxLTA4LTMwICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJz
bGluZ0Bzb255LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBhZGQgbWlzc2luZyBpbmNsdWRl
IHRvIHByZS1lbXB0IHVuaWZpZWQgc291cmNlIHNoaWZ0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IDBlN2ZjY2JhNTI3ZjQ0YTk2NzI4N2ViMWY1ZTFhMjE3NjUzYzA3YjIu
LjE3Mzg1ZGEyZDBkZDZlMDA5NDBmMjIxZGRkZDAxNWQ1ZWJmYjMyYmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEwNyw2ICsxMDcsOCBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfT0JKRUNUX0xVVF9TT1VSQ0VTCiAgICAgcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCiAg
ICAgcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL1N5bWJvbFByb3Rv
dHlwZS5jcHAKKyAgICBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAKKyAg
ICBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9UZW1w
b3JhbE9iamVjdC5jcHAKIAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNzU0MmM3Zjc3NDY1ZTI2ZTE5
ZDRhNjhhNWRiNzYwOTFmZGQ0NjUzOS4uM2Y1ODVlMWM5NGIzMDMwNjg5NGIyNzc2YjlhNTA3ZTk2
ZjA2NGY5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAg
LTE5MSw2ICsxOTEsOCBAQCBPQkpFQ1RfTFVUX0hFQURFUlMgPSBcCiAgICAgU3RyaW5nUHJvdG90
eXBlLmx1dC5oIFwKICAgICBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgU3ltYm9sUHJv
dG90eXBlLmx1dC5oIFwKKyAgICBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IubHV0LmggXAor
ICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUubHV0LmggXAogICAgIFRlbXBvcmFsT2JqZWN0
Lmx1dC5oIFwKICAgICBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmx1dC5oIFwK
ICAgICBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5sdXQuaCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGE2MDE5NmUyYzY3MDIzYzgxMGQ2MmYyNTA5NjgzYjgxM2Yx
ZmYwNjguLmFmOGE2MzIzZWIzYWQwYThmMzU5N2RlYjBmODA2MTA1N2FiM2ViZWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDEzLDkgKzE0MTMsMTMgQEAKIAkJQTFENzkzMDEx
QjQzODY0QjAwNDUxNkY1IC8qIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExRDc5MkZCMUI0Mzg2NEIwMDQ1
MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmggKi87IH07CiAJCUEzMjFBQTZEMjYy
NjM1OUIwMDIzQURBMiAvKiBJbnRsV29ya2Fyb3VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTMyMUFBNkMyNjI2MzU5QjAwMjNBREEyIC8qIEludGxX
b3JrYXJvdW5kLmggKi87IH07CiAJCUEzODJDNTMxMjY2NzExMUQwMDQyQ0Q5OSAvKiBJbkJ5VmFy
aWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMz
MDVGQjEyMEIwRjc4ODAwQ0VCODJCIC8qIEluQnlWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTM4Q0E1OUUyNkREODRERTAwQzhEODRD
IC8qIElTTzg2MDEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEzOENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmggKi87IH07CiAJCUEzOEQy
NTBFMjU4MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTM4RDI1MEQyNTgw
MEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmggKi87IH07CiAJ
CUEzOEQ1QkZDMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhENUJGQTI2NjZEM0RBMDBBMTA5QTYg
LyogSW5CeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRsV29ya2Fyb3VuZC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzc2MTk0MDI2
MjUxMjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3BwICovOyB9OworCQlBM0M3RURCNjI2
QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VEQjAyNkIwREIzNjAwNEMz
NEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsKKwkJQTNDN0VEQjkyNkIw
REIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAvKiBUZW1w
b3JhbER1cmF0aW9uLmggKi87IH07CisJCUEzQzdFREJBMjZCMERCMzgwMDRDMzRDNSAvKiBUZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0
aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJQTNGRjlCQzcyMjM0NzQ5MTAwQjFBOUFCIC8qIFlh
cnJGbGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTNGRjlCQzUyMjM0NzQ2NjAwQjFBOUFCIC8qIFlhcnJGbGFncy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1MDNGQTFBMTg4RTBGQjAwMDExMEYx
NCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNTAzRkExNDE4OEUwRkFGMDAxMTBGMTQgLyogSmF2YVNjcmlwdENh
bGxGcmFtZS5oICovOyB9OwogCQlBNTAzRkExRTE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTAzRkExODE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lUHJvdG90eXBlLmggKi87IH07CkBAIC00NDU2LDYgKzQ0NjAsOCBAQAogCQlBMjc5NThE
N0ZBMTE0MkIwQUM5RTM2NEQgLyogV2FzbUNvbnRleHRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21Db250ZXh0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMzIxQUE2QzI2MjYzNTlCMDAyM0FEQTIgLyogSW50bFdvcmthcm91bmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bFdvcmthcm91bmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTM3NjE5NDAyNjI1MTI3QzAwQ0JDQkE5IC8qIElu
dGxXb3JrYXJvdW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
dGxXb3JrYXJvdW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTM4Q0E1OUIy
NkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSVNPODYwMS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEz
OENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElTTzg2MDEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTM4
RDI1MEQyNTgwMEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzOEQ1QkY5MjY2NkQzREEw
MEExMDlBNiAvKiBJbkJ5U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluQnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMzhE
NUJGQTI2NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbkJ5U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00NDcxLDYgKzQ0NzcsMTIgQEAKIAkJQTNCRjg4NEUyNDQ4MEJFMDAwMUI5RjM1IC8qIEludGxS
ZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTNCRjg4NEYyNDQ4MEJFMDAwMUI5RjM1IC8qIEludGxSZWxhdGl2
ZVRpbWVGb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50
bFJlbGF0aXZlVGltZUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEz
QkY4ODUwMjQ0ODBCRTEwMDFCOUYzNSAvKiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBM0M3RURCMTI2QjBEQjM2MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjIyNkIwREIzNzAwNEMzNEM1IC8q
IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMzI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxE
dXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wb3JhbER1cmF0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREI0MjZCMERCMzcwMDRD
MzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREI1MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBM0ZGOUJDNTIyMzQ3NDY2MDBCMUE5QUIgLyogWWFyckZsYWdzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJGbGFncy5oOyBwYXRoID0geWFyci9ZYXJyRmxhZ3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNGRjlCQzYyMjM0NzQ2NjAwQjFBOUFC
IC8qIFlhcnJGbGFncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBZ
YXJyRmxhZ3MuY3BwOyBwYXRoID0geWFyci9ZYXJyRmxhZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNTAzRkExMzE4OEUwRkFGMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxG
cmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKYXZhU2NyaXB0
Q2FsbEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc1NjEsNiArNzU3
Myw4IEBACiAJCQkJQTMyMUFBNkMyNjI2MzU5QjAwMjNBREEyIC8qIEludGxXb3JrYXJvdW5kLmgg
Ki8sCiAJCQkJMEYyNzVGMkMxRUNFMDc5NjAwNjIwRDQ3IC8qIEludHJpbnNpYy5jcHAgKi8sCiAJ
CQkJODZCRjY0MkExNDhEQjJCNTAwNERFMzZBIC8qIEludHJpbnNpYy5oICovLAorCQkJCUEzOENB
NTlCMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmNwcCAqLywKKwkJCQlBMzhDQTU5QzI2REQ4
NERFMDBDOEQ4NEMgLyogSVNPODYwMS5oICovLAogCQkJCThCOUY2RDU1MUQ1OTEyRkEwMDFDNzM5
RiAvKiBJdGVyYXRpb25LaW5kLmggKi8sCiAJCQkJRkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8q
IEl0ZXJhdGlvblN0YXR1cy5oICovLAogCQkJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJ
dGVyYXRvck9wZXJhdGlvbnMuY3BwICovLApAQCAtNzk1Myw2ICs3OTY3LDEyIEBACiAJCQkJRTMx
MTc5QTkyMjg4Mzg1RDAwNTE0QjJDIC8qIFN5bWJvbFRhYmxlT3JTY29wZURlcHRoLmggKi8sCiAJ
CQkJQkRCNEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5j
cHAgKi8sCiAJCQkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2JqZWN0RGVz
Y3JpcHRvci5oICovLAorCQkJCUEzQzdFREIxMjZCMERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1
cmF0aW9uLmNwcCAqLywKKwkJCQlBM0M3RURCMzI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxE
dXJhdGlvbi5oICovLAorCQkJCUEzQzdFREIyMjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCUEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLywKKwkJCQlBM0M3RURCNTI2QjBEQjM3
MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAgKi8sCisJCQkJQTNDN0VE
QjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLywKIAkJ
CQlGNkYxNTAxQjI2OTNEMzNFMDA0Qjk4RUYgLyogVGVtcG9yYWxOb3cuY3BwICovLAogCQkJCUY2
RjE1MDE4MjY5M0QzM0QwMDRCOThFRiAvKiBUZW1wb3JhbE5vdy5oICovLAogCQkJCUY2RjE1MDE5
MjY5M0QzM0UwMDRCOThFRiAvKiBUZW1wb3JhbE9iamVjdC5jcHAgKi8sCkBAIC0xMDA3Myw2ICsx
MDA5Myw3IEBACiAJCQkJQTMyMUFBNkQyNjI2MzU5QjAwMjNBREEyIC8qIEludGxXb3JrYXJvdW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAxMTJCMkYgLyogSW50cmlu
c2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzRFMDM1NDFFNTNCRDI5MDAyMTNGNjQgLyogSW50
cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTM4Q0E1OUUyNkRE
ODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRENFMTMyMUZC
MTFEQTQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI0Njc4MDFGRERBNkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKQEAgLTEwNjQ5LDYgKzEwNjcwLDkgQEAKIAkJCQlBNzg0QTI2NDEx
RDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREM3
OTk3ODMxQ0RFOUZBMDAwNEQ0QTA5IC8qIFRhZ1JlZ2lzdGVyc01vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZU9iamVjdERlc2NyaXB0
b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREI5MjZCMERCMzgwMDRDMzRDNSAvKiBUZW1w
b3JhbER1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBM0M3RURCQTI2QjBEQjM4MDA0QzM0
QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
M0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjZGMTUwMjEyNjkzRDQ1MDAwNEI5OEVGIC8qIFRlbXBvcmFsT2Jq
ZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NEYxN0VFMjc0OTAwQUJCMjE3IC8q
IFRlbXBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NEE3QjQyMEJGNjhEOTAw
MjJCMTcxIC8qIFRlcm1pbmF0ZWRDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBlMjFhNTgxYzRmNjZlNDNhZjcwNWZkYTRiMjc4ZmE2M2Jm
Mzg0OTY3Li45Yzc3NDExZDNhMWFmN2Q3OTg3Y2Y1ZTIyOTA1YTY1NmQ3NmMwZDgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC04NTMsNiArODUzLDcgQEAgcnVudGltZS9JbnRsU2Vn
bWVudGVyUHJvdG90eXBlLmNwcAogcnVudGltZS9JbnRsU2VnbWVudHMuY3BwCiBydW50aW1lL0lu
dGxTZWdtZW50c1Byb3RvdHlwZS5jcHAKIHJ1bnRpbWUvSW50bFdvcmthcm91bmQuY3BwIEBuby11
bmlmeSAvLyBDb25maW5lIFVfSElERV9EUkFGVF9BUEkncyBlZmZlY3QgdG8gdGhpcyBmaWxlLgor
cnVudGltZS9JU084NjAxLmNwcAogcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCiBydW50
aW1lL0l0ZXJhdG9yUHJvdG90eXBlLmNwcAogcnVudGltZS9KU0FycmF5LmNwcApAQCAtMTAxMCw2
ICsxMDExLDkgQEAgcnVudGltZS9TeW1ib2xPYmplY3QuY3BwCiBydW50aW1lL1N5bWJvbFByb3Rv
dHlwZS5jcHAKIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwCiBydW50aW1lL1RlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvci5jcHAKK3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKK3J1bnRpbWUvVGVt
cG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcAorcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlLmNwcAogcnVudGltZS9UZW1wb3JhbE5vdy5jcHAKIHJ1bnRpbWUvVGVtcG9yYWxPYmpl
Y3QuY3BwCiBydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCmluZGV4IDMzZTJjN2UxMmJjM2Q4
N2IzYjU4ZjhhZWU5MjUyNzY5ZjhiNjk1OWMuLjYyNjcxNmM0NzVmNGIzNTdiMmI1ZDRlY2Q4NzM5
MDVlNTE2OGFkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uSWRlbnRpZmllcnMuaApAQCAtOTksNiArOTksNyBAQAogICAgIG1hY3JvKGNvdW50ZXJzKSBc
CiAgICAgbWFjcm8oZGF0ZVN0eWxlKSBcCiAgICAgbWFjcm8oZGF5KSBcCisgICAgbWFjcm8oZGF5
cykgXAogICAgIG1hY3JvKGRheVBlcmlvZCkgXAogICAgIG1hY3JvKGRlZmluZVByb3BlcnR5KSBc
CiAgICAgbWFjcm8oZGVyZWYpIFwKQEAgLTEzNiw2ICsxMzcsNyBAQAogICAgIG1hY3JvKGhhc2gp
IFwKICAgICBtYWNybyhoZWFkZXIpIFwKICAgICBtYWNybyhob3VyKSBcCisgICAgbWFjcm8oaG91
cnMpIFwKICAgICBtYWNybyhob3VyQ3ljbGUpIFwKICAgICBtYWNybyhob3VyMTIpIFwKICAgICBt
YWNybyhpZCkgXApAQCAtMTU2LDYgKzE1OCw3IEBACiAgICAgbWFjcm8oam9pbikgXAogICAgIG1h
Y3JvKGxhbmd1YWdlKSBcCiAgICAgbWFjcm8obGFuZ3VhZ2VEaXNwbGF5KSBcCisgICAgbWFjcm8o
bGFyZ2VzdFVuaXQpIFwKICAgICBtYWNybyhsYXN0SW5kZXgpIFwKICAgICBtYWNybyhsZW5ndGgp
IFwKICAgICBtYWNybyhsaW5lKSBcCkBAIC0xNjQsMTMgKzE2NywxOCBAQAogICAgIG1hY3JvKG1h
eGltdW1GcmFjdGlvbkRpZ2l0cykgXAogICAgIG1hY3JvKG1heGltdW1TaWduaWZpY2FudERpZ2l0
cykgXAogICAgIG1hY3JvKG1lc3NhZ2UpIFwKKyAgICBtYWNybyhtaWNyb3NlY29uZHMpIFwKKyAg
ICBtYWNybyhtaWxsaXNlY29uZHMpIFwKICAgICBtYWNybyhtaW5pbXVtRnJhY3Rpb25EaWdpdHMp
IFwKICAgICBtYWNybyhtaW5pbXVtSW50ZWdlckRpZ2l0cykgXAogICAgIG1hY3JvKG1pbmltdW1T
aWduaWZpY2FudERpZ2l0cykgXAogICAgIG1hY3JvKG1pbnV0ZSkgXAorICAgIG1hY3JvKG1pbnV0
ZXMpIFwKICAgICBtYWNybyhtb250aCkgXAorICAgIG1hY3JvKG1vbnRocykgXAogICAgIG1hY3Jv
KG11bHRpbGluZSkgXAogICAgIG1hY3JvKG5hbWUpIFwKKyAgICBtYWNybyhuYW5vc2Vjb25kcykg
XAogICAgIG1hY3JvKG5leHQpIFwKICAgICBtYWNybyhub3cpIFwKICAgICBtYWNybyhudW1Jbmxp
bmVkQ2FsbHMpIFwKQEAgLTE5MywxMyArMjAxLDE3IEBACiAgICAgbWFjcm8ocmVnaW9uKSBcCiAg
ICAgbWFjcm8ocmVwbGFjZSkgXAogICAgIG1hY3JvKHJlc29sdmUpIFwKKyAgICBtYWNybyhyb3Vu
ZGluZ0luY3JlbWVudCkgXAorICAgIG1hY3JvKHJvdW5kaW5nTW9kZSkgXAogICAgIG1hY3JvKHNj
cmlwdCkgXAogICAgIG1hY3JvKHNlY29uZCkgXAorICAgIG1hY3JvKHNlY29uZHMpIFwKICAgICBt
YWNybyhzZWdtZW50KSBcCiAgICAgbWFjcm8oc2Vuc2l0aXZpdHkpIFwKICAgICBtYWNybyhzZXQp
IFwKICAgICBtYWNybyhzaXplKSBcCiAgICAgbWFjcm8oc2xpY2UpIFwKKyAgICBtYWNybyhzbWFs
bGVzdFVuaXQpIFwKICAgICBtYWNybyhzb3VyY2UpIFwKICAgICBtYWNybyhzb3VyY2VDb2RlKSBc
CiAgICAgbWFjcm8oc291cmNlVVJMKSBcCkBAIC0yMjYsMTIgKzIzOCwxNSBAQAogICAgIG1hY3Jv
KHR5cGUpIFwKICAgICBtYWNybyh1aWQpIFwKICAgICBtYWNybyh1bmljb2RlKSBcCisgICAgbWFj
cm8odW5pdCkgXAogICAgIG1hY3JvKHVzYWdlKSBcCiAgICAgbWFjcm8odmFsdWUpIFwKICAgICBt
YWNybyh2YWx1ZU9mKSBcCiAgICAgbWFjcm8od2Vla2RheSkgXAorICAgIG1hY3JvKHdlZWtzKSBc
CiAgICAgbWFjcm8od3JpdGFibGUpIFwKLSAgICBtYWNybyh5ZWFyKQorICAgIG1hY3JvKHllYXIp
IFwKKyAgICBtYWNybyh5ZWFycykKIAogI2RlZmluZSBKU0NfQ09NTU9OX0lERU5USUZJRVJTX0VB
Q0hfUFJJVkFURV9GSUVMRChtYWNybykgXAogICAgIG1hY3JvKGNvbnN0cnVjdG9yKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSVNPODYwMS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JU084NjAxLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzlkMDViNDRi
Yjk0NDUyY2MwNjNjMWE0OTM5NDYyYmZhNTliN2IyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSVNPODYwMS5jcHAKQEAgLTAsMCArMSwyMDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklTTzg2MDEuaCIK
KworI2luY2x1ZGUgIlBhcnNlSW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2lu
Z0J1ZmZlci5oPgorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBJU084NjAxIHsKKworLy8g
RHVyYXRpb25IYW5kbGVGcmFjdGlvbnMgKCBmSG91cnMsIG1pbnV0ZXMsIGZNaW51dGVzLCBzZWNv
bmRzLCBmU2Vjb25kcywgbWlsbGlzZWNvbmRzLCBmTWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMs
IGZNaWNyb3NlY29uZHMsIG5hbm9zZWNvbmRzLCBmTmFub3NlY29uZHMgKQorLy8gaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtZHVyYXRpb25oYW5kbGVmcmFj
dGlvbnMKK3N0YXRpYyB2b2lkIGhhbmRsZUZyYWN0aW9uKER1cmF0aW9uJiBkdXJhdGlvbiwgaW50
IGZhY3RvciwgU3RyaW5nVmlldyBmcmFjdGlvblN0cmluZywgVGVtcG9yYWxVbml0IGZyYWN0aW9u
VHlwZSkKK3sKKyAgICBBU1NFUlQoZnJhY3Rpb25TdHJpbmcubGVuZ3RoKCkpOworICAgIEFTU0VS
VChmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxVbml0OjpIb3VyIHx8IGZyYWN0aW9uVHlwZSA9PSBU
ZW1wb3JhbFVuaXQ6Ok1pbnV0ZSB8fCBmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxVbml0OjpTZWNv
bmQpOworCisgICAgaWYgKGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6OlNlY29uZCkgewor
ICAgICAgICBhdXRvIHBhZGRlZCA9IG1ha2VTdHJpbmcoZnJhY3Rpb25TdHJpbmcsICIwMDAwMDAw
MCIpOworICAgICAgICBTdHJpbmdWaWV3IHBhZGRlZFZpZXcgeyBwYWRkZWQgfTsKKyAgICAgICAg
ZHVyYXRpb24uc2V0TWlsbGlzZWNvbmRzKGZhY3RvciAqIHBhcnNlSW50KHBhZGRlZFZpZXcuc3Vi
c3RyaW5nKDAsIDMpLCAxMCkpOworICAgICAgICBkdXJhdGlvbi5zZXRNaWNyb3NlY29uZHMoZmFj
dG9yICogcGFyc2VJbnQocGFkZGVkVmlldy5zdWJzdHJpbmcoMywgMyksIDEwKSk7CisgICAgICAg
IGR1cmF0aW9uLnNldE5hbm9zZWNvbmRzKGZhY3RvciAqIHBhcnNlSW50KHBhZGRlZFZpZXcuc3Vi
c3RyaW5nKDYsIDMpLCAxMCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZG91Ymxl
IGZyYWN0aW9uID0gZmFjdG9yICogcGFyc2VJbnQoZnJhY3Rpb25TdHJpbmcsIDEwKSAvIHN0ZDo6
cG93KDEwLCBmcmFjdGlvblN0cmluZy5sZW5ndGgoKSk7CisgICAgaWYgKCFmcmFjdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6Okhv
dXIpIHsKKyAgICAgICAgZnJhY3Rpb24gKj0gNjA7CisgICAgICAgIGR1cmF0aW9uLnNldE1pbnV0
ZXMoc3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgICAgICBmcmFjdGlvbiA9IHN0ZDo6Zm1vZChm
cmFjdGlvbiwgMSk7CisgICAgICAgIGlmICghZnJhY3Rpb24pCisgICAgICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZnJhY3Rpb24gKj0gNjA7CisgICAgZHVyYXRpb24uc2V0U2Vjb25kcyhz
dGQ6OnRydW5jKGZyYWN0aW9uKSk7CisgICAgZnJhY3Rpb24gPSBzdGQ6OmZtb2QoZnJhY3Rpb24s
IDEpOworICAgIGlmICghZnJhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGZyYWN0aW9u
ICo9IDEwMDA7CisgICAgZHVyYXRpb24uc2V0TWlsbGlzZWNvbmRzKHN0ZDo6dHJ1bmMoZnJhY3Rp
b24pKTsKKyAgICBmcmFjdGlvbiA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMSk7CisgICAgaWYgKCFm
cmFjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhY3Rpb24gKj0gMTAwMDsKKyAgICBk
dXJhdGlvbi5zZXRNaWNyb3NlY29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgIGZyYWN0
aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9uLCAxKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAgICAg
ICByZXR1cm47CisKKyAgICBkdXJhdGlvbi5zZXROYW5vc2Vjb25kcyhzdGQ6OnRydW5jKGZyYWN0
aW9uICogMTAwMCkpOworfQorCisvLyBQYXJzZVRlbXBvcmFsRHVyYXRpb25TdHJpbmcgKCBpc29T
dHJpbmcgKQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9y
YWwtcGFyc2V0ZW1wb3JhbGR1cmF0aW9uc3RyaW5nCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgorc3RhdGljIHN0ZDo6b3B0aW9uYWw8RHVyYXRpb24+IHBhcnNlRHVyYXRpb24oU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQoreworICAgIC8vIElTTyA4
NjAxIGR1cmF0aW9uIHN0cmluZ3MgYXJlIGxpa2UgIi1QMVkyTTNXNERUNUg2TTcuMTIzNDU2Nzg5
UyIuIE5vdGVzOgorICAgIC8vIC0gY2FzZSBpbnNlbnNpdGl2ZQorICAgIC8vIC0gc2lnbjogKyAt
IOKIkihVKzIyMTIpCisgICAgLy8gLSBzZXBhcmF0b3I6IC4gLAorICAgIC8vIC0gVCBpcyBwcmVz
ZW50IGlmZiB0aGVyZSBpcyBhIHRpbWUgcGFydAorICAgIC8vIC0gaW50ZWdyYWwgcGFydHMgY2Fu
IGhhdmUgYW55IG51bWJlciBvZiBkaWdpdHMgYnV0IGZyYWN0aW9uYWwgcGFydHMgaGF2ZSBhdCBt
b3N0IDkKKyAgICAvLyAtIGhvdXJzIGFuZCBtaW51dGVzIGNhbiBoYXZlIGZyYWN0aW9uYWwgcGFy
dHMgdG9vLCBidXQgb25seSBhcyB0aGUgTEFTVCBwYXJ0IG9mIHRoZSBzdHJpbmcKKyAgICBpZiAo
YnVmZmVyLmxlbmd0aFJlbWFpbmluZygpIDwgMykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIER1cmF0aW9uIHJlc3VsdCB7IH07CisKKyAgICBpbnQgZmFjdG9yID0gMTsKKyAg
ICBpZiAoKmJ1ZmZlciA9PSAnKycpCisgICAgICAgIGJ1ZmZlci5hZHZhbmNlKCk7CisgICAgZWxz
ZSBpZiAoKmJ1ZmZlciA9PSAnLScgfHwgKmJ1ZmZlciA9PSAweDIyMTIpIHsKKyAgICAgICAgZmFj
dG9yID0gLTE7CisgICAgICAgIGJ1ZmZlci5hZHZhbmNlKCk7CisgICAgfQorCisgICAgaWYgKHRv
QVNDSUlVcHBlcigqYnVmZmVyKSAhPSAnUCcpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBidWZmZXIuYWR2YW5jZSgpOworICAgIGZvciAodW5zaWduZWQgZGF0ZVBhcnRJbmRl
eCA9IDA7IGRhdGVQYXJ0SW5kZXggPCA0ICYmIGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkgJiYgaXNBU0NJSURpZ2l0KCpidWZmZXIpOyBidWZmZXIuYWR2YW5jZSgpKSB7CisgICAgICAg
IHVuc2lnbmVkIGRpZ2l0cyA9IDE7CisgICAgICAgIHdoaWxlIChkaWdpdHMgPCBidWZmZXIubGVu
Z3RoUmVtYWluaW5nKCkgJiYgaXNBU0NJSURpZ2l0KGJ1ZmZlcltkaWdpdHNdKSkKKyAgICAgICAg
ICAgIGRpZ2l0cysrOworCisgICAgICAgIGRvdWJsZSBpbnRlZ2VyID0gZmFjdG9yICogcGFyc2VJ
bnQoeyBidWZmZXIucG9zaXRpb24oKSwgZGlnaXRzIH0sIDEwKTsKKyAgICAgICAgYnVmZmVyLmFk
dmFuY2VCeShkaWdpdHMpOworICAgICAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIGlmICh0b0FTQ0lJVXBwZXIoKmJ1ZmZl
cikgPT0gJ1knICYmICFkYXRlUGFydEluZGV4KSB7CisgICAgICAgICAgICByZXN1bHQuc2V0WWVh
cnMoaW50ZWdlcik7CisgICAgICAgICAgICBkYXRlUGFydEluZGV4ID0gMTsKKyAgICAgICAgfSBl
bHNlIGlmICh0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgPT0gJ00nICYmIGRhdGVQYXJ0SW5kZXggPCAy
KSB7CisgICAgICAgICAgICByZXN1bHQuc2V0TW9udGhzKGludGVnZXIpOworICAgICAgICAgICAg
ZGF0ZVBhcnRJbmRleCA9IDI7CisgICAgICAgIH0gZWxzZSBpZiAodG9BU0NJSVVwcGVyKCpidWZm
ZXIpID09ICdXJyAmJiBkYXRlUGFydEluZGV4IDwgMykgeworICAgICAgICAgICAgcmVzdWx0LnNl
dFdlZWtzKGludGVnZXIpOworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDM7CisgICAgICAg
IH0gZWxzZSBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpID09ICdEJykgeworICAgICAgICAgICAg
cmVzdWx0LnNldERheXMoaW50ZWdlcik7CisgICAgICAgICAgICBkYXRlUGFydEluZGV4ID0gNDsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0K
KworICAgIGlmIChidWZmZXIuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAg
IGlmIChidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPCAzIHx8IHRvQVNDSUlVcHBlcigqYnVmZmVy
KSAhPSAnVCcpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBidWZmZXIuYWR2
YW5jZSgpOworICAgIGZvciAodW5zaWduZWQgdGltZVBhcnRJbmRleCA9IDA7IHRpbWVQYXJ0SW5k
ZXggPCAzICYmIGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgaXNBU0NJSURpZ2l0
KCpidWZmZXIpOyBidWZmZXIuYWR2YW5jZSgpKSB7CisgICAgICAgIHVuc2lnbmVkIGRpZ2l0cyA9
IDE7CisgICAgICAgIHdoaWxlIChkaWdpdHMgPCBidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgJiYg
aXNBU0NJSURpZ2l0KGJ1ZmZlcltkaWdpdHNdKSkKKyAgICAgICAgICAgIGRpZ2l0cysrOworCisg
ICAgICAgIGRvdWJsZSBpbnRlZ2VyID0gZmFjdG9yICogcGFyc2VJbnQoeyBidWZmZXIucG9zaXRp
b24oKSwgZGlnaXRzIH0sIDEwKTsKKyAgICAgICAgYnVmZmVyLmFkdmFuY2VCeShkaWdpdHMpOwor
ICAgICAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgICAgIFN0cmluZ1ZpZXcgZnJhY3Rpb25hbFBhcnQ7CisgICAgICAgIGlmICgq
YnVmZmVyID09ICcuJyB8fCAqYnVmZmVyID09ICcsJykgeworICAgICAgICAgICAgYnVmZmVyLmFk
dmFuY2UoKTsKKyAgICAgICAgICAgIGRpZ2l0cyA9IDA7CisgICAgICAgICAgICB3aGlsZSAoZGln
aXRzIDwgYnVmZmVyLmxlbmd0aFJlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdChidWZmZXJbZGln
aXRzXSkpCisgICAgICAgICAgICAgICAgZGlnaXRzKys7CisgICAgICAgICAgICBpZiAoIWRpZ2l0
cyB8fCBkaWdpdHMgPiA5KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICAgICAgICAgIGZyYWN0aW9uYWxQYXJ0ID0geyBidWZmZXIucG9zaXRpb24oKSwgZGlnaXRz
IH07CisgICAgICAgICAgICBidWZmZXIuYWR2YW5jZUJ5KGRpZ2l0cyk7CisgICAgICAgICAgICBp
ZiAoYnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgPT0gJ0gnICYm
ICF0aW1lUGFydEluZGV4KSB7CisgICAgICAgICAgICByZXN1bHQuc2V0SG91cnMoaW50ZWdlcik7
CisgICAgICAgICAgICBpZiAoZnJhY3Rpb25hbFBhcnQpIHsKKyAgICAgICAgICAgICAgICBoYW5k
bGVGcmFjdGlvbihyZXN1bHQsIGZhY3RvciwgZnJhY3Rpb25hbFBhcnQsIFRlbXBvcmFsVW5pdDo6
SG91cik7CisgICAgICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9IDM7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICB0aW1lUGFydEluZGV4ID0gMTsKKyAgICAgICAgfSBlbHNl
IGlmICh0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgPT0gJ00nICYmIHRpbWVQYXJ0SW5kZXggPCAyKSB7
CisgICAgICAgICAgICByZXN1bHQuc2V0TWludXRlcyhpbnRlZ2VyKTsKKyAgICAgICAgICAgIGlm
IChmcmFjdGlvbmFsUGFydCkgeworICAgICAgICAgICAgICAgIGhhbmRsZUZyYWN0aW9uKHJlc3Vs
dCwgZmFjdG9yLCBmcmFjdGlvbmFsUGFydCwgVGVtcG9yYWxVbml0OjpNaW51dGUpOworICAgICAg
ICAgICAgICAgIHRpbWVQYXJ0SW5kZXggPSAzOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgdGltZVBhcnRJbmRleCA9IDI7CisgICAgICAgIH0gZWxzZSBpZiAodG9BU0NJSVVw
cGVyKCpidWZmZXIpID09ICdTJykgeworICAgICAgICAgICAgcmVzdWx0LnNldFNlY29uZHMoaW50
ZWdlcik7CisgICAgICAgICAgICBpZiAoZnJhY3Rpb25hbFBhcnQpCisgICAgICAgICAgICAgICAg
aGFuZGxlRnJhY3Rpb24ocmVzdWx0LCBmYWN0b3IsIGZyYWN0aW9uYWxQYXJ0LCBUZW1wb3JhbFVu
aXQ6OlNlY29uZCk7CisgICAgICAgICAgICB0aW1lUGFydEluZGV4ID0gMzsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChi
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjpvcHRpb25hbDxEdXJhdGlvbj4g
cGFyc2VEdXJhdGlvbihTdHJpbmdWaWV3IHN0cmluZykKK3sKKyAgICByZXR1cm4gcmVhZENoYXJh
Y3RlcnNGb3JQYXJzaW5nKHN0cmluZywgW10oYXV0byBidWZmZXIpIC0+IHN0ZDo6b3B0aW9uYWw8
RHVyYXRpb24+IHsKKyAgICAgICAgcmV0dXJuIHBhcnNlRHVyYXRpb24oYnVmZmVyKTsKKyAgICB9
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSVNPODYwMQorfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JU084NjAxLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JU084NjAxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGZlYTg5N2ZmZTcz
ZjdhYzdjZmM1YmIwZTgwNzhmNzg3MDFkM2MxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0lTTzg2MDEuaApAQCAtMCwwICsxLDU0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVtcG9yYWxPYmplY3QuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgSVNPODYwMSB7CisKK3N0cnVjdCBEdXJhdGlvbiB7
CisgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBzdGQ6OmFycmF5PGRvdWJsZSwgbnVtYmVyT2ZU
ZW1wb3JhbFVuaXRzPjo6Y29uc3RfaXRlcmF0b3I7CisKKyNkZWZpbmUgSlNDX0RFRklORV9TVUJE
VVJBVElPTl9GSUVMRChuYW1lLCBjYXBpdGFsaXplZE5hbWUpIFwKKyAgICBkb3VibGUgbmFtZSMj
cygpIGNvbnN0IHsgcmV0dXJuIGRhdGFbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0
OjpjYXBpdGFsaXplZE5hbWUpXTsgfSBcCisgICAgdm9pZCBzZXQjI2NhcGl0YWxpemVkTmFtZSMj
cyhkb3VibGUgdmFsdWUpIHsgZGF0YVtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6
OmNhcGl0YWxpemVkTmFtZSldID0gdmFsdWU7IH0KKyAgICBKU0NfVEVNUE9SQUxfVU5JVFMoSlND
X0RFRklORV9TVUJEVVJBVElPTl9GSUVMRCk7CisjdW5kZWYgSlNDX0RFRklORV9TVUJEVVJBVElP
Tl9GSUVMRAorCisgICAgZG91YmxlJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBkYXRh
W2ldOyB9CisgICAgY29uc3QgZG91YmxlJiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJl
dHVybiBkYXRhW2ldOyB9CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBkYXRhLmJlZ2luKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBkYXRhLmVuZCgpOyB9CisgICAgdm9pZCBjbGVhcigpIHsgZGF0YS5maWxsKDApOyB9CisKKyAg
ICBzdGQ6OmFycmF5PGRvdWJsZSwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzPiBkYXRhOworfTsKKwor
c3RkOjpvcHRpb25hbDxEdXJhdGlvbj4gcGFyc2VEdXJhdGlvbihTdHJpbmdWaWV3KTsKKworfSAv
LyBuYW1lc3BhY2UgSVNPODYwMQorfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggMTVmNWIwNjRlY2Jm
YzY1OGE5OTBkMmViNTk2MzViZjJiZGJlODg4Mi4uODZmYTRjMmJhNDJhZGJlZjBhYTVjZDk2Mjc4
NmQzZDMzMTVmYzIzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcApAQCAtMjAxLDYgKzIwMSw4IEBACiAjaW5jbHVkZSAiU3ltYm9sQ29u
c3RydWN0b3IuaCIKICNpbmNsdWRlICJTeW1ib2xPYmplY3QuaCIKICNpbmNsdWRlICJTeW1ib2xQ
cm90b3R5cGUuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCisjaW5jbHVkZSAiVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlRlbXBvcmFsT2JqZWN0LmgiCiAj
aW5jbHVkZSAiVk1UcmFwc0lubGluZXMuaCIKICNpbmNsdWRlICJXYXNtQ2FwYWJpbGl0aWVzLmgi
CkBAIC0xMjEyLDYgKzEyMTQsMTMgQEAgY2FwaXRhbE5hbWUgIyMgQ29uc3RydWN0b3IqIGxvd2Vy
TmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVGbGFnID8gY2FwaXRhbE5hbWUKICAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+SW50bCwgaW50bCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogCiAg
ICAgaWYgKE9wdGlvbnM6OnVzZVRlbXBvcmFsKCkpIHsKKyAgICAgICAgbV9kdXJhdGlvblN0cnVj
dHVyZS5pbml0TGF0ZXIoCisgICAgICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0
dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKTsKKyAgICAgICAgICAgICAg
ICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBkdXJhdGlvblByb3RvdHlwZSA9IFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0ZShpbml0LnZtLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qt
Pm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgICAgICAgICAgICAgaW5pdC5zZXQoVGVtcG9yYWxE
dXJhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGdsb2JhbE9iamVjdCwgZHVyYXRpb25Q
cm90b3R5cGUpKTsKKyAgICAgICAgICAgIH0pOworCiAgICAgICAgIFRlbXBvcmFsT2JqZWN0KiB0
ZW1wb3JhbCA9IFRlbXBvcmFsT2JqZWN0OjpjcmVhdGUodm0sIFRlbXBvcmFsT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUodm0sIHRoaXMpKTsKICAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIHZtLnByb3BlcnR5TmFtZXMtPlRlbXBvcmFsLCB0ZW1wb3JhbCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIH0KQEAgLTIwOTAs
NiArMjA5OSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2Vs
bCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKICAgICB0aGlzT2JqZWN0LT5tX2RhdGVUaW1lRm9y
bWF0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fbnVtYmVyRm9y
bWF0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogCisgICAgdGhpc09iamVjdC0+bV9kdXJhdGlv
blN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fbnVsbEdldHRlckZ1bmN0aW9uKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX251bGxTZXR0ZXJGdW5jdGlvbik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9udWxsU2V0dGVyU3RyaWN0RnVuY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggMTc1YjhiNmI5MTQzNmI2OTNmZmQzMWRmYmM2
Nzg3YTQxNTQ2ZDg5Zi4uNThiZTRhMDM3ZGZiOGFiOTk3MzcxMWRhNmZmYTBiZjdmYWI5YzAxMiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBA
IC0zMjQsNiArMzI0LDggQEAgcHVibGljOgogICAgIExhenlDbGFzc1N0cnVjdHVyZSBtX2RhdGVU
aW1lRm9ybWF0U3RydWN0dXJlOwogICAgIExhenlDbGFzc1N0cnVjdHVyZSBtX251bWJlckZvcm1h
dFN0cnVjdHVyZTsKIAorICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJl
PiBtX2R1cmF0aW9uU3RydWN0dXJlOworCiAgICAgV3JpdGVCYXJyaWVyPE51bGxHZXR0ZXJGdW5j
dGlvbj4gbV9udWxsR2V0dGVyRnVuY3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPE51bGxTZXR0ZXJG
dW5jdGlvbj4gbV9udWxsU2V0dGVyRnVuY3Rpb247CiAgICAgV3JpdGVCYXJyaWVyPE51bGxTZXR0
ZXJGdW5jdGlvbj4gbV9udWxsU2V0dGVyU3RyaWN0RnVuY3Rpb247CkBAIC04NzAsNiArODcyLDgg
QEAgcHVibGljOgogICAgIEpTT2JqZWN0KiBudW1iZXJGb3JtYXRDb25zdHJ1Y3RvcigpIHsgcmV0
dXJuIG1fbnVtYmVyRm9ybWF0U3RydWN0dXJlLmNvbnN0cnVjdG9yKHRoaXMpOyB9CiAgICAgSlNP
YmplY3QqIG51bWJlckZvcm1hdFByb3RvdHlwZSgpIHsgcmV0dXJuIG1fbnVtYmVyRm9ybWF0U3Ry
dWN0dXJlLnByb3RvdHlwZSh0aGlzKTsgfQogCisgICAgU3RydWN0dXJlKiBkdXJhdGlvblN0cnVj
dHVyZSgpIHsgcmV0dXJuIG1fZHVyYXRpb25TdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CisKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQoYm9vbCk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCByZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKCkgY29uc3Q7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVy
YXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlv
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzgwZTZjNmUyZjFhNzg3OTUxYjg5NDBhMzVjMmNmMThmZWI2ZjIy
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBv
cmFsRHVyYXRpb24uY3BwCkBAIC0wLDAgKzEsNjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCisKKyNpbmNsdWRl
ICJJbnRsT2JqZWN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZShWTSYgdm0sIHVuc2lnbmVkIGluZGV4KQoreworICAg
IEFTU0VSVChpbmRleCA8IG51bWJlck9mVGVtcG9yYWxVbml0cyk7CisgICAgc3dpdGNoIChzdGF0
aWNfY2FzdDxUZW1wb3JhbFVuaXQ+KGluZGV4KSkgeworI2RlZmluZSBKU0NfVEVNUE9SQUxfRFVS
QVRJT05fUFJPUEVSVFlfTkFNRShuYW1lLCBjYXBpdGFsaXplZE5hbWUpIGNhc2UgVGVtcG9yYWxV
bml0OjpjYXBpdGFsaXplZE5hbWU6IHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lIyNzOyAK
KyAgICAgICAgSlNDX1RFTVBPUkFMX1VOSVRTKEpTQ19URU1QT1JBTF9EVVJBVElPTl9QUk9QRVJU
WV9OQU1FKQorI3VuZGVmIEpTQ19URU1QT1JBTF9EVVJBVElPTl9QUk9QRVJUWV9OQU1FCisgICAg
fQorfQorCitjb25zdCBDbGFzc0luZm8gVGVtcG9yYWxEdXJhdGlvbjo6c19pbmZvID0geyAiT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShUZW1wb3JhbER1cmF0aW9uKSB9OworCitUZW1wb3JhbER1cmF0aW9uKiBUZW1wb3JhbER1cmF0
aW9uOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ViZHVyYXRpb25zJiYg
c3ViZHVyYXRpb25zKQoreworICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFRlbXBvcmFsRHVyYXRpb24+KHZtLmhlYXApKSBUZW1wb3JhbER1cmF0aW9uKHZtLCBz
dHJ1Y3R1cmUsIFdURk1vdmUoc3ViZHVyYXRpb25zKSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworU3RydWN0dXJlKiBUZW1wb3JhbER1
cmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlRlbXBvcmFsRHVyYXRp
b24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ViZHVyYXRpb25zJiYgc3ViZHVyYXRp
b25zKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9zdWJkdXJhdGlvbnMoV1RG
TW92ZShzdWJkdXJhdGlvbnMpKQoreworfQorCit2b2lkIFRlbXBvcmFsRHVyYXRpb246OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKK30KKworLy8gSXNWYWxpZER1cmF0aW9uICgg
eWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxs
aXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMgKQorLy8gaHR0cHM6Ly90YzM5LmVz
L3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtaXN2YWxpZGR1cmF0aW9uCitzdGF0aWMg
Ym9vbCBpc1ZhbGlkRHVyYXRpb24oY29uc3QgVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25z
JiBzdWJkdXJhdGlvbnMpCit7CisgICAgaW50IHNpZ24gPSAwOworICAgIGZvciAoYXV0byB2YWx1
ZSA6IHN1YmR1cmF0aW9ucykgeworICAgICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodmFsdWUpIHx8
ICh2YWx1ZSA8IDAgJiYgc2lnbiA+IDApIHx8ICh2YWx1ZSA+IDAgJiYgc2lnbiA8IDApKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghc2lnbiAmJiB2YWx1ZSkKKyAg
ICAgICAgICAgIHNpZ24gPSB2YWx1ZSA+IDAgPyAxIDogLTE7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKKy8vIENyZWF0ZVRlbXBvcmFsRHVyYXRpb24gKCB5ZWFycywgbW9udGhzLCB3
ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9z
ZWNvbmRzLCBuYW5vc2Vjb25kcyBbICwgbmV3VGFyZ2V0IF0gKQorLy8gaHR0cHM6Ly90YzM5LmVz
L3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtY3JlYXRldGVtcG9yYWxkdXJhdGlvbgor
VGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6dHJ5Q3JlYXRlSWZWYWxpZChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdWJkdXJhdGlvbnMmJiBzdWJkdXJhdGlvbnMsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIWlz
VmFsaWREdXJhdGlvbihzdWJkdXJhdGlvbnMpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydGllcyBtdXN0IGJl
IGZpbml0ZSBhbmQgb2YgY29uc2lzdGVudCBzaWduIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICByZXR1cm4gVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1
cmUgPyBzdHJ1Y3R1cmUgOiBnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCksIFdURk1v
dmUoc3ViZHVyYXRpb25zKSk7Cit9CisKKy8vIFRvVGVtcG9yYWxEdXJhdGlvblJlY29yZCAoIHRl
bXBvcmFsRHVyYXRpb25MaWtlICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3Jh
bC8jc2VjLXRlbXBvcmFsLXRvdGVtcG9yYWxkdXJhdGlvbnJlY29yZAorVGVtcG9yYWxEdXJhdGlv
bjo6U3ViZHVyYXRpb25zIFRlbXBvcmFsRHVyYXRpb246OmZyb21PYmplY3QoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGR1cmF0aW9uTGlrZSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgQVNTRVJUKCFkdXJhdGlvbkxpa2UtPmluaGVyaXRzPFRlbXBvcmFsRHVy
YXRpb24+KHZtKSk7CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0OworICAgIGF1dG8gaGFzUmVs
ZXZhbnRQcm9wZXJ0eSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVy
T2ZUZW1wb3JhbFVuaXRzOyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGR1cmF0aW9u
TGlrZS0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKHZtLCBpKSk7CisKKyAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdFtpXSA9IDA7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGhhc1JlbGV2YW50UHJv
cGVydHkgPSB0cnVlOworICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZS50b051bWJlcihnbG9iYWxP
YmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
ICAgIGlmICghaXNJbnRlZ2VyKHJlc3VsdFtpXSkpIHsKKyAgICAgICAgICAgIHRocm93UmFuZ2VF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydGllcyBt
dXN0IGJlIGludGVnZXJzIl9zKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoIWhhc1JlbGV2YW50UHJvcGVydHkpIHsKKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIk9iamVjdCBtdXN0IGNvbnRhaW4gYXQgbGVh
c3Qgb25lIFRlbXBvcmFsLkR1cmF0aW9uIHByb3BlcnR5Il9zKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBUb1RlbXBvcmFsRHVyYXRp
b24gKCBpdGVtICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRl
bXBvcmFsLXRvdGVtcG9yYWxkdXJhdGlvbgorVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJh
dGlvbjo6dG9EdXJhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0
ZW1WYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKGl0ZW1WYWx1ZS5pbmhl
cml0czxUZW1wb3JhbER1cmF0aW9uPih2bSkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8VGVtcG9y
YWxEdXJhdGlvbio+KGl0ZW1WYWx1ZSk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmlzT2JqZWN0KCkp
CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgVGVtcG9yYWxEdXJhdGlvbjo6dHJ5
Q3JlYXRlSWZWYWxpZChnbG9iYWxPYmplY3QsIGZyb21PYmplY3QoZ2xvYmFsT2JqZWN0LCBhc09i
amVjdChpdGVtVmFsdWUpKSkpOworCisgICAgU3RyaW5nIHN0cmluZyA9IGl0ZW1WYWx1ZS50b1dU
RlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOworCisgICAgYXV0byBwYXJzZWRTdWJkdXJhdGlvbnMgPSBJU084NjAxOjpwYXJzZUR1
cmF0aW9uKHN0cmluZyk7CisgICAgaWYgKCFwYXJzZWRTdWJkdXJhdGlvbnMpIHsKKyAgICAgICAg
dGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDb3VsZCBub3QgcGFyc2UgRHVy
YXRpb24gc3RyaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVhdGVJZlZh
bGlkKGdsb2JhbE9iamVjdCwgV1RGTW92ZShwYXJzZWRTdWJkdXJhdGlvbnMudmFsdWUoKSkpKTsK
K30KKworVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6ZnJvbShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZW1WYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmluaGVyaXRzPFRlbXBvcmFs
RHVyYXRpb24+KHZtKSkgeworICAgICAgICBTdWJkdXJhdGlvbnMgY2xvbmVkID0ganNDYXN0PFRl
bXBvcmFsRHVyYXRpb24qPihpdGVtVmFsdWUpLT5tX3N1YmR1cmF0aW9uczsKKyAgICAgICAgcmV0
dXJuIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0
cnVjdHVyZSgpLCBXVEZNb3ZlKGNsb25lZCkpOworICAgIH0KKworICAgIHJldHVybiB0b0R1cmF0
aW9uKGdsb2JhbE9iamVjdCwgaXRlbVZhbHVlKTsKK30KKworLy8gVG90YWxEdXJhdGlvbk5hbm9z
ZWNvbmRzICggZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWlj
cm9zZWNvbmRzLCBuYW5vc2Vjb25kcywgb2Zmc2V0U2hpZnQgKQorLy8gaHR0cHM6Ly90YzM5LmVz
L3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtdG90YWxkdXJhdGlvbm5hbm9zZWNvbmRz
CitzdGF0aWMgZG91YmxlIHRvdGFsTmFub3NlY29uZHMoVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVy
YXRpb25zJiBzdWJkdXJhdGlvbnMpCit7CisgICAgYXV0byBob3VycyA9IDI0ICogc3ViZHVyYXRp
b25zLmRheXMoKSArIHN1YmR1cmF0aW9ucy5ob3VycygpOworICAgIGF1dG8gbWludXRlcyA9IDYw
ICogaG91cnMgKyBzdWJkdXJhdGlvbnMubWludXRlcygpOworICAgIGF1dG8gc2Vjb25kcyA9IDYw
ICogbWludXRlcyArIHN1YmR1cmF0aW9ucy5zZWNvbmRzKCk7CisgICAgYXV0byBtaWxsaXNlY29u
ZHMgPSAxMDAwICogc2Vjb25kcyArIHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMoKTsKKyAgICBh
dXRvIG1pY3Jvc2Vjb25kcyA9IDEwMDAgKiBtaWxsaXNlY29uZHMgKyBzdWJkdXJhdGlvbnMubWlj
cm9zZWNvbmRzKCk7CisgICAgcmV0dXJuIDEwMDAgKiBtaWNyb3NlY29uZHMgKyBzdWJkdXJhdGlv
bnMubmFub3NlY29uZHMoKTsKK30KKworSlNWYWx1ZSBUZW1wb3JhbER1cmF0aW9uOjpjb21wYXJl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWVPbmUsIEpTVmFsdWUg
dmFsdWVUd28pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIG9uZSA9IHRvRHVy
YXRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZU9uZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKworICAgIGF1dG8qIHR3byA9IHRvRHVyYXRpb24oZ2xvYmFsT2JqZWN0LCB2
YWx1ZVR3byk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlm
IChvbmUtPnllYXJzKCkgfHwgdHdvLT55ZWFycygpIHx8IG9uZS0+bW9udGhzKCkgfHwgdHdvLT5t
b250aHMoKSB8fCBvbmUtPndlZWtzKCkgfHwgdHdvLT53ZWVrcygpKSB7CisgICAgICAgIHRocm93
UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IGNvbXBhcmUgYSBkdXJhdGlv
biBvZiB5ZWFycywgbW9udGhzLCBvciB3ZWVrcyB3aXRob3V0IGEgcmVsYXRpdmVUbyBvcHRpb24i
X3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGF1dG8gbnNPbmUgPSB0b3Rh
bE5hbm9zZWNvbmRzKG9uZS0+bV9zdWJkdXJhdGlvbnMpOworICAgIGF1dG8gbnNUd28gPSB0b3Rh
bE5hbm9zZWNvbmRzKHR3by0+bV9zdWJkdXJhdGlvbnMpOworICAgIHJldHVybiBqc051bWJlcihu
c09uZSA+IG5zVHdvID8gMSA6IG5zT25lIDwgbnNUd28gPyAtMSA6IDApOworfQorCitpbnQgVGVt
cG9yYWxEdXJhdGlvbjo6c2lnbihjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMm
IHN1YmR1cmF0aW9ucykKK3sKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiBzdWJkdXJhdGlvbnMpIHsK
KyAgICAgICAgaWYgKHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAg
ICBpZiAodmFsdWUgPiAwKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0
dXJuIDA7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0
aW9uOjp3aXRoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBkdXJhdGlv
bkxpa2UpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN1YmR1cmF0aW9ucyBy
ZXN1bHQ7CisgICAgYXV0byBoYXNSZWxldmFudFByb3BlcnR5ID0gZmFsc2U7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlRlbXBvcmFsVW5pdHM7IGkrKykgeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gZHVyYXRpb25MaWtlLT5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUodm0sIGkpKTsKKworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAg
ICAgICAgcmVzdWx0W2ldID0gbV9zdWJkdXJhdGlvbnNbaV07CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGhhc1JlbGV2YW50UHJvcGVydHkgPSB0cnVlOworICAg
ICAgICByZXN1bHRbaV0gPSB2YWx1ZS50b051bWJlcihnbG9iYWxPYmplY3QpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIGlmICghaXNJbnRlZ2Vy
KHJlc3VsdFtpXSkpIHsKKyAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydGllcyBtdXN0IGJlIGludGVnZXJzIl9z
KTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IWhhc1JlbGV2YW50UHJvcGVydHkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIk9iamVjdCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIFRlbXBvcmFsLkR1
cmF0aW9uIHByb3BlcnR5Il9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9y
YWxEdXJhdGlvbjo6bmVnYXRlZCgpIGNvbnN0Cit7CisgICAgU3ViZHVyYXRpb25zIHJlc3VsdDsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsgaSsrKQor
ICAgICAgICByZXN1bHRbaV0gPSAtbV9zdWJkdXJhdGlvbnNbaV07CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zIFRlbXBvcmFsRHVyYXRpb246
OmFicygpIGNvbnN0Cit7CisgICAgU3ViZHVyYXRpb25zIHJlc3VsdDsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsgaSsrKQorICAgICAgICByZXN1bHRb
aV0gPSBzdGQ6OmFicyhtX3N1YmR1cmF0aW9uc1tpXSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworLy8gRGVmYXVsdFRlbXBvcmFsTGFyZ2VzdFVuaXQgKCB5ZWFycywgbW9udGhzLCB3ZWVrcywg
ZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRz
ICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLWRl
ZmF1bHR0ZW1wb3JhbGxhcmdlc3R1bml0CitUZW1wb3JhbFVuaXQgVGVtcG9yYWxEdXJhdGlvbjo6
bGFyZ2VzdFN1YmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICB1aW50OF90IGluZGV4ID0gMDsKKyAg
ICB3aGlsZSAoaW5kZXggPCBudW1iZXJPZlRlbXBvcmFsVW5pdHMgLSAxICYmICFtX3N1YmR1cmF0
aW9uc1tpbmRleF0pCisgICAgICAgIGluZGV4Kys7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRl
bXBvcmFsVW5pdD4oaW5kZXgpOworfQorCisvLyBCYWxhbmNlRHVyYXRpb24gKCBkYXlzLCBob3Vy
cywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMsIG5hbm9zZWNv
bmRzLCBsYXJnZXN0VW5pdCBbICwgcmVsYXRpdmVUbyBdICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9w
cm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLWJhbGFuY2VkdXJhdGlvbgordm9pZCBUZW1w
b3JhbER1cmF0aW9uOjpiYWxhbmNlKFN1YmR1cmF0aW9ucyYgc3ViZHVyYXRpb25zLCBUZW1wb3Jh
bFVuaXQgbGFyZ2VzdFVuaXQpCit7CisgICAgYXV0byBuYW5vc2Vjb25kcyA9IHRvdGFsTmFub3Nl
Y29uZHMoc3ViZHVyYXRpb25zKTsKKyAgICBzdWJkdXJhdGlvbnMuY2xlYXIoKTsKKworICAgIGlm
IChsYXJnZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6OkRheSkgeworICAgICAgICBzdGF0aWMgY29u
c3QgZG91YmxlIG5hbm9zZWNvbmRzUGVyRGF5ID0gMjQuMCAqIDYwICogNjAgKiAxMDAwICogMTAw
MCAqIDEwMDA7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXREYXlzKHN0ZDo6dHJ1bmMobmFub3Nl
Y29uZHMgLyBuYW5vc2Vjb25kc1BlckRheSkpOworICAgICAgICBuYW5vc2Vjb25kcyA9IHN0ZDo6
Zm1vZChuYW5vc2Vjb25kcywgbmFub3NlY29uZHNQZXJEYXkpOworICAgIH0KKworICAgIGRvdWJs
ZSBtaWNyb3NlY29uZHMgPSBzdGQ6OnRydW5jKG5hbm9zZWNvbmRzIC8gMTAwMCk7CisgICAgZG91
YmxlIG1pbGxpc2Vjb25kcyA9IHN0ZDo6dHJ1bmMobWljcm9zZWNvbmRzIC8gMTAwMCk7CisgICAg
ZG91YmxlIHNlY29uZHMgPSBzdGQ6OnRydW5jKG1pbGxpc2Vjb25kcyAvIDEwMDApOworICAgIGRv
dWJsZSBtaW51dGVzID0gc3RkOjp0cnVuYyhzZWNvbmRzIC8gNjApOworICAgIGlmIChsYXJnZXN0
VW5pdCA8PSBUZW1wb3JhbFVuaXQ6OkhvdXIpIHsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5h
bm9zZWNvbmRzKHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJh
dGlvbnMuc2V0TWljcm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDApKTsKKyAg
ICAgICAgc3ViZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZtb2QobWlsbGlzZWNvbmRz
LCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHN0ZDo6Zm1vZChzZWNv
bmRzLCA2MCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWludXRlcyhzdGQ6OmZtb2QobWlu
dXRlcywgNjApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldEhvdXJzKHN0ZDo6dHJ1bmMobWlu
dXRlcyAvIDYwKSk7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBUZW1wb3JhbFVuaXQ6
Ok1pbnV0ZSkgeworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjpmbW9k
KG5hbm9zZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29u
ZHMoc3RkOjpmbW9kKG1pY3Jvc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMu
c2V0TWlsbGlzZWNvbmRzKHN0ZDo6Zm1vZChtaWxsaXNlY29uZHMsIDEwMDApKTsKKyAgICAgICAg
c3ViZHVyYXRpb25zLnNldFNlY29uZHMoc3RkOjpmbW9kKHNlY29uZHMsIDYwKSk7CisgICAgICAg
IHN1YmR1cmF0aW9ucy5zZXRNaW51dGVzKG1pbnV0ZXMpOworICAgIH0gZWxzZSBpZiAobGFyZ2Vz
dFVuaXQgPT0gVGVtcG9yYWxVbml0OjpTZWNvbmQpIHsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNl
dE5hbm9zZWNvbmRzKHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJk
dXJhdGlvbnMuc2V0TWljcm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDApKTsK
KyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZtb2QobWlsbGlzZWNv
bmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHNlY29uZHMpOwor
ICAgIH0gZWxzZSBpZiAobGFyZ2VzdFVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCkg
eworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjpmbW9kKG5hbm9zZWNv
bmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMoc3RkOjpm
bW9kKG1pY3Jvc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlz
ZWNvbmRzKG1pbGxpc2Vjb25kcyk7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBUZW1w
b3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kKSB7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXROYW5vc2Vj
b25kcyhzdGQ6OmZtb2QobmFub3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25z
LnNldE1pY3Jvc2Vjb25kcyhtaWNyb3NlY29uZHMpOworICAgIH0gZWxzZQorICAgICAgICBzdWJk
dXJhdGlvbnMuc2V0TmFub3NlY29uZHMobmFub3NlY29uZHMpOworfQorCitUZW1wb3JhbER1cmF0
aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6YWRkKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgb3RoZXJWYWx1ZSkgY29uc3QKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgYXV0byogb3RoZXIgPSB0b0R1cmF0aW9uKGdsb2JhbE9iamVjdCwgb3RoZXJW
YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGF1dG8g
bGFyZ2VzdFVuaXQgPSBzdGQ6Om1pbihsYXJnZXN0U3ViZHVyYXRpb24oKSwgb3RoZXItPmxhcmdl
c3RTdWJkdXJhdGlvbigpKTsKKyAgICBpZiAobGFyZ2VzdFVuaXQgPD0gVGVtcG9yYWxVbml0OjpX
ZWVrKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fu
bm90IGFkZCBhIGR1cmF0aW9uIG9mIHllYXJzLCBtb250aHMsIG9yIHdlZWtzIHdpdGhvdXQgYSBy
ZWxhdGl2ZVRvIG9wdGlvbiJfcyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
U3ViZHVyYXRpb25zIHJlc3VsdCB7CisgICAgICAgIDAsIDAsIDAsIGRheXMoKSArIG90aGVyLT5k
YXlzKCksCisgICAgICAgIGhvdXJzKCkgKyBvdGhlci0+aG91cnMoKSwgbWludXRlcygpICsgb3Ro
ZXItPm1pbnV0ZXMoKSwgc2Vjb25kcygpICsgb3RoZXItPnNlY29uZHMoKSwKKyAgICAgICAgbWls
bGlzZWNvbmRzKCkgKyBvdGhlci0+bWlsbGlzZWNvbmRzKCksIG1pY3Jvc2Vjb25kcygpICsgb3Ro
ZXItPm1pY3Jvc2Vjb25kcygpLCBuYW5vc2Vjb25kcygpICsgb3RoZXItPm5hbm9zZWNvbmRzKCkK
KyAgICB9OworCisgICAgYmFsYW5jZShyZXN1bHQsIGxhcmdlc3RVbml0KTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJh
dGlvbjo6c3VidHJhY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvdGhl
clZhbHVlKSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBvdGhlciA9
IHRvRHVyYXRpb24oZ2xvYmFsT2JqZWN0LCBvdGhlclZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgYXV0byBsYXJnZXN0VW5pdCA9IHN0ZDo6bWluKGxh
cmdlc3RTdWJkdXJhdGlvbigpLCBvdGhlci0+bGFyZ2VzdFN1YmR1cmF0aW9uKCkpOworICAgIGlm
IChsYXJnZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6OldlZWspIHsKKyAgICAgICAgdGhyb3dSYW5n
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3Qgc3VidHJhY3QgYSBkdXJhdGlvbiBv
ZiB5ZWFycywgbW9udGhzLCBvciB3ZWVrcyB3aXRob3V0IGEgcmVsYXRpdmVUbyBvcHRpb24iX3Mp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQg
eworICAgICAgICAwLCAwLCAwLCBkYXlzKCkgLSBvdGhlci0+ZGF5cygpLAorICAgICAgICBob3Vy
cygpIC0gb3RoZXItPmhvdXJzKCksIG1pbnV0ZXMoKSAtIG90aGVyLT5taW51dGVzKCksIHNlY29u
ZHMoKSAtIG90aGVyLT5zZWNvbmRzKCksCisgICAgICAgIG1pbGxpc2Vjb25kcygpIC0gb3RoZXIt
Pm1pbGxpc2Vjb25kcygpLCBtaWNyb3NlY29uZHMoKSAtIG90aGVyLT5taWNyb3NlY29uZHMoKSwg
bmFub3NlY29uZHMoKSAtIG90aGVyLT5uYW5vc2Vjb25kcygpCisgICAgfTsKKworICAgIGJhbGFu
Y2UocmVzdWx0LCBsYXJnZXN0VW5pdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gUm91
bmREdXJhdGlvbiAoIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywg
c2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMsIG5hbm9zZWNvbmRzLCBpbmNyZW1l
bnQsIHVuaXQsIHJvdW5kaW5nTW9kZSBbICwgcmVsYXRpdmVUbyBdICkKKy8vIGh0dHBzOi8vdGMz
OS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXJvdW5kZHVyYXRpb24KK2RvdWJs
ZSBUZW1wb3JhbER1cmF0aW9uOjpyb3VuZChUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMm
IHN1YmR1cmF0aW9ucywgZG91YmxlIGluY3JlbWVudCwgVGVtcG9yYWxVbml0IHVuaXQsIFJvdW5k
aW5nTW9kZSBtb2RlKQoreworICAgIEFTU0VSVCh1bml0ID49IFRlbXBvcmFsVW5pdDo6RGF5KTsK
KyAgICBkb3VibGUgcmVtYWluZGVyID0gMDsKKworICAgIGlmICh1bml0ID09IFRlbXBvcmFsVW5p
dDo6RGF5KSB7CisgICAgICAgIGF1dG8gb3JpZ2luYWxEYXlzID0gc3ViZHVyYXRpb25zLmRheXMo
KTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldERheXMoMCk7CisgICAgICAgIGF1dG8gbmFub3Nl
Y29uZHMgPSB0b3RhbE5hbm9zZWNvbmRzKHN1YmR1cmF0aW9ucyk7CisKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBuYW5vc2Vjb25kc1BlckRheSA9IDI0LjAgKiA2MCAqIDYwICogMTAwMCAq
IDEwMDAgKiAxMDAwOworICAgICAgICBhdXRvIGZyYWN0aW9uYWxEYXlzID0gb3JpZ2luYWxEYXlz
ICsgbmFub3NlY29uZHMgLyBuYW5vc2Vjb25kc1BlckRheTsKKyAgICAgICAgYXV0byBuZXdEYXlz
ID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsRGF5cywgaW5jcmVtZW50LCBtb2Rl
KTsKKyAgICAgICAgcmVtYWluZGVyID0gZnJhY3Rpb25hbERheXMgLSBuZXdEYXlzOworICAgICAg
ICBzdWJkdXJhdGlvbnMuc2V0RGF5cyhuZXdEYXlzKTsKKyAgICB9IGVsc2UgaWYgKHVuaXQgPT0g
VGVtcG9yYWxVbml0OjpIb3VyKSB7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbFNlY29uZHMgPSBz
dWJkdXJhdGlvbnMuc2Vjb25kcygpICsgc3ViZHVyYXRpb25zLm1pbGxpc2Vjb25kcygpICogMWUt
MyArIHN1YmR1cmF0aW9ucy5taWNyb3NlY29uZHMoKSAqIDFlLTYgKyBzdWJkdXJhdGlvbnMubmFu
b3NlY29uZHMoKSAqIDFlLTk7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbEhvdXJzID0gc3ViZHVy
YXRpb25zLmhvdXJzKCkgKyAoc3ViZHVyYXRpb25zLm1pbnV0ZXMoKSArIGZyYWN0aW9uYWxTZWNv
bmRzIC8gNjApIC8gNjA7CisgICAgICAgIGF1dG8gbmV3SG91cnMgPSByb3VuZE51bWJlclRvSW5j
cmVtZW50KGZyYWN0aW9uYWxIb3VycywgaW5jcmVtZW50LCBtb2RlKTsKKyAgICAgICAgcmVtYWlu
ZGVyID0gZnJhY3Rpb25hbEhvdXJzIC0gbmV3SG91cnM7CisgICAgICAgIHN1YmR1cmF0aW9ucy5z
ZXRIb3VycyhuZXdIb3Vycyk7CisgICAgfSBlbHNlIGlmICh1bml0ID09IFRlbXBvcmFsVW5pdDo6
TWludXRlKSB7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbFNlY29uZHMgPSBzdWJkdXJhdGlvbnMu
c2Vjb25kcygpICsgc3ViZHVyYXRpb25zLm1pbGxpc2Vjb25kcygpICogMWUtMyArIHN1YmR1cmF0
aW9ucy5taWNyb3NlY29uZHMoKSAqIDFlLTYgKyBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKSAq
IDFlLTk7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbE1pbnV0ZXMgPSBzdWJkdXJhdGlvbnMubWlu
dXRlcygpICsgZnJhY3Rpb25hbFNlY29uZHMgLyA2MDsKKyAgICAgICAgYXV0byBuZXdNaW51dGVz
ID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsTWludXRlcywgaW5jcmVtZW50LCBt
b2RlKTsKKyAgICAgICAgcmVtYWluZGVyID0gZnJhY3Rpb25hbE1pbnV0ZXMgLSBuZXdNaW51dGVz
OworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWludXRlcyhuZXdNaW51dGVzKTsKKyAgICB9IGVs
c2UgaWYgKHVuaXQgPT0gVGVtcG9yYWxVbml0OjpTZWNvbmQpIHsKKyAgICAgICAgYXV0byBmcmFj
dGlvbmFsU2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5zZWNvbmRzKCkgKyBzdWJkdXJhdGlvbnMubWls
bGlzZWNvbmRzKCkgKiAxZS0zICsgc3ViZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygpICogMWUtNiAr
IHN1YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygpICogMWUtOTsKKyAgICAgICAgYXV0byBuZXdTZWNv
bmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsU2Vjb25kcywgaW5jcmVtZW50
LCBtb2RlKTsKKyAgICAgICAgcmVtYWluZGVyID0gZnJhY3Rpb25hbFNlY29uZHMgLSBuZXdTZWNv
bmRzOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0U2Vjb25kcyhuZXdTZWNvbmRzKTsKKyAgICB9
IGVsc2UgaWYgKHVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCkgeworICAgICAgICBh
dXRvIGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgPSBzdWJkdXJhdGlvbnMubWlsbGlzZWNvbmRzKCkg
KyBzdWJkdXJhdGlvbnMubWljcm9zZWNvbmRzKCkgKiAxZS0zICsgc3ViZHVyYXRpb25zLm5hbm9z
ZWNvbmRzKCkgKiAxZS02OworICAgICAgICBhdXRvIG5ld01pbGxpc2Vjb25kcyA9IHJvdW5kTnVt
YmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbE1pbGxpc2Vjb25kcywgaW5jcmVtZW50LCBtb2RlKTsK
KyAgICAgICAgcmVtYWluZGVyID0gZnJhY3Rpb25hbE1pbGxpc2Vjb25kcyAtIG5ld01pbGxpc2Vj
b25kczsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhuZXdNaWxsaXNlY29u
ZHMpOworICAgIH0gZWxzZSBpZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kKSB7
CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbE1pY3Jvc2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5taWNy
b3NlY29uZHMoKSArIHN1YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygpICogMWUtMzsKKyAgICAgICAg
YXV0byBuZXdNaWNyb3NlY29uZHMgPSByb3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0aW9uYWxN
aWNyb3NlY29uZHMsIGluY3JlbWVudCwgbW9kZSk7CisgICAgICAgIHJlbWFpbmRlciA9IGZyYWN0
aW9uYWxNaWNyb3NlY29uZHMgLSBuZXdNaWNyb3NlY29uZHM7CisgICAgICAgIHN1YmR1cmF0aW9u
cy5zZXRNaWNyb3NlY29uZHMobmV3TWljcm9zZWNvbmRzKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBhdXRvIG5ld05hbm9zZWNvbmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChzdWJkdXJhdGlv
bnMubmFub3NlY29uZHMoKSwgaW5jcmVtZW50LCBtb2RlKTsKKyAgICAgICAgcmVtYWluZGVyID0g
c3ViZHVyYXRpb25zLm5hbm9zZWNvbmRzKCkgLSBuZXdOYW5vc2Vjb25kczsKKyAgICAgICAgc3Vi
ZHVyYXRpb25zLnNldE5hbm9zZWNvbmRzKG5ld05hbm9zZWNvbmRzKTsKKyAgICB9CisKKyAgICBm
b3IgKGF1dG8gaSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHVuaXQpICsgMXU7IGkgPCBudW1iZXJP
ZlRlbXBvcmFsVW5pdHM7IGkrKykKKyAgICAgICAgc3ViZHVyYXRpb25zW2ldID0gMDsKKworICAg
IHJldHVybiByZW1haW5kZXI7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBU
ZW1wb3JhbER1cmF0aW9uOjpyb3VuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIG9wdGlvbnNWYWx1ZSkgY29uc3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNP
YmplY3QqIG9wdGlvbnMgPSBpbnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlv
bnNWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGF1
dG8gc21hbGxlc3QgPSB0ZW1wb3JhbFNtYWxsZXN0VW5pdChnbG9iYWxPYmplY3QsIG9wdGlvbnMs
IHsgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFRlbXBv
cmFsVW5pdCBkZWZhdWx0TGFyZ2VzdFVuaXQgPSBsYXJnZXN0U3ViZHVyYXRpb24oKTsKKyAgICBh
dXRvIGxhcmdlc3QgPSB0ZW1wb3JhbExhcmdlc3RVbml0KGdsb2JhbE9iamVjdCwgb3B0aW9ucywg
eyB9LCBkZWZhdWx0TGFyZ2VzdFVuaXQpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICBpZiAoIXNtYWxsZXN0ICYmICFsYXJnZXN0KSB7CisgICAgICAgIHRocm93
UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHJvdW5kIHdpdGhvdXQgYSBz
bWFsbGVzdFVuaXQgb3IgbGFyZ2VzdFVuaXQgb3B0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisKKyAgICBpZiAoc21hbGxlc3QgJiYgbGFyZ2VzdCAmJiBzbWFsbGVzdC52YWx1
ZSgpIDwgbGFyZ2VzdC52YWx1ZSgpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAic21hbGxlc3RVbml0IG11c3QgYmUgc21hbGxlciB0aGFuIGxhcmdlc3RV
bml0Il9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBUZW1wb3JhbFVuaXQg
c21hbGxlc3RVbml0ID0gc21hbGxlc3QudmFsdWVfb3IoVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25k
KTsKKyAgICBUZW1wb3JhbFVuaXQgbGFyZ2VzdFVuaXQgPSBsYXJnZXN0LnZhbHVlX29yKHN0ZDo6
bWluKGRlZmF1bHRMYXJnZXN0VW5pdCwgc21hbGxlc3RVbml0KSk7CisKKyAgICBhdXRvIHJvdW5k
aW5nTW9kZSA9IGludGxPcHRpb248Um91bmRpbmdNb2RlPihnbG9iYWxPYmplY3QsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPnJvdW5kaW5nTW9kZSwKKyAgICAgICAgeyB7ICJjZWlsIl9zLCBS
b3VuZGluZ01vZGU6OkNlaWwgfSwgeyAiZmxvb3IiX3MsIFJvdW5kaW5nTW9kZTo6Rmxvb3IgfSwg
eyAidHJ1bmMiX3MsIFJvdW5kaW5nTW9kZTo6VHJ1bmMgfSwgeyAiaGFsZkV4cGFuZCJfcywgUm91
bmRpbmdNb2RlOjpIYWxmRXhwYW5kIH0gfSwKKyAgICAgICAgInJvdW5kaW5nTW9kZSBtdXN0IGJl
IGVpdGhlciBcImNlaWxcIiwgXCJmbG9vclwiLCBcInRydW5jXCIsIG9yIFwiaGFsZkV4cGFuZFwi
Il9zLCBSb3VuZGluZ01vZGU6OkhhbGZFeHBhbmQpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICBhdXRvIGluY3JlbWVudCA9IHRlbXBvcmFsUm91bmRpbmdJbmNy
ZW1lbnQoZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCBtYXhpbXVtUm91bmRpbmdJbmNyZW1lbnQoc21h
bGxlc3RVbml0KSwgZmFsc2UpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisKKyAgICBpZiAobGFyZ2VzdFVuaXQgPiBUZW1wb3JhbFVuaXQ6OlllYXIgJiYgKHllYXJzKCkg
fHwgbW9udGhzKCkgfHwgd2Vla3MoKSB8fCAoZGF5cygpICYmIGxhcmdlc3RVbml0IDwgVGVtcG9y
YWxVbml0OjpEYXkpKSkgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIkNhbm5vdCByb3VuZCBhIGR1cmF0aW9uIG9mIHllYXJzLCBtb250aHMsIG9yIHdlZWtz
IHdpdGhvdXQgYSByZWxhdGl2ZVRvIG9wdGlvbiJfcyk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgU3ViZHVyYXRpb25zIG5ld1N1YmR1cmF0aW9ucyA9IG1fc3ViZHVyYXRpb25z
OworICAgIHJvdW5kKG5ld1N1YmR1cmF0aW9ucywgaW5jcmVtZW50LCBzbWFsbGVzdFVuaXQsIHJv
dW5kaW5nTW9kZSk7CisgICAgYmFsYW5jZShuZXdTdWJkdXJhdGlvbnMsIGxhcmdlc3RVbml0KTsK
KyAgICByZXR1cm4gbmV3U3ViZHVyYXRpb25zOworfQorCitkb3VibGUgVGVtcG9yYWxEdXJhdGlv
bjo6dG90YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zVmFs
dWUpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBvcHRpb25z
ID0gaW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworCisgICAgU3RyaW5nIHVuaXRTdHJpbmcg
PSBpbnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1l
cy0+dW5pdCwgeyB9LCBudWxscHRyLCBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCAwKTsKKworICAgIGF1dG8gdW5pdFR5cGUgPSB0ZW1wb3JhbFVuaXRUeXBlKHVuaXRT
dHJpbmcpOworICAgIGlmICghdW5pdFR5cGUpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJ1bml0IGlzIGFuIGludmFsaWQgVGVtcG9yYWwgdW5pdCJfcyk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFRlbXBvcmFsVW5pdCB1bml0ID0gdW5p
dFR5cGUudmFsdWUoKTsKKyAgICBpZiAodW5pdCA+IFRlbXBvcmFsVW5pdDo6WWVhciAmJiAoeWVh
cnMoKSB8fCBtb250aHMoKSB8fCB3ZWVrcygpIHx8IChkYXlzKCkgJiYgdW5pdCA8IFRlbXBvcmFs
VW5pdDo6RGF5KSkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJDYW5ub3QgdG90YWwgYSBkdXJhdGlvbiBvZiB5ZWFycywgbW9udGhzLCBvciB3ZWVrcyB3
aXRob3V0IGEgcmVsYXRpdmVUbyBvcHRpb24iX3MpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIFN1YmR1cmF0aW9ucyBuZXdTdWJkdXJhdGlvbnMgPSBtX3N1YmR1cmF0aW9uczsK
KyAgICBiYWxhbmNlKG5ld1N1YmR1cmF0aW9ucywgdW5pdCk7CisgICAgZG91YmxlIHJlbWFpbmRl
ciA9IHJvdW5kKG5ld1N1YmR1cmF0aW9ucywgMSwgdW5pdCwgUm91bmRpbmdNb2RlOjpUcnVuYyk7
CisgICAgcmV0dXJuIG5ld1N1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90Pih1bml0KV0g
KyByZW1haW5kZXI7Cit9CisKK1N0cmluZyBUZW1wb3JhbER1cmF0aW9uOjp0b1N0cmluZyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSkgY29uc3QKK3sK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsR2V0T3B0
aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmICghb3B0aW9ucykKKyAgICAgICAgcmV0dXJu
IHRvU3RyaW5nKCk7CisKKyAgICBQcmVjaXNpb25EYXRhIGRhdGEgPSBzZWNvbmRzU3RyaW5nUHJl
Y2lzaW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKyAgICBBU1NFUlQoZGF0YS51bml0ID49IFRlbXBvcmFsVW5pdDo6U2Vjb25k
KTsKKworICAgIGF1dG8gcm91bmRpbmdNb2RlID0gaW50bE9wdGlvbjxSb3VuZGluZ01vZGU+KGds
b2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+cm91bmRpbmdNb2RlLAorICAg
ICAgICB7IHsgImNlaWwiX3MsIFJvdW5kaW5nTW9kZTo6Q2VpbCB9LCB7ICJmbG9vciJfcywgUm91
bmRpbmdNb2RlOjpGbG9vciB9LCB7ICJ0cnVuYyJfcywgUm91bmRpbmdNb2RlOjpUcnVuYyB9LCB7
ICJoYWxmRXhwYW5kIl9zLCBSb3VuZGluZ01vZGU6OkhhbGZFeHBhbmQgfSB9LAorICAgICAgICAi
cm91bmRpbmdNb2RlIG11c3QgYmUgZWl0aGVyIFwiY2VpbFwiLCBcImZsb29yXCIsIFwidHJ1bmNc
Iiwgb3IgXCJoYWxmRXhwYW5kXCIiX3MsIFJvdW5kaW5nTW9kZTo6VHJ1bmMpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAvLyBObyBuZWVkIHRvIG1ha2UgYSBu
ZXcgb2JqZWN0IGlmIHdlIHdlcmUgZ2l2ZW4gZXhwbGljaXQgZGVmYXVsdHMuCisgICAgaWYgKCFk
YXRhLnByZWNpc2lvbiAmJiByb3VuZGluZ01vZGUgPT0gUm91bmRpbmdNb2RlOjpUcnVuYykKKyAg
ICAgICAgcmV0dXJuIHRvU3RyaW5nKCk7CisKKyAgICBTdWJkdXJhdGlvbnMgbmV3U3ViZHVyYXRp
b25zID0gbV9zdWJkdXJhdGlvbnM7CisgICAgcm91bmQobmV3U3ViZHVyYXRpb25zLCBkYXRhLmlu
Y3JlbWVudCwgZGF0YS51bml0LCByb3VuZGluZ01vZGUpOworICAgIHJldHVybiB0b1N0cmluZyhu
ZXdTdWJkdXJhdGlvbnMsIGRhdGEucHJlY2lzaW9uKTsKK30KKworLy8gVGVtcG9yYWxEdXJhdGlv
blRvU3RyaW5nICggeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBz
ZWNvbmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIHByZWNpc2lv
biApCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC10
ZW1wb3JhbGR1cmF0aW9udG9zdHJpbmcKK1N0cmluZyBUZW1wb3JhbER1cmF0aW9uOjp0b1N0cmlu
Zyhjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9ucywgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4gcHJlY2lzaW9uKQoreworICAgIEFTU0VSVCghcHJlY2lzaW9u
IHx8IHByZWNpc2lvbi52YWx1ZSgpIDwgMTApOworCisgICAgYXV0byBiYWxhbmNlZE1pY3Jvc2Vj
b25kcyA9IHN1YmR1cmF0aW9ucy5taWNyb3NlY29uZHMoKSArIHN0ZDo6dHJ1bmMoc3ViZHVyYXRp
b25zLm5hbm9zZWNvbmRzKCkgLyAxMDAwKTsKKyAgICBhdXRvIGJhbGFuY2VkTmFub3NlY29uZHMg
PSBzdGQ6OmZtb2Qoc3ViZHVyYXRpb25zLm5hbm9zZWNvbmRzKCksIDEwMDApOworICAgIGF1dG8g
YmFsYW5jZWRNaWxsaXNlY29uZHMgPSBzdWJkdXJhdGlvbnMubWlsbGlzZWNvbmRzKCkgKyBzdGQ6
OnRydW5jKGJhbGFuY2VkTWljcm9zZWNvbmRzIC8gMTAwMCk7CisgICAgYmFsYW5jZWRNaWNyb3Nl
Y29uZHMgPSBzdGQ6OmZtb2QoYmFsYW5jZWRNaWNyb3NlY29uZHMsIDEwMDApOworICAgIGF1dG8g
YmFsYW5jZWRTZWNvbmRzID0gc3ViZHVyYXRpb25zLnNlY29uZHMoKSArIHN0ZDo6dHJ1bmMoYmFs
YW5jZWRNaWxsaXNlY29uZHMgLyAxMDAwKTsKKyAgICBiYWxhbmNlZE1pbGxpc2Vjb25kcyA9IHN0
ZDo6Zm1vZChiYWxhbmNlZE1pbGxpc2Vjb25kcywgMTAwMCk7CisKKyAgICAvLyBURU1QT1JBUlkh
IChwZW5kaW5nIHNwZWMgZGlzY3Vzc2lvbiBhYm91dCBtYXhpbXVtIHZhbHVlcyBAIGh0dHBzOi8v
Z2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXRlbXBvcmFsL2lzc3Vlcy8xNjA0KQorICAgIC8vIFdl
ICptdXN0KiBhdm9pZCBwcmludGluZyBhIG51bWJlciBpbiBzY2llbnRpZmljIG5vdGF0aW9uLCB3
aGljaCBpcyBjdXJyZW50bHkgb25seSBwb3NzaWJsZSBmb3IgbnVtYmVycyA8IDFlMjEKKyAgICAv
LyAoYSB2YWx1ZSBvcmlnaW5hdGluZyBpbiB0aGUgTnVtYmVyI3RvRml4ZWQgc3BlYyBhbmQgdXBo
ZWxkIGJ5IG91ciBOdW1iZXJUb1N0cmluZ0J1ZmZlcikuCisgICAgYXV0byBmb3JtYXRJbnRlZ2Vy
ID0gW10oZG91YmxlIHZhbHVlKSAtPiBkb3VibGUgeworICAgICAgICBhdXRvIGFic1ZhbHVlID0g
c3RkOjphYnModmFsdWUpOworICAgICAgICByZXR1cm4gTElLRUxZKGFic1ZhbHVlIDwgMWUyMSkg
PyBhYnNWYWx1ZSA6IDFlMjEgLSA2NTUzNzsKKyAgICB9OworCisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworCisgICAgYXV0byBzaWduID0gVGVtcG9yYWxEdXJhdGlvbjo6c2lnbihzdWJkdXJh
dGlvbnMpOworICAgIGlmIChzaWduIDwgMCkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJy0nKTsK
KworICAgIGJ1aWxkZXIuYXBwZW5kKCdQJyk7CisgICAgaWYgKHN1YmR1cmF0aW9ucy55ZWFycygp
KQorICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy55ZWFy
cygpKSwgJ1knKTsKKyAgICBpZiAoc3ViZHVyYXRpb25zLm1vbnRocygpKQorICAgICAgICBidWls
ZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy5tb250aHMoKSksICdNJyk7Cisg
ICAgaWYgKHN1YmR1cmF0aW9ucy53ZWVrcygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZChmb3Jt
YXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy53ZWVrcygpKSwgJ1cnKTsKKyAgICBpZiAoc3ViZHVyYXRp
b25zLmRheXMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihzdWJkdXJh
dGlvbnMuZGF5cygpKSwgJ0QnKTsKKworICAgIC8vIFRoZSB6ZXJvIHZhbHVlIGlzIGRpc3BsYXll
ZCBpbiBzZWNvbmRzLgorICAgIGF1dG8gdXNlc1NlY29uZHMgPSBiYWxhbmNlZFNlY29uZHMgfHwg
YmFsYW5jZWRNaWxsaXNlY29uZHMgfHwgYmFsYW5jZWRNaWNyb3NlY29uZHMgfHwgYmFsYW5jZWRO
YW5vc2Vjb25kcyB8fCAhc2lnbjsKKyAgICBpZiAoIXN1YmR1cmF0aW9ucy5ob3VycygpICYmICFz
dWJkdXJhdGlvbnMubWludXRlcygpICYmICF1c2VzU2Vjb25kcykKKyAgICAgICAgcmV0dXJuIGJ1
aWxkZXIudG9TdHJpbmcoKTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCdUJyk7CisgICAgaWYgKHN1
YmR1cmF0aW9ucy5ob3VycygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2Vy
KHN1YmR1cmF0aW9ucy5ob3VycygpKSwgJ0gnKTsKKyAgICBpZiAoc3ViZHVyYXRpb25zLm1pbnV0
ZXMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihzdWJkdXJhdGlvbnMu
bWludXRlcygpKSwgJ00nKTsKKyAgICBpZiAodXNlc1NlY29uZHMpIHsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoZm9ybWF0SW50ZWdlcihiYWxhbmNlZFNlY29uZHMpKTsKKworICAgICAgICBhdXRv
IGZyYWN0aW9uID0gc3RkOjphYnMoYmFsYW5jZWRNaWxsaXNlY29uZHMpICogMWU2ICsgc3RkOjph
YnMoYmFsYW5jZWRNaWNyb3NlY29uZHMpICogMWUzICsgc3RkOjphYnMoYmFsYW5jZWROYW5vc2Vj
b25kcyk7CisgICAgICAgIGlmICgoIXByZWNpc2lvbiAmJiBmcmFjdGlvbikgfHwgKHByZWNpc2lv
biAmJiBwcmVjaXNpb24udmFsdWUoKSkpIHsKKyAgICAgICAgICAgIGF1dG8gcGFkZGVkID0gbWFr
ZVN0cmluZygnLicsIHBhZCgnMCcsIDksIGZyYWN0aW9uKSk7CisgICAgICAgICAgICBpZiAocHJl
Y2lzaW9uKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZ1ZpZXcocGFkZGVk
KS5sZWZ0KHBhZGRlZC5sZW5ndGgoKSAtICg5IC0gcHJlY2lzaW9uLnZhbHVlKCkpKSk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxlbmd0aFdpdGhvdXRUcmFpbGlu
Z1plcm9lcyA9IHBhZGRlZC5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAocGFkZGVk
W2xlbmd0aFdpdGhvdXRUcmFpbGluZ1plcm9lcyAtIDFdID09ICcwJykKKyAgICAgICAgICAgICAg
ICAgICAgbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzLS07CisgICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoU3RyaW5nVmlldyhwYWRkZWQpLmxlZnQobGVuZ3RoV2l0aG91dFRyYWlsaW5n
WmVyb2VzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBidWlsZGVyLmFw
cGVuZCgnUycpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVtcG9yYWxEdXJhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5MjA0ZGM5NTM3YWFmNzYwMWUwZThkMTU3
MDU2YmRhMTlhZjczNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIklTTzg2MDEuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb24gZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAg
dXNpbmcgU3ViZHVyYXRpb25zID0gSVNPODYwMTo6RHVyYXRpb247CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS50ZW1w
b3JhbER1cmF0aW9uU3BhY2U8bW9kZT4oKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVGVtcG9yYWxE
dXJhdGlvbiogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgU3ViZHVyYXRpb25zJiYpOworICAgIHN0
YXRpYyBUZW1wb3JhbER1cmF0aW9uKiB0cnlDcmVhdGVJZlZhbGlkKEpTR2xvYmFsT2JqZWN0Kiwg
U3ViZHVyYXRpb25zJiYsIFN0cnVjdHVyZSogPSBudWxscHRyKTsKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisg
ICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb24qIHRvRHVyYXRp
b24oSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlv
biogZnJvbShKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU1ZhbHVlIGNv
bXBhcmUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKKworI2RlZmluZSBKU0Nf
REVGSU5FX1RFTVBPUkFMX0RVUkFUSU9OX0ZJRUxEKG5hbWUsIGNhcGl0YWxpemVkTmFtZSkgXAor
ICAgIGRvdWJsZSBuYW1lIyNzKCkgY29uc3QgeyByZXR1cm4gbV9zdWJkdXJhdGlvbnMubmFtZSMj
cygpOyB9IFwKKyAgICB2b2lkIHNldCMjY2FwaXRhbGl6ZWROYW1lIyNzKGRvdWJsZSB2YWx1ZSkg
eyBtX3N1YmR1cmF0aW9ucy5zZXQjI2NhcGl0YWxpemVkTmFtZSMjcyh2YWx1ZSk7IH0KKyAgICBK
U0NfVEVNUE9SQUxfVU5JVFMoSlNDX0RFRklORV9URU1QT1JBTF9EVVJBVElPTl9GSUVMRCk7Cisj
dW5kZWYgSlNDX0RFRklORV9URU1QT1JBTF9EVVJBVElPTl9GSUVMRAorCisgICAgaW50IHNpZ24o
KSBjb25zdCB7IHJldHVybiBzaWduKG1fc3ViZHVyYXRpb25zKTsgfQorCisgICAgU3ViZHVyYXRp
b25zIHdpdGgoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogZHVyYXRpb25MaWtlKSBjb25zdDsK
KyAgICBTdWJkdXJhdGlvbnMgbmVnYXRlZCgpIGNvbnN0OworICAgIFN1YmR1cmF0aW9ucyBhYnMo
KSBjb25zdDsKKyAgICBTdWJkdXJhdGlvbnMgYWRkKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSkg
Y29uc3Q7CisgICAgU3ViZHVyYXRpb25zIHN1YnRyYWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSkgY29uc3Q7CisgICAgU3ViZHVyYXRpb25zIHJvdW5kKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBvcHRpb25zKSBjb25zdDsKKyAgICBkb3VibGUgdG90YWwoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIG9wdGlvbnMpIGNvbnN0OworICAgIFN0cmluZyB0b1N0cmluZyhKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgb3B0aW9ucykgY29uc3Q7CisgICAgU3RyaW5nIHRvU3RyaW5nKHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IHByZWNpc2lvbiA9IHN0ZDo6bnVsbG9wdCkgY29uc3QgeyByZXR1cm4gdG9T
dHJpbmcobV9zdWJkdXJhdGlvbnMsIHByZWNpc2lvbik7IH0KKworcHJpdmF0ZToKKyAgICBUZW1w
b3JhbER1cmF0aW9uKFZNJiwgU3RydWN0dXJlKiwgU3ViZHVyYXRpb25zJiYpOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U3ViZHVyYXRpb25zPiBwYXJzZShTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+Jik7CisgICAgc3RhdGljIFN1YmR1cmF0aW9ucyBm
cm9tT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKTsKKworICAgIHN0YXRpYyBpbnQg
c2lnbihjb25zdCBTdWJkdXJhdGlvbnMmKTsKKyAgICBzdGF0aWMgdm9pZCBiYWxhbmNlKFN1YmR1
cmF0aW9ucyYsIFRlbXBvcmFsVW5pdCBsYXJnZXN0VW5pdCk7CisgICAgc3RhdGljIGRvdWJsZSBy
b3VuZChTdWJkdXJhdGlvbnMmLCBkb3VibGUgaW5jcmVtZW50LCBUZW1wb3JhbFVuaXQsIFJvdW5k
aW5nTW9kZSk7CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBTdWJkdXJhdGlvbnMm
LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwcmVjaXNpb24pOworCisgICAgVGVtcG9yYWxVbml0
IGxhcmdlc3RTdWJkdXJhdGlvbigpIGNvbnN0OworCisgICAgU3ViZHVyYXRpb25zIG1fc3ViZHVy
YXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45MjE1YjBhNDdmODVlYjFmNWE2NTI5M2QwODUyZGYzZGE4MDY5ZGVjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxE
dXJhdGlvbkNvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVj
dG9yLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJh
dGlvbi5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShUZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3IpOworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTih0ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jRnJvbSk7CitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jQ29tcGFy
ZSk7CisKK30KKworI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5sdXQuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBUZW1wb3JhbER1cmF0aW9uQ29u
c3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgJnRlbXBvcmFs
RHVyYXRpb25Db25zdHJ1Y3RvclRhYmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvcikgfTsKKworLyogU291cmNlIGZvciBUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3IubHV0LmgKK0BiZWdpbiB0ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0
b3JUYWJsZQorICBmcm9tICAgICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1
bmNGcm9tICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgY29tcGFyZSAgICAgICAg
ICB0ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jQ29tcGFyZSAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAyCitAZW5kCisqLworCitUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IqIFRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBlKQorewor
ICAgIGF1dG8qIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yPih2bS5oZWFwKSkgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVj
dG9yKHZtLCBzdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwg
ZHVyYXRpb25Qcm90b3R5cGUpOworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0
dXJlKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKEludGVybmFsRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9
CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNhbGxUZW1wb3JhbER1cmF0aW9u
KTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdFRlbXBvcmFsRHVy
YXRpb24pOworCitUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OlRlbXBvcmFsRHVyYXRpb25D
b25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlLCBjYWxsVGVtcG9yYWxEdXJhdGlvbiwgY29uc3RydWN0VGVtcG9yYWxEdXJhdGlv
bikKK3sKK30KKwordm9pZCBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSogZHVyYXRpb25Qcm90b3R5cGUp
Cit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIDAsICJEdXJhdGlvbiJfcywgUHJvcGVy
dHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBkdXJh
dGlvblByb3RvdHlwZSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIGR1
cmF0aW9uUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+Y29uc3RydWN0b3IsIHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNv
bnN0cnVjdFRlbXBvcmFsRHVyYXRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2Jq
ZWN0KiBuZXdUYXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKTsKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIGR1cmF0
aW9uU3RydWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFRlbXBvcmFsRHVyYXRpb246OlN1
YmR1cmF0aW9ucyBzdWJkdXJhdGlvbnMgeyB9OworICAgIGF1dG8gY291bnQgPSBzdGQ6Om1pbjxz
aXplX3Q+KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpLCBudW1iZXJPZlRlbXBvcmFsVW5pdHMp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBzdWJk
dXJhdGlvbnNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvSW50ZWdlck9y
SW5maW5pdHkoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKworICAgICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoc3ViZHVyYXRpb25zW2ldKSkK
KyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydGllcyBtdXN0IGJlIGZpbml0ZSJfcyk7CisgICAg
fQorCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVh
dGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgV1RGTW92ZShzdWJkdXJhdGlvbnMpLCBzdHJ1Y3R1cmUp
KTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxUZW1wb3JhbER1cmF0aW9uLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNh
bm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRHVy
YXRpb24iKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9u
Q29uc3RydWN0b3JGdW5jRnJvbSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFs
RHVyYXRpb246OmZyb20oZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JG
dW5jQ29tcGFyZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246
OmNvbXBhcmUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDEpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0
b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43NDI0NWEzMTA2OTVhY2QzNWI1ZDZhYTU2ZTkwMDRmN2UzYjcwMzgy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU7CisKK2NsYXNzIFRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvciBmaW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9u
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSW50ZXJuYWxGdW5jdGlvbjsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6
CisgICAgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqKTsKK307
CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3JhbER1cmF0aW9uQ29u
c3RydWN0b3IsIEludGVybmFsRnVuY3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUxOGMyZDE2YzQ2ODUyZjQ5OWE4MjM1MTViZGM2
ZDRiYjRlYTM5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCkBAIC0wLDAgKzEsNDAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGVt
cG9yYWxEdXJhdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIEpTQ19ERUNMQVJF
X0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNXaXRoKTsKK3N0YXRp
YyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5j
TmVnYXRlZCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlRnVuY0Ficyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih0
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY0FkZCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1N1YnRyYWN0KTsKK3N0YXRp
YyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5j
Um91bmQpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZUZ1bmNUb3RhbCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih0
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nKTsKK3N0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9KU09OKTsKK3N0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVG
dW5jVG9Mb2NhbGVTdHJpbmcpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04odGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNWYWx1ZU9mKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9D
VVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJZZWFycyk7CitzdGF0
aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0
dGVyTW9udGhzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVHZXR0ZXJXZWVrcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyRGF5cyk7CitzdGF0aWMgSlNDX0RF
Q0xBUkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVySG91cnMp
Oworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUdldHRlck1pbnV0ZXMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIodGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNlY29uZHMpOworc3RhdGljIEpTQ19ERUNMQVJF
X0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbGxpc2Vjb25k
cyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlR2V0dGVyTWljcm9zZWNvbmRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VU
VEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJOYW5vc2Vjb25kcyk7CitzdGF0aWMg
SlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVy
U2lnbik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlR2V0dGVyQmxhbmspOworCit9CisKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlbXBvcmFsLkR1cmF0aW9uIiwg
JkJhc2U6OnNfaW5mbywgJmR1cmF0aW9uUHJvdG90eXBlVGFibGUsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSkgfTsKKworLyogU291cmNlIGZv
ciBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmx1dC5oCitAYmVnaW4gZHVyYXRpb25Qcm90b3R5
cGVUYWJsZQorICB3aXRoICAgICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5j
V2l0aCAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgbmVnYXRlZCAgICAgICAg
ICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY05lZ2F0ZWQgICAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAwCisgIGFicyAgICAgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUZ1bmNBYnMgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICBhZGQgICAgICAg
ICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWRkICAgICAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uIDEKKyAgc3VidHJhY3QgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlRnVuY1N1YnRyYWN0ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgIHJvdW5k
ICAgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNSb3VuZCAgICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gMQorICB0b3RhbCAgICAgICAgICAgIHRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGVGdW5jVG90YWwgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAg
dG9TdHJpbmcgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nICAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIHRvSlNPTiAgICAgICAgICAgdGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUZ1bmNUb0pTT04gICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
MAorICB0b0xvY2FsZVN0cmluZyAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9Mb2Nh
bGVTdHJpbmcgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgdmFsdWVPZiAgICAgICAgICB0ZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1ZhbHVlT2YgICAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAwCisgIHllYXJzICAgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRl
clllYXJzICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbW9u
dGhzICAgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTW9udGhzICAgICAg
ICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICB3ZWVrcyAgICAgICAgICAg
IHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJXZWVrcyAgICAgICAgICAgIERvbnRFbnVt
fFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIGRheXMgICAgICAgICAgICAgdGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUdldHRlckRheXMgICAgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3Vz
dG9tQWNjZXNzb3IKKyAgaG91cnMgICAgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
R2V0dGVySG91cnMgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3Nvcgor
ICBtaW51dGVzICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaW51dGVz
ICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIHNlY29uZHMgICAg
ICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNlY29uZHMgICAgICAgICAgRG9u
dEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbWlsbGlzZWNvbmRzICAgICB0ZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWlsbGlzZWNvbmRzICAgICBEb250RW51bXxSZWFkT25s
eXxDdXN0b21BY2Nlc3NvcgorICBtaWNyb3NlY29uZHMgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJNaWNyb3NlY29uZHMgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vz
c29yCisgIG5hbm9zZWNvbmRzICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck5h
bm9zZWNvbmRzICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgc2lnbiAg
ICAgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2lnbiAgICAgICAgICAg
ICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBibGFuayAgICAgICAgICAgIHRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJCbGFuayAgICAgICAgICAgIERvbnRFbnVtfFJl
YWRPbmx5fEN1c3RvbUFjY2Vzc29yCitAZW5kCisqLworCitUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK3sKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZTo6VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit2b2lkIFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICBK
U0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jV2l0aCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFs
RHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlv
bikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS53aXRoIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mg
bm90IGEgRHVyYXRpb24iX3MpOworICAgIAorICAgIEpTVmFsdWUgZHVyYXRpb25MaWtlID0gY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBpZiAoIWR1cmF0aW9uTGlrZS5pc09iamVjdCgpKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRmly
c3QgYXJndW1lbnQgdG8gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLndpdGggbXVzdCBiZSBh
biBvYmplY3QiX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6dHJ5Q3JlYXRlSWZWYWxpZChnbG9iYWxPYmplY3QsIGR1
cmF0aW9uLT53aXRoKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoZHVyYXRpb25MaWtlKSkpKSk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVu
Y05lZ2F0ZWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNE
eW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubmVnYXRlZCBj
YWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qt
PmR1cmF0aW9uU3RydWN0dXJlKCksIGR1cmF0aW9uLT5uZWdhdGVkKCkpKTsKK30KKworSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWJzLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVt
cG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1
cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmFicyBjYWxsZWQgb24gdmFsdWUgdGhh
dCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVGVt
cG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJl
KCksIGR1cmF0aW9uLT5hYnMoKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNBZGQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlv
bi5wcm90b3R5cGUuYWRkIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3Mp
OworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoVGVtcG9y
YWxEdXJhdGlvbjo6dHJ5Q3JlYXRlSWZWYWxpZChnbG9iYWxPYmplY3QsIGR1cmF0aW9uLT5hZGQo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpKTsKK30KKworSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jU3VidHJhY3QsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxU
ZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICgh
ZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc3VidHJhY3QgY2FsbGVkIG9uIHZh
bHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVhdGVJZlZhbGlk
KGdsb2JhbE9iamVjdCwgZHVyYXRpb24tPnN1YnRyYWN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT5hcmd1bWVudCgwKSkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlRnVuY1JvdW5kLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBh
dXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24u
cHJvdG90eXBlLnJvdW5kIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3Mp
OworCisgICAgYXV0byBvcHRpb25zID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBpZiAo
b3B0aW9ucy5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnJvdW5kIHJl
cXVpcmVzIGFuIG9wdGlvbnMgYXJndW1lbnQiX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6dHJ5Q3JlYXRlSWZWYWxp
ZChnbG9iYWxPYmplY3QsIGR1cmF0aW9uLT5yb3VuZChnbG9iYWxPYmplY3QsIG9wdGlvbnMpKSkp
OworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUZ1bmNUb3RhbCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBq
c0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b3RhbCBj
YWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIGF1dG8gb3B0
aW9ucyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgaWYgKG9wdGlvbnMuaXNVbmRlZmlu
ZWQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b3RhbCByZXF1aXJlcyBhbiBvcHRpb25z
IGFyZ3VtZW50Il9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT50b3RhbChnbG9iYWxPYmplY3QsIG9wdGlvbnMpKSkp
OworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUZ1bmNUb1N0cmluZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24g
PSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b1N0
cmluZyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBkdXJh
dGlvbi0+dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpKTsK
K30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVG
dW5jVG9KU09OLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpz
RHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvSlNPTiBj
YWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1cmF0aW9uLT50b1N0cmluZygpKSk7Cit9CisK
Ky8vIFRoaXMgd2lsbCBiZSBwYXJ0IG9mIHRoZSBFQ01BLTQwMiBJbnRsLkR1cmF0aW9uRm9ybWF0
IHByb3Bvc2FsOyB1bnRpbCB0aGVuLCB3ZSBqdXN0IGZvbGxvdyBFQ01BLTI2MiBpbiBtaW1pY2tp
bmcgdG9KU09OLgorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVGdW5jVG9Mb2NhbGVTdHJpbmcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8q
IGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90
b3R5cGUudG9Mb2NhbGVTdHJpbmcgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlv
biJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBkdXJhdGlv
bi0+dG9TdHJpbmcoKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUZ1bmNWYWx1ZU9mLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90
b3R5cGUudmFsdWVPZiBtdXN0IG5vdCBiZSBjYWxsZWQuIFRvIGNvbXBhcmUgRHVyYXRpb24gdmFs
dWVzLCB1c2UgVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSJfcyk7Cit9CisKK0pTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyWWVhcnMsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0g
anNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnll
YXJzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+eWVhcnMoKSkpOworfQorCitK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1v
bnRocywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byog
ZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5w
cm90b3R5cGUubW9udGhzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3Mp
OworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+bW9udGhz
KCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJXZWVrcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGUud2Vla3MgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBE
dXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0
aW9uLT53ZWVrcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlR2V0dGVyRGF5cywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVy
YXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRp
b24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuZGF5cyBjYWxsZWQgb24gdmFsdWUgdGhhdCdz
IG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoZHVyYXRpb24tPmRheXMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIodGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckhvdXJzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVt
cG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5ob3VycyBjYWxsZWQgb24gdmFs
dWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoZHVyYXRpb24tPmhvdXJzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaW51dGVzLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHlu
YW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5taW51dGVz
IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+bWludXRlcygpKSk7Cit9CisKK0pT
Q19ERUZJTkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2Vj
b25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byog
ZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5w
cm90b3R5cGUuc2Vjb25kcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9z
KTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPnNlY29u
ZHMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUdldHRlck1pbGxpc2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVy
YXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRp
b24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubWlsbGlzZWNvbmRzIGNhbGxlZCBvbiB2YWx1
ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihkdXJhdGlvbi0+bWlsbGlzZWNvbmRzKCkpKTsKK30KKworSlNDX0RFRklORV9D
VVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaWNyb3NlY29uZHMs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0
aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90
eXBlLm1pY3Jvc2Vjb25kcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9z
KTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPm1pY3Jv
c2Vjb25kcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlR2V0dGVyTmFub3NlY29uZHMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3Jh
bER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1
cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5hbm9zZWNvbmRzIGNhbGxlZCBvbiB2
YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihkdXJhdGlvbi0+bmFub3NlY29uZHMoKSkpOworfQorCitKU0NfREVGSU5F
X0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclNpZ24sIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0g
anNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnNp
Z24gY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5zaWduKCkpKTsKK30KKworSlND
X0RFRklORV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJCbGFu
aywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVy
YXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90
b3R5cGUuYmxhbmsgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighZHVyYXRpb24tPnNpZ24oKSkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
ODc3NWVlYjA3YmU2MDJjZmFlZjAzODc5NGU5N2M2MjkzNTRkMzZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1
YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5P
YmplY3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVf
SU5GTzsKKworcHJpdmF0ZToKKyAgICBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKFZNJiwgU3Ry
dWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9i
amVjdC5jcHAKaW5kZXggYWYxNDM2NzVmMWU0YzYyODdlYTJiZTE4ZjQzM2VlYmUzNzJhNzE3ZC4u
OGU2ODg2ZGViMDIwNzE3ZWIxNGNlOWMzOTE1MmJjNWVmMzgxMjAxZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMCwxMCArMjEsMTQgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZW1wb3JhbE9iamVjdC5oIgogCisjaW5jbHVkZSAi
RnVuY3Rpb25Qcm90b3R5cGUuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
ICNpbmNsdWRlICJKU09iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUu
aCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxOb3cuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC0zNyw2ICs0MiwxMyBAQCBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVO
b3dPYmplY3QoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogICAgIHJldHVybiBUZW1wb3JhbE5v
dzo6Y3JlYXRlKHZtLCBUZW1wb3JhbE5vdzo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmpl
Y3QpKTsKIH0KIAorc3RhdGljIEpTVmFsdWUgY3JlYXRlRHVyYXRpb25Db25zdHJ1Y3RvcihWTSYg
dm0sIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgVGVtcG9yYWxPYmplY3QqIHRlbXBvcmFsT2Jq
ZWN0ID0ganNDYXN0PFRlbXBvcmFsT2JqZWN0Kj4ob2JqZWN0KTsKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gdGVtcG9yYWxPYmplY3QtPmdsb2JhbE9iamVjdCh2bSk7CisgICAg
cmV0dXJuIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPmZ1bmN0aW9uUHJvdG90eXBlKCkpLCBqc0Nhc3Q8VGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZSo+KGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90
eXBlT2JqZWN0KCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNpbmNsdWRlICJUZW1w
b3JhbE9iamVjdC5sdXQuaCIKQEAgLTQ2LDYgKzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAvKiBT
b3VyY2UgZm9yIFRlbXBvcmFsT2JqZWN0Lmx1dC5oCiBAYmVnaW4gdGVtcG9yYWxPYmplY3RUYWJs
ZQogICBOb3cgICAgICAgICAgICBjcmVhdGVOb3dPYmplY3QgICAgICAgICAgICAgICAgIERvbnRF
bnVtfFByb3BlcnR5Q2FsbGJhY2sKKyAgRHVyYXRpb24gICAgICAgY3JlYXRlRHVyYXRpb25Db25z
dHJ1Y3RvciAgICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiBAZW5kCiAqLwogCkBAIC03
NSw0ICs4OCwyMzUgQEAgdm9pZCBUZW1wb3JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQogICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwogfQogCitzdGF0
aWMgU3RyaW5nVmlldyBzaW5ndWxhclVuaXQoU3RyaW5nVmlldyB1bml0KQoreworICAgIC8vIFBs
dXJhbHMgYXJlIGFsbG93ZWQsIGJ1dCB0aGFua2Z1bGx5IHRoZXkncmUgYWxsIGp1c3QgYSBzaW1w
bGUgLXMuCisgICAgcmV0dXJuIHVuaXQuZW5kc1dpdGgoInMiKSA/IHVuaXQubGVmdCh1bml0Lmxl
bmd0aCgpIC0gMSkgOiB1bml0OworfQorCitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5pdD4gdGVt
cG9yYWxVbml0VHlwZShTdHJpbmdWaWV3IHVuaXQpCit7CisgICAgU3RyaW5nVmlldyBzaW5ndWxh
ciA9IHNpbmd1bGFyVW5pdCh1bml0KTsKKworICAgIGlmIChzaW5ndWxhciA9PSAieWVhciIpCisg
ICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OlllYXI7CisgICAgaWYgKHNpbmd1bGFyID09ICJt
b250aCIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok1vbnRoOworICAgIGlmIChzaW5n
dWxhciA9PSAid2VlayIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OldlZWs7CisgICAg
aWYgKHNpbmd1bGFyID09ICJkYXkiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpEYXk7
CisgICAgaWYgKHNpbmd1bGFyID09ICJob3VyIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5p
dDo6SG91cjsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm1pbnV0ZSIpCisgICAgICAgIHJldHVybiBU
ZW1wb3JhbFVuaXQ6Ok1pbnV0ZTsKKyAgICBpZiAoc2luZ3VsYXIgPT0gInNlY29uZCIpCisgICAg
ICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OlNlY29uZDsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm1p
bGxpc2Vjb25kIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQ7Cisg
ICAgaWYgKHNpbmd1bGFyID09ICJtaWNyb3NlY29uZCIpCisgICAgICAgIHJldHVybiBUZW1wb3Jh
bFVuaXQ6Ok1pY3Jvc2Vjb25kOworICAgIGlmIChzaW5ndWxhciA9PSAibmFub3NlY29uZCIpCisg
ICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQ7CisgICAgCisgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKK30KKworLy8gVG9MYXJnZXN0VGVtcG9yYWxVbml0ICggbm9ybWFsaXpl
ZE9wdGlvbnMsIGRpc2FsbG93ZWRVbml0cywgZmFsbGJhY2sgWyAsIGF1dG9WYWx1ZSBdICkKKy8v
IGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRvbGFyZ2Vz
dHRlbXBvcmFsdW5pdAorc3RkOjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFsTGFyZ2Vz
dFVuaXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUZW1wb3JhbFVuaXQ+IGRpc2FsbG93ZWRVbml0cywgVGVtcG9y
YWxVbml0IGF1dG9WYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIGxh
cmdlc3RVbml0ID0gaW50bFN0cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnBy
b3BlcnR5TmFtZXMtPmxhcmdlc3RVbml0LCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAoIWxhcmdl
c3RVbml0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKGxhcmdlc3RV
bml0ID09ICJhdXRvIikKKyAgICAgICAgcmV0dXJuIGF1dG9WYWx1ZTsKKworICAgIGF1dG8gdW5p
dFR5cGUgPSB0ZW1wb3JhbFVuaXRUeXBlKGxhcmdlc3RVbml0KTsKKyAgICBpZiAoIXVuaXRUeXBl
KSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAibGFyZ2Vz
dFVuaXQgaXMgYW4gaW52YWxpZCBUZW1wb3JhbCB1bml0Il9zKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoZGlzYWxsb3dlZFVuaXRzLnNpemUoKSAmJiBz
dGQ6OmZpbmQoZGlzYWxsb3dlZFVuaXRzLmJlZ2luKCksIGRpc2FsbG93ZWRVbml0cy5lbmQoKSwg
dW5pdFR5cGUudmFsdWUoKSkgIT0gZGlzYWxsb3dlZFVuaXRzLmVuZCgpKSB7CisgICAgICAgIHRo
cm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAibGFyZ2VzdFVuaXQgaXMgYSBkaXNh
bGxvd2VkIHVuaXQiX3MpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwor
ICAgIHJldHVybiB1bml0VHlwZTsKK30KKworLy8gVG9TbWFsbGVzdFRlbXBvcmFsVW5pdCAoIG5v
cm1hbGl6ZWRPcHRpb25zLCBkaXNhbGxvd2VkVW5pdHMsIGZhbGxiYWNrICkKKy8vIGh0dHBzOi8v
dGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRvc21hbGxlc3R0ZW1wb3Jh
bHVuaXQKK3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1wb3JhbFNtYWxsZXN0VW5pdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3B0aW9ucywgc3RkOjppbml0
aWFsaXplcl9saXN0PFRlbXBvcmFsVW5pdD4gZGlzYWxsb3dlZFVuaXRzKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBTdHJpbmcgc21hbGxlc3RVbml0ID0gaW50bFN0cmluZ09wdGlvbihn
bG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnNtYWxsZXN0VW5pdCwgeyB9
LCBudWxscHRyLCBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6
Om51bGxvcHQpOworCisgICAgaWYgKCFzbWFsbGVzdFVuaXQpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBhdXRvIHVuaXRUeXBlID0gdGVtcG9yYWxVbml0VHlwZShzbWFsbGVz
dFVuaXQpOworICAgIGlmICghdW5pdFR5cGUpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJzbWFsbGVzdFVuaXQgaXMgYW4gaW52YWxpZCBUZW1wb3JhbCB1
bml0Il9zKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAo
ZGlzYWxsb3dlZFVuaXRzLnNpemUoKSAmJiBzdGQ6OmZpbmQoZGlzYWxsb3dlZFVuaXRzLmJlZ2lu
KCksIGRpc2FsbG93ZWRVbml0cy5lbmQoKSwgdW5pdFR5cGUudmFsdWUoKSkgIT0gZGlzYWxsb3dl
ZFVuaXRzLmVuZCgpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAic21hbGxlc3RVbml0IGlzIGEgZGlzYWxsb3dlZCB1bml0Il9zKTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gdW5pdFR5cGU7Cit9CisKKy8v
IEdldFN0cmluZ09yTnVtYmVyT3B0aW9uKG5vcm1hbGl6ZWRPcHRpb25zLCAiZnJhY3Rpb25hbFNl
Y29uZERpZ2l0cyIsIMKrICJhdXRvIiDCuywgMCwgOSwgImF1dG8iKQorLy8gaHR0cHM6Ly90YzM5
LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtZ2V0c3RyaW5nb3JudW1iZXJvcHRpb24KK3N0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHRlbXBvcmFsRnJhY3Rpb25hbFNlY29uZERpZ2l0cyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3B0aW9ucykKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgaWYgKCFvcHRpb25zKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdGlvbnMtPmdldChnbG9iYWxPYmplY3QsIHZtLnBy
b3BlcnR5TmFtZXMtPmZyYWN0aW9uYWxTZWNvbmREaWdpdHMpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQo
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICh2YWx1ZS5pc051bWJl
cigpKSB7CisgICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHZhbHVlLmFzTnVtYmVyKCk7Cisg
ICAgICAgIGlmIChkb3VibGVWYWx1ZSA8IDAgfHwgZG91YmxlVmFsdWUgPiA5KSB7CisgICAgICAg
ICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZyYWN0aW9uYWxTZWNv
bmREaWdpdHMgaXMgb3V0IG9mIHJhbmdlIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGRvdWJsZVZhbHVlKTsKKyAgICB9CisKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50
b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAoc3RyaW5nVmFsdWUgIT0gImF1dG8iKQorICAgICAg
ICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZyYWN0aW9uYWxTZWNvbmRE
aWdpdHMgaXMgb3V0IG9mIHJhbmdlIl9zKTsKKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9
CisKKy8vIFRvU2Vjb25kc1N0cmluZ1ByZWNpc2lvbiAoIG5vcm1hbGl6ZWRPcHRpb25zICkKKy8v
IGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRvc2Vjb25k
c3N0cmluZ3ByZWNpc2lvbgorUHJlY2lzaW9uRGF0YSBzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBhdXRvIHNtYWxsZXN0VW5pdCA9IHRlbXBvcmFsU21hbGxlc3RV
bml0KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgeyBUZW1wb3JhbFVuaXQ6OlllYXIsIFRlbXBvcmFs
VW5pdDo6TW9udGgsIFRlbXBvcmFsVW5pdDo6V2VlaywgVGVtcG9yYWxVbml0OjpEYXksIFRlbXBv
cmFsVW5pdDo6SG91ciwgVGVtcG9yYWxVbml0OjpNaW51dGUgfSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmIChzbWFsbGVzdFVuaXQpIHsKKyAgICAgICAg
c3dpdGNoIChzbWFsbGVzdFVuaXQudmFsdWUoKSkgeworICAgICAgICBjYXNlIFRlbXBvcmFsVW5p
dDo6U2Vjb25kOgorICAgICAgICAgICAgcmV0dXJuIHsgMCwgVGVtcG9yYWxVbml0OjpTZWNvbmQs
IDEgfTsKKyAgICAgICAgY2FzZSBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kOgorICAgICAgICAg
ICAgcmV0dXJuIHsgMywgVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCwgMSB9OworICAgICAgICBj
YXNlIFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4geyA2LCBU
ZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kLCAxIH07CisgICAgICAgIGNhc2UgVGVtcG9yYWxVbml0
OjpOYW5vc2Vjb25kOgorICAgICAgICAgICAgcmV0dXJuIHsgOSwgVGVtcG9yYWxVbml0OjpOYW5v
c2Vjb25kLCAxIH07CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGF1dG8gcHJlY2lzaW9uID0gdGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25kRGlnaXRz
KGdsb2JhbE9iamVjdCwgb3B0aW9ucyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgIGlmICghcHJlY2lzaW9uKQorICAgICAgICByZXR1cm4geyBzdGQ6Om51bGxv
cHQsIFRlbXBvcmFsVW5pdDo6TmFub3NlY29uZCwgMSB9OworCisgICAgdW5zaWduZWQgZGlnaXRz
ID0gcHJlY2lzaW9uLnZhbHVlKCk7CisgICAgaWYgKCFkaWdpdHMpCisgICAgICAgIHJldHVybiB7
IDAsIFRlbXBvcmFsVW5pdDo6U2Vjb25kLCAxIH07CisKKyAgICBpZiAoZGlnaXRzIDw9IDMpCisg
ICAgICAgIHJldHVybiB7IGRpZ2l0cywgVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCwgc3RkOjpw
b3coMTAsIDMgLSBkaWdpdHMpIH07CisKKyAgICBpZiAoZGlnaXRzIDw9IDYpCisgICAgICAgIHJl
dHVybiB7IGRpZ2l0cywgVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZCwgc3RkOjpwb3coMTAsIDYg
LSBkaWdpdHMpIH07CisKKyAgICBBU1NFUlQoZGlnaXRzIDw9IDkpOworICAgIHJldHVybiB7IGRp
Z2l0cywgVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kLCBzdGQ6OnBvdygxMCwgOSAtIGRpZ2l0cykg
fTsKK30KKworLy8gTWF4aW11bVRlbXBvcmFsRHVyYXRpb25Sb3VuZGluZ0luY3JlbWVudCAoIHVu
aXQgKQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwt
bWF4aW11bXRlbXBvcmFsZHVyYXRpb25yb3VuZGluZ2luY3JlbWVudAorc3RkOjpvcHRpb25hbDxk
b3VibGU+IG1heGltdW1Sb3VuZGluZ0luY3JlbWVudChUZW1wb3JhbFVuaXQgdW5pdCkKK3sKKyAg
ICBpZiAodW5pdCA8PSBUZW1wb3JhbFVuaXQ6OkRheSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBpZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6OkhvdXIpCisgICAgICAgIHJldHVy
biAyNDsKKyAgICBpZiAodW5pdCA8PSBUZW1wb3JhbFVuaXQ6OlNlY29uZCkKKyAgICAgICAgcmV0
dXJuIDYwOworICAgIHJldHVybiAxMDAwOworfQorCisvLyBUb1RlbXBvcmFsUm91bmRpbmdJbmNy
ZW1lbnQgKCBub3JtYWxpemVkT3B0aW9ucywgZGl2aWRlbmQsIGluY2x1c2l2ZSApCisvLyBodHRw
czovL3RjMzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC10b3RlbXBvcmFscm91
bmRpbmdpbmNyZW1lbnQKK2RvdWJsZSB0ZW1wb3JhbFJvdW5kaW5nSW5jcmVtZW50KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6Om9wdGlvbmFsPGRv
dWJsZT4gZGl2aWRlbmQsIGJvb2wgaW5jbHVzaXZlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBkb3VibGUgbWF4aW11bTsKKyAgICBpZiAoIWRpdmlkZW5kKQorICAgICAgICBtYXhpbXVt
ID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworICAgIGVsc2UgaWYg
KGluY2x1c2l2ZSkKKyAgICAgICAgbWF4aW11bSA9IGRpdmlkZW5kLnZhbHVlKCk7CisgICAgZWxz
ZSBpZiAoZGl2aWRlbmQudmFsdWUoKSA+IDEpCisgICAgICAgIG1heGltdW0gPSBkaXZpZGVuZC52
YWx1ZSgpIC0gMTsKKyAgICBlbHNlCisgICAgICAgIG1heGltdW0gPSAxOworCisgICAgZG91Ymxl
IGluY3JlbWVudCA9IGludGxOdW1iZXJPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT5yb3VuZGluZ0luY3JlbWVudCwgMSwgbWF4aW11bSwgMSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBpbmNyZW1lbnQgPSBzdGQ6OmZsb29y
KGluY3JlbWVudCk7CisgICAgaWYgKGRpdmlkZW5kICYmIHN0ZDo6Zm1vZChkaXZpZGVuZC52YWx1
ZSgpLCBpbmNyZW1lbnQpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBtYWtlU3RyaW5nKCJyb3VuZGluZ0luY3JlbWVudCB2YWx1ZSBkb2VzIG5vdCBkaXZp
ZGUgIl9zLCBkaXZpZGVuZC52YWx1ZSgpLCAiIGV2ZW5seSJfcykpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICByZXR1cm4gaW5jcmVtZW50OworfQorCisvLyBSb3VuZE51bWJlclRv
SW5jcmVtZW50ICggeCwgaW5jcmVtZW50LCByb3VuZGluZ01vZGUgKQorLy8gaHR0cHM6Ly90YzM5
LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtcm91bmRudW1iZXJ0b2luY3JlbWVu
dAorZG91YmxlIHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZG91YmxlIHgsIGRvdWJsZSBpbmNyZW1l
bnQsIFJvdW5kaW5nTW9kZSBtb2RlKQoreworICAgIGF1dG8gcXVvdGllbnQgPSB4IC8gaW5jcmVt
ZW50OworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpDZWlsOgor
ICAgICAgICByZXR1cm4gLXN0ZDo6Zmxvb3IoLXF1b3RpZW50KSAqIGluY3JlbWVudDsKKyAgICBj
YXNlIFJvdW5kaW5nTW9kZTo6Rmxvb3I6CisgICAgICAgIHJldHVybiBzdGQ6OmZsb29yKHF1b3Rp
ZW50KSAqIGluY3JlbWVudDsKKyAgICBjYXNlIFJvdW5kaW5nTW9kZTo6VHJ1bmM6CisgICAgICAg
IHJldHVybiBzdGQ6OnRydW5jKHF1b3RpZW50KSAqIGluY3JlbWVudDsKKyAgICBjYXNlIFJvdW5k
aW5nTW9kZTo6SGFsZkV4cGFuZDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6cm91bmQocXVvdGllbnQp
ICogaW5jcmVtZW50OworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuaAppbmRleCAxZWU5OTk0YzJi
OGMwNWU0NmQxNjEwNmE2NmYwMmI5NzU4YjhiMjgzLi43MjQzYzliYTU4NDMyNjJkMmQwY2JiODE5
MzNmNGNkZDEzMDhmYjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UZW1wb3JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsT2JqZWN0LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAy
MSBJZ2FsaWEsIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKQEAgLTIzLDYgKzI0LDI3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisjZGVmaW5lIEpTQ19U
RU1QT1JBTF9VTklUUyhtYWNybykgXAorICAgIG1hY3JvKHllYXIsIFllYXIpIFwKKyAgICBtYWNy
byhtb250aCwgTW9udGgpIFwKKyAgICBtYWNybyh3ZWVrLCBXZWVrKSBcCisgICAgbWFjcm8oZGF5
LCBEYXkpIFwKKyAgICBtYWNybyhob3VyLCBIb3VyKSBcCisgICAgbWFjcm8obWludXRlLCBNaW51
dGUpIFwKKyAgICBtYWNybyhzZWNvbmQsIFNlY29uZCkgXAorICAgIG1hY3JvKG1pbGxpc2Vjb25k
LCBNaWxsaXNlY29uZCkgXAorICAgIG1hY3JvKG1pY3Jvc2Vjb25kLCBNaWNyb3NlY29uZCkgXAor
ICAgIG1hY3JvKG5hbm9zZWNvbmQsIE5hbm9zZWNvbmQpIFwKKworZW51bSBjbGFzcyBUZW1wb3Jh
bFVuaXQgOiB1aW50OF90IHsKKyNkZWZpbmUgSlNDX0RFRklORV9URU1QT1JBTF9VTklUX0VOVU0o
bmFtZSwgY2FwaXRhbGl6ZWROYW1lKSBjYXBpdGFsaXplZE5hbWUsCisgICAgSlNDX1RFTVBPUkFM
X1VOSVRTKEpTQ19ERUZJTkVfVEVNUE9SQUxfVU5JVF9FTlVNKQorI3VuZGVmIEpTQ19ERUZJTkVf
VEVNUE9SQUxfVU5JVF9FTlVNCit9OworI2RlZmluZSBKU0NfQ09VTlRfVEVNUE9SQUxfVU5JVFMo
bmFtZSwgY2FwaXRhbGl6ZWROYW1lKSArIDEKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVt
YmVyT2ZUZW1wb3JhbFVuaXRzID0gMCBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX0NPVU5UX1RFTVBP
UkFMX1VOSVRTKTsKKyN1bmRlZiBKU0NfQ09VTlRfVEVNUE9SQUxfVU5JVFMKKwogY2xhc3MgVGVt
cG9yYWxPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAg
ICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CkBAIC00NSw0ICs2NywyNiBAQCBwcml2
YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIH07CiAKK2VudW0gY2xhc3MgUm91
bmRpbmdNb2RlIDogdWludDhfdCB7CisgICAgQ2VpbCwKKyAgICBGbG9vciwKKyAgICBUcnVuYywK
KyAgICBIYWxmRXhwYW5kCit9OworCitzdHJ1Y3QgUHJlY2lzaW9uRGF0YSB7CisgICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gcHJlY2lzaW9uOworICAgIFRlbXBvcmFsVW5pdCB1bml0OworICAg
IGRvdWJsZSBpbmNyZW1lbnQ7Cit9OworCitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5pdD4gdGVt
cG9yYWxVbml0VHlwZShTdHJpbmdWaWV3KTsKK3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0
ZW1wb3JhbExhcmdlc3RVbml0KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlvbnMsIHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUZW1wb3JhbFVuaXQ+IGRpc2FsbG93ZWRVbml0cywgVGVtcG9y
YWxVbml0IGF1dG9WYWx1ZSk7CitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5pdD4gdGVtcG9yYWxT
bWFsbGVzdFVuaXQoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucywgc3RkOjppbml0
aWFsaXplcl9saXN0PFRlbXBvcmFsVW5pdD4gZGlzYWxsb3dlZFVuaXRzKTsKK3N0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IHRlbXBvcmFsRnJhY3Rpb25hbFNlY29uZERpZ2l0cyhKU0dsb2JhbE9iamVj
dCosIEpTT2JqZWN0KiBvcHRpb25zKTsKK1ByZWNpc2lvbkRhdGEgc2Vjb25kc1N0cmluZ1ByZWNp
c2lvbihKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBvcHRpb25zKTsKK3N0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBtYXhpbXVtUm91bmRpbmdJbmNyZW1lbnQoVGVtcG9yYWxVbml0KTsKK2RvdWJsZSB0
ZW1wb3JhbFJvdW5kaW5nSW5jcmVtZW50KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlv
bnMsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBkaXZpZGVuZCwgYm9vbCBpbmNsdXNpdmUpOworZG91
YmxlIHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZG91YmxlLCBkb3VibGUgaW5jcmVtZW50LCBSb3Vu
ZGluZ01vZGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAppbmRleCAxZGVhNmExM2NiNGM0MjliOWIwNzE5OGJhYjZjNDRmMzE0NjlkMDY4Li44
MzFkM2YyZWQzYTMyN2NmZmIzNjhlZjE2M2IxYThhYjZmN2M4MTc5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0xNjIsNiArMTYyLDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1
cmVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJTeW1i
b2xPYmplY3QuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCiAjaW5jbHVkZSAiVGVz
dFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyLmgiCkBAIC0xNjE3LDYgKzE2MTgsNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFJlbGF0aXZlVGltZUZvcm1hdFNwYWNlLCBpbnRsUmVs
YXRpdgogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50
SXRlcmF0b3JTcGFjZSwgaW50bFNlZ21lbnRJdGVyYXRvckhlYXBDZWxsVHlwZS5nZXQoKSwgSW50
bFNlZ21lbnRJdGVyYXRvcikKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhpbnRsU2VnbWVudGVyU3BhY2UsIGludGxTZWdtZW50ZXJIZWFwQ2VsbFR5cGUuZ2V0KCksIElu
dGxTZWdtZW50ZXIpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50
bFNlZ21lbnRzU3BhY2UsIGludGxTZWdtZW50c0hlYXBDZWxsVHlwZS5nZXQoKSwgSW50bFNlZ21l
bnRzKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHRlbXBvcmFsRHVy
YXRpb25TcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgVGVtcG9yYWxEdXJhdGlvbikKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coanNUb1dhc21JQ0NhbGxlZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1Rv
V2FzbUlDQ2FsbGVlKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdl
YkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UsIHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBl
LmdldCgpLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSAvLyBIYXNoOjB4OWFkOTk1Y2QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IGJjZWQ5ODQzZmNlODI2MjBlODhiOTc1MDE4M2Fl
YjYxNTU2MjYwNjkuLmFiZGE3MmU5NDNhOTI1ZjRlZjc2MDNlMjUwZTNkMDZjYWUwNDE3MjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTg1LDYgKzE4NSw3IEBAIGNsYXNzIFN0
cnVjdHVyZTsKIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgogY2xhc3MgU3ltYm9sOworY2xhc3MgVGVt
cG9yYWxEdXJhdGlvbjsKIGNsYXNzIFR5cGVkQXJyYXlDb250cm9sbGVyOwogY2xhc3MgVW5saW5r
ZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2s7CkBAIC02MTUsNiArNjE2
LDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50
bFNlZ21lbnRJdGVyYXRvclNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoaW50bFNlZ21lbnRlclNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoaW50bFNlZ21lbnRzU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUih0ZW1wb3JhbER1cmF0aW9uU3BhY2UpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoanNUb1dhc21JQ0NhbGxl
ZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1i
bHlDb2RlQmxvY2tTcGFjZSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMDUzMjEzZDRmZDkxMzQ2MTBkZTg4OTBkNDJlOWE5YjE0NzhjMzI4
Mi4uMjJmMTIxM2I4OWQzMDRlZDgyYzYzMmMzM2E2MWMxOTNlN2I4MThjNSAxMDA2NDQKLS0tIGEv
SlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAyMS0wOC0zMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CisK
KyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy90ZW1wb3JhbC1kdXJh
dGlvbi5qczogQWRkZWQuCisgICAgICAgICogdGVzdDI2Mi9jb25maWcueWFtbDogRW5hYmxlZCBE
dXJhdGlvbiB0ZXN0cy4KKwogMjAyMS0wOC0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBw
bGUuY29tPgogCiAgICAgICAgIFtKU0NdIFVwZ3JhZGUgdGVzdDI2MgpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9zdHJlc3MvdGVtcG9yYWwtZHVyYXRpb24uanMgYi9KU1Rlc3RzL3N0cmVzcy90ZW1wb3Jh
bC1kdXJhdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lY2YxM2E5Zjk1ZjgwNDgyMGQ0ZGY1NGU1MTMyMDc3
MjU1MWQ5ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvdGVtcG9yYWwtZHVy
YXRpb24uanMKQEAgLTAsMCArMSwyODkgQEAKKy8vQCByZXF1aXJlT3B0aW9ucygiLS11c2VUZW1w
b3JhbD0xIikKKworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlm
IChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVk
ICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZE5v
dFRocm93KGZ1bmMpIHsKKyAgICBmdW5jKCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1
bmMsIGVycm9yVHlwZSkgeworICAgIGxldCBlcnJvcjsKKyAgICB0cnkgeworICAgICAgICBmdW5j
KCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorCisgICAg
aWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBlcnJvclR5cGUpKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoYEV4cGVjdGVkICR7ZXJyb3JUeXBlLm5hbWV9IWApOworfQorCitzaG91bGRCZShUZW1wb3Jh
bC5EdXJhdGlvbiBpbnN0YW5jZW9mIEZ1bmN0aW9uLCB0cnVlKTsKK3Nob3VsZEJlKFRlbXBvcmFs
LkR1cmF0aW9uLmxlbmd0aCwgMCk7CitzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKFRlbXBvcmFsLkR1cmF0aW9uLCAncHJvdG90eXBlJykud3JpdGFibGUsIGZhbHNlKTsK
K3Nob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwuRHVyYXRp
b24sICdwcm90b3R5cGUnKS5lbnVtZXJhYmxlLCBmYWxzZSk7CitzaG91bGRCZShPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKFRlbXBvcmFsLkR1cmF0aW9uLCAncHJvdG90eXBlJykuY29u
ZmlndXJhYmxlLCBmYWxzZSk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbigp
LCBUeXBlRXJyb3IpOworCitzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oKSBpbnN0YW5j
ZW9mIFRlbXBvcmFsLkR1cmF0aW9uLCB0cnVlKTsKK3sKKyAgICBjbGFzcyBEZXJpdmVkRHVyYXRp
b24gZXh0ZW5kcyBUZW1wb3JhbC5EdXJhdGlvbiB7fQorCisgICAgY29uc3QgZGQgPSBuZXcgRGVy
aXZlZER1cmF0aW9uKCk7CisgICAgc2hvdWxkQmUoZGQgaW5zdGFuY2VvZiBEZXJpdmVkRHVyYXRp
b24sIHRydWUpOworICAgIHNob3VsZEJlKGRkIGluc3RhbmNlb2YgVGVtcG9yYWwuRHVyYXRpb24s
IHRydWUpOworICAgIHNob3VsZEJlKGRkLm5lZ2F0ZWQsIFRlbXBvcmFsLkR1cmF0aW9uLnByb3Rv
dHlwZS5uZWdhdGVkKTsKKyAgICBzaG91bGRCZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZGQpLCBE
ZXJpdmVkRHVyYXRpb24ucHJvdG90eXBlKTsKKyAgICBzaG91bGRCZShPYmplY3QuZ2V0UHJvdG90
eXBlT2YoRGVyaXZlZER1cmF0aW9uLnByb3RvdHlwZSksIFRlbXBvcmFsLkR1cmF0aW9uLnByb3Rv
dHlwZSk7Cit9CisKK3Nob3VsZFRocm93KCgpID0+IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigxLCAt
MSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gbmV3IFRlbXBvcmFsLkR1cmF0aW9u
KEluZmluaXR5KSwgUmFuZ2VFcnJvcik7CisKK2NvbnN0IGZpZWxkcyA9IFsneWVhcnMnLCAnbW9u
dGhzJywgJ3dlZWtzJywgJ2RheXMnLCAnaG91cnMnLCAnbWludXRlcycsICdzZWNvbmRzJywgJ21p
bGxpc2Vjb25kcycsICdtaWNyb3NlY29uZHMnLCAnbmFub3NlY29uZHMnXTsKK2NvbnN0IHplcm8g
PSBuZXcgVGVtcG9yYWwuRHVyYXRpb24oKTsKK2NvbnN0IHBvcyA9IG5ldyBUZW1wb3JhbC5EdXJh
dGlvbigxLDIsMyw0LDUsNiw3LDgsOSwxMCk7Citjb25zdCBuZWcgPSBuZXcgVGVtcG9yYWwuRHVy
YXRpb24oLTEsLTIsLTMsLTQsLTUsLTYsLTcsLTgsLTksLTEwKTsKKworZmllbGRzLmZvckVhY2go
KGZpZWxkLCBpKSA9PiB7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24u
cHJvdG90eXBlW2ZpZWxkXSwgVHlwZUVycm9yKTsKKyAgICBzaG91bGRCZSh6ZXJvW2ZpZWxkXSwg
MCk7CisgICAgc2hvdWxkQmUocG9zW2ZpZWxkXSwgaSArIDEpOworICAgIHNob3VsZEJlKG5lZ1tm
aWVsZF0sIC1pIC0gMSk7Cit9KTsKKworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRp
b24ucHJvdG90eXBlLnNpZ24sIFR5cGVFcnJvcik7CitzaG91bGRCZSh6ZXJvLnNpZ24sIDApOwor
c2hvdWxkQmUocG9zLnNpZ24sIDEpOworc2hvdWxkQmUobmVnLnNpZ24sIC0xKTsKKworc2hvdWxk
VGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmJsYW5rLCBUeXBlRXJyb3Ip
Oworc2hvdWxkQmUoemVyby5ibGFuaywgdHJ1ZSk7CitzaG91bGRCZShwb3MuYmxhbmssIGZhbHNl
KTsKK3Nob3VsZEJlKG5lZy5ibGFuaywgZmFsc2UpOworCitzaG91bGRCZShUZW1wb3JhbC5EdXJh
dGlvbi5mcm9tLmxlbmd0aCwgMSk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlv
bi5mcm9tKCksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRp
b24uZnJvbSh7fSksIFR5cGVFcnJvcik7Cit7CisgICAgY29uc3QgYmFkU3RyaW5ncyA9IFsKKyAg
ICAgICAgJycsICdQJywgJ1AxJywgJ1BUJywgJ1AxWVQnLCAnUFQxJywKKyAgICAgICAgJ1AxVzFZ
JywgICdQVDFTMU0nLAorICAgICAgICAnUDEuMVknLCAnUFQxLjFIMU0nLCAnUFQxLjFNMVMnLAor
ICAgICAgICAnUFQxLjExMTExMTExMTFIJywgJ1BUMS4xMTExMTExMTExTScsICdQVDEuMTExMTEx
MTExMVMnLAorICAgICAgICBgUCR7QXJyYXkoMzA5KS5maWxsKDkpLmpvaW4oJycpfVlgCisgICAg
XTsKKyAgICBmb3IgKGNvbnN0IGJhZFN0cmluZyBpbiBiYWRTdHJpbmdzKQorICAgICAgICBzaG91
bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKGJhZFN0cmluZyksIFJhbmdlRXJy
b3IpOworICAgIAorICAgIGNvbnN0IGZyb21TdHJpbmcgPSBUZW1wb3JhbC5EdXJhdGlvbi5mcm9t
KCdQMVkyTTNXNERUNUg2TTcuMDA4MDA5MDEwUycpOworCisgICAgY29uc3QgZHVyYXRpb25MaWtl
ID0ge307CisgICAgZmllbGRzLmZvckVhY2goKGZpZWxkLCBpKSA9PiB7IGR1cmF0aW9uTGlrZVtm
aWVsZF0gPSBpICsgMTsgfSk7CisgICAgY29uc3QgZnJvbUR1cmF0aW9uTGlrZSA9IFRlbXBvcmFs
LkR1cmF0aW9uLmZyb20oZHVyYXRpb25MaWtlKTsKKworICAgIGZvciAoY29uc3QgZmllbGQgb2Yg
ZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJlKGZyb21TdHJpbmdbZmllbGRdLCBwb3NbZmllbGRd
KTsKKyAgICAgICAgc2hvdWxkQmUoZnJvbUR1cmF0aW9uTGlrZVtmaWVsZF0sIHBvc1tmaWVsZF0p
OworICAgIH0KK30KK3Nob3VsZE5vdFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20o
YFAke0FycmF5KDMwOCkuZmlsbCg5KS5qb2luKCcnKX1ZYCkpOworc2hvdWxkQmUoVGVtcG9yYWwu
RHVyYXRpb24uZnJvbSgn4oiScDF5Mm0zdzRkdDVoNm03LjAwODAwOTAxMHMnKS50b1N0cmluZygp
LCAnLVAxWTJNM1c0RFQ1SDZNNy4wMDgwMDkwMVMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0
aW9uLmZyb20oJytQMVkyRFQzSDQuMFMnKS50b1N0cmluZygpLCAnUDFZMkRUM0g0UycpOworc2hv
dWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUFQxLjAzMTI1SCcpLnRvU3RyaW5nKCksICdQ
VDFIMU01Mi41UycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUFQxLjAzMTI1
TScpLnRvU3RyaW5nKCksICdQVDFNMS44NzVTJyk7CisKK2NvbnN0IHBvc0Fic29sdXRlID0gbmV3
IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDEsMiwzLDQsNSw2LDcpOworCitzaG91bGRCZShUZW1w
b3JhbC5EdXJhdGlvbi5jb21wYXJlLmxlbmd0aCwgMik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1w
b3JhbC5EdXJhdGlvbi5jb21wYXJlKCksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4g
VGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh7fSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygo
KSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHplcm8pLCBSYW5nZUVycm9yKTsKK3Nob3Vs
ZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoemVybywge30pLCBUeXBlRXJy
b3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh7IHllYXJz
OiAxIH0sIHplcm8pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1
cmF0aW9uLmNvbXBhcmUoeyBtb250aHM6IDEgfSwgemVybyksIFJhbmdlRXJyb3IpOworc2hvdWxk
VGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh7IHdlZWtzOiAxIH0sIHplcm8p
LCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBh
cmUoemVybywgeyB5ZWFyczogMSB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBU
ZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHplcm8sIHsgbW9udGhzOiAxIH0pLCBSYW5nZUVycm9y
KTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoemVybywgeyB3
ZWVrczogMSB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5jb21w
YXJlKHBvc0Fic29sdXRlLCBwb3NBYnNvbHV0ZSksIDApOworc2hvdWxkQmUoVGVtcG9yYWwuRHVy
YXRpb24uY29tcGFyZShwb3NBYnNvbHV0ZSwgemVybyksIDEpOworc2hvdWxkQmUoVGVtcG9yYWwu
RHVyYXRpb24uY29tcGFyZSh6ZXJvLCBwb3NBYnNvbHV0ZSksIC0xKTsKK3Nob3VsZEJlKFRlbXBv
cmFsLkR1cmF0aW9uLmNvbXBhcmUoJ1BUODY0MDBTJywgJ1AxRCcpLCAwKTsKKworc2hvdWxkQmUo
VGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLndpdGgubGVuZ3RoLCAxKTsKK3Nob3VsZFRocm93
KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS53aXRoLmNhbGwoe30sIHsgeWVhcnM6
IDEgfSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLndpdGgoKSwgVHlwZUVy
cm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ud2l0aCh7fSksIFR5cGVFcnJvcik7CitzaG91
bGRUaHJvdygoKSA9PiB6ZXJvLndpdGgoeyB5ZWFyczogMS4xIH0pLCBSYW5nZUVycm9yKTsKK3No
b3VsZFRocm93KCgpID0+IHBvcy53aXRoKHsgeWVhcnM6IC0xIH0pLCBSYW5nZUVycm9yKTsKK3sK
KyAgICBjb25zdCBmdWxseVVwZGF0ZWQgPSBwb3Mud2l0aChuZWcpOworICAgIGZvciAoY29uc3Qg
ZmllbGQgb2YgZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJlKHplcm8ud2l0aCh7IFtmaWVsZF06
IDEgfSlbZmllbGRdLCAxKTsKKyAgICAgICAgc2hvdWxkQmUoZnVsbHlVcGRhdGVkW2ZpZWxkXSwg
bmVnW2ZpZWxkXSk7CisgICAgfQorfQorCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90
b3R5cGUubmVnYXRlZC5sZW5ndGgsIDApOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVy
YXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQuY2FsbCh7fSksIFR5cGVFcnJvcik7Cit7CisgICAgY29u
c3QgbmVnYXRlZFplcm8gPSB6ZXJvLm5lZ2F0ZWQoKTsKKyAgICBjb25zdCBuZWdhdGVkUG9zID0g
cG9zLm5lZ2F0ZWQoKTsKKyAgICBjb25zdCBuZWdhdGVkTmVnID0gbmVnLm5lZ2F0ZWQoKTsKKyAg
ICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAgICAgICBzaG91bGRCZShuZWdhdGVk
WmVyb1tmaWVsZF0sIHplcm9bZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUobmVnYXRlZE5lZ1tm
aWVsZF0sIHBvc1tmaWVsZF0pOworICAgICAgICBzaG91bGRCZShuZWdhdGVkUG9zW2ZpZWxkXSwg
bmVnW2ZpZWxkXSk7CisgICAgfQorfQorCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90
b3R5cGUuYWJzLmxlbmd0aCwgMCk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlv
bi5wcm90b3R5cGUuYWJzLmNhbGwoe30pLCBUeXBlRXJyb3IpOworeworICAgIGNvbnN0IGFic1pl
cm8gPSB6ZXJvLmFicygpOworICAgIGNvbnN0IGFic1BvcyA9IHBvcy5hYnMoKTsKKyAgICBjb25z
dCBhYnNOZWcgPSBuZWcuYWJzKCk7CisgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHsK
KyAgICAgICAgc2hvdWxkQmUoYWJzWmVyb1tmaWVsZF0sIHplcm9bZmllbGRdKTsKKyAgICAgICAg
c2hvdWxkQmUoYWJzUG9zW2ZpZWxkXSwgcG9zW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKGFi
c05lZ1tmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgIH0KK30KKworZm9yIChjb25zdCBtZXRob2Qg
b2YgWydhZGQnLCAnc3VidHJhY3QnXSkgeworICAgIHNob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9u
LnByb3RvdHlwZVttZXRob2RdLmxlbmd0aCwgMSk7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gVGVt
cG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW21ldGhvZF0uY2FsbCh7IGhvdXJzOiAxIH0pLCBUeXBl
RXJyb3IpOworICAgIHNob3VsZFRocm93KCgpID0+IHplcm9bbWV0aG9kXSgpLCBSYW5nZUVycm9y
KTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiB6ZXJvW21ldGhvZF0oe30pLCBUeXBlRXJyb3IpOwor
ICAgIHNob3VsZFRocm93KCgpID0+IHplcm9bbWV0aG9kXSh7IHllYXJzOiAxIH0pLCBSYW5nZUVy
cm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiB6ZXJvW21ldGhvZF0oeyBtb250aHM6IDEgfSks
IFJhbmdlRXJyb3IpOworICAgIHNob3VsZFRocm93KCgpID0+IHplcm9bbWV0aG9kXSh7IHdlZWtz
OiAxIH0pLCBSYW5nZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiBwb3NbbWV0aG9kXSh7
IHNlY29uZHM6IDEgfSksIFJhbmdlRXJyb3IpOworfQoreworICAgIGNvbnN0IHBvc0R1cmF0aW9u
TGlrZSA9IHsgZGF5czogMSwgaG91cnM6IDIsIG1pbnV0ZXM6IDMsIHNlY29uZHM6IDQsIG1pbGxp
c2Vjb25kczogNSwgbWljcm9zZWNvbmRzOiA2LCBuYW5vc2Vjb25kczogNyB9OworICAgIGNvbnN0
IG5lZ1N0cmluZyA9ICctUDFEVDJIM000LjAwNTAwNjAwN1MnOworCisgICAgY29uc3QgYWRkWmVy
byA9IHBvc0Fic29sdXRlLmFkZCh6ZXJvKTsKKyAgICBjb25zdCBhZGRQb3MgPSBwb3NBYnNvbHV0
ZS5hZGQocG9zRHVyYXRpb25MaWtlKTsKKyAgICBjb25zdCBhZGROZWcgPSBwb3NBYnNvbHV0ZS5h
ZGQobmVnU3RyaW5nKTsKKyAgICBjb25zdCBzdWJaZXJvID0gcG9zQWJzb2x1dGUuc3VidHJhY3Qo
emVybyk7CisgICAgY29uc3Qgc3ViUG9zID0gcG9zQWJzb2x1dGUuc3VidHJhY3QocG9zRHVyYXRp
b25MaWtlKTsKKyAgICBjb25zdCBzdWJOZWcgPSBwb3NBYnNvbHV0ZS5zdWJ0cmFjdChuZWdTdHJp
bmcpOworICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJl
KGFkZFplcm9bZmllbGRdLCBwb3NBYnNvbHV0ZVtmaWVsZF0pOworICAgICAgICBzaG91bGRCZShh
ZGRQb3NbZmllbGRdLCAyICogcG9zQWJzb2x1dGVbZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUo
YWRkTmVnW2ZpZWxkXSwgMCk7CisgICAgICAgIHNob3VsZEJlKHN1Ylplcm9bZmllbGRdLCBwb3NB
YnNvbHV0ZVtmaWVsZF0pOworICAgICAgICBzaG91bGRCZShzdWJQb3NbZmllbGRdLCAwKTsKKyAg
ICAgICAgc2hvdWxkQmUoc3ViTmVnW2ZpZWxkXSwgMiAqIHBvc0Fic29sdXRlW2ZpZWxkXSk7Cisg
ICAgfQorfQorc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFEVDEzSDMxTTMxUycp
LmFkZCgnUDFEVDEzSDMxTTMxUycpLnRvU3RyaW5nKCksICdQM0RUM0gzTTJTJyk7CitzaG91bGRC
ZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCctUFQxTTU5UycpLnN1YnRyYWN0KCdQVDFNNTlTJyku
dG9TdHJpbmcoKSwgJy1QVDNNNThTJyk7CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS5yb3VuZC5sZW5ndGgsIDEpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVy
YXRpb24ucHJvdG90eXBlLnJvdW5kLmNhbGwoe30pLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3co
KCkgPT4gemVyby5yb3VuZCgpLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby5y
b3VuZCh7fSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby5yb3VuZCh7IHNt
YWxsZXN0VW5pdDogJ2JvZ3VzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6
ZXJvLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdib2d1cycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxk
VGhyb3coKCkgPT4gemVyby5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ2hvdXInLCBsYXJnZXN0VW5p
dDogJ25hbm9zZWNvbmQnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8u
cm91bmQoeyBzbWFsbGVzdFVuaXQ6ICduYW5vc2Vjb25kJywgcm91bmRpbmdNb2RlOiAnYm9ndXMn
IH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ucm91bmQoeyBzbWFsbGVz
dFVuaXQ6ICduYW5vc2Vjb25kJywgcm91bmRpbmdJbmNyZW1lbnQ6IDMgfSksIFJhbmdlRXJyb3Ip
Oworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFZJykucm91bmQo
eyBsYXJnZXN0VW5pdDogJ3NlY29uZHMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgp
ID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxTScpLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdz
ZWNvbmRzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJh
dGlvbi5mcm9tKCdQMVcnKS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnc2Vjb25kcycgfSksIFJhbmdl
RXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFEJyku
cm91bmQoeyBsYXJnZXN0VW5pdDogJ21vbnRocycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhy
b3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFEJykucm91bmQoeyBsYXJnZXN0VW5p
dDogJ3dlZWtzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7
IGxhcmdlc3RVbml0OiAnZGF5JyB9KS50b1N0cmluZygpLCAnUDFEVDJIM000LjAwNTAwNjAwN1Mn
KTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdhdXRvJyB9KS50
b1N0cmluZygpLCAnUDFEVDJIM000LjAwNTAwNjAwN1MnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRl
LnJvdW5kKHsgc21hbGxlc3RVbml0OiAnZGF5JyB9KS50b1N0cmluZygpLCAnUDFEJyk7CitzaG91
bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ3NlY29uZCcgfSkudG9TdHJp
bmcoKSwgJ1AxRFQySDNNNFMnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgbGFyZ2Vz
dFVuaXQ6ICdob3VyJywgc21hbGxlc3RVbml0OiAnc2Vjb25kJyB9KS50b1N0cmluZygpLCAnUFQy
NkgzTTRTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnbWlu
dXRlJywgc21hbGxlc3RVbml0OiAnc2Vjb25kJyB9KS50b1N0cmluZygpLCAnUFQxNTYzTTRTJyk7
CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnc2Vjb25kJywgc21h
bGxlc3RVbml0OiAnbWlsbGlzZWNvbmQnIH0pLnRvU3RyaW5nKCksICdQVDkzNzg0LjAwNVMnKTsK
K3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdtaWxsaXNlY29uZCcs
IHNtYWxsZXN0VW5pdDogJ21pY3Jvc2Vjb25kJyB9KS50b1N0cmluZygpLCAnUFQ5Mzc4NC4wMDUw
MDZTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnbWljcm9z
ZWNvbmQnLCBzbWFsbGVzdFVuaXQ6ICdtaWNyb3NlY29uZCcgfSkudG9TdHJpbmcoKSwgJ1BUOTM3
ODQuMDA1MDA2UycpOworc2hvdWxkQmUocG9zQWJzb2x1dGUucm91bmQoeyBsYXJnZXN0VW5pdDog
J25hbm9zZWNvbmQnIH0pLnRvU3RyaW5nKCksICdQVDkzNzg0LjAwNTAwNjAwN1MnKTsKK3Nob3Vs
ZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgc21hbGxlc3RVbml0OiAnc2Vjb25kJywgcm91bmRpbmdJ
bmNyZW1lbnQ6IDMwIH0pLnRvU3RyaW5nKCksICdQMURUMkgzTScpOworc2hvdWxkQmUocG9zQWJz
b2x1dGUucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmQnLCByb3VuZGluZ0luY3JlbWVudDog
MzAsIHJvdW5kaW5nTW9kZTogJ2NlaWwnIH0pLnRvU3RyaW5nKCksICdQMURUMkgzTTMwUycpOwor
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnLVBUMzFTJykucm91bmQoeyBzbWFsbGVz
dFVuaXQ6ICdzZWNvbmQnLCByb3VuZGluZ0luY3JlbWVudDogMzAgfSkudG9TdHJpbmcoKSwgJy1Q
VDMwUycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnLVBUMzFTJykucm91bmQo
eyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmQnLCByb3VuZGluZ0luY3JlbWVudDogMzAsIHJvdW5kaW5n
TW9kZTogJ2Zsb29yJyB9KS50b1N0cmluZygpLCAnLVBUNjBTJyk7CitzaG91bGRCZShUZW1wb3Jh
bC5EdXJhdGlvbi5mcm9tKCctUFQ0NVMnKS5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ3NlY29uZCcs
IHJvdW5kaW5nSW5jcmVtZW50OiAzMCB9KS50b1N0cmluZygpLCAnLVBUNjBTJyk7CitzaG91bGRC
ZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCctUFQ0NVMnKS5yb3VuZCh7IHNtYWxsZXN0VW5pdDog
J3NlY29uZCcsIHJvdW5kaW5nSW5jcmVtZW50OiAzMCwgcm91bmRpbmdNb2RlOiAndHJ1bmMnIH0p
LnRvU3RyaW5nKCksICctUFQzMFMnKTsKKworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJv
dG90eXBlLnRvdGFsLmxlbmd0aCwgMSk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJh
dGlvbi5wcm90b3R5cGUudG90YWwuY2FsbCh7fSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygo
KSA9PiB6ZXJvLnRvdGFsKCksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLnRv
dGFsKHt9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlv
bi5mcm9tKCdQMVknKS50b3RhbCh7IHVuaXQ6ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJvcik7Citz
aG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMU0nKS50b3RhbCh7IHVu
aXQ6ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3Jh
bC5EdXJhdGlvbi5mcm9tKCdQMVcnKS50b3RhbCh7IHVuaXQ6ICdzZWNvbmRzJyB9KSwgUmFuZ2VF
cnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMUQnKS50
b3RhbCh7IHVuaXQ6ICdtb250aHMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+
IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxRCcpLnRvdGFsKHsgdW5pdDogJ3dlZWtzJyB9KSwg
UmFuZ2VFcnJvcik7CitzaG91bGRCZShwb3NBYnNvbHV0ZS50b3RhbCh7IHVuaXQ6ICdkYXlzJyB9
KSwgMS4wODU0NjMwMjA5MDI4NTg4KTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5p
dDogJ2hvdXJzJyB9KSwgMjYuMDUxMTEyNTAxNjY4NjEyKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRl
LnRvdGFsKHsgdW5pdDogJ21pbnV0ZXMnIH0pLCAxNTYzLjA2Njc1MDEwMDExNjcpOworc2hvdWxk
QmUocG9zQWJzb2x1dGUudG90YWwoeyB1bml0OiAnc2Vjb25kcycgfSksIDkzNzg0LjAwNTAwNjAw
Nyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS50b3RhbCh7IHVuaXQ6ICdtaWxsaXNlY29uZHMnIH0p
LCA5Mzc4NDAwNS4wMDYwMDcpOworc2hvdWxkQmUocG9zQWJzb2x1dGUudG90YWwoeyB1bml0OiAn
bWljcm9zZWNvbmRzJyB9KSwgOTM3ODQwMDUwMDYuMDA3KTsKK3Nob3VsZEJlKHBvc0Fic29sdXRl
LnRvdGFsKHsgdW5pdDogJ25hbm9zZWNvbmRzJyB9KSwgOTM3ODQwMDUwMDYwMDcpOworc2hvdWxk
QmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnLVBUMTIzNDU2Nzg5UycpLnRvdGFsKHsgdW5pdDog
J2RheScgfSksIC0xNDI4Ljg5ODAyMDgzMzMzMzIpOworCisvLyBBdCBwcmVzZW50LCB0b0xvY2Fs
ZVN0cmluZyBoYXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgdG9KU09OIG9yIGFyZ3VtZW50bGVzcyB0
b1N0cmluZy4KK2ZvciAoY29uc3QgbWV0aG9kIG9mIFsndG9TdHJpbmcnLCAndG9KU09OJywgJ3Rv
TG9jYWxlU3RyaW5nJ10pIHsgICAgCisgICAgc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJv
dG90eXBlW21ldGhvZF0ubGVuZ3RoLCAwKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiBUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGVbbWV0aG9kXS5jYWxsKHt9KSwgVHlwZUVycm9yKTsKKworICAg
IHNob3VsZEJlKHplcm9bbWV0aG9kXSgpLCAnUFQwUycpOworICAgIHNob3VsZEJlKHBvc1ttZXRo
b2RdKCksICdQMVkyTTNXNERUNUg2TTcuMDA4MDA5MDFTJyk7CisgICAgc2hvdWxkQmUobmVnW21l
dGhvZF0oKSwgJy1QMVkyTTNXNERUNUg2TTcuMDA4MDA5MDFTJyk7CisgICAgCisgICAgc2hvdWxk
QmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDEsMSwxLDEpW21ldGhvZF0oKSwgJ1AxWTFNMVcxRCcp
OworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDEsMSwxKVttZXRo
b2RdKCksICdQVDFIMU0xUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigw
LDAsMCwwLDAsMCwwLDEwMClbbWV0aG9kXSgpLCAnUFQwLjFTJyk7CisgICAgc2hvdWxkQmUobmV3
IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDAsMCwxMDApW21ldGhvZF0oKSwgJ1BUMC4w
MDAxUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCww
LDAsMCwxMDApW21ldGhvZF0oKSwgJ1BUMC4wMDAwMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBU
ZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwxLDEwMDEpW21ldGhvZF0oKSwgJ1BUMi4wMDFT
Jyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDAsMSwx
MDAxKVttZXRob2RdKCksICdQVDAuMDAyMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3Jh
bC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDAsMSwxMDAxKVttZXRob2RdKCksICdQVDAuMDAwMDAy
MDAxUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwx
LDEwMDEsMTAwMSwxMDAxKVttZXRob2RdKCksICdQVDIuMDAyMDAyMDAxUycpOworfQorCitzaG91
bGRCZShwb3MudG9TdHJpbmcoe30pLCBwb3MudG9TdHJpbmcoKSk7CisKK3Nob3VsZFRocm93KCgp
ID0+IHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogJ2Zvb2JhcicgfSksIFJhbmdlRXJyb3Ip
OworZm9yIChjb25zdCB1bml0IG9mIFsneWVhcicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdo
b3VyJywgJ21pbnV0ZSddKSB7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsg
c21hbGxlc3RVbml0OiB1bml0IH0pLCBSYW5nZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9
PiBwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6IGAke3VuaXR9c2AgfSksIFJhbmdlRXJyb3Ip
OworfQorc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiAnc2Vjb25kcycgfSks
ICdQMVkyTTNXNERUNUg2TTdTJyk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVu
aXQ6ICdtaWxsaXNlY29uZHMnIH0pLCAnUDFZMk0zVzREVDVINk03LjAwOFMnKTsKK3Nob3VsZEJl
KHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogJ21pY3Jvc2Vjb25kcycgfSksICdQMVkyTTNX
NERUNUg2TTcuMDA4MDA5UycpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0
OiAnbmFub3NlY29uZHMnIH0pLCAnUDFZMk0zVzREVDVINk03LjAwODAwOTAxMFMnKTsKK2ZvciAo
Y29uc3QgdW5pdCBvZiBbJ3NlY29uZCcsICdtaWxsaXNlY29uZCcsICdtaWNyb3NlY29uZCcsICdu
YW5vc2Vjb25kJ10pCisgICAgc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiB1
bml0IH0pLCBwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6IGAke3VuaXR9c2AgfSkpOworCitz
aG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAt
MSB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBmcmFj
dGlvbmFsU2Vjb25kRGlnaXRzOiAxMCB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9
PiBwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAnYm9ndXMnIH0pLCBSYW5n
ZUVycm9yKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6
IDAgfSksICdQMVkyTTNXNERUNUg2TTdTJyk7Citjb25zdCBkZWNpbWFsUGFydCA9ICcwMDgwMDkw
MTAnOworZm9yIChsZXQgaSA9IDE7IGkgPCAxMDsgaSsrKQorICAgIHNob3VsZEJlKHBvcy50b1N0
cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IGkgfSksIGBQMVkyTTNXNERUNUg2TTcuJHtk
ZWNpbWFsUGFydC5zbGljZSgwLGkpfVNgKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0
aW9uYWxTZWNvbmREaWdpdHM6ICdhdXRvJyB9KSwgcG9zLnRvU3RyaW5nKCkpOworc2hvdWxkQmUo
emVyby50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDIgfSksICdQVDAuMDBTJyk7
CisKK3Nob3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IHJvdW5kaW5nTW9kZTogJ2JvZ3Vz
JyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyByb3VuZGluZ01vZGU6
ICd0cnVuYycgfSksIHBvcy50b1N0cmluZygpKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZy
YWN0aW9uYWxTZWNvbmREaWdpdHM6IDcsIHJvdW5kaW5nTW9kZTogJ2NlaWwnIH0pLCAnUDFZMk0z
VzREVDVINk03LjAwODAwOTFTJyk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFs
U2Vjb25kRGlnaXRzOiAyLCByb3VuZGluZ01vZGU6ICdmbG9vcicgfSksICdQMVkyTTNXNERUNUg2
TTcuMDBTJyk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRz
OiAyLCByb3VuZGluZ01vZGU6ICdoYWxmRXhwYW5kJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMVMn
KTsKKworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnZhbHVlT2YubGVuZ3Ro
LCAwKTsKK3Nob3VsZFRocm93KCgpID0+IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigpLnZhbHVlT2Yo
KSwgVHlwZUVycm9yKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbCBi
L0pTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbAppbmRleCA2Y2Y3OWRmYjZlZTdjYjdkMDFiOGM3
MzUyYjZkNWY3OGE5OWE1MTcwLi5kMGI3ZjM2MGE1ZGM1MGVhY2Q1OGEzNjY5ZDRlMTRkY2I0ZmMy
ZDdmIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwKKysrIGIvSlNUZXN0
cy90ZXN0MjYyL2NvbmZpZy55YW1sCkBAIC02LDYgKzYsNyBAQCBmbGFnczoKICAgQXJyYXkucHJv
dG90eXBlLmF0OiB1c2VBdE1ldGhvZAogICBUeXBlZEFycmF5LnByb3RvdHlwZS5hdDogdXNlQXRN
ZXRob2QKICAgU3RyaW5nLnByb3RvdHlwZS5hdDogdXNlQXRNZXRob2QKKyAgVGVtcG9yYWw6IHVz
ZVRlbXBvcmFsCiAgIGFycmF5LWZpbmQtZnJvbS1sYXN0OiB1c2VBcnJheUZpbmRMYXN0TWV0aG9k
CiBza2lwOgogICBmZWF0dXJlczoKQEAgLTE1LDEyICsxNiwyMSBAQCBza2lwOgogICAgIC0gY2xl
YW51cFNvbWUKICAgICAtIHJlc2l6YWJsZS1hcnJheWJ1ZmZlcgogICAgIC0gT2JqZWN0Lmhhc093
bgotICAgIC0gVGVtcG9yYWwKICAgICAtIGltcG9ydC1hc3NlcnRpb25zCiAgICAgLSBqc29uLW1v
ZHVsZXMKICAgICAtIGNsYXNzLXN0YXRpYy1ibG9jawogICAgIC0gY2FsbGFibGUtYm91bmRhcnkt
cmVhbG1zCiAgIHBhdGhzOgorICAgIC0gdGVzdC9idWlsdC1pbnMvVGVtcG9yYWwvQ2FsZW5kYXIK
KyAgICAtIHRlc3QvYnVpbHQtaW5zL1RlbXBvcmFsL0luc3RhbnQKKyAgICAtIHRlc3QvYnVpbHQt
aW5zL1RlbXBvcmFsL05vdworICAgIC0gdGVzdC9idWlsdC1pbnMvVGVtcG9yYWwvUGxhaW5EYXRl
CisgICAgLSB0ZXN0L2J1aWx0LWlucy9UZW1wb3JhbC9QbGFpbkRhdGVUaW1lCisgICAgLSB0ZXN0
L2J1aWx0LWlucy9UZW1wb3JhbC9QbGFpbk1vbnRoRGF5CisgICAgLSB0ZXN0L2J1aWx0LWlucy9U
ZW1wb3JhbC9QbGFpblRpbWUKKyAgICAtIHRlc3QvYnVpbHQtaW5zL1RlbXBvcmFsL1BsYWluWWVh
ck1vbnRoCisgICAgLSB0ZXN0L2J1aWx0LWlucy9UZW1wb3JhbC9UaW1lWm9uZQorICAgIC0gdGVz
dC9idWlsdC1pbnMvVGVtcG9yYWwvWm9uZWREYXRlVGltZQogICBmaWxlczoKICAgICAjIGh0dHBz
Oi8vZ2l0aHViLmNvbS9jbGF1ZGVwYWNoZS9lcy1sZWdhY3ktZnVuY3Rpb24tcmVmbGVjdGlvbgog
ICAgIC0gdGVzdC9idWlsdC1pbnMvVGhyb3dUeXBlRXJyb3IvdW5pcXVlLXBlci1yZWFsbS1mdW5j
dGlvbi1wcm90by5qcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436911</attachid>
            <date>2021-08-31 10:49:27 -0700</date>
            <delta_ts>2021-08-31 19:56:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228532-20210831104926.patch</filename>
            <type>text/plain</type>
            <size>124423</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxODA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YTc2YmM4YjQ5NDg4NjhhNjMwNTMxZWU4YjMzYTIwNmQ4ZTJlMGM4Li43ZGQ0NWVhNjRmM2U1OWQ5
YTcwYzcwM2VkM2IzMDA0MjU0ZmVlYWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NCBAQAorMjAyMS0wOC0zMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGlt
cGxlbWVudHMgdGhlIER1cmF0aW9uIGNsYXNzIGZvciB0aGUgdXBjb21pbmcgVGVtcG9yYWwgQVBJ
IChjdXJyZW50bHkgYXQgc3RhZ2UgMyBpbiBUQzM5KS4KKyAgICAgICAgU3BlYzogaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtZHVyYXRpb24tb2JqZWN0cwor
ICAgICAgICBEb2NzOiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvZG9jcy9kdXJh
dGlvbi5odG1sCisKKyAgICAgICAgQSBEdXJhdGlvbiBpcyB1bHRpbWF0ZWx5IGFuIGFycmF5IG9m
IGRvdWJsZXMgKHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vj
b25kcywgbXMsIM68cywgbnMpCisgICAgICAgIHdoaWNoIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW5k
IGZyb20gYW4gSVNPIHN0cmluZyByZXByZXNlbnRhdGlvbiAoZS5nLiAiLVAxWTJNM1c0RFQ1SDZN
Ny4xMjM0NTY3ODlTIikKKyAgICAgICAgYW5kIHdoaWNoIHN1cHBvcnRzIHZhcmlvdXMgY2FsY3Vs
YXRpb25zLgorCisgICAgICAgIFRoZSBzcGVjIGlzIHN0aWxsIGluIGZsdXggYW5kIGNlcnRhaW4g
aXNzdWVzIHdlcmUgaWRlbnRpZmllZCBpbiB0aGUgY291cnNlIG9mIHByZXBhcmluZyB0aGlzIHBh
dGNoLgorICAgICAgICBUaGlzIGNvZGUgYWltcyB0byBiZSAiYXMgY29ycmVjdCBhcyBwb3NzaWJs
ZSIgZm9yIHRoZSBtb21lbnQ7IHNtYWxsIGNvcnJlY3Rpb25zIGFyZSBleHBlY3RlZCBpbiB0aGUg
bmVhciBmdXR1cmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJp
dmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogcnVudGltZS9D
b21tb25JZGVudGlmaWVycy5oOgorICAgICAgICAqIHJ1bnRpbWUvSVNPODYwMS5jcHA6IEFkZGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSVNPODYwMS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQp
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OmR1cmF0aW9uU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVy
YXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uaDog
QWRkZWQuCisgICAgICAgICogcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5o
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaDog
QWRkZWQuCisgICAgICAgICogcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OmNyZWF0ZUR1cmF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpzaW5ndWxhclVu
aXQpOgorICAgICAgICAoSlNDOjp0ZW1wb3JhbFVuaXRUeXBlKToKKyAgICAgICAgKEpTQzo6dGVt
cG9yYWxMYXJnZXN0VW5pdCk6CisgICAgICAgIChKU0M6OnRlbXBvcmFsU21hbGxlc3RVbml0KToK
KyAgICAgICAgKEpTQzo6dGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25kRGlnaXRzKToKKyAgICAgICAg
KEpTQzo6c2Vjb25kc1N0cmluZ1ByZWNpc2lvbik6CisgICAgICAgIChKU0M6Om1heGltdW1Sb3Vu
ZGluZ0luY3JlbWVudCk6CisgICAgICAgIChKU0M6OnRlbXBvcmFsUm91bmRpbmdJbmNyZW1lbnQp
OgorICAgICAgICAoSlNDOjpyb3VuZE51bWJlclRvSW5jcmVtZW50KToKKyAgICAgICAgKiBydW50
aW1lL1RlbXBvcmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAg
ICogcnVudGltZS9WTS5oOgorCiAyMDIxLTA4LTMxICBBZGl0aSBTaW5naCAgPGFzaW5naEBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBPYmplY3QuaGFzT3duKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzNGU1YjhmM2Q4NzZlODM2YTg5NjI2YjY3NTZiNDYw
ZjgzYjFjNjJlLi41MTYzNDdkODM4Yjk0MTJmYzhkOTQzOWRkMjU5Y2VlYTNiNGI3ODRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDksNiArMTA5LDggQEAgc2V0KEph
dmFTY3JpcHRDb3JlX09CSkVDVF9MVVRfU09VUkNFUwogICAgIHJ1bnRpbWUvU3ltYm9sUHJvdG90
eXBlLmNwcAogICAgIHJ1bnRpbWUvVGVtcG9yYWxDYWxlbmRhckNvbnN0cnVjdG9yLmNwcAogICAg
IHJ1bnRpbWUvVGVtcG9yYWxDYWxlbmRhclByb3RvdHlwZS5jcHAKKyAgICBydW50aW1lL1RlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAKKyAgICBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAKIAogICAgIHdhc20v
anMvSlNXZWJBc3NlbWJseS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKaW5kZXggYzgyY2YyNjFiYWEwMzM5Y2VjMmQ0OTNlNGVkZGEyN2MwNTA3YzA0MC4uYmEz
NzY5Nzc3NGU1MDgzODY3MTZhOGUwODg4ZjUxYmVmYmQyNmRmZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTE5Myw2ICsxOTMsOCBAQCBPQkpFQ1RfTFVU
X0hFQURFUlMgPSBcCiAgICAgU3ltYm9sUHJvdG90eXBlLmx1dC5oIFwKICAgICBUZW1wb3JhbENh
bGVuZGFyQ29uc3RydWN0b3IubHV0LmggXAogICAgIFRlbXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUu
bHV0LmggXAorICAgIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5sdXQuaCBcCisgICAgVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZS5sdXQuaCBcCiAgICAgVGVtcG9yYWxPYmplY3QubHV0Lmgg
XAogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggXAogICAgIFdl
YkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmx1dC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggMjNjYmIyOThjZWI2NGI3OGM2MDE4MWMyZTRmZWRiOWYzOTg3MWFlYy4u
OTZlMjJkM2RlNDE2MjNlNGYxOGUyNTIxOTVhMTU2ZjgwNzYxZmNjYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTE0MTMsOSArMTQxMywxMyBAQAogCQlBMUQ3OTMwMTFCNDM4NjRC
MDA0NTE2RjUgLyogSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTFENzkyRkIxQjQzODY0QjAwNDUxNkY1IC8q
IEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaCAqLzsgfTsKIAkJQTMyMUFBNkQyNjI2MzU5QjAw
MjNBREEyIC8qIEludGxXb3JrYXJvdW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMzIxQUE2QzI2MjYzNTlCMDAyM0FEQTIgLyogSW50bFdvcmthcm91
bmQuaCAqLzsgfTsKIAkJQTM4MkM1MzEyNjY3MTExRDAwNDJDRDk5IC8qIEluQnlWYXJpYW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzMwNUZCMTIw
QjBGNzg4MDBDRUI4MkIgLyogSW5CeVZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBMzhDQTU5RTI2REQ4NERFMDBDOEQ4NEMgLyogSVNP
ODYwMS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTM4
Q0E1OUMyNkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCAqLzsgfTsKIAkJQTM4RDI1MEUyNTgw
MEQ0NDAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhEMjUwRDI1ODAwRDQzMDA0
MkJGREQgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCAqLzsgfTsKIAkJQTM4RDVC
RkMyNjY2RDNEQTAwQTEwOUE2IC8qIEluQnlTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzOEQ1QkZBMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTNFRTg1NDMyNjI1MTRCMDAwRkM5QjhEIC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0Mw
MENCQ0JBOSAvKiBJbnRsV29ya2Fyb3VuZC5jcHAgKi87IH07CisJCUEzQzdFREI2MjZCMERCMzgw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBM0M3RURCMDI2QjBEQjM2MDA0QzM0QzUgLyog
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oICovOyB9OworCQlBM0M3RURCOTI2QjBEQjM4MDA0
QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTNDN0VEQjMyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVy
YXRpb24uaCAqLzsgfTsKKwkJQTNDN0VEQkEyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTNDN0VEQjQyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3Rvci5oICovOyB9OwogCQlBM0ZGOUJDNzIyMzQ3NDkxMDBCMUE5QUIgLyogWWFyckZsYWdz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBM0ZGOUJD
NTIyMzQ3NDY2MDBCMUE5QUIgLyogWWFyckZsYWdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTUwM0ZBMUExODhFMEZCMDAwMTEwRjE0IC8qIEph
dmFTY3JpcHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1MDNGQTE0MTg4RTBGQUYwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1l
LmggKi87IH07CiAJCUE1MDNGQTFFMTg4RTBGQjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxs
RnJhbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1MDNGQTE4MTg4RTBGQjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVQ
cm90b3R5cGUuaCAqLzsgfTsKQEAgLTQ0NjEsNiArNDQ2NSw4IEBACiAJCUEyNzk1OEQ3RkExMTQy
QjBBQzlFMzY0RCAvKiBXYXNtQ29udGV4dElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbUNvbnRleHRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUEzMjFBQTZDMjYyNjM1OUIwMDIzQURBMiAvKiBJbnRsV29ya2Fyb3VuZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsV29ya2Fyb3VuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBMzc2MTk0MDI2MjUxMjdDMDBDQkNCQTkgLyogSW50bFdvcmth
cm91bmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50bFdvcmth
cm91bmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMzhDQTU5QjI2REQ4NERF
MDBDOEQ4NEMgLyogSVNPODYwMS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJU084NjAxLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTM4Q0E1OUMy
NkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSVNPODYwMS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMzhEMjUwRDI1
ODAwRDQzMDA0MkJGREQgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTM4RDVCRjkyNjY2RDNEQTAwQTEwOUE2
IC8qIEluQnlTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5CeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzOEQ1QkZBMjY2
NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluQnlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0NzYs
NiArNDQ4MiwxMiBAQAogCQlBM0JGODg0RTI0NDgwQkUwMDAxQjlGMzUgLyogSW50bFJlbGF0aXZl
VGltZUZvcm1hdENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBM0JGODg0RjI0NDgwQkUwMDAxQjlGMzUgLyogSW50bFJlbGF0aXZlVGltZUZv
cm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNCRjg4NTAy
NDQ4MEJFMTAwMUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMDI2QjBEQjM2MDA0QzM0QzUgLyogVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEz
QzdFREIxMjZCMERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMjI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjQyNkIwREIzNzAwNEMzNEM1IC8q
IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTNDN0VEQjUyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEz
RkY5QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gWWFyckZsYWdzLmg7IHBhdGggPSB5YXJyL1lhcnJGbGFncy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0ZGOUJDNjIyMzQ3NDY2MDBCMUE5QUIgLyogWWFy
ckZsYWdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFlhcnJGbGFn
cy5jcHA7IHBhdGggPSB5YXJyL1lhcnJGbGFncy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1MDNGQTEzMTg4RTBGQUYwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEphdmFTY3JpcHRDYWxsRnJh
bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzU3Niw2ICs3NTg4LDggQEAK
IAkJCQlBMzIxQUE2QzI2MjYzNTlCMDAyM0FEQTIgLyogSW50bFdvcmthcm91bmQuaCAqLywKIAkJ
CQkwRjI3NUYyQzFFQ0UwNzk2MDA2MjBENDcgLyogSW50cmluc2ljLmNwcCAqLywKIAkJCQk4NkJG
NjQyQTE0OERCMkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8sCisJCQkJQTM4Q0E1OUIyNkRE
ODRERTAwQzhEODRDIC8qIElTTzg2MDEuY3BwICovLAorCQkJCUEzOENBNTlDMjZERDg0REUwMEM4
RDg0QyAvKiBJU084NjAxLmggKi8sCiAJCQkJOEI5RjZENTUxRDU5MTJGQTAwMUM3MzlGIC8qIEl0
ZXJhdGlvbktpbmQuaCAqLywKIAkJCQlGRTRENTVCNzFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0
aW9uU3RhdHVzLmggKi8sCiAJCQkJNzAxMTNENDkxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9y
T3BlcmF0aW9ucy5jcHAgKi8sCkBAIC03OTc0LDYgKzc5ODgsMTIgQEAKIAkJCQlFMzJENERFNDI2
REFGRDQzMDBENDUzM0EgLyogVGVtcG9yYWxDYWxlbmRhckNvbnN0cnVjdG9yLmggKi8sCiAJCQkJ
RTMyRDRERTIyNkRBRkQ0MjAwRDQ1MzNBIC8qIFRlbXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUuY3Bw
ICovLAogCQkJCUUzMkQ0REUxMjZEQUZENDIwMEQ0NTMzQSAvKiBUZW1wb3JhbENhbGVuZGFyUHJv
dG90eXBlLmggKi8sCisJCQkJQTNDN0VEQjEyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVy
YXRpb24uY3BwICovLAorCQkJCUEzQzdFREIzMjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1
cmF0aW9uLmggKi8sCisJCQkJQTNDN0VEQjIyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3Rvci5jcHAgKi8sCisJCQkJQTNDN0VEQjQyNkIwREIzNzAwNEMzNEM1IC8q
IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oICovLAorCQkJCUEzQzdFREI1MjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcCAqLywKKwkJCQlBM0M3RURC
MDI2QjBEQjM2MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oICovLAogCQkJ
CUY2RjE1MDFCMjY5M0QzM0UwMDRCOThFRiAvKiBUZW1wb3JhbE5vdy5jcHAgKi8sCiAJCQkJRjZG
MTUwMTgyNjkzRDMzRDAwNEI5OEVGIC8qIFRlbXBvcmFsTm93LmggKi8sCiAJCQkJRjZGMTUwMTky
NjkzRDMzRTAwNEI5OEVGIC8qIFRlbXBvcmFsT2JqZWN0LmNwcCAqLywKQEAgLTEwMDk0LDYgKzEw
MTE0LDcgQEAKIAkJCQlBMzIxQUE2RDI2MjYzNTlCMDAyM0FEQTIgLyogSW50bFdvcmthcm91bmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5z
aWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNEUwMzU0MUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMzhDQTU5RTI2REQ4
NERFMDBDOEQ4NEMgLyogSVNPODYwMS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQ0UxMzIxRkIx
MURBNDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjQ2NzgwMUZEREE2RjEwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkI0Njc4MTFGRERBNkY3MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMu
aCBpbiBIZWFkZXJzICovLApAQCAtMTA2NzUsNiArMTA2OTYsOSBAQAogCQkJCUUzOURBMURCMjZE
QjVFNTEwMDEwMDQzNyAvKiBUZW1wb3JhbENhbGVuZGFyQ29uc3RydWN0b3IubHV0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzJENERFNzI2REFGRDQzMDBENDUzM0EgLyogVGVtcG9yYWxDYWxlbmRh
clByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM5REExREEyNkRCNUU0QzAwMTAwNDM3
IC8qIFRlbXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlB
M0M3RURCOTI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTNDN0VEQkEyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTNDN0VEQjYyNkIwREIzODAwNEMzNEM1IC8q
IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY2RjE1MDIx
MjY5M0Q0NTAwMDRCOThFRiAvKiBUZW1wb3JhbE9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNDRBN0I0MjBCRjY4RDkwMDIyQjE3MSAvKiBUZXJtaW5hdGVkQ29kZU9y
aWdpbi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggMGFj
YTgxYWIwN2YzOTQ5NWMwMTg2MTdkZTM3NTFhZDNlYzU3OTNkYS4uNmI2ODVlYTQ0YzU5MGRiZWQ2
MjQ1ZDFjMmUzZmFiZjNmYjQ2NWZhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAt
ODUzLDYgKzg1Myw3IEBAIHJ1bnRpbWUvSW50bFNlZ21lbnRlclByb3RvdHlwZS5jcHAKIHJ1bnRp
bWUvSW50bFNlZ21lbnRzLmNwcAogcnVudGltZS9JbnRsU2VnbWVudHNQcm90b3R5cGUuY3BwCiBy
dW50aW1lL0ludGxXb3JrYXJvdW5kLmNwcCBAbm8tdW5pZnkgLy8gQ29uZmluZSBVX0hJREVfRFJB
RlRfQVBJJ3MgZWZmZWN0IHRvIHRoaXMgZmlsZS4KK3J1bnRpbWUvSVNPODYwMS5jcHAKIHJ1bnRp
bWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAogcnVudGltZS9JdGVyYXRvclByb3RvdHlwZS5jcHAK
IHJ1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTEwMTMsNiArMTAxNCw5IEBAIHJ1bnRpbWUvVGVtcGxh
dGVPYmplY3REZXNjcmlwdG9yLmNwcAogcnVudGltZS9UZW1wb3JhbENhbGVuZGFyLmNwcAogcnVu
dGltZS9UZW1wb3JhbENhbGVuZGFyQ29uc3RydWN0b3IuY3BwCiBydW50aW1lL1RlbXBvcmFsQ2Fs
ZW5kYXJQcm90b3R5cGUuY3BwCitydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwCitydW50aW1l
L1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAKK3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZS5jcHAKIHJ1bnRpbWUvVGVtcG9yYWxOb3cuY3BwCiBydW50aW1lL1RlbXBvcmFs
T2JqZWN0LmNwcAogcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRleCA2NjY2YWQ1MWMz
NjIwMjIxOWUwYjJjODNhOGI1MTg4MDA5NGYxZjFiLi43MTRhYTJmZWIyMjRmYTU4ZjI3ZWQ1NTUx
YjY3YzlmMzI2NWNiZDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTk5LDYgKzk5LDcgQEAKICAgICBtYWNybyhjb3VudGVy
cykgXAogICAgIG1hY3JvKGRhdGVTdHlsZSkgXAogICAgIG1hY3JvKGRheSkgXAorICAgIG1hY3Jv
KGRheXMpIFwKICAgICBtYWNybyhkYXlQZXJpb2QpIFwKICAgICBtYWNybyhkZWZpbmVQcm9wZXJ0
eSkgXAogICAgIG1hY3JvKGRlcmVmKSBcCkBAIC0xMzgsNiArMTM5LDcgQEAKICAgICBtYWNybyho
YXNoKSBcCiAgICAgbWFjcm8oaGVhZGVyKSBcCiAgICAgbWFjcm8oaG91cikgXAorICAgIG1hY3Jv
KGhvdXJzKSBcCiAgICAgbWFjcm8oaG91ckN5Y2xlKSBcCiAgICAgbWFjcm8oaG91cjEyKSBcCiAg
ICAgbWFjcm8oaWQpIFwKQEAgLTE1OCw2ICsxNjAsNyBAQAogICAgIG1hY3JvKGpvaW4pIFwKICAg
ICBtYWNybyhsYW5ndWFnZSkgXAogICAgIG1hY3JvKGxhbmd1YWdlRGlzcGxheSkgXAorICAgIG1h
Y3JvKGxhcmdlc3RVbml0KSBcCiAgICAgbWFjcm8obGFzdEluZGV4KSBcCiAgICAgbWFjcm8obGVu
Z3RoKSBcCiAgICAgbWFjcm8obGluZSkgXApAQCAtMTY2LDE0ICsxNjksMTkgQEAKICAgICBtYWNy
byhtYXhpbXVtRnJhY3Rpb25EaWdpdHMpIFwKICAgICBtYWNybyhtYXhpbXVtU2lnbmlmaWNhbnRE
aWdpdHMpIFwKICAgICBtYWNybyhtZXNzYWdlKSBcCisgICAgbWFjcm8obWljcm9zZWNvbmRzKSBc
CisgICAgbWFjcm8obWlsbGlzZWNvbmRzKSBcCiAgICAgbWFjcm8obWluaW11bUZyYWN0aW9uRGln
aXRzKSBcCiAgICAgbWFjcm8obWluaW11bUludGVnZXJEaWdpdHMpIFwKICAgICBtYWNybyhtaW5p
bXVtU2lnbmlmaWNhbnREaWdpdHMpIFwKICAgICBtYWNybyhtaW51dGUpIFwKKyAgICBtYWNybyht
aW51dGVzKSBcCiAgICAgbWFjcm8obW9udGgpIFwKICAgICBtYWNybyhtb250aENvZGUpIFwKKyAg
ICBtYWNybyhtb250aHMpIFwKICAgICBtYWNybyhtdWx0aWxpbmUpIFwKICAgICBtYWNybyhuYW1l
KSBcCisgICAgbWFjcm8obmFub3NlY29uZHMpIFwKICAgICBtYWNybyhuZXh0KSBcCiAgICAgbWFj
cm8obm93KSBcCiAgICAgbWFjcm8obnVtSW5saW5lZENhbGxzKSBcCkBAIC0xOTYsMTMgKzIwNCwx
NyBAQAogICAgIG1hY3JvKHJlZ2lvbikgXAogICAgIG1hY3JvKHJlcGxhY2UpIFwKICAgICBtYWNy
byhyZXNvbHZlKSBcCisgICAgbWFjcm8ocm91bmRpbmdJbmNyZW1lbnQpIFwKKyAgICBtYWNybyhy
b3VuZGluZ01vZGUpIFwKICAgICBtYWNybyhzY3JpcHQpIFwKICAgICBtYWNybyhzZWNvbmQpIFwK
KyAgICBtYWNybyhzZWNvbmRzKSBcCiAgICAgbWFjcm8oc2VnbWVudCkgXAogICAgIG1hY3JvKHNl
bnNpdGl2aXR5KSBcCiAgICAgbWFjcm8oc2V0KSBcCiAgICAgbWFjcm8oc2l6ZSkgXAogICAgIG1h
Y3JvKHNsaWNlKSBcCisgICAgbWFjcm8oc21hbGxlc3RVbml0KSBcCiAgICAgbWFjcm8oc291cmNl
KSBcCiAgICAgbWFjcm8oc291cmNlQ29kZSkgXAogICAgIG1hY3JvKHNvdXJjZVVSTCkgXApAQCAt
MjI5LDEyICsyNDEsMTUgQEAKICAgICBtYWNybyh0eXBlKSBcCiAgICAgbWFjcm8odWlkKSBcCiAg
ICAgbWFjcm8odW5pY29kZSkgXAorICAgIG1hY3JvKHVuaXQpIFwKICAgICBtYWNybyh1c2FnZSkg
XAogICAgIG1hY3JvKHZhbHVlKSBcCiAgICAgbWFjcm8odmFsdWVPZikgXAogICAgIG1hY3JvKHdl
ZWtkYXkpIFwKKyAgICBtYWNybyh3ZWVrcykgXAogICAgIG1hY3JvKHdyaXRhYmxlKSBcCi0gICAg
bWFjcm8oeWVhcikKKyAgICBtYWNybyh5ZWFyKSBcCisgICAgbWFjcm8oeWVhcnMpCiAKICNkZWZp
bmUgSlNDX0NPTU1PTl9JREVOVElGSUVSU19FQUNIX1BSSVZBVEVfRklFTEQobWFjcm8pIFwKICAg
ICBtYWNybyhjb25zdHJ1Y3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0lTTzg2MDEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSVNPODYw
MS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGM5ZDA1YjQ0YmI5NDQ1MmNjMDYzYzFhNDkzOTQ2MmJmYTU5Yjdi
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lTTzg2
MDEuY3BwCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJU084NjAxLmgiCisKKyNpbmNsdWRlICJQYXJzZUludC5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7
CituYW1lc3BhY2UgSVNPODYwMSB7CisKKy8vIER1cmF0aW9uSGFuZGxlRnJhY3Rpb25zICggZkhv
dXJzLCBtaW51dGVzLCBmTWludXRlcywgc2Vjb25kcywgZlNlY29uZHMsIG1pbGxpc2Vjb25kcywg
Zk1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzLCBmTWljcm9zZWNvbmRzLCBuYW5vc2Vjb25kcywg
Zk5hbm9zZWNvbmRzICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2Vj
LXRlbXBvcmFsLWR1cmF0aW9uaGFuZGxlZnJhY3Rpb25zCitzdGF0aWMgdm9pZCBoYW5kbGVGcmFj
dGlvbihEdXJhdGlvbiYgZHVyYXRpb24sIGludCBmYWN0b3IsIFN0cmluZ1ZpZXcgZnJhY3Rpb25T
dHJpbmcsIFRlbXBvcmFsVW5pdCBmcmFjdGlvblR5cGUpCit7CisgICAgQVNTRVJUKGZyYWN0aW9u
U3RyaW5nLmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoZnJhY3Rpb25UeXBlID09IFRlbXBvcmFsVW5p
dDo6SG91ciB8fCBmcmFjdGlvblR5cGUgPT0gVGVtcG9yYWxVbml0OjpNaW51dGUgfHwgZnJhY3Rp
b25UeXBlID09IFRlbXBvcmFsVW5pdDo6U2Vjb25kKTsKKworICAgIGlmIChmcmFjdGlvblR5cGUg
PT0gVGVtcG9yYWxVbml0OjpTZWNvbmQpIHsKKyAgICAgICAgYXV0byBwYWRkZWQgPSBtYWtlU3Ry
aW5nKGZyYWN0aW9uU3RyaW5nLCAiMDAwMDAwMDAiKTsKKyAgICAgICAgU3RyaW5nVmlldyBwYWRk
ZWRWaWV3IHsgcGFkZGVkIH07CisgICAgICAgIGR1cmF0aW9uLnNldE1pbGxpc2Vjb25kcyhmYWN0
b3IgKiBwYXJzZUludChwYWRkZWRWaWV3LnN1YnN0cmluZygwLCAzKSwgMTApKTsKKyAgICAgICAg
ZHVyYXRpb24uc2V0TWljcm9zZWNvbmRzKGZhY3RvciAqIHBhcnNlSW50KHBhZGRlZFZpZXcuc3Vi
c3RyaW5nKDMsIDMpLCAxMCkpOworICAgICAgICBkdXJhdGlvbi5zZXROYW5vc2Vjb25kcyhmYWN0
b3IgKiBwYXJzZUludChwYWRkZWRWaWV3LnN1YnN0cmluZyg2LCAzKSwgMTApKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGRvdWJsZSBmcmFjdGlvbiA9IGZhY3RvciAqIHBhcnNlSW50
KGZyYWN0aW9uU3RyaW5nLCAxMCkgLyBzdGQ6OnBvdygxMCwgZnJhY3Rpb25TdHJpbmcubGVuZ3Ro
KCkpOworICAgIGlmICghZnJhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChmcmFj
dGlvblR5cGUgPT0gVGVtcG9yYWxVbml0OjpIb3VyKSB7CisgICAgICAgIGZyYWN0aW9uICo9IDYw
OworICAgICAgICBkdXJhdGlvbi5zZXRNaW51dGVzKHN0ZDo6dHJ1bmMoZnJhY3Rpb24pKTsKKyAg
ICAgICAgZnJhY3Rpb24gPSBzdGQ6OmZtb2QoZnJhY3Rpb24sIDEpOworICAgICAgICBpZiAoIWZy
YWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZyYWN0aW9uICo9IDYw
OworICAgIGR1cmF0aW9uLnNldFNlY29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgIGZy
YWN0aW9uID0gc3RkOjpmbW9kKGZyYWN0aW9uLCAxKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBmcmFjdGlvbiAqPSAxMDAwOworICAgIGR1cmF0aW9uLnNldE1p
bGxpc2Vjb25kcyhzdGQ6OnRydW5jKGZyYWN0aW9uKSk7CisgICAgZnJhY3Rpb24gPSBzdGQ6OmZt
b2QoZnJhY3Rpb24sIDEpOworICAgIGlmICghZnJhY3Rpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZyYWN0aW9uICo9IDEwMDA7CisgICAgZHVyYXRpb24uc2V0TWljcm9zZWNvbmRzKHN0ZDo6
dHJ1bmMoZnJhY3Rpb24pKTsKKyAgICBmcmFjdGlvbiA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMSk7
CisgICAgaWYgKCFmcmFjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgZHVyYXRpb24uc2V0
TmFub3NlY29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbiAqIDEwMDApKTsKK30KKworLy8gUGFyc2VU
ZW1wb3JhbER1cmF0aW9uU3RyaW5nICggaXNvU3RyaW5nICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9w
cm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXBhcnNldGVtcG9yYWxkdXJhdGlvbnN0cmlu
ZwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBzdGQ6Om9wdGlvbmFs
PER1cmF0aW9uPiBwYXJzZUR1cmF0aW9uKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4mIGJ1ZmZlcikKK3sKKyAgICAvLyBJU08gODYwMSBkdXJhdGlvbiBzdHJpbmdzIGFyZSBsaWtl
ICItUDFZMk0zVzREVDVINk03LjEyMzQ1Njc4OVMiLiBOb3RlczoKKyAgICAvLyAtIGNhc2UgaW5z
ZW5zaXRpdmUKKyAgICAvLyAtIHNpZ246ICsgLSDiiJIoVSsyMjEyKQorICAgIC8vIC0gc2VwYXJh
dG9yOiAuICwKKyAgICAvLyAtIFQgaXMgcHJlc2VudCBpZmYgdGhlcmUgaXMgYSB0aW1lIHBhcnQK
KyAgICAvLyAtIGludGVncmFsIHBhcnRzIGNhbiBoYXZlIGFueSBudW1iZXIgb2YgZGlnaXRzIGJ1
dCBmcmFjdGlvbmFsIHBhcnRzIGhhdmUgYXQgbW9zdCA5CisgICAgLy8gLSBob3VycyBhbmQgbWlu
dXRlcyBjYW4gaGF2ZSBmcmFjdGlvbmFsIHBhcnRzIHRvbywgYnV0IG9ubHkgYXMgdGhlIExBU1Qg
cGFydCBvZiB0aGUgc3RyaW5nCisgICAgaWYgKGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA8IDMp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBEdXJhdGlvbiByZXN1bHQgeyB9
OworCisgICAgaW50IGZhY3RvciA9IDE7CisgICAgaWYgKCpidWZmZXIgPT0gJysnKQorICAgICAg
ICBidWZmZXIuYWR2YW5jZSgpOworICAgIGVsc2UgaWYgKCpidWZmZXIgPT0gJy0nIHx8ICpidWZm
ZXIgPT0gMHgyMjEyKSB7CisgICAgICAgIGZhY3RvciA9IC0xOworICAgICAgICBidWZmZXIuYWR2
YW5jZSgpOworICAgIH0KKworICAgIGlmICh0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgIT0gJ1AnKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYnVmZmVyLmFkdmFuY2UoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGRhdGVQYXJ0SW5kZXggPSAwOyBkYXRlUGFydEluZGV4IDwgNCAmJiBi
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgqYnVmZmVyKTsg
YnVmZmVyLmFkdmFuY2UoKSkgeworICAgICAgICB1bnNpZ25lZCBkaWdpdHMgPSAxOworICAgICAg
ICB3aGlsZSAoZGlnaXRzIDwgYnVmZmVyLmxlbmd0aFJlbWFpbmluZygpICYmIGlzQVNDSUlEaWdp
dChidWZmZXJbZGlnaXRzXSkpCisgICAgICAgICAgICBkaWdpdHMrKzsKKworICAgICAgICBkb3Vi
bGUgaW50ZWdlciA9IGZhY3RvciAqIHBhcnNlSW50KHsgYnVmZmVyLnBvc2l0aW9uKCksIGRpZ2l0
cyB9LCAxMCk7CisgICAgICAgIGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRzKTsKKyAgICAgICAgaWYg
KGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
ICAgICBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpID09ICdZJyAmJiAhZGF0ZVBhcnRJbmRleCkg
eworICAgICAgICAgICAgcmVzdWx0LnNldFllYXJzKGludGVnZXIpOworICAgICAgICAgICAgZGF0
ZVBhcnRJbmRleCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIp
ID09ICdNJyAmJiBkYXRlUGFydEluZGV4IDwgMikgeworICAgICAgICAgICAgcmVzdWx0LnNldE1v
bnRocyhpbnRlZ2VyKTsKKyAgICAgICAgICAgIGRhdGVQYXJ0SW5kZXggPSAyOworICAgICAgICB9
IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnVycgJiYgZGF0ZVBhcnRJbmRleCA8
IDMpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRXZWVrcyhpbnRlZ2VyKTsKKyAgICAgICAgICAg
IGRhdGVQYXJ0SW5kZXggPSAzOworICAgICAgICB9IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVm
ZmVyKSA9PSAnRCcpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXREYXlzKGludGVnZXIpOworICAg
ICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAoYnVmZmVyLmxlbmd0aFJlbWFpbmluZygp
IDwgMyB8fCB0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgIT0gJ1QnKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgYnVmZmVyLmFkdmFuY2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHRp
bWVQYXJ0SW5kZXggPSAwOyB0aW1lUGFydEluZGV4IDwgMyAmJiBidWZmZXIuaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgqYnVmZmVyKTsgYnVmZmVyLmFkdmFuY2UoKSkg
eworICAgICAgICB1bnNpZ25lZCBkaWdpdHMgPSAxOworICAgICAgICB3aGlsZSAoZGlnaXRzIDwg
YnVmZmVyLmxlbmd0aFJlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdChidWZmZXJbZGlnaXRzXSkp
CisgICAgICAgICAgICBkaWdpdHMrKzsKKworICAgICAgICBkb3VibGUgaW50ZWdlciA9IGZhY3Rv
ciAqIHBhcnNlSW50KHsgYnVmZmVyLnBvc2l0aW9uKCksIGRpZ2l0cyB9LCAxMCk7CisgICAgICAg
IGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRzKTsKKyAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBTdHJpbmdWaWV3IGZy
YWN0aW9uYWxQYXJ0OworICAgICAgICBpZiAoKmJ1ZmZlciA9PSAnLicgfHwgKmJ1ZmZlciA9PSAn
LCcpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hZHZhbmNlKCk7CisgICAgICAgICAgICBkaWdpdHMg
PSAwOworICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cyA8IGJ1ZmZlci5sZW5ndGhSZW1haW5pbmco
KSAmJiBpc0FTQ0lJRGlnaXQoYnVmZmVyW2RpZ2l0c10pKQorICAgICAgICAgICAgICAgIGRpZ2l0
cysrOworICAgICAgICAgICAgaWYgKCFkaWdpdHMgfHwgZGlnaXRzID4gOSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgICAgICBmcmFjdGlvbmFsUGFydCA9
IHsgYnVmZmVyLnBvc2l0aW9uKCksIGRpZ2l0cyB9OworICAgICAgICAgICAgYnVmZmVyLmFkdmFu
Y2VCeShkaWdpdHMpOworICAgICAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9B
U0NJSVVwcGVyKCpidWZmZXIpID09ICdIJyAmJiAhdGltZVBhcnRJbmRleCkgeworICAgICAgICAg
ICAgcmVzdWx0LnNldEhvdXJzKGludGVnZXIpOworICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxQ
YXJ0KSB7CisgICAgICAgICAgICAgICAgaGFuZGxlRnJhY3Rpb24ocmVzdWx0LCBmYWN0b3IsIGZy
YWN0aW9uYWxQYXJ0LCBUZW1wb3JhbFVuaXQ6OkhvdXIpOworICAgICAgICAgICAgICAgIHRpbWVQ
YXJ0SW5kZXggPSAzOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGltZVBh
cnRJbmRleCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpID09
ICdNJyAmJiB0aW1lUGFydEluZGV4IDwgMikgeworICAgICAgICAgICAgcmVzdWx0LnNldE1pbnV0
ZXMoaW50ZWdlcik7CisgICAgICAgICAgICBpZiAoZnJhY3Rpb25hbFBhcnQpIHsKKyAgICAgICAg
ICAgICAgICBoYW5kbGVGcmFjdGlvbihyZXN1bHQsIGZhY3RvciwgZnJhY3Rpb25hbFBhcnQsIFRl
bXBvcmFsVW5pdDo6TWludXRlKTsKKyAgICAgICAgICAgICAgICB0aW1lUGFydEluZGV4ID0gMzsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRpbWVQYXJ0SW5kZXggPSAyOwor
ICAgICAgICB9IGVsc2UgaWYgKHRvQVNDSUlVcHBlcigqYnVmZmVyKSA9PSAnUycpIHsKKyAgICAg
ICAgICAgIHJlc3VsdC5zZXRTZWNvbmRzKGludGVnZXIpOworICAgICAgICAgICAgaWYgKGZyYWN0
aW9uYWxQYXJ0KQorICAgICAgICAgICAgICAgIGhhbmRsZUZyYWN0aW9uKHJlc3VsdCwgZmFjdG9y
LCBmcmFjdGlvbmFsUGFydCwgVGVtcG9yYWxVbml0OjpTZWNvbmQpOworICAgICAgICAgICAgdGlt
ZVBhcnRJbmRleCA9IDM7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmco
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0ZDo6b3B0aW9uYWw8RHVyYXRpb24+IHBhcnNlRHVyYXRpb24oU3RyaW5nVmlldyBzdHJp
bmcpCit7CisgICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1
dG8gYnVmZmVyKSAtPiBzdGQ6Om9wdGlvbmFsPER1cmF0aW9uPiB7CisgICAgICAgIHJldHVybiBw
YXJzZUR1cmF0aW9uKGJ1ZmZlcik7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIElTTzg2
MDEKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSVNPODYwMS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSVNPODYw
MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjRmZWE4OTdmZmU3M2Y3YWM3Y2ZjNWJiMGU4MDc4Zjc4NzAxZDNjMTgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JU084NjAx
LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlRlbXBvcmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIElT
Tzg2MDEgeworCitzdHJ1Y3QgRHVyYXRpb24geworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0g
c3RkOjphcnJheTxkb3VibGUsIG51bWJlck9mVGVtcG9yYWxVbml0cz46OmNvbnN0X2l0ZXJhdG9y
OworCisjZGVmaW5lIEpTQ19ERUZJTkVfU1VCRFVSQVRJT05fRklFTEQobmFtZSwgY2FwaXRhbGl6
ZWROYW1lKSBcCisgICAgZG91YmxlIG5hbWUjI3MoKSBjb25zdCB7IHJldHVybiBkYXRhW3N0YXRp
Y19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6Y2FwaXRhbGl6ZWROYW1lKV07IH0gXAorICAg
IHZvaWQgc2V0IyNjYXBpdGFsaXplZE5hbWUjI3MoZG91YmxlIHZhbHVlKSB7IGRhdGFbc3RhdGlj
X2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpjYXBpdGFsaXplZE5hbWUpXSA9IHZhbHVlOyB9
CisgICAgSlNDX1RFTVBPUkFMX1VOSVRTKEpTQ19ERUZJTkVfU1VCRFVSQVRJT05fRklFTEQpOwor
I3VuZGVmIEpTQ19ERUZJTkVfU1VCRFVSQVRJT05fRklFTEQKKworICAgIGRvdWJsZSYgb3BlcmF0
b3JbXShzaXplX3QgaSkgeyByZXR1cm4gZGF0YVtpXTsgfQorICAgIGNvbnN0IGRvdWJsZSYgb3Bl
cmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gZGF0YVtpXTsgfQorICAgIGNvbnN0X2l0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gZGF0YS5iZWdpbigpOyB9CisgICAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gZGF0YS5lbmQoKTsgfQorICAgIHZvaWQgY2xl
YXIoKSB7IGRhdGEuZmlsbCgwKTsgfQorCisgICAgc3RkOjphcnJheTxkb3VibGUsIG51bWJlck9m
VGVtcG9yYWxVbml0cz4gZGF0YTsKK307CisKK3N0ZDo6b3B0aW9uYWw8RHVyYXRpb24+IHBhcnNl
RHVyYXRpb24oU3RyaW5nVmlldyk7CisKK30gLy8gbmFtZXNwYWNlIElTTzg2MDEKK30gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCmluZGV4IGQ0NTY3ZWZlOTAyNmM5YTY0NzVlZDQ1YWJlYTJhZWM2Yzc0ODY0NDMu
LjZiMmY0NjE4ZGExNzM4YTI4YzA2M2M2ZWVhNjJmNjg2OGM3NGJkZjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTIwMiw4ICsy
MDIsOSBAQAogI2luY2x1ZGUgIlN5bWJvbE9iamVjdC5oIgogI2luY2x1ZGUgIlN5bWJvbFByb3Rv
dHlwZS5oIgogI2luY2x1ZGUgIlRlbXBvcmFsQ2FsZW5kYXIuaCIKLSNpbmNsdWRlICJUZW1wb3Jh
bENhbGVuZGFyQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJUZW1wb3JhbENhbGVuZGFyUHJvdG90
eXBlLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgorI2luY2x1ZGUgIlRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJUZW1wb3JhbE9iamVjdC5oIgogI2luY2x1
ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUNhcGFiaWxpdGllcy5oIgpAQCAt
MTIyMiw2ICsxMjIzLDEzIEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUg
IyMgQ29uc3RydWN0b3IgPSBmZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgICAgICAgICAg
ICAgaW5pdC5zZXQoVGVtcG9yYWxDYWxlbmRhcjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGds
b2JhbE9iamVjdCwgY2FsZW5kYXJQcm90b3R5cGUpKTsKICAgICAgICAgICAgIH0pOwogCisgICAg
ICAgIG1fZHVyYXRpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICAgICAgW10gKGNvbnN0
IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKKyAgICAgICAgICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25l
cik7CisgICAgICAgICAgICAgICAgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSogZHVyYXRpb25Q
cm90b3R5cGUgPSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlOjpjcmVhdGUoaW5pdC52bSwgVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgICAgICAgICAgICAg
IGluaXQuc2V0KFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBnbG9i
YWxPYmplY3QsIGR1cmF0aW9uUHJvdG90eXBlKSk7CisgICAgICAgICAgICB9KTsKKwogICAgICAg
ICBUZW1wb3JhbE9iamVjdCogdGVtcG9yYWwgPSBUZW1wb3JhbE9iamVjdDo6Y3JlYXRlKHZtLCBU
ZW1wb3JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzKSk7CiAgICAgICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5UZW1wb3JhbCwgdGVt
cG9yYWwsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
KTsKICAgICB9CkBAIC0yMTAxLDYgKzIxMDksNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdGhpc09i
amVjdC0+bV9udW1iZXJGb3JtYXRTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAKICAgICB0aGlz
T2JqZWN0LT5tX2NhbGVuZGFyU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOworICAgIHRoaXNPYmpl
Y3QtPm1fZHVyYXRpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX251bGxHZXR0ZXJGdW5jdGlvbik7CiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9udWxsU2V0dGVyRnVuY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggMTI0NjU4ZjI0NTJlMGM1YWQw
ZmRlZWIxNGU5MGJlNjM4OThkYjMyOC4uZDRkZTMwYjYxMzZlOWNjOTMxODQyMDc0MjRlNDdhZjJh
MTE1ZTk5MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCkBAIC0zMjUsNiArMzI1LDcgQEAgcHVibGljOgogICAgIExhenlDbGFzc1N0cnVjdHVy
ZSBtX251bWJlckZvcm1hdFN0cnVjdHVyZTsKIAogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9i
amVjdCwgU3RydWN0dXJlPiBtX2NhbGVuZGFyU3RydWN0dXJlOworICAgIExhenlQcm9wZXJ0eTxK
U0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2R1cmF0aW9uU3RydWN0dXJlOwogCiAgICAgV3Jp
dGVCYXJyaWVyPE51bGxHZXR0ZXJGdW5jdGlvbj4gbV9udWxsR2V0dGVyRnVuY3Rpb247CiAgICAg
V3JpdGVCYXJyaWVyPE51bGxTZXR0ZXJGdW5jdGlvbj4gbV9udWxsU2V0dGVyRnVuY3Rpb247CkBA
IC04NzMsNiArODc0LDcgQEAgcHVibGljOgogICAgIEpTT2JqZWN0KiBudW1iZXJGb3JtYXRQcm90
b3R5cGUoKSB7IHJldHVybiBtX251bWJlckZvcm1hdFN0cnVjdHVyZS5wcm90b3R5cGUodGhpcyk7
IH0KIAogICAgIFN0cnVjdHVyZSogY2FsZW5kYXJTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX2NhbGVu
ZGFyU3RydWN0dXJlLmdldCh0aGlzKTsgfQorICAgIFN0cnVjdHVyZSogZHVyYXRpb25TdHJ1Y3R1
cmUoKSB7IHJldHVybiBtX2R1cmF0aW9uU3RydWN0dXJlLmdldCh0aGlzKTsgfQogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRSZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKGJvb2wpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcmVtb3RlRGVidWdnaW5nRW5hYmxlZCgpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlv
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zODBlNmM2ZTJmMWE3ODc5NTFiODk0MGEzNWMyY2YxOGZlYjZmMjJlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxE
dXJhdGlvbi5jcHAKQEAgLTAsMCArMSw2MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKKworI2luY2x1ZGUgIklu
dGxPYmplY3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgQVNT
RVJUKGluZGV4IDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzKTsKKyAgICBzd2l0Y2ggKHN0YXRpY19j
YXN0PFRlbXBvcmFsVW5pdD4oaW5kZXgpKSB7CisjZGVmaW5lIEpTQ19URU1QT1JBTF9EVVJBVElP
Tl9QUk9QRVJUWV9OQU1FKG5hbWUsIGNhcGl0YWxpemVkTmFtZSkgY2FzZSBUZW1wb3JhbFVuaXQ6
OmNhcGl0YWxpemVkTmFtZTogcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUjI3M7IAorICAg
ICAgICBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX1RFTVBPUkFMX0RVUkFUSU9OX1BST1BFUlRZX05B
TUUpCisjdW5kZWYgSlNDX1RFTVBPUkFMX0RVUkFUSU9OX1BST1BFUlRZX05BTUUKKyAgICB9Cit9
CisKK2NvbnN0IENsYXNzSW5mbyBUZW1wb3JhbER1cmF0aW9uOjpzX2luZm8gPSB7ICJPYmplY3Qi
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRl
bXBvcmFsRHVyYXRpb24pIH07CisKK1RlbXBvcmFsRHVyYXRpb24qIFRlbXBvcmFsRHVyYXRpb246
OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdWJkdXJhdGlvbnMmJiBzdWJk
dXJhdGlvbnMpCit7CisgICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8VGVtcG9yYWxEdXJhdGlvbj4odm0uaGVhcCkpIFRlbXBvcmFsRHVyYXRpb24odm0sIHN0cnVj
dHVyZSwgV1RGTW92ZShzdWJkdXJhdGlvbnMpKTsKKyAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitTdHJ1Y3R1cmUqIFRlbXBvcmFsRHVyYXRp
b246OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6VGVtcG9yYWxEdXJhdGlvbihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdWJkdXJhdGlvbnMmJiBzdWJkdXJhdGlvbnMp
CisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3N1YmR1cmF0aW9ucyhXVEZNb3Zl
KHN1YmR1cmF0aW9ucykpCit7Cit9CisKK3ZvaWQgVGVtcG9yYWxEdXJhdGlvbjo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NF
UlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworfQorCisvLyBJc1ZhbGlkRHVyYXRpb24gKCB5ZWFy
cywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vj
b25kcywgbWljcm9zZWNvbmRzLCBuYW5vc2Vjb25kcyApCisvLyBodHRwczovL3RjMzkuZXMvcHJv
cG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC1pc3ZhbGlkZHVyYXRpb24KK3N0YXRpYyBib29s
IGlzVmFsaWREdXJhdGlvbihjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMmIHN1
YmR1cmF0aW9ucykKK3sKKyAgICBpbnQgc2lnbiA9IDA7CisgICAgZm9yIChhdXRvIHZhbHVlIDog
c3ViZHVyYXRpb25zKSB7CisgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZSh2YWx1ZSkgfHwgKHZh
bHVlIDwgMCAmJiBzaWduID4gMCkgfHwgKHZhbHVlID4gMCAmJiBzaWduIDwgMCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFzaWduICYmIHZhbHVlKQorICAgICAg
ICAgICAgc2lnbiA9IHZhbHVlID4gMCA/IDEgOiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gQ3JlYXRlVGVtcG9yYWxEdXJhdGlvbiAoIHllYXJzLCBtb250aHMsIHdlZWtz
LCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29u
ZHMsIG5hbm9zZWNvbmRzIFsgLCBuZXdUYXJnZXQgXSApCisvLyBodHRwczovL3RjMzkuZXMvcHJv
cG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC1jcmVhdGV0ZW1wb3JhbGR1cmF0aW9uCitUZW1w
b3JhbER1cmF0aW9uKiBUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVhdGVJZlZhbGlkKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN1YmR1cmF0aW9ucyYmIHN1YmR1cmF0aW9ucywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghaXNWYWxp
ZER1cmF0aW9uKHN1YmR1cmF0aW9ucykpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0aWVzIG11c3QgYmUgZmlu
aXRlIGFuZCBvZiBjb25zaXN0ZW50IHNpZ24iX3MpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIHJldHVybiBUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUodm0sIHN0cnVjdHVyZSA/
IHN0cnVjdHVyZSA6IGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKSwgV1RGTW92ZShz
dWJkdXJhdGlvbnMpKTsKK30KKworLy8gVG9UZW1wb3JhbER1cmF0aW9uUmVjb3JkICggdGVtcG9y
YWxEdXJhdGlvbkxpa2UgKQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNz
ZWMtdGVtcG9yYWwtdG90ZW1wb3JhbGR1cmF0aW9ucmVjb3JkCitUZW1wb3JhbER1cmF0aW9uOjpT
dWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6ZnJvbU9iamVjdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogZHVyYXRpb25MaWtlKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBBU1NFUlQoIWR1cmF0aW9uTGlrZS0+aW5oZXJpdHM8VGVtcG9yYWxEdXJhdGlv
bj4odm0pKTsKKworICAgIFN1YmR1cmF0aW9ucyByZXN1bHQ7CisgICAgYXV0byBoYXNSZWxldmFu
dFByb3BlcnR5ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlRl
bXBvcmFsVW5pdHM7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZHVyYXRpb25MaWtl
LT5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUodm0sIGkpKTsKKworICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICAgICAgcmVzdWx0W2ldID0gMDsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaGFzUmVsZXZhbnRQcm9wZXJ0
eSA9IHRydWU7CisgICAgICAgIHJlc3VsdFtpXSA9IHZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVj
dCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAg
aWYgKCFpc0ludGVnZXIocmVzdWx0W2ldKSkgeworICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0aWVzIG11c3Qg
YmUgaW50ZWdlcnMiX3MpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghaGFzUmVsZXZhbnRQcm9wZXJ0eSkgeworICAgICAgICB0aHJvd1R5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiT2JqZWN0IG11c3QgY29udGFpbiBhdCBsZWFzdCBv
bmUgVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydHkiX3MpOworICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIFRvVGVtcG9yYWxEdXJhdGlvbiAo
IGl0ZW0gKQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9y
YWwtdG90ZW1wb3JhbGR1cmF0aW9uCitUZW1wb3JhbER1cmF0aW9uKiBUZW1wb3JhbER1cmF0aW9u
Ojp0b0R1cmF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgaXRlbVZh
bHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmluaGVyaXRz
PFRlbXBvcmFsRHVyYXRpb24+KHZtKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxUZW1wb3JhbER1
cmF0aW9uKj4oaXRlbVZhbHVlKTsKKworICAgIGlmIChpdGVtVmFsdWUuaXNPYmplY3QoKSkKKyAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVh
dGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgZnJvbU9iamVjdChnbG9iYWxPYmplY3QsIGFzT2JqZWN0
KGl0ZW1WYWx1ZSkpKSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gaXRlbVZhbHVlLnRvV1RGU3Ry
aW5nKGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7CisKKyAgICBhdXRvIHBhcnNlZFN1YmR1cmF0aW9ucyA9IElTTzg2MDE6OnBhcnNlRHVyYXRp
b24oc3RyaW5nKTsKKyAgICBpZiAoIXBhcnNlZFN1YmR1cmF0aW9ucykgeworICAgICAgICB0aHJv
d1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkNvdWxkIG5vdCBwYXJzZSBEdXJhdGlv
biBzdHJpbmciX3MpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIFRlbXBvcmFsRHVyYXRpb246OnRyeUNyZWF0ZUlmVmFsaWQo
Z2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHBhcnNlZFN1YmR1cmF0aW9ucy52YWx1ZSgpKSkpOworfQor
CitUZW1wb3JhbER1cmF0aW9uKiBUZW1wb3JhbER1cmF0aW9uOjpmcm9tKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgaXRlbVZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKworICAgIGlmIChpdGVtVmFsdWUuaW5oZXJpdHM8VGVtcG9yYWxEdXJh
dGlvbj4odm0pKSB7CisgICAgICAgIFN1YmR1cmF0aW9ucyBjbG9uZWQgPSBqc0Nhc3Q8VGVtcG9y
YWxEdXJhdGlvbio+KGl0ZW1WYWx1ZSktPm1fc3ViZHVyYXRpb25zOworICAgICAgICByZXR1cm4g
VGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0
dXJlKCksIFdURk1vdmUoY2xvbmVkKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRvRHVyYXRpb24o
Z2xvYmFsT2JqZWN0LCBpdGVtVmFsdWUpOworfQorCisvLyBUb3RhbER1cmF0aW9uTmFub3NlY29u
ZHMgKCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3Nl
Y29uZHMsIG5hbm9zZWNvbmRzLCBvZmZzZXRTaGlmdCApCisvLyBodHRwczovL3RjMzkuZXMvcHJv
cG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC10b3RhbGR1cmF0aW9ubmFub3NlY29uZHMKK3N0
YXRpYyBkb3VibGUgdG90YWxOYW5vc2Vjb25kcyhUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlv
bnMmIHN1YmR1cmF0aW9ucykKK3sKKyAgICBhdXRvIGhvdXJzID0gMjQgKiBzdWJkdXJhdGlvbnMu
ZGF5cygpICsgc3ViZHVyYXRpb25zLmhvdXJzKCk7CisgICAgYXV0byBtaW51dGVzID0gNjAgKiBo
b3VycyArIHN1YmR1cmF0aW9ucy5taW51dGVzKCk7CisgICAgYXV0byBzZWNvbmRzID0gNjAgKiBt
aW51dGVzICsgc3ViZHVyYXRpb25zLnNlY29uZHMoKTsKKyAgICBhdXRvIG1pbGxpc2Vjb25kcyA9
IDEwMDAgKiBzZWNvbmRzICsgc3ViZHVyYXRpb25zLm1pbGxpc2Vjb25kcygpOworICAgIGF1dG8g
bWljcm9zZWNvbmRzID0gMTAwMCAqIG1pbGxpc2Vjb25kcyArIHN1YmR1cmF0aW9ucy5taWNyb3Nl
Y29uZHMoKTsKKyAgICByZXR1cm4gMTAwMCAqIG1pY3Jvc2Vjb25kcyArIHN1YmR1cmF0aW9ucy5u
YW5vc2Vjb25kcygpOworfQorCitKU1ZhbHVlIFRlbXBvcmFsRHVyYXRpb246OmNvbXBhcmUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZU9uZSwgSlNWYWx1ZSB2YWx1
ZVR3bykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogb25lID0gdG9EdXJhdGlv
bihnbG9iYWxPYmplY3QsIHZhbHVlT25lKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgYXV0byogdHdvID0gdG9EdXJhdGlvbihnbG9iYWxPYmplY3QsIHZhbHVl
VHdvKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKG9u
ZS0+eWVhcnMoKSB8fCB0d28tPnllYXJzKCkgfHwgb25lLT5tb250aHMoKSB8fCB0d28tPm1vbnRo
cygpIHx8IG9uZS0+d2Vla3MoKSB8fCB0d28tPndlZWtzKCkpIHsKKyAgICAgICAgdGhyb3dSYW5n
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3QgY29tcGFyZSBhIGR1cmF0aW9uIG9m
IHllYXJzLCBtb250aHMsIG9yIHdlZWtzIHdpdGhvdXQgYSByZWxhdGl2ZVRvIG9wdGlvbiJfcyk7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgYXV0byBuc09uZSA9IHRvdGFsTmFu
b3NlY29uZHMob25lLT5tX3N1YmR1cmF0aW9ucyk7CisgICAgYXV0byBuc1R3byA9IHRvdGFsTmFu
b3NlY29uZHModHdvLT5tX3N1YmR1cmF0aW9ucyk7CisgICAgcmV0dXJuIGpzTnVtYmVyKG5zT25l
ID4gbnNUd28gPyAxIDogbnNPbmUgPCBuc1R3byA/IC0xIDogMCk7Cit9CisKK2ludCBUZW1wb3Jh
bER1cmF0aW9uOjpzaWduKGNvbnN0IFRlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyYgc3Vi
ZHVyYXRpb25zKQoreworICAgIGZvciAoYXV0byB2YWx1ZSA6IHN1YmR1cmF0aW9ucykgeworICAg
ICAgICBpZiAodmFsdWUgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGlm
ICh2YWx1ZSA+IDApCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zIFRlbXBvcmFsRHVyYXRpb246
OndpdGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGR1cmF0aW9uTGlr
ZSkgY29uc3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3ViZHVyYXRpb25zIHJlc3Vs
dDsKKyAgICBhdXRvIGhhc1JlbGV2YW50UHJvcGVydHkgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsgaSsrKSB7CisgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBkdXJhdGlvbkxpa2UtPmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSh2
bSwgaSkpOworCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgICAg
ICByZXN1bHRbaV0gPSBtX3N1YmR1cmF0aW9uc1tpXTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgaGFzUmVsZXZhbnRQcm9wZXJ0eSA9IHRydWU7CisgICAgICAg
IHJlc3VsdFtpXSA9IHZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgaWYgKCFpc0ludGVnZXIocmVz
dWx0W2ldKSkgeworICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJUZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0aWVzIG11c3QgYmUgaW50ZWdlcnMiX3MpOwor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghaGFz
UmVsZXZhbnRQcm9wZXJ0eSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiT2JqZWN0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgVGVtcG9yYWwuRHVyYXRp
b24gcHJvcGVydHkiX3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1
cmF0aW9uOjpuZWdhdGVkKCkgY29uc3QKK3sKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0OworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBpKyspCisgICAg
ICAgIHJlc3VsdFtpXSA9IC1tX3N1YmR1cmF0aW9uc1tpXTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6YWJz
KCkgY29uc3QKK3sKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBpKyspCisgICAgICAgIHJlc3VsdFtpXSA9
IHN0ZDo6YWJzKG1fc3ViZHVyYXRpb25zW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisv
LyBEZWZhdWx0VGVtcG9yYWxMYXJnZXN0VW5pdCAoIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlz
LCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMgKQor
Ly8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtZGVmYXVs
dHRlbXBvcmFsbGFyZ2VzdHVuaXQKK1RlbXBvcmFsVW5pdCBUZW1wb3JhbER1cmF0aW9uOjpsYXJn
ZXN0U3ViZHVyYXRpb24oKSBjb25zdAoreworICAgIHVpbnQ4X3QgaW5kZXggPSAwOworICAgIHdo
aWxlIChpbmRleCA8IG51bWJlck9mVGVtcG9yYWxVbml0cyAtIDEgJiYgIW1fc3ViZHVyYXRpb25z
W2luZGV4XSkKKyAgICAgICAgaW5kZXgrKzsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVtcG9y
YWxVbml0PihpbmRleCk7Cit9CisKKy8vIEJhbGFuY2VEdXJhdGlvbiAoIGRheXMsIGhvdXJzLCBt
aW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMs
IGxhcmdlc3RVbml0IFsgLCByZWxhdGl2ZVRvIF0gKQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bv
c2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtYmFsYW5jZWR1cmF0aW9uCit2b2lkIFRlbXBvcmFs
RHVyYXRpb246OmJhbGFuY2UoU3ViZHVyYXRpb25zJiBzdWJkdXJhdGlvbnMsIFRlbXBvcmFsVW5p
dCBsYXJnZXN0VW5pdCkKK3sKKyAgICBhdXRvIG5hbm9zZWNvbmRzID0gdG90YWxOYW5vc2Vjb25k
cyhzdWJkdXJhdGlvbnMpOworICAgIHN1YmR1cmF0aW9ucy5jbGVhcigpOworCisgICAgaWYgKGxh
cmdlc3RVbml0IDw9IFRlbXBvcmFsVW5pdDo6RGF5KSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBk
b3VibGUgbmFub3NlY29uZHNQZXJEYXkgPSAyNC4wICogNjAgKiA2MCAqIDEwMDAgKiAxMDAwICog
MTAwMDsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldERheXMoc3RkOjp0cnVuYyhuYW5vc2Vjb25k
cyAvIG5hbm9zZWNvbmRzUGVyRGF5KSk7CisgICAgICAgIG5hbm9zZWNvbmRzID0gc3RkOjpmbW9k
KG5hbm9zZWNvbmRzLCBuYW5vc2Vjb25kc1BlckRheSk7CisgICAgfQorCisgICAgZG91YmxlIG1p
Y3Jvc2Vjb25kcyA9IHN0ZDo6dHJ1bmMobmFub3NlY29uZHMgLyAxMDAwKTsKKyAgICBkb3VibGUg
bWlsbGlzZWNvbmRzID0gc3RkOjp0cnVuYyhtaWNyb3NlY29uZHMgLyAxMDAwKTsKKyAgICBkb3Vi
bGUgc2Vjb25kcyA9IHN0ZDo6dHJ1bmMobWlsbGlzZWNvbmRzIC8gMTAwMCk7CisgICAgZG91Ymxl
IG1pbnV0ZXMgPSBzdGQ6OnRydW5jKHNlY29uZHMgLyA2MCk7CisgICAgaWYgKGxhcmdlc3RVbml0
IDw9IFRlbXBvcmFsVW5pdDo6SG91cikgeworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3Nl
Y29uZHMoc3RkOjpmbW9kKG5hbm9zZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9u
cy5zZXRNaWNyb3NlY29uZHMoc3RkOjpmbW9kKG1pY3Jvc2Vjb25kcywgMTAwMCkpOworICAgICAg
ICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNvbmRzKHN0ZDo6Zm1vZChtaWxsaXNlY29uZHMsIDEw
MDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldFNlY29uZHMoc3RkOjpmbW9kKHNlY29uZHMs
IDYwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaW51dGVzKHN0ZDo6Zm1vZChtaW51dGVz
LCA2MCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0SG91cnMoc3RkOjp0cnVuYyhtaW51dGVz
IC8gNjApKTsKKyAgICB9IGVsc2UgaWYgKGxhcmdlc3RVbml0ID09IFRlbXBvcmFsVW5pdDo6TWlu
dXRlKSB7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXROYW5vc2Vjb25kcyhzdGQ6OmZtb2QobmFu
b3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pY3Jvc2Vjb25kcyhz
dGQ6OmZtb2QobWljcm9zZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRN
aWxsaXNlY29uZHMoc3RkOjpmbW9kKG1pbGxpc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJk
dXJhdGlvbnMuc2V0U2Vjb25kcyhzdGQ6OmZtb2Qoc2Vjb25kcywgNjApKTsKKyAgICAgICAgc3Vi
ZHVyYXRpb25zLnNldE1pbnV0ZXMobWludXRlcyk7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5p
dCA9PSBUZW1wb3JhbFVuaXQ6OlNlY29uZCkgeworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFu
b3NlY29uZHMoc3RkOjpmbW9kKG5hbm9zZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0
aW9ucy5zZXRNaWNyb3NlY29uZHMoc3RkOjpmbW9kKG1pY3Jvc2Vjb25kcywgMTAwMCkpOworICAg
ICAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNvbmRzKHN0ZDo6Zm1vZChtaWxsaXNlY29uZHMs
IDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldFNlY29uZHMoc2Vjb25kcyk7CisgICAg
fSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kKSB7Cisg
ICAgICAgIHN1YmR1cmF0aW9ucy5zZXROYW5vc2Vjb25kcyhzdGQ6OmZtb2QobmFub3NlY29uZHMs
IDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pY3Jvc2Vjb25kcyhzdGQ6OmZtb2Qo
bWljcm9zZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWxsaXNlY29u
ZHMobWlsbGlzZWNvbmRzKTsKKyAgICB9IGVsc2UgaWYgKGxhcmdlc3RVbml0ID09IFRlbXBvcmFs
VW5pdDo6TWljcm9zZWNvbmQpIHsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRz
KHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0
TWljcm9zZWNvbmRzKG1pY3Jvc2Vjb25kcyk7CisgICAgfSBlbHNlCisgICAgICAgIHN1YmR1cmF0
aW9ucy5zZXROYW5vc2Vjb25kcyhuYW5vc2Vjb25kcyk7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246
OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjphZGQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBvdGhlclZhbHVlKSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBhdXRvKiBvdGhlciA9IHRvRHVyYXRpb24oZ2xvYmFsT2JqZWN0LCBvdGhlclZhbHVl
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgYXV0byBsYXJn
ZXN0VW5pdCA9IHN0ZDo6bWluKGxhcmdlc3RTdWJkdXJhdGlvbigpLCBvdGhlci0+bGFyZ2VzdFN1
YmR1cmF0aW9uKCkpOworICAgIGlmIChsYXJnZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6OldlZWsp
IHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3Qg
YWRkIGEgZHVyYXRpb24gb2YgeWVhcnMsIG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBhIHJlbGF0
aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBTdWJk
dXJhdGlvbnMgcmVzdWx0IHsKKyAgICAgICAgMCwgMCwgMCwgZGF5cygpICsgb3RoZXItPmRheXMo
KSwKKyAgICAgICAgaG91cnMoKSArIG90aGVyLT5ob3VycygpLCBtaW51dGVzKCkgKyBvdGhlci0+
bWludXRlcygpLCBzZWNvbmRzKCkgKyBvdGhlci0+c2Vjb25kcygpLAorICAgICAgICBtaWxsaXNl
Y29uZHMoKSArIG90aGVyLT5taWxsaXNlY29uZHMoKSwgbWljcm9zZWNvbmRzKCkgKyBvdGhlci0+
bWljcm9zZWNvbmRzKCksIG5hbm9zZWNvbmRzKCkgKyBvdGhlci0+bmFub3NlY29uZHMoKQorICAg
IH07CisKKyAgICBiYWxhbmNlKHJlc3VsdCwgbGFyZ2VzdFVuaXQpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9u
OjpzdWJ0cmFjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG90aGVyVmFs
dWUpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIG90aGVyID0gdG9E
dXJhdGlvbihnbG9iYWxPYmplY3QsIG90aGVyVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisKKyAgICBhdXRvIGxhcmdlc3RVbml0ID0gc3RkOjptaW4obGFyZ2Vz
dFN1YmR1cmF0aW9uKCksIG90aGVyLT5sYXJnZXN0U3ViZHVyYXRpb24oKSk7CisgICAgaWYgKGxh
cmdlc3RVbml0IDw9IFRlbXBvcmFsVW5pdDo6V2VlaykgeworICAgICAgICB0aHJvd1JhbmdlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkNhbm5vdCBzdWJ0cmFjdCBhIGR1cmF0aW9uIG9mIHll
YXJzLCBtb250aHMsIG9yIHdlZWtzIHdpdGhvdXQgYSByZWxhdGl2ZVRvIG9wdGlvbiJfcyk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgU3ViZHVyYXRpb25zIHJlc3VsdCB7Cisg
ICAgICAgIDAsIDAsIDAsIGRheXMoKSAtIG90aGVyLT5kYXlzKCksCisgICAgICAgIGhvdXJzKCkg
LSBvdGhlci0+aG91cnMoKSwgbWludXRlcygpIC0gb3RoZXItPm1pbnV0ZXMoKSwgc2Vjb25kcygp
IC0gb3RoZXItPnNlY29uZHMoKSwKKyAgICAgICAgbWlsbGlzZWNvbmRzKCkgLSBvdGhlci0+bWls
bGlzZWNvbmRzKCksIG1pY3Jvc2Vjb25kcygpIC0gb3RoZXItPm1pY3Jvc2Vjb25kcygpLCBuYW5v
c2Vjb25kcygpIC0gb3RoZXItPm5hbm9zZWNvbmRzKCkKKyAgICB9OworCisgICAgYmFsYW5jZShy
ZXN1bHQsIGxhcmdlc3RVbml0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBSb3VuZER1
cmF0aW9uICggeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNv
bmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIGluY3JlbWVudCwg
dW5pdCwgcm91bmRpbmdNb2RlIFsgLCByZWxhdGl2ZVRvIF0gKQorLy8gaHR0cHM6Ly90YzM5LmVz
L3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtcm91bmRkdXJhdGlvbgorZG91YmxlIFRl
bXBvcmFsRHVyYXRpb246OnJvdW5kKFRlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyYgc3Vi
ZHVyYXRpb25zLCBkb3VibGUgaW5jcmVtZW50LCBUZW1wb3JhbFVuaXQgdW5pdCwgUm91bmRpbmdN
b2RlIG1vZGUpCit7CisgICAgQVNTRVJUKHVuaXQgPj0gVGVtcG9yYWxVbml0OjpEYXkpOworICAg
IGRvdWJsZSByZW1haW5kZXIgPSAwOworCisgICAgaWYgKHVuaXQgPT0gVGVtcG9yYWxVbml0OjpE
YXkpIHsKKyAgICAgICAgYXV0byBvcmlnaW5hbERheXMgPSBzdWJkdXJhdGlvbnMuZGF5cygpOwor
ICAgICAgICBzdWJkdXJhdGlvbnMuc2V0RGF5cygwKTsKKyAgICAgICAgYXV0byBuYW5vc2Vjb25k
cyA9IHRvdGFsTmFub3NlY29uZHMoc3ViZHVyYXRpb25zKTsKKworICAgICAgICBzdGF0aWMgY29u
c3QgZG91YmxlIG5hbm9zZWNvbmRzUGVyRGF5ID0gMjQuMCAqIDYwICogNjAgKiAxMDAwICogMTAw
MCAqIDEwMDA7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbERheXMgPSBvcmlnaW5hbERheXMgKyBu
YW5vc2Vjb25kcyAvIG5hbm9zZWNvbmRzUGVyRGF5OworICAgICAgICBhdXRvIG5ld0RheXMgPSBy
b3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0aW9uYWxEYXlzLCBpbmNyZW1lbnQsIG1vZGUpOwor
ICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsRGF5cyAtIG5ld0RheXM7CisgICAgICAgIHN1
YmR1cmF0aW9ucy5zZXREYXlzKG5ld0RheXMpOworICAgIH0gZWxzZSBpZiAodW5pdCA9PSBUZW1w
b3JhbFVuaXQ6OkhvdXIpIHsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFsU2Vjb25kcyA9IHN1YmR1
cmF0aW9ucy5zZWNvbmRzKCkgKyBzdWJkdXJhdGlvbnMubWlsbGlzZWNvbmRzKCkgKiAxZS0zICsg
c3ViZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygpICogMWUtNiArIHN1YmR1cmF0aW9ucy5uYW5vc2Vj
b25kcygpICogMWUtOTsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFsSG91cnMgPSBzdWJkdXJhdGlv
bnMuaG91cnMoKSArIChzdWJkdXJhdGlvbnMubWludXRlcygpICsgZnJhY3Rpb25hbFNlY29uZHMg
LyA2MCkgLyA2MDsKKyAgICAgICAgYXV0byBuZXdIb3VycyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1l
bnQoZnJhY3Rpb25hbEhvdXJzLCBpbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIg
PSBmcmFjdGlvbmFsSG91cnMgLSBuZXdIb3VyczsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldEhv
dXJzKG5ld0hvdXJzKTsKKyAgICB9IGVsc2UgaWYgKHVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaW51
dGUpIHsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFsU2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5zZWNv
bmRzKCkgKyBzdWJkdXJhdGlvbnMubWlsbGlzZWNvbmRzKCkgKiAxZS0zICsgc3ViZHVyYXRpb25z
Lm1pY3Jvc2Vjb25kcygpICogMWUtNiArIHN1YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygpICogMWUt
OTsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFsTWludXRlcyA9IHN1YmR1cmF0aW9ucy5taW51dGVz
KCkgKyBmcmFjdGlvbmFsU2Vjb25kcyAvIDYwOworICAgICAgICBhdXRvIG5ld01pbnV0ZXMgPSBy
b3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0aW9uYWxNaW51dGVzLCBpbmNyZW1lbnQsIG1vZGUp
OworICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsTWludXRlcyAtIG5ld01pbnV0ZXM7Cisg
ICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaW51dGVzKG5ld01pbnV0ZXMpOworICAgIH0gZWxzZSBp
ZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6OlNlY29uZCkgeworICAgICAgICBhdXRvIGZyYWN0aW9u
YWxTZWNvbmRzID0gc3ViZHVyYXRpb25zLnNlY29uZHMoKSArIHN1YmR1cmF0aW9ucy5taWxsaXNl
Y29uZHMoKSAqIDFlLTMgKyBzdWJkdXJhdGlvbnMubWljcm9zZWNvbmRzKCkgKiAxZS02ICsgc3Vi
ZHVyYXRpb25zLm5hbm9zZWNvbmRzKCkgKiAxZS05OworICAgICAgICBhdXRvIG5ld1NlY29uZHMg
PSByb3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0aW9uYWxTZWNvbmRzLCBpbmNyZW1lbnQsIG1v
ZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsU2Vjb25kcyAtIG5ld1NlY29uZHM7
CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKG5ld1NlY29uZHMpOworICAgIH0gZWxz
ZSBpZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kKSB7CisgICAgICAgIGF1dG8g
ZnJhY3Rpb25hbE1pbGxpc2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMoKSArIHN1
YmR1cmF0aW9ucy5taWNyb3NlY29uZHMoKSAqIDFlLTMgKyBzdWJkdXJhdGlvbnMubmFub3NlY29u
ZHMoKSAqIDFlLTY7CisgICAgICAgIGF1dG8gbmV3TWlsbGlzZWNvbmRzID0gcm91bmROdW1iZXJU
b0luY3JlbWVudChmcmFjdGlvbmFsTWlsbGlzZWNvbmRzLCBpbmNyZW1lbnQsIG1vZGUpOworICAg
ICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzIC0gbmV3TWlsbGlzZWNvbmRz
OworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNvbmRzKG5ld01pbGxpc2Vjb25kcyk7
CisgICAgfSBlbHNlIGlmICh1bml0ID09IFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQpIHsKKyAg
ICAgICAgYXV0byBmcmFjdGlvbmFsTWljcm9zZWNvbmRzID0gc3ViZHVyYXRpb25zLm1pY3Jvc2Vj
b25kcygpICsgc3ViZHVyYXRpb25zLm5hbm9zZWNvbmRzKCkgKiAxZS0zOworICAgICAgICBhdXRv
IG5ld01pY3Jvc2Vjb25kcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbE1pY3Jv
c2Vjb25kcywgaW5jcmVtZW50LCBtb2RlKTsKKyAgICAgICAgcmVtYWluZGVyID0gZnJhY3Rpb25h
bE1pY3Jvc2Vjb25kcyAtIG5ld01pY3Jvc2Vjb25kczsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNl
dE1pY3Jvc2Vjb25kcyhuZXdNaWNyb3NlY29uZHMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1
dG8gbmV3TmFub3NlY29uZHMgPSByb3VuZE51bWJlclRvSW5jcmVtZW50KHN1YmR1cmF0aW9ucy5u
YW5vc2Vjb25kcygpLCBpbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBzdWJk
dXJhdGlvbnMubmFub3NlY29uZHMoKSAtIG5ld05hbm9zZWNvbmRzOworICAgICAgICBzdWJkdXJh
dGlvbnMuc2V0TmFub3NlY29uZHMobmV3TmFub3NlY29uZHMpOworICAgIH0KKworICAgIGZvciAo
YXV0byBpID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odW5pdCkgKyAxdTsgaSA8IG51bWJlck9mVGVt
cG9yYWxVbml0czsgaSsrKQorICAgICAgICBzdWJkdXJhdGlvbnNbaV0gPSAwOworCisgICAgcmV0
dXJuIHJlbWFpbmRlcjsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zIFRlbXBv
cmFsRHVyYXRpb246OnJvdW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
b3B0aW9uc1ZhbHVlKSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVj
dCogb3B0aW9ucyA9IGludGxHZXRPcHRpb25zT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1Zh
bHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgYXV0byBz
bWFsbGVzdCA9IHRlbXBvcmFsU21hbGxlc3RVbml0KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgeyB9
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgVGVtcG9yYWxV
bml0IGRlZmF1bHRMYXJnZXN0VW5pdCA9IGxhcmdlc3RTdWJkdXJhdGlvbigpOworICAgIGF1dG8g
bGFyZ2VzdCA9IHRlbXBvcmFsTGFyZ2VzdFVuaXQoZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB7IH0s
IGRlZmF1bHRMYXJnZXN0VW5pdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKworICAgIGlmICghc21hbGxlc3QgJiYgIWxhcmdlc3QpIHsKKyAgICAgICAgdGhyb3dSYW5n
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3Qgcm91bmQgd2l0aG91dCBhIHNtYWxs
ZXN0VW5pdCBvciBsYXJnZXN0VW5pdCBvcHRpb24iX3MpOworICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KKworICAgIGlmIChzbWFsbGVzdCAmJiBsYXJnZXN0ICYmIHNtYWxsZXN0LnZhbHVlKCkg
PCBsYXJnZXN0LnZhbHVlKCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJzbWFsbGVzdFVuaXQgbXVzdCBiZSBzbWFsbGVyIHRoYW4gbGFyZ2VzdFVuaXQi
X3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFRlbXBvcmFsVW5pdCBzbWFs
bGVzdFVuaXQgPSBzbWFsbGVzdC52YWx1ZV9vcihUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQpOwor
ICAgIFRlbXBvcmFsVW5pdCBsYXJnZXN0VW5pdCA9IGxhcmdlc3QudmFsdWVfb3Ioc3RkOjptaW4o
ZGVmYXVsdExhcmdlc3RVbml0LCBzbWFsbGVzdFVuaXQpKTsKKworICAgIGF1dG8gcm91bmRpbmdN
b2RlID0gaW50bE9wdGlvbjxSb3VuZGluZ01vZGU+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0u
cHJvcGVydHlOYW1lcy0+cm91bmRpbmdNb2RlLAorICAgICAgICB7IHsgImNlaWwiX3MsIFJvdW5k
aW5nTW9kZTo6Q2VpbCB9LCB7ICJmbG9vciJfcywgUm91bmRpbmdNb2RlOjpGbG9vciB9LCB7ICJ0
cnVuYyJfcywgUm91bmRpbmdNb2RlOjpUcnVuYyB9LCB7ICJoYWxmRXhwYW5kIl9zLCBSb3VuZGlu
Z01vZGU6OkhhbGZFeHBhbmQgfSB9LAorICAgICAgICAicm91bmRpbmdNb2RlIG11c3QgYmUgZWl0
aGVyIFwiY2VpbFwiLCBcImZsb29yXCIsIFwidHJ1bmNcIiwgb3IgXCJoYWxmRXhwYW5kXCIiX3Ms
IFJvdW5kaW5nTW9kZTo6SGFsZkV4cGFuZCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKworICAgIGF1dG8gaW5jcmVtZW50ID0gdGVtcG9yYWxSb3VuZGluZ0luY3JlbWVu
dChnbG9iYWxPYmplY3QsIG9wdGlvbnMsIG1heGltdW1Sb3VuZGluZ0luY3JlbWVudChzbWFsbGVz
dFVuaXQpLCBmYWxzZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgIGlmIChsYXJnZXN0VW5pdCA+IFRlbXBvcmFsVW5pdDo6WWVhciAmJiAoeWVhcnMoKSB8fCBt
b250aHMoKSB8fCB3ZWVrcygpIHx8IChkYXlzKCkgJiYgbGFyZ2VzdFVuaXQgPCBUZW1wb3JhbFVu
aXQ6OkRheSkpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiQ2Fubm90IHJvdW5kIGEgZHVyYXRpb24gb2YgeWVhcnMsIG1vbnRocywgb3Igd2Vla3Mgd2l0
aG91dCBhIHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBTdWJkdXJhdGlvbnMgbmV3U3ViZHVyYXRpb25zID0gbV9zdWJkdXJhdGlvbnM7Cisg
ICAgcm91bmQobmV3U3ViZHVyYXRpb25zLCBpbmNyZW1lbnQsIHNtYWxsZXN0VW5pdCwgcm91bmRp
bmdNb2RlKTsKKyAgICBiYWxhbmNlKG5ld1N1YmR1cmF0aW9ucywgbGFyZ2VzdFVuaXQpOworICAg
IHJldHVybiBuZXdTdWJkdXJhdGlvbnM7Cit9CisKK2RvdWJsZSBUZW1wb3JhbER1cmF0aW9uOjp0
b3RhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSkg
Y29uc3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBp
bnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBTdHJpbmcgdW5pdFN0cmluZyA9IGlu
dGxTdHJpbmdPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT51
bml0LCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIDApOworCisgICAgYXV0byB1bml0VHlwZSA9IHRlbXBvcmFsVW5pdFR5cGUodW5pdFN0cmlu
Zyk7CisgICAgaWYgKCF1bml0VHlwZSkgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgInVuaXQgaXMgYW4gaW52YWxpZCBUZW1wb3JhbCB1bml0Il9zKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgVGVtcG9yYWxVbml0IHVuaXQgPSB1bml0VHlw
ZS52YWx1ZSgpOworICAgIGlmICh1bml0ID4gVGVtcG9yYWxVbml0OjpZZWFyICYmICh5ZWFycygp
IHx8IG1vbnRocygpIHx8IHdlZWtzKCkgfHwgKGRheXMoKSAmJiB1bml0IDwgVGVtcG9yYWxVbml0
OjpEYXkpKSkgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IkNhbm5vdCB0b3RhbCBhIGR1cmF0aW9uIG9mIHllYXJzLCBtb250aHMsIG9yIHdlZWtzIHdpdGhv
dXQgYSByZWxhdGl2ZVRvIG9wdGlvbiJfcyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgU3ViZHVyYXRpb25zIG5ld1N1YmR1cmF0aW9ucyA9IG1fc3ViZHVyYXRpb25zOworICAg
IGJhbGFuY2UobmV3U3ViZHVyYXRpb25zLCB1bml0KTsKKyAgICBkb3VibGUgcmVtYWluZGVyID0g
cm91bmQobmV3U3ViZHVyYXRpb25zLCAxLCB1bml0LCBSb3VuZGluZ01vZGU6OlRydW5jKTsKKyAg
ICByZXR1cm4gbmV3U3ViZHVyYXRpb25zW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KHVuaXQpXSArIHJl
bWFpbmRlcjsKK30KKworU3RyaW5nIFRlbXBvcmFsRHVyYXRpb246OnRvU3RyaW5nKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKSBjb25zdAoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGludGxHZXRPcHRpb25z
T2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKCFvcHRpb25zKQorICAgICAgICByZXR1cm4gdG9T
dHJpbmcoKTsKKworICAgIFByZWNpc2lvbkRhdGEgZGF0YSA9IHNlY29uZHNTdHJpbmdQcmVjaXNp
b24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgIEFTU0VSVChkYXRhLnVuaXQgPj0gVGVtcG9yYWxVbml0OjpTZWNvbmQpOwor
CisgICAgYXV0byByb3VuZGluZ01vZGUgPSBpbnRsT3B0aW9uPFJvdW5kaW5nTW9kZT4oZ2xvYmFs
T2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5yb3VuZGluZ01vZGUsCisgICAgICAg
IHsgeyAiY2VpbCJfcywgUm91bmRpbmdNb2RlOjpDZWlsIH0sIHsgImZsb29yIl9zLCBSb3VuZGlu
Z01vZGU6OkZsb29yIH0sIHsgInRydW5jIl9zLCBSb3VuZGluZ01vZGU6OlRydW5jIH0sIHsgImhh
bGZFeHBhbmQiX3MsIFJvdW5kaW5nTW9kZTo6SGFsZkV4cGFuZCB9IH0sCisgICAgICAgICJyb3Vu
ZGluZ01vZGUgbXVzdCBiZSBlaXRoZXIgXCJjZWlsXCIsIFwiZmxvb3JcIiwgXCJ0cnVuY1wiLCBv
ciBcImhhbGZFeHBhbmRcIiJfcywgUm91bmRpbmdNb2RlOjpUcnVuYyk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIC8vIE5vIG5lZWQgdG8gbWFrZSBhIG5ldyBv
YmplY3QgaWYgd2Ugd2VyZSBnaXZlbiBleHBsaWNpdCBkZWZhdWx0cy4KKyAgICBpZiAoIWRhdGEu
cHJlY2lzaW9uICYmIHJvdW5kaW5nTW9kZSA9PSBSb3VuZGluZ01vZGU6OlRydW5jKQorICAgICAg
ICByZXR1cm4gdG9TdHJpbmcoKTsKKworICAgIFN1YmR1cmF0aW9ucyBuZXdTdWJkdXJhdGlvbnMg
PSBtX3N1YmR1cmF0aW9uczsKKyAgICByb3VuZChuZXdTdWJkdXJhdGlvbnMsIGRhdGEuaW5jcmVt
ZW50LCBkYXRhLnVuaXQsIHJvdW5kaW5nTW9kZSk7CisgICAgcmV0dXJuIHRvU3RyaW5nKG5ld1N1
YmR1cmF0aW9ucywgZGF0YS5wcmVjaXNpb24pOworfQorCisvLyBUZW1wb3JhbER1cmF0aW9uVG9T
dHJpbmcgKCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29u
ZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzLCBuYW5vc2Vjb25kcywgcHJlY2lzaW9uICkK
Ky8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRlbXBv
cmFsZHVyYXRpb250b3N0cmluZworU3RyaW5nIFRlbXBvcmFsRHVyYXRpb246OnRvU3RyaW5nKGNv
bnN0IFRlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyYgc3ViZHVyYXRpb25zLCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiBwcmVjaXNpb24pCit7CisgICAgQVNTRVJUKCFwcmVjaXNpb24gfHwg
cHJlY2lzaW9uLnZhbHVlKCkgPCAxMCk7CisKKyAgICBhdXRvIGJhbGFuY2VkTWljcm9zZWNvbmRz
ID0gc3ViZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygpICsgc3RkOjp0cnVuYyhzdWJkdXJhdGlvbnMu
bmFub3NlY29uZHMoKSAvIDEwMDApOworICAgIGF1dG8gYmFsYW5jZWROYW5vc2Vjb25kcyA9IHN0
ZDo6Zm1vZChzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKSwgMTAwMCk7CisgICAgYXV0byBiYWxh
bmNlZE1pbGxpc2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMoKSArIHN0ZDo6dHJ1
bmMoYmFsYW5jZWRNaWNyb3NlY29uZHMgLyAxMDAwKTsKKyAgICBiYWxhbmNlZE1pY3Jvc2Vjb25k
cyA9IHN0ZDo6Zm1vZChiYWxhbmNlZE1pY3Jvc2Vjb25kcywgMTAwMCk7CisgICAgYXV0byBiYWxh
bmNlZFNlY29uZHMgPSBzdWJkdXJhdGlvbnMuc2Vjb25kcygpICsgc3RkOjp0cnVuYyhiYWxhbmNl
ZE1pbGxpc2Vjb25kcyAvIDEwMDApOworICAgIGJhbGFuY2VkTWlsbGlzZWNvbmRzID0gc3RkOjpm
bW9kKGJhbGFuY2VkTWlsbGlzZWNvbmRzLCAxMDAwKTsKKworICAgIC8vIFRFTVBPUkFSWSEgKHBl
bmRpbmcgc3BlYyBkaXNjdXNzaW9uIGFib3V0IG1heGltdW0gdmFsdWVzIEAgaHR0cHM6Ly9naXRo
dWIuY29tL3RjMzkvcHJvcG9zYWwtdGVtcG9yYWwvaXNzdWVzLzE2MDQpCisgICAgLy8gV2UgKm11
c3QqIGF2b2lkIHByaW50aW5nIGEgbnVtYmVyIGluIHNjaWVudGlmaWMgbm90YXRpb24sIHdoaWNo
IGlzIGN1cnJlbnRseSBvbmx5IHBvc3NpYmxlIGZvciBudW1iZXJzIDwgMWUyMQorICAgIC8vIChh
IHZhbHVlIG9yaWdpbmF0aW5nIGluIHRoZSBOdW1iZXIjdG9GaXhlZCBzcGVjIGFuZCB1cGhlbGQg
Ynkgb3VyIE51bWJlclRvU3RyaW5nQnVmZmVyKS4KKyAgICBhdXRvIGZvcm1hdEludGVnZXIgPSBb
XShkb3VibGUgdmFsdWUpIC0+IGRvdWJsZSB7CisgICAgICAgIGF1dG8gYWJzVmFsdWUgPSBzdGQ6
OmFicyh2YWx1ZSk7CisgICAgICAgIHJldHVybiBMSUtFTFkoYWJzVmFsdWUgPCAxZTIxKSA/IGFi
c1ZhbHVlIDogMWUyMSAtIDY1NTM3OworICAgIH07CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisKKyAgICBhdXRvIHNpZ24gPSBUZW1wb3JhbER1cmF0aW9uOjpzaWduKHN1YmR1cmF0aW9u
cyk7CisgICAgaWYgKHNpZ24gPCAwKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScpOworCisg
ICAgYnVpbGRlci5hcHBlbmQoJ1AnKTsKKyAgICBpZiAoc3ViZHVyYXRpb25zLnllYXJzKCkpCisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoc3ViZHVyYXRpb25zLnllYXJzKCkp
LCAnWScpOworICAgIGlmIChzdWJkdXJhdGlvbnMubW9udGhzKCkpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGZvcm1hdEludGVnZXIoc3ViZHVyYXRpb25zLm1vbnRocygpKSwgJ00nKTsKKyAgICBp
ZiAoc3ViZHVyYXRpb25zLndlZWtzKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdElu
dGVnZXIoc3ViZHVyYXRpb25zLndlZWtzKCkpLCAnVycpOworICAgIGlmIChzdWJkdXJhdGlvbnMu
ZGF5cygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9u
cy5kYXlzKCkpLCAnRCcpOworCisgICAgLy8gVGhlIHplcm8gdmFsdWUgaXMgZGlzcGxheWVkIGlu
IHNlY29uZHMuCisgICAgYXV0byB1c2VzU2Vjb25kcyA9IGJhbGFuY2VkU2Vjb25kcyB8fCBiYWxh
bmNlZE1pbGxpc2Vjb25kcyB8fCBiYWxhbmNlZE1pY3Jvc2Vjb25kcyB8fCBiYWxhbmNlZE5hbm9z
ZWNvbmRzIHx8ICFzaWduOworICAgIGlmICghc3ViZHVyYXRpb25zLmhvdXJzKCkgJiYgIXN1YmR1
cmF0aW9ucy5taW51dGVzKCkgJiYgIXVzZXNTZWNvbmRzKQorICAgICAgICByZXR1cm4gYnVpbGRl
ci50b1N0cmluZygpOworCisgICAgYnVpbGRlci5hcHBlbmQoJ1QnKTsKKyAgICBpZiAoc3ViZHVy
YXRpb25zLmhvdXJzKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZvcm1hdEludGVnZXIoc3Vi
ZHVyYXRpb25zLmhvdXJzKCkpLCAnSCcpOworICAgIGlmIChzdWJkdXJhdGlvbnMubWludXRlcygp
KQorICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy5taW51
dGVzKCkpLCAnTScpOworICAgIGlmICh1c2VzU2Vjb25kcykgeworICAgICAgICBidWlsZGVyLmFw
cGVuZChmb3JtYXRJbnRlZ2VyKGJhbGFuY2VkU2Vjb25kcykpOworCisgICAgICAgIGF1dG8gZnJh
Y3Rpb24gPSBzdGQ6OmFicyhiYWxhbmNlZE1pbGxpc2Vjb25kcykgKiAxZTYgKyBzdGQ6OmFicyhi
YWxhbmNlZE1pY3Jvc2Vjb25kcykgKiAxZTMgKyBzdGQ6OmFicyhiYWxhbmNlZE5hbm9zZWNvbmRz
KTsKKyAgICAgICAgaWYgKCghcHJlY2lzaW9uICYmIGZyYWN0aW9uKSB8fCAocHJlY2lzaW9uICYm
IHByZWNpc2lvbi52YWx1ZSgpKSkgeworICAgICAgICAgICAgYXV0byBwYWRkZWQgPSBtYWtlU3Ry
aW5nKCcuJywgcGFkKCcwJywgOSwgZnJhY3Rpb24pKTsKKyAgICAgICAgICAgIGlmIChwcmVjaXNp
b24pCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nVmlldyhwYWRkZWQpLmxl
ZnQocGFkZGVkLmxlbmd0aCgpIC0gKDkgLSBwcmVjaXNpb24udmFsdWUoKSkpKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVy
b2VzID0gcGFkZGVkLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIHdoaWxlIChwYWRkZWRbbGVu
Z3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzIC0gMV0gPT0gJzAnKQorICAgICAgICAgICAgICAgICAg
ICBsZW5ndGhXaXRob3V0VHJhaWxpbmdaZXJvZXMtLTsKKyAgICAgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZChTdHJpbmdWaWV3KHBhZGRlZCkubGVmdChsZW5ndGhXaXRob3V0VHJhaWxpbmdaZXJv
ZXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCdTJyk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UZW1wb3JhbER1cmF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbER1cmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTkyMDRkYzk1MzdhYWY3NjAxZTBlOGQxNTcwNTZi
ZGExOWFmNzM1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RlbXBvcmFsRHVyYXRpb24uaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSVNPODYwMS5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgVGVtcG9yYWxEdXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKyAgICB1c2lu
ZyBTdWJkdXJhdGlvbnMgPSBJU084NjAxOjpEdXJhdGlvbjsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLnRlbXBvcmFs
RHVyYXRpb25TcGFjZTxtb2RlPigpOworICAgIH0KKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0
aW9uKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBTdWJkdXJhdGlvbnMmJik7CisgICAgc3RhdGlj
IFRlbXBvcmFsRHVyYXRpb24qIHRyeUNyZWF0ZUlmVmFsaWQoSlNHbG9iYWxPYmplY3QqLCBTdWJk
dXJhdGlvbnMmJiwgU3RydWN0dXJlKiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBE
RUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvbiogdG9EdXJhdGlvbihK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uKiBm
cm9tKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTVmFsdWUgY29tcGFy
ZShKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOworCisjZGVmaW5lIEpTQ19ERUZJ
TkVfVEVNUE9SQUxfRFVSQVRJT05fRklFTEQobmFtZSwgY2FwaXRhbGl6ZWROYW1lKSBcCisgICAg
ZG91YmxlIG5hbWUjI3MoKSBjb25zdCB7IHJldHVybiBtX3N1YmR1cmF0aW9ucy5uYW1lIyNzKCk7
IH0gXAorICAgIHZvaWQgc2V0IyNjYXBpdGFsaXplZE5hbWUjI3MoZG91YmxlIHZhbHVlKSB7IG1f
c3ViZHVyYXRpb25zLnNldCMjY2FwaXRhbGl6ZWROYW1lIyNzKHZhbHVlKTsgfQorICAgIEpTQ19U
RU1QT1JBTF9VTklUUyhKU0NfREVGSU5FX1RFTVBPUkFMX0RVUkFUSU9OX0ZJRUxEKTsKKyN1bmRl
ZiBKU0NfREVGSU5FX1RFTVBPUkFMX0RVUkFUSU9OX0ZJRUxECisKKyAgICBpbnQgc2lnbigpIGNv
bnN0IHsgcmV0dXJuIHNpZ24obV9zdWJkdXJhdGlvbnMpOyB9CisKKyAgICBTdWJkdXJhdGlvbnMg
d2l0aChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBkdXJhdGlvbkxpa2UpIGNvbnN0OworICAg
IFN1YmR1cmF0aW9ucyBuZWdhdGVkKCkgY29uc3Q7CisgICAgU3ViZHVyYXRpb25zIGFicygpIGNv
bnN0OworICAgIFN1YmR1cmF0aW9ucyBhZGQoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKSBjb25z
dDsKKyAgICBTdWJkdXJhdGlvbnMgc3VidHJhY3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKSBj
b25zdDsKKyAgICBTdWJkdXJhdGlvbnMgcm91bmQoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIG9w
dGlvbnMpIGNvbnN0OworICAgIGRvdWJsZSB0b3RhbChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
b3B0aW9ucykgY29uc3Q7CisgICAgU3RyaW5nIHRvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSBvcHRpb25zKSBjb25zdDsKKyAgICBTdHJpbmcgdG9TdHJpbmcoc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gcHJlY2lzaW9uID0gc3RkOjpudWxsb3B0KSBjb25zdCB7IHJldHVybiB0b1N0cmlu
ZyhtX3N1YmR1cmF0aW9ucywgcHJlY2lzaW9uKTsgfQorCitwcml2YXRlOgorICAgIFRlbXBvcmFs
RHVyYXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBTdWJkdXJhdGlvbnMmJik7CisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
KyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxTdWJkdXJhdGlvbnM+IHBhcnNlKFN0cmluZ1BhcnNp
bmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICBzdGF0aWMgU3ViZHVyYXRpb25zIGZyb21P
YmplY3QoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCopOworCisgICAgc3RhdGljIGludCBzaWdu
KGNvbnN0IFN1YmR1cmF0aW9ucyYpOworICAgIHN0YXRpYyB2b2lkIGJhbGFuY2UoU3ViZHVyYXRp
b25zJiwgVGVtcG9yYWxVbml0IGxhcmdlc3RVbml0KTsKKyAgICBzdGF0aWMgZG91YmxlIHJvdW5k
KFN1YmR1cmF0aW9ucyYsIGRvdWJsZSBpbmNyZW1lbnQsIFRlbXBvcmFsVW5pdCwgUm91bmRpbmdN
b2RlKTsKKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFN1YmR1cmF0aW9ucyYsIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHByZWNpc2lvbik7CisKKyAgICBUZW1wb3JhbFVuaXQgbGFy
Z2VzdFN1YmR1cmF0aW9uKCkgY29uc3Q7CisKKyAgICBTdWJkdXJhdGlvbnMgbV9zdWJkdXJhdGlv
bnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkyMTViMGE0N2Y4NWViMWY1YTY1MjkzZDA4NTJkZjNkYTgwNjlkZWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0
aW9uQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iu
aCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9u
LmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKFRlbXBvcmFs
RHVyYXRpb25Db25zdHJ1Y3Rvcik7CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KHRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1bmNGcm9tKTsKK3N0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1bmNDb21wYXJlKTsK
KworfQorCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmx1dC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAmdGVtcG9yYWxEdXJh
dGlvbkNvbnN0cnVjdG9yVGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yKSB9OworCisvKiBTb3VyY2UgZm9yIFRlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3Rvci5sdXQuaAorQGJlZ2luIHRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvclRh
YmxlCisgIGZyb20gICAgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yRnVuY0Zy
b20gICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICBjb21wYXJlICAgICAgICAgIHRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1bmNDb21wYXJlICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uIDIKK0BlbmQKKyovCisKK1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvciogVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSogZHVyYXRpb25Qcm90b3R5cGUpCit7CisgICAg
YXV0byogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3I+KHZtLmhlYXApKSBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Io
dm0sIHN0cnVjdHVyZSk7CisgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBkdXJh
dGlvblByb3RvdHlwZSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQorCitTdHJ1Y3R1cmUq
IFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oSW50ZXJuYWxGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwor
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY2FsbFRlbXBvcmFsRHVyYXRpb24pOwor
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0VGVtcG9yYWxEdXJhdGlv
bik7CisKK1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6VGVtcG9yYWxEdXJhdGlvbkNvbnN0
cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUsIGNhbGxUZW1wb3JhbER1cmF0aW9uLCBjb25zdHJ1Y3RUZW1wb3JhbER1cmF0aW9uKQor
eworfQorCit2b2lkIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBkdXJhdGlvblByb3RvdHlwZSkKK3sK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMCwgIkR1cmF0aW9uIl9zLCBQcm9wZXJ0eUFk
ZGl0aW9uTW9kZTo6V2l0aG91dFN0cnVjdHVyZVRyYW5zaXRpb24pOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIGR1cmF0aW9u
UHJvdG90eXBlLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgZHVyYXRp
b25Qcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5jb25zdHJ1Y3RvciwgdGhpcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3Ry
dWN0VGVtcG9yYWxEdXJhdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3Qq
IG5ld1RhcmdldCA9IGFzT2JqZWN0KGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkpOworICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gSlNDX0dFVF9ERVJJVkVEX1NUUlVDVFVSRSh2bSwgZHVyYXRpb25T
dHJ1Y3R1cmUsIG5ld1RhcmdldCwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVy
YXRpb25zIHN1YmR1cmF0aW9ucyB7IH07CisgICAgYXV0byBjb3VudCA9IHN0ZDo6bWluPHNpemVf
dD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIG51bWJlck9mVGVtcG9yYWxVbml0cyk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHN1YmR1cmF0
aW9uc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9JbnRlZ2VyT3JJbmZp
bml0eShnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworCisgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZShzdWJkdXJhdGlvbnNbaV0pKQorICAg
ICAgICAgICAgcmV0dXJuIHRocm93Vk1SYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJU
ZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0aWVzIG11c3QgYmUgZmluaXRlIl9zKTsKKyAgICB9CisK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OnRyeUNyZWF0ZUlm
VmFsaWQoZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHN1YmR1cmF0aW9ucyksIHN0cnVjdHVyZSkpOwor
fQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFRlbXBvcmFsRHVyYXRpb24sIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90
QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJEdXJhdGlv
biIpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Db25z
dHJ1Y3RvckZ1bmNGcm9tLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJh
dGlvbjo6ZnJvbShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKTsKK30KKwor
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1bmND
b21wYXJlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6Y29t
cGFyZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMSkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc0MjQ1YTMxMDY5NWFjZDM1YjVkNmFhNTZlOTAwNGY3ZTNiNzAzODIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTsKKworY2xhc3MgVGVtcG9y
YWxEdXJhdGlvbkNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewor
cHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBJbnRlcm5hbEZ1bmN0aW9uOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvbkNv
bnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAg
ICBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSopOworfTsKK1NU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3RvciwgSW50ZXJuYWxGdW5jdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTE4YzJkMTZjNDY4NTJmNDk5YTgyMzUxNWJkYzZkNGJi
NGVhMzk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAKQEAgLTAsMCArMSw0MDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJUZW1wb3Jh
bER1cmF0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1dpdGgpOworc3RhdGljIEpT
Q19ERUNMQVJFX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNOZWdh
dGVkKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVGdW5jQWJzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWRkKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jU3VidHJhY3QpOworc3RhdGljIEpT
Q19ERUNMQVJFX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNSb3Vu
ZCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlRnVuY1RvdGFsKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9TdHJpbmcpOworc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb0pTT04pOworc3RhdGlj
IEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNU
b0xvY2FsZVN0cmluZyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih0ZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlRnVuY1ZhbHVlT2YpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RP
TV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclllYXJzKTsKK3N0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJN
b250aHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZUdldHRlcldlZWtzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVS
KHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJEYXlzKTsKK3N0YXRpYyBKU0NfREVDTEFS
RV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJIb3Vycyk7Citz
dGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
R2V0dGVyTWludXRlcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWlsbGlzZWNvbmRzKTsK
K3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVHZXR0ZXJNaWNyb3NlY29uZHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIo
dGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck5hbm9zZWNvbmRzKTsKK3N0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJTaWdu
KTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJCbGFuayk7CisKK30KKworI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGUubHV0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZTo6c19pbmZvID0geyAiVGVtcG9yYWwuRHVyYXRpb24iLCAmQmFz
ZTo6c19pbmZvLCAmZHVyYXRpb25Qcm90b3R5cGVUYWJsZSwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKSB9OworCisvKiBTb3VyY2UgZm9yIFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGUubHV0LmgKK0BiZWdpbiBkdXJhdGlvblByb3RvdHlwZVRh
YmxlCisgIHdpdGggICAgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNXaXRo
ICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICBuZWdhdGVkICAgICAgICAgIHRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jTmVnYXRlZCAgICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uIDAKKyAgYWJzICAgICAgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVu
Y0FicyAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIGFkZCAgICAgICAgICAg
ICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNBZGQgICAgICAgICAgICAgICAgRG9udEVu
dW18RnVuY3Rpb24gMQorICBzdWJ0cmFjdCAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVGdW5jU3VidHJhY3QgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgcm91bmQgICAg
ICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1JvdW5kICAgICAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAxCisgIHRvdGFsICAgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUZ1bmNUb3RhbCAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICB0b1N0
cmluZyAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9TdHJpbmcgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgdG9KU09OICAgICAgICAgICB0ZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlRnVuY1RvSlNPTiAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAwCisg
IHRvTG9jYWxlU3RyaW5nICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb0xvY2FsZVN0
cmluZyAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICB2YWx1ZU9mICAgICAgICAgIHRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVGdW5jVmFsdWVPZiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
IDAKKyAgeWVhcnMgICAgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyWWVh
cnMgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBtb250aHMg
ICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNb250aHMgICAgICAgICAg
IERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIHdlZWtzICAgICAgICAgICAgdGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlcldlZWtzICAgICAgICAgICAgRG9udEVudW18UmVh
ZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgZGF5cyAgICAgICAgICAgICB0ZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlR2V0dGVyRGF5cyAgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21B
Y2Nlc3NvcgorICBob3VycyAgICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0
ZXJIb3VycyAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIG1p
bnV0ZXMgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMgICAg
ICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgc2Vjb25kcyAgICAgICAg
ICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2Vjb25kcyAgICAgICAgICBEb250RW51
bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBtaWxsaXNlY29uZHMgICAgIHRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVHZXR0ZXJNaWxsaXNlY29uZHMgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1
c3RvbUFjY2Vzc29yCisgIG1pY3Jvc2Vjb25kcyAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUdldHRlck1pY3Jvc2Vjb25kcyAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IK
KyAgbmFub3NlY29uZHMgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTmFub3Nl
Y29uZHMgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBzaWduICAgICAg
ICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJTaWduICAgICAgICAgICAgIERv
bnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIGJsYW5rICAgICAgICAgICAgdGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZUdldHRlckJsYW5rICAgICAgICAgICAgRG9udEVudW18UmVhZE9u
bHl8Q3VzdG9tQWNjZXNzb3IKK0BlbmQKKyovCisKK1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUq
IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQoreworICAgIGF1dG8qIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogVGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
OjpUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAgIEpTQ19U
T19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOworfQorCitKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNXaXRoLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJh
dGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVt
cG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLndpdGggY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3Qg
YSBEdXJhdGlvbiJfcyk7CisgICAgCisgICAgSlNWYWx1ZSBkdXJhdGlvbkxpa2UgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApOworICAgIGlmICghZHVyYXRpb25MaWtlLmlzT2JqZWN0KCkpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJGaXJzdCBh
cmd1bWVudCB0byBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUud2l0aCBtdXN0IGJlIGFuIG9i
amVjdCJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29k
ZShUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgZHVyYXRp
b24tPndpdGgoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChkdXJhdGlvbkxpa2UpKSkpKTsKK30KKwor
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jTmVn
YXRlZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFt
aWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Cisg
ICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVkIGNhbGxl
ZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+ZHVy
YXRpb25TdHJ1Y3R1cmUoKSwgZHVyYXRpb24tPm5lZ2F0ZWQoKSkpOworfQorCitKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNBYnMsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3Jh
bER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRp
b24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYWJzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mg
bm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShUZW1wb3Jh
bER1cmF0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKSwg
ZHVyYXRpb24tPmFicygpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlRnVuY0FkZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0
byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS5hZGQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1
cmF0aW9uOjp0cnlDcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgZHVyYXRpb24tPmFkZChnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSkpOworfQorCitKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNTdWJ0cmFjdCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBv
cmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJh
dGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5zdWJ0cmFjdCBjYWxsZWQgb24gdmFsdWUg
dGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OnRyeUNyZWF0ZUlmVmFsaWQoZ2xv
YmFsT2JqZWN0LCBkdXJhdGlvbi0+c3VidHJhY3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVGdW5jUm91bmQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8q
IGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90
b3R5cGUucm91bmQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisK
KyAgICBhdXRvIG9wdGlvbnMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGlmIChvcHRp
b25zLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUucm91bmQgcmVxdWly
ZXMgYW4gb3B0aW9ucyBhcmd1bWVudCJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVhdGVJZlZhbGlkKGds
b2JhbE9iamVjdCwgZHVyYXRpb24tPnJvdW5kKGdsb2JhbE9iamVjdCwgb3B0aW9ucykpKSk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVu
Y1RvdGFsLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHlu
YW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
KyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvdGFsIGNhbGxl
ZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgYXV0byBvcHRpb25z
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBpZiAob3B0aW9ucy5pc1VuZGVmaW5lZCgp
KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
VGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvdGFsIHJlcXVpcmVzIGFuIG9wdGlvbnMgYXJn
dW1lbnQiX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoZHVyYXRpb24tPnRvdGFsKGdsb2JhbE9iamVjdCwgb3B0aW9ucykpKSk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVu
Y1RvU3RyaW5nLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpz
RHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvU3RyaW5n
IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1cmF0aW9u
LT50b1N0cmluZyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSkpOworfQor
CitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNU
b0pTT04sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5h
bWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwor
ICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudG9KU09OIGNhbGxl
ZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1N0cmluZyh2bSwgZHVyYXRpb24tPnRvU3RyaW5nKCkpKTsKK30KKworLy8g
VGhpcyB3aWxsIGJlIHBhcnQgb2YgdGhlIEVDTUEtNDAyIEludGwuRHVyYXRpb25Gb3JtYXQgcHJv
cG9zYWw7IHVudGlsIHRoZW4sIHdlIGp1c3QgZm9sbG93IEVDTUEtMjYyIGluIG1pbWlja2luZyB0
b0pTT04uCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUZ1bmNUb0xvY2FsZVN0cmluZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVy
YXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50
aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlw
ZS50b0xvY2FsZVN0cmluZyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9z
KTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1cmF0aW9uLT50
b1N0cmluZygpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlRnVuY1ZhbHVlT2YsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlw
ZS52YWx1ZU9mIG11c3Qgbm90IGJlIGNhbGxlZC4gVG8gY29tcGFyZSBEdXJhdGlvbiB2YWx1ZXMs
IHVzZSBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlIl9zKTsKK30KKworSlNDX0RFRklORV9DVVNU
T01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJZZWFycywgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5
bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUueWVhcnMg
Y2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT55ZWFycygpKSk7Cit9CisKK0pTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTW9udGhz
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJh
dGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3Rv
dHlwZS5tb250aHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5tb250aHMoKSkp
OworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUdldHRlcldlZWtzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1
cmF0aW9uLnByb3RvdHlwZS53ZWVrcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0
aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24t
PndlZWtzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGVHZXR0ZXJEYXlzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlv
bio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRl
bXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5kYXlzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90
IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihk
dXJhdGlvbi0+ZGF5cygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlR2V0dGVySG91cnMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3Jh
bER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1
cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmhvdXJzIGNhbGxlZCBvbiB2YWx1ZSB0
aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihkdXJhdGlvbi0+aG91cnMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRU
RVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWlj
Q2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1pbnV0ZXMgY2Fs
bGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taW51dGVzKCkpKTsKK30KKworSlNDX0RF
RklORV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJTZWNvbmRz
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJh
dGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3Rv
dHlwZS5zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOwor
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+c2Vjb25kcygp
KSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlR2V0dGVyTWlsbGlzZWNvbmRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlv
bio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRl
bXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5taWxsaXNlY29uZHMgY2FsbGVkIG9uIHZhbHVlIHRo
YXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKGR1cmF0aW9uLT5taWxsaXNlY29uZHMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RP
TV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pY3Jvc2Vjb25kcywgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24g
PSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUu
bWljcm9zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOwor
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+bWljcm9zZWNv
bmRzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVHZXR0ZXJOYW5vc2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVy
YXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRp
b24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubmFub3NlY29uZHMgY2FsbGVkIG9uIHZhbHVl
IHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKGR1cmF0aW9uLT5uYW5vc2Vjb25kcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VT
VE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2lnbiwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5
bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc2lnbiBj
YWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPnNpZ24oKSkpOworfQorCitKU0NfREVG
SU5FX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckJsYW5rLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlv
biA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlw
ZS5ibGFuayBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFkdXJhdGlvbi0+c2lnbigpKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4Nzc1
ZWViMDdiZTYwMmNmYWVmMDM4Nzk0ZTk3YzYyOTM1NGQzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgor
ICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRp
Y1Byb3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisg
ICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlOworICAgIH0KKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKiBj
cmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZP
OworCitwcml2YXRlOgorICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUoVk0mLCBTdHJ1Y3R1
cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFs
T2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0
LmNwcAppbmRleCA4ZjQ4MjJiNzY0NGM0YTg0MWFkMDYzZjYwNmYwZjMzYzc4MmMzM2U2Li4zNzQ5
Y2I5MjY2NDQ1NzI5YWFlMjUwODhlZWU4N2UyZDhkYjZiMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCkBAIC0xLDYgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTIgKzIzLDE1IEBACiAjaW5jbHVkZSAi
VGVtcG9yYWxPYmplY3QuaCIKIAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCisjaW5j
bHVkZSAiSW50bE9iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3RJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxDYWxl
bmRhckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxDYWxlbmRhclByb3RvdHlwZS5o
IgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJUZW1wb3JhbE5vdy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTQ4LDYgKzUyLDEzIEBAIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZU5v
d09iamVjdChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIFRlbXBvcmFsTm93
OjpjcmVhdGUodm0sIFRlbXBvcmFsTm93OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVj
dCkpOwogfQogCitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVEdXJhdGlvbkNvbnN0cnVjdG9yKFZNJiB2
bSwgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBUZW1wb3JhbE9iamVjdCogdGVtcG9yYWxPYmpl
Y3QgPSBqc0Nhc3Q8VGVtcG9yYWxPYmplY3QqPihvYmplY3QpOworICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSB0ZW1wb3JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0KHZtKTsKKyAgICBy
ZXR1cm4gVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIFRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5cGUoKSksIGpzQ2FzdDxUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlKj4oZ2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5
cGVPYmplY3QoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2luY2x1ZGUgIlRlbXBv
cmFsT2JqZWN0Lmx1dC5oIgpAQCAtNTgsNiArNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIEBiZWdp
biB0ZW1wb3JhbE9iamVjdFRhYmxlCiAgIENhbGVuZGFyICAgICAgIGNyZWF0ZUNhbGVuZGFyQ29u
c3RydWN0b3IgICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBOb3cgICAgICAgICAg
ICBjcmVhdGVOb3dPYmplY3QgICAgICAgICAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJh
Y2sKKyAgRHVyYXRpb24gICAgICAgY3JlYXRlRHVyYXRpb25Db25zdHJ1Y3RvciAgICAgICBEb250
RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiBAZW5kCiAqLwogCkBAIC04Nyw0ICs5OSwyMzUgQEAgdm9p
ZCBUZW1wb3JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEpTQ19UT19TVFJJ
TkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwogfQogCitzdGF0aWMgU3RyaW5nVmlldyBzaW5n
dWxhclVuaXQoU3RyaW5nVmlldyB1bml0KQoreworICAgIC8vIFBsdXJhbHMgYXJlIGFsbG93ZWQs
IGJ1dCB0aGFua2Z1bGx5IHRoZXkncmUgYWxsIGp1c3QgYSBzaW1wbGUgLXMuCisgICAgcmV0dXJu
IHVuaXQuZW5kc1dpdGgoInMiKSA/IHVuaXQubGVmdCh1bml0Lmxlbmd0aCgpIC0gMSkgOiB1bml0
OworfQorCitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5pdD4gdGVtcG9yYWxVbml0VHlwZShTdHJp
bmdWaWV3IHVuaXQpCit7CisgICAgU3RyaW5nVmlldyBzaW5ndWxhciA9IHNpbmd1bGFyVW5pdCh1
bml0KTsKKworICAgIGlmIChzaW5ndWxhciA9PSAieWVhciIpCisgICAgICAgIHJldHVybiBUZW1w
b3JhbFVuaXQ6OlllYXI7CisgICAgaWYgKHNpbmd1bGFyID09ICJtb250aCIpCisgICAgICAgIHJl
dHVybiBUZW1wb3JhbFVuaXQ6Ok1vbnRoOworICAgIGlmIChzaW5ndWxhciA9PSAid2VlayIpCisg
ICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OldlZWs7CisgICAgaWYgKHNpbmd1bGFyID09ICJk
YXkiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpEYXk7CisgICAgaWYgKHNpbmd1bGFy
ID09ICJob3VyIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6SG91cjsKKyAgICBpZiAo
c2luZ3VsYXIgPT0gIm1pbnV0ZSIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok1pbnV0
ZTsKKyAgICBpZiAoc2luZ3VsYXIgPT0gInNlY29uZCIpCisgICAgICAgIHJldHVybiBUZW1wb3Jh
bFVuaXQ6OlNlY29uZDsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm1pbGxpc2Vjb25kIikKKyAgICAg
ICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQ7CisgICAgaWYgKHNpbmd1bGFyID09
ICJtaWNyb3NlY29uZCIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25k
OworICAgIGlmIChzaW5ndWxhciA9PSAibmFub3NlY29uZCIpCisgICAgICAgIHJldHVybiBUZW1w
b3JhbFVuaXQ6Ok5hbm9zZWNvbmQ7CisgICAgCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30K
KworLy8gVG9MYXJnZXN0VGVtcG9yYWxVbml0ICggbm9ybWFsaXplZE9wdGlvbnMsIGRpc2FsbG93
ZWRVbml0cywgZmFsbGJhY2sgWyAsIGF1dG9WYWx1ZSBdICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9w
cm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRvbGFyZ2VzdHRlbXBvcmFsdW5pdAorc3Rk
OjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFsTGFyZ2VzdFVuaXQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxUZW1wb3JhbFVuaXQ+IGRpc2FsbG93ZWRVbml0cywgVGVtcG9yYWxVbml0IGF1dG9WYWx1ZSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIGxhcmdlc3RVbml0ID0gaW50bFN0
cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxhcmdl
c3RVbml0LCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAoIWxhcmdlc3RVbml0KQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKGxhcmdlc3RVbml0ID09ICJhdXRvIikKKyAg
ICAgICAgcmV0dXJuIGF1dG9WYWx1ZTsKKworICAgIGF1dG8gdW5pdFR5cGUgPSB0ZW1wb3JhbFVu
aXRUeXBlKGxhcmdlc3RVbml0KTsKKyAgICBpZiAoIXVuaXRUeXBlKSB7CisgICAgICAgIHRocm93
UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAibGFyZ2VzdFVuaXQgaXMgYW4gaW52YWxp
ZCBUZW1wb3JhbCB1bml0Il9zKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICBpZiAoZGlzYWxsb3dlZFVuaXRzLnNpemUoKSAmJiBzdGQ6OmZpbmQoZGlzYWxsb3dl
ZFVuaXRzLmJlZ2luKCksIGRpc2FsbG93ZWRVbml0cy5lbmQoKSwgdW5pdFR5cGUudmFsdWUoKSkg
IT0gZGlzYWxsb3dlZFVuaXRzLmVuZCgpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAibGFyZ2VzdFVuaXQgaXMgYSBkaXNhbGxvd2VkIHVuaXQiX3MpOwor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiB1bml0VHlw
ZTsKK30KKworLy8gVG9TbWFsbGVzdFRlbXBvcmFsVW5pdCAoIG5vcm1hbGl6ZWRPcHRpb25zLCBk
aXNhbGxvd2VkVW5pdHMsIGZhbGxiYWNrICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10
ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRvc21hbGxlc3R0ZW1wb3JhbHVuaXQKK3N0ZDo6b3B0aW9u
YWw8VGVtcG9yYWxVbml0PiB0ZW1wb3JhbFNtYWxsZXN0VW5pdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdCogb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0PFRlbXBv
cmFsVW5pdD4gZGlzYWxsb3dlZFVuaXRzKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBT
dHJpbmcgc21hbGxlc3RVbml0ID0gaW50bFN0cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlv
bnMsIHZtLnByb3BlcnR5TmFtZXMtPnNtYWxsZXN0VW5pdCwgeyB9LCBudWxscHRyLCBudWxscHRy
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAg
aWYgKCFzbWFsbGVzdFVuaXQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBh
dXRvIHVuaXRUeXBlID0gdGVtcG9yYWxVbml0VHlwZShzbWFsbGVzdFVuaXQpOworICAgIGlmICgh
dW5pdFR5cGUpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJzbWFsbGVzdFVuaXQgaXMgYW4gaW52YWxpZCBUZW1wb3JhbCB1bml0Il9zKTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoZGlzYWxsb3dlZFVuaXRzLnNp
emUoKSAmJiBzdGQ6OmZpbmQoZGlzYWxsb3dlZFVuaXRzLmJlZ2luKCksIGRpc2FsbG93ZWRVbml0
cy5lbmQoKSwgdW5pdFR5cGUudmFsdWUoKSkgIT0gZGlzYWxsb3dlZFVuaXRzLmVuZCgpKSB7Cisg
ICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAic21hbGxlc3RVbml0
IGlzIGEgZGlzYWxsb3dlZCB1bml0Il9zKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICByZXR1cm4gdW5pdFR5cGU7Cit9CisKKy8vIEdldFN0cmluZ09yTnVtYmVy
T3B0aW9uKG5vcm1hbGl6ZWRPcHRpb25zLCAiZnJhY3Rpb25hbFNlY29uZERpZ2l0cyIsIMKrICJh
dXRvIiDCuywgMCwgOSwgImF1dG8iKQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBv
cmFsLyNzZWMtZ2V0c3RyaW5nb3JudW1iZXJvcHRpb24KK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHRlbXBvcmFsRnJhY3Rpb25hbFNlY29uZERpZ2l0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogb3B0aW9ucykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYg
KCFvcHRpb25zKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgSlNWYWx1ZSB2
YWx1ZSA9IG9wdGlvbnMtPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmZyYWN0
aW9uYWxTZWNvbmREaWdpdHMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6
bnVsbG9wdCk7CisKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICh2YWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgIGRv
dWJsZSBkb3VibGVWYWx1ZSA9IHZhbHVlLmFzTnVtYmVyKCk7CisgICAgICAgIGlmIChkb3VibGVW
YWx1ZSA8IDAgfHwgZG91YmxlVmFsdWUgPiA5KSB7CisgICAgICAgICAgICB0aHJvd1JhbmdlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZyYWN0aW9uYWxTZWNvbmREaWdpdHMgaXMgb3V0IG9m
IHJhbmdlIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRvdWJsZVZhbHVlKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhnbG9iYWxP
YmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisK
KyAgICBpZiAoc3RyaW5nVmFsdWUgIT0gImF1dG8iKQorICAgICAgICB0aHJvd1JhbmdlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgImZyYWN0aW9uYWxTZWNvbmREaWdpdHMgaXMgb3V0IG9mIHJh
bmdlIl9zKTsKKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKy8vIFRvU2Vjb25kc1N0
cmluZ1ByZWNpc2lvbiAoIG5vcm1hbGl6ZWRPcHRpb25zICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9w
cm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRvc2Vjb25kc3N0cmluZ3ByZWNpc2lvbgor
UHJlY2lzaW9uRGF0YSBzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBhdXRvIHNtYWxsZXN0VW5pdCA9IHRlbXBvcmFsU21hbGxlc3RVbml0KGdsb2JhbE9iamVjdCwg
b3B0aW9ucywgeyBUZW1wb3JhbFVuaXQ6OlllYXIsIFRlbXBvcmFsVW5pdDo6TW9udGgsIFRlbXBv
cmFsVW5pdDo6V2VlaywgVGVtcG9yYWxVbml0OjpEYXksIFRlbXBvcmFsVW5pdDo6SG91ciwgVGVt
cG9yYWxVbml0OjpNaW51dGUgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKworICAgIGlmIChzbWFsbGVzdFVuaXQpIHsKKyAgICAgICAgc3dpdGNoIChzbWFsbGVzdFVu
aXQudmFsdWUoKSkgeworICAgICAgICBjYXNlIFRlbXBvcmFsVW5pdDo6U2Vjb25kOgorICAgICAg
ICAgICAgcmV0dXJuIHsgMCwgVGVtcG9yYWxVbml0OjpTZWNvbmQsIDEgfTsKKyAgICAgICAgY2Fz
ZSBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kOgorICAgICAgICAgICAgcmV0dXJuIHsgMywgVGVt
cG9yYWxVbml0OjpNaWxsaXNlY29uZCwgMSB9OworICAgICAgICBjYXNlIFRlbXBvcmFsVW5pdDo6
TWljcm9zZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4geyA2LCBUZW1wb3JhbFVuaXQ6Ok1pY3Jv
c2Vjb25kLCAxIH07CisgICAgICAgIGNhc2UgVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kOgorICAg
ICAgICAgICAgcmV0dXJuIHsgOSwgVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kLCAxIH07CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gcHJl
Y2lzaW9uID0gdGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25kRGlnaXRzKGdsb2JhbE9iamVjdCwgb3B0
aW9ucyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmICgh
cHJlY2lzaW9uKQorICAgICAgICByZXR1cm4geyBzdGQ6Om51bGxvcHQsIFRlbXBvcmFsVW5pdDo6
TmFub3NlY29uZCwgMSB9OworCisgICAgdW5zaWduZWQgZGlnaXRzID0gcHJlY2lzaW9uLnZhbHVl
KCk7CisgICAgaWYgKCFkaWdpdHMpCisgICAgICAgIHJldHVybiB7IDAsIFRlbXBvcmFsVW5pdDo6
U2Vjb25kLCAxIH07CisKKyAgICBpZiAoZGlnaXRzIDw9IDMpCisgICAgICAgIHJldHVybiB7IGRp
Z2l0cywgVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCwgc3RkOjpwb3coMTAsIDMgLSBkaWdpdHMp
IH07CisKKyAgICBpZiAoZGlnaXRzIDw9IDYpCisgICAgICAgIHJldHVybiB7IGRpZ2l0cywgVGVt
cG9yYWxVbml0OjpNaWNyb3NlY29uZCwgc3RkOjpwb3coMTAsIDYgLSBkaWdpdHMpIH07CisKKyAg
ICBBU1NFUlQoZGlnaXRzIDw9IDkpOworICAgIHJldHVybiB7IGRpZ2l0cywgVGVtcG9yYWxVbml0
OjpOYW5vc2Vjb25kLCBzdGQ6OnBvdygxMCwgOSAtIGRpZ2l0cykgfTsKK30KKworLy8gTWF4aW11
bVRlbXBvcmFsRHVyYXRpb25Sb3VuZGluZ0luY3JlbWVudCAoIHVuaXQgKQorLy8gaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtbWF4aW11bXRlbXBvcmFsZHVy
YXRpb25yb3VuZGluZ2luY3JlbWVudAorc3RkOjpvcHRpb25hbDxkb3VibGU+IG1heGltdW1Sb3Vu
ZGluZ0luY3JlbWVudChUZW1wb3JhbFVuaXQgdW5pdCkKK3sKKyAgICBpZiAodW5pdCA8PSBUZW1w
b3JhbFVuaXQ6OkRheSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAodW5p
dCA9PSBUZW1wb3JhbFVuaXQ6OkhvdXIpCisgICAgICAgIHJldHVybiAyNDsKKyAgICBpZiAodW5p
dCA8PSBUZW1wb3JhbFVuaXQ6OlNlY29uZCkKKyAgICAgICAgcmV0dXJuIDYwOworICAgIHJldHVy
biAxMDAwOworfQorCisvLyBUb1RlbXBvcmFsUm91bmRpbmdJbmNyZW1lbnQgKCBub3JtYWxpemVk
T3B0aW9ucywgZGl2aWRlbmQsIGluY2x1c2l2ZSApCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9z
YWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC10b3RlbXBvcmFscm91bmRpbmdpbmNyZW1lbnQKK2Rv
dWJsZSB0ZW1wb3JhbFJvdW5kaW5nSW5jcmVtZW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gZGl2aWRlbmQsIGJv
b2wgaW5jbHVzaXZlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBkb3VibGUgbWF4aW11
bTsKKyAgICBpZiAoIWRpdmlkZW5kKQorICAgICAgICBtYXhpbXVtID0gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpOworICAgIGVsc2UgaWYgKGluY2x1c2l2ZSkKKyAgICAg
ICAgbWF4aW11bSA9IGRpdmlkZW5kLnZhbHVlKCk7CisgICAgZWxzZSBpZiAoZGl2aWRlbmQudmFs
dWUoKSA+IDEpCisgICAgICAgIG1heGltdW0gPSBkaXZpZGVuZC52YWx1ZSgpIC0gMTsKKyAgICBl
bHNlCisgICAgICAgIG1heGltdW0gPSAxOworCisgICAgZG91YmxlIGluY3JlbWVudCA9IGludGxO
dW1iZXJPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5yb3Vu
ZGluZ0luY3JlbWVudCwgMSwgbWF4aW11bSwgMSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgMCk7CisKKyAgICBpbmNyZW1lbnQgPSBzdGQ6OmZsb29yKGluY3JlbWVudCk7CisgICAg
aWYgKGRpdmlkZW5kICYmIHN0ZDo6Zm1vZChkaXZpZGVuZC52YWx1ZSgpLCBpbmNyZW1lbnQpKSB7
CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBtYWtlU3RyaW5n
KCJyb3VuZGluZ0luY3JlbWVudCB2YWx1ZSBkb2VzIG5vdCBkaXZpZGUgIl9zLCBkaXZpZGVuZC52
YWx1ZSgpLCAiIGV2ZW5seSJfcykpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gaW5jcmVtZW50OworfQorCisvLyBSb3VuZE51bWJlclRvSW5jcmVtZW50ICggeCwgaW5j
cmVtZW50LCByb3VuZGluZ01vZGUgKQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBv
cmFsLyNzZWMtdGVtcG9yYWwtcm91bmRudW1iZXJ0b2luY3JlbWVudAorZG91YmxlIHJvdW5kTnVt
YmVyVG9JbmNyZW1lbnQoZG91YmxlIHgsIGRvdWJsZSBpbmNyZW1lbnQsIFJvdW5kaW5nTW9kZSBt
b2RlKQoreworICAgIGF1dG8gcXVvdGllbnQgPSB4IC8gaW5jcmVtZW50OworICAgIHN3aXRjaCAo
bW9kZSkgeworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpDZWlsOgorICAgICAgICByZXR1cm4gLXN0
ZDo6Zmxvb3IoLXF1b3RpZW50KSAqIGluY3JlbWVudDsKKyAgICBjYXNlIFJvdW5kaW5nTW9kZTo6
Rmxvb3I6CisgICAgICAgIHJldHVybiBzdGQ6OmZsb29yKHF1b3RpZW50KSAqIGluY3JlbWVudDsK
KyAgICBjYXNlIFJvdW5kaW5nTW9kZTo6VHJ1bmM6CisgICAgICAgIHJldHVybiBzdGQ6OnRydW5j
KHF1b3RpZW50KSAqIGluY3JlbWVudDsKKyAgICBjYXNlIFJvdW5kaW5nTW9kZTo6SGFsZkV4cGFu
ZDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6cm91bmQocXVvdGllbnQpICogaW5jcmVtZW50OworICAg
IH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxPYmplY3QuaAppbmRleCAxZWU5OTk0YzJiOGMwNWU0NmQxNjEwNmE2NmYw
MmI5NzU4YjhiMjgzLi43MjQzYzliYTU4NDMyNjJkMmQwY2JiODE5MzNmNGNkZDEzMDhmYjQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmgKQEAg
LTEsNSArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEsIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDYgKzI0LDI3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisjZGVmaW5lIEpTQ19URU1QT1JBTF9VTklUUyhtYWNy
bykgXAorICAgIG1hY3JvKHllYXIsIFllYXIpIFwKKyAgICBtYWNybyhtb250aCwgTW9udGgpIFwK
KyAgICBtYWNybyh3ZWVrLCBXZWVrKSBcCisgICAgbWFjcm8oZGF5LCBEYXkpIFwKKyAgICBtYWNy
byhob3VyLCBIb3VyKSBcCisgICAgbWFjcm8obWludXRlLCBNaW51dGUpIFwKKyAgICBtYWNybyhz
ZWNvbmQsIFNlY29uZCkgXAorICAgIG1hY3JvKG1pbGxpc2Vjb25kLCBNaWxsaXNlY29uZCkgXAor
ICAgIG1hY3JvKG1pY3Jvc2Vjb25kLCBNaWNyb3NlY29uZCkgXAorICAgIG1hY3JvKG5hbm9zZWNv
bmQsIE5hbm9zZWNvbmQpIFwKKworZW51bSBjbGFzcyBUZW1wb3JhbFVuaXQgOiB1aW50OF90IHsK
KyNkZWZpbmUgSlNDX0RFRklORV9URU1QT1JBTF9VTklUX0VOVU0obmFtZSwgY2FwaXRhbGl6ZWRO
YW1lKSBjYXBpdGFsaXplZE5hbWUsCisgICAgSlNDX1RFTVBPUkFMX1VOSVRTKEpTQ19ERUZJTkVf
VEVNUE9SQUxfVU5JVF9FTlVNKQorI3VuZGVmIEpTQ19ERUZJTkVfVEVNUE9SQUxfVU5JVF9FTlVN
Cit9OworI2RlZmluZSBKU0NfQ09VTlRfVEVNUE9SQUxfVU5JVFMobmFtZSwgY2FwaXRhbGl6ZWRO
YW1lKSArIDEKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZUZW1wb3JhbFVuaXRz
ID0gMCBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX0NPVU5UX1RFTVBPUkFMX1VOSVRTKTsKKyN1bmRl
ZiBKU0NfQ09VTlRfVEVNUE9SQUxfVU5JVFMKKwogY2xhc3MgVGVtcG9yYWxPYmplY3QgZmluYWwg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
Tm9uRmluYWxPYmplY3Q7CkBAIC00NSw0ICs2NywyNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKIH07CiAKK2VudW0gY2xhc3MgUm91bmRpbmdNb2RlIDogdWludDhf
dCB7CisgICAgQ2VpbCwKKyAgICBGbG9vciwKKyAgICBUcnVuYywKKyAgICBIYWxmRXhwYW5kCit9
OworCitzdHJ1Y3QgUHJlY2lzaW9uRGF0YSB7CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
cHJlY2lzaW9uOworICAgIFRlbXBvcmFsVW5pdCB1bml0OworICAgIGRvdWJsZSBpbmNyZW1lbnQ7
Cit9OworCitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5pdD4gdGVtcG9yYWxVbml0VHlwZShTdHJp
bmdWaWV3KTsKK3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1wb3JhbExhcmdlc3RVbml0
KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxUZW1wb3JhbFVuaXQ+IGRpc2FsbG93ZWRVbml0cywgVGVtcG9yYWxVbml0IGF1dG9WYWx1ZSk7
CitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5pdD4gdGVtcG9yYWxTbWFsbGVzdFVuaXQoSlNHbG9i
YWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0PFRlbXBv
cmFsVW5pdD4gZGlzYWxsb3dlZFVuaXRzKTsKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRlbXBv
cmFsRnJhY3Rpb25hbFNlY29uZERpZ2l0cyhKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBvcHRp
b25zKTsKK1ByZWNpc2lvbkRhdGEgc2Vjb25kc1N0cmluZ1ByZWNpc2lvbihKU0dsb2JhbE9iamVj
dCosIEpTT2JqZWN0KiBvcHRpb25zKTsKK3N0ZDo6b3B0aW9uYWw8ZG91YmxlPiBtYXhpbXVtUm91
bmRpbmdJbmNyZW1lbnQoVGVtcG9yYWxVbml0KTsKK2RvdWJsZSB0ZW1wb3JhbFJvdW5kaW5nSW5j
cmVtZW50KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlvbnMsIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBkaXZpZGVuZCwgYm9vbCBpbmNsdXNpdmUpOworZG91YmxlIHJvdW5kTnVtYmVyVG9J
bmNyZW1lbnQoZG91YmxlLCBkb3VibGUgaW5jcmVtZW50LCBSb3VuZGluZ01vZGUpOworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCAzMDkz
ZTExNTViNmRmZGNhZjU3ZjBkNTBkZGM3ODJmYmQxNWM5ZjM4Li4zYmY2OTE0ODMzYmQwNDYzY2My
OWYwNzM1Mzg1ZThiMmE4NmUzNGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CkBAIC0xNjMsNiArMTYzLDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiU3ltYm9sT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxDYWxlbmRhci5oIgorI2lu
Y2x1ZGUgIlRlbXBvcmFsRHVyYXRpb24uaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIK
ICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIK
QEAgLTE2MTksNiArMTYyMCw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyhpbnRsUmVsYXRpdmVUaW1lRm9ybWF0U3BhY2UsIGludGxSZWxhdGl2CiBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRJdGVyYXRvclNwYWNlLCBp
bnRsU2VnbWVudEl0ZXJhdG9ySGVhcENlbGxUeXBlLmdldCgpLCBJbnRsU2VnbWVudEl0ZXJhdG9y
KQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50ZXJT
cGFjZSwgaW50bFNlZ21lbnRlckhlYXBDZWxsVHlwZS5nZXQoKSwgSW50bFNlZ21lbnRlcikKIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudHNTcGFjZSwg
aW50bFNlZ21lbnRzSGVhcENlbGxUeXBlLmdldCgpLCBJbnRsU2VnbWVudHMpCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1codGVtcG9yYWxEdXJhdGlvblNwYWNlLCBjZWxs
SGVhcENlbGxUeXBlLmdldCgpLCBUZW1wb3JhbER1cmF0aW9uKQogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhqc1RvV2FzbUlD
Q2FsbGVlU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVG9XYXNtSUNDYWxsZWUpCiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlDb2RlQmxv
Y2tTcGFjZSwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2spIC8vIEhhc2g6MHg5YWQ5OTVjZApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKaW5kZXggYWE3NTU5N2VkOGM1MTJlOWVjYmVmNzRlNDYwNjZmMjYyZWQxMzQ0YS4uNmIz
YTBlZmQ0NTdmMjE4NjJhMGJhZmM1YWI3ZDFmZmViOGVmNjg1MyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCkBAIC0xODUsNiArMTg1LDcgQEAgY2xhc3MgU3RydWN0dXJlOwogY2xhc3Mg
UmVnRXhwOwogI2VuZGlmCiBjbGFzcyBTeW1ib2w7CitjbGFzcyBUZW1wb3JhbER1cmF0aW9uOwog
Y2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXI7CiBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNs
YXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKQEAgLTYxNyw2ICs2MTgsNyBAQCBwdWJsaWM6CiAg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsU2VnbWVudEl0ZXJhdG9y
U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsU2VnbWVu
dGVyU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsU2Vn
bWVudHNTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHRlbXBv
cmFsRHVyYXRpb25TcGFjZSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlDQ2FsbGVlU3BhY2UpCiAgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNl
KQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRl
eCAxMzY0OGI0MTRlMjJjZDZhNWY1NjVkZWZiMjMzOWVhZTdlYjkxZGExLi43MWVkNmZlNDU0ZGQ0
YjJmNjhkYTBkNjAwYzQ0OWQ3Zjk1YTJhMTAwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxv
ZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTA4LTMxICBS
b3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAgICBbSlNDXSBJ
bXBsZW1lbnQgVGVtcG9yYWwuRHVyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyODUzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogc3RyZXNzL3RlbXBvcmFsLWR1cmF0aW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKiB0ZXN0MjYyL2NvbmZpZy55YW1sOiBFbmFibGVkIER1cmF0aW9uIHRlc3RzLgor
CiAyMDIxLTA4LTMwICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAog
ICAgICAgICBbSlNDXVtJbnRsXSBFcnJvcnMgZm9yIC5jYWxsKHt9KSBhcmUgdG9vIHZlcmJvc2UK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3RlbXBvcmFsLWR1cmF0aW9uLmpzIGIvSlNUZXN0
cy9zdHJlc3MvdGVtcG9yYWwtZHVyYXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNmMTNhOWY5NWY4MDQ4
MjBkNGRmNTRlNTEzMjA3NzI1NTFkOWVhMgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3Ry
ZXNzL3RlbXBvcmFsLWR1cmF0aW9uLmpzCkBAIC0wLDAgKzEsMjg5IEBACisvL0AgcmVxdWlyZU9w
dGlvbnMoIi0tdXNlVGVtcG9yYWw9MSIpCisKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhw
ZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKGBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfWApOworfQorCitm
dW5jdGlvbiBzaG91bGROb3RUaHJvdyhmdW5jKSB7CisgICAgZnVuYygpOworfQorCitmdW5jdGlv
biBzaG91bGRUaHJvdyhmdW5jLCBlcnJvclR5cGUpIHsKKyAgICBsZXQgZXJyb3I7CisgICAgdHJ5
IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBl
OworICAgIH0KKworICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgZXJyb3JUeXBlKSkKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2Vycm9yVHlwZS5uYW1lfSFgKTsKK30KKwor
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24gaW5zdGFuY2VvZiBGdW5jdGlvbiwgdHJ1ZSk7Citz
aG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5sZW5ndGgsIDApOworc2hvdWxkQmUoT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihUZW1wb3JhbC5EdXJhdGlvbiwgJ3Byb3RvdHlwZScpLndy
aXRhYmxlLCBmYWxzZSk7CitzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KFRlbXBvcmFsLkR1cmF0aW9uLCAncHJvdG90eXBlJykuZW51bWVyYWJsZSwgZmFsc2UpOworc2hv
dWxkQmUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihUZW1wb3JhbC5EdXJhdGlvbiwg
J3Byb3RvdHlwZScpLmNvbmZpZ3VyYWJsZSwgZmFsc2UpOworc2hvdWxkVGhyb3coKCkgPT4gVGVt
cG9yYWwuRHVyYXRpb24oKSwgVHlwZUVycm9yKTsKKworc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1
cmF0aW9uKCkgaW5zdGFuY2VvZiBUZW1wb3JhbC5EdXJhdGlvbiwgdHJ1ZSk7Cit7CisgICAgY2xh
c3MgRGVyaXZlZER1cmF0aW9uIGV4dGVuZHMgVGVtcG9yYWwuRHVyYXRpb24ge30KKworICAgIGNv
bnN0IGRkID0gbmV3IERlcml2ZWREdXJhdGlvbigpOworICAgIHNob3VsZEJlKGRkIGluc3RhbmNl
b2YgRGVyaXZlZER1cmF0aW9uLCB0cnVlKTsKKyAgICBzaG91bGRCZShkZCBpbnN0YW5jZW9mIFRl
bXBvcmFsLkR1cmF0aW9uLCB0cnVlKTsKKyAgICBzaG91bGRCZShkZC5uZWdhdGVkLCBUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGUubmVnYXRlZCk7CisgICAgc2hvdWxkQmUoT2JqZWN0LmdldFBy
b3RvdHlwZU9mKGRkKSwgRGVyaXZlZER1cmF0aW9uLnByb3RvdHlwZSk7CisgICAgc2hvdWxkQmUo
T2JqZWN0LmdldFByb3RvdHlwZU9mKERlcml2ZWREdXJhdGlvbi5wcm90b3R5cGUpLCBUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGUpOworfQorCitzaG91bGRUaHJvdygoKSA9PiBuZXcgVGVtcG9y
YWwuRHVyYXRpb24oMSwgLTEpLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IG5ldyBU
ZW1wb3JhbC5EdXJhdGlvbihJbmZpbml0eSksIFJhbmdlRXJyb3IpOworCitjb25zdCBmaWVsZHMg
PSBbJ3llYXJzJywgJ21vbnRocycsICd3ZWVrcycsICdkYXlzJywgJ2hvdXJzJywgJ21pbnV0ZXMn
LCAnc2Vjb25kcycsICdtaWxsaXNlY29uZHMnLCAnbWljcm9zZWNvbmRzJywgJ25hbm9zZWNvbmRz
J107Citjb25zdCB6ZXJvID0gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKCk7Citjb25zdCBwb3MgPSBu
ZXcgVGVtcG9yYWwuRHVyYXRpb24oMSwyLDMsNCw1LDYsNyw4LDksMTApOworY29uc3QgbmVnID0g
bmV3IFRlbXBvcmFsLkR1cmF0aW9uKC0xLC0yLC0zLC00LC01LC02LC03LC04LC05LC0xMCk7CisK
K2ZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaSkgPT4geworICAgIHNob3VsZFRocm93KCgpID0+IFRl
bXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZVtmaWVsZF0sIFR5cGVFcnJvcik7CisgICAgc2hvdWxk
QmUoemVyb1tmaWVsZF0sIDApOworICAgIHNob3VsZEJlKHBvc1tmaWVsZF0sIGkgKyAxKTsKKyAg
ICBzaG91bGRCZShuZWdbZmllbGRdLCAtaSAtIDEpOworfSk7CisKK3Nob3VsZFRocm93KCgpID0+
IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5zaWduLCBUeXBlRXJyb3IpOworc2hvdWxkQmUo
emVyby5zaWduLCAwKTsKK3Nob3VsZEJlKHBvcy5zaWduLCAxKTsKK3Nob3VsZEJlKG5lZy5zaWdu
LCAtMSk7CisKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5i
bGFuaywgVHlwZUVycm9yKTsKK3Nob3VsZEJlKHplcm8uYmxhbmssIHRydWUpOworc2hvdWxkQmUo
cG9zLmJsYW5rLCBmYWxzZSk7CitzaG91bGRCZShuZWcuYmxhbmssIGZhbHNlKTsKKworc2hvdWxk
QmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbS5sZW5ndGgsIDEpOworc2hvdWxkVGhyb3coKCkgPT4g
VGVtcG9yYWwuRHVyYXRpb24uZnJvbSgpLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+
IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oe30pLCBUeXBlRXJyb3IpOworeworICAgIGNvbnN0IGJh
ZFN0cmluZ3MgPSBbCisgICAgICAgICcnLCAnUCcsICdQMScsICdQVCcsICdQMVlUJywgJ1BUMScs
CisgICAgICAgICdQMVcxWScsICAnUFQxUzFNJywKKyAgICAgICAgJ1AxLjFZJywgJ1BUMS4xSDFN
JywgJ1BUMS4xTTFTJywKKyAgICAgICAgJ1BUMS4xMTExMTExMTExSCcsICdQVDEuMTExMTExMTEx
MU0nLCAnUFQxLjExMTExMTExMTFTJywKKyAgICAgICAgYFAke0FycmF5KDMwOSkuZmlsbCg5KS5q
b2luKCcnKX1ZYAorICAgIF07CisgICAgZm9yIChjb25zdCBiYWRTdHJpbmcgaW4gYmFkU3RyaW5n
cykKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbShiYWRT
dHJpbmcpLCBSYW5nZUVycm9yKTsKKyAgICAKKyAgICBjb25zdCBmcm9tU3RyaW5nID0gVGVtcG9y
YWwuRHVyYXRpb24uZnJvbSgnUDFZMk0zVzREVDVINk03LjAwODAwOTAxMFMnKTsKKworICAgIGNv
bnN0IGR1cmF0aW9uTGlrZSA9IHt9OworICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaSkgPT4g
eyBkdXJhdGlvbkxpa2VbZmllbGRdID0gaSArIDE7IH0pOworICAgIGNvbnN0IGZyb21EdXJhdGlv
bkxpa2UgPSBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKGR1cmF0aW9uTGlrZSk7CisKKyAgICBmb3Ig
KGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAgICAgICBzaG91bGRCZShmcm9tU3RyaW5nW2Zp
ZWxkXSwgcG9zW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKGZyb21EdXJhdGlvbkxpa2VbZmll
bGRdLCBwb3NbZmllbGRdKTsKKyAgICB9Cit9CitzaG91bGROb3RUaHJvdygoKSA9PiBUZW1wb3Jh
bC5EdXJhdGlvbi5mcm9tKGBQJHtBcnJheSgzMDgpLmZpbGwoOSkuam9pbignJyl9WWApKTsKK3No
b3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ+KIknAxeTJtM3c0ZHQ1aDZtNy4wMDgwMDkw
MTBzJykudG9TdHJpbmcoKSwgJy1QMVkyTTNXNERUNUg2TTcuMDA4MDA5MDFTJyk7CitzaG91bGRC
ZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCcrUDFZMkRUM0g0LjBTJykudG9TdHJpbmcoKSwgJ1Ax
WTJEVDNINFMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1BUMS4wMzEyNUgn
KS50b1N0cmluZygpLCAnUFQxSDFNNTIuNVMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9u
LmZyb20oJ1BUMS4wMzEyNU0nKS50b1N0cmluZygpLCAnUFQxTTEuODc1UycpOworCitjb25zdCBw
b3NBYnNvbHV0ZSA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwxLDIsMyw0LDUsNiw3KTsK
Kworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZS5sZW5ndGgsIDIpOworc2hvdWxk
VGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSgpLCBSYW5nZUVycm9yKTsKK3No
b3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoe30pLCBUeXBlRXJyb3Ip
Oworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh6ZXJvKSwgUmFu
Z2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHpl
cm8sIHt9KSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9u
LmNvbXBhcmUoeyB5ZWFyczogMSB9LCB6ZXJvKSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygo
KSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHsgbW9udGhzOiAxIH0sIHplcm8pLCBSYW5n
ZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoeyB3
ZWVrczogMSB9LCB6ZXJvKSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3Jh
bC5EdXJhdGlvbi5jb21wYXJlKHplcm8sIHsgeWVhcnM6IDEgfSksIFJhbmdlRXJyb3IpOworc2hv
dWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh6ZXJvLCB7IG1vbnRoczog
MSB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5j
b21wYXJlKHplcm8sIHsgd2Vla3M6IDEgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkQmUoVGVtcG9y
YWwuRHVyYXRpb24uY29tcGFyZShwb3NBYnNvbHV0ZSwgcG9zQWJzb2x1dGUpLCAwKTsKK3Nob3Vs
ZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUocG9zQWJzb2x1dGUsIHplcm8pLCAxKTsKK3No
b3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoemVybywgcG9zQWJzb2x1dGUpLCAtMSk7
CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKCdQVDg2NDAwUycsICdQMUQnKSwg
MCk7CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS53aXRoLmxlbmd0aCwg
MSk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUud2l0aC5j
YWxsKHt9LCB7IHllYXJzOiAxIH0pLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVy
by53aXRoKCksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLndpdGgoe30pLCBU
eXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby53aXRoKHsgeWVhcnM6IDEuMSB9KSwg
UmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBwb3Mud2l0aCh7IHllYXJzOiAtMSB9KSwg
UmFuZ2VFcnJvcik7Cit7CisgICAgY29uc3QgZnVsbHlVcGRhdGVkID0gcG9zLndpdGgobmVnKTsK
KyAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAgICAgICBzaG91bGRCZSh6ZXJv
LndpdGgoeyBbZmllbGRdOiAxIH0pW2ZpZWxkXSwgMSk7CisgICAgICAgIHNob3VsZEJlKGZ1bGx5
VXBkYXRlZFtmaWVsZF0sIG5lZ1tmaWVsZF0pOworICAgIH0KK30KKworc2hvdWxkQmUoVGVtcG9y
YWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQubGVuZ3RoLCAwKTsKK3Nob3VsZFRocm93KCgp
ID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVkLmNhbGwoe30pLCBUeXBlRXJy
b3IpOworeworICAgIGNvbnN0IG5lZ2F0ZWRaZXJvID0gemVyby5uZWdhdGVkKCk7CisgICAgY29u
c3QgbmVnYXRlZFBvcyA9IHBvcy5uZWdhdGVkKCk7CisgICAgY29uc3QgbmVnYXRlZE5lZyA9IG5l
Zy5uZWdhdGVkKCk7CisgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHsKKyAgICAgICAg
c2hvdWxkQmUobmVnYXRlZFplcm9bZmllbGRdLCB6ZXJvW2ZpZWxkXSk7CisgICAgICAgIHNob3Vs
ZEJlKG5lZ2F0ZWROZWdbZmllbGRdLCBwb3NbZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUobmVn
YXRlZFBvc1tmaWVsZF0sIG5lZ1tmaWVsZF0pOworICAgIH0KK30KKworc2hvdWxkQmUoVGVtcG9y
YWwuRHVyYXRpb24ucHJvdG90eXBlLmFicy5sZW5ndGgsIDApOworc2hvdWxkVGhyb3coKCkgPT4g
VGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmFicy5jYWxsKHt9KSwgVHlwZUVycm9yKTsKK3sK
KyAgICBjb25zdCBhYnNaZXJvID0gemVyby5hYnMoKTsKKyAgICBjb25zdCBhYnNQb3MgPSBwb3Mu
YWJzKCk7CisgICAgY29uc3QgYWJzTmVnID0gbmVnLmFicygpOworICAgIGZvciAoY29uc3QgZmll
bGQgb2YgZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJlKGFic1plcm9bZmllbGRdLCB6ZXJvW2Zp
ZWxkXSk7CisgICAgICAgIHNob3VsZEJlKGFic1Bvc1tmaWVsZF0sIHBvc1tmaWVsZF0pOworICAg
ICAgICBzaG91bGRCZShhYnNOZWdbZmllbGRdLCBwb3NbZmllbGRdKTsKKyAgICB9Cit9CisKK2Zv
ciAoY29uc3QgbWV0aG9kIG9mIFsnYWRkJywgJ3N1YnRyYWN0J10pIHsKKyAgICBzaG91bGRCZShU
ZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbbWV0aG9kXS5sZW5ndGgsIDEpOworICAgIHNob3Vs
ZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZVttZXRob2RdLmNhbGwoeyBo
b3VyczogMSB9KSwgVHlwZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiB6ZXJvW21ldGhv
ZF0oKSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gemVyb1ttZXRob2RdKHt9
KSwgVHlwZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiB6ZXJvW21ldGhvZF0oeyB5ZWFy
czogMSB9KSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gemVyb1ttZXRob2Rd
KHsgbW9udGhzOiAxIH0pLCBSYW5nZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiB6ZXJv
W21ldGhvZF0oeyB3ZWVrczogMSB9KSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkg
PT4gcG9zW21ldGhvZF0oeyBzZWNvbmRzOiAxIH0pLCBSYW5nZUVycm9yKTsKK30KK3sKKyAgICBj
b25zdCBwb3NEdXJhdGlvbkxpa2UgPSB7IGRheXM6IDEsIGhvdXJzOiAyLCBtaW51dGVzOiAzLCBz
ZWNvbmRzOiA0LCBtaWxsaXNlY29uZHM6IDUsIG1pY3Jvc2Vjb25kczogNiwgbmFub3NlY29uZHM6
IDcgfTsKKyAgICBjb25zdCBuZWdTdHJpbmcgPSAnLVAxRFQySDNNNC4wMDUwMDYwMDdTJzsKKwor
ICAgIGNvbnN0IGFkZFplcm8gPSBwb3NBYnNvbHV0ZS5hZGQoemVybyk7CisgICAgY29uc3QgYWRk
UG9zID0gcG9zQWJzb2x1dGUuYWRkKHBvc0R1cmF0aW9uTGlrZSk7CisgICAgY29uc3QgYWRkTmVn
ID0gcG9zQWJzb2x1dGUuYWRkKG5lZ1N0cmluZyk7CisgICAgY29uc3Qgc3ViWmVybyA9IHBvc0Fi
c29sdXRlLnN1YnRyYWN0KHplcm8pOworICAgIGNvbnN0IHN1YlBvcyA9IHBvc0Fic29sdXRlLnN1
YnRyYWN0KHBvc0R1cmF0aW9uTGlrZSk7CisgICAgY29uc3Qgc3ViTmVnID0gcG9zQWJzb2x1dGUu
c3VidHJhY3QobmVnU3RyaW5nKTsKKyAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgewor
ICAgICAgICBzaG91bGRCZShhZGRaZXJvW2ZpZWxkXSwgcG9zQWJzb2x1dGVbZmllbGRdKTsKKyAg
ICAgICAgc2hvdWxkQmUoYWRkUG9zW2ZpZWxkXSwgMiAqIHBvc0Fic29sdXRlW2ZpZWxkXSk7Cisg
ICAgICAgIHNob3VsZEJlKGFkZE5lZ1tmaWVsZF0sIDApOworICAgICAgICBzaG91bGRCZShzdWJa
ZXJvW2ZpZWxkXSwgcG9zQWJzb2x1dGVbZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUoc3ViUG9z
W2ZpZWxkXSwgMCk7CisgICAgICAgIHNob3VsZEJlKHN1Yk5lZ1tmaWVsZF0sIDIgKiBwb3NBYnNv
bHV0ZVtmaWVsZF0pOworICAgIH0KK30KK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20o
J1AxRFQxM0gzMU0zMVMnKS5hZGQoJ1AxRFQxM0gzMU0zMVMnKS50b1N0cmluZygpLCAnUDNEVDNI
M00yUycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnLVBUMU01OVMnKS5zdWJ0
cmFjdCgnUFQxTTU5UycpLnRvU3RyaW5nKCksICctUFQzTTU4UycpOworCitzaG91bGRCZShUZW1w
b3JhbC5EdXJhdGlvbi5wcm90b3R5cGUucm91bmQubGVuZ3RoLCAxKTsKK3Nob3VsZFRocm93KCgp
ID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5yb3VuZC5jYWxsKHt9KSwgVHlwZUVycm9y
KTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ucm91bmQoKSwgVHlwZUVycm9yKTsKK3Nob3VsZFRo
cm93KCgpID0+IHplcm8ucm91bmQoe30pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+
IHplcm8ucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdib2d1cycgfSksIFJhbmdlRXJyb3IpOworc2hv
dWxkVGhyb3coKCkgPT4gemVyby5yb3VuZCh7IGxhcmdlc3RVbml0OiAnYm9ndXMnIH0pLCBSYW5n
ZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdo
b3VyJywgbGFyZ2VzdFVuaXQ6ICduYW5vc2Vjb25kJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRU
aHJvdygoKSA9PiB6ZXJvLnJvdW5kKHsgc21hbGxlc3RVbml0OiAnbmFub3NlY29uZCcsIHJvdW5k
aW5nTW9kZTogJ2JvZ3VzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJv
LnJvdW5kKHsgc21hbGxlc3RVbml0OiAnbmFub3NlY29uZCcsIHJvdW5kaW5nSW5jcmVtZW50OiAz
IH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZy
b20oJ1AxWScpLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJvcik7
CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMU0nKS5yb3VuZCh7
IGxhcmdlc3RVbml0OiAnc2Vjb25kcycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkg
PT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFXJykucm91bmQoeyBsYXJnZXN0VW5pdDogJ3Nl
Y29uZHMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0
aW9uLmZyb20oJ1AxRCcpLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdtb250aHMnIH0pLCBSYW5nZUVy
cm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxRCcpLnJv
dW5kKHsgbGFyZ2VzdFVuaXQ6ICd3ZWVrcycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkQmUocG9z
QWJzb2x1dGUucm91bmQoeyBsYXJnZXN0VW5pdDogJ2RheScgfSkudG9TdHJpbmcoKSwgJ1AxRFQy
SDNNNC4wMDUwMDYwMDdTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IGxhcmdlc3RV
bml0OiAnYXV0bycgfSkudG9TdHJpbmcoKSwgJ1AxRFQySDNNNC4wMDUwMDYwMDdTJyk7CitzaG91
bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ2RheScgfSkudG9TdHJpbmco
KSwgJ1AxRCcpOworc2hvdWxkQmUocG9zQWJzb2x1dGUucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdz
ZWNvbmQnIH0pLnRvU3RyaW5nKCksICdQMURUMkgzTTRTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0
ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnaG91cicsIHNtYWxsZXN0VW5pdDogJ3NlY29uZCcgfSku
dG9TdHJpbmcoKSwgJ1BUMjZIM000UycpOworc2hvdWxkQmUocG9zQWJzb2x1dGUucm91bmQoeyBs
YXJnZXN0VW5pdDogJ21pbnV0ZScsIHNtYWxsZXN0VW5pdDogJ3NlY29uZCcgfSkudG9TdHJpbmco
KSwgJ1BUMTU2M000UycpOworc2hvdWxkQmUocG9zQWJzb2x1dGUucm91bmQoeyBsYXJnZXN0VW5p
dDogJ3NlY29uZCcsIHNtYWxsZXN0VW5pdDogJ21pbGxpc2Vjb25kJyB9KS50b1N0cmluZygpLCAn
UFQ5Mzc4NC4wMDVTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IGxhcmdlc3RVbml0
OiAnbWlsbGlzZWNvbmQnLCBzbWFsbGVzdFVuaXQ6ICdtaWNyb3NlY29uZCcgfSkudG9TdHJpbmco
KSwgJ1BUOTM3ODQuMDA1MDA2UycpOworc2hvdWxkQmUocG9zQWJzb2x1dGUucm91bmQoeyBsYXJn
ZXN0VW5pdDogJ21pY3Jvc2Vjb25kJywgc21hbGxlc3RVbml0OiAnbWljcm9zZWNvbmQnIH0pLnRv
U3RyaW5nKCksICdQVDkzNzg0LjAwNTAwNlMnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5k
KHsgbGFyZ2VzdFVuaXQ6ICduYW5vc2Vjb25kJyB9KS50b1N0cmluZygpLCAnUFQ5Mzc4NC4wMDUw
MDYwMDdTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ3Nl
Y29uZCcsIHJvdW5kaW5nSW5jcmVtZW50OiAzMCB9KS50b1N0cmluZygpLCAnUDFEVDJIM00nKTsK
K3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgc21hbGxlc3RVbml0OiAnc2Vjb25kJywgcm91
bmRpbmdJbmNyZW1lbnQ6IDMwLCByb3VuZGluZ01vZGU6ICdjZWlsJyB9KS50b1N0cmluZygpLCAn
UDFEVDJIM00zMFMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJy1QVDMxUycp
LnJvdW5kKHsgc21hbGxlc3RVbml0OiAnc2Vjb25kJywgcm91bmRpbmdJbmNyZW1lbnQ6IDMwIH0p
LnRvU3RyaW5nKCksICctUFQzMFMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20o
Jy1QVDMxUycpLnJvdW5kKHsgc21hbGxlc3RVbml0OiAnc2Vjb25kJywgcm91bmRpbmdJbmNyZW1l
bnQ6IDMwLCByb3VuZGluZ01vZGU6ICdmbG9vcicgfSkudG9TdHJpbmcoKSwgJy1QVDYwUycpOwor
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnLVBUNDVTJykucm91bmQoeyBzbWFsbGVz
dFVuaXQ6ICdzZWNvbmQnLCByb3VuZGluZ0luY3JlbWVudDogMzAgfSkudG9TdHJpbmcoKSwgJy1Q
VDYwUycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnLVBUNDVTJykucm91bmQo
eyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmQnLCByb3VuZGluZ0luY3JlbWVudDogMzAsIHJvdW5kaW5n
TW9kZTogJ3RydW5jJyB9KS50b1N0cmluZygpLCAnLVBUMzBTJyk7CisKK3Nob3VsZEJlKFRlbXBv
cmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b3RhbC5sZW5ndGgsIDEpOworc2hvdWxkVGhyb3coKCkg
PT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvdGFsLmNhbGwoe30pLCBUeXBlRXJyb3Ip
Oworc2hvdWxkVGhyb3coKCkgPT4gemVyby50b3RhbCgpLCBUeXBlRXJyb3IpOworc2hvdWxkVGhy
b3coKCkgPT4gemVyby50b3RhbCh7fSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4g
VGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFZJykudG90YWwoeyB1bml0OiAnc2Vjb25kcycgfSks
IFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgn
UDFNJykudG90YWwoeyB1bml0OiAnc2Vjb25kcycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhy
b3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFXJykudG90YWwoeyB1bml0OiAnc2Vj
b25kcycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRp
b24uZnJvbSgnUDFEJykudG90YWwoeyB1bml0OiAnbW9udGhzJyB9KSwgUmFuZ2VFcnJvcik7Citz
aG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMUQnKS50b3RhbCh7IHVu
aXQ6ICd3ZWVrcycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkQmUocG9zQWJzb2x1dGUudG90YWwo
eyB1bml0OiAnZGF5cycgfSksIDEuMDg1NDYzMDIwOTAyODU4OCk7CitzaG91bGRCZShwb3NBYnNv
bHV0ZS50b3RhbCh7IHVuaXQ6ICdob3VycycgfSksIDI2LjA1MTExMjUwMTY2ODYxMik7CitzaG91
bGRCZShwb3NBYnNvbHV0ZS50b3RhbCh7IHVuaXQ6ICdtaW51dGVzJyB9KSwgMTU2My4wNjY3NTAx
MDAxMTY3KTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ3NlY29uZHMnIH0p
LCA5Mzc4NC4wMDUwMDYwMDcpOworc2hvdWxkQmUocG9zQWJzb2x1dGUudG90YWwoeyB1bml0OiAn
bWlsbGlzZWNvbmRzJyB9KSwgOTM3ODQwMDUuMDA2MDA3KTsKK3Nob3VsZEJlKHBvc0Fic29sdXRl
LnRvdGFsKHsgdW5pdDogJ21pY3Jvc2Vjb25kcycgfSksIDkzNzg0MDA1MDA2LjAwNyk7CitzaG91
bGRCZShwb3NBYnNvbHV0ZS50b3RhbCh7IHVuaXQ6ICduYW5vc2Vjb25kcycgfSksIDkzNzg0MDA1
MDA2MDA3KTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJy1QVDEyMzQ1Njc4OVMn
KS50b3RhbCh7IHVuaXQ6ICdkYXknIH0pLCAtMTQyOC44OTgwMjA4MzMzMzMyKTsKKworLy8gQXQg
cHJlc2VudCwgdG9Mb2NhbGVTdHJpbmcgaGFzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIHRvSlNPTiBv
ciBhcmd1bWVudGxlc3MgdG9TdHJpbmcuCitmb3IgKGNvbnN0IG1ldGhvZCBvZiBbJ3RvU3RyaW5n
JywgJ3RvSlNPTicsICd0b0xvY2FsZVN0cmluZyddKSB7ICAgIAorICAgIHNob3VsZEJlKFRlbXBv
cmFsLkR1cmF0aW9uLnByb3RvdHlwZVttZXRob2RdLmxlbmd0aCwgMCk7CisgICAgc2hvdWxkVGhy
b3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW21ldGhvZF0uY2FsbCh7fSksIFR5
cGVFcnJvcik7CisKKyAgICBzaG91bGRCZSh6ZXJvW21ldGhvZF0oKSwgJ1BUMFMnKTsKKyAgICBz
aG91bGRCZShwb3NbbWV0aG9kXSgpLCAnUDFZMk0zVzREVDVINk03LjAwODAwOTAxUycpOworICAg
IHNob3VsZEJlKG5lZ1ttZXRob2RdKCksICctUDFZMk0zVzREVDVINk03LjAwODAwOTAxUycpOwor
ICAgIAorICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigxLDEsMSwxKVttZXRob2Rd
KCksICdQMVkxTTFXMUQnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCww
LDAsMCwxLDEsMSlbbWV0aG9kXSgpLCAnUFQxSDFNMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVt
cG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwxMDApW21ldGhvZF0oKSwgJ1BUMC4xUycpOwor
ICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDAsMTAwKVtt
ZXRob2RdKCksICdQVDAuMDAwMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRp
b24oMCwwLDAsMCwwLDAsMCwwLDAsMTAwKVttZXRob2RdKCksICdQVDAuMDAwMDAwMVMnKTsKKyAg
ICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMSwxMDAxKVttZXRo
b2RdKCksICdQVDIuMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigw
LDAsMCwwLDAsMCwwLDEsMTAwMSlbbWV0aG9kXSgpLCAnUFQwLjAwMjAwMVMnKTsKKyAgICBzaG91
bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwwLDEsMTAwMSlbbWV0aG9k
XSgpLCAnUFQwLjAwMDAwMjAwMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRp
b24oMCwwLDAsMCwwLDAsMSwxMDAxLDEwMDEsMTAwMSlbbWV0aG9kXSgpLCAnUFQyLjAwMjAwMjAw
MVMnKTsKK30KKworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHt9KSwgcG9zLnRvU3RyaW5nKCkpOwor
CitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICdmb29iYXIn
IH0pLCBSYW5nZUVycm9yKTsKK2ZvciAoY29uc3QgdW5pdCBvZiBbJ3llYXInLCAnbW9udGgnLCAn
d2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUnXSkgeworICAgIHNob3VsZFRocm93KCgpID0+
IHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogdW5pdCB9KSwgUmFuZ2VFcnJvcik7CisgICAg
c2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiBgJHt1bml0fXNg
IH0pLCBSYW5nZUVycm9yKTsKK30KK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5p
dDogJ3NlY29uZHMnIH0pLCAnUDFZMk0zVzREVDVINk03UycpOworc2hvdWxkQmUocG9zLnRvU3Ry
aW5nKHsgc21hbGxlc3RVbml0OiAnbWlsbGlzZWNvbmRzJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4w
MDhTJyk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICdtaWNyb3NlY29u
ZHMnIH0pLCAnUDFZMk0zVzREVDVINk03LjAwODAwOVMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmlu
Zyh7IHNtYWxsZXN0VW5pdDogJ25hbm9zZWNvbmRzJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDgw
MDkwMTBTJyk7Citmb3IgKGNvbnN0IHVuaXQgb2YgWydzZWNvbmQnLCAnbWlsbGlzZWNvbmQnLCAn
bWljcm9zZWNvbmQnLCAnbmFub3NlY29uZCddKQorICAgIHNob3VsZEJlKHBvcy50b1N0cmluZyh7
IHNtYWxsZXN0VW5pdDogdW5pdCB9KSwgcG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiBgJHt1
bml0fXNgIH0pKTsKKworc2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25h
bFNlY29uZERpZ2l0czogLTEgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gcG9z
LnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMTAgfSksIFJhbmdlRXJyb3IpOwor
c2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czog
J2JvZ3VzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlv
bmFsU2Vjb25kRGlnaXRzOiAwIH0pLCAnUDFZMk0zVzREVDVINk03UycpOworY29uc3QgZGVjaW1h
bFBhcnQgPSAnMDA4MDA5MDEwJzsKK2ZvciAobGV0IGkgPSAxOyBpIDwgMTA7IGkrKykKKyAgICBz
aG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiBpIH0pLCBgUDFZ
Mk0zVzREVDVINk03LiR7ZGVjaW1hbFBhcnQuc2xpY2UoMCxpKX1TYCk7CitzaG91bGRCZShwb3Mu
dG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAnYXV0bycgfSksIHBvcy50b1N0cmlu
ZygpKTsKK3Nob3VsZEJlKHplcm8udG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAy
IH0pLCAnUFQwLjAwUycpOworCitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyByb3Vu
ZGluZ01vZGU6ICdib2d1cycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkQmUocG9zLnRvU3RyaW5n
KHsgcm91bmRpbmdNb2RlOiAndHJ1bmMnIH0pLCBwb3MudG9TdHJpbmcoKSk7CitzaG91bGRCZShw
b3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiA3LCByb3VuZGluZ01vZGU6ICdj
ZWlsJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDgwMDkxUycpOworc2hvdWxkQmUocG9zLnRvU3Ry
aW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMiwgcm91bmRpbmdNb2RlOiAnZmxvb3InIH0p
LCAnUDFZMk0zVzREVDVINk03LjAwUycpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rp
b25hbFNlY29uZERpZ2l0czogMiwgcm91bmRpbmdNb2RlOiAnaGFsZkV4cGFuZCcgfSksICdQMVky
TTNXNERUNUg2TTcuMDFTJyk7CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlw
ZS52YWx1ZU9mLmxlbmd0aCwgMCk7CitzaG91bGRUaHJvdygoKSA9PiBuZXcgVGVtcG9yYWwuRHVy
YXRpb24oKS52YWx1ZU9mKCksIFR5cGVFcnJvcik7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3Rlc3Qy
NjIvY29uZmlnLnlhbWwgYi9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwKaW5kZXggNjU3NmJh
MzIyOTFiNGFmOTgzMTJhNDE5NmU4Y2Y1OTE4NWZhMTlkOS4uMTA1ZmRmNDI1Mzk2NTM3Mjg1YTcx
NzgwMjUwOWY4ZGUyOTBmYWI2YyAxMDA2NDQKLS0tIGEvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55
YW1sCisrKyBiL0pTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbApAQCAtNiw2ICs2LDcgQEAgZmxh
Z3M6CiAgIEFycmF5LnByb3RvdHlwZS5hdDogdXNlQXRNZXRob2QKICAgVHlwZWRBcnJheS5wcm90
b3R5cGUuYXQ6IHVzZUF0TWV0aG9kCiAgIFN0cmluZy5wcm90b3R5cGUuYXQ6IHVzZUF0TWV0aG9k
CisgIFRlbXBvcmFsOiB1c2VUZW1wb3JhbAogICBhcnJheS1maW5kLWZyb20tbGFzdDogdXNlQXJy
YXlGaW5kTGFzdE1ldGhvZAogICBPYmplY3QuaGFzT3duOiB1c2VIYXNPd24KIHNraXA6CkBAIC0x
NSwxMiArMTYsMjEgQEAgc2tpcDoKICAgICAtIHJlZ2V4cC1sb29rYmVoaW5kCiAgICAgLSBjbGVh
bnVwU29tZQogICAgIC0gcmVzaXphYmxlLWFycmF5YnVmZmVyCi0gICAgLSBUZW1wb3JhbAogICAg
IC0gaW1wb3J0LWFzc2VydGlvbnMKICAgICAtIGpzb24tbW9kdWxlcwogICAgIC0gY2xhc3Mtc3Rh
dGljLWJsb2NrCiAgICAgLSBjYWxsYWJsZS1ib3VuZGFyeS1yZWFsbXMKICAgcGF0aHM6CisgICAg
LSB0ZXN0L2J1aWx0LWlucy9UZW1wb3JhbC9DYWxlbmRhcgorICAgIC0gdGVzdC9idWlsdC1pbnMv
VGVtcG9yYWwvSW5zdGFudAorICAgIC0gdGVzdC9idWlsdC1pbnMvVGVtcG9yYWwvTm93CisgICAg
LSB0ZXN0L2J1aWx0LWlucy9UZW1wb3JhbC9QbGFpbkRhdGUKKyAgICAtIHRlc3QvYnVpbHQtaW5z
L1RlbXBvcmFsL1BsYWluRGF0ZVRpbWUKKyAgICAtIHRlc3QvYnVpbHQtaW5zL1RlbXBvcmFsL1Bs
YWluTW9udGhEYXkKKyAgICAtIHRlc3QvYnVpbHQtaW5zL1RlbXBvcmFsL1BsYWluVGltZQorICAg
IC0gdGVzdC9idWlsdC1pbnMvVGVtcG9yYWwvUGxhaW5ZZWFyTW9udGgKKyAgICAtIHRlc3QvYnVp
bHQtaW5zL1RlbXBvcmFsL1RpbWVab25lCisgICAgLSB0ZXN0L2J1aWx0LWlucy9UZW1wb3JhbC9a
b25lZERhdGVUaW1lCiAgIGZpbGVzOgogICAgICMgaHR0cHM6Ly9naXRodWIuY29tL2NsYXVkZXBh
Y2hlL2VzLWxlZ2FjeS1mdW5jdGlvbi1yZWZsZWN0aW9uCiAgICAgLSB0ZXN0L2J1aWx0LWlucy9U
aHJvd1R5cGVFcnJvci91bmlxdWUtcGVyLXJlYWxtLWZ1bmN0aW9uLXByb3RvLmpzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436988</attachid>
            <date>2021-08-31 19:57:00 -0700</date>
            <delta_ts>2021-08-31 21:34:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228532-20210831195659.patch</filename>
            <type>text/plain</type>
            <size>125235</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxODM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ZGNlZGNkNDg1N2I3OTEwNzIwYWJmMzk5MzVjMWM1MGI4ZWIyZTg1Li4yZTg2NTEwNTU0ZDYwNDE3
MDcwYWRiMjhhNmIxNzIxMjNlYjVlOWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NCBAQAorMjAyMS0wOC0zMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1w
bGVtZW50cyB0aGUgRHVyYXRpb24gY2xhc3MgZm9yIHRoZSB1cGNvbWluZyBUZW1wb3JhbCBBUEkg
KGN1cnJlbnRseSBhdCBzdGFnZSAzIGluIFRDMzkpLgorICAgICAgICBTcGVjOiBodHRwczovL3Rj
MzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC1kdXJhdGlvbi1vYmplY3RzCisg
ICAgICAgIERvY3M6IGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC9kb2NzL2R1cmF0
aW9uLmh0bWwKKworICAgICAgICBBIER1cmF0aW9uIGlzIHVsdGltYXRlbHkgYW4gYXJyYXkgb2Yg
ZG91YmxlcyAoeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNv
bmRzLCBtcywgzrxzLCBucykKKyAgICAgICAgd2hpY2ggY2FuIGJlIGNvbnZlcnRlZCB0byBhbmQg
ZnJvbSBhbiBJU08gc3RyaW5nIHJlcHJlc2VudGF0aW9uIChlLmcuICItUDFZMk0zVzREVDVINk03
LjEyMzQ1Njc4OVMiKQorICAgICAgICBhbmQgd2hpY2ggc3VwcG9ydHMgdmFyaW91cyBjYWxjdWxh
dGlvbnMuCisKKyAgICAgICAgVGhlIHNwZWMgaXMgc3RpbGwgaW4gZmx1eCBhbmQgY2VydGFpbiBp
c3N1ZXMgd2VyZSBpZGVudGlmaWVkIGluIHRoZSBjb3Vyc2Ugb2YgcHJlcGFyaW5nIHRoaXMgcGF0
Y2guCisgICAgICAgIFRoaXMgY29kZSBhaW1zIHRvIGJlICJhcyBjb3JyZWN0IGFzIHBvc3NpYmxl
IiBmb3IgdGhlIG1vbWVudDsgc21hbGwgY29ycmVjdGlvbnMgYXJlIGV4cGVjdGVkIGluIHRoZSBu
ZWFyIGZ1dHVyZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGltZS9JU084NjAxLmNwcDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9JU084NjAxLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6ZHVyYXRpb25TdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJh
dGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHA6
IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmg6
IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHA6
IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlRHVyYXRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OnNpbmd1bGFyVW5p
dCk6CisgICAgICAgIChKU0M6OnRlbXBvcmFsVW5pdFR5cGUpOgorICAgICAgICAoSlNDOjp0ZW1w
b3JhbExhcmdlc3RVbml0KToKKyAgICAgICAgKEpTQzo6dGVtcG9yYWxTbWFsbGVzdFVuaXQpOgor
ICAgICAgICAoSlNDOjp0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmREaWdpdHMpOgorICAgICAgICAo
SlNDOjpzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKToKKyAgICAgICAgKEpTQzo6bWF4aW11bVJvdW5k
aW5nSW5jcmVtZW50KToKKyAgICAgICAgKEpTQzo6dGVtcG9yYWxSb3VuZGluZ0luY3JlbWVudCk6
CisgICAgICAgIChKU0M6OnJvdW5kTnVtYmVyVG9JbmNyZW1lbnQpOgorICAgICAgICAqIHJ1bnRp
bWUvVGVtcG9yYWxPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAg
KiBydW50aW1lL1ZNLmg6CisKIDIwMjEtMDgtMzEgIExhdXJvIE1vdXJhICA8bG1vdXJhQGlnYWxp
YS5jb20+CiAKICAgICAgICAgTm9uLXVuaWZpZWQgYnVpbGQgcGFydGlhbCBmaXhlcywgbGF0ZSBs
YXRlIEF1Z3VzdCAyMDIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMzRl
NWI4ZjNkODc2ZTgzNmE4OTYyNmI2NzU2YjQ2MGY4M2IxYzYyZS4uNTE2MzQ3ZDgzOGI5NDEyZmM4
ZDk0MzlkZDI1OWNlZWEzYjRiNzg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dApAQCAtMTA5LDYgKzEwOSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9PQkpFQ1RfTFVUX1NPVVJD
RVMKICAgICBydW50aW1lL1N5bWJvbFByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL1RlbXBvcmFs
Q2FsZW5kYXJDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL1RlbXBvcmFsQ2FsZW5kYXJQcm90
b3R5cGUuY3BwCisgICAgcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCisg
ICAgcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvVGVt
cG9yYWxPYmplY3QuY3BwCiAKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGM4MmNmMjYxYmFhMDMzOWNl
YzJkNDkzZTRlZGRhMjdjMDUwN2MwNDAuLmJhMzc2OTc3NzRlNTA4Mzg2NzE2YThlMDg4OGY1MWJl
ZmJkMjZkZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC0xOTMsNiArMTkzLDggQEAgT0JKRUNUX0xVVF9IRUFERVJTID0gXAogICAgIFN5bWJvbFByb3Rv
dHlwZS5sdXQuaCBcCiAgICAgVGVtcG9yYWxDYWxlbmRhckNvbnN0cnVjdG9yLmx1dC5oIFwKICAg
ICBUZW1wb3JhbENhbGVuZGFyUHJvdG90eXBlLmx1dC5oIFwKKyAgICBUZW1wb3JhbER1cmF0aW9u
Q29uc3RydWN0b3IubHV0LmggXAorICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUubHV0Lmgg
XAogICAgIFRlbXBvcmFsT2JqZWN0Lmx1dC5oIFwKICAgICBXZWJBc3NlbWJseUNvbXBpbGVFcnJv
ckNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlw
ZS5sdXQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDIzY2JiMjk4Y2ViNjRi
NzhjNjAxODFjMmU0ZmVkYjlmMzk4NzFhZWMuLjk2ZTIyZDNkZTQxNjIzZTRmMThlMjUyMTk1YTE1
NmY4MDc2MWZjY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDEzLDkgKzE0
MTMsMTMgQEAKIAkJQTFENzkzMDExQjQzODY0QjAwNDUxNkY1IC8qIEludGxOdW1iZXJGb3JtYXRQ
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEExRDc5MkZCMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmgg
Ki87IH07CiAJCUEzMjFBQTZEMjYyNjM1OUIwMDIzQURBMiAvKiBJbnRsV29ya2Fyb3VuZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTMyMUFBNkMyNjI2
MzU5QjAwMjNBREEyIC8qIEludGxXb3JrYXJvdW5kLmggKi87IH07CiAJCUEzODJDNTMxMjY2NzEx
MUQwMDQyQ0Q5OSAvKiBJbkJ5VmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTMzMDVGQjEyMEIwRjc4ODAwQ0VCODJCIC8qIEluQnlWYXJpYW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTM4
Q0E1OUUyNkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzOENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084
NjAxLmggKi87IH07CiAJCUEzOEQyNTBFMjU4MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVy
UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTM4RDI1MEQyNTgwMEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGVJbmxpbmVzLmggKi87IH07CiAJCUEzOEQ1QkZDMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3Rh
dHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhE
NUJGQTI2NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAv
KiBJbnRsV29ya2Fyb3VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMzc2MTk0MDI2MjUxMjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3Bw
ICovOyB9OworCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAq
LzsgfTsKKwkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZC
MERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CisJCUEzQzdFREJBMjZC
MERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRD
MzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJQTNGRjlCQzcy
MjM0NzQ5MTAwQjFBOUFCIC8qIFlhcnJGbGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTNGRjlCQzUyMjM0NzQ2NjAwQjFBOUFCIC8qIFlhcnJGbGFn
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1
MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTAzRkExNDE4OEUwRkFGMDAx
MTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oICovOyB9OwogCQlBNTAzRkExRTE4OEUwRkIw
MDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTAzRkExODE4OEUwRkIwMDAxMTBG
MTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmggKi87IH07CkBAIC00NDYxLDYg
KzQ0NjUsOCBAQAogCQlBMjc5NThEN0ZBMTE0MkIwQUM5RTM2NEQgLyogV2FzbUNvbnRleHRJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21Db250ZXh0SW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMzIxQUE2QzI2MjYzNTlCMDAyM0FE
QTIgLyogSW50bFdvcmthcm91bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW50bFdvcmthcm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTM3NjE5NDAy
NjI1MTI3QzAwQ0JDQkE5IC8qIEludGxXb3JrYXJvdW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEludGxXb3JrYXJvdW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTM4Q0E1OUIyNkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSVNPODYwMS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEzOENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElTTzg2MDEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTM4RDI1MEQyNTgwMEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
QXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUEzOEQ1QkY5MjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluQnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBMzhENUJGQTI2NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbkJ5U3RhdHVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDc2LDYgKzQ0ODIsMTIgQEAKIAkJQTNCRjg4NEUyNDQ4
MEJFMDAwMUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3Ry
dWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNCRjg4NEYyNDQ4MEJFMDAw
MUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUEzQkY4ODUwMjQ0ODBCRTEwMDFCOUYzNSAvKiBJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGxSZWxh
dGl2ZVRpbWVGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjAy
NkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMTI2QjBEQjM2MDA0QzM0QzUgLyogVGVt
cG9yYWxEdXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
ZW1wb3JhbER1cmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VE
QjIyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uQ29uc3Ry
dWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMzI2QjBEQjM3
MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcG9yYWxEdXJhdGlvbkNvbnN0
cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREI1MjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0ZGOUJDNTIyMzQ3NDY2MDBCMUE5QUIgLyogWWFy
ckZsYWdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJGbGFncy5oOyBw
YXRoID0geWFyci9ZYXJyRmxhZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNG
RjlCQzYyMjM0NzQ2NjAwQjFBOUFCIC8qIFlhcnJGbGFncy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBZYXJyRmxhZ3MuY3BwOyBwYXRoID0geWFyci9ZYXJyRmxhZ3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTAzRkExMzE4OEUwRkFGMDAxMTBG
MTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTc1NzYsNiArNzU4OCw4IEBACiAJCQkJQTMyMUFBNkMyNjI2MzU5QjAwMjNBREEy
IC8qIEludGxXb3JrYXJvdW5kLmggKi8sCiAJCQkJMEYyNzVGMkMxRUNFMDc5NjAwNjIwRDQ3IC8q
IEludHJpbnNpYy5jcHAgKi8sCiAJCQkJODZCRjY0MkExNDhEQjJCNTAwNERFMzZBIC8qIEludHJp
bnNpYy5oICovLAorCQkJCUEzOENBNTlCMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmNwcCAq
LywKKwkJCQlBMzhDQTU5QzI2REQ4NERFMDBDOEQ4NEMgLyogSVNPODYwMS5oICovLAogCQkJCThC
OUY2RDU1MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggKi8sCiAJCQkJRkU0RDU1
QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovLAogCQkJCTcwMTEzRDQ5
MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLApAQCAtNzk3NCw2
ICs3OTg4LDEyIEBACiAJCQkJRTMyRDRERTQyNkRBRkQ0MzAwRDQ1MzNBIC8qIFRlbXBvcmFsQ2Fs
ZW5kYXJDb25zdHJ1Y3Rvci5oICovLAogCQkJCUUzMkQ0REUyMjZEQUZENDIwMEQ0NTMzQSAvKiBU
ZW1wb3JhbENhbGVuZGFyUHJvdG90eXBlLmNwcCAqLywKIAkJCQlFMzJENERFMTI2REFGRDQyMDBE
NDUzM0EgLyogVGVtcG9yYWxDYWxlbmRhclByb3RvdHlwZS5oICovLAorCQkJCUEzQzdFREIxMjZC
MERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNwcCAqLywKKwkJCQlBM0M3RURCMzI2
QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovLAorCQkJCUEzQzdFREIyMjZC
MERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJ
CUEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iu
aCAqLywKKwkJCQlBM0M3RURCNTI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZS5jcHAgKi8sCisJCQkJQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGUuaCAqLywKIAkJCQlGNkYxNTAxQjI2OTNEMzNFMDA0Qjk4RUYgLyog
VGVtcG9yYWxOb3cuY3BwICovLAogCQkJCUY2RjE1MDE4MjY5M0QzM0QwMDRCOThFRiAvKiBUZW1w
b3JhbE5vdy5oICovLAogCQkJCUY2RjE1MDE5MjY5M0QzM0UwMDRCOThFRiAvKiBUZW1wb3JhbE9i
amVjdC5jcHAgKi8sCkBAIC0xMDA5NCw2ICsxMDExNCw3IEBACiAJCQkJQTMyMUFBNkQyNjI2MzU5
QjAwMjNBREEyIC8qIEludGxXb3JrYXJvdW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgw
MTE0OEVBNkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzRF
MDM1NDFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTM4Q0E1OUUyNkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRENFMTMyMUZCMTFEQTQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI0Njc4MDFGRERBNkYxMDAzRkNC
MDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNDY3ODExRkREQTZGNzAw
M0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNjc1LDYg
KzEwNjk2LDkgQEAKIAkJCQlFMzlEQTFEQjI2REI1RTUxMDAxMDA0MzcgLyogVGVtcG9yYWxDYWxl
bmRhckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyRDRERTcyNkRBRkQ0
MzAwRDQ1MzNBIC8qIFRlbXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzOURBMURBMjZEQjVFNEMwMDEwMDQzNyAvKiBUZW1wb3JhbENhbGVuZGFyUHJvdG90eXBl
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRl
bXBvcmFsRHVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREJBMjZCMERCMzgwMDRD
MzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEzQzdFREI2MjZCMERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGNkYxNTAyMTI2OTNENDUwMDA0Qjk4RUYgLyogVGVtcG9yYWxP
YmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIyMTcg
LyogVGVtcFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ0QTdCNDIwQkY2OEQ5
MDAyMkIxNzEgLyogVGVybWluYXRlZENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDBhY2E4MWFiMDdmMzk0OTVjMDE4NjE3ZGUzNzUxYWQz
ZWM1NzkzZGEuLjZiNjg1ZWE0NGM1OTBkYmVkNjI0NWQxYzJlM2ZhYmYzZmI0NjVmYWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTg1Myw2ICs4NTMsNyBAQCBydW50aW1lL0ludGxT
ZWdtZW50ZXJQcm90b3R5cGUuY3BwCiBydW50aW1lL0ludGxTZWdtZW50cy5jcHAKIHJ1bnRpbWUv
SW50bFNlZ21lbnRzUHJvdG90eXBlLmNwcAogcnVudGltZS9JbnRsV29ya2Fyb3VuZC5jcHAgQG5v
LXVuaWZ5IC8vIENvbmZpbmUgVV9ISURFX0RSQUZUX0FQSSdzIGVmZmVjdCB0byB0aGlzIGZpbGUu
CitydW50aW1lL0lTTzg2MDEuY3BwCiBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAKIHJ1
bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuY3BwCiBydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0xMDEz
LDYgKzEwMTQsOSBAQCBydW50aW1lL1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5jcHAKIHJ1bnRp
bWUvVGVtcG9yYWxDYWxlbmRhci5jcHAKIHJ1bnRpbWUvVGVtcG9yYWxDYWxlbmRhckNvbnN0cnVj
dG9yLmNwcAogcnVudGltZS9UZW1wb3JhbENhbGVuZGFyUHJvdG90eXBlLmNwcAorcnVudGltZS9U
ZW1wb3JhbER1cmF0aW9uLmNwcAorcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iu
Y3BwCitydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCiBydW50aW1lL1RlbXBv
cmFsTm93LmNwcAogcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAKIHJ1bnRpbWUvVGVzdFJ1bm5l
clV0aWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uSWRlbnRpZmllcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklk
ZW50aWZpZXJzLmgKaW5kZXggNjY2NmFkNTFjMzYyMDIyMTllMGIyYzgzYThiNTE4ODAwOTRmMWYx
Yi4uNzE0YWEyZmViMjI0ZmE1OGYyN2VkNTU1MWI2N2M5ZjMyNjVjYmQyNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC05OSw2
ICs5OSw3IEBACiAgICAgbWFjcm8oY291bnRlcnMpIFwKICAgICBtYWNybyhkYXRlU3R5bGUpIFwK
ICAgICBtYWNybyhkYXkpIFwKKyAgICBtYWNybyhkYXlzKSBcCiAgICAgbWFjcm8oZGF5UGVyaW9k
KSBcCiAgICAgbWFjcm8oZGVmaW5lUHJvcGVydHkpIFwKICAgICBtYWNybyhkZXJlZikgXApAQCAt
MTM4LDYgKzEzOSw3IEBACiAgICAgbWFjcm8oaGFzaCkgXAogICAgIG1hY3JvKGhlYWRlcikgXAog
ICAgIG1hY3JvKGhvdXIpIFwKKyAgICBtYWNybyhob3VycykgXAogICAgIG1hY3JvKGhvdXJDeWNs
ZSkgXAogICAgIG1hY3JvKGhvdXIxMikgXAogICAgIG1hY3JvKGlkKSBcCkBAIC0xNTgsNiArMTYw
LDcgQEAKICAgICBtYWNybyhqb2luKSBcCiAgICAgbWFjcm8obGFuZ3VhZ2UpIFwKICAgICBtYWNy
byhsYW5ndWFnZURpc3BsYXkpIFwKKyAgICBtYWNybyhsYXJnZXN0VW5pdCkgXAogICAgIG1hY3Jv
KGxhc3RJbmRleCkgXAogICAgIG1hY3JvKGxlbmd0aCkgXAogICAgIG1hY3JvKGxpbmUpIFwKQEAg
LTE2NiwxNCArMTY5LDE5IEBACiAgICAgbWFjcm8obWF4aW11bUZyYWN0aW9uRGlnaXRzKSBcCiAg
ICAgbWFjcm8obWF4aW11bVNpZ25pZmljYW50RGlnaXRzKSBcCiAgICAgbWFjcm8obWVzc2FnZSkg
XAorICAgIG1hY3JvKG1pY3Jvc2Vjb25kcykgXAorICAgIG1hY3JvKG1pbGxpc2Vjb25kcykgXAog
ICAgIG1hY3JvKG1pbmltdW1GcmFjdGlvbkRpZ2l0cykgXAogICAgIG1hY3JvKG1pbmltdW1JbnRl
Z2VyRGlnaXRzKSBcCiAgICAgbWFjcm8obWluaW11bVNpZ25pZmljYW50RGlnaXRzKSBcCiAgICAg
bWFjcm8obWludXRlKSBcCisgICAgbWFjcm8obWludXRlcykgXAogICAgIG1hY3JvKG1vbnRoKSBc
CiAgICAgbWFjcm8obW9udGhDb2RlKSBcCisgICAgbWFjcm8obW9udGhzKSBcCiAgICAgbWFjcm8o
bXVsdGlsaW5lKSBcCiAgICAgbWFjcm8obmFtZSkgXAorICAgIG1hY3JvKG5hbm9zZWNvbmRzKSBc
CiAgICAgbWFjcm8obmV4dCkgXAogICAgIG1hY3JvKG5vdykgXAogICAgIG1hY3JvKG51bUlubGlu
ZWRDYWxscykgXApAQCAtMTk2LDEzICsyMDQsMTcgQEAKICAgICBtYWNybyhyZWdpb24pIFwKICAg
ICBtYWNybyhyZXBsYWNlKSBcCiAgICAgbWFjcm8ocmVzb2x2ZSkgXAorICAgIG1hY3JvKHJvdW5k
aW5nSW5jcmVtZW50KSBcCisgICAgbWFjcm8ocm91bmRpbmdNb2RlKSBcCiAgICAgbWFjcm8oc2Ny
aXB0KSBcCiAgICAgbWFjcm8oc2Vjb25kKSBcCisgICAgbWFjcm8oc2Vjb25kcykgXAogICAgIG1h
Y3JvKHNlZ21lbnQpIFwKICAgICBtYWNybyhzZW5zaXRpdml0eSkgXAogICAgIG1hY3JvKHNldCkg
XAogICAgIG1hY3JvKHNpemUpIFwKICAgICBtYWNybyhzbGljZSkgXAorICAgIG1hY3JvKHNtYWxs
ZXN0VW5pdCkgXAogICAgIG1hY3JvKHNvdXJjZSkgXAogICAgIG1hY3JvKHNvdXJjZUNvZGUpIFwK
ICAgICBtYWNybyhzb3VyY2VVUkwpIFwKQEAgLTIyOSwxMiArMjQxLDE1IEBACiAgICAgbWFjcm8o
dHlwZSkgXAogICAgIG1hY3JvKHVpZCkgXAogICAgIG1hY3JvKHVuaWNvZGUpIFwKKyAgICBtYWNy
byh1bml0KSBcCiAgICAgbWFjcm8odXNhZ2UpIFwKICAgICBtYWNybyh2YWx1ZSkgXAogICAgIG1h
Y3JvKHZhbHVlT2YpIFwKICAgICBtYWNybyh3ZWVrZGF5KSBcCisgICAgbWFjcm8od2Vla3MpIFwK
ICAgICBtYWNybyh3cml0YWJsZSkgXAotICAgIG1hY3JvKHllYXIpCisgICAgbWFjcm8oeWVhcikg
XAorICAgIG1hY3JvKHllYXJzKQogCiAjZGVmaW5lIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFD
SF9QUklWQVRFX0ZJRUxEKG1hY3JvKSBcCiAgICAgbWFjcm8oY29uc3RydWN0b3IpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JU084NjAxLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0lTTzg2MDEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1YmQzNGQwZDBk
OGJhZDdjMTQwYzI4MzhkZTQ2NmY4OWI5Mzc3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JU084NjAxLmNwcApAQCAtMCwwICsxLDIzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSVNPODYwMS5oIgor
CisjaW5jbHVkZSAiUGFyc2VJbnQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5n
QnVmZmVyLmg+CisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIElTTzg2MDEgeworCisvLyBE
dXJhdGlvbkhhbmRsZUZyYWN0aW9ucyAoIGZIb3VycywgbWludXRlcywgZk1pbnV0ZXMsIHNlY29u
ZHMsIGZTZWNvbmRzLCBtaWxsaXNlY29uZHMsIGZNaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywg
Zk1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIGZOYW5vc2Vjb25kcyApCisvLyBodHRwczovL3Rj
MzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC1kdXJhdGlvbmhhbmRsZWZyYWN0
aW9ucworc3RhdGljIHZvaWQgaGFuZGxlRnJhY3Rpb24oRHVyYXRpb24mIGR1cmF0aW9uLCBpbnQg
ZmFjdG9yLCBTdHJpbmdWaWV3IGZyYWN0aW9uU3RyaW5nLCBUZW1wb3JhbFVuaXQgZnJhY3Rpb25U
eXBlKQoreworICAgIEFTU0VSVChmcmFjdGlvblN0cmluZy5sZW5ndGgoKSAmJiBmcmFjdGlvblN0
cmluZy5sZW5ndGgoKSA8PSA5ICYmIGZyYWN0aW9uU3RyaW5nLmlzQWxsQVNDSUkoKSk7CisgICAg
QVNTRVJUKGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6OkhvdXIgfHwgZnJhY3Rpb25UeXBl
ID09IFRlbXBvcmFsVW5pdDo6TWludXRlIHx8IGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6
OlNlY29uZCk7CisKKyAgICBpZiAoZnJhY3Rpb25UeXBlID09IFRlbXBvcmFsVW5pdDo6U2Vjb25k
KSB7CisgICAgICAgIFZlY3RvcjxMQ2hhciwgOT4gcGFkZGVkKDksICcwJyk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFjdGlvblN0cmluZy5sZW5ndGgoKTsgaSsrKQorICAg
ICAgICAgICAgcGFkZGVkW2ldID0gZnJhY3Rpb25TdHJpbmdbaV07CisgICAgICAgIGR1cmF0aW9u
LnNldE1pbGxpc2Vjb25kcyhmYWN0b3IgKiBwYXJzZUludCh7IHBhZGRlZC5kYXRhKCksIDMgfSwg
MTApKTsKKyAgICAgICAgZHVyYXRpb24uc2V0TWljcm9zZWNvbmRzKGZhY3RvciAqIHBhcnNlSW50
KHsgJnBhZGRlZC5kYXRhKClbM10sIDMgfSwgMTApKTsKKyAgICAgICAgZHVyYXRpb24uc2V0TmFu
b3NlY29uZHMoZmFjdG9yICogcGFyc2VJbnQoeyAmcGFkZGVkLmRhdGEoKVs2XSwgMyB9LCAxMCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZG91YmxlIGZyYWN0aW9uID0gZmFjdG9y
ICogcGFyc2VJbnQoZnJhY3Rpb25TdHJpbmcsIDEwKSAvIHN0ZDo6cG93KDEwLCBmcmFjdGlvblN0
cmluZy5sZW5ndGgoKSk7CisgICAgaWYgKCFmcmFjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6OkhvdXIpIHsKKyAgICAgICAgZnJh
Y3Rpb24gKj0gNjA7CisgICAgICAgIGR1cmF0aW9uLnNldE1pbnV0ZXMoc3RkOjp0cnVuYyhmcmFj
dGlvbikpOworICAgICAgICBmcmFjdGlvbiA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMSk7CisgICAg
ICAgIGlmICghZnJhY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnJh
Y3Rpb24gKj0gNjA7CisgICAgZHVyYXRpb24uc2V0U2Vjb25kcyhzdGQ6OnRydW5jKGZyYWN0aW9u
KSk7CisgICAgZnJhY3Rpb24gPSBzdGQ6OmZtb2QoZnJhY3Rpb24sIDEpOworICAgIGlmICghZnJh
Y3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGZyYWN0aW9uICo9IDEwMDA7CisgICAgZHVy
YXRpb24uc2V0TWlsbGlzZWNvbmRzKHN0ZDo6dHJ1bmMoZnJhY3Rpb24pKTsKKyAgICBmcmFjdGlv
biA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMSk7CisgICAgaWYgKCFmcmFjdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgZnJhY3Rpb24gKj0gMTAwMDsKKyAgICBkdXJhdGlvbi5zZXRNaWNyb3Nl
Y29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgIGZyYWN0aW9uID0gc3RkOjpmbW9kKGZy
YWN0aW9uLCAxKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBk
dXJhdGlvbi5zZXROYW5vc2Vjb25kcyhzdGQ6OnRydW5jKGZyYWN0aW9uICogMTAwMCkpOworfQor
CisvLyBQYXJzZVRlbXBvcmFsRHVyYXRpb25TdHJpbmcgKCBpc29TdHJpbmcgKQorLy8gaHR0cHM6
Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtcGFyc2V0ZW1wb3JhbGR1
cmF0aW9uc3RyaW5nCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIHN0
ZDo6b3B0aW9uYWw8RHVyYXRpb24+IHBhcnNlRHVyYXRpb24oU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQoreworICAgIC8vIElTTyA4NjAxIGR1cmF0aW9uIHN0cmlu
Z3MgYXJlIGxpa2UgIi1QMVkyTTNXNERUNUg2TTcuMTIzNDU2Nzg5UyIuIE5vdGVzOgorICAgIC8v
IC0gY2FzZSBpbnNlbnNpdGl2ZQorICAgIC8vIC0gc2lnbjogKyAtIOKIkihVKzIyMTIpCisgICAg
Ly8gLSBzZXBhcmF0b3I6IC4gLAorICAgIC8vIC0gVCBpcyBwcmVzZW50IGlmZiB0aGVyZSBpcyBh
IHRpbWUgcGFydAorICAgIC8vIC0gaW50ZWdyYWwgcGFydHMgY2FuIGhhdmUgYW55IG51bWJlciBv
ZiBkaWdpdHMgYnV0IGZyYWN0aW9uYWwgcGFydHMgaGF2ZSBhdCBtb3N0IDkKKyAgICAvLyAtIGhv
dXJzIGFuZCBtaW51dGVzIGNhbiBoYXZlIGZyYWN0aW9uYWwgcGFydHMgdG9vLCBidXQgb25seSBh
cyB0aGUgTEFTVCBwYXJ0IG9mIHRoZSBzdHJpbmcKKyAgICBpZiAoYnVmZmVyLmxlbmd0aFJlbWFp
bmluZygpIDwgMykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIER1cmF0aW9u
IHJlc3VsdDsKKworICAgIGludCBmYWN0b3IgPSAxOworICAgIGlmICgqYnVmZmVyID09ICcrJykK
KyAgICAgICAgYnVmZmVyLmFkdmFuY2UoKTsKKyAgICBlbHNlIGlmICgqYnVmZmVyID09ICctJyB8
fCAqYnVmZmVyID09IDB4MjIxMikgeworICAgICAgICBmYWN0b3IgPSAtMTsKKyAgICAgICAgYnVm
ZmVyLmFkdmFuY2UoKTsKKyAgICB9CisKKyAgICBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpICE9
ICdQJykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGJ1ZmZlci5hZHZhbmNl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBkYXRlUGFydEluZGV4ID0gMDsgZGF0ZVBhcnRJbmRleCA8
IDQgJiYgYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoKmJ1
ZmZlcik7IGJ1ZmZlci5hZHZhbmNlKCkpIHsKKyAgICAgICAgdW5zaWduZWQgZGlnaXRzID0gMTsK
KyAgICAgICAgd2hpbGUgKGRpZ2l0cyA8IGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSAmJiBpc0FT
Q0lJRGlnaXQoYnVmZmVyW2RpZ2l0c10pKQorICAgICAgICAgICAgZGlnaXRzKys7CisKKyAgICAg
ICAgZG91YmxlIGludGVnZXIgPSBmYWN0b3IgKiBwYXJzZUludCh7IGJ1ZmZlci5wb3NpdGlvbigp
LCBkaWdpdHMgfSwgMTApOworICAgICAgICBidWZmZXIuYWR2YW5jZUJ5KGRpZ2l0cyk7CisgICAg
ICAgIGlmIChidWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICAgICAgc3dpdGNoICh0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikpIHsKKyAgICAgICAgY2Fz
ZSAnWSc6CisgICAgICAgICAgICBpZiAoZGF0ZVBhcnRJbmRleCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmVzdWx0LnNldFllYXJzKGludGVnZXIp
OworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnTSc6CisgICAgICAgICAgICBpZiAoZGF0ZVBhcnRJbmRleCA+PSAyKQorICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICByZXN1bHQuc2V0
TW9udGhzKGludGVnZXIpOworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVyc6CisgICAgICAgICAgICBpZiAoZGF0ZVBhcnRJ
bmRleCA+PSAzKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAg
ICAgICByZXN1bHQuc2V0V2Vla3MoaW50ZWdlcik7CisgICAgICAgICAgICBkYXRlUGFydEluZGV4
ID0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdEJzoKKyAgICAgICAgICAg
IHJlc3VsdC5zZXREYXlzKGludGVnZXIpOworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnVmZmVyLmF0RW5k
KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAoYnVmZmVyLmxlbmd0aFJlbWFp
bmluZygpIDwgMyB8fCB0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgIT0gJ1QnKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgYnVmZmVyLmFkdmFuY2UoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIHRpbWVQYXJ0SW5kZXggPSAwOyB0aW1lUGFydEluZGV4IDwgMyAmJiBidWZmZXIuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgqYnVmZmVyKTsgYnVmZmVyLmFkdmFu
Y2UoKSkgeworICAgICAgICB1bnNpZ25lZCBkaWdpdHMgPSAxOworICAgICAgICB3aGlsZSAoZGln
aXRzIDwgYnVmZmVyLmxlbmd0aFJlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdChidWZmZXJbZGln
aXRzXSkpCisgICAgICAgICAgICBkaWdpdHMrKzsKKworICAgICAgICBkb3VibGUgaW50ZWdlciA9
IGZhY3RvciAqIHBhcnNlSW50KHsgYnVmZmVyLnBvc2l0aW9uKCksIGRpZ2l0cyB9LCAxMCk7Cisg
ICAgICAgIGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRzKTsKKyAgICAgICAgaWYgKGJ1ZmZlci5hdEVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBTdHJpbmdW
aWV3IGZyYWN0aW9uYWxQYXJ0OworICAgICAgICBpZiAoKmJ1ZmZlciA9PSAnLicgfHwgKmJ1ZmZl
ciA9PSAnLCcpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hZHZhbmNlKCk7CisgICAgICAgICAgICBk
aWdpdHMgPSAwOworICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cyA8IGJ1ZmZlci5sZW5ndGhSZW1h
aW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoYnVmZmVyW2RpZ2l0c10pKQorICAgICAgICAgICAgICAg
IGRpZ2l0cysrOworICAgICAgICAgICAgaWYgKCFkaWdpdHMgfHwgZGlnaXRzID4gOSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgICAgICBmcmFjdGlvbmFs
UGFydCA9IHsgYnVmZmVyLnBvc2l0aW9uKCksIGRpZ2l0cyB9OworICAgICAgICAgICAgYnVmZmVy
LmFkdmFuY2VCeShkaWdpdHMpOworICAgICAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICBz
d2l0Y2ggKHRvQVNDSUlVcHBlcigqYnVmZmVyKSkgeworICAgICAgICBjYXNlICdIJzoKKyAgICAg
ICAgICAgIGlmICh0aW1lUGFydEluZGV4KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgICAgICAgICByZXN1bHQuc2V0SG91cnMoaW50ZWdlcik7CisgICAgICAgICAg
ICBpZiAoZnJhY3Rpb25hbFBhcnQpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVGcmFjdGlvbihy
ZXN1bHQsIGZhY3RvciwgZnJhY3Rpb25hbFBhcnQsIFRlbXBvcmFsVW5pdDo6SG91cik7CisgICAg
ICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9IDM7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICB0aW1lUGFydEluZGV4ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICdNJzoKKyAgICAgICAgICAgIGlmICh0aW1lUGFydEluZGV4ID49IDIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRNaW51
dGVzKGludGVnZXIpOworICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxQYXJ0KSB7CisgICAgICAg
ICAgICAgICAgaGFuZGxlRnJhY3Rpb24ocmVzdWx0LCBmYWN0b3IsIGZyYWN0aW9uYWxQYXJ0LCBU
ZW1wb3JhbFVuaXQ6Ok1pbnV0ZSk7CisgICAgICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9IDM7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB0aW1lUGFydEluZGV4ID0gMjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdTJzoKKyAgICAgICAgICAgIHJlc3Vs
dC5zZXRTZWNvbmRzKGludGVnZXIpOworICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxQYXJ0KQor
ICAgICAgICAgICAgICAgIGhhbmRsZUZyYWN0aW9uKHJlc3VsdCwgZmFjdG9yLCBmcmFjdGlvbmFs
UGFydCwgVGVtcG9yYWxVbml0OjpTZWNvbmQpOworICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9
IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnVmZmVyLmhh
c0NoYXJhY3RlcnNSZW1haW5pbmcoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8RHVyYXRpb24+IHBhcnNlRHVy
YXRpb24oU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9y
UGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gYnVmZmVyKSAtPiBzdGQ6Om9wdGlvbmFsPER1cmF0aW9u
PiB7CisgICAgICAgIHJldHVybiBwYXJzZUR1cmF0aW9uKGJ1ZmZlcik7CisgICAgfSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIElTTzg2MDEKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSVNPODYwMS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSVNPODYwMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzNjBmNWJiM2VkMzExY2ZkNDI5
MGRjYWRjMDc0NjUxNmUyOWNiN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JU084NjAxLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlbXBvcmFsT2JqZWN0LmgiCisKK25hbWVzcGFj
ZSBKU0MgeworbmFtZXNwYWNlIElTTzg2MDEgeworCitzdHJ1Y3QgRHVyYXRpb24geworICAgIHVz
aW5nIGNvbnN0X2l0ZXJhdG9yID0gc3RkOjphcnJheTxkb3VibGUsIG51bWJlck9mVGVtcG9yYWxV
bml0cz46OmNvbnN0X2l0ZXJhdG9yOworCisjZGVmaW5lIEpTQ19ERUZJTkVfU1VCRFVSQVRJT05f
RklFTEQobmFtZSwgY2FwaXRhbGl6ZWROYW1lKSBcCisgICAgZG91YmxlIG5hbWUjI3MoKSBjb25z
dCB7IHJldHVybiBkYXRhW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KFRlbXBvcmFsVW5pdDo6Y2FwaXRh
bGl6ZWROYW1lKV07IH0gXAorICAgIHZvaWQgc2V0IyNjYXBpdGFsaXplZE5hbWUjI3MoZG91Ymxl
IHZhbHVlKSB7IGRhdGFbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0OjpjYXBpdGFs
aXplZE5hbWUpXSA9IHZhbHVlOyB9CisgICAgSlNDX1RFTVBPUkFMX1VOSVRTKEpTQ19ERUZJTkVf
U1VCRFVSQVRJT05fRklFTEQpOworI3VuZGVmIEpTQ19ERUZJTkVfU1VCRFVSQVRJT05fRklFTEQK
KworICAgIGRvdWJsZSYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gZGF0YVtpXTsgfQor
ICAgIGNvbnN0IGRvdWJsZSYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gZGF0
YVtpXTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gZGF0YS5i
ZWdpbigpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gZGF0YS5l
bmQoKTsgfQorICAgIHZvaWQgY2xlYXIoKSB7IGRhdGEuZmlsbCgwKTsgfQorCisgICAgc3RkOjph
cnJheTxkb3VibGUsIG51bWJlck9mVGVtcG9yYWxVbml0cz4gZGF0YSB7IH07Cit9OworCitzdGQ6
Om9wdGlvbmFsPER1cmF0aW9uPiBwYXJzZUR1cmF0aW9uKFN0cmluZ1ZpZXcpOworCit9IC8vIG5h
bWVzcGFjZSBJU084NjAxCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCBkNDU2N2VmZTkwMjZjOWE2
NDc1ZWQ0NWFiZWEyYWVjNmM3NDg2NDQzLi42YjJmNDYxOGRhMTczOGEyOGMwNjNjNmVlYTYyZjY4
NjhjNzRiZGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCkBAIC0yMDIsOCArMjAyLDkgQEAKICNpbmNsdWRlICJTeW1ib2xPYmplY3Qu
aCIKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUuaCIKICNpbmNsdWRlICJUZW1wb3JhbENhbGVu
ZGFyLmgiCi0jaW5jbHVkZSAiVGVtcG9yYWxDYWxlbmRhckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiVGVtcG9yYWxDYWxlbmRhclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRp
b24uaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
VGVtcG9yYWxPYmplY3QuaCIKICNpbmNsdWRlICJWTVRyYXBzSW5saW5lcy5oIgogI2luY2x1ZGUg
Ildhc21DYXBhYmlsaXRpZXMuaCIKQEAgLTEyMjIsNiArMTIyMywxMyBAQCBjYXBpdGFsTmFtZSAj
IyBDb25zdHJ1Y3RvciogbG93ZXJOYW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBj
YXBpdGFsTmFtZQogICAgICAgICAgICAgICAgIGluaXQuc2V0KFRlbXBvcmFsQ2FsZW5kYXI6OmNy
ZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBnbG9iYWxPYmplY3QsIGNhbGVuZGFyUHJvdG90eXBlKSk7
CiAgICAgICAgICAgICB9KTsKIAorICAgICAgICBtX2R1cmF0aW9uU3RydWN0dXJlLmluaXRMYXRl
cigKKyAgICAgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7
CisgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxK
U0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpOworICAgICAgICAgICAgICAgIFRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBlID0gVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZTo6Y3JlYXRlKGluaXQudm0sIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShpbml0LnZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90
eXBlKCkpKTsKKyAgICAgICAgICAgICAgICBpbml0LnNldChUZW1wb3JhbER1cmF0aW9uOjpjcmVh
dGVTdHJ1Y3R1cmUoaW5pdC52bSwgZ2xvYmFsT2JqZWN0LCBkdXJhdGlvblByb3RvdHlwZSkpOwor
ICAgICAgICAgICAgfSk7CisKICAgICAgICAgVGVtcG9yYWxPYmplY3QqIHRlbXBvcmFsID0gVGVt
cG9yYWxPYmplY3Q6OmNyZWF0ZSh2bSwgVGVtcG9yYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2
bSwgdGhpcykpOwogICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+VGVtcG9yYWwsIHRlbXBvcmFsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgfQpAQCAtMjEwMSw2ICsyMTA5LDcgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNp
dG9yJiB2aXNpdG9yKQogICAgIHRoaXNPYmplY3QtPm1fbnVtYmVyRm9ybWF0U3RydWN0dXJlLnZp
c2l0KHZpc2l0b3IpOwogCiAgICAgdGhpc09iamVjdC0+bV9jYWxlbmRhclN0cnVjdHVyZS52aXNp
dCh2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2R1cmF0aW9uU3RydWN0dXJlLnZpc2l0KHZp
c2l0b3IpOwogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9udWxsR2V0dGVyRnVu
Y3Rpb24pOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbnVsbFNldHRlckZ1bmN0
aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
CmluZGV4IDEyNDY1OGYyNDUyZTBjNWFkMGZkZWViMTRlOTBiZTYzODk4ZGIzMjguLmQ0ZGUzMGI2
MTM2ZTljYzkzMTg0MjA3NDI0ZTQ3YWYyYTExNWU5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMzI1LDYgKzMyNSw3IEBAIHB1Ymxp
YzoKICAgICBMYXp5Q2xhc3NTdHJ1Y3R1cmUgbV9udW1iZXJGb3JtYXRTdHJ1Y3R1cmU7CiAKICAg
ICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jYWxlbmRhclN0cnVj
dHVyZTsKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9kdXJh
dGlvblN0cnVjdHVyZTsKIAogICAgIFdyaXRlQmFycmllcjxOdWxsR2V0dGVyRnVuY3Rpb24+IG1f
bnVsbEdldHRlckZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxOdWxsU2V0dGVyRnVuY3Rpb24+
IG1fbnVsbFNldHRlckZ1bmN0aW9uOwpAQCAtODczLDYgKzg3NCw3IEBAIHB1YmxpYzoKICAgICBK
U09iamVjdCogbnVtYmVyRm9ybWF0UHJvdG90eXBlKCkgeyByZXR1cm4gbV9udW1iZXJGb3JtYXRT
dHJ1Y3R1cmUucHJvdG90eXBlKHRoaXMpOyB9CiAKICAgICBTdHJ1Y3R1cmUqIGNhbGVuZGFyU3Ry
dWN0dXJlKCkgeyByZXR1cm4gbV9jYWxlbmRhclN0cnVjdHVyZS5nZXQodGhpcyk7IH0KKyAgICBT
dHJ1Y3R1cmUqIGR1cmF0aW9uU3RydWN0dXJlKCkgeyByZXR1cm4gbV9kdXJhdGlvblN0cnVjdHVy
ZS5nZXQodGhpcyk7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UmVtb3RlRGVi
dWdnaW5nRW5hYmxlZChib29sKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHJlbW90ZURl
YnVnZ2luZ0VuYWJsZWQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmIxYzRlMDRlMTQ3MjQwZGZm
OTA2YzE1NjZjMTdmMGM4Mjk2MzA0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwCkBAIC0wLDAgKzEsNjEwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1
cmF0aW9uLmgiCisKKyNpbmNsdWRlICJJbnRsT2JqZWN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitzdGF0aWMgY29uc3RleHByIGRvdWJsZSBuYW5vc2Vjb25kc1BlckRheSA9
IDI0LjAgKiA2MCAqIDYwICogMTAwMCAqIDEwMDAgKiAxMDAwOworCitzdGF0aWMgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZShWTSYgdm0sIHVuc2lnbmVkIGluZGV4KQoreworICAgIEFTU0VSVChp
bmRleCA8IG51bWJlck9mVGVtcG9yYWxVbml0cyk7CisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxU
ZW1wb3JhbFVuaXQ+KGluZGV4KSkgeworI2RlZmluZSBKU0NfVEVNUE9SQUxfRFVSQVRJT05fUFJP
UEVSVFlfTkFNRShuYW1lLCBjYXBpdGFsaXplZE5hbWUpIGNhc2UgVGVtcG9yYWxVbml0OjpjYXBp
dGFsaXplZE5hbWU6IHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lIyNzOyAKKyAgICAgICAg
SlNDX1RFTVBPUkFMX1VOSVRTKEpTQ19URU1QT1JBTF9EVVJBVElPTl9QUk9QRVJUWV9OQU1FKQor
I3VuZGVmIEpTQ19URU1QT1JBTF9EVVJBVElPTl9QUk9QRVJUWV9OQU1FCisgICAgfQorfQorCitj
b25zdCBDbGFzc0luZm8gVGVtcG9yYWxEdXJhdGlvbjo6c19pbmZvID0geyAiT2JqZWN0IiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShUZW1wb3Jh
bER1cmF0aW9uKSB9OworCitUZW1wb3JhbER1cmF0aW9uKiBUZW1wb3JhbER1cmF0aW9uOjpjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ViZHVyYXRpb25zJiYgc3ViZHVyYXRp
b25zKQoreworICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRl
bXBvcmFsRHVyYXRpb24+KHZtLmhlYXApKSBUZW1wb3JhbER1cmF0aW9uKHZtLCBzdHJ1Y3R1cmUs
IFdURk1vdmUoc3ViZHVyYXRpb25zKSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworU3RydWN0dXJlKiBUZW1wb3JhbER1cmF0aW9uOjpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlRlbXBvcmFsRHVyYXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ViZHVyYXRpb25zJiYgc3ViZHVyYXRpb25zKQorICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9zdWJkdXJhdGlvbnMoV1RGTW92ZShzdWJk
dXJhdGlvbnMpKQoreworfQorCit2b2lkIFRlbXBvcmFsRHVyYXRpb246OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKK30KKworLy8gSXNWYWxpZER1cmF0aW9uICggeWVhcnMsIG1v
bnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMs
IG1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMgKQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2Fs
LXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtaXN2YWxpZGR1cmF0aW9uCitzdGF0aWMgYm9vbCBpc1Zh
bGlkRHVyYXRpb24oY29uc3QgVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zJiBzdWJkdXJh
dGlvbnMpCit7CisgICAgaW50IHNpZ24gPSAwOworICAgIGZvciAoYXV0byB2YWx1ZSA6IHN1YmR1
cmF0aW9ucykgeworICAgICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodmFsdWUpIHx8ICh2YWx1ZSA8
IDAgJiYgc2lnbiA+IDApIHx8ICh2YWx1ZSA+IDAgJiYgc2lnbiA8IDApKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghc2lnbiAmJiB2YWx1ZSkKKyAgICAgICAgICAg
IHNpZ24gPSB2YWx1ZSA+IDAgPyAxIDogLTE7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKKy8vIENyZWF0ZVRlbXBvcmFsRHVyYXRpb24gKCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5
cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzLCBu
YW5vc2Vjb25kcyBbICwgbmV3VGFyZ2V0IF0gKQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2Fs
LXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtY3JlYXRldGVtcG9yYWxkdXJhdGlvbgorVGVtcG9yYWxE
dXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6dHJ5Q3JlYXRlSWZWYWxpZChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdWJkdXJhdGlvbnMmJiBzdWJkdXJhdGlvbnMsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIWlzVmFsaWREdXJh
dGlvbihzdWJkdXJhdGlvbnMpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydGllcyBtdXN0IGJlIGZpbml0ZSBh
bmQgb2YgY29uc2lzdGVudCBzaWduIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICByZXR1cm4gVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUgPyBzdHJ1
Y3R1cmUgOiBnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCksIFdURk1vdmUoc3ViZHVy
YXRpb25zKSk7Cit9CisKKy8vIFRvVGVtcG9yYWxEdXJhdGlvblJlY29yZCAoIHRlbXBvcmFsRHVy
YXRpb25MaWtlICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRl
bXBvcmFsLXRvdGVtcG9yYWxkdXJhdGlvbnJlY29yZAorVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVy
YXRpb25zIFRlbXBvcmFsRHVyYXRpb246OmZyb21PYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIGR1cmF0aW9uTGlrZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgQVNTRVJUKCFkdXJhdGlvbkxpa2UtPmluaGVyaXRzPFRlbXBvcmFsRHVyYXRpb24+KHZt
KSk7CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0OworICAgIGF1dG8gaGFzUmVsZXZhbnRQcm9w
ZXJ0eSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW1wb3Jh
bFVuaXRzOyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGR1cmF0aW9uTGlrZS0+Z2V0
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKHZtLCBpKSk7CisKKyAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdFtpXSA9IDA7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGhhc1JlbGV2YW50UHJvcGVydHkgPSB0
cnVlOworICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZS50b051bWJlcihnbG9iYWxPYmplY3QpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIGlmICgh
aXNJbnRlZ2VyKHJlc3VsdFtpXSkpIHsKKyAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydGllcyBtdXN0IGJlIGlu
dGVnZXJzIl9zKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoIWhhc1JlbGV2YW50UHJvcGVydHkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIk9iamVjdCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIFRl
bXBvcmFsLkR1cmF0aW9uIHByb3BlcnR5Il9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBUb1RlbXBvcmFsRHVyYXRpb24gKCBpdGVt
ICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRv
dGVtcG9yYWxkdXJhdGlvbgorVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6dG9E
dXJhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZW1WYWx1ZSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKGl0ZW1WYWx1ZS5pbmhlcml0czxUZW1w
b3JhbER1cmF0aW9uPih2bSkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8VGVtcG9yYWxEdXJhdGlv
bio+KGl0ZW1WYWx1ZSk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgVGVtcG9yYWxEdXJhdGlvbjo6dHJ5Q3JlYXRlSWZW
YWxpZChnbG9iYWxPYmplY3QsIGZyb21PYmplY3QoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChpdGVt
VmFsdWUpKSkpOworCisgICAgU3RyaW5nIHN0cmluZyA9IGl0ZW1WYWx1ZS50b1dURlN0cmluZyhn
bG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwor
CisgICAgYXV0byBwYXJzZWRTdWJkdXJhdGlvbnMgPSBJU084NjAxOjpwYXJzZUR1cmF0aW9uKHN0
cmluZyk7CisgICAgaWYgKCFwYXJzZWRTdWJkdXJhdGlvbnMpIHsKKyAgICAgICAgdGhyb3dSYW5n
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDb3VsZCBub3QgcGFyc2UgRHVyYXRpb24gc3Ry
aW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVhdGVJZlZhbGlkKGdsb2Jh
bE9iamVjdCwgV1RGTW92ZShwYXJzZWRTdWJkdXJhdGlvbnMudmFsdWUoKSkpKTsKK30KKworVGVt
cG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6ZnJvbShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZW1WYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmluaGVyaXRzPFRlbXBvcmFsRHVyYXRpb24+
KHZtKSkgeworICAgICAgICBTdWJkdXJhdGlvbnMgY2xvbmVkID0ganNDYXN0PFRlbXBvcmFsRHVy
YXRpb24qPihpdGVtVmFsdWUpLT5tX3N1YmR1cmF0aW9uczsKKyAgICAgICAgcmV0dXJuIFRlbXBv
cmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgp
LCBXVEZNb3ZlKGNsb25lZCkpOworICAgIH0KKworICAgIHJldHVybiB0b0R1cmF0aW9uKGdsb2Jh
bE9iamVjdCwgaXRlbVZhbHVlKTsKK30KKworLy8gVG90YWxEdXJhdGlvbk5hbm9zZWNvbmRzICgg
ZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRz
LCBuYW5vc2Vjb25kcywgb2Zmc2V0U2hpZnQgKQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2Fs
LXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtdG90YWxkdXJhdGlvbm5hbm9zZWNvbmRzCitzdGF0aWMg
ZG91YmxlIHRvdGFsTmFub3NlY29uZHMoVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zJiBz
dWJkdXJhdGlvbnMpCit7CisgICAgYXV0byBob3VycyA9IDI0ICogc3ViZHVyYXRpb25zLmRheXMo
KSArIHN1YmR1cmF0aW9ucy5ob3VycygpOworICAgIGF1dG8gbWludXRlcyA9IDYwICogaG91cnMg
KyBzdWJkdXJhdGlvbnMubWludXRlcygpOworICAgIGF1dG8gc2Vjb25kcyA9IDYwICogbWludXRl
cyArIHN1YmR1cmF0aW9ucy5zZWNvbmRzKCk7CisgICAgYXV0byBtaWxsaXNlY29uZHMgPSAxMDAw
ICogc2Vjb25kcyArIHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMoKTsKKyAgICBhdXRvIG1pY3Jv
c2Vjb25kcyA9IDEwMDAgKiBtaWxsaXNlY29uZHMgKyBzdWJkdXJhdGlvbnMubWljcm9zZWNvbmRz
KCk7CisgICAgcmV0dXJuIDEwMDAgKiBtaWNyb3NlY29uZHMgKyBzdWJkdXJhdGlvbnMubmFub3Nl
Y29uZHMoKTsKK30KKworSlNWYWx1ZSBUZW1wb3JhbER1cmF0aW9uOjpjb21wYXJlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWVPbmUsIEpTVmFsdWUgdmFsdWVUd28p
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIG9uZSA9IHRvRHVyYXRpb24oZ2xv
YmFsT2JqZWN0LCB2YWx1ZU9uZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKworICAgIGF1dG8qIHR3byA9IHRvRHVyYXRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZVR3byk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgcmVsYXRpdmVUbyBwYXJhbWV0ZXIgYWZ0ZXIgUGxhaW5EYXRlVGltZSAvIFpvbmVk
RGF0ZVRpbWUuCisgICAgaWYgKG9uZS0+eWVhcnMoKSB8fCB0d28tPnllYXJzKCkgfHwgb25lLT5t
b250aHMoKSB8fCB0d28tPm1vbnRocygpIHx8IG9uZS0+d2Vla3MoKSB8fCB0d28tPndlZWtzKCkp
IHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3Qg
Y29tcGFyZSBhIGR1cmF0aW9uIG9mIHllYXJzLCBtb250aHMsIG9yIHdlZWtzIHdpdGhvdXQgYSBy
ZWxhdGl2ZVRvIG9wdGlvbiJfcyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
YXV0byBuc09uZSA9IHRvdGFsTmFub3NlY29uZHMob25lLT5tX3N1YmR1cmF0aW9ucyk7CisgICAg
YXV0byBuc1R3byA9IHRvdGFsTmFub3NlY29uZHModHdvLT5tX3N1YmR1cmF0aW9ucyk7CisgICAg
cmV0dXJuIGpzTnVtYmVyKG5zT25lID4gbnNUd28gPyAxIDogbnNPbmUgPCBuc1R3byA/IC0xIDog
MCk7Cit9CisKK2ludCBUZW1wb3JhbER1cmF0aW9uOjpzaWduKGNvbnN0IFRlbXBvcmFsRHVyYXRp
b246OlN1YmR1cmF0aW9ucyYgc3ViZHVyYXRpb25zKQoreworICAgIGZvciAoYXV0byB2YWx1ZSA6
IHN1YmR1cmF0aW9ucykgeworICAgICAgICBpZiAodmFsdWUgPCAwKQorICAgICAgICAgICAgcmV0
dXJuIC0xOworCisgICAgICAgIGlmICh2YWx1ZSA+IDApCisgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRp
b25zIFRlbXBvcmFsRHVyYXRpb246OndpdGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNPYmplY3QqIGR1cmF0aW9uTGlrZSkgY29uc3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgU3ViZHVyYXRpb25zIHJlc3VsdDsKKyAgICBhdXRvIGhhc1JlbGV2YW50UHJvcGVydHkgPSBm
YWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsg
aSsrKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkdXJhdGlvbkxpa2UtPmdldChnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSh2bSwgaSkpOworCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZCgpKSB7CisgICAgICAgICAgICByZXN1bHRbaV0gPSBtX3N1YmR1cmF0aW9uc1tpXTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaGFzUmVsZXZhbnRQcm9w
ZXJ0eSA9IHRydWU7CisgICAgICAgIHJlc3VsdFtpXSA9IHZhbHVlLnRvTnVtYmVyKGdsb2JhbE9i
amVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAg
ICAgaWYgKCFpc0ludGVnZXIocmVzdWx0W2ldKSkgeworICAgICAgICAgICAgdGhyb3dSYW5nZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0aWVzIG11
c3QgYmUgaW50ZWdlcnMiX3MpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICghaGFzUmVsZXZhbnRQcm9wZXJ0eSkgeworICAgICAgICB0aHJvd1R5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiT2JqZWN0IG11c3QgY29udGFpbiBhdCBsZWFz
dCBvbmUgVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydHkiX3MpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1
YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjpuZWdhdGVkKCkgY29uc3QKK3sKKyAgICBTdWJk
dXJhdGlvbnMgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW1w
b3JhbFVuaXRzOyBpKyspCisgICAgICAgIHJlc3VsdFtpXSA9IC1tX3N1YmR1cmF0aW9uc1tpXTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMg
VGVtcG9yYWxEdXJhdGlvbjo6YWJzKCkgY29uc3QKK3sKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBpKysp
CisgICAgICAgIHJlc3VsdFtpXSA9IHN0ZDo6YWJzKG1fc3ViZHVyYXRpb25zW2ldKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCisvLyBEZWZhdWx0VGVtcG9yYWxMYXJnZXN0VW5pdCAoIHllYXJz
LCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNv
bmRzLCBtaWNyb3NlY29uZHMgKQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFs
LyNzZWMtdGVtcG9yYWwtZGVmYXVsdHRlbXBvcmFsbGFyZ2VzdHVuaXQKK1RlbXBvcmFsVW5pdCBU
ZW1wb3JhbER1cmF0aW9uOjpsYXJnZXN0U3ViZHVyYXRpb24oKSBjb25zdAoreworICAgIHVpbnQ4
X3QgaW5kZXggPSAwOworICAgIHdoaWxlIChpbmRleCA8IG51bWJlck9mVGVtcG9yYWxVbml0cyAt
IDEgJiYgIW1fc3ViZHVyYXRpb25zW2luZGV4XSkKKyAgICAgICAgaW5kZXgrKzsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VGVtcG9yYWxVbml0PihpbmRleCk7Cit9CisKKy8vIEJhbGFuY2VEdXJh
dGlvbiAoIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jv
c2Vjb25kcywgbmFub3NlY29uZHMsIGxhcmdlc3RVbml0IFsgLCByZWxhdGl2ZVRvIF0gKQorLy8g
aHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtYmFsYW5jZWR1
cmF0aW9uCit2b2lkIFRlbXBvcmFsRHVyYXRpb246OmJhbGFuY2UoU3ViZHVyYXRpb25zJiBzdWJk
dXJhdGlvbnMsIFRlbXBvcmFsVW5pdCBsYXJnZXN0VW5pdCkKK3sKKyAgICBhdXRvIG5hbm9zZWNv
bmRzID0gdG90YWxOYW5vc2Vjb25kcyhzdWJkdXJhdGlvbnMpOworICAgIHN1YmR1cmF0aW9ucy5j
bGVhcigpOworCisgICAgaWYgKGxhcmdlc3RVbml0IDw9IFRlbXBvcmFsVW5pdDo6RGF5KSB7Cisg
ICAgICAgIHN1YmR1cmF0aW9ucy5zZXREYXlzKHN0ZDo6dHJ1bmMobmFub3NlY29uZHMgLyBuYW5v
c2Vjb25kc1BlckRheSkpOworICAgICAgICBuYW5vc2Vjb25kcyA9IHN0ZDo6Zm1vZChuYW5vc2Vj
b25kcywgbmFub3NlY29uZHNQZXJEYXkpOworICAgIH0KKworICAgIGRvdWJsZSBtaWNyb3NlY29u
ZHMgPSBzdGQ6OnRydW5jKG5hbm9zZWNvbmRzIC8gMTAwMCk7CisgICAgZG91YmxlIG1pbGxpc2Vj
b25kcyA9IHN0ZDo6dHJ1bmMobWljcm9zZWNvbmRzIC8gMTAwMCk7CisgICAgZG91YmxlIHNlY29u
ZHMgPSBzdGQ6OnRydW5jKG1pbGxpc2Vjb25kcyAvIDEwMDApOworICAgIGRvdWJsZSBtaW51dGVz
ID0gc3RkOjp0cnVuYyhzZWNvbmRzIC8gNjApOworICAgIGlmIChsYXJnZXN0VW5pdCA8PSBUZW1w
b3JhbFVuaXQ6OkhvdXIpIHsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRzKHN0
ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlj
cm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVy
YXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZtb2QobWlsbGlzZWNvbmRzLCAxMDAwKSk7Cisg
ICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHN0ZDo6Zm1vZChzZWNvbmRzLCA2MCkpOwor
ICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWludXRlcyhzdGQ6OmZtb2QobWludXRlcywgNjApKTsK
KyAgICAgICAgc3ViZHVyYXRpb25zLnNldEhvdXJzKHN0ZDo6dHJ1bmMobWludXRlcyAvIDYwKSk7
CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSkgewor
ICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjpmbW9kKG5hbm9zZWNvbmRz
LCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMoc3RkOjpmbW9k
KG1pY3Jvc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNv
bmRzKHN0ZDo6Zm1vZChtaWxsaXNlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25z
LnNldFNlY29uZHMoc3RkOjpmbW9kKHNlY29uZHMsIDYwKSk7CisgICAgICAgIHN1YmR1cmF0aW9u
cy5zZXRNaW51dGVzKG1pbnV0ZXMpOworICAgIH0gZWxzZSBpZiAobGFyZ2VzdFVuaXQgPT0gVGVt
cG9yYWxVbml0OjpTZWNvbmQpIHsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE5hbm9zZWNvbmRz
KHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0
TWljcm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3Vi
ZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZtb2QobWlsbGlzZWNvbmRzLCAxMDAwKSk7
CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHNlY29uZHMpOworICAgIH0gZWxzZSBp
ZiAobGFyZ2VzdFVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaWxsaXNlY29uZCkgeworICAgICAgICBz
dWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjpmbW9kKG5hbm9zZWNvbmRzLCAxMDAwKSk7
CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMoc3RkOjpmbW9kKG1pY3Jvc2Vj
b25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNvbmRzKG1pbGxp
c2Vjb25kcyk7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBUZW1wb3JhbFVuaXQ6Ok1p
Y3Jvc2Vjb25kKSB7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXROYW5vc2Vjb25kcyhzdGQ6OmZt
b2QobmFub3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pY3Jvc2Vj
b25kcyhtaWNyb3NlY29uZHMpOworICAgIH0gZWxzZQorICAgICAgICBzdWJkdXJhdGlvbnMuc2V0
TmFub3NlY29uZHMobmFub3NlY29uZHMpOworfQorCitUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJh
dGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgb3RoZXJWYWx1ZSkgY29uc3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
YXV0byogb3RoZXIgPSB0b0R1cmF0aW9uKGdsb2JhbE9iamVjdCwgb3RoZXJWYWx1ZSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgcmVsYXRpdmVUbyBwYXJhbWV0ZXIgYWZ0ZXIgUGxhaW5EYXRlVGltZSAvIFpvbmVkRGF0ZVRp
bWUuCisgICAgYXV0byBsYXJnZXN0VW5pdCA9IHN0ZDo6bWluKGxhcmdlc3RTdWJkdXJhdGlvbigp
LCBvdGhlci0+bGFyZ2VzdFN1YmR1cmF0aW9uKCkpOworICAgIGlmIChsYXJnZXN0VW5pdCA8PSBU
ZW1wb3JhbFVuaXQ6OldlZWspIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJDYW5ub3QgYWRkIGEgZHVyYXRpb24gb2YgeWVhcnMsIG1vbnRocywgb3Igd2Vl
a3Mgd2l0aG91dCBhIHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0IHsKKyAgICAgICAgMCwgMCwgMCwgZGF5
cygpICsgb3RoZXItPmRheXMoKSwKKyAgICAgICAgaG91cnMoKSArIG90aGVyLT5ob3VycygpLCBt
aW51dGVzKCkgKyBvdGhlci0+bWludXRlcygpLCBzZWNvbmRzKCkgKyBvdGhlci0+c2Vjb25kcygp
LAorICAgICAgICBtaWxsaXNlY29uZHMoKSArIG90aGVyLT5taWxsaXNlY29uZHMoKSwgbWljcm9z
ZWNvbmRzKCkgKyBvdGhlci0+bWljcm9zZWNvbmRzKCksIG5hbm9zZWNvbmRzKCkgKyBvdGhlci0+
bmFub3NlY29uZHMoKQorICAgIH07CisKKyAgICBiYWxhbmNlKHJlc3VsdCwgbGFyZ2VzdFVuaXQp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9u
cyBUZW1wb3JhbER1cmF0aW9uOjpzdWJ0cmFjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIG90aGVyVmFsdWUpIGNvbnN0Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IGF1dG8qIG90aGVyID0gdG9EdXJhdGlvbihnbG9iYWxPYmplY3QsIG90aGVyVmFsdWUpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHJlbGF0aXZlVG8gcGFyYW1ldGVyIGFmdGVyIFBsYWluRGF0ZVRpbWUgLyBab25lZERhdGVU
aW1lLgorICAgIGF1dG8gbGFyZ2VzdFVuaXQgPSBzdGQ6Om1pbihsYXJnZXN0U3ViZHVyYXRpb24o
KSwgb3RoZXItPmxhcmdlc3RTdWJkdXJhdGlvbigpKTsKKyAgICBpZiAobGFyZ2VzdFVuaXQgPD0g
VGVtcG9yYWxVbml0OjpXZWVrKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiQ2Fubm90IHN1YnRyYWN0IGEgZHVyYXRpb24gb2YgeWVhcnMsIG1vbnRocywg
b3Igd2Vla3Mgd2l0aG91dCBhIHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0IHsKKyAgICAgICAgMCwgMCwg
MCwgZGF5cygpIC0gb3RoZXItPmRheXMoKSwKKyAgICAgICAgaG91cnMoKSAtIG90aGVyLT5ob3Vy
cygpLCBtaW51dGVzKCkgLSBvdGhlci0+bWludXRlcygpLCBzZWNvbmRzKCkgLSBvdGhlci0+c2Vj
b25kcygpLAorICAgICAgICBtaWxsaXNlY29uZHMoKSAtIG90aGVyLT5taWxsaXNlY29uZHMoKSwg
bWljcm9zZWNvbmRzKCkgLSBvdGhlci0+bWljcm9zZWNvbmRzKCksIG5hbm9zZWNvbmRzKCkgLSBv
dGhlci0+bmFub3NlY29uZHMoKQorICAgIH07CisKKyAgICBiYWxhbmNlKHJlc3VsdCwgbGFyZ2Vz
dFVuaXQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIFJvdW5kRHVyYXRpb24gKCB5ZWFy
cywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vj
b25kcywgbWljcm9zZWNvbmRzLCBuYW5vc2Vjb25kcywgaW5jcmVtZW50LCB1bml0LCByb3VuZGlu
Z01vZGUgWyAsIHJlbGF0aXZlVG8gXSApCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdGVt
cG9yYWwvI3NlYy10ZW1wb3JhbC1yb3VuZGR1cmF0aW9uCitkb3VibGUgVGVtcG9yYWxEdXJhdGlv
bjo6cm91bmQoVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zJiBzdWJkdXJhdGlvbnMsIGRv
dWJsZSBpbmNyZW1lbnQsIFRlbXBvcmFsVW5pdCB1bml0LCBSb3VuZGluZ01vZGUgbW9kZSkKK3sK
KyAgICBBU1NFUlQodW5pdCA+PSBUZW1wb3JhbFVuaXQ6OkRheSk7CisgICAgZG91YmxlIHJlbWFp
bmRlciA9IDA7CisKKyAgICBpZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6OkRheSkgeworICAgICAg
ICBhdXRvIG9yaWdpbmFsRGF5cyA9IHN1YmR1cmF0aW9ucy5kYXlzKCk7CisgICAgICAgIHN1YmR1
cmF0aW9ucy5zZXREYXlzKDApOworICAgICAgICBhdXRvIG5hbm9zZWNvbmRzID0gdG90YWxOYW5v
c2Vjb25kcyhzdWJkdXJhdGlvbnMpOworCisgICAgICAgIGF1dG8gZnJhY3Rpb25hbERheXMgPSBv
cmlnaW5hbERheXMgKyBuYW5vc2Vjb25kcyAvIG5hbm9zZWNvbmRzUGVyRGF5OworICAgICAgICBh
dXRvIG5ld0RheXMgPSByb3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0aW9uYWxEYXlzLCBpbmNy
ZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsRGF5cyAtIG5ld0Rh
eXM7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXREYXlzKG5ld0RheXMpOworICAgIH0gZWxzZSBp
ZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6OkhvdXIpIHsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFs
U2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5zZWNvbmRzKCkgKyBzdWJkdXJhdGlvbnMubWlsbGlzZWNv
bmRzKCkgKiAxZS0zICsgc3ViZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygpICogMWUtNiArIHN1YmR1
cmF0aW9ucy5uYW5vc2Vjb25kcygpICogMWUtOTsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFsSG91
cnMgPSBzdWJkdXJhdGlvbnMuaG91cnMoKSArIChzdWJkdXJhdGlvbnMubWludXRlcygpICsgZnJh
Y3Rpb25hbFNlY29uZHMgLyA2MCkgLyA2MDsKKyAgICAgICAgYXV0byBuZXdIb3VycyA9IHJvdW5k
TnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbEhvdXJzLCBpbmNyZW1lbnQsIG1vZGUpOworICAg
ICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsSG91cnMgLSBuZXdIb3VyczsKKyAgICAgICAgc3Vi
ZHVyYXRpb25zLnNldEhvdXJzKG5ld0hvdXJzKTsKKyAgICB9IGVsc2UgaWYgKHVuaXQgPT0gVGVt
cG9yYWxVbml0OjpNaW51dGUpIHsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFsU2Vjb25kcyA9IHN1
YmR1cmF0aW9ucy5zZWNvbmRzKCkgKyBzdWJkdXJhdGlvbnMubWlsbGlzZWNvbmRzKCkgKiAxZS0z
ICsgc3ViZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygpICogMWUtNiArIHN1YmR1cmF0aW9ucy5uYW5v
c2Vjb25kcygpICogMWUtOTsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFsTWludXRlcyA9IHN1YmR1
cmF0aW9ucy5taW51dGVzKCkgKyBmcmFjdGlvbmFsU2Vjb25kcyAvIDYwOworICAgICAgICBhdXRv
IG5ld01pbnV0ZXMgPSByb3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0aW9uYWxNaW51dGVzLCBp
bmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsTWludXRlcyAt
IG5ld01pbnV0ZXM7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaW51dGVzKG5ld01pbnV0ZXMp
OworICAgIH0gZWxzZSBpZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6OlNlY29uZCkgeworICAgICAg
ICBhdXRvIGZyYWN0aW9uYWxTZWNvbmRzID0gc3ViZHVyYXRpb25zLnNlY29uZHMoKSArIHN1YmR1
cmF0aW9ucy5taWxsaXNlY29uZHMoKSAqIDFlLTMgKyBzdWJkdXJhdGlvbnMubWljcm9zZWNvbmRz
KCkgKiAxZS02ICsgc3ViZHVyYXRpb25zLm5hbm9zZWNvbmRzKCkgKiAxZS05OworICAgICAgICBh
dXRvIG5ld1NlY29uZHMgPSByb3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0aW9uYWxTZWNvbmRz
LCBpbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsU2Vjb25k
cyAtIG5ld1NlY29uZHM7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKG5ld1NlY29u
ZHMpOworICAgIH0gZWxzZSBpZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kKSB7
CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbE1pbGxpc2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5taWxs
aXNlY29uZHMoKSArIHN1YmR1cmF0aW9ucy5taWNyb3NlY29uZHMoKSAqIDFlLTMgKyBzdWJkdXJh
dGlvbnMubmFub3NlY29uZHMoKSAqIDFlLTY7CisgICAgICAgIGF1dG8gbmV3TWlsbGlzZWNvbmRz
ID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsTWlsbGlzZWNvbmRzLCBpbmNyZW1l
bnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsTWlsbGlzZWNvbmRzIC0g
bmV3TWlsbGlzZWNvbmRzOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWlsbGlzZWNvbmRzKG5l
d01pbGxpc2Vjb25kcyk7CisgICAgfSBlbHNlIGlmICh1bml0ID09IFRlbXBvcmFsVW5pdDo6TWlj
cm9zZWNvbmQpIHsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFsTWljcm9zZWNvbmRzID0gc3ViZHVy
YXRpb25zLm1pY3Jvc2Vjb25kcygpICsgc3ViZHVyYXRpb25zLm5hbm9zZWNvbmRzKCkgKiAxZS0z
OworICAgICAgICBhdXRvIG5ld01pY3Jvc2Vjb25kcyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQo
ZnJhY3Rpb25hbE1pY3Jvc2Vjb25kcywgaW5jcmVtZW50LCBtb2RlKTsKKyAgICAgICAgcmVtYWlu
ZGVyID0gZnJhY3Rpb25hbE1pY3Jvc2Vjb25kcyAtIG5ld01pY3Jvc2Vjb25kczsKKyAgICAgICAg
c3ViZHVyYXRpb25zLnNldE1pY3Jvc2Vjb25kcyhuZXdNaWNyb3NlY29uZHMpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGF1dG8gbmV3TmFub3NlY29uZHMgPSByb3VuZE51bWJlclRvSW5jcmVtZW50
KHN1YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygpLCBpbmNyZW1lbnQsIG1vZGUpOworICAgICAgICBy
ZW1haW5kZXIgPSBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKSAtIG5ld05hbm9zZWNvbmRzOwor
ICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMobmV3TmFub3NlY29uZHMpOworICAg
IH0KKworICAgIGZvciAoYXV0byBpID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odW5pdCkgKyAxdTsg
aSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsgaSsrKQorICAgICAgICBzdWJkdXJhdGlvbnNbaV0g
PSAwOworCisgICAgcmV0dXJuIHJlbWFpbmRlcjsKK30KKworVGVtcG9yYWxEdXJhdGlvbjo6U3Vi
ZHVyYXRpb25zIFRlbXBvcmFsRHVyYXRpb246OnJvdW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGludGxHZXRPcHRpb25zT2JqZWN0KGdsb2JhbE9i
amVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworCisgICAgYXV0byBzbWFsbGVzdCA9IHRlbXBvcmFsU21hbGxlc3RVbml0KGdsb2JhbE9iamVj
dCwgb3B0aW9ucywgeyB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
CisgICAgVGVtcG9yYWxVbml0IGRlZmF1bHRMYXJnZXN0VW5pdCA9IGxhcmdlc3RTdWJkdXJhdGlv
bigpOworICAgIGF1dG8gbGFyZ2VzdCA9IHRlbXBvcmFsTGFyZ2VzdFVuaXQoZ2xvYmFsT2JqZWN0
LCBvcHRpb25zLCB7IH0sIGRlZmF1bHRMYXJnZXN0VW5pdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgIGlmICghc21hbGxlc3QgJiYgIWxhcmdlc3QpIHsKKyAg
ICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3Qgcm91bmQg
d2l0aG91dCBhIHNtYWxsZXN0VW5pdCBvciBsYXJnZXN0VW5pdCBvcHRpb24iX3MpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKworICAgIGlmIChzbWFsbGVzdCAmJiBsYXJnZXN0ICYmIHNt
YWxsZXN0LnZhbHVlKCkgPCBsYXJnZXN0LnZhbHVlKCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJzbWFsbGVzdFVuaXQgbXVzdCBiZSBzbWFsbGVyIHRo
YW4gbGFyZ2VzdFVuaXQiX3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFRl
bXBvcmFsVW5pdCBzbWFsbGVzdFVuaXQgPSBzbWFsbGVzdC52YWx1ZV9vcihUZW1wb3JhbFVuaXQ6
Ok5hbm9zZWNvbmQpOworICAgIFRlbXBvcmFsVW5pdCBsYXJnZXN0VW5pdCA9IGxhcmdlc3QudmFs
dWVfb3Ioc3RkOjptaW4oZGVmYXVsdExhcmdlc3RVbml0LCBzbWFsbGVzdFVuaXQpKTsKKworICAg
IGF1dG8gcm91bmRpbmdNb2RlID0gaW50bE9wdGlvbjxSb3VuZGluZ01vZGU+KGdsb2JhbE9iamVj
dCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+cm91bmRpbmdNb2RlLAorICAgICAgICB7IHsg
ImNlaWwiX3MsIFJvdW5kaW5nTW9kZTo6Q2VpbCB9LCB7ICJmbG9vciJfcywgUm91bmRpbmdNb2Rl
OjpGbG9vciB9LCB7ICJ0cnVuYyJfcywgUm91bmRpbmdNb2RlOjpUcnVuYyB9LCB7ICJoYWxmRXhw
YW5kIl9zLCBSb3VuZGluZ01vZGU6OkhhbGZFeHBhbmQgfSB9LAorICAgICAgICAicm91bmRpbmdN
b2RlIG11c3QgYmUgZWl0aGVyIFwiY2VpbFwiLCBcImZsb29yXCIsIFwidHJ1bmNcIiwgb3IgXCJo
YWxmRXhwYW5kXCIiX3MsIFJvdW5kaW5nTW9kZTo6SGFsZkV4cGFuZCk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGF1dG8gaW5jcmVtZW50ID0gdGVtcG9yYWxS
b3VuZGluZ0luY3JlbWVudChnbG9iYWxPYmplY3QsIG9wdGlvbnMsIG1heGltdW1Sb3VuZGluZ0lu
Y3JlbWVudChzbWFsbGVzdFVuaXQpLCBmYWxzZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmVsYXRpdmVUbyBwYXJhbWV0
ZXIgYWZ0ZXIgUGxhaW5EYXRlVGltZSAvIFpvbmVkRGF0ZVRpbWUuCisgICAgaWYgKGxhcmdlc3RV
bml0ID4gVGVtcG9yYWxVbml0OjpZZWFyICYmICh5ZWFycygpIHx8IG1vbnRocygpIHx8IHdlZWtz
KCkgfHwgKGRheXMoKSAmJiBsYXJnZXN0VW5pdCA8IFRlbXBvcmFsVW5pdDo6RGF5KSkpIHsKKyAg
ICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3Qgcm91bmQg
YSBkdXJhdGlvbiBvZiB5ZWFycywgbW9udGhzLCBvciB3ZWVrcyB3aXRob3V0IGEgcmVsYXRpdmVU
byBvcHRpb24iX3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFN1YmR1cmF0
aW9ucyBuZXdTdWJkdXJhdGlvbnMgPSBtX3N1YmR1cmF0aW9uczsKKyAgICByb3VuZChuZXdTdWJk
dXJhdGlvbnMsIGluY3JlbWVudCwgc21hbGxlc3RVbml0LCByb3VuZGluZ01vZGUpOworICAgIGJh
bGFuY2UobmV3U3ViZHVyYXRpb25zLCBsYXJnZXN0VW5pdCk7CisgICAgcmV0dXJuIG5ld1N1YmR1
cmF0aW9uczsKK30KKworZG91YmxlIFRlbXBvcmFsRHVyYXRpb246OnRvdGFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKSBjb25zdAoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGludGxHZXRPcHRpb25zT2Jq
ZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCAwKTsKKworICAgIFN0cmluZyB1bml0U3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihn
bG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnVuaXQsIHsgfSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBh
dXRvIHVuaXRUeXBlID0gdGVtcG9yYWxVbml0VHlwZSh1bml0U3RyaW5nKTsKKyAgICBpZiAoIXVu
aXRUeXBlKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
dW5pdCBpcyBhbiBpbnZhbGlkIFRlbXBvcmFsIHVuaXQiX3MpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgVGVtcG9yYWxVbml0IHVuaXQgPSB1bml0VHlwZS52YWx1ZSgpOworCisgICAg
Ly8gRklYTUU6IEltcGxlbWVudCByZWxhdGl2ZVRvIHBhcmFtZXRlciBhZnRlciBQbGFpbkRhdGVU
aW1lIC8gWm9uZWREYXRlVGltZS4KKyAgICBpZiAodW5pdCA+IFRlbXBvcmFsVW5pdDo6WWVhciAm
JiAoeWVhcnMoKSB8fCBtb250aHMoKSB8fCB3ZWVrcygpIHx8IChkYXlzKCkgJiYgdW5pdCA8IFRl
bXBvcmFsVW5pdDo6RGF5KSkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJDYW5ub3QgdG90YWwgYSBkdXJhdGlvbiBvZiB5ZWFycywgbW9udGhzLCBvciB3
ZWVrcyB3aXRob3V0IGEgcmVsYXRpdmVUbyBvcHRpb24iX3MpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIFN1YmR1cmF0aW9ucyBuZXdTdWJkdXJhdGlvbnMgPSBtX3N1YmR1cmF0
aW9uczsKKyAgICBiYWxhbmNlKG5ld1N1YmR1cmF0aW9ucywgdW5pdCk7CisgICAgZG91YmxlIHJl
bWFpbmRlciA9IHJvdW5kKG5ld1N1YmR1cmF0aW9ucywgMSwgdW5pdCwgUm91bmRpbmdNb2RlOjpU
cnVuYyk7CisgICAgcmV0dXJuIG5ld1N1YmR1cmF0aW9uc1tzdGF0aWNfY2FzdDx1aW50OF90Pih1
bml0KV0gKyByZW1haW5kZXI7Cit9CisKK1N0cmluZyBUZW1wb3JhbER1cmF0aW9uOjp0b1N0cmlu
ZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSkgY29u
c3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRs
R2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmICghb3B0aW9ucykKKyAgICAgICAg
cmV0dXJuIHRvU3RyaW5nKCk7CisKKyAgICBQcmVjaXNpb25EYXRhIGRhdGEgPSBzZWNvbmRzU3Ry
aW5nUHJlY2lzaW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKyAgICBBU1NFUlQoZGF0YS51bml0ID49IFRlbXBvcmFsVW5pdDo6
U2Vjb25kKTsKKworICAgIGF1dG8gcm91bmRpbmdNb2RlID0gaW50bE9wdGlvbjxSb3VuZGluZ01v
ZGU+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+cm91bmRpbmdNb2Rl
LAorICAgICAgICB7IHsgImNlaWwiX3MsIFJvdW5kaW5nTW9kZTo6Q2VpbCB9LCB7ICJmbG9vciJf
cywgUm91bmRpbmdNb2RlOjpGbG9vciB9LCB7ICJ0cnVuYyJfcywgUm91bmRpbmdNb2RlOjpUcnVu
YyB9LCB7ICJoYWxmRXhwYW5kIl9zLCBSb3VuZGluZ01vZGU6OkhhbGZFeHBhbmQgfSB9LAorICAg
ICAgICAicm91bmRpbmdNb2RlIG11c3QgYmUgZWl0aGVyIFwiY2VpbFwiLCBcImZsb29yXCIsIFwi
dHJ1bmNcIiwgb3IgXCJoYWxmRXhwYW5kXCIiX3MsIFJvdW5kaW5nTW9kZTo6VHJ1bmMpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAvLyBObyBuZWVkIHRvIG1h
a2UgYSBuZXcgb2JqZWN0IGlmIHdlIHdlcmUgZ2l2ZW4gZXhwbGljaXQgZGVmYXVsdHMuCisgICAg
aWYgKCFkYXRhLnByZWNpc2lvbiAmJiByb3VuZGluZ01vZGUgPT0gUm91bmRpbmdNb2RlOjpUcnVu
YykKKyAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCk7CisKKyAgICBTdWJkdXJhdGlvbnMgbmV3U3Vi
ZHVyYXRpb25zID0gbV9zdWJkdXJhdGlvbnM7CisgICAgcm91bmQobmV3U3ViZHVyYXRpb25zLCBk
YXRhLmluY3JlbWVudCwgZGF0YS51bml0LCByb3VuZGluZ01vZGUpOworICAgIHJldHVybiB0b1N0
cmluZyhuZXdTdWJkdXJhdGlvbnMsIGRhdGEucHJlY2lzaW9uKTsKK30KKworLy8gVGVtcG9yYWxE
dXJhdGlvblRvU3RyaW5nICggeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51
dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIHBy
ZWNpc2lvbiApCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1w
b3JhbC10ZW1wb3JhbGR1cmF0aW9udG9zdHJpbmcKK1N0cmluZyBUZW1wb3JhbER1cmF0aW9uOjp0
b1N0cmluZyhjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlvbnMmIHN1YmR1cmF0aW9u
cywgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcHJlY2lzaW9uKQoreworICAgIEFTU0VSVCghcHJl
Y2lzaW9uIHx8IHByZWNpc2lvbi52YWx1ZSgpIDwgMTApOworCisgICAgYXV0byBiYWxhbmNlZE1p
Y3Jvc2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5taWNyb3NlY29uZHMoKSArIHN0ZDo6dHJ1bmMoc3Vi
ZHVyYXRpb25zLm5hbm9zZWNvbmRzKCkgLyAxMDAwKTsKKyAgICBhdXRvIGJhbGFuY2VkTmFub3Nl
Y29uZHMgPSBzdGQ6OmZtb2Qoc3ViZHVyYXRpb25zLm5hbm9zZWNvbmRzKCksIDEwMDApOworICAg
IGF1dG8gYmFsYW5jZWRNaWxsaXNlY29uZHMgPSBzdWJkdXJhdGlvbnMubWlsbGlzZWNvbmRzKCkg
KyBzdGQ6OnRydW5jKGJhbGFuY2VkTWljcm9zZWNvbmRzIC8gMTAwMCk7CisgICAgYmFsYW5jZWRN
aWNyb3NlY29uZHMgPSBzdGQ6OmZtb2QoYmFsYW5jZWRNaWNyb3NlY29uZHMsIDEwMDApOworICAg
IGF1dG8gYmFsYW5jZWRTZWNvbmRzID0gc3ViZHVyYXRpb25zLnNlY29uZHMoKSArIHN0ZDo6dHJ1
bmMoYmFsYW5jZWRNaWxsaXNlY29uZHMgLyAxMDAwKTsKKyAgICBiYWxhbmNlZE1pbGxpc2Vjb25k
cyA9IHN0ZDo6Zm1vZChiYWxhbmNlZE1pbGxpc2Vjb25kcywgMTAwMCk7CisKKyAgICAvLyBURU1Q
T1JBUlkhIChwZW5kaW5nIHNwZWMgZGlzY3Vzc2lvbiBhYm91dCBtYXhpbXVtIHZhbHVlcyBAIGh0
dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXRlbXBvcmFsL2lzc3Vlcy8xNjA0KQorICAg
IC8vIFdlICptdXN0KiBhdm9pZCBwcmludGluZyBhIG51bWJlciBpbiBzY2llbnRpZmljIG5vdGF0
aW9uLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSBwb3NzaWJsZSBmb3IgbnVtYmVycyA8IDFlMjEK
KyAgICAvLyAoYSB2YWx1ZSBvcmlnaW5hdGluZyBpbiB0aGUgTnVtYmVyI3RvRml4ZWQgc3BlYyBh
bmQgdXBoZWxkIGJ5IG91ciBOdW1iZXJUb1N0cmluZ0J1ZmZlcikuCisgICAgYXV0byBmb3JtYXRJ
bnRlZ2VyID0gW10oZG91YmxlIHZhbHVlKSAtPiBkb3VibGUgeworICAgICAgICBhdXRvIGFic1Zh
bHVlID0gc3RkOjphYnModmFsdWUpOworICAgICAgICByZXR1cm4gTElLRUxZKGFic1ZhbHVlIDwg
MWUyMSkgPyBhYnNWYWx1ZSA6IDFlMjEgLSA2NTUzNzsKKyAgICB9OworCisgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOworCisgICAgYXV0byBzaWduID0gVGVtcG9yYWxEdXJhdGlvbjo6c2lnbihz
dWJkdXJhdGlvbnMpOworICAgIGlmIChzaWduIDwgMCkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
Jy0nKTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCdQJyk7CisgICAgaWYgKHN1YmR1cmF0aW9ucy55
ZWFycygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9u
cy55ZWFycygpKSwgJ1knKTsKKyAgICBpZiAoc3ViZHVyYXRpb25zLm1vbnRocygpKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy5tb250aHMoKSksICdN
Jyk7CisgICAgaWYgKHN1YmR1cmF0aW9ucy53ZWVrcygpKQorICAgICAgICBidWlsZGVyLmFwcGVu
ZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy53ZWVrcygpKSwgJ1cnKTsKKyAgICBpZiAoc3Vi
ZHVyYXRpb25zLmRheXMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihz
dWJkdXJhdGlvbnMuZGF5cygpKSwgJ0QnKTsKKworICAgIC8vIFRoZSB6ZXJvIHZhbHVlIGlzIGRp
c3BsYXllZCBpbiBzZWNvbmRzLgorICAgIGF1dG8gdXNlc1NlY29uZHMgPSBiYWxhbmNlZFNlY29u
ZHMgfHwgYmFsYW5jZWRNaWxsaXNlY29uZHMgfHwgYmFsYW5jZWRNaWNyb3NlY29uZHMgfHwgYmFs
YW5jZWROYW5vc2Vjb25kcyB8fCAhc2lnbjsKKyAgICBpZiAoIXN1YmR1cmF0aW9ucy5ob3Vycygp
ICYmICFzdWJkdXJhdGlvbnMubWludXRlcygpICYmICF1c2VzU2Vjb25kcykKKyAgICAgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCdUJyk7CisgICAg
aWYgKHN1YmR1cmF0aW9ucy5ob3VycygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJ
bnRlZ2VyKHN1YmR1cmF0aW9ucy5ob3VycygpKSwgJ0gnKTsKKyAgICBpZiAoc3ViZHVyYXRpb25z
Lm1pbnV0ZXMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihzdWJkdXJh
dGlvbnMubWludXRlcygpKSwgJ00nKTsKKyAgICBpZiAodXNlc1NlY29uZHMpIHsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihiYWxhbmNlZFNlY29uZHMpKTsKKworICAgICAg
ICBhdXRvIGZyYWN0aW9uID0gc3RkOjphYnMoYmFsYW5jZWRNaWxsaXNlY29uZHMpICogMWU2ICsg
c3RkOjphYnMoYmFsYW5jZWRNaWNyb3NlY29uZHMpICogMWUzICsgc3RkOjphYnMoYmFsYW5jZWRO
YW5vc2Vjb25kcyk7CisgICAgICAgIGlmICgoIXByZWNpc2lvbiAmJiBmcmFjdGlvbikgfHwgKHBy
ZWNpc2lvbiAmJiBwcmVjaXNpb24udmFsdWUoKSkpIHsKKyAgICAgICAgICAgIGF1dG8gcGFkZGVk
ID0gbWFrZVN0cmluZygnLicsIHBhZCgnMCcsIDksIGZyYWN0aW9uKSk7CisgICAgICAgICAgICBp
ZiAocHJlY2lzaW9uKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZ1ZpZXco
cGFkZGVkKS5sZWZ0KHBhZGRlZC5sZW5ndGgoKSAtICg5IC0gcHJlY2lzaW9uLnZhbHVlKCkpKSk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxlbmd0aFdpdGhvdXRU
cmFpbGluZ1plcm9lcyA9IHBhZGRlZC5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
cGFkZGVkW2xlbmd0aFdpdGhvdXRUcmFpbGluZ1plcm9lcyAtIDFdID09ICcwJykKKyAgICAgICAg
ICAgICAgICAgICAgbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzLS07CisgICAgICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nVmlldyhwYWRkZWQpLmxlZnQobGVuZ3RoV2l0aG91dFRy
YWlsaW5nWmVyb2VzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBidWls
ZGVyLmFwcGVuZCgnUycpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5MjA0ZGM5NTM3YWFmNzYwMWUw
ZThkMTU3MDU2YmRhMTlhZjczNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIklTTzg2MDEuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb24gZmluYWwgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7
CisgICAgdXNpbmcgU3ViZHVyYXRpb25zID0gSVNPODYwMTo6RHVyYXRpb247CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
bS50ZW1wb3JhbER1cmF0aW9uU3BhY2U8bW9kZT4oKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVGVt
cG9yYWxEdXJhdGlvbiogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgU3ViZHVyYXRpb25zJiYpOwor
ICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uKiB0cnlDcmVhdGVJZlZhbGlkKEpTR2xvYmFsT2Jq
ZWN0KiwgU3ViZHVyYXRpb25zJiYsIFN0cnVjdHVyZSogPSBudWxscHRyKTsKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUp
OworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFRlbXBvcmFsRHVyYXRpb24qIHRv
RHVyYXRpb24oSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgVGVtcG9yYWxE
dXJhdGlvbiogZnJvbShKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU1Zh
bHVlIGNvbXBhcmUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKKworI2RlZmlu
ZSBKU0NfREVGSU5FX1RFTVBPUkFMX0RVUkFUSU9OX0ZJRUxEKG5hbWUsIGNhcGl0YWxpemVkTmFt
ZSkgXAorICAgIGRvdWJsZSBuYW1lIyNzKCkgY29uc3QgeyByZXR1cm4gbV9zdWJkdXJhdGlvbnMu
bmFtZSMjcygpOyB9IFwKKyAgICB2b2lkIHNldCMjY2FwaXRhbGl6ZWROYW1lIyNzKGRvdWJsZSB2
YWx1ZSkgeyBtX3N1YmR1cmF0aW9ucy5zZXQjI2NhcGl0YWxpemVkTmFtZSMjcyh2YWx1ZSk7IH0K
KyAgICBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX0RFRklORV9URU1QT1JBTF9EVVJBVElPTl9GSUVM
RCk7CisjdW5kZWYgSlNDX0RFRklORV9URU1QT1JBTF9EVVJBVElPTl9GSUVMRAorCisgICAgaW50
IHNpZ24oKSBjb25zdCB7IHJldHVybiBzaWduKG1fc3ViZHVyYXRpb25zKTsgfQorCisgICAgU3Vi
ZHVyYXRpb25zIHdpdGgoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogZHVyYXRpb25MaWtlKSBj
b25zdDsKKyAgICBTdWJkdXJhdGlvbnMgbmVnYXRlZCgpIGNvbnN0OworICAgIFN1YmR1cmF0aW9u
cyBhYnMoKSBjb25zdDsKKyAgICBTdWJkdXJhdGlvbnMgYWRkKEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSkgY29uc3Q7CisgICAgU3ViZHVyYXRpb25zIHN1YnRyYWN0KEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSkgY29uc3Q7CisgICAgU3ViZHVyYXRpb25zIHJvdW5kKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBvcHRpb25zKSBjb25zdDsKKyAgICBkb3VibGUgdG90YWwoSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIG9wdGlvbnMpIGNvbnN0OworICAgIFN0cmluZyB0b1N0cmluZyhKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgb3B0aW9ucykgY29uc3Q7CisgICAgU3RyaW5nIHRvU3RyaW5nKHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHByZWNpc2lvbiA9IHN0ZDo6bnVsbG9wdCkgY29uc3QgeyByZXR1
cm4gdG9TdHJpbmcobV9zdWJkdXJhdGlvbnMsIHByZWNpc2lvbik7IH0KKworcHJpdmF0ZToKKyAg
ICBUZW1wb3JhbER1cmF0aW9uKFZNJiwgU3RydWN0dXJlKiwgU3ViZHVyYXRpb25zJiYpOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U3ViZHVyYXRpb25zPiBwYXJzZShT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+Jik7CisgICAgc3RhdGljIFN1YmR1cmF0
aW9ucyBmcm9tT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKTsKKworICAgIHN0YXRp
YyBpbnQgc2lnbihjb25zdCBTdWJkdXJhdGlvbnMmKTsKKyAgICBzdGF0aWMgdm9pZCBiYWxhbmNl
KFN1YmR1cmF0aW9ucyYsIFRlbXBvcmFsVW5pdCBsYXJnZXN0VW5pdCk7CisgICAgc3RhdGljIGRv
dWJsZSByb3VuZChTdWJkdXJhdGlvbnMmLCBkb3VibGUgaW5jcmVtZW50LCBUZW1wb3JhbFVuaXQs
IFJvdW5kaW5nTW9kZSk7CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBTdWJkdXJh
dGlvbnMmLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwcmVjaXNpb24pOworCisgICAgVGVtcG9y
YWxVbml0IGxhcmdlc3RTdWJkdXJhdGlvbigpIGNvbnN0OworCisgICAgU3ViZHVyYXRpb25zIG1f
c3ViZHVyYXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVj
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yNWY0ODA0MGYzZjczNTc1NzkxY2ZkZThhZTNkYmQ5MGQwZDNk
Yzg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVt
cG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbkNv
bnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGVtcG9y
YWxEdXJhdGlvbi5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJM
RShUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IpOworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jRnJvbSk7CitzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5j
Q29tcGFyZSk7CisKK30KKworI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5s
dXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBUZW1wb3JhbER1cmF0
aW9uQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgJnRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvclRhYmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvcikgfTsKKworLyogU291cmNlIGZvciBUZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3IubHV0LmgKK0BiZWdpbiB0ZW1wb3JhbER1cmF0aW9uQ29u
c3RydWN0b3JUYWJsZQorICBmcm9tICAgICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3RvckZ1bmNGcm9tICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgY29tcGFyZSAg
ICAgICAgICB0ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jQ29tcGFyZSAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAyCitAZW5kCisqLworCitUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0
b3IqIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBl
KQoreworICAgIGF1dG8qIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yPih2bS5oZWFwKSkgVGVtcG9yYWxEdXJhdGlvbkNv
bnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlv
bih2bSwgZHVyYXRpb25Qcm90b3R5cGUpOworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKwor
U3RydWN0dXJlKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
eworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKEludGVybmFsRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Cit9CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNhbGxUZW1wb3JhbER1
cmF0aW9uKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdFRlbXBv
cmFsRHVyYXRpb24pOworCitUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OlRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlLCBjYWxsVGVtcG9yYWxEdXJhdGlvbiwgY29uc3RydWN0VGVtcG9yYWxE
dXJhdGlvbikKK3sKK30KKwordm9pZCBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSogZHVyYXRpb25Qcm90
b3R5cGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIDAsICJEdXJhdGlvbiJfcywg
UHJvcGVydHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCBkdXJhdGlvblByb3RvdHlwZSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwor
ICAgIGR1cmF0aW9uUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGNvbnN0cnVjdFRlbXBvcmFsRHVyYXRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IEpTT2JqZWN0KiBuZXdUYXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKTsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0s
IGR1cmF0aW9uU3RydWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFRlbXBvcmFsRHVyYXRp
b246OlN1YmR1cmF0aW9ucyBzdWJkdXJhdGlvbnM7CisgICAgYXV0byBjb3VudCA9IHN0ZDo6bWlu
PHNpemVfdD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIG51bWJlck9mVGVtcG9yYWxVbml0
cyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHN1
YmR1cmF0aW9uc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9JbnRlZ2Vy
T3JJbmZpbml0eShnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZShzdWJkdXJhdGlvbnNbaV0p
KQorICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1SYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJUZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0aWVzIG11c3QgYmUgZmluaXRlIl9zKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OnRyeUNy
ZWF0ZUlmVmFsaWQoZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHN1YmR1cmF0aW9ucyksIHN0cnVjdHVy
ZSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFRlbXBvcmFsRHVyYXRpb24s
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9y
Q2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJE
dXJhdGlvbiIpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3RvckZ1bmNGcm9tLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVGVtcG9y
YWxEdXJhdGlvbjo6ZnJvbShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKTsK
K30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rv
ckZ1bmNDb21wYXJlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVGVtcG9yYWxEdXJhdGlv
bjo6Y29tcGFyZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFt
ZS0+YXJndW1lbnQoMSkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc0MjQ1YTMxMDY5NWFjZDM1YjVkNmFhNTZlOTAwNGY3ZTNiNzAz
ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTsKKworY2xhc3Mg
VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rp
b24geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBJbnRlcm5hbEZ1bmN0aW9uOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICBzdGF0aWMgVGVtcG9yYWxEdXJh
dGlvbkNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBUZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0
ZToKKyAgICBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZSopOwor
fTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRlbXBvcmFsRHVyYXRpb25D
b25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTE4YzJkMTZjNDY4NTJmNDk5YTgyMzUxNWJk
YzZkNGJiNGVhMzk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAKQEAgLTAsMCArMSw0MDMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJU
ZW1wb3JhbER1cmF0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgSlNDX0RFQ0xB
UkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1dpdGgpOworc3Rh
dGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1
bmNOZWdhdGVkKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVGdW5jQWJzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWRkKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jU3VidHJhY3QpOworc3Rh
dGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1
bmNSb3VuZCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlRnVuY1RvdGFsKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9TdHJpbmcpOworc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb0pTT04pOwor
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUZ1bmNUb0xvY2FsZVN0cmluZyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih0
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1ZhbHVlT2YpOworc3RhdGljIEpTQ19ERUNMQVJF
X0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlclllYXJzKTsKK3N0
YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVH
ZXR0ZXJNb250aHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIodGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUdldHRlcldlZWtzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJEYXlzKTsKK3N0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJIb3Vy
cyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlR2V0dGVyTWludXRlcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUih0
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2Vjb25kcyk7CitzdGF0aWMgSlNDX0RFQ0xB
UkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWlsbGlzZWNv
bmRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVHZXR0ZXJNaWNyb3NlY29uZHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9H
RVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck5hbm9zZWNvbmRzKTsKK3N0YXRp
YyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0
ZXJTaWduKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGVHZXR0ZXJCbGFuayk7CisKK30KKworI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGUubHV0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8g
VGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6c19pbmZvID0geyAiVGVtcG9yYWwuRHVyYXRpb24i
LCAmQmFzZTo6c19pbmZvLCAmZHVyYXRpb25Qcm90b3R5cGVUYWJsZSwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKSB9OworCisvKiBTb3VyY2Ug
Zm9yIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUubHV0LmgKK0BiZWdpbiBkdXJhdGlvblByb3Rv
dHlwZVRhYmxlCisgIHdpdGggICAgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1
bmNXaXRoICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICBuZWdhdGVkICAgICAg
ICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jTmVnYXRlZCAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDAKKyAgYWJzICAgICAgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlRnVuY0FicyAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAwCisgIGFkZCAgICAg
ICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNBZGQgICAgICAgICAgICAgICAg
RG9udEVudW18RnVuY3Rpb24gMQorICBzdWJ0cmFjdCAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVGdW5jU3VidHJhY3QgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgcm91
bmQgICAgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1JvdW5kICAgICAgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgIHRvdGFsICAgICAgICAgICAgdGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUZ1bmNUb3RhbCAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQor
ICB0b1N0cmluZyAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9TdHJpbmcg
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgdG9KU09OICAgICAgICAgICB0ZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlRnVuY1RvSlNPTiAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlv
biAwCisgIHRvTG9jYWxlU3RyaW5nICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb0xv
Y2FsZVN0cmluZyAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICB2YWx1ZU9mICAgICAgICAgIHRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVmFsdWVPZiAgICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uIDAKKyAgeWVhcnMgICAgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0
dGVyWWVhcnMgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBt
b250aHMgICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNb250aHMgICAg
ICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIHdlZWtzICAgICAgICAg
ICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlcldlZWtzICAgICAgICAgICAgRG9udEVu
dW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgZGF5cyAgICAgICAgICAgICB0ZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlR2V0dGVyRGF5cyAgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxD
dXN0b21BY2Nlc3NvcgorICBob3VycyAgICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVHZXR0ZXJIb3VycyAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29y
CisgIG1pbnV0ZXMgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0
ZXMgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgc2Vjb25kcyAg
ICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2Vjb25kcyAgICAgICAgICBE
b250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBtaWxsaXNlY29uZHMgICAgIHRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaWxsaXNlY29uZHMgICAgIERvbnRFbnVtfFJlYWRP
bmx5fEN1c3RvbUFjY2Vzc29yCisgIG1pY3Jvc2Vjb25kcyAgICAgdGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUdldHRlck1pY3Jvc2Vjb25kcyAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNj
ZXNzb3IKKyAgbmFub3NlY29uZHMgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVy
TmFub3NlY29uZHMgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBzaWdu
ICAgICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJTaWduICAgICAgICAg
ICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIGJsYW5rICAgICAgICAgICAg
dGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckJsYW5rICAgICAgICAgICAgRG9udEVudW18
UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKK0BlbmQKKyovCisKK1RlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGUqIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQoreworICAgIGF1dG8qIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBUZW1wb3JhbER1
cmF0aW9uUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitUZW1wb3JhbER1cmF0aW9uUHJv
dG90eXBlOjpUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgVGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAg
IEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOworfQorCitKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNXaXRoLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9y
YWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0
aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLndpdGggY2FsbGVkIG9uIHZhbHVlIHRoYXQn
cyBub3QgYSBEdXJhdGlvbiJfcyk7CisgICAgCisgICAgSlNWYWx1ZSBkdXJhdGlvbkxpa2UgPSBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGlmICghZHVyYXRpb25MaWtlLmlzT2JqZWN0KCkp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJG
aXJzdCBhcmd1bWVudCB0byBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUud2l0aCBtdXN0IGJl
IGFuIG9iamVjdCJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwg
ZHVyYXRpb24tPndpdGgoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChkdXJhdGlvbkxpa2UpKSkpKTsK
K30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVG
dW5jTmVnYXRlZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBq
c0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5uZWdhdGVk
IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKSwgZHVyYXRpb24tPm5lZ2F0ZWQoKSkpOworfQorCitKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNBYnMsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxU
ZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICgh
ZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYWJzIGNhbGxlZCBvbiB2YWx1ZSB0
aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShU
ZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1
cmUoKSwgZHVyYXRpb24tPmFicygpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY0FkZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwg
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0
aW9uLnByb3RvdHlwZS5hZGQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJf
cyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShUZW1w
b3JhbER1cmF0aW9uOjp0cnlDcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgZHVyYXRpb24tPmFk
ZChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSkpOworfQorCitKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNTdWJ0cmFjdCwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0
PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYg
KCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5zdWJ0cmFjdCBjYWxsZWQgb24g
dmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246OnRyeUNyZWF0ZUlmVmFs
aWQoZ2xvYmFsT2JqZWN0LCBkdXJhdGlvbi0+c3VidHJhY3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHRlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jUm91bmQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlv
bi5wcm90b3R5cGUucm91bmQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJf
cyk7CisKKyAgICBhdXRvIG9wdGlvbnMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGlm
IChvcHRpb25zLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUucm91bmQg
cmVxdWlyZXMgYW4gb3B0aW9ucyBhcmd1bWVudCJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVhdGVJZlZh
bGlkKGdsb2JhbE9iamVjdCwgZHVyYXRpb24tPnJvdW5kKGdsb2JhbE9iamVjdCwgb3B0aW9ucykp
KSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlRnVuY1RvdGFsLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvdGFs
IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgYXV0byBv
cHRpb25zID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBpZiAob3B0aW9ucy5pc1VuZGVm
aW5lZCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvdGFsIHJlcXVpcmVzIGFuIG9wdGlv
bnMgYXJndW1lbnQiX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPnRvdGFsKGdsb2JhbE9iamVjdCwgb3B0aW9ucykp
KSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlRnVuY1RvU3RyaW5nLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlv
biA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRv
U3RyaW5nIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1
cmF0aW9uLT50b1N0cmluZyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSkp
OworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUZ1bmNUb0pTT04sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0g
anNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudG9KU09O
IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgZHVyYXRpb24tPnRvU3RyaW5nKCkpKTsKK30K
KworLy8gVGhpcyB3aWxsIGJlIHBhcnQgb2YgdGhlIEVDTUEtNDAyIEludGwuRHVyYXRpb25Gb3Jt
YXQgcHJvcG9zYWw7IHVudGlsIHRoZW4sIHdlIGp1c3QgZm9sbG93IEVDTUEtMjYyIGluIG1pbWlj
a2luZyB0b0pTT04uCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUZ1bmNUb0xvY2FsZVN0cmluZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0
byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS50b0xvY2FsZVN0cmluZyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0
aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGR1cmF0
aW9uLT50b1N0cmluZygpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlRnVuY1ZhbHVlT2YsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS52YWx1ZU9mIG11c3Qgbm90IGJlIGNhbGxlZC4gVG8gY29tcGFyZSBEdXJhdGlvbiB2
YWx1ZXMsIHVzZSBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlIl9zKTsKK30KKworSlNDX0RFRklO
RV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJZZWFycywgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24g
PSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUu
eWVhcnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT55ZWFycygpKSk7Cit9CisK
K0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVy
TW9udGhzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRv
KiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9u
LnByb3RvdHlwZS5tb250aHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJf
cyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5tb250
aHMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUdldHRlcldlZWtzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+
KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBv
cmFsLkR1cmF0aW9uLnByb3RvdHlwZS53ZWVrcyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBh
IER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVy
YXRpb24tPndlZWtzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKHRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJEYXlzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxE
dXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJh
dGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5kYXlzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0
J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihkdXJhdGlvbi0+ZGF5cygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUih0
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVySG91cnMsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkpCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxU
ZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBp
ZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmhvdXJzIGNhbGxlZCBvbiB2
YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihkdXJhdGlvbi0+aG91cnMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RP
TV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pbnV0ZXMsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNE
eW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm1pbnV0
ZXMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taW51dGVzKCkpKTsKK30KKwor
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJT
ZWNvbmRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRv
KiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9u
LnByb3RvdHlwZS5zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24i
X3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+c2Vj
b25kcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlR2V0dGVyTWlsbGlzZWNvbmRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxE
dXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJh
dGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5taWxsaXNlY29uZHMgY2FsbGVkIG9uIHZh
bHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taWxsaXNlY29uZHMoKSkpOworfQorCitKU0NfREVGSU5F
X0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pY3Jvc2Vjb25k
cywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVy
YXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90
b3R5cGUubWljcm9zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24i
X3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+bWlj
cm9zZWNvbmRzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVHZXR0ZXJOYW5vc2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBv
cmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICgh
ZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubmFub3NlY29uZHMgY2FsbGVkIG9u
IHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5uYW5vc2Vjb25kcygpKSk7Cit9CisKK0pTQ19ERUZJ
TkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2lnbiwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24g
PSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUu
c2lnbiBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPnNpZ24oKSkpOworfQorCitK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckJs
YW5rLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBk
dXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS5ibGFuayBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsK
KworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFkdXJhdGlvbi0+c2lnbigp
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmY4Nzc1ZWViMDdiZTYwMmNmYWVmMDM4Nzk0ZTk3YzYyOTM1NGQzNmUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFp
bk9iamVjdFNwYWNlOworICAgIH0KKworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uUHJvdG90
eXBlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFS
RV9JTkZPOworCitwcml2YXRlOgorICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUoVk0mLCBT
dHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBvcmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFs
T2JqZWN0LmNwcAppbmRleCA4ZjQ4MjJiNzY0NGM0YTg0MWFkMDYzZjYwNmYwZjMzYzc4MmMzM2U2
Li45NTM1NzE5ZjdlYzFhMGU5NjU0MThhNTRhZDM1MGM3ZWJlNjFjNDk5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3QuY3BwCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTIgKzIzLDE1IEBACiAjaW5j
bHVkZSAiVGVtcG9yYWxPYmplY3QuaCIKIAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgi
CisjaW5jbHVkZSAiSW50bE9iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3RJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiVGVtcG9y
YWxDYWxlbmRhckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxDYWxlbmRhclByb3Rv
dHlwZS5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJUZW1wb3JhbE5vdy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ4LDYgKzUyLDEzIEBAIHN0YXRpYyBKU1ZhbHVlIGNy
ZWF0ZU5vd09iamVjdChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIFRlbXBv
cmFsTm93OjpjcmVhdGUodm0sIFRlbXBvcmFsTm93OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2Jh
bE9iamVjdCkpOwogfQogCitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVEdXJhdGlvbkNvbnN0cnVjdG9y
KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBUZW1wb3JhbE9iamVjdCogdGVtcG9y
YWxPYmplY3QgPSBqc0Nhc3Q8VGVtcG9yYWxPYmplY3QqPihvYmplY3QpOworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0ZW1wb3JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0KHZtKTsK
KyAgICByZXR1cm4gVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIFRlbXBv
cmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5cGUoKSksIGpzQ2FzdDxUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlKj4oZ2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0cnVjdHVyZSgpLT5zdG9yZWRQ
cm90b3R5cGVPYmplY3QoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2luY2x1ZGUg
IlRlbXBvcmFsT2JqZWN0Lmx1dC5oIgpAQCAtNTgsNiArNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IEBiZWdpbiB0ZW1wb3JhbE9iamVjdFRhYmxlCiAgIENhbGVuZGFyICAgICAgIGNyZWF0ZUNhbGVu
ZGFyQ29uc3RydWN0b3IgICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBOb3cgICAg
ICAgICAgICBjcmVhdGVOb3dPYmplY3QgICAgICAgICAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5
Q2FsbGJhY2sKKyAgRHVyYXRpb24gICAgICAgY3JlYXRlRHVyYXRpb25Db25zdHJ1Y3RvciAgICAg
ICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiBAZW5kCiAqLwogCkBAIC04Nyw0ICs5OSwyMzUg
QEAgdm9pZCBUZW1wb3JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIEpTQ19U
T19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwogfQogCitzdGF0aWMgU3RyaW5nVmll
dyBzaW5ndWxhclVuaXQoU3RyaW5nVmlldyB1bml0KQoreworICAgIC8vIFBsdXJhbHMgYXJlIGFs
bG93ZWQsIGJ1dCB0aGFua2Z1bGx5IHRoZXkncmUgYWxsIGp1c3QgYSBzaW1wbGUgLXMuCisgICAg
cmV0dXJuIHVuaXQuZW5kc1dpdGgoInMiKSA/IHVuaXQubGVmdCh1bml0Lmxlbmd0aCgpIC0gMSkg
OiB1bml0OworfQorCitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5pdD4gdGVtcG9yYWxVbml0VHlw
ZShTdHJpbmdWaWV3IHVuaXQpCit7CisgICAgU3RyaW5nVmlldyBzaW5ndWxhciA9IHNpbmd1bGFy
VW5pdCh1bml0KTsKKworICAgIGlmIChzaW5ndWxhciA9PSAieWVhciIpCisgICAgICAgIHJldHVy
biBUZW1wb3JhbFVuaXQ6OlllYXI7CisgICAgaWYgKHNpbmd1bGFyID09ICJtb250aCIpCisgICAg
ICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok1vbnRoOworICAgIGlmIChzaW5ndWxhciA9PSAid2Vl
ayIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OldlZWs7CisgICAgaWYgKHNpbmd1bGFy
ID09ICJkYXkiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpEYXk7CisgICAgaWYgKHNp
bmd1bGFyID09ICJob3VyIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6SG91cjsKKyAg
ICBpZiAoc2luZ3VsYXIgPT0gIm1pbnV0ZSIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6
Ok1pbnV0ZTsKKyAgICBpZiAoc2luZ3VsYXIgPT0gInNlY29uZCIpCisgICAgICAgIHJldHVybiBU
ZW1wb3JhbFVuaXQ6OlNlY29uZDsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm1pbGxpc2Vjb25kIikK
KyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQ7CisgICAgaWYgKHNpbmd1
bGFyID09ICJtaWNyb3NlY29uZCIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok1pY3Jv
c2Vjb25kOworICAgIGlmIChzaW5ndWxhciA9PSAibmFub3NlY29uZCIpCisgICAgICAgIHJldHVy
biBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQ7CisgICAgCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKK30KKworLy8gVG9MYXJnZXN0VGVtcG9yYWxVbml0ICggbm9ybWFsaXplZE9wdGlvbnMsIGRp
c2FsbG93ZWRVbml0cywgZmFsbGJhY2sgWyAsIGF1dG9WYWx1ZSBdICkKKy8vIGh0dHBzOi8vdGMz
OS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRvbGFyZ2VzdHRlbXBvcmFsdW5p
dAorc3RkOjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFsTGFyZ2VzdFVuaXQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxUZW1wb3JhbFVuaXQ+IGRpc2FsbG93ZWRVbml0cywgVGVtcG9yYWxVbml0IGF1dG9W
YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIGxhcmdlc3RVbml0ID0g
aW50bFN0cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMt
Pmxhcmdlc3RVbml0LCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAoIWxhcmdlc3RVbml0KQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKGxhcmdlc3RVbml0ID09ICJhdXRv
Il9zKQorICAgICAgICByZXR1cm4gYXV0b1ZhbHVlOworCisgICAgYXV0byB1bml0VHlwZSA9IHRl
bXBvcmFsVW5pdFR5cGUobGFyZ2VzdFVuaXQpOworICAgIGlmICghdW5pdFR5cGUpIHsKKyAgICAg
ICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJsYXJnZXN0VW5pdCBpcyBh
biBpbnZhbGlkIFRlbXBvcmFsIHVuaXQiX3MpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIH0KKworICAgIGlmIChkaXNhbGxvd2VkVW5pdHMuc2l6ZSgpICYmIHN0ZDo6ZmluZChk
aXNhbGxvd2VkVW5pdHMuYmVnaW4oKSwgZGlzYWxsb3dlZFVuaXRzLmVuZCgpLCB1bml0VHlwZS52
YWx1ZSgpKSAhPSBkaXNhbGxvd2VkVW5pdHMuZW5kKCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJsYXJnZXN0VW5pdCBpcyBhIGRpc2FsbG93ZWQgdW5p
dCJfcyk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgcmV0dXJu
IHVuaXRUeXBlOworfQorCisvLyBUb1NtYWxsZXN0VGVtcG9yYWxVbml0ICggbm9ybWFsaXplZE9w
dGlvbnMsIGRpc2FsbG93ZWRVbml0cywgZmFsbGJhY2sgKQorLy8gaHR0cHM6Ly90YzM5LmVzL3By
b3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtdG9zbWFsbGVzdHRlbXBvcmFsdW5pdAorc3Rk
OjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFsU21hbGxlc3RVbml0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8VGVtcG9yYWxVbml0PiBkaXNhbGxvd2VkVW5pdHMpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIFN0cmluZyBzbWFsbGVzdFVuaXQgPSBpbnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9iamVj
dCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+c21hbGxlc3RVbml0LCB7IH0sIG51bGxwdHIs
IG51bGxwdHIpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7
CisKKyAgICBpZiAoIXNtYWxsZXN0VW5pdCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIGF1dG8gdW5pdFR5cGUgPSB0ZW1wb3JhbFVuaXRUeXBlKHNtYWxsZXN0VW5pdCk7Cisg
ICAgaWYgKCF1bml0VHlwZSkgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgInNtYWxsZXN0VW5pdCBpcyBhbiBpbnZhbGlkIFRlbXBvcmFsIHVuaXQiX3MpOwor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChkaXNhbGxvd2Vk
VW5pdHMuc2l6ZSgpICYmIHN0ZDo6ZmluZChkaXNhbGxvd2VkVW5pdHMuYmVnaW4oKSwgZGlzYWxs
b3dlZFVuaXRzLmVuZCgpLCB1bml0VHlwZS52YWx1ZSgpKSAhPSBkaXNhbGxvd2VkVW5pdHMuZW5k
KCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJzbWFs
bGVzdFVuaXQgaXMgYSBkaXNhbGxvd2VkIHVuaXQiX3MpOworICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIH0KKworICAgIHJldHVybiB1bml0VHlwZTsKK30KKworLy8gR2V0U3RyaW5n
T3JOdW1iZXJPcHRpb24obm9ybWFsaXplZE9wdGlvbnMsICJmcmFjdGlvbmFsU2Vjb25kRGlnaXRz
IiwgwqsgImF1dG8iIMK7LCAwLCA5LCAiYXV0byIpCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9z
YWwtdGVtcG9yYWwvI3NlYy1nZXRzdHJpbmdvcm51bWJlcm9wdGlvbgorc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gdGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25kRGlnaXRzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBpZiAoIW9wdGlvbnMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBK
U1ZhbHVlIHZhbHVlID0gb3B0aW9ucy0+Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1l
cy0+ZnJhY3Rpb25hbFNlY29uZERpZ2l0cyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgc3RkOjpudWxsb3B0KTsKKworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKKyAg
ICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUuYXNOdW1iZXIoKTsKKyAgICAgICAgaWYg
KGRvdWJsZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IDkpIHsKKyAgICAgICAgICAgIHRocm93
UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZnJhY3Rpb25hbFNlY29uZERpZ2l0cyBp
cyBvdXQgb2YgcmFuZ2UiX3MpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZG91YmxlVmFs
dWUpOworICAgIH0KKworICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5n
KGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxs
b3B0KTsKKworICAgIGlmIChzdHJpbmdWYWx1ZSAhPSAiYXV0byIpCisgICAgICAgIHRocm93UmFu
Z2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZnJhY3Rpb25hbFNlY29uZERpZ2l0cyBpcyBv
dXQgb2YgcmFuZ2UiX3MpOworCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworLy8gVG9T
ZWNvbmRzU3RyaW5nUHJlY2lzaW9uICggbm9ybWFsaXplZE9wdGlvbnMgKQorLy8gaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtdG9zZWNvbmRzc3RyaW5ncHJl
Y2lzaW9uCitQcmVjaXNpb25EYXRhIHNlY29uZHNTdHJpbmdQcmVjaXNpb24oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGF1dG8gc21hbGxlc3RVbml0ID0gdGVtcG9yYWxTbWFsbGVzdFVuaXQoZ2xvYmFs
T2JqZWN0LCBvcHRpb25zLCB7IFRlbXBvcmFsVW5pdDo6WWVhciwgVGVtcG9yYWxVbml0OjpNb250
aCwgVGVtcG9yYWxVbml0OjpXZWVrLCBUZW1wb3JhbFVuaXQ6OkRheSwgVGVtcG9yYWxVbml0OjpI
b3VyLCBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgaWYgKHNtYWxsZXN0VW5pdCkgeworICAgICAgICBzd2l0Y2ggKHNt
YWxsZXN0VW5pdC52YWx1ZSgpKSB7CisgICAgICAgIGNhc2UgVGVtcG9yYWxVbml0OjpTZWNvbmQ6
CisgICAgICAgICAgICByZXR1cm4geyAwLCBUZW1wb3JhbFVuaXQ6OlNlY29uZCwgMSB9OworICAg
ICAgICBjYXNlIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4g
eyAzLCBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kLCAxIH07CisgICAgICAgIGNhc2UgVGVtcG9y
YWxVbml0OjpNaWNyb3NlY29uZDoKKyAgICAgICAgICAgIHJldHVybiB7IDYsIFRlbXBvcmFsVW5p
dDo6TWljcm9zZWNvbmQsIDEgfTsKKyAgICAgICAgY2FzZSBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNv
bmQ6CisgICAgICAgICAgICByZXR1cm4geyA5LCBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQsIDEg
fTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgfQorCisgICAg
YXV0byBwcmVjaXNpb24gPSB0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmREaWdpdHMoZ2xvYmFsT2Jq
ZWN0LCBvcHRpb25zKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgaWYgKCFwcmVjaXNpb24pCisgICAgICAgIHJldHVybiB7IHN0ZDo6bnVsbG9wdCwgVGVtcG9y
YWxVbml0OjpOYW5vc2Vjb25kLCAxIH07CisKKyAgICB1bnNpZ25lZCBkaWdpdHMgPSBwcmVjaXNp
b24udmFsdWUoKTsKKyAgICBpZiAoIWRpZ2l0cykKKyAgICAgICAgcmV0dXJuIHsgMCwgVGVtcG9y
YWxVbml0OjpTZWNvbmQsIDEgfTsKKworICAgIGlmIChkaWdpdHMgPD0gMykKKyAgICAgICAgcmV0
dXJuIHsgZGlnaXRzLCBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kLCBzdGQ6OnBvdygxMCwgMyAt
IGRpZ2l0cykgfTsKKworICAgIGlmIChkaWdpdHMgPD0gNikKKyAgICAgICAgcmV0dXJuIHsgZGln
aXRzLCBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kLCBzdGQ6OnBvdygxMCwgNiAtIGRpZ2l0cykg
fTsKKworICAgIEFTU0VSVChkaWdpdHMgPD0gOSk7CisgICAgcmV0dXJuIHsgZGlnaXRzLCBUZW1w
b3JhbFVuaXQ6Ok5hbm9zZWNvbmQsIHN0ZDo6cG93KDEwLCA5IC0gZGlnaXRzKSB9OworfQorCisv
LyBNYXhpbXVtVGVtcG9yYWxEdXJhdGlvblJvdW5kaW5nSW5jcmVtZW50ICggdW5pdCApCisvLyBo
dHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC1tYXhpbXVtdGVt
cG9yYWxkdXJhdGlvbnJvdW5kaW5naW5jcmVtZW50CitzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gbWF4
aW11bVJvdW5kaW5nSW5jcmVtZW50KFRlbXBvcmFsVW5pdCB1bml0KQoreworICAgIGlmICh1bml0
IDw9IFRlbXBvcmFsVW5pdDo6RGF5KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IGlmICh1bml0ID09IFRlbXBvcmFsVW5pdDo6SG91cikKKyAgICAgICAgcmV0dXJuIDI0OworICAg
IGlmICh1bml0IDw9IFRlbXBvcmFsVW5pdDo6U2Vjb25kKQorICAgICAgICByZXR1cm4gNjA7Cisg
ICAgcmV0dXJuIDEwMDA7Cit9CisKKy8vIFRvVGVtcG9yYWxSb3VuZGluZ0luY3JlbWVudCAoIG5v
cm1hbGl6ZWRPcHRpb25zLCBkaXZpZGVuZCwgaW5jbHVzaXZlICkKKy8vIGh0dHBzOi8vdGMzOS5l
cy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRvdGVtcG9yYWxyb3VuZGluZ2luY3Jl
bWVudAorZG91YmxlIHRlbXBvcmFsUm91bmRpbmdJbmNyZW1lbnQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBkaXZp
ZGVuZCwgYm9vbCBpbmNsdXNpdmUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGRvdWJs
ZSBtYXhpbXVtOworICAgIGlmICghZGl2aWRlbmQpCisgICAgICAgIG1heGltdW0gPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7CisgICAgZWxzZSBpZiAoaW5jbHVzaXZl
KQorICAgICAgICBtYXhpbXVtID0gZGl2aWRlbmQudmFsdWUoKTsKKyAgICBlbHNlIGlmIChkaXZp
ZGVuZC52YWx1ZSgpID4gMSkKKyAgICAgICAgbWF4aW11bSA9IGRpdmlkZW5kLnZhbHVlKCkgLSAx
OworICAgIGVsc2UKKyAgICAgICAgbWF4aW11bSA9IDE7CisKKyAgICBkb3VibGUgaW5jcmVtZW50
ID0gaW50bE51bWJlck9wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFt
ZXMtPnJvdW5kaW5nSW5jcmVtZW50LCAxLCBtYXhpbXVtLCAxKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCAwKTsKKworICAgIGluY3JlbWVudCA9IHN0ZDo6Zmxvb3IoaW5jcmVtZW50
KTsKKyAgICBpZiAoZGl2aWRlbmQgJiYgc3RkOjpmbW9kKGRpdmlkZW5kLnZhbHVlKCksIGluY3Jl
bWVudCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIG1h
a2VTdHJpbmcoInJvdW5kaW5nSW5jcmVtZW50IHZhbHVlIGRvZXMgbm90IGRpdmlkZSAiX3MsIGRp
dmlkZW5kLnZhbHVlKCksICIgZXZlbmx5Il9zKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIHJldHVybiBpbmNyZW1lbnQ7Cit9CisKKy8vIFJvdW5kTnVtYmVyVG9JbmNyZW1lbnQg
KCB4LCBpbmNyZW1lbnQsIHJvdW5kaW5nTW9kZSApCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9z
YWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC1yb3VuZG51bWJlcnRvaW5jcmVtZW50Citkb3VibGUg
cm91bmROdW1iZXJUb0luY3JlbWVudChkb3VibGUgeCwgZG91YmxlIGluY3JlbWVudCwgUm91bmRp
bmdNb2RlIG1vZGUpCit7CisgICAgYXV0byBxdW90aWVudCA9IHggLyBpbmNyZW1lbnQ7CisgICAg
c3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBSb3VuZGluZ01vZGU6OkNlaWw6CisgICAgICAgIHJl
dHVybiAtc3RkOjpmbG9vcigtcXVvdGllbnQpICogaW5jcmVtZW50OworICAgIGNhc2UgUm91bmRp
bmdNb2RlOjpGbG9vcjoKKyAgICAgICAgcmV0dXJuIHN0ZDo6Zmxvb3IocXVvdGllbnQpICogaW5j
cmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpUcnVuYzoKKyAgICAgICAgcmV0dXJuIHN0
ZDo6dHJ1bmMocXVvdGllbnQpICogaW5jcmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpI
YWxmRXhwYW5kOgorICAgICAgICByZXR1cm4gc3RkOjpyb3VuZChxdW90aWVudCkgKiBpbmNyZW1l
bnQ7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5oCmluZGV4IDFlZTk5OTRjMmI4YzA1ZTQ2ZDE2
MTA2YTY2ZjAyYjk3NThiOGIyODMuLjcyNDNjOWJhNTg0MzI2MmQyZDBjYmI4MTkzM2Y0Y2RkMTMw
OGZiNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFs
T2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmpl
Y3QuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSwg
Uy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMSBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjMs
NiArMjQsMjcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNkZWZpbmUgSlNDX1RFTVBPUkFMX1VO
SVRTKG1hY3JvKSBcCisgICAgbWFjcm8oeWVhciwgWWVhcikgXAorICAgIG1hY3JvKG1vbnRoLCBN
b250aCkgXAorICAgIG1hY3JvKHdlZWssIFdlZWspIFwKKyAgICBtYWNybyhkYXksIERheSkgXAor
ICAgIG1hY3JvKGhvdXIsIEhvdXIpIFwKKyAgICBtYWNybyhtaW51dGUsIE1pbnV0ZSkgXAorICAg
IG1hY3JvKHNlY29uZCwgU2Vjb25kKSBcCisgICAgbWFjcm8obWlsbGlzZWNvbmQsIE1pbGxpc2Vj
b25kKSBcCisgICAgbWFjcm8obWljcm9zZWNvbmQsIE1pY3Jvc2Vjb25kKSBcCisgICAgbWFjcm8o
bmFub3NlY29uZCwgTmFub3NlY29uZCkgXAorCitlbnVtIGNsYXNzIFRlbXBvcmFsVW5pdCA6IHVp
bnQ4X3QgeworI2RlZmluZSBKU0NfREVGSU5FX1RFTVBPUkFMX1VOSVRfRU5VTShuYW1lLCBjYXBp
dGFsaXplZE5hbWUpIGNhcGl0YWxpemVkTmFtZSwKKyAgICBKU0NfVEVNUE9SQUxfVU5JVFMoSlND
X0RFRklORV9URU1QT1JBTF9VTklUX0VOVU0pCisjdW5kZWYgSlNDX0RFRklORV9URU1QT1JBTF9V
TklUX0VOVU0KK307CisjZGVmaW5lIEpTQ19DT1VOVF9URU1QT1JBTF9VTklUUyhuYW1lLCBjYXBp
dGFsaXplZE5hbWUpICsgMQorc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlRlbXBv
cmFsVW5pdHMgPSAwIEpTQ19URU1QT1JBTF9VTklUUyhKU0NfQ09VTlRfVEVNUE9SQUxfVU5JVFMp
OworI3VuZGVmIEpTQ19DT1VOVF9URU1QT1JBTF9VTklUUworCiBjbGFzcyBUZW1wb3JhbE9iamVj
dCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNOb25GaW5hbE9iamVjdDsKQEAgLTQ1LDQgKzY3LDI2IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogfTsKIAorZW51bSBjbGFzcyBSb3VuZGluZ01vZGUg
OiB1aW50OF90IHsKKyAgICBDZWlsLAorICAgIEZsb29yLAorICAgIFRydW5jLAorICAgIEhhbGZF
eHBhbmQKK307CisKK3N0cnVjdCBQcmVjaXNpb25EYXRhIHsKKyAgICBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBwcmVjaXNpb247CisgICAgVGVtcG9yYWxVbml0IHVuaXQ7CisgICAgZG91YmxlIGlu
Y3JlbWVudDsKK307CisKK3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1wb3JhbFVuaXRU
eXBlKFN0cmluZ1ZpZXcpOworc3RkOjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFsTGFy
Z2VzdFVuaXQoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucywgc3RkOjppbml0aWFs
aXplcl9saXN0PFRlbXBvcmFsVW5pdD4gZGlzYWxsb3dlZFVuaXRzLCBUZW1wb3JhbFVuaXQgYXV0
b1ZhbHVlKTsKK3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1wb3JhbFNtYWxsZXN0VW5p
dChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8VGVtcG9yYWxVbml0PiBkaXNhbGxvd2VkVW5pdHMpOworc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gdGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25kRGlnaXRzKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmpl
Y3QqIG9wdGlvbnMpOworUHJlY2lzaW9uRGF0YSBzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKEpTR2xv
YmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlvbnMpOworc3RkOjpvcHRpb25hbDxkb3VibGU+IG1h
eGltdW1Sb3VuZGluZ0luY3JlbWVudChUZW1wb3JhbFVuaXQpOworZG91YmxlIHRlbXBvcmFsUm91
bmRpbmdJbmNyZW1lbnQoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucywgc3RkOjpv
cHRpb25hbDxkb3VibGU+IGRpdmlkZW5kLCBib29sIGluY2x1c2l2ZSk7Citkb3VibGUgcm91bmRO
dW1iZXJUb0luY3JlbWVudChkb3VibGUsIGRvdWJsZSBpbmNyZW1lbnQsIFJvdW5kaW5nTW9kZSk7
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmlu
ZGV4IDMwOTNlMTE1NWI2ZGZkY2FmNTdmMGQ1MGRkYzc4MmZiZDE1YzlmMzguLjNiZjY5MTQ4MzNi
ZDA0NjNjYzI5ZjA3MzUzODVlOGIyYTg2ZTM0YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKQEAgLTE2Myw2ICsxNjMsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMu
aCIKICNpbmNsdWRlICJTeW1ib2xPYmplY3QuaCIKICNpbmNsdWRlICJUZW1wb3JhbENhbGVuZGFy
LmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgogI2luY2x1ZGUgIlRlc3RSdW5uZXJV
dGlscy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQcm9m
aWxlci5oIgpAQCAtMTYxOSw2ICsxNjIwLDcgQEAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKGludGxSZWxhdGl2ZVRpbWVGb3JtYXRTcGFjZSwgaW50bFJlbGF0aXYKIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudEl0ZXJhdG9y
U3BhY2UsIGludGxTZWdtZW50SXRlcmF0b3JIZWFwQ2VsbFR5cGUuZ2V0KCksIEludGxTZWdtZW50
SXRlcmF0b3IpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNl
Z21lbnRlclNwYWNlLCBpbnRsU2VnbWVudGVySGVhcENlbGxUeXBlLmdldCgpLCBJbnRsU2VnbWVu
dGVyKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50
c1NwYWNlLCBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGUuZ2V0KCksIEludGxTZWdtZW50cykKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh0ZW1wb3JhbER1cmF0aW9uU3Bh
Y2UsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIFRlbXBvcmFsRHVyYXRpb24pCiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpz
VG9XYXNtSUNDYWxsZWVTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUb1dhc21JQ0Nh
bGxlZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJs
eUNvZGVCbG9ja1NwYWNlLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5nZXQoKSwg
SlNXZWJBc3NlbWJseUNvZGVCbG9jaykgLy8gSGFzaDoweDlhZDk5NWNkCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAppbmRleCBhYTc1NTk3ZWQ4YzUxMmU5ZWNiZWY3NGU0NjA2NmYyNjJlZDEz
NDRhLi42YjNhMGVmZDQ1N2YyMTg2MmEwYmFmYzVhYjdkMWZmZWI4ZWY2ODUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTE4NSw2ICsxODUsNyBAQCBjbGFzcyBTdHJ1Y3R1cmU7
CiBjbGFzcyBSZWdFeHA7CiAjZW5kaWYKIGNsYXNzIFN5bWJvbDsKK2NsYXNzIFRlbXBvcmFsRHVy
YXRpb247CiBjbGFzcyBUeXBlZEFycmF5Q29udHJvbGxlcjsKIGNsYXNzIFVubGlua2VkQ29kZUJs
b2NrOwogY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOwpAQCAtNjE3LDYgKzYxOCw3IEBAIHB1
YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxTZWdtZW50
SXRlcmF0b3JTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGlu
dGxTZWdtZW50ZXJTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KGludGxTZWdtZW50c1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIodGVtcG9yYWxEdXJhdGlvblNwYWNlKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGpzVG9XYXNtSUNDYWxsZWVTcGFjZSkK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5Q29kZUJs
b2NrU3BhY2UpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDEzNjQ4YjQxNGUyMmNkNmE1ZjU2NWRlZmIyMzM5ZWFlN2ViOTFkYTEuLmVhNWRk
MGFiMzE0YTdiNDExZmYyMzgwOGE1OWE3NmNmYTUzNzdhMzUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEt
MDgtMzEgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAg
IFtKU0NdIEltcGxlbWVudCBUZW1wb3JhbC5EdXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4NTMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
WXVzdWtlIFN1enVraS4KKworICAgICAgICAqIHN0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qczog
QWRkZWQuCisgICAgICAgICogdGVzdDI2Mi9jb25maWcueWFtbDogRW5hYmxlZCBEdXJhdGlvbiB0
ZXN0cy4KKwogMjAyMS0wOC0zMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5j
b20+CiAKICAgICAgICAgW0pTQ11bSW50bF0gRXJyb3JzIGZvciAuY2FsbCh7fSkgYXJlIHRvbyB2
ZXJib3NlCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qcyBi
L0pTVGVzdHMvc3RyZXNzL3RlbXBvcmFsLWR1cmF0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxYTRmNTZk
MjQ5YzlmNTg4MzQ0ZjJmOWRiNGU4M2I1MjcxYzQ3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qcwpAQCAtMCwwICsxLDI5MSBAQAorLy9AIHJl
cXVpcmVPcHRpb25zKCItLXVzZVRlbXBvcmFsPTEiKQorCitmdW5jdGlvbiBzaG91bGRCZShhY3R1
YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH1gKTsK
K30KKworZnVuY3Rpb24gc2hvdWxkTm90VGhyb3coZnVuYykgeworICAgIGZ1bmMoKTsKK30KKwor
ZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JUeXBlKSB7CisgICAgbGV0IGVycm9yOwor
ICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVy
cm9yID0gZTsKKyAgICB9CisKKyAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIGVycm9yVHlwZSkp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtlcnJvclR5cGUubmFtZX0hYCk7
Cit9CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uIGluc3RhbmNlb2YgRnVuY3Rpb24sIHRy
dWUpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ubGVuZ3RoLCAwKTsKK3Nob3VsZEJlKE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwuRHVyYXRpb24sICdwcm90b3R5
cGUnKS53cml0YWJsZSwgZmFsc2UpOworc2hvdWxkQmUoT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihUZW1wb3JhbC5EdXJhdGlvbiwgJ3Byb3RvdHlwZScpLmVudW1lcmFibGUsIGZhbHNl
KTsKK3Nob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwuRHVy
YXRpb24sICdwcm90b3R5cGUnKS5jb25maWd1cmFibGUsIGZhbHNlKTsKK3Nob3VsZFRocm93KCgp
ID0+IFRlbXBvcmFsLkR1cmF0aW9uKCksIFR5cGVFcnJvcik7CisKK3Nob3VsZEJlKG5ldyBUZW1w
b3JhbC5EdXJhdGlvbigpIGluc3RhbmNlb2YgVGVtcG9yYWwuRHVyYXRpb24sIHRydWUpOworewor
ICAgIGNsYXNzIERlcml2ZWREdXJhdGlvbiBleHRlbmRzIFRlbXBvcmFsLkR1cmF0aW9uIHt9CisK
KyAgICBjb25zdCBkZCA9IG5ldyBEZXJpdmVkRHVyYXRpb24oKTsKKyAgICBzaG91bGRCZShkZCBp
bnN0YW5jZW9mIERlcml2ZWREdXJhdGlvbiwgdHJ1ZSk7CisgICAgc2hvdWxkQmUoZGQgaW5zdGFu
Y2VvZiBUZW1wb3JhbC5EdXJhdGlvbiwgdHJ1ZSk7CisgICAgc2hvdWxkQmUoZGQubmVnYXRlZCwg
VGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQpOworICAgIHNob3VsZEJlKE9iamVj
dC5nZXRQcm90b3R5cGVPZihkZCksIERlcml2ZWREdXJhdGlvbi5wcm90b3R5cGUpOworICAgIHNo
b3VsZEJlKE9iamVjdC5nZXRQcm90b3R5cGVPZihEZXJpdmVkRHVyYXRpb24ucHJvdG90eXBlKSwg
VGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlKTsKK30KKworc2hvdWxkVGhyb3coKCkgPT4gbmV3
IFRlbXBvcmFsLkR1cmF0aW9uKDEsIC0xKSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9
PiBuZXcgVGVtcG9yYWwuRHVyYXRpb24oSW5maW5pdHkpLCBSYW5nZUVycm9yKTsKKworY29uc3Qg
ZmllbGRzID0gWyd5ZWFycycsICdtb250aHMnLCAnd2Vla3MnLCAnZGF5cycsICdob3VycycsICdt
aW51dGVzJywgJ3NlY29uZHMnLCAnbWlsbGlzZWNvbmRzJywgJ21pY3Jvc2Vjb25kcycsICduYW5v
c2Vjb25kcyddOworY29uc3QgemVybyA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigpOworY29uc3Qg
cG9zID0gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKDEsMiwzLDQsNSw2LDcsOCw5LDEwKTsKK2NvbnN0
IG5lZyA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigtMSwtMiwtMywtNCwtNSwtNiwtNywtOCwtOSwt
MTApOworCitmaWVsZHMuZm9yRWFjaCgoZmllbGQsIGkpID0+IHsKKyAgICBzaG91bGRUaHJvdygo
KSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbZmllbGRdLCBUeXBlRXJyb3IpOworICAg
IHNob3VsZEJlKHplcm9bZmllbGRdLCAwKTsKKyAgICBzaG91bGRCZShwb3NbZmllbGRdLCBpICsg
MSk7CisgICAgc2hvdWxkQmUobmVnW2ZpZWxkXSwgLWkgLSAxKTsKK30pOworCitzaG91bGRUaHJv
dygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc2lnbiwgVHlwZUVycm9yKTsKK3No
b3VsZEJlKHplcm8uc2lnbiwgMCk7CitzaG91bGRCZShwb3Muc2lnbiwgMSk7CitzaG91bGRCZShu
ZWcuc2lnbiwgLTEpOworCitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90
b3R5cGUuYmxhbmssIFR5cGVFcnJvcik7CitzaG91bGRCZSh6ZXJvLmJsYW5rLCB0cnVlKTsKK3No
b3VsZEJlKHBvcy5ibGFuaywgZmFsc2UpOworc2hvdWxkQmUobmVnLmJsYW5rLCBmYWxzZSk7CisK
K3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20ubGVuZ3RoLCAxKTsKK3Nob3VsZFRocm93
KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oKSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJv
dygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKHt9KSwgVHlwZUVycm9yKTsKK3sKKyAgICBj
b25zdCBiYWRTdHJpbmdzID0gWworICAgICAgICAnJywgJysnLCAnK1AnLCAnLVAnLCAnKy1QJywK
KyAgICAgICAgJ1AnLCAnUDEnLCAnUFQnLCAnUDFZVCcsICdQVDEnLAorICAgICAgICAnK1BUMjAu
UycsICcrUFQuMjBTJywKKyAgICAgICAgJ1AxVzFZJywgICdQVDFTMU0nLAorICAgICAgICAnUDEu
MVknLCAnUFQxLjFIMU0nLCAnUFQxLjFNMVMnLAorICAgICAgICAnUFQxLjExMTExMTExMTFIJywg
J1BUMS4xMTExMTExMTExTScsICdQVDEuMTExMTExMTExMVMnLAorICAgICAgICBgUCR7QXJyYXko
MzA5KS5maWxsKDkpLmpvaW4oJycpfVlgCisgICAgXTsKKyAgICBmb3IgKGNvbnN0IGJhZFN0cmlu
ZyBpbiBiYWRTdHJpbmdzKQorICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJh
dGlvbi5mcm9tKGJhZFN0cmluZyksIFJhbmdlRXJyb3IpOworICAgIAorICAgIGNvbnN0IGZyb21T
dHJpbmcgPSBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMVkyTTNXNERUNUg2TTcuMDA4MDA5MDEw
UycpOworCisgICAgY29uc3QgZHVyYXRpb25MaWtlID0ge307CisgICAgZmllbGRzLmZvckVhY2go
KGZpZWxkLCBpKSA9PiB7IGR1cmF0aW9uTGlrZVtmaWVsZF0gPSBpICsgMTsgfSk7CisgICAgY29u
c3QgZnJvbUR1cmF0aW9uTGlrZSA9IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oZHVyYXRpb25MaWtl
KTsKKworICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJl
KGZyb21TdHJpbmdbZmllbGRdLCBwb3NbZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUoZnJvbUR1
cmF0aW9uTGlrZVtmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgIH0KK30KK3Nob3VsZE5vdFRocm93
KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oYFAke0FycmF5KDMwOCkuZmlsbCg5KS5qb2lu
KCcnKX1ZYCkpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgn4oiScDF5Mm0zdzRk
dDVoNm03LjAwODAwOTAxMHMnKS50b1N0cmluZygpLCAnLVAxWTJNM1c0RFQ1SDZNNy4wMDgwMDkw
MVMnKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJytQMVkyRFQzSDQuMFMnKS50
b1N0cmluZygpLCAnUDFZMkRUM0g0UycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJv
bSgnUFQxLjAzMTI1SCcpLnRvU3RyaW5nKCksICdQVDFIMU01Mi41UycpOworc2hvdWxkQmUoVGVt
cG9yYWwuRHVyYXRpb24uZnJvbSgnUFQxLjAzMTI1TScpLnRvU3RyaW5nKCksICdQVDFNMS44NzVT
Jyk7CisKK2NvbnN0IHBvc0Fic29sdXRlID0gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDEs
MiwzLDQsNSw2LDcpOworCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlLmxlbmd0
aCwgMik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKCksIFJh
bmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh7
fSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21w
YXJlKHplcm8pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0
aW9uLmNvbXBhcmUoemVybywge30pLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVt
cG9yYWwuRHVyYXRpb24uY29tcGFyZSh7IHllYXJzOiAxIH0sIHplcm8pLCBSYW5nZUVycm9yKTsK
K3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoeyBtb250aHM6IDEg
fSwgemVybyksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRp
b24uY29tcGFyZSh7IHdlZWtzOiAxIH0sIHplcm8pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93
KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoemVybywgeyB5ZWFyczogMSB9KSwgUmFu
Z2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHpl
cm8sIHsgbW9udGhzOiAxIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBv
cmFsLkR1cmF0aW9uLmNvbXBhcmUoemVybywgeyB3ZWVrczogMSB9KSwgUmFuZ2VFcnJvcik7Citz
aG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHBvc0Fic29sdXRlLCBwb3NBYnNvbHV0
ZSksIDApOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZShwb3NBYnNvbHV0ZSwg
emVybyksIDEpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZSh6ZXJvLCBwb3NB
YnNvbHV0ZSksIC0xKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoJ1BUODY0
MDBTJywgJ1AxRCcpLCAwKTsKKworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBl
LndpdGgubGVuZ3RoLCAxKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS53aXRoLmNhbGwoe30sIHsgeWVhcnM6IDEgfSksIFR5cGVFcnJvcik7CitzaG91bGRU
aHJvdygoKSA9PiB6ZXJvLndpdGgoKSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHpl
cm8ud2l0aCh7fSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLndpdGgoeyB5
ZWFyczogMS4xIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHBvcy53aXRoKHsg
eWVhcnM6IC0xIH0pLCBSYW5nZUVycm9yKTsKK3sKKyAgICBjb25zdCBmdWxseVVwZGF0ZWQgPSBw
b3Mud2l0aChuZWcpOworICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7CisgICAgICAg
IHNob3VsZEJlKHplcm8ud2l0aCh7IFtmaWVsZF06IDEgfSlbZmllbGRdLCAxKTsKKyAgICAgICAg
c2hvdWxkQmUoZnVsbHlVcGRhdGVkW2ZpZWxkXSwgbmVnW2ZpZWxkXSk7CisgICAgfQorfQorCitz
aG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubmVnYXRlZC5sZW5ndGgsIDApOwor
c2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQuY2Fs
bCh7fSksIFR5cGVFcnJvcik7Cit7CisgICAgY29uc3QgbmVnYXRlZFplcm8gPSB6ZXJvLm5lZ2F0
ZWQoKTsKKyAgICBjb25zdCBuZWdhdGVkUG9zID0gcG9zLm5lZ2F0ZWQoKTsKKyAgICBjb25zdCBu
ZWdhdGVkTmVnID0gbmVnLm5lZ2F0ZWQoKTsKKyAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxk
cykgeworICAgICAgICBzaG91bGRCZShuZWdhdGVkWmVyb1tmaWVsZF0sIHplcm9bZmllbGRdKTsK
KyAgICAgICAgc2hvdWxkQmUobmVnYXRlZE5lZ1tmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgICAg
ICBzaG91bGRCZShuZWdhdGVkUG9zW2ZpZWxkXSwgbmVnW2ZpZWxkXSk7CisgICAgfQorfQorCitz
aG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYWJzLmxlbmd0aCwgMCk7CitzaG91
bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYWJzLmNhbGwoe30pLCBU
eXBlRXJyb3IpOworeworICAgIGNvbnN0IGFic1plcm8gPSB6ZXJvLmFicygpOworICAgIGNvbnN0
IGFic1BvcyA9IHBvcy5hYnMoKTsKKyAgICBjb25zdCBhYnNOZWcgPSBuZWcuYWJzKCk7CisgICAg
Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHsKKyAgICAgICAgc2hvdWxkQmUoYWJzWmVyb1tm
aWVsZF0sIHplcm9bZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUoYWJzUG9zW2ZpZWxkXSwgcG9z
W2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKGFic05lZ1tmaWVsZF0sIHBvc1tmaWVsZF0pOwor
ICAgIH0KK30KKworZm9yIChjb25zdCBtZXRob2Qgb2YgWydhZGQnLCAnc3VidHJhY3QnXSkgewor
ICAgIHNob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZVttZXRob2RdLmxlbmd0aCwg
MSk7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW21l
dGhvZF0uY2FsbCh7IGhvdXJzOiAxIH0pLCBUeXBlRXJyb3IpOworICAgIHNob3VsZFRocm93KCgp
ID0+IHplcm9bbWV0aG9kXSgpLCBSYW5nZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiB6
ZXJvW21ldGhvZF0oe30pLCBUeXBlRXJyb3IpOworICAgIHNob3VsZFRocm93KCgpID0+IHplcm9b
bWV0aG9kXSh7IHllYXJzOiAxIH0pLCBSYW5nZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9
PiB6ZXJvW21ldGhvZF0oeyBtb250aHM6IDEgfSksIFJhbmdlRXJyb3IpOworICAgIHNob3VsZFRo
cm93KCgpID0+IHplcm9bbWV0aG9kXSh7IHdlZWtzOiAxIH0pLCBSYW5nZUVycm9yKTsKKyAgICBz
aG91bGRUaHJvdygoKSA9PiBwb3NbbWV0aG9kXSh7IHNlY29uZHM6IDEgfSksIFJhbmdlRXJyb3Ip
OworfQoreworICAgIGNvbnN0IHBvc0R1cmF0aW9uTGlrZSA9IHsgZGF5czogMSwgaG91cnM6IDIs
IG1pbnV0ZXM6IDMsIHNlY29uZHM6IDQsIG1pbGxpc2Vjb25kczogNSwgbWljcm9zZWNvbmRzOiA2
LCBuYW5vc2Vjb25kczogNyB9OworICAgIGNvbnN0IG5lZ1N0cmluZyA9ICctUDFEVDJIM000LjAw
NTAwNjAwN1MnOworCisgICAgY29uc3QgYWRkWmVybyA9IHBvc0Fic29sdXRlLmFkZCh6ZXJvKTsK
KyAgICBjb25zdCBhZGRQb3MgPSBwb3NBYnNvbHV0ZS5hZGQocG9zRHVyYXRpb25MaWtlKTsKKyAg
ICBjb25zdCBhZGROZWcgPSBwb3NBYnNvbHV0ZS5hZGQobmVnU3RyaW5nKTsKKyAgICBjb25zdCBz
dWJaZXJvID0gcG9zQWJzb2x1dGUuc3VidHJhY3QoemVybyk7CisgICAgY29uc3Qgc3ViUG9zID0g
cG9zQWJzb2x1dGUuc3VidHJhY3QocG9zRHVyYXRpb25MaWtlKTsKKyAgICBjb25zdCBzdWJOZWcg
PSBwb3NBYnNvbHV0ZS5zdWJ0cmFjdChuZWdTdHJpbmcpOworICAgIGZvciAoY29uc3QgZmllbGQg
b2YgZmllbGRzKSB7CisgICAgICAgIHNob3VsZEJlKGFkZFplcm9bZmllbGRdLCBwb3NBYnNvbHV0
ZVtmaWVsZF0pOworICAgICAgICBzaG91bGRCZShhZGRQb3NbZmllbGRdLCAyICogcG9zQWJzb2x1
dGVbZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUoYWRkTmVnW2ZpZWxkXSwgMCk7CisgICAgICAg
IHNob3VsZEJlKHN1Ylplcm9bZmllbGRdLCBwb3NBYnNvbHV0ZVtmaWVsZF0pOworICAgICAgICBz
aG91bGRCZShzdWJQb3NbZmllbGRdLCAwKTsKKyAgICAgICAgc2hvdWxkQmUoc3ViTmVnW2ZpZWxk
XSwgMiAqIHBvc0Fic29sdXRlW2ZpZWxkXSk7CisgICAgfQorfQorc2hvdWxkQmUoVGVtcG9yYWwu
RHVyYXRpb24uZnJvbSgnUDFEVDEzSDMxTTMxUycpLmFkZCgnUDFEVDEzSDMxTTMxUycpLnRvU3Ry
aW5nKCksICdQM0RUM0gzTTJTJyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCct
UFQxTTU5UycpLnN1YnRyYWN0KCdQVDFNNTlTJykudG9TdHJpbmcoKSwgJy1QVDNNNThTJyk7CisK
K3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5yb3VuZC5sZW5ndGgsIDEpOwor
c2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnJvdW5kLmNhbGwo
e30pLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby5yb3VuZCgpLCBUeXBlRXJy
b3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby5yb3VuZCh7fSksIFJhbmdlRXJyb3IpOworc2hv
dWxkVGhyb3coKCkgPT4gemVyby5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ2JvZ3VzJyB9KSwgUmFu
Z2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdi
b2d1cycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby5yb3VuZCh7IHNt
YWxsZXN0VW5pdDogJ2hvdXInLCBsYXJnZXN0VW5pdDogJ25hbm9zZWNvbmQnIH0pLCBSYW5nZUVy
cm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICduYW5v
c2Vjb25kJywgcm91bmRpbmdNb2RlOiAnYm9ndXMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRo
cm93KCgpID0+IHplcm8ucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICduYW5vc2Vjb25kJywgcm91bmRp
bmdJbmNyZW1lbnQ6IDMgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9y
YWwuRHVyYXRpb24uZnJvbSgnUDFZJykucm91bmQoeyBsYXJnZXN0VW5pdDogJ3NlY29uZHMnIH0p
LCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20o
J1AxTScpLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJvcik7Citz
aG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMVcnKS5yb3VuZCh7IGxh
cmdlc3RVbml0OiAnc2Vjb25kcycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4g
VGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFEJykucm91bmQoeyBsYXJnZXN0VW5pdDogJ21vbnRo
cycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24u
ZnJvbSgnUDFEJykucm91bmQoeyBsYXJnZXN0VW5pdDogJ3dlZWtzJyB9KSwgUmFuZ2VFcnJvcik7
CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnZGF5JyB9KS50b1N0
cmluZygpLCAnUDFEVDJIM000LjAwNTAwNjAwN1MnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJv
dW5kKHsgbGFyZ2VzdFVuaXQ6ICdhdXRvJyB9KS50b1N0cmluZygpLCAnUDFEVDJIM000LjAwNTAw
NjAwN1MnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgc21hbGxlc3RVbml0OiAnZGF5
JyB9KS50b1N0cmluZygpLCAnUDFEJyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IHNt
YWxsZXN0VW5pdDogJ3NlY29uZCcgfSkudG9TdHJpbmcoKSwgJ1AxRFQySDNNNFMnKTsKK3Nob3Vs
ZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICdob3VyJywgc21hbGxlc3RVbml0
OiAnc2Vjb25kJyB9KS50b1N0cmluZygpLCAnUFQyNkgzTTRTJyk7CitzaG91bGRCZShwb3NBYnNv
bHV0ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnbWludXRlJywgc21hbGxlc3RVbml0OiAnc2Vjb25k
JyB9KS50b1N0cmluZygpLCAnUFQxNTYzTTRTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3Vu
ZCh7IGxhcmdlc3RVbml0OiAnc2Vjb25kJywgc21hbGxlc3RVbml0OiAnbWlsbGlzZWNvbmQnIH0p
LnRvU3RyaW5nKCksICdQVDkzNzg0LjAwNVMnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5k
KHsgbGFyZ2VzdFVuaXQ6ICdtaWxsaXNlY29uZCcsIHNtYWxsZXN0VW5pdDogJ21pY3Jvc2Vjb25k
JyB9KS50b1N0cmluZygpLCAnUFQ5Mzc4NC4wMDUwMDZTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0
ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnbWljcm9zZWNvbmQnLCBzbWFsbGVzdFVuaXQ6ICdtaWNy
b3NlY29uZCcgfSkudG9TdHJpbmcoKSwgJ1BUOTM3ODQuMDA1MDA2UycpOworc2hvdWxkQmUocG9z
QWJzb2x1dGUucm91bmQoeyBsYXJnZXN0VW5pdDogJ25hbm9zZWNvbmQnIH0pLnRvU3RyaW5nKCks
ICdQVDkzNzg0LjAwNTAwNjAwN1MnKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgc21h
bGxlc3RVbml0OiAnc2Vjb25kJywgcm91bmRpbmdJbmNyZW1lbnQ6IDMwIH0pLnRvU3RyaW5nKCks
ICdQMURUMkgzTScpOworc2hvdWxkQmUocG9zQWJzb2x1dGUucm91bmQoeyBzbWFsbGVzdFVuaXQ6
ICdzZWNvbmQnLCByb3VuZGluZ0luY3JlbWVudDogMzAsIHJvdW5kaW5nTW9kZTogJ2NlaWwnIH0p
LnRvU3RyaW5nKCksICdQMURUMkgzTTMwUycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24u
ZnJvbSgnLVBUMzFTJykucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmQnLCByb3VuZGluZ0lu
Y3JlbWVudDogMzAgfSkudG9TdHJpbmcoKSwgJy1QVDMwUycpOworc2hvdWxkQmUoVGVtcG9yYWwu
RHVyYXRpb24uZnJvbSgnLVBUMzFTJykucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmQnLCBy
b3VuZGluZ0luY3JlbWVudDogMzAsIHJvdW5kaW5nTW9kZTogJ2Zsb29yJyB9KS50b1N0cmluZygp
LCAnLVBUNjBTJyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCctUFQ0NVMnKS5y
b3VuZCh7IHNtYWxsZXN0VW5pdDogJ3NlY29uZCcsIHJvdW5kaW5nSW5jcmVtZW50OiAzMCB9KS50
b1N0cmluZygpLCAnLVBUNjBTJyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCct
UFQ0NVMnKS5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ3NlY29uZCcsIHJvdW5kaW5nSW5jcmVtZW50
OiAzMCwgcm91bmRpbmdNb2RlOiAndHJ1bmMnIH0pLnRvU3RyaW5nKCksICctUFQzMFMnKTsKKwor
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvdGFsLmxlbmd0aCwgMSk7Citz
aG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUudG90YWwuY2FsbCh7
fSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLnRvdGFsKCksIFR5cGVFcnJv
cik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLnRvdGFsKHt9KSwgUmFuZ2VFcnJvcik7CitzaG91
bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMVknKS50b3RhbCh7IHVuaXQ6
ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5E
dXJhdGlvbi5mcm9tKCdQMU0nKS50b3RhbCh7IHVuaXQ6ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJv
cik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMVcnKS50b3Rh
bCh7IHVuaXQ6ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBU
ZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCdQMUQnKS50b3RhbCh7IHVuaXQ6ICdtb250aHMnIH0pLCBS
YW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1Ax
RCcpLnRvdGFsKHsgdW5pdDogJ3dlZWtzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRCZShwb3NB
YnNvbHV0ZS50b3RhbCh7IHVuaXQ6ICdkYXlzJyB9KSwgMS4wODU0NjMwMjA5MDI4NTg4KTsKK3No
b3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ2hvdXJzJyB9KSwgMjYuMDUxMTEyNTAx
NjY4NjEyKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ21pbnV0ZXMnIH0p
LCAxNTYzLjA2Njc1MDEwMDExNjcpOworc2hvdWxkQmUocG9zQWJzb2x1dGUudG90YWwoeyB1bml0
OiAnc2Vjb25kcycgfSksIDkzNzg0LjAwNTAwNjAwNyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS50
b3RhbCh7IHVuaXQ6ICdtaWxsaXNlY29uZHMnIH0pLCA5Mzc4NDAwNS4wMDYwMDcpOworc2hvdWxk
QmUocG9zQWJzb2x1dGUudG90YWwoeyB1bml0OiAnbWljcm9zZWNvbmRzJyB9KSwgOTM3ODQwMDUw
MDYuMDA3KTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ25hbm9zZWNvbmRz
JyB9KSwgOTM3ODQwMDUwMDYwMDcpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgn
LVBUMTIzNDU2Nzg5UycpLnRvdGFsKHsgdW5pdDogJ2RheScgfSksIC0xNDI4Ljg5ODAyMDgzMzMz
MzIpOworCisvLyBBdCBwcmVzZW50LCB0b0xvY2FsZVN0cmluZyBoYXMgdGhlIHNhbWUgYmVoYXZp
b3IgYXMgdG9KU09OIG9yIGFyZ3VtZW50bGVzcyB0b1N0cmluZy4KK2ZvciAoY29uc3QgbWV0aG9k
IG9mIFsndG9TdHJpbmcnLCAndG9KU09OJywgJ3RvTG9jYWxlU3RyaW5nJ10pIHsgICAgCisgICAg
c2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlW21ldGhvZF0ubGVuZ3RoLCAwKTsK
KyAgICBzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbbWV0aG9k
XS5jYWxsKHt9KSwgVHlwZUVycm9yKTsKKworICAgIHNob3VsZEJlKHplcm9bbWV0aG9kXSgpLCAn
UFQwUycpOworICAgIHNob3VsZEJlKHBvc1ttZXRob2RdKCksICdQMVkyTTNXNERUNUg2TTcuMDA4
MDA5MDFTJyk7CisgICAgc2hvdWxkQmUobmVnW21ldGhvZF0oKSwgJy1QMVkyTTNXNERUNUg2TTcu
MDA4MDA5MDFTJyk7CisgICAgCisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDEs
MSwxLDEpW21ldGhvZF0oKSwgJ1AxWTFNMVcxRCcpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3Jh
bC5EdXJhdGlvbigwLDAsMCwwLDEsMSwxKVttZXRob2RdKCksICdQVDFIMU0xUycpOworICAgIHNo
b3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDEwMClbbWV0aG9kXSgp
LCAnUFQwLjFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBvcmFsLkR1cmF0aW9uKDAsMCwwLDAs
MCwwLDAsMCwxMDApW21ldGhvZF0oKSwgJ1BUMC4wMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBU
ZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDAsMCwxMDApW21ldGhvZF0oKSwgJ1BUMC4w
MDAwMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAs
MCwxLDEwMDEpW21ldGhvZF0oKSwgJ1BUMi4wMDFTJyk7CisgICAgc2hvdWxkQmUobmV3IFRlbXBv
cmFsLkR1cmF0aW9uKDAsMCwwLDAsMCwwLDAsMSwxMDAxKVttZXRob2RdKCksICdQVDAuMDAyMDAx
UycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDAs
MSwxMDAxKVttZXRob2RdKCksICdQVDAuMDAwMDAyMDAxUycpOworICAgIHNob3VsZEJlKG5ldyBU
ZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwxLDEwMDEsMTAwMSwxMDAxKVttZXRob2RdKCks
ICdQVDIuMDAyMDAyMDAxUycpOworfQorCitzaG91bGRCZShwb3MudG9TdHJpbmcoe30pLCBwb3Mu
dG9TdHJpbmcoKSk7CisKK3Nob3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IHNtYWxsZXN0
VW5pdDogJ2Zvb2JhcicgfSksIFJhbmdlRXJyb3IpOworZm9yIChjb25zdCB1bml0IG9mIFsneWVh
cicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VyJywgJ21pbnV0ZSddKSB7CisgICAgc2hv
dWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiB1bml0IH0pLCBSYW5n
ZUVycm9yKTsKKyAgICBzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVu
aXQ6IGAke3VuaXR9c2AgfSksIFJhbmdlRXJyb3IpOworfQorc2hvdWxkQmUocG9zLnRvU3RyaW5n
KHsgc21hbGxlc3RVbml0OiAnc2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTdTJyk7CitzaG91
bGRCZShwb3MudG9TdHJpbmcoeyBzbWFsbGVzdFVuaXQ6ICdtaWxsaXNlY29uZHMnIH0pLCAnUDFZ
Mk0zVzREVDVINk03LjAwOFMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5p
dDogJ21pY3Jvc2Vjb25kcycgfSksICdQMVkyTTNXNERUNUg2TTcuMDA4MDA5UycpOworc2hvdWxk
QmUocG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiAnbmFub3NlY29uZHMnIH0pLCAnUDFZMk0z
VzREVDVINk03LjAwODAwOTAxMFMnKTsKK2ZvciAoY29uc3QgdW5pdCBvZiBbJ3NlY29uZCcsICdt
aWxsaXNlY29uZCcsICdtaWNyb3NlY29uZCcsICduYW5vc2Vjb25kJ10pCisgICAgc2hvdWxkQmUo
cG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiB1bml0IH0pLCBwb3MudG9TdHJpbmcoeyBzbWFs
bGVzdFVuaXQ6IGAke3VuaXR9c2AgfSkpOworCitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJp
bmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAtMSB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRU
aHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAxMCB9KSwg
UmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFs
U2Vjb25kRGlnaXRzOiAnYm9ndXMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZEJlKHBvcy50b1N0
cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDAgfSksICdQMVkyTTNXNERUNUg2TTdTJyk7
Citjb25zdCBkZWNpbWFsUGFydCA9ICcwMDgwMDkwMTAnOworZm9yIChsZXQgaSA9IDE7IGkgPCAx
MDsgaSsrKQorICAgIHNob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdp
dHM6IGkgfSksIGBQMVkyTTNXNERUNUg2TTcuJHtkZWNpbWFsUGFydC5zbGljZSgwLGkpfVNgKTsK
K3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6ICdhdXRvJyB9
KSwgcG9zLnRvU3RyaW5nKCkpOworc2hvdWxkQmUoemVyby50b1N0cmluZyh7IGZyYWN0aW9uYWxT
ZWNvbmREaWdpdHM6IDIgfSksICdQVDAuMDBTJyk7CisKK3Nob3VsZFRocm93KCgpID0+IHBvcy50
b1N0cmluZyh7IHJvdW5kaW5nTW9kZTogJ2JvZ3VzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRC
ZShwb3MudG9TdHJpbmcoeyByb3VuZGluZ01vZGU6ICd0cnVuYycgfSksIHBvcy50b1N0cmluZygp
KTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDcsIHJv
dW5kaW5nTW9kZTogJ2NlaWwnIH0pLCAnUDFZMk0zVzREVDVINk03LjAwODAwOTFTJyk7CitzaG91
bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAyLCByb3VuZGluZ01v
ZGU6ICdmbG9vcicgfSksICdQMVkyTTNXNERUNUg2TTcuMDBTJyk7CitzaG91bGRCZShwb3MudG9T
dHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAyLCByb3VuZGluZ01vZGU6ICdoYWxmRXhw
YW5kJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMVMnKTsKKworc2hvdWxkQmUoVGVtcG9yYWwuRHVy
YXRpb24ucHJvdG90eXBlLnZhbHVlT2YubGVuZ3RoLCAwKTsKK3Nob3VsZFRocm93KCgpID0+IG5l
dyBUZW1wb3JhbC5EdXJhdGlvbigpLnZhbHVlT2YoKSwgVHlwZUVycm9yKTsKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbCBiL0pTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFt
bAppbmRleCA2NTc2YmEzMjI5MWI0YWY5ODMxMmE0MTk2ZThjZjU5MTg1ZmExOWQ5Li4xMDVmZGY0
MjUzOTY1MzcyODVhNzE3ODAyNTA5ZjhkZTI5MGZhYjZjIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3Rl
c3QyNjIvY29uZmlnLnlhbWwKKysrIGIvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sCkBAIC02
LDYgKzYsNyBAQCBmbGFnczoKICAgQXJyYXkucHJvdG90eXBlLmF0OiB1c2VBdE1ldGhvZAogICBU
eXBlZEFycmF5LnByb3RvdHlwZS5hdDogdXNlQXRNZXRob2QKICAgU3RyaW5nLnByb3RvdHlwZS5h
dDogdXNlQXRNZXRob2QKKyAgVGVtcG9yYWw6IHVzZVRlbXBvcmFsCiAgIGFycmF5LWZpbmQtZnJv
bS1sYXN0OiB1c2VBcnJheUZpbmRMYXN0TWV0aG9kCiAgIE9iamVjdC5oYXNPd246IHVzZUhhc093
bgogc2tpcDoKQEAgLTE1LDEyICsxNiwyMSBAQCBza2lwOgogICAgIC0gcmVnZXhwLWxvb2tiZWhp
bmQKICAgICAtIGNsZWFudXBTb21lCiAgICAgLSByZXNpemFibGUtYXJyYXlidWZmZXIKLSAgICAt
IFRlbXBvcmFsCiAgICAgLSBpbXBvcnQtYXNzZXJ0aW9ucwogICAgIC0ganNvbi1tb2R1bGVzCiAg
ICAgLSBjbGFzcy1zdGF0aWMtYmxvY2sKICAgICAtIGNhbGxhYmxlLWJvdW5kYXJ5LXJlYWxtcwog
ICBwYXRoczoKKyAgICAtIHRlc3QvYnVpbHQtaW5zL1RlbXBvcmFsL0NhbGVuZGFyCisgICAgLSB0
ZXN0L2J1aWx0LWlucy9UZW1wb3JhbC9JbnN0YW50CisgICAgLSB0ZXN0L2J1aWx0LWlucy9UZW1w
b3JhbC9Ob3cKKyAgICAtIHRlc3QvYnVpbHQtaW5zL1RlbXBvcmFsL1BsYWluRGF0ZQorICAgIC0g
dGVzdC9idWlsdC1pbnMvVGVtcG9yYWwvUGxhaW5EYXRlVGltZQorICAgIC0gdGVzdC9idWlsdC1p
bnMvVGVtcG9yYWwvUGxhaW5Nb250aERheQorICAgIC0gdGVzdC9idWlsdC1pbnMvVGVtcG9yYWwv
UGxhaW5UaW1lCisgICAgLSB0ZXN0L2J1aWx0LWlucy9UZW1wb3JhbC9QbGFpblllYXJNb250aAor
ICAgIC0gdGVzdC9idWlsdC1pbnMvVGVtcG9yYWwvVGltZVpvbmUKKyAgICAtIHRlc3QvYnVpbHQt
aW5zL1RlbXBvcmFsL1pvbmVkRGF0ZVRpbWUKICAgZmlsZXM6CiAgICAgIyBodHRwczovL2dpdGh1
Yi5jb20vY2xhdWRlcGFjaGUvZXMtbGVnYWN5LWZ1bmN0aW9uLXJlZmxlY3Rpb24KICAgICAtIHRl
c3QvYnVpbHQtaW5zL1Rocm93VHlwZUVycm9yL3VuaXF1ZS1wZXItcmVhbG0tZnVuY3Rpb24tcHJv
dG8uanMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436993</attachid>
            <date>2021-08-31 21:34:57 -0700</date>
            <delta_ts>2021-08-31 22:24:39 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-228532-20210831213456.patch</filename>
            <type>text/plain</type>
            <size>125248</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxODM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ZGNlZGNkNDg1N2I3OTEwNzIwYWJmMzk5MzVjMWM1MGI4ZWIyZTg1Li4yZTg2NTEwNTU0ZDYwNDE3
MDcwYWRiMjhhNmIxNzIxMjNlYjVlOWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NCBAQAorMjAyMS0wOC0zMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gSW1wbGVtZW50IFRlbXBvcmFsLkR1cmF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1w
bGVtZW50cyB0aGUgRHVyYXRpb24gY2xhc3MgZm9yIHRoZSB1cGNvbWluZyBUZW1wb3JhbCBBUEkg
KGN1cnJlbnRseSBhdCBzdGFnZSAzIGluIFRDMzkpLgorICAgICAgICBTcGVjOiBodHRwczovL3Rj
MzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC1kdXJhdGlvbi1vYmplY3RzCisg
ICAgICAgIERvY3M6IGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC9kb2NzL2R1cmF0
aW9uLmh0bWwKKworICAgICAgICBBIER1cmF0aW9uIGlzIHVsdGltYXRlbHkgYW4gYXJyYXkgb2Yg
ZG91YmxlcyAoeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNv
bmRzLCBtcywgzrxzLCBucykKKyAgICAgICAgd2hpY2ggY2FuIGJlIGNvbnZlcnRlZCB0byBhbmQg
ZnJvbSBhbiBJU08gc3RyaW5nIHJlcHJlc2VudGF0aW9uIChlLmcuICItUDFZMk0zVzREVDVINk03
LjEyMzQ1Njc4OVMiKQorICAgICAgICBhbmQgd2hpY2ggc3VwcG9ydHMgdmFyaW91cyBjYWxjdWxh
dGlvbnMuCisKKyAgICAgICAgVGhlIHNwZWMgaXMgc3RpbGwgaW4gZmx1eCBhbmQgY2VydGFpbiBp
c3N1ZXMgd2VyZSBpZGVudGlmaWVkIGluIHRoZSBjb3Vyc2Ugb2YgcHJlcGFyaW5nIHRoaXMgcGF0
Y2guCisgICAgICAgIFRoaXMgY29kZSBhaW1zIHRvIGJlICJhcyBjb3JyZWN0IGFzIHBvc3NpYmxl
IiBmb3IgdGhlIG1vbWVudDsgc21hbGwgY29ycmVjdGlvbnMgYXJlIGV4cGVjdGVkIGluIHRoZSBu
ZWFyIGZ1dHVyZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGltZS9JU084NjAxLmNwcDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9JU084NjAxLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6ZHVyYXRpb25TdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJh
dGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHA6
IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmg6
IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHA6
IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlRHVyYXRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OnNpbmd1bGFyVW5p
dCk6CisgICAgICAgIChKU0M6OnRlbXBvcmFsVW5pdFR5cGUpOgorICAgICAgICAoSlNDOjp0ZW1w
b3JhbExhcmdlc3RVbml0KToKKyAgICAgICAgKEpTQzo6dGVtcG9yYWxTbWFsbGVzdFVuaXQpOgor
ICAgICAgICAoSlNDOjp0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmREaWdpdHMpOgorICAgICAgICAo
SlNDOjpzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKToKKyAgICAgICAgKEpTQzo6bWF4aW11bVJvdW5k
aW5nSW5jcmVtZW50KToKKyAgICAgICAgKEpTQzo6dGVtcG9yYWxSb3VuZGluZ0luY3JlbWVudCk6
CisgICAgICAgIChKU0M6OnJvdW5kTnVtYmVyVG9JbmNyZW1lbnQpOgorICAgICAgICAqIHJ1bnRp
bWUvVGVtcG9yYWxPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAg
KiBydW50aW1lL1ZNLmg6CisKIDIwMjEtMDgtMzEgIExhdXJvIE1vdXJhICA8bG1vdXJhQGlnYWxp
YS5jb20+CiAKICAgICAgICAgTm9uLXVuaWZpZWQgYnVpbGQgcGFydGlhbCBmaXhlcywgbGF0ZSBs
YXRlIEF1Z3VzdCAyMDIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMzRl
NWI4ZjNkODc2ZTgzNmE4OTYyNmI2NzU2YjQ2MGY4M2IxYzYyZS4uNTE2MzQ3ZDgzOGI5NDEyZmM4
ZDk0MzlkZDI1OWNlZWEzYjRiNzg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dApAQCAtMTA5LDYgKzEwOSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9PQkpFQ1RfTFVUX1NPVVJD
RVMKICAgICBydW50aW1lL1N5bWJvbFByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL1RlbXBvcmFs
Q2FsZW5kYXJDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL1RlbXBvcmFsQ2FsZW5kYXJQcm90
b3R5cGUuY3BwCisgICAgcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwCisg
ICAgcnVudGltZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvVGVt
cG9yYWxPYmplY3QuY3BwCiAKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGM4MmNmMjYxYmFhMDMzOWNl
YzJkNDkzZTRlZGRhMjdjMDUwN2MwNDAuLmJhMzc2OTc3NzRlNTA4Mzg2NzE2YThlMDg4OGY1MWJl
ZmJkMjZkZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC0xOTMsNiArMTkzLDggQEAgT0JKRUNUX0xVVF9IRUFERVJTID0gXAogICAgIFN5bWJvbFByb3Rv
dHlwZS5sdXQuaCBcCiAgICAgVGVtcG9yYWxDYWxlbmRhckNvbnN0cnVjdG9yLmx1dC5oIFwKICAg
ICBUZW1wb3JhbENhbGVuZGFyUHJvdG90eXBlLmx1dC5oIFwKKyAgICBUZW1wb3JhbER1cmF0aW9u
Q29uc3RydWN0b3IubHV0LmggXAorICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUubHV0Lmgg
XAogICAgIFRlbXBvcmFsT2JqZWN0Lmx1dC5oIFwKICAgICBXZWJBc3NlbWJseUNvbXBpbGVFcnJv
ckNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlw
ZS5sdXQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDIzY2JiMjk4Y2ViNjRi
NzhjNjAxODFjMmU0ZmVkYjlmMzk4NzFhZWMuLjk2ZTIyZDNkZTQxNjIzZTRmMThlMjUyMTk1YTE1
NmY4MDc2MWZjY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDEzLDkgKzE0
MTMsMTMgQEAKIAkJQTFENzkzMDExQjQzODY0QjAwNDUxNkY1IC8qIEludGxOdW1iZXJGb3JtYXRQ
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEExRDc5MkZCMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmgg
Ki87IH07CiAJCUEzMjFBQTZEMjYyNjM1OUIwMDIzQURBMiAvKiBJbnRsV29ya2Fyb3VuZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTMyMUFBNkMyNjI2
MzU5QjAwMjNBREEyIC8qIEludGxXb3JrYXJvdW5kLmggKi87IH07CiAJCUEzODJDNTMxMjY2NzEx
MUQwMDQyQ0Q5OSAvKiBJbkJ5VmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTMzMDVGQjEyMEIwRjc4ODAwQ0VCODJCIC8qIEluQnlWYXJpYW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTM4
Q0E1OUUyNkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzOENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084
NjAxLmggKi87IH07CiAJCUEzOEQyNTBFMjU4MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVy
UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTM4RDI1MEQyNTgwMEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGVJbmxpbmVzLmggKi87IH07CiAJCUEzOEQ1QkZDMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3Rh
dHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhE
NUJGQTI2NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAv
KiBJbnRsV29ya2Fyb3VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMzc2MTk0MDI2MjUxMjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3Bw
ICovOyB9OworCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAq
LzsgfTsKKwkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZC
MERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CisJCUEzQzdFREJBMjZC
MERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRD
MzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJQTNGRjlCQzcy
MjM0NzQ5MTAwQjFBOUFCIC8qIFlhcnJGbGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTNGRjlCQzUyMjM0NzQ2NjAwQjFBOUFCIC8qIFlhcnJGbGFn
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1
MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTAzRkExNDE4OEUwRkFGMDAx
MTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oICovOyB9OwogCQlBNTAzRkExRTE4OEUwRkIw
MDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTAzRkExODE4OEUwRkIwMDAxMTBG
MTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmggKi87IH07CkBAIC00NDYxLDYg
KzQ0NjUsOCBAQAogCQlBMjc5NThEN0ZBMTE0MkIwQUM5RTM2NEQgLyogV2FzbUNvbnRleHRJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21Db250ZXh0SW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMzIxQUE2QzI2MjYzNTlCMDAyM0FE
QTIgLyogSW50bFdvcmthcm91bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW50bFdvcmthcm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTM3NjE5NDAy
NjI1MTI3QzAwQ0JDQkE5IC8qIEludGxXb3JrYXJvdW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEludGxXb3JrYXJvdW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTM4Q0E1OUIyNkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSVNPODYwMS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEzOENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElTTzg2MDEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTM4RDI1MEQyNTgwMEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
QXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUEzOEQ1QkY5MjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluQnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBMzhENUJGQTI2NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbkJ5U3RhdHVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDc2LDYgKzQ0ODIsMTIgQEAKIAkJQTNCRjg4NEUyNDQ4
MEJFMDAwMUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3Ry
dWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNCRjg4NEYyNDQ4MEJFMDAw
MUI5RjM1IC8qIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUEzQkY4ODUwMjQ0ODBCRTEwMDFCOUYzNSAvKiBJbnRsUmVsYXRp
dmVUaW1lRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGxSZWxh
dGl2ZVRpbWVGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VEQjAy
NkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMTI2QjBEQjM2MDA0QzM0QzUgLyogVGVt
cG9yYWxEdXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
ZW1wb3JhbER1cmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTNDN0VE
QjIyNkIwREIzNzAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uQ29uc3Ry
dWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBM0M3RURCMzI2QjBEQjM3
MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZW1wb3JhbER1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcG9yYWxEdXJhdGlvbkNvbnN0
cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzQzdFREI1MjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0ZGOUJDNTIyMzQ3NDY2MDBCMUE5QUIgLyogWWFy
ckZsYWdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJGbGFncy5oOyBw
YXRoID0geWFyci9ZYXJyRmxhZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNG
RjlCQzYyMjM0NzQ2NjAwQjFBOUFCIC8qIFlhcnJGbGFncy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBZYXJyRmxhZ3MuY3BwOyBwYXRoID0geWFyci9ZYXJyRmxhZ3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTAzRkExMzE4OEUwRkFGMDAxMTBG
MTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTc1NzYsNiArNzU4OCw4IEBACiAJCQkJQTMyMUFBNkMyNjI2MzU5QjAwMjNBREEy
IC8qIEludGxXb3JrYXJvdW5kLmggKi8sCiAJCQkJMEYyNzVGMkMxRUNFMDc5NjAwNjIwRDQ3IC8q
IEludHJpbnNpYy5jcHAgKi8sCiAJCQkJODZCRjY0MkExNDhEQjJCNTAwNERFMzZBIC8qIEludHJp
bnNpYy5oICovLAorCQkJCUEzOENBNTlCMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmNwcCAq
LywKKwkJCQlBMzhDQTU5QzI2REQ4NERFMDBDOEQ4NEMgLyogSVNPODYwMS5oICovLAogCQkJCThC
OUY2RDU1MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggKi8sCiAJCQkJRkU0RDU1
QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovLAogCQkJCTcwMTEzRDQ5
MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLApAQCAtNzk3NCw2
ICs3OTg4LDEyIEBACiAJCQkJRTMyRDRERTQyNkRBRkQ0MzAwRDQ1MzNBIC8qIFRlbXBvcmFsQ2Fs
ZW5kYXJDb25zdHJ1Y3Rvci5oICovLAogCQkJCUUzMkQ0REUyMjZEQUZENDIwMEQ0NTMzQSAvKiBU
ZW1wb3JhbENhbGVuZGFyUHJvdG90eXBlLmNwcCAqLywKIAkJCQlFMzJENERFMTI2REFGRDQyMDBE
NDUzM0EgLyogVGVtcG9yYWxDYWxlbmRhclByb3RvdHlwZS5oICovLAorCQkJCUEzQzdFREIxMjZC
MERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmNwcCAqLywKKwkJCQlBM0M3RURCMzI2
QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovLAorCQkJCUEzQzdFREIyMjZC
MERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJ
CUEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iu
aCAqLywKKwkJCQlBM0M3RURCNTI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZS5jcHAgKi8sCisJCQkJQTNDN0VEQjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGUuaCAqLywKIAkJCQlGNkYxNTAxQjI2OTNEMzNFMDA0Qjk4RUYgLyog
VGVtcG9yYWxOb3cuY3BwICovLAogCQkJCUY2RjE1MDE4MjY5M0QzM0QwMDRCOThFRiAvKiBUZW1w
b3JhbE5vdy5oICovLAogCQkJCUY2RjE1MDE5MjY5M0QzM0UwMDRCOThFRiAvKiBUZW1wb3JhbE9i
amVjdC5jcHAgKi8sCkBAIC0xMDA5NCw2ICsxMDExNCw3IEBACiAJCQkJQTMyMUFBNkQyNjI2MzU5
QjAwMjNBREEyIC8qIEludGxXb3JrYXJvdW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgw
MTE0OEVBNkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzRF
MDM1NDFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTM4Q0E1OUUyNkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRENFMTMyMUZCMTFEQTQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI0Njc4MDFGRERBNkYxMDAzRkNC
MDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNDY3ODExRkREQTZGNzAw
M0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNjc1LDYg
KzEwNjk2LDkgQEAKIAkJCQlFMzlEQTFEQjI2REI1RTUxMDAxMDA0MzcgLyogVGVtcG9yYWxDYWxl
bmRhckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyRDRERTcyNkRBRkQ0
MzAwRDQ1MzNBIC8qIFRlbXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzOURBMURBMjZEQjVFNEMwMDEwMDQzNyAvKiBUZW1wb3JhbENhbGVuZGFyUHJvdG90eXBl
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRl
bXBvcmFsRHVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEzQzdFREJBMjZCMERCMzgwMDRD
MzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEzQzdFREI2MjZCMERCMzgwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGNkYxNTAyMTI2OTNENDUwMDA0Qjk4RUYgLyogVGVtcG9yYWxP
YmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIyMTcg
LyogVGVtcFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ0QTdCNDIwQkY2OEQ5
MDAyMkIxNzEgLyogVGVybWluYXRlZENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDBhY2E4MWFiMDdmMzk0OTVjMDE4NjE3ZGUzNzUxYWQz
ZWM1NzkzZGEuLjZiNjg1ZWE0NGM1OTBkYmVkNjI0NWQxYzJlM2ZhYmYzZmI0NjVmYWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTg1Myw2ICs4NTMsNyBAQCBydW50aW1lL0ludGxT
ZWdtZW50ZXJQcm90b3R5cGUuY3BwCiBydW50aW1lL0ludGxTZWdtZW50cy5jcHAKIHJ1bnRpbWUv
SW50bFNlZ21lbnRzUHJvdG90eXBlLmNwcAogcnVudGltZS9JbnRsV29ya2Fyb3VuZC5jcHAgQG5v
LXVuaWZ5IC8vIENvbmZpbmUgVV9ISURFX0RSQUZUX0FQSSdzIGVmZmVjdCB0byB0aGlzIGZpbGUu
CitydW50aW1lL0lTTzg2MDEuY3BwCiBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAKIHJ1
bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuY3BwCiBydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0xMDEz
LDYgKzEwMTQsOSBAQCBydW50aW1lL1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5jcHAKIHJ1bnRp
bWUvVGVtcG9yYWxDYWxlbmRhci5jcHAKIHJ1bnRpbWUvVGVtcG9yYWxDYWxlbmRhckNvbnN0cnVj
dG9yLmNwcAogcnVudGltZS9UZW1wb3JhbENhbGVuZGFyUHJvdG90eXBlLmNwcAorcnVudGltZS9U
ZW1wb3JhbER1cmF0aW9uLmNwcAorcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3Iu
Y3BwCitydW50aW1lL1RlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuY3BwCiBydW50aW1lL1RlbXBv
cmFsTm93LmNwcAogcnVudGltZS9UZW1wb3JhbE9iamVjdC5jcHAKIHJ1bnRpbWUvVGVzdFJ1bm5l
clV0aWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uSWRlbnRpZmllcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklk
ZW50aWZpZXJzLmgKaW5kZXggNjY2NmFkNTFjMzYyMDIyMTllMGIyYzgzYThiNTE4ODAwOTRmMWYx
Yi4uNzE0YWEyZmViMjI0ZmE1OGYyN2VkNTU1MWI2N2M5ZjMyNjVjYmQyNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC05OSw2
ICs5OSw3IEBACiAgICAgbWFjcm8oY291bnRlcnMpIFwKICAgICBtYWNybyhkYXRlU3R5bGUpIFwK
ICAgICBtYWNybyhkYXkpIFwKKyAgICBtYWNybyhkYXlzKSBcCiAgICAgbWFjcm8oZGF5UGVyaW9k
KSBcCiAgICAgbWFjcm8oZGVmaW5lUHJvcGVydHkpIFwKICAgICBtYWNybyhkZXJlZikgXApAQCAt
MTM4LDYgKzEzOSw3IEBACiAgICAgbWFjcm8oaGFzaCkgXAogICAgIG1hY3JvKGhlYWRlcikgXAog
ICAgIG1hY3JvKGhvdXIpIFwKKyAgICBtYWNybyhob3VycykgXAogICAgIG1hY3JvKGhvdXJDeWNs
ZSkgXAogICAgIG1hY3JvKGhvdXIxMikgXAogICAgIG1hY3JvKGlkKSBcCkBAIC0xNTgsNiArMTYw
LDcgQEAKICAgICBtYWNybyhqb2luKSBcCiAgICAgbWFjcm8obGFuZ3VhZ2UpIFwKICAgICBtYWNy
byhsYW5ndWFnZURpc3BsYXkpIFwKKyAgICBtYWNybyhsYXJnZXN0VW5pdCkgXAogICAgIG1hY3Jv
KGxhc3RJbmRleCkgXAogICAgIG1hY3JvKGxlbmd0aCkgXAogICAgIG1hY3JvKGxpbmUpIFwKQEAg
LTE2NiwxNCArMTY5LDE5IEBACiAgICAgbWFjcm8obWF4aW11bUZyYWN0aW9uRGlnaXRzKSBcCiAg
ICAgbWFjcm8obWF4aW11bVNpZ25pZmljYW50RGlnaXRzKSBcCiAgICAgbWFjcm8obWVzc2FnZSkg
XAorICAgIG1hY3JvKG1pY3Jvc2Vjb25kcykgXAorICAgIG1hY3JvKG1pbGxpc2Vjb25kcykgXAog
ICAgIG1hY3JvKG1pbmltdW1GcmFjdGlvbkRpZ2l0cykgXAogICAgIG1hY3JvKG1pbmltdW1JbnRl
Z2VyRGlnaXRzKSBcCiAgICAgbWFjcm8obWluaW11bVNpZ25pZmljYW50RGlnaXRzKSBcCiAgICAg
bWFjcm8obWludXRlKSBcCisgICAgbWFjcm8obWludXRlcykgXAogICAgIG1hY3JvKG1vbnRoKSBc
CiAgICAgbWFjcm8obW9udGhDb2RlKSBcCisgICAgbWFjcm8obW9udGhzKSBcCiAgICAgbWFjcm8o
bXVsdGlsaW5lKSBcCiAgICAgbWFjcm8obmFtZSkgXAorICAgIG1hY3JvKG5hbm9zZWNvbmRzKSBc
CiAgICAgbWFjcm8obmV4dCkgXAogICAgIG1hY3JvKG5vdykgXAogICAgIG1hY3JvKG51bUlubGlu
ZWRDYWxscykgXApAQCAtMTk2LDEzICsyMDQsMTcgQEAKICAgICBtYWNybyhyZWdpb24pIFwKICAg
ICBtYWNybyhyZXBsYWNlKSBcCiAgICAgbWFjcm8ocmVzb2x2ZSkgXAorICAgIG1hY3JvKHJvdW5k
aW5nSW5jcmVtZW50KSBcCisgICAgbWFjcm8ocm91bmRpbmdNb2RlKSBcCiAgICAgbWFjcm8oc2Ny
aXB0KSBcCiAgICAgbWFjcm8oc2Vjb25kKSBcCisgICAgbWFjcm8oc2Vjb25kcykgXAogICAgIG1h
Y3JvKHNlZ21lbnQpIFwKICAgICBtYWNybyhzZW5zaXRpdml0eSkgXAogICAgIG1hY3JvKHNldCkg
XAogICAgIG1hY3JvKHNpemUpIFwKICAgICBtYWNybyhzbGljZSkgXAorICAgIG1hY3JvKHNtYWxs
ZXN0VW5pdCkgXAogICAgIG1hY3JvKHNvdXJjZSkgXAogICAgIG1hY3JvKHNvdXJjZUNvZGUpIFwK
ICAgICBtYWNybyhzb3VyY2VVUkwpIFwKQEAgLTIyOSwxMiArMjQxLDE1IEBACiAgICAgbWFjcm8o
dHlwZSkgXAogICAgIG1hY3JvKHVpZCkgXAogICAgIG1hY3JvKHVuaWNvZGUpIFwKKyAgICBtYWNy
byh1bml0KSBcCiAgICAgbWFjcm8odXNhZ2UpIFwKICAgICBtYWNybyh2YWx1ZSkgXAogICAgIG1h
Y3JvKHZhbHVlT2YpIFwKICAgICBtYWNybyh3ZWVrZGF5KSBcCisgICAgbWFjcm8od2Vla3MpIFwK
ICAgICBtYWNybyh3cml0YWJsZSkgXAotICAgIG1hY3JvKHllYXIpCisgICAgbWFjcm8oeWVhcikg
XAorICAgIG1hY3JvKHllYXJzKQogCiAjZGVmaW5lIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFD
SF9QUklWQVRFX0ZJRUxEKG1hY3JvKSBcCiAgICAgbWFjcm8oY29uc3RydWN0b3IpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JU084NjAxLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0lTTzg2MDEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1YmQzNGQwZDBk
OGJhZDdjMTQwYzI4MzhkZTQ2NmY4OWI5Mzc3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JU084NjAxLmNwcApAQCAtMCwwICsxLDIzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSVNPODYwMS5oIgor
CisjaW5jbHVkZSAiUGFyc2VJbnQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5n
QnVmZmVyLmg+CisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIElTTzg2MDEgeworCisvLyBE
dXJhdGlvbkhhbmRsZUZyYWN0aW9ucyAoIGZIb3VycywgbWludXRlcywgZk1pbnV0ZXMsIHNlY29u
ZHMsIGZTZWNvbmRzLCBtaWxsaXNlY29uZHMsIGZNaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywg
Zk1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIGZOYW5vc2Vjb25kcyApCisvLyBodHRwczovL3Rj
MzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC1kdXJhdGlvbmhhbmRsZWZyYWN0
aW9ucworc3RhdGljIHZvaWQgaGFuZGxlRnJhY3Rpb24oRHVyYXRpb24mIGR1cmF0aW9uLCBpbnQg
ZmFjdG9yLCBTdHJpbmdWaWV3IGZyYWN0aW9uU3RyaW5nLCBUZW1wb3JhbFVuaXQgZnJhY3Rpb25U
eXBlKQoreworICAgIEFTU0VSVChmcmFjdGlvblN0cmluZy5sZW5ndGgoKSAmJiBmcmFjdGlvblN0
cmluZy5sZW5ndGgoKSA8PSA5ICYmIGZyYWN0aW9uU3RyaW5nLmlzQWxsQVNDSUkoKSk7CisgICAg
QVNTRVJUKGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6OkhvdXIgfHwgZnJhY3Rpb25UeXBl
ID09IFRlbXBvcmFsVW5pdDo6TWludXRlIHx8IGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6
OlNlY29uZCk7CisKKyAgICBpZiAoZnJhY3Rpb25UeXBlID09IFRlbXBvcmFsVW5pdDo6U2Vjb25k
KSB7CisgICAgICAgIFZlY3RvcjxMQ2hhciwgOT4gcGFkZGVkKDksICcwJyk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFjdGlvblN0cmluZy5sZW5ndGgoKTsgaSsrKQorICAg
ICAgICAgICAgcGFkZGVkW2ldID0gZnJhY3Rpb25TdHJpbmdbaV07CisgICAgICAgIGR1cmF0aW9u
LnNldE1pbGxpc2Vjb25kcyhmYWN0b3IgKiBwYXJzZUludCh7IHBhZGRlZC5kYXRhKCksIDMgfSwg
MTApKTsKKyAgICAgICAgZHVyYXRpb24uc2V0TWljcm9zZWNvbmRzKGZhY3RvciAqIHBhcnNlSW50
KHsgJnBhZGRlZC5kYXRhKClbM10sIDMgfSwgMTApKTsKKyAgICAgICAgZHVyYXRpb24uc2V0TmFu
b3NlY29uZHMoZmFjdG9yICogcGFyc2VJbnQoeyAmcGFkZGVkLmRhdGEoKVs2XSwgMyB9LCAxMCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZG91YmxlIGZyYWN0aW9uID0gZmFjdG9y
ICogcGFyc2VJbnQoZnJhY3Rpb25TdHJpbmcsIDEwKSAvIHN0ZDo6cG93KDEwLCBmcmFjdGlvblN0
cmluZy5sZW5ndGgoKSk7CisgICAgaWYgKCFmcmFjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGZyYWN0aW9uVHlwZSA9PSBUZW1wb3JhbFVuaXQ6OkhvdXIpIHsKKyAgICAgICAgZnJh
Y3Rpb24gKj0gNjA7CisgICAgICAgIGR1cmF0aW9uLnNldE1pbnV0ZXMoc3RkOjp0cnVuYyhmcmFj
dGlvbikpOworICAgICAgICBmcmFjdGlvbiA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMSk7CisgICAg
ICAgIGlmICghZnJhY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnJh
Y3Rpb24gKj0gNjA7CisgICAgZHVyYXRpb24uc2V0U2Vjb25kcyhzdGQ6OnRydW5jKGZyYWN0aW9u
KSk7CisgICAgZnJhY3Rpb24gPSBzdGQ6OmZtb2QoZnJhY3Rpb24sIDEpOworICAgIGlmICghZnJh
Y3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGZyYWN0aW9uICo9IDEwMDA7CisgICAgZHVy
YXRpb24uc2V0TWlsbGlzZWNvbmRzKHN0ZDo6dHJ1bmMoZnJhY3Rpb24pKTsKKyAgICBmcmFjdGlv
biA9IHN0ZDo6Zm1vZChmcmFjdGlvbiwgMSk7CisgICAgaWYgKCFmcmFjdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgZnJhY3Rpb24gKj0gMTAwMDsKKyAgICBkdXJhdGlvbi5zZXRNaWNyb3Nl
Y29uZHMoc3RkOjp0cnVuYyhmcmFjdGlvbikpOworICAgIGZyYWN0aW9uID0gc3RkOjpmbW9kKGZy
YWN0aW9uLCAxKTsKKyAgICBpZiAoIWZyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBk
dXJhdGlvbi5zZXROYW5vc2Vjb25kcyhzdGQ6OnRydW5jKGZyYWN0aW9uICogMTAwMCkpOworfQor
CisvLyBQYXJzZVRlbXBvcmFsRHVyYXRpb25TdHJpbmcgKCBpc29TdHJpbmcgKQorLy8gaHR0cHM6
Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtcGFyc2V0ZW1wb3JhbGR1
cmF0aW9uc3RyaW5nCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIHN0
ZDo6b3B0aW9uYWw8RHVyYXRpb24+IHBhcnNlRHVyYXRpb24oU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQoreworICAgIC8vIElTTyA4NjAxIGR1cmF0aW9uIHN0cmlu
Z3MgYXJlIGxpa2UgIi1QMVkyTTNXNERUNUg2TTcuMTIzNDU2Nzg5UyIuIE5vdGVzOgorICAgIC8v
IC0gY2FzZSBpbnNlbnNpdGl2ZQorICAgIC8vIC0gc2lnbjogKyAtIOKIkihVKzIyMTIpCisgICAg
Ly8gLSBzZXBhcmF0b3I6IC4gLAorICAgIC8vIC0gVCBpcyBwcmVzZW50IGlmZiB0aGVyZSBpcyBh
IHRpbWUgcGFydAorICAgIC8vIC0gaW50ZWdyYWwgcGFydHMgY2FuIGhhdmUgYW55IG51bWJlciBv
ZiBkaWdpdHMgYnV0IGZyYWN0aW9uYWwgcGFydHMgaGF2ZSBhdCBtb3N0IDkKKyAgICAvLyAtIGhv
dXJzIGFuZCBtaW51dGVzIGNhbiBoYXZlIGZyYWN0aW9uYWwgcGFydHMgdG9vLCBidXQgb25seSBh
cyB0aGUgTEFTVCBwYXJ0IG9mIHRoZSBzdHJpbmcKKyAgICBpZiAoYnVmZmVyLmxlbmd0aFJlbWFp
bmluZygpIDwgMykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIER1cmF0aW9u
IHJlc3VsdDsKKworICAgIGludCBmYWN0b3IgPSAxOworICAgIGlmICgqYnVmZmVyID09ICcrJykK
KyAgICAgICAgYnVmZmVyLmFkdmFuY2UoKTsKKyAgICBlbHNlIGlmICgqYnVmZmVyID09ICctJyB8
fCAqYnVmZmVyID09IDB4MjIxMikgeworICAgICAgICBmYWN0b3IgPSAtMTsKKyAgICAgICAgYnVm
ZmVyLmFkdmFuY2UoKTsKKyAgICB9CisKKyAgICBpZiAodG9BU0NJSVVwcGVyKCpidWZmZXIpICE9
ICdQJykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGJ1ZmZlci5hZHZhbmNl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBkYXRlUGFydEluZGV4ID0gMDsgZGF0ZVBhcnRJbmRleCA8
IDQgJiYgYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoKmJ1
ZmZlcik7IGJ1ZmZlci5hZHZhbmNlKCkpIHsKKyAgICAgICAgdW5zaWduZWQgZGlnaXRzID0gMTsK
KyAgICAgICAgd2hpbGUgKGRpZ2l0cyA8IGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSAmJiBpc0FT
Q0lJRGlnaXQoYnVmZmVyW2RpZ2l0c10pKQorICAgICAgICAgICAgZGlnaXRzKys7CisKKyAgICAg
ICAgZG91YmxlIGludGVnZXIgPSBmYWN0b3IgKiBwYXJzZUludCh7IGJ1ZmZlci5wb3NpdGlvbigp
LCBkaWdpdHMgfSwgMTApOworICAgICAgICBidWZmZXIuYWR2YW5jZUJ5KGRpZ2l0cyk7CisgICAg
ICAgIGlmIChidWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICAgICAgc3dpdGNoICh0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikpIHsKKyAgICAgICAgY2Fz
ZSAnWSc6CisgICAgICAgICAgICBpZiAoZGF0ZVBhcnRJbmRleCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmVzdWx0LnNldFllYXJzKGludGVnZXIp
OworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnTSc6CisgICAgICAgICAgICBpZiAoZGF0ZVBhcnRJbmRleCA+PSAyKQorICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICByZXN1bHQuc2V0
TW9udGhzKGludGVnZXIpOworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVyc6CisgICAgICAgICAgICBpZiAoZGF0ZVBhcnRJ
bmRleCA+PSAzKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAg
ICAgICByZXN1bHQuc2V0V2Vla3MoaW50ZWdlcik7CisgICAgICAgICAgICBkYXRlUGFydEluZGV4
ID0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdEJzoKKyAgICAgICAgICAg
IHJlc3VsdC5zZXREYXlzKGludGVnZXIpOworICAgICAgICAgICAgZGF0ZVBhcnRJbmRleCA9IDQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnVmZmVyLmF0RW5k
KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAoYnVmZmVyLmxlbmd0aFJlbWFp
bmluZygpIDwgMyB8fCB0b0FTQ0lJVXBwZXIoKmJ1ZmZlcikgIT0gJ1QnKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgYnVmZmVyLmFkdmFuY2UoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIHRpbWVQYXJ0SW5kZXggPSAwOyB0aW1lUGFydEluZGV4IDwgMyAmJiBidWZmZXIuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgqYnVmZmVyKTsgYnVmZmVyLmFkdmFu
Y2UoKSkgeworICAgICAgICB1bnNpZ25lZCBkaWdpdHMgPSAxOworICAgICAgICB3aGlsZSAoZGln
aXRzIDwgYnVmZmVyLmxlbmd0aFJlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdChidWZmZXJbZGln
aXRzXSkpCisgICAgICAgICAgICBkaWdpdHMrKzsKKworICAgICAgICBkb3VibGUgaW50ZWdlciA9
IGZhY3RvciAqIHBhcnNlSW50KHsgYnVmZmVyLnBvc2l0aW9uKCksIGRpZ2l0cyB9LCAxMCk7Cisg
ICAgICAgIGJ1ZmZlci5hZHZhbmNlQnkoZGlnaXRzKTsKKyAgICAgICAgaWYgKGJ1ZmZlci5hdEVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBTdHJpbmdW
aWV3IGZyYWN0aW9uYWxQYXJ0OworICAgICAgICBpZiAoKmJ1ZmZlciA9PSAnLicgfHwgKmJ1ZmZl
ciA9PSAnLCcpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hZHZhbmNlKCk7CisgICAgICAgICAgICBk
aWdpdHMgPSAwOworICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cyA8IGJ1ZmZlci5sZW5ndGhSZW1h
aW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoYnVmZmVyW2RpZ2l0c10pKQorICAgICAgICAgICAgICAg
IGRpZ2l0cysrOworICAgICAgICAgICAgaWYgKCFkaWdpdHMgfHwgZGlnaXRzID4gOSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgICAgICBmcmFjdGlvbmFs
UGFydCA9IHsgYnVmZmVyLnBvc2l0aW9uKCksIGRpZ2l0cyB9OworICAgICAgICAgICAgYnVmZmVy
LmFkdmFuY2VCeShkaWdpdHMpOworICAgICAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICBz
d2l0Y2ggKHRvQVNDSUlVcHBlcigqYnVmZmVyKSkgeworICAgICAgICBjYXNlICdIJzoKKyAgICAg
ICAgICAgIGlmICh0aW1lUGFydEluZGV4KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgICAgICAgICByZXN1bHQuc2V0SG91cnMoaW50ZWdlcik7CisgICAgICAgICAg
ICBpZiAoZnJhY3Rpb25hbFBhcnQpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVGcmFjdGlvbihy
ZXN1bHQsIGZhY3RvciwgZnJhY3Rpb25hbFBhcnQsIFRlbXBvcmFsVW5pdDo6SG91cik7CisgICAg
ICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9IDM7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICB0aW1lUGFydEluZGV4ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICdNJzoKKyAgICAgICAgICAgIGlmICh0aW1lUGFydEluZGV4ID49IDIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRNaW51
dGVzKGludGVnZXIpOworICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxQYXJ0KSB7CisgICAgICAg
ICAgICAgICAgaGFuZGxlRnJhY3Rpb24ocmVzdWx0LCBmYWN0b3IsIGZyYWN0aW9uYWxQYXJ0LCBU
ZW1wb3JhbFVuaXQ6Ok1pbnV0ZSk7CisgICAgICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9IDM7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB0aW1lUGFydEluZGV4ID0gMjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdTJzoKKyAgICAgICAgICAgIHJlc3Vs
dC5zZXRTZWNvbmRzKGludGVnZXIpOworICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxQYXJ0KQor
ICAgICAgICAgICAgICAgIGhhbmRsZUZyYWN0aW9uKHJlc3VsdCwgZmFjdG9yLCBmcmFjdGlvbmFs
UGFydCwgVGVtcG9yYWxVbml0OjpTZWNvbmQpOworICAgICAgICAgICAgdGltZVBhcnRJbmRleCA9
IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnVmZmVyLmhh
c0NoYXJhY3RlcnNSZW1haW5pbmcoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8RHVyYXRpb24+IHBhcnNlRHVy
YXRpb24oU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9y
UGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gYnVmZmVyKSAtPiBzdGQ6Om9wdGlvbmFsPER1cmF0aW9u
PiB7CisgICAgICAgIHJldHVybiBwYXJzZUR1cmF0aW9uKGJ1ZmZlcik7CisgICAgfSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIElTTzg2MDEKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSVNPODYwMS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSVNPODYwMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1N2MxY2E1MmI0N2Y0N2E5M2Q0
N2ZiMGE0N2I5YjViZmNjYjYwODUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JU084NjAxLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlbXBvcmFsT2JqZWN0LmgiCisKK25hbWVzcGFj
ZSBKU0MgeworbmFtZXNwYWNlIElTTzg2MDEgeworCitzdHJ1Y3QgRHVyYXRpb24geworICAgIHVz
aW5nIGNvbnN0X2l0ZXJhdG9yID0gc3RkOjphcnJheTxkb3VibGUsIG51bWJlck9mVGVtcG9yYWxV
bml0cz46OmNvbnN0X2l0ZXJhdG9yOworCisjZGVmaW5lIEpTQ19ERUZJTkVfSVNPODYwMV9EVVJB
VElPTl9GSUVMRChuYW1lLCBjYXBpdGFsaXplZE5hbWUpIFwKKyAgICBkb3VibGUgbmFtZSMjcygp
IGNvbnN0IHsgcmV0dXJuIGRhdGFbc3RhdGljX2Nhc3Q8dWludDhfdD4oVGVtcG9yYWxVbml0Ojpj
YXBpdGFsaXplZE5hbWUpXTsgfSBcCisgICAgdm9pZCBzZXQjI2NhcGl0YWxpemVkTmFtZSMjcyhk
b3VibGUgdmFsdWUpIHsgZGF0YVtzdGF0aWNfY2FzdDx1aW50OF90PihUZW1wb3JhbFVuaXQ6OmNh
cGl0YWxpemVkTmFtZSldID0gdmFsdWU7IH0KKyAgICBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX0RF
RklORV9JU084NjAxX0RVUkFUSU9OX0ZJRUxEKTsKKyN1bmRlZiBKU0NfREVGSU5FX0lTTzg2MDFf
RFVSQVRJT05fRklFTEQKKworICAgIGRvdWJsZSYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1
cm4gZGF0YVtpXTsgfQorICAgIGNvbnN0IGRvdWJsZSYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29u
c3QgeyByZXR1cm4gZGF0YVtpXTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gZGF0YS5iZWdpbigpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gZGF0YS5lbmQoKTsgfQorICAgIHZvaWQgY2xlYXIoKSB7IGRhdGEuZmlsbCgwKTsg
fQorCisgICAgc3RkOjphcnJheTxkb3VibGUsIG51bWJlck9mVGVtcG9yYWxVbml0cz4gZGF0YSB7
IH07Cit9OworCitzdGQ6Om9wdGlvbmFsPER1cmF0aW9uPiBwYXJzZUR1cmF0aW9uKFN0cmluZ1Zp
ZXcpOworCit9IC8vIG5hbWVzcGFjZSBJU084NjAxCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCBk
NDU2N2VmZTkwMjZjOWE2NDc1ZWQ0NWFiZWEyYWVjNmM3NDg2NDQzLi42YjJmNDYxOGRhMTczOGEy
OGMwNjNjNmVlYTYyZjY4NjhjNzRiZGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0yMDIsOCArMjAyLDkgQEAKICNpbmNsdWRl
ICJTeW1ib2xPYmplY3QuaCIKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUuaCIKICNpbmNsdWRl
ICJUZW1wb3JhbENhbGVuZGFyLmgiCi0jaW5jbHVkZSAiVGVtcG9yYWxDYWxlbmRhckNvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxDYWxlbmRhclByb3RvdHlwZS5oIgorI2luY2x1ZGUg
IlRlbXBvcmFsRHVyYXRpb24uaCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiVGVtcG9yYWxPYmplY3QuaCIKICNpbmNsdWRlICJWTVRyYXBzSW5saW5l
cy5oIgogI2luY2x1ZGUgIldhc21DYXBhYmlsaXRpZXMuaCIKQEAgLTEyMjIsNiArMTIyMywxMyBA
QCBjYXBpdGFsTmFtZSAjIyBDb25zdHJ1Y3RvciogbG93ZXJOYW1lICMjIENvbnN0cnVjdG9yID0g
ZmVhdHVyZUZsYWcgPyBjYXBpdGFsTmFtZQogICAgICAgICAgICAgICAgIGluaXQuc2V0KFRlbXBv
cmFsQ2FsZW5kYXI6OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBnbG9iYWxPYmplY3QsIGNhbGVu
ZGFyUHJvdG90eXBlKSk7CiAgICAgICAgICAgICB9KTsKIAorICAgICAgICBtX2R1cmF0aW9uU3Ry
dWN0dXJlLmluaXRMYXRlcigKKyAgICAgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1
Y3R1cmU+JiBpbml0KSB7CisgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpOworICAgICAgICAgICAg
ICAgIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIGR1cmF0aW9uUHJvdG90eXBlID0gVGVtcG9y
YWxEdXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlKGluaXQudm0sIFRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKKyAgICAgICAgICAgICAgICBpbml0LnNldChUZW1wb3Jh
bER1cmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgZ2xvYmFsT2JqZWN0LCBkdXJhdGlv
blByb3RvdHlwZSkpOworICAgICAgICAgICAgfSk7CisKICAgICAgICAgVGVtcG9yYWxPYmplY3Qq
IHRlbXBvcmFsID0gVGVtcG9yYWxPYmplY3Q6OmNyZWF0ZSh2bSwgVGVtcG9yYWxPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcykpOwogICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+VGVtcG9yYWwsIHRlbXBvcmFsLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgfQpAQCAtMjEw
MSw2ICsyMTA5LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSlND
ZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIHRoaXNPYmplY3QtPm1fbnVtYmVyRm9y
bWF0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogCiAgICAgdGhpc09iamVjdC0+bV9jYWxlbmRh
clN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2R1cmF0aW9uU3Ry
dWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9udWxsR2V0dGVyRnVuY3Rpb24pOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
bnVsbFNldHRlckZ1bmN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCmluZGV4IDEyNDY1OGYyNDUyZTBjNWFkMGZkZWViMTRlOTBiZTYzODk4
ZGIzMjguLmQ0ZGUzMGI2MTM2ZTljYzkzMTg0MjA3NDI0ZTQ3YWYyYTExNWU5OTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMzI1LDYg
KzMyNSw3IEBAIHB1YmxpYzoKICAgICBMYXp5Q2xhc3NTdHJ1Y3R1cmUgbV9udW1iZXJGb3JtYXRT
dHJ1Y3R1cmU7CiAKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4g
bV9jYWxlbmRhclN0cnVjdHVyZTsKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0
cnVjdHVyZT4gbV9kdXJhdGlvblN0cnVjdHVyZTsKIAogICAgIFdyaXRlQmFycmllcjxOdWxsR2V0
dGVyRnVuY3Rpb24+IG1fbnVsbEdldHRlckZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxOdWxs
U2V0dGVyRnVuY3Rpb24+IG1fbnVsbFNldHRlckZ1bmN0aW9uOwpAQCAtODczLDYgKzg3NCw3IEBA
IHB1YmxpYzoKICAgICBKU09iamVjdCogbnVtYmVyRm9ybWF0UHJvdG90eXBlKCkgeyByZXR1cm4g
bV9udW1iZXJGb3JtYXRTdHJ1Y3R1cmUucHJvdG90eXBlKHRoaXMpOyB9CiAKICAgICBTdHJ1Y3R1
cmUqIGNhbGVuZGFyU3RydWN0dXJlKCkgeyByZXR1cm4gbV9jYWxlbmRhclN0cnVjdHVyZS5nZXQo
dGhpcyk7IH0KKyAgICBTdHJ1Y3R1cmUqIGR1cmF0aW9uU3RydWN0dXJlKCkgeyByZXR1cm4gbV9k
dXJhdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgc2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChib29sKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIHJlbW90ZURlYnVnZ2luZ0VuYWJsZWQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmIx
YzRlMDRlMTQ3MjQwZGZmOTA2YzE1NjZjMTdmMGM4Mjk2MzA0NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsRHVyYXRpb24uY3BwCkBAIC0w
LDAgKzEsNjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCisKKyNpbmNsdWRlICJJbnRsT2JqZWN0SW5saW5lcy5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgY29uc3RleHByIGRvdWJsZSBuYW5v
c2Vjb25kc1BlckRheSA9IDI0LjAgKiA2MCAqIDYwICogMTAwMCAqIDEwMDAgKiAxMDAwOworCitz
dGF0aWMgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZShWTSYgdm0sIHVuc2lnbmVkIGluZGV4KQor
eworICAgIEFTU0VSVChpbmRleCA8IG51bWJlck9mVGVtcG9yYWxVbml0cyk7CisgICAgc3dpdGNo
IChzdGF0aWNfY2FzdDxUZW1wb3JhbFVuaXQ+KGluZGV4KSkgeworI2RlZmluZSBKU0NfVEVNUE9S
QUxfRFVSQVRJT05fUFJPUEVSVFlfTkFNRShuYW1lLCBjYXBpdGFsaXplZE5hbWUpIGNhc2UgVGVt
cG9yYWxVbml0OjpjYXBpdGFsaXplZE5hbWU6IHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1l
IyNzOyAKKyAgICAgICAgSlNDX1RFTVBPUkFMX1VOSVRTKEpTQ19URU1QT1JBTF9EVVJBVElPTl9Q
Uk9QRVJUWV9OQU1FKQorI3VuZGVmIEpTQ19URU1QT1JBTF9EVVJBVElPTl9QUk9QRVJUWV9OQU1F
CisgICAgfQorfQorCitjb25zdCBDbGFzc0luZm8gVGVtcG9yYWxEdXJhdGlvbjo6c19pbmZvID0g
eyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShUZW1wb3JhbER1cmF0aW9uKSB9OworCitUZW1wb3JhbER1cmF0aW9uKiBUZW1wb3Jh
bER1cmF0aW9uOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ViZHVyYXRp
b25zJiYgc3ViZHVyYXRpb25zKQoreworICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFRlbXBvcmFsRHVyYXRpb24+KHZtLmhlYXApKSBUZW1wb3JhbER1cmF0aW9u
KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoc3ViZHVyYXRpb25zKSk7CisgICAgb2JqZWN0LT5maW5p
c2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworU3RydWN0dXJlKiBUZW1w
b3JhbER1cmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK1RlbXBvcmFsRHVyYXRpb246OlRlbXBvcmFs
RHVyYXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ViZHVyYXRpb25zJiYgc3Vi
ZHVyYXRpb25zKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9zdWJkdXJhdGlv
bnMoV1RGTW92ZShzdWJkdXJhdGlvbnMpKQoreworfQorCit2b2lkIFRlbXBvcmFsRHVyYXRpb246
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKK30KKworLy8gSXNWYWxpZER1cmF0
aW9uICggeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRz
LCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMgKQorLy8gaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtaXN2YWxpZGR1cmF0aW9uCitz
dGF0aWMgYm9vbCBpc1ZhbGlkRHVyYXRpb24oY29uc3QgVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVy
YXRpb25zJiBzdWJkdXJhdGlvbnMpCit7CisgICAgaW50IHNpZ24gPSAwOworICAgIGZvciAoYXV0
byB2YWx1ZSA6IHN1YmR1cmF0aW9ucykgeworICAgICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodmFs
dWUpIHx8ICh2YWx1ZSA8IDAgJiYgc2lnbiA+IDApIHx8ICh2YWx1ZSA+IDAgJiYgc2lnbiA8IDAp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghc2lnbiAmJiB2YWx1
ZSkKKyAgICAgICAgICAgIHNpZ24gPSB2YWx1ZSA+IDAgPyAxIDogLTE7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKKy8vIENyZWF0ZVRlbXBvcmFsRHVyYXRpb24gKCB5ZWFycywgbW9u
dGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywg
bWljcm9zZWNvbmRzLCBuYW5vc2Vjb25kcyBbICwgbmV3VGFyZ2V0IF0gKQorLy8gaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtY3JlYXRldGVtcG9yYWxkdXJh
dGlvbgorVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6dHJ5Q3JlYXRlSWZWYWxp
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdWJkdXJhdGlvbnMmJiBzdWJkdXJhdGlv
bnMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBp
ZiAoIWlzVmFsaWREdXJhdGlvbihzdWJkdXJhdGlvbnMpKSB7CisgICAgICAgIHRocm93UmFuZ2VF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydGllcyBt
dXN0IGJlIGZpbml0ZSBhbmQgb2YgY29uc2lzdGVudCBzaWduIl9zKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gVGVtcG9yYWxEdXJhdGlvbjo6Y3JlYXRlKHZtLCBz
dHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUgOiBnbG9iYWxPYmplY3QtPmR1cmF0aW9uU3RydWN0dXJlKCks
IFdURk1vdmUoc3ViZHVyYXRpb25zKSk7Cit9CisKKy8vIFRvVGVtcG9yYWxEdXJhdGlvblJlY29y
ZCAoIHRlbXBvcmFsRHVyYXRpb25MaWtlICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10
ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRvdGVtcG9yYWxkdXJhdGlvbnJlY29yZAorVGVtcG9yYWxE
dXJhdGlvbjo6U3ViZHVyYXRpb25zIFRlbXBvcmFsRHVyYXRpb246OmZyb21PYmplY3QoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGR1cmF0aW9uTGlrZSkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgQVNTRVJUKCFkdXJhdGlvbkxpa2UtPmluaGVyaXRzPFRlbXBv
cmFsRHVyYXRpb24+KHZtKSk7CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0OworICAgIGF1dG8g
aGFzUmVsZXZhbnRQcm9wZXJ0eSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGR1
cmF0aW9uTGlrZS0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKHZtLCBpKSk7CisKKyAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdFtpXSA9
IDA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGhhc1JlbGV2
YW50UHJvcGVydHkgPSB0cnVlOworICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZS50b051bWJlcihn
bG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
CisgICAgICAgIGlmICghaXNJbnRlZ2VyKHJlc3VsdFtpXSkpIHsKKyAgICAgICAgICAgIHRocm93
UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVy
dGllcyBtdXN0IGJlIGludGVnZXJzIl9zKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWhhc1JlbGV2YW50UHJvcGVydHkpIHsKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIk9iamVjdCBtdXN0IGNvbnRhaW4g
YXQgbGVhc3Qgb25lIFRlbXBvcmFsLkR1cmF0aW9uIHByb3BlcnR5Il9zKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBUb1RlbXBvcmFs
RHVyYXRpb24gKCBpdGVtICkKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8j
c2VjLXRlbXBvcmFsLXRvdGVtcG9yYWxkdXJhdGlvbgorVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9y
YWxEdXJhdGlvbjo6dG9EdXJhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIGl0ZW1WYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKGl0ZW1WYWx1
ZS5pbmhlcml0czxUZW1wb3JhbER1cmF0aW9uPih2bSkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8
VGVtcG9yYWxEdXJhdGlvbio+KGl0ZW1WYWx1ZSk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmlzT2Jq
ZWN0KCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgVGVtcG9yYWxEdXJhdGlv
bjo6dHJ5Q3JlYXRlSWZWYWxpZChnbG9iYWxPYmplY3QsIGZyb21PYmplY3QoZ2xvYmFsT2JqZWN0
LCBhc09iamVjdChpdGVtVmFsdWUpKSkpOworCisgICAgU3RyaW5nIHN0cmluZyA9IGl0ZW1WYWx1
ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOworCisgICAgYXV0byBwYXJzZWRTdWJkdXJhdGlvbnMgPSBJU084NjAxOjpw
YXJzZUR1cmF0aW9uKHN0cmluZyk7CisgICAgaWYgKCFwYXJzZWRTdWJkdXJhdGlvbnMpIHsKKyAg
ICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDb3VsZCBub3QgcGFy
c2UgRHVyYXRpb24gc3RyaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVh
dGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgV1RGTW92ZShwYXJzZWRTdWJkdXJhdGlvbnMudmFsdWUo
KSkpKTsKK30KKworVGVtcG9yYWxEdXJhdGlvbiogVGVtcG9yYWxEdXJhdGlvbjo6ZnJvbShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZW1WYWx1ZSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAoaXRlbVZhbHVlLmluaGVyaXRzPFRl
bXBvcmFsRHVyYXRpb24+KHZtKSkgeworICAgICAgICBTdWJkdXJhdGlvbnMgY2xvbmVkID0ganND
YXN0PFRlbXBvcmFsRHVyYXRpb24qPihpdGVtVmFsdWUpLT5tX3N1YmR1cmF0aW9uczsKKyAgICAg
ICAgcmV0dXJuIFRlbXBvcmFsRHVyYXRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5kdXJh
dGlvblN0cnVjdHVyZSgpLCBXVEZNb3ZlKGNsb25lZCkpOworICAgIH0KKworICAgIHJldHVybiB0
b0R1cmF0aW9uKGdsb2JhbE9iamVjdCwgaXRlbVZhbHVlKTsKK30KKworLy8gVG90YWxEdXJhdGlv
bk5hbm9zZWNvbmRzICggZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25k
cywgbWljcm9zZWNvbmRzLCBuYW5vc2Vjb25kcywgb2Zmc2V0U2hpZnQgKQorLy8gaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtdG90YWxkdXJhdGlvbm5hbm9z
ZWNvbmRzCitzdGF0aWMgZG91YmxlIHRvdGFsTmFub3NlY29uZHMoVGVtcG9yYWxEdXJhdGlvbjo6
U3ViZHVyYXRpb25zJiBzdWJkdXJhdGlvbnMpCit7CisgICAgYXV0byBob3VycyA9IDI0ICogc3Vi
ZHVyYXRpb25zLmRheXMoKSArIHN1YmR1cmF0aW9ucy5ob3VycygpOworICAgIGF1dG8gbWludXRl
cyA9IDYwICogaG91cnMgKyBzdWJkdXJhdGlvbnMubWludXRlcygpOworICAgIGF1dG8gc2Vjb25k
cyA9IDYwICogbWludXRlcyArIHN1YmR1cmF0aW9ucy5zZWNvbmRzKCk7CisgICAgYXV0byBtaWxs
aXNlY29uZHMgPSAxMDAwICogc2Vjb25kcyArIHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMoKTsK
KyAgICBhdXRvIG1pY3Jvc2Vjb25kcyA9IDEwMDAgKiBtaWxsaXNlY29uZHMgKyBzdWJkdXJhdGlv
bnMubWljcm9zZWNvbmRzKCk7CisgICAgcmV0dXJuIDEwMDAgKiBtaWNyb3NlY29uZHMgKyBzdWJk
dXJhdGlvbnMubmFub3NlY29uZHMoKTsKK30KKworSlNWYWx1ZSBUZW1wb3JhbER1cmF0aW9uOjpj
b21wYXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWVPbmUsIEpT
VmFsdWUgdmFsdWVUd28pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIG9uZSA9
IHRvRHVyYXRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZU9uZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgIGF1dG8qIHR3byA9IHRvRHVyYXRpb24oZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZVR3byk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmVsYXRpdmVUbyBwYXJhbWV0ZXIgYWZ0ZXIgUGxhaW5E
YXRlVGltZSAvIFpvbmVkRGF0ZVRpbWUuCisgICAgaWYgKG9uZS0+eWVhcnMoKSB8fCB0d28tPnll
YXJzKCkgfHwgb25lLT5tb250aHMoKSB8fCB0d28tPm1vbnRocygpIHx8IG9uZS0+d2Vla3MoKSB8
fCB0d28tPndlZWtzKCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJDYW5ub3QgY29tcGFyZSBhIGR1cmF0aW9uIG9mIHllYXJzLCBtb250aHMsIG9yIHdl
ZWtzIHdpdGhvdXQgYSByZWxhdGl2ZVRvIG9wdGlvbiJfcyk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgYXV0byBuc09uZSA9IHRvdGFsTmFub3NlY29uZHMob25lLT5tX3N1YmR1
cmF0aW9ucyk7CisgICAgYXV0byBuc1R3byA9IHRvdGFsTmFub3NlY29uZHModHdvLT5tX3N1YmR1
cmF0aW9ucyk7CisgICAgcmV0dXJuIGpzTnVtYmVyKG5zT25lID4gbnNUd28gPyAxIDogbnNPbmUg
PCBuc1R3byA/IC0xIDogMCk7Cit9CisKK2ludCBUZW1wb3JhbER1cmF0aW9uOjpzaWduKGNvbnN0
IFRlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyYgc3ViZHVyYXRpb25zKQoreworICAgIGZv
ciAoYXV0byB2YWx1ZSA6IHN1YmR1cmF0aW9ucykgeworICAgICAgICBpZiAodmFsdWUgPCAwKQor
ICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGlmICh2YWx1ZSA+IDApCisgICAgICAg
ICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworVGVtcG9yYWxEdXJh
dGlvbjo6U3ViZHVyYXRpb25zIFRlbXBvcmFsRHVyYXRpb246OndpdGgoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGR1cmF0aW9uTGlrZSkgY29uc3QKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgU3ViZHVyYXRpb25zIHJlc3VsdDsKKyAgICBhdXRvIGhhc1JlbGV2
YW50UHJvcGVydHkgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9m
VGVtcG9yYWxVbml0czsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkdXJhdGlvbkxp
a2UtPmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSh2bSwgaSkpOworCisgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgICAgICByZXN1bHRbaV0gPSBtX3N1YmR1
cmF0aW9uc1tpXTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
aGFzUmVsZXZhbnRQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgIHJlc3VsdFtpXSA9IHZhbHVlLnRv
TnVtYmVyKGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICAgICAgaWYgKCFpc0ludGVnZXIocmVzdWx0W2ldKSkgeworICAgICAgICAg
ICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlv
biBwcm9wZXJ0aWVzIG11c3QgYmUgaW50ZWdlcnMiX3MpOworICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghaGFzUmVsZXZhbnRQcm9wZXJ0eSkgewor
ICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiT2JqZWN0IG11c3Qg
Y29udGFpbiBhdCBsZWFzdCBvbmUgVGVtcG9yYWwuRHVyYXRpb24gcHJvcGVydHkiX3MpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1RlbXBv
cmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjpuZWdhdGVkKCkgY29u
c3QKK3sKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZUZW1wb3JhbFVuaXRzOyBpKyspCisgICAgICAgIHJlc3VsdFtpXSA9IC1tX3N1
YmR1cmF0aW9uc1tpXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitUZW1wb3JhbER1cmF0aW9u
OjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6YWJzKCkgY29uc3QKK3sKKyAgICBTdWJk
dXJhdGlvbnMgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW1w
b3JhbFVuaXRzOyBpKyspCisgICAgICAgIHJlc3VsdFtpXSA9IHN0ZDo6YWJzKG1fc3ViZHVyYXRp
b25zW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBEZWZhdWx0VGVtcG9yYWxMYXJn
ZXN0VW5pdCAoIHllYXJzLCBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vj
b25kcywgbWlsbGlzZWNvbmRzLCBtaWNyb3NlY29uZHMgKQorLy8gaHR0cHM6Ly90YzM5LmVzL3By
b3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtZGVmYXVsdHRlbXBvcmFsbGFyZ2VzdHVuaXQK
K1RlbXBvcmFsVW5pdCBUZW1wb3JhbER1cmF0aW9uOjpsYXJnZXN0U3ViZHVyYXRpb24oKSBjb25z
dAoreworICAgIHVpbnQ4X3QgaW5kZXggPSAwOworICAgIHdoaWxlIChpbmRleCA8IG51bWJlck9m
VGVtcG9yYWxVbml0cyAtIDEgJiYgIW1fc3ViZHVyYXRpb25zW2luZGV4XSkKKyAgICAgICAgaW5k
ZXgrKzsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVtcG9yYWxVbml0PihpbmRleCk7Cit9CisK
Ky8vIEJhbGFuY2VEdXJhdGlvbiAoIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxs
aXNlY29uZHMsIG1pY3Jvc2Vjb25kcywgbmFub3NlY29uZHMsIGxhcmdlc3RVbml0IFsgLCByZWxh
dGl2ZVRvIF0gKQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVt
cG9yYWwtYmFsYW5jZWR1cmF0aW9uCit2b2lkIFRlbXBvcmFsRHVyYXRpb246OmJhbGFuY2UoU3Vi
ZHVyYXRpb25zJiBzdWJkdXJhdGlvbnMsIFRlbXBvcmFsVW5pdCBsYXJnZXN0VW5pdCkKK3sKKyAg
ICBhdXRvIG5hbm9zZWNvbmRzID0gdG90YWxOYW5vc2Vjb25kcyhzdWJkdXJhdGlvbnMpOworICAg
IHN1YmR1cmF0aW9ucy5jbGVhcigpOworCisgICAgaWYgKGxhcmdlc3RVbml0IDw9IFRlbXBvcmFs
VW5pdDo6RGF5KSB7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXREYXlzKHN0ZDo6dHJ1bmMobmFu
b3NlY29uZHMgLyBuYW5vc2Vjb25kc1BlckRheSkpOworICAgICAgICBuYW5vc2Vjb25kcyA9IHN0
ZDo6Zm1vZChuYW5vc2Vjb25kcywgbmFub3NlY29uZHNQZXJEYXkpOworICAgIH0KKworICAgIGRv
dWJsZSBtaWNyb3NlY29uZHMgPSBzdGQ6OnRydW5jKG5hbm9zZWNvbmRzIC8gMTAwMCk7CisgICAg
ZG91YmxlIG1pbGxpc2Vjb25kcyA9IHN0ZDo6dHJ1bmMobWljcm9zZWNvbmRzIC8gMTAwMCk7Cisg
ICAgZG91YmxlIHNlY29uZHMgPSBzdGQ6OnRydW5jKG1pbGxpc2Vjb25kcyAvIDEwMDApOworICAg
IGRvdWJsZSBtaW51dGVzID0gc3RkOjp0cnVuYyhzZWNvbmRzIC8gNjApOworICAgIGlmIChsYXJn
ZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6OkhvdXIpIHsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNl
dE5hbm9zZWNvbmRzKHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJk
dXJhdGlvbnMuc2V0TWljcm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDApKTsK
KyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZtb2QobWlsbGlzZWNv
bmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHN0ZDo6Zm1vZChz
ZWNvbmRzLCA2MCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWludXRlcyhzdGQ6OmZtb2Qo
bWludXRlcywgNjApKTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldEhvdXJzKHN0ZDo6dHJ1bmMo
bWludXRlcyAvIDYwKSk7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBUZW1wb3JhbFVu
aXQ6Ok1pbnV0ZSkgeworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjpm
bW9kKG5hbm9zZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3Nl
Y29uZHMoc3RkOjpmbW9kKG1pY3Jvc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlv
bnMuc2V0TWlsbGlzZWNvbmRzKHN0ZDo6Zm1vZChtaWxsaXNlY29uZHMsIDEwMDApKTsKKyAgICAg
ICAgc3ViZHVyYXRpb25zLnNldFNlY29uZHMoc3RkOjpmbW9kKHNlY29uZHMsIDYwKSk7CisgICAg
ICAgIHN1YmR1cmF0aW9ucy5zZXRNaW51dGVzKG1pbnV0ZXMpOworICAgIH0gZWxzZSBpZiAobGFy
Z2VzdFVuaXQgPT0gVGVtcG9yYWxVbml0OjpTZWNvbmQpIHsKKyAgICAgICAgc3ViZHVyYXRpb25z
LnNldE5hbm9zZWNvbmRzKHN0ZDo6Zm1vZChuYW5vc2Vjb25kcywgMTAwMCkpOworICAgICAgICBz
dWJkdXJhdGlvbnMuc2V0TWljcm9zZWNvbmRzKHN0ZDo6Zm1vZChtaWNyb3NlY29uZHMsIDEwMDAp
KTsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pbGxpc2Vjb25kcyhzdGQ6OmZtb2QobWlsbGlz
ZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRTZWNvbmRzKHNlY29uZHMp
OworICAgIH0gZWxzZSBpZiAobGFyZ2VzdFVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaWxsaXNlY29u
ZCkgeworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMoc3RkOjpmbW9kKG5hbm9z
ZWNvbmRzLCAxMDAwKSk7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaWNyb3NlY29uZHMoc3Rk
OjpmbW9kKG1pY3Jvc2Vjb25kcywgMTAwMCkpOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TWls
bGlzZWNvbmRzKG1pbGxpc2Vjb25kcyk7CisgICAgfSBlbHNlIGlmIChsYXJnZXN0VW5pdCA9PSBU
ZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kKSB7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXROYW5v
c2Vjb25kcyhzdGQ6OmZtb2QobmFub3NlY29uZHMsIDEwMDApKTsKKyAgICAgICAgc3ViZHVyYXRp
b25zLnNldE1pY3Jvc2Vjb25kcyhtaWNyb3NlY29uZHMpOworICAgIH0gZWxzZQorICAgICAgICBz
dWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMobmFub3NlY29uZHMpOworfQorCitUZW1wb3JhbER1
cmF0aW9uOjpTdWJkdXJhdGlvbnMgVGVtcG9yYWxEdXJhdGlvbjo6YWRkKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3RoZXJWYWx1ZSkgY29uc3QKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgYXV0byogb3RoZXIgPSB0b0R1cmF0aW9uKGdsb2JhbE9iamVjdCwgb3Ro
ZXJWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgcmVsYXRpdmVUbyBwYXJhbWV0ZXIgYWZ0ZXIgUGxhaW5EYXRlVGlt
ZSAvIFpvbmVkRGF0ZVRpbWUuCisgICAgYXV0byBsYXJnZXN0VW5pdCA9IHN0ZDo6bWluKGxhcmdl
c3RTdWJkdXJhdGlvbigpLCBvdGhlci0+bGFyZ2VzdFN1YmR1cmF0aW9uKCkpOworICAgIGlmIChs
YXJnZXN0VW5pdCA8PSBUZW1wb3JhbFVuaXQ6OldlZWspIHsKKyAgICAgICAgdGhyb3dSYW5nZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3QgYWRkIGEgZHVyYXRpb24gb2YgeWVhcnMs
IG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBhIHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0IHsKKyAgICAg
ICAgMCwgMCwgMCwgZGF5cygpICsgb3RoZXItPmRheXMoKSwKKyAgICAgICAgaG91cnMoKSArIG90
aGVyLT5ob3VycygpLCBtaW51dGVzKCkgKyBvdGhlci0+bWludXRlcygpLCBzZWNvbmRzKCkgKyBv
dGhlci0+c2Vjb25kcygpLAorICAgICAgICBtaWxsaXNlY29uZHMoKSArIG90aGVyLT5taWxsaXNl
Y29uZHMoKSwgbWljcm9zZWNvbmRzKCkgKyBvdGhlci0+bWljcm9zZWNvbmRzKCksIG5hbm9zZWNv
bmRzKCkgKyBvdGhlci0+bmFub3NlY29uZHMoKQorICAgIH07CisKKyAgICBiYWxhbmNlKHJlc3Vs
dCwgbGFyZ2VzdFVuaXQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1RlbXBvcmFsRHVyYXRp
b246OlN1YmR1cmF0aW9ucyBUZW1wb3JhbER1cmF0aW9uOjpzdWJ0cmFjdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG90aGVyVmFsdWUpIGNvbnN0Cit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGF1dG8qIG90aGVyID0gdG9EdXJhdGlvbihnbG9iYWxPYmplY3QsIG90
aGVyVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHJlbGF0aXZlVG8gcGFyYW1ldGVyIGFmdGVyIFBsYWluRGF0ZVRp
bWUgLyBab25lZERhdGVUaW1lLgorICAgIGF1dG8gbGFyZ2VzdFVuaXQgPSBzdGQ6Om1pbihsYXJn
ZXN0U3ViZHVyYXRpb24oKSwgb3RoZXItPmxhcmdlc3RTdWJkdXJhdGlvbigpKTsKKyAgICBpZiAo
bGFyZ2VzdFVuaXQgPD0gVGVtcG9yYWxVbml0OjpXZWVrKSB7CisgICAgICAgIHRocm93UmFuZ2VF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHN1YnRyYWN0IGEgZHVyYXRpb24gb2Yg
eWVhcnMsIG1vbnRocywgb3Igd2Vla3Mgd2l0aG91dCBhIHJlbGF0aXZlVG8gb3B0aW9uIl9zKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBTdWJkdXJhdGlvbnMgcmVzdWx0IHsK
KyAgICAgICAgMCwgMCwgMCwgZGF5cygpIC0gb3RoZXItPmRheXMoKSwKKyAgICAgICAgaG91cnMo
KSAtIG90aGVyLT5ob3VycygpLCBtaW51dGVzKCkgLSBvdGhlci0+bWludXRlcygpLCBzZWNvbmRz
KCkgLSBvdGhlci0+c2Vjb25kcygpLAorICAgICAgICBtaWxsaXNlY29uZHMoKSAtIG90aGVyLT5t
aWxsaXNlY29uZHMoKSwgbWljcm9zZWNvbmRzKCkgLSBvdGhlci0+bWljcm9zZWNvbmRzKCksIG5h
bm9zZWNvbmRzKCkgLSBvdGhlci0+bmFub3NlY29uZHMoKQorICAgIH07CisKKyAgICBiYWxhbmNl
KHJlc3VsdCwgbGFyZ2VzdFVuaXQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIFJvdW5k
RHVyYXRpb24gKCB5ZWFycywgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNl
Y29uZHMsIG1pbGxpc2Vjb25kcywgbWljcm9zZWNvbmRzLCBuYW5vc2Vjb25kcywgaW5jcmVtZW50
LCB1bml0LCByb3VuZGluZ01vZGUgWyAsIHJlbGF0aXZlVG8gXSApCisvLyBodHRwczovL3RjMzku
ZXMvcHJvcG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC1yb3VuZGR1cmF0aW9uCitkb3VibGUg
VGVtcG9yYWxEdXJhdGlvbjo6cm91bmQoVGVtcG9yYWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zJiBz
dWJkdXJhdGlvbnMsIGRvdWJsZSBpbmNyZW1lbnQsIFRlbXBvcmFsVW5pdCB1bml0LCBSb3VuZGlu
Z01vZGUgbW9kZSkKK3sKKyAgICBBU1NFUlQodW5pdCA+PSBUZW1wb3JhbFVuaXQ6OkRheSk7Cisg
ICAgZG91YmxlIHJlbWFpbmRlciA9IDA7CisKKyAgICBpZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6
OkRheSkgeworICAgICAgICBhdXRvIG9yaWdpbmFsRGF5cyA9IHN1YmR1cmF0aW9ucy5kYXlzKCk7
CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXREYXlzKDApOworICAgICAgICBhdXRvIG5hbm9zZWNv
bmRzID0gdG90YWxOYW5vc2Vjb25kcyhzdWJkdXJhdGlvbnMpOworCisgICAgICAgIGF1dG8gZnJh
Y3Rpb25hbERheXMgPSBvcmlnaW5hbERheXMgKyBuYW5vc2Vjb25kcyAvIG5hbm9zZWNvbmRzUGVy
RGF5OworICAgICAgICBhdXRvIG5ld0RheXMgPSByb3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0
aW9uYWxEYXlzLCBpbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlv
bmFsRGF5cyAtIG5ld0RheXM7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXREYXlzKG5ld0RheXMp
OworICAgIH0gZWxzZSBpZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6OkhvdXIpIHsKKyAgICAgICAg
YXV0byBmcmFjdGlvbmFsU2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5zZWNvbmRzKCkgKyBzdWJkdXJh
dGlvbnMubWlsbGlzZWNvbmRzKCkgKiAxZS0zICsgc3ViZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygp
ICogMWUtNiArIHN1YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygpICogMWUtOTsKKyAgICAgICAgYXV0
byBmcmFjdGlvbmFsSG91cnMgPSBzdWJkdXJhdGlvbnMuaG91cnMoKSArIChzdWJkdXJhdGlvbnMu
bWludXRlcygpICsgZnJhY3Rpb25hbFNlY29uZHMgLyA2MCkgLyA2MDsKKyAgICAgICAgYXV0byBu
ZXdIb3VycyA9IHJvdW5kTnVtYmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbEhvdXJzLCBpbmNyZW1l
bnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFsSG91cnMgLSBuZXdIb3Vy
czsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldEhvdXJzKG5ld0hvdXJzKTsKKyAgICB9IGVsc2Ug
aWYgKHVuaXQgPT0gVGVtcG9yYWxVbml0OjpNaW51dGUpIHsKKyAgICAgICAgYXV0byBmcmFjdGlv
bmFsU2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5zZWNvbmRzKCkgKyBzdWJkdXJhdGlvbnMubWlsbGlz
ZWNvbmRzKCkgKiAxZS0zICsgc3ViZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygpICogMWUtNiArIHN1
YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygpICogMWUtOTsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFs
TWludXRlcyA9IHN1YmR1cmF0aW9ucy5taW51dGVzKCkgKyBmcmFjdGlvbmFsU2Vjb25kcyAvIDYw
OworICAgICAgICBhdXRvIG5ld01pbnV0ZXMgPSByb3VuZE51bWJlclRvSW5jcmVtZW50KGZyYWN0
aW9uYWxNaW51dGVzLCBpbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFj
dGlvbmFsTWludXRlcyAtIG5ld01pbnV0ZXM7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRNaW51
dGVzKG5ld01pbnV0ZXMpOworICAgIH0gZWxzZSBpZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6OlNl
Y29uZCkgeworICAgICAgICBhdXRvIGZyYWN0aW9uYWxTZWNvbmRzID0gc3ViZHVyYXRpb25zLnNl
Y29uZHMoKSArIHN1YmR1cmF0aW9ucy5taWxsaXNlY29uZHMoKSAqIDFlLTMgKyBzdWJkdXJhdGlv
bnMubWljcm9zZWNvbmRzKCkgKiAxZS02ICsgc3ViZHVyYXRpb25zLm5hbm9zZWNvbmRzKCkgKiAx
ZS05OworICAgICAgICBhdXRvIG5ld1NlY29uZHMgPSByb3VuZE51bWJlclRvSW5jcmVtZW50KGZy
YWN0aW9uYWxTZWNvbmRzLCBpbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBm
cmFjdGlvbmFsU2Vjb25kcyAtIG5ld1NlY29uZHM7CisgICAgICAgIHN1YmR1cmF0aW9ucy5zZXRT
ZWNvbmRzKG5ld1NlY29uZHMpOworICAgIH0gZWxzZSBpZiAodW5pdCA9PSBUZW1wb3JhbFVuaXQ6
Ok1pbGxpc2Vjb25kKSB7CisgICAgICAgIGF1dG8gZnJhY3Rpb25hbE1pbGxpc2Vjb25kcyA9IHN1
YmR1cmF0aW9ucy5taWxsaXNlY29uZHMoKSArIHN1YmR1cmF0aW9ucy5taWNyb3NlY29uZHMoKSAq
IDFlLTMgKyBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKSAqIDFlLTY7CisgICAgICAgIGF1dG8g
bmV3TWlsbGlzZWNvbmRzID0gcm91bmROdW1iZXJUb0luY3JlbWVudChmcmFjdGlvbmFsTWlsbGlz
ZWNvbmRzLCBpbmNyZW1lbnQsIG1vZGUpOworICAgICAgICByZW1haW5kZXIgPSBmcmFjdGlvbmFs
TWlsbGlzZWNvbmRzIC0gbmV3TWlsbGlzZWNvbmRzOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0
TWlsbGlzZWNvbmRzKG5ld01pbGxpc2Vjb25kcyk7CisgICAgfSBlbHNlIGlmICh1bml0ID09IFRl
bXBvcmFsVW5pdDo6TWljcm9zZWNvbmQpIHsKKyAgICAgICAgYXV0byBmcmFjdGlvbmFsTWljcm9z
ZWNvbmRzID0gc3ViZHVyYXRpb25zLm1pY3Jvc2Vjb25kcygpICsgc3ViZHVyYXRpb25zLm5hbm9z
ZWNvbmRzKCkgKiAxZS0zOworICAgICAgICBhdXRvIG5ld01pY3Jvc2Vjb25kcyA9IHJvdW5kTnVt
YmVyVG9JbmNyZW1lbnQoZnJhY3Rpb25hbE1pY3Jvc2Vjb25kcywgaW5jcmVtZW50LCBtb2RlKTsK
KyAgICAgICAgcmVtYWluZGVyID0gZnJhY3Rpb25hbE1pY3Jvc2Vjb25kcyAtIG5ld01pY3Jvc2Vj
b25kczsKKyAgICAgICAgc3ViZHVyYXRpb25zLnNldE1pY3Jvc2Vjb25kcyhuZXdNaWNyb3NlY29u
ZHMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gbmV3TmFub3NlY29uZHMgPSByb3VuZE51
bWJlclRvSW5jcmVtZW50KHN1YmR1cmF0aW9ucy5uYW5vc2Vjb25kcygpLCBpbmNyZW1lbnQsIG1v
ZGUpOworICAgICAgICByZW1haW5kZXIgPSBzdWJkdXJhdGlvbnMubmFub3NlY29uZHMoKSAtIG5l
d05hbm9zZWNvbmRzOworICAgICAgICBzdWJkdXJhdGlvbnMuc2V0TmFub3NlY29uZHMobmV3TmFu
b3NlY29uZHMpOworICAgIH0KKworICAgIGZvciAoYXV0byBpID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4odW5pdCkgKyAxdTsgaSA8IG51bWJlck9mVGVtcG9yYWxVbml0czsgaSsrKQorICAgICAgICBz
dWJkdXJhdGlvbnNbaV0gPSAwOworCisgICAgcmV0dXJuIHJlbWFpbmRlcjsKK30KKworVGVtcG9y
YWxEdXJhdGlvbjo6U3ViZHVyYXRpb25zIFRlbXBvcmFsRHVyYXRpb246OnJvdW5kKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKSBjb25zdAoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGludGxHZXRPcHRpb25z
T2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgYXV0byBzbWFsbGVzdCA9IHRlbXBvcmFsU21hbGxlc3RV
bml0KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgeyB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworCisgICAgVGVtcG9yYWxVbml0IGRlZmF1bHRMYXJnZXN0VW5pdCA9IGxh
cmdlc3RTdWJkdXJhdGlvbigpOworICAgIGF1dG8gbGFyZ2VzdCA9IHRlbXBvcmFsTGFyZ2VzdFVu
aXQoZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB7IH0sIGRlZmF1bHRMYXJnZXN0VW5pdCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmICghc21hbGxlc3QgJiYg
IWxhcmdlc3QpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJDYW5ub3Qgcm91bmQgd2l0aG91dCBhIHNtYWxsZXN0VW5pdCBvciBsYXJnZXN0VW5pdCBvcHRp
b24iX3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGlmIChzbWFsbGVzdCAm
JiBsYXJnZXN0ICYmIHNtYWxsZXN0LnZhbHVlKCkgPCBsYXJnZXN0LnZhbHVlKCkpIHsKKyAgICAg
ICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJzbWFsbGVzdFVuaXQgbXVz
dCBiZSBzbWFsbGVyIHRoYW4gbGFyZ2VzdFVuaXQiX3MpOworICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KKworICAgIFRlbXBvcmFsVW5pdCBzbWFsbGVzdFVuaXQgPSBzbWFsbGVzdC52YWx1ZV9v
cihUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQpOworICAgIFRlbXBvcmFsVW5pdCBsYXJnZXN0VW5p
dCA9IGxhcmdlc3QudmFsdWVfb3Ioc3RkOjptaW4oZGVmYXVsdExhcmdlc3RVbml0LCBzbWFsbGVz
dFVuaXQpKTsKKworICAgIGF1dG8gcm91bmRpbmdNb2RlID0gaW50bE9wdGlvbjxSb3VuZGluZ01v
ZGU+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+cm91bmRpbmdNb2Rl
LAorICAgICAgICB7IHsgImNlaWwiX3MsIFJvdW5kaW5nTW9kZTo6Q2VpbCB9LCB7ICJmbG9vciJf
cywgUm91bmRpbmdNb2RlOjpGbG9vciB9LCB7ICJ0cnVuYyJfcywgUm91bmRpbmdNb2RlOjpUcnVu
YyB9LCB7ICJoYWxmRXhwYW5kIl9zLCBSb3VuZGluZ01vZGU6OkhhbGZFeHBhbmQgfSB9LAorICAg
ICAgICAicm91bmRpbmdNb2RlIG11c3QgYmUgZWl0aGVyIFwiY2VpbFwiLCBcImZsb29yXCIsIFwi
dHJ1bmNcIiwgb3IgXCJoYWxmRXhwYW5kXCIiX3MsIFJvdW5kaW5nTW9kZTo6SGFsZkV4cGFuZCk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGF1dG8gaW5jcmVt
ZW50ID0gdGVtcG9yYWxSb3VuZGluZ0luY3JlbWVudChnbG9iYWxPYmplY3QsIG9wdGlvbnMsIG1h
eGltdW1Sb3VuZGluZ0luY3JlbWVudChzbWFsbGVzdFVuaXQpLCBmYWxzZSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmVs
YXRpdmVUbyBwYXJhbWV0ZXIgYWZ0ZXIgUGxhaW5EYXRlVGltZSAvIFpvbmVkRGF0ZVRpbWUuCisg
ICAgaWYgKGxhcmdlc3RVbml0ID4gVGVtcG9yYWxVbml0OjpZZWFyICYmICh5ZWFycygpIHx8IG1v
bnRocygpIHx8IHdlZWtzKCkgfHwgKGRheXMoKSAmJiBsYXJnZXN0VW5pdCA8IFRlbXBvcmFsVW5p
dDo6RGF5KSkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJDYW5ub3Qgcm91bmQgYSBkdXJhdGlvbiBvZiB5ZWFycywgbW9udGhzLCBvciB3ZWVrcyB3aXRo
b3V0IGEgcmVsYXRpdmVUbyBvcHRpb24iX3MpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIFN1YmR1cmF0aW9ucyBuZXdTdWJkdXJhdGlvbnMgPSBtX3N1YmR1cmF0aW9uczsKKyAg
ICByb3VuZChuZXdTdWJkdXJhdGlvbnMsIGluY3JlbWVudCwgc21hbGxlc3RVbml0LCByb3VuZGlu
Z01vZGUpOworICAgIGJhbGFuY2UobmV3U3ViZHVyYXRpb25zLCBsYXJnZXN0VW5pdCk7CisgICAg
cmV0dXJuIG5ld1N1YmR1cmF0aW9uczsKK30KKworZG91YmxlIFRlbXBvcmFsRHVyYXRpb246OnRv
dGFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKSBj
b25zdAoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGlu
dGxHZXRPcHRpb25zT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKworICAgIFN0cmluZyB1bml0U3RyaW5nID0gaW50
bFN0cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnVu
aXQsIHsgfSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgMCk7CisKKyAgICBhdXRvIHVuaXRUeXBlID0gdGVtcG9yYWxVbml0VHlwZSh1bml0U3RyaW5n
KTsKKyAgICBpZiAoIXVuaXRUeXBlKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAidW5pdCBpcyBhbiBpbnZhbGlkIFRlbXBvcmFsIHVuaXQiX3MpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgVGVtcG9yYWxVbml0IHVuaXQgPSB1bml0VHlwZS52
YWx1ZSgpOworCisgICAgLy8gRklYTUU6IEltcGxlbWVudCByZWxhdGl2ZVRvIHBhcmFtZXRlciBh
ZnRlciBQbGFpbkRhdGVUaW1lIC8gWm9uZWREYXRlVGltZS4KKyAgICBpZiAodW5pdCA+IFRlbXBv
cmFsVW5pdDo6WWVhciAmJiAoeWVhcnMoKSB8fCBtb250aHMoKSB8fCB3ZWVrcygpIHx8IChkYXlz
KCkgJiYgdW5pdCA8IFRlbXBvcmFsVW5pdDo6RGF5KSkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3QgdG90YWwgYSBkdXJhdGlvbiBvZiB5ZWFy
cywgbW9udGhzLCBvciB3ZWVrcyB3aXRob3V0IGEgcmVsYXRpdmVUbyBvcHRpb24iX3MpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFN1YmR1cmF0aW9ucyBuZXdTdWJkdXJhdGlv
bnMgPSBtX3N1YmR1cmF0aW9uczsKKyAgICBiYWxhbmNlKG5ld1N1YmR1cmF0aW9ucywgdW5pdCk7
CisgICAgZG91YmxlIHJlbWFpbmRlciA9IHJvdW5kKG5ld1N1YmR1cmF0aW9ucywgMSwgdW5pdCwg
Um91bmRpbmdNb2RlOjpUcnVuYyk7CisgICAgcmV0dXJuIG5ld1N1YmR1cmF0aW9uc1tzdGF0aWNf
Y2FzdDx1aW50OF90Pih1bml0KV0gKyByZW1haW5kZXI7Cit9CisKK1N0cmluZyBUZW1wb3JhbER1
cmF0aW9uOjp0b1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9w
dGlvbnNWYWx1ZSkgY29uc3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3Qq
IG9wdGlvbnMgPSBpbnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1
ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmICghb3B0
aW9ucykKKyAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCk7CisKKyAgICBQcmVjaXNpb25EYXRhIGRh
dGEgPSBzZWNvbmRzU3RyaW5nUHJlY2lzaW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucyk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBBU1NFUlQoZGF0YS51bml0ID49
IFRlbXBvcmFsVW5pdDo6U2Vjb25kKTsKKworICAgIGF1dG8gcm91bmRpbmdNb2RlID0gaW50bE9w
dGlvbjxSb3VuZGluZ01vZGU+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1l
cy0+cm91bmRpbmdNb2RlLAorICAgICAgICB7IHsgImNlaWwiX3MsIFJvdW5kaW5nTW9kZTo6Q2Vp
bCB9LCB7ICJmbG9vciJfcywgUm91bmRpbmdNb2RlOjpGbG9vciB9LCB7ICJ0cnVuYyJfcywgUm91
bmRpbmdNb2RlOjpUcnVuYyB9LCB7ICJoYWxmRXhwYW5kIl9zLCBSb3VuZGluZ01vZGU6OkhhbGZF
eHBhbmQgfSB9LAorICAgICAgICAicm91bmRpbmdNb2RlIG11c3QgYmUgZWl0aGVyIFwiY2VpbFwi
LCBcImZsb29yXCIsIFwidHJ1bmNcIiwgb3IgXCJoYWxmRXhwYW5kXCIiX3MsIFJvdW5kaW5nTW9k
ZTo6VHJ1bmMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAv
LyBObyBuZWVkIHRvIG1ha2UgYSBuZXcgb2JqZWN0IGlmIHdlIHdlcmUgZ2l2ZW4gZXhwbGljaXQg
ZGVmYXVsdHMuCisgICAgaWYgKCFkYXRhLnByZWNpc2lvbiAmJiByb3VuZGluZ01vZGUgPT0gUm91
bmRpbmdNb2RlOjpUcnVuYykKKyAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCk7CisKKyAgICBTdWJk
dXJhdGlvbnMgbmV3U3ViZHVyYXRpb25zID0gbV9zdWJkdXJhdGlvbnM7CisgICAgcm91bmQobmV3
U3ViZHVyYXRpb25zLCBkYXRhLmluY3JlbWVudCwgZGF0YS51bml0LCByb3VuZGluZ01vZGUpOwor
ICAgIHJldHVybiB0b1N0cmluZyhuZXdTdWJkdXJhdGlvbnMsIGRhdGEucHJlY2lzaW9uKTsKK30K
KworLy8gVGVtcG9yYWxEdXJhdGlvblRvU3RyaW5nICggeWVhcnMsIG1vbnRocywgd2Vla3MsIGRh
eXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIG1pY3Jvc2Vjb25kcywg
bmFub3NlY29uZHMsIHByZWNpc2lvbiApCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdGVt
cG9yYWwvI3NlYy10ZW1wb3JhbC10ZW1wb3JhbGR1cmF0aW9udG9zdHJpbmcKK1N0cmluZyBUZW1w
b3JhbER1cmF0aW9uOjp0b1N0cmluZyhjb25zdCBUZW1wb3JhbER1cmF0aW9uOjpTdWJkdXJhdGlv
bnMmIHN1YmR1cmF0aW9ucywgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcHJlY2lzaW9uKQorewor
ICAgIEFTU0VSVCghcHJlY2lzaW9uIHx8IHByZWNpc2lvbi52YWx1ZSgpIDwgMTApOworCisgICAg
YXV0byBiYWxhbmNlZE1pY3Jvc2Vjb25kcyA9IHN1YmR1cmF0aW9ucy5taWNyb3NlY29uZHMoKSAr
IHN0ZDo6dHJ1bmMoc3ViZHVyYXRpb25zLm5hbm9zZWNvbmRzKCkgLyAxMDAwKTsKKyAgICBhdXRv
IGJhbGFuY2VkTmFub3NlY29uZHMgPSBzdGQ6OmZtb2Qoc3ViZHVyYXRpb25zLm5hbm9zZWNvbmRz
KCksIDEwMDApOworICAgIGF1dG8gYmFsYW5jZWRNaWxsaXNlY29uZHMgPSBzdWJkdXJhdGlvbnMu
bWlsbGlzZWNvbmRzKCkgKyBzdGQ6OnRydW5jKGJhbGFuY2VkTWljcm9zZWNvbmRzIC8gMTAwMCk7
CisgICAgYmFsYW5jZWRNaWNyb3NlY29uZHMgPSBzdGQ6OmZtb2QoYmFsYW5jZWRNaWNyb3NlY29u
ZHMsIDEwMDApOworICAgIGF1dG8gYmFsYW5jZWRTZWNvbmRzID0gc3ViZHVyYXRpb25zLnNlY29u
ZHMoKSArIHN0ZDo6dHJ1bmMoYmFsYW5jZWRNaWxsaXNlY29uZHMgLyAxMDAwKTsKKyAgICBiYWxh
bmNlZE1pbGxpc2Vjb25kcyA9IHN0ZDo6Zm1vZChiYWxhbmNlZE1pbGxpc2Vjb25kcywgMTAwMCk7
CisKKyAgICAvLyBURU1QT1JBUlkhIChwZW5kaW5nIHNwZWMgZGlzY3Vzc2lvbiBhYm91dCBtYXhp
bXVtIHZhbHVlcyBAIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXRlbXBvcmFsL2lz
c3Vlcy8xNjA0KQorICAgIC8vIFdlICptdXN0KiBhdm9pZCBwcmludGluZyBhIG51bWJlciBpbiBz
Y2llbnRpZmljIG5vdGF0aW9uLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSBwb3NzaWJsZSBmb3Ig
bnVtYmVycyA8IDFlMjEKKyAgICAvLyAoYSB2YWx1ZSBvcmlnaW5hdGluZyBpbiB0aGUgTnVtYmVy
I3RvRml4ZWQgc3BlYyBhbmQgdXBoZWxkIGJ5IG91ciBOdW1iZXJUb1N0cmluZ0J1ZmZlcikuCisg
ICAgYXV0byBmb3JtYXRJbnRlZ2VyID0gW10oZG91YmxlIHZhbHVlKSAtPiBkb3VibGUgeworICAg
ICAgICBhdXRvIGFic1ZhbHVlID0gc3RkOjphYnModmFsdWUpOworICAgICAgICByZXR1cm4gTElL
RUxZKGFic1ZhbHVlIDwgMWUyMSkgPyBhYnNWYWx1ZSA6IDFlMjEgLSA2NTUzNzsKKyAgICB9Owor
CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgYXV0byBzaWduID0gVGVtcG9yYWxE
dXJhdGlvbjo6c2lnbihzdWJkdXJhdGlvbnMpOworICAgIGlmIChzaWduIDwgMCkKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoJy0nKTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCdQJyk7CisgICAgaWYg
KHN1YmR1cmF0aW9ucy55ZWFycygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRl
Z2VyKHN1YmR1cmF0aW9ucy55ZWFycygpKSwgJ1knKTsKKyAgICBpZiAoc3ViZHVyYXRpb25zLm1v
bnRocygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9u
cy5tb250aHMoKSksICdNJyk7CisgICAgaWYgKHN1YmR1cmF0aW9ucy53ZWVrcygpKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy53ZWVrcygpKSwgJ1cn
KTsKKyAgICBpZiAoc3ViZHVyYXRpb25zLmRheXMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
Zm9ybWF0SW50ZWdlcihzdWJkdXJhdGlvbnMuZGF5cygpKSwgJ0QnKTsKKworICAgIC8vIFRoZSB6
ZXJvIHZhbHVlIGlzIGRpc3BsYXllZCBpbiBzZWNvbmRzLgorICAgIGF1dG8gdXNlc1NlY29uZHMg
PSBiYWxhbmNlZFNlY29uZHMgfHwgYmFsYW5jZWRNaWxsaXNlY29uZHMgfHwgYmFsYW5jZWRNaWNy
b3NlY29uZHMgfHwgYmFsYW5jZWROYW5vc2Vjb25kcyB8fCAhc2lnbjsKKyAgICBpZiAoIXN1YmR1
cmF0aW9ucy5ob3VycygpICYmICFzdWJkdXJhdGlvbnMubWludXRlcygpICYmICF1c2VzU2Vjb25k
cykKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKworICAgIGJ1aWxkZXIuYXBw
ZW5kKCdUJyk7CisgICAgaWYgKHN1YmR1cmF0aW9ucy5ob3VycygpKQorICAgICAgICBidWlsZGVy
LmFwcGVuZChmb3JtYXRJbnRlZ2VyKHN1YmR1cmF0aW9ucy5ob3VycygpKSwgJ0gnKTsKKyAgICBp
ZiAoc3ViZHVyYXRpb25zLm1pbnV0ZXMoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0
SW50ZWdlcihzdWJkdXJhdGlvbnMubWludXRlcygpKSwgJ00nKTsKKyAgICBpZiAodXNlc1NlY29u
ZHMpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZm9ybWF0SW50ZWdlcihiYWxhbmNlZFNlY29u
ZHMpKTsKKworICAgICAgICBhdXRvIGZyYWN0aW9uID0gc3RkOjphYnMoYmFsYW5jZWRNaWxsaXNl
Y29uZHMpICogMWU2ICsgc3RkOjphYnMoYmFsYW5jZWRNaWNyb3NlY29uZHMpICogMWUzICsgc3Rk
OjphYnMoYmFsYW5jZWROYW5vc2Vjb25kcyk7CisgICAgICAgIGlmICgoIXByZWNpc2lvbiAmJiBm
cmFjdGlvbikgfHwgKHByZWNpc2lvbiAmJiBwcmVjaXNpb24udmFsdWUoKSkpIHsKKyAgICAgICAg
ICAgIGF1dG8gcGFkZGVkID0gbWFrZVN0cmluZygnLicsIHBhZCgnMCcsIDksIGZyYWN0aW9uKSk7
CisgICAgICAgICAgICBpZiAocHJlY2lzaW9uKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKFN0cmluZ1ZpZXcocGFkZGVkKS5sZWZ0KHBhZGRlZC5sZW5ndGgoKSAtICg5IC0gcHJlY2lz
aW9uLnZhbHVlKCkpKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGxlbmd0aFdpdGhvdXRUcmFpbGluZ1plcm9lcyA9IHBhZGRlZC5sZW5ndGgoKTsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAocGFkZGVkW2xlbmd0aFdpdGhvdXRUcmFpbGluZ1plcm9lcyAtIDFdID09
ICcwJykKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzLS07
CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nVmlldyhwYWRkZWQpLmxlZnQo
bGVuZ3RoV2l0aG91dFRyYWlsaW5nWmVyb2VzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBidWlsZGVyLmFwcGVuZCgnUycpOworICAgIH0KKworICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5MjA0
ZGM5NTM3YWFmNzYwMWUwZThkMTU3MDU2YmRhMTlhZjczNTUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uLmgKQEAgLTAsMCAr
MSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIklTTzg2
MDEuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRlbXBvcmFsRHVyYXRpb24gZmluYWwg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpT
Tm9uRmluYWxPYmplY3Q7CisgICAgdXNpbmcgU3ViZHVyYXRpb25zID0gSVNPODYwMTo6RHVyYXRp
b247CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9k
ZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2bS50ZW1wb3JhbER1cmF0aW9uU3BhY2U8bW9kZT4oKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgVGVtcG9yYWxEdXJhdGlvbiogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgU3Vi
ZHVyYXRpb25zJiYpOworICAgIHN0YXRpYyBUZW1wb3JhbER1cmF0aW9uKiB0cnlDcmVhdGVJZlZh
bGlkKEpTR2xvYmFsT2JqZWN0KiwgU3ViZHVyYXRpb25zJiYsIFN0cnVjdHVyZSogPSBudWxscHRy
KTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFRlbXBv
cmFsRHVyYXRpb24qIHRvRHVyYXRpb24oSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKyAgICBz
dGF0aWMgVGVtcG9yYWxEdXJhdGlvbiogZnJvbShKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwor
ICAgIHN0YXRpYyBKU1ZhbHVlIGNvbXBhcmUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1Zh
bHVlKTsKKworI2RlZmluZSBKU0NfREVGSU5FX1RFTVBPUkFMX0RVUkFUSU9OX0ZJRUxEKG5hbWUs
IGNhcGl0YWxpemVkTmFtZSkgXAorICAgIGRvdWJsZSBuYW1lIyNzKCkgY29uc3QgeyByZXR1cm4g
bV9zdWJkdXJhdGlvbnMubmFtZSMjcygpOyB9IFwKKyAgICB2b2lkIHNldCMjY2FwaXRhbGl6ZWRO
YW1lIyNzKGRvdWJsZSB2YWx1ZSkgeyBtX3N1YmR1cmF0aW9ucy5zZXQjI2NhcGl0YWxpemVkTmFt
ZSMjcyh2YWx1ZSk7IH0KKyAgICBKU0NfVEVNUE9SQUxfVU5JVFMoSlNDX0RFRklORV9URU1QT1JB
TF9EVVJBVElPTl9GSUVMRCk7CisjdW5kZWYgSlNDX0RFRklORV9URU1QT1JBTF9EVVJBVElPTl9G
SUVMRAorCisgICAgaW50IHNpZ24oKSBjb25zdCB7IHJldHVybiBzaWduKG1fc3ViZHVyYXRpb25z
KTsgfQorCisgICAgU3ViZHVyYXRpb25zIHdpdGgoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCog
ZHVyYXRpb25MaWtlKSBjb25zdDsKKyAgICBTdWJkdXJhdGlvbnMgbmVnYXRlZCgpIGNvbnN0Owor
ICAgIFN1YmR1cmF0aW9ucyBhYnMoKSBjb25zdDsKKyAgICBTdWJkdXJhdGlvbnMgYWRkKEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSkgY29uc3Q7CisgICAgU3ViZHVyYXRpb25zIHN1YnRyYWN0KEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSkgY29uc3Q7CisgICAgU3ViZHVyYXRpb25zIHJvdW5kKEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBvcHRpb25zKSBjb25zdDsKKyAgICBkb3VibGUgdG90YWwo
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIG9wdGlvbnMpIGNvbnN0OworICAgIFN0cmluZyB0b1N0
cmluZyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgb3B0aW9ucykgY29uc3Q7CisgICAgU3RyaW5n
IHRvU3RyaW5nKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHByZWNpc2lvbiA9IHN0ZDo6bnVsbG9w
dCkgY29uc3QgeyByZXR1cm4gdG9TdHJpbmcobV9zdWJkdXJhdGlvbnMsIHByZWNpc2lvbik7IH0K
KworcHJpdmF0ZToKKyAgICBUZW1wb3JhbER1cmF0aW9uKFZNJiwgU3RydWN0dXJlKiwgU3ViZHVy
YXRpb25zJiYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U3ViZHVy
YXRpb25zPiBwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+Jik7CisgICAg
c3RhdGljIFN1YmR1cmF0aW9ucyBmcm9tT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3Qq
KTsKKworICAgIHN0YXRpYyBpbnQgc2lnbihjb25zdCBTdWJkdXJhdGlvbnMmKTsKKyAgICBzdGF0
aWMgdm9pZCBiYWxhbmNlKFN1YmR1cmF0aW9ucyYsIFRlbXBvcmFsVW5pdCBsYXJnZXN0VW5pdCk7
CisgICAgc3RhdGljIGRvdWJsZSByb3VuZChTdWJkdXJhdGlvbnMmLCBkb3VibGUgaW5jcmVtZW50
LCBUZW1wb3JhbFVuaXQsIFJvdW5kaW5nTW9kZSk7CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmlu
Zyhjb25zdCBTdWJkdXJhdGlvbnMmLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwcmVjaXNpb24p
OworCisgICAgVGVtcG9yYWxVbml0IGxhcmdlc3RTdWJkdXJhdGlvbigpIGNvbnN0OworCisgICAg
U3ViZHVyYXRpb25zIG1fc3ViZHVyYXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9u
Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxE
dXJhdGlvbkNvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNWY0ODA0MGYzZjczNTc1NzkxY2Zk
ZThhZTNkYmQ5MGQwZDNkYzg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDEy
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVt
cG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklB
TExZX0RFU1RSVUNUSUJMRShUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IpOworCitzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5j
RnJvbSk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9u
Q29uc3RydWN0b3JGdW5jQ29tcGFyZSk7CisKK30KKworI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRp
b25Db25zdHJ1Y3Rvci5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5m
byBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJh
c2U6OnNfaW5mbywgJnRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvclRhYmxlLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvcikgfTsKKworLyog
U291cmNlIGZvciBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IubHV0LmgKK0BiZWdpbiB0ZW1w
b3JhbER1cmF0aW9uQ29uc3RydWN0b3JUYWJsZQorICBmcm9tICAgICAgICAgICAgIHRlbXBvcmFs
RHVyYXRpb25Db25zdHJ1Y3RvckZ1bmNGcm9tICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
IDEKKyAgY29tcGFyZSAgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3JGdW5jQ29t
cGFyZSAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAyCitAZW5kCisqLworCitUZW1wb3JhbER1
cmF0aW9uQ29uc3RydWN0b3IqIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUqIGR1
cmF0aW9uUHJvdG90eXBlKQoreworICAgIGF1dG8qIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yPih2bS5oZWFwKSkgVGVt
cG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVjdG9y
LT5maW5pc2hDcmVhdGlvbih2bSwgZHVyYXRpb25Qcm90b3R5cGUpOworICAgIHJldHVybiBjb25z
dHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEludGVybmFsRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGNhbGxUZW1wb3JhbER1cmF0aW9uKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGNvbnN0cnVjdFRlbXBvcmFsRHVyYXRpb24pOworCitUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0
b3I6OlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjYWxsVGVtcG9yYWxEdXJhdGlvbiwgY29u
c3RydWN0VGVtcG9yYWxEdXJhdGlvbikKK3sKK30KKwordm9pZCBUZW1wb3JhbER1cmF0aW9uQ29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZSogZHVyYXRpb25Qcm90b3R5cGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIDAs
ICJEdXJhdGlvbiJfcywgUHJvcGVydHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFu
c2l0aW9uKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBkdXJhdGlvblByb3RvdHlwZSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpOworICAgIGR1cmF0aW9uUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIHRoaXMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKK30KKworSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdFRlbXBvcmFsRHVyYXRpb24sIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBuZXdUYXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUt
Pm5ld1RhcmdldCgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZF
RF9TVFJVQ1RVUkUodm0sIGR1cmF0aW9uU3RydWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+
anNDYWxsZWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
IFRlbXBvcmFsRHVyYXRpb246OlN1YmR1cmF0aW9ucyBzdWJkdXJhdGlvbnM7CisgICAgYXV0byBj
b3VudCA9IHN0ZDo6bWluPHNpemVfdD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIG51bWJl
ck9mVGVtcG9yYWxVbml0cyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7CisgICAgICAgIHN1YmR1cmF0aW9uc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoaSkudG9JbnRlZ2VyT3JJbmZpbml0eShnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZShz
dWJkdXJhdGlvbnNbaV0pKQorICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1SYW5nZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbiBwcm9wZXJ0aWVzIG11c3QgYmUg
ZmluaXRlIl9zKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFs
RHVyYXRpb246OnRyeUNyZWF0ZUlmVmFsaWQoZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHN1YmR1cmF0
aW9ucyksIHN0cnVjdHVyZSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFRl
bXBvcmFsRHVyYXRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
KSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJEdXJhdGlvbiIpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KHRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvckZ1bmNGcm9tLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoVGVtcG9yYWxEdXJhdGlvbjo6ZnJvbShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
YXJndW1lbnQoMCkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVy
YXRpb25Db25zdHJ1Y3RvckZ1bmNDb21wYXJlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
VGVtcG9yYWxEdXJhdGlvbjo6Y29tcGFyZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1l
bnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbER1cmF0
aW9uQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFs
RHVyYXRpb25Db25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MjQ1YTMxMDY5NWFjZDM1YjVkNmFh
NTZlOTAwNGY3ZTNiNzAzODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5j
dGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZTsKKworY2xhc3MgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGlj
IEludGVybmFsRnVuY3Rpb24geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBJbnRlcm5hbEZ1
bmN0aW9uOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICBzdGF0
aWMgVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBU
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVf
SU5GTzsKKworcHJpdmF0ZToKKyAgICBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IoVk0mLCBT
dHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgVGVtcG9yYWxEdXJhdGlv
blByb3RvdHlwZSopOworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFRl
bXBvcmFsRHVyYXRpb25Db25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlvbik7CisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTE4YzJkMTZjNDY4
NTJmNDk5YTgyMzUxNWJkYzZkNGJiNGVhMzk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5jcHAKQEAgLTAs
MCArMSw0MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJUZW1wb3JhbER1cmF0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitz
dGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
RnVuY1dpdGgpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUZ1bmNOZWdhdGVkKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWJzKTsKK3N0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jQWRkKTsKK3N0YXRp
YyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5j
U3VidHJhY3QpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUZ1bmNSb3VuZCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
Tih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvdGFsKTsKK3N0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVG9TdHJpbmcpOwor
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUZ1bmNUb0pTT04pOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUZ1bmNUb0xvY2FsZVN0cmluZyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1ZhbHVlT2YpOworc3Rh
dGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdl
dHRlclllYXJzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVHZXR0ZXJNb250aHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9H
RVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlcldlZWtzKTsKK3N0YXRpYyBKU0Nf
REVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJEYXlz
KTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90
b3R5cGVHZXR0ZXJIb3Vycyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUih0ZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWludXRlcyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVf
Q1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2Vjb25kcyk7Citz
dGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
R2V0dGVyTWlsbGlzZWNvbmRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaWNyb3NlY29uZHMpOworc3RhdGljIEpTQ19E
RUNMQVJFX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck5hbm9z
ZWNvbmRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGVHZXR0ZXJTaWduKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01fR0VUVEVS
KHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJCbGFuayk7CisKK30KKworI2luY2x1ZGUg
IlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUubHV0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
b25zdCBDbGFzc0luZm8gVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6c19pbmZvID0geyAiVGVt
cG9yYWwuRHVyYXRpb24iLCAmQmFzZTo6c19pbmZvLCAmZHVyYXRpb25Qcm90b3R5cGVUYWJsZSwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKSB9
OworCisvKiBTb3VyY2UgZm9yIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUubHV0LmgKK0BiZWdp
biBkdXJhdGlvblByb3RvdHlwZVRhYmxlCisgIHdpdGggICAgICAgICAgICAgdGVtcG9yYWxEdXJh
dGlvblByb3RvdHlwZUZ1bmNXaXRoICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQor
ICBuZWdhdGVkICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jTmVnYXRlZCAg
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgYWJzICAgICAgICAgICAgICB0ZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlRnVuY0FicyAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlv
biAwCisgIGFkZCAgICAgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNBZGQg
ICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICBzdWJ0cmFjdCAgICAgICAgIHRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jU3VidHJhY3QgICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uIDEKKyAgcm91bmQgICAgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVu
Y1JvdW5kICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgIHRvdGFsICAgICAgICAg
ICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb3RhbCAgICAgICAgICAgICAgRG9udEVu
dW18RnVuY3Rpb24gMQorICB0b1N0cmluZyAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5
cGVGdW5jVG9TdHJpbmcgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgdG9KU09OICAg
ICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1RvSlNPTiAgICAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAwCisgIHRvTG9jYWxlU3RyaW5nICAgdGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUZ1bmNUb0xvY2FsZVN0cmluZyAgICAgRG9udEVudW18RnVuY3Rpb24gMAorICB2YWx1
ZU9mICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jVmFsdWVPZiAgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgeWVhcnMgICAgICAgICAgICB0ZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlR2V0dGVyWWVhcnMgICAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0
b21BY2Nlc3NvcgorICBtb250aHMgICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVH
ZXR0ZXJNb250aHMgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisg
IHdlZWtzICAgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlcldlZWtzICAg
ICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgZGF5cyAgICAgICAg
ICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyRGF5cyAgICAgICAgICAgICBEb250
RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBob3VycyAgICAgICAgICAgIHRlbXBvcmFs
RHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJIb3VycyAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5
fEN1c3RvbUFjY2Vzc29yCisgIG1pbnV0ZXMgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUdldHRlck1pbnV0ZXMgICAgICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNz
b3IKKyAgc2Vjb25kcyAgICAgICAgICB0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyU2Vj
b25kcyAgICAgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21BY2Nlc3NvcgorICBtaWxsaXNl
Y29uZHMgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJNaWxsaXNlY29uZHMgICAg
IERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIG1pY3Jvc2Vjb25kcyAgICAgdGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1pY3Jvc2Vjb25kcyAgICAgRG9udEVudW18UmVh
ZE9ubHl8Q3VzdG9tQWNjZXNzb3IKKyAgbmFub3NlY29uZHMgICAgICB0ZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlR2V0dGVyTmFub3NlY29uZHMgICAgICBEb250RW51bXxSZWFkT25seXxDdXN0b21B
Y2Nlc3NvcgorICBzaWduICAgICAgICAgICAgIHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0
ZXJTaWduICAgICAgICAgICAgIERvbnRFbnVtfFJlYWRPbmx5fEN1c3RvbUFjY2Vzc29yCisgIGJs
YW5rICAgICAgICAgICAgdGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlckJsYW5rICAgICAg
ICAgICAgRG9udEVudW18UmVhZE9ubHl8Q3VzdG9tQWNjZXNzb3IKK0BlbmQKKyovCisKK1RlbXBv
cmFsRHVyYXRpb25Qcm90b3R5cGUqIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU6OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGF1dG8qIHByb3RvdHlwZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGU+KHZtLmhl
YXApKSBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3Rv
dHlwZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0
cnVjdHVyZSogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7Cisg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitUZW1w
b3JhbER1cmF0aW9uUHJvdG90eXBlOjpUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisK
K3ZvaWQgVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQor
eworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwor
fQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1
bmNXaXRoLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHlu
YW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
KyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLndpdGggY2FsbGVk
IG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisgICAgCisgICAgSlNWYWx1ZSBk
dXJhdGlvbkxpa2UgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGlmICghZHVyYXRpb25M
aWtlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJGaXJzdCBhcmd1bWVudCB0byBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5
cGUud2l0aCBtdXN0IGJlIGFuIG9iamVjdCJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVhdGVJZlZhbGlk
KGdsb2JhbE9iamVjdCwgZHVyYXRpb24tPndpdGgoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChkdXJh
dGlvbkxpa2UpKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHRlbXBvcmFsRHVy
YXRpb25Qcm90b3R5cGVGdW5jTmVnYXRlZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0
byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnBy
b3RvdHlwZS5uZWdhdGVkIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3Mp
OworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdC0+ZHVyYXRpb25TdHJ1Y3R1cmUoKSwgZHVyYXRpb24tPm5lZ2F0ZWQo
KSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3Rv
dHlwZUZ1bmNBYnMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0g
anNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuYWJzIGNh
bGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+
ZHVyYXRpb25TdHJ1Y3R1cmUoKSwgZHVyYXRpb24tPmFicygpKSk7Cit9CisKK0pTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY0FkZCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFs
RHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlv
bikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5hZGQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBu
b3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9uOjp0cnlDcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVj
dCwgZHVyYXRpb24tPmFkZChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSkp
OworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZUZ1bmNTdWJ0cmFjdCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24g
PSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5zdWJ0
cmFjdCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKFRlbXBvcmFsRHVyYXRpb246
OnRyeUNyZWF0ZUlmVmFsaWQoZ2xvYmFsT2JqZWN0LCBkdXJhdGlvbi0+c3VidHJhY3QoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVGdW5jUm91bmQsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1
cmF0aW9uKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24p
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJU
ZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUucm91bmQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBu
b3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBhdXRvIG9wdGlvbnMgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApOworICAgIGlmIChvcHRpb25zLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5w
cm90b3R5cGUucm91bmQgcmVxdWlyZXMgYW4gb3B0aW9ucyBhcmd1bWVudCJfcyk7CisKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShUZW1wb3JhbER1cmF0aW9u
Ojp0cnlDcmVhdGVJZlZhbGlkKGdsb2JhbE9iamVjdCwgZHVyYXRpb24tPnJvdW5kKGdsb2JhbE9i
amVjdCwgb3B0aW9ucykpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlRnVuY1RvdGFsLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBh
dXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBjYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24u
cHJvdG90eXBlLnRvdGFsIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3Mp
OworCisgICAgYXV0byBvcHRpb25zID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBpZiAo
b3B0aW9ucy5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLnRvdGFsIHJl
cXVpcmVzIGFuIG9wdGlvbnMgYXJndW1lbnQiX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPnRvdGFsKGdsb2JhbE9i
amVjdCwgb3B0aW9ucykpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih0ZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlRnVuY1RvU3RyaW5nLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRp
b24ucHJvdG90eXBlLnRvU3RyaW5nIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRp
b24iX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
anNTdHJpbmcodm0sIGR1cmF0aW9uLT50b1N0cmluZyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
YXJndW1lbnQoMCkpKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVtcG9yYWxE
dXJhdGlvblByb3RvdHlwZUZ1bmNUb0pTT04sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1
dG8qIGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5w
cm90b3R5cGUudG9KU09OIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3Mp
OworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgZHVyYXRpb24tPnRv
U3RyaW5nKCkpKTsKK30KKworLy8gVGhpcyB3aWxsIGJlIHBhcnQgb2YgdGhlIEVDTUEtNDAyIElu
dGwuRHVyYXRpb25Gb3JtYXQgcHJvcG9zYWw7IHVudGlsIHRoZW4sIHdlIGp1c3QgZm9sbG93IEVD
TUEtMjYyIGluIG1pbWlja2luZyB0b0pTT04uCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04odGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUZ1bmNUb0xvY2FsZVN0cmluZywgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRp
b24qPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBv
cmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyBjYWxsZWQgb24gdmFsdWUgdGhh
dCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNT
dHJpbmcodm0sIGR1cmF0aW9uLT50b1N0cmluZygpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlRnVuY1ZhbHVlT2YsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBv
cmFsLkR1cmF0aW9uLnByb3RvdHlwZS52YWx1ZU9mIG11c3Qgbm90IGJlIGNhbGxlZC4gVG8gY29t
cGFyZSBEdXJhdGlvbiB2YWx1ZXMsIHVzZSBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlIl9zKTsK
K30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVH
ZXR0ZXJZZWFycywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
YXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJh
dGlvbi5wcm90b3R5cGUueWVhcnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlv
biJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT55
ZWFycygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9u
UHJvdG90eXBlR2V0dGVyTW9udGhzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlv
bio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRl
bXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5tb250aHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBu
b3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KGR1cmF0aW9uLT5tb250aHMoKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIodGVt
cG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlcldlZWtzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVt
cG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS53ZWVrcyBjYWxsZWQgb24gdmFs
dWUgdGhhdCdzIG5vdCBhIER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoZHVyYXRpb24tPndlZWtzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJEYXlzLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1p
Y0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5kYXlzIGNhbGxl
ZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+ZGF5cygpKSk7Cit9CisKK0pTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVySG91cnMsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGR1cmF0aW9uID0g
anNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmhv
dXJzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkdXJhdGlvbi0+aG91cnMoKSkpOworfQorCitK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdldHRlck1p
bnV0ZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8q
IGR1cmF0aW9uID0ganNEeW5hbWljQ2FzdDxUZW1wb3JhbER1cmF0aW9uKj4odm0sIEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVtcG9yYWwuRHVyYXRpb24u
cHJvdG90eXBlLm1pbnV0ZXMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJf
cyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taW51
dGVzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKHRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGVHZXR0ZXJTZWNvbmRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlv
bio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRl
bXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mg
bm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihkdXJhdGlvbi0+c2Vjb25kcygpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUih0
ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlR2V0dGVyTWlsbGlzZWNvbmRzLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1p
Y0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIlRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS5taWxsaXNlY29u
ZHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5taWxsaXNlY29uZHMoKSkpOwor
fQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZUdl
dHRlck1pY3Jvc2Vjb25kcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGUubWljcm9zZWNvbmRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mg
bm90IGEgRHVyYXRpb24iX3MpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihkdXJhdGlvbi0+bWljcm9zZWNvbmRzKCkpKTsKK30KKworSlNDX0RFRklORV9DVVNUT01fR0VU
VEVSKHRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGVHZXR0ZXJOYW5vc2Vjb25kcywgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogZHVyYXRpb24gPSBqc0R5
bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUubmFub3Nl
Y29uZHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYSBEdXJhdGlvbiJfcyk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGR1cmF0aW9uLT5uYW5vc2Vjb25kcygpKSk7
Cit9CisKK0pTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUih0ZW1wb3JhbER1cmF0aW9uUHJvdG90eXBl
R2V0dGVyU2lnbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
YXV0byogZHVyYXRpb24gPSBqc0R5bmFtaWNDYXN0PFRlbXBvcmFsRHVyYXRpb24qPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUZW1wb3JhbC5EdXJh
dGlvbi5wcm90b3R5cGUuc2lnbiBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhIER1cmF0aW9u
Il9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZHVyYXRpb24tPnNp
Z24oKSkpOworfQorCitKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIodGVtcG9yYWxEdXJhdGlvblBy
b3RvdHlwZUdldHRlckJsYW5rLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBhdXRvKiBkdXJhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8VGVtcG9yYWxEdXJhdGlvbio+
KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKCFkdXJhdGlvbikKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlbXBv
cmFsLkR1cmF0aW9uLnByb3RvdHlwZS5ibGFuayBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBh
IER1cmF0aW9uIl9zKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFk
dXJhdGlvbi0+c2lnbigpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlwZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmY4Nzc1ZWViMDdiZTYwMmNmYWVmMDM4Nzk0ZTk3YzYyOTM1NGQzNmUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJT
UEFDRV9TSEFSQUJMRShUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAg
cmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKworICAgIHN0YXRpYyBUZW1wb3Jh
bER1cmF0aW9uUHJvdG90eXBlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUp
OworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFRlbXBvcmFsRHVyYXRpb25Q
cm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsT2JqZWN0LmNwcAppbmRleCA4ZjQ4MjJiNzY0NGM0YTg0MWFkMDYzZjYw
NmYwZjMzYzc4MmMzM2U2Li45NTM1NzE5ZjdlYzFhMGU5NjU0MThhNTRhZDM1MGM3ZWJlNjFjNDk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVj
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxPYmplY3Qu
Y3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMu
TC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTIg
KzIzLDE1IEBACiAjaW5jbHVkZSAiVGVtcG9yYWxPYmplY3QuaCIKIAogI2luY2x1ZGUgIkZ1bmN0
aW9uUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSW50bE9iamVjdElubGluZXMuaCIKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiVGVtcG9yYWxDYWxlbmRhckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVGVtcG9y
YWxDYWxlbmRhclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Db25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIlRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRl
ICJUZW1wb3JhbE5vdy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ4LDYgKzUyLDEzIEBAIHN0
YXRpYyBKU1ZhbHVlIGNyZWF0ZU5vd09iamVjdChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAg
ICAgcmV0dXJuIFRlbXBvcmFsTm93OjpjcmVhdGUodm0sIFRlbXBvcmFsTm93OjpjcmVhdGVTdHJ1
Y3R1cmUodm0sIGdsb2JhbE9iamVjdCkpOwogfQogCitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVEdXJh
dGlvbkNvbnN0cnVjdG9yKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBUZW1wb3Jh
bE9iamVjdCogdGVtcG9yYWxPYmplY3QgPSBqc0Nhc3Q8VGVtcG9yYWxPYmplY3QqPihvYmplY3Qp
OworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0ZW1wb3JhbE9iamVjdC0+Z2xv
YmFsT2JqZWN0KHZtKTsKKyAgICByZXR1cm4gVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yOjpj
cmVhdGUodm0sIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZt
LCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5cGUoKSksIGpzQ2Fz
dDxUZW1wb3JhbER1cmF0aW9uUHJvdG90eXBlKj4oZ2xvYmFsT2JqZWN0LT5kdXJhdGlvblN0cnVj
dHVyZSgpLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2luY2x1ZGUgIlRlbXBvcmFsT2JqZWN0Lmx1dC5oIgpAQCAtNTgsNiArNjksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIEBiZWdpbiB0ZW1wb3JhbE9iamVjdFRhYmxlCiAgIENhbGVuZGFyICAg
ICAgIGNyZWF0ZUNhbGVuZGFyQ29uc3RydWN0b3IgICAgICAgRG9udEVudW18UHJvcGVydHlDYWxs
YmFjawogICBOb3cgICAgICAgICAgICBjcmVhdGVOb3dPYmplY3QgICAgICAgICAgICAgICAgIERv
bnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKKyAgRHVyYXRpb24gICAgICAgY3JlYXRlRHVyYXRpb25D
b25zdHJ1Y3RvciAgICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiBAZW5kCiAqLwogCkBA
IC04Nyw0ICs5OSwyMzUgQEAgdm9pZCBUZW1wb3JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwogfQogCitz
dGF0aWMgU3RyaW5nVmlldyBzaW5ndWxhclVuaXQoU3RyaW5nVmlldyB1bml0KQoreworICAgIC8v
IFBsdXJhbHMgYXJlIGFsbG93ZWQsIGJ1dCB0aGFua2Z1bGx5IHRoZXkncmUgYWxsIGp1c3QgYSBz
aW1wbGUgLXMuCisgICAgcmV0dXJuIHVuaXQuZW5kc1dpdGgoInMiKSA/IHVuaXQubGVmdCh1bml0
Lmxlbmd0aCgpIC0gMSkgOiB1bml0OworfQorCitzdGQ6Om9wdGlvbmFsPFRlbXBvcmFsVW5pdD4g
dGVtcG9yYWxVbml0VHlwZShTdHJpbmdWaWV3IHVuaXQpCit7CisgICAgU3RyaW5nVmlldyBzaW5n
dWxhciA9IHNpbmd1bGFyVW5pdCh1bml0KTsKKworICAgIGlmIChzaW5ndWxhciA9PSAieWVhciIp
CisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OlllYXI7CisgICAgaWYgKHNpbmd1bGFyID09
ICJtb250aCIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok1vbnRoOworICAgIGlmIChz
aW5ndWxhciA9PSAid2VlayIpCisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OldlZWs7Cisg
ICAgaWYgKHNpbmd1bGFyID09ICJkYXkiKQorICAgICAgICByZXR1cm4gVGVtcG9yYWxVbml0OjpE
YXk7CisgICAgaWYgKHNpbmd1bGFyID09ICJob3VyIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFs
VW5pdDo6SG91cjsKKyAgICBpZiAoc2luZ3VsYXIgPT0gIm1pbnV0ZSIpCisgICAgICAgIHJldHVy
biBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZTsKKyAgICBpZiAoc2luZ3VsYXIgPT0gInNlY29uZCIpCisg
ICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6OlNlY29uZDsKKyAgICBpZiAoc2luZ3VsYXIgPT0g
Im1pbGxpc2Vjb25kIikKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQ7
CisgICAgaWYgKHNpbmd1bGFyID09ICJtaWNyb3NlY29uZCIpCisgICAgICAgIHJldHVybiBUZW1w
b3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kOworICAgIGlmIChzaW5ndWxhciA9PSAibmFub3NlY29uZCIp
CisgICAgICAgIHJldHVybiBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQ7CisgICAgCisgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworLy8gVG9MYXJnZXN0VGVtcG9yYWxVbml0ICggbm9ybWFs
aXplZE9wdGlvbnMsIGRpc2FsbG93ZWRVbml0cywgZmFsbGJhY2sgWyAsIGF1dG9WYWx1ZSBdICkK
Ky8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRvbGFy
Z2VzdHRlbXBvcmFsdW5pdAorc3RkOjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFsTGFy
Z2VzdFVuaXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMs
IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUZW1wb3JhbFVuaXQ+IGRpc2FsbG93ZWRVbml0cywgVGVt
cG9yYWxVbml0IGF1dG9WYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5n
IGxhcmdlc3RVbml0ID0gaW50bFN0cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZt
LnByb3BlcnR5TmFtZXMtPmxhcmdlc3RVbml0LCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAoIWxh
cmdlc3RVbml0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKGxhcmdl
c3RVbml0ID09ICJhdXRvIl9zKQorICAgICAgICByZXR1cm4gYXV0b1ZhbHVlOworCisgICAgYXV0
byB1bml0VHlwZSA9IHRlbXBvcmFsVW5pdFR5cGUobGFyZ2VzdFVuaXQpOworICAgIGlmICghdW5p
dFR5cGUpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJs
YXJnZXN0VW5pdCBpcyBhbiBpbnZhbGlkIFRlbXBvcmFsIHVuaXQiX3MpOworICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChkaXNhbGxvd2VkVW5pdHMuc2l6ZSgp
ICYmIHN0ZDo6ZmluZChkaXNhbGxvd2VkVW5pdHMuYmVnaW4oKSwgZGlzYWxsb3dlZFVuaXRzLmVu
ZCgpLCB1bml0VHlwZS52YWx1ZSgpKSAhPSBkaXNhbGxvd2VkVW5pdHMuZW5kKCkpIHsKKyAgICAg
ICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJsYXJnZXN0VW5pdCBpcyBh
IGRpc2FsbG93ZWQgdW5pdCJfcyk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgcmV0dXJuIHVuaXRUeXBlOworfQorCisvLyBUb1NtYWxsZXN0VGVtcG9yYWxVbml0
ICggbm9ybWFsaXplZE9wdGlvbnMsIGRpc2FsbG93ZWRVbml0cywgZmFsbGJhY2sgKQorLy8gaHR0
cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtdG9zbWFsbGVzdHRl
bXBvcmFsdW5pdAorc3RkOjpvcHRpb25hbDxUZW1wb3JhbFVuaXQ+IHRlbXBvcmFsU21hbGxlc3RV
bml0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8VGVtcG9yYWxVbml0PiBkaXNhbGxvd2VkVW5pdHMpCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzbWFsbGVzdFVuaXQgPSBpbnRsU3RyaW5nT3B0
aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+c21hbGxlc3RVbml0
LCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHN0ZDo6bnVsbG9wdCk7CisKKyAgICBpZiAoIXNtYWxsZXN0VW5pdCkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gdW5pdFR5cGUgPSB0ZW1wb3JhbFVuaXRUeXBlKHNt
YWxsZXN0VW5pdCk7CisgICAgaWYgKCF1bml0VHlwZSkgeworICAgICAgICB0aHJvd1JhbmdlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInNtYWxsZXN0VW5pdCBpcyBhbiBpbnZhbGlkIFRlbXBv
cmFsIHVuaXQiX3MpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAg
IGlmIChkaXNhbGxvd2VkVW5pdHMuc2l6ZSgpICYmIHN0ZDo6ZmluZChkaXNhbGxvd2VkVW5pdHMu
YmVnaW4oKSwgZGlzYWxsb3dlZFVuaXRzLmVuZCgpLCB1bml0VHlwZS52YWx1ZSgpKSAhPSBkaXNh
bGxvd2VkVW5pdHMuZW5kKCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJzbWFsbGVzdFVuaXQgaXMgYSBkaXNhbGxvd2VkIHVuaXQiX3MpOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiB1bml0VHlwZTsKK30K
KworLy8gR2V0U3RyaW5nT3JOdW1iZXJPcHRpb24obm9ybWFsaXplZE9wdGlvbnMsICJmcmFjdGlv
bmFsU2Vjb25kRGlnaXRzIiwgwqsgImF1dG8iIMK7LCAwLCA5LCAiYXV0byIpCisvLyBodHRwczov
L3RjMzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvI3NlYy1nZXRzdHJpbmdvcm51bWJlcm9wdGlvbgor
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25kRGlnaXRzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBpZiAoIW9wdGlvbnMpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gb3B0aW9ucy0+Z2V0KGdsb2JhbE9iamVjdCwg
dm0ucHJvcGVydHlOYW1lcy0+ZnJhY3Rpb25hbFNlY29uZERpZ2l0cyk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKHZhbHVlLmlz
TnVtYmVyKCkpIHsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUuYXNOdW1iZXIo
KTsKKyAgICAgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IDkpIHsKKyAg
ICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZnJhY3Rpb25h
bFNlY29uZERpZ2l0cyBpcyBvdXQgb2YgcmFuZ2UiX3MpOworICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZG91YmxlVmFsdWUpOworICAgIH0KKworICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgIGlmIChzdHJpbmdWYWx1ZSAhPSAiYXV0byIpCisg
ICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZnJhY3Rpb25hbFNl
Y29uZERpZ2l0cyBpcyBvdXQgb2YgcmFuZ2UiX3MpOworCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKK30KKworLy8gVG9TZWNvbmRzU3RyaW5nUHJlY2lzaW9uICggbm9ybWFsaXplZE9wdGlvbnMg
KQorLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXRlbXBvcmFsLyNzZWMtdGVtcG9yYWwtdG9z
ZWNvbmRzc3RyaW5ncHJlY2lzaW9uCitQcmVjaXNpb25EYXRhIHNlY29uZHNTdHJpbmdQcmVjaXNp
b24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMpCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8gc21hbGxlc3RVbml0ID0gdGVtcG9yYWxTbWFs
bGVzdFVuaXQoZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB7IFRlbXBvcmFsVW5pdDo6WWVhciwgVGVt
cG9yYWxVbml0OjpNb250aCwgVGVtcG9yYWxVbml0OjpXZWVrLCBUZW1wb3JhbFVuaXQ6OkRheSwg
VGVtcG9yYWxVbml0OjpIb3VyLCBUZW1wb3JhbFVuaXQ6Ok1pbnV0ZSB9KTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKHNtYWxsZXN0VW5pdCkgeworICAg
ICAgICBzd2l0Y2ggKHNtYWxsZXN0VW5pdC52YWx1ZSgpKSB7CisgICAgICAgIGNhc2UgVGVtcG9y
YWxVbml0OjpTZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4geyAwLCBUZW1wb3JhbFVuaXQ6OlNl
Y29uZCwgMSB9OworICAgICAgICBjYXNlIFRlbXBvcmFsVW5pdDo6TWlsbGlzZWNvbmQ6CisgICAg
ICAgICAgICByZXR1cm4geyAzLCBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kLCAxIH07CisgICAg
ICAgIGNhc2UgVGVtcG9yYWxVbml0OjpNaWNyb3NlY29uZDoKKyAgICAgICAgICAgIHJldHVybiB7
IDYsIFRlbXBvcmFsVW5pdDo6TWljcm9zZWNvbmQsIDEgfTsKKyAgICAgICAgY2FzZSBUZW1wb3Jh
bFVuaXQ6Ok5hbm9zZWNvbmQ6CisgICAgICAgICAgICByZXR1cm4geyA5LCBUZW1wb3JhbFVuaXQ6
Ok5hbm9zZWNvbmQsIDEgfTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9
CisgICAgfQorCisgICAgYXV0byBwcmVjaXNpb24gPSB0ZW1wb3JhbEZyYWN0aW9uYWxTZWNvbmRE
aWdpdHMoZ2xvYmFsT2JqZWN0LCBvcHRpb25zKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgaWYgKCFwcmVjaXNpb24pCisgICAgICAgIHJldHVybiB7IHN0ZDo6
bnVsbG9wdCwgVGVtcG9yYWxVbml0OjpOYW5vc2Vjb25kLCAxIH07CisKKyAgICB1bnNpZ25lZCBk
aWdpdHMgPSBwcmVjaXNpb24udmFsdWUoKTsKKyAgICBpZiAoIWRpZ2l0cykKKyAgICAgICAgcmV0
dXJuIHsgMCwgVGVtcG9yYWxVbml0OjpTZWNvbmQsIDEgfTsKKworICAgIGlmIChkaWdpdHMgPD0g
MykKKyAgICAgICAgcmV0dXJuIHsgZGlnaXRzLCBUZW1wb3JhbFVuaXQ6Ok1pbGxpc2Vjb25kLCBz
dGQ6OnBvdygxMCwgMyAtIGRpZ2l0cykgfTsKKworICAgIGlmIChkaWdpdHMgPD0gNikKKyAgICAg
ICAgcmV0dXJuIHsgZGlnaXRzLCBUZW1wb3JhbFVuaXQ6Ok1pY3Jvc2Vjb25kLCBzdGQ6OnBvdygx
MCwgNiAtIGRpZ2l0cykgfTsKKworICAgIEFTU0VSVChkaWdpdHMgPD0gOSk7CisgICAgcmV0dXJu
IHsgZGlnaXRzLCBUZW1wb3JhbFVuaXQ6Ok5hbm9zZWNvbmQsIHN0ZDo6cG93KDEwLCA5IC0gZGln
aXRzKSB9OworfQorCisvLyBNYXhpbXVtVGVtcG9yYWxEdXJhdGlvblJvdW5kaW5nSW5jcmVtZW50
ICggdW5pdCApCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1w
b3JhbC1tYXhpbXVtdGVtcG9yYWxkdXJhdGlvbnJvdW5kaW5naW5jcmVtZW50CitzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4gbWF4aW11bVJvdW5kaW5nSW5jcmVtZW50KFRlbXBvcmFsVW5pdCB1bml0KQor
eworICAgIGlmICh1bml0IDw9IFRlbXBvcmFsVW5pdDo6RGF5KQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICh1bml0ID09IFRlbXBvcmFsVW5pdDo6SG91cikKKyAgICAgICAg
cmV0dXJuIDI0OworICAgIGlmICh1bml0IDw9IFRlbXBvcmFsVW5pdDo6U2Vjb25kKQorICAgICAg
ICByZXR1cm4gNjA7CisgICAgcmV0dXJuIDEwMDA7Cit9CisKKy8vIFRvVGVtcG9yYWxSb3VuZGlu
Z0luY3JlbWVudCAoIG5vcm1hbGl6ZWRPcHRpb25zLCBkaXZpZGVuZCwgaW5jbHVzaXZlICkKKy8v
IGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC10ZW1wb3JhbC8jc2VjLXRlbXBvcmFsLXRvdGVtcG9y
YWxyb3VuZGluZ2luY3JlbWVudAorZG91YmxlIHRlbXBvcmFsUm91bmRpbmdJbmNyZW1lbnQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIHN0ZDo6b3B0aW9u
YWw8ZG91YmxlPiBkaXZpZGVuZCwgYm9vbCBpbmNsdXNpdmUpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGRvdWJsZSBtYXhpbXVtOworICAgIGlmICghZGl2aWRlbmQpCisgICAgICAgIG1h
eGltdW0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7CisgICAgZWxz
ZSBpZiAoaW5jbHVzaXZlKQorICAgICAgICBtYXhpbXVtID0gZGl2aWRlbmQudmFsdWUoKTsKKyAg
ICBlbHNlIGlmIChkaXZpZGVuZC52YWx1ZSgpID4gMSkKKyAgICAgICAgbWF4aW11bSA9IGRpdmlk
ZW5kLnZhbHVlKCkgLSAxOworICAgIGVsc2UKKyAgICAgICAgbWF4aW11bSA9IDE7CisKKyAgICBk
b3VibGUgaW5jcmVtZW50ID0gaW50bE51bWJlck9wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPnJvdW5kaW5nSW5jcmVtZW50LCAxLCBtYXhpbXVtLCAxKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKworICAgIGluY3JlbWVudCA9IHN0ZDo6
Zmxvb3IoaW5jcmVtZW50KTsKKyAgICBpZiAoZGl2aWRlbmQgJiYgc3RkOjpmbW9kKGRpdmlkZW5k
LnZhbHVlKCksIGluY3JlbWVudCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIG1ha2VTdHJpbmcoInJvdW5kaW5nSW5jcmVtZW50IHZhbHVlIGRvZXMgbm90
IGRpdmlkZSAiX3MsIGRpdmlkZW5kLnZhbHVlKCksICIgZXZlbmx5Il9zKSk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIHJldHVybiBpbmNyZW1lbnQ7Cit9CisKKy8vIFJvdW5kTnVt
YmVyVG9JbmNyZW1lbnQgKCB4LCBpbmNyZW1lbnQsIHJvdW5kaW5nTW9kZSApCisvLyBodHRwczov
L3RjMzkuZXMvcHJvcG9zYWwtdGVtcG9yYWwvI3NlYy10ZW1wb3JhbC1yb3VuZG51bWJlcnRvaW5j
cmVtZW50Citkb3VibGUgcm91bmROdW1iZXJUb0luY3JlbWVudChkb3VibGUgeCwgZG91YmxlIGlu
Y3JlbWVudCwgUm91bmRpbmdNb2RlIG1vZGUpCit7CisgICAgYXV0byBxdW90aWVudCA9IHggLyBp
bmNyZW1lbnQ7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBSb3VuZGluZ01vZGU6OkNl
aWw6CisgICAgICAgIHJldHVybiAtc3RkOjpmbG9vcigtcXVvdGllbnQpICogaW5jcmVtZW50Owor
ICAgIGNhc2UgUm91bmRpbmdNb2RlOjpGbG9vcjoKKyAgICAgICAgcmV0dXJuIHN0ZDo6Zmxvb3Io
cXVvdGllbnQpICogaW5jcmVtZW50OworICAgIGNhc2UgUm91bmRpbmdNb2RlOjpUcnVuYzoKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6dHJ1bmMocXVvdGllbnQpICogaW5jcmVtZW50OworICAgIGNhc2Ug
Um91bmRpbmdNb2RlOjpIYWxmRXhwYW5kOgorICAgICAgICByZXR1cm4gc3RkOjpyb3VuZChxdW90
aWVudCkgKiBpbmNyZW1lbnQ7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsT2JqZWN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbE9iamVjdC5oCmluZGV4IDFlZTk5
OTRjMmI4YzA1ZTQ2ZDE2MTA2YTY2ZjAyYjk3NThiOGIyODMuLjcyNDNjOWJhNTg0MzI2MmQyZDBj
YmI4MTkzM2Y0Y2RkMTMwOGZiNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGVtcG9yYWxPYmplY3QuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDIxIElnYWxpYSwgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtMjMsNiArMjQsMjcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNkZWZpbmUg
SlNDX1RFTVBPUkFMX1VOSVRTKG1hY3JvKSBcCisgICAgbWFjcm8oeWVhciwgWWVhcikgXAorICAg
IG1hY3JvKG1vbnRoLCBNb250aCkgXAorICAgIG1hY3JvKHdlZWssIFdlZWspIFwKKyAgICBtYWNy
byhkYXksIERheSkgXAorICAgIG1hY3JvKGhvdXIsIEhvdXIpIFwKKyAgICBtYWNybyhtaW51dGUs
IE1pbnV0ZSkgXAorICAgIG1hY3JvKHNlY29uZCwgU2Vjb25kKSBcCisgICAgbWFjcm8obWlsbGlz
ZWNvbmQsIE1pbGxpc2Vjb25kKSBcCisgICAgbWFjcm8obWljcm9zZWNvbmQsIE1pY3Jvc2Vjb25k
KSBcCisgICAgbWFjcm8obmFub3NlY29uZCwgTmFub3NlY29uZCkgXAorCitlbnVtIGNsYXNzIFRl
bXBvcmFsVW5pdCA6IHVpbnQ4X3QgeworI2RlZmluZSBKU0NfREVGSU5FX1RFTVBPUkFMX1VOSVRf
RU5VTShuYW1lLCBjYXBpdGFsaXplZE5hbWUpIGNhcGl0YWxpemVkTmFtZSwKKyAgICBKU0NfVEVN
UE9SQUxfVU5JVFMoSlNDX0RFRklORV9URU1QT1JBTF9VTklUX0VOVU0pCisjdW5kZWYgSlNDX0RF
RklORV9URU1QT1JBTF9VTklUX0VOVU0KK307CisjZGVmaW5lIEpTQ19DT1VOVF9URU1QT1JBTF9V
TklUUyhuYW1lLCBjYXBpdGFsaXplZE5hbWUpICsgMQorc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBudW1iZXJPZlRlbXBvcmFsVW5pdHMgPSAwIEpTQ19URU1QT1JBTF9VTklUUyhKU0NfQ09VTlRf
VEVNUE9SQUxfVU5JVFMpOworI3VuZGVmIEpTQ19DT1VOVF9URU1QT1JBTF9VTklUUworCiBjbGFz
cyBUZW1wb3JhbE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1Ymxp
YzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKQEAgLTQ1LDQgKzY3LDI2IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogfTsKIAorZW51bSBjbGFz
cyBSb3VuZGluZ01vZGUgOiB1aW50OF90IHsKKyAgICBDZWlsLAorICAgIEZsb29yLAorICAgIFRy
dW5jLAorICAgIEhhbGZFeHBhbmQKK307CisKK3N0cnVjdCBQcmVjaXNpb25EYXRhIHsKKyAgICBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwcmVjaXNpb247CisgICAgVGVtcG9yYWxVbml0IHVuaXQ7
CisgICAgZG91YmxlIGluY3JlbWVudDsKK307CisKK3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0
PiB0ZW1wb3JhbFVuaXRUeXBlKFN0cmluZ1ZpZXcpOworc3RkOjpvcHRpb25hbDxUZW1wb3JhbFVu
aXQ+IHRlbXBvcmFsTGFyZ2VzdFVuaXQoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9u
cywgc3RkOjppbml0aWFsaXplcl9saXN0PFRlbXBvcmFsVW5pdD4gZGlzYWxsb3dlZFVuaXRzLCBU
ZW1wb3JhbFVuaXQgYXV0b1ZhbHVlKTsKK3N0ZDo6b3B0aW9uYWw8VGVtcG9yYWxVbml0PiB0ZW1w
b3JhbFNtYWxsZXN0VW5pdChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBvcHRpb25zLCBzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8VGVtcG9yYWxVbml0PiBkaXNhbGxvd2VkVW5pdHMpOworc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gdGVtcG9yYWxGcmFjdGlvbmFsU2Vjb25kRGlnaXRzKEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3QqIG9wdGlvbnMpOworUHJlY2lzaW9uRGF0YSBzZWNvbmRzU3RyaW5n
UHJlY2lzaW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9wdGlvbnMpOworc3RkOjpvcHRp
b25hbDxkb3VibGU+IG1heGltdW1Sb3VuZGluZ0luY3JlbWVudChUZW1wb3JhbFVuaXQpOworZG91
YmxlIHRlbXBvcmFsUm91bmRpbmdJbmNyZW1lbnQoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCog
b3B0aW9ucywgc3RkOjpvcHRpb25hbDxkb3VibGU+IGRpdmlkZW5kLCBib29sIGluY2x1c2l2ZSk7
Citkb3VibGUgcm91bmROdW1iZXJUb0luY3JlbWVudChkb3VibGUsIGRvdWJsZSBpbmNyZW1lbnQs
IFJvdW5kaW5nTW9kZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCmluZGV4IDMwOTNlMTE1NWI2ZGZkY2FmNTdmMGQ1MGRkYzc4MmZiZDE1Yzlm
MzguLjNiZjY5MTQ4MzNiZDA0NjNjYzI5ZjA3MzUzODVlOGIyYTg2ZTM0YjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTE2Myw2ICsxNjMsNyBAQAogI2luY2x1ZGUgIlN0
cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJTeW1ib2xPYmplY3QuaCIKICNpbmNsdWRlICJU
ZW1wb3JhbENhbGVuZGFyLmgiCisjaW5jbHVkZSAiVGVtcG9yYWxEdXJhdGlvbi5oIgogI2luY2x1
ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2lu
Y2x1ZGUgIlR5cGVQcm9maWxlci5oIgpAQCAtMTYxOSw2ICsxNjIwLDcgQEAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxSZWxhdGl2ZVRpbWVGb3JtYXRTcGFjZSwg
aW50bFJlbGF0aXYKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRs
U2VnbWVudEl0ZXJhdG9yU3BhY2UsIGludGxTZWdtZW50SXRlcmF0b3JIZWFwQ2VsbFR5cGUuZ2V0
KCksIEludGxTZWdtZW50SXRlcmF0b3IpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1coaW50bFNlZ21lbnRlclNwYWNlLCBpbnRsU2VnbWVudGVySGVhcENlbGxUeXBlLmdl
dCgpLCBJbnRsU2VnbWVudGVyKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKGludGxTZWdtZW50c1NwYWNlLCBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGUuZ2V0KCksIElu
dGxTZWdtZW50cykKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh0ZW1w
b3JhbER1cmF0aW9uU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIFRlbXBvcmFsRHVyYXRp
b24pCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKGpzVG9XYXNtSUNDYWxsZWVTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQo
KSwgSlNUb1dhc21JQ0NhbGxlZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyh3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZS5nZXQoKSwgSlNXZWJBc3NlbWJseUNvZGVCbG9jaykgLy8gSGFzaDoweDlhZDk5NWNk
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCBhYTc1NTk3ZWQ4YzUxMmU5ZWNiZWY3
NGU0NjA2NmYyNjJlZDEzNDRhLi42YjNhMGVmZDQ1N2YyMTg2MmEwYmFmYzVhYjdkMWZmZWI4ZWY2
ODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTE4NSw2ICsxODUsNyBAQCBj
bGFzcyBTdHJ1Y3R1cmU7CiBjbGFzcyBSZWdFeHA7CiAjZW5kaWYKIGNsYXNzIFN5bWJvbDsKK2Ns
YXNzIFRlbXBvcmFsRHVyYXRpb247CiBjbGFzcyBUeXBlZEFycmF5Q29udHJvbGxlcjsKIGNsYXNz
IFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOwpAQCAtNjE3
LDYgKzYxOCw3IEBAIHB1YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKGludGxTZWdtZW50SXRlcmF0b3JTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKGludGxTZWdtZW50ZXJTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKGludGxTZWdtZW50c1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIodGVtcG9yYWxEdXJhdGlvblNwYWNlKQogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGpzVG9XYXNt
SUNDYWxsZWVTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdl
YkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDEzNjQ4YjQxNGUyMmNkNmE1ZjU2NWRlZmIyMzM5ZWFl
N2ViOTFkYTEuLmVhNWRkMGFiMzE0YTdiNDExZmYyMzgwOGE1OWE3NmNmYTUzNzdhMzUgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMjEtMDgtMzEgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnku
Y29tPgorCisgICAgICAgIFtKU0NdIEltcGxlbWVudCBUZW1wb3JhbC5EdXJhdGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4NTMyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICAqIHN0cmVzcy90ZW1wb3Jh
bC1kdXJhdGlvbi5qczogQWRkZWQuCisgICAgICAgICogdGVzdDI2Mi9jb25maWcueWFtbDogRW5h
YmxlZCBEdXJhdGlvbiB0ZXN0cy4KKwogMjAyMS0wOC0zMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mu
a2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgW0pTQ11bSW50bF0gRXJyb3JzIGZvciAuY2Fs
bCh7fSkgYXJlIHRvbyB2ZXJib3NlCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy90ZW1wb3Jh
bC1kdXJhdGlvbi5qcyBiL0pTVGVzdHMvc3RyZXNzL3RlbXBvcmFsLWR1cmF0aW9uLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY2NTIyNzBhMDgyOGVmNGY5OWY5NGI0YzM2NWJiN2M4ZWM4MTM4OTcKLS0tIC9kZXYv
bnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy90ZW1wb3JhbC1kdXJhdGlvbi5qcwpAQCAtMCwwICsx
LDI5MSBAQAorLy9AIHJlcXVpcmVPcHRpb25zKCItLXVzZVRlbXBvcmFsPTEiKQorCitmdW5jdGlv
biBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0
ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdv
dCAke2FjdHVhbH1gKTsKK30KKworZnVuY3Rpb24gc2hvdWxkTm90VGhyb3coZnVuYykgeworICAg
IGZ1bmMoKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JUeXBlKSB7Cisg
ICAgbGV0IGVycm9yOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisKKyAgICBpZiAoIShlcnJvciBpbnN0YW5j
ZW9mIGVycm9yVHlwZSkpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtlcnJv
clR5cGUubmFtZX0hYCk7Cit9CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uIGluc3RhbmNl
b2YgRnVuY3Rpb24sIHRydWUpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ubGVuZ3RoLCAw
KTsKK3Nob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVGVtcG9yYWwuRHVy
YXRpb24sICdwcm90b3R5cGUnKS53cml0YWJsZSwgZmFsc2UpOworc2hvdWxkQmUoT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihUZW1wb3JhbC5EdXJhdGlvbiwgJ3Byb3RvdHlwZScpLmVu
dW1lcmFibGUsIGZhbHNlKTsKK3Nob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoVGVtcG9yYWwuRHVyYXRpb24sICdwcm90b3R5cGUnKS5jb25maWd1cmFibGUsIGZhbHNlKTsK
K3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uKCksIFR5cGVFcnJvcik7CisKK3No
b3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigpIGluc3RhbmNlb2YgVGVtcG9yYWwuRHVyYXRp
b24sIHRydWUpOworeworICAgIGNsYXNzIERlcml2ZWREdXJhdGlvbiBleHRlbmRzIFRlbXBvcmFs
LkR1cmF0aW9uIHt9CisKKyAgICBjb25zdCBkZCA9IG5ldyBEZXJpdmVkRHVyYXRpb24oKTsKKyAg
ICBzaG91bGRCZShkZCBpbnN0YW5jZW9mIERlcml2ZWREdXJhdGlvbiwgdHJ1ZSk7CisgICAgc2hv
dWxkQmUoZGQgaW5zdGFuY2VvZiBUZW1wb3JhbC5EdXJhdGlvbiwgdHJ1ZSk7CisgICAgc2hvdWxk
QmUoZGQubmVnYXRlZCwgVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQpOworICAg
IHNob3VsZEJlKE9iamVjdC5nZXRQcm90b3R5cGVPZihkZCksIERlcml2ZWREdXJhdGlvbi5wcm90
b3R5cGUpOworICAgIHNob3VsZEJlKE9iamVjdC5nZXRQcm90b3R5cGVPZihEZXJpdmVkRHVyYXRp
b24ucHJvdG90eXBlKSwgVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlKTsKK30KKworc2hvdWxk
VGhyb3coKCkgPT4gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKDEsIC0xKSwgUmFuZ2VFcnJvcik7Citz
aG91bGRUaHJvdygoKSA9PiBuZXcgVGVtcG9yYWwuRHVyYXRpb24oSW5maW5pdHkpLCBSYW5nZUVy
cm9yKTsKKworY29uc3QgZmllbGRzID0gWyd5ZWFycycsICdtb250aHMnLCAnd2Vla3MnLCAnZGF5
cycsICdob3VycycsICdtaW51dGVzJywgJ3NlY29uZHMnLCAnbWlsbGlzZWNvbmRzJywgJ21pY3Jv
c2Vjb25kcycsICduYW5vc2Vjb25kcyddOworY29uc3QgemVybyA9IG5ldyBUZW1wb3JhbC5EdXJh
dGlvbigpOworY29uc3QgcG9zID0gbmV3IFRlbXBvcmFsLkR1cmF0aW9uKDEsMiwzLDQsNSw2LDcs
OCw5LDEwKTsKK2NvbnN0IG5lZyA9IG5ldyBUZW1wb3JhbC5EdXJhdGlvbigtMSwtMiwtMywtNCwt
NSwtNiwtNywtOCwtOSwtMTApOworCitmaWVsZHMuZm9yRWFjaCgoZmllbGQsIGkpID0+IHsKKyAg
ICBzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbZmllbGRdLCBU
eXBlRXJyb3IpOworICAgIHNob3VsZEJlKHplcm9bZmllbGRdLCAwKTsKKyAgICBzaG91bGRCZShw
b3NbZmllbGRdLCBpICsgMSk7CisgICAgc2hvdWxkQmUobmVnW2ZpZWxkXSwgLWkgLSAxKTsKK30p
OworCitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUuc2lnbiwg
VHlwZUVycm9yKTsKK3Nob3VsZEJlKHplcm8uc2lnbiwgMCk7CitzaG91bGRCZShwb3Muc2lnbiwg
MSk7CitzaG91bGRCZShuZWcuc2lnbiwgLTEpOworCitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGUuYmxhbmssIFR5cGVFcnJvcik7CitzaG91bGRCZSh6ZXJvLmJs
YW5rLCB0cnVlKTsKK3Nob3VsZEJlKHBvcy5ibGFuaywgZmFsc2UpOworc2hvdWxkQmUobmVnLmJs
YW5rLCBmYWxzZSk7CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20ubGVuZ3RoLCAx
KTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oKSwgUmFuZ2VFcnJv
cik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKHt9KSwgVHlwZUVy
cm9yKTsKK3sKKyAgICBjb25zdCBiYWRTdHJpbmdzID0gWworICAgICAgICAnJywgJysnLCAnK1An
LCAnLVAnLCAnKy1QJywKKyAgICAgICAgJ1AnLCAnUDEnLCAnUFQnLCAnUDFZVCcsICdQVDEnLAor
ICAgICAgICAnUFQyMC5TJywgJ1BULjIwUycsCisgICAgICAgICdQMVcxWScsICAnUFQxUzFNJywK
KyAgICAgICAgJ1AxLjFZJywgJ1BUMS4xSDFNJywgJ1BUMS4xTTFTJywKKyAgICAgICAgJ1BUMS4x
MTExMTExMTExSCcsICdQVDEuMTExMTExMTExMU0nLCAnUFQxLjExMTExMTExMTFTJywKKyAgICAg
ICAgYFAke0FycmF5KDMwOSkuZmlsbCg5KS5qb2luKCcnKX1ZYAorICAgIF07CisgICAgZm9yIChj
b25zdCBiYWRTdHJpbmcgaW4gYmFkU3RyaW5ncykKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4g
VGVtcG9yYWwuRHVyYXRpb24uZnJvbShiYWRTdHJpbmcpLCBSYW5nZUVycm9yKTsKKyAgICAKKyAg
ICBjb25zdCBmcm9tU3RyaW5nID0gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFZMk0zVzREVDVI
Nk03LjAwODAwOTAxMFMnKTsKKworICAgIGNvbnN0IGR1cmF0aW9uTGlrZSA9IHt9OworICAgIGZp
ZWxkcy5mb3JFYWNoKChmaWVsZCwgaSkgPT4geyBkdXJhdGlvbkxpa2VbZmllbGRdID0gaSArIDE7
IH0pOworICAgIGNvbnN0IGZyb21EdXJhdGlvbkxpa2UgPSBUZW1wb3JhbC5EdXJhdGlvbi5mcm9t
KGR1cmF0aW9uTGlrZSk7CisKKyAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAg
ICAgICBzaG91bGRCZShmcm9tU3RyaW5nW2ZpZWxkXSwgcG9zW2ZpZWxkXSk7CisgICAgICAgIHNo
b3VsZEJlKGZyb21EdXJhdGlvbkxpa2VbZmllbGRdLCBwb3NbZmllbGRdKTsKKyAgICB9Cit9Citz
aG91bGROb3RUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKGBQJHtBcnJheSgzMDgp
LmZpbGwoOSkuam9pbignJyl9WWApKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20o
J+KIknAxeTJtM3c0ZHQ1aDZtNywwMDgwMDkwMTBzJykudG9TdHJpbmcoKSwgJy1QMVkyTTNXNERU
NUg2TTcuMDA4MDA5MDFTJyk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5mcm9tKCcrUDFZ
MkRUM0g0LjBTJykudG9TdHJpbmcoKSwgJ1AxWTJEVDNINFMnKTsKK3Nob3VsZEJlKFRlbXBvcmFs
LkR1cmF0aW9uLmZyb20oJ1BUMS4wMzEyNUgnKS50b1N0cmluZygpLCAnUFQxSDFNNTIuNVMnKTsK
K3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1BUMS4wMzEyNU0nKS50b1N0cmluZygp
LCAnUFQxTTEuODc1UycpOworCitjb25zdCBwb3NBYnNvbHV0ZSA9IG5ldyBUZW1wb3JhbC5EdXJh
dGlvbigwLDAsMCwxLDIsMyw0LDUsNiw3KTsKKworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24u
Y29tcGFyZS5sZW5ndGgsIDIpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24u
Y29tcGFyZSgpLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0
aW9uLmNvbXBhcmUoe30pLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwu
RHVyYXRpb24uY29tcGFyZSh6ZXJvKSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBU
ZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHplcm8sIHt9KSwgVHlwZUVycm9yKTsKK3Nob3VsZFRo
cm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoeyB5ZWFyczogMSB9LCB6ZXJvKSwg
UmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJl
KHsgbW9udGhzOiAxIH0sIHplcm8pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRl
bXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUoeyB3ZWVrczogMSB9LCB6ZXJvKSwgUmFuZ2VFcnJvcik7
CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHplcm8sIHsgeWVh
cnM6IDEgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRp
b24uY29tcGFyZSh6ZXJvLCB7IG1vbnRoczogMSB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJv
dygoKSA9PiBUZW1wb3JhbC5EdXJhdGlvbi5jb21wYXJlKHplcm8sIHsgd2Vla3M6IDEgfSksIFJh
bmdlRXJyb3IpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uY29tcGFyZShwb3NBYnNvbHV0
ZSwgcG9zQWJzb2x1dGUpLCAwKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBhcmUo
cG9zQWJzb2x1dGUsIHplcm8pLCAxKTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmNvbXBh
cmUoemVybywgcG9zQWJzb2x1dGUpLCAtMSk7CitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5j
b21wYXJlKCdQVDg2NDAwUycsICdQMUQnKSwgMCk7CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0
aW9uLnByb3RvdHlwZS53aXRoLmxlbmd0aCwgMSk7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3Jh
bC5EdXJhdGlvbi5wcm90b3R5cGUud2l0aC5jYWxsKHt9LCB7IHllYXJzOiAxIH0pLCBUeXBlRXJy
b3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby53aXRoKCksIFR5cGVFcnJvcik7CitzaG91bGRU
aHJvdygoKSA9PiB6ZXJvLndpdGgoe30pLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4g
emVyby53aXRoKHsgeWVhcnM6IDEuMSB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9
PiBwb3Mud2l0aCh7IHllYXJzOiAtMSB9KSwgUmFuZ2VFcnJvcik7Cit7CisgICAgY29uc3QgZnVs
bHlVcGRhdGVkID0gcG9zLndpdGgobmVnKTsKKyAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxk
cykgeworICAgICAgICBzaG91bGRCZSh6ZXJvLndpdGgoeyBbZmllbGRdOiAxIH0pW2ZpZWxkXSwg
MSk7CisgICAgICAgIHNob3VsZEJlKGZ1bGx5VXBkYXRlZFtmaWVsZF0sIG5lZ1tmaWVsZF0pOwor
ICAgIH0KK30KKworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLm5lZ2F0ZWQu
bGVuZ3RoLCAwKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlw
ZS5uZWdhdGVkLmNhbGwoe30pLCBUeXBlRXJyb3IpOworeworICAgIGNvbnN0IG5lZ2F0ZWRaZXJv
ID0gemVyby5uZWdhdGVkKCk7CisgICAgY29uc3QgbmVnYXRlZFBvcyA9IHBvcy5uZWdhdGVkKCk7
CisgICAgY29uc3QgbmVnYXRlZE5lZyA9IG5lZy5uZWdhdGVkKCk7CisgICAgZm9yIChjb25zdCBm
aWVsZCBvZiBmaWVsZHMpIHsKKyAgICAgICAgc2hvdWxkQmUobmVnYXRlZFplcm9bZmllbGRdLCB6
ZXJvW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKG5lZ2F0ZWROZWdbZmllbGRdLCBwb3NbZmll
bGRdKTsKKyAgICAgICAgc2hvdWxkQmUobmVnYXRlZFBvc1tmaWVsZF0sIG5lZ1tmaWVsZF0pOwor
ICAgIH0KK30KKworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmFicy5sZW5n
dGgsIDApOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBlLmFi
cy5jYWxsKHt9KSwgVHlwZUVycm9yKTsKK3sKKyAgICBjb25zdCBhYnNaZXJvID0gemVyby5hYnMo
KTsKKyAgICBjb25zdCBhYnNQb3MgPSBwb3MuYWJzKCk7CisgICAgY29uc3QgYWJzTmVnID0gbmVn
LmFicygpOworICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7CisgICAgICAgIHNob3Vs
ZEJlKGFic1plcm9bZmllbGRdLCB6ZXJvW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKGFic1Bv
c1tmaWVsZF0sIHBvc1tmaWVsZF0pOworICAgICAgICBzaG91bGRCZShhYnNOZWdbZmllbGRdLCBw
b3NbZmllbGRdKTsKKyAgICB9Cit9CisKK2ZvciAoY29uc3QgbWV0aG9kIG9mIFsnYWRkJywgJ3N1
YnRyYWN0J10pIHsKKyAgICBzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGVbbWV0
aG9kXS5sZW5ndGgsIDEpOworICAgIHNob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9u
LnByb3RvdHlwZVttZXRob2RdLmNhbGwoeyBob3VyczogMSB9KSwgVHlwZUVycm9yKTsKKyAgICBz
aG91bGRUaHJvdygoKSA9PiB6ZXJvW21ldGhvZF0oKSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxk
VGhyb3coKCkgPT4gemVyb1ttZXRob2RdKHt9KSwgVHlwZUVycm9yKTsKKyAgICBzaG91bGRUaHJv
dygoKSA9PiB6ZXJvW21ldGhvZF0oeyB5ZWFyczogMSB9KSwgUmFuZ2VFcnJvcik7CisgICAgc2hv
dWxkVGhyb3coKCkgPT4gemVyb1ttZXRob2RdKHsgbW9udGhzOiAxIH0pLCBSYW5nZUVycm9yKTsK
KyAgICBzaG91bGRUaHJvdygoKSA9PiB6ZXJvW21ldGhvZF0oeyB3ZWVrczogMSB9KSwgUmFuZ2VF
cnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gcG9zW21ldGhvZF0oeyBzZWNvbmRzOiAxIH0p
LCBSYW5nZUVycm9yKTsKK30KK3sKKyAgICBjb25zdCBwb3NEdXJhdGlvbkxpa2UgPSB7IGRheXM6
IDEsIGhvdXJzOiAyLCBtaW51dGVzOiAzLCBzZWNvbmRzOiA0LCBtaWxsaXNlY29uZHM6IDUsIG1p
Y3Jvc2Vjb25kczogNiwgbmFub3NlY29uZHM6IDcgfTsKKyAgICBjb25zdCBuZWdTdHJpbmcgPSAn
LVAxRFQySDNNNC4wMDUwMDYwMDdTJzsKKworICAgIGNvbnN0IGFkZFplcm8gPSBwb3NBYnNvbHV0
ZS5hZGQoemVybyk7CisgICAgY29uc3QgYWRkUG9zID0gcG9zQWJzb2x1dGUuYWRkKHBvc0R1cmF0
aW9uTGlrZSk7CisgICAgY29uc3QgYWRkTmVnID0gcG9zQWJzb2x1dGUuYWRkKG5lZ1N0cmluZyk7
CisgICAgY29uc3Qgc3ViWmVybyA9IHBvc0Fic29sdXRlLnN1YnRyYWN0KHplcm8pOworICAgIGNv
bnN0IHN1YlBvcyA9IHBvc0Fic29sdXRlLnN1YnRyYWN0KHBvc0R1cmF0aW9uTGlrZSk7CisgICAg
Y29uc3Qgc3ViTmVnID0gcG9zQWJzb2x1dGUuc3VidHJhY3QobmVnU3RyaW5nKTsKKyAgICBmb3Ig
KGNvbnN0IGZpZWxkIG9mIGZpZWxkcykgeworICAgICAgICBzaG91bGRCZShhZGRaZXJvW2ZpZWxk
XSwgcG9zQWJzb2x1dGVbZmllbGRdKTsKKyAgICAgICAgc2hvdWxkQmUoYWRkUG9zW2ZpZWxkXSwg
MiAqIHBvc0Fic29sdXRlW2ZpZWxkXSk7CisgICAgICAgIHNob3VsZEJlKGFkZE5lZ1tmaWVsZF0s
IDApOworICAgICAgICBzaG91bGRCZShzdWJaZXJvW2ZpZWxkXSwgcG9zQWJzb2x1dGVbZmllbGRd
KTsKKyAgICAgICAgc2hvdWxkQmUoc3ViUG9zW2ZpZWxkXSwgMCk7CisgICAgICAgIHNob3VsZEJl
KHN1Yk5lZ1tmaWVsZF0sIDIgKiBwb3NBYnNvbHV0ZVtmaWVsZF0pOworICAgIH0KK30KK3Nob3Vs
ZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxRFQxM0gzMU0zMVMnKS5hZGQoJ1AxRFQxM0gz
MU0zMVMnKS50b1N0cmluZygpLCAnUDNEVDNIM00yUycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVy
YXRpb24uZnJvbSgnLVBUMU01OVMnKS5zdWJ0cmFjdCgnUFQxTTU5UycpLnRvU3RyaW5nKCksICct
UFQzTTU4UycpOworCitzaG91bGRCZShUZW1wb3JhbC5EdXJhdGlvbi5wcm90b3R5cGUucm91bmQu
bGVuZ3RoLCAxKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlw
ZS5yb3VuZC5jYWxsKHt9KSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ucm91
bmQoKSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ucm91bmQoe30pLCBSYW5n
ZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHplcm8ucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdi
b2d1cycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby5yb3VuZCh7IGxh
cmdlc3RVbml0OiAnYm9ndXMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IHpl
cm8ucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdob3VyJywgbGFyZ2VzdFVuaXQ6ICduYW5vc2Vjb25k
JyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLnJvdW5kKHsgc21hbGxl
c3RVbml0OiAnbmFub3NlY29uZCcsIHJvdW5kaW5nTW9kZTogJ2JvZ3VzJyB9KSwgUmFuZ2VFcnJv
cik7CitzaG91bGRUaHJvdygoKSA9PiB6ZXJvLnJvdW5kKHsgc21hbGxlc3RVbml0OiAnbmFub3Nl
Y29uZCcsIHJvdW5kaW5nSW5jcmVtZW50OiAzIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93
KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxWScpLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6
ICdzZWNvbmRzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5E
dXJhdGlvbi5mcm9tKCdQMU0nKS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnc2Vjb25kcycgfSksIFJh
bmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFX
Jykucm91bmQoeyBsYXJnZXN0VW5pdDogJ3NlY29uZHMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3Vs
ZFRocm93KCgpID0+IFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJ1AxRCcpLnJvdW5kKHsgbGFyZ2Vz
dFVuaXQ6ICdtb250aHMnIH0pLCBSYW5nZUVycm9yKTsKK3Nob3VsZFRocm93KCgpID0+IFRlbXBv
cmFsLkR1cmF0aW9uLmZyb20oJ1AxRCcpLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICd3ZWVrcycgfSks
IFJhbmdlRXJyb3IpOworc2hvdWxkQmUocG9zQWJzb2x1dGUucm91bmQoeyBsYXJnZXN0VW5pdDog
J2RheScgfSkudG9TdHJpbmcoKSwgJ1AxRFQySDNNNC4wMDUwMDYwMDdTJyk7CitzaG91bGRCZShw
b3NBYnNvbHV0ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnYXV0bycgfSkudG9TdHJpbmcoKSwgJ1Ax
RFQySDNNNC4wMDUwMDYwMDdTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IHNtYWxs
ZXN0VW5pdDogJ2RheScgfSkudG9TdHJpbmcoKSwgJ1AxRCcpOworc2hvdWxkQmUocG9zQWJzb2x1
dGUucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmQnIH0pLnRvU3RyaW5nKCksICdQMURUMkgz
TTRTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnaG91cics
IHNtYWxsZXN0VW5pdDogJ3NlY29uZCcgfSkudG9TdHJpbmcoKSwgJ1BUMjZIM000UycpOworc2hv
dWxkQmUocG9zQWJzb2x1dGUucm91bmQoeyBsYXJnZXN0VW5pdDogJ21pbnV0ZScsIHNtYWxsZXN0
VW5pdDogJ3NlY29uZCcgfSkudG9TdHJpbmcoKSwgJ1BUMTU2M000UycpOworc2hvdWxkQmUocG9z
QWJzb2x1dGUucm91bmQoeyBsYXJnZXN0VW5pdDogJ3NlY29uZCcsIHNtYWxsZXN0VW5pdDogJ21p
bGxpc2Vjb25kJyB9KS50b1N0cmluZygpLCAnUFQ5Mzc4NC4wMDVTJyk7CitzaG91bGRCZShwb3NB
YnNvbHV0ZS5yb3VuZCh7IGxhcmdlc3RVbml0OiAnbWlsbGlzZWNvbmQnLCBzbWFsbGVzdFVuaXQ6
ICdtaWNyb3NlY29uZCcgfSkudG9TdHJpbmcoKSwgJ1BUOTM3ODQuMDA1MDA2UycpOworc2hvdWxk
QmUocG9zQWJzb2x1dGUucm91bmQoeyBsYXJnZXN0VW5pdDogJ21pY3Jvc2Vjb25kJywgc21hbGxl
c3RVbml0OiAnbWljcm9zZWNvbmQnIH0pLnRvU3RyaW5nKCksICdQVDkzNzg0LjAwNTAwNlMnKTsK
K3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsgbGFyZ2VzdFVuaXQ6ICduYW5vc2Vjb25kJyB9
KS50b1N0cmluZygpLCAnUFQ5Mzc4NC4wMDUwMDYwMDdTJyk7CitzaG91bGRCZShwb3NBYnNvbHV0
ZS5yb3VuZCh7IHNtYWxsZXN0VW5pdDogJ3NlY29uZCcsIHJvdW5kaW5nSW5jcmVtZW50OiAzMCB9
KS50b1N0cmluZygpLCAnUDFEVDJIM00nKTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnJvdW5kKHsg
c21hbGxlc3RVbml0OiAnc2Vjb25kJywgcm91bmRpbmdJbmNyZW1lbnQ6IDMwLCByb3VuZGluZ01v
ZGU6ICdjZWlsJyB9KS50b1N0cmluZygpLCAnUDFEVDJIM00zMFMnKTsKK3Nob3VsZEJlKFRlbXBv
cmFsLkR1cmF0aW9uLmZyb20oJy1QVDMxUycpLnJvdW5kKHsgc21hbGxlc3RVbml0OiAnc2Vjb25k
Jywgcm91bmRpbmdJbmNyZW1lbnQ6IDMwIH0pLnRvU3RyaW5nKCksICctUFQzMFMnKTsKK3Nob3Vs
ZEJlKFRlbXBvcmFsLkR1cmF0aW9uLmZyb20oJy1QVDMxUycpLnJvdW5kKHsgc21hbGxlc3RVbml0
OiAnc2Vjb25kJywgcm91bmRpbmdJbmNyZW1lbnQ6IDMwLCByb3VuZGluZ01vZGU6ICdmbG9vcicg
fSkudG9TdHJpbmcoKSwgJy1QVDYwUycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVyYXRpb24uZnJv
bSgnLVBUNDVTJykucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmQnLCByb3VuZGluZ0luY3Jl
bWVudDogMzAgfSkudG9TdHJpbmcoKSwgJy1QVDYwUycpOworc2hvdWxkQmUoVGVtcG9yYWwuRHVy
YXRpb24uZnJvbSgnLVBUNDVTJykucm91bmQoeyBzbWFsbGVzdFVuaXQ6ICdzZWNvbmQnLCByb3Vu
ZGluZ0luY3JlbWVudDogMzAsIHJvdW5kaW5nTW9kZTogJ3RydW5jJyB9KS50b1N0cmluZygpLCAn
LVBUMzBTJyk7CisKK3Nob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS50b3RhbC5s
ZW5ndGgsIDEpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJvdG90eXBl
LnRvdGFsLmNhbGwoe30pLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby50b3Rh
bCgpLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gemVyby50b3RhbCh7fSksIFJhbmdl
RXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFZJyku
dG90YWwoeyB1bml0OiAnc2Vjb25kcycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkg
PT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFNJykudG90YWwoeyB1bml0OiAnc2Vjb25kcycg
fSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJv
bSgnUDFXJykudG90YWwoeyB1bml0OiAnc2Vjb25kcycgfSksIFJhbmdlRXJyb3IpOworc2hvdWxk
VGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24uZnJvbSgnUDFEJykudG90YWwoeyB1bml0OiAn
bW9udGhzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBUZW1wb3JhbC5EdXJh
dGlvbi5mcm9tKCdQMUQnKS50b3RhbCh7IHVuaXQ6ICd3ZWVrcycgfSksIFJhbmdlRXJyb3IpOwor
c2hvdWxkQmUocG9zQWJzb2x1dGUudG90YWwoeyB1bml0OiAnZGF5cycgfSksIDEuMDg1NDYzMDIw
OTAyODU4OCk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS50b3RhbCh7IHVuaXQ6ICdob3VycycgfSks
IDI2LjA1MTExMjUwMTY2ODYxMik7CitzaG91bGRCZShwb3NBYnNvbHV0ZS50b3RhbCh7IHVuaXQ6
ICdtaW51dGVzJyB9KSwgMTU2My4wNjY3NTAxMDAxMTY3KTsKK3Nob3VsZEJlKHBvc0Fic29sdXRl
LnRvdGFsKHsgdW5pdDogJ3NlY29uZHMnIH0pLCA5Mzc4NC4wMDUwMDYwMDcpOworc2hvdWxkQmUo
cG9zQWJzb2x1dGUudG90YWwoeyB1bml0OiAnbWlsbGlzZWNvbmRzJyB9KSwgOTM3ODQwMDUuMDA2
MDA3KTsKK3Nob3VsZEJlKHBvc0Fic29sdXRlLnRvdGFsKHsgdW5pdDogJ21pY3Jvc2Vjb25kcycg
fSksIDkzNzg0MDA1MDA2LjAwNyk7CitzaG91bGRCZShwb3NBYnNvbHV0ZS50b3RhbCh7IHVuaXQ6
ICduYW5vc2Vjb25kcycgfSksIDkzNzg0MDA1MDA2MDA3KTsKK3Nob3VsZEJlKFRlbXBvcmFsLkR1
cmF0aW9uLmZyb20oJy1QVDEyMzQ1Njc4OVMnKS50b3RhbCh7IHVuaXQ6ICdkYXknIH0pLCAtMTQy
OC44OTgwMjA4MzMzMzMyKTsKKworLy8gQXQgcHJlc2VudCwgdG9Mb2NhbGVTdHJpbmcgaGFzIHRo
ZSBzYW1lIGJlaGF2aW9yIGFzIHRvSlNPTiBvciBhcmd1bWVudGxlc3MgdG9TdHJpbmcuCitmb3Ig
KGNvbnN0IG1ldGhvZCBvZiBbJ3RvU3RyaW5nJywgJ3RvSlNPTicsICd0b0xvY2FsZVN0cmluZydd
KSB7ICAgIAorICAgIHNob3VsZEJlKFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZVttZXRob2Rd
Lmxlbmd0aCwgMCk7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gVGVtcG9yYWwuRHVyYXRpb24ucHJv
dG90eXBlW21ldGhvZF0uY2FsbCh7fSksIFR5cGVFcnJvcik7CisKKyAgICBzaG91bGRCZSh6ZXJv
W21ldGhvZF0oKSwgJ1BUMFMnKTsKKyAgICBzaG91bGRCZShwb3NbbWV0aG9kXSgpLCAnUDFZMk0z
VzREVDVINk03LjAwODAwOTAxUycpOworICAgIHNob3VsZEJlKG5lZ1ttZXRob2RdKCksICctUDFZ
Mk0zVzREVDVINk03LjAwODAwOTAxUycpOworICAgIAorICAgIHNob3VsZEJlKG5ldyBUZW1wb3Jh
bC5EdXJhdGlvbigxLDEsMSwxKVttZXRob2RdKCksICdQMVkxTTFXMUQnKTsKKyAgICBzaG91bGRC
ZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwxLDEsMSlbbWV0aG9kXSgpLCAnUFQxSDFN
MVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwx
MDApW21ldGhvZF0oKSwgJ1BUMC4xUycpOworICAgIHNob3VsZEJlKG5ldyBUZW1wb3JhbC5EdXJh
dGlvbigwLDAsMCwwLDAsMCwwLDAsMTAwKVttZXRob2RdKCksICdQVDAuMDAwMVMnKTsKKyAgICBz
aG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMCwwLDAsMTAwKVttZXRo
b2RdKCksICdQVDAuMDAwMDAwMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRp
b24oMCwwLDAsMCwwLDAsMSwxMDAxKVttZXRob2RdKCksICdQVDIuMDAxUycpOworICAgIHNob3Vs
ZEJlKG5ldyBUZW1wb3JhbC5EdXJhdGlvbigwLDAsMCwwLDAsMCwwLDEsMTAwMSlbbWV0aG9kXSgp
LCAnUFQwLjAwMjAwMVMnKTsKKyAgICBzaG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCww
LDAsMCwwLDAsMCwwLDEsMTAwMSlbbWV0aG9kXSgpLCAnUFQwLjAwMDAwMjAwMVMnKTsKKyAgICBz
aG91bGRCZShuZXcgVGVtcG9yYWwuRHVyYXRpb24oMCwwLDAsMCwwLDAsMSwxMDAxLDEwMDEsMTAw
MSlbbWV0aG9kXSgpLCAnUFQyLjAwMjAwMjAwMVMnKTsKK30KKworc2hvdWxkQmUocG9zLnRvU3Ry
aW5nKHt9KSwgcG9zLnRvU3RyaW5nKCkpOworCitzaG91bGRUaHJvdygoKSA9PiBwb3MudG9TdHJp
bmcoeyBzbWFsbGVzdFVuaXQ6ICdmb29iYXInIH0pLCBSYW5nZUVycm9yKTsKK2ZvciAoY29uc3Qg
dW5pdCBvZiBbJ3llYXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUn
XSkgeworICAgIHNob3VsZFRocm93KCgpID0+IHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDog
dW5pdCB9KSwgUmFuZ2VFcnJvcik7CisgICAgc2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5n
KHsgc21hbGxlc3RVbml0OiBgJHt1bml0fXNgIH0pLCBSYW5nZUVycm9yKTsKK30KK3Nob3VsZEJl
KHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogJ3NlY29uZHMnIH0pLCAnUDFZMk0zVzREVDVI
Nk03UycpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgc21hbGxlc3RVbml0OiAnbWlsbGlzZWNv
bmRzJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDhTJyk7CitzaG91bGRCZShwb3MudG9TdHJpbmco
eyBzbWFsbGVzdFVuaXQ6ICdtaWNyb3NlY29uZHMnIH0pLCAnUDFZMk0zVzREVDVINk03LjAwODAw
OVMnKTsKK3Nob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogJ25hbm9zZWNvbmRz
JyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDgwMDkwMTBTJyk7Citmb3IgKGNvbnN0IHVuaXQgb2Yg
WydzZWNvbmQnLCAnbWlsbGlzZWNvbmQnLCAnbWljcm9zZWNvbmQnLCAnbmFub3NlY29uZCddKQor
ICAgIHNob3VsZEJlKHBvcy50b1N0cmluZyh7IHNtYWxsZXN0VW5pdDogdW5pdCB9KSwgcG9zLnRv
U3RyaW5nKHsgc21hbGxlc3RVbml0OiBgJHt1bml0fXNgIH0pKTsKKworc2hvdWxkVGhyb3coKCkg
PT4gcG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogLTEgfSksIFJhbmdlRXJy
b3IpOworc2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERp
Z2l0czogMTAgfSksIFJhbmdlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gcG9zLnRvU3RyaW5n
KHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogJ2JvZ3VzJyB9KSwgUmFuZ2VFcnJvcik7CitzaG91
bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAwIH0pLCAnUDFZMk0z
VzREVDVINk03UycpOworY29uc3QgZGVjaW1hbFBhcnQgPSAnMDA4MDA5MDEwJzsKK2ZvciAobGV0
IGkgPSAxOyBpIDwgMTA7IGkrKykKKyAgICBzaG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlv
bmFsU2Vjb25kRGlnaXRzOiBpIH0pLCBgUDFZMk0zVzREVDVINk03LiR7ZGVjaW1hbFBhcnQuc2xp
Y2UoMCxpKX1TYCk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25kRGln
aXRzOiAnYXV0bycgfSksIHBvcy50b1N0cmluZygpKTsKK3Nob3VsZEJlKHplcm8udG9TdHJpbmco
eyBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAyIH0pLCAnUFQwLjAwUycpOworCitzaG91bGRUaHJv
dygoKSA9PiBwb3MudG9TdHJpbmcoeyByb3VuZGluZ01vZGU6ICdib2d1cycgfSksIFJhbmdlRXJy
b3IpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgcm91bmRpbmdNb2RlOiAndHJ1bmMnIH0pLCBw
b3MudG9TdHJpbmcoKSk7CitzaG91bGRCZShwb3MudG9TdHJpbmcoeyBmcmFjdGlvbmFsU2Vjb25k
RGlnaXRzOiA3LCByb3VuZGluZ01vZGU6ICdjZWlsJyB9KSwgJ1AxWTJNM1c0RFQ1SDZNNy4wMDgw
MDkxUycpOworc2hvdWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czog
Miwgcm91bmRpbmdNb2RlOiAnZmxvb3InIH0pLCAnUDFZMk0zVzREVDVINk03LjAwUycpOworc2hv
dWxkQmUocG9zLnRvU3RyaW5nKHsgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMiwgcm91bmRpbmdN
b2RlOiAnaGFsZkV4cGFuZCcgfSksICdQMVkyTTNXNERUNUg2TTcuMDFTJyk7CisKK3Nob3VsZEJl
KFRlbXBvcmFsLkR1cmF0aW9uLnByb3RvdHlwZS52YWx1ZU9mLmxlbmd0aCwgMCk7CitzaG91bGRU
aHJvdygoKSA9PiBuZXcgVGVtcG9yYWwuRHVyYXRpb24oKS52YWx1ZU9mKCksIFR5cGVFcnJvcik7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwgYi9KU1Rlc3RzL3Rlc3Qy
NjIvY29uZmlnLnlhbWwKaW5kZXggNjU3NmJhMzIyOTFiNGFmOTgzMTJhNDE5NmU4Y2Y1OTE4NWZh
MTlkOS4uMTA1ZmRmNDI1Mzk2NTM3Mjg1YTcxNzgwMjUwOWY4ZGUyOTBmYWI2YyAxMDA2NDQKLS0t
IGEvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sCisrKyBiL0pTVGVzdHMvdGVzdDI2Mi9jb25m
aWcueWFtbApAQCAtNiw2ICs2LDcgQEAgZmxhZ3M6CiAgIEFycmF5LnByb3RvdHlwZS5hdDogdXNl
QXRNZXRob2QKICAgVHlwZWRBcnJheS5wcm90b3R5cGUuYXQ6IHVzZUF0TWV0aG9kCiAgIFN0cmlu
Zy5wcm90b3R5cGUuYXQ6IHVzZUF0TWV0aG9kCisgIFRlbXBvcmFsOiB1c2VUZW1wb3JhbAogICBh
cnJheS1maW5kLWZyb20tbGFzdDogdXNlQXJyYXlGaW5kTGFzdE1ldGhvZAogICBPYmplY3QuaGFz
T3duOiB1c2VIYXNPd24KIHNraXA6CkBAIC0xNSwxMiArMTYsMjEgQEAgc2tpcDoKICAgICAtIHJl
Z2V4cC1sb29rYmVoaW5kCiAgICAgLSBjbGVhbnVwU29tZQogICAgIC0gcmVzaXphYmxlLWFycmF5
YnVmZmVyCi0gICAgLSBUZW1wb3JhbAogICAgIC0gaW1wb3J0LWFzc2VydGlvbnMKICAgICAtIGpz
b24tbW9kdWxlcwogICAgIC0gY2xhc3Mtc3RhdGljLWJsb2NrCiAgICAgLSBjYWxsYWJsZS1ib3Vu
ZGFyeS1yZWFsbXMKICAgcGF0aHM6CisgICAgLSB0ZXN0L2J1aWx0LWlucy9UZW1wb3JhbC9DYWxl
bmRhcgorICAgIC0gdGVzdC9idWlsdC1pbnMvVGVtcG9yYWwvSW5zdGFudAorICAgIC0gdGVzdC9i
dWlsdC1pbnMvVGVtcG9yYWwvTm93CisgICAgLSB0ZXN0L2J1aWx0LWlucy9UZW1wb3JhbC9QbGFp
bkRhdGUKKyAgICAtIHRlc3QvYnVpbHQtaW5zL1RlbXBvcmFsL1BsYWluRGF0ZVRpbWUKKyAgICAt
IHRlc3QvYnVpbHQtaW5zL1RlbXBvcmFsL1BsYWluTW9udGhEYXkKKyAgICAtIHRlc3QvYnVpbHQt
aW5zL1RlbXBvcmFsL1BsYWluVGltZQorICAgIC0gdGVzdC9idWlsdC1pbnMvVGVtcG9yYWwvUGxh
aW5ZZWFyTW9udGgKKyAgICAtIHRlc3QvYnVpbHQtaW5zL1RlbXBvcmFsL1RpbWVab25lCisgICAg
LSB0ZXN0L2J1aWx0LWlucy9UZW1wb3JhbC9ab25lZERhdGVUaW1lCiAgIGZpbGVzOgogICAgICMg
aHR0cHM6Ly9naXRodWIuY29tL2NsYXVkZXBhY2hlL2VzLWxlZ2FjeS1mdW5jdGlvbi1yZWZsZWN0
aW9uCiAgICAgLSB0ZXN0L2J1aWx0LWlucy9UaHJvd1R5cGVFcnJvci91bmlxdWUtcGVyLXJlYWxt
LWZ1bmN0aW9uLXByb3RvLmpzCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>